From bdccfc56810fc51d2f522072123de027603b8938 Mon Sep 17 00:00:00 2001 From: WizardLoop Date: Thu, 22 Oct 2026 22:20:22 +0300 Subject: [PATCH 1/4] Upgrade runtime to MadelineProto 8.11.10 and Layer 232 with verified compatibility --- .env.example | 2 +- Dockerfile | 1 - THIRD_PARTY_NOTICES.md | 27 +- VERSION | 2 +- bin/import-legacy.php | 28 +- bin/self-check.php | 2 +- composer.json | 2 +- composer.lock | 3591 ++- .../madelineproto-formatted-date/README.md | 29 - .../baseline/MessageEntity.php | 84 - .../baseline/TL_telegram_v225.tl | 2979 --- .../formatted-date-entity.patch | 126 - .../manifest.json | 59 - .../reviewed/FormattedDate.php | 112 - .../reviewed/MessageEntity.php | 86 - .../upstream-LICENSE | 661 - patches/madelineproto-fresh-peer/README.md | 12 +- .../baseline/PeerHandler.php | 90 +- .../fresh-full-peer-response.patch | 72 +- .../madelineproto-fresh-peer/manifest.json | 19 +- .../reviewed/PeerHandler.php | 90 +- patches/madelineproto-geopoint/README.md | 15 - .../baseline/GeoPoint.php | 37 - .../geopoint-double-coordinates.patch | 12 - patches/madelineproto-geopoint/manifest.json | 27 - .../reviewed/GeoPoint.php | 37 - patches/madelineproto/README.md | 60 - patches/madelineproto/baseline/UpdateLoop.php | 263 - patches/madelineproto/generate-artifacts.php | 69 - patches/madelineproto/manifest.json | 38 - .../madelineproto/original-reference.patch | 536 - patches/madelineproto/original-reference.php | 148 - .../update-loop-timeout-cancellation.patch | 543 - resources/locales/en.json | 3 + resources/locales/es.json | 3 + resources/locales/fr.json | 3 + resources/locales/he.json | 3 + resources/locales/pt-br.json | 3 + resources/locales/ru.json | 3 + resources/release/README.md | 16 +- .../.gitattributes.source | 4 + .../madelineproto-build-inputs/.gitmodules | 15 + .../madelineproto-build-inputs/README.md | 169 +- .../madelineproto-build-inputs/composer.json | 95 +- .../madelineproto-build-inputs/langs/ar.json | 274 + .../madelineproto-build-inputs/langs/ckb.json | 243 +- .../madelineproto-build-inputs/langs/de.json | 275 +- .../madelineproto-build-inputs/langs/en.json | 119 +- .../madelineproto-build-inputs/langs/es.json | 274 + .../madelineproto-build-inputs/langs/fa.json | 236 +- .../madelineproto-build-inputs/langs/fr.json | 287 +- .../madelineproto-build-inputs/langs/he.json | 174 +- .../madelineproto-build-inputs/langs/hi.json | 274 + .../madelineproto-build-inputs/langs/id.json | 274 + .../madelineproto-build-inputs/langs/it.json | 286 +- .../madelineproto-build-inputs/langs/ja.json | 274 + .../madelineproto-build-inputs/langs/ko.json | 274 + .../madelineproto-build-inputs/langs/pl.json | 274 +- .../madelineproto-build-inputs/langs/pt.json | 201 +- .../madelineproto-build-inputs/langs/ru.json | 298 +- .../madelineproto-build-inputs/langs/tr.json | 274 + .../madelineproto-build-inputs/langs/uk.json | 274 + .../madelineproto-build-inputs/langs/uz.json | 248 +- .../madelineproto-build-inputs/langs/vi.json | 274 + .../langs/{zh_Hans.json => zh.json} | 230 +- .../schemas/TL_telegram_v225_file_ref_map.dat | Bin 54304 -> 0 bytes .../TL_telegram_v225_file_ref_map.json | 1 - ...legram_v225.json => TL_telegram_v232.json} | 18616 ++++++++++------ ...L_telegram_v225.tl => TL_telegram_v232.tl} | 426 +- .../schemas/TL_telegram_v232_file_ref_map.dat | Bin 0 -> 64036 bytes .../TL_telegram_v232_file_ref_map.json | 1 + ...TL_telegram_v232_file_ref_map_schema.json} | 47 +- ...> TL_telegram_v232_file_ref_map_schema.tl} | 9 +- .../schemas/list.json | 2 +- .../schemas/list_file_ref_map.json | 2 +- .../tools/AnnotationsBuilder.php | 22 +- .../tools/DocsBuilder.php | 4 +- .../tools/FileRefExtractor/BuildMode/Ast.php | 41 +- .../FileRefExtractor/FileRefGenerator.php | 52 +- .../FileRefExtractor/Ops/GetMessageOp.php | 15 +- .../tools/TL/Builder.php | 2 +- .../tools/build_docs.php | 4 +- .../tools/build_docs/schemas.php | 31 +- .../tools/fix_docs.sh | 2 +- .../tools/fuzzer.php | 163 +- .../tools/layerdiff.php | 50 +- .../tools/makephar.php | 7 +- .../madelineproto-build-inputs/tools/phar.php | 11 +- .../tools/phpdoc.php | 1 + .../tools/translator.php | 55 +- .../additional-source/php-rtc-av/README.md | 47 + resources/release/source-manifest.json | 11434 ++++++---- scripts/apply-patches.php | 1 - scripts/dependencies.php | 5 +- scripts/package-development.php | 2 +- src/Content/DateEntity.php | 44 + src/Content/TemplateEditor.php | 2 +- src/Content/TemplateRenderer.php | 38 +- src/Runtime/AddedFilePatchManager.php | 267 - src/Runtime/Application.php | 3 +- src/Runtime/MadelineGateway.php | 77 +- src/Runtime/PatchManager.php | 15 +- src/Runtime/PatchSet.php | 2 +- src/Runtime/ReleaseInputs.php | 2 +- src/Runtime/Runner.php | 2 +- src/Scheduling/Permissions.php | 5 +- src/Storage/LegacyImporter.php | 298 +- src/Telegram/AdminRights.php | 4 +- src/Telegram/KeyboardMarkup.php | 359 + tests/AdminRightsTest.php | 4 +- tests/CustomEmojiFallbackTest.php | 2 +- tests/DiagnosticsTransportTest.php | 3 +- tests/Fixtures/PatchLoop/MTProto.php | 8 + tests/FormattedDateEntityTest.php | 68 +- tests/FormattedDatePatchTest.php | 242 - tests/FreshPeerPatchTest.php | 6 +- tests/FreshPeerReaderTest.php | 16 +- tests/GeoPointCompatibilityTest.php | 34 + tests/GeoPointPatchTest.php | 194 - tests/GroupModerationStorageTest.php | 4 +- tests/InlineSerializationTest.php | 6 +- tests/KeyboardCompatibilityTest.php | 272 + tests/LegacyImportVerificationTest.php | 245 + tests/NativeRpcContractTest.php | 2 +- tests/PatchBehaviorTest.php | 61 - tests/PatchGitBytesTest.php | 19 +- tests/PatchInstallTest.php | 20 +- tests/PatchLoopHarness.php | 37 - tests/PermissionLayerCompatibilityTest.php | 198 + tests/PresentationTest.php | 7 +- tests/RuntimeGatewayTest.php | 7 +- tests/SdkShutdownBarrierTest.php | 136 + tests/SdkWorkerIsolationTest.php | 75 + tests/SourceInputsTest.php | 66 +- tests/TefillinAckGatewayTest.php | 6 +- tests/UITemplateTest.php | 4 +- tests/UITest.php | 6 +- tests/UpdateLoopCompatibilityTest.php | 94 + tests/UpdateLoopHarness.php | 53 + 139 files changed, 28982 insertions(+), 20597 deletions(-) delete mode 100644 patches/madelineproto-formatted-date/README.md delete mode 100644 patches/madelineproto-formatted-date/baseline/MessageEntity.php delete mode 100644 patches/madelineproto-formatted-date/baseline/TL_telegram_v225.tl delete mode 100644 patches/madelineproto-formatted-date/formatted-date-entity.patch delete mode 100644 patches/madelineproto-formatted-date/manifest.json delete mode 100644 patches/madelineproto-formatted-date/reviewed/FormattedDate.php delete mode 100644 patches/madelineproto-formatted-date/reviewed/MessageEntity.php delete mode 100644 patches/madelineproto-formatted-date/upstream-LICENSE delete mode 100644 patches/madelineproto-geopoint/README.md delete mode 100644 patches/madelineproto-geopoint/baseline/GeoPoint.php delete mode 100644 patches/madelineproto-geopoint/geopoint-double-coordinates.patch delete mode 100644 patches/madelineproto-geopoint/manifest.json delete mode 100644 patches/madelineproto-geopoint/reviewed/GeoPoint.php delete mode 100644 patches/madelineproto/README.md delete mode 100644 patches/madelineproto/baseline/UpdateLoop.php delete mode 100644 patches/madelineproto/generate-artifacts.php delete mode 100644 patches/madelineproto/manifest.json delete mode 100644 patches/madelineproto/original-reference.patch delete mode 100644 patches/madelineproto/original-reference.php delete mode 100644 patches/madelineproto/update-loop-timeout-cancellation.patch create mode 100644 resources/release/preferred-source/additional-source/madelineproto-build-inputs/.gitmodules create mode 100644 resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/ar.json create mode 100644 resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/es.json create mode 100644 resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/hi.json create mode 100644 resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/id.json create mode 100644 resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/ja.json create mode 100644 resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/ko.json create mode 100644 resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/tr.json create mode 100644 resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/uk.json create mode 100644 resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/vi.json rename resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/{zh_Hans.json => zh.json} (60%) delete mode 100644 resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225_file_ref_map.dat delete mode 100644 resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225_file_ref_map.json rename resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/{TL_telegram_v225.json => TL_telegram_v232.json} (90%) rename resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/{TL_telegram_v225.tl => TL_telegram_v232.tl} (86%) create mode 100644 resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232_file_ref_map.dat create mode 100644 resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232_file_ref_map.json rename resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/{TL_telegram_v225_file_ref_map_schema.json => TL_telegram_v232_file_ref_map_schema.json} (96%) rename resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/{TL_telegram_v225_file_ref_map_schema.tl => TL_telegram_v232_file_ref_map_schema.tl} (88%) create mode 100644 resources/release/preferred-source/additional-source/php-rtc-av/README.md create mode 100644 src/Content/DateEntity.php delete mode 100644 src/Runtime/AddedFilePatchManager.php create mode 100644 src/Telegram/KeyboardMarkup.php delete mode 100644 tests/FormattedDatePatchTest.php create mode 100644 tests/GeoPointCompatibilityTest.php delete mode 100644 tests/GeoPointPatchTest.php create mode 100644 tests/KeyboardCompatibilityTest.php create mode 100644 tests/LegacyImportVerificationTest.php delete mode 100644 tests/PatchBehaviorTest.php delete mode 100644 tests/PatchLoopHarness.php create mode 100644 tests/PermissionLayerCompatibilityTest.php create mode 100644 tests/SdkShutdownBarrierTest.php create mode 100644 tests/SdkWorkerIsolationTest.php create mode 100644 tests/UpdateLoopCompatibilityTest.php create mode 100644 tests/UpdateLoopHarness.php diff --git a/.env.example b/.env.example index d9b5a33..320cf0d 100644 --- a/.env.example +++ b/.env.example @@ -9,6 +9,6 @@ LEGACY_DATA_PATH=. HEARTBEAT_PATH=data/scheduler-heartbeat.json GEONAMES_USERNAME= GEONAMES_ENDPOINT=https://secure.geonames.org -SOURCE_URL=https://github.com/WizardLoop/shabbat/releases/tag/v3.0.0 +SOURCE_URL=https://github.com/WizardLoop/shabbat/releases/tag/v3.1.0 CUSTOM_EMOJI_ENABLED=1 diff --git a/Dockerfile b/Dockerfile index fd2a1dc..f0f4674 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,7 +18,6 @@ WORKDIR /app COPY composer.json composer.lock ./ COPY patches ./patches COPY scripts ./scripts -COPY src/Runtime/AddedFilePatchManager.php ./src/Runtime/AddedFilePatchManager.php COPY src/Runtime/PatchManager.php ./src/Runtime/PatchManager.php COPY src/Runtime/PatchSet.php ./src/Runtime/PatchSet.php COPY src/Runtime/SingleInstance.php ./src/Runtime/SingleInstance.php diff --git a/THIRD_PARTY_NOTICES.md b/THIRD_PARTY_NOTICES.md index 9c03394..a0c53ae 100644 --- a/THIRD_PARTY_NOTICES.md +++ b/THIRD_PARTY_NOTICES.md @@ -1,21 +1,22 @@ # Third-party notices -WizardLoop Shabbat **3.0.0** is distributed as an **AGPL-3.0-only** application. Dependency, historical-source and data licenses retain their own scope. The full application license is in [LICENSE](LICENSE); the [licensing guide](docs/LICENSING.md) explains the source offer. Exact locked versions, sources, license paths and findings are recorded in the [dependency inventory](docs/dependencies.json). +WizardLoop Shabbat **3.1.0** uses **AGPL-3.0-only** for the combined application. Dependencies, historical source and data retain their own grants and notices. The complete application license is in [LICENSE](LICENSE); exact versions, source revisions, license files and findings are in the [dependency inventory](docs/dependencies.json). ## Code and tools -| Component | Source and license | Attribution and local changes | +| Component | Source and license evidence | Attribution and local changes | |---|---|---| -| Original WizardLoop Shabbat | [WizardLoop/shabbat](https://github.com/WizardLoop/shabbat), historical MIT | Copyright (c) 2024 WizardLoop. The complete original grant is retained in [SHABBAT-LEGACY-MIT.txt](LICENSES/SHABBAT-LEGACY-MIT.txt); earlier grants remain effective. | -| MadelineProto 8.7.0 | [Pinned source](https://github.com/danog/MadelineProto/tree/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed), package metadata AGPL-3.0-only | Preserve its distributed license and copyright headers. Four local compatibility patches cover update-loop cancellation, fractional coordinates, formatted-date entities and fresh full-peer response evidence. | -| WizardLoop BroadcastManager 3.2.2 | [Pinned source](https://github.com/WizardLoop/BroadcastManager/tree/f2792a383416b66bb68e55f09414563e540538d6), AGPL-3.0-only | Preserve WizardLoop notices. The local patch adds presentation, message-transport, authorization, cancellation and joined-worker lifecycle hooks. | -| Amp and Revolt | [Amp](https://github.com/amphp) and [Revolt](https://github.com/revoltphp/event-loop), MIT | Distributed author/copyright notices remain in their packages. Exact direct and transitive versions are in the inventory. | -| Development tools | PHPUnit and PHP_CodeSniffer: BSD-3-Clause; PHPStan: MIT | Locked tool and transitive-package notices are inventoried separately from runtime dependencies. The runtime corresponding-source archive does not bundle the development tools. | -| SQLite | [SQLite public-domain dedication](https://sqlite.org/copyright.html) | External PHP-loaded runtime library. The Dockerfile identifies the reviewed source version and checksum; SQLite is not relicensed as application code. | +| Original WizardLoop Shabbat | [WizardLoop/shabbat](https://github.com/WizardLoop/shabbat), historical MIT | Copyright (c) 2024 WizardLoop. The original [MIT grant](LICENSES/SHABBAT-LEGACY-MIT.txt) remains effective. | +| MadelineProto 8.11.10 | [Pinned source](https://github.com/danog/MadelineProto/tree/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1), metadata AGPL-3.0-only; source headers version 3 or later | Preserve original notices. One local PeerHandler patch exposes fresh full-peer response evidence. Official UpdateLoop, GeoPoint and FormattedDate source replaces those former local patches. | +| WizardLoop BroadcastManager 3.2.2 | [Pinned source](https://github.com/WizardLoop/BroadcastManager/tree/f2792a383416b66bb68e55f09414563e540538d6), AGPL-3.0-only | Preserve WizardLoop notices. The local patch supplies presentation, transport, authorization, cancellation and joined-worker lifecycle hooks. | +| Amp and Revolt | [Amp](https://github.com/amphp), [Revolt](https://github.com/revoltphp/event-loop), MIT | Original package notices remain attached; Windows helper source is supplied separately with its MIT license. | +| PHP RTC components | [danog repositories](https://github.com/danog), exact pins in the inventory | Most declare BSD-3-Clause. **php-rtc-av declares MIT in metadata but distributes a BSD-3-Clause LICENSE and BSD source headers.** Both are preserved; the MIT declaration is not confirmed by its distributed license. Optional FFmpeg/native libraries are not included. | +| Development tools | PHPUnit/PHP_CodeSniffer: BSD-3-Clause; PHPStan: MIT | All 26 development packages are inventoried separately and excluded from the runtime source collection. | +| SQLite | [Public-domain dedication](https://sqlite.org/copyright.html) | External PHP-loaded library. Docker pins its source checksum; it is not relicensed as application code. | -There are **five active patch sets**. Their original sources, approved intermediate sources, diffs, added source and SHA-256 manifests are preserved under [patches/](patches). [Technical provenance](docs/THIRD_PARTY_DETAILS.md) records exact identities and historical changes. Installation verifies them before startup; running vendor trees must not be changed. +There are **two active patch sets**, with immutable baselines, reviewed outputs, diffs and SHA-256 manifests under [patches](patches). Installation applies and verifies them before startup. Do not modify a running vendor tree. [Technical provenance](docs/THIRD_PARTY_DETAILS.md) records their identities and the retirement of earlier patches. Using official SDK code does not establish that every shutdown regression is resolved. -MadelineProto package metadata says `AGPL-3.0-only`, while retained source headers allow version 3 or later. The new formatted-date wrapper also grants `AGPL-3.0-or-later`. These grants are preserved; the combined application's policy uses version 3. The metadata/header difference remains a recorded finding. +The source collection contains 83 locked runtime packages and pinned preferred-source supplements. It is not a complete operating-system/container source distribution or a claim of reproducible native binary rebuilding. [Licensing and archive scope](docs/LICENSING.md) records the boundaries and unresolved provenance evidence. ## Data and text @@ -29,10 +30,10 @@ MadelineProto package metadata says `AGPL-3.0-only`, while retained source heade The complete [CC-BY-4.0](LICENSES/CC-BY-4.0.txt) and [CC-BY-SA-4.0](LICENSES/CC-BY-SA-4.0.txt) terms are retained unchanged. [Detailed resource provenance](docs/THIRD_PARTY_DETAILS.md#data-provenance) links the exact fixture records and Wikisource revisions. Traditional underlying liturgy is distinguished from the separately attributed transcription/editorial resource; no complete modern siddur is claimed. -## References and unresolved evidence +## References and historical evidence -[JewishPulse](https://github.com/WizardLoop/JewishPulse/tree/d7b06eb1acb206543dcff35a7c14ebce4760b4e5), AGPL-3.0-only, informed the interface comparison and documentation structure. Its branding and hardcoded bot links are not used. The [feature comparison](docs/FEATURE_PARITY.md) describes the reference relationship. +[JewishPulse](https://github.com/WizardLoop/JewishPulse/tree/d7b06eb1acb206543dcff35a7c14ebce4760b4e5), AGPL-3.0-only, informed the interface comparison and documentation organization. Its branding and hardcoded bot links are not used; this is a historical reference relationship. No third-party graphic asset was added. Telegram standard emoji and button metadata are interface features. Provenance of an older remote thumbnail is unestablished; current inline results do not depend on it. -Historical formatted-date reference exports had conflicting project declarations and no recovered standalone grant or Git history. Their hashes and findings are retained in [the provenance review](docs/MADELINE_FORMATTED_DATE.md); those original exports are not redistributed. On 2026-10-16, the project maintainer stated that they authored the retained historical UpdateLoop helper and explicitly authorized distribution under AGPL-3.0-only. The dated, hash-scoped attestation is recorded in [its manifest](patches/madelineproto/manifest.json); the original helper bytes remain unchanged. This records the maintainer's statement, not an independent legal certification. +The former local UpdateLoop helper, GeoPoint patch and independently authored formatted-date wrapper are no longer shipped in this source tree. Earlier releases retain their historical notices and hash-scoped provenance. The maintainer's 2026-10-16 authorization of the historical UpdateLoop helper is limited to that exact prior helper; it does not change dependency grants. Historical formatted-date exports with conflicting project declarations were never redistributed. [Technical provenance](docs/THIRD_PARTY_DETAILS.md) retains their identifying hashes without treating them as active installation inputs. diff --git a/VERSION b/VERSION index 4a36342..fd2a018 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.0.0 +3.1.0 diff --git a/bin/import-legacy.php b/bin/import-legacy.php index 7523e65..10ac453 100644 --- a/bin/import-legacy.php +++ b/bin/import-legacy.php @@ -9,7 +9,7 @@ use Shabbat\Storage\Database; use Shabbat\Storage\LegacyImporter; use Shabbat\Time\SystemClock; -$options = getopt('', ['db:','legacy:','dry-run','apply','writers-stopped','backup-dir:']); +$options = getopt('', ['db:','legacy:','dry-run','apply','writers-stopped','backup-dir:','expect-report:']); try { if (!isset($options['legacy'])) { throw new RuntimeException('Specify the read-only legacy source using --legacy=/path/to/old/bot or /path/to/data.'); @@ -18,6 +18,22 @@ throw new RuntimeException('Choose either --dry-run or --apply.'); } $dryRun = !isset($options['apply']); + $expectedReport = null; + if (isset($options['expect-report'])) { + $reportPath = (string)$options['expect-report']; + if (!is_file($reportPath) || is_link($reportPath) || filesize($reportPath) > 16 * 1024 * 1024) { + throw new RuntimeException('Expected report must be a readable regular JSON file of at most 16 MiB.'); + } + $contents = file_get_contents($reportPath); + if ($contents === false) { + throw new RuntimeException('Cannot read the expected legacy report.'); + } + $expectedReport = json_decode($contents, true, 64, JSON_THROW_ON_ERROR); + if (!is_array($expectedReport)) { + throw new RuntimeException('Expected report must contain a dry-run JSON object.'); + } + } + $backup = null; $path = (string)($options['db'] ?? \Shabbat\Runtime\RuntimePaths::resolve(dirname(__DIR__))->databasePath); if (!$dryRun) { if (!isset($options['writers-stopped'])) { @@ -31,14 +47,20 @@ } $lock = new InstanceLock($path . '.writer.lock'); $db = Database::open($path); - (new BackupService())->backup($db, $options['backup-dir'] . '/shabbat-backup-' . gmdate('Ymd-His') . '-' . bin2hex(random_bytes(4)) . '.sqlite'); + $db->assertCurrentSchema(); + $backup = (new BackupService())->backup($db, $options['backup-dir'] . '/shabbat-backup-' . gmdate('Ymd-His') . '-' . bin2hex(random_bytes(4)) . '.sqlite'); } elseif (is_file($path)) { $db = Database::open($path); } else { $db = Database::open(':memory:'); $db->migrate(); } - echo Database::encode((new LegacyImporter($db, new SystemClock()))->run((string)$options['legacy'], $dryRun)) . "\n"; + $db->assertCurrentSchema(); + $report = (new LegacyImporter($db, new SystemClock()))->run((string)$options['legacy'], $dryRun, $expectedReport); + if ($backup !== null) { + $report['pre_import_backup'] = $backup; + } + echo Database::encode($report) . "\n"; } catch (Throwable $error) { fwrite(STDERR, $error->getMessage() . "\n"); exit(1); diff --git a/bin/self-check.php b/bin/self-check.php index b046266..8c93764 100644 --- a/bin/self-check.php +++ b/bin/self-check.php @@ -37,7 +37,7 @@ } try { $patches = \Shabbat\Runtime\PatchSet::process($root, false); - $patch = $patches['madelineproto']; + $patch = $patches['madelineproto-fresh-peer']; } catch (Throwable $error) { $patch = 'FAILED'; $failures[] = $error->getMessage(); diff --git a/composer.json b/composer.json index e5fbd31..e717465 100644 --- a/composer.json +++ b/composer.json @@ -13,7 +13,7 @@ "ext-pdo": "*", "ext-pdo_sqlite": "*", "ext-mbstring": "*", - "danog/madelineproto": "8.7.0", + "danog/madelineproto": "^8.11.10", "wizardloop/broadcastmanager": "~3.2.2", "amphp/amp": "^3.1.1", "amphp/file": "^3.2", diff --git a/composer.lock b/composer.lock index 242eb69..dfa0218 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "a66db3dc1cf910ea659bd986ec4af70a", + "content-hash": "86b3871c238751a775f05aa9312e088f", "packages": [ { "name": "amphp/amp", @@ -1944,18 +1944,78 @@ }, "time": "2026-04-05T21:06:35+00:00" }, + { + "name": "brick/math", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "2effe05d2177c451b86c6a073196a4034c02f211" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/2effe05d2177c451b86c6a073196a4034c02f211", + "reference": "2effe05d2177c451b86c6a073196a4034c02f211", + "shasum": "" + }, + "require": { + "php": "^8.2" + }, + "require-dev": { + "phpstan/phpstan": "2.2.13", + "phpstan/phpstan-phpunit": "2.0.18", + "phpunit/phpunit": "^11.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "bignumber", + "brick", + "decimal", + "integer", + "math", + "mathematics", + "rational" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/1.0.0" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + } + ], + "time": "2026-09-12T10:28:18+00:00" + }, { "name": "danog/async-orm", - "version": "1.1.4", + "version": "1.1.6", "source": { "type": "git", "url": "https://github.com/danog/AsyncOrm.git", - "reference": "495f335d8ddb9dae8b773025911191f31c45e9ea" + "reference": "4a2a7a54c5002bef6cdf80b338085e9e131bf719" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/danog/AsyncOrm/zipball/495f335d8ddb9dae8b773025911191f31c45e9ea", - "reference": "495f335d8ddb9dae8b773025911191f31c45e9ea", + "url": "https://api.github.com/repos/danog/AsyncOrm/zipball/4a2a7a54c5002bef6cdf80b338085e9e131bf719", + "reference": "4a2a7a54c5002bef6cdf80b338085e9e131bf719", "shasum": "" }, "require": { @@ -1999,7 +2059,7 @@ "description": "Async ORM based on AMPHP v3 and fibers.", "support": { "issues": "https://github.com/danog/AsyncOrm/issues", - "source": "https://github.com/danog/AsyncOrm/tree/1.1.4" + "source": "https://github.com/danog/AsyncOrm/tree/1.1.6" }, "funding": [ { @@ -2007,7 +2067,7 @@ "type": "github" } ], - "time": "2025-07-12T18:39:01+00:00" + "time": "2026-10-19T18:46:06+00:00" }, { "name": "danog/better-prometheus", @@ -2151,16 +2211,16 @@ }, { "name": "danog/ipc", - "version": "1.0.1", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/danog/ipc.git", - "reference": "505e672b76af6ec623f7ef78efb2416f62ef8e29" + "reference": "eea6de6a57273f32a4f90a652ae1409786be18a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/danog/ipc/zipball/505e672b76af6ec623f7ef78efb2416f62ef8e29", - "reference": "505e672b76af6ec623f7ef78efb2416f62ef8e29", + "url": "https://api.github.com/repos/danog/ipc/zipball/eea6de6a57273f32a4f90a652ae1409786be18a0", + "reference": "eea6de6a57273f32a4f90a652ae1409786be18a0", "shasum": "" }, "require": { @@ -2176,6 +2236,9 @@ "phpunit/phpunit": "^9.6.22", "psalm/phar": "^5.26.1" }, + "suggest": { + "ext-sockets": "Required for UNIX socket support on Windows (TCP is used otherwise)" + }, "type": "library", "autoload": { "files": [ @@ -2214,9 +2277,9 @@ ], "support": { "issues": "https://github.com/danog/ipc/issues", - "source": "https://github.com/danog/ipc/tree/1.0.1" + "source": "https://github.com/danog/ipc/tree/1.1.0" }, - "time": "2025-04-18T14:42:00+00:00" + "time": "2026-10-18T18:06:10+00:00" }, { "name": "danog/libdns-json", @@ -2342,41 +2405,61 @@ }, { "name": "danog/madelineproto", - "version": "8.7.0", + "version": "8.11.10", "source": { "type": "git", "url": "https://github.com/danog/MadelineProto.git", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed" + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/danog/MadelineProto/zipball/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", + "url": "https://api.github.com/repos/danog/MadelineProto/zipball/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", "shasum": "" }, "require": { - "amphp/amp": "^3.1.1", + "amphp/amp": "^3.1.3", "amphp/byte-stream": "^2.1.2", - "amphp/dns": "^2.4.0", + "amphp/dns": "^2.4.1", "amphp/file": "^3.2.0", "amphp/http": "^2.1.2", - "amphp/http-client": "^5.3.4", + "amphp/http-client": "^5.3.6", "amphp/http-client-cookies": "^2", - "amphp/http-server": "^3.4.3", + "amphp/http-server": "^3.4.6", "amphp/log": "^2", - "amphp/mysql": "^3", - "amphp/postgres": "^2.1.1", - "amphp/redis": "^2.0.3", - "amphp/socket": "^2.3.1", + "amphp/mysql": "^3.1.1", + "amphp/postgres": "^2.2.1", + "amphp/process": "^2.1", + "amphp/redis": "^2.0.4", + "amphp/socket": "^2.4.1", "amphp/websocket-client": "^2.0.2", - "bacon/bacon-qr-code": "^3.0.1", - "danog/async-orm": "^1.1.4", + "bacon/bacon-qr-code": "^3.1.1", + "danog/async-orm": "^1.1.6", "danog/better-prometheus": "^0.1.1", "danog/dns-over-https": "^1.0.1", - "danog/ipc": "^1.0.1", + "danog/ipc": "^1.1.0", "danog/loop": "^1.1.1", + "danog/php-rtc-av": "^1.1.11", + "danog/php-rtc-codecs": "^1.1.19", + "danog/php-rtc-datachannel": "^1.1.10", + "danog/php-rtc-dtls": "^2.0.19", + "danog/php-rtc-exception": "^1.1.10", + "danog/php-rtc-ice": "^2.0.18", + "danog/php-rtc-mdns": "^1.1.12", + "danog/php-rtc-mixin": "^2.0.9", + "danog/php-rtc-ntp": "^1.1.14", + "danog/php-rtc-rtcp": "^1.1.11", + "danog/php-rtc-rtp": "^2.0.23", + "danog/php-rtc-rtp-parameter": "^1.1.8", + "danog/php-rtc-sctp": "^2.0.14", + "danog/php-rtc-sdp": "^1.1.12", + "danog/php-rtc-srtp": "^1.1.16", + "danog/php-rtc-stats": "^1.1.7", + "danog/php-rtc-stun": "^2.0.18", + "danog/php-rtc-turn": "^2.0.9", + "danog/php-rtc-webrtc": "^2.0.19", "danog/primemodule": "^1.0.13", - "danog/telegram-entities": "^1.0.5", + "danog/telegram-entities": "^1.1.0", "danog/tg-dialog-id": "^2", "danog/tg-file-decoder": "^1.0.2", "ext-dom": "*", @@ -2386,16 +2469,20 @@ "ext-json": "*", "ext-xml": "*", "ext-zlib": "*", - "league/uri": "^7.5.1", - "nikic/php-parser": "^5.6.2", + "league/uri": "^7.8.1", + "nikic/php-parser": "^5.9.0", "php-64bit": ">=8.2", - "phpseclib/phpseclib": "^3.0.47", + "phpseclib/phpseclib": "^4.0.1", "psr/http-factory": "^1.1.0", "psr/log": "^3.0.2", - "revolt/event-loop": "^1.0.7", - "symfony/polyfill-mbstring": ">=1.32", - "symfony/polyfill-php83": "^1.32", - "webmozart/assert": "^1.12.1" + "revolt/event-loop": "^1.0.9", + "symfony/polyfill-iconv": "^1.37", + "symfony/polyfill-mbstring": ">=1.38.2", + "symfony/polyfill-php83": "^1.41", + "symfony/polyfill-php84": "^1.38", + "symfony/polyfill-php85": "^1.41", + "symfony/polyfill-php86": "^1.41", + "webmozart/assert": "^2.4.1" }, "conflict": { "ext-pthreads": "*", @@ -2403,25 +2490,25 @@ }, "require-dev": { "amphp/phpunit-util": "^3", - "bamarni/composer-bin-plugin": "1.8.2", + "bamarni/composer-bin-plugin": "1.9.1", "brianium/paratest": "^6.11.1", "danog/phpdoc": "^0.1.24", "dg/bypass-finals": "dev-master", "ext-ctype": "*", - "phpunit/phpunit": "^9.6.29", - "quasarstream/webrtc": "^1.0", - "revolt/event-loop-adapter-react": "^1.1.1", - "sebastian/diff": "^4.0", - "symfony/yaml": "^6.4.26", + "phpunit/phpunit": "^9.6.36", + "sebastian/diff": "^4.0.6", + "symfony/yaml": "^6.4.45", "vimeo/psalm": "dev-master" }, "suggest": { "ext-bcmath": "Install the bcmath extension to speed up authorization", - "ext-ffi": "Install the primemodule and FFI extensions to speed up MadelineProto (https://prime.madelineproto.xyz)", + "ext-ffi": "Install the FFI extension (with libopus, libvpx and ffmpeg) to transcode audio and video in realtime; not required to play and record video and audio inside calls", "ext-gmp": "Install the gmp extension to speed up authorization", "ext-openssl": "Install the openssl extension for faster crypto", "ext-pdo": "Install the pdo extension to store session data on MySQL", "ext-primemodule": "Install the primemodule and FFI extensions to speed up MadelineProto (https://prime.madelineproto.xyz)", + "ext-sockets": "Install the sockets extension on Windows to use UNIX sockets for IPC (otherwise TCP on 127.0.0.1 is used, which any local user can connect to)", + "ext-sodium": "Install the sodium extension for faster crypto", "ext-uv": "Install the uv extension to greatly speed up MadelineProto!" }, "type": "library", @@ -2461,7 +2548,7 @@ ], "support": { "issues": "https://github.com/danog/MadelineProto/issues", - "source": "https://github.com/danog/MadelineProto/tree/8.7.0" + "source": "https://github.com/danog/MadelineProto/tree/8.11.10" }, "funding": [ { @@ -2469,790 +2556,920 @@ "type": "github" } ], - "time": "2026-05-12T07:44:57+00:00" + "time": "2026-10-21T19:38:35+00:00" }, { - "name": "danog/primemodule", - "version": "1.0.13", + "name": "danog/php-rtc-av", + "version": "1.1.11", "source": { "type": "git", - "url": "https://github.com/danog/PrimeModule.git", - "reference": "e7ebfc1ea64c24186e49064cd4b76bc76c28600e" + "url": "https://github.com/danog/php-rtc-av.git", + "reference": "f328e6b5682d7e885dcfab425839921312162008" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/danog/PrimeModule/zipball/e7ebfc1ea64c24186e49064cd4b76bc76c28600e", - "reference": "e7ebfc1ea64c24186e49064cd4b76bc76c28600e", + "url": "https://api.github.com/repos/danog/php-rtc-av/zipball/f328e6b5682d7e885dcfab425839921312162008", + "reference": "f328e6b5682d7e885dcfab425839921312162008", "shasum": "" }, "require": { - "php": "^8.0" + "danog/php-rtc-exception": "^1.1.5", + "danog/php-rtc-mixin": "^1.1.6 || ^2.0", + "php-64bit": "^8.2" }, "require-dev": { - "phabel/phabel": "^1" + "bamarni/composer-bin-plugin": "^1.9.1", + "phpunit/phpunit": "^11.5 || ^12.0 || ^13.3.2" }, "suggest": { - "ext-primemodule": "Install the native C++ extension for extremely fast factorization (https://prime.madelineproto.xyz)" + "ext-ffi": "Install the FFI extension and libavcodec/libavformat/libavfilter to transcode media; not required to mux or packetize already-encoded media" }, "type": "library", "extra": { - "phabel": { - "revision": 0 + "bamarni-bin": { + "bin-links": true, + "forward-command": true } }, "autoload": { - "psr-0": { - "danog\\": "lib/" + "psr-4": { + "Webrtc\\AVCodec\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "AGPL-3.0-only" + "MIT" ], "authors": [ + { + "name": "Amin Yazdanpanah", + "email": "github@aminyazdanpanah.com" + }, + { + "name": "Sana Moniri", + "email": "s.mo@quasarstream.com" + }, + { + "name": "Quasar Stream Community" + }, { "name": "Daniil Gentili", "email": "daniil@daniil.it" } ], - "description": "Prime module capable of doing prime factorization of huge numbers very quickly.\"", + "description": "FFmpeg/libav FFI bindings for PHP media processing. MadelineProto's PHP 8.2+ fork uses lazy, optional FFI, strict ABI checks, and the modular danog/php-rtc stack.", + "homepage": "https://github.com/danog/php-rtc-av", + "keywords": [ + "WebRTC", + "avcodec", + "avfilter", + "avformat", + "codec", + "ffmpeg", + "libavcodec", + "libavfilter", + "libavformat", + "libswscale", + "swscale" + ], "support": { - "issues": "https://github.com/danog/PrimeModule/issues", - "source": "https://github.com/danog/PrimeModule/tree/1.0.13" + "issues": "https://github.com/danog/php-rtc-av/issues", + "source": "https://github.com/danog/php-rtc-av/tree/1.1.11" }, - "time": "2023-05-27T14:41:40+00:00" + "time": "2026-10-06T15:43:53+00:00" }, { - "name": "danog/telegram-entities", - "version": "1.0.5", + "name": "danog/php-rtc-codecs", + "version": "1.1.19", "source": { "type": "git", - "url": "https://github.com/danog/telegram-entities.git", - "reference": "19ab8a48bc4b9519c4493e2c62eb171fba8b58b4" + "url": "https://github.com/danog/php-rtc-codecs.git", + "reference": "00836382276949099077e19659ff6648b823284f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/danog/telegram-entities/zipball/19ab8a48bc4b9519c4493e2c62eb171fba8b58b4", - "reference": "19ab8a48bc4b9519c4493e2c62eb171fba8b58b4", + "url": "https://api.github.com/repos/danog/php-rtc-codecs/zipball/00836382276949099077e19659ff6648b823284f", + "reference": "00836382276949099077e19659ff6648b823284f", "shasum": "" }, "require": { - "php-64bit": ">=8.2.4", - "symfony/polyfill-mbstring": "*", - "webmozart/assert": "^1.11" + "danog/php-rtc-av": "^1.1.3", + "danog/php-rtc-exception": "^1.1.5", + "danog/php-rtc-rtp-parameter": "^1.1.4", + "php": "^8.2" }, "require-dev": { - "amphp/http-client": "^5.0", - "amphp/php-cs-fixer-config": "^2.0.1", - "danog/phpdoc": "^0.1.22", - "friendsofphp/php-cs-fixer": "^3.52.1", - "infection/infection": "^0.28.1", - "phpunit/phpunit": "^11.0.9", - "vimeo/psalm": "dev-master" + "bamarni/composer-bin-plugin": "^1.9.1", + "phpunit/phpunit": "^11.5 || ^12.0 || ^13.3.2" + }, + "suggest": { + "ext-ffi": "Install the FFI extension and libopus/libvpx/libavcodec to transcode media; not required to packetize already-encoded media" }, "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + } + }, "autoload": { "psr-4": { - "danog\\TelegramEntities\\": "src/" + "Webrtc\\Codecs\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache-2.0" + "BSD-3-Clause" ], "authors": [ + { + "name": "Amin Yazdanpanah", + "email": "github@aminyazdanpanah.com" + }, + { + "name": "Sana Moniri", + "email": "s.mo@quasarstream.com" + }, + { + "name": "Quasar Stream Community" + }, { "name": "Daniil Gentili", "email": "daniil@daniil.it" } ], - "description": "A library to work with Telegram UTF-16 styled text entities.", + "description": "WebRTC audio/video codec and RTP packetization utilities. MadelineProto's PHP 8.2+ fork adds optional transcoding FFI, VP9 packetization, and the modular danog/php-rtc stack.", + "homepage": "https://github.com/danog/php-rtc-codecs", + "keywords": [ + "WebRTC", + "codecs", + "h264", + "opus", + "pcma", + "pcmu", + "vp8" + ], "support": { - "issues": "https://github.com/danog/telegram-entities/issues", - "source": "https://github.com/danog/telegram-entities/tree/1.0.5" + "issues": "https://github.com/danog/php-rtc-codecs/issues", + "source": "https://github.com/danog/php-rtc-codecs/tree/1.1.19" }, - "funding": [ - { - "url": "https://github.com/danog", - "type": "github" - } - ], - "time": "2025-06-22T12:27:39+00:00" + "time": "2026-10-16T23:52:08+00:00" }, { - "name": "danog/tg-dialog-id", - "version": "2.0.0", + "name": "danog/php-rtc-datachannel", + "version": "1.1.10", "source": { "type": "git", - "url": "https://github.com/danog/tg-dialog-id.git", - "reference": "d03c653b2dad43d739675c83a6e8fa14b3b43636" + "url": "https://github.com/danog/php-rtc-datachannel.git", + "reference": "3a5ad6f76326514f41a9e1847b41d503e157c459" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/danog/tg-dialog-id/zipball/d03c653b2dad43d739675c83a6e8fa14b3b43636", - "reference": "d03c653b2dad43d739675c83a6e8fa14b3b43636", + "url": "https://api.github.com/repos/danog/php-rtc-datachannel/zipball/3a5ad6f76326514f41a9e1847b41d503e157c459", + "reference": "3a5ad6f76326514f41a9e1847b41d503e157c459", "shasum": "" }, "require": { - "php-64bit": ">=8.1" + "danog/php-rtc-exception": "^1.1.5", + "danog/php-rtc-mixin": "^2.0", + "php": "^8.2", + "psr/log": "^3.0.2" }, "require-dev": { - "amphp/file": "^3.1", - "amphp/php-cs-fixer-config": "^2.0.1", - "danog/phpdoc": "^0.1.22", - "infection/infection": "^0.28.1", - "phpunit/phpunit": "^11.0.9|^10", - "vimeo/psalm": "dev-master" + "bamarni/composer-bin-plugin": "^1.9.1", + "phpunit/phpunit": "^11.5 || ^12.0 || ^13.3.2" }, "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + } + }, "autoload": { "psr-4": { - "danog\\DialogId\\": "src/" + "Webrtc\\DataChannel\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache-2.0" + "BSD-3-Clause" ], "authors": [ + { + "name": "Amin Yazdanpanah", + "email": "github@aminyazdanpanah.com" + }, + { + "name": "Sana Moniri", + "email": "s.mo@quasarstream.com" + }, + { + "name": "Quasar Stream Community" + }, { "name": "Daniil Gentili", "email": "daniil@daniil.it" } ], - "description": "A library to work with Telegram bot API dialog IDs", + "description": "A PHP implementation of WebRTC's RTCDataChannel interface. MadelineProto's PHP 8.2+ fork is a Composer-compatible component of the modular danog/php-rtc stack.", + "homepage": "https://github.com/danog/php-rtc-datachannel", + "keywords": [ + "WebRTC", + "datachannel" + ], "support": { - "issues": "https://github.com/danog/tg-dialog-id/issues", - "source": "https://github.com/danog/tg-dialog-id/tree/2.0.0" + "issues": "https://github.com/danog/php-rtc-datachannel/issues", + "source": "https://github.com/danog/php-rtc-datachannel/tree/1.1.10" }, - "funding": [ - { - "url": "https://github.com/danog", - "type": "github" - } - ], - "time": "2025-06-28T15:36:24+00:00" + "time": "2026-09-16T11:03:48+00:00" }, { - "name": "danog/tg-file-decoder", - "version": "1.0.2", + "name": "danog/php-rtc-dtls", + "version": "2.0.20", "source": { "type": "git", - "url": "https://github.com/danog/tg-file-decoder.git", - "reference": "f4da78c28d47b658c4596249f1d6595956f3b796" + "url": "https://github.com/danog/php-rtc-dtls.git", + "reference": "794180b0c3cf54842df44b7bcb44f8fb50f199c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/danog/tg-file-decoder/zipball/f4da78c28d47b658c4596249f1d6595956f3b796", - "reference": "f4da78c28d47b658c4596249f1d6595956f3b796", + "url": "https://api.github.com/repos/danog/php-rtc-dtls/zipball/794180b0c3cf54842df44b7bcb44f8fb50f199c8", + "reference": "794180b0c3cf54842df44b7bcb44f8fb50f199c8", "shasum": "" }, "require": { - "php-64bit": ">=8.2" + "amphp/amp": "^3.1.3", + "danog/php-rtc-exception": "^1.1.5", + "danog/php-rtc-ice": "^1.1.18 || ^2.0", + "danog/php-rtc-mixin": "^2.0", + "danog/php-rtc-rtp": "^2.0.23", + "danog/php-rtc-sctp": "^1.1.5 || ^2.0", + "danog/php-rtc-sdp": "^1.1.6", + "danog/php-rtc-srtp": "^1.1.16", + "danog/php-rtc-stats": "^1.1.3", + "php-64bit": "^8.2", + "phpseclib/phpseclib": "^4.0", + "symfony/polyfill-php84": "*" }, "require-dev": { - "amphp/php-cs-fixer-config": "^2", - "danog/phpdoc": "^0.1.22", - "phpunit/phpunit": "^11", - "vimeo/psalm": "dev-master" + "bamarni/composer-bin-plugin": "^1.9.1", + "dg/bypass-finals": "dev-master", + "phpunit/phpunit": "^11.5 || ^12.0 || ^13.3.2" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + } }, - "type": "project", "autoload": { "psr-4": { - "danog\\Decoder\\": "src/" + "Webrtc\\DTLS\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "AGPL-3.0-only" + "BSD-3-Clause" ], "authors": [ + { + "name": "Amin Yazdanpanah", + "email": "github@aminyazdanpanah.com" + }, + { + "name": "Sana Moniri", + "email": "s.mo@quasarstream.com" + }, + { + "name": "Quasar Stream Community" + }, { "name": "Daniil Gentili", "email": "daniil@daniil.it" } ], - "description": "Decode Telegram bot API file IDs", + "description": "Pure-PHP DTLS 1.2 for WebRTC, powered by phpseclib and Amp v3.", + "homepage": "https://github.com/danog/php-rtc-dtls", "keywords": [ - "audio", - "bot api", - "file ID", - "files", - "mtproto", - "stickers", - "telegram", - "video" + "certificate", + "crypto", + "dtls", + "openssl", + "privateKey", + "rtp", + "ssl", + "x509" ], "support": { - "issues": "https://github.com/danog/tg-file-decoder/issues", - "source": "https://github.com/danog/tg-file-decoder/tree/1.0.2" + "issues": "https://github.com/danog/php-rtc-dtls/issues", + "source": "https://github.com/danog/php-rtc-dtls/tree/2.0.20" }, - "funding": [ - { - "url": "https://github.com/danog", - "type": "github" - } - ], - "time": "2025-05-31T15:14:35+00:00" + "time": "2026-10-17T20:02:59+00:00" }, { - "name": "dasprid/enum", - "version": "1.0.7", + "name": "danog/php-rtc-exception", + "version": "1.1.10", "source": { "type": "git", - "url": "https://github.com/DASPRiD/Enum.git", - "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce" + "url": "https://github.com/danog/php-rtc-exception.git", + "reference": "f9347a5376bb6b7b2fb008e06a8fd9fb6d9febd7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/b5874fa9ed0043116c72162ec7f4fb50e02e7cce", - "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce", + "url": "https://api.github.com/repos/danog/php-rtc-exception/zipball/f9347a5376bb6b7b2fb008e06a8fd9fb6d9febd7", + "reference": "f9347a5376bb6b7b2fb008e06a8fd9fb6d9febd7", "shasum": "" }, "require": { - "php": ">=7.1 <9.0" + "php": "^8.2" }, "require-dev": { - "phpunit/phpunit": "^7 || ^8 || ^9 || ^10 || ^11", - "squizlabs/php_codesniffer": "*" + "bamarni/composer-bin-plugin": "^1.9.1" }, "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + } + }, "autoload": { "psr-4": { - "DASPRiD\\Enum\\": "src/" + "Webrtc\\Exception\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-2-Clause" + "BSD-3-Clause" ], "authors": [ { - "name": "Ben Scholzen 'DASPRiD'", - "email": "mail@dasprids.de", - "homepage": "https://dasprids.de/", - "role": "Developer" + "name": "Amin Yazdanpanah", + "email": "github@aminyazdanpanah.com" + }, + { + "name": "Sana Moniri", + "email": "s.mo@quasarstream.com" + }, + { + "name": "Quasar Stream Community" + }, + { + "name": "Daniil Gentili", + "email": "daniil@daniil.it" } ], - "description": "PHP 7.1 enum implementation", + "description": "Lightweight exceptions shared by the WebRTC components. MadelineProto's PHP 8.2+ fork is a Composer-compatible foundation of the modular danog/php-rtc stack.", + "homepage": "https://github.com/danog/php-rtc-exception", "keywords": [ - "enum", - "map" + "WebRTC" ], "support": { - "issues": "https://github.com/DASPRiD/Enum/issues", - "source": "https://github.com/DASPRiD/Enum/tree/1.0.7" + "issues": "https://github.com/danog/php-rtc-exception/issues", + "source": "https://github.com/danog/php-rtc-exception/tree/1.1.10" }, - "time": "2025-09-16T12:23:56+00:00" + "time": "2026-09-16T11:03:57+00:00" }, { - "name": "daverandom/libdns", - "version": "v2.1.0", + "name": "danog/php-rtc-ice", + "version": "2.0.18", "source": { "type": "git", - "url": "https://github.com/DaveRandom/LibDNS.git", - "reference": "b84c94e8fe6b7ee4aecfe121bfe3b6177d303c8a" + "url": "https://github.com/danog/php-rtc-ice.git", + "reference": "91c53e982f334cf3bfe64a9e298d874bba51a3f1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/DaveRandom/LibDNS/zipball/b84c94e8fe6b7ee4aecfe121bfe3b6177d303c8a", - "reference": "b84c94e8fe6b7ee4aecfe121bfe3b6177d303c8a", + "url": "https://api.github.com/repos/danog/php-rtc-ice/zipball/91c53e982f334cf3bfe64a9e298d874bba51a3f1", + "reference": "91c53e982f334cf3bfe64a9e298d874bba51a3f1", "shasum": "" }, "require": { - "ext-ctype": "*", - "php": ">=7.1" + "amphp/amp": "^3.1.3", + "amphp/dns": "^2.4.1", + "amphp/socket": "^2.4.1", + "danog/php-rtc-exception": "^1.1.5", + "danog/php-rtc-mdns": "^1.1.7", + "danog/php-rtc-mixin": "^2.0.9", + "danog/php-rtc-stun": "^2.0.17", + "danog/php-rtc-turn": "^2.0.9", + "php-64bit": "^8.2", + "psr/log": "^3.0.2", + "symfony/polyfill-php84": "*" }, - "suggest": { - "ext-intl": "Required for IDN support" + "require-dev": { + "bamarni/composer-bin-plugin": "^1.9.1", + "mockery/mockery": "^1.6.15", + "phpunit/phpunit": "^11.5 || ^12.0 || ^13.3.2" }, "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + } + }, "autoload": { - "files": [ - "src/functions.php" - ], "psr-4": { - "LibDNS\\": "src/" + "Webrtc\\ICE\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" - ], - "description": "DNS protocol implementation written in pure PHP", - "keywords": [ - "dns" + "BSD-3-Clause" ], - "support": { - "issues": "https://github.com/DaveRandom/LibDNS/issues", - "source": "https://github.com/DaveRandom/LibDNS/tree/v2.1.0" - }, - "time": "2024-04-12T12:12:48+00:00" - }, - { - "name": "kelunik/certificate", - "version": "v1.1.3", + "authors": [ + { + "name": "Amin Yazdanpanah", + "email": "github@aminyazdanpanah.com" + }, + { + "name": "Sana Moniri", + "email": "s.mo@quasarstream.com" + }, + { + "name": "Quasar Stream Community" + }, + { + "name": "Daniil Gentili", + "email": "daniil@daniil.it" + } + ], + "description": "WebRTC ICE connectivity in PHP, ported to Amp v3 fibers and sockets. MadelineProto's PHP 8.2+ fork integrates the modular danog/php-rtc STUN, TURN, and mDNS stack.", + "homepage": "https://github.com/danog/php-rtc-ice", + "keywords": [ + "WebRTC", + "ice", + "stun", + "turn" + ], + "support": { + "issues": "https://github.com/danog/php-rtc-ice/issues", + "source": "https://github.com/danog/php-rtc-ice/tree/2.0.18" + }, + "time": "2026-10-16T21:18:22+00:00" + }, + { + "name": "danog/php-rtc-mdns", + "version": "1.1.12", "source": { "type": "git", - "url": "https://github.com/kelunik/certificate.git", - "reference": "7e00d498c264d5eb4f78c69f41c8bd6719c0199e" + "url": "https://github.com/danog/php-rtc-mdns.git", + "reference": "ff3f4315339ddcdd4d71bd4e02156903261ef57a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/kelunik/certificate/zipball/7e00d498c264d5eb4f78c69f41c8bd6719c0199e", - "reference": "7e00d498c264d5eb4f78c69f41c8bd6719c0199e", + "url": "https://api.github.com/repos/danog/php-rtc-mdns/zipball/ff3f4315339ddcdd4d71bd4e02156903261ef57a", + "reference": "ff3f4315339ddcdd4d71bd4e02156903261ef57a", "shasum": "" }, "require": { - "ext-openssl": "*", - "php": ">=7.0" + "amphp/amp": "^3.1.3", + "amphp/socket": "^2.4.1", + "danog/php-rtc-exception": "^1.1.5", + "daverandom/libdns": "^2.1.0", + "php": "^8.2" }, "require-dev": { - "amphp/php-cs-fixer-config": "^2", - "phpunit/phpunit": "^6 | 7 | ^8 | ^9" + "bamarni/composer-bin-plugin": "^1.9.1", + "phpunit/phpunit": "^11.5 || ^12.0 || ^13.3.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.x-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": true } }, "autoload": { "psr-4": { - "Kelunik\\Certificate\\": "src" + "Webrtc\\MDNS\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Niklas Keller", - "email": "me@kelunik.com" + "name": "Amin Yazdanpanah", + "email": "github@aminyazdanpanah.com" + }, + { + "name": "Sana Moniri", + "email": "s.mo@quasarstream.com" + }, + { + "name": "Quasar Stream Community" + }, + { + "name": "Daniil Gentili", + "email": "daniil@daniil.it" } ], - "description": "Access certificate details and transform between different formats.", + "description": "An Amp v3 Multicast DNS resolver for WebRTC. MadelineProto's PHP 8.2+ fork is a Composer-compatible component of the modular danog/php-rtc stack.", + "homepage": "https://github.com/danog/php-rtc-mdns", "keywords": [ - "DER", - "certificate", - "certificates", - "openssl", - "pem", - "x509" + "mDNS", + "multicastdns" ], "support": { - "issues": "https://github.com/kelunik/certificate/issues", - "source": "https://github.com/kelunik/certificate/tree/v1.1.3" + "issues": "https://github.com/danog/php-rtc-mdns/issues", + "source": "https://github.com/danog/php-rtc-mdns/tree/1.1.12" }, - "time": "2023-02-03T21:26:53+00:00" + "time": "2026-09-16T11:04:05+00:00" }, { - "name": "league/uri", - "version": "7.8.1", + "name": "danog/php-rtc-mixin", + "version": "2.0.9", "source": { "type": "git", - "url": "https://github.com/thephpleague/uri.git", - "reference": "08cf38e3924d4f56238125547b5720496fac8fd4" + "url": "https://github.com/danog/php-rtc-mixin.git", + "reference": "e7a086a7fe01875f52e1f08301195db05e7ff9a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/08cf38e3924d4f56238125547b5720496fac8fd4", - "reference": "08cf38e3924d4f56238125547b5720496fac8fd4", + "url": "https://api.github.com/repos/danog/php-rtc-mixin/zipball/e7a086a7fe01875f52e1f08301195db05e7ff9a5", + "reference": "e7a086a7fe01875f52e1f08301195db05e7ff9a5", "shasum": "" }, "require": { - "league/uri-interfaces": "^7.8.1", - "php": "^8.1", - "psr/http-factory": "^1" - }, - "conflict": { - "league/uri-schemes": "^1.0" + "php": "^8.2" }, - "suggest": { - "ext-bcmath": "to improve IPV4 host parsing", - "ext-dom": "to convert the URI into an HTML anchor tag", - "ext-fileinfo": "to create Data URI from file contennts", - "ext-gmp": "to improve IPV4 host parsing", - "ext-intl": "to handle IDN host with the best performance", - "ext-uri": "to use the PHP native URI class", - "jeremykendall/php-domain-parser": "to further parse the URI host and resolve its Public Suffix and Top Level Domain", - "league/uri-components": "to provide additional tools to manipulate URI objects components", - "league/uri-polyfill": "to backport the PHP URI extension for older versions of PHP", - "php-64bit": "to improve IPV4 host parsing", - "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", - "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + "require-dev": { + "bamarni/composer-bin-plugin": ">=1.9.1" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "7.x-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": true } }, "autoload": { "psr-4": { - "League\\Uri\\": "" + "Webrtc\\Mixin\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://nyamsprod.com" + "name": "Amin Yazdanpanah", + "email": "github@aminyazdanpanah.com" + }, + { + "name": "Sana Moniri", + "email": "s.mo@quasarstream.com" + }, + { + "name": "Quasar Stream Community" + }, + { + "name": "Daniil Gentili", + "email": "daniil@daniil.it" } ], - "description": "URI manipulation library", - "homepage": "https://uri.thephpleague.com", + "description": "Common PHP classes and traits for WebRTC components. MadelineProto's PHP 8.2+ fork is a Composer-compatible foundation of the modular danog/php-rtc stack.", + "homepage": "https://github.com/danog/php-rtc-mixin", "keywords": [ - "URN", - "data-uri", - "file-uri", - "ftp", - "hostname", - "http", - "https", - "middleware", - "parse_str", - "parse_url", - "psr-7", - "query-string", - "querystring", - "rfc2141", - "rfc3986", - "rfc3987", - "rfc6570", - "rfc8141", - "uri", - "uri-template", - "url", - "ws" + "WebRTC" ], "support": { - "docs": "https://uri.thephpleague.com", - "forum": "https://thephpleague.slack.com", - "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri/tree/7.8.1" + "issues": "https://github.com/danog/php-rtc-mixin/issues", + "source": "https://github.com/danog/php-rtc-mixin/tree/2.0.9" }, - "funding": [ - { - "url": "https://github.com/sponsors/nyamsprod", - "type": "github" - } - ], - "time": "2026-03-15T20:22:25+00:00" + "time": "2026-10-06T12:36:35+00:00" }, { - "name": "league/uri-components", - "version": "7.8.1", + "name": "danog/php-rtc-ntp", + "version": "1.1.15", "source": { "type": "git", - "url": "https://github.com/thephpleague/uri-components.git", - "reference": "848ff9db2f0be06229d6034b7c2e33d41b4fd675" + "url": "https://github.com/danog/php-rtc-ntp.git", + "reference": "d70dc01410dba146cb808b9c2bf3c28ed1199d20" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-components/zipball/848ff9db2f0be06229d6034b7c2e33d41b4fd675", - "reference": "848ff9db2f0be06229d6034b7c2e33d41b4fd675", + "url": "https://api.github.com/repos/danog/php-rtc-ntp/zipball/d70dc01410dba146cb808b9c2bf3c28ed1199d20", + "reference": "d70dc01410dba146cb808b9c2bf3c28ed1199d20", "shasum": "" }, "require": { - "league/uri": "^7.8.1", - "php": "^8.1" + "php-64bit": "^8.2", + "symfony/polyfill-php83": "*" }, - "suggest": { - "ext-bcmath": "to improve IPV4 host parsing", - "ext-fileinfo": "to create Data URI from file contennts", - "ext-gmp": "to improve IPV4 host parsing", - "ext-intl": "to handle IDN host with the best performance", - "ext-mbstring": "to use the sorting algorithm of URLSearchParams", - "jeremykendall/php-domain-parser": "to further parse the URI host and resolve its Public Suffix and Top Level Domain", - "league/uri-polyfill": "to backport the PHP URI extension for older versions of PHP", - "php-64bit": "to improve IPV4 host parsing", - "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", - "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + "require-dev": { + "bamarni/composer-bin-plugin": "^1.9.1", + "phpunit/phpunit": "^11.5 || ^12.0 || ^13.3.2", + "symfony/phpunit-bridge": "7.3.x-dev" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "7.x-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": true } }, "autoload": { "psr-4": { - "League\\Uri\\": "" + "Webrtc\\NTP\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://nyamsprod.com" + "name": "Amin Yazdanpanah", + "email": "github@aminyazdanpanah.com" + }, + { + "name": "Sana Moniri", + "email": "s.mo@quasarstream.com" + }, + { + "name": "Quasar Stream Community" + }, + { + "name": "Daniil Gentili", + "email": "daniil@daniil.it" } ], - "description": "URI components manipulation library", - "homepage": "http://uri.thephpleague.com", + "description": "Pure-PHP NTP timestamp conversion for WebRTC. MadelineProto's PHP 8.2+ fork fixes unsigned 64-bit handling and integrates with the modular danog/php-rtc stack.", + "homepage": "https://github.com/danog/php-rtc-ntp", "keywords": [ - "authority", - "components", - "fragment", - "host", - "middleware", - "modifier", - "path", - "port", - "query", - "rfc3986", - "scheme", - "uri", - "url", - "userinfo" + "multicastdns", + "ntp" ], "support": { - "docs": "https://uri.thephpleague.com", - "forum": "https://thephpleague.slack.com", - "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-components/tree/7.8.1" + "issues": "https://github.com/danog/php-rtc-ntp/issues", + "source": "https://github.com/danog/php-rtc-ntp/tree/1.1.15" }, - "funding": [ - { - "url": "https://github.com/nyamsprod", - "type": "github" - } - ], - "time": "2026-03-15T20:22:25+00:00" + "time": "2026-10-16T23:17:01+00:00" }, { - "name": "league/uri-interfaces", - "version": "7.8.1", + "name": "danog/php-rtc-rtcp", + "version": "1.1.11", "source": { "type": "git", - "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928" + "url": "https://github.com/danog/php-rtc-rtcp.git", + "reference": "f2e7c76d040fb0c4b2e4b62a611d13c6352af145" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/85d5c77c5d6d3af6c54db4a78246364908f3c928", - "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928", + "url": "https://api.github.com/repos/danog/php-rtc-rtcp/zipball/f2e7c76d040fb0c4b2e4b62a611d13c6352af145", + "reference": "f2e7c76d040fb0c4b2e4b62a611d13c6352af145", "shasum": "" }, "require": { - "ext-filter": "*", - "php": "^8.1", - "psr/http-message": "^1.1 || ^2.0" + "danog/php-rtc-exception": "^1.1.5", + "php-64bit": "^8.2" }, - "suggest": { - "ext-bcmath": "to improve IPV4 host parsing", - "ext-gmp": "to improve IPV4 host parsing", - "ext-intl": "to handle IDN host with the best performance", - "php-64bit": "to improve IPV4 host parsing", - "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", - "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + "require-dev": { + "bamarni/composer-bin-plugin": "^1.9.1", + "phpunit/phpunit": "^11.5 || ^12.0 || ^13.3.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "7.x-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": true } }, "autoload": { "psr-4": { - "League\\Uri\\": "" + "Webrtc\\RTCP\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://nyamsprod.com" + "name": "Amin Yazdanpanah", + "email": "github@aminyazdanpanah.com" + }, + { + "name": "Sana Moniri", + "email": "s.mo@quasarstream.com" + }, + { + "name": "Quasar Stream Community" + }, + { + "name": "Daniil Gentili", + "email": "daniil@daniil.it" } ], - "description": "Common tools for parsing and resolving RFC3987/RFC3986 URI", - "homepage": "https://uri.thephpleague.com", + "description": "Pure-PHP RTCP packet parsing and generation. MadelineProto's PHP 8.2+ fork fixes unsigned NTP handling and integrates with the modular danog/php-rtc stack.", + "homepage": "https://github.com/danog/php-rtc-rtcp", "keywords": [ - "data-uri", - "file-uri", - "ftp", - "hostname", - "http", - "https", - "parse_str", - "parse_url", - "psr-7", - "query-string", - "querystring", - "rfc3986", - "rfc3987", - "rfc6570", - "uri", - "url", - "ws" + "rtcp", + "rtp" ], "support": { - "docs": "https://uri.thephpleague.com", - "forum": "https://thephpleague.slack.com", - "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.1" + "issues": "https://github.com/danog/php-rtc-rtcp/issues", + "source": "https://github.com/danog/php-rtc-rtcp/tree/1.1.11" }, - "funding": [ - { - "url": "https://github.com/sponsors/nyamsprod", - "type": "github" - } - ], - "time": "2026-03-08T20:05:35+00:00" + "time": "2026-10-16T23:52:08+00:00" }, { - "name": "monolog/monolog", - "version": "3.12.1", + "name": "danog/php-rtc-rtp", + "version": "2.0.23", "source": { "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "d7059e4c691d05ea1222b5124bed0f961be46e15" + "url": "https://github.com/danog/php-rtc-rtp.git", + "reference": "e9bee7a5aae91f6abec1fe9a599eefbce219d967" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/d7059e4c691d05ea1222b5124bed0f961be46e15", - "reference": "d7059e4c691d05ea1222b5124bed0f961be46e15", + "url": "https://api.github.com/repos/danog/php-rtc-rtp/zipball/e9bee7a5aae91f6abec1fe9a599eefbce219d967", + "reference": "e9bee7a5aae91f6abec1fe9a599eefbce219d967", "shasum": "" }, "require": { - "php": ">=8.1", - "psr/log": "^2.0 || ^3.0" - }, - "provide": { - "psr/log-implementation": "3.0.0" + "amphp/amp": "^3.1.3", + "amphp/pipeline": "^1.2.7", + "danog/php-rtc-codecs": "^1.1.18", + "danog/php-rtc-exception": "^1.1.5", + "danog/php-rtc-mixin": "^2.0", + "danog/php-rtc-ntp": "^1.1.14", + "danog/php-rtc-rtcp": "^1.1.4", + "danog/php-rtc-rtp-parameter": "^1.1.4", + "danog/php-rtc-sdp": "^1.1.6", + "danog/php-rtc-stats": "^1.1.3", + "php-64bit": "^8.2", + "ramsey/uuid": "^4.9.3", + "symfony/polyfill-php83": "*" }, "require-dev": { - "aws/aws-sdk-php": "^3.0", - "doctrine/couchdb": "~1.0@dev", - "elasticsearch/elasticsearch": "^7 || ^8", - "ext-json": "*", - "graylog2/gelf-php": "^1.4.2 || ^2.0", - "guzzlehttp/guzzle": "^7.4.5", - "guzzlehttp/psr7": "^2.2", - "mongodb/mongodb": "^1.8 || ^2.0", - "php-amqplib/php-amqplib": "~2.4 || ^3", - "php-console/php-console": "^3.1.8", - "phpstan/phpstan": "^2", - "phpstan/phpstan-deprecation-rules": "^2", - "phpstan/phpstan-strict-rules": "^2", - "phpunit/phpunit": "^10.5.17 || ^11.0.7", - "predis/predis": "^1.1 || ^2", - "psr/clock": "^1.0", - "rollbar/rollbar": "^4.0", - "ruflin/elastica": "^7 || ^8", - "symfony/mailer": "^5.4 || ^6", - "symfony/mime": "^5.4 || ^6" - }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", - "ext-mbstring": "Allow to work properly with unicode symbols", - "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", - "ext-openssl": "Required to send log messages using SSL", - "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", - "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "psr/clock": "Required to pass a clock to the Logger and control the timestamp of log records", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + "bamarni/composer-bin-plugin": "^1.9.1", + "dg/bypass-finals": "dev-master", + "phpunit/phpunit": "^11.5 || ^12.0 || ^13.3.2", + "symfony/phpunit-bridge": "7.3.x-dev" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "3.x-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": true } }, "autoload": { "psr-4": { - "Monolog\\": "src/Monolog" + "Webrtc\\RTP\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" + "name": "Amin Yazdanpanah", + "email": "github@aminyazdanpanah.com" + }, + { + "name": "Sana Moniri", + "email": "s.mo@quasarstream.com" + }, + { + "name": "Quasar Stream Community" + }, + { + "name": "Daniil Gentili", + "email": "daniil@daniil.it" } ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "https://github.com/Seldaek/monolog", + "description": "RTP packet and media transport handling for PHP, ported to Amp v3. MadelineProto's PHP 8.2+ fork supports optional media FFI in the modular danog/php-rtc stack.", + "homepage": "https://github.com/danog/php-rtc-rtp", "keywords": [ - "log", - "logging", - "psr-3" + "WebRTC", + "real-time-transport-protocol", + "rtp" ], "support": { - "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.12.1" + "issues": "https://github.com/danog/php-rtc-rtp/issues", + "source": "https://github.com/danog/php-rtc-rtp/tree/2.0.23" }, - "funding": [ + "time": "2026-10-16T23:52:08+00:00" + }, + { + "name": "danog/php-rtc-rtp-parameter", + "version": "1.1.8", + "source": { + "type": "git", + "url": "https://github.com/danog/php-rtc-rtp-parameter.git", + "reference": "cd1e34df768ddae43fc50c1306c2332cf99f07eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/danog/php-rtc-rtp-parameter/zipball/cd1e34df768ddae43fc50c1306c2332cf99f07eb", + "reference": "cd1e34df768ddae43fc50c1306c2332cf99f07eb", + "shasum": "" + }, + "require": { + "danog/php-rtc-mixin": "^1.1.6 || ^2.0", + "php": "^8.2" + }, + "require-dev": { + "bamarni/composer-bin-plugin": ">=1.9.1" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + } + }, + "autoload": { + "psr-4": { + "Webrtc\\RTPParameter\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ { - "url": "https://github.com/Seldaek", - "type": "github" + "name": "Amin Yazdanpanah", + "email": "github@aminyazdanpanah.com" }, { - "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", - "type": "tidelift" + "name": "Sana Moniri", + "email": "s.mo@quasarstream.com" + }, + { + "name": "Quasar Stream Community" + }, + { + "name": "Daniil Gentili", + "email": "daniil@daniil.it" } ], - "time": "2026-09-29T19:21:12+00:00" + "description": "RTP codec, payload, SSRC, header-extension, and RTCP parameter objects. MadelineProto's PHP 8.2+ fork supports the modular danog/php-rtc stack.", + "homepage": "https://github.com/danog/php-rtc-rtp-parameter", + "keywords": [ + "WebRTC", + "rtp", + "rtp-parameter" + ], + "support": { + "issues": "https://github.com/danog/php-rtc-rtp-parameter/issues", + "source": "https://github.com/danog/php-rtc-rtp-parameter/tree/1.1.8" + }, + "time": "2026-09-16T11:04:26+00:00" }, { - "name": "nikic/php-parser", - "version": "v5.9.0", + "name": "danog/php-rtc-sctp", + "version": "2.0.14", "source": { "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "9e33da9553fe7786f0962b35f4e4ecf01be89def" + "url": "https://github.com/danog/php-rtc-sctp.git", + "reference": "741697e355abd7eb8e8134b115fab775bb5ccd06" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/9e33da9553fe7786f0962b35f4e4ecf01be89def", - "reference": "9e33da9553fe7786f0962b35f4e4ecf01be89def", + "url": "https://api.github.com/repos/danog/php-rtc-sctp/zipball/741697e355abd7eb8e8134b115fab775bb5ccd06", + "reference": "741697e355abd7eb8e8134b115fab775bb5ccd06", "shasum": "" }, "require": { - "ext-json": "*", - "ext-tokenizer": "*", - "php": ">=7.4" + "amphp/amp": "^3.1.3", + "danog/php-rtc-datachannel": "^1.1.4", + "danog/php-rtc-exception": "^1.1.5", + "danog/php-rtc-ice": "^1.1.18 || ^2.0", + "danog/php-rtc-mixin": "^2.0", + "danog/php-rtc-sdp": "^1.1.6", + "danog/php-rtc-stats": "^1.1.3", + "php-64bit": "^8.2", + "symfony/polyfill-mbstring": "*" }, "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^9.0" + "bamarni/composer-bin-plugin": "^1.9.1", + "dg/bypass-finals": "dev-master", + "mockery/mockery": "^1.6.15", + "phpunit/phpunit": "^11.5 || ^12.0 || ^13.3.2", + "symfony/phpunit-bridge": "7.3.x-dev" }, - "bin": [ - "bin/php-parse" - ], "type": "library", "extra": { - "branch-alias": { - "dev-master": "5.x-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": true } }, "autoload": { "psr-4": { - "PhpParser\\": "lib/PhpParser" + "Webrtc\\SCTP\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -3261,346 +3478,2032 @@ ], "authors": [ { - "name": "Nikita Popov" + "name": "Amin Yazdanpanah", + "email": "github@aminyazdanpanah.com" + }, + { + "name": "Sana Moniri", + "email": "s.mo@quasarstream.com" + }, + { + "name": "Quasar Stream Community" + }, + { + "name": "Daniil Gentili", + "email": "daniil@daniil.it" } ], - "description": "A PHP parser written in PHP", + "description": "SCTP for PHP WebRTC data channels, ported to Amp v3 fibers and timers. MadelineProto's PHP 8.2+ fork is part of the modular danog/php-rtc stack.", + "homepage": "https://github.com/danog/php-rtc-sctp", "keywords": [ - "parser", - "php" + "WebRTC", + "datachannel", + "sctp" ], "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.9.0" + "issues": "https://github.com/danog/php-rtc-sctp/issues", + "source": "https://github.com/danog/php-rtc-sctp/tree/2.0.14" }, - "time": "2026-09-13T18:51:52+00:00" + "time": "2026-10-06T15:18:53+00:00" }, { - "name": "paragonie/constant_time_encoding", - "version": "v3.1.3", + "name": "danog/php-rtc-sdp", + "version": "1.1.12", "source": { "type": "git", - "url": "https://github.com/paragonie/constant_time_encoding.git", - "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77" + "url": "https://github.com/danog/php-rtc-sdp.git", + "reference": "315b9cbaff71625351864c292de0b6ac3b3a39fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77", - "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77", + "url": "https://api.github.com/repos/danog/php-rtc-sdp/zipball/315b9cbaff71625351864c292de0b6ac3b3a39fc", + "reference": "315b9cbaff71625351864c292de0b6ac3b3a39fc", "shasum": "" }, "require": { - "php": "^8" + "danog/php-rtc-exception": "^1.1.5", + "danog/php-rtc-ice": "^1.1.18 || ^2.0", + "danog/php-rtc-rtp-parameter": "^1.1.4", + "php": "^8.2", + "symfony/polyfill-php84": "*" }, "require-dev": { - "infection/infection": "^0", - "nikic/php-fuzzer": "^0", - "phpunit/phpunit": "^9|^10|^11", - "vimeo/psalm": "^4|^5|^6" + "bamarni/composer-bin-plugin": "^1.9.1", + "phpunit/phpunit": "^11.5 || ^12.0 || ^13.3.2" }, "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + } + }, "autoload": { "psr-4": { - "ParagonIE\\ConstantTime\\": "src/" + "Webrtc\\SDP\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com", - "role": "Maintainer" + "name": "Amin Yazdanpanah", + "email": "github@aminyazdanpanah.com" }, { - "name": "Steve 'Sc00bz' Thomas", - "email": "steve@tobtu.com", - "homepage": "https://www.tobtu.com", - "role": "Original Developer" + "name": "Sana Moniri", + "email": "s.mo@quasarstream.com" + }, + { + "name": "Quasar Stream Community" + }, + { + "name": "Daniil Gentili", + "email": "daniil@daniil.it" } ], - "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", + "description": "SDP parsing and generation for PHP WebRTC. MadelineProto's PHP 8.2+ fork is a Composer-compatible component of the modular danog/php-rtc stack.", + "homepage": "https://github.com/danog/php-rtc-sdp", "keywords": [ - "base16", - "base32", - "base32_decode", - "base32_encode", - "base64", - "base64_decode", - "base64_encode", - "bin2hex", - "encoding", - "hex", - "hex2bin", - "rfc4648" + "SDP", + "rtp" ], "support": { - "email": "info@paragonie.com", - "issues": "https://github.com/paragonie/constant_time_encoding/issues", - "source": "https://github.com/paragonie/constant_time_encoding" + "issues": "https://github.com/danog/php-rtc-sdp/issues", + "source": "https://github.com/danog/php-rtc-sdp/tree/1.1.12" }, - "time": "2025-09-24T15:06:41+00:00" + "time": "2026-09-16T11:04:35+00:00" }, { - "name": "paragonie/random_compat", - "version": "v9.99.100", + "name": "danog/php-rtc-srtp", + "version": "1.1.16", "source": { "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" + "url": "https://github.com/danog/php-rtc-srtp.git", + "reference": "b19959292663d8933a0a48cd1fda05788fb5c542" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", - "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", + "url": "https://api.github.com/repos/danog/php-rtc-srtp/zipball/b19959292663d8933a0a48cd1fda05788fb5c542", + "reference": "b19959292663d8933a0a48cd1fda05788fb5c542", "shasum": "" }, "require": { - "php": ">= 7" + "danog/php-rtc-exception": "^1.1.5", + "danog/php-rtc-mixin": "^1.1.6 || ^2.0", + "php-64bit": "^8.2", + "phpseclib/phpseclib": "^4.0" }, "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + "bamarni/composer-bin-plugin": "^1.9.1", + "phpunit/phpunit": "^11.5 || ^12.0 || ^13.3.2" }, "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + } + }, + "autoload": { + "psr-4": { + "Webrtc\\Srtp\\": "src" + } + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" + "name": "Amin Yazdanpanah", + "email": "github@aminyazdanpanah.com" + }, + { + "name": "Sana Moniri", + "email": "s.mo@quasarstream.com" + }, + { + "name": "Quasar Stream Community" + }, + { + "name": "Daniil Gentili", + "email": "daniil@daniil.it" } ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "description": "Pure-PHP SRTP and SRTCP encryption using phpseclib, with AES-CM and AES-GCM profiles. MadelineProto's PHP 8.2+ fork removes the libsrtp/FFI dependency.", + "homepage": "https://github.com/danog/php-rtc-srtp", "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" + "srtp" ], "support": { - "email": "info@paragonie.com", - "issues": "https://github.com/paragonie/random_compat/issues", - "source": "https://github.com/paragonie/random_compat" + "issues": "https://github.com/danog/php-rtc-srtp/issues", + "source": "https://github.com/danog/php-rtc-srtp/tree/1.1.16" }, - "time": "2020-10-15T08:29:30+00:00" + "time": "2026-10-16T22:00:35+00:00" }, { - "name": "phpseclib/phpseclib", - "version": "3.0.57", + "name": "danog/php-rtc-stats", + "version": "1.1.7", "source": { "type": "git", - "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "d17e0ddaeaf6f22f7e007cbb437d78792fe2a0e4" + "url": "https://github.com/danog/php-rtc-stats.git", + "reference": "137934d7d57e97184d5b6b2fb58e571e0d3f9fbd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/d17e0ddaeaf6f22f7e007cbb437d78792fe2a0e4", - "reference": "d17e0ddaeaf6f22f7e007cbb437d78792fe2a0e4", + "url": "https://api.github.com/repos/danog/php-rtc-stats/zipball/137934d7d57e97184d5b6b2fb58e571e0d3f9fbd", + "reference": "137934d7d57e97184d5b6b2fb58e571e0d3f9fbd", "shasum": "" }, "require": { - "paragonie/constant_time_encoding": "^1|^2|^3", - "paragonie/random_compat": "^1.4|^2.0|^9.99.99", - "php": ">=5.6.1" + "danog/php-rtc-ice": "^1.1.18 || ^2.0", + "danog/php-rtc-mixin": "^1.1.6 || ^2.0", + "php": "^8.2" }, "require-dev": { - "phpunit/phpunit": "*" - }, - "suggest": { - "ext-dom": "Install the DOM extension to load XML formatted public keys.", - "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", - "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", - "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", - "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." + "bamarni/composer-bin-plugin": ">=1.9.1" }, "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + } + }, "autoload": { - "files": [ - "phpseclib/bootstrap.php" - ], "psr-4": { - "phpseclib3\\": "phpseclib/" + "Webrtc\\Stats\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Jim Wigginton", - "email": "terrafrost@php.net", - "role": "Lead Developer" - }, - { - "name": "Patrick Monnerat", - "email": "pm@datasphere.ch", - "role": "Developer" + "name": "Amin Yazdanpanah", + "email": "github@aminyazdanpanah.com" }, { - "name": "Andreas Fischer", - "email": "bantu@phpbb.com", - "role": "Developer" + "name": "Sana Moniri", + "email": "s.mo@quasarstream.com" }, { - "name": "Hans-Jürgen Petrich", - "email": "petrich@tronic-media.com", - "role": "Developer" + "name": "Quasar Stream Community" }, { - "name": "Graham Campbell", - "email": "graham@alt-three.com", - "role": "Developer" + "name": "Daniil Gentili", + "email": "daniil@daniil.it" + } + ], + "description": "WebRTC statistics objects for RTP, DTLS, ICE, and media metrics. MadelineProto's PHP 8.2+ fork supports the modular danog/php-rtc stack.", + "homepage": "https://github.com/danog/php-rtc-stats", + "keywords": [ + "WebRTC", + "stats" + ], + "support": { + "issues": "https://github.com/danog/php-rtc-stats/issues", + "source": "https://github.com/danog/php-rtc-stats/tree/1.1.7" + }, + "time": "2026-09-16T11:04:43+00:00" + }, + { + "name": "danog/php-rtc-stun", + "version": "2.0.18", + "source": { + "type": "git", + "url": "https://github.com/danog/php-rtc-stun.git", + "reference": "7f1b48a736e6d7a9ad174e7dc58b794168befed4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/danog/php-rtc-stun/zipball/7f1b48a736e6d7a9ad174e7dc58b794168befed4", + "reference": "7f1b48a736e6d7a9ad174e7dc58b794168befed4", + "shasum": "" + }, + "require": { + "amphp/amp": "^3.1.3", + "amphp/socket": "^2.4.1", + "danog/php-rtc-exception": "^1.1.5", + "danog/php-rtc-mixin": "^2.0", + "php-64bit": "^8.2", + "psr/log": "^3.0.2", + "ramsey/uuid": "^4.9.3" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.9.1", + "dg/bypass-finals": "dev-master", + "mockery/mockery": "^1.6.15", + "phpunit/phpunit": "^11.5 || ^12.0 || ^13.3.2" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + } + }, + "autoload": { + "psr-4": { + "Webrtc\\STUN\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Amin Yazdanpanah", + "email": "github@aminyazdanpanah.com" + }, + { + "name": "Sana Moniri", + "email": "s.mo@quasarstream.com" + }, + { + "name": "Quasar Stream Community" + }, + { + "name": "Daniil Gentili", + "email": "daniil@daniil.it" + } + ], + "description": "STUN transactions and NAT discovery for PHP, ported to Amp v3 sockets and fibers. MadelineProto's PHP 8.2+ fork supports the modular danog/php-rtc stack.", + "homepage": "https://github.com/danog/php-rtc-stun", + "keywords": [ + "SessionTraversalUtilitiesForNAT", + "WebRTC", + "stun" + ], + "support": { + "issues": "https://github.com/danog/php-rtc-stun/issues", + "source": "https://github.com/danog/php-rtc-stun/tree/2.0.18" + }, + "time": "2026-10-06T15:41:42+00:00" + }, + { + "name": "danog/php-rtc-turn", + "version": "2.0.9", + "source": { + "type": "git", + "url": "https://github.com/danog/php-rtc-turn.git", + "reference": "5789c0d4b23c6097c72812fa8f9e9930ac288bc6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/danog/php-rtc-turn/zipball/5789c0d4b23c6097c72812fa8f9e9930ac288bc6", + "reference": "5789c0d4b23c6097c72812fa8f9e9930ac288bc6", + "shasum": "" + }, + "require": { + "amphp/amp": "^3.1.3", + "amphp/socket": "^2.4.1", + "danog/php-rtc-exception": "^1.1.5", + "danog/php-rtc-mixin": "^2.0", + "danog/php-rtc-stun": "^2.0.17", + "php": "^8.2", + "psr/log": "^3.0.2" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.9.1", + "mockery/mockery": "^1.6.15", + "phpunit/phpunit": "^11.5 || ^12.0 || ^13.3.2" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + } + }, + "autoload": { + "psr-4": { + "Webrtc\\TURN\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Amin Yazdanpanah", + "email": "github@aminyazdanpanah.com" + }, + { + "name": "Sana Moniri", + "email": "s.mo@quasarstream.com" + }, + { + "name": "Quasar Stream Community" + }, + { + "name": "Daniil Gentili", + "email": "daniil@daniil.it" + } + ], + "description": "TURN relay transport for PHP WebRTC, ported to Amp v3 TCP, UDP, and fibers. MadelineProto's PHP 8.2+ fork supports the modular danog/php-rtc stack.", + "homepage": "https://github.com/danog/php-rtc-turn", + "keywords": [ + "WebRTC", + "traversal-using-relays-around-nat", + "turn" + ], + "support": { + "issues": "https://github.com/danog/php-rtc-turn/issues", + "source": "https://github.com/danog/php-rtc-turn/tree/2.0.9" + }, + "time": "2026-10-06T13:18:16+00:00" + }, + { + "name": "danog/php-rtc-webrtc", + "version": "2.0.20", + "source": { + "type": "git", + "url": "https://github.com/danog/php-rtc-webrtc.git", + "reference": "58f8a24180cd1e137127214f9bfba3b0a7eff97b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/danog/php-rtc-webrtc/zipball/58f8a24180cd1e137127214f9bfba3b0a7eff97b", + "reference": "58f8a24180cd1e137127214f9bfba3b0a7eff97b", + "shasum": "" + }, + "require": { + "amphp/amp": "^3.1.3", + "danog/php-rtc-dtls": "^1.1.9 || ^2.0", + "danog/php-rtc-exception": "^1.1.5", + "danog/php-rtc-ice": "^2.0.17", + "danog/php-rtc-mixin": "^2.0", + "danog/php-rtc-ntp": "^1.1.6", + "danog/php-rtc-rtp": "^2.0.23", + "danog/php-rtc-sctp": "^2.0.14", + "danog/php-rtc-sdp": "^1.1.6", + "danog/php-rtc-stats": "^1.1.3", + "php": "^8.2", + "symfony/polyfill-php84": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.9.1", + "phpunit/phpunit": "^11.5 || ^12.0 || ^13.3.2" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + } + }, + "autoload": { + "psr-4": { + "Webrtc\\Webrtc\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Amin Yazdanpanah", + "email": "github@aminyazdanpanah.com" + }, + { + "name": "Sana Moniri", + "email": "s.mo@quasarstream.com" + }, + { + "name": "Quasar Stream Community" + }, + { + "name": "Daniil Gentili", + "email": "daniil@daniil.it" + } + ], + "description": "A modular PHP WebRTC stack for PHP 8.2+, ported to Amp v3 with pure-PHP DTLS/SRTP and optional media FFI. Maintained by danog for MadelineProto.", + "homepage": "https://github.com/danog/php-rtc-webrtc", + "keywords": [ + "WebRTC", + "rtp" + ], + "support": { + "issues": "https://github.com/danog/php-rtc-webrtc/issues", + "source": "https://github.com/danog/php-rtc-webrtc/tree/2.0.20" + }, + "time": "2026-10-16T23:52:08+00:00" + }, + { + "name": "danog/primemodule", + "version": "1.0.13", + "source": { + "type": "git", + "url": "https://github.com/danog/PrimeModule.git", + "reference": "e7ebfc1ea64c24186e49064cd4b76bc76c28600e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/danog/PrimeModule/zipball/e7ebfc1ea64c24186e49064cd4b76bc76c28600e", + "reference": "e7ebfc1ea64c24186e49064cd4b76bc76c28600e", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "phabel/phabel": "^1" + }, + "suggest": { + "ext-primemodule": "Install the native C++ extension for extremely fast factorization (https://prime.madelineproto.xyz)" + }, + "type": "library", + "extra": { + "phabel": { + "revision": 0 + } + }, + "autoload": { + "psr-0": { + "danog\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "AGPL-3.0-only" + ], + "authors": [ + { + "name": "Daniil Gentili", + "email": "daniil@daniil.it" + } + ], + "description": "Prime module capable of doing prime factorization of huge numbers very quickly.\"", + "support": { + "issues": "https://github.com/danog/PrimeModule/issues", + "source": "https://github.com/danog/PrimeModule/tree/1.0.13" + }, + "time": "2023-05-27T14:41:40+00:00" + }, + { + "name": "danog/telegram-entities", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/danog/telegram-entities.git", + "reference": "92ca7621594b7a6c4a820c3b557e66ee1d439273" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/danog/telegram-entities/zipball/92ca7621594b7a6c4a820c3b557e66ee1d439273", + "reference": "92ca7621594b7a6c4a820c3b557e66ee1d439273", + "shasum": "" + }, + "require": { + "php-64bit": ">=8.2.4", + "symfony/polyfill-mbstring": "*", + "webmozart/assert": "^2" + }, + "require-dev": { + "amphp/http-client": "^5.0", + "amphp/php-cs-fixer-config": "^2.0.1", + "danog/phpdoc": "^0.1.22", + "friendsofphp/php-cs-fixer": "^3.52.1", + "phpunit/phpunit": "^11.0.9", + "vimeo/psalm": "dev-master" + }, + "type": "library", + "autoload": { + "psr-4": { + "danog\\TelegramEntities\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Daniil Gentili", + "email": "daniil@daniil.it" + } + ], + "description": "A library to work with Telegram UTF-16 styled text entities.", + "support": { + "issues": "https://github.com/danog/telegram-entities/issues", + "source": "https://github.com/danog/telegram-entities/tree/1.1.0" + }, + "funding": [ + { + "url": "https://github.com/danog", + "type": "github" + } + ], + "time": "2026-10-18T15:46:15+00:00" + }, + { + "name": "danog/tg-dialog-id", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/danog/tg-dialog-id.git", + "reference": "d03c653b2dad43d739675c83a6e8fa14b3b43636" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/danog/tg-dialog-id/zipball/d03c653b2dad43d739675c83a6e8fa14b3b43636", + "reference": "d03c653b2dad43d739675c83a6e8fa14b3b43636", + "shasum": "" + }, + "require": { + "php-64bit": ">=8.1" + }, + "require-dev": { + "amphp/file": "^3.1", + "amphp/php-cs-fixer-config": "^2.0.1", + "danog/phpdoc": "^0.1.22", + "infection/infection": "^0.28.1", + "phpunit/phpunit": "^11.0.9|^10", + "vimeo/psalm": "dev-master" + }, + "type": "library", + "autoload": { + "psr-4": { + "danog\\DialogId\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Daniil Gentili", + "email": "daniil@daniil.it" + } + ], + "description": "A library to work with Telegram bot API dialog IDs", + "support": { + "issues": "https://github.com/danog/tg-dialog-id/issues", + "source": "https://github.com/danog/tg-dialog-id/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/danog", + "type": "github" + } + ], + "time": "2025-06-28T15:36:24+00:00" + }, + { + "name": "danog/tg-file-decoder", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/danog/tg-file-decoder.git", + "reference": "f4da78c28d47b658c4596249f1d6595956f3b796" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/danog/tg-file-decoder/zipball/f4da78c28d47b658c4596249f1d6595956f3b796", + "reference": "f4da78c28d47b658c4596249f1d6595956f3b796", + "shasum": "" + }, + "require": { + "php-64bit": ">=8.2" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "danog/phpdoc": "^0.1.22", + "phpunit/phpunit": "^11", + "vimeo/psalm": "dev-master" + }, + "type": "project", + "autoload": { + "psr-4": { + "danog\\Decoder\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "AGPL-3.0-only" + ], + "authors": [ + { + "name": "Daniil Gentili", + "email": "daniil@daniil.it" + } + ], + "description": "Decode Telegram bot API file IDs", + "keywords": [ + "audio", + "bot api", + "file ID", + "files", + "mtproto", + "stickers", + "telegram", + "video" + ], + "support": { + "issues": "https://github.com/danog/tg-file-decoder/issues", + "source": "https://github.com/danog/tg-file-decoder/tree/1.0.2" + }, + "funding": [ + { + "url": "https://github.com/danog", + "type": "github" + } + ], + "time": "2025-05-31T15:14:35+00:00" + }, + { + "name": "dasprid/enum", + "version": "1.0.7", + "source": { + "type": "git", + "url": "https://github.com/DASPRiD/Enum.git", + "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/b5874fa9ed0043116c72162ec7f4fb50e02e7cce", + "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce", + "shasum": "" + }, + "require": { + "php": ">=7.1 <9.0" + }, + "require-dev": { + "phpunit/phpunit": "^7 || ^8 || ^9 || ^10 || ^11", + "squizlabs/php_codesniffer": "*" + }, + "type": "library", + "autoload": { + "psr-4": { + "DASPRiD\\Enum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "https://dasprids.de/", + "role": "Developer" + } + ], + "description": "PHP 7.1 enum implementation", + "keywords": [ + "enum", + "map" + ], + "support": { + "issues": "https://github.com/DASPRiD/Enum/issues", + "source": "https://github.com/DASPRiD/Enum/tree/1.0.7" + }, + "time": "2025-09-16T12:23:56+00:00" + }, + { + "name": "daverandom/libdns", + "version": "v2.1.0", + "source": { + "type": "git", + "url": "https://github.com/DaveRandom/LibDNS.git", + "reference": "b84c94e8fe6b7ee4aecfe121bfe3b6177d303c8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/DaveRandom/LibDNS/zipball/b84c94e8fe6b7ee4aecfe121bfe3b6177d303c8a", + "reference": "b84c94e8fe6b7ee4aecfe121bfe3b6177d303c8a", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "Required for IDN support" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "LibDNS\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "DNS protocol implementation written in pure PHP", + "keywords": [ + "dns" + ], + "support": { + "issues": "https://github.com/DaveRandom/LibDNS/issues", + "source": "https://github.com/DaveRandom/LibDNS/tree/v2.1.0" + }, + "time": "2024-04-12T12:12:48+00:00" + }, + { + "name": "kelunik/certificate", + "version": "v1.1.3", + "source": { + "type": "git", + "url": "https://github.com/kelunik/certificate.git", + "reference": "7e00d498c264d5eb4f78c69f41c8bd6719c0199e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kelunik/certificate/zipball/7e00d498c264d5eb4f78c69f41c8bd6719c0199e", + "reference": "7e00d498c264d5eb4f78c69f41c8bd6719c0199e", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "php": ">=7.0" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "^2", + "phpunit/phpunit": "^6 | 7 | ^8 | ^9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Kelunik\\Certificate\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "Access certificate details and transform between different formats.", + "keywords": [ + "DER", + "certificate", + "certificates", + "openssl", + "pem", + "x509" + ], + "support": { + "issues": "https://github.com/kelunik/certificate/issues", + "source": "https://github.com/kelunik/certificate/tree/v1.1.3" + }, + "time": "2023-02-03T21:26:53+00:00" + }, + { + "name": "league/uri", + "version": "7.8.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri.git", + "reference": "08cf38e3924d4f56238125547b5720496fac8fd4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/08cf38e3924d4f56238125547b5720496fac8fd4", + "reference": "08cf38e3924d4f56238125547b5720496fac8fd4", + "shasum": "" + }, + "require": { + "league/uri-interfaces": "^7.8.1", + "php": "^8.1", + "psr/http-factory": "^1" + }, + "conflict": { + "league/uri-schemes": "^1.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-dom": "to convert the URI into an HTML anchor tag", + "ext-fileinfo": "to create Data URI from file contennts", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "ext-uri": "to use the PHP native URI class", + "jeremykendall/php-domain-parser": "to further parse the URI host and resolve its Public Suffix and Top Level Domain", + "league/uri-components": "to provide additional tools to manipulate URI objects components", + "league/uri-polyfill": "to backport the PHP URI extension for older versions of PHP", + "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "URI manipulation library", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "URN", + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "middleware", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc2141", + "rfc3986", + "rfc3987", + "rfc6570", + "rfc8141", + "uri", + "uri-template", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri/tree/7.8.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2026-03-15T20:22:25+00:00" + }, + { + "name": "league/uri-components", + "version": "7.8.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-components.git", + "reference": "848ff9db2f0be06229d6034b7c2e33d41b4fd675" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-components/zipball/848ff9db2f0be06229d6034b7c2e33d41b4fd675", + "reference": "848ff9db2f0be06229d6034b7c2e33d41b4fd675", + "shasum": "" + }, + "require": { + "league/uri": "^7.8.1", + "php": "^8.1" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-fileinfo": "to create Data URI from file contennts", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "ext-mbstring": "to use the sorting algorithm of URLSearchParams", + "jeremykendall/php-domain-parser": "to further parse the URI host and resolve its Public Suffix and Top Level Domain", + "league/uri-polyfill": "to backport the PHP URI extension for older versions of PHP", + "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "URI components manipulation library", + "homepage": "http://uri.thephpleague.com", + "keywords": [ + "authority", + "components", + "fragment", + "host", + "middleware", + "modifier", + "path", + "port", + "query", + "rfc3986", + "scheme", + "uri", + "url", + "userinfo" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri-components/tree/7.8.1" + }, + "funding": [ + { + "url": "https://github.com/nyamsprod", + "type": "github" + } + ], + "time": "2026-03-15T20:22:25+00:00" + }, + { + "name": "league/uri-interfaces", + "version": "7.8.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-interfaces.git", + "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/85d5c77c5d6d3af6c54db4a78246364908f3c928", + "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^8.1", + "psr/http-message": "^1.1 || ^2.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "Common tools for parsing and resolving RFC3987/RFC3986 URI", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2026-03-08T20:05:35+00:00" + }, + { + "name": "monolog/monolog", + "version": "3.12.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "d7059e4c691d05ea1222b5124bed0f961be46e15" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/d7059e4c691d05ea1222b5124bed0f961be46e15", + "reference": "d7059e4c691d05ea1222b5124bed0f961be46e15", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8 || ^2.0", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", + "predis/predis": "^1.1 || ^2", + "psr/clock": "^1.0", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "psr/clock": "Required to pass a clock to the Logger and control the timestamp of log records", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/3.12.1" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2026-09-29T19:21:12+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.9.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "9e33da9553fe7786f0962b35f4e4ecf01be89def" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/9e33da9553fe7786f0962b35f4e4ecf01be89def", + "reference": "9e33da9553fe7786f0962b35f4e4ecf01be89def", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.9.0" + }, + "time": "2026-09-13T18:51:52+00:00" + }, + { + "name": "paragonie/constant_time_encoding", + "version": "v3.1.3", + "source": { + "type": "git", + "url": "https://github.com/paragonie/constant_time_encoding.git", + "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77", + "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77", + "shasum": "" + }, + "require": { + "php": "^8" + }, + "require-dev": { + "infection/infection": "^0", + "nikic/php-fuzzer": "^0", + "phpunit/phpunit": "^9|^10|^11", + "vimeo/psalm": "^4|^5|^6" + }, + "type": "library", + "autoload": { + "psr-4": { + "ParagonIE\\ConstantTime\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com", + "role": "Maintainer" + }, + { + "name": "Steve 'Sc00bz' Thomas", + "email": "steve@tobtu.com", + "homepage": "https://www.tobtu.com", + "role": "Original Developer" + } + ], + "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", + "keywords": [ + "base16", + "base32", + "base32_decode", + "base32_encode", + "base64", + "base64_decode", + "base64_encode", + "bin2hex", + "encoding", + "hex", + "hex2bin", + "rfc4648" + ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/constant_time_encoding/issues", + "source": "https://github.com/paragonie/constant_time_encoding" + }, + "time": "2025-09-24T15:06:41+00:00" + }, + { + "name": "phpseclib/phpseclib", + "version": "4.0.2", + "source": { + "type": "git", + "url": "https://github.com/phpseclib/phpseclib.git", + "reference": "1fe20b9acb08ce810cec24d8a9d02e7c13426e4c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/1fe20b9acb08ce810cec24d8a9d02e7c13426e4c", + "reference": "1fe20b9acb08ce810cec24d8a9d02e7c13426e4c", + "shasum": "" + }, + "require": { + "paragonie/constant_time_encoding": "^2|^3", + "php": ">=8.1", + "symfony/polyfill-php82": "^1.26" + }, + "require-dev": { + "brianium/paratest": "^7.22", + "ext-xml": "*", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpunit/phpunit": "^13", + "squizlabs/php_codesniffer": "^3.7", + "vimeo/psalm": "*" + }, + "suggest": { + "ext-dom": "Install the DOM extension to load XML formatted public keys.", + "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", + "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", + "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." + }, + "type": "library", + "autoload": { + "files": [ + "phpseclib/bootstrap.php" + ], + "psr-4": { + "phpseclib4\\": "phpseclib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jim Wigginton", + "email": "terrafrost@php.net", + "role": "Lead Developer" + }, + { + "name": "Patrick Monnerat", + "email": "pm@datasphere.ch", + "role": "Developer" + }, + { + "name": "Andreas Fischer", + "email": "bantu@phpbb.com", + "role": "Developer" + }, + { + "name": "Hans-Jürgen Petrich", + "email": "petrich@tronic-media.com", + "role": "Developer" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "role": "Developer" + }, + { + "name": "Jack Worman", + "email": "jack.worman@gmail.com", + "homepage": "https://jackworman.com", + "role": "Developer" } ], "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", - "homepage": "http://phpseclib.sourceforge.net", + "homepage": "https://phpseclib.com/", + "keywords": [ + "BigInteger", + "aes", + "asn.1", + "asn1", + "blowfish", + "crypto", + "cryptography", + "encryption", + "rsa", + "security", + "sftp", + "signature", + "signing", + "ssh", + "twofish", + "x.509", + "x509" + ], + "support": { + "issues": "https://github.com/phpseclib/phpseclib/issues", + "source": "https://github.com/phpseclib/phpseclib/tree/4.0.2" + }, + "funding": [ + { + "url": "https://github.com/terrafrost", + "type": "github" + }, + { + "url": "https://www.patreon.com/phpseclib", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib", + "type": "tidelift" + } + ], + "time": "2026-10-07T19:55:38+00:00" + }, + { + "name": "promphp/prometheus_client_php", + "version": "v2.15.1", + "source": { + "type": "git", + "url": "https://github.com/PromPHP/prometheus_client_php.git", + "reference": "e153786bda5ca1d07335a2b5f477742c37195c40" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PromPHP/prometheus_client_php/zipball/e153786bda5ca1d07335a2b5f477742c37195c40", + "reference": "e153786bda5ca1d07335a2b5f477742c37195c40", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^8.2" + }, + "replace": { + "endclothing/prometheus_client_php": "*", + "jimdo/prometheus_client_php": "*", + "lkaemmerling/prometheus_client_php": "*" + }, + "require-dev": { + "guzzlehttp/guzzle": "^6.3|^7.0", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.5.4", + "phpstan/phpstan-phpunit": "^1.1.0", + "phpstan/phpstan-strict-rules": "^1.1.0", + "phpunit/phpunit": "^9.4", + "predis/predis": "^2.3", + "squizlabs/php_codesniffer": "^3.6 || ^4.0", + "symfony/polyfill-apcu": "^1.6" + }, + "suggest": { + "ext-apc": "Required if using APCu.", + "ext-pdo": "Required if using PDO.", + "ext-redis": "Required if using Redis.", + "predis/predis": "Required if using Predis.", + "promphp/prometheus_push_gateway_php": "An easy client for using Prometheus PushGateway.", + "symfony/polyfill-apcu": "Required if you use APCu." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Prometheus\\": "src/Prometheus/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Lukas Kämmerling", + "email": "kontakt@lukas-kaemmerling.de" + } + ], + "description": "Prometheus instrumentation library for PHP applications.", + "support": { + "issues": "https://github.com/PromPHP/prometheus_client_php/issues", + "source": "https://github.com/PromPHP/prometheus_client_php/tree/v2.15.1" + }, + "time": "2026-05-28T07:51:04+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory" + }, + "time": "2024-04-15T12:06:14+00:00" + }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, + { + "name": "psr/log", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.2" + }, + "time": "2024-09-11T13:17:53+00:00" + }, + { + "name": "ramsey/collection", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "captainhook/plugin-composer": "^5.3", + "ergebnis/composer-normalize": "^2.45", + "fakerphp/faker": "^1.24", + "hamcrest/hamcrest-php": "^2.0", + "jangregor/phpstan-prophecy": "^2.1", + "mockery/mockery": "^1.6", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.4", + "phpspec/prophecy-phpunit": "^2.3", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^10.5", + "ramsey/coding-standard": "^2.3", + "ramsey/conventional-commits": "^1.6", + "roave/security-advisories": "dev-latest" + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + }, + "ramsey/conventional-commits": { + "configFile": "conventional-commits.json" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/2.1.1" + }, + "time": "2025-03-22T05:38:12+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.9.4", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "75d73f48d02797c2c285a7e9f348fadc0102ffe2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/75d73f48d02797c2c285a7e9f348fadc0102ffe2", + "reference": "75d73f48d02797c2c285a7e9f348fadc0102ffe2", + "shasum": "" + }, + "require": { + "brick/math": "^0.8.16 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14 || ^0.15 || ^0.16 || ^0.17 || ^0.18 || ^0.19 || ^0.20 || ^1.0", + "php": "^8.0", + "ramsey/collection": "^1.2 || ^2.0" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "captainhook/captainhook": "^5.25", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", + "ergebnis/composer-normalize": "^2.47", + "mockery/mockery": "^1.6", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.6", + "php-mock/php-mock-mockery": "^1.5", + "php-parallel-lint/php-parallel-lint": "^1.4.0", + "phpbench/phpbench": "^1.2.14", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^9.6", + "slevomat/coding-standard": "^8.18", + "squizlabs/php_codesniffer": "^3.13" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", "keywords": [ - "BigInteger", - "aes", - "asn.1", - "asn1", - "blowfish", - "crypto", - "cryptography", - "encryption", - "rsa", - "security", - "sftp", - "signature", - "signing", - "ssh", - "twofish", - "x.509", - "x509" + "guid", + "identifier", + "uuid" ], "support": { - "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.57" + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.9.4" }, - "funding": [ + "time": "2026-09-16T11:39:30+00:00" + }, + { + "name": "revolt/event-loop", + "version": "v1.0.9", + "source": { + "type": "git", + "url": "https://github.com/revoltphp/event-loop.git", + "reference": "44061cf513e53c6200372fc935ac42271566295d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/revoltphp/event-loop/zipball/44061cf513e53c6200372fc935ac42271566295d", + "reference": "44061cf513e53c6200372fc935ac42271566295d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "ext-json": "*", + "jetbrains/phpstorm-stubs": "^2019.3", + "phpunit/phpunit": "^9", + "psalm/phar": "6.16.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Revolt\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ { - "url": "https://github.com/terrafrost", - "type": "github" + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" }, { - "url": "https://www.patreon.com/phpseclib", - "type": "patreon" + "name": "Cees-Jan Kiewiet", + "email": "ceesjank@gmail.com" }, { - "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib", - "type": "tidelift" + "name": "Christian Lück", + "email": "christian@clue.engineering" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" } ], - "time": "2026-08-26T12:13:21+00:00" + "description": "Rock-solid event loop for concurrent PHP applications.", + "keywords": [ + "async", + "asynchronous", + "concurrency", + "event", + "event-loop", + "non-blocking", + "scheduler" + ], + "support": { + "issues": "https://github.com/revoltphp/event-loop/issues", + "source": "https://github.com/revoltphp/event-loop/tree/v1.0.9" + }, + "time": "2026-05-16T17:55:38+00:00" }, { - "name": "promphp/prometheus_client_php", - "version": "v2.15.1", + "name": "symfony/polyfill-iconv", + "version": "v1.43.0", "source": { "type": "git", - "url": "https://github.com/PromPHP/prometheus_client_php.git", - "reference": "e153786bda5ca1d07335a2b5f477742c37195c40" + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "254724d95fe01b679cd97d88786e9623ee00bfb7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PromPHP/prometheus_client_php/zipball/e153786bda5ca1d07335a2b5f477742c37195c40", - "reference": "e153786bda5ca1d07335a2b5f477742c37195c40", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/254724d95fe01b679cd97d88786e9623ee00bfb7", + "reference": "254724d95fe01b679cd97d88786e9623ee00bfb7", "shasum": "" }, "require": { - "ext-json": "*", - "php": "^8.2" - }, - "replace": { - "endclothing/prometheus_client_php": "*", - "jimdo/prometheus_client_php": "*", - "lkaemmerling/prometheus_client_php": "*" + "php": ">=7.2" }, - "require-dev": { - "guzzlehttp/guzzle": "^6.3|^7.0", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.5.4", - "phpstan/phpstan-phpunit": "^1.1.0", - "phpstan/phpstan-strict-rules": "^1.1.0", - "phpunit/phpunit": "^9.4", - "predis/predis": "^2.3", - "squizlabs/php_codesniffer": "^3.6 || ^4.0", - "symfony/polyfill-apcu": "^1.6" + "provide": { + "ext-iconv": "*" }, "suggest": { - "ext-apc": "Required if using APCu.", - "ext-pdo": "Required if using PDO.", - "ext-redis": "Required if using Redis.", - "predis/predis": "Required if using Predis.", - "promphp/prometheus_push_gateway_php": "An easy client for using Prometheus PushGateway.", - "symfony/polyfill-apcu": "Required if you use APCu." + "ext-iconv": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.0-dev" + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Prometheus\\": "src/Prometheus/" + "Symfony\\Polyfill\\Iconv\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache-2.0" + "MIT" ], "authors": [ { - "name": "Lukas Kämmerling", - "email": "kontakt@lukas-kaemmerling.de" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Prometheus instrumentation library for PHP applications.", + "description": "Symfony polyfill for the Iconv extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "iconv", + "polyfill", + "portable", + "shim" + ], "support": { - "issues": "https://github.com/PromPHP/prometheus_client_php/issues", - "source": "https://github.com/PromPHP/prometheus_client_php/tree/v2.15.1" + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.43.0" }, - "time": "2026-05-28T07:51:04+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-09-29T06:25:14+00:00" }, { - "name": "psr/http-factory", - "version": "1.1.0", + "name": "symfony/polyfill-mbstring", + "version": "v1.43.0", "source": { "type": "git", - "url": "https://github.com/php-fig/http-factory.git", - "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "4d5d331bf731e0aedbc6b2f5e61135b7b7996a72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", - "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/4d5d331bf731e0aedbc6b2f5e61135b7b7996a72", + "reference": "4d5d331bf731e0aedbc6b2f5e61135b7b7996a72", "shasum": "" }, "require": { - "php": ">=7.1", - "psr/http-message": "^1.0 || ^2.0" + "ext-iconv": "*", + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Psr\\Http\\Message\\": "src/" + "Symfony\\Polyfill\\Mbstring\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -3609,53 +5512,80 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", "keywords": [ - "factory", - "http", - "message", - "psr", - "psr-17", - "psr-7", - "request", - "response" + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.43.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } ], - "support": { - "source": "https://github.com/php-fig/http-factory" - }, - "time": "2024-04-15T12:06:14+00:00" + "time": "2026-09-24T15:19:04+00:00" }, { - "name": "psr/http-message", - "version": "2.0", + "name": "symfony/polyfill-php82", + "version": "v1.43.0", "source": { "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + "url": "https://github.com/symfony/polyfill-php82.git", + "reference": "843bbe8b2a7934307b749751eede0f111f5d1cfc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "url": "https://api.github.com/repos/symfony/polyfill-php82/zipball/843bbe8b2a7934307b749751eede0f111f5d1cfc", + "reference": "843bbe8b2a7934307b749751eede0f111f5d1cfc", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Psr\\Http\\Message\\": "src/" - } + "Symfony\\Polyfill\\Php82\\": "" + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3663,52 +5593,79 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", + "description": "Symfony polyfill backporting some PHP 8.2+ features to lower PHP versions", + "homepage": "https://symfony.com", "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" + "compatibility", + "polyfill", + "portable", + "shim" ], "support": { - "source": "https://github.com/php-fig/http-message/tree/2.0" + "source": "https://github.com/symfony/polyfill-php82/tree/v1.43.0" }, - "time": "2023-04-04T09:54:51+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-09-25T15:50:05+00:00" }, { - "name": "psr/log", - "version": "3.0.2", + "name": "symfony/polyfill-php83", + "version": "v1.43.0", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "80ccff923a8d61f73ebe9da0aa94e25232f004ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", - "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/80ccff923a8d61f73ebe9da0aa94e25232f004ce", + "reference": "80ccff923a8d61f73ebe9da0aa94e25232f004ce", "shasum": "" }, "require": { - "php": ">=8.0.0" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "3.x-dev" + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Psr\\Log\\": "src" - } + "Symfony\\Polyfill\\Php83\\": "" + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3716,55 +5673,79 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", "keywords": [ - "log", - "psr", - "psr-3" + "compatibility", + "polyfill", + "portable", + "shim" ], "support": { - "source": "https://github.com/php-fig/log/tree/3.0.2" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.43.0" }, - "time": "2024-09-11T13:17:53+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-09-25T15:50:05+00:00" }, { - "name": "revolt/event-loop", - "version": "v1.0.9", + "name": "symfony/polyfill-php84", + "version": "v1.43.0", "source": { "type": "git", - "url": "https://github.com/revoltphp/event-loop.git", - "reference": "44061cf513e53c6200372fc935ac42271566295d" + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "22c6548499cbe5c5bb072fc0c42312dff062a015" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/revoltphp/event-loop/zipball/44061cf513e53c6200372fc935ac42271566295d", - "reference": "44061cf513e53c6200372fc935ac42271566295d", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/22c6548499cbe5c5bb072fc0c42312dff062a015", + "reference": "22c6548499cbe5c5bb072fc0c42312dff062a015", "shasum": "" }, "require": { - "php": ">=8.1" - }, - "require-dev": { - "ext-json": "*", - "jetbrains/phpstorm-stubs": "^2019.3", - "phpunit/phpunit": "^9", - "psalm/phar": "6.16.*" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.x-dev" + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Revolt\\": "src" - } + "Symfony\\Polyfill\\Php84\\": "" + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3772,62 +5753,62 @@ ], "authors": [ { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "ceesjank@gmail.com" - }, - { - "name": "Christian Lück", - "email": "christian@clue.engineering" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Niklas Keller", - "email": "me@kelunik.com" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Rock-solid event loop for concurrent PHP applications.", + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", + "homepage": "https://symfony.com", "keywords": [ - "async", - "asynchronous", - "concurrency", - "event", - "event-loop", - "non-blocking", - "scheduler" + "compatibility", + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/revoltphp/event-loop/issues", - "source": "https://github.com/revoltphp/event-loop/tree/v1.0.9" + "source": "https://github.com/symfony/polyfill-php84/tree/v1.43.0" }, - "time": "2026-05-16T17:55:38+00:00" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-09-23T22:01:09+00:00" }, { - "name": "symfony/polyfill-mbstring", + "name": "symfony/polyfill-php85", "version": "v1.43.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "4d5d331bf731e0aedbc6b2f5e61135b7b7996a72" + "url": "https://github.com/symfony/polyfill-php85.git", + "reference": "86a42cbcc07adc331481a5ab310a4024bfc227f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/4d5d331bf731e0aedbc6b2f5e61135b7b7996a72", - "reference": "4d5d331bf731e0aedbc6b2f5e61135b7b7996a72", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/86a42cbcc07adc331481a5ab310a4024bfc227f6", + "reference": "86a42cbcc07adc331481a5ab310a4024bfc227f6", "shasum": "" }, "require": { - "ext-iconv": "*", "php": ">=7.2" }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, "type": "library", "extra": { "thanks": { @@ -3840,8 +5821,11 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } + "Symfony\\Polyfill\\Php85\\": "" + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3857,17 +5841,16 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for the Mbstring extension", + "description": "Symfony polyfill backporting some PHP 8.5+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "mbstring", "polyfill", "portable", "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.43.0" + "source": "https://github.com/symfony/polyfill-php85/tree/v1.43.0" }, "funding": [ { @@ -3887,20 +5870,20 @@ "type": "tidelift" } ], - "time": "2026-09-24T15:19:04+00:00" + "time": "2026-09-25T15:46:47+00:00" }, { - "name": "symfony/polyfill-php83", + "name": "symfony/polyfill-php86", "version": "v1.43.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "80ccff923a8d61f73ebe9da0aa94e25232f004ce" + "url": "https://github.com/symfony/polyfill-php86.git", + "reference": "8840df45b24f33a49dc419fa18dc0057231ae1d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/80ccff923a8d61f73ebe9da0aa94e25232f004ce", - "reference": "80ccff923a8d61f73ebe9da0aa94e25232f004ce", + "url": "https://api.github.com/repos/symfony/polyfill-php86/zipball/8840df45b24f33a49dc419fa18dc0057231ae1d8", + "reference": "8840df45b24f33a49dc419fa18dc0057231ae1d8", "shasum": "" }, "require": { @@ -3918,7 +5901,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php83\\": "" + "Symfony\\Polyfill\\Php86\\": "" }, "classmap": [ "Resources/stubs" @@ -3938,7 +5921,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.6+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -3947,7 +5930,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.43.0" + "source": "https://github.com/symfony/polyfill-php86/tree/v1.43.0" }, "funding": [ { @@ -3967,27 +5950,27 @@ "type": "tidelift" } ], - "time": "2026-09-25T15:50:05+00:00" + "time": "2026-09-25T15:46:47+00:00" }, { "name": "webmozart/assert", - "version": "1.12.1", + "version": "2.5.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "9be6926d8b485f55b9229203f962b51ed377ba68" + "reference": "8a163706bbcac613733dba03f51e13b5eb1bb819" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/9be6926d8b485f55b9229203f962b51ed377ba68", - "reference": "9be6926d8b485f55b9229203f962b51ed377ba68", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/8a163706bbcac613733dba03f51e13b5eb1bb819", + "reference": "8a163706bbcac613733dba03f51e13b5eb1bb819", "shasum": "" }, "require": { "ext-ctype": "*", "ext-date": "*", "ext-filter": "*", - "php": "^7.2 || ^8.0" + "php": "^8.2" }, "suggest": { "ext-intl": "", @@ -3996,8 +5979,12 @@ }, "type": "library", "extra": { + "psalm": { + "pluginClass": "Webmozart\\Assert\\PsalmPlugin" + }, "branch-alias": { - "dev-master": "1.10-dev" + "dev-master": "2.0-dev", + "dev-feature/2-0": "2.0-dev" } }, "autoload": { @@ -4013,6 +6000,10 @@ { "name": "Bernhard Schussek", "email": "bschussek@gmail.com" + }, + { + "name": "Woody Gilk", + "email": "woody.gilk@gmail.com" } ], "description": "Assertions to validate method input/output with nice error messages.", @@ -4023,9 +6014,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.12.1" + "source": "https://github.com/webmozarts/assert/tree/2.5.0" }, - "time": "2025-10-29T15:56:20+00:00" + "time": "2026-10-05T23:14:19+00:00" }, { "name": "wizardloop/broadcastmanager", @@ -5911,5 +7902,5 @@ "ext-mbstring": "*" }, "platform-dev": {}, - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.9.0" } diff --git a/patches/madelineproto-formatted-date/README.md b/patches/madelineproto-formatted-date/README.md deleted file mode 100644 index 908f48e..0000000 --- a/patches/madelineproto-formatted-date/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# MadelineProto formatted-date entity compatibility - -Prepared 2026-10-14 for exact MadelineProto 8.7.0 commit 7b99dd0f2d964a492c377912ffce9f5ce61aa9ed. This reviewed upstream release is a prerelease; it is not described as the latest stable release. The installed layer 225 schema declares `messageEntityFormattedDate#904ac7c7`, but the unchanged `MessageEntity::fromRawEntity` factory throws `AssertionError` before message dispatch. The public v8 source reviewed on this date still lacked the factory arm, so no tested compatible official version eliminated this local fix. - -The immutable [factory source](https://github.com/danog/MadelineProto/blob/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/src/EventHandler/Message/Entities/MessageEntity.php) was downloaded and byte-matched to the locked installation. Its pristine SHA256 is 06a9d438cc198f56cfb745a2a3808932269033671146cf82f84ae88e8d6eae60. The complete original schema and upstream license are retained beside that baseline. All exact input, output, schema, diff, class and license hashes are in manifest.json. - -The single unified diff adds two exact factory arms and a new independently authored `FormattedDate` class. The class preserves inherited readonly UTF-16 offset/length, an integer Unix timestamp and all six native flags. It emits/accepts official BotAPI `date_time` (`unix_time`, `date_time_format`) and retains the native MTProto constructor. Integer fields and boolean flags are validated without lossy numeric coercion. Relative/other flags, simultaneous short/long time and simultaneous short/long date are rejected. Empty format preserves the linked original text. See [native constructor](https://core.telegram.org/constructor/messageEntityFormattedDate) and [official format grammar](https://core.telegram.org/bots/api#date-time-entity-formatting). - -The wrapper accepts nonnegative native int32 timestamp/position values. Telegram enforces its own date horizon when a real send is performed; the local wrapper does not use the machine clock to alter an incoming or replayed timestamp. No general unknown-entity fallback is added. Existing entity handlers remain unchanged. The installed generic HTML renderer preserves original text and ordinary surrounding formatting, but does not generate a special date tag; native capture/storage/resend preserves the date entity instead of routing it through HTML. - -## Historical reference and licensing - -The requested exported script at local-reference/newsearch-v2/docker/patch-madeline-formatted-date.php has SHA256 c3091f61a401d8022b8ef1d228cf8c5f31a1094982de69a0be108e21885cb967. Its wrapper has SHA256 a9e3146e49a88bec469e67e53f5e27cffb1b5127cde547590f2e385ef02dd264. The psy new/release-r21-work exports match those bytes. No recoverable Git history/reference commit was available; their metadata conflict between MIT and proprietary and no standalone grant was found. Those exports are documented as behavioral references and are not redistributed here. This is a new implementation, not the original script or patch. - -The unmodified factory/schema and upstream-LICENSE retain their original notices. The new WizardLoop wrapper explicitly grants AGPL-3.0-or-later, consistent with the retained MadelineProto source grant. Application/helper code remains AGPL-3.0-only. Preserve the package metadata/source-header discrepancy documented in THIRD_PARTY_NOTICES; do not flatten dependency grants into the application license. The complete diff, original source and new class ship in all release variants and the corresponding-source offer. - -## Installation and refusal states - -The installer checks exact installed version/commit, complete baseline/diff/reviewed output/license/schema hashes and contained regular targets. The factory and new class are one state: pristine factory plus absent class may be applied; exact reviewed factory plus exact reviewed class succeeds without change. Either partial combination, changed/unrecognized class/factory, symlink/directory, incorrect schema/version or tampered source artifact stops the build. No unknown hash is called upstream-supported, and partial states are not silently repaired. - -Run php scripts/apply-patches.php and php scripts/verify-patches.php before bot startup. Composer and Docker execute the shared five-patch lifecycle; the explicit --no-scripts installation path runs the same two commands. The application writer lock prevents mutation of a running installation. A staged addition is installed exclusively before atomic factory replacement; an interruption between files is a detectable partial state and requires explicit maintenance review. Never patch an active process or container. Vendor is not tracked in Git and no mutable patch is fetched during build. - -## Verification - -FormattedDatePatchTest covers pristine/repeated/read-only verification, both partial states, unknown class/factory, version/commit/schema, all corresponding artifacts, retained license, target types and active-writer refusal. A symlink fixture may be skipped where Windows cannot create it; report that separately. FormattedDateEntityTest exercises all 19 valid flag configurations with the real locked factory/class and native decoder, all 45 invalid combinations, strict types/format, zero/empty defaults, inherited readonly fields, existing unknown rejection, actual StrTools HTML behavior and private template capture/SQLite storage/UTF-16 expansion/native gateway resend with an injected transport. - -Native wire fixtures use the actual constructor descriptor and primitive integer encoder, then the actual TL decoder; they do not claim full serializeParams without its API adapter. No Telegram API, session, client rendering or live formatted-date send was exercised. - -Historical local-reference paths are logical project/file identifiers, not public download URLs or installation requirements. diff --git a/patches/madelineproto-formatted-date/baseline/MessageEntity.php b/patches/madelineproto-formatted-date/baseline/MessageEntity.php deleted file mode 100644 index 0e7bd57..0000000 --- a/patches/madelineproto-formatted-date/baseline/MessageEntity.php +++ /dev/null @@ -1,84 +0,0 @@ - $entities - * @return list - */ - public static function fromRawEntities(array $entities): array - { - return array_map(self::fromRawEntity(...), $entities); - } - - public static function fromRawEntity(array|self $entity): self - { - if ($entity instanceof self) { - return $entity; - } - return match ($entity['_'] ?? $entity['type']) { - 'mention', 'messageEntityMention' => new Mention($entity['offset'], $entity['length']), - 'hashtag', 'messageEntityHashtag' => new Hashtag($entity['offset'], $entity['length']), - 'bot_command', 'messageEntityBotCommand' => new BotCommand($entity['offset'], $entity['length']), - 'email', 'messageEntityEmail' => new Email($entity['offset'], $entity['length']), - 'bold', 'messageEntityBold' => new Bold($entity['offset'], $entity['length']), - 'italic', 'messageEntityItalic' => new Italic($entity['offset'], $entity['length']), - 'url', 'messageEntityUrl' => new Url($entity['offset'], $entity['length']), - 'code', 'messageEntityCode' => new Code($entity['offset'], $entity['length']), - /** @psalm-suppress MixedArgument */ - 'pre', 'messageEntityPre' => new Pre($entity['offset'], $entity['length'], $entity['language'] ?? ''), - 'text_link', 'messageEntityTextUrl' => new TextUrl($entity['offset'], $entity['length'], $entity['url']), - 'text_mention', 'messageEntityMentionName' => new MentionName($entity['offset'], $entity['length'], $entity['user_id'] ?? $entity['user']['id']), - 'inputMessageEntityMentionName' => new InputMentionName($entity['offset'], $entity['length'], $entity['user_id']), - 'phone_number', 'messageEntityPhone' => new Phone($entity['offset'], $entity['length']), - 'cashtag', 'messageEntityCashtag' => new Cashtag($entity['offset'], $entity['length']), - 'underline', 'messageEntityUnderline' => new Underline($entity['offset'], $entity['length']), - 'strikethrough', 'messageEntityStrike' => new Strike($entity['offset'], $entity['length']), - 'block_quote', 'messageEntityBlockquote' => new Blockquote($entity['offset'], $entity['length']), - 'bank_card', 'messageEntityBankCard' => new BankCard($entity['offset'], $entity['length']), - 'spoiler', 'messageEntitySpoiler' => new Spoiler($entity['offset'], $entity['length']), - 'custom_emoji', 'messageEntityCustomEmoji' => new CustomEmoji($entity['offset'], $entity['length'], $entity['document_id'] ?? $entity['custom_emoji_id']), - default => throw new AssertionError("Unknown entity type: ".($entity['_'] ?? $entity['type'])) - }; - } - - /** - * Convert entity to bot API entity. - */ - abstract public function toBotAPI(): array; - /** - * Convert entity to MTProto entity. - */ - abstract public function toMTProto(): array; - - /** @internal */ - #[\Override] - public function jsonSerialize(): mixed - { - $res = ['_' => static::class]; - $refl = new ReflectionClass($this); - foreach ($refl->getProperties(ReflectionProperty::IS_PUBLIC) as $prop) { - $res[$prop->getName()] = $prop->getValue($this); - } - return $res; - } -} diff --git a/patches/madelineproto-formatted-date/baseline/TL_telegram_v225.tl b/patches/madelineproto-formatted-date/baseline/TL_telegram_v225.tl deleted file mode 100644 index 2ad8d9c..0000000 --- a/patches/madelineproto-formatted-date/baseline/TL_telegram_v225.tl +++ /dev/null @@ -1,2979 +0,0 @@ -boolFalse#bc799737 = Bool; -boolTrue#997275b5 = Bool; - -true#3fedd339 = True; - -vector#1cb5c415 {t:Type} # [ t ] = Vector t; - -error#c4b9f9bb code:int text:string = Error; - -null#56730bcc = Null; - -inputPeerEmpty#7f3b18ea = InputPeer; -inputPeerSelf#7da07ec9 = InputPeer; -inputPeerChat#35a95cb9 chat_id:long = InputPeer; -inputPeerUser#dde8a54c user_id:long access_hash:long = InputPeer; -inputPeerChannel#27bcbbfc channel_id:long access_hash:long = InputPeer; -inputPeerUserFromMessage#a87b0a1c peer:InputPeer msg_id:int user_id:long = InputPeer; -inputPeerChannelFromMessage#bd2a0840 peer:InputPeer msg_id:int channel_id:long = InputPeer; - -inputUserEmpty#b98886cf = InputUser; -inputUserSelf#f7c1b13f = InputUser; -inputUser#f21158c6 user_id:long access_hash:long = InputUser; -inputUserFromMessage#1da448e2 peer:InputPeer msg_id:int user_id:long = InputUser; - -inputPhoneContact#6a1dc4be flags:# client_id:long phone:string first_name:string last_name:string note:flags.0?TextWithEntities = InputContact; - -inputFile#f52ff27f id:long parts:int name:string md5_checksum:string = InputFile; -inputFileBig#fa4f0bb5 id:long parts:int name:string = InputFile; -inputFileStoryDocument#62dc8b48 id:InputDocument = InputFile; - -inputMediaEmpty#9664f57f = InputMedia; -inputMediaUploadedPhoto#7d8375da flags:# spoiler:flags.2?true live_photo:flags.3?true file:InputFile stickers:flags.0?Vector ttl_seconds:flags.1?int video:flags.3?InputDocument = InputMedia; -inputMediaPhoto#e3af4434 flags:# spoiler:flags.1?true live_photo:flags.2?true id:InputPhoto ttl_seconds:flags.0?int video:flags.2?InputDocument = InputMedia; -inputMediaGeoPoint#f9c44144 geo_point:InputGeoPoint = InputMedia; -inputMediaContact#f8ab7dfb phone_number:string first_name:string last_name:string vcard:string = InputMedia; -inputMediaUploadedDocument#37c9330 flags:# nosound_video:flags.3?true force_file:flags.4?true spoiler:flags.5?true file:InputFile thumb:flags.2?InputFile mime_type:string attributes:Vector stickers:flags.0?Vector video_cover:flags.6?InputPhoto video_timestamp:flags.7?int ttl_seconds:flags.1?int = InputMedia; -inputMediaDocument#a8763ab5 flags:# spoiler:flags.2?true id:InputDocument video_cover:flags.3?InputPhoto video_timestamp:flags.4?int ttl_seconds:flags.0?int query:flags.1?string = InputMedia; -inputMediaVenue#c13d1c11 geo_point:InputGeoPoint title:string address:string provider:string venue_id:string venue_type:string = InputMedia; -inputMediaPhotoExternal#e5bbfe1a flags:# spoiler:flags.1?true url:string ttl_seconds:flags.0?int = InputMedia; -inputMediaDocumentExternal#779600f9 flags:# spoiler:flags.1?true url:string ttl_seconds:flags.0?int video_cover:flags.2?InputPhoto video_timestamp:flags.3?int = InputMedia; -inputMediaGame#d33f43f3 id:InputGame = InputMedia; -inputMediaInvoice#405fef0d flags:# title:string description:string photo:flags.0?InputWebDocument invoice:Invoice payload:bytes provider:flags.3?string provider_data:DataJSON start_param:flags.1?string extended_media:flags.2?InputMedia = InputMedia; -inputMediaGeoLive#971fa843 flags:# stopped:flags.0?true geo_point:InputGeoPoint heading:flags.2?int period:flags.1?int proximity_notification_radius:flags.3?int = InputMedia; -inputMediaPoll#883a4108 flags:# poll:Poll correct_answers:flags.0?Vector attached_media:flags.3?InputMedia solution:flags.1?string solution_entities:flags.1?Vector solution_media:flags.2?InputMedia = InputMedia; -inputMediaDice#e66fbf7b emoticon:string = InputMedia; -inputMediaStory#89fdd778 peer:InputPeer id:int = InputMedia; -inputMediaWebPage#c21b8849 flags:# force_large_media:flags.0?true force_small_media:flags.1?true optional:flags.2?true url:string = InputMedia; -inputMediaPaidMedia#c4103386 flags:# stars_amount:long extended_media:Vector payload:flags.0?string = InputMedia; -inputMediaTodo#9fc55fde todo:TodoList = InputMedia; -inputMediaStakeDice#f3a9244a game_hash:string ton_amount:long client_seed:bytes = InputMedia; - -inputChatPhotoEmpty#1ca48f57 = InputChatPhoto; -inputChatUploadedPhoto#bdcdaec0 flags:# file:flags.0?InputFile video:flags.1?InputFile video_start_ts:flags.2?double video_emoji_markup:flags.3?VideoSize = InputChatPhoto; -inputChatPhoto#8953ad37 id:InputPhoto = InputChatPhoto; - -inputGeoPointEmpty#e4c123d6 = InputGeoPoint; -inputGeoPoint#48222faf flags:# lat:double long:double accuracy_radius:flags.0?int = InputGeoPoint; - -inputPhotoEmpty#1cd7bf0d = InputPhoto; -inputPhoto#3bb3b94a id:long access_hash:long file_reference:bytes = InputPhoto; - -inputFileLocation#dfdaabe1 volume_id:long local_id:int secret:long file_reference:bytes = InputFileLocation; -inputEncryptedFileLocation#f5235d55 id:long access_hash:long = InputFileLocation; -inputDocumentFileLocation#bad07584 id:long access_hash:long file_reference:bytes thumb_size:string = InputFileLocation; -inputSecureFileLocation#cbc7ee28 id:long access_hash:long = InputFileLocation; -inputTakeoutFileLocation#29be5899 = InputFileLocation; -inputPhotoFileLocation#40181ffe id:long access_hash:long file_reference:bytes thumb_size:string = InputFileLocation; -inputPhotoLegacyFileLocation#d83466f3 id:long access_hash:long file_reference:bytes volume_id:long local_id:int secret:long = InputFileLocation; -inputPeerPhotoFileLocation#37257e99 flags:# big:flags.0?true peer:InputPeer photo_id:long = InputFileLocation; -inputStickerSetThumb#9d84f3db stickerset:InputStickerSet thumb_version:int = InputFileLocation; -inputGroupCallStream#598a92a flags:# call:InputGroupCall time_ms:long scale:int video_channel:flags.0?int video_quality:flags.0?int = InputFileLocation; - -peerUser#59511722 user_id:long = Peer; -peerChat#36c6019a chat_id:long = Peer; -peerChannel#a2a5371e channel_id:long = Peer; - -storage.fileUnknown#aa963b05 = storage.FileType; -storage.filePartial#40bc6f52 = storage.FileType; -storage.fileJpeg#7efe0e = storage.FileType; -storage.fileGif#cae1aadf = storage.FileType; -storage.filePng#a4f63c0 = storage.FileType; -storage.filePdf#ae1e508d = storage.FileType; -storage.fileMp3#528a0677 = storage.FileType; -storage.fileMov#4b09ebbc = storage.FileType; -storage.fileMp4#b3cea0e4 = storage.FileType; -storage.fileWebp#1081464c = storage.FileType; - -userEmpty#d3bc4b7a id:long = User; -user#31774388 flags:# self:flags.10?true contact:flags.11?true mutual_contact:flags.12?true deleted:flags.13?true bot:flags.14?true bot_chat_history:flags.15?true bot_nochats:flags.16?true verified:flags.17?true restricted:flags.18?true min:flags.20?true bot_inline_geo:flags.21?true support:flags.23?true scam:flags.24?true apply_min_photo:flags.25?true fake:flags.26?true bot_attach_menu:flags.27?true premium:flags.28?true attach_menu_enabled:flags.29?true flags2:# bot_can_edit:flags2.1?true close_friend:flags2.2?true stories_hidden:flags2.3?true stories_unavailable:flags2.4?true contact_require_premium:flags2.10?true bot_business:flags2.11?true bot_has_main_app:flags2.13?true bot_forum_view:flags2.16?true bot_forum_can_manage_topics:flags2.17?true bot_can_manage_bots:flags2.18?true bot_guestchat:flags2.19?true id:long access_hash:flags.0?long first_name:flags.1?string last_name:flags.2?string username:flags.3?string phone:flags.4?string photo:flags.5?UserProfilePhoto status:flags.6?UserStatus bot_info_version:flags.14?int restriction_reason:flags.18?Vector bot_inline_placeholder:flags.19?string lang_code:flags.22?string emoji_status:flags.30?EmojiStatus usernames:flags2.0?Vector stories_max_id:flags2.5?RecentStory color:flags2.8?PeerColor profile_color:flags2.9?PeerColor bot_active_users:flags2.12?int bot_verification_icon:flags2.14?long send_paid_messages_stars:flags2.15?long = User; - -userProfilePhotoEmpty#4f11bae1 = UserProfilePhoto; -userProfilePhoto#82d1f706 flags:# has_video:flags.0?true personal:flags.2?true photo_id:long stripped_thumb:flags.1?bytes dc_id:int = UserProfilePhoto; - -userStatusEmpty#9d05049 = UserStatus; -userStatusOnline#edb93949 expires:int = UserStatus; -userStatusOffline#8c703f was_online:int = UserStatus; -userStatusRecently#7b197dc8 flags:# by_me:flags.0?true = UserStatus; -userStatusLastWeek#541a1d1a flags:# by_me:flags.0?true = UserStatus; -userStatusLastMonth#65899777 flags:# by_me:flags.0?true = UserStatus; - -chatEmpty#29562865 id:long = Chat; -chat#41cbf256 flags:# creator:flags.0?true left:flags.2?true deactivated:flags.5?true call_active:flags.23?true call_not_empty:flags.24?true noforwards:flags.25?true id:long title:string photo:ChatPhoto participants_count:int date:int version:int migrated_to:flags.6?InputChannel admin_rights:flags.14?ChatAdminRights default_banned_rights:flags.18?ChatBannedRights = Chat; -chatForbidden#6592a1a7 id:long title:string = Chat; -channel#1c32b11c flags:# creator:flags.0?true left:flags.2?true broadcast:flags.5?true verified:flags.7?true megagroup:flags.8?true restricted:flags.9?true signatures:flags.11?true min:flags.12?true scam:flags.19?true has_link:flags.20?true has_geo:flags.21?true slowmode_enabled:flags.22?true call_active:flags.23?true call_not_empty:flags.24?true fake:flags.25?true gigagroup:flags.26?true noforwards:flags.27?true join_to_send:flags.28?true join_request:flags.29?true forum:flags.30?true flags2:# stories_hidden:flags2.1?true stories_hidden_min:flags2.2?true stories_unavailable:flags2.3?true signature_profiles:flags2.12?true autotranslation:flags2.15?true broadcast_messages_allowed:flags2.16?true monoforum:flags2.17?true forum_tabs:flags2.19?true id:long access_hash:flags.13?long title:string username:flags.6?string photo:ChatPhoto date:int restriction_reason:flags.9?Vector admin_rights:flags.14?ChatAdminRights banned_rights:flags.15?ChatBannedRights default_banned_rights:flags.18?ChatBannedRights participants_count:flags.17?int usernames:flags2.0?Vector stories_max_id:flags2.4?RecentStory color:flags2.7?PeerColor profile_color:flags2.8?PeerColor emoji_status:flags2.9?EmojiStatus level:flags2.10?int subscription_until_date:flags2.11?int bot_verification_icon:flags2.13?long send_paid_messages_stars:flags2.14?long linked_monoforum_id:flags2.18?long = Chat; -channelForbidden#17d493d5 flags:# broadcast:flags.5?true megagroup:flags.8?true monoforum:flags.10?true id:long access_hash:long title:string until_date:flags.16?int = Chat; - -chatFull#2633421b flags:# can_set_username:flags.7?true has_scheduled:flags.8?true translations_disabled:flags.19?true id:long about:string participants:ChatParticipants chat_photo:flags.2?Photo notify_settings:PeerNotifySettings exported_invite:flags.13?ExportedChatInvite bot_info:flags.3?Vector pinned_msg_id:flags.6?int folder_id:flags.11?int call:flags.12?InputGroupCall ttl_period:flags.14?int groupcall_default_join_as:flags.15?Peer theme_emoticon:flags.16?string requests_pending:flags.17?int recent_requesters:flags.17?Vector available_reactions:flags.18?ChatReactions reactions_limit:flags.20?int = ChatFull; -channelFull#e4e0b29d flags:# can_view_participants:flags.3?true can_set_username:flags.6?true can_set_stickers:flags.7?true hidden_prehistory:flags.10?true can_set_location:flags.16?true has_scheduled:flags.19?true can_view_stats:flags.20?true blocked:flags.22?true flags2:# can_delete_channel:flags2.0?true antispam:flags2.1?true participants_hidden:flags2.2?true translations_disabled:flags2.3?true stories_pinned_available:flags2.5?true view_forum_as_messages:flags2.6?true restricted_sponsored:flags2.11?true can_view_revenue:flags2.12?true paid_media_allowed:flags2.14?true can_view_stars_revenue:flags2.15?true paid_reactions_available:flags2.16?true stargifts_available:flags2.19?true paid_messages_available:flags2.20?true id:long about:string participants_count:flags.0?int admins_count:flags.1?int kicked_count:flags.2?int banned_count:flags.2?int online_count:flags.13?int read_inbox_max_id:int read_outbox_max_id:int unread_count:int chat_photo:Photo notify_settings:PeerNotifySettings exported_invite:flags.23?ExportedChatInvite bot_info:Vector migrated_from_chat_id:flags.4?long migrated_from_max_id:flags.4?int pinned_msg_id:flags.5?int stickerset:flags.8?StickerSet available_min_id:flags.9?int folder_id:flags.11?int linked_chat_id:flags.14?long location:flags.15?ChannelLocation slowmode_seconds:flags.17?int slowmode_next_send_date:flags.18?int stats_dc:flags.12?int pts:int call:flags.21?InputGroupCall ttl_period:flags.24?int pending_suggestions:flags.25?Vector groupcall_default_join_as:flags.26?Peer theme_emoticon:flags.27?string requests_pending:flags.28?int recent_requesters:flags.28?Vector default_send_as:flags.29?Peer available_reactions:flags.30?ChatReactions reactions_limit:flags2.13?int stories:flags2.4?PeerStories wallpaper:flags2.7?WallPaper boosts_applied:flags2.8?int boosts_unrestrict:flags2.9?int emojiset:flags2.10?StickerSet bot_verification:flags2.17?BotVerification stargifts_count:flags2.18?int send_paid_messages_stars:flags2.21?long main_tab:flags2.22?ProfileTab = ChatFull; - -chatParticipant#38e79fde flags:# user_id:long inviter_id:long date:int rank:flags.0?string = ChatParticipant; -chatParticipantCreator#e1f867b8 flags:# user_id:long rank:flags.0?string = ChatParticipant; -chatParticipantAdmin#360d5d2 flags:# user_id:long inviter_id:long date:int rank:flags.0?string = ChatParticipant; - -chatParticipantsForbidden#8763d3e1 flags:# chat_id:long self_participant:flags.0?ChatParticipant = ChatParticipants; -chatParticipants#3cbc93f8 chat_id:long participants:Vector version:int = ChatParticipants; - -chatPhotoEmpty#37c1011c = ChatPhoto; -chatPhoto#1c6e1c11 flags:# has_video:flags.0?true photo_id:long stripped_thumb:flags.1?bytes dc_id:int = ChatPhoto; - -messageEmpty#90a6ca84 flags:# id:int peer_id:flags.0?Peer = Message; -message#95ef6f2b flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true post:flags.14?true from_scheduled:flags.18?true legacy:flags.19?true edit_hide:flags.21?true pinned:flags.24?true noforwards:flags.26?true invert_media:flags.27?true flags2:# offline:flags2.1?true video_processing_pending:flags2.4?true paid_suggested_post_stars:flags2.8?true paid_suggested_post_ton:flags2.9?true id:int from_id:flags.8?Peer from_boosts_applied:flags.29?int from_rank:flags2.12?string peer_id:Peer saved_peer_id:flags.28?Peer fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?long via_business_bot_id:flags2.0?long guestchat_via_from:flags2.19?Peer reply_to:flags.3?MessageReplyHeader date:int message:string media:flags.9?MessageMedia reply_markup:flags.6?ReplyMarkup entities:flags.7?Vector views:flags.10?int forwards:flags.10?int replies:flags.23?MessageReplies edit_date:flags.15?int post_author:flags.16?string grouped_id:flags.17?long reactions:flags.20?MessageReactions restriction_reason:flags.22?Vector ttl_period:flags.25?int quick_reply_shortcut_id:flags.30?int effect:flags2.2?long factcheck:flags2.3?FactCheck report_delivery_until_date:flags2.5?int paid_message_stars:flags2.6?long suggested_post:flags2.7?SuggestedPost schedule_repeat_period:flags2.10?int summary_from_language:flags2.11?string = Message; -messageService#7a800e0a flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true reactions_are_possible:flags.9?true silent:flags.13?true post:flags.14?true legacy:flags.19?true id:int from_id:flags.8?Peer peer_id:Peer saved_peer_id:flags.28?Peer reply_to:flags.3?MessageReplyHeader date:int action:MessageAction reactions:flags.20?MessageReactions ttl_period:flags.25?int = Message; - -messageMediaEmpty#3ded6320 = MessageMedia; -messageMediaPhoto#e216eb63 flags:# spoiler:flags.3?true live_photo:flags.4?true photo:flags.0?Photo ttl_seconds:flags.2?int video:flags.4?Document = MessageMedia; -messageMediaGeo#56e0d474 geo:GeoPoint = MessageMedia; -messageMediaContact#70322949 phone_number:string first_name:string last_name:string vcard:string user_id:long = MessageMedia; -messageMediaUnsupported#9f84f49e = MessageMedia; -messageMediaDocument#52d8ccd9 flags:# nopremium:flags.3?true spoiler:flags.4?true video:flags.6?true round:flags.7?true voice:flags.8?true document:flags.0?Document alt_documents:flags.5?Vector video_cover:flags.9?Photo video_timestamp:flags.10?int ttl_seconds:flags.2?int = MessageMedia; -messageMediaWebPage#ddf10c3b flags:# force_large_media:flags.0?true force_small_media:flags.1?true manual:flags.3?true safe:flags.4?true webpage:WebPage = MessageMedia; -messageMediaVenue#2ec0533f geo:GeoPoint title:string address:string provider:string venue_id:string venue_type:string = MessageMedia; -messageMediaGame#fdb19008 game:Game = MessageMedia; -messageMediaInvoice#f6a548d3 flags:# shipping_address_requested:flags.1?true test:flags.3?true title:string description:string photo:flags.0?WebDocument receipt_msg_id:flags.2?int currency:string total_amount:long start_param:string extended_media:flags.4?MessageExtendedMedia = MessageMedia; -messageMediaGeoLive#b940c666 flags:# geo:GeoPoint heading:flags.0?int period:int proximity_notification_radius:flags.1?int = MessageMedia; -messageMediaPoll#773f4e66 flags:# poll:Poll results:PollResults attached_media:flags.0?MessageMedia = MessageMedia; -messageMediaDice#8cbec07 flags:# value:int emoticon:string game_outcome:flags.0?messages.EmojiGameOutcome = MessageMedia; -messageMediaStory#68cb6283 flags:# via_mention:flags.1?true peer:Peer id:int story:flags.0?StoryItem = MessageMedia; -messageMediaGiveaway#aa073beb flags:# only_new_subscribers:flags.0?true winners_are_visible:flags.2?true channels:Vector countries_iso2:flags.1?Vector prize_description:flags.3?string quantity:int months:flags.4?int stars:flags.5?long until_date:int = MessageMedia; -messageMediaGiveawayResults#ceaa3ea1 flags:# only_new_subscribers:flags.0?true refunded:flags.2?true channel_id:long additional_peers_count:flags.3?int launch_msg_id:int winners_count:int unclaimed_count:int winners:Vector months:flags.4?int stars:flags.5?long prize_description:flags.1?string until_date:int = MessageMedia; -messageMediaPaidMedia#a8852491 stars_amount:long extended_media:Vector = MessageMedia; -messageMediaToDo#8a53b014 flags:# todo:TodoList completions:flags.0?Vector = MessageMedia; -messageMediaVideoStream#ca5cab89 flags:# rtmp_stream:flags.0?true call:InputGroupCall = MessageMedia; - -messageActionEmpty#b6aef7b0 = MessageAction; -messageActionChatCreate#bd47cbad title:string users:Vector = MessageAction; -messageActionChatEditTitle#b5a1ce5a title:string = MessageAction; -messageActionChatEditPhoto#7fcb13a8 photo:Photo = MessageAction; -messageActionChatDeletePhoto#95e3fbef = MessageAction; -messageActionChatAddUser#15cefd00 users:Vector = MessageAction; -messageActionChatDeleteUser#a43f30cc user_id:long = MessageAction; -messageActionChatJoinedByLink#31224c3 inviter_id:long = MessageAction; -messageActionChannelCreate#95d2ac92 title:string = MessageAction; -messageActionChatMigrateTo#e1037f92 channel_id:long = MessageAction; -messageActionChannelMigrateFrom#ea3948e9 title:string chat_id:long = MessageAction; -messageActionPinMessage#94bd38ed = MessageAction; -messageActionHistoryClear#9fbab604 = MessageAction; -messageActionGameScore#92a72876 game_id:long score:int = MessageAction; -messageActionPaymentSentMe#ffa00ccc flags:# recurring_init:flags.2?true recurring_used:flags.3?true currency:string total_amount:long payload:bytes info:flags.0?PaymentRequestedInfo shipping_option_id:flags.1?string charge:PaymentCharge subscription_until_date:flags.4?int = MessageAction; -messageActionPaymentSent#c624b16e flags:# recurring_init:flags.2?true recurring_used:flags.3?true currency:string total_amount:long invoice_slug:flags.0?string subscription_until_date:flags.4?int = MessageAction; -messageActionPhoneCall#80e11a7f flags:# video:flags.2?true call_id:long reason:flags.0?PhoneCallDiscardReason duration:flags.1?int = MessageAction; -messageActionScreenshotTaken#4792929b = MessageAction; -messageActionCustomAction#fae69f56 message:string = MessageAction; -messageActionBotAllowed#c516d679 flags:# attach_menu:flags.1?true from_request:flags.3?true domain:flags.0?string app:flags.2?BotApp = MessageAction; -messageActionSecureValuesSentMe#1b287353 values:Vector credentials:SecureCredentialsEncrypted = MessageAction; -messageActionSecureValuesSent#d95c6154 types:Vector = MessageAction; -messageActionContactSignUp#f3f25f76 = MessageAction; -messageActionGeoProximityReached#98e0d697 from_id:Peer to_id:Peer distance:int = MessageAction; -messageActionGroupCall#7a0d7f42 flags:# call:InputGroupCall duration:flags.0?int = MessageAction; -messageActionInviteToGroupCall#502f92f7 call:InputGroupCall users:Vector = MessageAction; -messageActionSetMessagesTTL#3c134d7b flags:# period:int auto_setting_from:flags.0?long = MessageAction; -messageActionGroupCallScheduled#b3a07661 call:InputGroupCall schedule_date:int = MessageAction; -messageActionSetChatTheme#b91bbd3a theme:ChatTheme = MessageAction; -messageActionChatJoinedByRequest#ebbca3cb = MessageAction; -messageActionWebViewDataSentMe#47dd8079 text:string data:string = MessageAction; -messageActionWebViewDataSent#b4c38cb5 text:string = MessageAction; -messageActionGiftPremium#48e91302 flags:# currency:string amount:long days:int crypto_currency:flags.0?string crypto_amount:flags.0?long message:flags.1?TextWithEntities = MessageAction; -messageActionTopicCreate#d999256 flags:# title_missing:flags.1?true title:string icon_color:int icon_emoji_id:flags.0?long = MessageAction; -messageActionTopicEdit#c0944820 flags:# title:flags.0?string icon_emoji_id:flags.1?long closed:flags.2?Bool hidden:flags.3?Bool = MessageAction; -messageActionSuggestProfilePhoto#57de635e photo:Photo = MessageAction; -messageActionRequestedPeer#31518e9b button_id:int peers:Vector = MessageAction; -messageActionSetChatWallPaper#5060a3f4 flags:# same:flags.0?true for_both:flags.1?true wallpaper:WallPaper = MessageAction; -messageActionGiftCode#31c48347 flags:# via_giveaway:flags.0?true unclaimed:flags.5?true boost_peer:flags.1?Peer days:int slug:string currency:flags.2?string amount:flags.2?long crypto_currency:flags.3?string crypto_amount:flags.3?long message:flags.4?TextWithEntities = MessageAction; -messageActionGiveawayLaunch#a80f51e4 flags:# stars:flags.0?long = MessageAction; -messageActionGiveawayResults#87e2f155 flags:# stars:flags.0?true winners_count:int unclaimed_count:int = MessageAction; -messageActionBoostApply#cc02aa6d boosts:int = MessageAction; -messageActionRequestedPeerSentMe#93b31848 button_id:int peers:Vector = MessageAction; -messageActionPaymentRefunded#41b3e202 flags:# peer:Peer currency:string total_amount:long payload:flags.0?bytes charge:PaymentCharge = MessageAction; -messageActionGiftStars#45d5b021 flags:# currency:string amount:long stars:long crypto_currency:flags.0?string crypto_amount:flags.0?long transaction_id:flags.1?string = MessageAction; -messageActionPrizeStars#b00c47a2 flags:# unclaimed:flags.0?true stars:long transaction_id:string boost_peer:Peer giveaway_msg_id:int = MessageAction; -messageActionStarGift#ea2c31d3 flags:# name_hidden:flags.0?true saved:flags.2?true converted:flags.3?true upgraded:flags.5?true refunded:flags.9?true can_upgrade:flags.10?true prepaid_upgrade:flags.13?true upgrade_separate:flags.16?true auction_acquired:flags.17?true gift:StarGift message:flags.1?TextWithEntities convert_stars:flags.4?long upgrade_msg_id:flags.5?int upgrade_stars:flags.8?long from_id:flags.11?Peer peer:flags.12?Peer saved_id:flags.12?long prepaid_upgrade_hash:flags.14?string gift_msg_id:flags.15?int to_id:flags.18?Peer gift_num:flags.19?int = MessageAction; -messageActionStarGiftUnique#e6c31522 flags:# upgrade:flags.0?true transferred:flags.1?true saved:flags.2?true refunded:flags.5?true prepaid_upgrade:flags.11?true assigned:flags.13?true from_offer:flags.14?true craft:flags.16?true gift:StarGift can_export_at:flags.3?int transfer_stars:flags.4?long from_id:flags.6?Peer peer:flags.7?Peer saved_id:flags.7?long resale_amount:flags.8?StarsAmount can_transfer_at:flags.9?int can_resell_at:flags.10?int drop_original_details_stars:flags.12?long can_craft_at:flags.15?int = MessageAction; -messageActionPaidMessagesRefunded#ac1f1fcd count:int stars:long = MessageAction; -messageActionPaidMessagesPrice#84b88578 flags:# broadcast_messages_allowed:flags.0?true stars:long = MessageAction; -messageActionConferenceCall#2ffe2f7a flags:# missed:flags.0?true active:flags.1?true video:flags.4?true call_id:long duration:flags.2?int other_participants:flags.3?Vector = MessageAction; -messageActionTodoCompletions#cc7c5c89 completed:Vector incompleted:Vector = MessageAction; -messageActionTodoAppendTasks#c7edbc83 list:Vector = MessageAction; -messageActionSuggestedPostApproval#ee7a1596 flags:# rejected:flags.0?true balance_too_low:flags.1?true reject_comment:flags.2?string schedule_date:flags.3?int price:flags.4?StarsAmount = MessageAction; -messageActionSuggestedPostSuccess#95ddcf69 price:StarsAmount = MessageAction; -messageActionSuggestedPostRefund#69f916f8 flags:# payer_initiated:flags.0?true = MessageAction; -messageActionGiftTon#a8a3c699 flags:# currency:string amount:long crypto_currency:string crypto_amount:long transaction_id:flags.0?string = MessageAction; -messageActionSuggestBirthday#2c8f2a25 birthday:Birthday = MessageAction; -messageActionStarGiftPurchaseOffer#774278d4 flags:# accepted:flags.0?true declined:flags.1?true gift:StarGift price:StarsAmount expires_at:int = MessageAction; -messageActionStarGiftPurchaseOfferDeclined#73ada76b flags:# expired:flags.0?true gift:StarGift price:StarsAmount = MessageAction; -messageActionNewCreatorPending#b07ed085 new_creator_id:long = MessageAction; -messageActionChangeCreator#e188503b new_creator_id:long = MessageAction; -messageActionNoForwardsToggle#bf7d6572 prev_value:Bool new_value:Bool = MessageAction; -messageActionNoForwardsRequest#3e2793ba flags:# expired:flags.0?true prev_value:Bool new_value:Bool = MessageAction; -messageActionPollAppendAnswer#9da1cd6c answer:PollAnswer = MessageAction; -messageActionPollDeleteAnswer#399674dc answer:PollAnswer = MessageAction; -messageActionManagedBotCreated#16605e3e bot_id:long = MessageAction; - -dialog#fc89f7f3 flags:# pinned:flags.2?true unread_mark:flags.3?true view_forum_as_messages:flags.6?true peer:Peer top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int unread_reactions_count:int unread_poll_votes_count:int notify_settings:PeerNotifySettings pts:flags.0?int draft:flags.1?DraftMessage folder_id:flags.4?int ttl_period:flags.5?int = Dialog; -dialogFolder#71bd134c flags:# pinned:flags.2?true folder:Folder peer:Peer top_message:int unread_muted_peers_count:int unread_unmuted_peers_count:int unread_muted_messages_count:int unread_unmuted_messages_count:int = Dialog; - -photoEmpty#2331b22d id:long = Photo; -photo#fb197a65 flags:# has_stickers:flags.0?true id:long access_hash:long file_reference:bytes date:int sizes:Vector video_sizes:flags.1?Vector dc_id:int = Photo; - -photoSizeEmpty#e17e23c type:string = PhotoSize; -photoSize#75c78e60 type:string w:int h:int size:int = PhotoSize; -photoCachedSize#21e1ad6 type:string w:int h:int bytes:bytes = PhotoSize; -photoStrippedSize#e0b0bc2e type:string bytes:bytes = PhotoSize; -photoSizeProgressive#fa3efb95 type:string w:int h:int sizes:Vector = PhotoSize; -photoPathSize#d8214d41 type:string bytes:bytes = PhotoSize; - -geoPointEmpty#1117dd5f = GeoPoint; -geoPoint#b2a2f663 flags:# long:double lat:double access_hash:long accuracy_radius:flags.0?int = GeoPoint; - -auth.sentCode#5e002502 flags:# type:auth.SentCodeType phone_code_hash:string next_type:flags.1?auth.CodeType timeout:flags.2?int = auth.SentCode; -auth.sentCodeSuccess#2390fe44 authorization:auth.Authorization = auth.SentCode; -auth.sentCodePaymentRequired#f8827ebf store_product:string phone_code_hash:string support_email_address:string support_email_subject:string premium_days:int currency:string amount:long = auth.SentCode; - -auth.authorization#2ea2c0d4 flags:# setup_password_required:flags.1?true otherwise_relogin_days:flags.1?int tmp_sessions:flags.0?int future_auth_token:flags.2?bytes user:User = auth.Authorization; -auth.authorizationSignUpRequired#44747e9a flags:# terms_of_service:flags.0?help.TermsOfService = auth.Authorization; - -auth.exportedAuthorization#b434e2b8 id:long bytes:bytes = auth.ExportedAuthorization; - -inputNotifyPeer#b8bc5b0c peer:InputPeer = InputNotifyPeer; -inputNotifyUsers#193b4417 = InputNotifyPeer; -inputNotifyChats#4a95e84e = InputNotifyPeer; -inputNotifyBroadcasts#b1db7c7e = InputNotifyPeer; -inputNotifyForumTopic#5c467992 peer:InputPeer top_msg_id:int = InputNotifyPeer; - -inputPeerNotifySettings#cacb6ae2 flags:# show_previews:flags.0?Bool silent:flags.1?Bool mute_until:flags.2?int sound:flags.3?NotificationSound stories_muted:flags.6?Bool stories_hide_sender:flags.7?Bool stories_sound:flags.8?NotificationSound = InputPeerNotifySettings; - -peerNotifySettings#99622c0c flags:# show_previews:flags.0?Bool silent:flags.1?Bool mute_until:flags.2?int ios_sound:flags.3?NotificationSound android_sound:flags.4?NotificationSound other_sound:flags.5?NotificationSound stories_muted:flags.6?Bool stories_hide_sender:flags.7?Bool stories_ios_sound:flags.8?NotificationSound stories_android_sound:flags.9?NotificationSound stories_other_sound:flags.10?NotificationSound = PeerNotifySettings; - -peerSettings#f47741f7 flags:# report_spam:flags.0?true add_contact:flags.1?true block_contact:flags.2?true share_contact:flags.3?true need_contacts_exception:flags.4?true report_geo:flags.5?true autoarchived:flags.7?true invite_members:flags.8?true request_chat_broadcast:flags.10?true business_bot_paused:flags.11?true business_bot_can_reply:flags.12?true geo_distance:flags.6?int request_chat_title:flags.9?string request_chat_date:flags.9?int business_bot_id:flags.13?long business_bot_manage_url:flags.13?string charge_paid_message_stars:flags.14?long registration_month:flags.15?string phone_country:flags.16?string name_change_date:flags.17?int photo_change_date:flags.18?int = PeerSettings; - -wallPaper#a437c3ed id:long flags:# creator:flags.0?true default:flags.1?true pattern:flags.3?true dark:flags.4?true access_hash:long slug:string document:Document settings:flags.2?WallPaperSettings = WallPaper; -wallPaperNoFile#e0804116 id:long flags:# default:flags.1?true dark:flags.4?true settings:flags.2?WallPaperSettings = WallPaper; - -inputReportReasonSpam#58dbcab8 = ReportReason; -inputReportReasonViolence#1e22c78d = ReportReason; -inputReportReasonPornography#2e59d922 = ReportReason; -inputReportReasonChildAbuse#adf44ee3 = ReportReason; -inputReportReasonOther#c1e4a2b1 = ReportReason; -inputReportReasonCopyright#9b89f93a = ReportReason; -inputReportReasonGeoIrrelevant#dbd4feed = ReportReason; -inputReportReasonFake#f5ddd6e7 = ReportReason; -inputReportReasonIllegalDrugs#a8eb2be = ReportReason; -inputReportReasonPersonalDetails#9ec7863d = ReportReason; - -userFull#6cbe645 flags:# blocked:flags.0?true phone_calls_available:flags.4?true phone_calls_private:flags.5?true can_pin_message:flags.7?true has_scheduled:flags.12?true video_calls_available:flags.13?true voice_messages_forbidden:flags.20?true translations_disabled:flags.23?true stories_pinned_available:flags.26?true blocked_my_stories_from:flags.27?true wallpaper_overridden:flags.28?true contact_require_premium:flags.29?true read_dates_private:flags.30?true flags2:# sponsored_enabled:flags2.7?true can_view_revenue:flags2.9?true bot_can_manage_emoji_status:flags2.10?true display_gifts_button:flags2.16?true noforwards_my_enabled:flags2.23?true noforwards_peer_enabled:flags2.24?true unofficial_security_risk:flags2.26?true id:long about:flags.1?string settings:PeerSettings personal_photo:flags.21?Photo profile_photo:flags.2?Photo fallback_photo:flags.22?Photo notify_settings:PeerNotifySettings bot_info:flags.3?BotInfo pinned_msg_id:flags.6?int common_chats_count:int folder_id:flags.11?int ttl_period:flags.14?int theme:flags.15?ChatTheme private_forward_name:flags.16?string bot_group_admin_rights:flags.17?ChatAdminRights bot_broadcast_admin_rights:flags.18?ChatAdminRights wallpaper:flags.24?WallPaper stories:flags.25?PeerStories business_work_hours:flags2.0?BusinessWorkHours business_location:flags2.1?BusinessLocation business_greeting_message:flags2.2?BusinessGreetingMessage business_away_message:flags2.3?BusinessAwayMessage business_intro:flags2.4?BusinessIntro birthday:flags2.5?Birthday personal_channel_id:flags2.6?long personal_channel_message:flags2.6?int stargifts_count:flags2.8?int starref_program:flags2.11?StarRefProgram bot_verification:flags2.12?BotVerification send_paid_messages_stars:flags2.14?long disallowed_gifts:flags2.15?DisallowedGiftsSettings stars_rating:flags2.17?StarsRating stars_my_pending_rating:flags2.18?StarsRating stars_my_pending_rating_date:flags2.18?int main_tab:flags2.20?ProfileTab saved_music:flags2.21?Document note:flags2.22?TextWithEntities bot_manager_id:flags2.25?long = UserFull; - -contact#145ade0b user_id:long mutual:Bool = Contact; - -importedContact#c13e3c50 user_id:long client_id:long = ImportedContact; - -contactStatus#16d9703b user_id:long status:UserStatus = ContactStatus; - -contacts.contactsNotModified#b74ba9d2 = contacts.Contacts; -contacts.contacts#eae87e42 contacts:Vector saved_count:int users:Vector = contacts.Contacts; - -contacts.importedContacts#77d01c3b imported:Vector popular_invites:Vector retry_contacts:Vector users:Vector = contacts.ImportedContacts; - -contacts.blocked#ade1591 blocked:Vector chats:Vector users:Vector = contacts.Blocked; -contacts.blockedSlice#e1664194 count:int blocked:Vector chats:Vector users:Vector = contacts.Blocked; - -messages.dialogs#15ba6c40 dialogs:Vector messages:Vector chats:Vector users:Vector = messages.Dialogs; -messages.dialogsSlice#71e094f3 count:int dialogs:Vector messages:Vector chats:Vector users:Vector = messages.Dialogs; -messages.dialogsNotModified#f0e3e596 count:int = messages.Dialogs; - -messages.messages#1d73e7ea messages:Vector topics:Vector chats:Vector users:Vector = messages.Messages; -messages.messagesSlice#5f206716 flags:# inexact:flags.1?true count:int next_rate:flags.0?int offset_id_offset:flags.2?int search_flood:flags.3?SearchPostsFlood messages:Vector topics:Vector chats:Vector users:Vector = messages.Messages; -messages.channelMessages#c776ba4e flags:# inexact:flags.1?true pts:int count:int offset_id_offset:flags.2?int messages:Vector topics:Vector chats:Vector users:Vector = messages.Messages; -messages.messagesNotModified#74535f21 count:int = messages.Messages; - -messages.chats#64ff9fd5 chats:Vector = messages.Chats; -messages.chatsSlice#9cd81144 count:int chats:Vector = messages.Chats; - -messages.chatFull#e5d7d19c full_chat:ChatFull chats:Vector users:Vector = messages.ChatFull; - -messages.affectedHistory#b45c69d1 pts:int pts_count:int offset:int = messages.AffectedHistory; - -inputMessagesFilterEmpty#57e2f66c = MessagesFilter; -inputMessagesFilterPhotos#9609a51c = MessagesFilter; -inputMessagesFilterVideo#9fc00e65 = MessagesFilter; -inputMessagesFilterPhotoVideo#56e9f0e4 = MessagesFilter; -inputMessagesFilterDocument#9eddf188 = MessagesFilter; -inputMessagesFilterUrl#7ef0dd87 = MessagesFilter; -inputMessagesFilterGif#ffc86587 = MessagesFilter; -inputMessagesFilterVoice#50f5c392 = MessagesFilter; -inputMessagesFilterMusic#3751b49e = MessagesFilter; -inputMessagesFilterChatPhotos#3a20ecb8 = MessagesFilter; -inputMessagesFilterPhoneCalls#80c99768 flags:# missed:flags.0?true = MessagesFilter; -inputMessagesFilterRoundVoice#7a7c17a4 = MessagesFilter; -inputMessagesFilterRoundVideo#b549da53 = MessagesFilter; -inputMessagesFilterMyMentions#c1f8e69a = MessagesFilter; -inputMessagesFilterGeo#e7026d0d = MessagesFilter; -inputMessagesFilterContacts#e062db83 = MessagesFilter; -inputMessagesFilterPinned#1bb00451 = MessagesFilter; -inputMessagesFilterPoll#fa2bc90a = MessagesFilter; - -updateNewMessage#1f2b0afd message:Message pts:int pts_count:int = Update; -updateMessageID#4e90bfd6 id:int random_id:long = Update; -updateDeleteMessages#a20db0e5 messages:Vector pts:int pts_count:int = Update; -updateUserTyping#2a17bf5c flags:# user_id:long top_msg_id:flags.0?int action:SendMessageAction = Update; -updateChatUserTyping#83487af0 chat_id:long from_id:Peer action:SendMessageAction = Update; -updateChatParticipants#7761198 participants:ChatParticipants = Update; -updateUserStatus#e5bdf8de user_id:long status:UserStatus = Update; -updateUserName#a7848924 user_id:long first_name:string last_name:string usernames:Vector = Update; -updateNewAuthorization#8951abef flags:# unconfirmed:flags.0?true hash:long date:flags.0?int device:flags.0?string location:flags.0?string = Update; -updateNewEncryptedMessage#12bcbd9a message:EncryptedMessage qts:int = Update; -updateEncryptedChatTyping#1710f156 chat_id:int = Update; -updateEncryption#b4a2e88d chat:EncryptedChat date:int = Update; -updateEncryptedMessagesRead#38fe25b7 chat_id:int max_date:int date:int = Update; -updateChatParticipantAdd#3dda5451 chat_id:long user_id:long inviter_id:long date:int version:int = Update; -updateChatParticipantDelete#e32f3d77 chat_id:long user_id:long version:int = Update; -updateDcOptions#8e5e9873 dc_options:Vector = Update; -updateNotifySettings#bec268ef peer:NotifyPeer notify_settings:PeerNotifySettings = Update; -updateServiceNotification#ebe46819 flags:# popup:flags.0?true invert_media:flags.2?true inbox_date:flags.1?int type:string message:string media:MessageMedia entities:Vector = Update; -updatePrivacy#ee3b272a key:PrivacyKey rules:Vector = Update; -updateUserPhone#5492a13 user_id:long phone:string = Update; -updateReadHistoryInbox#9e84bc99 flags:# folder_id:flags.0?int peer:Peer top_msg_id:flags.1?int max_id:int still_unread_count:int pts:int pts_count:int = Update; -updateReadHistoryOutbox#2f2f21bf peer:Peer max_id:int pts:int pts_count:int = Update; -updateWebPage#7f891213 webpage:WebPage pts:int pts_count:int = Update; -updateReadMessagesContents#f8227181 flags:# messages:Vector pts:int pts_count:int date:flags.0?int = Update; -updateChannelTooLong#108d941f flags:# channel_id:long pts:flags.0?int = Update; -updateChannel#635b4c09 channel_id:long = Update; -updateNewChannelMessage#62ba04d9 message:Message pts:int pts_count:int = Update; -updateReadChannelInbox#922e6e10 flags:# folder_id:flags.0?int channel_id:long max_id:int still_unread_count:int pts:int = Update; -updateDeleteChannelMessages#c32d5b12 channel_id:long messages:Vector pts:int pts_count:int = Update; -updateChannelMessageViews#f226ac08 channel_id:long id:int views:int = Update; -updateChatParticipantAdmin#d7ca61a2 chat_id:long user_id:long is_admin:Bool version:int = Update; -updateNewStickerSet#688a30aa stickerset:messages.StickerSet = Update; -updateStickerSetsOrder#bb2d201 flags:# masks:flags.0?true emojis:flags.1?true order:Vector = Update; -updateStickerSets#31c24808 flags:# masks:flags.0?true emojis:flags.1?true = Update; -updateSavedGifs#9375341e = Update; -updateBotInlineQuery#496f379c flags:# query_id:long user_id:long query:string geo:flags.0?GeoPoint peer_type:flags.1?InlineQueryPeerType offset:string = Update; -updateBotInlineSend#12f12a07 flags:# user_id:long query:string geo:flags.0?GeoPoint id:string msg_id:flags.1?InputBotInlineMessageID = Update; -updateEditChannelMessage#1b3f4df7 message:Message pts:int pts_count:int = Update; -updateBotCallbackQuery#b9cfc48d flags:# query_id:long user_id:long peer:Peer msg_id:int chat_instance:long data:flags.0?bytes game_short_name:flags.1?string = Update; -updateEditMessage#e40370a3 message:Message pts:int pts_count:int = Update; -updateInlineBotCallbackQuery#691e9052 flags:# query_id:long user_id:long msg_id:InputBotInlineMessageID chat_instance:long data:flags.0?bytes game_short_name:flags.1?string = Update; -updateReadChannelOutbox#b75f99a9 channel_id:long max_id:int = Update; -updateDraftMessage#edfc111e flags:# peer:Peer top_msg_id:flags.0?int saved_peer_id:flags.1?Peer draft:DraftMessage = Update; -updateReadFeaturedStickers#571d2742 = Update; -updateRecentStickers#9a422c20 = Update; -updateConfig#a229dd06 = Update; -updatePtsChanged#3354678f = Update; -updateChannelWebPage#2f2ba99f channel_id:long webpage:WebPage pts:int pts_count:int = Update; -updateDialogPinned#6e6fe51c flags:# pinned:flags.0?true folder_id:flags.1?int peer:DialogPeer = Update; -updatePinnedDialogs#fa0f3ca2 flags:# folder_id:flags.1?int order:flags.0?Vector = Update; -updateBotWebhookJSON#8317c0c3 data:DataJSON = Update; -updateBotWebhookJSONQuery#9b9240a6 query_id:long data:DataJSON timeout:int = Update; -updateBotShippingQuery#b5aefd7d query_id:long user_id:long payload:bytes shipping_address:PostAddress = Update; -updateBotPrecheckoutQuery#8caa9a96 flags:# query_id:long user_id:long payload:bytes info:flags.0?PaymentRequestedInfo shipping_option_id:flags.1?string currency:string total_amount:long = Update; -updatePhoneCall#ab0f6b1e phone_call:PhoneCall = Update; -updateLangPackTooLong#46560264 lang_code:string = Update; -updateLangPack#56022f4d difference:LangPackDifference = Update; -updateFavedStickers#e511996d = Update; -updateChannelReadMessagesContents#25f324f7 flags:# channel_id:long top_msg_id:flags.0?int saved_peer_id:flags.1?Peer messages:Vector = Update; -updateContactsReset#7084a7be = Update; -updateChannelAvailableMessages#b23fc698 channel_id:long available_min_id:int = Update; -updateDialogUnreadMark#b658f23e flags:# unread:flags.0?true peer:DialogPeer saved_peer_id:flags.1?Peer = Update; -updateMessagePoll#d64c522b flags:# peer:flags.1?Peer msg_id:flags.1?int top_msg_id:flags.2?int poll_id:long poll:flags.0?Poll results:PollResults = Update; -updateChatDefaultBannedRights#54c01850 peer:Peer default_banned_rights:ChatBannedRights version:int = Update; -updateFolderPeers#19360dc0 folder_peers:Vector pts:int pts_count:int = Update; -updatePeerSettings#6a7e7366 peer:Peer settings:PeerSettings = Update; -updatePeerLocated#b4afcfb0 peers:Vector = Update; -updateNewScheduledMessage#39a51dfb message:Message = Update; -updateDeleteScheduledMessages#f2a71983 flags:# peer:Peer messages:Vector sent_messages:flags.0?Vector = Update; -updateTheme#8216fba3 theme:Theme = Update; -updateGeoLiveViewed#871fb939 peer:Peer msg_id:int = Update; -updateLoginToken#564fe691 = Update; -updateMessagePollVote#7699f014 poll_id:long peer:Peer options:Vector positions:Vector qts:int = Update; -updateDialogFilter#26ffde7d flags:# id:int filter:flags.0?DialogFilter = Update; -updateDialogFilterOrder#a5d72105 order:Vector = Update; -updateDialogFilters#3504914f = Update; -updatePhoneCallSignalingData#2661bf09 phone_call_id:long data:bytes = Update; -updateChannelMessageForwards#d29a27f4 channel_id:long id:int forwards:int = Update; -updateReadChannelDiscussionInbox#d6b19546 flags:# channel_id:long top_msg_id:int read_max_id:int broadcast_id:flags.0?long broadcast_post:flags.0?int = Update; -updateReadChannelDiscussionOutbox#695c9e7c channel_id:long top_msg_id:int read_max_id:int = Update; -updatePeerBlocked#ebe07752 flags:# blocked:flags.0?true blocked_my_stories_from:flags.1?true peer_id:Peer = Update; -updateChannelUserTyping#8c88c923 flags:# channel_id:long top_msg_id:flags.0?int from_id:Peer action:SendMessageAction = Update; -updatePinnedMessages#ed85eab5 flags:# pinned:flags.0?true peer:Peer messages:Vector pts:int pts_count:int = Update; -updatePinnedChannelMessages#5bb98608 flags:# pinned:flags.0?true channel_id:long messages:Vector pts:int pts_count:int = Update; -updateChat#f89a6a4e chat_id:long = Update; -updateGroupCallParticipants#f2ebdb4e call:InputGroupCall participants:Vector version:int = Update; -updateGroupCall#9d2216e0 flags:# live_story:flags.2?true peer:flags.1?Peer call:GroupCall = Update; -updatePeerHistoryTTL#bb9bb9a5 flags:# peer:Peer ttl_period:flags.0?int = Update; -updateChatParticipant#d087663a flags:# chat_id:long date:int actor_id:long user_id:long prev_participant:flags.0?ChatParticipant new_participant:flags.1?ChatParticipant invite:flags.2?ExportedChatInvite qts:int = Update; -updateChannelParticipant#985d3abb flags:# via_chatlist:flags.3?true channel_id:long date:int actor_id:long user_id:long prev_participant:flags.0?ChannelParticipant new_participant:flags.1?ChannelParticipant invite:flags.2?ExportedChatInvite qts:int = Update; -updateBotStopped#c4870a49 user_id:long date:int stopped:Bool qts:int = Update; -updateGroupCallConnection#b783982 flags:# presentation:flags.0?true params:DataJSON = Update; -updateBotCommands#4d712f2e peer:Peer bot_id:long commands:Vector = Update; -updatePendingJoinRequests#7063c3db peer:Peer requests_pending:int recent_requesters:Vector = Update; -updateBotChatInviteRequester#11dfa986 peer:Peer date:int user_id:long about:string invite:ExportedChatInvite qts:int = Update; -updateMessageReactions#1e297bfa flags:# peer:Peer msg_id:int top_msg_id:flags.0?int saved_peer_id:flags.1?Peer reactions:MessageReactions = Update; -updateAttachMenuBots#17b7a20b = Update; -updateWebViewResultSent#1592b79d query_id:long = Update; -updateBotMenuButton#14b85813 bot_id:long button:BotMenuButton = Update; -updateSavedRingtones#74d8be99 = Update; -updateTranscribedAudio#84cd5a flags:# pending:flags.0?true peer:Peer msg_id:int transcription_id:long text:string = Update; -updateReadFeaturedEmojiStickers#fb4c496c = Update; -updateUserEmojiStatus#28373599 user_id:long emoji_status:EmojiStatus = Update; -updateRecentEmojiStatuses#30f443db = Update; -updateRecentReactions#6f7863f4 = Update; -updateMoveStickerSetToTop#86fccf85 flags:# masks:flags.0?true emojis:flags.1?true stickerset:long = Update; -updateMessageExtendedMedia#d5a41724 peer:Peer msg_id:int extended_media:Vector = Update; -updateUser#20529438 user_id:long = Update; -updateAutoSaveSettings#ec05b097 = Update; -updateStory#75b3b798 peer:Peer story:StoryItem = Update; -updateReadStories#f74e932b peer:Peer max_id:int = Update; -updateStoryID#1bf335b9 id:int random_id:long = Update; -updateStoriesStealthMode#2c084dc1 stealth_mode:StoriesStealthMode = Update; -updateSentStoryReaction#7d627683 peer:Peer story_id:int reaction:Reaction = Update; -updateBotChatBoost#904dd49c peer:Peer boost:Boost qts:int = Update; -updateChannelViewForumAsMessages#7b68920 channel_id:long enabled:Bool = Update; -updatePeerWallpaper#ae3f101d flags:# wallpaper_overridden:flags.1?true peer:Peer wallpaper:flags.0?WallPaper = Update; -updateBotMessageReaction#ac21d3ce peer:Peer msg_id:int date:int actor:Peer old_reactions:Vector new_reactions:Vector qts:int = Update; -updateBotMessageReactions#9cb7759 peer:Peer msg_id:int date:int reactions:Vector qts:int = Update; -updateSavedDialogPinned#aeaf9e74 flags:# pinned:flags.0?true peer:DialogPeer = Update; -updatePinnedSavedDialogs#686c85a6 flags:# order:flags.0?Vector = Update; -updateSavedReactionTags#39c67432 = Update; -updateSmsJob#f16269d4 job_id:string = Update; -updateQuickReplies#f9470ab2 quick_replies:Vector = Update; -updateNewQuickReply#f53da717 quick_reply:QuickReply = Update; -updateDeleteQuickReply#53e6f1ec shortcut_id:int = Update; -updateQuickReplyMessage#3e050d0f message:Message = Update; -updateDeleteQuickReplyMessages#566fe7cd shortcut_id:int messages:Vector = Update; -updateBotBusinessConnect#8ae5c97a connection:BotBusinessConnection qts:int = Update; -updateBotNewBusinessMessage#9ddb347c flags:# connection_id:string message:Message reply_to_message:flags.0?Message qts:int = Update; -updateBotEditBusinessMessage#7df587c flags:# connection_id:string message:Message reply_to_message:flags.0?Message qts:int = Update; -updateBotDeleteBusinessMessage#a02a982e connection_id:string peer:Peer messages:Vector qts:int = Update; -updateNewStoryReaction#1824e40b story_id:int peer:Peer reaction:Reaction = Update; -updateStarsBalance#4e80a379 balance:StarsAmount = Update; -updateBusinessBotCallbackQuery#1ea2fda7 flags:# query_id:long user_id:long connection_id:string message:Message reply_to_message:flags.2?Message chat_instance:long data:flags.0?bytes = Update; -updateStarsRevenueStatus#a584b019 peer:Peer status:StarsRevenueStatus = Update; -updateBotPurchasedPaidMedia#283bd312 user_id:long payload:string qts:int = Update; -updatePaidReactionPrivacy#8b725fce private:PaidReactionPrivacy = Update; -updateSentPhoneCode#504aa18f sent_code:auth.SentCode = Update; -updateGroupCallChainBlocks#a477288f call:InputGroupCall sub_chain_id:int blocks:Vector next_offset:int = Update; -updateReadMonoForumInbox#77b0e372 channel_id:long saved_peer_id:Peer read_max_id:int = Update; -updateReadMonoForumOutbox#a4a79376 channel_id:long saved_peer_id:Peer read_max_id:int = Update; -updateMonoForumNoPaidException#9f812b08 flags:# exception:flags.0?true channel_id:long saved_peer_id:Peer = Update; -updateGroupCallMessage#d8326f0d call:InputGroupCall message:GroupCallMessage = Update; -updateGroupCallEncryptedMessage#c957a766 call:InputGroupCall from_id:Peer encrypted_message:bytes = Update; -updatePinnedForumTopic#683b2c52 flags:# pinned:flags.0?true peer:Peer topic_id:int = Update; -updatePinnedForumTopics#def143d0 flags:# peer:Peer order:flags.0?Vector = Update; -updateDeleteGroupCallMessages#3e85e92c call:InputGroupCall messages:Vector = Update; -updateStarGiftAuctionState#48e246c2 gift_id:long state:StarGiftAuctionState = Update; -updateStarGiftAuctionUserState#dc58f31e gift_id:long user_state:StarGiftAuctionUserState = Update; -updateEmojiGameInfo#fb9c547a info:messages.EmojiGameInfo = Update; -updateStarGiftCraftFail#ac072444 = Update; -updateChatParticipantRank#bd8367b9 chat_id:long user_id:long rank:string version:int = Update; -updateManagedBot#4880ed9a user_id:long bot_id:long qts:int = Update; -updateBotGuestChatQuery#cdd4093d flags:# query_id:long message:Message reference_messages:flags.0?Vector qts:int = Update; -updateAiComposeTones#8c0f91fb = Update; - -updates.state#a56c2a3e pts:int qts:int date:int seq:int unread_count:int = updates.State; - -updates.differenceEmpty#5d75a138 date:int seq:int = updates.Difference; -updates.difference#f49ca0 new_messages:Vector new_encrypted_messages:Vector other_updates:Vector chats:Vector users:Vector state:updates.State = updates.Difference; -updates.differenceSlice#a8fb1981 new_messages:Vector new_encrypted_messages:Vector other_updates:Vector chats:Vector users:Vector intermediate_state:updates.State = updates.Difference; -updates.differenceTooLong#4afe8f6d pts:int = updates.Difference; - -updatesTooLong#e317af7e = Updates; -updateShortMessage#313bc7f8 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true id:int user_id:long message:string pts:int pts_count:int date:int fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?long reply_to:flags.3?MessageReplyHeader entities:flags.7?Vector ttl_period:flags.25?int = Updates; -updateShortChatMessage#4d6deea5 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true id:int from_id:long chat_id:long message:string pts:int pts_count:int date:int fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?long reply_to:flags.3?MessageReplyHeader entities:flags.7?Vector ttl_period:flags.25?int = Updates; -updateShort#78d4dec1 update:Update date:int = Updates; -updatesCombined#725b04c3 updates:Vector users:Vector chats:Vector date:int seq_start:int seq:int = Updates; -updates#74ae4240 updates:Vector users:Vector chats:Vector date:int seq:int = Updates; -updateShortSentMessage#9015e101 flags:# out:flags.1?true id:int pts:int pts_count:int date:int media:flags.9?MessageMedia entities:flags.7?Vector ttl_period:flags.25?int = Updates; - -photos.photos#8dca6aa5 photos:Vector users:Vector = photos.Photos; -photos.photosSlice#15051f54 count:int photos:Vector users:Vector = photos.Photos; - -photos.photo#20212ca8 photo:Photo users:Vector = photos.Photo; - -upload.file#96a18d5 type:storage.FileType mtime:int bytes:bytes = upload.File; -upload.fileCdnRedirect#f18cda44 dc_id:int file_token:bytes encryption_key:bytes encryption_iv:bytes file_hashes:Vector = upload.File; - -dcOption#18b7a10d flags:# ipv6:flags.0?true media_only:flags.1?true tcpo_only:flags.2?true cdn:flags.3?true static:flags.4?true this_port_only:flags.5?true id:int ip_address:string port:int secret:flags.10?bytes = DcOption; - -config#cc1a241e flags:# default_p2p_contacts:flags.3?true preload_featured_stickers:flags.4?true revoke_pm_inbox:flags.6?true blocked_mode:flags.8?true force_try_ipv6:flags.14?true date:int expires:int test_mode:Bool this_dc:int dc_options:Vector dc_txt_domain_name:string chat_size_max:int megagroup_size_max:int forwarded_count_max:int online_update_period_ms:int offline_blur_timeout_ms:int offline_idle_timeout_ms:int online_cloud_timeout_ms:int notify_cloud_delay_ms:int notify_default_delay_ms:int push_chat_period_ms:int push_chat_limit:int edit_time_limit:int revoke_time_limit:int revoke_pm_time_limit:int rating_e_decay:int stickers_recent_limit:int channels_read_media_period:int tmp_sessions:flags.0?int call_receive_timeout_ms:int call_ring_timeout_ms:int call_connect_timeout_ms:int call_packet_timeout_ms:int me_url_prefix:string autoupdate_url_prefix:flags.7?string gif_search_username:flags.9?string venue_search_username:flags.10?string img_search_username:flags.11?string static_maps_provider:flags.12?string caption_length_max:int message_length_max:int webfile_dc_id:int suggested_lang_code:flags.2?string lang_pack_version:flags.2?int base_lang_pack_version:flags.2?int reactions_default:flags.15?Reaction autologin_token:flags.16?string = Config; - -nearestDc#8e1a1775 country:string this_dc:int nearest_dc:int = NearestDc; - -help.appUpdate#ccbbce30 flags:# can_not_skip:flags.0?true id:int version:string text:string entities:Vector document:flags.1?Document url:flags.2?string sticker:flags.3?Document = help.AppUpdate; -help.noAppUpdate#c45a6536 = help.AppUpdate; - -help.inviteText#18cb9f78 message:string = help.InviteText; - -encryptedChatEmpty#ab7ec0a0 id:int = EncryptedChat; -encryptedChatWaiting#66b25953 id:int access_hash:long date:int admin_id:long participant_id:long = EncryptedChat; -encryptedChatRequested#48f1d94c flags:# folder_id:flags.0?int id:int access_hash:long date:int admin_id:long participant_id:long g_a:bytes = EncryptedChat; -encryptedChat#61f0d4c7 id:int access_hash:long date:int admin_id:long participant_id:long g_a_or_b:bytes key_fingerprint:long = EncryptedChat; -encryptedChatDiscarded#1e1c7c45 flags:# history_deleted:flags.0?true id:int = EncryptedChat; - -inputEncryptedChat#f141b5e1 chat_id:int access_hash:long = InputEncryptedChat; - -encryptedFileEmpty#c21f497e = EncryptedFile; -encryptedFile#a8008cd8 id:long access_hash:long size:long dc_id:int key_fingerprint:int = EncryptedFile; - -inputEncryptedFileEmpty#1837c364 = InputEncryptedFile; -inputEncryptedFileUploaded#64bd0306 id:long parts:int md5_checksum:string key_fingerprint:int = InputEncryptedFile; -inputEncryptedFile#5a17b5e5 id:long access_hash:long = InputEncryptedFile; -inputEncryptedFileBigUploaded#2dc173c8 id:long parts:int key_fingerprint:int = InputEncryptedFile; - -encryptedMessage#ed18c118 random_id:long chat_id:int date:int bytes:bytes file:EncryptedFile = EncryptedMessage; -encryptedMessageService#23734b06 random_id:long chat_id:int date:int bytes:bytes = EncryptedMessage; - -messages.dhConfigNotModified#c0e24635 random:bytes = messages.DhConfig; -messages.dhConfig#2c221edd g:int p:bytes version:int random:bytes = messages.DhConfig; - -messages.sentEncryptedMessage#560f8935 date:int = messages.SentEncryptedMessage; -messages.sentEncryptedFile#9493ff32 date:int file:EncryptedFile = messages.SentEncryptedMessage; - -inputDocumentEmpty#72f0eaae = InputDocument; -inputDocument#1abfb575 id:long access_hash:long file_reference:bytes = InputDocument; - -documentEmpty#36f8c871 id:long = Document; -document#8fd4c4d8 flags:# id:long access_hash:long file_reference:bytes date:int mime_type:string size:long thumbs:flags.0?Vector video_thumbs:flags.1?Vector dc_id:int attributes:Vector = Document; - -help.support#17c6b5f6 phone_number:string user:User = help.Support; - -notifyPeer#9fd40bd8 peer:Peer = NotifyPeer; -notifyUsers#b4c83b4c = NotifyPeer; -notifyChats#c007cec3 = NotifyPeer; -notifyBroadcasts#d612e8ef = NotifyPeer; -notifyForumTopic#226e6308 peer:Peer top_msg_id:int = NotifyPeer; - -sendMessageTypingAction#16bf744e = SendMessageAction; -sendMessageCancelAction#fd5ec8f5 = SendMessageAction; -sendMessageRecordVideoAction#a187d66f = SendMessageAction; -sendMessageUploadVideoAction#e9763aec progress:int = SendMessageAction; -sendMessageRecordAudioAction#d52f73f7 = SendMessageAction; -sendMessageUploadAudioAction#f351d7ab progress:int = SendMessageAction; -sendMessageUploadPhotoAction#d1d34a26 progress:int = SendMessageAction; -sendMessageUploadDocumentAction#aa0cd9e4 progress:int = SendMessageAction; -sendMessageGeoLocationAction#176f8ba1 = SendMessageAction; -sendMessageChooseContactAction#628cbc6f = SendMessageAction; -sendMessageGamePlayAction#dd6a8f48 = SendMessageAction; -sendMessageRecordRoundAction#88f27fbc = SendMessageAction; -sendMessageUploadRoundAction#243e1c66 progress:int = SendMessageAction; -speakingInGroupCallAction#d92c2285 = SendMessageAction; -sendMessageHistoryImportAction#dbda9246 progress:int = SendMessageAction; -sendMessageChooseStickerAction#b05ac6b1 = SendMessageAction; -sendMessageEmojiInteraction#25972bcb emoticon:string msg_id:int interaction:DataJSON = SendMessageAction; -sendMessageEmojiInteractionSeen#b665902e emoticon:string = SendMessageAction; -sendMessageTextDraftAction#376d975c random_id:long text:TextWithEntities = SendMessageAction; - -contacts.found#b3134d9d my_results:Vector results:Vector chats:Vector users:Vector = contacts.Found; - -inputPrivacyKeyStatusTimestamp#4f96cb18 = InputPrivacyKey; -inputPrivacyKeyChatInvite#bdfb0426 = InputPrivacyKey; -inputPrivacyKeyPhoneCall#fabadc5f = InputPrivacyKey; -inputPrivacyKeyPhoneP2P#db9e70d2 = InputPrivacyKey; -inputPrivacyKeyForwards#a4dd4c08 = InputPrivacyKey; -inputPrivacyKeyProfilePhoto#5719bacc = InputPrivacyKey; -inputPrivacyKeyPhoneNumber#352dafa = InputPrivacyKey; -inputPrivacyKeyAddedByPhone#d1219bdd = InputPrivacyKey; -inputPrivacyKeyVoiceMessages#aee69d68 = InputPrivacyKey; -inputPrivacyKeyAbout#3823cc40 = InputPrivacyKey; -inputPrivacyKeyBirthday#d65a11cc = InputPrivacyKey; -inputPrivacyKeyStarGiftsAutoSave#e1732341 = InputPrivacyKey; -inputPrivacyKeyNoPaidMessages#bdc597b4 = InputPrivacyKey; -inputPrivacyKeySavedMusic#4dbe9226 = InputPrivacyKey; - -privacyKeyStatusTimestamp#bc2eab30 = PrivacyKey; -privacyKeyChatInvite#500e6dfa = PrivacyKey; -privacyKeyPhoneCall#3d662b7b = PrivacyKey; -privacyKeyPhoneP2P#39491cc8 = PrivacyKey; -privacyKeyForwards#69ec56a3 = PrivacyKey; -privacyKeyProfilePhoto#96151fed = PrivacyKey; -privacyKeyPhoneNumber#d19ae46d = PrivacyKey; -privacyKeyAddedByPhone#42ffd42b = PrivacyKey; -privacyKeyVoiceMessages#697f414 = PrivacyKey; -privacyKeyAbout#a486b761 = PrivacyKey; -privacyKeyBirthday#2000a518 = PrivacyKey; -privacyKeyStarGiftsAutoSave#2ca4fdf8 = PrivacyKey; -privacyKeyNoPaidMessages#17d348d2 = PrivacyKey; -privacyKeySavedMusic#ff7a571b = PrivacyKey; - -inputPrivacyValueAllowContacts#d09e07b = InputPrivacyRule; -inputPrivacyValueAllowAll#184b35ce = InputPrivacyRule; -inputPrivacyValueAllowUsers#131cc67f users:Vector = InputPrivacyRule; -inputPrivacyValueDisallowContacts#ba52007 = InputPrivacyRule; -inputPrivacyValueDisallowAll#d66b66c9 = InputPrivacyRule; -inputPrivacyValueDisallowUsers#90110467 users:Vector = InputPrivacyRule; -inputPrivacyValueAllowChatParticipants#840649cf chats:Vector = InputPrivacyRule; -inputPrivacyValueDisallowChatParticipants#e94f0f86 chats:Vector = InputPrivacyRule; -inputPrivacyValueAllowCloseFriends#2f453e49 = InputPrivacyRule; -inputPrivacyValueAllowPremium#77cdc9f1 = InputPrivacyRule; -inputPrivacyValueAllowBots#5a4fcce5 = InputPrivacyRule; -inputPrivacyValueDisallowBots#c4e57915 = InputPrivacyRule; - -privacyValueAllowContacts#fffe1bac = PrivacyRule; -privacyValueAllowAll#65427b82 = PrivacyRule; -privacyValueAllowUsers#b8905fb2 users:Vector = PrivacyRule; -privacyValueDisallowContacts#f888fa1a = PrivacyRule; -privacyValueDisallowAll#8b73e763 = PrivacyRule; -privacyValueDisallowUsers#e4621141 users:Vector = PrivacyRule; -privacyValueAllowChatParticipants#6b134e8e chats:Vector = PrivacyRule; -privacyValueDisallowChatParticipants#41c87565 chats:Vector = PrivacyRule; -privacyValueAllowCloseFriends#f7e8d89b = PrivacyRule; -privacyValueAllowPremium#ece9814b = PrivacyRule; -privacyValueAllowBots#21461b5d = PrivacyRule; -privacyValueDisallowBots#f6a5f82f = PrivacyRule; - -account.privacyRules#50a04e45 rules:Vector chats:Vector users:Vector = account.PrivacyRules; - -accountDaysTTL#b8d0afdf days:int = AccountDaysTTL; - -documentAttributeImageSize#6c37c15c w:int h:int = DocumentAttribute; -documentAttributeAnimated#11b58939 = DocumentAttribute; -documentAttributeSticker#6319d612 flags:# mask:flags.1?true alt:string stickerset:InputStickerSet mask_coords:flags.0?MaskCoords = DocumentAttribute; -documentAttributeVideo#43c57c48 flags:# round_message:flags.0?true supports_streaming:flags.1?true nosound:flags.3?true duration:double w:int h:int preload_prefix_size:flags.2?int video_start_ts:flags.4?double video_codec:flags.5?string = DocumentAttribute; -documentAttributeAudio#9852f9c6 flags:# voice:flags.10?true duration:int title:flags.0?string performer:flags.1?string waveform:flags.2?bytes = DocumentAttribute; -documentAttributeFilename#15590068 file_name:string = DocumentAttribute; -documentAttributeHasStickers#9801d2f7 = DocumentAttribute; -documentAttributeCustomEmoji#fd149899 flags:# free:flags.0?true text_color:flags.1?true alt:string stickerset:InputStickerSet = DocumentAttribute; - -messages.stickersNotModified#f1749a22 = messages.Stickers; -messages.stickers#30a6ec7e hash:long stickers:Vector = messages.Stickers; - -stickerPack#12b299d4 emoticon:string documents:Vector = StickerPack; - -messages.allStickersNotModified#e86602c3 = messages.AllStickers; -messages.allStickers#cdbbcebb hash:long sets:Vector = messages.AllStickers; - -messages.affectedMessages#84d19185 pts:int pts_count:int = messages.AffectedMessages; - -webPageEmpty#211a1788 flags:# id:long url:flags.0?string = WebPage; -webPagePending#b0d13e47 flags:# id:long url:flags.0?string date:int = WebPage; -webPage#e89c45b2 flags:# has_large_media:flags.13?true video_cover_photo:flags.14?true id:long url:string display_url:string hash:int type:flags.0?string site_name:flags.1?string title:flags.2?string description:flags.3?string photo:flags.4?Photo embed_url:flags.5?string embed_type:flags.5?string embed_width:flags.6?int embed_height:flags.6?int duration:flags.7?int author:flags.8?string document:flags.9?Document cached_page:flags.10?Page attributes:flags.12?Vector = WebPage; -webPageNotModified#7311ca11 flags:# cached_page_views:flags.0?int = WebPage; - -authorization#ad01d61d flags:# current:flags.0?true official_app:flags.1?true password_pending:flags.2?true encrypted_requests_disabled:flags.3?true call_requests_disabled:flags.4?true unconfirmed:flags.5?true hash:long device_model:string platform:string system_version:string api_id:int app_name:string app_version:string date_created:int date_active:int ip:string country:string region:string = Authorization; - -account.authorizations#4bff8ea0 authorization_ttl_days:int authorizations:Vector = account.Authorizations; - -account.password#957b50fb flags:# has_recovery:flags.0?true has_secure_values:flags.1?true has_password:flags.2?true current_algo:flags.2?PasswordKdfAlgo srp_B:flags.2?bytes srp_id:flags.2?long hint:flags.3?string email_unconfirmed_pattern:flags.4?string new_algo:PasswordKdfAlgo new_secure_algo:SecurePasswordKdfAlgo secure_random:bytes pending_reset_date:flags.5?int login_email_pattern:flags.6?string = account.Password; - -account.passwordSettings#9a5c33e5 flags:# email:flags.0?string secure_settings:flags.1?SecureSecretSettings = account.PasswordSettings; - -account.passwordInputSettings#c23727c9 flags:# new_algo:flags.0?PasswordKdfAlgo new_password_hash:flags.0?bytes hint:flags.0?string email:flags.1?string new_secure_settings:flags.2?SecureSecretSettings = account.PasswordInputSettings; - -auth.passwordRecovery#137948a5 email_pattern:string = auth.PasswordRecovery; - -receivedNotifyMessage#a384b779 id:int flags:int = ReceivedNotifyMessage; - -chatInviteExported#a22cbd96 flags:# revoked:flags.0?true permanent:flags.5?true request_needed:flags.6?true link:string admin_id:long date:int start_date:flags.4?int expire_date:flags.1?int usage_limit:flags.2?int usage:flags.3?int requested:flags.7?int subscription_expired:flags.10?int title:flags.8?string subscription_pricing:flags.9?StarsSubscriptionPricing = ExportedChatInvite; -chatInvitePublicJoinRequests#ed107ab7 = ExportedChatInvite; - -chatInviteAlready#5a686d7c chat:Chat = ChatInvite; -chatInvite#5c9d3702 flags:# channel:flags.0?true broadcast:flags.1?true public:flags.2?true megagroup:flags.3?true request_needed:flags.6?true verified:flags.7?true scam:flags.8?true fake:flags.9?true can_refulfill_subscription:flags.11?true title:string about:flags.5?string photo:Photo participants_count:int participants:flags.4?Vector color:int subscription_pricing:flags.10?StarsSubscriptionPricing subscription_form_id:flags.12?long bot_verification:flags.13?BotVerification = ChatInvite; -chatInvitePeek#61695cb0 chat:Chat expires:int = ChatInvite; - -inputStickerSetEmpty#ffb62b95 = InputStickerSet; -inputStickerSetID#9de7a269 id:long access_hash:long = InputStickerSet; -inputStickerSetShortName#861cc8a0 short_name:string = InputStickerSet; -inputStickerSetAnimatedEmoji#28703c8 = InputStickerSet; -inputStickerSetDice#e67f520e emoticon:string = InputStickerSet; -inputStickerSetAnimatedEmojiAnimations#cde3739 = InputStickerSet; -inputStickerSetPremiumGifts#c88b3b02 = InputStickerSet; -inputStickerSetEmojiGenericAnimations#4c4d4ce = InputStickerSet; -inputStickerSetEmojiDefaultStatuses#29d0f5ee = InputStickerSet; -inputStickerSetEmojiDefaultTopicIcons#44c1f8e9 = InputStickerSet; -inputStickerSetEmojiChannelDefaultStatuses#49748553 = InputStickerSet; -inputStickerSetTonGifts#1cf671a0 = InputStickerSet; - -stickerSet#2dd14edc flags:# archived:flags.1?true official:flags.2?true masks:flags.3?true emojis:flags.7?true text_color:flags.9?true channel_emoji_status:flags.10?true creator:flags.11?true installed_date:flags.0?int id:long access_hash:long title:string short_name:string thumbs:flags.4?Vector thumb_dc_id:flags.4?int thumb_version:flags.4?int thumb_document_id:flags.8?long count:int hash:int = StickerSet; - -messages.stickerSet#6e153f16 set:StickerSet packs:Vector keywords:Vector documents:Vector = messages.StickerSet; -messages.stickerSetNotModified#d3f924eb = messages.StickerSet; - -botCommand#c27ac8c7 command:string description:string = BotCommand; - -botInfo#4d8a0299 flags:# has_preview_medias:flags.6?true user_id:flags.0?long description:flags.1?string description_photo:flags.4?Photo description_document:flags.5?Document commands:flags.2?Vector menu_button:flags.3?BotMenuButton privacy_policy_url:flags.7?string app_settings:flags.8?BotAppSettings verifier_settings:flags.9?BotVerifierSettings = BotInfo; - -keyboardButton#7d170cff flags:# style:flags.10?KeyboardButtonStyle text:string = KeyboardButton; -keyboardButtonUrl#d80c25ec flags:# style:flags.10?KeyboardButtonStyle text:string url:string = KeyboardButton; -keyboardButtonCallback#e62bc960 flags:# requires_password:flags.0?true style:flags.10?KeyboardButtonStyle text:string data:bytes = KeyboardButton; -keyboardButtonRequestPhone#417efd8f flags:# style:flags.10?KeyboardButtonStyle text:string = KeyboardButton; -keyboardButtonRequestGeoLocation#aa40f94d flags:# style:flags.10?KeyboardButtonStyle text:string = KeyboardButton; -keyboardButtonSwitchInline#991399fc flags:# same_peer:flags.0?true style:flags.10?KeyboardButtonStyle text:string query:string peer_types:flags.1?Vector = KeyboardButton; -keyboardButtonGame#89c590f9 flags:# style:flags.10?KeyboardButtonStyle text:string = KeyboardButton; -keyboardButtonBuy#3fa53905 flags:# style:flags.10?KeyboardButtonStyle text:string = KeyboardButton; -keyboardButtonUrlAuth#f51006f9 flags:# style:flags.10?KeyboardButtonStyle text:string fwd_text:flags.0?string url:string button_id:int = KeyboardButton; -inputKeyboardButtonUrlAuth#68013e72 flags:# request_write_access:flags.0?true style:flags.10?KeyboardButtonStyle text:string fwd_text:flags.1?string url:string bot:InputUser = KeyboardButton; -keyboardButtonRequestPoll#7a11d782 flags:# style:flags.10?KeyboardButtonStyle quiz:flags.0?Bool text:string = KeyboardButton; -inputKeyboardButtonUserProfile#7d5e07c7 flags:# style:flags.10?KeyboardButtonStyle text:string user_id:InputUser = KeyboardButton; -keyboardButtonUserProfile#c0fd5d09 flags:# style:flags.10?KeyboardButtonStyle text:string user_id:long = KeyboardButton; -keyboardButtonWebView#e846b1a0 flags:# style:flags.10?KeyboardButtonStyle text:string url:string = KeyboardButton; -keyboardButtonSimpleWebView#e15c4370 flags:# style:flags.10?KeyboardButtonStyle text:string url:string = KeyboardButton; -keyboardButtonRequestPeer#5b0f15f5 flags:# style:flags.10?KeyboardButtonStyle text:string button_id:int peer_type:RequestPeerType max_quantity:int = KeyboardButton; -inputKeyboardButtonRequestPeer#2b78156 flags:# name_requested:flags.0?true username_requested:flags.1?true photo_requested:flags.2?true style:flags.10?KeyboardButtonStyle text:string button_id:int peer_type:RequestPeerType max_quantity:int = KeyboardButton; -keyboardButtonCopy#bcc4af10 flags:# style:flags.10?KeyboardButtonStyle text:string copy_text:string = KeyboardButton; - -keyboardButtonRow#77608b83 buttons:Vector = KeyboardButtonRow; - -replyKeyboardHide#a03e5b85 flags:# selective:flags.2?true = ReplyMarkup; -replyKeyboardForceReply#86b40b08 flags:# single_use:flags.1?true selective:flags.2?true placeholder:flags.3?string = ReplyMarkup; -replyKeyboardMarkup#85dd99d1 flags:# resize:flags.0?true single_use:flags.1?true selective:flags.2?true persistent:flags.4?true rows:Vector placeholder:flags.3?string = ReplyMarkup; -replyInlineMarkup#48a30254 rows:Vector = ReplyMarkup; - -messageEntityUnknown#bb92ba95 offset:int length:int = MessageEntity; -messageEntityMention#fa04579d offset:int length:int = MessageEntity; -messageEntityHashtag#6f635b0d offset:int length:int = MessageEntity; -messageEntityBotCommand#6cef8ac7 offset:int length:int = MessageEntity; -messageEntityUrl#6ed02538 offset:int length:int = MessageEntity; -messageEntityEmail#64e475c2 offset:int length:int = MessageEntity; -messageEntityBold#bd610bc9 offset:int length:int = MessageEntity; -messageEntityItalic#826f8b60 offset:int length:int = MessageEntity; -messageEntityCode#28a20571 offset:int length:int = MessageEntity; -messageEntityPre#73924be0 offset:int length:int language:string = MessageEntity; -messageEntityTextUrl#76a6d327 offset:int length:int url:string = MessageEntity; -messageEntityMentionName#dc7b1140 offset:int length:int user_id:long = MessageEntity; -inputMessageEntityMentionName#208e68c9 offset:int length:int user_id:InputUser = MessageEntity; -messageEntityPhone#9b69e34b offset:int length:int = MessageEntity; -messageEntityCashtag#4c4e743f offset:int length:int = MessageEntity; -messageEntityUnderline#9c4e7e8b offset:int length:int = MessageEntity; -messageEntityStrike#bf0693d4 offset:int length:int = MessageEntity; -messageEntityBankCard#761e6af4 offset:int length:int = MessageEntity; -messageEntitySpoiler#32ca960f offset:int length:int = MessageEntity; -messageEntityCustomEmoji#c8cf05f8 offset:int length:int document_id:long = MessageEntity; -messageEntityBlockquote#f1ccaaac flags:# collapsed:flags.0?true offset:int length:int = MessageEntity; -messageEntityFormattedDate#904ac7c7 flags:# relative:flags.0?true short_time:flags.1?true long_time:flags.2?true short_date:flags.3?true long_date:flags.4?true day_of_week:flags.5?true offset:int length:int date:int = MessageEntity; -messageEntityDiffInsert#71777116 offset:int length:int = MessageEntity; -messageEntityDiffReplace#c6c1e5a7 offset:int length:int old_text:string = MessageEntity; -messageEntityDiffDelete#652c1c5 offset:int length:int = MessageEntity; - -inputChannelEmpty#ee8c1e86 = InputChannel; -inputChannel#f35aec28 channel_id:long access_hash:long = InputChannel; -inputChannelFromMessage#5b934f9d peer:InputPeer msg_id:int channel_id:long = InputChannel; - -contacts.resolvedPeer#7f077ad9 peer:Peer chats:Vector users:Vector = contacts.ResolvedPeer; - -messageRange#ae30253 min_id:int max_id:int = MessageRange; - -updates.channelDifferenceEmpty#3e11affb flags:# final:flags.0?true pts:int timeout:flags.1?int = updates.ChannelDifference; -updates.channelDifferenceTooLong#a4bcc6fe flags:# final:flags.0?true timeout:flags.1?int dialog:Dialog messages:Vector chats:Vector users:Vector = updates.ChannelDifference; -updates.channelDifference#2064674e flags:# final:flags.0?true pts:int timeout:flags.1?int new_messages:Vector other_updates:Vector chats:Vector users:Vector = updates.ChannelDifference; - -channelMessagesFilterEmpty#94d42ee7 = ChannelMessagesFilter; -channelMessagesFilter#cd77d957 flags:# exclude_new_messages:flags.1?true ranges:Vector = ChannelMessagesFilter; - -channelParticipant#1bd54456 flags:# user_id:long date:int subscription_until_date:flags.0?int rank:flags.2?string = ChannelParticipant; -channelParticipantSelf#a9478a1a flags:# via_request:flags.0?true user_id:long inviter_id:long date:int subscription_until_date:flags.1?int rank:flags.2?string = ChannelParticipant; -channelParticipantCreator#2fe601d3 flags:# user_id:long admin_rights:ChatAdminRights rank:flags.0?string = ChannelParticipant; -channelParticipantAdmin#34c3bb53 flags:# can_edit:flags.0?true self:flags.1?true user_id:long inviter_id:flags.1?long promoted_by:long date:int admin_rights:ChatAdminRights rank:flags.2?string = ChannelParticipant; -channelParticipantBanned#d5f0ad91 flags:# left:flags.0?true peer:Peer kicked_by:long date:int banned_rights:ChatBannedRights rank:flags.2?string = ChannelParticipant; -channelParticipantLeft#1b03f006 peer:Peer = ChannelParticipant; - -channelParticipantsRecent#de3f3c79 = ChannelParticipantsFilter; -channelParticipantsAdmins#b4608969 = ChannelParticipantsFilter; -channelParticipantsKicked#a3b54985 q:string = ChannelParticipantsFilter; -channelParticipantsBots#b0d1865b = ChannelParticipantsFilter; -channelParticipantsBanned#1427a5e1 q:string = ChannelParticipantsFilter; -channelParticipantsSearch#656ac4b q:string = ChannelParticipantsFilter; -channelParticipantsContacts#bb6ae88d q:string = ChannelParticipantsFilter; -channelParticipantsMentions#e04b5ceb flags:# q:flags.0?string top_msg_id:flags.1?int = ChannelParticipantsFilter; - -channels.channelParticipants#9ab0feaf count:int participants:Vector chats:Vector users:Vector = channels.ChannelParticipants; -channels.channelParticipantsNotModified#f0173fe9 = channels.ChannelParticipants; - -channels.channelParticipant#dfb80317 participant:ChannelParticipant chats:Vector users:Vector = channels.ChannelParticipant; - -help.termsOfService#780a0310 flags:# popup:flags.0?true id:DataJSON text:string entities:Vector min_age_confirm:flags.1?int = help.TermsOfService; - -messages.savedGifsNotModified#e8025ca2 = messages.SavedGifs; -messages.savedGifs#84a02a0d hash:long gifs:Vector = messages.SavedGifs; - -inputBotInlineMessageMediaAuto#3380c786 flags:# invert_media:flags.3?true message:string entities:flags.1?Vector reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage; -inputBotInlineMessageText#3dcd7a87 flags:# no_webpage:flags.0?true invert_media:flags.3?true message:string entities:flags.1?Vector reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage; -inputBotInlineMessageMediaGeo#96929a85 flags:# geo_point:InputGeoPoint heading:flags.0?int period:flags.1?int proximity_notification_radius:flags.3?int reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage; -inputBotInlineMessageMediaVenue#417bbf11 flags:# geo_point:InputGeoPoint title:string address:string provider:string venue_id:string venue_type:string reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage; -inputBotInlineMessageMediaContact#a6edbffd flags:# phone_number:string first_name:string last_name:string vcard:string reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage; -inputBotInlineMessageGame#4b425864 flags:# reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage; -inputBotInlineMessageMediaInvoice#d7e78225 flags:# title:string description:string photo:flags.0?InputWebDocument invoice:Invoice payload:bytes provider:string provider_data:DataJSON reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage; -inputBotInlineMessageMediaWebPage#bddcc510 flags:# invert_media:flags.3?true force_large_media:flags.4?true force_small_media:flags.5?true optional:flags.6?true message:string entities:flags.1?Vector url:string reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage; - -inputBotInlineResult#88bf9319 flags:# id:string type:string title:flags.1?string description:flags.2?string url:flags.3?string thumb:flags.4?InputWebDocument content:flags.5?InputWebDocument send_message:InputBotInlineMessage = InputBotInlineResult; -inputBotInlineResultPhoto#a8d864a7 id:string type:string photo:InputPhoto send_message:InputBotInlineMessage = InputBotInlineResult; -inputBotInlineResultDocument#fff8fdc4 flags:# id:string type:string title:flags.1?string description:flags.2?string document:InputDocument send_message:InputBotInlineMessage = InputBotInlineResult; -inputBotInlineResultGame#4fa417f2 id:string short_name:string send_message:InputBotInlineMessage = InputBotInlineResult; - -botInlineMessageMediaAuto#764cf810 flags:# invert_media:flags.3?true message:string entities:flags.1?Vector reply_markup:flags.2?ReplyMarkup = BotInlineMessage; -botInlineMessageText#8c7f65e2 flags:# no_webpage:flags.0?true invert_media:flags.3?true message:string entities:flags.1?Vector reply_markup:flags.2?ReplyMarkup = BotInlineMessage; -botInlineMessageMediaGeo#51846fd flags:# geo:GeoPoint heading:flags.0?int period:flags.1?int proximity_notification_radius:flags.3?int reply_markup:flags.2?ReplyMarkup = BotInlineMessage; -botInlineMessageMediaVenue#8a86659c flags:# geo:GeoPoint title:string address:string provider:string venue_id:string venue_type:string reply_markup:flags.2?ReplyMarkup = BotInlineMessage; -botInlineMessageMediaContact#18d1cdc2 flags:# phone_number:string first_name:string last_name:string vcard:string reply_markup:flags.2?ReplyMarkup = BotInlineMessage; -botInlineMessageMediaInvoice#354a9b09 flags:# shipping_address_requested:flags.1?true test:flags.3?true title:string description:string photo:flags.0?WebDocument currency:string total_amount:long reply_markup:flags.2?ReplyMarkup = BotInlineMessage; -botInlineMessageMediaWebPage#809ad9a6 flags:# invert_media:flags.3?true force_large_media:flags.4?true force_small_media:flags.5?true manual:flags.7?true safe:flags.8?true message:string entities:flags.1?Vector url:string reply_markup:flags.2?ReplyMarkup = BotInlineMessage; - -botInlineResult#11965f3a flags:# id:string type:string title:flags.1?string description:flags.2?string url:flags.3?string thumb:flags.4?WebDocument content:flags.5?WebDocument send_message:BotInlineMessage = BotInlineResult; -botInlineMediaResult#17db940b flags:# id:string type:string photo:flags.0?Photo document:flags.1?Document title:flags.2?string description:flags.3?string send_message:BotInlineMessage = BotInlineResult; - -messages.botResults#e021f2f6 flags:# gallery:flags.0?true query_id:long next_offset:flags.1?string switch_pm:flags.2?InlineBotSwitchPM switch_webview:flags.3?InlineBotWebView results:Vector cache_time:int users:Vector = messages.BotResults; - -exportedMessageLink#5dab1af4 link:string html:string = ExportedMessageLink; - -messageFwdHeader#4e4df4bb flags:# imported:flags.7?true saved_out:flags.11?true from_id:flags.0?Peer from_name:flags.5?string date:int channel_post:flags.2?int post_author:flags.3?string saved_from_peer:flags.4?Peer saved_from_msg_id:flags.4?int saved_from_id:flags.8?Peer saved_from_name:flags.9?string saved_date:flags.10?int psa_type:flags.6?string = MessageFwdHeader; - -auth.codeTypeSms#72a3158c = auth.CodeType; -auth.codeTypeCall#741cd3e3 = auth.CodeType; -auth.codeTypeFlashCall#226ccefb = auth.CodeType; -auth.codeTypeMissedCall#d61ad6ee = auth.CodeType; -auth.codeTypeFragmentSms#6ed998c = auth.CodeType; - -auth.sentCodeTypeApp#3dbb5986 length:int = auth.SentCodeType; -auth.sentCodeTypeSms#c000bba2 length:int = auth.SentCodeType; -auth.sentCodeTypeCall#5353e5a7 length:int = auth.SentCodeType; -auth.sentCodeTypeFlashCall#ab03c6d9 pattern:string = auth.SentCodeType; -auth.sentCodeTypeMissedCall#82006484 prefix:string length:int = auth.SentCodeType; -auth.sentCodeTypeEmailCode#f450f59b flags:# apple_signin_allowed:flags.0?true google_signin_allowed:flags.1?true email_pattern:string length:int reset_available_period:flags.3?int reset_pending_date:flags.4?int = auth.SentCodeType; -auth.sentCodeTypeSetUpEmailRequired#a5491dea flags:# apple_signin_allowed:flags.0?true google_signin_allowed:flags.1?true = auth.SentCodeType; -auth.sentCodeTypeFragmentSms#d9565c39 url:string length:int = auth.SentCodeType; -auth.sentCodeTypeFirebaseSms#9fd736 flags:# nonce:flags.0?bytes play_integrity_project_id:flags.2?long play_integrity_nonce:flags.2?bytes receipt:flags.1?string push_timeout:flags.1?int length:int = auth.SentCodeType; -auth.sentCodeTypeSmsWord#a416ac81 flags:# beginning:flags.0?string = auth.SentCodeType; -auth.sentCodeTypeSmsPhrase#b37794af flags:# beginning:flags.0?string = auth.SentCodeType; - -messages.botCallbackAnswer#36585ea4 flags:# alert:flags.1?true has_url:flags.3?true native_ui:flags.4?true message:flags.0?string url:flags.2?string cache_time:int = messages.BotCallbackAnswer; - -messages.messageEditData#26b5dde6 flags:# caption:flags.0?true = messages.MessageEditData; - -inputBotInlineMessageID#890c3d89 dc_id:int id:long access_hash:long = InputBotInlineMessageID; -inputBotInlineMessageID64#b6d915d7 dc_id:int owner_id:long id:int access_hash:long = InputBotInlineMessageID; - -inlineBotSwitchPM#3c20629f text:string start_param:string = InlineBotSwitchPM; - -messages.peerDialogs#3371c354 dialogs:Vector messages:Vector chats:Vector users:Vector state:updates.State = messages.PeerDialogs; - -topPeer#edcdc05b peer:Peer rating:double = TopPeer; - -topPeerCategoryBotsPM#ab661b5b = TopPeerCategory; -topPeerCategoryBotsInline#148677e2 = TopPeerCategory; -topPeerCategoryCorrespondents#637b7ed = TopPeerCategory; -topPeerCategoryGroups#bd17a14a = TopPeerCategory; -topPeerCategoryChannels#161d9628 = TopPeerCategory; -topPeerCategoryPhoneCalls#1e76a78c = TopPeerCategory; -topPeerCategoryForwardUsers#a8406ca9 = TopPeerCategory; -topPeerCategoryForwardChats#fbeec0f0 = TopPeerCategory; -topPeerCategoryBotsApp#fd9e7bec = TopPeerCategory; -topPeerCategoryBotsGuestChat#6c24f3dd = TopPeerCategory; - -topPeerCategoryPeers#fb834291 category:TopPeerCategory count:int peers:Vector = TopPeerCategoryPeers; - -contacts.topPeersNotModified#de266ef5 = contacts.TopPeers; -contacts.topPeers#70b772a8 categories:Vector chats:Vector users:Vector = contacts.TopPeers; -contacts.topPeersDisabled#b52c939d = contacts.TopPeers; - -draftMessageEmpty#1b0c841a flags:# date:flags.0?int = DraftMessage; -draftMessage#96eaa5eb flags:# no_webpage:flags.1?true invert_media:flags.6?true reply_to:flags.4?InputReplyTo message:string entities:flags.3?Vector media:flags.5?InputMedia date:int effect:flags.7?long suggested_post:flags.8?SuggestedPost = DraftMessage; - -messages.featuredStickersNotModified#c6dc0c66 count:int = messages.FeaturedStickers; -messages.featuredStickers#be382906 flags:# premium:flags.0?true hash:long count:int sets:Vector unread:Vector = messages.FeaturedStickers; - -messages.recentStickersNotModified#b17f890 = messages.RecentStickers; -messages.recentStickers#88d37c56 hash:long packs:Vector stickers:Vector dates:Vector = messages.RecentStickers; - -messages.archivedStickers#4fcba9c8 count:int sets:Vector = messages.ArchivedStickers; - -messages.stickerSetInstallResultSuccess#38641628 = messages.StickerSetInstallResult; -messages.stickerSetInstallResultArchive#35e410a8 sets:Vector = messages.StickerSetInstallResult; - -stickerSetCovered#6410a5d2 set:StickerSet cover:Document = StickerSetCovered; -stickerSetMultiCovered#3407e51b set:StickerSet covers:Vector = StickerSetCovered; -stickerSetFullCovered#40d13c0e set:StickerSet packs:Vector keywords:Vector documents:Vector = StickerSetCovered; -stickerSetNoCovered#77b15d1c set:StickerSet = StickerSetCovered; - -maskCoords#aed6dbb2 n:int x:double y:double zoom:double = MaskCoords; - -inputStickeredMediaPhoto#4a992157 id:InputPhoto = InputStickeredMedia; -inputStickeredMediaDocument#438865b id:InputDocument = InputStickeredMedia; - -game#bdf9653b flags:# id:long access_hash:long short_name:string title:string description:string photo:Photo document:flags.0?Document = Game; - -inputGameID#32c3e77 id:long access_hash:long = InputGame; -inputGameShortName#c331e80a bot_id:InputUser short_name:string = InputGame; - -highScore#73a379eb pos:int user_id:long score:int = HighScore; - -messages.highScores#9a3bfd99 scores:Vector users:Vector = messages.HighScores; - -textEmpty#dc3d824f = RichText; -textPlain#744694e0 text:string = RichText; -textBold#6724abc4 text:RichText = RichText; -textItalic#d912a59c text:RichText = RichText; -textUnderline#c12622c4 text:RichText = RichText; -textStrike#9bf8bb95 text:RichText = RichText; -textFixed#6c3f19b9 text:RichText = RichText; -textUrl#3c2884c1 text:RichText url:string webpage_id:long = RichText; -textEmail#de5a0dd6 text:RichText email:string = RichText; -textConcat#7e6260d7 texts:Vector = RichText; -textSubscript#ed6a8504 text:RichText = RichText; -textSuperscript#c7fb5e01 text:RichText = RichText; -textMarked#34b8621 text:RichText = RichText; -textPhone#1ccb966a text:RichText phone:string = RichText; -textImage#81ccf4f document_id:long w:int h:int = RichText; -textAnchor#35553762 text:RichText name:string = RichText; - -pageBlockUnsupported#13567e8a = PageBlock; -pageBlockTitle#70abc3fd text:RichText = PageBlock; -pageBlockSubtitle#8ffa9a1f text:RichText = PageBlock; -pageBlockAuthorDate#baafe5e0 author:RichText published_date:int = PageBlock; -pageBlockHeader#bfd064ec text:RichText = PageBlock; -pageBlockSubheader#f12bb6e1 text:RichText = PageBlock; -pageBlockParagraph#467a0766 text:RichText = PageBlock; -pageBlockPreformatted#c070d93e text:RichText language:string = PageBlock; -pageBlockFooter#48870999 text:RichText = PageBlock; -pageBlockDivider#db20b188 = PageBlock; -pageBlockAnchor#ce0d37b0 name:string = PageBlock; -pageBlockList#e4e88011 items:Vector = PageBlock; -pageBlockBlockquote#263d7c26 text:RichText caption:RichText = PageBlock; -pageBlockPullquote#4f4456d3 text:RichText caption:RichText = PageBlock; -pageBlockPhoto#1759c560 flags:# photo_id:long caption:PageCaption url:flags.0?string webpage_id:flags.0?long = PageBlock; -pageBlockVideo#7c8fe7b6 flags:# autoplay:flags.0?true loop:flags.1?true video_id:long caption:PageCaption = PageBlock; -pageBlockCover#39f23300 cover:PageBlock = PageBlock; -pageBlockEmbed#a8718dc5 flags:# full_width:flags.0?true allow_scrolling:flags.3?true url:flags.1?string html:flags.2?string poster_photo_id:flags.4?long w:flags.5?int h:flags.5?int caption:PageCaption = PageBlock; -pageBlockEmbedPost#f259a80b url:string webpage_id:long author_photo_id:long author:string date:int blocks:Vector caption:PageCaption = PageBlock; -pageBlockCollage#65a0fa4d items:Vector caption:PageCaption = PageBlock; -pageBlockSlideshow#31f9590 items:Vector caption:PageCaption = PageBlock; -pageBlockChannel#ef1751b5 channel:Chat = PageBlock; -pageBlockAudio#804361ea audio_id:long caption:PageCaption = PageBlock; -pageBlockKicker#1e148390 text:RichText = PageBlock; -pageBlockTable#bf4dea82 flags:# bordered:flags.0?true striped:flags.1?true title:RichText rows:Vector = PageBlock; -pageBlockOrderedList#9a8ae1e1 items:Vector = PageBlock; -pageBlockDetails#76768bed flags:# open:flags.0?true blocks:Vector title:RichText = PageBlock; -pageBlockRelatedArticles#16115a96 title:RichText articles:Vector = PageBlock; -pageBlockMap#a44f3ef6 geo:GeoPoint zoom:int w:int h:int caption:PageCaption = PageBlock; - -phoneCallDiscardReasonMissed#85e42301 = PhoneCallDiscardReason; -phoneCallDiscardReasonDisconnect#e095c1a0 = PhoneCallDiscardReason; -phoneCallDiscardReasonHangup#57adc690 = PhoneCallDiscardReason; -phoneCallDiscardReasonBusy#faf7e8c9 = PhoneCallDiscardReason; -phoneCallDiscardReasonMigrateConferenceCall#9fbbf1f7 slug:string = PhoneCallDiscardReason; - -dataJSON#7d748d04 data:string = DataJSON; - -labeledPrice#cb296bf8 label:string amount:long = LabeledPrice; - -invoice#49ee584 flags:# test:flags.0?true name_requested:flags.1?true phone_requested:flags.2?true email_requested:flags.3?true shipping_address_requested:flags.4?true flexible:flags.5?true phone_to_provider:flags.6?true email_to_provider:flags.7?true recurring:flags.9?true currency:string prices:Vector max_tip_amount:flags.8?long suggested_tip_amounts:flags.8?Vector terms_url:flags.10?string subscription_period:flags.11?int = Invoice; - -paymentCharge#ea02c27e id:string provider_charge_id:string = PaymentCharge; - -postAddress#1e8caaeb street_line1:string street_line2:string city:string state:string country_iso2:string post_code:string = PostAddress; - -paymentRequestedInfo#909c3f94 flags:# name:flags.0?string phone:flags.1?string email:flags.2?string shipping_address:flags.3?PostAddress = PaymentRequestedInfo; - -paymentSavedCredentialsCard#cdc27a1f id:string title:string = PaymentSavedCredentials; - -webDocument#1c570ed1 url:string access_hash:long size:int mime_type:string attributes:Vector = WebDocument; -webDocumentNoProxy#f9c8bcc6 url:string size:int mime_type:string attributes:Vector = WebDocument; - -inputWebDocument#9bed434d url:string size:int mime_type:string attributes:Vector = InputWebDocument; - -inputWebFileLocation#c239d686 url:string access_hash:long = InputWebFileLocation; -inputWebFileGeoPointLocation#9f2221c9 geo_point:InputGeoPoint access_hash:long w:int h:int zoom:int scale:int = InputWebFileLocation; -inputWebFileAudioAlbumThumbLocation#f46fe924 flags:# small:flags.2?true document:flags.0?InputDocument title:flags.1?string performer:flags.1?string = InputWebFileLocation; - -upload.webFile#21e753bc size:int mime_type:string file_type:storage.FileType mtime:int bytes:bytes = upload.WebFile; - -payments.paymentForm#a0058751 flags:# can_save_credentials:flags.2?true password_missing:flags.3?true form_id:long bot_id:long title:string description:string photo:flags.5?WebDocument invoice:Invoice provider_id:long url:string native_provider:flags.4?string native_params:flags.4?DataJSON additional_methods:flags.6?Vector saved_info:flags.0?PaymentRequestedInfo saved_credentials:flags.1?Vector users:Vector = payments.PaymentForm; -payments.paymentFormStars#7bf6b15c flags:# form_id:long bot_id:long title:string description:string photo:flags.5?WebDocument invoice:Invoice users:Vector = payments.PaymentForm; -payments.paymentFormStarGift#b425cfe1 form_id:long invoice:Invoice = payments.PaymentForm; - -payments.validatedRequestedInfo#d1451883 flags:# id:flags.0?string shipping_options:flags.1?Vector = payments.ValidatedRequestedInfo; - -payments.paymentResult#4e5f810d updates:Updates = payments.PaymentResult; -payments.paymentVerificationNeeded#d8411139 url:string = payments.PaymentResult; - -payments.paymentReceipt#70c4fe03 flags:# date:int bot_id:long provider_id:long title:string description:string photo:flags.2?WebDocument invoice:Invoice info:flags.0?PaymentRequestedInfo shipping:flags.1?ShippingOption tip_amount:flags.3?long currency:string total_amount:long credentials_title:string users:Vector = payments.PaymentReceipt; -payments.paymentReceiptStars#dabbf83a flags:# date:int bot_id:long title:string description:string photo:flags.2?WebDocument invoice:Invoice currency:string total_amount:long transaction_id:string users:Vector = payments.PaymentReceipt; - -payments.savedInfo#fb8fe43c flags:# has_saved_credentials:flags.1?true saved_info:flags.0?PaymentRequestedInfo = payments.SavedInfo; - -inputPaymentCredentialsSaved#c10eb2cf id:string tmp_password:bytes = InputPaymentCredentials; -inputPaymentCredentials#3417d728 flags:# save:flags.0?true data:DataJSON = InputPaymentCredentials; -inputPaymentCredentialsApplePay#aa1c39f payment_data:DataJSON = InputPaymentCredentials; -inputPaymentCredentialsGooglePay#8ac32801 payment_token:DataJSON = InputPaymentCredentials; - -account.tmpPassword#db64fd34 tmp_password:bytes valid_until:int = account.TmpPassword; - -shippingOption#b6213cdf id:string title:string prices:Vector = ShippingOption; - -inputStickerSetItem#32da9e9c flags:# document:InputDocument emoji:string mask_coords:flags.0?MaskCoords keywords:flags.1?string = InputStickerSetItem; - -inputPhoneCall#1e36fded id:long access_hash:long = InputPhoneCall; - -phoneCallEmpty#5366c915 id:long = PhoneCall; -phoneCallWaiting#c5226f17 flags:# video:flags.6?true id:long access_hash:long date:int admin_id:long participant_id:long protocol:PhoneCallProtocol receive_date:flags.0?int = PhoneCall; -phoneCallRequested#14b0ed0c flags:# video:flags.6?true id:long access_hash:long date:int admin_id:long participant_id:long g_a_hash:bytes protocol:PhoneCallProtocol = PhoneCall; -phoneCallAccepted#3660c311 flags:# video:flags.6?true id:long access_hash:long date:int admin_id:long participant_id:long g_b:bytes protocol:PhoneCallProtocol = PhoneCall; -phoneCall#30535af5 flags:# p2p_allowed:flags.5?true video:flags.6?true conference_supported:flags.8?true id:long access_hash:long date:int admin_id:long participant_id:long g_a_or_b:bytes key_fingerprint:long protocol:PhoneCallProtocol connections:Vector start_date:int custom_parameters:flags.7?DataJSON = PhoneCall; -phoneCallDiscarded#50ca4de1 flags:# need_rating:flags.2?true need_debug:flags.3?true video:flags.6?true id:long reason:flags.0?PhoneCallDiscardReason duration:flags.1?int = PhoneCall; - -phoneConnection#9cc123c7 flags:# tcp:flags.0?true id:long ip:string ipv6:string port:int peer_tag:bytes = PhoneConnection; -phoneConnectionWebrtc#635fe375 flags:# turn:flags.0?true stun:flags.1?true id:long ip:string ipv6:string port:int username:string password:string = PhoneConnection; - -phoneCallProtocol#fc878fc8 flags:# udp_p2p:flags.0?true udp_reflector:flags.1?true min_layer:int max_layer:int library_versions:Vector = PhoneCallProtocol; - -phone.phoneCall#ec82e140 phone_call:PhoneCall users:Vector = phone.PhoneCall; - -upload.cdnFileReuploadNeeded#eea8e46e request_token:bytes = upload.CdnFile; -upload.cdnFile#a99fca4f bytes:bytes = upload.CdnFile; - -cdnPublicKey#c982eaba dc_id:int public_key:string = CdnPublicKey; - -cdnConfig#5725e40a public_keys:Vector = CdnConfig; - -langPackString#cad181f6 key:string value:string = LangPackString; -langPackStringPluralized#6c47ac9f flags:# key:string zero_value:flags.0?string one_value:flags.1?string two_value:flags.2?string few_value:flags.3?string many_value:flags.4?string other_value:string = LangPackString; -langPackStringDeleted#2979eeb2 key:string = LangPackString; - -langPackDifference#f385c1f6 lang_code:string from_version:int version:int strings:Vector = LangPackDifference; - -langPackLanguage#eeca5ce3 flags:# official:flags.0?true rtl:flags.2?true beta:flags.3?true name:string native_name:string lang_code:string base_lang_code:flags.1?string plural_code:string strings_count:int translated_count:int translations_url:string = LangPackLanguage; - -channelAdminLogEventActionChangeTitle#e6dfb825 prev_value:string new_value:string = ChannelAdminLogEventAction; -channelAdminLogEventActionChangeAbout#55188a2e prev_value:string new_value:string = ChannelAdminLogEventAction; -channelAdminLogEventActionChangeUsername#6a4afc38 prev_value:string new_value:string = ChannelAdminLogEventAction; -channelAdminLogEventActionChangePhoto#434bd2af prev_photo:Photo new_photo:Photo = ChannelAdminLogEventAction; -channelAdminLogEventActionToggleInvites#1b7907ae new_value:Bool = ChannelAdminLogEventAction; -channelAdminLogEventActionToggleSignatures#26ae0971 new_value:Bool = ChannelAdminLogEventAction; -channelAdminLogEventActionUpdatePinned#e9e82c18 message:Message = ChannelAdminLogEventAction; -channelAdminLogEventActionEditMessage#709b2405 prev_message:Message new_message:Message = ChannelAdminLogEventAction; -channelAdminLogEventActionDeleteMessage#42e047bb message:Message = ChannelAdminLogEventAction; -channelAdminLogEventActionParticipantJoin#183040d3 = ChannelAdminLogEventAction; -channelAdminLogEventActionParticipantLeave#f89777f2 = ChannelAdminLogEventAction; -channelAdminLogEventActionParticipantInvite#e31c34d8 participant:ChannelParticipant = ChannelAdminLogEventAction; -channelAdminLogEventActionParticipantToggleBan#e6d83d7e prev_participant:ChannelParticipant new_participant:ChannelParticipant = ChannelAdminLogEventAction; -channelAdminLogEventActionParticipantToggleAdmin#d5676710 prev_participant:ChannelParticipant new_participant:ChannelParticipant = ChannelAdminLogEventAction; -channelAdminLogEventActionChangeStickerSet#b1c3caa7 prev_stickerset:InputStickerSet new_stickerset:InputStickerSet = ChannelAdminLogEventAction; -channelAdminLogEventActionTogglePreHistoryHidden#5f5c95f1 new_value:Bool = ChannelAdminLogEventAction; -channelAdminLogEventActionDefaultBannedRights#2df5fc0a prev_banned_rights:ChatBannedRights new_banned_rights:ChatBannedRights = ChannelAdminLogEventAction; -channelAdminLogEventActionStopPoll#8f079643 message:Message = ChannelAdminLogEventAction; -channelAdminLogEventActionChangeLinkedChat#50c7ac8 prev_value:long new_value:long = ChannelAdminLogEventAction; -channelAdminLogEventActionChangeLocation#e6b76ae prev_value:ChannelLocation new_value:ChannelLocation = ChannelAdminLogEventAction; -channelAdminLogEventActionToggleSlowMode#53909779 prev_value:int new_value:int = ChannelAdminLogEventAction; -channelAdminLogEventActionStartGroupCall#23209745 call:InputGroupCall = ChannelAdminLogEventAction; -channelAdminLogEventActionDiscardGroupCall#db9f9140 call:InputGroupCall = ChannelAdminLogEventAction; -channelAdminLogEventActionParticipantMute#f92424d2 participant:GroupCallParticipant = ChannelAdminLogEventAction; -channelAdminLogEventActionParticipantUnmute#e64429c0 participant:GroupCallParticipant = ChannelAdminLogEventAction; -channelAdminLogEventActionToggleGroupCallSetting#56d6a247 join_muted:Bool = ChannelAdminLogEventAction; -channelAdminLogEventActionParticipantJoinByInvite#fe9fc158 flags:# via_chatlist:flags.0?true invite:ExportedChatInvite = ChannelAdminLogEventAction; -channelAdminLogEventActionExportedInviteDelete#5a50fca4 invite:ExportedChatInvite = ChannelAdminLogEventAction; -channelAdminLogEventActionExportedInviteRevoke#410a134e invite:ExportedChatInvite = ChannelAdminLogEventAction; -channelAdminLogEventActionExportedInviteEdit#e90ebb59 prev_invite:ExportedChatInvite new_invite:ExportedChatInvite = ChannelAdminLogEventAction; -channelAdminLogEventActionParticipantVolume#3e7f6847 participant:GroupCallParticipant = ChannelAdminLogEventAction; -channelAdminLogEventActionChangeHistoryTTL#6e941a38 prev_value:int new_value:int = ChannelAdminLogEventAction; -channelAdminLogEventActionParticipantJoinByRequest#afb6144a invite:ExportedChatInvite approved_by:long = ChannelAdminLogEventAction; -channelAdminLogEventActionToggleNoForwards#cb2ac766 new_value:Bool = ChannelAdminLogEventAction; -channelAdminLogEventActionSendMessage#278f2868 message:Message = ChannelAdminLogEventAction; -channelAdminLogEventActionChangeAvailableReactions#be4e0ef8 prev_value:ChatReactions new_value:ChatReactions = ChannelAdminLogEventAction; -channelAdminLogEventActionChangeUsernames#f04fb3a9 prev_value:Vector new_value:Vector = ChannelAdminLogEventAction; -channelAdminLogEventActionToggleForum#2cc6383 new_value:Bool = ChannelAdminLogEventAction; -channelAdminLogEventActionCreateTopic#58707d28 topic:ForumTopic = ChannelAdminLogEventAction; -channelAdminLogEventActionEditTopic#f06fe208 prev_topic:ForumTopic new_topic:ForumTopic = ChannelAdminLogEventAction; -channelAdminLogEventActionDeleteTopic#ae168909 topic:ForumTopic = ChannelAdminLogEventAction; -channelAdminLogEventActionPinTopic#5d8d353b flags:# prev_topic:flags.0?ForumTopic new_topic:flags.1?ForumTopic = ChannelAdminLogEventAction; -channelAdminLogEventActionToggleAntiSpam#64f36dfc new_value:Bool = ChannelAdminLogEventAction; -channelAdminLogEventActionChangePeerColor#5796e780 prev_value:PeerColor new_value:PeerColor = ChannelAdminLogEventAction; -channelAdminLogEventActionChangeProfilePeerColor#5e477b25 prev_value:PeerColor new_value:PeerColor = ChannelAdminLogEventAction; -channelAdminLogEventActionChangeWallpaper#31bb5d52 prev_value:WallPaper new_value:WallPaper = ChannelAdminLogEventAction; -channelAdminLogEventActionChangeEmojiStatus#3ea9feb1 prev_value:EmojiStatus new_value:EmojiStatus = ChannelAdminLogEventAction; -channelAdminLogEventActionChangeEmojiStickerSet#46d840ab prev_stickerset:InputStickerSet new_stickerset:InputStickerSet = ChannelAdminLogEventAction; -channelAdminLogEventActionToggleSignatureProfiles#60a79c79 new_value:Bool = ChannelAdminLogEventAction; -channelAdminLogEventActionParticipantSubExtend#64642db3 prev_participant:ChannelParticipant new_participant:ChannelParticipant = ChannelAdminLogEventAction; -channelAdminLogEventActionToggleAutotranslation#c517f77e new_value:Bool = ChannelAdminLogEventAction; -channelAdminLogEventActionParticipantEditRank#5806b4ec user_id:long prev_rank:string new_rank:string = ChannelAdminLogEventAction; - -channelAdminLogEvent#1fad68cd id:long date:int user_id:long action:ChannelAdminLogEventAction = ChannelAdminLogEvent; - -channels.adminLogResults#ed8af74d events:Vector chats:Vector users:Vector = channels.AdminLogResults; - -channelAdminLogEventsFilter#ea107ae4 flags:# join:flags.0?true leave:flags.1?true invite:flags.2?true ban:flags.3?true unban:flags.4?true kick:flags.5?true unkick:flags.6?true promote:flags.7?true demote:flags.8?true info:flags.9?true settings:flags.10?true pinned:flags.11?true edit:flags.12?true delete:flags.13?true group_call:flags.14?true invites:flags.15?true send:flags.16?true forums:flags.17?true sub_extend:flags.18?true edit_rank:flags.19?true = ChannelAdminLogEventsFilter; - -popularContact#5ce14175 client_id:long importers:int = PopularContact; - -messages.favedStickersNotModified#9e8fa6d3 = messages.FavedStickers; -messages.favedStickers#2cb51097 hash:long packs:Vector stickers:Vector = messages.FavedStickers; - -recentMeUrlUnknown#46e1d13d url:string = RecentMeUrl; -recentMeUrlUser#b92c09e2 url:string user_id:long = RecentMeUrl; -recentMeUrlChat#b2da71d2 url:string chat_id:long = RecentMeUrl; -recentMeUrlChatInvite#eb49081d url:string chat_invite:ChatInvite = RecentMeUrl; -recentMeUrlStickerSet#bc0a57dc url:string set:StickerSetCovered = RecentMeUrl; - -help.recentMeUrls#e0310d7 urls:Vector chats:Vector users:Vector = help.RecentMeUrls; - -inputSingleMedia#1cc6e91f flags:# media:InputMedia random_id:long message:string entities:flags.0?Vector = InputSingleMedia; - -webAuthorization#a6f8f452 hash:long bot_id:long domain:string browser:string platform:string date_created:int date_active:int ip:string region:string = WebAuthorization; - -account.webAuthorizations#ed56c9fc authorizations:Vector users:Vector = account.WebAuthorizations; - -inputMessageID#a676a322 id:int = InputMessage; -inputMessageReplyTo#bad88395 id:int = InputMessage; -inputMessagePinned#86872538 = InputMessage; -inputMessageCallbackQuery#acfa1a7e id:int query_id:long = InputMessage; - -inputDialogPeer#fcaafeb7 peer:InputPeer = InputDialogPeer; -inputDialogPeerFolder#64600527 folder_id:int = InputDialogPeer; - -dialogPeer#e56dbf05 peer:Peer = DialogPeer; -dialogPeerFolder#514519e2 folder_id:int = DialogPeer; - -messages.foundStickerSetsNotModified#d54b65d = messages.FoundStickerSets; -messages.foundStickerSets#8af09dd2 hash:long sets:Vector = messages.FoundStickerSets; - -fileHash#f39b035c offset:long limit:int hash:bytes = FileHash; - -inputClientProxy#75588b3f address:string port:int = InputClientProxy; - -help.termsOfServiceUpdateEmpty#e3309f7f expires:int = help.TermsOfServiceUpdate; -help.termsOfServiceUpdate#28ecf961 expires:int terms_of_service:help.TermsOfService = help.TermsOfServiceUpdate; - -inputSecureFileUploaded#3334b0f0 id:long parts:int md5_checksum:string file_hash:bytes secret:bytes = InputSecureFile; -inputSecureFile#5367e5be id:long access_hash:long = InputSecureFile; - -secureFileEmpty#64199744 = SecureFile; -secureFile#7d09c27e id:long access_hash:long size:long dc_id:int date:int file_hash:bytes secret:bytes = SecureFile; - -secureData#8aeabec3 data:bytes data_hash:bytes secret:bytes = SecureData; - -securePlainPhone#7d6099dd phone:string = SecurePlainData; -securePlainEmail#21ec5a5f email:string = SecurePlainData; - -secureValueTypePersonalDetails#9d2a81e3 = SecureValueType; -secureValueTypePassport#3dac6a00 = SecureValueType; -secureValueTypeDriverLicense#6e425c4 = SecureValueType; -secureValueTypeIdentityCard#a0d0744b = SecureValueType; -secureValueTypeInternalPassport#99a48f23 = SecureValueType; -secureValueTypeAddress#cbe31e26 = SecureValueType; -secureValueTypeUtilityBill#fc36954e = SecureValueType; -secureValueTypeBankStatement#89137c0d = SecureValueType; -secureValueTypeRentalAgreement#8b883488 = SecureValueType; -secureValueTypePassportRegistration#99e3806a = SecureValueType; -secureValueTypeTemporaryRegistration#ea02ec33 = SecureValueType; -secureValueTypePhone#b320aadb = SecureValueType; -secureValueTypeEmail#8e3ca7ee = SecureValueType; - -secureValue#187fa0ca flags:# type:SecureValueType data:flags.0?SecureData front_side:flags.1?SecureFile reverse_side:flags.2?SecureFile selfie:flags.3?SecureFile translation:flags.6?Vector files:flags.4?Vector plain_data:flags.5?SecurePlainData hash:bytes = SecureValue; - -inputSecureValue#db21d0a7 flags:# type:SecureValueType data:flags.0?SecureData front_side:flags.1?InputSecureFile reverse_side:flags.2?InputSecureFile selfie:flags.3?InputSecureFile translation:flags.6?Vector files:flags.4?Vector plain_data:flags.5?SecurePlainData = InputSecureValue; - -secureValueHash#ed1ecdb0 type:SecureValueType hash:bytes = SecureValueHash; - -secureValueErrorData#e8a40bd9 type:SecureValueType data_hash:bytes field:string text:string = SecureValueError; -secureValueErrorFrontSide#be3dfa type:SecureValueType file_hash:bytes text:string = SecureValueError; -secureValueErrorReverseSide#868a2aa5 type:SecureValueType file_hash:bytes text:string = SecureValueError; -secureValueErrorSelfie#e537ced6 type:SecureValueType file_hash:bytes text:string = SecureValueError; -secureValueErrorFile#7a700873 type:SecureValueType file_hash:bytes text:string = SecureValueError; -secureValueErrorFiles#666220e9 type:SecureValueType file_hash:Vector text:string = SecureValueError; -secureValueError#869d758f type:SecureValueType hash:bytes text:string = SecureValueError; -secureValueErrorTranslationFile#a1144770 type:SecureValueType file_hash:bytes text:string = SecureValueError; -secureValueErrorTranslationFiles#34636dd8 type:SecureValueType file_hash:Vector text:string = SecureValueError; - -secureCredentialsEncrypted#33f0ea47 data:bytes hash:bytes secret:bytes = SecureCredentialsEncrypted; - -account.authorizationForm#ad2e1cd8 flags:# required_types:Vector values:Vector errors:Vector users:Vector privacy_policy_url:flags.0?string = account.AuthorizationForm; - -account.sentEmailCode#811f854f email_pattern:string length:int = account.SentEmailCode; - -help.deepLinkInfoEmpty#66afa166 = help.DeepLinkInfo; -help.deepLinkInfo#6a4ee832 flags:# update_app:flags.0?true message:string entities:flags.1?Vector = help.DeepLinkInfo; - -savedPhoneContact#1142bd56 phone:string first_name:string last_name:string date:int = SavedContact; - -account.takeout#4dba4501 id:long = account.Takeout; - -passwordKdfAlgoUnknown#d45ab096 = PasswordKdfAlgo; -passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow#3a912d4a salt1:bytes salt2:bytes g:int p:bytes = PasswordKdfAlgo; - -securePasswordKdfAlgoUnknown#4a8537 = SecurePasswordKdfAlgo; -securePasswordKdfAlgoPBKDF2HMACSHA512iter100000#bbf2dda0 salt:bytes = SecurePasswordKdfAlgo; -securePasswordKdfAlgoSHA512#86471d92 salt:bytes = SecurePasswordKdfAlgo; - -secureSecretSettings#1527bcac secure_algo:SecurePasswordKdfAlgo secure_secret:bytes secure_secret_id:long = SecureSecretSettings; - -inputCheckPasswordEmpty#9880f658 = InputCheckPasswordSRP; -inputCheckPasswordSRP#d27ff082 srp_id:long A:bytes M1:bytes = InputCheckPasswordSRP; - -secureRequiredType#829d99da flags:# native_names:flags.0?true selfie_required:flags.1?true translation_required:flags.2?true type:SecureValueType = SecureRequiredType; -secureRequiredTypeOneOf#27477b4 types:Vector = SecureRequiredType; - -help.passportConfigNotModified#bfb9f457 = help.PassportConfig; -help.passportConfig#a098d6af hash:int countries_langs:DataJSON = help.PassportConfig; - -inputAppEvent#1d1b1245 time:double type:string peer:long data:JSONValue = InputAppEvent; - -jsonObjectValue#c0de1bd9 key:string value:JSONValue = JSONObjectValue; - -jsonNull#3f6d7b68 = JSONValue; -jsonBool#c7345e6a value:Bool = JSONValue; -jsonNumber#2be0dfa4 value:double = JSONValue; -jsonString#b71e767a value:string = JSONValue; -jsonArray#f7444763 value:Vector = JSONValue; -jsonObject#99c1d49d value:Vector = JSONValue; - -pageTableCell#34566b6a flags:# header:flags.0?true align_center:flags.3?true align_right:flags.4?true valign_middle:flags.5?true valign_bottom:flags.6?true text:flags.7?RichText colspan:flags.1?int rowspan:flags.2?int = PageTableCell; - -pageTableRow#e0c0c5e5 cells:Vector = PageTableRow; - -pageCaption#6f747657 text:RichText credit:RichText = PageCaption; - -pageListItemText#b92fb6cd text:RichText = PageListItem; -pageListItemBlocks#25e073fc blocks:Vector = PageListItem; - -pageListOrderedItemText#5e068047 num:string text:RichText = PageListOrderedItem; -pageListOrderedItemBlocks#98dd8936 num:string blocks:Vector = PageListOrderedItem; - -pageRelatedArticle#b390dc08 flags:# url:string webpage_id:long title:flags.0?string description:flags.1?string photo_id:flags.2?long author:flags.3?string published_date:flags.4?int = PageRelatedArticle; - -page#98657f0d flags:# part:flags.0?true rtl:flags.1?true v2:flags.2?true url:string blocks:Vector photos:Vector documents:Vector views:flags.3?int = Page; - -help.supportName#8c05f1c9 name:string = help.SupportName; - -help.userInfoEmpty#f3ae2eed = help.UserInfo; -help.userInfo#1eb3758 message:string entities:Vector author:string date:int = help.UserInfo; - -pollAnswer#4b7d786a flags:# text:TextWithEntities option:bytes media:flags.0?MessageMedia added_by:flags.1?Peer date:flags.1?int = PollAnswer; -inputPollAnswer#199fed96 flags:# text:TextWithEntities media:flags.0?InputMedia = PollAnswer; - -poll#966e2dbf id:long flags:# closed:flags.0?true public_voters:flags.1?true multiple_choice:flags.2?true quiz:flags.3?true open_answers:flags.6?true revoting_disabled:flags.7?true shuffle_answers:flags.8?true hide_results_until_close:flags.9?true creator:flags.10?true subscribers_only:flags.11?true question:TextWithEntities answers:Vector close_period:flags.4?int close_date:flags.5?int countries_iso2:flags.12?Vector hash:long = Poll; - -pollAnswerVoters#3645230a flags:# chosen:flags.0?true correct:flags.1?true option:bytes voters:flags.2?int recent_voters:flags.2?Vector = PollAnswerVoters; - -pollResults#ba7bb15e flags:# min:flags.0?true has_unread_votes:flags.6?true can_view_stats:flags.7?true results:flags.1?Vector total_voters:flags.2?int recent_voters:flags.3?Vector solution:flags.4?string solution_entities:flags.4?Vector solution_media:flags.5?MessageMedia = PollResults; - -chatOnlines#f041e250 onlines:int = ChatOnlines; - -statsURL#47a971e0 url:string = StatsURL; - -chatAdminRights#5fb224d5 flags:# change_info:flags.0?true post_messages:flags.1?true edit_messages:flags.2?true delete_messages:flags.3?true ban_users:flags.4?true invite_users:flags.5?true pin_messages:flags.7?true add_admins:flags.9?true anonymous:flags.10?true manage_call:flags.11?true other:flags.12?true manage_topics:flags.13?true post_stories:flags.14?true edit_stories:flags.15?true delete_stories:flags.16?true manage_direct_messages:flags.17?true manage_ranks:flags.18?true = ChatAdminRights; - -chatBannedRights#9f120418 flags:# view_messages:flags.0?true send_messages:flags.1?true send_media:flags.2?true send_stickers:flags.3?true send_gifs:flags.4?true send_games:flags.5?true send_inline:flags.6?true embed_links:flags.7?true send_polls:flags.8?true change_info:flags.10?true invite_users:flags.15?true pin_messages:flags.17?true manage_topics:flags.18?true send_photos:flags.19?true send_videos:flags.20?true send_roundvideos:flags.21?true send_audios:flags.22?true send_voices:flags.23?true send_docs:flags.24?true send_plain:flags.25?true edit_rank:flags.26?true send_reactions:flags.27?true until_date:int = ChatBannedRights; - -inputWallPaper#e630b979 id:long access_hash:long = InputWallPaper; -inputWallPaperSlug#72091c80 slug:string = InputWallPaper; -inputWallPaperNoFile#967a462e id:long = InputWallPaper; - -account.wallPapersNotModified#1c199183 = account.WallPapers; -account.wallPapers#cdc3858c hash:long wallpapers:Vector = account.WallPapers; - -codeSettings#ad253d78 flags:# allow_flashcall:flags.0?true current_number:flags.1?true allow_app_hash:flags.4?true allow_missed_call:flags.5?true allow_firebase:flags.7?true unknown_number:flags.9?true logout_tokens:flags.6?Vector token:flags.8?string app_sandbox:flags.8?Bool = CodeSettings; - -wallPaperSettings#372efcd0 flags:# blur:flags.1?true motion:flags.2?true background_color:flags.0?int second_background_color:flags.4?int third_background_color:flags.5?int fourth_background_color:flags.6?int intensity:flags.3?int rotation:flags.4?int emoticon:flags.7?string = WallPaperSettings; - -autoDownloadSettings#baa57628 flags:# disabled:flags.0?true video_preload_large:flags.1?true audio_preload_next:flags.2?true phonecalls_less_data:flags.3?true stories_preload:flags.4?true photo_size_max:int video_size_max:long file_size_max:long video_upload_maxbitrate:int small_queue_active_operations_max:int large_queue_active_operations_max:int = AutoDownloadSettings; - -account.autoDownloadSettings#63cacf26 low:AutoDownloadSettings medium:AutoDownloadSettings high:AutoDownloadSettings = account.AutoDownloadSettings; - -emojiKeyword#d5b3b9f9 keyword:string emoticons:Vector = EmojiKeyword; -emojiKeywordDeleted#236df622 keyword:string emoticons:Vector = EmojiKeyword; - -emojiKeywordsDifference#5cc761bd lang_code:string from_version:int version:int keywords:Vector = EmojiKeywordsDifference; - -emojiURL#a575739d url:string = EmojiURL; - -emojiLanguage#b3fb5361 lang_code:string = EmojiLanguage; - -folder#ff544e65 flags:# autofill_new_broadcasts:flags.0?true autofill_public_groups:flags.1?true autofill_new_correspondents:flags.2?true id:int title:string photo:flags.3?ChatPhoto = Folder; - -inputFolderPeer#fbd2c296 peer:InputPeer folder_id:int = InputFolderPeer; - -folderPeer#e9baa668 peer:Peer folder_id:int = FolderPeer; - -messages.searchCounter#e844ebff flags:# inexact:flags.1?true filter:MessagesFilter count:int = messages.SearchCounter; - -urlAuthResultRequest#3cd623ec flags:# request_write_access:flags.0?true request_phone_number:flags.1?true match_codes_first:flags.5?true is_app:flags.6?true bot:User domain:string browser:flags.2?string platform:flags.2?string ip:flags.2?string region:flags.2?string match_codes:flags.3?Vector user_id_hint:flags.4?long verified_app_name:flags.7?string = UrlAuthResult; -urlAuthResultAccepted#623a8fa0 flags:# url:flags.0?string = UrlAuthResult; -urlAuthResultDefault#a9d6db1f = UrlAuthResult; - -channelLocationEmpty#bfb5ad8b = ChannelLocation; -channelLocation#209b82db geo_point:GeoPoint address:string = ChannelLocation; - -peerLocated#ca461b5d peer:Peer expires:int distance:int = PeerLocated; -peerSelfLocated#f8ec284b expires:int = PeerLocated; - -restrictionReason#d072acb4 platform:string reason:string text:string = RestrictionReason; - -inputTheme#3c5693e9 id:long access_hash:long = InputTheme; -inputThemeSlug#f5890df1 slug:string = InputTheme; - -theme#a00e67d6 flags:# creator:flags.0?true default:flags.1?true for_chat:flags.5?true id:long access_hash:long slug:string title:string document:flags.2?Document settings:flags.3?Vector emoticon:flags.6?string installs_count:flags.4?int = Theme; - -account.themesNotModified#f41eb622 = account.Themes; -account.themes#9a3d8c6d hash:long themes:Vector = account.Themes; - -auth.loginToken#629f1980 expires:int token:bytes = auth.LoginToken; -auth.loginTokenMigrateTo#68e9916 dc_id:int token:bytes = auth.LoginToken; -auth.loginTokenSuccess#390d5c5e authorization:auth.Authorization = auth.LoginToken; - -account.contentSettings#57e28221 flags:# sensitive_enabled:flags.0?true sensitive_can_change:flags.1?true = account.ContentSettings; - -messages.inactiveChats#a927fec5 dates:Vector chats:Vector users:Vector = messages.InactiveChats; - -baseThemeClassic#c3a12462 = BaseTheme; -baseThemeDay#fbd81688 = BaseTheme; -baseThemeNight#b7b31ea8 = BaseTheme; -baseThemeTinted#6d5f77ee = BaseTheme; -baseThemeArctic#5b11125a = BaseTheme; - -inputThemeSettings#8fde504f flags:# message_colors_animated:flags.2?true base_theme:BaseTheme accent_color:int outbox_accent_color:flags.3?int message_colors:flags.0?Vector wallpaper:flags.1?InputWallPaper wallpaper_settings:flags.1?WallPaperSettings = InputThemeSettings; - -themeSettings#fa58b6d4 flags:# message_colors_animated:flags.2?true base_theme:BaseTheme accent_color:int outbox_accent_color:flags.3?int message_colors:flags.0?Vector wallpaper:flags.1?WallPaper = ThemeSettings; - -webPageAttributeTheme#54b56617 flags:# documents:flags.0?Vector settings:flags.1?ThemeSettings = WebPageAttribute; -webPageAttributeStory#2e94c3e7 flags:# peer:Peer id:int story:flags.0?StoryItem = WebPageAttribute; -webPageAttributeStickerSet#50cc03d3 flags:# emojis:flags.0?true text_color:flags.1?true stickers:Vector = WebPageAttribute; -webPageAttributeUniqueStarGift#cf6f6db8 gift:StarGift = WebPageAttribute; -webPageAttributeStarGiftCollection#31cad303 icons:Vector = WebPageAttribute; -webPageAttributeStarGiftAuction#1c641c2 gift:StarGift end_date:int = WebPageAttribute; -webPageAttributeAiComposeTone#7781fe18 emoji_id:long = WebPageAttribute; - -messages.votesList#4899484e flags:# count:int votes:Vector chats:Vector users:Vector next_offset:flags.0?string = messages.VotesList; - -bankCardOpenUrl#f568028a url:string name:string = BankCardOpenUrl; - -payments.bankCardData#3e24e573 title:string open_urls:Vector = payments.BankCardData; - -dialogFilter#aa472651 flags:# contacts:flags.0?true non_contacts:flags.1?true groups:flags.2?true broadcasts:flags.3?true bots:flags.4?true exclude_muted:flags.11?true exclude_read:flags.12?true exclude_archived:flags.13?true title_noanimate:flags.28?true id:int title:TextWithEntities emoticon:flags.25?string color:flags.27?int pinned_peers:Vector include_peers:Vector exclude_peers:Vector = DialogFilter; -dialogFilterDefault#363293ae = DialogFilter; -dialogFilterChatlist#96537bd7 flags:# has_my_invites:flags.26?true title_noanimate:flags.28?true id:int title:TextWithEntities emoticon:flags.25?string color:flags.27?int pinned_peers:Vector include_peers:Vector = DialogFilter; - -dialogFilterSuggested#77744d4a filter:DialogFilter description:string = DialogFilterSuggested; - -statsDateRangeDays#b637edaf min_date:int max_date:int = StatsDateRangeDays; - -statsAbsValueAndPrev#cb43acde current:double previous:double = StatsAbsValueAndPrev; - -statsPercentValue#cbce2fe0 part:double total:double = StatsPercentValue; - -statsGraphAsync#4a27eb2d token:string = StatsGraph; -statsGraphError#bedc9822 error:string = StatsGraph; -statsGraph#8ea464b6 flags:# json:DataJSON zoom_token:flags.0?string = StatsGraph; - -stats.broadcastStats#396ca5fc period:StatsDateRangeDays followers:StatsAbsValueAndPrev views_per_post:StatsAbsValueAndPrev shares_per_post:StatsAbsValueAndPrev reactions_per_post:StatsAbsValueAndPrev views_per_story:StatsAbsValueAndPrev shares_per_story:StatsAbsValueAndPrev reactions_per_story:StatsAbsValueAndPrev enabled_notifications:StatsPercentValue growth_graph:StatsGraph followers_graph:StatsGraph mute_graph:StatsGraph top_hours_graph:StatsGraph interactions_graph:StatsGraph iv_interactions_graph:StatsGraph views_by_source_graph:StatsGraph new_followers_by_source_graph:StatsGraph languages_graph:StatsGraph reactions_by_emotion_graph:StatsGraph story_interactions_graph:StatsGraph story_reactions_by_emotion_graph:StatsGraph recent_posts_interactions:Vector = stats.BroadcastStats; - -help.promoDataEmpty#98f6ac75 expires:int = help.PromoData; -help.promoData#8a4d87a flags:# proxy:flags.0?true expires:int peer:flags.3?Peer psa_type:flags.1?string psa_message:flags.2?string pending_suggestions:Vector dismissed_suggestions:Vector custom_pending_suggestion:flags.4?PendingSuggestion chats:Vector users:Vector = help.PromoData; - -videoSize#de33b094 flags:# type:string w:int h:int size:int video_start_ts:flags.0?double = VideoSize; -videoSizeEmojiMarkup#f85c413c emoji_id:long background_colors:Vector = VideoSize; -videoSizeStickerMarkup#da082fe stickerset:InputStickerSet sticker_id:long background_colors:Vector = VideoSize; - -statsGroupTopPoster#9d04af9b user_id:long messages:int avg_chars:int = StatsGroupTopPoster; - -statsGroupTopAdmin#d7584c87 user_id:long deleted:int kicked:int banned:int = StatsGroupTopAdmin; - -statsGroupTopInviter#535f779d user_id:long invitations:int = StatsGroupTopInviter; - -stats.megagroupStats#ef7ff916 period:StatsDateRangeDays members:StatsAbsValueAndPrev messages:StatsAbsValueAndPrev viewers:StatsAbsValueAndPrev posters:StatsAbsValueAndPrev growth_graph:StatsGraph members_graph:StatsGraph new_members_by_source_graph:StatsGraph languages_graph:StatsGraph messages_graph:StatsGraph actions_graph:StatsGraph top_hours_graph:StatsGraph weekdays_graph:StatsGraph top_posters:Vector top_admins:Vector top_inviters:Vector users:Vector = stats.MegagroupStats; - -globalPrivacySettings#fe41b34f flags:# archive_and_mute_new_noncontact_peers:flags.0?true keep_archived_unmuted:flags.1?true keep_archived_folders:flags.2?true hide_read_marks:flags.3?true new_noncontact_peers_require_premium:flags.4?true display_gifts_button:flags.7?true noncontact_peers_paid_stars:flags.5?long disallowed_gifts:flags.6?DisallowedGiftsSettings = GlobalPrivacySettings; - -help.countryCode#4203c5ef flags:# country_code:string prefixes:flags.0?Vector patterns:flags.1?Vector = help.CountryCode; - -help.country#c3878e23 flags:# hidden:flags.0?true iso2:string default_name:string name:flags.1?string country_codes:Vector = help.Country; - -help.countriesListNotModified#93cc1f32 = help.CountriesList; -help.countriesList#87d0759e countries:Vector hash:int = help.CountriesList; - -messageViews#455b853d flags:# views:flags.0?int forwards:flags.1?int replies:flags.2?MessageReplies = MessageViews; - -messages.messageViews#b6c4f543 views:Vector chats:Vector users:Vector = messages.MessageViews; - -messages.discussionMessage#a6341782 flags:# messages:Vector max_id:flags.0?int read_inbox_max_id:flags.1?int read_outbox_max_id:flags.2?int unread_count:int chats:Vector users:Vector = messages.DiscussionMessage; - -messageReplyHeader#1b97dd66 flags:# reply_to_scheduled:flags.2?true forum_topic:flags.3?true quote:flags.9?true reply_to_msg_id:flags.4?int reply_to_peer_id:flags.0?Peer reply_from:flags.5?MessageFwdHeader reply_media:flags.8?MessageMedia reply_to_top_id:flags.1?int quote_text:flags.6?string quote_entities:flags.7?Vector quote_offset:flags.10?int todo_item_id:flags.11?int poll_option:flags.12?bytes = MessageReplyHeader; -messageReplyStoryHeader#e5af939 peer:Peer story_id:int = MessageReplyHeader; - -messageReplies#83d60fc2 flags:# comments:flags.0?true replies:int replies_pts:int recent_repliers:flags.1?Vector channel_id:flags.0?long max_id:flags.2?int read_max_id:flags.3?int = MessageReplies; - -peerBlocked#e8fd8014 peer_id:Peer date:int = PeerBlocked; - -stats.messageStats#7fe91c14 views_graph:StatsGraph reactions_by_emotion_graph:StatsGraph = stats.MessageStats; - -groupCallDiscarded#7780bcb4 id:long access_hash:long duration:int = GroupCall; -groupCall#efb2b617 flags:# join_muted:flags.1?true can_change_join_muted:flags.2?true join_date_asc:flags.6?true schedule_start_subscribed:flags.8?true can_start_video:flags.9?true record_video_active:flags.11?true rtmp_stream:flags.12?true listeners_hidden:flags.13?true conference:flags.14?true creator:flags.15?true messages_enabled:flags.17?true can_change_messages_enabled:flags.18?true min:flags.19?true id:long access_hash:long participants_count:int title:flags.3?string stream_dc_id:flags.4?int record_start_date:flags.5?int schedule_date:flags.7?int unmuted_video_count:flags.10?int unmuted_video_limit:int version:int invite_link:flags.16?string send_paid_messages_stars:flags.20?long default_send_as:flags.21?Peer = GroupCall; - -inputGroupCall#d8aa840f id:long access_hash:long = InputGroupCall; -inputGroupCallSlug#fe06823f slug:string = InputGroupCall; -inputGroupCallInviteMessage#8c10603f msg_id:int = InputGroupCall; - -groupCallParticipant#2a3dc7ac flags:# muted:flags.0?true left:flags.1?true can_self_unmute:flags.2?true just_joined:flags.4?true versioned:flags.5?true min:flags.8?true muted_by_you:flags.9?true volume_by_admin:flags.10?true self:flags.12?true video_joined:flags.15?true peer:Peer date:int active_date:flags.3?int source:int volume:flags.7?int about:flags.11?string raise_hand_rating:flags.13?long video:flags.6?GroupCallParticipantVideo presentation:flags.14?GroupCallParticipantVideo paid_stars_total:flags.16?long = GroupCallParticipant; - -phone.groupCall#9e727aad call:GroupCall participants:Vector participants_next_offset:string chats:Vector users:Vector = phone.GroupCall; - -phone.groupParticipants#f47751b6 count:int participants:Vector next_offset:string chats:Vector users:Vector version:int = phone.GroupParticipants; - -inlineQueryPeerTypeSameBotPM#3081ed9d = InlineQueryPeerType; -inlineQueryPeerTypePM#833c0fac = InlineQueryPeerType; -inlineQueryPeerTypeChat#d766c50a = InlineQueryPeerType; -inlineQueryPeerTypeMegagroup#5ec4be43 = InlineQueryPeerType; -inlineQueryPeerTypeBroadcast#6334ee9a = InlineQueryPeerType; -inlineQueryPeerTypeBotPM#e3b2d0c = InlineQueryPeerType; - -messages.historyImport#1662af0b id:long = messages.HistoryImport; - -messages.historyImportParsed#5e0fb7b9 flags:# pm:flags.0?true group:flags.1?true title:flags.2?string = messages.HistoryImportParsed; - -messages.affectedFoundMessages#ef8d3e6c pts:int pts_count:int offset:int messages:Vector = messages.AffectedFoundMessages; - -chatInviteImporter#8c5adfd9 flags:# requested:flags.0?true via_chatlist:flags.3?true user_id:long date:int about:flags.2?string approved_by:flags.1?long = ChatInviteImporter; - -messages.exportedChatInvites#bdc62dcc count:int invites:Vector users:Vector = messages.ExportedChatInvites; - -messages.exportedChatInvite#1871be50 invite:ExportedChatInvite users:Vector = messages.ExportedChatInvite; -messages.exportedChatInviteReplaced#222600ef invite:ExportedChatInvite new_invite:ExportedChatInvite users:Vector = messages.ExportedChatInvite; - -messages.chatInviteImporters#81b6b00a count:int importers:Vector users:Vector = messages.ChatInviteImporters; - -chatAdminWithInvites#f2ecef23 admin_id:long invites_count:int revoked_invites_count:int = ChatAdminWithInvites; - -messages.chatAdminsWithInvites#b69b72d7 admins:Vector users:Vector = messages.ChatAdminsWithInvites; - -messages.checkedHistoryImportPeer#a24de717 confirm_text:string = messages.CheckedHistoryImportPeer; - -phone.joinAsPeers#afe5623f peers:Vector chats:Vector users:Vector = phone.JoinAsPeers; - -phone.exportedGroupCallInvite#204bd158 link:string = phone.ExportedGroupCallInvite; - -groupCallParticipantVideoSourceGroup#dcb118b7 semantics:string sources:Vector = GroupCallParticipantVideoSourceGroup; - -groupCallParticipantVideo#67753ac8 flags:# paused:flags.0?true endpoint:string source_groups:Vector audio_source:flags.1?int = GroupCallParticipantVideo; - -stickers.suggestedShortName#85fea03f short_name:string = stickers.SuggestedShortName; - -botCommandScopeDefault#2f6cb2ab = BotCommandScope; -botCommandScopeUsers#3c4f04d8 = BotCommandScope; -botCommandScopeChats#6fe1a881 = BotCommandScope; -botCommandScopeChatAdmins#b9aa606a = BotCommandScope; -botCommandScopePeer#db9d897d peer:InputPeer = BotCommandScope; -botCommandScopePeerAdmins#3fd863d1 peer:InputPeer = BotCommandScope; -botCommandScopePeerUser#a1321f3 peer:InputPeer user_id:InputUser = BotCommandScope; - -account.resetPasswordFailedWait#e3779861 retry_date:int = account.ResetPasswordResult; -account.resetPasswordRequestedWait#e9effc7d until_date:int = account.ResetPasswordResult; -account.resetPasswordOk#e926d63e = account.ResetPasswordResult; - -chatTheme#c3dffc04 emoticon:string = ChatTheme; -chatThemeUniqueGift#3458f9c8 gift:StarGift theme_settings:Vector = ChatTheme; - -account.chatThemesNotModified#e011e1c4 = account.ChatThemes; -account.chatThemes#be098173 flags:# hash:long themes:Vector chats:Vector users:Vector next_offset:flags.0?string = account.ChatThemes; - -sponsoredMessage#7dbf8673 flags:# recommended:flags.5?true can_report:flags.12?true random_id:bytes url:string title:string message:string entities:flags.1?Vector photo:flags.6?Photo media:flags.14?MessageMedia color:flags.13?PeerColor button_text:string sponsor_info:flags.7?string additional_info:flags.8?string min_display_duration:flags.15?int max_display_duration:flags.15?int = SponsoredMessage; - -messages.sponsoredMessages#ffda656d flags:# posts_between:flags.0?int start_delay:flags.1?int between_delay:flags.2?int messages:Vector chats:Vector users:Vector = messages.SponsoredMessages; -messages.sponsoredMessagesEmpty#1839490f = messages.SponsoredMessages; - -searchResultsCalendarPeriod#c9b0539f date:int min_msg_id:int max_msg_id:int count:int = SearchResultsCalendarPeriod; - -messages.searchResultsCalendar#147ee23c flags:# inexact:flags.0?true count:int min_date:int min_msg_id:int offset_id_offset:flags.1?int periods:Vector messages:Vector chats:Vector users:Vector = messages.SearchResultsCalendar; - -searchResultPosition#7f648b67 msg_id:int date:int offset:int = SearchResultsPosition; - -messages.searchResultsPositions#53b22baf count:int positions:Vector = messages.SearchResultsPositions; - -channels.sendAsPeers#f496b0c6 peers:Vector chats:Vector users:Vector = channels.SendAsPeers; - -users.userFull#3b6d152e full_user:UserFull chats:Vector users:Vector = users.UserFull; - -messages.peerSettings#6880b94d settings:PeerSettings chats:Vector users:Vector = messages.PeerSettings; - -auth.loggedOut#c3a2835f flags:# future_auth_token:flags.0?bytes = auth.LoggedOut; - -reactionCount#a3d1cb80 flags:# chosen_order:flags.0?int reaction:Reaction count:int = ReactionCount; - -messageReactions#a339f0b flags:# min:flags.0?true can_see_list:flags.2?true reactions_as_tags:flags.3?true results:Vector recent_reactions:flags.1?Vector top_reactors:flags.4?Vector = MessageReactions; - -messages.messageReactionsList#31bd492d flags:# count:int reactions:Vector chats:Vector users:Vector next_offset:flags.0?string = messages.MessageReactionsList; - -availableReaction#c077ec01 flags:# inactive:flags.0?true premium:flags.2?true reaction:string title:string static_icon:Document appear_animation:Document select_animation:Document activate_animation:Document effect_animation:Document around_animation:flags.1?Document center_icon:flags.1?Document = AvailableReaction; - -messages.availableReactionsNotModified#9f071957 = messages.AvailableReactions; -messages.availableReactions#768e3aad hash:int reactions:Vector = messages.AvailableReactions; - -messagePeerReaction#8c79b63c flags:# big:flags.0?true unread:flags.1?true my:flags.2?true peer_id:Peer date:int reaction:Reaction = MessagePeerReaction; - -groupCallStreamChannel#80eb48af channel:int scale:int last_timestamp_ms:long = GroupCallStreamChannel; - -phone.groupCallStreamChannels#d0e482b2 channels:Vector = phone.GroupCallStreamChannels; - -phone.groupCallStreamRtmpUrl#2dbf3432 url:string key:string = phone.GroupCallStreamRtmpUrl; - -attachMenuBotIconColor#4576f3f0 name:string color:int = AttachMenuBotIconColor; - -attachMenuBotIcon#b2a7386b flags:# name:string icon:Document colors:flags.0?Vector = AttachMenuBotIcon; - -attachMenuBot#d90d8dfe flags:# inactive:flags.0?true has_settings:flags.1?true request_write_access:flags.2?true show_in_attach_menu:flags.3?true show_in_side_menu:flags.4?true side_menu_disclaimer_needed:flags.5?true bot_id:long short_name:string peer_types:flags.3?Vector icons:Vector = AttachMenuBot; - -attachMenuBotsNotModified#f1d88a5c = AttachMenuBots; -attachMenuBots#3c4301c0 hash:long bots:Vector users:Vector = AttachMenuBots; - -attachMenuBotsBot#93bf667f bot:AttachMenuBot users:Vector = AttachMenuBotsBot; - -webViewResultUrl#4d22ff98 flags:# fullsize:flags.1?true fullscreen:flags.2?true query_id:flags.0?long url:string = WebViewResult; - -webViewMessageSent#c94511c flags:# msg_id:flags.0?InputBotInlineMessageID = WebViewMessageSent; - -botMenuButtonDefault#7533a588 = BotMenuButton; -botMenuButtonCommands#4258c205 = BotMenuButton; -botMenuButton#c7b57ce6 text:string url:string = BotMenuButton; - -account.savedRingtonesNotModified#fbf6e8b1 = account.SavedRingtones; -account.savedRingtones#c1e92cc5 hash:long ringtones:Vector = account.SavedRingtones; - -notificationSoundDefault#97e8bebe = NotificationSound; -notificationSoundNone#6f0c34df = NotificationSound; -notificationSoundLocal#830b9ae4 title:string data:string = NotificationSound; -notificationSoundRingtone#ff6c8049 id:long = NotificationSound; - -account.savedRingtone#b7263f6d = account.SavedRingtone; -account.savedRingtoneConverted#1f307eb7 document:Document = account.SavedRingtone; - -attachMenuPeerTypeSameBotPM#7d6be90e = AttachMenuPeerType; -attachMenuPeerTypeBotPM#c32bfa1a = AttachMenuPeerType; -attachMenuPeerTypePM#f146d31f = AttachMenuPeerType; -attachMenuPeerTypeChat#509113f = AttachMenuPeerType; -attachMenuPeerTypeBroadcast#7bfbdefc = AttachMenuPeerType; - -inputInvoiceMessage#c5b56859 peer:InputPeer msg_id:int = InputInvoice; -inputInvoiceSlug#c326caef slug:string = InputInvoice; -inputInvoicePremiumGiftCode#98986c0d purpose:InputStorePaymentPurpose option:PremiumGiftCodeOption = InputInvoice; -inputInvoiceStars#65f00ce3 purpose:InputStorePaymentPurpose = InputInvoice; -inputInvoiceChatInviteSubscription#34e793f1 hash:string = InputInvoice; -inputInvoiceStarGift#e8625e92 flags:# hide_name:flags.0?true include_upgrade:flags.2?true peer:InputPeer gift_id:long message:flags.1?TextWithEntities = InputInvoice; -inputInvoiceStarGiftUpgrade#4d818d5d flags:# keep_original_details:flags.0?true stargift:InputSavedStarGift = InputInvoice; -inputInvoiceStarGiftTransfer#4a5f5bd9 stargift:InputSavedStarGift to_id:InputPeer = InputInvoice; -inputInvoicePremiumGiftStars#dabab2ef flags:# user_id:InputUser months:int message:flags.0?TextWithEntities = InputInvoice; -inputInvoiceBusinessBotTransferStars#f4997e42 bot:InputUser stars:long = InputInvoice; -inputInvoiceStarGiftResale#c39f5324 flags:# ton:flags.0?true slug:string to_id:InputPeer = InputInvoice; -inputInvoiceStarGiftPrepaidUpgrade#9a0b48b8 peer:InputPeer hash:string = InputInvoice; -inputInvoicePremiumAuthCode#3e77f614 purpose:InputStorePaymentPurpose = InputInvoice; -inputInvoiceStarGiftDropOriginalDetails#923d8d1 stargift:InputSavedStarGift = InputInvoice; -inputInvoiceStarGiftAuctionBid#1ecafa10 flags:# hide_name:flags.0?true update_bid:flags.2?true peer:flags.3?InputPeer gift_id:long bid_amount:long message:flags.1?TextWithEntities = InputInvoice; - -payments.exportedInvoice#aed0cbd9 url:string = payments.ExportedInvoice; - -messages.transcribedAudio#cfb9d957 flags:# pending:flags.0?true transcription_id:long text:string trial_remains_num:flags.1?int trial_remains_until_date:flags.1?int = messages.TranscribedAudio; - -help.premiumPromo#5334759c status_text:string status_entities:Vector video_sections:Vector videos:Vector period_options:Vector users:Vector = help.PremiumPromo; - -inputStorePaymentPremiumSubscription#a6751e66 flags:# restore:flags.0?true upgrade:flags.1?true = InputStorePaymentPurpose; -inputStorePaymentGiftPremium#616f7fe8 user_id:InputUser currency:string amount:long = InputStorePaymentPurpose; -inputStorePaymentPremiumGiftCode#fb790393 flags:# users:Vector boost_peer:flags.0?InputPeer currency:string amount:long message:flags.1?TextWithEntities = InputStorePaymentPurpose; -inputStorePaymentPremiumGiveaway#160544ca flags:# only_new_subscribers:flags.0?true winners_are_visible:flags.3?true boost_peer:InputPeer additional_peers:flags.1?Vector countries_iso2:flags.2?Vector prize_description:flags.4?string random_id:long until_date:int currency:string amount:long = InputStorePaymentPurpose; -inputStorePaymentStarsTopup#f9a2a6cb flags:# stars:long currency:string amount:long spend_purpose_peer:flags.0?InputPeer = InputStorePaymentPurpose; -inputStorePaymentStarsGift#1d741ef7 user_id:InputUser stars:long currency:string amount:long = InputStorePaymentPurpose; -inputStorePaymentStarsGiveaway#751f08fa flags:# only_new_subscribers:flags.0?true winners_are_visible:flags.3?true stars:long boost_peer:InputPeer additional_peers:flags.1?Vector countries_iso2:flags.2?Vector prize_description:flags.4?string random_id:long until_date:int currency:string amount:long users:int = InputStorePaymentPurpose; -inputStorePaymentAuthCode#3fc18057 flags:# restore:flags.0?true phone_number:string phone_code_hash:string premium_days:int currency:string amount:long = InputStorePaymentPurpose; - -paymentFormMethod#88f8f21b url:string title:string = PaymentFormMethod; - -emojiStatusEmpty#2de11aae = EmojiStatus; -emojiStatus#e7ff068a flags:# document_id:long until:flags.0?int = EmojiStatus; -emojiStatusCollectible#7184603b flags:# collectible_id:long document_id:long title:string slug:string pattern_document_id:long center_color:int edge_color:int pattern_color:int text_color:int until:flags.0?int = EmojiStatus; -inputEmojiStatusCollectible#7141dbf flags:# collectible_id:long until:flags.0?int = EmojiStatus; - -account.emojiStatusesNotModified#d08ce645 = account.EmojiStatuses; -account.emojiStatuses#90c467d1 hash:long statuses:Vector = account.EmojiStatuses; - -reactionEmpty#79f5d419 = Reaction; -reactionEmoji#1b2286b8 emoticon:string = Reaction; -reactionCustomEmoji#8935fc73 document_id:long = Reaction; -reactionPaid#523da4eb = Reaction; - -chatReactionsNone#eafc32bc = ChatReactions; -chatReactionsAll#52928bca flags:# allow_custom:flags.0?true = ChatReactions; -chatReactionsSome#661d4037 reactions:Vector = ChatReactions; - -messages.reactionsNotModified#b06fdbdf = messages.Reactions; -messages.reactions#eafdf716 hash:long reactions:Vector = messages.Reactions; - -emailVerifyPurposeLoginSetup#4345be73 phone_number:string phone_code_hash:string = EmailVerifyPurpose; -emailVerifyPurposeLoginChange#527d22eb = EmailVerifyPurpose; -emailVerifyPurposePassport#bbf51685 = EmailVerifyPurpose; - -emailVerificationCode#922e55a9 code:string = EmailVerification; -emailVerificationGoogle#db909ec2 token:string = EmailVerification; -emailVerificationApple#96d074fd token:string = EmailVerification; - -account.emailVerified#2b96cd1b email:string = account.EmailVerified; -account.emailVerifiedLogin#e1bb0d61 email:string sent_code:auth.SentCode = account.EmailVerified; - -premiumSubscriptionOption#5f2d1df2 flags:# current:flags.1?true can_purchase_upgrade:flags.2?true transaction:flags.3?string months:int currency:string amount:long bot_url:string store_product:flags.0?string = PremiumSubscriptionOption; - -sendAsPeer#b81c7034 flags:# premium_required:flags.0?true peer:Peer = SendAsPeer; - -messageExtendedMediaPreview#ad628cc8 flags:# w:flags.0?int h:flags.0?int thumb:flags.1?PhotoSize video_duration:flags.2?int = MessageExtendedMedia; -messageExtendedMedia#ee479c64 media:MessageMedia = MessageExtendedMedia; - -stickerKeyword#fcfeb29c document_id:long keyword:Vector = StickerKeyword; - -username#b4073647 flags:# editable:flags.0?true active:flags.1?true username:string = Username; - -forumTopicDeleted#23f109b id:int = ForumTopic; -forumTopic#fcdad815 flags:# my:flags.1?true closed:flags.2?true pinned:flags.3?true short:flags.5?true hidden:flags.6?true title_missing:flags.7?true id:int date:int peer:Peer title:string icon_color:int icon_emoji_id:flags.0?long top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int unread_reactions_count:int unread_poll_votes_count:int from_id:Peer notify_settings:PeerNotifySettings draft:flags.4?DraftMessage = ForumTopic; - -messages.forumTopics#367617d3 flags:# order_by_create_date:flags.0?true count:int topics:Vector messages:Vector chats:Vector users:Vector pts:int = messages.ForumTopics; - -defaultHistoryTTL#43b46b20 period:int = DefaultHistoryTTL; - -exportedContactToken#41bf109b url:string expires:int = ExportedContactToken; - -requestPeerTypeUser#5f3b8a00 flags:# bot:flags.0?Bool premium:flags.1?Bool = RequestPeerType; -requestPeerTypeChat#c9f06e1b flags:# creator:flags.0?true bot_participant:flags.5?true has_username:flags.3?Bool forum:flags.4?Bool user_admin_rights:flags.1?ChatAdminRights bot_admin_rights:flags.2?ChatAdminRights = RequestPeerType; -requestPeerTypeBroadcast#339bef6c flags:# creator:flags.0?true has_username:flags.3?Bool user_admin_rights:flags.1?ChatAdminRights bot_admin_rights:flags.2?ChatAdminRights = RequestPeerType; -requestPeerTypeCreateBot#3e81e078 flags:# bot_managed:flags.0?true suggested_name:flags.1?string suggested_username:flags.2?string = RequestPeerType; - -emojiListNotModified#481eadfa = EmojiList; -emojiList#7a1e11d1 hash:long document_id:Vector = EmojiList; - -emojiGroup#7a9abda9 title:string icon_emoji_id:long emoticons:Vector = EmojiGroup; -emojiGroupGreeting#80d26cc7 title:string icon_emoji_id:long emoticons:Vector = EmojiGroup; -emojiGroupPremium#93bcf34 title:string icon_emoji_id:long = EmojiGroup; - -messages.emojiGroupsNotModified#6fb4ad87 = messages.EmojiGroups; -messages.emojiGroups#881fb94b hash:int groups:Vector = messages.EmojiGroups; - -textWithEntities#751f3146 text:string entities:Vector = TextWithEntities; - -messages.translateResult#33db32f8 result:Vector = messages.TranslatedText; - -autoSaveSettings#c84834ce flags:# photos:flags.0?true videos:flags.1?true video_max_size:flags.2?long = AutoSaveSettings; - -autoSaveException#81602d47 peer:Peer settings:AutoSaveSettings = AutoSaveException; - -account.autoSaveSettings#4c3e069d users_settings:AutoSaveSettings chats_settings:AutoSaveSettings broadcasts_settings:AutoSaveSettings exceptions:Vector chats:Vector users:Vector = account.AutoSaveSettings; - -help.appConfigNotModified#7cde641d = help.AppConfig; -help.appConfig#dd18782e hash:int config:JSONValue = help.AppConfig; - -inputBotAppID#a920bd7a id:long access_hash:long = InputBotApp; -inputBotAppShortName#908c0407 bot_id:InputUser short_name:string = InputBotApp; - -botAppNotModified#5da674b7 = BotApp; -botApp#95fcd1d6 flags:# id:long access_hash:long short_name:string title:string description:string photo:Photo document:flags.0?Document hash:long = BotApp; - -messages.botApp#eb50adf5 flags:# inactive:flags.0?true request_write_access:flags.1?true has_settings:flags.2?true app:BotApp = messages.BotApp; - -inlineBotWebView#b57295d5 text:string url:string = InlineBotWebView; - -readParticipantDate#4a4ff172 user_id:long date:int = ReadParticipantDate; - -inputChatlistDialogFilter#f3e0da33 filter_id:int = InputChatlist; - -exportedChatlistInvite#c5181ac flags:# title:string url:string peers:Vector = ExportedChatlistInvite; - -chatlists.exportedChatlistInvite#10e6e3a6 filter:DialogFilter invite:ExportedChatlistInvite = chatlists.ExportedChatlistInvite; - -chatlists.exportedInvites#10ab6dc7 invites:Vector chats:Vector users:Vector = chatlists.ExportedInvites; - -chatlists.chatlistInviteAlready#fa87f659 filter_id:int missing_peers:Vector already_peers:Vector chats:Vector users:Vector = chatlists.ChatlistInvite; -chatlists.chatlistInvite#f10ece2f flags:# title_noanimate:flags.1?true title:TextWithEntities emoticon:flags.0?string peers:Vector chats:Vector users:Vector = chatlists.ChatlistInvite; - -chatlists.chatlistUpdates#93bd878d missing_peers:Vector chats:Vector users:Vector = chatlists.ChatlistUpdates; - -bots.botInfo#e8a775b0 name:string about:string description:string = bots.BotInfo; - -messagePeerVote#b6cc2d5c peer:Peer option:bytes date:int = MessagePeerVote; -messagePeerVoteInputOption#74cda504 peer:Peer date:int = MessagePeerVote; -messagePeerVoteMultiple#4628f6e6 peer:Peer options:Vector date:int = MessagePeerVote; - -storyViews#8d595cd6 flags:# has_viewers:flags.1?true views_count:int forwards_count:flags.2?int reactions:flags.3?Vector reactions_count:flags.4?int recent_viewers:flags.0?Vector = StoryViews; - -storyItemDeleted#51e6ee4f id:int = StoryItem; -storyItemSkipped#ffadc913 flags:# close_friends:flags.8?true live:flags.9?true id:int date:int expire_date:int = StoryItem; -storyItem#16a4b93c flags:# pinned:flags.5?true public:flags.7?true close_friends:flags.8?true min:flags.9?true noforwards:flags.10?true edited:flags.11?true contacts:flags.12?true selected_contacts:flags.13?true out:flags.16?true id:int date:int from_id:flags.18?Peer fwd_from:flags.17?StoryFwdHeader expire_date:int caption:flags.0?string entities:flags.1?Vector media:MessageMedia media_areas:flags.14?Vector privacy:flags.2?Vector views:flags.3?StoryViews sent_reaction:flags.15?Reaction albums:flags.19?Vector music:flags.20?Document = StoryItem; - -stories.allStoriesNotModified#1158fe3e flags:# state:string stealth_mode:StoriesStealthMode = stories.AllStories; -stories.allStories#6efc5e81 flags:# has_more:flags.0?true count:int state:string peer_stories:Vector chats:Vector users:Vector stealth_mode:StoriesStealthMode = stories.AllStories; - -stories.stories#63c3dd0a flags:# count:int stories:Vector pinned_to_top:flags.0?Vector chats:Vector users:Vector = stories.Stories; - -storyView#b0bdeac5 flags:# blocked:flags.0?true blocked_my_stories_from:flags.1?true user_id:long date:int reaction:flags.2?Reaction = StoryView; -storyViewPublicForward#9083670b flags:# blocked:flags.0?true blocked_my_stories_from:flags.1?true message:Message = StoryView; -storyViewPublicRepost#bd74cf49 flags:# blocked:flags.0?true blocked_my_stories_from:flags.1?true peer_id:Peer story:StoryItem = StoryView; - -stories.storyViewsList#59d78fc5 flags:# count:int views_count:int forwards_count:int reactions_count:int views:Vector chats:Vector users:Vector next_offset:flags.0?string = stories.StoryViewsList; - -stories.storyViews#de9eed1d views:Vector users:Vector = stories.StoryViews; - -inputReplyToMessage#3bd4b7c2 flags:# reply_to_msg_id:int top_msg_id:flags.0?int reply_to_peer_id:flags.1?InputPeer quote_text:flags.2?string quote_entities:flags.3?Vector quote_offset:flags.4?int monoforum_peer_id:flags.5?InputPeer todo_item_id:flags.6?int poll_option:flags.7?bytes = InputReplyTo; -inputReplyToStory#5881323a peer:InputPeer story_id:int = InputReplyTo; -inputReplyToMonoForum#69d66c45 monoforum_peer_id:InputPeer = InputReplyTo; - -exportedStoryLink#3fc9053b link:string = ExportedStoryLink; - -storiesStealthMode#712e27fd flags:# active_until_date:flags.0?int cooldown_until_date:flags.1?int = StoriesStealthMode; - -mediaAreaCoordinates#cfc9e002 flags:# x:double y:double w:double h:double rotation:double radius:flags.0?double = MediaAreaCoordinates; - -mediaAreaVenue#be82db9c coordinates:MediaAreaCoordinates geo:GeoPoint title:string address:string provider:string venue_id:string venue_type:string = MediaArea; -inputMediaAreaVenue#b282217f coordinates:MediaAreaCoordinates query_id:long result_id:string = MediaArea; -mediaAreaGeoPoint#cad5452d flags:# coordinates:MediaAreaCoordinates geo:GeoPoint address:flags.0?GeoPointAddress = MediaArea; -mediaAreaSuggestedReaction#14455871 flags:# dark:flags.0?true flipped:flags.1?true coordinates:MediaAreaCoordinates reaction:Reaction = MediaArea; -mediaAreaChannelPost#770416af coordinates:MediaAreaCoordinates channel_id:long msg_id:int = MediaArea; -inputMediaAreaChannelPost#2271f2bf coordinates:MediaAreaCoordinates channel:InputChannel msg_id:int = MediaArea; -mediaAreaUrl#37381085 coordinates:MediaAreaCoordinates url:string = MediaArea; -mediaAreaWeather#49a6549c coordinates:MediaAreaCoordinates emoji:string temperature_c:double color:int = MediaArea; -mediaAreaStarGift#5787686d coordinates:MediaAreaCoordinates slug:string = MediaArea; - -peerStories#9a35e999 flags:# peer:Peer max_read_id:flags.0?int stories:Vector = PeerStories; - -stories.peerStories#cae68768 stories:PeerStories chats:Vector users:Vector = stories.PeerStories; - -messages.webPage#fd5e12bd webpage:WebPage chats:Vector users:Vector = messages.WebPage; - -premiumGiftCodeOption#257e962b flags:# users:int months:int store_product:flags.0?string store_quantity:flags.1?int currency:string amount:long = PremiumGiftCodeOption; - -payments.checkedGiftCode#eb983f8f flags:# via_giveaway:flags.2?true from_id:flags.4?Peer giveaway_msg_id:flags.3?int to_id:flags.0?long date:int days:int used_date:flags.1?int chats:Vector users:Vector = payments.CheckedGiftCode; - -payments.giveawayInfo#4367daa0 flags:# participating:flags.0?true preparing_results:flags.3?true start_date:int joined_too_early_date:flags.1?int admin_disallowed_chat_id:flags.2?long disallowed_country:flags.4?string = payments.GiveawayInfo; -payments.giveawayInfoResults#e175e66f flags:# winner:flags.0?true refunded:flags.1?true start_date:int gift_code_slug:flags.3?string stars_prize:flags.4?long finish_date:int winners_count:int activated_count:flags.2?int = payments.GiveawayInfo; - -prepaidGiveaway#b2539d54 id:long months:int quantity:int date:int = PrepaidGiveaway; -prepaidStarsGiveaway#9a9d77e0 id:long stars:long quantity:int boosts:int date:int = PrepaidGiveaway; - -boost#4b3e14d6 flags:# gift:flags.1?true giveaway:flags.2?true unclaimed:flags.3?true id:string user_id:flags.0?long giveaway_msg_id:flags.2?int date:int expires:int used_gift_slug:flags.4?string multiplier:flags.5?int stars:flags.6?long = Boost; - -premium.boostsList#86f8613c flags:# count:int boosts:Vector next_offset:flags.0?string users:Vector = premium.BoostsList; - -myBoost#c448415c flags:# slot:int peer:flags.0?Peer date:int expires:int cooldown_until_date:flags.1?int = MyBoost; - -premium.myBoosts#9ae228e2 my_boosts:Vector chats:Vector users:Vector = premium.MyBoosts; - -premium.boostsStatus#4959427a flags:# my_boost:flags.2?true level:int current_level_boosts:int boosts:int gift_boosts:flags.4?int next_level_boosts:flags.0?int premium_audience:flags.1?StatsPercentValue boost_url:string prepaid_giveaways:flags.3?Vector my_boost_slots:flags.2?Vector = premium.BoostsStatus; - -storyFwdHeader#b826e150 flags:# modified:flags.3?true from:flags.0?Peer from_name:flags.1?string story_id:flags.2?int = StoryFwdHeader; - -postInteractionCountersMessage#e7058e7f msg_id:int views:int forwards:int reactions:int = PostInteractionCounters; -postInteractionCountersStory#8a480e27 story_id:int views:int forwards:int reactions:int = PostInteractionCounters; - -stats.storyStats#50cd067c views_graph:StatsGraph reactions_by_emotion_graph:StatsGraph = stats.StoryStats; - -publicForwardMessage#1f2bf4a message:Message = PublicForward; -publicForwardStory#edf3add0 peer:Peer story:StoryItem = PublicForward; - -stats.publicForwards#93037e20 flags:# count:int forwards:Vector next_offset:flags.0?string chats:Vector users:Vector = stats.PublicForwards; - -peerColor#b54b5acf flags:# color:flags.0?int background_emoji_id:flags.1?long = PeerColor; -peerColorCollectible#b9c0639a flags:# collectible_id:long gift_emoji_id:long background_emoji_id:long accent_color:int colors:Vector dark_accent_color:flags.0?int dark_colors:flags.1?Vector = PeerColor; -inputPeerColorCollectible#b8ea86a9 collectible_id:long = PeerColor; - -help.peerColorSet#26219a58 colors:Vector = help.PeerColorSet; -help.peerColorProfileSet#767d61eb palette_colors:Vector bg_colors:Vector story_colors:Vector = help.PeerColorSet; - -help.peerColorOption#adec6ebe flags:# hidden:flags.0?true color_id:int colors:flags.1?help.PeerColorSet dark_colors:flags.2?help.PeerColorSet channel_min_level:flags.3?int group_min_level:flags.4?int = help.PeerColorOption; - -help.peerColorsNotModified#2ba1f5ce = help.PeerColors; -help.peerColors#f8ed08 hash:int colors:Vector = help.PeerColors; - -storyReaction#6090d6d5 peer_id:Peer date:int reaction:Reaction = StoryReaction; -storyReactionPublicForward#bbab2643 message:Message = StoryReaction; -storyReactionPublicRepost#cfcd0f13 peer_id:Peer story:StoryItem = StoryReaction; - -stories.storyReactionsList#aa5f789c flags:# count:int reactions:Vector chats:Vector users:Vector next_offset:flags.0?string = stories.StoryReactionsList; - -savedDialog#bd87cb6c flags:# pinned:flags.2?true peer:Peer top_message:int = SavedDialog; -monoForumDialog#64407ea7 flags:# unread_mark:flags.3?true nopaid_messages_exception:flags.4?true peer:Peer top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_reactions_count:int draft:flags.1?DraftMessage = SavedDialog; - -messages.savedDialogs#f83ae221 dialogs:Vector messages:Vector chats:Vector users:Vector = messages.SavedDialogs; -messages.savedDialogsSlice#44ba9dd9 count:int dialogs:Vector messages:Vector chats:Vector users:Vector = messages.SavedDialogs; -messages.savedDialogsNotModified#c01f6fe8 count:int = messages.SavedDialogs; - -savedReactionTag#cb6ff828 flags:# reaction:Reaction title:flags.0?string count:int = SavedReactionTag; - -messages.savedReactionTagsNotModified#889b59ef = messages.SavedReactionTags; -messages.savedReactionTags#3259950a tags:Vector hash:long = messages.SavedReactionTags; - -outboxReadDate#3bb842ac date:int = OutboxReadDate; - -smsjobs.eligibleToJoin#dc8b44cf terms_url:string monthly_sent_sms:int = smsjobs.EligibilityToJoin; - -smsjobs.status#2aee9191 flags:# allow_international:flags.0?true recent_sent:int recent_since:int recent_remains:int total_sent:int total_since:int last_gift_slug:flags.1?string terms_url:string = smsjobs.Status; - -smsJob#e6a1eeb8 job_id:string phone_number:string text:string = SmsJob; - -businessWeeklyOpen#120b1ab9 start_minute:int end_minute:int = BusinessWeeklyOpen; - -businessWorkHours#8c92b098 flags:# open_now:flags.0?true timezone_id:string weekly_open:Vector = BusinessWorkHours; - -businessLocation#ac5c1af7 flags:# geo_point:flags.0?GeoPoint address:string = BusinessLocation; - -inputBusinessRecipients#6f8b32aa flags:# existing_chats:flags.0?true new_chats:flags.1?true contacts:flags.2?true non_contacts:flags.3?true exclude_selected:flags.5?true users:flags.4?Vector = InputBusinessRecipients; - -businessRecipients#21108ff7 flags:# existing_chats:flags.0?true new_chats:flags.1?true contacts:flags.2?true non_contacts:flags.3?true exclude_selected:flags.5?true users:flags.4?Vector = BusinessRecipients; - -businessAwayMessageScheduleAlways#c9b9e2b9 = BusinessAwayMessageSchedule; -businessAwayMessageScheduleOutsideWorkHours#c3f2f501 = BusinessAwayMessageSchedule; -businessAwayMessageScheduleCustom#cc4d9ecc start_date:int end_date:int = BusinessAwayMessageSchedule; - -inputBusinessGreetingMessage#194cb3b shortcut_id:int recipients:InputBusinessRecipients no_activity_days:int = InputBusinessGreetingMessage; - -businessGreetingMessage#e519abab shortcut_id:int recipients:BusinessRecipients no_activity_days:int = BusinessGreetingMessage; - -inputBusinessAwayMessage#832175e0 flags:# offline_only:flags.0?true shortcut_id:int schedule:BusinessAwayMessageSchedule recipients:InputBusinessRecipients = InputBusinessAwayMessage; - -businessAwayMessage#ef156a5c flags:# offline_only:flags.0?true shortcut_id:int schedule:BusinessAwayMessageSchedule recipients:BusinessRecipients = BusinessAwayMessage; - -timezone#ff9289f5 id:string name:string utc_offset:int = Timezone; - -help.timezonesListNotModified#970708cc = help.TimezonesList; -help.timezonesList#7b74ed71 timezones:Vector hash:int = help.TimezonesList; - -quickReply#697102b shortcut_id:int shortcut:string top_message:int count:int = QuickReply; - -inputQuickReplyShortcut#24596d41 shortcut:string = InputQuickReplyShortcut; -inputQuickReplyShortcutId#1190cf1 shortcut_id:int = InputQuickReplyShortcut; - -messages.quickReplies#c68d6695 quick_replies:Vector messages:Vector chats:Vector users:Vector = messages.QuickReplies; -messages.quickRepliesNotModified#5f91eb5b = messages.QuickReplies; - -connectedBot#cd64636c flags:# bot_id:long recipients:BusinessBotRecipients rights:BusinessBotRights = ConnectedBot; - -account.connectedBots#17d7f87b connected_bots:Vector users:Vector = account.ConnectedBots; - -messages.dialogFilters#2ad93719 flags:# tags_enabled:flags.0?true filters:Vector = messages.DialogFilters; - -birthday#6c8e1e06 flags:# day:int month:int year:flags.0?int = Birthday; - -botBusinessConnection#8f34b2f5 flags:# disabled:flags.1?true connection_id:string user_id:long dc_id:int date:int rights:flags.2?BusinessBotRights = BotBusinessConnection; - -inputBusinessIntro#9c469cd flags:# title:string description:string sticker:flags.0?InputDocument = InputBusinessIntro; - -businessIntro#5a0a066d flags:# title:string description:string sticker:flags.0?Document = BusinessIntro; - -messages.myStickers#faff629d count:int sets:Vector = messages.MyStickers; - -inputCollectibleUsername#e39460a9 username:string = InputCollectible; -inputCollectiblePhone#a2e214a4 phone:string = InputCollectible; - -fragment.collectibleInfo#6ebdff91 purchase_date:int currency:string amount:long crypto_currency:string crypto_amount:long url:string = fragment.CollectibleInfo; - -inputBusinessBotRecipients#c4e5921e flags:# existing_chats:flags.0?true new_chats:flags.1?true contacts:flags.2?true non_contacts:flags.3?true exclude_selected:flags.5?true users:flags.4?Vector exclude_users:flags.6?Vector = InputBusinessBotRecipients; - -businessBotRecipients#b88cf373 flags:# existing_chats:flags.0?true new_chats:flags.1?true contacts:flags.2?true non_contacts:flags.3?true exclude_selected:flags.5?true users:flags.4?Vector exclude_users:flags.6?Vector = BusinessBotRecipients; - -contactBirthday#1d998733 contact_id:long birthday:Birthday = ContactBirthday; - -contacts.contactBirthdays#114ff30d contacts:Vector users:Vector = contacts.ContactBirthdays; - -missingInvitee#628c9224 flags:# premium_would_allow_invite:flags.0?true premium_required_for_pm:flags.1?true user_id:long = MissingInvitee; - -messages.invitedUsers#7f5defa6 updates:Updates missing_invitees:Vector = messages.InvitedUsers; - -inputBusinessChatLink#11679fa7 flags:# message:string entities:flags.0?Vector title:flags.1?string = InputBusinessChatLink; - -businessChatLink#b4ae666f flags:# link:string message:string entities:flags.0?Vector title:flags.1?string views:int = BusinessChatLink; - -account.businessChatLinks#ec43a2d1 links:Vector chats:Vector users:Vector = account.BusinessChatLinks; - -account.resolvedBusinessChatLinks#9a23af21 flags:# peer:Peer message:string entities:flags.0?Vector chats:Vector users:Vector = account.ResolvedBusinessChatLinks; - -requestedPeerUser#d62ff46a flags:# user_id:long first_name:flags.0?string last_name:flags.0?string username:flags.1?string photo:flags.2?Photo = RequestedPeer; -requestedPeerChat#7307544f flags:# chat_id:long title:flags.0?string photo:flags.2?Photo = RequestedPeer; -requestedPeerChannel#8ba403e4 flags:# channel_id:long title:flags.0?string username:flags.1?string photo:flags.2?Photo = RequestedPeer; - -sponsoredMessageReportOption#430d3150 text:string option:bytes = SponsoredMessageReportOption; - -channels.sponsoredMessageReportResultChooseOption#846f9e42 title:string options:Vector = channels.SponsoredMessageReportResult; -channels.sponsoredMessageReportResultAdsHidden#3e3bcf2f = channels.SponsoredMessageReportResult; -channels.sponsoredMessageReportResultReported#ad798849 = channels.SponsoredMessageReportResult; - -reactionNotificationsFromContacts#bac3a61a = ReactionNotificationsFrom; -reactionNotificationsFromAll#4b9e22a0 = ReactionNotificationsFrom; - -reactionsNotifySettings#71e4ea58 flags:# messages_notify_from:flags.0?ReactionNotificationsFrom stories_notify_from:flags.1?ReactionNotificationsFrom poll_votes_notify_from:flags.2?ReactionNotificationsFrom sound:NotificationSound show_previews:Bool = ReactionsNotifySettings; - -availableEffect#93c3e27e flags:# premium_required:flags.2?true id:long emoticon:string static_icon_id:flags.0?long effect_sticker_id:long effect_animation_id:flags.1?long = AvailableEffect; - -messages.availableEffectsNotModified#d1ed9a5b = messages.AvailableEffects; -messages.availableEffects#bddb616e hash:int effects:Vector documents:Vector = messages.AvailableEffects; - -factCheck#b89bfccf flags:# need_check:flags.0?true country:flags.1?string text:flags.1?TextWithEntities hash:long = FactCheck; - -starsTransactionPeerUnsupported#95f2bfe4 = StarsTransactionPeer; -starsTransactionPeerAppStore#b457b375 = StarsTransactionPeer; -starsTransactionPeerPlayMarket#7b560a0b = StarsTransactionPeer; -starsTransactionPeerPremiumBot#250dbaf8 = StarsTransactionPeer; -starsTransactionPeerFragment#e92fd902 = StarsTransactionPeer; -starsTransactionPeer#d80da15d peer:Peer = StarsTransactionPeer; -starsTransactionPeerAds#60682812 = StarsTransactionPeer; -starsTransactionPeerAPI#f9677aad = StarsTransactionPeer; - -starsTopupOption#bd915c0 flags:# extended:flags.1?true stars:long store_product:flags.0?string currency:string amount:long = StarsTopupOption; - -starsTransaction#13659eb0 flags:# refund:flags.3?true pending:flags.4?true failed:flags.6?true gift:flags.10?true reaction:flags.11?true stargift_upgrade:flags.18?true business_transfer:flags.21?true stargift_resale:flags.22?true posts_search:flags.24?true stargift_prepaid_upgrade:flags.25?true stargift_drop_original_details:flags.26?true phonegroup_message:flags.27?true stargift_auction_bid:flags.28?true offer:flags.29?true id:string amount:StarsAmount date:int peer:StarsTransactionPeer title:flags.0?string description:flags.1?string photo:flags.2?WebDocument transaction_date:flags.5?int transaction_url:flags.5?string bot_payload:flags.7?bytes msg_id:flags.8?int extended_media:flags.9?Vector subscription_period:flags.12?int giveaway_post_id:flags.13?int stargift:flags.14?StarGift floodskip_number:flags.15?int starref_commission_permille:flags.16?int starref_peer:flags.17?Peer starref_amount:flags.17?StarsAmount paid_messages:flags.19?int premium_gift_months:flags.20?int ads_proceeds_from_date:flags.23?int ads_proceeds_to_date:flags.23?int = StarsTransaction; - -payments.starsStatus#6c9ce8ed flags:# balance:StarsAmount subscriptions:flags.1?Vector subscriptions_next_offset:flags.2?string subscriptions_missing_balance:flags.4?long history:flags.3?Vector next_offset:flags.0?string chats:Vector users:Vector = payments.StarsStatus; - -foundStory#e87acbc0 peer:Peer story:StoryItem = FoundStory; - -stories.foundStories#e2de7737 flags:# count:int stories:Vector next_offset:flags.0?string chats:Vector users:Vector = stories.FoundStories; - -geoPointAddress#de4c5d93 flags:# country_iso2:string state:flags.0?string city:flags.1?string street:flags.2?string = GeoPointAddress; - -starsRevenueStatus#febe5491 flags:# withdrawal_enabled:flags.0?true current_balance:StarsAmount available_balance:StarsAmount overall_revenue:StarsAmount next_withdrawal_at:flags.1?int = StarsRevenueStatus; - -payments.starsRevenueStats#6c207376 flags:# top_hours_graph:flags.0?StatsGraph revenue_graph:StatsGraph status:StarsRevenueStatus usd_rate:double = payments.StarsRevenueStats; - -payments.starsRevenueWithdrawalUrl#1dab80b7 url:string = payments.StarsRevenueWithdrawalUrl; - -payments.starsRevenueAdsAccountUrl#394e7f21 url:string = payments.StarsRevenueAdsAccountUrl; - -inputStarsTransaction#206ae6d1 flags:# refund:flags.0?true id:string = InputStarsTransaction; - -starsGiftOption#5e0589f1 flags:# extended:flags.1?true stars:long store_product:flags.0?string currency:string amount:long = StarsGiftOption; - -bots.popularAppBots#1991b13b flags:# next_offset:flags.0?string users:Vector = bots.PopularAppBots; - -botPreviewMedia#23e91ba3 date:int media:MessageMedia = BotPreviewMedia; - -bots.previewInfo#ca71d64 media:Vector lang_codes:Vector = bots.PreviewInfo; - -starsSubscriptionPricing#5416d58 period:int amount:long = StarsSubscriptionPricing; - -starsSubscription#2e6eab1a flags:# canceled:flags.0?true can_refulfill:flags.1?true missing_balance:flags.2?true bot_canceled:flags.7?true id:string peer:Peer until_date:int pricing:StarsSubscriptionPricing chat_invite_hash:flags.3?string title:flags.4?string photo:flags.5?WebDocument invoice_slug:flags.6?string = StarsSubscription; - -messageReactor#4ba3a95a flags:# top:flags.0?true my:flags.1?true anonymous:flags.2?true peer_id:flags.3?Peer count:int = MessageReactor; - -starsGiveawayOption#94ce852a flags:# extended:flags.0?true default:flags.1?true stars:long yearly_boosts:int store_product:flags.2?string currency:string amount:long winners:Vector = StarsGiveawayOption; - -starsGiveawayWinnersOption#54236209 flags:# default:flags.0?true users:int per_user_stars:long = StarsGiveawayWinnersOption; - -starGift#313a9547 flags:# limited:flags.0?true sold_out:flags.1?true birthday:flags.2?true require_premium:flags.7?true limited_per_user:flags.8?true peer_color_available:flags.10?true auction:flags.11?true id:long sticker:Document stars:long availability_remains:flags.0?int availability_total:flags.0?int availability_resale:flags.4?long convert_stars:long first_sale_date:flags.1?int last_sale_date:flags.1?int upgrade_stars:flags.3?long resell_min_stars:flags.4?long title:flags.5?string released_by:flags.6?Peer per_user_total:flags.8?int per_user_remains:flags.8?int locked_until_date:flags.9?int auction_slug:flags.11?string gifts_per_round:flags.11?int auction_start_date:flags.11?int upgrade_variants:flags.12?int background:flags.13?StarGiftBackground = StarGift; -starGiftUnique#85f0a9cd flags:# require_premium:flags.6?true resale_ton_only:flags.7?true theme_available:flags.9?true burned:flags.14?true crafted:flags.15?true id:long gift_id:long title:string slug:string num:int owner_id:flags.0?Peer owner_name:flags.1?string owner_address:flags.2?string attributes:Vector availability_issued:int availability_total:int gift_address:flags.3?string resell_amount:flags.4?Vector released_by:flags.5?Peer value_amount:flags.8?long value_currency:flags.8?string value_usd_amount:flags.8?long theme_peer:flags.10?Peer peer_color:flags.11?PeerColor host_id:flags.12?Peer offer_min_stars:flags.13?int craft_chance_permille:flags.16?int = StarGift; - -payments.starGiftsNotModified#a388a368 = payments.StarGifts; -payments.starGifts#2ed82995 hash:int gifts:Vector chats:Vector users:Vector = payments.StarGifts; - -messageReportOption#7903e3d9 text:string option:bytes = MessageReportOption; - -reportResultChooseOption#f0e4e0b6 title:string options:Vector = ReportResult; -reportResultAddComment#6f09ac31 flags:# optional:flags.0?true option:bytes = ReportResult; -reportResultReported#8db33c4b = ReportResult; - -messages.botPreparedInlineMessage#8ecf0511 id:string expire_date:int = messages.BotPreparedInlineMessage; - -messages.preparedInlineMessage#ff57708d query_id:long result:BotInlineResult peer_types:Vector cache_time:int users:Vector = messages.PreparedInlineMessage; - -botAppSettings#c99b1950 flags:# placeholder_path:flags.0?bytes background_color:flags.1?int background_dark_color:flags.2?int header_color:flags.3?int header_dark_color:flags.4?int = BotAppSettings; - -starRefProgram#dd0c66f2 flags:# bot_id:long commission_permille:int duration_months:flags.0?int end_date:flags.1?int daily_revenue_per_user:flags.2?StarsAmount = StarRefProgram; - -connectedBotStarRef#19a13f71 flags:# revoked:flags.1?true url:string date:int bot_id:long commission_permille:int duration_months:flags.0?int participants:long revenue:long = ConnectedBotStarRef; - -payments.connectedStarRefBots#98d5ea1d count:int connected_bots:Vector users:Vector = payments.ConnectedStarRefBots; - -payments.suggestedStarRefBots#b4d5d859 flags:# count:int suggested_bots:Vector users:Vector next_offset:flags.0?string = payments.SuggestedStarRefBots; - -starsAmount#bbb6b4a3 amount:long nanos:int = StarsAmount; -starsTonAmount#74aee3e0 amount:long = StarsAmount; - -messages.foundStickersNotModified#6010c534 flags:# next_offset:flags.0?int = messages.FoundStickers; -messages.foundStickers#82c9e290 flags:# next_offset:flags.0?int hash:long stickers:Vector = messages.FoundStickers; - -botVerifierSettings#b0cd6617 flags:# can_modify_custom_description:flags.1?true icon:long company:string custom_description:flags.0?string = BotVerifierSettings; - -botVerification#f93cd45c bot_id:long icon:long description:string = BotVerification; - -starGiftAttributeModel#565251e2 flags:# crafted:flags.0?true name:string document:Document rarity:StarGiftAttributeRarity = StarGiftAttribute; -starGiftAttributePattern#4e7085ea name:string document:Document rarity:StarGiftAttributeRarity = StarGiftAttribute; -starGiftAttributeBackdrop#9f2504e4 name:string backdrop_id:int center_color:int edge_color:int pattern_color:int text_color:int rarity:StarGiftAttributeRarity = StarGiftAttribute; -starGiftAttributeOriginalDetails#e0bff26c flags:# sender_id:flags.0?Peer recipient_id:Peer date:int message:flags.1?TextWithEntities = StarGiftAttribute; - -payments.starGiftUpgradePreview#3de1dfed sample_attributes:Vector prices:Vector next_prices:Vector = payments.StarGiftUpgradePreview; - -users.users#62d706b8 users:Vector = users.Users; -users.usersSlice#315a4974 count:int users:Vector = users.Users; - -payments.uniqueStarGift#416c56e8 gift:StarGift chats:Vector users:Vector = payments.UniqueStarGift; - -messages.webPagePreview#8c9a88ac media:MessageMedia chats:Vector users:Vector = messages.WebPagePreview; - -savedStarGift#41df43fc flags:# name_hidden:flags.0?true unsaved:flags.5?true refunded:flags.9?true can_upgrade:flags.10?true pinned_to_top:flags.12?true upgrade_separate:flags.17?true from_id:flags.1?Peer date:int gift:StarGift message:flags.2?TextWithEntities msg_id:flags.3?int saved_id:flags.11?long convert_stars:flags.4?long upgrade_stars:flags.6?long can_export_at:flags.7?int transfer_stars:flags.8?long can_transfer_at:flags.13?int can_resell_at:flags.14?int collection_id:flags.15?Vector prepaid_upgrade_hash:flags.16?string drop_original_details_stars:flags.18?long gift_num:flags.19?int can_craft_at:flags.20?int = SavedStarGift; - -payments.savedStarGifts#95f389b1 flags:# count:int chat_notifications_enabled:flags.1?Bool gifts:Vector next_offset:flags.0?string chats:Vector users:Vector = payments.SavedStarGifts; - -inputSavedStarGiftUser#69279795 msg_id:int = InputSavedStarGift; -inputSavedStarGiftChat#f101aa7f peer:InputPeer saved_id:long = InputSavedStarGift; -inputSavedStarGiftSlug#2085c238 slug:string = InputSavedStarGift; - -payments.starGiftWithdrawalUrl#84aa3a9c url:string = payments.StarGiftWithdrawalUrl; - -paidReactionPrivacyDefault#206ad49e = PaidReactionPrivacy; -paidReactionPrivacyAnonymous#1f0c1ad9 = PaidReactionPrivacy; -paidReactionPrivacyPeer#dc6cfcf0 peer:InputPeer = PaidReactionPrivacy; - -account.paidMessagesRevenue#1e109708 stars_amount:long = account.PaidMessagesRevenue; - -requirementToContactEmpty#50a9839 = RequirementToContact; -requirementToContactPremium#e581e4e9 = RequirementToContact; -requirementToContactPaidMessages#b4f67e93 stars_amount:long = RequirementToContact; - -businessBotRights#a0624cf7 flags:# reply:flags.0?true read_messages:flags.1?true delete_sent_messages:flags.2?true delete_received_messages:flags.3?true edit_name:flags.4?true edit_bio:flags.5?true edit_profile_photo:flags.6?true edit_username:flags.7?true view_gifts:flags.8?true sell_gifts:flags.9?true change_gift_settings:flags.10?true transfer_and_upgrade_gifts:flags.11?true transfer_stars:flags.12?true manage_stories:flags.13?true = BusinessBotRights; - -disallowedGiftsSettings#71f276c4 flags:# disallow_unlimited_stargifts:flags.0?true disallow_limited_stargifts:flags.1?true disallow_unique_stargifts:flags.2?true disallow_premium_gifts:flags.3?true disallow_stargifts_from_channels:flags.4?true = DisallowedGiftsSettings; - -sponsoredPeer#c69708d3 flags:# random_id:bytes peer:Peer sponsor_info:flags.0?string additional_info:flags.1?string = SponsoredPeer; - -contacts.sponsoredPeersEmpty#ea32b4b1 = contacts.SponsoredPeers; -contacts.sponsoredPeers#eb032884 peers:Vector chats:Vector users:Vector = contacts.SponsoredPeers; - -starGiftAttributeIdModel#48aaae3c document_id:long = StarGiftAttributeId; -starGiftAttributeIdPattern#4a162433 document_id:long = StarGiftAttributeId; -starGiftAttributeIdBackdrop#1f01c757 backdrop_id:int = StarGiftAttributeId; - -starGiftAttributeCounter#2eb1b658 attribute:StarGiftAttributeId count:int = StarGiftAttributeCounter; - -payments.resaleStarGifts#947a12df flags:# count:int gifts:Vector next_offset:flags.0?string attributes:flags.1?Vector attributes_hash:flags.1?long chats:Vector counters:flags.2?Vector users:Vector = payments.ResaleStarGifts; - -stories.canSendStoryCount#c387c04e count_remains:int = stories.CanSendStoryCount; - -pendingSuggestion#e7e82e12 suggestion:string title:TextWithEntities description:TextWithEntities url:string = PendingSuggestion; - -todoItem#cba9a52f id:int title:TextWithEntities = TodoItem; - -todoList#49b92a26 flags:# others_can_append:flags.0?true others_can_complete:flags.1?true title:TextWithEntities list:Vector = TodoList; - -todoCompletion#221bb5e4 id:int completed_by:Peer date:int = TodoCompletion; - -suggestedPost#e8e37e5 flags:# accepted:flags.1?true rejected:flags.2?true price:flags.3?StarsAmount schedule_date:flags.0?int = SuggestedPost; - -starsRating#1b0e4f07 flags:# level:int current_level_stars:long stars:long next_level_stars:flags.0?long = StarsRating; - -starGiftCollection#9d6b13b0 flags:# collection_id:int title:string icon:flags.0?Document gifts_count:int hash:long = StarGiftCollection; - -payments.starGiftCollectionsNotModified#a0ba4f17 = payments.StarGiftCollections; -payments.starGiftCollections#8a2932f3 collections:Vector = payments.StarGiftCollections; - -storyAlbum#9325705a flags:# album_id:int title:string icon_photo:flags.0?Photo icon_video:flags.1?Document = StoryAlbum; - -stories.albumsNotModified#564edaeb = stories.Albums; -stories.albums#c3987a3a hash:long albums:Vector = stories.Albums; - -searchPostsFlood#3e0b5b6a flags:# query_is_free:flags.0?true total_daily:int remains:int wait_till:flags.1?int stars_amount:long = SearchPostsFlood; - -payments.uniqueStarGiftValueInfo#512fe446 flags:# last_sale_on_fragment:flags.1?true value_is_average:flags.6?true currency:string value:long initial_sale_date:int initial_sale_stars:long initial_sale_price:long last_sale_date:flags.0?int last_sale_price:flags.0?long floor_price:flags.2?long average_price:flags.3?long listed_count:flags.4?int fragment_listed_count:flags.5?int fragment_listed_url:flags.5?string = payments.UniqueStarGiftValueInfo; - -profileTabPosts#b98cd696 = ProfileTab; -profileTabGifts#4d4bd46a = ProfileTab; -profileTabMedia#72c64955 = ProfileTab; -profileTabFiles#ab339c00 = ProfileTab; -profileTabMusic#9f27d26e = ProfileTab; -profileTabVoice#e477092e = ProfileTab; -profileTabLinks#d3656499 = ProfileTab; -profileTabGifs#a2c0f695 = ProfileTab; - -users.savedMusicNotModified#e3878aa4 count:int = users.SavedMusic; -users.savedMusic#34a2f297 count:int documents:Vector = users.SavedMusic; - -account.savedMusicIdsNotModified#4fc81d6e = account.SavedMusicIds; -account.savedMusicIds#998d6636 ids:Vector = account.SavedMusicIds; - -payments.checkCanSendGiftResultOk#374fa7ad = payments.CheckCanSendGiftResult; -payments.checkCanSendGiftResultFail#d5e58274 reason:TextWithEntities = payments.CheckCanSendGiftResult; - -inputChatThemeEmpty#83268483 = InputChatTheme; -inputChatTheme#c93de95c emoticon:string = InputChatTheme; -inputChatThemeUniqueGift#87e5dfe4 slug:string = InputChatTheme; - -starGiftUpgradePrice#99ea331d date:int upgrade_stars:long = StarGiftUpgradePrice; - -groupCallMessage#1a8afc7e flags:# from_admin:flags.1?true id:int from_id:Peer date:int message:TextWithEntities paid_message_stars:flags.0?long = GroupCallMessage; - -groupCallDonor#ee430c85 flags:# top:flags.0?true my:flags.1?true peer_id:flags.3?Peer stars:long = GroupCallDonor; - -phone.groupCallStars#9d1dbd26 total_stars:long top_donors:Vector chats:Vector users:Vector = phone.GroupCallStars; - -recentStory#711d692d flags:# live:flags.0?true max_id:flags.1?int = RecentStory; - -auctionBidLevel#310240cc pos:int amount:long date:int = AuctionBidLevel; - -starGiftAuctionStateNotModified#fe333952 = StarGiftAuctionState; -starGiftAuctionState#771a4e66 version:int start_date:int end_date:int min_bid_amount:long bid_levels:Vector top_bidders:Vector next_round_at:int last_gift_num:int gifts_left:int current_round:int total_rounds:int rounds:Vector = StarGiftAuctionState; -starGiftAuctionStateFinished#972dabbf flags:# start_date:int end_date:int average_price:long listed_count:flags.0?int fragment_listed_count:flags.1?int fragment_listed_url:flags.1?string = StarGiftAuctionState; - -starGiftAuctionUserState#2eeed1c4 flags:# returned:flags.1?true bid_amount:flags.0?long bid_date:flags.0?int min_bid_amount:flags.0?long bid_peer:flags.0?Peer acquired_count:int = StarGiftAuctionUserState; - -payments.starGiftAuctionState#6b39f4ec gift:StarGift state:StarGiftAuctionState user_state:StarGiftAuctionUserState timeout:int users:Vector chats:Vector = payments.StarGiftAuctionState; - -starGiftAuctionAcquiredGift#42b00348 flags:# name_hidden:flags.0?true peer:Peer date:int bid_amount:long round:int pos:int message:flags.1?TextWithEntities gift_num:flags.2?int = StarGiftAuctionAcquiredGift; - -payments.starGiftAuctionAcquiredGifts#7d5bd1f0 gifts:Vector users:Vector chats:Vector = payments.StarGiftAuctionAcquiredGifts; - -starGiftActiveAuctionState#d31bc45d gift:StarGift state:StarGiftAuctionState user_state:StarGiftAuctionUserState = StarGiftActiveAuctionState; - -payments.starGiftActiveAuctionsNotModified#db33dad0 = payments.StarGiftActiveAuctions; -payments.starGiftActiveAuctions#aef6abbc auctions:Vector users:Vector chats:Vector = payments.StarGiftActiveAuctions; - -inputStarGiftAuction#2e16c98 gift_id:long = InputStarGiftAuction; -inputStarGiftAuctionSlug#7ab58308 slug:string = InputStarGiftAuction; - -passkey#98613ebf flags:# id:string name:string date:int software_emoji_id:flags.0?long last_usage_date:flags.1?int = Passkey; - -account.passkeys#f8e0aa1c passkeys:Vector = account.Passkeys; - -account.passkeyRegistrationOptions#e16b5ce1 options:DataJSON = account.PasskeyRegistrationOptions; - -auth.passkeyLoginOptions#e2037789 options:DataJSON = auth.PasskeyLoginOptions; - -inputPasskeyResponseRegister#3e63935c client_data:DataJSON attestation_data:bytes = InputPasskeyResponse; -inputPasskeyResponseLogin#c31fc14a client_data:DataJSON authenticator_data:bytes signature:bytes user_handle:string = InputPasskeyResponse; - -inputPasskeyCredentialPublicKey#3c27b78f id:string raw_id:string response:InputPasskeyResponse = InputPasskeyCredential; -inputPasskeyCredentialFirebasePNV#5b1ccb28 pnv_token:string = InputPasskeyCredential; - -starGiftBackground#aff56398 center_color:int edge_color:int text_color:int = StarGiftBackground; - -starGiftAuctionRound#3aae0528 num:int duration:int = StarGiftAuctionRound; -starGiftAuctionRoundExtendable#aa021e5 num:int duration:int extend_top:int extend_window:int = StarGiftAuctionRound; - -payments.starGiftUpgradeAttributes#46c6e36f attributes:Vector = payments.StarGiftUpgradeAttributes; - -messages.emojiGameOutcome#da2ad647 seed:bytes stake_ton_amount:long ton_amount:long = messages.EmojiGameOutcome; - -messages.emojiGameUnavailable#59e65335 = messages.EmojiGameInfo; -messages.emojiGameDiceInfo#44e56023 flags:# game_hash:string prev_stake:long current_streak:int params:Vector plays_left:flags.0?int = messages.EmojiGameInfo; - -starGiftAttributeRarity#36437737 permille:int = StarGiftAttributeRarity; -starGiftAttributeRarityUncommon#dbce6389 = StarGiftAttributeRarity; -starGiftAttributeRarityRare#f08d516b = StarGiftAttributeRarity; -starGiftAttributeRarityEpic#78fbf3a8 = StarGiftAttributeRarity; -starGiftAttributeRarityLegendary#cef7e7a8 = StarGiftAttributeRarity; - -keyboardButtonStyle#4fdd3430 flags:# bg_primary:flags.0?true bg_danger:flags.1?true bg_success:flags.2?true icon:flags.3?long = KeyboardButtonStyle; - -inputMessageReadMetric#402b4495 msg_id:int view_id:long time_in_view_ms:int active_time_in_view_ms:int height_to_viewport_ratio_permille:int seen_range_ratio_permille:int = InputMessageReadMetric; - -bots.exportedBotToken#3c60b621 token:string = bots.ExportedBotToken; - -bots.requestedButton#f13bbcd7 webapp_req_id:string = bots.RequestedButton; - -messages.composedMessageWithAI#90d7adfa flags:# result_text:TextWithEntities diff_text:flags.0?TextWithEntities = messages.ComposedMessageWithAI; - -stats.pollStats#2999beed votes_graph:StatsGraph = stats.PollStats; - -inputAiComposeToneDefault#1fe9a9bf tone:string = InputAiComposeTone; -inputAiComposeToneID#773c080 id:long access_hash:long = InputAiComposeTone; -inputAiComposeToneSlug#1fa01357 slug:string = InputAiComposeTone; - -aiComposeTone#cff63ea9 flags:# creator:flags.0?true id:long access_hash:long slug:string title:string emoji_id:flags.1?long prompt:flags.4?string installs_count:flags.2?int author_id:flags.3?long example_english:flags.5?AiComposeToneExample = AiComposeTone; -aiComposeToneDefault#9bad6414 tone:string emoji_id:long title:string = AiComposeTone; - -aicompose.tonesNotModified#c1f46103 = aicompose.Tones; -aicompose.tones#6c9d0efe hash:long tones:Vector users:Vector = aicompose.Tones; - -aiComposeToneExample#f1d628ec from:TextWithEntities to:TextWithEntities = AiComposeToneExample; - -bots.accessSettings#dd1fbf93 flags:# restricted:flags.0?true add_users:flags.1?Vector = bots.AccessSettings; - ----functions--- - -invokeAfterMsg#cb9f372d {X:Type} msg_id:long query:!X = X; -invokeAfterMsgs#3dc4b4f0 {X:Type} msg_ids:Vector query:!X = X; -initConnection#c1cd5ea9 {X:Type} flags:# api_id:int device_model:string system_version:string app_version:string system_lang_code:string lang_pack:string lang_code:string proxy:flags.0?InputClientProxy params:flags.1?JSONValue query:!X = X; -invokeWithLayer#da9b0d0d {X:Type} layer:int query:!X = X; -invokeWithoutUpdates#bf9459b7 {X:Type} query:!X = X; -invokeWithMessagesRange#365275f2 {X:Type} range:MessageRange query:!X = X; -invokeWithTakeout#aca9fd2e {X:Type} takeout_id:long query:!X = X; -invokeWithBusinessConnection#dd289f8e {X:Type} connection_id:string query:!X = X; -invokeWithGooglePlayIntegrity#1df92984 {X:Type} nonce:string token:string query:!X = X; -invokeWithApnsSecret#0dae54f8 {X:Type} nonce:string secret:string query:!X = X; -invokeWithReCaptcha#adbb0f94 {X:Type} token:string query:!X = X; - -auth.sendCode#a677244f phone_number:string api_id:int api_hash:string settings:CodeSettings = auth.SentCode; -auth.signUp#aac7b717 flags:# no_joined_notifications:flags.0?true phone_number:string phone_code_hash:string first_name:string last_name:string = auth.Authorization; -auth.signIn#8d52a951 flags:# phone_number:string phone_code_hash:string phone_code:flags.0?string email_verification:flags.1?EmailVerification = auth.Authorization; -auth.logOut#3e72ba19 = auth.LoggedOut; -auth.resetAuthorizations#9fab0d1a = Bool; -auth.exportAuthorization#e5bfffcd dc_id:int = auth.ExportedAuthorization; -auth.importAuthorization#a57a7dad id:long bytes:bytes = auth.Authorization; -auth.bindTempAuthKey#cdd42a05 perm_auth_key_id:long nonce:long expires_at:int encrypted_message:bytes = Bool; -auth.importBotAuthorization#67a3ff2c flags:int api_id:int api_hash:string bot_auth_token:string = auth.Authorization; -auth.checkPassword#d18b4d16 password:InputCheckPasswordSRP = auth.Authorization; -auth.requestPasswordRecovery#d897bc66 = auth.PasswordRecovery; -auth.recoverPassword#37096c70 flags:# code:string new_settings:flags.0?account.PasswordInputSettings = auth.Authorization; -auth.resendCode#cae47523 flags:# phone_number:string phone_code_hash:string reason:flags.0?string = auth.SentCode; -auth.cancelCode#1f040578 phone_number:string phone_code_hash:string = Bool; -auth.dropTempAuthKeys#8e48a188 except_auth_keys:Vector = Bool; -auth.exportLoginToken#b7e085fe api_id:int api_hash:string except_ids:Vector = auth.LoginToken; -auth.importLoginToken#95ac5ce4 token:bytes = auth.LoginToken; -auth.acceptLoginToken#e894ad4d token:bytes = Authorization; -auth.checkRecoveryPassword#d36bf79 code:string = Bool; -auth.importWebTokenAuthorization#2db873a9 api_id:int api_hash:string web_auth_token:string = auth.Authorization; -auth.requestFirebaseSms#8e39261e flags:# phone_number:string phone_code_hash:string safety_net_token:flags.0?string play_integrity_token:flags.2?string ios_push_secret:flags.1?string = Bool; -auth.resetLoginEmail#7e960193 phone_number:string phone_code_hash:string = auth.SentCode; -auth.reportMissingCode#cb9deff6 phone_number:string phone_code_hash:string mnc:string = Bool; -auth.checkPaidAuth#56e59f9c phone_number:string phone_code_hash:string form_id:long = auth.SentCode; -auth.initPasskeyLogin#518ad0b7 api_id:int api_hash:string = auth.PasskeyLoginOptions; -auth.finishPasskeyLogin#9857ad07 flags:# credential:InputPasskeyCredential from_dc_id:flags.0?int from_auth_key_id:flags.0?long = auth.Authorization; - -account.registerDevice#ec86017a flags:# no_muted:flags.0?true token_type:int token:string app_sandbox:Bool secret:bytes other_uids:Vector = Bool; -account.unregisterDevice#6a0d3206 token_type:int token:string other_uids:Vector = Bool; -account.updateNotifySettings#84be5b93 peer:InputNotifyPeer settings:InputPeerNotifySettings = Bool; -account.getNotifySettings#12b3ad31 peer:InputNotifyPeer = PeerNotifySettings; -account.resetNotifySettings#db7e1747 = Bool; -account.updateProfile#78515775 flags:# first_name:flags.0?string last_name:flags.1?string about:flags.2?string = User; -account.updateStatus#6628562c offline:Bool = Bool; -account.getWallPapers#7967d36 hash:long = account.WallPapers; -account.reportPeer#c5ba3d86 peer:InputPeer reason:ReportReason message:string = Bool; -account.checkUsername#2714d86c username:string = Bool; -account.updateUsername#3e0bdd7c username:string = User; -account.getPrivacy#dadbc950 key:InputPrivacyKey = account.PrivacyRules; -account.setPrivacy#c9f81ce8 key:InputPrivacyKey rules:Vector = account.PrivacyRules; -account.deleteAccount#a2c0cf74 flags:# reason:string password:flags.0?InputCheckPasswordSRP = Bool; -account.getAccountTTL#8fc711d = AccountDaysTTL; -account.setAccountTTL#2442485e ttl:AccountDaysTTL = Bool; -account.sendChangePhoneCode#82574ae5 phone_number:string settings:CodeSettings = auth.SentCode; -account.changePhone#70c32edb phone_number:string phone_code_hash:string phone_code:string = User; -account.updateDeviceLocked#38df3532 period:int = Bool; -account.getAuthorizations#e320c158 = account.Authorizations; -account.resetAuthorization#df77f3bc hash:long = Bool; -account.getPassword#548a30f5 = account.Password; -account.getPasswordSettings#9cd4eaf9 password:InputCheckPasswordSRP = account.PasswordSettings; -account.updatePasswordSettings#a59b102f password:InputCheckPasswordSRP new_settings:account.PasswordInputSettings = Bool; -account.sendConfirmPhoneCode#1b3faa88 hash:string settings:CodeSettings = auth.SentCode; -account.confirmPhone#5f2178c3 phone_code_hash:string phone_code:string = Bool; -account.getTmpPassword#449e0b51 password:InputCheckPasswordSRP period:int = account.TmpPassword; -account.getWebAuthorizations#182e6d6f = account.WebAuthorizations; -account.resetWebAuthorization#2d01b9ef hash:long = Bool; -account.resetWebAuthorizations#682d2594 = Bool; -account.getAllSecureValues#b288bc7d = Vector; -account.getSecureValue#73665bc2 types:Vector = Vector; -account.saveSecureValue#899fe31d value:InputSecureValue secure_secret_id:long = SecureValue; -account.deleteSecureValue#b880bc4b types:Vector = Bool; -account.getAuthorizationForm#a929597a bot_id:long scope:string public_key:string = account.AuthorizationForm; -account.acceptAuthorization#f3ed4c73 bot_id:long scope:string public_key:string value_hashes:Vector credentials:SecureCredentialsEncrypted = Bool; -account.sendVerifyPhoneCode#a5a356f9 phone_number:string settings:CodeSettings = auth.SentCode; -account.verifyPhone#4dd3a7f6 phone_number:string phone_code_hash:string phone_code:string = Bool; -account.sendVerifyEmailCode#98e037bb purpose:EmailVerifyPurpose email:string = account.SentEmailCode; -account.verifyEmail#32da4cf purpose:EmailVerifyPurpose verification:EmailVerification = account.EmailVerified; -account.initTakeoutSession#8ef3eab0 flags:# contacts:flags.0?true message_users:flags.1?true message_chats:flags.2?true message_megagroups:flags.3?true message_channels:flags.4?true files:flags.5?true file_max_size:flags.5?long = account.Takeout; -account.finishTakeoutSession#1d2652ee flags:# success:flags.0?true = Bool; -account.confirmPasswordEmail#8fdf1920 code:string = Bool; -account.resendPasswordEmail#7a7f2a15 = Bool; -account.cancelPasswordEmail#c1cbd5b6 = Bool; -account.getContactSignUpNotification#9f07c728 = Bool; -account.setContactSignUpNotification#cff43f61 silent:Bool = Bool; -account.getNotifyExceptions#53577479 flags:# compare_sound:flags.1?true compare_stories:flags.2?true peer:flags.0?InputNotifyPeer = Updates; -account.getWallPaper#fc8ddbea wallpaper:InputWallPaper = WallPaper; -account.uploadWallPaper#e39a8f03 flags:# for_chat:flags.0?true file:InputFile mime_type:string settings:WallPaperSettings = WallPaper; -account.saveWallPaper#6c5a5b37 wallpaper:InputWallPaper unsave:Bool settings:WallPaperSettings = Bool; -account.installWallPaper#feed5769 wallpaper:InputWallPaper settings:WallPaperSettings = Bool; -account.resetWallPapers#bb3b9804 = Bool; -account.getAutoDownloadSettings#56da0b3f = account.AutoDownloadSettings; -account.saveAutoDownloadSettings#76f36233 flags:# low:flags.0?true high:flags.1?true settings:AutoDownloadSettings = Bool; -account.uploadTheme#1c3db333 flags:# file:InputFile thumb:flags.0?InputFile file_name:string mime_type:string = Document; -account.createTheme#652e4400 flags:# slug:string title:string document:flags.2?InputDocument settings:flags.3?Vector = Theme; -account.updateTheme#2bf40ccc flags:# format:string theme:InputTheme slug:flags.0?string title:flags.1?string document:flags.2?InputDocument settings:flags.3?Vector = Theme; -account.saveTheme#f257106c theme:InputTheme unsave:Bool = Bool; -account.installTheme#c727bb3b flags:# dark:flags.0?true theme:flags.1?InputTheme format:flags.2?string base_theme:flags.3?BaseTheme = Bool; -account.getTheme#3a5869ec format:string theme:InputTheme = Theme; -account.getThemes#7206e458 format:string hash:long = account.Themes; -account.setContentSettings#b574b16b flags:# sensitive_enabled:flags.0?true = Bool; -account.getContentSettings#8b9b4dae = account.ContentSettings; -account.getMultiWallPapers#65ad71dc wallpapers:Vector = Vector; -account.getGlobalPrivacySettings#eb2b4cf6 = GlobalPrivacySettings; -account.setGlobalPrivacySettings#1edaaac2 settings:GlobalPrivacySettings = GlobalPrivacySettings; -account.reportProfilePhoto#fa8cc6f5 peer:InputPeer photo_id:InputPhoto reason:ReportReason message:string = Bool; -account.resetPassword#9308ce1b = account.ResetPasswordResult; -account.declinePasswordReset#4c9409f6 = Bool; -account.getChatThemes#d638de89 hash:long = account.Themes; -account.setAuthorizationTTL#bf899aa0 authorization_ttl_days:int = Bool; -account.changeAuthorizationSettings#40f48462 flags:# confirmed:flags.3?true hash:long encrypted_requests_disabled:flags.0?Bool call_requests_disabled:flags.1?Bool = Bool; -account.getSavedRingtones#e1902288 hash:long = account.SavedRingtones; -account.saveRingtone#3dea5b03 id:InputDocument unsave:Bool = account.SavedRingtone; -account.uploadRingtone#831a83a2 file:InputFile file_name:string mime_type:string = Document; -account.updateEmojiStatus#fbd3de6b emoji_status:EmojiStatus = Bool; -account.getDefaultEmojiStatuses#d6753386 hash:long = account.EmojiStatuses; -account.getRecentEmojiStatuses#f578105 hash:long = account.EmojiStatuses; -account.clearRecentEmojiStatuses#18201aae = Bool; -account.reorderUsernames#ef500eab order:Vector = Bool; -account.toggleUsername#58d6b376 username:string active:Bool = Bool; -account.getDefaultProfilePhotoEmojis#e2750328 hash:long = EmojiList; -account.getDefaultGroupPhotoEmojis#915860ae hash:long = EmojiList; -account.getAutoSaveSettings#adcbbcda = account.AutoSaveSettings; -account.saveAutoSaveSettings#d69b8361 flags:# users:flags.0?true chats:flags.1?true broadcasts:flags.2?true peer:flags.3?InputPeer settings:AutoSaveSettings = Bool; -account.deleteAutoSaveExceptions#53bc0020 = Bool; -account.invalidateSignInCodes#ca8ae8ba codes:Vector = Bool; -account.updateColor#684d214e flags:# for_profile:flags.1?true color:flags.2?PeerColor = Bool; -account.getDefaultBackgroundEmojis#a60ab9ce hash:long = EmojiList; -account.getChannelDefaultEmojiStatuses#7727a7d5 hash:long = account.EmojiStatuses; -account.getChannelRestrictedStatusEmojis#35a9e0d5 hash:long = EmojiList; -account.updateBusinessWorkHours#4b00e066 flags:# business_work_hours:flags.0?BusinessWorkHours = Bool; -account.updateBusinessLocation#9e6b131a flags:# geo_point:flags.1?InputGeoPoint address:flags.0?string = Bool; -account.updateBusinessGreetingMessage#66cdafc4 flags:# message:flags.0?InputBusinessGreetingMessage = Bool; -account.updateBusinessAwayMessage#a26a7fa5 flags:# message:flags.0?InputBusinessAwayMessage = Bool; -account.updateConnectedBot#66a08c7e flags:# deleted:flags.1?true rights:flags.0?BusinessBotRights bot:InputUser recipients:InputBusinessBotRecipients = Updates; -account.getConnectedBots#4ea4c80f = account.ConnectedBots; -account.getBotBusinessConnection#76a86270 connection_id:string = Updates; -account.updateBusinessIntro#a614d034 flags:# intro:flags.0?InputBusinessIntro = Bool; -account.toggleConnectedBotPaused#646e1097 peer:InputPeer paused:Bool = Bool; -account.disablePeerConnectedBot#5e437ed9 peer:InputPeer = Bool; -account.updateBirthday#cc6e0c11 flags:# birthday:flags.0?Birthday = Bool; -account.createBusinessChatLink#8851e68e link:InputBusinessChatLink = BusinessChatLink; -account.editBusinessChatLink#8c3410af slug:string link:InputBusinessChatLink = BusinessChatLink; -account.deleteBusinessChatLink#60073674 slug:string = Bool; -account.getBusinessChatLinks#6f70dde1 = account.BusinessChatLinks; -account.resolveBusinessChatLink#5492e5ee slug:string = account.ResolvedBusinessChatLinks; -account.updatePersonalChannel#d94305e0 channel:InputChannel = Bool; -account.toggleSponsoredMessages#b9d9a38d enabled:Bool = Bool; -account.getReactionsNotifySettings#6dd654c = ReactionsNotifySettings; -account.setReactionsNotifySettings#316ce548 settings:ReactionsNotifySettings = ReactionsNotifySettings; -account.getCollectibleEmojiStatuses#2e7b4543 hash:long = account.EmojiStatuses; -account.getPaidMessagesRevenue#19ba4a67 flags:# parent_peer:flags.0?InputPeer user_id:InputUser = account.PaidMessagesRevenue; -account.toggleNoPaidMessagesException#fe2eda76 flags:# refund_charged:flags.0?true require_payment:flags.2?true parent_peer:flags.1?InputPeer user_id:InputUser = Bool; -account.setMainProfileTab#5dee78b0 tab:ProfileTab = Bool; -account.saveMusic#b26732a9 flags:# unsave:flags.0?true id:InputDocument after_id:flags.1?InputDocument = Bool; -account.getSavedMusicIds#e09d5faf hash:long = account.SavedMusicIds; -account.getUniqueGiftChatThemes#e42ce9c9 offset:string limit:int hash:long = account.ChatThemes; -account.initPasskeyRegistration#429547e8 = account.PasskeyRegistrationOptions; -account.registerPasskey#55b41fd6 credential:InputPasskeyCredential = Passkey; -account.getPasskeys#ea1f0c52 = account.Passkeys; -account.deletePasskey#f5b5563f id:string = Bool; - -users.getUsers#d91a548 id:Vector = Vector; -users.getFullUser#b60f5918 id:InputUser = users.UserFull; -users.setSecureValueErrors#90c894b5 id:InputUser errors:Vector = Bool; -users.getRequirementsToContact#d89a83a3 id:Vector = Vector; -users.getSavedMusic#788d7fe3 id:InputUser offset:int limit:int hash:long = users.SavedMusic; -users.getSavedMusicByID#7573a4e9 id:InputUser documents:Vector = users.SavedMusic; -users.suggestBirthday#fc533372 id:InputUser birthday:Birthday = Updates; - -contacts.getContactIDs#7adc669d hash:long = Vector; -contacts.getStatuses#c4a353ee = Vector; -contacts.getContacts#5dd69e12 hash:long = contacts.Contacts; -contacts.importContacts#2c800be5 contacts:Vector = contacts.ImportedContacts; -contacts.deleteContacts#96a0e00 id:Vector = Updates; -contacts.deleteByPhones#1013fd9e phones:Vector = Bool; -contacts.block#2e2e8734 flags:# my_stories_from:flags.0?true id:InputPeer = Bool; -contacts.unblock#b550d328 flags:# my_stories_from:flags.0?true id:InputPeer = Bool; -contacts.getBlocked#9a868f80 flags:# my_stories_from:flags.0?true offset:int limit:int = contacts.Blocked; -contacts.search#11f812d8 q:string limit:int = contacts.Found; -contacts.resolveUsername#725afbbc flags:# username:string referer:flags.0?string = contacts.ResolvedPeer; -contacts.getTopPeers#973478b6 flags:# correspondents:flags.0?true bots_pm:flags.1?true bots_inline:flags.2?true phone_calls:flags.3?true forward_users:flags.4?true forward_chats:flags.5?true groups:flags.10?true channels:flags.15?true bots_app:flags.16?true bots_guestchat:flags.17?true offset:int limit:int hash:long = contacts.TopPeers; -contacts.resetTopPeerRating#1ae373ac category:TopPeerCategory peer:InputPeer = Bool; -contacts.resetSaved#879537f1 = Bool; -contacts.getSaved#82f1e39f = Vector; -contacts.toggleTopPeers#8514bdda enabled:Bool = Bool; -contacts.addContact#d9ba2e54 flags:# add_phone_privacy_exception:flags.0?true id:InputUser first_name:string last_name:string phone:string note:flags.1?TextWithEntities = Updates; -contacts.acceptContact#f831a20f id:InputUser = Updates; -contacts.getLocated#d348bc44 flags:# background:flags.1?true geo_point:InputGeoPoint self_expires:flags.0?int = Updates; -contacts.blockFromReplies#29a8962c flags:# delete_message:flags.0?true delete_history:flags.1?true report_spam:flags.2?true msg_id:int = Updates; -contacts.resolvePhone#8af94344 phone:string = contacts.ResolvedPeer; -contacts.exportContactToken#f8654027 = ExportedContactToken; -contacts.importContactToken#13005788 token:string = User; -contacts.editCloseFriends#ba6705f0 id:Vector = Bool; -contacts.setBlocked#94c65c76 flags:# my_stories_from:flags.0?true id:Vector limit:int = Bool; -contacts.getBirthdays#daeda864 = contacts.ContactBirthdays; -contacts.getSponsoredPeers#b6c8c393 q:string = contacts.SponsoredPeers; -contacts.updateContactNote#139f63fb id:InputUser note:TextWithEntities = Bool; - -messages.getMessages#63c66506 id:Vector = messages.Messages; -messages.getDialogs#a0f4cb4f flags:# exclude_pinned:flags.0?true folder_id:flags.1?int offset_date:int offset_id:int offset_peer:InputPeer limit:int hash:long = messages.Dialogs; -messages.getHistory#4423e6c5 peer:InputPeer offset_id:int offset_date:int add_offset:int limit:int max_id:int min_id:int hash:long = messages.Messages; -messages.search#29ee847a flags:# peer:InputPeer q:string from_id:flags.0?InputPeer saved_peer_id:flags.2?InputPeer saved_reaction:flags.3?Vector top_msg_id:flags.1?int filter:MessagesFilter min_date:int max_date:int offset_id:int add_offset:int limit:int max_id:int min_id:int hash:long = messages.Messages; -messages.readHistory#e306d3a peer:InputPeer max_id:int = messages.AffectedMessages; -messages.deleteHistory#b08f922a flags:# just_clear:flags.0?true revoke:flags.1?true peer:InputPeer max_id:int min_date:flags.2?int max_date:flags.3?int = messages.AffectedHistory; -messages.deleteMessages#e58e95d2 flags:# revoke:flags.0?true id:Vector = messages.AffectedMessages; -messages.receivedMessages#5a954c0 max_id:int = Vector; -messages.setTyping#58943ee2 flags:# peer:InputPeer top_msg_id:flags.0?int action:SendMessageAction = Bool; -messages.sendMessage#545cd15a flags:# no_webpage:flags.1?true silent:flags.5?true background:flags.6?true clear_draft:flags.7?true noforwards:flags.14?true update_stickersets_order:flags.15?true invert_media:flags.16?true allow_paid_floodskip:flags.19?true peer:InputPeer reply_to:flags.0?InputReplyTo message:string random_id:long reply_markup:flags.2?ReplyMarkup entities:flags.3?Vector schedule_date:flags.10?int schedule_repeat_period:flags.24?int send_as:flags.13?InputPeer quick_reply_shortcut:flags.17?InputQuickReplyShortcut effect:flags.18?long allow_paid_stars:flags.21?long suggested_post:flags.22?SuggestedPost = Updates; -messages.sendMedia#330e77f flags:# silent:flags.5?true background:flags.6?true clear_draft:flags.7?true noforwards:flags.14?true update_stickersets_order:flags.15?true invert_media:flags.16?true allow_paid_floodskip:flags.19?true peer:InputPeer reply_to:flags.0?InputReplyTo media:InputMedia message:string random_id:long reply_markup:flags.2?ReplyMarkup entities:flags.3?Vector schedule_date:flags.10?int schedule_repeat_period:flags.24?int send_as:flags.13?InputPeer quick_reply_shortcut:flags.17?InputQuickReplyShortcut effect:flags.18?long allow_paid_stars:flags.21?long suggested_post:flags.22?SuggestedPost = Updates; -messages.forwardMessages#13704a7c flags:# silent:flags.5?true background:flags.6?true with_my_score:flags.8?true drop_author:flags.11?true drop_media_captions:flags.12?true noforwards:flags.14?true allow_paid_floodskip:flags.19?true from_peer:InputPeer id:Vector random_id:Vector to_peer:InputPeer top_msg_id:flags.9?int reply_to:flags.22?InputReplyTo schedule_date:flags.10?int schedule_repeat_period:flags.24?int send_as:flags.13?InputPeer quick_reply_shortcut:flags.17?InputQuickReplyShortcut effect:flags.18?long video_timestamp:flags.20?int allow_paid_stars:flags.21?long suggested_post:flags.23?SuggestedPost = Updates; -messages.reportSpam#cf1592db peer:InputPeer = Bool; -messages.getPeerSettings#efd9a6a2 peer:InputPeer = messages.PeerSettings; -messages.report#fc78af9b peer:InputPeer id:Vector option:bytes message:string = ReportResult; -messages.getChats#49e9528f id:Vector = messages.Chats; -messages.getFullChat#aeb00b34 chat_id:long = messages.ChatFull; -messages.editChatTitle#73783ffd chat_id:long title:string = Updates; -messages.editChatPhoto#35ddd674 chat_id:long photo:InputChatPhoto = Updates; -messages.addChatUser#cbc6d107 chat_id:long user_id:InputUser fwd_limit:int = messages.InvitedUsers; -messages.deleteChatUser#a2185cab flags:# revoke_history:flags.0?true chat_id:long user_id:InputUser = Updates; -messages.createChat#92ceddd4 flags:# users:Vector title:string ttl_period:flags.0?int = messages.InvitedUsers; -messages.getDhConfig#26cf8950 version:int random_length:int = messages.DhConfig; -messages.requestEncryption#f64daf43 user_id:InputUser random_id:int g_a:bytes = EncryptedChat; -messages.acceptEncryption#3dbc0415 peer:InputEncryptedChat g_b:bytes key_fingerprint:long = EncryptedChat; -messages.discardEncryption#f393aea0 flags:# delete_history:flags.0?true chat_id:int = Bool; -messages.setEncryptedTyping#791451ed peer:InputEncryptedChat typing:Bool = Bool; -messages.readEncryptedHistory#7f4b690a peer:InputEncryptedChat max_date:int = Bool; -messages.sendEncrypted#44fa7a15 flags:# silent:flags.0?true peer:InputEncryptedChat random_id:long data:bytes = messages.SentEncryptedMessage; -messages.sendEncryptedFile#5559481d flags:# silent:flags.0?true peer:InputEncryptedChat random_id:long data:bytes file:InputEncryptedFile = messages.SentEncryptedMessage; -messages.sendEncryptedService#32d439a4 peer:InputEncryptedChat random_id:long data:bytes = messages.SentEncryptedMessage; -messages.receivedQueue#55a5bb66 max_qts:int = Vector; -messages.reportEncryptedSpam#4b0c8c0f peer:InputEncryptedChat = Bool; -messages.readMessageContents#36a73f77 id:Vector = messages.AffectedMessages; -messages.getStickers#d5a5d3a1 emoticon:string hash:long = messages.Stickers; -messages.getAllStickers#b8a0a1a8 hash:long = messages.AllStickers; -messages.getWebPagePreview#570d6f6f flags:# message:string entities:flags.3?Vector = messages.WebPagePreview; -messages.exportChatInvite#a455de90 flags:# legacy_revoke_permanent:flags.2?true request_needed:flags.3?true peer:InputPeer expire_date:flags.0?int usage_limit:flags.1?int title:flags.4?string subscription_pricing:flags.5?StarsSubscriptionPricing = ExportedChatInvite; -messages.checkChatInvite#3eadb1bb hash:string = ChatInvite; -messages.importChatInvite#6c50051c hash:string = Updates; -messages.getStickerSet#c8a0ec74 stickerset:InputStickerSet hash:int = messages.StickerSet; -messages.installStickerSet#c78fe460 stickerset:InputStickerSet archived:Bool = messages.StickerSetInstallResult; -messages.uninstallStickerSet#f96e55de stickerset:InputStickerSet = Bool; -messages.startBot#e6df7378 bot:InputUser peer:InputPeer random_id:long start_param:string = Updates; -messages.getMessagesViews#5784d3e1 peer:InputPeer id:Vector increment:Bool = messages.MessageViews; -messages.editChatAdmin#a85bd1c2 chat_id:long user_id:InputUser is_admin:Bool = Bool; -messages.migrateChat#a2875319 chat_id:long = Updates; -messages.searchGlobal#4bc6589a flags:# broadcasts_only:flags.1?true groups_only:flags.2?true users_only:flags.3?true folder_id:flags.0?int q:string filter:MessagesFilter min_date:int max_date:int offset_rate:int offset_peer:InputPeer offset_id:int limit:int = messages.Messages; -messages.reorderStickerSets#78337739 flags:# masks:flags.0?true emojis:flags.1?true order:Vector = Bool; -messages.getDocumentByHash#b1f2061f sha256:bytes size:long mime_type:string = Document; -messages.getSavedGifs#5cf09635 hash:long = messages.SavedGifs; -messages.saveGif#327a30cb id:InputDocument unsave:Bool = Bool; -messages.getInlineBotResults#514e999d flags:# bot:InputUser peer:InputPeer geo_point:flags.0?InputGeoPoint query:string offset:string = messages.BotResults; -messages.setInlineBotResults#bb12a419 flags:# gallery:flags.0?true private:flags.1?true query_id:long results:Vector cache_time:int next_offset:flags.2?string switch_pm:flags.3?InlineBotSwitchPM switch_webview:flags.4?InlineBotWebView = Bool; -messages.sendInlineBotResult#c0cf7646 flags:# silent:flags.5?true background:flags.6?true clear_draft:flags.7?true hide_via:flags.11?true peer:InputPeer reply_to:flags.0?InputReplyTo random_id:long query_id:long id:string schedule_date:flags.10?int send_as:flags.13?InputPeer quick_reply_shortcut:flags.17?InputQuickReplyShortcut allow_paid_stars:flags.21?long = Updates; -messages.getMessageEditData#fda68d36 peer:InputPeer id:int = messages.MessageEditData; -messages.editMessage#51e842e1 flags:# no_webpage:flags.1?true invert_media:flags.16?true peer:InputPeer id:int message:flags.11?string media:flags.14?InputMedia reply_markup:flags.2?ReplyMarkup entities:flags.3?Vector schedule_date:flags.15?int schedule_repeat_period:flags.18?int quick_reply_shortcut_id:flags.17?int = Updates; -messages.editInlineBotMessage#83557dba flags:# no_webpage:flags.1?true invert_media:flags.16?true id:InputBotInlineMessageID message:flags.11?string media:flags.14?InputMedia reply_markup:flags.2?ReplyMarkup entities:flags.3?Vector = Bool; -messages.getBotCallbackAnswer#9342ca07 flags:# game:flags.1?true peer:InputPeer msg_id:int data:flags.0?bytes password:flags.2?InputCheckPasswordSRP = messages.BotCallbackAnswer; -messages.setBotCallbackAnswer#d58f130a flags:# alert:flags.1?true query_id:long message:flags.0?string url:flags.2?string cache_time:int = Bool; -messages.getPeerDialogs#e470bcfd peers:Vector = messages.PeerDialogs; -messages.saveDraft#54ae308e flags:# no_webpage:flags.1?true invert_media:flags.6?true reply_to:flags.4?InputReplyTo peer:InputPeer message:string entities:flags.3?Vector media:flags.5?InputMedia effect:flags.7?long suggested_post:flags.8?SuggestedPost = Bool; -messages.getAllDrafts#6a3f8d65 = Updates; -messages.getFeaturedStickers#64780b14 hash:long = messages.FeaturedStickers; -messages.readFeaturedStickers#5b118126 id:Vector = Bool; -messages.getRecentStickers#9da9403b flags:# attached:flags.0?true hash:long = messages.RecentStickers; -messages.saveRecentSticker#392718f8 flags:# attached:flags.0?true id:InputDocument unsave:Bool = Bool; -messages.clearRecentStickers#8999602d flags:# attached:flags.0?true = Bool; -messages.getArchivedStickers#57f17692 flags:# masks:flags.0?true emojis:flags.1?true offset_id:long limit:int = messages.ArchivedStickers; -messages.getMaskStickers#640f82b8 hash:long = messages.AllStickers; -messages.getAttachedStickers#cc5b67cc media:InputStickeredMedia = Vector; -messages.setGameScore#8ef8ecc0 flags:# edit_message:flags.0?true force:flags.1?true peer:InputPeer id:int user_id:InputUser score:int = Updates; -messages.setInlineGameScore#15ad9f64 flags:# edit_message:flags.0?true force:flags.1?true id:InputBotInlineMessageID user_id:InputUser score:int = Bool; -messages.getGameHighScores#e822649d peer:InputPeer id:int user_id:InputUser = messages.HighScores; -messages.getInlineGameHighScores#f635e1b id:InputBotInlineMessageID user_id:InputUser = messages.HighScores; -messages.getCommonChats#e40ca104 user_id:InputUser max_id:long limit:int = messages.Chats; -messages.getWebPage#8d9692a3 url:string hash:int = messages.WebPage; -messages.toggleDialogPin#a731e257 flags:# pinned:flags.0?true peer:InputDialogPeer = Bool; -messages.reorderPinnedDialogs#3b1adf37 flags:# force:flags.0?true folder_id:int order:Vector = Bool; -messages.getPinnedDialogs#d6b94df2 folder_id:int = messages.PeerDialogs; -messages.setBotShippingResults#e5f672fa flags:# query_id:long error:flags.0?string shipping_options:flags.1?Vector = Bool; -messages.setBotPrecheckoutResults#9c2dd95 flags:# success:flags.1?true query_id:long error:flags.0?string = Bool; -messages.uploadMedia#14967978 flags:# business_connection_id:flags.0?string peer:InputPeer media:InputMedia = MessageMedia; -messages.sendScreenshotNotification#a1405817 peer:InputPeer reply_to:InputReplyTo random_id:long = Updates; -messages.getFavedStickers#4f1aaa9 hash:long = messages.FavedStickers; -messages.faveSticker#b9ffc55b id:InputDocument unfave:Bool = Bool; -messages.getUnreadMentions#f107e790 flags:# peer:InputPeer top_msg_id:flags.0?int offset_id:int add_offset:int limit:int max_id:int min_id:int = messages.Messages; -messages.readMentions#36e5bf4d flags:# peer:InputPeer top_msg_id:flags.0?int = messages.AffectedHistory; -messages.getRecentLocations#702a40e0 peer:InputPeer limit:int hash:long = messages.Messages; -messages.sendMultiMedia#1bf89d74 flags:# silent:flags.5?true background:flags.6?true clear_draft:flags.7?true noforwards:flags.14?true update_stickersets_order:flags.15?true invert_media:flags.16?true allow_paid_floodskip:flags.19?true peer:InputPeer reply_to:flags.0?InputReplyTo multi_media:Vector schedule_date:flags.10?int send_as:flags.13?InputPeer quick_reply_shortcut:flags.17?InputQuickReplyShortcut effect:flags.18?long allow_paid_stars:flags.21?long = Updates; -messages.uploadEncryptedFile#5057c497 peer:InputEncryptedChat file:InputEncryptedFile = EncryptedFile; -messages.searchStickerSets#35705b8a flags:# exclude_featured:flags.0?true q:string hash:long = messages.FoundStickerSets; -messages.getSplitRanges#1cff7e08 = Vector; -messages.markDialogUnread#8c5006f8 flags:# unread:flags.0?true parent_peer:flags.1?InputPeer peer:InputDialogPeer = Bool; -messages.getDialogUnreadMarks#21202222 flags:# parent_peer:flags.0?InputPeer = Vector; -messages.clearAllDrafts#7e58ee9c = Bool; -messages.updatePinnedMessage#d2aaf7ec flags:# silent:flags.0?true unpin:flags.1?true pm_oneside:flags.2?true peer:InputPeer id:int = Updates; -messages.sendVote#10ea6184 peer:InputPeer msg_id:int options:Vector = Updates; -messages.getPollResults#eda3e33b peer:InputPeer msg_id:int poll_hash:long = Updates; -messages.getOnlines#6e2be050 peer:InputPeer = ChatOnlines; -messages.editChatAbout#def60797 peer:InputPeer about:string = Bool; -messages.editChatDefaultBannedRights#a5866b41 peer:InputPeer banned_rights:ChatBannedRights = Updates; -messages.getEmojiKeywords#35a0e062 lang_code:string = EmojiKeywordsDifference; -messages.getEmojiKeywordsDifference#1508b6af lang_code:string from_version:int = EmojiKeywordsDifference; -messages.getEmojiKeywordsLanguages#4e9963b2 lang_codes:Vector = Vector; -messages.getEmojiURL#d5b10c26 lang_code:string = EmojiURL; -messages.getSearchCounters#1bbcf300 flags:# peer:InputPeer saved_peer_id:flags.2?InputPeer top_msg_id:flags.0?int filters:Vector = Vector; -messages.requestUrlAuth#894cc99c flags:# peer:flags.1?InputPeer msg_id:flags.1?int button_id:flags.1?int url:flags.2?string in_app_origin:flags.3?string = UrlAuthResult; -messages.acceptUrlAuth#67a3f0de flags:# write_allowed:flags.0?true share_phone_number:flags.3?true peer:flags.1?InputPeer msg_id:flags.1?int button_id:flags.1?int url:flags.2?string match_code:flags.4?string = UrlAuthResult; -messages.hidePeerSettingsBar#4facb138 peer:InputPeer = Bool; -messages.getScheduledHistory#f516760b peer:InputPeer hash:long = messages.Messages; -messages.getScheduledMessages#bdbb0464 peer:InputPeer id:Vector = messages.Messages; -messages.sendScheduledMessages#bd38850a peer:InputPeer id:Vector = Updates; -messages.deleteScheduledMessages#59ae2b16 peer:InputPeer id:Vector = Updates; -messages.getPollVotes#b86e380e flags:# peer:InputPeer id:int option:flags.0?bytes offset:flags.1?string limit:int = messages.VotesList; -messages.toggleStickerSets#b5052fea flags:# uninstall:flags.0?true archive:flags.1?true unarchive:flags.2?true stickersets:Vector = Bool; -messages.getDialogFilters#efd48c89 = messages.DialogFilters; -messages.getSuggestedDialogFilters#a29cd42c = Vector; -messages.updateDialogFilter#1ad4a04a flags:# id:int filter:flags.0?DialogFilter = Bool; -messages.updateDialogFiltersOrder#c563c1e4 order:Vector = Bool; -messages.getOldFeaturedStickers#7ed094a1 offset:int limit:int hash:long = messages.FeaturedStickers; -messages.getReplies#22ddd30c peer:InputPeer msg_id:int offset_id:int offset_date:int add_offset:int limit:int max_id:int min_id:int hash:long = messages.Messages; -messages.getDiscussionMessage#446972fd peer:InputPeer msg_id:int = messages.DiscussionMessage; -messages.readDiscussion#f731a9f4 peer:InputPeer msg_id:int read_max_id:int = Bool; -messages.unpinAllMessages#62dd747 flags:# peer:InputPeer top_msg_id:flags.0?int saved_peer_id:flags.1?InputPeer = messages.AffectedHistory; -messages.deleteChat#5bd0ee50 chat_id:long = Bool; -messages.deletePhoneCallHistory#f9cbe409 flags:# revoke:flags.0?true = messages.AffectedFoundMessages; -messages.checkHistoryImport#43fe19f3 import_head:string = messages.HistoryImportParsed; -messages.initHistoryImport#34090c3b peer:InputPeer file:InputFile media_count:int = messages.HistoryImport; -messages.uploadImportedMedia#2a862092 peer:InputPeer import_id:long file_name:string media:InputMedia = MessageMedia; -messages.startHistoryImport#b43df344 peer:InputPeer import_id:long = Bool; -messages.getExportedChatInvites#a2b5a3f6 flags:# revoked:flags.3?true peer:InputPeer admin_id:InputUser offset_date:flags.2?int offset_link:flags.2?string limit:int = messages.ExportedChatInvites; -messages.getExportedChatInvite#73746f5c peer:InputPeer link:string = messages.ExportedChatInvite; -messages.editExportedChatInvite#bdca2f75 flags:# revoked:flags.2?true peer:InputPeer link:string expire_date:flags.0?int usage_limit:flags.1?int request_needed:flags.3?Bool title:flags.4?string = messages.ExportedChatInvite; -messages.deleteRevokedExportedChatInvites#56987bd5 peer:InputPeer admin_id:InputUser = Bool; -messages.deleteExportedChatInvite#d464a42b peer:InputPeer link:string = Bool; -messages.getAdminsWithInvites#3920e6ef peer:InputPeer = messages.ChatAdminsWithInvites; -messages.getChatInviteImporters#df04dd4e flags:# requested:flags.0?true subscription_expired:flags.3?true peer:InputPeer link:flags.1?string q:flags.2?string offset_date:int offset_user:InputUser limit:int = messages.ChatInviteImporters; -messages.setHistoryTTL#b80e5fe4 peer:InputPeer period:int = Updates; -messages.checkHistoryImportPeer#5dc60f03 peer:InputPeer = messages.CheckedHistoryImportPeer; -messages.setChatTheme#81202c9 peer:InputPeer theme:InputChatTheme = Updates; -messages.getMessageReadParticipants#31c1c44f peer:InputPeer msg_id:int = Vector; -messages.getSearchResultsCalendar#6aa3f6bd flags:# peer:InputPeer saved_peer_id:flags.2?InputPeer filter:MessagesFilter offset_id:int offset_date:int = messages.SearchResultsCalendar; -messages.getSearchResultsPositions#9c7f2f10 flags:# peer:InputPeer saved_peer_id:flags.2?InputPeer filter:MessagesFilter offset_id:int limit:int = messages.SearchResultsPositions; -messages.hideChatJoinRequest#7fe7e815 flags:# approved:flags.0?true peer:InputPeer user_id:InputUser = Updates; -messages.hideAllChatJoinRequests#e085f4ea flags:# approved:flags.0?true peer:InputPeer link:flags.1?string = Updates; -messages.toggleNoForwards#b2081a35 flags:# peer:InputPeer enabled:Bool request_msg_id:flags.0?int = Updates; -messages.saveDefaultSendAs#ccfddf96 peer:InputPeer send_as:InputPeer = Bool; -messages.sendReaction#d30d78d4 flags:# big:flags.1?true add_to_recent:flags.2?true peer:InputPeer msg_id:int reaction:flags.0?Vector = Updates; -messages.getMessagesReactions#8bba90e6 peer:InputPeer id:Vector = Updates; -messages.getMessageReactionsList#461b3f48 flags:# peer:InputPeer id:int reaction:flags.0?Reaction offset:flags.1?string limit:int = messages.MessageReactionsList; -messages.setChatAvailableReactions#864b2581 flags:# peer:InputPeer available_reactions:ChatReactions reactions_limit:flags.0?int paid_enabled:flags.1?Bool = Updates; -messages.getAvailableReactions#18dea0ac hash:int = messages.AvailableReactions; -messages.setDefaultReaction#4f47a016 reaction:Reaction = Bool; -messages.translateText#a5eec345 flags:# peer:flags.0?InputPeer id:flags.0?Vector text:flags.1?Vector to_lang:string tone:flags.2?string = messages.TranslatedText; -messages.getUnreadReactions#bd7f90ac flags:# peer:InputPeer top_msg_id:flags.0?int saved_peer_id:flags.1?InputPeer offset_id:int add_offset:int limit:int max_id:int min_id:int = messages.Messages; -messages.readReactions#9ec44f93 flags:# peer:InputPeer top_msg_id:flags.0?int saved_peer_id:flags.1?InputPeer = messages.AffectedHistory; -messages.searchSentMedia#107e31a0 q:string filter:MessagesFilter limit:int = messages.Messages; -messages.getAttachMenuBots#16fcc2cb hash:long = AttachMenuBots; -messages.getAttachMenuBot#77216192 bot:InputUser = AttachMenuBotsBot; -messages.toggleBotInAttachMenu#69f59d69 flags:# write_allowed:flags.0?true bot:InputUser enabled:Bool = Bool; -messages.requestWebView#269dc2c1 flags:# from_bot_menu:flags.4?true silent:flags.5?true compact:flags.7?true fullscreen:flags.8?true peer:InputPeer bot:InputUser url:flags.1?string start_param:flags.3?string theme_params:flags.2?DataJSON platform:string reply_to:flags.0?InputReplyTo send_as:flags.13?InputPeer = WebViewResult; -messages.prolongWebView#b0d81a83 flags:# silent:flags.5?true peer:InputPeer bot:InputUser query_id:long reply_to:flags.0?InputReplyTo send_as:flags.13?InputPeer = Bool; -messages.requestSimpleWebView#413a3e73 flags:# from_switch_webview:flags.1?true from_side_menu:flags.2?true compact:flags.7?true fullscreen:flags.8?true bot:InputUser url:flags.3?string start_param:flags.4?string theme_params:flags.0?DataJSON platform:string = WebViewResult; -messages.sendWebViewResultMessage#a4314f5 bot_query_id:string result:InputBotInlineResult = WebViewMessageSent; -messages.sendWebViewData#dc0242c8 bot:InputUser random_id:long button_text:string data:string = Updates; -messages.transcribeAudio#269e9a49 peer:InputPeer msg_id:int = messages.TranscribedAudio; -messages.rateTranscribedAudio#7f1d072f peer:InputPeer msg_id:int transcription_id:long good:Bool = Bool; -messages.getCustomEmojiDocuments#d9ab0f54 document_id:Vector = Vector; -messages.getEmojiStickers#fbfca18f hash:long = messages.AllStickers; -messages.getFeaturedEmojiStickers#ecf6736 hash:long = messages.FeaturedStickers; -messages.reportReaction#3f64c076 peer:InputPeer id:int reaction_peer:InputPeer = Bool; -messages.getTopReactions#bb8125ba limit:int hash:long = messages.Reactions; -messages.getRecentReactions#39461db2 limit:int hash:long = messages.Reactions; -messages.clearRecentReactions#9dfeefb4 = Bool; -messages.getExtendedMedia#84f80814 peer:InputPeer id:Vector = Updates; -messages.setDefaultHistoryTTL#9eb51445 period:int = Bool; -messages.getDefaultHistoryTTL#658b7188 = DefaultHistoryTTL; -messages.sendBotRequestedPeer#6c5cf2a7 flags:# peer:InputPeer msg_id:flags.0?int webapp_req_id:flags.1?string button_id:int requested_peers:Vector = Updates; -messages.getEmojiGroups#7488ce5b hash:int = messages.EmojiGroups; -messages.getEmojiStatusGroups#2ecd56cd hash:int = messages.EmojiGroups; -messages.getEmojiProfilePhotoGroups#21a548f3 hash:int = messages.EmojiGroups; -messages.searchCustomEmoji#2c11c0d7 emoticon:string hash:long = EmojiList; -messages.togglePeerTranslations#e47cb579 flags:# disabled:flags.0?true peer:InputPeer = Bool; -messages.getBotApp#34fdc5c3 app:InputBotApp hash:long = messages.BotApp; -messages.requestAppWebView#53618bce flags:# write_allowed:flags.0?true compact:flags.7?true fullscreen:flags.8?true peer:InputPeer app:InputBotApp start_param:flags.1?string theme_params:flags.2?DataJSON platform:string = WebViewResult; -messages.setChatWallPaper#8ffacae1 flags:# for_both:flags.3?true revert:flags.4?true peer:InputPeer wallpaper:flags.0?InputWallPaper settings:flags.2?WallPaperSettings id:flags.1?int = Updates; -messages.searchEmojiStickerSets#92b4494c flags:# exclude_featured:flags.0?true q:string hash:long = messages.FoundStickerSets; -messages.getSavedDialogs#1e91fc99 flags:# exclude_pinned:flags.0?true parent_peer:flags.1?InputPeer offset_date:int offset_id:int offset_peer:InputPeer limit:int hash:long = messages.SavedDialogs; -messages.getSavedHistory#998ab009 flags:# parent_peer:flags.0?InputPeer peer:InputPeer offset_id:int offset_date:int add_offset:int limit:int max_id:int min_id:int hash:long = messages.Messages; -messages.deleteSavedHistory#4dc5085f flags:# parent_peer:flags.0?InputPeer peer:InputPeer max_id:int min_date:flags.2?int max_date:flags.3?int = messages.AffectedHistory; -messages.getPinnedSavedDialogs#d63d94e0 = messages.SavedDialogs; -messages.toggleSavedDialogPin#ac81bbde flags:# pinned:flags.0?true peer:InputDialogPeer = Bool; -messages.reorderPinnedSavedDialogs#8b716587 flags:# force:flags.0?true order:Vector = Bool; -messages.getSavedReactionTags#3637e05b flags:# peer:flags.0?InputPeer hash:long = messages.SavedReactionTags; -messages.updateSavedReactionTag#60297dec flags:# reaction:Reaction title:flags.0?string = Bool; -messages.getDefaultTagReactions#bdf93428 hash:long = messages.Reactions; -messages.getOutboxReadDate#8c4bfe5d peer:InputPeer msg_id:int = OutboxReadDate; -messages.getQuickReplies#d483f2a8 hash:long = messages.QuickReplies; -messages.reorderQuickReplies#60331907 order:Vector = Bool; -messages.checkQuickReplyShortcut#f1d0fbd3 shortcut:string = Bool; -messages.editQuickReplyShortcut#5c003cef shortcut_id:int shortcut:string = Bool; -messages.deleteQuickReplyShortcut#3cc04740 shortcut_id:int = Bool; -messages.getQuickReplyMessages#94a495c3 flags:# shortcut_id:int id:flags.0?Vector hash:long = messages.Messages; -messages.sendQuickReplyMessages#6c750de1 peer:InputPeer shortcut_id:int id:Vector random_id:Vector = Updates; -messages.deleteQuickReplyMessages#e105e910 shortcut_id:int id:Vector = Updates; -messages.toggleDialogFilterTags#fd2dda49 enabled:Bool = Bool; -messages.getMyStickers#d0b5e1fc offset_id:long limit:int = messages.MyStickers; -messages.getEmojiStickerGroups#1dd840f5 hash:int = messages.EmojiGroups; -messages.getAvailableEffects#dea20a39 hash:int = messages.AvailableEffects; -messages.editFactCheck#589ee75 peer:InputPeer msg_id:int text:TextWithEntities = Updates; -messages.deleteFactCheck#d1da940c peer:InputPeer msg_id:int = Updates; -messages.getFactCheck#b9cdc5ee peer:InputPeer msg_id:Vector = Vector; -messages.requestMainWebView#c9e01e7b flags:# compact:flags.7?true fullscreen:flags.8?true peer:InputPeer bot:InputUser start_param:flags.1?string theme_params:flags.0?DataJSON platform:string = WebViewResult; -messages.sendPaidReaction#58bbcb50 flags:# peer:InputPeer msg_id:int count:int random_id:long private:flags.0?PaidReactionPrivacy = Updates; -messages.togglePaidReactionPrivacy#435885b5 peer:InputPeer msg_id:int private:PaidReactionPrivacy = Bool; -messages.getPaidReactionPrivacy#472455aa = Updates; -messages.viewSponsoredMessage#269e3643 random_id:bytes = Bool; -messages.clickSponsoredMessage#8235057e flags:# media:flags.0?true fullscreen:flags.1?true random_id:bytes = Bool; -messages.reportSponsoredMessage#12cbf0c4 random_id:bytes option:bytes = channels.SponsoredMessageReportResult; -messages.getSponsoredMessages#3d6ce850 flags:# peer:InputPeer msg_id:flags.0?int = messages.SponsoredMessages; -messages.savePreparedInlineMessage#f21f7f2f flags:# result:InputBotInlineResult user_id:InputUser peer_types:flags.0?Vector = messages.BotPreparedInlineMessage; -messages.getPreparedInlineMessage#857ebdb8 bot:InputUser id:string = messages.PreparedInlineMessage; -messages.searchStickers#29b1c66a flags:# emojis:flags.0?true q:string emoticon:string lang_code:Vector offset:int limit:int hash:long = messages.FoundStickers; -messages.reportMessagesDelivery#5a6d7395 flags:# push:flags.0?true peer:InputPeer id:Vector = Bool; -messages.getSavedDialogsByID#6f6f9c96 flags:# parent_peer:flags.1?InputPeer ids:Vector = messages.SavedDialogs; -messages.readSavedHistory#ba4a3b5b parent_peer:InputPeer peer:InputPeer max_id:int = Bool; -messages.toggleTodoCompleted#d3e03124 peer:InputPeer msg_id:int completed:Vector incompleted:Vector = Updates; -messages.appendTodoList#21a61057 peer:InputPeer msg_id:int list:Vector = Updates; -messages.toggleSuggestedPostApproval#8107455c flags:# reject:flags.1?true peer:InputPeer msg_id:int schedule_date:flags.0?int reject_comment:flags.2?string = Updates; -messages.getForumTopics#3ba47bff flags:# peer:InputPeer q:flags.0?string offset_date:int offset_id:int offset_topic:int limit:int = messages.ForumTopics; -messages.getForumTopicsByID#af0a4a08 peer:InputPeer topics:Vector = messages.ForumTopics; -messages.editForumTopic#cecc1134 flags:# peer:InputPeer topic_id:int title:flags.0?string icon_emoji_id:flags.1?long closed:flags.2?Bool hidden:flags.3?Bool = Updates; -messages.updatePinnedForumTopic#175df251 peer:InputPeer topic_id:int pinned:Bool = Updates; -messages.reorderPinnedForumTopics#e7841f0 flags:# force:flags.0?true peer:InputPeer order:Vector = Updates; -messages.createForumTopic#2f98c3d5 flags:# title_missing:flags.4?true peer:InputPeer title:string icon_color:flags.0?int icon_emoji_id:flags.3?long random_id:long send_as:flags.2?InputPeer = Updates; -messages.deleteTopicHistory#d2816f10 peer:InputPeer top_msg_id:int = messages.AffectedHistory; -messages.getEmojiGameInfo#fb7e8ca7 = messages.EmojiGameInfo; -messages.summarizeText#abbbd346 flags:# peer:InputPeer id:int to_lang:flags.0?string tone:flags.2?string = TextWithEntities; -messages.editChatCreator#f743b857 peer:InputPeer user_id:InputUser password:InputCheckPasswordSRP = Updates; -messages.getFutureChatCreatorAfterLeave#3b7d0ea6 peer:InputPeer = User; -messages.editChatParticipantRank#a00f32b0 peer:InputPeer participant:InputPeer rank:string = Updates; -messages.declineUrlAuth#35436bbc url:string = Bool; -messages.checkUrlAuthMatchCode#c9a47b0b url:string match_code:string = Bool; -messages.composeMessageWithAI#daecc589 flags:# proofread:flags.0?true emojify:flags.3?true text:TextWithEntities translate_to_lang:flags.1?string tone:flags.2?InputAiComposeTone = messages.ComposedMessageWithAI; -messages.reportReadMetrics#4067c5e6 peer:InputPeer metrics:Vector = Bool; -messages.reportMusicListen#ddbcd819 id:InputDocument listened_duration:int = Bool; -messages.addPollAnswer#19bc4b6d peer:InputPeer msg_id:int answer:PollAnswer = Updates; -messages.deletePollAnswer#ac8505a5 peer:InputPeer msg_id:int option:bytes = Updates; -messages.getUnreadPollVotes#43286cf2 flags:# peer:InputPeer top_msg_id:flags.0?int offset_id:int add_offset:int limit:int max_id:int min_id:int = messages.Messages; -messages.readPollVotes#1720b4d8 flags:# peer:InputPeer top_msg_id:flags.0?int = messages.AffectedHistory; -messages.setBotGuestChatResult#b8f106e3 query_id:long result:InputBotInlineResult = InputBotInlineMessageID; -messages.deleteParticipantReactions#a0b80cf8 peer:InputPeer participant:InputPeer = Bool; -messages.deleteParticipantReaction#e3b7f82c peer:InputPeer msg_id:int participant:InputPeer = Updates; -messages.getPersonalChannelHistory#55fb0996 user_id:InputUser limit:int max_id:int min_id:int hash:long = messages.Messages; - -updates.getState#edd4882a = updates.State; -updates.getDifference#19c2f763 flags:# pts:int pts_limit:flags.1?int pts_total_limit:flags.0?int date:int qts:int qts_limit:flags.2?int = updates.Difference; -updates.getChannelDifference#3173d78 flags:# force:flags.0?true channel:InputChannel filter:ChannelMessagesFilter pts:int limit:int = updates.ChannelDifference; - -photos.updateProfilePhoto#9e82039 flags:# fallback:flags.0?true bot:flags.1?InputUser id:InputPhoto = photos.Photo; -photos.uploadProfilePhoto#388a3b5 flags:# fallback:flags.3?true bot:flags.5?InputUser file:flags.0?InputFile video:flags.1?InputFile video_start_ts:flags.2?double video_emoji_markup:flags.4?VideoSize = photos.Photo; -photos.deletePhotos#87cf7f2f id:Vector = Vector; -photos.getUserPhotos#91cd32a8 user_id:InputUser offset:int max_id:long limit:int = photos.Photos; -photos.uploadContactProfilePhoto#e14c4a71 flags:# suggest:flags.3?true save:flags.4?true user_id:InputUser file:flags.0?InputFile video:flags.1?InputFile video_start_ts:flags.2?double video_emoji_markup:flags.5?VideoSize = photos.Photo; - -upload.saveFilePart#b304a621 file_id:long file_part:int bytes:bytes = Bool; -upload.getFile#be5335be flags:# precise:flags.0?true cdn_supported:flags.1?true location:InputFileLocation offset:long limit:int = upload.File; -upload.saveBigFilePart#de7b673d file_id:long file_part:int file_total_parts:int bytes:bytes = Bool; -upload.getWebFile#24e6818d location:InputWebFileLocation offset:int limit:int = upload.WebFile; -upload.getCdnFile#395f69da file_token:bytes offset:long limit:int = upload.CdnFile; -upload.reuploadCdnFile#9b2754a8 file_token:bytes request_token:bytes = Vector; -upload.getCdnFileHashes#91dc3f31 file_token:bytes offset:long = Vector; -upload.getFileHashes#9156982a location:InputFileLocation offset:long = Vector; - -help.getConfig#c4f9186b = Config; -help.getNearestDc#1fb33026 = NearestDc; -help.getAppUpdate#522d5a7d source:string = help.AppUpdate; -help.getInviteText#4d392343 = help.InviteText; -help.getSupport#9cdf08cd = help.Support; -help.setBotUpdatesStatus#ec22cfcd pending_updates_count:int message:string = Bool; -help.getCdnConfig#52029342 = CdnConfig; -help.getRecentMeUrls#3dc0f114 referer:string = help.RecentMeUrls; -help.getTermsOfServiceUpdate#2ca51fd1 = help.TermsOfServiceUpdate; -help.acceptTermsOfService#ee72f79a id:DataJSON = Bool; -help.getDeepLinkInfo#3fedc75f path:string = help.DeepLinkInfo; -help.getAppConfig#61e3f854 hash:int = help.AppConfig; -help.saveAppLog#6f02f748 events:Vector = Bool; -help.getPassportConfig#c661ad08 hash:int = help.PassportConfig; -help.getSupportName#d360e72c = help.SupportName; -help.getUserInfo#38a08d3 user_id:InputUser = help.UserInfo; -help.editUserInfo#66b91b70 user_id:InputUser message:string entities:Vector = help.UserInfo; -help.getPromoData#c0977421 = help.PromoData; -help.hidePromoData#1e251c95 peer:InputPeer = Bool; -help.dismissSuggestion#f50dbaa1 peer:InputPeer suggestion:string = Bool; -help.getCountriesList#735787a8 lang_code:string hash:int = help.CountriesList; -help.getPremiumPromo#b81b93d4 = help.PremiumPromo; -help.getPeerColors#da80f42f hash:int = help.PeerColors; -help.getPeerProfileColors#abcfa9fd hash:int = help.PeerColors; -help.getTimezonesList#49b30240 hash:int = help.TimezonesList; - -channels.readHistory#cc104937 channel:InputChannel max_id:int = Bool; -channels.deleteMessages#84c1fd4e channel:InputChannel id:Vector = messages.AffectedMessages; -channels.reportSpam#f44a8315 channel:InputChannel participant:InputPeer id:Vector = Bool; -channels.getMessages#ad8c9a23 channel:InputChannel id:Vector = messages.Messages; -channels.getParticipants#77ced9d0 channel:InputChannel filter:ChannelParticipantsFilter offset:int limit:int hash:long = channels.ChannelParticipants; -channels.getParticipant#a0ab6cc6 channel:InputChannel participant:InputPeer = channels.ChannelParticipant; -channels.getChannels#a7f6bbb id:Vector = messages.Chats; -channels.getFullChannel#8736a09 channel:InputChannel = messages.ChatFull; -channels.createChannel#91006707 flags:# broadcast:flags.0?true megagroup:flags.1?true for_import:flags.3?true forum:flags.5?true title:string about:string geo_point:flags.2?InputGeoPoint address:flags.2?string ttl_period:flags.4?int = Updates; -channels.editAdmin#9a98ad68 flags:# channel:InputChannel user_id:InputUser admin_rights:ChatAdminRights rank:flags.0?string = Updates; -channels.editTitle#566decd0 channel:InputChannel title:string = Updates; -channels.editPhoto#f12e57c9 channel:InputChannel photo:InputChatPhoto = Updates; -channels.checkUsername#10e6bd2c channel:InputChannel username:string = Bool; -channels.updateUsername#3514b3de channel:InputChannel username:string = Bool; -channels.joinChannel#24b524c5 channel:InputChannel = Updates; -channels.leaveChannel#f836aa95 channel:InputChannel = Updates; -channels.inviteToChannel#c9e33d54 channel:InputChannel users:Vector = messages.InvitedUsers; -channels.deleteChannel#c0111fe3 channel:InputChannel = Updates; -channels.exportMessageLink#e63fadeb flags:# grouped:flags.0?true thread:flags.1?true channel:InputChannel id:int = ExportedMessageLink; -channels.toggleSignatures#418d549c flags:# signatures_enabled:flags.0?true profiles_enabled:flags.1?true channel:InputChannel = Updates; -channels.getAdminedPublicChannels#f8b036af flags:# by_location:flags.0?true check_limit:flags.1?true for_personal:flags.2?true = messages.Chats; -channels.editBanned#96e6cd81 channel:InputChannel participant:InputPeer banned_rights:ChatBannedRights = Updates; -channels.getAdminLog#33ddf480 flags:# channel:InputChannel q:string events_filter:flags.0?ChannelAdminLogEventsFilter admins:flags.1?Vector max_id:long min_id:long limit:int = channels.AdminLogResults; -channels.setStickers#ea8ca4f9 channel:InputChannel stickerset:InputStickerSet = Bool; -channels.readMessageContents#eab5dc38 channel:InputChannel id:Vector = Bool; -channels.deleteHistory#9baa9647 flags:# for_everyone:flags.0?true channel:InputChannel max_id:int = Updates; -channels.togglePreHistoryHidden#eabbb94c channel:InputChannel enabled:Bool = Updates; -channels.getLeftChannels#8341ecc0 offset:int = messages.Chats; -channels.getGroupsForDiscussion#f5dad378 = messages.Chats; -channels.setDiscussionGroup#40582bb2 broadcast:InputChannel group:InputChannel = Bool; -channels.editLocation#58e63f6d channel:InputChannel geo_point:InputGeoPoint address:string = Bool; -channels.toggleSlowMode#edd49ef0 channel:InputChannel seconds:int = Updates; -channels.getInactiveChannels#11e831ee = messages.InactiveChats; -channels.convertToGigagroup#b290c69 channel:InputChannel = Updates; -channels.getSendAs#e785a43f flags:# for_paid_reactions:flags.0?true for_live_stories:flags.1?true peer:InputPeer = channels.SendAsPeers; -channels.deleteParticipantHistory#367544db channel:InputChannel participant:InputPeer = messages.AffectedHistory; -channels.toggleJoinToSend#e4cb9580 channel:InputChannel enabled:Bool = Updates; -channels.toggleJoinRequest#4c2985b6 channel:InputChannel enabled:Bool = Updates; -channels.reorderUsernames#b45ced1d channel:InputChannel order:Vector = Bool; -channels.toggleUsername#50f24105 channel:InputChannel username:string active:Bool = Bool; -channels.deactivateAllUsernames#a245dd3 channel:InputChannel = Bool; -channels.toggleForum#3ff75734 channel:InputChannel enabled:Bool tabs:Bool = Updates; -channels.toggleAntiSpam#68f3e4eb channel:InputChannel enabled:Bool = Updates; -channels.reportAntiSpamFalsePositive#a850a693 channel:InputChannel msg_id:int = Bool; -channels.toggleParticipantsHidden#6a6e7854 channel:InputChannel enabled:Bool = Updates; -channels.updateColor#d8aa3671 flags:# for_profile:flags.1?true channel:InputChannel color:flags.2?int background_emoji_id:flags.0?long = Updates; -channels.toggleViewForumAsMessages#9738bb15 channel:InputChannel enabled:Bool = Updates; -channels.getChannelRecommendations#25a71742 flags:# channel:flags.0?InputChannel = messages.Chats; -channels.updateEmojiStatus#f0d3e6a8 channel:InputChannel emoji_status:EmojiStatus = Updates; -channels.setBoostsToUnblockRestrictions#ad399cee channel:InputChannel boosts:int = Updates; -channels.setEmojiStickers#3cd930b7 channel:InputChannel stickerset:InputStickerSet = Bool; -channels.restrictSponsoredMessages#9ae91519 channel:InputChannel restricted:Bool = Updates; -channels.searchPosts#f2c4f24d flags:# hashtag:flags.0?string query:flags.1?string offset_rate:int offset_peer:InputPeer offset_id:int limit:int allow_paid_stars:flags.2?long = messages.Messages; -channels.updatePaidMessagesPrice#4b12327b flags:# broadcast_messages_allowed:flags.0?true channel:InputChannel send_paid_messages_stars:long = Updates; -channels.toggleAutotranslation#167fc0a1 channel:InputChannel enabled:Bool = Updates; -channels.getMessageAuthor#ece2a0e6 channel:InputChannel id:int = User; -channels.checkSearchPostsFlood#22567115 flags:# query:flags.0?string = SearchPostsFlood; -channels.setMainProfileTab#3583fcb1 channel:InputChannel tab:ProfileTab = Bool; - -bots.sendCustomRequest#aa2769ed custom_method:string params:DataJSON = DataJSON; -bots.answerWebhookJSONQuery#e6213f4d query_id:long data:DataJSON = Bool; -bots.setBotCommands#517165a scope:BotCommandScope lang_code:string commands:Vector = Bool; -bots.resetBotCommands#3d8de0f9 scope:BotCommandScope lang_code:string = Bool; -bots.getBotCommands#e34c0dd6 scope:BotCommandScope lang_code:string = Vector; -bots.setBotMenuButton#4504d54f user_id:InputUser button:BotMenuButton = Bool; -bots.getBotMenuButton#9c60eb28 user_id:InputUser = BotMenuButton; -bots.setBotBroadcastDefaultAdminRights#788464e1 admin_rights:ChatAdminRights = Bool; -bots.setBotGroupDefaultAdminRights#925ec9ea admin_rights:ChatAdminRights = Bool; -bots.setBotInfo#10cf3123 flags:# bot:flags.2?InputUser lang_code:string name:flags.3?string about:flags.0?string description:flags.1?string = Bool; -bots.getBotInfo#dcd914fd flags:# bot:flags.0?InputUser lang_code:string = bots.BotInfo; -bots.reorderUsernames#9709b1c2 bot:InputUser order:Vector = Bool; -bots.toggleUsername#53ca973 bot:InputUser username:string active:Bool = Bool; -bots.canSendMessage#1359f4e6 bot:InputUser = Bool; -bots.allowSendMessage#f132e3ef bot:InputUser = Updates; -bots.invokeWebViewCustomMethod#87fc5e7 bot:InputUser custom_method:string params:DataJSON = DataJSON; -bots.getPopularAppBots#c2510192 offset:string limit:int = bots.PopularAppBots; -bots.addPreviewMedia#17aeb75a bot:InputUser lang_code:string media:InputMedia = BotPreviewMedia; -bots.editPreviewMedia#8525606f bot:InputUser lang_code:string media:InputMedia new_media:InputMedia = BotPreviewMedia; -bots.deletePreviewMedia#2d0135b3 bot:InputUser lang_code:string media:Vector = Bool; -bots.reorderPreviewMedias#b627f3aa bot:InputUser lang_code:string order:Vector = Bool; -bots.getPreviewInfo#423ab3ad bot:InputUser lang_code:string = bots.PreviewInfo; -bots.getPreviewMedias#a2a5594d bot:InputUser = Vector; -bots.updateUserEmojiStatus#ed9f30c5 user_id:InputUser emoji_status:EmojiStatus = Bool; -bots.toggleUserEmojiStatusPermission#6de6392 bot:InputUser enabled:Bool = Bool; -bots.checkDownloadFileParams#50077589 bot:InputUser file_name:string url:string = Bool; -bots.getAdminedBots#b0711d83 = Vector; -bots.updateStarRefProgram#778b5ab3 flags:# bot:InputUser commission_permille:int duration_months:flags.0?int = StarRefProgram; -bots.setCustomVerification#8b89dfbd flags:# enabled:flags.1?true bot:flags.0?InputUser peer:InputPeer custom_description:flags.2?string = Bool; -bots.getBotRecommendations#a1b70815 bot:InputUser = users.Users; -bots.checkUsername#87f2219b username:string = Bool; -bots.createBot#e5b17f2b flags:# via_deeplink:flags.0?true name:string username:string manager_id:InputUser = User; -bots.exportBotToken#bd0d99eb bot:InputUser revoke:Bool = bots.ExportedBotToken; -bots.requestWebViewButton#31a2a35e user_id:InputUser button:KeyboardButton = bots.RequestedButton; -bots.getRequestedWebViewButton#bf25b7f3 bot:InputUser webapp_req_id:string = KeyboardButton; -bots.getAccessSettings#213853a3 bot:InputUser = bots.AccessSettings; -bots.editAccessSettings#31813cd8 flags:# restricted:flags.0?true bot:InputUser add_users:flags.1?Vector = Bool; - -payments.getPaymentForm#37148dbb flags:# invoice:InputInvoice theme_params:flags.0?DataJSON = payments.PaymentForm; -payments.getPaymentReceipt#2478d1cc peer:InputPeer msg_id:int = payments.PaymentReceipt; -payments.validateRequestedInfo#b6c8f12b flags:# save:flags.0?true invoice:InputInvoice info:PaymentRequestedInfo = payments.ValidatedRequestedInfo; -payments.sendPaymentForm#2d03522f flags:# form_id:long invoice:InputInvoice requested_info_id:flags.0?string shipping_option_id:flags.1?string credentials:InputPaymentCredentials tip_amount:flags.2?long = payments.PaymentResult; -payments.getSavedInfo#227d824b = payments.SavedInfo; -payments.clearSavedInfo#d83d70c1 flags:# credentials:flags.0?true info:flags.1?true = Bool; -payments.getBankCardData#2e79d779 number:string = payments.BankCardData; -payments.exportInvoice#f91b065 invoice_media:InputMedia = payments.ExportedInvoice; -payments.assignAppStoreTransaction#80ed747d receipt:bytes purpose:InputStorePaymentPurpose = Updates; -payments.assignPlayMarketTransaction#dffd50d3 receipt:DataJSON purpose:InputStorePaymentPurpose = Updates; -payments.getPremiumGiftCodeOptions#2757ba54 flags:# boost_peer:flags.0?InputPeer = Vector; -payments.checkGiftCode#8e51b4c1 slug:string = payments.CheckedGiftCode; -payments.applyGiftCode#f6e26854 slug:string = Updates; -payments.getGiveawayInfo#f4239425 peer:InputPeer msg_id:int = payments.GiveawayInfo; -payments.launchPrepaidGiveaway#5ff58f20 peer:InputPeer giveaway_id:long purpose:InputStorePaymentPurpose = Updates; -payments.getStarsTopupOptions#c00ec7d3 = Vector; -payments.getStarsStatus#4ea9b3bf flags:# ton:flags.0?true peer:InputPeer = payments.StarsStatus; -payments.getStarsTransactions#69da4557 flags:# inbound:flags.0?true outbound:flags.1?true ascending:flags.2?true ton:flags.4?true subscription_id:flags.3?string peer:InputPeer offset:string limit:int = payments.StarsStatus; -payments.sendStarsForm#7998c914 form_id:long invoice:InputInvoice = payments.PaymentResult; -payments.refundStarsCharge#25ae8f4a user_id:InputUser charge_id:string = Updates; -payments.getStarsRevenueStats#d91ffad6 flags:# dark:flags.0?true ton:flags.1?true peer:InputPeer = payments.StarsRevenueStats; -payments.getStarsRevenueWithdrawalUrl#2433dc92 flags:# ton:flags.0?true peer:InputPeer amount:flags.1?long password:InputCheckPasswordSRP = payments.StarsRevenueWithdrawalUrl; -payments.getStarsRevenueAdsAccountUrl#d1d7efc5 peer:InputPeer = payments.StarsRevenueAdsAccountUrl; -payments.getStarsTransactionsByID#2dca16b8 flags:# ton:flags.0?true peer:InputPeer id:Vector = payments.StarsStatus; -payments.getStarsGiftOptions#d3c96bc8 flags:# user_id:flags.0?InputUser = Vector; -payments.getStarsSubscriptions#32512c5 flags:# missing_balance:flags.0?true peer:InputPeer offset:string = payments.StarsStatus; -payments.changeStarsSubscription#c7770878 flags:# peer:InputPeer subscription_id:string canceled:flags.0?Bool = Bool; -payments.fulfillStarsSubscription#cc5bebb3 peer:InputPeer subscription_id:string = Bool; -payments.getStarsGiveawayOptions#bd1efd3e = Vector; -payments.getStarGifts#c4563590 hash:int = payments.StarGifts; -payments.saveStarGift#2a2a697c flags:# unsave:flags.0?true stargift:InputSavedStarGift = Bool; -payments.convertStarGift#74bf076b stargift:InputSavedStarGift = Bool; -payments.botCancelStarsSubscription#6dfa0622 flags:# restore:flags.0?true user_id:InputUser charge_id:string = Bool; -payments.getConnectedStarRefBots#5869a553 flags:# peer:InputPeer offset_date:flags.2?int offset_link:flags.2?string limit:int = payments.ConnectedStarRefBots; -payments.getConnectedStarRefBot#b7d998f0 peer:InputPeer bot:InputUser = payments.ConnectedStarRefBots; -payments.getSuggestedStarRefBots#d6b48f7 flags:# order_by_revenue:flags.0?true order_by_date:flags.1?true peer:InputPeer offset:string limit:int = payments.SuggestedStarRefBots; -payments.connectStarRefBot#7ed5348a peer:InputPeer bot:InputUser = payments.ConnectedStarRefBots; -payments.editConnectedStarRefBot#e4fca4a3 flags:# revoked:flags.0?true peer:InputPeer link:string = payments.ConnectedStarRefBots; -payments.getStarGiftUpgradePreview#9c9abcb1 gift_id:long = payments.StarGiftUpgradePreview; -payments.upgradeStarGift#aed6e4f5 flags:# keep_original_details:flags.0?true stargift:InputSavedStarGift = Updates; -payments.transferStarGift#7f18176a stargift:InputSavedStarGift to_id:InputPeer = Updates; -payments.getUniqueStarGift#a1974d72 slug:string = payments.UniqueStarGift; -payments.getSavedStarGifts#a319e569 flags:# exclude_unsaved:flags.0?true exclude_saved:flags.1?true exclude_unlimited:flags.2?true exclude_unique:flags.4?true sort_by_value:flags.5?true exclude_upgradable:flags.7?true exclude_unupgradable:flags.8?true peer_color_available:flags.9?true exclude_hosted:flags.10?true peer:InputPeer collection_id:flags.6?int offset:string limit:int = payments.SavedStarGifts; -payments.getSavedStarGift#b455a106 stargift:Vector = payments.SavedStarGifts; -payments.getStarGiftWithdrawalUrl#d06e93a8 stargift:InputSavedStarGift password:InputCheckPasswordSRP = payments.StarGiftWithdrawalUrl; -payments.toggleChatStarGiftNotifications#60eaefa1 flags:# enabled:flags.0?true peer:InputPeer = Bool; -payments.toggleStarGiftsPinnedToTop#1513e7b0 peer:InputPeer stargift:Vector = Bool; -payments.canPurchaseStore#4fdc5ea7 purpose:InputStorePaymentPurpose = Bool; -payments.getResaleStarGifts#7a5fa236 flags:# sort_by_price:flags.1?true sort_by_num:flags.2?true for_craft:flags.4?true stars_only:flags.5?true attributes_hash:flags.0?long gift_id:long attributes:flags.3?Vector offset:string limit:int = payments.ResaleStarGifts; -payments.updateStarGiftPrice#edbe6ccb stargift:InputSavedStarGift resell_amount:StarsAmount = Updates; -payments.createStarGiftCollection#1f4a0e87 peer:InputPeer title:string stargift:Vector = StarGiftCollection; -payments.updateStarGiftCollection#4fddbee7 flags:# peer:InputPeer collection_id:int title:flags.0?string delete_stargift:flags.1?Vector add_stargift:flags.2?Vector order:flags.3?Vector = StarGiftCollection; -payments.reorderStarGiftCollections#c32af4cc peer:InputPeer order:Vector = Bool; -payments.deleteStarGiftCollection#ad5648e8 peer:InputPeer collection_id:int = Bool; -payments.getStarGiftCollections#981b91dd peer:InputPeer hash:long = payments.StarGiftCollections; -payments.getUniqueStarGiftValueInfo#4365af6b slug:string = payments.UniqueStarGiftValueInfo; -payments.checkCanSendGift#c0c4edc9 gift_id:long = payments.CheckCanSendGiftResult; -payments.getStarGiftAuctionState#5c9ff4d6 auction:InputStarGiftAuction version:int = payments.StarGiftAuctionState; -payments.getStarGiftAuctionAcquiredGifts#6ba2cbec gift_id:long = payments.StarGiftAuctionAcquiredGifts; -payments.getStarGiftActiveAuctions#a5d0514d hash:long = payments.StarGiftActiveAuctions; -payments.resolveStarGiftOffer#e9ce781c flags:# decline:flags.0?true offer_msg_id:int = Updates; -payments.sendStarGiftOffer#8fb86b41 flags:# peer:InputPeer slug:string price:StarsAmount duration:int random_id:long allow_paid_stars:flags.0?long = Updates; -payments.getStarGiftUpgradeAttributes#6d038b58 gift_id:long = payments.StarGiftUpgradeAttributes; -payments.getCraftStarGifts#fd05dd00 gift_id:long offset:string limit:int = payments.SavedStarGifts; -payments.craftStarGift#b0f9684f stargift:Vector = Updates; - -stickers.createStickerSet#9021ab67 flags:# masks:flags.0?true emojis:flags.5?true text_color:flags.6?true user_id:InputUser title:string short_name:string thumb:flags.2?InputDocument stickers:Vector software:flags.3?string = messages.StickerSet; -stickers.removeStickerFromSet#f7760f51 sticker:InputDocument = messages.StickerSet; -stickers.changeStickerPosition#ffb6d4ca sticker:InputDocument position:int = messages.StickerSet; -stickers.addStickerToSet#8653febe stickerset:InputStickerSet sticker:InputStickerSetItem = messages.StickerSet; -stickers.setStickerSetThumb#a76a5392 flags:# stickerset:InputStickerSet thumb:flags.0?InputDocument thumb_document_id:flags.1?long = messages.StickerSet; -stickers.checkShortName#284b3639 short_name:string = Bool; -stickers.suggestShortName#4dafc503 title:string = stickers.SuggestedShortName; -stickers.changeSticker#f5537ebc flags:# sticker:InputDocument emoji:flags.0?string mask_coords:flags.1?MaskCoords keywords:flags.2?string = messages.StickerSet; -stickers.renameStickerSet#124b1c00 stickerset:InputStickerSet title:string = messages.StickerSet; -stickers.deleteStickerSet#87704394 stickerset:InputStickerSet = Bool; -stickers.replaceSticker#4696459a sticker:InputDocument new_sticker:InputStickerSetItem = messages.StickerSet; - -phone.getCallConfig#55451fa9 = DataJSON; -phone.requestCall#42ff96ed flags:# video:flags.0?true user_id:InputUser random_id:int g_a_hash:bytes protocol:PhoneCallProtocol = phone.PhoneCall; -phone.acceptCall#3bd2b4a0 peer:InputPhoneCall g_b:bytes protocol:PhoneCallProtocol = phone.PhoneCall; -phone.confirmCall#2efe1722 peer:InputPhoneCall g_a:bytes key_fingerprint:long protocol:PhoneCallProtocol = phone.PhoneCall; -phone.receivedCall#17d54f61 peer:InputPhoneCall = Bool; -phone.discardCall#b2cbc1c0 flags:# video:flags.0?true peer:InputPhoneCall duration:int reason:PhoneCallDiscardReason connection_id:long = Updates; -phone.setCallRating#59ead627 flags:# user_initiative:flags.0?true peer:InputPhoneCall rating:int comment:string = Updates; -phone.saveCallDebug#277add7e peer:InputPhoneCall debug:DataJSON = Bool; -phone.sendSignalingData#ff7a9383 peer:InputPhoneCall data:bytes = Bool; -phone.createGroupCall#48cdc6d8 flags:# rtmp_stream:flags.2?true peer:InputPeer random_id:int title:flags.0?string schedule_date:flags.1?int = Updates; -phone.joinGroupCall#8fb53057 flags:# muted:flags.0?true video_stopped:flags.2?true call:InputGroupCall join_as:InputPeer invite_hash:flags.1?string public_key:flags.3?int256 block:flags.3?bytes params:DataJSON = Updates; -phone.leaveGroupCall#500377f9 call:InputGroupCall source:int = Updates; -phone.inviteToGroupCall#7b393160 call:InputGroupCall users:Vector = Updates; -phone.discardGroupCall#7a777135 call:InputGroupCall = Updates; -phone.toggleGroupCallSettings#974392f2 flags:# reset_invite_hash:flags.1?true call:InputGroupCall join_muted:flags.0?Bool messages_enabled:flags.2?Bool send_paid_messages_stars:flags.3?long = Updates; -phone.getGroupCall#41845db call:InputGroupCall limit:int = phone.GroupCall; -phone.getGroupParticipants#c558d8ab call:InputGroupCall ids:Vector sources:Vector offset:string limit:int = phone.GroupParticipants; -phone.checkGroupCall#b59cf977 call:InputGroupCall sources:Vector = Vector; -phone.toggleGroupCallRecord#f128c708 flags:# start:flags.0?true video:flags.2?true call:InputGroupCall title:flags.1?string video_portrait:flags.2?Bool = Updates; -phone.editGroupCallParticipant#a5273abf flags:# call:InputGroupCall participant:InputPeer muted:flags.0?Bool volume:flags.1?int raise_hand:flags.2?Bool video_stopped:flags.3?Bool video_paused:flags.4?Bool presentation_paused:flags.5?Bool = Updates; -phone.editGroupCallTitle#1ca6ac0a call:InputGroupCall title:string = Updates; -phone.getGroupCallJoinAs#ef7c213a peer:InputPeer = phone.JoinAsPeers; -phone.exportGroupCallInvite#e6aa647f flags:# can_self_unmute:flags.0?true call:InputGroupCall = phone.ExportedGroupCallInvite; -phone.toggleGroupCallStartSubscription#219c34e6 call:InputGroupCall subscribed:Bool = Updates; -phone.startScheduledGroupCall#5680e342 call:InputGroupCall = Updates; -phone.saveDefaultGroupCallJoinAs#575e1f8c peer:InputPeer join_as:InputPeer = Bool; -phone.joinGroupCallPresentation#cbea6bc4 call:InputGroupCall params:DataJSON = Updates; -phone.leaveGroupCallPresentation#1c50d144 call:InputGroupCall = Updates; -phone.getGroupCallStreamChannels#1ab21940 call:InputGroupCall = phone.GroupCallStreamChannels; -phone.getGroupCallStreamRtmpUrl#5af4c73a flags:# live_story:flags.0?true peer:InputPeer revoke:Bool = phone.GroupCallStreamRtmpUrl; -phone.saveCallLog#41248786 peer:InputPhoneCall file:InputFile = Bool; -phone.createConferenceCall#7d0444bb flags:# muted:flags.0?true video_stopped:flags.2?true join:flags.3?true random_id:int public_key:flags.3?int256 block:flags.3?bytes params:flags.3?DataJSON = Updates; -phone.deleteConferenceCallParticipants#8ca60525 flags:# only_left:flags.0?true kick:flags.1?true call:InputGroupCall ids:Vector block:bytes = Updates; -phone.sendConferenceCallBroadcast#c6701900 call:InputGroupCall block:bytes = Updates; -phone.inviteConferenceCallParticipant#bcf22685 flags:# video:flags.0?true call:InputGroupCall user_id:InputUser = Updates; -phone.declineConferenceCallInvite#3c479971 msg_id:int = Updates; -phone.getGroupCallChainBlocks#ee9f88a6 call:InputGroupCall sub_chain_id:int offset:int limit:int = Updates; -phone.sendGroupCallMessage#b1d11410 flags:# call:InputGroupCall random_id:long message:TextWithEntities allow_paid_stars:flags.0?long send_as:flags.1?InputPeer = Updates; -phone.sendGroupCallEncryptedMessage#e5afa56d call:InputGroupCall encrypted_message:bytes = Bool; -phone.deleteGroupCallMessages#f64f54f7 flags:# report_spam:flags.0?true call:InputGroupCall messages:Vector = Updates; -phone.deleteGroupCallParticipantMessages#1dbfeca0 flags:# report_spam:flags.0?true call:InputGroupCall participant:InputPeer = Updates; -phone.getGroupCallStars#6f636302 call:InputGroupCall = phone.GroupCallStars; -phone.saveDefaultSendAs#4167add1 call:InputGroupCall send_as:InputPeer = Bool; - -langpack.getLangPack#f2f2330a lang_pack:string lang_code:string = LangPackDifference; -langpack.getStrings#efea3803 lang_pack:string lang_code:string keys:Vector = Vector; -langpack.getDifference#cd984aa5 lang_pack:string lang_code:string from_version:int = LangPackDifference; -langpack.getLanguages#42c6978f lang_pack:string = Vector; -langpack.getLanguage#6a596502 lang_pack:string lang_code:string = LangPackLanguage; - -folders.editPeerFolders#6847d0ab folder_peers:Vector = Updates; - -stats.getBroadcastStats#ab42441a flags:# dark:flags.0?true channel:InputChannel = stats.BroadcastStats; -stats.loadAsyncGraph#621d5fa0 flags:# token:string x:flags.0?long = StatsGraph; -stats.getMegagroupStats#dcdf8607 flags:# dark:flags.0?true channel:InputChannel = stats.MegagroupStats; -stats.getMessagePublicForwards#5f150144 channel:InputChannel msg_id:int offset:string limit:int = stats.PublicForwards; -stats.getMessageStats#b6e0a3f5 flags:# dark:flags.0?true channel:InputChannel msg_id:int = stats.MessageStats; -stats.getStoryStats#374fef40 flags:# dark:flags.0?true peer:InputPeer id:int = stats.StoryStats; -stats.getStoryPublicForwards#a6437ef6 peer:InputPeer id:int offset:string limit:int = stats.PublicForwards; -stats.getPollStats#c27dfa68 flags:# dark:flags.0?true peer:InputPeer msg_id:int = stats.PollStats; - -chatlists.exportChatlistInvite#8472478e chatlist:InputChatlist title:string peers:Vector = chatlists.ExportedChatlistInvite; -chatlists.deleteExportedInvite#719c5c5e chatlist:InputChatlist slug:string = Bool; -chatlists.editExportedInvite#653db63d flags:# chatlist:InputChatlist slug:string title:flags.1?string peers:flags.2?Vector = ExportedChatlistInvite; -chatlists.getExportedInvites#ce03da83 chatlist:InputChatlist = chatlists.ExportedInvites; -chatlists.checkChatlistInvite#41c10fff slug:string = chatlists.ChatlistInvite; -chatlists.joinChatlistInvite#a6b1e39a slug:string peers:Vector = Updates; -chatlists.getChatlistUpdates#89419521 chatlist:InputChatlist = chatlists.ChatlistUpdates; -chatlists.joinChatlistUpdates#e089f8f5 chatlist:InputChatlist peers:Vector = Updates; -chatlists.hideChatlistUpdates#66e486fb chatlist:InputChatlist = Bool; -chatlists.getLeaveChatlistSuggestions#fdbcd714 chatlist:InputChatlist = Vector; -chatlists.leaveChatlist#74fae13a chatlist:InputChatlist peers:Vector = Updates; - -stories.canSendStory#30eb63f0 peer:InputPeer = stories.CanSendStoryCount; -stories.sendStory#8f9e6898 flags:# pinned:flags.2?true noforwards:flags.4?true fwd_modified:flags.7?true peer:InputPeer media:InputMedia media_areas:flags.5?Vector caption:flags.0?string entities:flags.1?Vector privacy_rules:Vector random_id:long period:flags.3?int fwd_from_id:flags.6?InputPeer fwd_from_story:flags.6?int albums:flags.8?Vector music:flags.9?InputDocument = Updates; -stories.editStory#2c63a72b flags:# peer:InputPeer id:int media:flags.0?InputMedia media_areas:flags.3?Vector caption:flags.1?string entities:flags.1?Vector privacy_rules:flags.2?Vector music:flags.4?InputDocument = Updates; -stories.deleteStories#ae59db5f peer:InputPeer id:Vector = Vector; -stories.togglePinned#9a75a1ef peer:InputPeer id:Vector pinned:Bool = Vector; -stories.getAllStories#eeb0d625 flags:# next:flags.1?true hidden:flags.2?true state:flags.0?string = stories.AllStories; -stories.getPinnedStories#5821a5dc peer:InputPeer offset_id:int limit:int = stories.Stories; -stories.getStoriesArchive#b4352016 peer:InputPeer offset_id:int limit:int = stories.Stories; -stories.getStoriesByID#5774ca74 peer:InputPeer id:Vector = stories.Stories; -stories.toggleAllStoriesHidden#7c2557c4 hidden:Bool = Bool; -stories.readStories#a556dac8 peer:InputPeer max_id:int = Vector; -stories.incrementStoryViews#b2028afb peer:InputPeer id:Vector = Bool; -stories.getStoryViewsList#7ed23c57 flags:# just_contacts:flags.0?true reactions_first:flags.2?true forwards_first:flags.3?true peer:InputPeer q:flags.1?string id:int offset:string limit:int = stories.StoryViewsList; -stories.getStoriesViews#28e16cc8 peer:InputPeer id:Vector = stories.StoryViews; -stories.exportStoryLink#7b8def20 peer:InputPeer id:int = ExportedStoryLink; -stories.report#19d8eb45 peer:InputPeer id:Vector option:bytes message:string = ReportResult; -stories.activateStealthMode#57bbd166 flags:# past:flags.0?true future:flags.1?true = Updates; -stories.sendReaction#7fd736b2 flags:# add_to_recent:flags.0?true peer:InputPeer story_id:int reaction:Reaction = Updates; -stories.getPeerStories#2c4ada50 peer:InputPeer = stories.PeerStories; -stories.getAllReadPeerStories#9b5ae7f9 = Updates; -stories.getPeerMaxIDs#78499170 id:Vector = Vector; -stories.getChatsToSend#a56a8b60 = messages.Chats; -stories.togglePeerStoriesHidden#bd0415c4 peer:InputPeer hidden:Bool = Bool; -stories.getStoryReactionsList#b9b2881f flags:# forwards_first:flags.2?true peer:InputPeer id:int reaction:flags.0?Reaction offset:flags.1?string limit:int = stories.StoryReactionsList; -stories.togglePinnedToTop#b297e9b peer:InputPeer id:Vector = Bool; -stories.searchPosts#d1810907 flags:# hashtag:flags.0?string area:flags.1?MediaArea peer:flags.2?InputPeer offset:string limit:int = stories.FoundStories; -stories.createAlbum#a36396e5 peer:InputPeer title:string stories:Vector = StoryAlbum; -stories.updateAlbum#5e5259b6 flags:# peer:InputPeer album_id:int title:flags.0?string delete_stories:flags.1?Vector add_stories:flags.2?Vector order:flags.3?Vector = StoryAlbum; -stories.reorderAlbums#8535fbd9 peer:InputPeer order:Vector = Bool; -stories.deleteAlbum#8d3456d0 peer:InputPeer album_id:int = Bool; -stories.getAlbums#25b3eac7 peer:InputPeer hash:long = stories.Albums; -stories.getAlbumStories#ac806d61 peer:InputPeer album_id:int offset:int limit:int = stories.Stories; -stories.startLive#d069ccde flags:# pinned:flags.2?true noforwards:flags.4?true rtmp_stream:flags.5?true peer:InputPeer caption:flags.0?string entities:flags.1?Vector privacy_rules:Vector random_id:long messages_enabled:flags.6?Bool send_paid_messages_stars:flags.7?long = Updates; - -premium.getBoostsList#60f67660 flags:# gifts:flags.0?true peer:InputPeer offset:string limit:int = premium.BoostsList; -premium.getMyBoosts#be77b4a = premium.MyBoosts; -premium.applyBoost#6b7da746 flags:# slots:flags.0?Vector peer:InputPeer = premium.MyBoosts; -premium.getBoostsStatus#42f1f61 peer:InputPeer = premium.BoostsStatus; -premium.getUserBoosts#39854d1f peer:InputPeer user_id:InputUser = premium.BoostsList; - -smsjobs.isEligibleToJoin#edc39d0 = smsjobs.EligibilityToJoin; -smsjobs.join#a74ece2d = Bool; -smsjobs.leave#9898ad73 = Bool; -smsjobs.updateSettings#93fa0bf flags:# allow_international:flags.0?true = Bool; -smsjobs.getStatus#10a698e8 = smsjobs.Status; -smsjobs.getSmsJob#778d902f job_id:string = SmsJob; -smsjobs.finishJob#4f1ebf24 flags:# job_id:string error:flags.0?string = Bool; - -fragment.getCollectibleInfo#be1e85ba collectible:InputCollectible = fragment.CollectibleInfo; - -aicompose.createTone#4aa83913 flags:# display_author:flags.0?true emoji_id:long title:string prompt:string = AiComposeTone; -aicompose.updateTone#903bcf59 flags:# tone:InputAiComposeTone display_author:flags.0?Bool emoji_id:flags.1?long title:flags.2?string prompt:flags.3?string = AiComposeTone; -aicompose.saveTone#1782cbb1 tone:InputAiComposeTone unsave:Bool = Bool; -aicompose.deleteTone#dd39316a tone:InputAiComposeTone = Bool; -aicompose.getTone#b2e8ba03 tone:InputAiComposeTone = aicompose.Tones; -aicompose.getTones#abd59201 hash:long = aicompose.Tones; -aicompose.getToneExample#d1b4ab14 tone:InputAiComposeTone num:int = AiComposeToneExample; - -// LAYER 225 diff --git a/patches/madelineproto-formatted-date/formatted-date-entity.patch b/patches/madelineproto-formatted-date/formatted-date-entity.patch deleted file mode 100644 index 6189512..0000000 --- a/patches/madelineproto-formatted-date/formatted-date-entity.patch +++ /dev/null @@ -1,126 +0,0 @@ ---- a/src/EventHandler/Message/Entities/MessageEntity.php -+++ b/src/EventHandler/Message/Entities/MessageEntity.php -@@ -57,6 +57,8 @@ - 'bank_card', 'messageEntityBankCard' => new BankCard($entity['offset'], $entity['length']), - 'spoiler', 'messageEntitySpoiler' => new Spoiler($entity['offset'], $entity['length']), - 'custom_emoji', 'messageEntityCustomEmoji' => new CustomEmoji($entity['offset'], $entity['length'], $entity['document_id'] ?? $entity['custom_emoji_id']), -+ 'date_time' => FormattedDate::fromBotAPI($entity), -+ 'messageEntityFormattedDate' => FormattedDate::fromMTProto($entity), - default => throw new AssertionError("Unknown entity type: ".($entity['_'] ?? $entity['type'])) - }; - } ---- /dev/null -+++ b/src/EventHandler/Message/Entities/FormattedDate.php -@@ -0,0 +1,112 @@ -+ 2147483647) { -+ throw new \InvalidArgumentException('Formatted-date fields require nonnegative native int32 values.'); -+ } -+ } -+ if (($relative && ($shortTime || $longTime || $shortDate || $longDate || $dayOfWeek)) -+ || ($shortTime && $longTime) || ($shortDate && $longDate)) { -+ throw new \InvalidArgumentException('Contradictory native formatted-date flags.'); -+ } -+ parent::__construct($offset, $length); -+ } -+ -+ public static function fromMTProto(array $entity): self -+ { -+ if (($entity['_'] ?? null) !== 'messageEntityFormattedDate') { -+ throw new \InvalidArgumentException('Expected the native formatted-date constructor.'); -+ } -+ return new self( -+ self::integer($entity, 'offset'), -+ self::integer($entity, 'length'), -+ self::integer($entity, 'date'), -+ self::flag($entity, 'relative'), -+ self::flag($entity, 'short_time'), -+ self::flag($entity, 'long_time'), -+ self::flag($entity, 'short_date'), -+ self::flag($entity, 'long_date'), -+ self::flag($entity, 'day_of_week') -+ ); -+ } -+ -+ public static function fromBotAPI(array $entity): self -+ { -+ $format = array_key_exists('date_time_format', $entity) ? $entity['date_time_format'] : ''; -+ if (($entity['type'] ?? null) !== 'date_time' || !is_string($format) -+ || preg_match('/^(?:r|w?[dD]?[tT]?)$/D', $format) !== 1) { -+ throw new \InvalidArgumentException('Expected an official date_time entity and valid date_time_format.'); -+ } -+ return new self( -+ self::integer($entity, 'offset'), -+ self::integer($entity, 'length'), -+ self::integer($entity, 'unix_time'), -+ $format === 'r', -+ str_contains($format, 't'), -+ str_contains($format, 'T'), -+ str_contains($format, 'd'), -+ str_contains($format, 'D'), -+ str_contains($format, 'w') -+ ); -+ } -+ -+ #[\Override] -+ public function toMTProto(): array -+ { -+ return ['_' => 'messageEntityFormattedDate', 'offset' => $this->offset, 'length' => $this->length, -+ 'date' => $this->date, 'relative' => $this->relative, 'short_time' => $this->shortTime, -+ 'long_time' => $this->longTime, 'short_date' => $this->shortDate, -+ 'long_date' => $this->longDate, 'day_of_week' => $this->dayOfWeek]; -+ } -+ -+ #[\Override] -+ public function toBotAPI(): array -+ { -+ $format = $this->relative ? 'r' : ($this->dayOfWeek ? 'w' : '') -+ . ($this->shortDate ? 'd' : ($this->longDate ? 'D' : '')) -+ . ($this->shortTime ? 't' : ($this->longTime ? 'T' : '')); -+ return ['type' => 'date_time', 'offset' => $this->offset, 'length' => $this->length, -+ 'unix_time' => $this->date, 'date_time_format' => $format]; -+ } -+ -+ private static function integer(array $entity, string $field): int -+ { -+ if (!array_key_exists($field, $entity) || !is_int($entity[$field])) { -+ throw new \InvalidArgumentException('Formatted-date field must be a native integer: ' . $field); -+ } -+ return $entity[$field]; -+ } -+ -+ private static function flag(array $entity, string $field): bool -+ { -+ $value = array_key_exists($field, $entity) ? $entity[$field] : false; -+ if (!is_bool($value)) { -+ throw new \InvalidArgumentException('Formatted-date flag must be a native boolean: ' . $field); -+ } -+ return $value; -+ } -+} diff --git a/patches/madelineproto-formatted-date/manifest.json b/patches/madelineproto-formatted-date/manifest.json deleted file mode 100644 index 9121a7d..0000000 --- a/patches/madelineproto-formatted-date/manifest.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "schema_version": 1, - "package": "danog/madelineproto", - "target": "src/EventHandler/Message/Entities/MessageEntity.php", - "approved": [ - { - "version": "8.7.0", - "commit": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "mode": "patch", - "baseline": "baseline/MessageEntity.php", - "original_sha256": "06a9d438cc198f56cfb745a2a3808932269033671146cf82f84ae88e8d6eae60", - "reviewed_output": "reviewed/MessageEntity.php", - "patched_sha256": "b265ed707326e1d71c7a8bdf8291f0b8c94a153b98a2c4c45c776fec3b374005", - "patch": "formatted-date-entity.patch", - "patch_sha256": "5c726acbc73ef6b4994d1c970f74952af007c2eee3c92773cf593e73e834b3d3", - "source_url": "https://github.com/danog/MadelineProto/blob/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/src/EventHandler/Message/Entities/MessageEntity.php", - "license_files": [ - { - "file": "upstream-LICENSE", - "sha256": "57c8ff33c9c0cfc3ef00e650a1cc910d7ee479a8bc509f6c9209a7c2a11399d6" - } - ], - "added_files": [ - { - "target": "src/EventHandler/Message/Entities/FormattedDate.php", - "original_state": "absent", - "reviewed_output": "reviewed/FormattedDate.php", - "patched_sha256": "ffe03d0d78215bc42968cd836c25b1f8a602f161fb55eba189b4102d9b99d5e5", - "license": "AGPL-3.0-or-later" - } - ], - "prerequisites": [ - { - "target": "src/TL_telegram_v225.tl", - "baseline": "baseline/TL_telegram_v225.tl", - "sha256": "539272f5ad8992ee97b61bd134fcf3a28a41ce720e806d0e7dc0e2e408c581f9", - "source_url": "https://github.com/danog/MadelineProto/blob/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/src/TL_telegram_v225.tl" - } - ] - } - ], - "provenance": { - "prepared_at": "2026-10-14", - "implementation": "Independently implemented from the locked SDK entity contract and official Telegram layer225/BotAPI specifications.", - "reference_exports": [ - { - "path": "local-reference/newsearch-v2/docker/patch-madeline-formatted-date.php", - "sha256": "c3091f61a401d8022b8ef1d228cf8c5f31a1094982de69a0be108e21885cb967" - }, - { - "path": "local-reference/newsearch-v2/docker/madeline-formatted-date/FormattedDate.php", - "sha256": "a9e3146e49a88bec469e67e53f5e27cffb1b5127cde547590f2e385ef02dd264" - } - ], - "reference_limitations": "Byte-identical psy new/release-r21-work export; no recoverable Git history. Conflicting MIT/proprietary metadata without standalone grant. Historical code is not redistributed. Paths are logical local-reference identifiers, not public download URLs.", - "upstream_license_file": "upstream-LICENSE", - "upstream_license_sha256": "57c8ff33c9c0cfc3ef00e650a1cc910d7ee479a8bc509f6c9209a7c2a11399d6" - } -} diff --git a/patches/madelineproto-formatted-date/reviewed/FormattedDate.php b/patches/madelineproto-formatted-date/reviewed/FormattedDate.php deleted file mode 100644 index a916a33..0000000 --- a/patches/madelineproto-formatted-date/reviewed/FormattedDate.php +++ /dev/null @@ -1,112 +0,0 @@ - 2147483647) { - throw new \InvalidArgumentException('Formatted-date fields require nonnegative native int32 values.'); - } - } - if (($relative && ($shortTime || $longTime || $shortDate || $longDate || $dayOfWeek)) - || ($shortTime && $longTime) || ($shortDate && $longDate)) { - throw new \InvalidArgumentException('Contradictory native formatted-date flags.'); - } - parent::__construct($offset, $length); - } - - public static function fromMTProto(array $entity): self - { - if (($entity['_'] ?? null) !== 'messageEntityFormattedDate') { - throw new \InvalidArgumentException('Expected the native formatted-date constructor.'); - } - return new self( - self::integer($entity, 'offset'), - self::integer($entity, 'length'), - self::integer($entity, 'date'), - self::flag($entity, 'relative'), - self::flag($entity, 'short_time'), - self::flag($entity, 'long_time'), - self::flag($entity, 'short_date'), - self::flag($entity, 'long_date'), - self::flag($entity, 'day_of_week') - ); - } - - public static function fromBotAPI(array $entity): self - { - $format = array_key_exists('date_time_format', $entity) ? $entity['date_time_format'] : ''; - if (($entity['type'] ?? null) !== 'date_time' || !is_string($format) - || preg_match('/^(?:r|w?[dD]?[tT]?)$/D', $format) !== 1) { - throw new \InvalidArgumentException('Expected an official date_time entity and valid date_time_format.'); - } - return new self( - self::integer($entity, 'offset'), - self::integer($entity, 'length'), - self::integer($entity, 'unix_time'), - $format === 'r', - str_contains($format, 't'), - str_contains($format, 'T'), - str_contains($format, 'd'), - str_contains($format, 'D'), - str_contains($format, 'w') - ); - } - - #[\Override] - public function toMTProto(): array - { - return ['_' => 'messageEntityFormattedDate', 'offset' => $this->offset, 'length' => $this->length, - 'date' => $this->date, 'relative' => $this->relative, 'short_time' => $this->shortTime, - 'long_time' => $this->longTime, 'short_date' => $this->shortDate, - 'long_date' => $this->longDate, 'day_of_week' => $this->dayOfWeek]; - } - - #[\Override] - public function toBotAPI(): array - { - $format = $this->relative ? 'r' : ($this->dayOfWeek ? 'w' : '') - . ($this->shortDate ? 'd' : ($this->longDate ? 'D' : '')) - . ($this->shortTime ? 't' : ($this->longTime ? 'T' : '')); - return ['type' => 'date_time', 'offset' => $this->offset, 'length' => $this->length, - 'unix_time' => $this->date, 'date_time_format' => $format]; - } - - private static function integer(array $entity, string $field): int - { - if (!array_key_exists($field, $entity) || !is_int($entity[$field])) { - throw new \InvalidArgumentException('Formatted-date field must be a native integer: ' . $field); - } - return $entity[$field]; - } - - private static function flag(array $entity, string $field): bool - { - $value = array_key_exists($field, $entity) ? $entity[$field] : false; - if (!is_bool($value)) { - throw new \InvalidArgumentException('Formatted-date flag must be a native boolean: ' . $field); - } - return $value; - } -} diff --git a/patches/madelineproto-formatted-date/reviewed/MessageEntity.php b/patches/madelineproto-formatted-date/reviewed/MessageEntity.php deleted file mode 100644 index df0e159..0000000 --- a/patches/madelineproto-formatted-date/reviewed/MessageEntity.php +++ /dev/null @@ -1,86 +0,0 @@ - $entities - * @return list - */ - public static function fromRawEntities(array $entities): array - { - return array_map(self::fromRawEntity(...), $entities); - } - - public static function fromRawEntity(array|self $entity): self - { - if ($entity instanceof self) { - return $entity; - } - return match ($entity['_'] ?? $entity['type']) { - 'mention', 'messageEntityMention' => new Mention($entity['offset'], $entity['length']), - 'hashtag', 'messageEntityHashtag' => new Hashtag($entity['offset'], $entity['length']), - 'bot_command', 'messageEntityBotCommand' => new BotCommand($entity['offset'], $entity['length']), - 'email', 'messageEntityEmail' => new Email($entity['offset'], $entity['length']), - 'bold', 'messageEntityBold' => new Bold($entity['offset'], $entity['length']), - 'italic', 'messageEntityItalic' => new Italic($entity['offset'], $entity['length']), - 'url', 'messageEntityUrl' => new Url($entity['offset'], $entity['length']), - 'code', 'messageEntityCode' => new Code($entity['offset'], $entity['length']), - /** @psalm-suppress MixedArgument */ - 'pre', 'messageEntityPre' => new Pre($entity['offset'], $entity['length'], $entity['language'] ?? ''), - 'text_link', 'messageEntityTextUrl' => new TextUrl($entity['offset'], $entity['length'], $entity['url']), - 'text_mention', 'messageEntityMentionName' => new MentionName($entity['offset'], $entity['length'], $entity['user_id'] ?? $entity['user']['id']), - 'inputMessageEntityMentionName' => new InputMentionName($entity['offset'], $entity['length'], $entity['user_id']), - 'phone_number', 'messageEntityPhone' => new Phone($entity['offset'], $entity['length']), - 'cashtag', 'messageEntityCashtag' => new Cashtag($entity['offset'], $entity['length']), - 'underline', 'messageEntityUnderline' => new Underline($entity['offset'], $entity['length']), - 'strikethrough', 'messageEntityStrike' => new Strike($entity['offset'], $entity['length']), - 'block_quote', 'messageEntityBlockquote' => new Blockquote($entity['offset'], $entity['length']), - 'bank_card', 'messageEntityBankCard' => new BankCard($entity['offset'], $entity['length']), - 'spoiler', 'messageEntitySpoiler' => new Spoiler($entity['offset'], $entity['length']), - 'custom_emoji', 'messageEntityCustomEmoji' => new CustomEmoji($entity['offset'], $entity['length'], $entity['document_id'] ?? $entity['custom_emoji_id']), - 'date_time' => FormattedDate::fromBotAPI($entity), - 'messageEntityFormattedDate' => FormattedDate::fromMTProto($entity), - default => throw new AssertionError("Unknown entity type: ".($entity['_'] ?? $entity['type'])) - }; - } - - /** - * Convert entity to bot API entity. - */ - abstract public function toBotAPI(): array; - /** - * Convert entity to MTProto entity. - */ - abstract public function toMTProto(): array; - - /** @internal */ - #[\Override] - public function jsonSerialize(): mixed - { - $res = ['_' => static::class]; - $refl = new ReflectionClass($this); - foreach ($refl->getProperties(ReflectionProperty::IS_PUBLIC) as $prop) { - $res[$prop->getName()] = $prop->getValue($this); - } - return $res; - } -} diff --git a/patches/madelineproto-formatted-date/upstream-LICENSE b/patches/madelineproto-formatted-date/upstream-LICENSE deleted file mode 100644 index dba13ed..0000000 --- a/patches/madelineproto-formatted-date/upstream-LICENSE +++ /dev/null @@ -1,661 +0,0 @@ - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. diff --git a/patches/madelineproto-fresh-peer/README.md b/patches/madelineproto-fresh-peer/README.md index 9e19399..3bd1208 100644 --- a/patches/madelineproto-fresh-peer/README.md +++ b/patches/madelineproto-fresh-peer/README.md @@ -1,22 +1,22 @@ -# MadelineProto 8.7.0 fresh full-peer response compatibility patch +# MadelineProto 8.11.10 fresh full-peer response compatibility patch -Reviewed: 2026-10-16. This is a new local WizardLoop Shabbat compatibility change, not a recovered historical patch or an upstream release. Package: `danog/madelineproto` 8.7.0, commit `7b99dd0f2d964a492c377912ffce9f5ce61aa9ed`. +Reviewed: 2026-10-22. The local WizardLoop Shabbat compatibility change is verified against the exact new upstream source, which is byte-identical to the previously reviewed 8.11.1 baseline; it is not an upstream release. Package: `danog/madelineproto` 8.11.10, commit `49d3d8460257c7bfb1a7e12708e1bfdd59e898c1`. ## Source and reason -The immutable [upstream PeerHandler.php](https://github.com/danog/MadelineProto/blob/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/src/MTProtoTools/PeerHandler.php) was compared byte-for-byte with the installed locked source. Its SHA256 is `3e1af3624f2256f53264fe4256475d0a5f353af8761cc9716133b7f0412538d2`. Baseline and reviewed output are retained in this directory; the manifest binds the unified diff and both hashes. +The immutable [upstream PeerHandler.php](https://github.com/danog/MadelineProto/blob/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/src/MTProtoTools/PeerHandler.php) was compared byte-for-byte with the installed locked source. Its SHA256 is `6caa058975e7122eeb84409142a7c8241a2da5c63ca4c63e1ec2392c7b3f7314`. Baseline and reviewed output are retained in this directory; the manifest binds the unified diff and both hashes. -Upstream `getFullInfo` refreshes the full information but combines it with an earlier Chat object. Re-reading through `getInfo` is insufficient: the pinned minimal-peer branch can return its older local record after refreshing the peer cache. The bot must establish that the default permissions being saved came from the request it just completed. +Upstream `getFullInfo` refreshes the full information but combines it with an earlier Chat object. Upstream 8.11.10 fixes the earlier minimal-peer re-read defect in `getInfo`, but `getFullInfo` still combines the partial record captured before the full RPC with cached full data. It provides no immediate full-reply provenance to the application. The bot must establish that the default permissions being saved came from the request it just completed. Direct `channels.getFullChannel` and `messages.getFullChat` namespace calls are blacklisted by the pinned SDK. This patch keeps the public `getFullInfo(mixed $id)` signature and uses its existing internal calls. It does not bypass that API boundary or change dependency versions. ## Change -When the full-info cache lifetime is zero, bypass cached full information even if its timestamp is in the future. Keep the immediate full-peer RPC response in a namespaced `_shabbat_fresh_full_peer_v1` return field for this call only. Do not persist that field in the peer cache. Other helper fields and normal positive-cache-lifetime behavior remain intact. +When the full-info cache lifetime is zero, bypass cached full information even if its timestamp is in the future. Keep the immediate full-peer RPC response in a namespaced `_shabbat_fresh_full_peer_v1` return field for this call only. Do not persist that field in the peer cache. Other helper fields and normal positive-cache-lifetime behavior remain intact. The new official `community` peer branch and invalid-peer exception are preserved. Upstream 8.11.10 still discards the raw group RPC reply, so it does not provide equivalent permission evidence. The application reader validates the returned native constructor, matching signed peer ID, matching ChatFull object and complete non-minimal Chat. Cached records cannot replace the raw Chat, including when fresh complete data legitimately omits optional default restrictions. Malformed, forbidden, migrated, ambiguous and mismatched responses fail before a permission write. Individual restriction bits, including `manage_topics`, are not silently discarded. -This fixes the reproduced reading defects. It does not prove which historical server event produced the user's broadly permissive dev.6 snapshot. Existing unverified snapshots require explicit administrator resolution; see [the dev.8 investigation](../../docs/DEV8_PERMISSIONS.md). +This fixes the reproduced reading defects. It does not prove which historical server event produced the user's broadly permissive dev.6 snapshot. Existing unverified snapshots require explicit administrator resolution; see [permission recovery](../../docs/PERMISSION_RECOVERY.md). ## Installation and source offer diff --git a/patches/madelineproto-fresh-peer/baseline/PeerHandler.php b/patches/madelineproto-fresh-peer/baseline/PeerHandler.php index 5ead123..cd77ddb 100644 --- a/patches/madelineproto-fresh-peer/baseline/PeerHandler.php +++ b/patches/madelineproto-fresh-peer/baseline/PeerHandler.php @@ -27,6 +27,7 @@ use danog\MadelineProto\EventHandler\Message\Entities\MentionName; use danog\MadelineProto\Exception; use danog\MadelineProto\Logger; +use danog\MadelineProto\Magic; use danog\MadelineProto\PeerNotInDbException; use danog\MadelineProto\RPCError\ChannelPrivateError; use danog\MadelineProto\RPCError\ChatAdminRequiredError; @@ -55,9 +56,11 @@ trait PeerHandler * Set support info. * * @internal + * @internal * * @param array $support Support info - * @internal + * + * @psalm-external-mutation-free */ public function addSupport(array $support): void { @@ -70,7 +73,7 @@ public function addSupport(array $support): void */ public function isForum(mixed $peer): bool { - return $this->getInfo($peer, \danog\MadelineProto\API::INFO_TYPE_CONSTRUCTOR)['forum'] ?? false; + return $this->getInfo($peer)['Chat']['forum'] ?? false; } /** @@ -166,11 +169,16 @@ public function getId(mixed $id): int * @internal * * @param mixed $id Peer + * + * @psalm-mutation-free */ public function getIdInternal(mixed $id): ?int { if (\is_array($id)) { switch ($id['_']) { + case 'help.promoData': + // Its peer is optional. + return isset($id['peer']) ? $this->getIdInternal($id['peer']) : null; case 'updateDialogPinned': case 'updateDialogUnreadMark': case 'updateNotifySettings': @@ -188,12 +196,21 @@ public function getIdInternal(mixed $id): ?int case 'dialog': case 'dialogPeer': case 'notifyPeer': - case 'help.proxyDataPromo': case 'folderPeer': case 'inputDialogPeer': case 'inputNotifyPeer': case 'inputFolderPeer': + case 'communityPeer': + case 'communityPeerRequest': return $this->getIdInternal($id['peer']); + case 'inputNotifyCommunity': + case 'inputDialogPeerCommunity': + return $this->getIdInternal($id['community']); + case 'dialogCommunity': + case 'dialogPeerCommunity': + case 'notifyCommunity': + case 'messageActionChatJoinedViaCommunity': + return $id['community_id']; case 'inputUserSelf': case 'inputPeerSelf': return $this->authorization['user']['id']; @@ -205,6 +222,9 @@ public function getIdInternal(mixed $id): ?int case 'chat': case 'chatForbidden': case 'chatFull': + case 'communityFull': + case 'community': + case 'communityForbidden': return $id['id']; case 'inputPeerChat': case 'peerChat': @@ -231,6 +251,14 @@ public function getIdInternal(mixed $id): ?int case 'inputPeerChannel': case 'inputChannelFromMessage': case 'inputPeerChannelFromMessage': + // Built to be serialized, with the MTProto ID (see genAll), unlike the received constructors below, + // whose IDs the deserializer already converted to bot API IDs. + if ($id['channel_id'] > 0) { + return $id['channel_id'] > Magic::MAX_CHANNEL_ID + ? DialogId::fromMonoforumId($id['channel_id']) + : DialogId::fromSupergroupOrChannelId($id['channel_id']); + } + return $id['channel_id']; case 'updateChannelReadMessagesContents': case 'updateChannelAvailableMessages': case 'updateChannel': @@ -416,10 +444,13 @@ public function getInfo(mixed $id, int $type = \danog\MadelineProto\API::INFO_TY $this->caching_full_info[$id] = true; $this->logger->logger("Only have min peer for {$id} in database, trying to fetch full info"); try { + // A min peer may come without an access hash: the serializer replaces the min input constructor + // with inputChannelFromMessage/inputUserFromMessage, which don't need one. + $input = $this->genAll(['access_hash' => $chat['access_hash'] ?? 0] + $chat, \danog\MadelineProto\API::INFO_TYPE_CONSTRUCTOR); if ($id < 0) { - $this->methodCallAsyncRead('channels.getChannels', ['id' => [$this->genAll($chat, \danog\MadelineProto\API::INFO_TYPE_CONSTRUCTOR)]]); + $this->methodCallAsyncRead('channels.getChannels', ['id' => [$input]]); } else { - $this->methodCallAsyncRead('users.getUsers', ['id' => [$this->genAll($chat, \danog\MadelineProto\API::INFO_TYPE_CONSTRUCTOR)]]); + $this->methodCallAsyncRead('users.getUsers', ['id' => [$input]]); } } catch (Exception $e) { $this->logger->logger($e->getMessage(), Logger::WARNING); @@ -428,6 +459,7 @@ public function getInfo(mixed $id, int $type = \danog\MadelineProto\API::INFO_TY } finally { unset($this->caching_full_info[$id]); } + $chat = $this->peerDatabase->get($id) ?? $chat; } try { return $this->genAll($chat, $type); @@ -460,7 +492,14 @@ public function getInfo(mixed $id, int $type = \danog\MadelineProto\API::INFO_TY return $this->getInfo($this->supportUser, $type); } if ($bot_api_id = $this->peerDatabase->getIdFromUsername($id)) { - return $this->getInfo($bot_api_id, $type); + // Usernames are indexed for min peers too, which may lack an access hash (seen in a forward, a mention, + // a group call...): check that the peer can be used (fetching it through the min database if needed) + // even when only its ID is requested, or resolve the username again. + try { + $info = $this->getInfo($bot_api_id); + return $type === \danog\MadelineProto\API::INFO_TYPE_ALL ? $info : $this->getInfo($bot_api_id, $type); + } catch (PeerNotInDbException) { + } } if ($bot_api_id = $this->peerDatabase->resolveUsername($id)) { return $this->getInfo($bot_api_id, $type); @@ -492,7 +531,7 @@ private function genAll($constructor, int $type): array|int|string if ($constructor['_'] === 'user') { return ($constructor['self'] ?? false) ? ['_' => 'inputUserSelf'] : ['_' => 'inputUser', 'user_id' => $constructor['id'], 'access_hash' => $constructor['access_hash'], 'min' => $constructor['min'] ?? false]; } - if ($constructor['_'] === 'channel') { + if ($constructor['_'] === 'channel' || $constructor['_'] === 'community') { return ['_' => 'inputChannel', 'channel_id' => DialogId::toMTProtoId($constructor['id']), 'access_hash' => $constructor['access_hash'], 'min' => $constructor['min'] ?? false]; } } @@ -500,7 +539,7 @@ private function genAll($constructor, int $type): array|int|string if ($constructor['_'] === 'user') { return ($constructor['self'] ?? false) ? ['_' => 'inputPeerSelf'] : ['_' => 'inputPeerUser', 'user_id' => $constructor['id'], 'access_hash' => $constructor['access_hash'], 'min' => $constructor['min'] ?? false]; } - if ($constructor['_'] === 'channel') { + if ($constructor['_'] === 'channel' || $constructor['_'] === 'community') { return ['_' => 'inputPeerChannel', 'channel_id' => DialogId::toMTProtoId($constructor['id']), 'access_hash' => $constructor['access_hash'], 'min' => $constructor['min'] ?? false]; } if ($constructor['_'] === 'chat' || $constructor['_'] === 'chatForbidden') { @@ -517,6 +556,9 @@ private function genAll($constructor, int $type): array|int|string if ($constructor['_'] === 'channel') { return $constructor['megagroup'] ?? false ? 'supergroup' : 'channel'; } + if ($constructor['_'] === 'community') { + return 'community'; + } if ($constructor['_'] === 'chat' || $constructor['_'] === 'chatForbidden') { return 'chat'; } @@ -550,7 +592,17 @@ private function genAll($constructor, int $type): array|int|string $res['bot_api_id'] = $constructor['id']; $res['type'] = $constructor['megagroup'] ?? false ? 'supergroup' : 'channel'; break; + case 'community': + if (!isset($constructor['access_hash'])) { + $this->cacheFullDialogs(); + throw new PeerNotInDbException(); + } + $res['community_id'] = $constructor['id']; + $res['bot_api_id'] = $constructor['id']; + $res['type'] = 'community'; + break; case 'channelForbidden': + case 'communityForbidden': throw new PeerNotInDbException(); default: throw new Exception('Invalid constructor given '.$constructor['_']); @@ -667,9 +719,12 @@ public function getFullInfo(mixed $id): array $this->methodCallAsyncRead('messages.getFullChat', $partial); break; case 'channel': + case 'community': case 'supergroup': $this->methodCallAsyncRead('channels.getFullChannel', ['channel' => $partial['bot_api_id']]); break; + default: + throw new Exception('Invalid peer type '.$partial['type']); } return array_merge($partial, $this->peerDatabase->getFull($partial['bot_api_id'])); } @@ -753,6 +808,21 @@ public function getPwrChat(mixed $id, bool $fullfetch = true): array $res['invite'] = $full['full']['exported_invite']['link']; } break; + case 'community': + foreach (['title', 'creator', 'left', 'admin_rights', 'default_banned_rights'] as $key) { + if (isset($full['Chat'][$key])) { + $res[$key] = $full['Chat'][$key]; + } + } + foreach (['about', 'linked_peers', 'admins_count', 'kicked_count', 'peer_link_requests_pending'] as $key) { + if (isset($full['full'][$key])) { + $res[$key] = $full['full'][$key]; + } + } + if (isset($full['full']['chat_photo'])) { + $res['photo'] = $full['full']['chat_photo']; + } + break; } if (isset($res['participants']) && $fullfetch) { foreach ($res['participants'] as $key => $participant) { @@ -818,7 +888,7 @@ private function recurseAlphabetSearchParticipants(int $channel, string $filter, } ++$depth; $promises = []; - for ($x = 'a'; $x !== 'aa' && $total_count > \count($res['participants']); $x++) { + for ($x = 'a'; $x !== 'aa' && $total_count > \count($res['participants']); $x = str_increment($x)) { $promises []= async(function () use ($channel, $filter, $q, $x, $total_count, &$res, $depth) { return $this->recurseAlphabetSearchParticipants($channel, $filter, $q.$x, $total_count, $res, $depth); }); @@ -916,6 +986,8 @@ private function fetchParticipants(int $channel, string $filter, string $q, int } /** * Key for participatns cache. + * + * @psalm-pure */ private static function participantsKey(int $channelId, string $filter, string $q, int $offset, int $limit): string { diff --git a/patches/madelineproto-fresh-peer/fresh-full-peer-response.patch b/patches/madelineproto-fresh-peer/fresh-full-peer-response.patch index d04ab91..5a9f689 100644 --- a/patches/madelineproto-fresh-peer/fresh-full-peer-response.patch +++ b/patches/madelineproto-fresh-peer/fresh-full-peer-response.patch @@ -1,56 +1,34 @@ --- a/src/MTProtoTools/PeerHandler.php +++ b/src/MTProtoTools/PeerHandler.php -@@ -651,25 +651,33 @@ -- public function getFullInfo(mixed $id): array -- { -- $partial = $this->getInfo($id); -- if (DialogId::isSecretChat($partial['bot_api_id'])) { -- return $partial; -- } -- $full = $this->peerDatabase->getFull($partial['bot_api_id']); +@@ -707,26 +707,34 @@ + return $partial; + } + $full = $this->peerDatabase->getFull($partial['bot_api_id']); - if (time() - ($full['inserted'] ?? 0) < $this->getSettings()->getPeer()->getFullInfoCacheTime()) { -- return array_merge($partial, $full); -- } -- switch ($partial['type']) { -- case 'user': -- case 'bot': -- $this->methodCallAsyncRead('users.getFullUser', ['id' => $partial['bot_api_id']]); -- break; -- case 'chat': -- $this->methodCallAsyncRead('messages.getFullChat', $partial); -- break; -- case 'channel': -- case 'supergroup': -- $this->methodCallAsyncRead('channels.getFullChannel', ['channel' => $partial['bot_api_id']]); -- break; -- } -- return array_merge($partial, $this->peerDatabase->getFull($partial['bot_api_id'])); -- } -+ public function getFullInfo(mixed $id): array -+ { -+ $partial = $this->getInfo($id); -+ if (DialogId::isSecretChat($partial['bot_api_id'])) { -+ return $partial; -+ } -+ $full = $this->peerDatabase->getFull($partial['bot_api_id']); + $cacheTime = $this->getSettings()->getPeer()->getFullInfoCacheTime(); + if ($cacheTime > 0 && time() - ($full['inserted'] ?? 0) < $cacheTime) { -+ return array_merge($partial, $full); -+ } + return array_merge($partial, $full); + } + $freshReply = null; -+ switch ($partial['type']) { -+ case 'user': -+ case 'bot': -+ $this->methodCallAsyncRead('users.getFullUser', ['id' => $partial['bot_api_id']]); -+ break; -+ case 'chat': + switch ($partial['type']) { + case 'user': + case 'bot': + $this->methodCallAsyncRead('users.getFullUser', ['id' => $partial['bot_api_id']]); + break; + case 'chat': +- $this->methodCallAsyncRead('messages.getFullChat', $partial); + $freshReply = $this->methodCallAsyncRead('messages.getFullChat', $partial); -+ break; -+ case 'channel': -+ case 'supergroup': + break; + case 'channel': + case 'community': + case 'supergroup': +- $this->methodCallAsyncRead('channels.getFullChannel', ['channel' => $partial['bot_api_id']]); + $freshReply = $this->methodCallAsyncRead('channels.getFullChannel', ['channel' => $partial['bot_api_id']]); -+ break; -+ } + break; + default: + throw new Exception('Invalid peer type '.$partial['type']); + } +- return array_merge($partial, $this->peerDatabase->getFull($partial['bot_api_id'])); + $result = array_merge($partial, $this->peerDatabase->getFull($partial['bot_api_id'])); + // Shabbat local compatibility patch: never persist this per-call RPC evidence. + // Keep the public helper signature and ordinary cache semantics unchanged. @@ -58,4 +36,6 @@ + $result['_shabbat_fresh_full_peer_v1'] = $freshReply; + } + return $result; -+ } + } + /** + * Get full info about peer (including full list of channel members), returns a Chat object. diff --git a/patches/madelineproto-fresh-peer/manifest.json b/patches/madelineproto-fresh-peer/manifest.json index 1d74345..e54459a 100644 --- a/patches/madelineproto-fresh-peer/manifest.json +++ b/patches/madelineproto-fresh-peer/manifest.json @@ -1,26 +1,27 @@ { "schema_version": 1, - "reviewed_at": "2026-10-16", + "reviewed_at": "2026-10-22", "package": "danog/madelineproto", "target": "src/MTProtoTools/PeerHandler.php", "provenance": { - "kind": "new-local-authoritative-full-peer-response", - "source_url": "https://github.com/danog/MadelineProto/blob/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/src/MTProtoTools/PeerHandler.php", + "kind": "ported-local-authoritative-full-peer-response", + "source_url": "https://github.com/danog/MadelineProto/blob/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/src/MTProtoTools/PeerHandler.php", "source_verified_against_locked_installed_file": true, "source_verified_against_pinned_remote_bytes": true, - "source_verified_sha256": "3e1af3624f2256f53264fe4256475d0a5f353af8761cc9716133b7f0412538d2" + "source_verified_sha256": "6caa058975e7122eeb84409142a7c8241a2da5c63ca4c63e1ec2392c7b3f7314", + "note": "Reviewed against official 8.11.10. PeerHandler is byte-identical to the reviewed 8.11.1 baseline. Upstream getFullInfo still discards the raw group RPC reply and can merge cached partial data; no equivalent authoritative evidence accessor was found." }, "approved": [ { - "version": "8.7.0", - "commit": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", + "version": "8.11.10", + "commit": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", "mode": "patch", "baseline": "baseline/PeerHandler.php", "reviewed_output": "reviewed/PeerHandler.php", - "original_sha256": "3e1af3624f2256f53264fe4256475d0a5f353af8761cc9716133b7f0412538d2", - "patched_sha256": "8188777fc376f2b3cca39963d79f85239fc84141f978128ea2bb591f03891928", + "original_sha256": "6caa058975e7122eeb84409142a7c8241a2da5c63ca4c63e1ec2392c7b3f7314", + "patched_sha256": "78187d7216c069d47d1c05d8128834603b958b55bc8478576850bce9e86489df", "patch": "fresh-full-peer-response.patch", - "patch_sha256": "db3099e7bf83550b7a4a4f54da451bc45a1078b8bd9bffc57f26bf52ab2d82e3" + "patch_sha256": "0b7c828c49de1e56cf93169560a5d4ba23ec8a1749f676569b6a83592577ed4d" } ], "official_versions": [] diff --git a/patches/madelineproto-fresh-peer/reviewed/PeerHandler.php b/patches/madelineproto-fresh-peer/reviewed/PeerHandler.php index 254eddb..8139df6 100644 --- a/patches/madelineproto-fresh-peer/reviewed/PeerHandler.php +++ b/patches/madelineproto-fresh-peer/reviewed/PeerHandler.php @@ -27,6 +27,7 @@ use danog\MadelineProto\EventHandler\Message\Entities\MentionName; use danog\MadelineProto\Exception; use danog\MadelineProto\Logger; +use danog\MadelineProto\Magic; use danog\MadelineProto\PeerNotInDbException; use danog\MadelineProto\RPCError\ChannelPrivateError; use danog\MadelineProto\RPCError\ChatAdminRequiredError; @@ -55,9 +56,11 @@ trait PeerHandler * Set support info. * * @internal + * @internal * * @param array $support Support info - * @internal + * + * @psalm-external-mutation-free */ public function addSupport(array $support): void { @@ -70,7 +73,7 @@ public function addSupport(array $support): void */ public function isForum(mixed $peer): bool { - return $this->getInfo($peer, \danog\MadelineProto\API::INFO_TYPE_CONSTRUCTOR)['forum'] ?? false; + return $this->getInfo($peer)['Chat']['forum'] ?? false; } /** @@ -166,11 +169,16 @@ public function getId(mixed $id): int * @internal * * @param mixed $id Peer + * + * @psalm-mutation-free */ public function getIdInternal(mixed $id): ?int { if (\is_array($id)) { switch ($id['_']) { + case 'help.promoData': + // Its peer is optional. + return isset($id['peer']) ? $this->getIdInternal($id['peer']) : null; case 'updateDialogPinned': case 'updateDialogUnreadMark': case 'updateNotifySettings': @@ -188,12 +196,21 @@ public function getIdInternal(mixed $id): ?int case 'dialog': case 'dialogPeer': case 'notifyPeer': - case 'help.proxyDataPromo': case 'folderPeer': case 'inputDialogPeer': case 'inputNotifyPeer': case 'inputFolderPeer': + case 'communityPeer': + case 'communityPeerRequest': return $this->getIdInternal($id['peer']); + case 'inputNotifyCommunity': + case 'inputDialogPeerCommunity': + return $this->getIdInternal($id['community']); + case 'dialogCommunity': + case 'dialogPeerCommunity': + case 'notifyCommunity': + case 'messageActionChatJoinedViaCommunity': + return $id['community_id']; case 'inputUserSelf': case 'inputPeerSelf': return $this->authorization['user']['id']; @@ -205,6 +222,9 @@ public function getIdInternal(mixed $id): ?int case 'chat': case 'chatForbidden': case 'chatFull': + case 'communityFull': + case 'community': + case 'communityForbidden': return $id['id']; case 'inputPeerChat': case 'peerChat': @@ -231,6 +251,14 @@ public function getIdInternal(mixed $id): ?int case 'inputPeerChannel': case 'inputChannelFromMessage': case 'inputPeerChannelFromMessage': + // Built to be serialized, with the MTProto ID (see genAll), unlike the received constructors below, + // whose IDs the deserializer already converted to bot API IDs. + if ($id['channel_id'] > 0) { + return $id['channel_id'] > Magic::MAX_CHANNEL_ID + ? DialogId::fromMonoforumId($id['channel_id']) + : DialogId::fromSupergroupOrChannelId($id['channel_id']); + } + return $id['channel_id']; case 'updateChannelReadMessagesContents': case 'updateChannelAvailableMessages': case 'updateChannel': @@ -416,10 +444,13 @@ public function getInfo(mixed $id, int $type = \danog\MadelineProto\API::INFO_TY $this->caching_full_info[$id] = true; $this->logger->logger("Only have min peer for {$id} in database, trying to fetch full info"); try { + // A min peer may come without an access hash: the serializer replaces the min input constructor + // with inputChannelFromMessage/inputUserFromMessage, which don't need one. + $input = $this->genAll(['access_hash' => $chat['access_hash'] ?? 0] + $chat, \danog\MadelineProto\API::INFO_TYPE_CONSTRUCTOR); if ($id < 0) { - $this->methodCallAsyncRead('channels.getChannels', ['id' => [$this->genAll($chat, \danog\MadelineProto\API::INFO_TYPE_CONSTRUCTOR)]]); + $this->methodCallAsyncRead('channels.getChannels', ['id' => [$input]]); } else { - $this->methodCallAsyncRead('users.getUsers', ['id' => [$this->genAll($chat, \danog\MadelineProto\API::INFO_TYPE_CONSTRUCTOR)]]); + $this->methodCallAsyncRead('users.getUsers', ['id' => [$input]]); } } catch (Exception $e) { $this->logger->logger($e->getMessage(), Logger::WARNING); @@ -428,6 +459,7 @@ public function getInfo(mixed $id, int $type = \danog\MadelineProto\API::INFO_TY } finally { unset($this->caching_full_info[$id]); } + $chat = $this->peerDatabase->get($id) ?? $chat; } try { return $this->genAll($chat, $type); @@ -460,7 +492,14 @@ public function getInfo(mixed $id, int $type = \danog\MadelineProto\API::INFO_TY return $this->getInfo($this->supportUser, $type); } if ($bot_api_id = $this->peerDatabase->getIdFromUsername($id)) { - return $this->getInfo($bot_api_id, $type); + // Usernames are indexed for min peers too, which may lack an access hash (seen in a forward, a mention, + // a group call...): check that the peer can be used (fetching it through the min database if needed) + // even when only its ID is requested, or resolve the username again. + try { + $info = $this->getInfo($bot_api_id); + return $type === \danog\MadelineProto\API::INFO_TYPE_ALL ? $info : $this->getInfo($bot_api_id, $type); + } catch (PeerNotInDbException) { + } } if ($bot_api_id = $this->peerDatabase->resolveUsername($id)) { return $this->getInfo($bot_api_id, $type); @@ -492,7 +531,7 @@ private function genAll($constructor, int $type): array|int|string if ($constructor['_'] === 'user') { return ($constructor['self'] ?? false) ? ['_' => 'inputUserSelf'] : ['_' => 'inputUser', 'user_id' => $constructor['id'], 'access_hash' => $constructor['access_hash'], 'min' => $constructor['min'] ?? false]; } - if ($constructor['_'] === 'channel') { + if ($constructor['_'] === 'channel' || $constructor['_'] === 'community') { return ['_' => 'inputChannel', 'channel_id' => DialogId::toMTProtoId($constructor['id']), 'access_hash' => $constructor['access_hash'], 'min' => $constructor['min'] ?? false]; } } @@ -500,7 +539,7 @@ private function genAll($constructor, int $type): array|int|string if ($constructor['_'] === 'user') { return ($constructor['self'] ?? false) ? ['_' => 'inputPeerSelf'] : ['_' => 'inputPeerUser', 'user_id' => $constructor['id'], 'access_hash' => $constructor['access_hash'], 'min' => $constructor['min'] ?? false]; } - if ($constructor['_'] === 'channel') { + if ($constructor['_'] === 'channel' || $constructor['_'] === 'community') { return ['_' => 'inputPeerChannel', 'channel_id' => DialogId::toMTProtoId($constructor['id']), 'access_hash' => $constructor['access_hash'], 'min' => $constructor['min'] ?? false]; } if ($constructor['_'] === 'chat' || $constructor['_'] === 'chatForbidden') { @@ -517,6 +556,9 @@ private function genAll($constructor, int $type): array|int|string if ($constructor['_'] === 'channel') { return $constructor['megagroup'] ?? false ? 'supergroup' : 'channel'; } + if ($constructor['_'] === 'community') { + return 'community'; + } if ($constructor['_'] === 'chat' || $constructor['_'] === 'chatForbidden') { return 'chat'; } @@ -550,7 +592,17 @@ private function genAll($constructor, int $type): array|int|string $res['bot_api_id'] = $constructor['id']; $res['type'] = $constructor['megagroup'] ?? false ? 'supergroup' : 'channel'; break; + case 'community': + if (!isset($constructor['access_hash'])) { + $this->cacheFullDialogs(); + throw new PeerNotInDbException(); + } + $res['community_id'] = $constructor['id']; + $res['bot_api_id'] = $constructor['id']; + $res['type'] = 'community'; + break; case 'channelForbidden': + case 'communityForbidden': throw new PeerNotInDbException(); default: throw new Exception('Invalid constructor given '.$constructor['_']); @@ -669,9 +721,12 @@ public function getFullInfo(mixed $id): array $freshReply = $this->methodCallAsyncRead('messages.getFullChat', $partial); break; case 'channel': + case 'community': case 'supergroup': $freshReply = $this->methodCallAsyncRead('channels.getFullChannel', ['channel' => $partial['bot_api_id']]); break; + default: + throw new Exception('Invalid peer type '.$partial['type']); } $result = array_merge($partial, $this->peerDatabase->getFull($partial['bot_api_id'])); // Shabbat local compatibility patch: never persist this per-call RPC evidence. @@ -761,6 +816,21 @@ public function getPwrChat(mixed $id, bool $fullfetch = true): array $res['invite'] = $full['full']['exported_invite']['link']; } break; + case 'community': + foreach (['title', 'creator', 'left', 'admin_rights', 'default_banned_rights'] as $key) { + if (isset($full['Chat'][$key])) { + $res[$key] = $full['Chat'][$key]; + } + } + foreach (['about', 'linked_peers', 'admins_count', 'kicked_count', 'peer_link_requests_pending'] as $key) { + if (isset($full['full'][$key])) { + $res[$key] = $full['full'][$key]; + } + } + if (isset($full['full']['chat_photo'])) { + $res['photo'] = $full['full']['chat_photo']; + } + break; } if (isset($res['participants']) && $fullfetch) { foreach ($res['participants'] as $key => $participant) { @@ -826,7 +896,7 @@ private function recurseAlphabetSearchParticipants(int $channel, string $filter, } ++$depth; $promises = []; - for ($x = 'a'; $x !== 'aa' && $total_count > \count($res['participants']); $x++) { + for ($x = 'a'; $x !== 'aa' && $total_count > \count($res['participants']); $x = str_increment($x)) { $promises []= async(function () use ($channel, $filter, $q, $x, $total_count, &$res, $depth) { return $this->recurseAlphabetSearchParticipants($channel, $filter, $q.$x, $total_count, $res, $depth); }); @@ -924,6 +994,8 @@ private function fetchParticipants(int $channel, string $filter, string $q, int } /** * Key for participatns cache. + * + * @psalm-pure */ private static function participantsKey(int $channelId, string $filter, string $q, int $offset, int $limit): string { diff --git a/patches/madelineproto-geopoint/README.md b/patches/madelineproto-geopoint/README.md deleted file mode 100644 index b09d4ea..0000000 --- a/patches/madelineproto-geopoint/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# MadelineProto GeoPoint double-coordinate correction - -This is a **new local patch**, reviewed on 2026-10-13. It is separate from the historical UpdateLoop cancellation patch and is not presented as that original artifact. - -The locked package is `danog/madelineproto` 8.7.0 at commit `7b99dd0f2d964a492c377912ffce9f5ce61aa9ed`. The pristine `src/EventHandler/Media/GeoPoint.php` bytes were downloaded from that immutable [upstream commit](https://github.com/danog/MadelineProto/blob/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/src/EventHandler/Media/GeoPoint.php) and matched the installed source exactly (SHA256 `9ed8054caade6abc96420b0f5b120bec029ee2bc7b7b6aacca56fb7ddc61a27b`). - -Telegram's native `geoPoint` constructor declares `long` and `lat` as doubles. The locked SDK GeoPoint wrapper instead declared both readonly properties as integers. Assigning a fractional coordinate such as latitude 31.778 and longitude 35.235 throws a TypeError; InlineQuery constructs this wrapper before either typed or raw event dispatch. - -The unified diff changes only those two property types and their matching PHPDoc annotations from `int` to `float`. The constructor, access hash, accuracy radius, JSON serialization and all other source bytes remain unchanged. Integer zero coordinates remain valid because PHP permits integer-to-float assignment. No coordinates are rounded or guessed. The application separately validates finite geographical bounds. - -The target upstream file contains no standalone copyright header; its remaining source is retained byte for byte. MadelineProto's package copyright notices and AGPL-3.0-or-later license remain in the corresponding source/dependency notices. `baseline/GeoPoint.php`, `reviewed/GeoPoint.php`, the immutable source reference, unified diff and manifest are included in the source offer for the bot. No entire vendor directory is tracked. - -Installation uses the shared exact-source patch manager through `php scripts/apply-patches.php` and `php scripts/verify-patches.php`, including Composer and Docker before bot startup. For `composer install --no-scripts`, run those two commands explicitly while writers are stopped. The installer verifies version/commit and baseline/diff/output hashes, applies only pristine approved bytes, succeeds without mutation when already corrected, and stops on unknown, partial or incompatible source. It never fetches a patch during build. The shared writer lock prevents mutation of an active installation. - -Tests reproduce the pristine fractional-coordinate TypeError using the bundled baseline alone, exercise the actual installed corrected constructor with positive, negative, fractional and zero coordinates, and verify precision through JSON serialization/roundtrip. Installer tests cover clean/repeated/verify-only operation, mismatched version/commit, unknown/partial source, artifact tampering and an active writer. These are isolated local tests; no Telegram connection, live inline request or running container was used. No later official version is admitted without a separate source and behavior review. diff --git a/patches/madelineproto-geopoint/baseline/GeoPoint.php b/patches/madelineproto-geopoint/baseline/GeoPoint.php deleted file mode 100644 index c2f7482..0000000 --- a/patches/madelineproto-geopoint/baseline/GeoPoint.php +++ /dev/null @@ -1,37 +0,0 @@ -long = $rawGeoPoint['long']; - $this->lat = $rawGeoPoint['lat']; - $this->accessHash = $rawGeoPoint['access_hash']; - $this->accuracyRadius = $rawGeoPoint['accuracy_radius'] ?? null; - } - - /** @internal */ - #[\Override] - public function jsonSerialize(): mixed - { - $v = get_object_vars($this); - $v['_'] = static::class; - return $v; - } -} diff --git a/patches/madelineproto-geopoint/geopoint-double-coordinates.patch b/patches/madelineproto-geopoint/geopoint-double-coordinates.patch deleted file mode 100644 index ef13dd0..0000000 --- a/patches/madelineproto-geopoint/geopoint-double-coordinates.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- a/src/EventHandler/Media/GeoPoint.php -+++ b/src/EventHandler/Media/GeoPoint.php -@@ -9,2 +9,2 @@ -- /** @var int Longitude */ -- public readonly int $long; -+ /** @var float Longitude */ -+ public readonly float $long; -@@ -12,2 +12,2 @@ -- /** @var int Latitude */ -- public readonly int $lat; -+ /** @var float Latitude */ -+ public readonly float $lat; diff --git a/patches/madelineproto-geopoint/manifest.json b/patches/madelineproto-geopoint/manifest.json deleted file mode 100644 index a8b9600..0000000 --- a/patches/madelineproto-geopoint/manifest.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "schema_version": 1, - "reviewed_at": "2026-10-13", - "package": "danog/madelineproto", - "target": "src/EventHandler/Media/GeoPoint.php", - "provenance": { - "kind": "new-local-tl-double-type-correction", - "note": "New reviewed correction for this upgrade, distinct from the historical UpdateLoop cancellation patch. The locked GeoPoint constructor assigns TL double coordinates to integer properties before inline dispatch.", - "source_url": "https://github.com/danog/MadelineProto/blob/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/src/EventHandler/Media/GeoPoint.php", - "source_verified_against_locked_installed_file": true, - "source_verified_sha256": "9ed8054caade6abc96420b0f5b120bec029ee2bc7b7b6aacca56fb7ddc61a27b" - }, - "approved": [ - { - "version": "8.7.0", - "commit": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "mode": "patch", - "baseline": "baseline/GeoPoint.php", - "reviewed_output": "reviewed/GeoPoint.php", - "original_sha256": "9ed8054caade6abc96420b0f5b120bec029ee2bc7b7b6aacca56fb7ddc61a27b", - "patched_sha256": "5633cc441e541e5e919dfa8156192587a68e578e49a496acac91172be5f2549d", - "patch": "geopoint-double-coordinates.patch", - "patch_sha256": "b1b830953dce74978ddc64198a958d0ac13d5205d8929daa58a31e86c0541556" - } - ], - "official_versions": [] -} diff --git a/patches/madelineproto-geopoint/reviewed/GeoPoint.php b/patches/madelineproto-geopoint/reviewed/GeoPoint.php deleted file mode 100644 index c3c5adc..0000000 --- a/patches/madelineproto-geopoint/reviewed/GeoPoint.php +++ /dev/null @@ -1,37 +0,0 @@ -long = $rawGeoPoint['long']; - $this->lat = $rawGeoPoint['lat']; - $this->accessHash = $rawGeoPoint['access_hash']; - $this->accuracyRadius = $rawGeoPoint['accuracy_radius'] ?? null; - } - - /** @internal */ - #[\Override] - public function jsonSerialize(): mixed - { - $v = get_object_vars($this); - $v['_'] = static::class; - return $v; - } -} diff --git a/patches/madelineproto/README.md b/patches/madelineproto/README.md deleted file mode 100644 index e55c651..0000000 --- a/patches/madelineproto/README.md +++ /dev/null @@ -1,60 +0,0 @@ -# UpdateLoop cancellation patch - -Reviewed 2026-10-13. Locked MadelineProto **8.7.0** at -[7b99dd0f2d964a492c377912ffce9f5ce61aa9ed](https://github.com/danog/MadelineProto/tree/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed). - -Original local implementation: local-reference/newsearch-v2/docker/patch-madeline-update-loop.php, -also identical in local-reference/psy new/release-r21-work/docker/patch-madeline-update-loop.php. -Both SHA256: 1ec2691498e878d28ca8e9cde94b00c803d9ccba789096ffc8471156dfb429e9. -The original script is preserved in original-reference.php. It adds the Amp -CancelledException import and two union catches guarded by getPrevious() instanceof -TimeoutException. It rethrows other cancellation. Historical source was a script; -original-reference.patch is a reproduced unified diff, not a historical diff. - -On **2026-10-16**, the WizardLoop project maintainer stated that they authored this -historical UpdateLoop helper and explicitly authorized its distribution under -**AGPL-3.0-only**. The attestation applies to the exact script hash above and is -recorded in the manifest. The original headerless script bytes remain unchanged; -the statement does not relicense upstream MadelineProto source or certify -independent authorship/legal review. See [licensing](../../docs/LICENSING.md). - -The applied update-loop-timeout-cancellation.patch is a **new reviewed derivative**. -Both difference branches retain those guards, check isRunning()/authorization, -and return the existing 10-second interval on a transient timeout. This lets the -parent loop honor stop() and prevents immediate retry/report loops. A stopped -loop returns STOP; unrelated cancellation while running is rethrown. - -The reviewed locked version is 8.7.0; the recorded GitHub release is a prerelease. MTProtoTools/CallHandler delegates to -MTProtoSession/CallHandler, which creates TimeoutCancellation and awaits the send -future using it. Amp emits CancelledException with TimeoutException as previous. -No conversion exists there; upstream UpdateLoop still has two TimeoutException-only -catches. danog/loop 1.1.1 stop() marks running=false, completing after loop() returns. -No official fixed release is currently approved in the manifest. - -The manifest pins exact version, commit, baseline/output/patch SHA256. Installation -applies exact unified-diff context, then verifies output SHA256 and syntax. -Unknown files, partial patches and unknown commits fail. No dynamic patch downloads, -no broad source regex replacements, no silent skipping. Already patched succeeds -without a write. A future approved mode=official entry checks its exact sha256 and -applies no patch; no such version is listed today. - -Composer invokes apply then verify. For --no-scripts: - - composer install --no-scripts - php scripts/apply-patches.php - php scripts/verify-patches.php - php bin/self-check.php - -Never patch an active process/container. Runner only verifies. Build a new image. -Tests exercise first/repeated application, unknown version/file, partial patch, -direct timeout, timeout-derived cancellation, deliberate cancellation, shutdown, -and recovery in both actual loop branches using a fake Telegram transport. -They do not contact Telegram. See [operational details](../../docs/PATCHES.md). - -All baseline copyright/license notices are unmodified. Upstream metadata says -AGPL-3.0-only; source headers permit version 3 or later. Preserve and report this -discrepancy. Baseline, original script, diffs and manifest ship in source archives. - -Regenerate against the fixed baseline with php patches/madelineproto/generate-artifacts.php. -Regeneration does not approve an upgrade; review source and rerun behavioral tests. -Historical local-reference paths are logical project/file identifiers, not public download URLs or installation requirements. diff --git a/patches/madelineproto/baseline/UpdateLoop.php b/patches/madelineproto/baseline/UpdateLoop.php deleted file mode 100644 index bc54fca..0000000 --- a/patches/madelineproto/baseline/UpdateLoop.php +++ /dev/null @@ -1,263 +0,0 @@ -. - * - * @author Daniil Gentili - * @copyright 2016-2025 Daniil Gentili - * @license https://opensource.org/licenses/AGPL-3.0 AGPLv3 - * @link https://docs.madelineproto.xyz MadelineProto documentation - */ - -namespace danog\MadelineProto\Loop\Update; - -use Amp\TimeoutException; -use danog\Loop\Loop; -use danog\MadelineProto\API; -use danog\MadelineProto\Exception; -use danog\MadelineProto\Logger; -use danog\MadelineProto\Loop\InternalLoop; -use danog\MadelineProto\MTProto; -use danog\MadelineProto\MTProto\LoginState; -use danog\MadelineProto\MTProto\SpecialMethodType; -use danog\MadelineProto\PeerNotInDbException; -use danog\MadelineProto\PTSException; -use danog\MadelineProto\Reactive\SimpleSubscriber; -use danog\MadelineProto\RPCError\ChannelInvalidError; -use danog\MadelineProto\RPCError\ChannelPrivateError; -use danog\MadelineProto\RPCError\ChatForbiddenError; -use danog\MadelineProto\RPCError\TimeoutError; -use danog\MadelineProto\RPCError\UserBannedInChannelError; - -use Revolt\EventLoop; -use function Amp\delay; - -/** - * Update loop. - * - * @internal - * - * @author Daniil Gentili - * - * @implements SimpleSubscriber - */ -final class UpdateLoop extends Loop implements SimpleSubscriber -{ - use InternalLoop { - __construct as private init; - } - /** - * Main loop ID. - */ - public const GENERIC = 0; - - private const DEFAULT_TIMEOUT = 10.0; - - /** - * Feed loop. - */ - private ?FeedLoop $feeder = null; - private ?int $authorizedDc = null; - /** - * Constructor. - */ - public function __construct(MTProto $API, private int $channelId) - { - $this->init($API); - $API->loginState->subscribe($this); - } - public function __sleep(): array - { - return ['channelId', 'API', 'feeder', 'authorizedDc']; - } - #[\Override] - public function onSimpleStateChange($state): void - { - if ($state->state !== API::LOGGED_IN) { - $this->authorizedDc = null; - return; - } - if (null !== $this->authorizedDc = $state->authorizedDc) { - if ($this->isRunning()) { - $this->resume(true); - } else { - $this->start(); - } - } - } - - /** - * Main loop. - */ - #[\Override] - public function loop(): ?float - { - if ($this->authorizedDc === null) { - return self::PAUSE; - } - $this->API->feeders[$this->channelId] ??= new FeedLoop($this->API, $this->channelId); - $this->API->updaters[$this->channelId] ??= new UpdateLoop($this->API, $this->channelId); - - $this->feeder = $this->API->feeders[$this->channelId]; - $state = $this->channelId === self::GENERIC ? $this->API->loadUpdateState() : $this->API->loadChannelState($this->channelId); - - $result = []; - while (true) { - if ($this->channelId) { - $this->API->logger('Resumed and fetching '.$this->channelId.' difference...', Logger::ULTRA_VERBOSE); - if ($state->pts() <= 1) { - $limit = 10; - } elseif ($this->API->authorization['user']['bot']) { - $limit = 100000; - } else { - $limit = 100; - } - $request_pts = $state->pts(); - try { - $difference = $this->API->methodCallAsyncRead('updates.getChannelDifference', ['channel' => $this->channelId, 'filter' => ['_' => 'channelMessagesFilterEmpty'], 'pts' => $request_pts, 'limit' => $limit, 'force' => true, 'floodWaitLimit' => 86400]); - } catch (ChannelPrivateError|ChatForbiddenError|ChannelInvalidError|UserBannedInChannelError) { - $this->feeder->stop(); - unset($this->API->updaters[$this->channelId], $this->API->feeders[$this->channelId]); - $this->API->getChannelStates()->remove($this->channelId); - $this->API->logger("Channel private, exiting {$this}"); - return self::STOP; - } catch (TimeoutError $e) { - delay(1.0); - continue; - } catch (PeerNotInDbException) { - $this->feeder->stop(); - $this->API->getChannelStates()->remove($this->channelId); - unset($this->API->updaters[$this->channelId], $this->API->feeders[$this->channelId]); - $this->API->logger("Channel private, exiting {$this}"); - return self::STOP; - } catch (PTSException $e) { - $this->feeder->stop(); - $this->API->getChannelStates()->remove($this->channelId); - unset($this->API->updaters[$this->channelId], $this->API->feeders[$this->channelId]); - $this->API->logger("Got PTS exception, exiting update loop for $this: $e", Logger::FATAL_ERROR); - return self::STOP; - } catch (TimeoutException) { - EventLoop::queue($this->API->report(...), "Network issues detected, please check logs!"); - continue; - } - $timeout = min(self::DEFAULT_TIMEOUT, $difference['timeout'] ?? self::DEFAULT_TIMEOUT); - $this->API->logger('Got '.$difference['_'], Logger::ULTRA_VERBOSE); - switch ($difference['_']) { - case 'updates.channelDifferenceEmpty': - $state->update($difference); - unset($difference); - break 2; - case 'updates.channelDifference': - if ($request_pts >= $difference['pts'] && $request_pts > 1) { - $this->API->logger("The PTS ({$difference['pts']}) I got with getDifference is smaller than the PTS I requested ".$state->pts().', using '.($state->pts() + 1), Logger::VERBOSE); - $difference['pts'] = $request_pts + 1; - } - $result += ($this->feeder->feed($difference['other_updates'])); - $state->update($difference); - if ($difference['new_messages']) { - $result[$this->channelId] = true; - } - $this->feeder->saveMessages($difference['new_messages']); - if (!$difference['final']) { - unset($difference); - break; - } - unset($difference); - break 2; - case 'updates.channelDifferenceTooLong': - if (isset($difference['dialog']['pts'])) { - $difference['pts'] = $difference['dialog']['pts']; - } - $state->update($difference); - if ($difference['messages']) { - $result[$this->channelId] = true; - } - $this->feeder->saveMessages($difference['messages']); - unset($difference); - break; - default: - throw new Exception('Unrecognized update difference received: '.var_export($difference, true)); - } - } else { - $this->API->logger('Resumed and fetching normal difference...', Logger::ULTRA_VERBOSE); - do { - try { - $difference = $this->API->methodCallAsyncRead('updates.getDifference', ['pts' => $state->pts(), 'date' => $state->date(), 'qts' => $state->qts(), 'specialMethodType' => SpecialMethodType::USER_RELATED], $this->authorizedDc); - break; - } catch (TimeoutError) { - delay(1.0); - } catch (TimeoutException) { - EventLoop::queue($this->API->report(...), "Network issues detected, please check logs!"); - } - } while (true); - $this->API->logger('Got '.$difference['_'], Logger::ULTRA_VERBOSE); - $timeout = self::DEFAULT_TIMEOUT; - switch ($difference['_']) { - case 'updates.differenceEmpty': - $state->update($difference); - unset($difference); - break 2; - case 'updates.difference': - $state->qts($difference['state']['qts']); - foreach ($difference['new_encrypted_messages'] as &$encrypted) { - $encrypted = ['_' => 'updateNewEncryptedMessage', 'message' => $encrypted]; - } - $result += ($this->feeder->feed($difference['other_updates'])); - $result += ($this->feeder->feed($difference['new_encrypted_messages'])); - $state->update($difference['state']); - if ($difference['new_messages']) { - $result[$this->channelId] = true; - } - $this->feeder->saveMessages($difference['new_messages']); - unset($difference); - break 2; - case 'updates.differenceSlice': - $state->qts($difference['intermediate_state']['qts']); - foreach ($difference['new_encrypted_messages'] as &$encrypted) { - $encrypted = ['_' => 'updateNewEncryptedMessage', 'message' => $encrypted]; - } - $result += ($this->feeder->feed($difference['other_updates'])); - $result += ($this->feeder->feed($difference['new_encrypted_messages'])); - $state->update($difference['intermediate_state']); - if ($difference['new_messages']) { - $result[$this->channelId] = true; - } - $this->feeder->saveMessages($difference['new_messages']); - unset($difference); - break; - case 'updates.differenceTooLong': - $state->update($difference); - unset($difference); - break; - default: - throw new Exception('Unrecognized update difference received: '.var_export($difference, true)); - } - } - } - $this->API->logger("Finished parsing updates in {$this}, now resuming feeders", Logger::ULTRA_VERBOSE); - foreach ($result as $channelId => $_) { - $this->API->feeders[$channelId]?->resume(); - } - $this->API->logger("Finished parsing updates in {$this}, pausing for $timeout seconds", Logger::ULTRA_VERBOSE); - - return $timeout; - } - /** - * Get loop name. - */ - public function __toString(): string - { - return $this->channelId ? - "getUpdate loop channel {$this->channelId}" : - 'getUpdate loop generic'; - } -} diff --git a/patches/madelineproto/generate-artifacts.php b/patches/madelineproto/generate-artifacts.php deleted file mode 100644 index a4201c0..0000000 --- a/patches/madelineproto/generate-artifacts.php +++ /dev/null @@ -1,69 +0,0 @@ -getPrevious() instanceof TimeoutException)) {'; -foreach ([20, 24] as $indent) { - $space = str_repeat(' ', $indent); - $patched = str_replace("\n" . $space . $guard, "\n" . $space . 'if (!$this->isRunning() || $this->authorizedDc === null) {' . "\n" . $space . ' return self::STOP;' . "\n" . $space . '}' . "\n" . $space . $guard, $patched, $count); - if ($count !== 1) { - throw new RuntimeException('Unexpected reference patch layout.'); - } -} -$report = 'EventLoop::queue($this->API->report(...), "Network issues detected, please check logs!");'; -$patched = str_replace(' ' . $report . "\n" . ' continue;', ' ' . $report . "\n" . ' return self::DEFAULT_TIMEOUT;', $patched, $count); -if ($count !== 1) { - throw new RuntimeException('Unexpected channel recovery layout.'); -} -$patched = str_replace(' ' . $report . "\n", ' ' . $report . "\n" . ' return self::DEFAULT_TIMEOUT;' . "\n", $patched, $count); -if ($count !== 1) { - throw new RuntimeException('Unexpected generic recovery layout.'); -} -$diff = static function (string $before, string $after): string { - $old = explode("\n", rtrim($before, "\n")); - $new = explode("\n", rtrim($after, "\n")); - return "--- a/vendor/danog/madelineproto/src/Loop/Update/UpdateLoop.php\n+++ b/vendor/danog/madelineproto/src/Loop/Update/UpdateLoop.php\n" - . '@@ -1,' . count($old) . ' +1,' . count($new) . " @@\n" - . implode("\n", array_map(static fn (string $line): string => '-' . $line, $old)) . "\n" - . implode("\n", array_map(static fn (string $line): string => '+' . $line, $new)) . "\n"; -}; -file_put_contents(__DIR__ . '/original-reference.patch', $diff($source, $reference)); -$patch = $diff($source, $patched); -file_put_contents(__DIR__ . '/update-loop-timeout-cancellation.patch', $patch); -$manifest = ['schema_version' => 1, 'reviewed_at' => '2026-10-13', 'package' => 'danog/madelineproto', 'target' => 'src/Loop/Update/UpdateLoop.php', - 'original_reference' => ['path' => 'local-reference/newsearch-v2/docker/patch-madeline-update-loop.php', 'also_found' => 'local-reference/psy new/release-r21-work/docker/patch-madeline-update-loop.php', 'sha256' => hash_file('sha256', __DIR__ . '/original-reference.php'), 'note' => 'Historical artifact was a guarded PHP patch script; reference unified diff is reproduced from that script. Paths are logical local-reference identifiers, not public download URLs.'], - 'approved' => [['version' => '8.7.0', 'commit' => '7b99dd0f2d964a492c377912ffce9f5ce61aa9ed', 'mode' => 'patch', 'baseline' => 'baseline/UpdateLoop.php', - 'source_url' => 'https://github.com/danog/MadelineProto/blob/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/src/Loop/Update/UpdateLoop.php', - 'original_sha256' => hash('sha256', $source), 'patched_sha256' => hash('sha256', $patched), 'patch' => 'update-loop-timeout-cancellation.patch', 'patch_sha256' => hash('sha256', $patch)]], - 'official_versions' => [], 'notes' => 'No released official solution was verified. New versions require source, call-chain and behavioral review before admission.']; -$manifest['original_reference']['maintainer_attestation'] = array ( - 'date' => '2026-10-16', - 'by' => 'WizardLoop project maintainer', - 'scope' => 'patches/madelineproto/original-reference.php', - 'sha256' => '1ec2691498e878d28ca8e9cde94b00c803d9ccba789096ffc8471156dfb429e9', - 'authorship' => 'The maintainer states that they authored this historical UpdateLoop helper.', - 'distribution_authorization' => 'The maintainer explicitly authorizes distribution of this helper under the project license AGPL-3.0-only.', - 'license' => 'AGPL-3.0-only', - 'evidence' => 'Explicit maintainer instruction during preparation of the 3.0.0 release.', - 'limits' => 'Records the maintainer attestation; not an independent authorship or legal certification. Original helper bytes and upstream dependency notices remain unchanged.', -); -file_put_contents(__DIR__ . '/manifest.json', json_encode($manifest, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_THROW_ON_ERROR) . "\n"); -echo "Reviewed patch artifacts regenerated.\n"; \ No newline at end of file diff --git a/patches/madelineproto/manifest.json b/patches/madelineproto/manifest.json deleted file mode 100644 index be4b1dd..0000000 --- a/patches/madelineproto/manifest.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "schema_version": 1, - "reviewed_at": "2026-10-13", - "package": "danog/madelineproto", - "target": "src/Loop/Update/UpdateLoop.php", - "original_reference": { - "path": "local-reference/newsearch-v2/docker/patch-madeline-update-loop.php", - "also_found": "local-reference/psy new/release-r21-work/docker/patch-madeline-update-loop.php", - "sha256": "1ec2691498e878d28ca8e9cde94b00c803d9ccba789096ffc8471156dfb429e9", - "note": "Historical artifact was a guarded PHP patch script; reference unified diff is reproduced from that script. Paths are logical local-reference identifiers, not public download URLs.", - "maintainer_attestation": { - "date": "2026-10-16", - "by": "WizardLoop project maintainer", - "scope": "patches/madelineproto/original-reference.php", - "sha256": "1ec2691498e878d28ca8e9cde94b00c803d9ccba789096ffc8471156dfb429e9", - "authorship": "The maintainer states that they authored this historical UpdateLoop helper.", - "distribution_authorization": "The maintainer explicitly authorizes distribution of this helper under the project license AGPL-3.0-only.", - "license": "AGPL-3.0-only", - "evidence": "Explicit maintainer instruction during preparation of the 3.0.0 release.", - "limits": "Records the maintainer attestation; not an independent authorship or legal certification. Original helper bytes and upstream dependency notices remain unchanged." - } - }, - "approved": [ - { - "version": "8.7.0", - "commit": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "mode": "patch", - "baseline": "baseline/UpdateLoop.php", - "source_url": "https://github.com/danog/MadelineProto/blob/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/src/Loop/Update/UpdateLoop.php", - "original_sha256": "2fbcbb73822258102837f53f4a231b87526d66809be7acd6339156ea778a8c2f", - "patched_sha256": "8f6cb1a483c879024bddea289e90d4bf2d71dd15716102bc83a1f34a243782e4", - "patch": "update-loop-timeout-cancellation.patch", - "patch_sha256": "2f5c34d5e2749d3575ef9de1ec80bff60a9ced1240ca61ef8727583ee939f592" - } - ], - "official_versions": [], - "notes": "No released official solution was verified. New versions require source, call-chain and behavioral review before admission." -} diff --git a/patches/madelineproto/original-reference.patch b/patches/madelineproto/original-reference.patch deleted file mode 100644 index 03fa67b..0000000 --- a/patches/madelineproto/original-reference.patch +++ /dev/null @@ -1,536 +0,0 @@ ---- a/vendor/danog/madelineproto/src/Loop/Update/UpdateLoop.php -+++ b/vendor/danog/madelineproto/src/Loop/Update/UpdateLoop.php -@@ -1,263 +1,270 @@ --. -- * -- * @author Daniil Gentili -- * @copyright 2016-2025 Daniil Gentili -- * @license https://opensource.org/licenses/AGPL-3.0 AGPLv3 -- * @link https://docs.madelineproto.xyz MadelineProto documentation -- */ -- --namespace danog\MadelineProto\Loop\Update; -- --use Amp\TimeoutException; --use danog\Loop\Loop; --use danog\MadelineProto\API; --use danog\MadelineProto\Exception; --use danog\MadelineProto\Logger; --use danog\MadelineProto\Loop\InternalLoop; --use danog\MadelineProto\MTProto; --use danog\MadelineProto\MTProto\LoginState; --use danog\MadelineProto\MTProto\SpecialMethodType; --use danog\MadelineProto\PeerNotInDbException; --use danog\MadelineProto\PTSException; --use danog\MadelineProto\Reactive\SimpleSubscriber; --use danog\MadelineProto\RPCError\ChannelInvalidError; --use danog\MadelineProto\RPCError\ChannelPrivateError; --use danog\MadelineProto\RPCError\ChatForbiddenError; --use danog\MadelineProto\RPCError\TimeoutError; --use danog\MadelineProto\RPCError\UserBannedInChannelError; -- --use Revolt\EventLoop; --use function Amp\delay; -- --/** -- * Update loop. -- * -- * @internal -- * -- * @author Daniil Gentili -- * -- * @implements SimpleSubscriber -- */ --final class UpdateLoop extends Loop implements SimpleSubscriber --{ -- use InternalLoop { -- __construct as private init; -- } -- /** -- * Main loop ID. -- */ -- public const GENERIC = 0; -- -- private const DEFAULT_TIMEOUT = 10.0; -- -- /** -- * Feed loop. -- */ -- private ?FeedLoop $feeder = null; -- private ?int $authorizedDc = null; -- /** -- * Constructor. -- */ -- public function __construct(MTProto $API, private int $channelId) -- { -- $this->init($API); -- $API->loginState->subscribe($this); -- } -- public function __sleep(): array -- { -- return ['channelId', 'API', 'feeder', 'authorizedDc']; -- } -- #[\Override] -- public function onSimpleStateChange($state): void -- { -- if ($state->state !== API::LOGGED_IN) { -- $this->authorizedDc = null; -- return; -- } -- if (null !== $this->authorizedDc = $state->authorizedDc) { -- if ($this->isRunning()) { -- $this->resume(true); -- } else { -- $this->start(); -- } -- } -- } -- -- /** -- * Main loop. -- */ -- #[\Override] -- public function loop(): ?float -- { -- if ($this->authorizedDc === null) { -- return self::PAUSE; -- } -- $this->API->feeders[$this->channelId] ??= new FeedLoop($this->API, $this->channelId); -- $this->API->updaters[$this->channelId] ??= new UpdateLoop($this->API, $this->channelId); -- -- $this->feeder = $this->API->feeders[$this->channelId]; -- $state = $this->channelId === self::GENERIC ? $this->API->loadUpdateState() : $this->API->loadChannelState($this->channelId); -- -- $result = []; -- while (true) { -- if ($this->channelId) { -- $this->API->logger('Resumed and fetching '.$this->channelId.' difference...', Logger::ULTRA_VERBOSE); -- if ($state->pts() <= 1) { -- $limit = 10; -- } elseif ($this->API->authorization['user']['bot']) { -- $limit = 100000; -- } else { -- $limit = 100; -- } -- $request_pts = $state->pts(); -- try { -- $difference = $this->API->methodCallAsyncRead('updates.getChannelDifference', ['channel' => $this->channelId, 'filter' => ['_' => 'channelMessagesFilterEmpty'], 'pts' => $request_pts, 'limit' => $limit, 'force' => true, 'floodWaitLimit' => 86400]); -- } catch (ChannelPrivateError|ChatForbiddenError|ChannelInvalidError|UserBannedInChannelError) { -- $this->feeder->stop(); -- unset($this->API->updaters[$this->channelId], $this->API->feeders[$this->channelId]); -- $this->API->getChannelStates()->remove($this->channelId); -- $this->API->logger("Channel private, exiting {$this}"); -- return self::STOP; -- } catch (TimeoutError $e) { -- delay(1.0); -- continue; -- } catch (PeerNotInDbException) { -- $this->feeder->stop(); -- $this->API->getChannelStates()->remove($this->channelId); -- unset($this->API->updaters[$this->channelId], $this->API->feeders[$this->channelId]); -- $this->API->logger("Channel private, exiting {$this}"); -- return self::STOP; -- } catch (PTSException $e) { -- $this->feeder->stop(); -- $this->API->getChannelStates()->remove($this->channelId); -- unset($this->API->updaters[$this->channelId], $this->API->feeders[$this->channelId]); -- $this->API->logger("Got PTS exception, exiting update loop for $this: $e", Logger::FATAL_ERROR); -- return self::STOP; -- } catch (TimeoutException) { -- EventLoop::queue($this->API->report(...), "Network issues detected, please check logs!"); -- continue; -- } -- $timeout = min(self::DEFAULT_TIMEOUT, $difference['timeout'] ?? self::DEFAULT_TIMEOUT); -- $this->API->logger('Got '.$difference['_'], Logger::ULTRA_VERBOSE); -- switch ($difference['_']) { -- case 'updates.channelDifferenceEmpty': -- $state->update($difference); -- unset($difference); -- break 2; -- case 'updates.channelDifference': -- if ($request_pts >= $difference['pts'] && $request_pts > 1) { -- $this->API->logger("The PTS ({$difference['pts']}) I got with getDifference is smaller than the PTS I requested ".$state->pts().', using '.($state->pts() + 1), Logger::VERBOSE); -- $difference['pts'] = $request_pts + 1; -- } -- $result += ($this->feeder->feed($difference['other_updates'])); -- $state->update($difference); -- if ($difference['new_messages']) { -- $result[$this->channelId] = true; -- } -- $this->feeder->saveMessages($difference['new_messages']); -- if (!$difference['final']) { -- unset($difference); -- break; -- } -- unset($difference); -- break 2; -- case 'updates.channelDifferenceTooLong': -- if (isset($difference['dialog']['pts'])) { -- $difference['pts'] = $difference['dialog']['pts']; -- } -- $state->update($difference); -- if ($difference['messages']) { -- $result[$this->channelId] = true; -- } -- $this->feeder->saveMessages($difference['messages']); -- unset($difference); -- break; -- default: -- throw new Exception('Unrecognized update difference received: '.var_export($difference, true)); -- } -- } else { -- $this->API->logger('Resumed and fetching normal difference...', Logger::ULTRA_VERBOSE); -- do { -- try { -- $difference = $this->API->methodCallAsyncRead('updates.getDifference', ['pts' => $state->pts(), 'date' => $state->date(), 'qts' => $state->qts(), 'specialMethodType' => SpecialMethodType::USER_RELATED], $this->authorizedDc); -- break; -- } catch (TimeoutError) { -- delay(1.0); -- } catch (TimeoutException) { -- EventLoop::queue($this->API->report(...), "Network issues detected, please check logs!"); -- } -- } while (true); -- $this->API->logger('Got '.$difference['_'], Logger::ULTRA_VERBOSE); -- $timeout = self::DEFAULT_TIMEOUT; -- switch ($difference['_']) { -- case 'updates.differenceEmpty': -- $state->update($difference); -- unset($difference); -- break 2; -- case 'updates.difference': -- $state->qts($difference['state']['qts']); -- foreach ($difference['new_encrypted_messages'] as &$encrypted) { -- $encrypted = ['_' => 'updateNewEncryptedMessage', 'message' => $encrypted]; -- } -- $result += ($this->feeder->feed($difference['other_updates'])); -- $result += ($this->feeder->feed($difference['new_encrypted_messages'])); -- $state->update($difference['state']); -- if ($difference['new_messages']) { -- $result[$this->channelId] = true; -- } -- $this->feeder->saveMessages($difference['new_messages']); -- unset($difference); -- break 2; -- case 'updates.differenceSlice': -- $state->qts($difference['intermediate_state']['qts']); -- foreach ($difference['new_encrypted_messages'] as &$encrypted) { -- $encrypted = ['_' => 'updateNewEncryptedMessage', 'message' => $encrypted]; -- } -- $result += ($this->feeder->feed($difference['other_updates'])); -- $result += ($this->feeder->feed($difference['new_encrypted_messages'])); -- $state->update($difference['intermediate_state']); -- if ($difference['new_messages']) { -- $result[$this->channelId] = true; -- } -- $this->feeder->saveMessages($difference['new_messages']); -- unset($difference); -- break; -- case 'updates.differenceTooLong': -- $state->update($difference); -- unset($difference); -- break; -- default: -- throw new Exception('Unrecognized update difference received: '.var_export($difference, true)); -- } -- } -- } -- $this->API->logger("Finished parsing updates in {$this}, now resuming feeders", Logger::ULTRA_VERBOSE); -- foreach ($result as $channelId => $_) { -- $this->API->feeders[$channelId]?->resume(); -- } -- $this->API->logger("Finished parsing updates in {$this}, pausing for $timeout seconds", Logger::ULTRA_VERBOSE); -- -- return $timeout; -- } -- /** -- * Get loop name. -- */ -- public function __toString(): string -- { -- return $this->channelId ? -- "getUpdate loop channel {$this->channelId}" : -- 'getUpdate loop generic'; -- } --} -+. -+ * -+ * @author Daniil Gentili -+ * @copyright 2016-2025 Daniil Gentili -+ * @license https://opensource.org/licenses/AGPL-3.0 AGPLv3 -+ * @link https://docs.madelineproto.xyz MadelineProto documentation -+ */ -+ -+namespace danog\MadelineProto\Loop\Update; -+ -+use Amp\CancelledException; -+use Amp\TimeoutException; -+use danog\Loop\Loop; -+use danog\MadelineProto\API; -+use danog\MadelineProto\Exception; -+use danog\MadelineProto\Logger; -+use danog\MadelineProto\Loop\InternalLoop; -+use danog\MadelineProto\MTProto; -+use danog\MadelineProto\MTProto\LoginState; -+use danog\MadelineProto\MTProto\SpecialMethodType; -+use danog\MadelineProto\PeerNotInDbException; -+use danog\MadelineProto\PTSException; -+use danog\MadelineProto\Reactive\SimpleSubscriber; -+use danog\MadelineProto\RPCError\ChannelInvalidError; -+use danog\MadelineProto\RPCError\ChannelPrivateError; -+use danog\MadelineProto\RPCError\ChatForbiddenError; -+use danog\MadelineProto\RPCError\TimeoutError; -+use danog\MadelineProto\RPCError\UserBannedInChannelError; -+ -+use Revolt\EventLoop; -+use function Amp\delay; -+ -+/** -+ * Update loop. -+ * -+ * @internal -+ * -+ * @author Daniil Gentili -+ * -+ * @implements SimpleSubscriber -+ */ -+final class UpdateLoop extends Loop implements SimpleSubscriber -+{ -+ use InternalLoop { -+ __construct as private init; -+ } -+ /** -+ * Main loop ID. -+ */ -+ public const GENERIC = 0; -+ -+ private const DEFAULT_TIMEOUT = 10.0; -+ -+ /** -+ * Feed loop. -+ */ -+ private ?FeedLoop $feeder = null; -+ private ?int $authorizedDc = null; -+ /** -+ * Constructor. -+ */ -+ public function __construct(MTProto $API, private int $channelId) -+ { -+ $this->init($API); -+ $API->loginState->subscribe($this); -+ } -+ public function __sleep(): array -+ { -+ return ['channelId', 'API', 'feeder', 'authorizedDc']; -+ } -+ #[\Override] -+ public function onSimpleStateChange($state): void -+ { -+ if ($state->state !== API::LOGGED_IN) { -+ $this->authorizedDc = null; -+ return; -+ } -+ if (null !== $this->authorizedDc = $state->authorizedDc) { -+ if ($this->isRunning()) { -+ $this->resume(true); -+ } else { -+ $this->start(); -+ } -+ } -+ } -+ -+ /** -+ * Main loop. -+ */ -+ #[\Override] -+ public function loop(): ?float -+ { -+ if ($this->authorizedDc === null) { -+ return self::PAUSE; -+ } -+ $this->API->feeders[$this->channelId] ??= new FeedLoop($this->API, $this->channelId); -+ $this->API->updaters[$this->channelId] ??= new UpdateLoop($this->API, $this->channelId); -+ -+ $this->feeder = $this->API->feeders[$this->channelId]; -+ $state = $this->channelId === self::GENERIC ? $this->API->loadUpdateState() : $this->API->loadChannelState($this->channelId); -+ -+ $result = []; -+ while (true) { -+ if ($this->channelId) { -+ $this->API->logger('Resumed and fetching '.$this->channelId.' difference...', Logger::ULTRA_VERBOSE); -+ if ($state->pts() <= 1) { -+ $limit = 10; -+ } elseif ($this->API->authorization['user']['bot']) { -+ $limit = 100000; -+ } else { -+ $limit = 100; -+ } -+ $request_pts = $state->pts(); -+ try { -+ $difference = $this->API->methodCallAsyncRead('updates.getChannelDifference', ['channel' => $this->channelId, 'filter' => ['_' => 'channelMessagesFilterEmpty'], 'pts' => $request_pts, 'limit' => $limit, 'force' => true, 'floodWaitLimit' => 86400]); -+ } catch (ChannelPrivateError|ChatForbiddenError|ChannelInvalidError|UserBannedInChannelError) { -+ $this->feeder->stop(); -+ unset($this->API->updaters[$this->channelId], $this->API->feeders[$this->channelId]); -+ $this->API->getChannelStates()->remove($this->channelId); -+ $this->API->logger("Channel private, exiting {$this}"); -+ return self::STOP; -+ } catch (TimeoutError $e) { -+ delay(1.0); -+ continue; -+ } catch (PeerNotInDbException) { -+ $this->feeder->stop(); -+ $this->API->getChannelStates()->remove($this->channelId); -+ unset($this->API->updaters[$this->channelId], $this->API->feeders[$this->channelId]); -+ $this->API->logger("Channel private, exiting {$this}"); -+ return self::STOP; -+ } catch (PTSException $e) { -+ $this->feeder->stop(); -+ $this->API->getChannelStates()->remove($this->channelId); -+ unset($this->API->updaters[$this->channelId], $this->API->feeders[$this->channelId]); -+ $this->API->logger("Got PTS exception, exiting update loop for $this: $e", Logger::FATAL_ERROR); -+ return self::STOP; -+ } catch (TimeoutException|CancelledException $e) { -+ if ($e instanceof CancelledException && !($e->getPrevious() instanceof TimeoutException)) { -+ throw $e; -+ } -+ EventLoop::queue($this->API->report(...), "Network issues detected, please check logs!"); -+ continue; -+ } -+ $timeout = min(self::DEFAULT_TIMEOUT, $difference['timeout'] ?? self::DEFAULT_TIMEOUT); -+ $this->API->logger('Got '.$difference['_'], Logger::ULTRA_VERBOSE); -+ switch ($difference['_']) { -+ case 'updates.channelDifferenceEmpty': -+ $state->update($difference); -+ unset($difference); -+ break 2; -+ case 'updates.channelDifference': -+ if ($request_pts >= $difference['pts'] && $request_pts > 1) { -+ $this->API->logger("The PTS ({$difference['pts']}) I got with getDifference is smaller than the PTS I requested ".$state->pts().', using '.($state->pts() + 1), Logger::VERBOSE); -+ $difference['pts'] = $request_pts + 1; -+ } -+ $result += ($this->feeder->feed($difference['other_updates'])); -+ $state->update($difference); -+ if ($difference['new_messages']) { -+ $result[$this->channelId] = true; -+ } -+ $this->feeder->saveMessages($difference['new_messages']); -+ if (!$difference['final']) { -+ unset($difference); -+ break; -+ } -+ unset($difference); -+ break 2; -+ case 'updates.channelDifferenceTooLong': -+ if (isset($difference['dialog']['pts'])) { -+ $difference['pts'] = $difference['dialog']['pts']; -+ } -+ $state->update($difference); -+ if ($difference['messages']) { -+ $result[$this->channelId] = true; -+ } -+ $this->feeder->saveMessages($difference['messages']); -+ unset($difference); -+ break; -+ default: -+ throw new Exception('Unrecognized update difference received: '.var_export($difference, true)); -+ } -+ } else { -+ $this->API->logger('Resumed and fetching normal difference...', Logger::ULTRA_VERBOSE); -+ do { -+ try { -+ $difference = $this->API->methodCallAsyncRead('updates.getDifference', ['pts' => $state->pts(), 'date' => $state->date(), 'qts' => $state->qts(), 'specialMethodType' => SpecialMethodType::USER_RELATED], $this->authorizedDc); -+ break; -+ } catch (TimeoutError) { -+ delay(1.0); -+ } catch (TimeoutException|CancelledException $e) { -+ if ($e instanceof CancelledException && !($e->getPrevious() instanceof TimeoutException)) { -+ throw $e; -+ } -+ EventLoop::queue($this->API->report(...), "Network issues detected, please check logs!"); -+ } -+ } while (true); -+ $this->API->logger('Got '.$difference['_'], Logger::ULTRA_VERBOSE); -+ $timeout = self::DEFAULT_TIMEOUT; -+ switch ($difference['_']) { -+ case 'updates.differenceEmpty': -+ $state->update($difference); -+ unset($difference); -+ break 2; -+ case 'updates.difference': -+ $state->qts($difference['state']['qts']); -+ foreach ($difference['new_encrypted_messages'] as &$encrypted) { -+ $encrypted = ['_' => 'updateNewEncryptedMessage', 'message' => $encrypted]; -+ } -+ $result += ($this->feeder->feed($difference['other_updates'])); -+ $result += ($this->feeder->feed($difference['new_encrypted_messages'])); -+ $state->update($difference['state']); -+ if ($difference['new_messages']) { -+ $result[$this->channelId] = true; -+ } -+ $this->feeder->saveMessages($difference['new_messages']); -+ unset($difference); -+ break 2; -+ case 'updates.differenceSlice': -+ $state->qts($difference['intermediate_state']['qts']); -+ foreach ($difference['new_encrypted_messages'] as &$encrypted) { -+ $encrypted = ['_' => 'updateNewEncryptedMessage', 'message' => $encrypted]; -+ } -+ $result += ($this->feeder->feed($difference['other_updates'])); -+ $result += ($this->feeder->feed($difference['new_encrypted_messages'])); -+ $state->update($difference['intermediate_state']); -+ if ($difference['new_messages']) { -+ $result[$this->channelId] = true; -+ } -+ $this->feeder->saveMessages($difference['new_messages']); -+ unset($difference); -+ break; -+ case 'updates.differenceTooLong': -+ $state->update($difference); -+ unset($difference); -+ break; -+ default: -+ throw new Exception('Unrecognized update difference received: '.var_export($difference, true)); -+ } -+ } -+ } -+ $this->API->logger("Finished parsing updates in {$this}, now resuming feeders", Logger::ULTRA_VERBOSE); -+ foreach ($result as $channelId => $_) { -+ $this->API->feeders[$channelId]?->resume(); -+ } -+ $this->API->logger("Finished parsing updates in {$this}, pausing for $timeout seconds", Logger::ULTRA_VERBOSE); -+ -+ return $timeout; -+ } -+ /** -+ * Get loop name. -+ */ -+ public function __toString(): string -+ { -+ return $this->channelId ? -+ "getUpdate loop channel {$this->channelId}" : -+ 'getUpdate loop generic'; -+ } -+} diff --git a/patches/madelineproto/original-reference.php b/patches/madelineproto/original-reference.php deleted file mode 100644 index e484f93..0000000 --- a/patches/madelineproto/original-reference.php +++ /dev/null @@ -1,148 +0,0 @@ -getPrevious() instanceof TimeoutException)) {'; - $report = 'EventLoop::queue($this->API->report(...), "Network issues detected, please check logs!");'; - - $originalChannel = implode($newline, [ - ' } catch (TimeoutException) {', - ' ' . $report, - ' continue;', - ' }', - ]); - $patchedChannel = implode($newline, [ - ' } catch (TimeoutException|CancelledException $e) {', - ' ' . $guard, - ' throw $e;', - ' }', - ' ' . $report, - ' continue;', - ' }', - ]); - $originalGeneric = implode($newline, [ - ' } catch (TimeoutException) {', - ' ' . $report, - ' }', - ]); - $patchedGeneric = implode($newline, [ - ' } catch (TimeoutException|CancelledException $e) {', - ' ' . $guard, - ' throw $e;', - ' }', - ' ' . $report, - ' }', - ]); - - $commonLayoutIsExpected = substr_count($source, $timeoutImport) === 1 - && substr_count($source, "methodCallAsyncRead('updates.getChannelDifference'") === 1 - && substr_count($source, "methodCallAsyncRead('updates.getDifference'") === 1 - && substr_count($source, $report) === 2; - if (!$commonLayoutIsExpected) { - throw new RuntimeException('Unsupported MadelineProto UpdateLoop layout; expected imports, difference calls, or timeout reports changed.'); - } - - $isFullyPatched = substr_count($source, $cancelledImport) === 1 - && substr_count($source, $plainCatch) === 0 - && substr_count($source, $unionCatch) === 2 - && substr_count($source, $guard) === 2 - && substr_count($source, $patchedChannel) === 1 - && substr_count($source, $patchedGeneric) === 1; - if ($isFullyPatched) { - return 'already-patched'; - } - - $isExactOriginal = substr_count($source, $cancelledImport) === 0 - && substr_count($source, $plainCatch) === 2 - && substr_count($source, $unionCatch) === 0 - && substr_count($source, $guard) === 0 - && substr_count($source, $originalChannel) === 1 - && substr_count($source, $originalGeneric) === 1; - if (!$isExactOriginal) { - throw new RuntimeException('MadelineProto UpdateLoop is partially patched or has an unsupported upstream layout; refusing an ambiguous patch.'); - } - - $patched = str_replace( - $timeoutImport, - $cancelledImport . $newline . $timeoutImport, - $source, - $importReplacements, - ); - $patched = str_replace($originalChannel, $patchedChannel, $patched, $channelReplacements); - $patched = str_replace($originalGeneric, $patchedGeneric, $patched, $genericReplacements); - if ($importReplacements !== 1 || $channelReplacements !== 1 || $genericReplacements !== 1) { - throw new RuntimeException('MadelineProto UpdateLoop compatibility patch did not replace every guarded anchor exactly once.'); - } - - if (substr_count($patched, $cancelledImport) !== 1 - || substr_count($patched, $plainCatch) !== 0 - || substr_count($patched, $unionCatch) !== 2 - || substr_count($patched, $guard) !== 2 - || substr_count($patched, $patchedChannel) !== 1 - || substr_count($patched, $patchedGeneric) !== 1 - ) { - throw new RuntimeException('MadelineProto UpdateLoop compatibility patch failed its postconditions.'); - } - - try { - token_get_all($patched, TOKEN_PARSE); - } catch (ParseError $error) { - throw new RuntimeException('Patched MadelineProto UpdateLoop is not valid PHP: ' . $error->getMessage(), 0, $error); - } - - newSearchWriteUpdateLoopCompatibilityFile($updateLoopFile, $patched); - return 'patched'; -} - -function newSearchWriteUpdateLoopCompatibilityFile(string $path, string $contents): void -{ - $temporary = $path . '.newsearch-' . bin2hex(random_bytes(6)) . '.tmp'; - try { - $bytes = file_put_contents($temporary, $contents, LOCK_EX); - if ($bytes !== strlen($contents)) { - throw new RuntimeException('Unable to write complete UpdateLoop compatibility file: ' . $path); - } - if (!rename($temporary, $path)) { - throw new RuntimeException('Unable to atomically install UpdateLoop compatibility file: ' . $path); - } - } finally { - if (is_file($temporary)) { - @unlink($temporary); - } - } -} - -if (isset($_SERVER['SCRIPT_FILENAME']) && realpath((string) $_SERVER['SCRIPT_FILENAME']) === __FILE__) { - try { - $vendorRoot = $argv[1] ?? dirname(__DIR__) . '/vendor'; - $result = newSearchPatchMadelineUpdateLoop($vendorRoot); - fwrite(STDOUT, "MadelineProto UpdateLoop timeout compatibility: {$result}\n"); - } catch (Throwable $error) { - fwrite(STDERR, 'ERROR: MadelineProto UpdateLoop timeout compatibility patch failed: ' . $error->getMessage() . "\n"); - exit(1); - } -} diff --git a/patches/madelineproto/update-loop-timeout-cancellation.patch b/patches/madelineproto/update-loop-timeout-cancellation.patch deleted file mode 100644 index 5a7928d..0000000 --- a/patches/madelineproto/update-loop-timeout-cancellation.patch +++ /dev/null @@ -1,543 +0,0 @@ ---- a/vendor/danog/madelineproto/src/Loop/Update/UpdateLoop.php -+++ b/vendor/danog/madelineproto/src/Loop/Update/UpdateLoop.php -@@ -1,263 +1,277 @@ --. -- * -- * @author Daniil Gentili -- * @copyright 2016-2025 Daniil Gentili -- * @license https://opensource.org/licenses/AGPL-3.0 AGPLv3 -- * @link https://docs.madelineproto.xyz MadelineProto documentation -- */ -- --namespace danog\MadelineProto\Loop\Update; -- --use Amp\TimeoutException; --use danog\Loop\Loop; --use danog\MadelineProto\API; --use danog\MadelineProto\Exception; --use danog\MadelineProto\Logger; --use danog\MadelineProto\Loop\InternalLoop; --use danog\MadelineProto\MTProto; --use danog\MadelineProto\MTProto\LoginState; --use danog\MadelineProto\MTProto\SpecialMethodType; --use danog\MadelineProto\PeerNotInDbException; --use danog\MadelineProto\PTSException; --use danog\MadelineProto\Reactive\SimpleSubscriber; --use danog\MadelineProto\RPCError\ChannelInvalidError; --use danog\MadelineProto\RPCError\ChannelPrivateError; --use danog\MadelineProto\RPCError\ChatForbiddenError; --use danog\MadelineProto\RPCError\TimeoutError; --use danog\MadelineProto\RPCError\UserBannedInChannelError; -- --use Revolt\EventLoop; --use function Amp\delay; -- --/** -- * Update loop. -- * -- * @internal -- * -- * @author Daniil Gentili -- * -- * @implements SimpleSubscriber -- */ --final class UpdateLoop extends Loop implements SimpleSubscriber --{ -- use InternalLoop { -- __construct as private init; -- } -- /** -- * Main loop ID. -- */ -- public const GENERIC = 0; -- -- private const DEFAULT_TIMEOUT = 10.0; -- -- /** -- * Feed loop. -- */ -- private ?FeedLoop $feeder = null; -- private ?int $authorizedDc = null; -- /** -- * Constructor. -- */ -- public function __construct(MTProto $API, private int $channelId) -- { -- $this->init($API); -- $API->loginState->subscribe($this); -- } -- public function __sleep(): array -- { -- return ['channelId', 'API', 'feeder', 'authorizedDc']; -- } -- #[\Override] -- public function onSimpleStateChange($state): void -- { -- if ($state->state !== API::LOGGED_IN) { -- $this->authorizedDc = null; -- return; -- } -- if (null !== $this->authorizedDc = $state->authorizedDc) { -- if ($this->isRunning()) { -- $this->resume(true); -- } else { -- $this->start(); -- } -- } -- } -- -- /** -- * Main loop. -- */ -- #[\Override] -- public function loop(): ?float -- { -- if ($this->authorizedDc === null) { -- return self::PAUSE; -- } -- $this->API->feeders[$this->channelId] ??= new FeedLoop($this->API, $this->channelId); -- $this->API->updaters[$this->channelId] ??= new UpdateLoop($this->API, $this->channelId); -- -- $this->feeder = $this->API->feeders[$this->channelId]; -- $state = $this->channelId === self::GENERIC ? $this->API->loadUpdateState() : $this->API->loadChannelState($this->channelId); -- -- $result = []; -- while (true) { -- if ($this->channelId) { -- $this->API->logger('Resumed and fetching '.$this->channelId.' difference...', Logger::ULTRA_VERBOSE); -- if ($state->pts() <= 1) { -- $limit = 10; -- } elseif ($this->API->authorization['user']['bot']) { -- $limit = 100000; -- } else { -- $limit = 100; -- } -- $request_pts = $state->pts(); -- try { -- $difference = $this->API->methodCallAsyncRead('updates.getChannelDifference', ['channel' => $this->channelId, 'filter' => ['_' => 'channelMessagesFilterEmpty'], 'pts' => $request_pts, 'limit' => $limit, 'force' => true, 'floodWaitLimit' => 86400]); -- } catch (ChannelPrivateError|ChatForbiddenError|ChannelInvalidError|UserBannedInChannelError) { -- $this->feeder->stop(); -- unset($this->API->updaters[$this->channelId], $this->API->feeders[$this->channelId]); -- $this->API->getChannelStates()->remove($this->channelId); -- $this->API->logger("Channel private, exiting {$this}"); -- return self::STOP; -- } catch (TimeoutError $e) { -- delay(1.0); -- continue; -- } catch (PeerNotInDbException) { -- $this->feeder->stop(); -- $this->API->getChannelStates()->remove($this->channelId); -- unset($this->API->updaters[$this->channelId], $this->API->feeders[$this->channelId]); -- $this->API->logger("Channel private, exiting {$this}"); -- return self::STOP; -- } catch (PTSException $e) { -- $this->feeder->stop(); -- $this->API->getChannelStates()->remove($this->channelId); -- unset($this->API->updaters[$this->channelId], $this->API->feeders[$this->channelId]); -- $this->API->logger("Got PTS exception, exiting update loop for $this: $e", Logger::FATAL_ERROR); -- return self::STOP; -- } catch (TimeoutException) { -- EventLoop::queue($this->API->report(...), "Network issues detected, please check logs!"); -- continue; -- } -- $timeout = min(self::DEFAULT_TIMEOUT, $difference['timeout'] ?? self::DEFAULT_TIMEOUT); -- $this->API->logger('Got '.$difference['_'], Logger::ULTRA_VERBOSE); -- switch ($difference['_']) { -- case 'updates.channelDifferenceEmpty': -- $state->update($difference); -- unset($difference); -- break 2; -- case 'updates.channelDifference': -- if ($request_pts >= $difference['pts'] && $request_pts > 1) { -- $this->API->logger("The PTS ({$difference['pts']}) I got with getDifference is smaller than the PTS I requested ".$state->pts().', using '.($state->pts() + 1), Logger::VERBOSE); -- $difference['pts'] = $request_pts + 1; -- } -- $result += ($this->feeder->feed($difference['other_updates'])); -- $state->update($difference); -- if ($difference['new_messages']) { -- $result[$this->channelId] = true; -- } -- $this->feeder->saveMessages($difference['new_messages']); -- if (!$difference['final']) { -- unset($difference); -- break; -- } -- unset($difference); -- break 2; -- case 'updates.channelDifferenceTooLong': -- if (isset($difference['dialog']['pts'])) { -- $difference['pts'] = $difference['dialog']['pts']; -- } -- $state->update($difference); -- if ($difference['messages']) { -- $result[$this->channelId] = true; -- } -- $this->feeder->saveMessages($difference['messages']); -- unset($difference); -- break; -- default: -- throw new Exception('Unrecognized update difference received: '.var_export($difference, true)); -- } -- } else { -- $this->API->logger('Resumed and fetching normal difference...', Logger::ULTRA_VERBOSE); -- do { -- try { -- $difference = $this->API->methodCallAsyncRead('updates.getDifference', ['pts' => $state->pts(), 'date' => $state->date(), 'qts' => $state->qts(), 'specialMethodType' => SpecialMethodType::USER_RELATED], $this->authorizedDc); -- break; -- } catch (TimeoutError) { -- delay(1.0); -- } catch (TimeoutException) { -- EventLoop::queue($this->API->report(...), "Network issues detected, please check logs!"); -- } -- } while (true); -- $this->API->logger('Got '.$difference['_'], Logger::ULTRA_VERBOSE); -- $timeout = self::DEFAULT_TIMEOUT; -- switch ($difference['_']) { -- case 'updates.differenceEmpty': -- $state->update($difference); -- unset($difference); -- break 2; -- case 'updates.difference': -- $state->qts($difference['state']['qts']); -- foreach ($difference['new_encrypted_messages'] as &$encrypted) { -- $encrypted = ['_' => 'updateNewEncryptedMessage', 'message' => $encrypted]; -- } -- $result += ($this->feeder->feed($difference['other_updates'])); -- $result += ($this->feeder->feed($difference['new_encrypted_messages'])); -- $state->update($difference['state']); -- if ($difference['new_messages']) { -- $result[$this->channelId] = true; -- } -- $this->feeder->saveMessages($difference['new_messages']); -- unset($difference); -- break 2; -- case 'updates.differenceSlice': -- $state->qts($difference['intermediate_state']['qts']); -- foreach ($difference['new_encrypted_messages'] as &$encrypted) { -- $encrypted = ['_' => 'updateNewEncryptedMessage', 'message' => $encrypted]; -- } -- $result += ($this->feeder->feed($difference['other_updates'])); -- $result += ($this->feeder->feed($difference['new_encrypted_messages'])); -- $state->update($difference['intermediate_state']); -- if ($difference['new_messages']) { -- $result[$this->channelId] = true; -- } -- $this->feeder->saveMessages($difference['new_messages']); -- unset($difference); -- break; -- case 'updates.differenceTooLong': -- $state->update($difference); -- unset($difference); -- break; -- default: -- throw new Exception('Unrecognized update difference received: '.var_export($difference, true)); -- } -- } -- } -- $this->API->logger("Finished parsing updates in {$this}, now resuming feeders", Logger::ULTRA_VERBOSE); -- foreach ($result as $channelId => $_) { -- $this->API->feeders[$channelId]?->resume(); -- } -- $this->API->logger("Finished parsing updates in {$this}, pausing for $timeout seconds", Logger::ULTRA_VERBOSE); -- -- return $timeout; -- } -- /** -- * Get loop name. -- */ -- public function __toString(): string -- { -- return $this->channelId ? -- "getUpdate loop channel {$this->channelId}" : -- 'getUpdate loop generic'; -- } --} -+. -+ * -+ * @author Daniil Gentili -+ * @copyright 2016-2025 Daniil Gentili -+ * @license https://opensource.org/licenses/AGPL-3.0 AGPLv3 -+ * @link https://docs.madelineproto.xyz MadelineProto documentation -+ */ -+ -+namespace danog\MadelineProto\Loop\Update; -+ -+use Amp\CancelledException; -+use Amp\TimeoutException; -+use danog\Loop\Loop; -+use danog\MadelineProto\API; -+use danog\MadelineProto\Exception; -+use danog\MadelineProto\Logger; -+use danog\MadelineProto\Loop\InternalLoop; -+use danog\MadelineProto\MTProto; -+use danog\MadelineProto\MTProto\LoginState; -+use danog\MadelineProto\MTProto\SpecialMethodType; -+use danog\MadelineProto\PeerNotInDbException; -+use danog\MadelineProto\PTSException; -+use danog\MadelineProto\Reactive\SimpleSubscriber; -+use danog\MadelineProto\RPCError\ChannelInvalidError; -+use danog\MadelineProto\RPCError\ChannelPrivateError; -+use danog\MadelineProto\RPCError\ChatForbiddenError; -+use danog\MadelineProto\RPCError\TimeoutError; -+use danog\MadelineProto\RPCError\UserBannedInChannelError; -+ -+use Revolt\EventLoop; -+use function Amp\delay; -+ -+/** -+ * Update loop. -+ * -+ * @internal -+ * -+ * @author Daniil Gentili -+ * -+ * @implements SimpleSubscriber -+ */ -+final class UpdateLoop extends Loop implements SimpleSubscriber -+{ -+ use InternalLoop { -+ __construct as private init; -+ } -+ /** -+ * Main loop ID. -+ */ -+ public const GENERIC = 0; -+ -+ private const DEFAULT_TIMEOUT = 10.0; -+ -+ /** -+ * Feed loop. -+ */ -+ private ?FeedLoop $feeder = null; -+ private ?int $authorizedDc = null; -+ /** -+ * Constructor. -+ */ -+ public function __construct(MTProto $API, private int $channelId) -+ { -+ $this->init($API); -+ $API->loginState->subscribe($this); -+ } -+ public function __sleep(): array -+ { -+ return ['channelId', 'API', 'feeder', 'authorizedDc']; -+ } -+ #[\Override] -+ public function onSimpleStateChange($state): void -+ { -+ if ($state->state !== API::LOGGED_IN) { -+ $this->authorizedDc = null; -+ return; -+ } -+ if (null !== $this->authorizedDc = $state->authorizedDc) { -+ if ($this->isRunning()) { -+ $this->resume(true); -+ } else { -+ $this->start(); -+ } -+ } -+ } -+ -+ /** -+ * Main loop. -+ */ -+ #[\Override] -+ public function loop(): ?float -+ { -+ if ($this->authorizedDc === null) { -+ return self::PAUSE; -+ } -+ $this->API->feeders[$this->channelId] ??= new FeedLoop($this->API, $this->channelId); -+ $this->API->updaters[$this->channelId] ??= new UpdateLoop($this->API, $this->channelId); -+ -+ $this->feeder = $this->API->feeders[$this->channelId]; -+ $state = $this->channelId === self::GENERIC ? $this->API->loadUpdateState() : $this->API->loadChannelState($this->channelId); -+ -+ $result = []; -+ while (true) { -+ if ($this->channelId) { -+ $this->API->logger('Resumed and fetching '.$this->channelId.' difference...', Logger::ULTRA_VERBOSE); -+ if ($state->pts() <= 1) { -+ $limit = 10; -+ } elseif ($this->API->authorization['user']['bot']) { -+ $limit = 100000; -+ } else { -+ $limit = 100; -+ } -+ $request_pts = $state->pts(); -+ try { -+ $difference = $this->API->methodCallAsyncRead('updates.getChannelDifference', ['channel' => $this->channelId, 'filter' => ['_' => 'channelMessagesFilterEmpty'], 'pts' => $request_pts, 'limit' => $limit, 'force' => true, 'floodWaitLimit' => 86400]); -+ } catch (ChannelPrivateError|ChatForbiddenError|ChannelInvalidError|UserBannedInChannelError) { -+ $this->feeder->stop(); -+ unset($this->API->updaters[$this->channelId], $this->API->feeders[$this->channelId]); -+ $this->API->getChannelStates()->remove($this->channelId); -+ $this->API->logger("Channel private, exiting {$this}"); -+ return self::STOP; -+ } catch (TimeoutError $e) { -+ delay(1.0); -+ continue; -+ } catch (PeerNotInDbException) { -+ $this->feeder->stop(); -+ $this->API->getChannelStates()->remove($this->channelId); -+ unset($this->API->updaters[$this->channelId], $this->API->feeders[$this->channelId]); -+ $this->API->logger("Channel private, exiting {$this}"); -+ return self::STOP; -+ } catch (PTSException $e) { -+ $this->feeder->stop(); -+ $this->API->getChannelStates()->remove($this->channelId); -+ unset($this->API->updaters[$this->channelId], $this->API->feeders[$this->channelId]); -+ $this->API->logger("Got PTS exception, exiting update loop for $this: $e", Logger::FATAL_ERROR); -+ return self::STOP; -+ } catch (TimeoutException|CancelledException $e) { -+ if (!$this->isRunning() || $this->authorizedDc === null) { -+ return self::STOP; -+ } -+ if ($e instanceof CancelledException && !($e->getPrevious() instanceof TimeoutException)) { -+ throw $e; -+ } -+ EventLoop::queue($this->API->report(...), "Network issues detected, please check logs!"); -+ return self::DEFAULT_TIMEOUT; -+ } -+ $timeout = min(self::DEFAULT_TIMEOUT, $difference['timeout'] ?? self::DEFAULT_TIMEOUT); -+ $this->API->logger('Got '.$difference['_'], Logger::ULTRA_VERBOSE); -+ switch ($difference['_']) { -+ case 'updates.channelDifferenceEmpty': -+ $state->update($difference); -+ unset($difference); -+ break 2; -+ case 'updates.channelDifference': -+ if ($request_pts >= $difference['pts'] && $request_pts > 1) { -+ $this->API->logger("The PTS ({$difference['pts']}) I got with getDifference is smaller than the PTS I requested ".$state->pts().', using '.($state->pts() + 1), Logger::VERBOSE); -+ $difference['pts'] = $request_pts + 1; -+ } -+ $result += ($this->feeder->feed($difference['other_updates'])); -+ $state->update($difference); -+ if ($difference['new_messages']) { -+ $result[$this->channelId] = true; -+ } -+ $this->feeder->saveMessages($difference['new_messages']); -+ if (!$difference['final']) { -+ unset($difference); -+ break; -+ } -+ unset($difference); -+ break 2; -+ case 'updates.channelDifferenceTooLong': -+ if (isset($difference['dialog']['pts'])) { -+ $difference['pts'] = $difference['dialog']['pts']; -+ } -+ $state->update($difference); -+ if ($difference['messages']) { -+ $result[$this->channelId] = true; -+ } -+ $this->feeder->saveMessages($difference['messages']); -+ unset($difference); -+ break; -+ default: -+ throw new Exception('Unrecognized update difference received: '.var_export($difference, true)); -+ } -+ } else { -+ $this->API->logger('Resumed and fetching normal difference...', Logger::ULTRA_VERBOSE); -+ do { -+ try { -+ $difference = $this->API->methodCallAsyncRead('updates.getDifference', ['pts' => $state->pts(), 'date' => $state->date(), 'qts' => $state->qts(), 'specialMethodType' => SpecialMethodType::USER_RELATED], $this->authorizedDc); -+ break; -+ } catch (TimeoutError) { -+ delay(1.0); -+ } catch (TimeoutException|CancelledException $e) { -+ if (!$this->isRunning() || $this->authorizedDc === null) { -+ return self::STOP; -+ } -+ if ($e instanceof CancelledException && !($e->getPrevious() instanceof TimeoutException)) { -+ throw $e; -+ } -+ EventLoop::queue($this->API->report(...), "Network issues detected, please check logs!"); -+ return self::DEFAULT_TIMEOUT; -+ } -+ } while (true); -+ $this->API->logger('Got '.$difference['_'], Logger::ULTRA_VERBOSE); -+ $timeout = self::DEFAULT_TIMEOUT; -+ switch ($difference['_']) { -+ case 'updates.differenceEmpty': -+ $state->update($difference); -+ unset($difference); -+ break 2; -+ case 'updates.difference': -+ $state->qts($difference['state']['qts']); -+ foreach ($difference['new_encrypted_messages'] as &$encrypted) { -+ $encrypted = ['_' => 'updateNewEncryptedMessage', 'message' => $encrypted]; -+ } -+ $result += ($this->feeder->feed($difference['other_updates'])); -+ $result += ($this->feeder->feed($difference['new_encrypted_messages'])); -+ $state->update($difference['state']); -+ if ($difference['new_messages']) { -+ $result[$this->channelId] = true; -+ } -+ $this->feeder->saveMessages($difference['new_messages']); -+ unset($difference); -+ break 2; -+ case 'updates.differenceSlice': -+ $state->qts($difference['intermediate_state']['qts']); -+ foreach ($difference['new_encrypted_messages'] as &$encrypted) { -+ $encrypted = ['_' => 'updateNewEncryptedMessage', 'message' => $encrypted]; -+ } -+ $result += ($this->feeder->feed($difference['other_updates'])); -+ $result += ($this->feeder->feed($difference['new_encrypted_messages'])); -+ $state->update($difference['intermediate_state']); -+ if ($difference['new_messages']) { -+ $result[$this->channelId] = true; -+ } -+ $this->feeder->saveMessages($difference['new_messages']); -+ unset($difference); -+ break; -+ case 'updates.differenceTooLong': -+ $state->update($difference); -+ unset($difference); -+ break; -+ default: -+ throw new Exception('Unrecognized update difference received: '.var_export($difference, true)); -+ } -+ } -+ } -+ $this->API->logger("Finished parsing updates in {$this}, now resuming feeders", Logger::ULTRA_VERBOSE); -+ foreach ($result as $channelId => $_) { -+ $this->API->feeders[$channelId]?->resume(); -+ } -+ $this->API->logger("Finished parsing updates in {$this}, pausing for $timeout seconds", Logger::ULTRA_VERBOSE); -+ -+ return $timeout; -+ } -+ /** -+ * Get loop name. -+ */ -+ public function __toString(): string -+ { -+ return $this->channelId ? -+ "getUpdate loop channel {$this->channelId}" : -+ 'getUpdate loop generic'; -+ } -+} diff --git a/resources/locales/en.json b/resources/locales/en.json index 5622054..851dd62 100644 --- a/resources/locales/en.json +++ b/resources/locales/en.json @@ -313,6 +313,7 @@ "permission_send_plain": "Send plain text", "permission_edit_rank": "Edit member titles", "permission_send_reactions": "Send reactions", + "permission_manage_linked_peers": "Manage linked chats", "bot_permissions": "🛡 Bot administrator rights", "bot_permissions_intro": "Read-only Telegram permission diagnostics. Grant required rights through the group's administrator settings; the bot cannot grant rights to itself.", "bot_role_creator": "Group owner", @@ -334,6 +335,8 @@ "admin_right_delete_stories": "Delete stories", "admin_right_manage_direct_messages": "Manage channel direct messages", "admin_right_manage_ranks": "Manage member ranks", + "admin_right_manage_linked_peers": "Manage linked chats", + "admin_right_manage_welcome_messages": "Manage welcome messages", "welcome": "✡️ Shabbat Guardian\nShabbat and holiday times, daily zmanim, Daf Yomi and the Omer, for your location.\n\nChoose what to view, or open your preferences to manage your language and location.\n\nGroup administrators can manage each group through “My groups”.", "help": "ℹ️ Information and help", "home": "🏠 Main menu", diff --git a/resources/locales/es.json b/resources/locales/es.json index ac1c03f..c11b904 100644 --- a/resources/locales/es.json +++ b/resources/locales/es.json @@ -313,6 +313,7 @@ "permission_send_plain": "Enviar texto simple", "permission_edit_rank": "Editar los títulos de los miembros", "permission_send_reactions": "Enviar reacciones", + "permission_manage_linked_peers": "Gestionar chats vinculados", "bot_permissions": "🛡 Permisos de administrador del bot", "bot_permissions_intro": "Diagnóstico de permisos de Telegram de solo lectura. Concede los permisos necesarios en los ajustes de administradores del grupo; el bot no puede concederse permisos a sí mismo.", "bot_role_creator": "Propietario del grupo", @@ -334,6 +335,8 @@ "admin_right_delete_stories": "Eliminar historias", "admin_right_manage_direct_messages": "Gestionar mensajes directos del canal", "admin_right_manage_ranks": "Gestionar los rangos de miembros", + "admin_right_manage_linked_peers": "Gestionar chats vinculados", + "admin_right_manage_welcome_messages": "Gestionar mensajes de bienvenida", "welcome": "✡️ Guardián del Shabat\nHorarios de Shabat y fiestas, zmanim, Daf Yomi y cuenta del Ómer según tu ubicación.\n\nElige qué consultar o abre tus preferencias para ajustar el idioma y la ubicación.\n\nLos administradores pueden gestionar cada grupo desde «Mis grupos».", "help": "ℹ️ Información y ayuda", "home": "🏠 Menú principal", diff --git a/resources/locales/fr.json b/resources/locales/fr.json index bc08449..fb5e7d0 100644 --- a/resources/locales/fr.json +++ b/resources/locales/fr.json @@ -313,6 +313,7 @@ "permission_send_plain": "Envoyer du texte simple", "permission_edit_rank": "Modifier les titres des membres", "permission_send_reactions": "Envoyer des réactions", + "permission_manage_linked_peers": "Gérer les discussions liées", "bot_permissions": "🛡 Droits d’administration du bot", "bot_permissions_intro": "Diagnostic des permissions Telegram en lecture seule. Accordez les droits nécessaires dans les réglages des administrateurs du groupe ; le bot ne peut pas s’accorder lui-même des droits.", "bot_role_creator": "Propriétaire du groupe", @@ -334,6 +335,8 @@ "admin_right_delete_stories": "Supprimer des stories", "admin_right_manage_direct_messages": "Gérer les messages directs du canal", "admin_right_manage_ranks": "Gérer les rangs des membres", + "admin_right_manage_linked_peers": "Gérer les discussions liées", + "admin_right_manage_welcome_messages": "Gérer les messages de bienvenue", "welcome": "✡️ Gardien du Chabbat\nHoraires du Chabbat et des fêtes, zmanim, Daf Yomi et compte du Omer selon votre lieu.\n\nChoisissez une rubrique ou ouvrez vos préférences pour régler la langue et le lieu.\n\nLes administrateurs peuvent gérer chaque groupe dans « Mes groupes ».", "help": "ℹ️ Informations et aide", "home": "🏠 Menu principal", diff --git a/resources/locales/he.json b/resources/locales/he.json index c2a03e3..b3dc402 100644 --- a/resources/locales/he.json +++ b/resources/locales/he.json @@ -313,6 +313,7 @@ "permission_send_plain": "שליחת טקסט רגיל", "permission_edit_rank": "עריכת תארי חברים", "permission_send_reactions": "הוספת תגובות", + "permission_manage_linked_peers": "ניהול צ׳אטים מקושרים", "bot_permissions": "🛡 הרשאות מנהל של הבוט", "bot_permissions_intro": "אבחון הרשאות טלגרם לקריאה בלבד. הרשאות נדרשות מעניקים בהגדרות מנהלי הקבוצה; הבוט אינו יכול להעניק לעצמו הרשאות.", "bot_role_creator": "בעל הקבוצה", @@ -334,6 +335,8 @@ "admin_right_delete_stories": "מחיקת סיפורים", "admin_right_manage_direct_messages": "ניהול הודעות ישירות בערוץ", "admin_right_manage_ranks": "ניהול תארי חברים", + "admin_right_manage_linked_peers": "ניהול צ׳אטים מקושרים", + "admin_right_manage_welcome_messages": "ניהול הודעות קבלת פנים", "welcome": "✡️ שומר שבת\nזמני שבת וחג, זמני היום, דף יומי וספירת העומר, לפי המיקום שלך.\n\nבחרו מה להציג, או פתחו את ההעדפות שלכם לניהול השפה והמיקום.\n\nמנהלי קבוצות יכולים לנהל כל קבוצה דרך ״הקבוצות שלי״.", "help": "ℹ️ מידע ועזרה", "home": "🏠 תפריט ראשי", diff --git a/resources/locales/pt-br.json b/resources/locales/pt-br.json index 91af90d..572c4d6 100644 --- a/resources/locales/pt-br.json +++ b/resources/locales/pt-br.json @@ -313,6 +313,7 @@ "permission_send_plain": "Enviar texto simples", "permission_edit_rank": "Editar títulos de membros", "permission_send_reactions": "Enviar reações", + "permission_manage_linked_peers": "Gerenciar chats vinculados", "bot_permissions": "🛡 Direitos de administrador do bot", "bot_permissions_intro": "Diagnóstico de permissões do Telegram somente para leitura. Conceda os direitos nas configurações dos administradores do grupo; o bot não pode concedê-los a si mesmo.", "bot_role_creator": "Dono do grupo", @@ -334,6 +335,8 @@ "admin_right_delete_stories": "Excluir stories", "admin_right_manage_direct_messages": "Gerenciar mensagens diretas do canal", "admin_right_manage_ranks": "Gerenciar títulos de membros", + "admin_right_manage_linked_peers": "Gerenciar chats vinculados", + "admin_right_manage_welcome_messages": "Gerenciar mensagens de boas-vindas", "welcome": "✡️ Guardião do Shabat\nHorários de Shabat e festas, zmanim, Daf Yomi e contagem do Ômer para sua localização.\n\nEscolha o que consultar ou abra suas preferências para ajustar o idioma e a localização.\n\nAdministradores podem gerenciar cada grupo em “Meus grupos”.", "help": "ℹ️ Informações e ajuda", "home": "🏠 Menu principal", diff --git a/resources/locales/ru.json b/resources/locales/ru.json index 948e895..ec53997 100644 --- a/resources/locales/ru.json +++ b/resources/locales/ru.json @@ -313,6 +313,7 @@ "permission_send_plain": "Отправка обычного текста", "permission_edit_rank": "Изменение званий участников", "permission_send_reactions": "Отправка реакций", + "permission_manage_linked_peers": "Управление связанными чатами", "bot_permissions": "🛡 Права администратора бота", "bot_permissions_intro": "Диагностика прав Telegram только для чтения. Нужные права выдаются в настройках администраторов группы; бот не может выдать их себе.", "bot_role_creator": "Владелец группы", @@ -334,6 +335,8 @@ "admin_right_delete_stories": "Удаление историй", "admin_right_manage_direct_messages": "Управление личными сообщениями канала", "admin_right_manage_ranks": "Управление званиями участников", + "admin_right_manage_linked_peers": "Управление связанными чатами", + "admin_right_manage_welcome_messages": "Управление приветственными сообщениями", "welcome": "✡️ Хранитель Шаббата\nВремя Шаббата и праздников, зманим, Даф Йоми и счёт Омера для вашего местоположения.\n\nВыберите раздел или откройте настройки, чтобы изменить язык и местоположение.\n\nАдминистраторы могут управлять каждой группой через «Мои группы».", "help": "ℹ️ Информация и помощь", "home": "🏠 Главное меню", diff --git a/resources/release/README.md b/resources/release/README.md index 68a6f37..d3d65a7 100644 --- a/resources/release/README.md +++ b/resources/release/README.md @@ -1,17 +1,15 @@ # Pinned corresponding-source inputs -This directory contains release-packaging inputs, not installed dependencies or runtime state. +This directory holds release source inputs, not installed dependencies or runtime state. -- [source-manifest.json](source-manifest.json) pins **2,960 runtime dependency files** from the 57 locked Composer packages and **92 preferred-source supplements**. -- The amphp-windows-process-wrapper collection retains 18 original upstream files for the distributed Windows helpers, including their MIT license. -- The madelineproto-build-inputs collection retains 74 pinned generator/build, schema, language and template inputs with their original notices. +[source-manifest.json](source-manifest.json) pins **4,095 runtime files from 83 locked Composer packages** and **103 preferred-source files**. The supplements contain 18 upstream Windows helper files, 84 MadelineProto 8.11.10 generator/current-schema/language inputs and the pinned RTC AV README, preserving original licenses and Git-blob/SHA-256 evidence. -The manifest maps each supplementary archive path to its checked-in file below preferred-source/additional-source. The packager copies these bytes to additional-source in the corresponding-source archive and verifies installed runtime package files against the same approved inventory. It rejects a different Composer lock or unknown source bytes. Application files and the final release identity come from the reviewed Git tree, not from the historical artifact identity in this manifest. +The runtime inventory was compared with each exact locked Composer distribution. Only the fresh-peer and BroadcastManager outputs differ, matching their approved manifests. It excludes two public Amp TLS example private keys by exact hash, installed development tools and generated Composer autoload/bin metadata. Unknown, missing or changed runtime files fail packaging. -These inputs were reverified against the published v3.0.0-dev.9 source asset and its upstream provenance records. Source URLs, revisions, Git blobs and file hashes remain in the manifest. The Git attributes prevent line-ending conversion of the preferred-source files; upstream attributes are stored as .gitattributes.source with the original archive path in the manifest. Do not edit upstream files or license notices to make a hash check pass; review and repin an intentional upstream change. +Each supplementary archive path maps to its checked-in file below preferred-source/additional-source. Upstream attributes are stored as .gitattributes.source to prevent them overriding immutable checkout bytes, then restored to their original archive name. Do not edit upstream bytes to satisfy a hash check; review and repin intentional changes. -The two approved upstream documentation symlinks are recorded explicitly in source_symlinks: danog/async-orm and danog/telegram-entities each link docs/index.md to ../README.md within the same locked package. The historical Windows extraction stored the link-target text as regular files; its approved SHA-256 values remain unchanged. Packaging accepts only these exact target bytes, whether read from native symlinks or those materialized files, and writes them with the original Unix symlink mode 120777 in the corresponding-source ZIP. Unlisted symlinks and targets outside their package are rejected. The deployment application ZIP contains no dependency symlinks. +The two approved dependency documentation symlinks map docs/index.md to ../README.md inside danog/async-orm and danog/telegram-entities. Packaging validates exact target bytes whether represented as native symlinks or Windows materialized pointers, then retains Unix mode 120777. Unlisted/escaping links are rejected. -The two public upstream Amp HTTP Server development TLS private-key examples are omitted by exact approved hash. Their recorded omissions remain in the manifest. Installed development tools, generated Composer autoload/bin metadata, PHP, SQLite and operating-system/base-image source remain outside this runtime source collection. +The Windows helper source association is established, but no reproducible binary rebuild is claimed. TL232/current file-reference-map and language inputs are included; full historical schema/doc generation and mutable RPC responses are not claimed reproducible. No generator was run. PHP, SQLite, optional native FFmpeg libraries and system/base-image source are outside this scope. -The Windows helper association is supported by original release/history evidence, but its binaries were not reproducibly rebuilt. The supplied MadelineProto generators were not executed; upstream translation/documentation steps that depend on mutable remote services are not claimed reproducible offline. See [licensing](../../docs/LICENSING.md) and [technical provenance](../../docs/THIRD_PARTY_DETAILS.md) for the exact scope and remaining findings. +See [licensing](../../docs/LICENSING.md) and [technical provenance](../../docs/THIRD_PARTY_DETAILS.md) for metadata/license conflicts and remaining provenance findings. diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/.gitattributes.source b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/.gitattributes.source index 700a7ff..d6a33f6 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/.gitattributes.source +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/.gitattributes.source @@ -6,3 +6,7 @@ CHANGELOG.md export-ignore psalm-baseline.xml export-ignore langs/ export-ignore +webui/ export-ignore +src/WebUI/templates/assets/tweb/app.js linguist-generated +src/WebUI/templates/assets/tweb/app.css linguist-generated +src/WebUI/templates/assets/tweb/tgs/** linguist-vendored diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/.gitmodules b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/.gitmodules new file mode 100644 index 0000000..cebef61 --- /dev/null +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/.gitmodules @@ -0,0 +1,15 @@ +[submodule "examples/magnaluna"] + path = examples/magnaluna + url = https://github.com/danog/magnaluna.git +[submodule "examples/pipesbot"] + path = examples/pipesbot + url = https://github.com/danog/pipesbot.git +[submodule "schemas"] + path = schemas + url = https://github.com/danog/schemas.git +[submodule "docs"] + path = docs + url = https://github.com/danog/MadelineProtoDocs.git +[submodule "examples/downloadRenameBot"] + path = examples/downloadRenameBot + url = https://github.com/danog/downloadRenameBot diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/README.md b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/README.md index a2f818f..12d32f7 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/README.md +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/README.md @@ -45,6 +45,10 @@ if (!$me['bot']) { } catch (\danog\MadelineProto\RPCErrorException $e) { $MadelineProto->logger($e); } + + // Video call @magicalcrazypony, the MadelineProto video webradio, playing a WebM video (works on webhosts, NO ffmpeg needed!) + // See https://docs.madelineproto.xyz/docs/CALLS.html for group calls, livestreams, recording and more. + $MadelineProto->requestCall('@magicalcrazypony', video: true)->play(new \danog\MadelineProto\RemoteUrl('https://paste.daniil.it/oncall.webm')); } $MadelineProto->echo('OK, done!'); ``` @@ -91,7 +95,9 @@ Some of MadelineProto's core components are also available as separate, standalo * [QR code login (user)](https://docs.madelineproto.xyz/docs/LOGIN.html#qr-code-user) * [Features](https://docs.madelineproto.xyz/docs/FEATURES.html) - MadelineProto can do everything official clients can do, and more! * [Requirements](https://docs.madelineproto.xyz/docs/REQUIREMENTS.html) - MadelineProto requires the mbstring, xml, json, fileinfo, gmp, openssl, iconv, gd extensions to function properly. -* [MadelineProto on Docker](https://docs.madelineproto.xyz/docs/DOCKER.html) - MadelineProto offers an official MadelineProto docker image for the linux/amd64, linux/arm64 and linux/riscv64 platforms @ hub.madelineproto.xyz/danog/madelineproto. +* [MadelineProto on Docker](https://docs.madelineproto.xyz/docs/DOCKER.html) - MadelineProto offers an official MadelineProto docker image for the linux/amd64 and linux/arm64 platforms @ hub.madelineproto.xyz/danog/madelineproto. + * [Tags](https://docs.madelineproto.xyz/docs/DOCKER.html#tags) + * [User and permissions](https://docs.madelineproto.xyz/docs/DOCKER.html#user-and-permissions) * [Getting started](https://docs.madelineproto.xyz/docs/DOCKER.html#getting-started) * [CLI bot (recommended)](https://docs.madelineproto.xyz/docs/DOCKER.html#cli-bot-recommended) * [Databases on docker](https://docs.madelineproto.xyz/docs/DOCKER.html#databases-on-docker) @@ -130,6 +136,19 @@ Some of MadelineProto's core components are also available as separate, standalo * [danog\MadelineProto\EventHandler\AbstractStory »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/AbstractStory.html) - Represents a Telegram Story. * [danog\MadelineProto\EventHandler\BotCommands »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/BotCommands.html) - The [command set](https://core.telegram.org/api/bots/commands) of a certain bot in a certain chat has changed. * [danog\MadelineProto\EventHandler\CallbackQuery »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/CallbackQuery.html) - Represents a query sent by the user by clicking on a button. + * [danog\MadelineProto\EventHandler\Calls\AbstractGroupCall »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Calls/AbstractGroupCall.html) - What a [video chat/livestream »](https://core.telegram.org/api/group-calls#video-chats-livestreams) + * [danog\MadelineProto\EventHandler\Calls\AbstractGroupCallMessage »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Calls/AbstractGroupCallMessage.html) - What an in-call message of a video chat ({@see GroupCallMessage}) and of a live story + * [danog\MadelineProto\EventHandler\Calls\CallStreams »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Calls/CallStreams.html) - The streams a participant of a call sends (their microphone, camera and screen share, see + * [danog\MadelineProto\EventHandler\Calls\ConferenceCall »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Calls/ConferenceCall.html) - This update represents a Telegram [end-to-end encrypted conference call »](https://core.telegram.org/api/end-to-end/group-calls). + * [danog\MadelineProto\EventHandler\Calls\ConferenceCallMessage »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Calls/ConferenceCallMessage.html) - An end-to-end encrypted [in-call message or reaction »](https://core.telegram.org/api/end-to-end/group-calls#conference-in-call-messages) + * [danog\MadelineProto\EventHandler\Calls\GroupCall »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Calls/GroupCall.html) - This update represents a Telegram [video chat or livestream »](https://core.telegram.org/api/group-calls#video-chats-livestreams): + * [danog\MadelineProto\EventHandler\Calls\GroupCallMessage »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Calls/GroupCallMessage.html) - An [in-call message or reaction »](https://core.telegram.org/api/group-calls#in-call-messages) sent in a [video chat or livestream »](https://core.telegram.org/api/group-calls#video-chats-livestreams) + * [danog\MadelineProto\EventHandler\Calls\GroupCallMessagesDeleted »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Calls/GroupCallMessagesDeleted.html) - Some [in-call messages »](https://core.telegram.org/api/group-calls#in-call-messages) of a group call + * [danog\MadelineProto\EventHandler\Calls\GroupCallParticipants »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Calls/GroupCallParticipants.html) - Participants of a group call joined, left, or changed state (muted, video, volume, raised hand...), + * [danog\MadelineProto\EventHandler\Calls\LiveStory »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Calls/LiveStory.html) - This update represents a Telegram [live story »](https://core.telegram.org/api/group-calls#live-stories): + * [danog\MadelineProto\EventHandler\Calls\LiveStoryMessage »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Calls/LiveStoryMessage.html) - An [in-call message or reaction »](https://core.telegram.org/api/group-calls#in-call-messages) sent in a [live story »](https://core.telegram.org/api/group-calls#live-stories) ({@see LiveStory}). + * [danog\MadelineProto\EventHandler\Calls\MultiCallMessage »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Calls/MultiCallMessage.html) - An [in-call message or reaction »](https://core.telegram.org/api/group-calls#in-call-messages) sent in a multi-party call, shown as an overlay by the participants' clients (there is no chat history). + * [danog\MadelineProto\EventHandler\Calls\PrivateCall »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Calls/PrivateCall.html) - This update represents a private (one-to-one) VoIP Telegram call. * [danog\MadelineProto\EventHandler\Channel\ChannelParticipant »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Channel/ChannelParticipant.html) - A participant has left, joined, was banned or admin'd in a [channel or supergroup](https://core.telegram.org/api/channel). * [danog\MadelineProto\EventHandler\Channel\MessageForwards »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Channel/MessageForwards.html) - Indicates that the forward counter of a message in a channel has changed. * [danog\MadelineProto\EventHandler\Channel\MessageViewsChanged »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Channel/MessageViewsChanged.html) - Indicates that the view counter of a message in a channel has changed. @@ -141,6 +160,7 @@ Some of MadelineProto's core components are also available as separate, standalo * [danog\MadelineProto\EventHandler\Delete\DeleteChannelMessages »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Delete/DeleteChannelMessages.html) - Some messages in a [supergroup/channel](https://core.telegram.org/api/channel) were deleted. * [danog\MadelineProto\EventHandler\Delete\DeleteMessages »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Delete/DeleteMessages.html) - Some messages were deleted in a private chat or simple group. * [danog\MadelineProto\EventHandler\Delete\DeleteScheduledMessages »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Delete/DeleteScheduledMessages.html) - Some [scheduled messages](https://core.telegram.org/api/scheduled-messages) were deleted from the schedule queue of a chat. + * [danog\MadelineProto\EventHandler\GroupOrChannelMessage »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/GroupOrChannelMessage.html) - Represents a group or channel message. * [danog\MadelineProto\EventHandler\InlineQuery »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/InlineQuery.html) - An incoming inline query. * [danog\MadelineProto\EventHandler\Message »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Message.html) - Represents an incoming or outgoing message. * [danog\MadelineProto\EventHandler\Message\ChannelMessage »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Message/ChannelMessage.html) - Represents an incoming or outgoing channel message. @@ -155,6 +175,7 @@ Some of MadelineProto's core components are also available as separate, standalo * [danog\MadelineProto\EventHandler\Message\Service\DialogChannelMigrateFrom »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Message/Service/DialogChannelMigrateFrom.html) - Indicates the channel was [migrated](https://core.telegram.org/api/channel) from the specified chat. * [danog\MadelineProto\EventHandler\Message\Service\DialogChatJoinedByLink »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Message/Service/DialogChatJoinedByLink.html) - A user joined the chat via an invite link. * [danog\MadelineProto\EventHandler\Message\Service\DialogChatMigrateTo »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Message/Service/DialogChatMigrateTo.html) - Indicates the chat was [migrated](https://core.telegram.org/api/channel) to the specified supergroup. + * [danog\MadelineProto\EventHandler\Message\Service\DialogConferenceCall »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Message/Service/DialogConferenceCall.html) - A service message about an [end-to-end encrypted conference call »](https://core.telegram.org/api/group-calls#conference-calls): * [danog\MadelineProto\EventHandler\Message\Service\DialogContactSignUp »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Message/Service/DialogContactSignUp.html) - A contact just signed up to telegram. * [danog\MadelineProto\EventHandler\Message\Service\DialogCreated »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Message/Service/DialogCreated.html) - A chat or channel was created. * [danog\MadelineProto\EventHandler\Message\Service\DialogDeleteMessages »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Message/Service/DialogDeleteMessages.html) - Deleted messages. @@ -221,7 +242,7 @@ Some of MadelineProto's core components are also available as separate, standalo * [danog\MadelineProto\EventHandler\User\Status\Online »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/User/Status/Online.html) - Online status of the user. * [danog\MadelineProto\EventHandler\User\Status\Recently »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/User/Status/Recently.html) - Online status: last seen recently. * [danog\MadelineProto\EventHandler\User\Username »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/User/Username.html) - Changes were made to the user’s first name, last name or username. - * [danog\MadelineProto\VoIP »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/VoIP.html) - This update represents a VoIP Telegram call. + * [danog\MadelineProto\VoIP »](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/VoIP.html) - This update represents a private (one-to-one) VoIP Telegram call. * [Filters](https://docs.madelineproto.xyz/docs/FILTERS.html) - MadelineProto offers a very simple and intuitive message filtering system, based on PHP's type system and attributes. * [Simple filters](https://docs.madelineproto.xyz/docs/FILTERS.html#simple-filters) * [Attribute filters](https://docs.madelineproto.xyz/docs/FILTERS.html#attribute-filters) @@ -271,11 +292,24 @@ Some of MadelineProto's core components are also available as separate, standalo * [Getting the TL trace](https://docs.madelineproto.xyz/docs/EXCEPTIONS.html#getting-the-tl-trace) * [Avoiding FLOOD_WAITs](https://docs.madelineproto.xyz/docs/FLOOD_WAIT.html) - If you make too many requests to telegram, you might get FLOOD_WAITed for a while. To avoid these flood waits, you must calculate the flood wait rate. * [Logging](https://docs.madelineproto.xyz/docs/LOGGING.html) - MadelineProto provides a unified class for logging messages to the logging destination defined in settings. -* [Telegram VoIP phone calls](https://docs.madelineproto.xyz/docs/CALLS.html) - MadelineProto provides an easy wrapper to work with phone calls. +* [Telegram voice/video/group calls](https://docs.madelineproto.xyz/docs/CALLS.html) - MadelineProto can make and receive voice and video calls, stream and record video chats and livestreams, and take part in end-to-end encrypted conference calls. + * [Call types](https://docs.madelineproto.xyz/docs/CALLS.html#call-types) * [Requesting a call](https://docs.madelineproto.xyz/docs/CALLS.html#requesting-a-call) - * [Playing audio files](https://docs.madelineproto.xyz/docs/CALLS.html#playing-audio-files) - * [Webhost support!](https://docs.madelineproto.xyz/docs/CALLS.html#webhost-support) * [Accepting calls](https://docs.madelineproto.xyz/docs/CALLS.html#accepting-calls) + * [Playing video files](https://docs.madelineproto.xyz/docs/CALLS.html#playing-video-files) + * [Playing audio files](https://docs.madelineproto.xyz/docs/CALLS.html#playing-audio-files) + * [Supported formats](https://docs.madelineproto.xyz/docs/CALLS.html#supported-formats) + * [Playlists and screen sharing](https://docs.madelineproto.xyz/docs/CALLS.html#playlists-and-screen-sharing) + * [Recording calls](https://docs.madelineproto.xyz/docs/CALLS.html#recording-calls) + * [Group calls (video chats and livestreams)](https://docs.madelineproto.xyz/docs/CALLS.html#group-calls-video-chats-and-livestreams) + * [Livestreams, RTMP and stream mode](https://docs.madelineproto.xyz/docs/CALLS.html#livestreams-rtmp-and-stream-mode) + * [Live stories](https://docs.madelineproto.xyz/docs/CALLS.html#live-stories) + * [Conference calls](https://docs.madelineproto.xyz/docs/CALLS.html#conference-calls) + * [Restarts](https://docs.madelineproto.xyz/docs/CALLS.html#restarts) + * [PrivateCall](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Calls/PrivateCall.html): a one-to-one voice or video call (`danog\MadelineProto\VoIP` is an alias kept for backwards compatibility) + * [GroupCall](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Calls/GroupCall.html) + * [LiveStory](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Calls/LiveStory.html) + * [ConferenceCall](https://docs.madelineproto.xyz/PHP/danog/MadelineProto/EventHandler/Calls/ConferenceCall.html) * [Uploading and downloading files](https://docs.madelineproto.xyz/docs/FILES.html) - MadelineProto provides fully parallelized wrapper methods to upload and download files that support bot API file ids, direct upload by URL and file renaming. * [Bot API file IDs](https://docs.madelineproto.xyz/docs/FILES.html#bot-api-file-ids) * [Uploading & sending files](https://docs.madelineproto.xyz/docs/FILES.html#sending-files) @@ -427,6 +461,7 @@ Some of MadelineProto's core components are also available as separate, standalo * Change the photo of a channel/supergroup: channels.editPhoto * Change the reaction notification settings »: account.setReactionsNotifySettings * Change the set of message reactions » that can be used in a certain group, supergroup or channel: messages.setChatAvailableReactions + * Change the title of a group call: setGroupCallTitle * Changes chat name and sends a service message on it: messages.editChatTitle * Changes chat photo and sends a service message on it: messages.editChatPhoto * Changes the absolute position of a sticker in the set to which it belongs. The sticker set must have been created by the current user/bot: stickers.changeStickerPosition @@ -492,11 +527,13 @@ Some of MadelineProto's core components are also available as separate, standalo * Convert value to unsigned base256 int: packUnsignedInt * Converts a string into an async amphp stream: stringToStream * Create a business chat deep link »: account.createBusinessChatLink + * Create a group call (video chat or livestream) in the specified group or channel: createGroupCall * Create a group call or livestream: phone.createGroupCall * Create a star gift collection »: payments.createStarGiftCollection * Create a stickerset: stickers.createStickerSet * Create a supergroup/channel: channels.createChannel * Create a theme: account.createTheme + * Create and join a new end-to-end encrypted conference call, with ourselves as the only: createConferenceCall * Create and optionally join a new conference call: phone.createConferenceCall * Create and upload a new wallpaper: account.uploadWallPaper * Create array: arr @@ -507,6 +544,7 @@ Some of MadelineProto's core components are also available as separate, standalo * Creates and returns a prometheus gauge: getPromGauge * Creates and returns a prometheus histogram: getPromHistogram * Creates and returns a prometheus summary: getPromSummary + * Decline an invitation to a conference call: declineConferenceCallInvite * Declines a conference call invite: phone.declineConferenceCallInvite * Delete a business chat deep link »: account.deleteBusinessChatLink * Delete a channel/supergroup: channels.deleteChannel @@ -586,6 +624,7 @@ Some of MadelineProto's core components are also available as separate, standalo * Enable/disable message signatures in channels: channels.toggleSignatures * Enable/disable top peers: contacts.toggleTopPeers * Enables or disables the reception of notifications every time a gift » is received by the specified channel, can only be invoked by admins with post_messages admin rights: payments.toggleChatStarGiftNotifications + * End a group call for all participants: discardGroupCall * Escape string for MadelineProto's HTML entity converter: htmlEscape * Escape string for URL: markdownUrlEscape * Escape string for markdown code section: markdownCodeEscape @@ -594,6 +633,7 @@ Some of MadelineProto's core components are also available as separate, standalo * Executes a custom broadcast action with all peers (users, chats, channels) of the bot: broadcastCustom * Export a folder », creating a chat folder deep link »: chatlists.exportChatlistInvite * Export an invite link for a chat: messages.exportChatInvite + * Export an invite link for a group call: exportGroupCallInvite * Export authorization: exportAuthorization * Extract Update constructors from an Updates constructor: extractUpdates * Extract a message ID from an Updates constructor: extractMessageId @@ -630,6 +670,7 @@ Some of MadelineProto's core components are also available as separate, standalo * Fetch updated information about paid media, see here » for the full flow: messages.getExtendedMedia * Fetches all star gift collections » of a peer: payments.getStarGiftCollections * Fetches an updatePaidReactionPrivacy update with the current default paid reaction privacy, see here » for more info: messages.getPaidReactionPrivacy + * Files to play on hold in a group call: groupCallPlayOnHold * Find out if a media message's caption can be edited: messages.getMessageEditData * Finish an SMS job (official clients only): smsjobs.finishJob * Fork a new green thread and execute the passed function in the background: callFork @@ -644,11 +685,11 @@ Some of MadelineProto's core components are also available as separate, standalo * Get RTMP URL and stream key for RTMP livestreams. Can be used even before creating the actual RTMP livestream with phone.createGroupCall (the rtmp_stream flag must be set): phone.getGroupCallStreamRtmpUrl * Get SMS jobs status (official clients only): smsjobs.getStatus * Get TL namespaces: getMethodNamespaces - * Get TL serializer: getTL * Get Telegram Premium promotion information: help.getPremiumPromo * Get Telegram Star revenue statistics »: payments.getStarsRevenueStats * Get Telegram UTF-8 length of string: mbStrlen * Get a document by its SHA256 hash, mainly used for gifs: messages.getDocumentByHash + * Get a group call from its: getGroupCallBySlug * Get a list of available gifts, see here » for more info: payments.getStarGifts * Get a list of bots owned by the current user: bots.getAdminedBots * Get a list of channels/supergroups we left, requires a takeout session, see here » for more info: channels.getLeftChannels @@ -656,6 +697,7 @@ Some of MadelineProto's core components are also available as separate, standalo * Get a list of default suggested emoji statuses: account.getDefaultEmojiStatuses * Get a list of peers that can be used to join a group call, presenting yourself as a specific user/channel: phone.getGroupCallJoinAs * Get a list of sponsored messages for a peer, see here » for more info: messages.getSponsoredMessages + * Get a live end-to-end encrypted conference call this session is in, by its call id: getConferenceCall * Get a message to show to the user when starting the bot: getWebMessage * Get a payment form: payments.getPaymentForm * Get a set of suggested custom emoji stickers that can be used as group picture: account.getDefaultGroupPhotoEmojis @@ -665,10 +707,12 @@ Some of MadelineProto's core components are also available as separate, standalo * Get all archived stickers: messages.getArchivedStickers * Get all available chat themes »: account.getChatThemes * Get all contacts, requires a takeout session, see here » for more info: contacts.getSaved + * Get all group calls (video chats, livestreams and live stories) we're currently tracking, indexed by their ID: getAllGroupCalls * Get all groups that can be used as discussion groups: channels.getGroupsForDiscussion * Get all installed stickers: messages.getAllStickers * Get all pending and running calls, indexed by user ID: getAllCalls * Get all saved Telegram Passport documents, for more info see the passport docs »: account.getAllSecureValues + * Get an [end-to-end encrypted conference call »](https://core.telegram.org/api/group-calls#conference-calls): getConferenceCallBySlug * Get an invite link for a group call or livestream: phone.exportGroupCallInvite * Get and increase the view counter of a message sent or forwarded from a channel: messages.getMessagesViews * Get app-specific configuration, see client configuration for more info on the result: help.getAppConfig @@ -791,19 +835,25 @@ Some of MadelineProto's core components are also available as separate, standalo * Get supergroup statistics: stats.getMegagroupStats * Get temporary payment password: account.getTmpPassword * Get the IDs of the maximum read stories for a set of peers: stories.getPeerMaxIDs + * Get the RTMP URL and stream key to publish an [RTMP livestream »](https://core.telegram.org/api/group-calls#creating-and-publishing-an-rtmp-livestream): getGroupCallStreamRtmpUrl * Get the admin log of a channel/supergroup: channels.getAdminLog * Get the current Telegram Stars balance of the current account (with peer=inputPeerSelf), or the stars balance of the bot specified in peer: payments.getStarsStatus * Get the current reaction notification settings »: account.getReactionsNotifySettings * Get the exact read date of one of our messages, sent to a private chat with another user: messages.getOutboxReadDate + * Get the file that is currently being played in a group call: groupCallGetCurrent * Get the file that is currently being played: callGetCurrent + * Get the group call (video chat or livestream) currently active in a group or channel: getGroupCall + * Get the media state of the other party of a call, as reported by their client: getCallRemoteMediaState * Get the number of results that would be found by a messages.search call with the same parameters: messages.getSearchCounters * Get the number of stars we have received from the specified user thanks to paid messages »; the received amount will be equal to the sent amount multiplied by stars_paid_message_commission_permille divided by 1000: account.getPaidMessagesRevenue + * Get the participants of a group call, indexed by their bot API peer ID: getGroupCallParticipants * Get the participants of a supergroup/channel: channels.getParticipants * Get the phone call with the specified user ID: getCallByPeer * Get the progress of a currently running broadcast: getBroadcastProgress * Get the reaction and interaction list of a story posted to a channel, along with the sender of each reaction: stories.getStoryReactionsList * Get the set of accent color palettes » that can be used for message accents: help.getPeerColors * Get the set of accent color palettes » that can be used in profile page backgrounds: help.getPeerProfileColors + * Get the state of a group call: getGroupCallState * Get the telegram IDs of all contacts.: contacts.getContactIDs * Get theme information: account.getTheme * Get type of peer: getType @@ -859,6 +909,7 @@ Some of MadelineProto's core components are also available as separate, standalo * Invite a set of users to a group call: phone.inviteToGroupCall * Invite a user to a conference call: phone.inviteConferenceCallParticipant * Invite users to a channel/supergroup: channels.inviteToChannel + * Invite users to a group call: inviteToGroupCall * Invoke a method using a Telegram Business Bot connection, see here » for more info, including a list of the methods that can be wrapped in this constructor: invokeWithBusinessConnection * Invoke a method within a takeout session, see here » for more info: invokeWithTakeout * Invoke a request without subscribing the used connection for updates (this is enabled by default for file queries): invokeWithoutUpdates @@ -869,10 +920,15 @@ Some of MadelineProto's core components are also available as separate, standalo * Join a bot's affiliate program, becoming an affiliate »: payments.connectStarRefBot * Join a channel/supergroup: channels.joinChannel * Join a group call: phone.joinGroupCall + * Join an end-to-end encrypted conference call from its conference link slug: joinConferenceCallBySlug + * Join an end-to-end encrypted conference call from the service message that invited us to it: joinConferenceCallByInviteMessage + * Join an existing end-to-end encrypted conference call: joinConferenceCall * Join channels and supergroups recently added to a chat folder deep link »: chatlists.joinChatlistUpdates + * Join the group call currently active in a group or channel: joinGroupCall * Launch a prepaid giveaway »: payments.launchPrepaidGiveaway * Leave a bot's affiliate program »: payments.editConnectedStarRefBot * Leave a channel/supergroup: channels.leaveChannel + * Leave a group call, without ending it for the other participants: leaveGroupCall * Leave a group call: phone.leaveGroupCall * List all chat folder deep links » associated to a folder: chatlists.getExportedInvites * List all created business chat deep links »: account.getBusinessChatLinks @@ -913,6 +969,8 @@ Some of MadelineProto's core components are also available as separate, standalo * Method for fetching previously featured stickers: messages.getOldFeaturedStickers * Modify autosave settings: account.saveAutoSaveSettings * Modify the admin rights of a user in a supergroup/channel: channels.editAdmin + * Mute or unmute our own audio stream in a call: setCallMuted + * Mute or unmute our own audio stream in a group call: setGroupCallMuted * Notifies the sender about the recipient having listened a voice message or watched a video, emitting an updateReadMessagesContents: messages.readMessageContents * Notify the other user in a private chat that a screenshot of the chat was taken: messages.sendScreenshotNotification * Notify the user that the sent passport data contains some errors The user will not be able to re-submit their Passport data to you until the errors are fixed (the contents of the field for which you returned the error must change): users.setSecureValueErrors @@ -944,7 +1002,6 @@ Some of MadelineProto's core components are also available as separate, standalo * Obtain information about a chat folder deep link »: chatlists.checkChatlistInvite * Obtain information about a direct link Mini App: messages.getBotApp * Obtain information about specific saved message dialogs » or monoforum topics »: messages.getSavedDialogsByID - * Obtain the API ID UI template: getWebAPITemplate * Obtain the latest read story ID for all peers when first logging in, returned as a list of updateReadStories updates, see here » for more info: stories.getAllReadPeerStories * Obtain the list of users that have viewed a specific story we posted: stories.getStoryViewsList * Obtain user info from a temporary profile link: contacts.importContactToken @@ -968,6 +1025,7 @@ Some of MadelineProto's core components are also available as separate, standalo * Optional: notify the server that the user is currently busy in a call: this will automatically refuse all incoming phone calls until the current phone call is ended: phone.receivedCall * Parse, update and store settings: updateSettings * Pause or unpause a specific chat, temporarily disconnecting it from all business bots »: account.toggleConnectedBotPaused + * Pause playback of the current audio file in a group call: groupCallPausePlay * Pauses playback of the current audio file in the call: pausePlay * Perform static analysis on a certain event handler class, to make sure it satisfies some performance requirements: validateEventHandlerClass * Permanently disconnect a specific chat from all business bots » (equivalent to specifying it in recipients.exclude_users during initial configuration with account.updateConnectedBot »); to reconnect of a chat disconnected using this method the user must reconnect the entire bot by invoking account.updateConnectedBot »: account.disablePeerConnectedBot @@ -977,11 +1035,12 @@ Some of MadelineProto's core components are also available as separate, standalo * Pin some stories to the top of the profile, see here » for more info: stories.togglePinnedToTop * Pin/unpin a dialog: messages.toggleDialogPin * Pins a received gift on top of the profile of the user or owned channels by using payments.toggleStarGiftsPinnedToTop: payments.toggleStarGiftsPinnedToTop + * Play a file in a group call: groupCallPlay * Play file in call: callPlay * Play files on hold in call: callPlayOnHold * Positive modulo: posmod * Press an inline callback button and get a callback answer from the bot: messages.getBotCallbackAnswer - * Provide a buffered reader for a file, URL or amp stream: openBuffered + * Provide a buffered reader for a file, URL or amp stream, optionally starting at a byte offset: openBuffered * Provide a stream for a file, URL or amp stream: getStream * Query an inline bot: messages.getInlineBotResults * Rate a call, returns info about the rating message sent to the official VoIP bot: phone.setCallRating @@ -989,6 +1048,10 @@ Some of MadelineProto's core components are also available as separate, standalo * Re-join a private channel associated to an active Telegram Star subscription »: payments.fulfillStarsSubscription * React to a story: stories.sendReaction * React to message: messages.sendReaction + * Record group call media into a directory: every transmitting participant (or only the given: groupCallSetOutputFolder + * Record one participant of a group call (or, in stream mode, its mixed stream) into a single file: groupCallSetOutput + * Record the incoming media of a call into a directory, one numbered file per combination of: callSetOutputFolder + * Record the incoming media of a call into one file (or stream) with a fixed set of tracks, see: callSetOutput * Refresh full peer cache for a certain peer: refreshFullPeerCache * Refresh peer cache for a certain peer: refreshPeerCache * Refund a Telegram Stars transaction, see here » for more info: payments.refundStarsCharge @@ -1029,7 +1092,7 @@ Some of MadelineProto's core components are also available as separate, standalo * Represents a list of emoji categories, to be used when selecting custom emojis to set as custom emoji status: messages.getEmojiStatusGroups * Represents a list of emoji categories, to be used when selecting custom emojis to set as profile picture: messages.getEmojiProfilePhotoGroups * Represents a list of emoji categories: messages.getEmojiGroups - * Request VoIP call: requestCall + * Request a one-to-one voice or video call: requestCall * Request an SMS code via Firebase: auth.requestFirebaseSms * Request recovery code of a 2FA password, only for accounts with a recovery email configured: auth.requestPasswordRecovery * Request secret chat: requestSecretChat @@ -1044,6 +1107,7 @@ Some of MadelineProto's core components are also available as separate, standalo * Resolve a business chat deep link »: account.resolveBusinessChatLink * Resolve a phone number to get user info, if their privacy settings allow it: contacts.resolvePhone * Restart update loop: restart + * Resume playback of the current audio file in a group call: groupCallResumePlay * Resumes playback of the current audio file in the call: resumePlay * Rethrow exception into event loop: rethrow * Return all message drafts.: messages.getAllDrafts @@ -1087,6 +1151,7 @@ Some of MadelineProto's core components are also available as separate, standalo * Save a theme: account.saveTheme * Save or remove saved notification sound: account.saveRingtone * Save phone call debug information: phone.saveCallLog + * Save the peer we join the video chats and livestreams of a group or channel as by default: saveDefaultGroupCallJoinAs * Saves logs of application on the server: help.saveAppLog * Search for custom emoji stickersets »: messages.searchEmojiStickerSets * Search for messages and peers globally: messages.searchGlobal @@ -1141,11 +1206,9 @@ Some of MadelineProto's core components are also available as separate, standalo * Set localized name, about text and description of a bot (or of the current account, if called by a bot): bots.setBotInfo * Set maximum Time-To-Live of all messages in the specified chat: messages.setHistoryTTL * Set or remove the Telegram Business introduction »: account.updateBusinessIntro - * Set output file or stream for incoming OPUS audio packets in a call: callSetOutput * Set peer(s) where to send errors occurred in the event loop: setReportPeers * Set sensitive content settings (for viewing or hiding NSFW content): account.setContentSettings * Set stickerset thumbnail: stickers.setStickerSetThumb - * Set the API ID UI template: setWebApiTemplate * Set the callback answer to a user button press (bots only): messages.setBotCallbackAnswer * Set the default peer that will be used to join a group call in a specific dialog: phone.saveDefaultGroupCallJoinAs * Set the default suggested admin rights for bots being added as admins to channels, see here for more info on how to handle them »: bots.setBotBroadcastDefaultAdminRights @@ -1157,13 +1220,16 @@ Some of MadelineProto's core components are also available as separate, standalo * Sets the menu button action » for a given user or for all users: bots.setBotMenuButton * Should be called after the user hides the report spam/add as contact bar of a new chat, effectively prevents the user from executing the actions specified in the action bar »: messages.hidePeerSettingsBar * Show or hide the real-time chat translation popup for a certain chat: messages.togglePeerTranslations + * Skip to the next file in the playlist of a group call: groupCallSkipPlay * Specify a set of Telegram Business opening hours.: account.updateBusinessWorkHours + * Start a [live story »](https://core.telegram.org/api/group-calls#live-stories): a livestream posted: startLive * Start a conversation with a bot using a deep linking parameter: messages.startBot * Start a scheduled group call: phone.startScheduledGroupCall * Start multiple instances of MadelineProto and the event handlers (enables async): startAndLoopMulti * Start or stop recording a group call: the recorded audio and video streams will be automatically sent to Saved messages (the chat with ourselves): phone.toggleGroupCallRecord * Start screen sharing in a call: phone.joinGroupCallPresentation * Stop getting notifications about discussion replies of a certain user in @replies: contacts.blockFromReplies + * Stop playing all files in a group call, clearing the main and the hold playlist: groupCallStopPlay * Stop screen sharing in a group call: phone.leaveGroupCallPresentation * Stop update loop: stop * Stops playing all files in the call, clears the main and the hold playlist: stopPlay @@ -1179,6 +1245,7 @@ Some of MadelineProto's core components are also available as separate, standalo * Terminate webview interaction started with messages.requestWebView, sending the specified message to the chat on behalf of the user: messages.sendWebViewResultMessage * Terminates all user's authorized sessions except for the current one: auth.resetAuthorizations * Test fibers: testFibers + * The peers we may join the video chats and livestreams of a group or channel as: ourselves, the: getGroupCallJoinAs * Toggle autotranslation in a channel, for all users: see here » for more info: channels.toggleAutotranslation * Toggle contact sign up notifications: account.setContactSignUpNotification * Toggle supergroup slow mode: if enabled, users will only be able to send one message every seconds seconds: channels.toggleSlowMode @@ -1206,6 +1273,7 @@ Some of MadelineProto's core components are also available as separate, standalo * Updates online user status: account.updateStatus * Updates user profile: account.updateProfile * Upgrade a gift to a collectible gift: can only be used if the upgrade was already paid by the gift sender; see here » for more info on the full flow (including the different flow to use in case the upgrade was not paid by the gift sender): payments.upgradeStarGift + * Upgrade a one-to-one call to an [end-to-end encrypted conference call »](https://core.telegram.org/api/group-calls#conference-calls):: migrateCallToConference * Upload a custom profile picture for a contact, or suggest a new profile picture to a contact: photos.uploadContactProfilePhoto * Upload a file and associate it to a chat (without actually sending it to the chat): messages.uploadMedia * Upload a media file associated with an imported chat, click here for more info »: messages.uploadImportedMedia @@ -1244,7 +1312,10 @@ Some of MadelineProto's core components are also available as separate, standalo * When called, skips to the next file in the playlist: skipPlay * When client-side passcode lock feature is enabled, will not show message texts in incoming PUSH notifications: account.updateDeviceLocked * When was full info for this chat last cached: fullChatLastUpdated + * Whether our own audio stream is muted in a call: isCallMuted + * Whether our own audio stream is muted in a group call: isGroupCallMuted * Whether the currently playing audio file is paused: isPlayPaused + * Whether the currently playing audio file of a group call is paused: isGroupCallPlayPaused * Whether the user will receive notifications when contacts sign up: account.getContactSignUpNotification * Whether this is altervista: isAltervista * Whether we can convert any audio/video file to a VoIP OGG OPUS file, or the files must be preconverted using @libtgvoipbot: canConvertOgg @@ -1257,10 +1328,15 @@ Some of MadelineProto's core components are also available as separate, standalo * Wrap a Pin constructor into an abstract Pinned object: wrapPin * Wrap a media constructor into an abstract Media object: wrapMedia * Wrap an Update constructor into an abstract Update object: wrapUpdate + * account.confirmBotConnection * account.deletePasskey + * account.deleteWebBrowserSettingsExceptions * account.getPasskeys + * account.getWebBrowserSettings * account.initPasskeyRegistration * account.registerPasskey + * account.toggleWebBrowserSettingsException + * account.updateWebBrowserSettings * aicompose.createTone * aicompose.deleteTone * aicompose.getTone @@ -1268,21 +1344,48 @@ Some of MadelineProto's core components are also available as separate, standalo * aicompose.getTones * aicompose.saveTone * aicompose.updateTone + * auth.cancelWebTokenAuthorization * auth.checkPaidAuth + * auth.finishFirebasePnvLogin * auth.finishPasskeyLogin + * auth.firebasePnvSignUp + * auth.initFirebasePnvLogin * auth.initPasskeyLogin * base64URL decode: base64urlDecode + * bots.addUsername * bots.checkUsername * bots.createBot * bots.editAccessSettings * bots.exportBotToken * bots.getAccessSettings * bots.getRequestedWebViewButton + * bots.removeUsername * bots.requestWebViewButton + * bots.setJoinChatResults + * communities.create + * communities.getJoinedCommunities + * communities.getParticipantJoinedChats + * communities.getPeerLinkRequests + * communities.toggleAllPeerLinkRequestApproval + * communities.toggleCommunityCollapsedInDialogs + * communities.toggleParticipantBanned + * communities.togglePeerLink + * communities.togglePeerLinkRequestApproval + * contacts.exportNoPaidMessagesToken + * contacts.importNoPaidMessagesToken * contacts.updateContactNote + * ephemeral.deleteAllWelcomeMessages + * ephemeral.deleteMessage + * ephemeral.deleteWelcomeMessage + * ephemeral.editMessage + * ephemeral.getCallbackAnswer + * ephemeral.getWelcomeMessages + * ephemeral.reportMessage + * ephemeral.sendMessage * messages.addPollAnswer * messages.checkUrlAuthMatchCode * messages.composeMessageWithAI + * messages.composeRichMessageWithAI * messages.createForumTopic * messages.declineUrlAuth * messages.deleteParticipantReaction @@ -1297,24 +1400,40 @@ Some of MadelineProto's core components are also available as separate, standalo * messages.getForumTopicsByID * messages.getFutureChatCreatorAfterLeave * messages.getPersonalChannelHistory + * messages.getRichMessage + * messages.getShareThemeBackdrops * messages.getUnreadPollVotes * messages.readPollVotes * messages.reorderPinnedForumTopics * messages.reportMusicListen * messages.reportReadMetrics + * messages.requestChatJoinWebView * messages.setBotGuestChatResult + * messages.setShareTheme * messages.summarizeText + * messages.translateRichMessage * messages.updatePinnedForumTopic * null-byte RLE decode: rleDecode * null-byte RLE encode: rleEncode * payments.craftStarGift + * payments.createOnrampSession + * payments.deleteStarGift + * payments.depositStarGift + * payments.displayStarGift * payments.getCraftStarGifts + * payments.getCurrencyRates + * payments.getOnrampAvailability + * payments.getOnrampBaseCurrencies + * payments.getOnrampLimits + * payments.getOnrampProviders + * payments.getOnrampQuote * payments.getStarGiftActiveAuctions * payments.getStarGiftAuctionAcquiredGifts * payments.getStarGiftAuctionState * payments.getStarGiftUpgradeAttributes * payments.resolveStarGiftOffer * payments.sendStarGiftOffer + * payments.withdrawStarGift * phone.deleteGroupCallMessages * phone.deleteGroupCallParticipantMessages * phone.getGroupCallStars @@ -1323,7 +1442,35 @@ Some of MadelineProto's core components are also available as separate, standalo * phone.sendGroupCallMessage * stats.getPollStats * stories.startLive + * toncenter.getStreamingUrl + * toncenter.performApiRequest * users.suggestBirthday + * wallet.disableBackup + * wallet.enableBackup + * wallet.exportSecretPhrase + * wallet.fetchEncryptedSecretPhrasePart + * wallet.getBackupHolderDcs + * wallet.getExistingWaltBalance + * wallet.getGaslessInfo + * wallet.getNfts + * wallet.getProofChallenge + * wallet.getState + * wallet.getTransactions + * wallet.getTransactionsByIDs + * wallet.getTransactionsByMsgHash + * wallet.getUserAddresses + * wallet.replaceWallet + * wallet.sendTransfer + * wallet.setCardStickers + * wallet.tonConnectClaimRequest + * wallet.tonConnectCloseSession + * wallet.tonConnectCreateSession + * wallet.tonConnectGetPending + * wallet.tonConnectGetSessions + * wallet.tonConnectNextEventId + * wallet.tonConnectRegisterKey + * wallet.tonConnectSubmitConnectResult + * wallet.tonConnectSubmitResponse * [Contributing](https://docs.madelineproto.xyz/docs/CONTRIB.html) - You can contribute in various ways. * [Translation](https://docs.madelineproto.xyz/docs/CONTRIB.html#translation) * [Contribution guide](https://docs.madelineproto.xyz/docs/CONTRIB.html#contribution-guide) diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/composer.json b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/composer.json index 799799b..01cc625 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/composer.json +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/composer.json @@ -25,7 +25,7 @@ "require": { "php-64bit": ">=8.2", "danog/primemodule": "^1.0.13", - "symfony/polyfill-mbstring": ">=1.32", + "symfony/polyfill-mbstring": ">=1.38.2", "ext-json": "*", "ext-xml": "*", "ext-dom": "*", @@ -33,60 +33,84 @@ "ext-hash": "*", "ext-zlib": "*", "ext-fileinfo": "*", - "amphp/amp": "^3.1.1", - "amphp/http-client": "^5.3.4", + "amphp/amp": "^3.1.3", + "amphp/http-client": "^5.3.6", "amphp/websocket-client": "^2.0.2", "amphp/http": "^2.1.2", - "amphp/socket": "^2.3.1", - "amphp/dns": "^2.4.0", + "amphp/socket": "^2.4.1", + "amphp/dns": "^2.4.1", "amphp/byte-stream": "^2.1.2", "amphp/file": "^3.2.0", - "amphp/mysql": "^3", - "amphp/postgres": "^2.1.1", + "amphp/mysql": "^3.1.1", + "amphp/postgres": "^2.2.1", + "amphp/process": "^2.1", "danog/dns-over-https": "^1.0.1", "amphp/http-client-cookies": "^2", "danog/tg-file-decoder": "^1.0.2", - "league/uri": "^7.5.1", - "danog/ipc": "^1.0.1", + "league/uri": "^7.8.1", + "danog/ipc": "^1.1.0", "amphp/log": "^2", "danog/loop": "^1.1.1", - "phpseclib/phpseclib": "^3.0.47", - "amphp/redis": "^2.0.3", + "phpseclib/phpseclib": "^4.0.1", + "amphp/redis": "^2.0.4", "psr/http-factory": "^1.1.0", "psr/log": "^3.0.2", - "webmozart/assert": "^1.12.1", - "bacon/bacon-qr-code": "^3.0.1", - "nikic/php-parser": "^5.6.2", - "revolt/event-loop": "^1.0.7", - "danog/async-orm": "^1.1.4", - "danog/telegram-entities": "^1.0.5", + "webmozart/assert": "^2.4.1", + "bacon/bacon-qr-code": "^3.1.1", + "nikic/php-parser": "^5.9.0", + "revolt/event-loop": "^1.0.9", + "danog/async-orm": "^1.1.6", + "danog/telegram-entities": "^1.1.0", "danog/better-prometheus": "^0.1.1", - "amphp/http-server": "^3.4.3", + "amphp/http-server": "^3.4.6", "danog/tg-dialog-id": "^2", - "symfony/polyfill-php83": "^1.32" + "symfony/polyfill-php83": "^1.41", + "danog/php-rtc-av": "^1.1.11", + "danog/php-rtc-codecs": "^1.1.19", + "danog/php-rtc-dtls": "^2.0.19", + "danog/php-rtc-ice": "^2.0.18", + "danog/php-rtc-ntp": "^1.1.14", + "danog/php-rtc-rtcp": "^1.1.11", + "danog/php-rtc-rtp": "^2.0.23", + "danog/php-rtc-sctp": "^2.0.14", + "danog/php-rtc-srtp": "^1.1.16", + "danog/php-rtc-stun": "^2.0.18", + "danog/php-rtc-webrtc": "^2.0.19", + "danog/php-rtc-datachannel": "^1.1.10", + "danog/php-rtc-sdp": "^1.1.12", + "danog/php-rtc-stats": "^1.1.7", + "danog/php-rtc-turn": "^2.0.9", + "danog/php-rtc-mdns": "^1.1.12", + "danog/php-rtc-exception": "^1.1.10", + "danog/php-rtc-mixin": "^2.0.9", + "danog/php-rtc-rtp-parameter": "^1.1.8", + "symfony/polyfill-iconv": "^1.37", + "symfony/polyfill-php84": "^1.38", + "symfony/polyfill-php85": "^1.41", + "symfony/polyfill-php86": "^1.41" }, "require-dev": { - "quasarstream/webrtc": "^1.0", "ext-ctype": "*", "danog/phpdoc": "^0.1.24", - "phpunit/phpunit": "^9.6.29", + "phpunit/phpunit": "^9.6.36", "amphp/phpunit-util": "^3", - "bamarni/composer-bin-plugin": "1.8.2", - "symfony/yaml": "^6.4.26", - "revolt/event-loop-adapter-react": "^1.1.1", + "bamarni/composer-bin-plugin": "1.9.1", + "symfony/yaml": "^6.4.45", "dg/bypass-finals": "dev-master", "brianium/paratest": "^6.11.1", "vimeo/psalm": "dev-master", - "sebastian/diff": "^4.0" + "sebastian/diff": "^4.0.6" }, "suggest": { "ext-primemodule": "Install the primemodule and FFI extensions to speed up MadelineProto (https://prime.madelineproto.xyz)", - "ext-ffi": "Install the primemodule and FFI extensions to speed up MadelineProto (https://prime.madelineproto.xyz)", + "ext-ffi": "Install the FFI extension (with libopus, libvpx and ffmpeg) to transcode audio and video in realtime; not required to play and record video and audio inside calls", "ext-pdo": "Install the pdo extension to store session data on MySQL", "ext-openssl": "Install the openssl extension for faster crypto", + "ext-sodium": "Install the sodium extension for faster crypto", "ext-uv": "Install the uv extension to greatly speed up MadelineProto!", "ext-gmp": "Install the gmp extension to speed up authorization", - "ext-bcmath": "Install the bcmath extension to speed up authorization" + "ext-bcmath": "Install the bcmath extension to speed up authorization", + "ext-sockets": "Install the sockets extension on Windows to use UNIX sockets for IPC (otherwise TCP on 127.0.0.1 is used, which any local user can connect to)" }, "authors": [ { @@ -120,11 +144,11 @@ "@cs-fix", "@fuzz", "@file_ref_map", - "@psalm", "@test-light" ], "test": [ - "@paratest" + "@paratest", + "@test-session" ], "test-light": [ "@paratest-light" @@ -135,11 +159,16 @@ "fuzz": "php tools/fuzzer.php", "file_ref_map": "php tools/gen_filerefmap.php", "docs-fix": "tools/fix_docs.sh", - "paratest": "@php -dzend.assertions=1 ./vendor/bin/paratest -fv", - "paratest-light": "@php -dzend.assertions=1 ./vendor/bin/paratest -fvc phpunit-light.xml", + "paratest": "@php -dzend.assertions=1 ./vendor/bin/paratest -v --exclude-group session", + "test-session": "tests/session_tests.sh", + "paratest-light": "@php -dzend.assertions=1 ./vendor/bin/paratest -vc phpunit-light.xml --exclude-group session", "bin": "echo 'bin not installed'", - "post-install-cmd": ["@composer bin all install --ansi"], - "post-update-cmd": ["@composer bin all update --ansi"] + "post-install-cmd": [ + "@composer bin all install --ansi" + ], + "post-update-cmd": [ + "@composer bin all update --ansi" + ] }, "config": { "allow-plugins": { diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/ar.json b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/ar.json new file mode 100644 index 0000000..660f1a4 --- /dev/null +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/ar.json @@ -0,0 +1,274 @@ +{ + "baseDirLimitation": "تم ضبط قيد basedir: قد يؤثر ذلك على الأداء ويسبب بعض المشكلات، يُرجى تعطيله إن أمكن!", + "noReportPeers": "تحذير: لم يتم تعيين أي جهات لاستلام التقارير (report peers)، يُرجى إضافة الدالة التالية إلى معالج الأحداث الخاص بك", + "manualAdminActionRequired": "!!!!!!!!! يلزم تدخل يدوي من مسؤول النظام !!!!!!!!!", + "mmapErrorPart1": "تم بلوغ الحد الأقصى لعدد مناطق الذاكرة المعيّنة (mmap) (%s): يُرجى زيادة إعداد النواة vm.max_map_count إلى 262144 لإصلاح ذلك.", + "mmapErrorPart2": "للإصلاح، نفّذ الأمر التالي بصلاحيات root: %s", + "mmapErrorPart3": "للإبقاء على التغيير بعد إعادة التشغيل: %s", + "mmapErrorPart4": "على Windows وWSL، قد تساعد زيادة حجم ملف الصفحات (pagefile)؛ يُرجى الانتقال إلى Linux أصلي إذا استمرت المشكلة.", + "botAlreadyRunning": "البوت قيد التشغيل بالفعل!", + "extensionRequired": "يتطلب MadelineProto الامتداد %s ليعمل. %s", + "extensionRequiredInstallWithApt": "جرّب تنفيذ sudo apt-get install %s.", + "extensionRequiredInstallWithCustomInstructions": "اتبع التعليمات على %s لتثبيته.", + "extensionRecommended": "تحذير: الامتداد %s غير مثبّت، يُرجى تثبيته لتسريع MadelineProto!", + "go": "متابعة", + "apiChooseManualAutoTip": "لاحظ أنه يمكنك أيضًا توفير API ID/hash مباشرةً في الشيفرة باستخدام الإعدادات: %s", + "apiChooseManualAutoTipWeb": "لاحظ أنه يمكنك أيضًا توفير API ID/hash مباشرةً في الشيفرة باستخدام الإعدادات.", + "apiChoosePrompt": "اختيارك (m/a): ", + "apiManualInstructions0": "سجّل الدخول إلى https://my.telegram.org", + "apiManualInstructions1": "انتقل إلى API development tools", + "apiManualInstructions2": "انقر على create application", + "apiAppInstructionsManual0": "اسم تطبيقك، يمكن أن يكون أي شيء", + "apiAppInstructionsManual1": "الاسم المختصر لتطبيقك، أحرف وأرقام، من 5 إلى 32 حرفًا", + "apiAppInstructionsManual2": "عنوان URL لتطبيقك/موقعك، أو t.me/yourusername", + "apiAppInstructionsManual3": "أي شيء", + "apiAppInstructionsManual4": "صِف تطبيقك هنا", + "apiManualWeb": "أدخل API ID وAPI hash الخاصين بك", + "apiManualPrompt0": "أدخل API ID الخاص بك: ", + "apiManualPrompt1": "أدخل API hash الخاص بك: ", + "apiAutoWeb": "أدخل رقم هاتف مسجّلًا مسبقًا في Telegram للحصول على API ID", + "apiAutoPrompt0": "أدخل رقم هاتف مسجّلًا مسبقًا في Telegram: ", + "apiAutoPrompt1": "أدخل رمز التحقق الذي تلقيته في Telegram: ", + "apiAppWeb": "أدخل معلومات API", + "apiAppInstructionsAuto0": "أدخل اسم التطبيق، يمكن أن يكون أي شيء: ", + "apiAppInstructionsAuto1": "أدخل الاسم المختصر للتطبيق، أحرف وأرقام، من 5 إلى 32 حرفًا: ", + "apiAppInstructionsAuto2": "أدخل عنوان URL للتطبيق/الموقع، أو t.me/yourusername: ", + "apiAppInstructionsAuto3": "أدخل منصة التطبيق: ", + "apiAppInstructionsAuto4": "صِف تطبيقك: ", + "apiAppInstructionsAutoTypeOther": "أخرى (حدّدها في الوصف)", + "apiParamsError": "لم تقدّم جميع المعاملات المطلوبة!", + "apiError": "خطأ: %s. حاول مرة أخرى.", + "loginChoosePromptWeb": "هل تريد تسجيل الدخول كمستخدم أم كبوت؟", + "loginWebQr": "يمكنك أيضًا تسجيل الدخول تلقائيًا بفتح Telegram على هاتفك، والانتقال إلى الإعدادات > الأجهزة > ربط جهاز سطح المكتب، ثم مسح رمز QR التالي:", + "loginWebQr1": "افتح Telegram على هاتفك", + "loginWebQr2": "انتقل إلى الإعدادات > الأجهزة > ربط جهاز سطح المكتب", + "loginWebQr3": "وجّه هاتفك نحو هذه الشاشة لتأكيد تسجيل الدخول", + "loginOptionBot": "بوت", + "loginOptionUser": "مستخدم", + "loginBot": "أدخل توكن البوت: ", + "loginUser": "أدخل رقم هاتفك: ", + "loginQr": "افتح Telegram على هاتفك، وانتقل إلى الإعدادات > الأجهزة > ربط جهاز سطح المكتب، ثم امسح رمز QR أعلاه لتسجيل الدخول تلقائيًا.", + "loginQrCodeSuccessful": "تم تسجيل الدخول برمز QR بنجاح!", + "loginQrCodeExpired": "انتهت صلاحية رمز QR، جارٍ إنشاء رمز جديد...", + "loginManual": "بدلًا من ذلك، يمكنك أيضًا إدخال توكن بوت أو رقم هاتف لتسجيل الدخول يدويًا: ", + "loginUserCode": "أدخل الرمز: ", + "loginUserPass": "أدخل كلمة المرور (التلميح: %s): ", + "loginUserPassWeb": "أدخل كلمة المرور: ", + "loginUserPassHint": "التلميح: %s", + "signupFirstName": "أدخل اسمك الأول: ", + "signupLastName": "أدخل اسم العائلة (يمكن تركه فارغًا): ", + "signupWeb": "يُرجى التسجيل", + "signupFirstNameWeb": "الاسم الأول", + "signupLastNameWeb": "اسم العائلة", + "loginNoCode": "لم تُدخل رمز التحقق!", + "loginNoPass": "لم تُدخل كلمة المرور!", + "loginNoName": "لم تُدخل الاسم الأول!", + "loginBotTokenWeb": "توكن البوت", + "loginUserPhoneWeb": "رقم الهاتف", + "loginUserPhoneCodeWeb": "الرمز", + "done": "تم!", + "nearest_dc": "نحن في %s، وأقرب DC هو %d.", + "serialization_ofd": "التسلسل (serialization) قديم، جارٍ إعادة بناء الكائن!", + "api_not_set": "يجب توفير api key وapi id، احصل عليهما من my.telegram.org", + "session_corrupted": "الجلسة تالفة!", + "value_bigger_than_2147483647": "القيمة المقدّمة %s أكبر من 2147483647", + "value_smaller_than_2147483648": "القيمة المقدّمة %s أصغر من -2147483648", + "value_bigger_than_9223372036854775807": "القيمة المقدّمة %s أكبر من 9223372036854775807", + "value_smaller_than_9223372036854775808": "القيمة المقدّمة %s أصغر من -9223372036854775808", + "value_bigger_than_4294967296": "القيمة المقدّمة %s أكبر من 4294967296", + "value_smaller_than_0": "القيمة المقدّمة %s أصغر من 0", + "encode_double_error": "تعذّر ترميز double بشكل صحيح", + "file_not_exist": "الملف غير موجود", + "deserialization_error": "حدث خطأ أثناء إلغاء التسلسل (deserialization)", + "rpc_tg_error": "أعاد Telegram خطأ RPC: %s (%s)، بسبب %s:%s%sتتبع TL:", + "madelineproto_ready": "MadelineProto جاهز!", + "logout_ok": "تم تسجيل الخروج بنجاح!", + "already_loggedIn": "نسخة MadelineProto هذه مسجّلة الدخول بالفعل!", + "login_ok": "تم تسجيل الدخول بنجاح!", + "login_user": "جارٍ تسجيل الدخول كمستخدم عادي...", + "login_bot": "جارٍ تسجيل الدخول كبوت...", + "login_code_sending": "جارٍ إرسال الرمز...", + "login_code_sent": "تم إرسال الرمز بنجاح! بعد استلام الرمز، استخدم الدالة completePhoneLogin.", + "login_code_uncalled": "لست في انتظار الرمز! يُرجى استدعاء الدالة phoneLogin أولًا", + "login_2fa_enabled": "المصادقة الثنائية (2FA) مفعّلة، سيتعيّن عليك استدعاء الدالة complete2falogin...", + "login_need_signup": "لم يتم إنشاء حساب لهذا الرقم، سيتعيّن عليك استدعاء الدالة completeSignup...", + "login_auth_key": "جارٍ تسجيل الدخول باستخدام مفتاح التفويض (auth key)...", + "not_loggedIn": "لم يتم تسجيل الدخول!", + "signup_uncalled": "لست في انتظار التسجيل! يُرجى استدعاء الدالتين phoneLogin وcompletePhoneLogin أولًا!", + "signing_up": "جارٍ التسجيل كمستخدم عادي...", + "signup_ok": "تم التسجيل بنجاح!", + "2fa_uncalled": "لست في انتظار كلمة المرور! يُرجى استدعاء الدالتين phoneLogin وcompletePhoneLogin أولًا!", + "peer_not_in_db": "هذا الـ peer غير موجود في قاعدة بيانات الـ peers الداخلية", + "call_error_1": "تعذّر العثور على المكالمة %s وقبولها", + "accepting_call": "جارٍ قبول المكالمة من %s...", + "call_already_accepted": "المكالمة %s مقبولة بالفعل", + "call_already_declined": "المكالمة %s مرفوضة بالفعل", + "call_error_2": "تعذّر العثور على المكالمة %s وتأكيدها", + "call_confirming": "جارٍ تأكيد المكالمة من %s...", + "call_error_3": "تعذّر العثور على المكالمة %s وإكمال إنشائها", + "call_completing": "جارٍ إكمال إنشاء المكالمة من %s...", + "fingerprint_invalid": "بصمة المفتاح غير صالحة!", + "call_discarding": "جارٍ إنهاء المكالمة %s...", + "file_parsing": "جارٍ تحليل %s...", + "src_file_invalid": "تم تقديم ملف مصدر غير صالح: ", + "bool_error": "تعذّر استخراج القيمة المنطقية (boolean)", + "not_numeric": "القيمة المعطاة ليست رقمية", + "long_not_16": "طول القيمة المعطاة ليس 16 بايت", + "long_not_32": "طول القيمة المعطاة ليس 32 بايت", + "long_not_64": "طول القيمة المعطاة ليس 64 بايت", + "array_invalid": "لم تقدّم مصفوفة صالحة", + "predicate_not_set": "لم يتم تعيين الـ predicate (القيمة تحت _)!", + "update_madelineproto": "أنت تستخدم إصدارًا قديمًا من MadelineProto، والتحديث مطلوب: الإصدار الحالي هو %s، لكن أحدث إصدار مع العديد من إصلاحات الأخطاء والميزات الجديدة هو %s!", + "type_extract_error": "تعذّر استخراج النوع \"%s\"، يجب عليك تحديث MadelineProto!", + "method_not_found": "تعذّر العثور على الدالة: ", + "params_missing": "معامل مطلوب مفقود", + "sec_peer_not_in_db": "هذا الـ peer السري غير موجود في قاعدة بيانات الـ peers الداخلية", + "stream_handle_invalid": "تم تقديم مقبض تدفق (stream handle) غير صالح.", + "length_too_big": "الطول كبير جدًا", + "string_required": "كان من المتوقع سلسلة نصية (string)!", + "waveform_must_have_100_values": "يجب أن تحتوي مصفوفة waveform على 100 قيمة!", + "waveform_value": "يجب أن تكون قيمة waveform بين 0 و31!", + "could_not_convert_object": "تعذّر تحويل كائن من النوع %s", + "type_extract_error_id": "تعذّر استخراج النوع: %s بالمعرّف %s، يجب عليك تحديث MadelineProto!", + "constructor_not_found": "لم يتم العثور على constructor للنوع: ", + "botapi_conversion_error": "لا يمكن تحويل %s إلى كائن bot API", + "non_text_conversion": "لا يمكن تحويل الرسائل غير النصية بعد!", + "file_type_invalid": "تم اكتشاف نوع ملف غير صالح (%s)", + "static_analysis_minor": "تمت مصادفة مشكلة بسيطة أثناء التحليل الثابت لـ %s: %s", + "static_analysis_severe": "تمت مصادفة مشكلة خطيرة أثناء التحليل الثابت لـ %s: %s", + "secret_chat_skipping": "المحادثة السرية %s غير موجودة في قاعدة البيانات، جارٍ تخطي الرسالة...", + "must_have_declare_types": "لأسباب تتعلق بالأداء، يجب أن تكون العبارة الأولى في ملف معالج الأحداث \"declare(strict_types=1);\"", + "do_not_delete_MadelineProto.log": "يجب عدم حذف ملف MadelineProto.log أبدًا، يُرجى بدلًا من ذلك تعيين حد أقصى مخصص للحجم في الإعدادات!", + "do_not_remove_MadelineProto.log_phar": "يُرجى عدم حذف madeline.phar أو madeline.php، وإلا سيتعطل MadelineProto. إذا واجهت أي مشكلة مع MadelineProto، فأبلغ عنها على https://github.com/danog/MadelineProto أو https://t.me/pwrtelegramgroup", + "do_not_use_blocking_function": "لأسباب تتعلق بالأداء، لا يجوز لمعالجات الأحداث استخدام الدالة الحاجبة المتزامنة (غير async) %s، يُرجى استخدام %s بدلًا منها", + "do_not_use_blocking_class": "لأسباب تتعلق بالأداء، لا يجوز للمعالجات استخدام الصنف الحاجب (غير async) %s، يُرجى استخدام %s بدلًا منه", + "do_not_use_deprecated_function": "الدالة %s مهملة (deprecated)، يُرجى استخدام %s بدلًا منها", + "do_not_use_non_root_require_in_event_handler": "لأسباب تتعلق بالأداء، يجب عدم استخدام require أو include داخل صنف معالج الأحداث، يُسمح فقط بـ require على مستوى الجذر.", + "do_not_use_yield": "لا يتطلب MadelineProto 8 استخدام yield في الدوال غير المتزامنة ولا يدعمه، يجب عليك إزالة جميع كلمات yield المفتاحية المستخدمة سابقًا لاستدعاءات الدوال غير المتزامنة", + "recommend_not_use_filesystem_function": "لا يُنصح باستخدام الدالة %s، لأن الوصول إلى نظام الملفات أثناء معالجة التحديثات سيبطئ البوت الخاص بك، يُرجى مراجعة https://docs.madelineproto.xyz/docs/UPDATES.html#avoiding-the-use-of-filesystem-functions للاطلاع على قائمة بالطرق البديلة لتخزين البيانات التي لن تبطئ البوت!", + "plugins_do_not_use_require": "لأسباب تتعلق بالأداء، لا يمكن للإضافات تضمين (include أو require) ملفات أخرى موجودة في مجلد الإضافات تلقائيًا إلا عبر تشغيل المحمّل التلقائي PSR-4 (وليس باستدعاء require() يدويًا).", + "plugins_must_have_exactly_one_class": "يجب أن تعرّف الإضافة صنفًا واحدًا بالضبط! لتعريف عدة أصناف أو واجهات أو traits، أنشئ ملفات منفصلة، وسيحمّلها MadelineProto تلقائيًا.", + "cli_need_dl.php_link": "يُرجى تحديد عنوان URL لسكربت التنزيل عند استخدام getDownloadLink عبر CLI!", + "invalid_dl.php_session": "%s ليس سكربت تنزيل صالحًا لأن معرّف جلسته مختلف (المتوقع %s، الفعلي %s)", + "need_dl.php": "تعذّر إنشاء سكربت التنزيل الافتراضي (%s)، يُرجى إنشاء ملف dl.php بالمحتوى التالي: %s وتمرير عنوان URL الخاص به إلى المعامل الثاني لـ getDownloadLink", + "dl.php_powered_by_madelineproto": "خادم تنزيل ملفات Telegram (حتى 4 غيغابايت)، مدعوم بواسطة MadelineProto!
انقر هنا لمزيد من المعلومات حول كيفية إعداد خادم تنزيل ملفات Telegram الخاص بك!", + "dl.php_check_logs_make_sure_session_running": "إما أن بوت MadelineProto EventHandler المرتبط أو خادم MadelineProto IPC غير متصل، يُرجى التحقق من السجلات والتأكد من تشغيل واحد منهما على الأقل!", + "account_banned": "!!!!!!! تحذير !!!!!!!\nعلّق نظام منع الإغراق (flood) في Telegram هذا الحساب.\nللمتابعة، يلزم التحقق اليدوي.\nأرسل بريدًا إلكترونيًا إلى recover@telegram.org تطلب فيه رفع الحظر عن رقم الهاتف %s، وصِف باختصار ما ستفعله بهذا الرقم.\nثم سجّل الدخول مرة أخرى.\nإذا حذفت هذا الحساب عمدًا، فتجاهل هذه الرسالة.", + "plugin_path_does_not_exist": "مسار الإضافة %s غير موجود!", + "could_not_connect_to_MadelineProto": "تعذّر الاتصال بـ MadelineProto، يُرجى تفعيل proc_open وإزالة قيود open_basedir أو تعطيل إعادة كتابة المسارات في خادم الويب لإصلاح ذلك! إذا كنت قد فعلت ذلك بالفعل، فتأكد من أن إصدار CLI من PHP مطابق تمامًا لإصدار الويب (نفس الإصدار والامتدادات وما إلى ذلك)، وراجع ملف MadelineProto.log لمزيد من المعلومات حول الخطأ الذي منع خادم IPC من البدء.", + "translate_madelineproto_web": "يمكن ترجمة MadelineProto إلى لغتك (تقدّم الترجمة الحالي: %d%%)، انقر هنا للمساهمة في الترجمة!", + "translate_madelineproto_cli": "يمكن ترجمة MadelineProto إلى لغتك (تقدّم الترجمة الحالي: %d%%)، انتقل إلى https://github.com/danog/MadelineProto/tree/v8/langs للمساهمة في الترجمة!", + "apiInvalidWeb": "API ID رقم، وAPI hash طوله 32 حرفًا: انسخهما مرة أخرى من my.telegram.org.", + "webDoneLead": "يواصل MadelineProto العمل على الخادم: يمكنك إغلاق هذه الصفحة.", + "apiChooseManualAuto": "هل تريد الحصول على API ID وhash تلقائيًا من my.telegram.org (a)، أم إدخالهما يدويًا (m)؟", + "apiAutoFallbackManual": "أدخل API ID وhash يدويًا بدلًا من ذلك.", + "apiSetupTitleWeb": "احصل على API ID وhash", + "apiSetupLeadWeb": "يحتاج كل تطبيق Telegram إلى API ID وhash. يمكن لـ MadelineProto الحصول عليهما لك من my.telegram.org، باستخدام رقم هاتف حساب Telegram موجود.", + "apiAutoPhoneHintWeb": "يرسل my.telegram.org رمز تسجيل الدخول إلى تطبيق Telegram لديك، وليس عبر SMS.", + "apiSendCodeWeb": "إرسال الرمز", + "apiChooseManualWeb": "لدي API ID بالفعل", + "apiChooseAutoWeb": "الحصول عليهما تلقائيًا", + "apiStartOverWeb": "البدء من جديد", + "apiAutoCodeTitleWeb": "أدخل الرمز الوارد من Telegram", + "apiAutoCodeLeadWeb": "أرسل my.telegram.org رمز تسجيل دخول إلى تطبيق Telegram لديك، في المحادثة مع Telegram (وليس عبر SMS).", + "apiAutoCodeLabelWeb": "رمز تسجيل الدخول", + "apiCreateTitleWeb": "أنشئ تطبيقك", + "apiCreateLeadWeb": "لا يملك هذا الحساب أي تطبيق على my.telegram.org بعد. تظهر هذه التفاصيل لك فقط، ويمكن تغييرها لاحقًا.", + "apiAppTitleLabelWeb": "اسم التطبيق", + "apiAppShortNameLabelWeb": "الاسم المختصر", + "apiAppUrlLabelWeb": "عنوان URL", + "apiAppDescLabelWeb": "الوصف", + "apiCreateWeb": "إنشاء التطبيق", + "apiSaveWeb": "حفظ ومتابعة", + "apiAutoErrorTitle": "أعاد my.telegram.org خطأً", + "apiCreateErrorTitle": "لم يُنشئ my.telegram.org التطبيق", + "apiCreateVpsWarning": "لا يسمح Telegram بإنشاء تطبيقات جديدة على my.telegram.org من نطاقات IP الخاصة بخوادم VPS وشبكات VPN ومراكز البيانات الأخرى، وقد أُرسل الطلب من عنوان IP للجهاز الذي يشغّل MadelineProto. أنشئ التطبيق يدويًا على https://my.telegram.org من اتصال منزلي (مثل هاتفك عبر بيانات الجوال)، ثم أدخل API ID وhash.", + "loginTitleWeb": "تسجيل الدخول إلى Telegram", + "loginLeadWeb": "اختر الحساب أو البوت الذي ستعمل به نسخة MadelineProto هذه.", + "loginTypeWeb": "تسجيل الدخول كـ", + "loginUserPhoneHintWeb": "مع رمز الدولة، مثل +39 123 456 7890.", + "loginBotTokenHintWeb": "التوكن الذي أعطاك إياه @BotFather عند إنشاء البوت.", + "loginCodeTitleWeb": "أدخل رمز تسجيل الدخول", + "loginCodeLeadWeb": "أرسل Telegram رمز تسجيل الدخول إلى تطبيق Telegram لديك، أو عبر SMS إن لم تكن مسجّلًا الدخول في أي مكان آخر.", + "loginPasswordTitleWeb": "التحقق بخطوتين", + "loginPasswordLeadWeb": "هذا الحساب محمي بكلمة مرور، مُعيّنة في الإعدادات > الخصوصية والأمان > التحقق بخطوتين.", + "loginPasswordLabelWeb": "كلمة المرور", + "signupTitleWeb": "أنشئ حسابك", + "signupLeadWeb": "رقم الهاتف هذا غير مسجّل في Telegram بعد: اختر اسم الحساب الجديد.", + "webContinue": "متابعة", + "webLogin": "تسجيل الدخول", + "webError": "%s. تحقّق منه وحاول مرة أخرى.", + "webStepApp": "API ID وhash", + "webStepAccount": "الحساب", + "webStepVerify": "التحقق", + "webStepDone": "قيد التشغيل", + "webProgress": "تقدّم الإعداد", + "webDocs": "التوثيق", + "webOptional": "اختياري", + "webShowPassword": "إظهار", + "webHidePassword": "إخفاء", + "webQrTitle": "تسجيل الدخول برمز QR", + "webQrWaiting": "في انتظار المسح…", + "webFieldRequired": "املأ هذا الحقل.", + "webPhoneInvalid": "أدخل رقم الهاتف مع رمز الدولة، مثل +39 123 456 7890.", + "tweb.Login.Title": "تسجيل الدخول إلى MadelineProto", + "tweb.Login.PhoneLabelInvalid": "رقم الهاتف غير صالح", + "tweb.Login.StartText": "يُرجى تأكيد رمز دولتك\nوإدخال رقم هاتفك.", + "tweb.Login.Code.SentSms": "لقد أرسلنا إليك رسالة SMS\nتحتوي على الرمز.", + "tweb.Login.Code.SentInApp": "لقد أرسلنا إليك رسالة في Telegram\nتحتوي على الرمز.", + "tweb.Login.Code.SentCall": "سنتصل بك ونملي عليك\nالرمز.", + "tweb.Login.Code.SentEmail": "يُرجى التحقق من بريدك الإلكتروني **%s** (لا تنسَ مجلد الرسائل غير المرغوب فيها) وإدخال الرمز الذي أرسلناه إليك للتو.", + "tweb.Login.Code.SentUnknown": "يُرجى البحث في كل مكان\nعن الرمز (النوع: %s)", + "tweb.Login.Code.SentMissedCall": "خلال الثواني القليلة القادمة ستتلقى\nمكالمة قصيرة من **%s**. لا تُجب عليها —\nفقط أدخل الأرقام الأخيرة من هذا الرقم.", + "tweb.Login.Code.SentSmsWord": "لقد أرسلنا رسالة SMS تحتوي على كلمة سرية\nإلى هاتفك **%s**.", + "tweb.Login.Code.SentSmsWordBeginning": "لقد أرسلنا رسالة SMS تحتوي على كلمة سرية تبدأ\nبـ \"**%2$s**\" إلى هاتفك **%1$s**.", + "tweb.Login.Code.SentSmsPhrase": "لقد أرسلنا رسالة SMS تحتوي على عبارة سرية\nإلى هاتفك **%s**.", + "tweb.Login.Code.SentSmsPhraseBeginning": "لقد أرسلنا رسالة SMS تحتوي على عبارة سرية تبدأ\nبـ \"**%2$s**\" إلى هاتفك **%1$s**.", + "tweb.Login.Code.SecretWord": "الكلمة السرية", + "tweb.Login.Code.SecretPhrase": "العبارة السرية", + "tweb.Login.Code.WordInvalid": "غير صحيح، يُرجى المحاولة مرة أخرى", + "tweb.Login.Code.WordBeginningInvalid": "كلمة غير صحيحة", + "tweb.Login.Password.Title": "أدخل كلمة المرور", + "tweb.Login.Password.Subtitle": "حسابك محمي\nبكلمة مرور إضافية", + "tweb.Login.Register.Subtitle": "أدخل اسمك\nلإنشاء حسابك", + "tweb.PleaseWait": "يُرجى الانتظار...", + "tweb.Code": "الرمز", + "tweb.LoginPassword": "كلمة المرور", + "tweb.YourName": "اسمك", + "tweb.FirstName": "الاسم الأول (مطلوب)", + "tweb.LastName": "اسم العائلة (اختياري)", + "tweb.StartMessaging": "ابدأ المراسلة", + "tweb.Country": "الدولة", + "tweb.Contacts.PhoneNumber.Placeholder": "رقم الهاتف", + "tweb.Login.Next": "التالي", + "tweb.Login.QR.Title": "تسجيل الدخول برمز QR", + "tweb.Login.QR.Help1": "افتح Telegram على هاتفك", + "tweb.Login.QR.Help2": "انتقل إلى **الإعدادات** > **الأجهزة** > **إضافة جهاز**", + "tweb.Login.QR.Help3": "وجّه هاتفك نحو هذه الشاشة لتأكيد تسجيل الدخول", + "tweb.Login.QR.Cancel": "تسجيل الدخول برقم الهاتف >", + "tweb.Login.QR.Login": "تسجيل الدخول برمز QR >", + "tweb.Login.QR.Subtitle": "امسح الرمز باستخدام تطبيق Telegram على هاتفك", + "tweb.PhoneNumber.Code.Fragment.Info": "احصل على الرمز من قسم الأرقام على [Fragment]()", + "tweb.PHONE_CODE_INVALID": "رمز غير صالح", + "tweb.PHONE_CODE_EXPIRED": "انتهت صلاحية الرمز", + "tweb.PASSWORD_HASH_INVALID": "كلمة المرور غير صحيحة", + "tweb.DarkMode": "الوضع الداكن", + "tweb.Error.AnError": "حدث خطأ. يُرجى المحاولة مرة أخرى لاحقًا.", + "tweb.AccDescr.LoginCode": "رمز تسجيل الدخول", + "tweb.Login.Bot": "تسجيل الدخول كبوت >", + "tweb.Login.Bot.Title": "تسجيل الدخول كبوت", + "tweb.Login.Bot.Subtitle": "أدخل التوكن الذي أعطاك إياه @BotFather\nعند إنشاء البوت.", + "tweb.Login.Bot.Token": "توكن البوت", + "tweb.Login.Bot.Cancel": "تسجيل الدخول كمستخدم >", + "tweb.Optional": "اختياري", + "tweb.PHONE_NUMBER_INVALID": "رقم الهاتف غير صالح", + "tweb.PHONE_NUMBER_BANNED": "رقم الهاتف هذا محظور", + "tweb.PHONE_NUMBER_FLOOD": "محاولات كثيرة جدًا، حاول مرة أخرى لاحقًا", + "tweb.PHONE_CODE_EMPTY": "رمز غير صالح", + "tweb.PHONE_PASSWORD_FLOOD": "محاولات كثيرة جدًا، حاول مرة أخرى لاحقًا", + "tweb.ACCESS_TOKEN_INVALID": "توكن البوت غير صالح", + "tweb.ACCESS_TOKEN_EXPIRED": "تم إبطال توكن البوت هذا", + "tweb.FIRSTNAME_INVALID": "الاسم الأول غير صالح", + "tweb.LASTNAME_INVALID": "اسم العائلة غير صالح", + "tweb.Close": "إغلاق" +} diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/ckb.json b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/ckb.json index ecfa036..a27ac6b 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/ckb.json +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/ckb.json @@ -1,121 +1,274 @@ { - "apiChooseManualAutoTip": "تێبینی بکە کە دەتوانیت API ID/hash ڕاستەوخۆ لە کۆدەکەدا دابین بکەیت بە بەکارهێنانی ڕێکخستنەکان: %s", + "baseDirLimitation": "سنووردارکردنێکی basedir ڕێکخراوە: ئەمە دەتوانێت کاریگەری لەسەر کارایی هەبێت و هەندێک کێشە دروست بکات، ئەگەر دەکرێت تکایە ناچالاکی بکە!", + "noReportPeers": "ئاگاداری: هیچ peer ێکی ڕاپۆرت دانەنراوە، تکایە ئەم شێوازەی خوارەوە بۆ event handler ەکەت زیاد بکە", + "manualAdminActionRequired": "!!!!!!!!! کرداری دەستیی بەڕێوەبەری سیستەم پێویستە !!!!!!!!!", + "mmapErrorPart1": "زۆرترین ژمارەی ناوچە نەخشەکێشراوەکانی بیرگە (mmap) تێپەڕێنرا (%s): بۆ چارەسەرکردن، تکایە ڕێکخستنی کێرنێڵی vm.max_map_count بۆ 262144 زیاد بکە.", + "mmapErrorPart2": "بۆ چارەسەرکردن، ئەم فەرمانەی خوارەوە وەک root جێبەجێ بکە: %s", + "mmapErrorPart3": "بۆ ئەوەی گۆڕانکارییەکە دوای دووبارە هەڵکردنەوەی سیستەم بمێنێتەوە: %s", + "mmapErrorPart4": "لە Windows و WSL دا، گەورەکردنی قەبارەی pagefile لەوانەیە یارمەتیدەر بێت؛ ئەگەر کێشەکە بەردەوام بوو، تکایە بگۆڕە بۆ Linux ی ڕاستەوخۆ (native).", + "botAlreadyRunning": "بۆتەکە پێشتر کاردەکات!", + "extensionRequired": "MadelineProto بۆ کارکردن پێویستی بە پاشکۆی %s هەیە. %s", + "extensionRequiredInstallWithApt": "هەوڵبدە sudo apt-get install %s جێبەجێ بکەیت.", + "extensionRequiredInstallWithCustomInstructions": "بۆ دامەزراندنی، ڕێنماییەکانی %s پەیڕەو بکە.", + "extensionRecommended": "ئاگاداری: پاشکۆی %s دانەمەزراوە، تکایە دایبمەزرێنە بۆ خێراکردنی MadelineProto!", "go": "بڕۆ", + "apiChooseManualAutoTip": "تێبینی بکە کە دەتوانیت API ID/hash ڕاستەوخۆ لە کۆدەکەدا دابین بکەیت بە بەکارهێنانی ڕێکخستنەکان: %s", "apiChooseManualAutoTipWeb": "تێبینی بکە کە دەتوانیت API ID/hash ڕاستەوخۆ لە کۆدەکەدا دابین بکەیت بە بەکارهێنانی ڕێکخستنەکان.", - "constructor_not_found": "Constructor نەدۆزرایەوە بۆ جۆری: ", - "botapi_conversion_error": "ناتوانرێت %s بگۆڕێت بۆ ئۆبجێکتی API بۆت", - "file_type_invalid": "جۆری پەڕگەی نادروست دۆزراوەتەوە (%s)", - "apiManualInstructions2": "کلیک لەسەر create application بکە", - "signupLastNameWeb": "ناوی کۆتایی", - "apiChoosePrompt": "هەڵبژاردەی تۆ: ", + "apiChoosePrompt": "هەڵبژاردەی تۆ (m/a): ", "apiManualInstructions0": "چوونەژوورەوە بۆ https://my.telegram.org", "apiManualInstructions1": "بڕۆ بۆ ئامرازەکانی پەرەپێدانی API", + "apiManualInstructions2": "کلیک لەسەر create application بکە", "apiAppInstructionsManual0": "ناوی ئەپەکەت دەتوانێت هەر شتێک بێت", + "apiAppInstructionsManual1": "ناوی کورتی ئەپەکەت، ئەلفوبێی ژمارەیی، ٥-٣٢ پیت", "apiAppInstructionsManual2": "URL ی ئەپ/ماڵپەڕەکەت، یان t.me/yourusername", "apiAppInstructionsManual3": "هەر شتێک", "apiAppInstructionsManual4": "لێرەدا باسی ئەپەکەت بکە", "apiManualWeb": "API ID و API هاشەکەت دابنێ", + "apiManualPrompt0": "ناسنامەی API ی خۆت دابنێ: ", "apiManualPrompt1": "هاشی API ەکەت بنووسە: ", + "apiAutoWeb": "ژمارەیەکی تەلەفۆن دابنێ کە پێشتر تۆمارکراوە لە تێلێگرام بۆ بەدەستهێنانی ناسنامەی API", "apiAutoPrompt0": "ژمارەی تەلەفۆنێک داخڵ بکە کە پێشتر لە تێلێگرام تۆمار کراوە: ", "apiAutoPrompt1": "ئەو کۆدەی پشتڕاستکردنەوە کە لە تێلێگرام وەرتگرتووە داخڵ بکە: ", "apiAppWeb": "زانیارییەکانی API داخڵ بکە", + "apiAppInstructionsAuto0": "ناوی ئەپەکە بنووسە، دەتوانێت هەر شتێک بێت: ", "apiAppInstructionsAuto1": "ناوی کورتی ئەپەکە بنووسە، ئەلفوبێی ژمارەیی، ٥-٣٢ پیت: ", - "apiAppInstructionsAuto3": "چوونە ناو پلاتفۆرمی ئەپەکە: ", + "apiAppInstructionsAuto2": "URL ی ئەپ/ماڵپەڕەکە دابنێ، یان t.me/yourusername: ", + "apiAppInstructionsAuto3": "پلاتفۆرمی ئەپەکە بنووسە: ", "apiAppInstructionsAuto4": "باسی ئەپەکەت بکە: ", "apiAppInstructionsAutoTypeOther": "شتی تر (لە وەسفدا دیاری بکە)", + "apiParamsError": "تۆ هەموو پارامێتەرەکانی پێویستت دابین نەکردووە!", "apiError": "هەڵە: %s. دووبارە هەوڵبدەرەوە.", "loginChoosePromptWeb": "دەتەوێت وەک بەکارهێنەر یان وەک بۆت بچیتە ژوورەوە؟", + "loginWebQr": "هەروەها دەتوانیت بە شێوەیەکی ئۆتۆماتیکی بچیتە ژوورەوە بە کردنەوەی تێلێگرام لە مۆبایلەکەتدا، چوون بۆ ڕێکخستنەکان > ئامێرەکان > بەستنەوەی ئامێری سەر مێز و سکانکردنی ئەم QR کۆدە:", "loginWebQr1": "لە مۆبایلەکەتدا تێلێگرام بکەرەوە", "loginWebQr2": "بڕۆ بۆ ڕێکخستنەکان > ئامێرەکان > بەستنەوەی ئامێری سەر مێز", + "loginWebQr3": "بۆ پشتڕاستکردنەوەی چوونەژوورەوە مۆبایلەکەت ئاراستەی ئەم شاشەیە بکە", "loginOptionBot": "بۆت", "loginOptionUser": "بەکارهێنەر", "loginBot": "تۆکنی بۆتەکەت بنووسە: ", - "loginUser": "ژمارەی مۆبایلت داخل بکە: ", + "loginUser": "ژمارەی مۆبایلت داخڵ بکە: ", + "loginQr": "لە مۆبایلەکەتدا تێلێگرام بکەرەوە، بڕۆ بۆ ڕێکخستنەکان > ئامێرەکان > بەستنەوەی ئامێری سەر مێز و کۆدی QR ی سەرەوە سکان بکە بۆ ئەوەی بە شێوەیەکی ئۆتۆماتیکی بچیتە ژوورەوە.", "loginQrCodeSuccessful": "چوونەژوورەوەی کۆدی QR سەرکەوتوو بوو!", "loginQrCodeExpired": "کۆدی QR بەسەرچوو، کۆدی نوێی دروستکرد...", "loginManual": "یان دەتوانیت تۆکنێکی بۆت یان ژمارەی تەلەفۆنیش دابنێیت بۆ ئەوەی بە دەستی بچیتە ژوورەوە: ", "loginUserCode": "کۆدەکە داخڵ بکە: ", "loginUserPass": "وشەی نهێنی خۆت بنووسە (ئاماژە %s): ", - "loginUserPassWeb": "ژمارەی نهێنییەکەت داخل بکە: ", + "loginUserPassWeb": "وشەی نهێنییەکەت داخڵ بکە: ", "loginUserPassHint": "ئاماژە: %s", "signupFirstName": "ناوی یەکەمی خۆت بنووسە: ", "signupLastName": "ناوی کۆتایی خۆت بنووسە (دەتوانێت بەتاڵ بێت): ", "signupWeb": "تکایە ناوت تۆمار بکە", "signupFirstNameWeb": "ناوی یەکەم", + "signupLastNameWeb": "ناوی کۆتایی", "loginNoCode": "تۆ کۆدی تەلەفۆنت بۆ دابین نەکرد!", + "loginNoPass": "تۆ پاسۆردەکەت دابین نەکرد!", "loginNoName": "ناوی یەکەمتان دابین نەکردووە!", "loginBotTokenWeb": "بۆت تۆکن", "loginUserPhoneWeb": "ژمارەی تەلەفۆن", "loginUserPhoneCodeWeb": "کۆد", "done": "تەواو!", + "nearest_dc": "ئێمە لە %s داین، نزیکترین DC %d ە.", "serialization_ofd": "زنجیرەییکردن بەسەرچووە، دووبارە بنیاتنانەوەی ئۆبجێکتی!", - "session_corrupted": "دانیشتنەکە گەندەڵ بووە!", + "api_not_set": "پێویستە کلیلی api و api id دابین بکەیت، خۆت @ my.telegram.org بەدەست بهێنە", + "session_corrupted": "دانیشتنەکە تێکچووە!", "value_bigger_than_2147483647": "بەهای دابینکراو %s گەورەترە لە 2147483647", "value_smaller_than_2147483648": "بەهای دابینکراو %s بچووکترە لە -2147483648", "value_bigger_than_9223372036854775807": "بەهای دابینکراو %s گەورەترە لە 9223372036854775807", "value_smaller_than_9223372036854775808": "بەهای دابینکراو %s بچووکترە لە -9223372036854775808", - "value_bigger_than_4294967296": "بەهای مەرجدار %s گەورەترە لە 4294967296", - "value_smaller_than_0": "بەهای بە مەرجێک %s بچووکترە لە 0", - "encode_double_error": "نەتوانرا بە باشی دووانە کۆد بکات", + "value_bigger_than_4294967296": "بەهای دابینکراو %s گەورەترە لە 4294967296", + "value_smaller_than_0": "بەهای دابینکراو %s بچووکترە لە 0", + "encode_double_error": "نەتوانرا double بە دروستی کۆد بکرێت", "file_not_exist": "فایله‌که‌ بوونی نییه‌", + "deserialization_error": "هەڵەیەک لە کاتی deserialization دا ڕوویدا", + "rpc_tg_error": "تێلێگرام هەڵەیەکی RPC ی گەڕاندەوە: %s (%s)، بەهۆی %s:%s%sشوێنپێی TL:", "madelineproto_ready": "MadelineProto ئامادەیە!", "logout_ok": "بە سەرکەوتوویی دەرچووە!", "already_loggedIn": "ئەم نموونەیەی MadelineProto پێشتر چووەتە ژوورەوە!", "login_ok": "بە سەرکەوتوویی چوونەژوورەوە!", "login_user": "چوونە ژوورەوە وەک بەکارهێنەرێکی ئاسایی...", "login_bot": "چوونە ژوورەوە وەک بۆتێک...", - "login_code_uncalled": "چاوەڕێی کۆدەکە ناکەم! تکایە سەرەتا پەیوەندی بە شێوازی phoneLogin بکەن", + "login_code_sending": "ناردنی کۆد...", + "login_code_sent": "کۆد بە سەرکەوتوویی نێردراوە! کاتێک کۆدەکەت وەرگرت پێویستە فەنکشنی completePhoneLogin بەکاربهێنیت.", + "login_code_uncalled": "چاوەڕێی کۆدەکە ناکەم! تکایە سەرەتا بانگی شێوازی phoneLogin بکە", "login_2fa_enabled": "2FA چالاک کراوە، دەبێت بانگی فەنکشنی complete2falogin بکەیت...", + "login_need_signup": "ئەکاونتێک بۆ ئەم ژمارەیە دروست نەکراوە، دەبێت بانگی فەنکشنی completeSignup بکەیت...", "login_auth_key": "چوونە ژوورەوە بە بەکارهێنانی کلیلی auth...", + "not_loggedIn": "من نەچوومەتە ژوورەوە!", + "signup_uncalled": "چاوەڕێی ناو تۆمارکردن ناکەم! تکایە سەرەتا بانگی شێوازەکانی phoneLogin و completePhoneLogin بکە!", "signing_up": "ناو تۆمارکردن وەک بەکارهێنەرێکی ئاسایی...", "signup_ok": "بە سەرکەوتوویی ناوت تۆمار کرد!", - "2fa_uncalled": "چاوەڕێی پاسۆردەکە ناکەم! تکایە سەرەتا پەیوەندی بە phoneLogin و شێوازەکانی completePhoneLogin بکەن!", + "2fa_uncalled": "چاوەڕێی پاسۆردەکە ناکەم! تکایە سەرەتا بانگی شێوازەکانی phoneLogin و completePhoneLogin بکە!", + "peer_not_in_db": "ئەم هاوتایە لە بنکەدراوەی ناوخۆیی هاوتادا ئامادە نییە", "call_error_1": "نەتوانرا پەیوەندی %s بدۆزرێتەوە و وەریبگرێت", "accepting_call": "وەرگرتنی پەیوەندی لە %s...", "call_already_accepted": "پەیوەندی %s پێشتر وەرگیراوە", + "call_already_declined": "پەیوەندی %s پێشتر ڕەتکراوەتەوە", + "call_error_2": "نەتوانرا پەیوەندی %s بدۆزرێتەوە و پشتڕاستی بکاتەوە", "call_confirming": "پشتڕاستکردنەوەی پەیوەندی لە %s...", "call_error_3": "نەتوانرا پەیوەندی %s بدۆزرێتەوە و تەواو بکات", + "call_completing": "تەواوکردنی پەیوەندی لە %s...", "fingerprint_invalid": "پەنجەمۆری کلیل نادروستە!", "call_discarding": "فڕێدانی پەیوەندی %s...", "file_parsing": "پارسکردنی %s...", "src_file_invalid": "پەڕگەی سەرچاوەی نادروست دابین کرا: ", + "bool_error": "نەتوانرا boolean دەربهێنرێت", "not_numeric": "بەهای پێدراو ژمارەیی نییە", "long_not_16": "بەهای پێدراو درێژییەکەی ١٦ بایت نییە", + "long_not_32": "بەهای پێدراو درێژییەکەی ٣٢ بایت نییە", "long_not_64": "بەهای پێدراو درێژییەکەی ٦٤ بایت نییە", "array_invalid": "تۆ ڕیزبەندییەکی دروستت دابین نەکردووە", + "predicate_not_set": "Predicate (بەهای ژێر _) دانەنرابوو!", + "update_madelineproto": "تۆ وەشانێکی کۆنی MadelineProto بەکاردەهێنیت، نوێکردنەوە پێویستە: ئێستا وەشانی %s کاردەکات، بەڵام دوایین وەشان کە چەندین چاککردنەوەی هەڵە و تایبەتمەندی نوێی تێدایە %s ە!", "type_extract_error": "نەتوانرا جۆری \"%s\" دەربهێنرێت، پێویستە MadelineProto نوێ بکەیتەوە!", "method_not_found": "نەتوانرا شێواز بدۆزرێتەوە: ", "params_missing": "پارامێتری پێویست نەماوە", - "stream_handle_invalid": "دەستەیەکی نادروستی سترێم دابین کرابوو.", - "apiAppInstructionsManual1": "ناوی کورتی ئەپەکەت، ئەلفوبێی ژمارەیی، ٥-٣٢ پیت", - "apiManualPrompt0": "ناسنامەی API ی خۆت دابنێ: ", - "apiAutoWeb": "ژمارەیەکی تەلەفۆن دابنێ کە پێشتر تۆمارکراوە لە تێلێگرام بۆ بەدەستهێنانی ناسنامەی API", - "apiAppInstructionsAuto0": "ناوی ئەپەکە بنووسە، دەتوانێت هەر شتێک بێت: ", - "apiAppInstructionsAuto2": "URL ی ئەپ/ماڵپەڕەکە دابنێ، یان t.me/yourusername: ", - "apiParamsError": "تۆ هەموو پارامێتەرەکانی پێویستت دابین نەکردووە!", - "loginWebQr": "هەروەها دەتوانیت بە شێوەیەکی ئۆتۆماتیکی بچیتە ژوورەوە بە سکانکردنی ئەم QR کۆدە:", - "loginWebQr3": "بۆ پشتڕاستکردنەوەی چوونەژوورەوە مۆبایلەکەت ئاراستەی ئەم شاشەیە بکە", - "loginQr": "کۆدی QR ی سەرەوە سکان بکە بۆ ئەوەی بە شێوەیەکی ئۆتۆماتیکی بچیتە ژوورەوە.", - "loginNoPass": "تۆ پاسۆردەکەت دابین نەکرد!", - "nearest_dc": "ئێمە لە %s داین، نزیکترین DC %d ە.", - "api_not_set": "پێویستە کلیلی api و api id دابین بکەیت، خۆت @ my.telegram.org بەدەست بهێنە", - "deserialization_error": "هەڵەیەک لە کاتی ڕیزبەندیکردندا ڕوویدا", - "rpc_tg_error": "تێلێگرام هەڵەیەکی RPC ی گەڕاندەوە: %s (%s)، کە بەهۆی %s:%s%sTL شوێنپێهەڵگرتنەوە دروست بووە:", - "login_code_sending": "ناردنی کۆد...", - "login_code_sent": "کۆد بە سەرکەوتوویی نێردراوە! کاتێک کۆدەکەت وەرگرت پێویستە فەنکشنی completePhoneLogin بەکاربهێنیت.", - "login_need_signup": "ئەکاونتێک بۆ ئەم ژمارەیە دروست نەکراوە، دەبێت پەیوەندی بە فەنکشنی completeSignup بکەیت...", - "not_loggedIn": "من چوومەتە ژوورەوە!", - "signup_uncalled": "چاوەڕێی ناو تۆمارکردن ناکەم! تکایە سەرەتا پەیوەندی بە phoneLogin و شێوازەکانی completePhoneLogin بکەن!", - "peer_not_in_db": "ئەم هاوتایە لە بنکەدراوەی ناوخۆیی هاوتادا ئامادە نییە", - "call_already_declined": "پەیوەندی %s پێشتر ڕەتکراوەتەوە", - "call_error_2": "نەتوانرا پەیوەندی %s بدۆزرێتەوە و پشتڕاستی بکاتەوە", - "call_completing": "تەواوکردنی پەیوەندی لە %s...", - "bool_error": "نەتوانرا boolean دەربهێنرێت", - "long_not_32": "بەهای پێدراو درێژییەکەی ٣٢ بایت نییە", - "predicate_not_set": "پێشبینی (بەهای ژێر _) دانەنرابوو!", "sec_peer_not_in_db": "ئەم هاوتا نهێنییە لە بنکەدراوەی ناوخۆیی هاوتادا ئامادە نییە", + "stream_handle_invalid": "دەستەیەکی نادروستی سترێم دابین کرابوو.", "length_too_big": "درێژی زۆر گەورەیە", + "string_required": "چاوەڕێی string دەکرا!", + "waveform_must_have_100_values": "ڕیزبەندییەکی waveform دەبێت 100 بەهای هەبێت!", + "waveform_value": "بەهای waveform دەبێت لە نێوان 0 و 31 دا بێت!", + "could_not_convert_object": "نەتوانرا ئۆبجێکتی جۆری %s بگۆڕدرێت", "type_extract_error_id": "نەتوانرا جۆری: %s بە id %s دەربهێنرێت، پێویستە MadelineProto نوێ بکەیتەوە!", - "non_text_conversion": "هێشتا ناتوانرێت نامە نا کورتەکان بگۆڕدرێت!", - "secret_chat_skipping": "من چاتی نهێنی %sم لە بنکەدراوەدا نییە، نامەکەم بەجێهێشتووە..." + "constructor_not_found": "Constructor نەدۆزرایەوە بۆ جۆری: ", + "botapi_conversion_error": "ناتوانرێت %s بگۆڕێت بۆ ئۆبجێکتی API بۆت", + "non_text_conversion": "هێشتا ناتوانرێت نامە نادەقییەکان بگۆڕدرێن!", + "file_type_invalid": "جۆری پەڕگەی نادروست دۆزراوەتەوە (%s)", + "static_analysis_minor": "لە کاتی شیکاری ستاتیکی %s دا کێشەیەکی بچووک دۆزرایەوە: %s", + "static_analysis_severe": "لە کاتی شیکاری ستاتیکی %s دا کێشەیەکی گەورە دۆزرایەوە: %s", + "secret_chat_skipping": "من چاتی نهێنی %sم لە بنکەدراوەدا نییە، نامەکەم بەجێهێشتووە...", + "must_have_declare_types": "بە هۆکاری کارایی، یەکەم ڕستەی پەڕگەی event handler دەبێت \"declare(strict_types=1);\" بێت", + "do_not_delete_MadelineProto.log": "پەڕگەی MadelineProto.log هەرگیز نابێت بسڕدرێتەوە، لە جیاتی ئەوە تکایە قەبارەیەکی زۆرینەی تایبەت لە ڕێکخستنەکاندا دابنێ!", + "do_not_remove_MadelineProto.log_phar": "تکایە madeline.phar یان madeline.php مەسڕەوە، ئەگەرنا MadelineProto تێکدەشکێت. ئەگەر هەر کێشەیەکت لەگەڵ MadelineProto هەبوو، ڕاپۆرتی بکە بۆ https://github.com/danog/MadelineProto یان https://t.me/pwrtelegramgroup", + "do_not_use_blocking_function": "بە هۆکاری کارایی، event handler ەکان نابێت فەنکشنی بلۆککەری نا-async ی %s بەکاربهێنن، تکایە لە جیاتی ئەوە %s بەکاربهێنە", + "do_not_use_blocking_class": "بە هۆکاری کارایی، handler ەکان نابێت کلاسی بلۆککەری نا-async ی %s بەکاربهێنن، تکایە لە جیاتی ئەوە %s بەکاربهێنە", + "do_not_use_deprecated_function": "فەنکشنی %s کۆن بووە (deprecated)، تکایە لە جیاتی ئەوە %s بەکاربهێنە", + "do_not_use_non_root_require_in_event_handler": "بە هۆکاری کارایی، نابێت require یان include لەناو کلاسی event handler دا بەکاربهێنیت، تەنها require لە ئاستی سەرەکی (root) ی پەڕگەکەدا ڕێگەپێدراوە.", + "do_not_use_yield": "MadelineProto 8 پێویستی بە بەکارهێنانی yield لە فەنکشنە async ەکاندا نییە و پشتگیریشی ناکات، دەبێت هەموو ئەو yield انە لاببەیت کە پێشتر بۆ بانگکردنی فەنکشنە async ەکان بەکارتهێناون", + "recommend_not_use_filesystem_function": "بەکارهێنانی فەنکشنی %s پێشنیار ناکرێت، چونکە دەستگەیشتن بە سیستەمی پەڕگەکان لە کاتی مامەڵەکردن لەگەڵ update ەکاندا بۆتەکەت خاو دەکاتەوە، تکایە سەیری https://docs.madelineproto.xyz/docs/UPDATES.html#avoiding-the-use-of-filesystem-functions بکە بۆ لیستێکی ڕێگە جێگرەوەکانی هەڵگرتنی داتا کە بۆتەکەت خاو ناکەنەوە!", + "plugins_do_not_use_require": "بە هۆکاری کارایی، پلەگینەکان تەنها دەتوانن پەڕگەکانی تری ناو فۆڵدەری پلەگینەکان بە شێوەی ئۆتۆماتیکی include یان require بکەن لە ڕێگەی autoloader ی PSR-4 ەوە (نەک بە require() کردنی دەستی).", + "plugins_must_have_exactly_one_class": "پلەگین دەبێت ڕێک یەک کلاس پێناسە بکات! بۆ پێناسەکردنی چەند کلاس، interface یان trait، پەڕگەی جیاواز دروست بکە، MadelineProto بە شێوەی ئۆتۆماتیکی autoload یان دەکات.", + "cli_need_dl.php_link": "تکایە کاتێک getDownloadLink لە ڕێگەی CLI بەکاردەهێنیت، URL ی سکریپتێکی داگرتن دیاری بکە!", + "invalid_dl.php_session": "%s سکریپتێکی داگرتنی دروست نییە چونکە ID ی دانیشتنەکەی جیاوازە (چاوەڕوانکراو %s، وەرگیراو %s)", + "need_dl.php": "نەتوانرا سکریپتی داگرتنی بنەڕەتی دروست بکرێت (%s)، تکایە پەڕگەیەکی dl.php بەم ناوەڕۆکەی خوارەوە دروست بکە: %s و URL ەکەی وەک پارامێتری دووەم بدە بە getDownloadLink", + "dl.php_powered_by_madelineproto": "سێرڤەری داگرتنی پەڕگەکانی تێلێگرام (تا 4GB)، بە هێزی MadelineProto!
کلیک لە ئێرە بکە بۆ زانیاری زیاتر لەسەر چۆنیەتی ڕێکخستنی سێرڤەری داگرتنی پەڕگەکانی تێلێگرامی تایبەت بە خۆت!", + "dl.php_check_logs_make_sure_session_running": "یان بۆتی EventHandler ی پەیوەندیداری MadelineProto یان سێرڤەری IPC ی MadelineProto ئۆفلاینە، تکایە لۆگەکان بپشکنە و دڵنیابە کە لانیکەم یەکێکیان کاردەکات!", + "account_banned": "!!!!!!! ئاگاداری !!!!!!!\nسیستەمی ڕێگریکردن لە flood ی تێلێگرام ئەم ئەکاونتەی ڕاگرتووە.\nبۆ بەردەوامبوون، پشتڕاستکردنەوەی دەستی پێویستە.\nئیمەیڵێک بنێرە بۆ recover@telegram.org و داوای لابردنی باندی ژمارەی تەلەفۆنی %s بکە، و بە کورتی باسی ئەوە بکە کە چی بەم ژمارە تەلەفۆنە دەکەیت.\nپاشان دووبارە بچۆ ژوورەوە.\nئەگەر بە ئەنقەست ئەم ئەکاونتەت سڕیوەتەوە، ئەم نامەیە پشتگوێ بخە.", + "plugin_path_does_not_exist": "ڕێڕەوی پلەگینی %s بوونی نییە!", + "could_not_connect_to_MadelineProto": "نەتوانرا پەیوەندی بە MadelineProto بکرێت، بۆ چارەسەرکردن تکایە proc_open چالاک بکە و سنوورەکانی open_basedir لاببە یان rewrite ی ڕێڕەوەکانی webserver ناچالاک بکە! ئەگەر پێشتر ئەمەت کردووە، دڵنیابە کە وەشانی CLI ی PHP ڕێک وەک وەشانی وێبە (هەمان وەشان، پاشکۆکان و هتد) و سەیری پەڕگەی MadelineProto.log بکە بۆ زانیاری زیاتر دەربارەی ئەو هەڵەیەی ڕێگری لە دەستپێکردنی سێرڤەری IPC کرد.", + "translate_madelineproto_web": "MadelineProto دەتوانرێت بۆ زمانەکەت وەربگێڕدرێت (ڕێژەی ئێستای وەرگێڕان: %d%%)، کلیک لێرە بکە بۆ بەشداریکردن لە وەرگێڕانەکە!", + "translate_madelineproto_cli": "MadelineProto دەتوانرێت بۆ زمانەکەت وەربگێڕدرێت (ڕێژەی ئێستای وەرگێڕان: %d%%)، بڕۆ بۆ https://github.com/danog/MadelineProto/tree/v8/langs بۆ بەشداریکردن لە وەرگێڕانەکە!", + "apiInvalidWeb": "API ID ژمارەیەکە و API hash درێژییەکەی 32 پیتە: دووبارە لە my.telegram.org کۆپییان بکە.", + "webDoneLead": "MadelineProto لەسەر سێرڤەرەکە بەردەوام کاردەکات: دەتوانیت ئەم پەڕەیە دابخەیت.", + "apiChooseManualAuto": "دەتەوێت API ID و hash بە شێوەی ئۆتۆماتیکی لە my.telegram.org وەربگریت (a)، یان بە دەستی داخڵیان بکەیت (m)؟", + "apiAutoFallbackManual": "لە جیاتی ئەوە، API ID و hash بە دەستی داخڵ بکە.", + "apiSetupTitleWeb": "API ID و hash ەکەت وەربگرە", + "apiSetupLeadWeb": "هەموو ئەپێکی Telegram پێویستی بە API ID و hash هەیە. MadelineProto دەتوانێت بە ژمارەی تەلەفۆنی ئەکاونتێکی Telegram ی هەبوو، لە my.telegram.org بۆت وەربگرێت.", + "apiAutoPhoneHintWeb": "my.telegram.org کۆدی چوونەژوورەوە بۆ ئەپی Telegram ەکەت دەنێرێت، نەک بە SMS.", + "apiSendCodeWeb": "ناردنی کۆد", + "apiChooseManualWeb": "پێشتر API ID م هەیە", + "apiChooseAutoWeb": "وەرگرتنی ئۆتۆماتیکی", + "apiStartOverWeb": "دەستپێکردنەوە لە سەرەتاوە", + "apiAutoCodeTitleWeb": "کۆدەکەی Telegram داخڵ بکە", + "apiAutoCodeLeadWeb": "my.telegram.org کۆدێکی چوونەژوورەوەی بۆ ئەپی Telegram ەکەت نارد، لە چاتەکەی Telegram دا (نەک بە SMS).", + "apiAutoCodeLabelWeb": "کۆدی چوونەژوورەوە", + "apiCreateTitleWeb": "ئەپەکەت دروست بکە", + "apiCreateLeadWeb": "ئەم ئەکاونتە هێشتا هیچ ئەپێکی لە my.telegram.org نییە. ئەم زانیاریانە تەنها بۆ تۆ پیشان دەدرێن، و دواتر دەتوانرێت بگۆڕدرێن.", + "apiAppTitleLabelWeb": "ناوی ئەپ", + "apiAppShortNameLabelWeb": "ناوی کورت", + "apiAppUrlLabelWeb": "URL", + "apiAppDescLabelWeb": "وەسف", + "apiCreateWeb": "دروستکردنی ئەپ", + "apiSaveWeb": "پاشەکەوتکردن و بەردەوامبوون", + "apiAutoErrorTitle": "my.telegram.org هەڵەیەکی گەڕاندەوە", + "apiCreateErrorTitle": "my.telegram.org ئەپەکەی دروست نەکرد", + "apiCreateVpsWarning": "Telegram ڕێگە نادات لە VPS و VPN و مەودای IP ی داتاسێنتەرەکانی ترەوە ئەپی نوێ لە my.telegram.org دروست بکرێت، و داواکارییەکە لە IP ی ئەو ئامێرەوە نێردرا کە MadelineProto ی لەسەر کاردەکات. ئەپەکە بە دەستی لە https://my.telegram.org لە ڕێگەی پەیوەندییەکی ماڵەوە (وەک مۆبایلەکەت بە داتای مۆبایل) دروست بکە، پاشان API ID و hash داخڵ بکە.", + "loginTitleWeb": "چوونەژوورەوە بۆ Telegram", + "loginLeadWeb": "ئەو ئەکاونت یان بۆتە هەڵبژێرە کە ئەم نموونەیەی MadelineProto وەک ئەو کاردەکات.", + "loginTypeWeb": "چوونەژوورەوە وەک", + "loginUserPhoneHintWeb": "لەگەڵ کۆدی وڵات، وەک +39 123 456 7890.", + "loginBotTokenHintWeb": "ئەو تۆکنەی @BotFather پێی دایت کاتێک بۆتەکەت دروست کرد.", + "loginCodeTitleWeb": "کۆدی چوونەژوورەوە داخڵ بکە", + "loginCodeLeadWeb": "Telegram کۆدێکی چوونەژوورەوەی بۆ ئەپی Telegram ەکەت نارد، یان بە SMS ئەگەر لە هیچ شوێنێکی تر نەچوویتە ژوورەوە.", + "loginPasswordTitleWeb": "پشتڕاستکردنەوەی دوو هەنگاوی", + "loginPasswordLeadWeb": "ئەم ئەکاونتە بە وشەی نهێنییەک پارێزراوە، کە لە ڕێکخستنەکان > تایبەتێتی و ئاسایش > پشتڕاستکردنەوەی دوو هەنگاوی دانراوە.", + "loginPasswordLabelWeb": "وشەی نهێنی", + "signupTitleWeb": "ئەکاونتەکەت دروست بکە", + "signupLeadWeb": "ئەم ژمارە تەلەفۆنە هێشتا لە Telegram دا نییە: ناوی ئەکاونتە نوێیەکە هەڵبژێرە.", + "webContinue": "بەردەوامبوون", + "webLogin": "چوونەژوورەوە", + "webError": "%s. بیپشکنە و دووبارە هەوڵبدەرەوە.", + "webStepApp": "API ID و hash", + "webStepAccount": "ئەکاونت", + "webStepVerify": "پشتڕاستکردنەوە", + "webStepDone": "کاردەکات", + "webProgress": "پێشکەوتنی ڕێکخستن", + "webDocs": "بەڵگەنامەکان", + "webOptional": "ئارەزوومەندانە", + "webShowPassword": "پیشاندان", + "webHidePassword": "شاردنەوە", + "webQrTitle": "چوونەژوورەوە بە کۆدی QR", + "webQrWaiting": "چاوەڕێی سکانکردن…", + "webFieldRequired": "ئەم خانەیە پڕ بکەرەوە.", + "webPhoneInvalid": "ژمارەی تەلەفۆن لەگەڵ کۆدی وڵاتەکەی داخڵ بکە، وەک +39 123 456 7890.", + "tweb.Login.Title": "چوونەژوورەوە بۆ MadelineProto", + "tweb.Login.PhoneLabelInvalid": "ژمارەی تەلەفۆن نادروستە", + "tweb.Login.StartText": "تکایە کۆدی وڵاتەکەت پشتڕاست بکەرەوە\nو ژمارەی تەلەفۆنەکەت داخڵ بکە.", + "tweb.Login.Code.SentSms": "SMS ێکمان بۆ ناردیت\nکە کۆدەکەی تێدایە.", + "tweb.Login.Code.SentInApp": "نامەیەکمان لە Telegram بۆ ناردیت\nکە کۆدەکەی تێدایە.", + "tweb.Login.Code.SentCall": "پەیوەندیت پێوە دەکەین و\nکۆدەکەت بۆ دەخوێنینەوە.", + "tweb.Login.Code.SentEmail": "تکایە ئیمەیڵەکەت **%s** بپشکنە (فۆڵدەری سپام لەبیر مەکە) و ئەو کۆدەی ئێستا بۆمان ناردیت داخڵ بکە.", + "tweb.Login.Code.SentUnknown": "تکایە هەموو شوێنێک بپشکنە\nبۆ دۆزینەوەی کۆدەکە (جۆر: %s)", + "tweb.Login.Code.SentMissedCall": "لە چەند چرکەی داهاتوودا\nپەیوەندییەکی کورت لە **%s** وەردەگریت. وەڵامی مەدەرەوە —\nتەنها دوایین ژمارەکانی ئەو ژمارەیە داخڵ بکە.", + "tweb.Login.Code.SentSmsWord": "SMS ێکمان کە وشەیەکی شاراوەی تێدایە\nبۆ تەلەفۆنەکەت **%s** نارد.", + "tweb.Login.Code.SentSmsWordBeginning": "SMS ێکمان کە وشەیەکی شاراوەی تێدایە و بە\n\"**%2$s**\" دەست پێدەکات، بۆ تەلەفۆنەکەت **%1$s** نارد.", + "tweb.Login.Code.SentSmsPhrase": "SMS ێکمان کە دەستەواژەیەکی شاراوەی تێدایە\nبۆ تەلەفۆنەکەت **%s** نارد.", + "tweb.Login.Code.SentSmsPhraseBeginning": "SMS ێکمان کە دەستەواژەیەکی شاراوەی تێدایە و بە\n\"**%2$s**\" دەست پێدەکات، بۆ تەلەفۆنەکەت **%1$s** نارد.", + "tweb.Login.Code.SecretWord": "وشەی شاراوە", + "tweb.Login.Code.SecretPhrase": "دەستەواژەی شاراوە", + "tweb.Login.Code.WordInvalid": "هەڵەیە، تکایە دووبارە هەوڵبدەرەوە", + "tweb.Login.Code.WordBeginningInvalid": "وشەی هەڵە", + "tweb.Login.Password.Title": "وشەی نهێنییەکەت داخڵ بکە", + "tweb.Login.Password.Subtitle": "ئەکاونتەکەت بە وشەیەکی نهێنی\nزیادە پارێزراوە", + "tweb.Login.Register.Subtitle": "ناوەکەت داخڵ بکە\nبۆ دروستکردنی ئەکاونتەکەت", + "tweb.PleaseWait": "تکایە چاوەڕێ بکە...", + "tweb.Code": "کۆد", + "tweb.LoginPassword": "وشەی نهێنی", + "tweb.YourName": "ناوەکەت", + "tweb.FirstName": "ناوی یەکەم (پێویستە)", + "tweb.LastName": "ناوی کۆتایی (ئارەزوومەندانە)", + "tweb.StartMessaging": "دەستپێکردنی نامەناردن", + "tweb.Country": "وڵات", + "tweb.Contacts.PhoneNumber.Placeholder": "ژمارەی تەلەفۆن", + "tweb.Login.Next": "دواتر", + "tweb.Login.QR.Title": "چوونەژوورەوە بە کۆدی QR", + "tweb.Login.QR.Help1": "لە مۆبایلەکەتدا Telegram بکەرەوە", + "tweb.Login.QR.Help2": "بڕۆ بۆ **ڕێکخستنەکان** > **ئامێرەکان** > **زیادکردنی ئامێر**", + "tweb.Login.QR.Help3": "بۆ پشتڕاستکردنەوەی چوونەژوورەوە مۆبایلەکەت ئاراستەی ئەم شاشەیە بکە", + "tweb.Login.QR.Cancel": "چوونەژوورەوە بە ژمارەی تەلەفۆن >", + "tweb.Login.QR.Login": "چوونەژوورەوە بە کۆدی QR >", + "tweb.Login.QR.Subtitle": "بە ئەپی Telegram ی مۆبایلەکەت سکانی بکە", + "tweb.PhoneNumber.Code.Fragment.Info": "کۆدەکە لە بەشی ژمارەکانی [Fragment]() وەربگرە", + "tweb.PHONE_CODE_INVALID": "کۆدەکە نادروستە", + "tweb.PHONE_CODE_EXPIRED": "کۆدەکە بەسەرچووە", + "tweb.PASSWORD_HASH_INVALID": "وشەی نهێنی هەڵەیە", + "tweb.DarkMode": "دۆخی تاریک", + "tweb.Error.AnError": "هەڵەیەک ڕوویدا. تکایە دواتر دووبارە هەوڵبدەرەوە.", + "tweb.AccDescr.LoginCode": "کۆدی چوونەژوورەوە", + "tweb.Login.Bot": "چوونەژوورەوە وەک بۆت >", + "tweb.Login.Bot.Title": "چوونەژوورەوە وەک بۆت", + "tweb.Login.Bot.Subtitle": "ئەو تۆکنە داخڵ بکە کە @BotFather پێی دایت\nکاتێک بۆتەکەت دروست کرد.", + "tweb.Login.Bot.Token": "تۆکنی بۆت", + "tweb.Login.Bot.Cancel": "چوونەژوورەوە وەک بەکارهێنەر >", + "tweb.Optional": "ئارەزوومەندانە", + "tweb.PHONE_NUMBER_INVALID": "ژمارەی تەلەفۆن نادروستە", + "tweb.PHONE_NUMBER_BANNED": "ئەم ژمارە تەلەفۆنە قەدەغە کراوە", + "tweb.PHONE_NUMBER_FLOOD": "هەوڵدانی زۆر، دواتر دووبارە هەوڵبدەرەوە", + "tweb.PHONE_CODE_EMPTY": "کۆدەکە نادروستە", + "tweb.PHONE_PASSWORD_FLOOD": "هەوڵدانی زۆر، دواتر دووبارە هەوڵبدەرەوە", + "tweb.ACCESS_TOKEN_INVALID": "تۆکنی بۆت نادروستە", + "tweb.ACCESS_TOKEN_EXPIRED": "ئەم تۆکنی بۆتە هەڵوەشێنراوەتەوە", + "tweb.FIRSTNAME_INVALID": "ناوی یەکەم نادروستە", + "tweb.LASTNAME_INVALID": "ناوی کۆتایی نادروستە", + "tweb.Close": "داخستن" } diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/de.json b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/de.json index 0967ef4..dd206c9 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/de.json +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/de.json @@ -1 +1,274 @@ -{} +{ + "baseDirLimitation": "Eine basedir-Beschränkung ist konfiguriert: Dies kann die Leistung beeinträchtigen und Probleme verursachen, bitte deaktivieren Sie sie nach Möglichkeit!", + "noReportPeers": "Warnung: Es sind keine Report-Peers festgelegt, bitte fügen Sie Ihrem Event-Handler die folgende Methode hinzu", + "manualAdminActionRequired": "!!!!!!!!! MANUELLER EINGRIFF DES SYSTEMADMINISTRATORS ERFORDERLICH !!!!!!!!!", + "mmapErrorPart1": "Die maximale Anzahl speicherabgebildeter Bereiche (mmap) wurde erreicht (%s): Erhöhen Sie zur Behebung den Kernel-Parameter vm.max_map_count auf 262144.", + "mmapErrorPart2": "Führen Sie zur Behebung den folgenden Befehl als root aus: %s", + "mmapErrorPart3": "Um die Änderung über Neustarts hinweg beizubehalten: %s", + "mmapErrorPart4": "Unter Windows und WSL kann eine Vergrößerung der Auslagerungsdatei helfen; bitte wechseln Sie zu nativem Linux, falls das Problem weiterhin besteht.", + "botAlreadyRunning": "Der Bot läuft bereits!", + "extensionRequired": "MadelineProto benötigt zur Ausführung die Erweiterung %s. %s", + "extensionRequiredInstallWithApt": "Versuchen Sie, sudo apt-get install %s auszuführen.", + "extensionRequiredInstallWithCustomInstructions": "Folgen Sie den Anweisungen unter %s, um sie zu installieren.", + "extensionRecommended": "Warnung: Die Erweiterung %s ist nicht installiert, bitte installieren Sie sie, um MadelineProto zu beschleunigen!", + "go": "Los", + "apiChooseManualAutoTip": "Beachten Sie, dass Sie API-ID/Hash auch direkt im Code über die Einstellungen angeben können: %s", + "apiChooseManualAutoTipWeb": "Beachten Sie, dass Sie API-ID/Hash auch direkt im Code über die Einstellungen angeben können.", + "apiChoosePrompt": "Ihre Wahl (m/a): ", + "apiManualInstructions0": "Melden Sie sich bei https://my.telegram.org an", + "apiManualInstructions1": "Gehen Sie zu „API development tools“", + "apiManualInstructions2": "Klicken Sie auf „Create application“", + "apiAppInstructionsManual0": "der Name Ihrer App, beliebig", + "apiAppInstructionsManual1": "der Kurzname Ihrer App, alphanumerisch, 5-32 Zeichen", + "apiAppInstructionsManual2": "die URL Ihrer App/Website oder t.me/yourusername", + "apiAppInstructionsManual3": "beliebig", + "apiAppInstructionsManual4": "Beschreiben Sie hier Ihre App", + "apiManualWeb": "Geben Sie Ihre API-ID und Ihren API-Hash ein", + "apiManualPrompt0": "Geben Sie Ihre API-ID ein: ", + "apiManualPrompt1": "Geben Sie Ihren API-Hash ein: ", + "apiAutoWeb": "Geben Sie eine Telefonnummer ein, die bereits bei Telegram registriert ist, um die API-ID zu erhalten", + "apiAutoPrompt0": "Geben Sie eine Telefonnummer ein, die bereits bei Telegram registriert ist: ", + "apiAutoPrompt1": "Geben Sie den Bestätigungscode ein, den Sie in Telegram erhalten haben: ", + "apiAppWeb": "API-Informationen eingeben", + "apiAppInstructionsAuto0": "Geben Sie den Namen der App ein, beliebig: ", + "apiAppInstructionsAuto1": "Geben Sie den Kurznamen der App ein, alphanumerisch, 5-32 Zeichen: ", + "apiAppInstructionsAuto2": "Geben Sie die URL der App/Website oder t.me/yourusername ein: ", + "apiAppInstructionsAuto3": "Geben Sie die Plattform der App ein: ", + "apiAppInstructionsAuto4": "Beschreiben Sie Ihre App: ", + "apiAppInstructionsAutoTypeOther": "Andere (in der Beschreibung angeben)", + "apiParamsError": "Sie haben nicht alle erforderlichen Parameter angegeben!", + "apiError": "FEHLER: %s. Versuchen Sie es erneut.", + "loginChoosePromptWeb": "Möchten Sie sich als Benutzer oder als Bot anmelden?", + "loginWebQr": "Sie können sich auch automatisch anmelden, indem Sie Telegram auf Ihrem Telefon öffnen, zu Einstellungen > Geräte > Desktop-Gerät verknüpfen gehen und den folgenden QR-Code scannen:", + "loginWebQr1": "Öffnen Sie Telegram auf Ihrem Telefon", + "loginWebQr2": "Gehen Sie zu Einstellungen > Geräte > Desktop-Gerät verknüpfen", + "loginWebQr3": "Richten Sie Ihr Telefon auf diesen Bildschirm, um die Anmeldung zu bestätigen", + "loginOptionBot": "Bot", + "loginOptionUser": "Benutzer", + "loginBot": "Geben Sie Ihr Bot-Token ein: ", + "loginUser": "Geben Sie Ihre Telefonnummer ein: ", + "loginQr": "Öffnen Sie Telegram auf Ihrem Telefon, gehen Sie zu Einstellungen > Geräte > Desktop-Gerät verknüpfen und scannen Sie den obigen QR-Code, um sich automatisch anzumelden.", + "loginQrCodeSuccessful": "Anmeldung per QR-Code erfolgreich!", + "loginQrCodeExpired": "Der QR-Code ist abgelaufen, ein neuer wird generiert...", + "loginManual": "Alternativ können Sie auch ein Bot-Token oder eine Telefonnummer eingeben, um sich manuell anzumelden: ", + "loginUserCode": "Geben Sie den Code ein: ", + "loginUserPass": "Geben Sie Ihr Passwort ein (Hinweis: %s): ", + "loginUserPassWeb": "Geben Sie Ihr Passwort ein: ", + "loginUserPassHint": "Hinweis: %s", + "signupFirstName": "Geben Sie Ihren Vornamen ein: ", + "signupLastName": "Geben Sie Ihren Nachnamen ein (kann leer bleiben): ", + "signupWeb": "Bitte registrieren Sie sich", + "signupFirstNameWeb": "Vorname", + "signupLastNameWeb": "Nachname", + "loginNoCode": "Sie haben keinen Bestätigungscode angegeben!", + "loginNoPass": "Sie haben kein Passwort angegeben!", + "loginNoName": "Sie haben keinen Vornamen angegeben!", + "loginBotTokenWeb": "Bot-Token", + "loginUserPhoneWeb": "Telefonnummer", + "loginUserPhoneCodeWeb": "Code", + "done": "Fertig!", + "nearest_dc": "Wir sind in %s, das nächstgelegene DC ist %d.", + "serialization_ofd": "Die Serialisierung ist veraltet, das Objekt wird neu aufgebaut!", + "api_not_set": "Sie müssen einen API-Schlüssel und eine API-ID angeben, holen Sie sich Ihre eigenen unter my.telegram.org", + "session_corrupted": "Die Sitzung ist beschädigt!", + "value_bigger_than_2147483647": "Der angegebene Wert %s ist größer als 2147483647", + "value_smaller_than_2147483648": "Der angegebene Wert %s ist kleiner als -2147483648", + "value_bigger_than_9223372036854775807": "Der angegebene Wert %s ist größer als 9223372036854775807", + "value_smaller_than_9223372036854775808": "Der angegebene Wert %s ist kleiner als -9223372036854775808", + "value_bigger_than_4294967296": "Der angegebene Wert %s ist größer als 4294967296", + "value_smaller_than_0": "Der angegebene Wert %s ist kleiner als 0", + "encode_double_error": "Double konnte nicht korrekt kodiert werden", + "file_not_exist": "Die Datei existiert nicht", + "deserialization_error": "Bei der Deserialisierung ist ein Fehler aufgetreten", + "rpc_tg_error": "Telegram hat einen RPC-Fehler zurückgegeben: %s (%s), verursacht durch %s:%s%sTL-Trace:", + "madelineproto_ready": "MadelineProto ist bereit!", + "logout_ok": "Erfolgreich abgemeldet!", + "already_loggedIn": "Diese MadelineProto-Instanz ist bereits angemeldet!", + "login_ok": "Erfolgreich angemeldet!", + "login_user": "Anmeldung als normaler Benutzer...", + "login_bot": "Anmeldung als Bot...", + "login_code_sending": "Code wird gesendet...", + "login_code_sent": "Code erfolgreich gesendet! Sobald Sie den Code erhalten haben, sollten Sie die Funktion completePhoneLogin verwenden.", + "login_code_uncalled": "Ich warte nicht auf den Code! Bitte rufen Sie zuerst die Methode phoneLogin auf", + "login_2fa_enabled": "2FA ist aktiviert, Sie müssen die Funktion complete2falogin aufrufen...", + "login_need_signup": "Für diese Nummer wurde noch kein Konto erstellt, Sie müssen die Funktion completeSignup aufrufen...", + "login_auth_key": "Anmeldung mit Auth-Key...", + "not_loggedIn": "Ich bin nicht angemeldet!", + "signup_uncalled": "Ich warte nicht auf eine Registrierung! Bitte rufen Sie zuerst die Methoden phoneLogin und completePhoneLogin auf!", + "signing_up": "Registrierung als normaler Benutzer...", + "signup_ok": "Erfolgreich registriert!", + "2fa_uncalled": "Ich warte nicht auf das Passwort! Bitte rufen Sie zuerst die Methoden phoneLogin und completePhoneLogin auf!", + "peer_not_in_db": "Dieser Peer ist nicht in der internen Peer-Datenbank vorhanden", + "call_error_1": "Anruf %s konnte nicht gefunden und angenommen werden", + "accepting_call": "Anruf von %s wird angenommen...", + "call_already_accepted": "Anruf %s wurde bereits angenommen", + "call_already_declined": "Anruf %s wurde bereits abgelehnt", + "call_error_2": "Anruf %s konnte nicht gefunden und bestätigt werden", + "call_confirming": "Anruf von %s wird bestätigt...", + "call_error_3": "Anruf %s konnte nicht gefunden und abgeschlossen werden", + "call_completing": "Anruf von %s wird abgeschlossen...", + "fingerprint_invalid": "Ungültiger Schlüssel-Fingerprint!", + "call_discarding": "Anruf %s wird beendet...", + "file_parsing": "%s wird geparst...", + "src_file_invalid": "Ungültige Quelldatei angegeben: ", + "bool_error": "Boolescher Wert konnte nicht extrahiert werden", + "not_numeric": "Der angegebene Wert ist nicht numerisch", + "long_not_16": "Der angegebene Wert ist nicht 16 Bytes lang", + "long_not_32": "Der angegebene Wert ist nicht 32 Bytes lang", + "long_not_64": "Der angegebene Wert ist nicht 64 Bytes lang", + "array_invalid": "Sie haben kein gültiges Array angegeben", + "predicate_not_set": "Prädikat (Wert unter _) wurde nicht gesetzt!", + "update_madelineproto": "Sie verwenden eine alte Version von MadelineProto, ein Update ist erforderlich: Aktuell läuft %s, aber die neueste Version mit zahlreichen Fehlerbehebungen und neuen Funktionen ist %s!", + "type_extract_error": "Typ \"%s\" konnte nicht extrahiert werden, Sie sollten MadelineProto aktualisieren!", + "method_not_found": "Methode nicht gefunden: ", + "params_missing": "Erforderlicher Parameter fehlt", + "sec_peer_not_in_db": "Dieser geheime Peer ist nicht in der internen Peer-Datenbank vorhanden", + "stream_handle_invalid": "Es wurde ein ungültiges Stream-Handle angegeben.", + "length_too_big": "Die Länge ist zu groß", + "string_required": "Ein String wurde erwartet!", + "waveform_must_have_100_values": "Ein Waveform-Array muss 100 Werte enthalten!", + "waveform_value": "Ein Waveform-Wert muss zwischen 0 und 31 liegen!", + "could_not_convert_object": "Objekt vom Typ %s konnte nicht konvertiert werden", + "type_extract_error_id": "Typ %s mit ID %s konnte nicht extrahiert werden, Sie sollten MadelineProto aktualisieren!", + "constructor_not_found": "Konstruktor nicht gefunden für Typ: ", + "botapi_conversion_error": "%s kann nicht in ein Bot-API-Objekt konvertiert werden", + "non_text_conversion": "Nicht-Text-Nachrichten können noch nicht konvertiert werden!", + "file_type_invalid": "Ungültiger Dateityp erkannt (%s)", + "static_analysis_minor": "Bei der statischen Analyse von %s wurde ein geringfügiges Problem festgestellt: %s", + "static_analysis_severe": "Bei der statischen Analyse von %s wurde ein schwerwiegendes Problem festgestellt: %s", + "secret_chat_skipping": "Der geheime Chat %s ist nicht in der Datenbank vorhanden, Nachricht wird übersprungen...", + "must_have_declare_types": "aus Performance-Gründen muss die erste Anweisung einer Event-Handler-Datei \"declare(strict_types=1);\" sein", + "do_not_delete_MadelineProto.log": "die Datei MadelineProto.log darf niemals gelöscht werden, bitte legen Sie stattdessen in den Einstellungen eine benutzerdefinierte Maximalgröße fest!", + "do_not_remove_MadelineProto.log_phar": "Bitte entfernen Sie madeline.phar oder madeline.php nicht, sonst stürzt MadelineProto ab. Wenn Sie ein Problem mit MadelineProto haben, melden Sie es unter https://github.com/danog/MadelineProto oder https://t.me/pwrtelegramgroup", + "do_not_use_blocking_function": "aus Performance-Gründen dürfen Event-Handler die nicht asynchrone, blockierende Funktion %s nicht verwenden, bitte verwenden Sie stattdessen %s", + "do_not_use_blocking_class": "aus Performance-Gründen dürfen Handler die nicht asynchrone, blockierende Klasse %s nicht verwenden, bitte verwenden Sie stattdessen %s", + "do_not_use_deprecated_function": "die Funktion %s ist veraltet, bitte verwenden Sie stattdessen %s", + "do_not_use_non_root_require_in_event_handler": "aus Performance-Gründen dürfen Sie require oder include nicht innerhalb einer Event-Handler-Klasse verwenden, nur requires auf oberster Ebene sind erlaubt.", + "do_not_use_yield": "MadelineProto 8 benötigt und unterstützt kein yield in asynchronen Funktionen, Sie müssen alle yield-Schlüsselwörter entfernen, die zuvor für asynchrone Funktionsaufrufe verwendet wurden", + "recommend_not_use_filesystem_function": "die Verwendung der Funktion %s wird nicht empfohlen, da Dateisystemzugriffe während der Verarbeitung von Updates Ihren Bot verlangsamen. Unter https://docs.madelineproto.xyz/docs/UPDATES.html#avoiding-the-use-of-filesystem-functions finden Sie alternative Möglichkeiten, Daten zu speichern, die Ihren Bot nicht verlangsamen!", + "plugins_do_not_use_require": "aus Performance-Gründen können Plugins andere Dateien im Plugin-Ordner nur automatisch über den PSR-4-Autoloader einbinden (nicht durch manuelles require()).", + "plugins_must_have_exactly_one_class": "ein Plugin muss genau eine Klasse definieren! Um mehrere Klassen, Interfaces oder Traits zu definieren, erstellen Sie separate Dateien, sie werden von MadelineProto automatisch geladen.", + "cli_need_dl.php_link": "Bitte geben Sie die URL eines Download-Skripts an, wenn Sie getDownloadLink über die CLI verwenden!", + "invalid_dl.php_session": "%s ist kein gültiges Download-Skript, da seine Sitzungs-ID abweicht (erwartet %s, erhalten %s)", + "need_dl.php": "Das Standard-Download-Skript konnte nicht generiert werden (%s), bitte erstellen Sie eine Datei dl.php mit folgendem Inhalt: %s und übergeben Sie ihre URL als zweiten Parameter an getDownloadLink", + "dl.php_powered_by_madelineproto": "Telegram-Datei-Downloadserver (bis zu 4 GB), betrieben mit MadelineProto!
Klicken Sie hier, um zu erfahren, wie Sie Ihren eigenen Telegram-Datei-Downloadserver einrichten!", + "dl.php_check_logs_make_sure_session_running": "Entweder der zugehörige MadelineProto-EventHandler-Bot oder der MadelineProto-IPC-Server ist offline, bitte prüfen Sie die Logs und stellen Sie sicher, dass mindestens einer davon läuft!", + "account_banned": "!!!!!!! WARNUNG !!!!!!!\nDas Flood-Schutzsystem von Telegram hat dieses Konto gesperrt.\nUm fortzufahren, ist eine manuelle Verifizierung erforderlich.\nSenden Sie eine E-Mail an recover@telegram.org, in der Sie um die Entsperrung der Telefonnummer %s bitten, und beschreiben Sie kurz, was Sie mit dieser Telefonnummer tun werden.\nMelden Sie sich dann erneut an.\nWenn Sie dieses Konto absichtlich gelöscht haben, ignorieren Sie diese Nachricht.", + "plugin_path_does_not_exist": "Der Plugin-Pfad %s existiert nicht!", + "could_not_connect_to_MadelineProto": "Verbindung zu MadelineProto nicht möglich, bitte aktivieren Sie zur Behebung proc_open und entfernen Sie open_basedir-Beschränkungen oder deaktivieren Sie Pfad-Rewrites des Webservers! Falls Sie das bereits getan haben, stellen Sie sicher, dass die CLI-Version von PHP genau der Web-Version entspricht (gleiche Version, Erweiterungen usw.), und prüfen Sie die Datei MadelineProto.log auf weitere Informationen zu dem Fehler, der den Start des IPC-Servers verhindert hat.", + "translate_madelineproto_web": "MadelineProto kann in Ihre Sprache übersetzt werden (aktueller Übersetzungsfortschritt: %d%%), klicken Sie hier, um zur Übersetzung beizutragen!", + "translate_madelineproto_cli": "MadelineProto kann in Ihre Sprache übersetzt werden (aktueller Übersetzungsfortschritt: %d%%), besuchen Sie https://github.com/danog/MadelineProto/tree/v8/langs, um zur Übersetzung beizutragen!", + "apiInvalidWeb": "Die API-ID ist eine Zahl und der API-Hash ist 32 Zeichen lang: Kopieren Sie beide erneut von my.telegram.org.", + "webDoneLead": "MadelineProto läuft auf dem Server weiter: Sie können diese Seite schließen.", + "apiChooseManualAuto": "Möchten Sie API-ID und Hash automatisch von my.telegram.org abrufen (a) oder manuell eingeben (m)?", + "apiAutoFallbackManual": "Geben Sie API-ID und Hash stattdessen manuell ein.", + "apiSetupTitleWeb": "API-ID und Hash abrufen", + "apiSetupLeadWeb": "Jede Telegram-App benötigt eine API-ID und einen Hash. MadelineProto kann sie mit der Telefonnummer eines bestehenden Telegram-Kontos für Sie von my.telegram.org abrufen.", + "apiAutoPhoneHintWeb": "my.telegram.org sendet den Anmeldecode an Ihre Telegram-App, nicht per SMS.", + "apiSendCodeWeb": "Code senden", + "apiChooseManualWeb": "Ich habe bereits eine API-ID", + "apiChooseAutoWeb": "Automatisch abrufen", + "apiStartOverWeb": "Neu beginnen", + "apiAutoCodeTitleWeb": "Code aus Telegram eingeben", + "apiAutoCodeLeadWeb": "my.telegram.org hat einen Anmeldecode an Ihre Telegram-App gesendet, im Chat mit Telegram (nicht per SMS).", + "apiAutoCodeLabelWeb": "Anmeldecode", + "apiCreateTitleWeb": "App erstellen", + "apiCreateLeadWeb": "Dieses Konto hat noch keine App auf my.telegram.org. Diese Angaben sind nur für Sie sichtbar und können später geändert werden.", + "apiAppTitleLabelWeb": "App-Name", + "apiAppShortNameLabelWeb": "Kurzname", + "apiAppUrlLabelWeb": "URL", + "apiAppDescLabelWeb": "Beschreibung", + "apiCreateWeb": "App erstellen", + "apiSaveWeb": "Speichern und fortfahren", + "apiAutoErrorTitle": "my.telegram.org hat einen Fehler zurückgegeben", + "apiCreateErrorTitle": "my.telegram.org hat die App nicht erstellt", + "apiCreateVpsWarning": "Telegram erlaubt es VPS-, VPN- und anderen Rechenzentrums-IP-Bereichen nicht, neue Apps auf my.telegram.org zu erstellen, und die Anfrage kam von der IP des Rechners, auf dem MadelineProto läuft. Erstellen Sie die App manuell unter https://my.telegram.org über einen privaten Internetanschluss (z. B. Ihr Telefon mit mobilen Daten) und geben Sie dann API-ID und Hash ein.", + "loginTitleWeb": "Bei Telegram anmelden", + "loginLeadWeb": "Wählen Sie das Konto oder den Bot, als der diese MadelineProto-Instanz laufen soll.", + "loginTypeWeb": "Anmelden als", + "loginUserPhoneHintWeb": "Mit Ländervorwahl, z. B. +39 123 456 7890.", + "loginBotTokenHintWeb": "Das Token, das Ihnen @BotFather beim Erstellen des Bots gegeben hat.", + "loginCodeTitleWeb": "Anmeldecode eingeben", + "loginCodeLeadWeb": "Telegram hat einen Anmeldecode an Ihre Telegram-App gesendet, oder per SMS, falls Sie nirgendwo sonst angemeldet sind.", + "loginPasswordTitleWeb": "Zweistufige Bestätigung", + "loginPasswordLeadWeb": "Dieses Konto ist durch ein Passwort geschützt, das unter Einstellungen > Privatsphäre und Sicherheit > Zweistufige Bestätigung festgelegt wurde.", + "loginPasswordLabelWeb": "Passwort", + "signupTitleWeb": "Konto erstellen", + "signupLeadWeb": "Diese Telefonnummer ist noch nicht bei Telegram: Wählen Sie den Namen des neuen Kontos.", + "webContinue": "Weiter", + "webLogin": "Anmelden", + "webError": "%s. Bitte prüfen Sie die Eingabe und versuchen Sie es erneut.", + "webStepApp": "API-ID und Hash", + "webStepAccount": "Konto", + "webStepVerify": "Bestätigung", + "webStepDone": "Läuft", + "webProgress": "Einrichtungsfortschritt", + "webDocs": "Dokumentation", + "webOptional": "optional", + "webShowPassword": "Anzeigen", + "webHidePassword": "Verbergen", + "webQrTitle": "Mit QR-Code anmelden", + "webQrWaiting": "Warten auf den Scan…", + "webFieldRequired": "Bitte füllen Sie dieses Feld aus.", + "webPhoneInvalid": "Geben Sie die Telefonnummer mit Ländervorwahl ein, z. B. +39 123 456 7890.", + "tweb.Login.Title": "Bei MadelineProto anmelden", + "tweb.Login.PhoneLabelInvalid": "Ungültige Telefonnummer", + "tweb.Login.StartText": "Bitte bestätigen Sie Ihre Ländervorwahl\nund geben Sie Ihre Telefonnummer ein.", + "tweb.Login.Code.SentSms": "Wir haben Ihnen eine SMS\nmit dem Code gesendet.", + "tweb.Login.Code.SentInApp": "Wir haben Ihnen eine Nachricht in Telegram\nmit dem Code gesendet.", + "tweb.Login.Code.SentCall": "Wir rufen Sie an und diktieren\nIhnen den Code.", + "tweb.Login.Code.SentEmail": "Bitte prüfen Sie Ihre E-Mails unter **%s** (auch den Spam-Ordner) und geben Sie den Code ein, den wir Ihnen gerade gesendet haben.", + "tweb.Login.Code.SentUnknown": "Bitte suchen Sie überall\nnach einem Code (Typ: %s)", + "tweb.Login.Code.SentMissedCall": "In den nächsten Sekunden erhalten Sie\neinen kurzen Anruf von **%s**. Nehmen Sie nicht ab –\ngeben Sie einfach die letzten Ziffern dieser Nummer ein.", + "tweb.Login.Code.SentSmsWord": "Wir haben eine SMS mit einem geheimen Wort\nan Ihre Nummer **%s** gesendet.", + "tweb.Login.Code.SentSmsWordBeginning": "Wir haben eine SMS mit einem geheimen Wort, das\nmit „**%2$s**“ beginnt, an Ihre Nummer **%1$s** gesendet.", + "tweb.Login.Code.SentSmsPhrase": "Wir haben eine SMS mit einem geheimen Satz\nan Ihre Nummer **%s** gesendet.", + "tweb.Login.Code.SentSmsPhraseBeginning": "Wir haben eine SMS mit einem geheimen Satz, der\nmit „**%2$s**“ beginnt, an Ihre Nummer **%1$s** gesendet.", + "tweb.Login.Code.SecretWord": "Geheimes Wort", + "tweb.Login.Code.SecretPhrase": "Geheimer Satz", + "tweb.Login.Code.WordInvalid": "Falsch, bitte versuchen Sie es erneut", + "tweb.Login.Code.WordBeginningInvalid": "Falsches Wort", + "tweb.Login.Password.Title": "Passwort eingeben", + "tweb.Login.Password.Subtitle": "Ihr Konto ist durch ein\nzusätzliches Passwort geschützt", + "tweb.Login.Register.Subtitle": "Geben Sie Ihren Namen ein,\num Ihr Konto zu erstellen", + "tweb.PleaseWait": "Bitte warten...", + "tweb.Code": "Code", + "tweb.LoginPassword": "Passwort", + "tweb.YourName": "Ihr Name", + "tweb.FirstName": "Vorname (erforderlich)", + "tweb.LastName": "Nachname (optional)", + "tweb.StartMessaging": "Loslegen", + "tweb.Country": "Land", + "tweb.Contacts.PhoneNumber.Placeholder": "Telefonnummer", + "tweb.Login.Next": "Weiter", + "tweb.Login.QR.Title": "Mit QR-Code anmelden", + "tweb.Login.QR.Help1": "Öffnen Sie Telegram auf Ihrem Telefon", + "tweb.Login.QR.Help2": "Gehen Sie zu **Einstellungen** > **Geräte** > **Gerät hinzufügen**", + "tweb.Login.QR.Help3": "Richten Sie Ihr Telefon auf diesen Bildschirm, um die Anmeldung zu bestätigen", + "tweb.Login.QR.Cancel": "Mit Telefonnummer anmelden >", + "tweb.Login.QR.Login": "Mit QR-Code anmelden >", + "tweb.Login.QR.Subtitle": "Mit der Telegram-App auf Ihrem Telefon scannen", + "tweb.PhoneNumber.Code.Fragment.Info": "Den Code finden Sie im Bereich „Numbers“ auf [Fragment]()", + "tweb.PHONE_CODE_INVALID": "Ungültiger Code", + "tweb.PHONE_CODE_EXPIRED": "Code abgelaufen", + "tweb.PASSWORD_HASH_INVALID": "Falsches Passwort", + "tweb.DarkMode": "Dunkler Modus", + "tweb.Error.AnError": "Ein Fehler ist aufgetreten. Bitte versuchen Sie es später erneut.", + "tweb.AccDescr.LoginCode": "Anmeldecode", + "tweb.Login.Bot": "Als Bot anmelden >", + "tweb.Login.Bot.Title": "Als Bot anmelden", + "tweb.Login.Bot.Subtitle": "Geben Sie das Token ein, das Ihnen @BotFather\nbeim Erstellen des Bots gegeben hat.", + "tweb.Login.Bot.Token": "Bot-Token", + "tweb.Login.Bot.Cancel": "Als Benutzer anmelden >", + "tweb.Optional": "optional", + "tweb.PHONE_NUMBER_INVALID": "Ungültige Telefonnummer", + "tweb.PHONE_NUMBER_BANNED": "Diese Telefonnummer ist gesperrt", + "tweb.PHONE_NUMBER_FLOOD": "Zu viele Versuche, bitte später erneut versuchen", + "tweb.PHONE_CODE_EMPTY": "Ungültiger Code", + "tweb.PHONE_PASSWORD_FLOOD": "Zu viele Versuche, bitte später erneut versuchen", + "tweb.ACCESS_TOKEN_INVALID": "Ungültiges Bot-Token", + "tweb.ACCESS_TOKEN_EXPIRED": "Dieses Bot-Token wurde widerrufen", + "tweb.FIRSTNAME_INVALID": "Ungültiger Vorname", + "tweb.LASTNAME_INVALID": "Ungültiger Nachname", + "tweb.Close": "Schließen" +} diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/en.json b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/en.json index 1a524af..9851265 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/en.json +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/en.json @@ -155,8 +155,121 @@ "dl.php_check_logs_make_sure_session_running": "Either the associated MadelineProto EventHandler bot or the MadelineProto IPC server are offline, please check logs and make sure at least one of them is running!", "account_banned": "!!!!!!! WARNING !!!!!!!\nTelegram's flood prevention system suspended this account.\nTo continue, manual verification is required.\nSend an email to recover@telegram.org, asking to unban the phone number %s, and shortly describe what will you do with this phone number.\nThen login again.\nIf you intentionally deleted this account, ignore this message.", "plugin_path_does_not_exist": "Plugin path %s does not exist!", - "windows_warning": "For Windows users: please switch to Linux if this fails. You can also try modifying the firewall settings to allow all PHP processes to create sockets (it's 100% easier to just switch to Linux, on Linux MadelineProto just works out of the box, no changes needed)", "could_not_connect_to_MadelineProto": "Could not connect to MadelineProto, please enable proc_open and remove open_basedir restrictions or disable webserver path rewrites to fix! If you already did that, make sure the CLI version of PHP is exactly the same as the web version (same version, extensions, et cetera) and check out the MadelineProto.log file for more info about the error that prevented the IPC server from starting.", - "translate_madelineproto_web": "MadelineProto can be translated in your language (current translation progress: %d%%), click here to contribute with the translation!", - "translate_madelineproto_cli": "MadelineProto can be translated in your language (current translation progress: %d%%), go to https://weblate.madelineproto.xyz to contribute with the translation!" + "translate_madelineproto_web": "MadelineProto can be translated in your language (current translation progress: %d%%), click here to contribute with the translation!", + "translate_madelineproto_cli": "MadelineProto can be translated in your language (current translation progress: %d%%), go to https://github.com/danog/MadelineProto/tree/v8/langs to contribute with the translation!", + "apiInvalidWeb": "The API ID is a number, and the API hash is 32 characters long: copy them again from my.telegram.org.", + "webDoneLead": "MadelineProto keeps running on the server: you can close this page.", + "apiChooseManualAuto": "Do you want to get the API ID and hash automatically from my.telegram.org (a), or enter them manually (m)?", + "apiAutoFallbackManual": "Enter the API ID and hash manually instead.", + "apiSetupTitleWeb": "Get your API ID and hash", + "apiSetupLeadWeb": "Every Telegram app needs an API ID and hash. MadelineProto can get them for you from my.telegram.org, with the phone number of an existing Telegram account.", + "apiAutoPhoneHintWeb": "my.telegram.org sends the login code to your Telegram app, not by SMS.", + "apiSendCodeWeb": "Send code", + "apiChooseManualWeb": "I already have an API ID", + "apiChooseAutoWeb": "Get them automatically", + "apiStartOverWeb": "Start over", + "apiAutoCodeTitleWeb": "Enter the code from Telegram", + "apiAutoCodeLeadWeb": "my.telegram.org sent a login code to your Telegram app, in the chat with Telegram (not by SMS).", + "apiAutoCodeLabelWeb": "Login code", + "apiCreateTitleWeb": "Create your app", + "apiCreateLeadWeb": "This account has no app on my.telegram.org yet. These details are only shown to you, and can be changed later.", + "apiAppTitleLabelWeb": "App title", + "apiAppShortNameLabelWeb": "Short name", + "apiAppUrlLabelWeb": "URL", + "apiAppDescLabelWeb": "Description", + "apiCreateWeb": "Create app", + "apiSaveWeb": "Save and continue", + "apiAutoErrorTitle": "my.telegram.org returned an error", + "apiCreateErrorTitle": "my.telegram.org didn't create the app", + "apiCreateVpsWarning": "Telegram doesn't let VPS, VPN and other datacenter IP ranges create new apps on my.telegram.org, and the request was made from the IP of the machine running MadelineProto. Create the app manually at https://my.telegram.org from a residential connection (like your phone on mobile data), then enter the API ID and hash.", + "loginTitleWeb": "Log in to Telegram", + "loginLeadWeb": "Choose the account or the bot this MadelineProto instance will run as.", + "loginTypeWeb": "Log in as", + "loginUserPhoneHintWeb": "With the country code, like +39 123 456 7890.", + "loginBotTokenHintWeb": "The token @BotFather gave you when you created the bot.", + "loginCodeTitleWeb": "Enter the login code", + "loginCodeLeadWeb": "Telegram sent a login code to your Telegram app, or by SMS if you aren't logged in anywhere else.", + "loginPasswordTitleWeb": "Two-step verification", + "loginPasswordLeadWeb": "This account is protected by a password, set in Settings > Privacy and Security > Two-Step Verification.", + "loginPasswordLabelWeb": "Password", + "signupTitleWeb": "Create your account", + "signupLeadWeb": "This phone number isn't on Telegram yet: choose the name of the new account.", + "webContinue": "Continue", + "webLogin": "Log in", + "webError": "%s. Check it and try again.", + "webStepApp": "API ID and hash", + "webStepAccount": "Account", + "webStepVerify": "Verification", + "webStepDone": "Running", + "webProgress": "Setup progress", + "webDocs": "Documentation", + "webOptional": "optional", + "webShowPassword": "Show", + "webHidePassword": "Hide", + "webQrTitle": "Log in with a QR code", + "webQrWaiting": "Waiting for the scan…", + "webFieldRequired": "Fill in this field.", + "webPhoneInvalid": "Enter the phone number with its country code, like +39 123 456 7890.", + "tweb.Login.Title": "Sign in to MadelineProto", + "tweb.Login.PhoneLabelInvalid": "Phone Number Invalid", + "tweb.Login.StartText": "Please confirm your country code\nand enter your phone number.", + "tweb.Login.Code.SentSms": "We have sent you an SMS\nwith the code.", + "tweb.Login.Code.SentInApp": "We have sent you a message in Telegram\nwith the code.", + "tweb.Login.Code.SentCall": "We will call you and dictate\nthe code.", + "tweb.Login.Code.SentEmail": "Please check your email **%s** (don't forget the spam folder) and enter the code we just sent you.", + "tweb.Login.Code.SentUnknown": "Please check everything\nfor a code (type: %s)", + "tweb.Login.Code.SentMissedCall": "Within the next few seconds you should receive\na short call from **%s**. Don't answer it —\njust enter the last digits of that number.", + "tweb.Login.Code.SentSmsWord": "We've sent an SMS with a secret word\nto your phone **%s**.", + "tweb.Login.Code.SentSmsWordBeginning": "We've sent an SMS with a secret word that starts\nwith \"**%2$s**\" to your phone **%1$s**.", + "tweb.Login.Code.SentSmsPhrase": "We've sent an SMS with a secret phrase\nto your phone **%s**.", + "tweb.Login.Code.SentSmsPhraseBeginning": "We've sent an SMS with a secret phrase that starts\nwith \"**%2$s**\" to your phone **%1$s**.", + "tweb.Login.Code.SecretWord": "Secret word", + "tweb.Login.Code.SecretPhrase": "Secret phrase", + "tweb.Login.Code.WordInvalid": "Incorrect, please try again", + "tweb.Login.Code.WordBeginningInvalid": "Incorrect word", + "tweb.Login.Password.Title": "Enter Your Password", + "tweb.Login.Password.Subtitle": "Your account is protected with\nan additional password", + "tweb.Login.Register.Subtitle": "Enter your name\nto create your account", + "tweb.PleaseWait": "Please wait...", + "tweb.Code": "Code", + "tweb.LoginPassword": "Password", + "tweb.YourName": "Your Name", + "tweb.FirstName": "First name (required)", + "tweb.LastName": "Last name (optional)", + "tweb.StartMessaging": "Start Messaging", + "tweb.Country": "Country", + "tweb.Contacts.PhoneNumber.Placeholder": "Phone Number", + "tweb.Login.Next": "Next", + "tweb.Login.QR.Title": "Log in by QR Code", + "tweb.Login.QR.Help1": "Open Telegram on your phone", + "tweb.Login.QR.Help2": "Go to **Settings** > **Devices** > **Add Device**", + "tweb.Login.QR.Help3": "Point your phone at this screen to confirm login", + "tweb.Login.QR.Cancel": "Log in by phone number >", + "tweb.Login.QR.Login": "Log in by QR Code >", + "tweb.Login.QR.Subtitle": "Scan with Telegram app on your phone", + "tweb.PhoneNumber.Code.Fragment.Info": "Get the code in the Numbers section on [Fragment]()", + "tweb.PHONE_CODE_INVALID": "Invalid code", + "tweb.PHONE_CODE_EXPIRED": "Code expired", + "tweb.PASSWORD_HASH_INVALID": "Incorrect password", + "tweb.DarkMode": "Dark Mode", + "tweb.Error.AnError": "An error occurred. Please try again later.", + "tweb.AccDescr.LoginCode": "Login code", + "tweb.Login.Bot": "Log in as a bot >", + "tweb.Login.Bot.Title": "Log in as a Bot", + "tweb.Login.Bot.Subtitle": "Enter the token @BotFather gave you\nwhen you created the bot.", + "tweb.Login.Bot.Token": "Bot Token", + "tweb.Login.Bot.Cancel": "Log in as a user >", + "tweb.Optional": "optional", + "tweb.PHONE_NUMBER_INVALID": "Phone Number Invalid", + "tweb.PHONE_NUMBER_BANNED": "This phone number is banned", + "tweb.PHONE_NUMBER_FLOOD": "Too many attempts, try again later", + "tweb.PHONE_CODE_EMPTY": "Invalid code", + "tweb.PHONE_PASSWORD_FLOOD": "Too many attempts, try again later", + "tweb.ACCESS_TOKEN_INVALID": "Invalid bot token", + "tweb.ACCESS_TOKEN_EXPIRED": "This bot token was revoked", + "tweb.FIRSTNAME_INVALID": "Invalid first name", + "tweb.LASTNAME_INVALID": "Invalid last name", + "tweb.Close": "Close", + "ipc_tcp_warning": "UNIX sockets are not available, so the IPC server of the session listens on TCP (127.0.0.1) instead: any program running on this machine can connect to it, and control the session. On Windows 10 1803+, enable the sockets extension (extension=sockets in php.ini) to use UNIX sockets." } diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/es.json b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/es.json new file mode 100644 index 0000000..6ca3ae4 --- /dev/null +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/es.json @@ -0,0 +1,274 @@ +{ + "baseDirLimitation": "Hay configurada una limitación de basedir: puede afectar al rendimiento y causar algunos problemas, desactívela si es posible.", + "noReportPeers": "Advertencia: no se ha configurado ningún peer para los informes de errores, añada el siguiente método a su gestor de eventos", + "manualAdminActionRequired": "!!!!!!!!! SE REQUIERE UNA ACCIÓN MANUAL DEL ADMINISTRADOR DEL SISTEMA !!!!!!!!!", + "mmapErrorPart1": "Se ha alcanzado el número máximo de regiones de memoria mapeada (mmap) (%s): para solucionarlo, aumente el parámetro del kernel vm.max_map_count a 262144.", + "mmapErrorPart2": "Para solucionarlo, ejecute el siguiente comando como root: %s", + "mmapErrorPart3": "Para que el cambio se mantenga tras los reinicios: %s", + "mmapErrorPart4": "En Windows y WSL, aumentar el tamaño del archivo de paginación puede ayudar; si el problema persiste, cambie a Linux nativo.", + "botAlreadyRunning": "¡El bot ya está en ejecución!", + "extensionRequired": "MadelineProto requiere la extensión %s para funcionar. %s", + "extensionRequiredInstallWithApt": "Intente ejecutar sudo apt-get install %s.", + "extensionRequiredInstallWithCustomInstructions": "Siga las instrucciones de %s para instalarla.", + "extensionRecommended": "Advertencia: la extensión %s no está instalada, ¡instálela para acelerar MadelineProto!", + "go": "Ir", + "apiChooseManualAutoTip": "Tenga en cuenta que también puede proporcionar el API ID/hash directamente en el código mediante la configuración: %s", + "apiChooseManualAutoTipWeb": "Tenga en cuenta que también puede proporcionar el API ID/hash directamente en el código mediante la configuración.", + "apiChoosePrompt": "Su elección (m/a): ", + "apiManualInstructions0": "Inicie sesión en https://my.telegram.org", + "apiManualInstructions1": "Vaya a \"API development tools\"", + "apiManualInstructions2": "Haga clic en \"Create application\"", + "apiAppInstructionsManual0": "el nombre de su aplicación, puede ser cualquiera", + "apiAppInstructionsManual1": "el nombre corto de su aplicación, alfanumérico, de 5 a 32 caracteres", + "apiAppInstructionsManual2": "la URL de su aplicación/sitio web, o t.me/yourusername", + "apiAppInstructionsManual3": "cualquiera", + "apiAppInstructionsManual4": "Describa aquí su aplicación", + "apiManualWeb": "Introduzca su API ID y su API hash", + "apiManualPrompt0": "Introduzca su API ID: ", + "apiManualPrompt1": "Introduzca su API hash: ", + "apiAutoWeb": "Introduzca un número de teléfono ya registrado en Telegram para obtener el API ID", + "apiAutoPrompt0": "Introduzca un número de teléfono ya registrado en Telegram: ", + "apiAutoPrompt1": "Introduzca el código de verificación que ha recibido en Telegram: ", + "apiAppWeb": "Introduzca la información de la API", + "apiAppInstructionsAuto0": "Introduzca el nombre de la aplicación, puede ser cualquiera: ", + "apiAppInstructionsAuto1": "Introduzca el nombre corto de la aplicación, alfanumérico, de 5 a 32 caracteres: ", + "apiAppInstructionsAuto2": "Introduzca la URL de la aplicación/sitio web, o t.me/yourusername: ", + "apiAppInstructionsAuto3": "Introduzca la plataforma de la aplicación: ", + "apiAppInstructionsAuto4": "Describa su aplicación: ", + "apiAppInstructionsAutoTypeOther": "Otra (especifíquela en la descripción)", + "apiParamsError": "¡No ha proporcionado todos los parámetros obligatorios!", + "apiError": "ERROR: %s. Inténtelo de nuevo.", + "loginChoosePromptWeb": "¿Desea iniciar sesión como usuario o como bot?", + "loginWebQr": "También puede iniciar sesión automáticamente abriendo Telegram en su teléfono, yendo a Ajustes > Dispositivos > Vincular dispositivo de escritorio y escaneando el siguiente código QR:", + "loginWebQr1": "Abra Telegram en su teléfono", + "loginWebQr2": "Vaya a Ajustes > Dispositivos > Vincular dispositivo de escritorio", + "loginWebQr3": "Apunte su teléfono a esta pantalla para confirmar el inicio de sesión", + "loginOptionBot": "Bot", + "loginOptionUser": "Usuario", + "loginBot": "Introduzca el token de su bot: ", + "loginUser": "Introduzca su número de teléfono: ", + "loginQr": "Abra Telegram en su teléfono, vaya a Ajustes > Dispositivos > Vincular dispositivo de escritorio y escanee el código QR anterior para iniciar sesión automáticamente.", + "loginQrCodeSuccessful": "¡Inicio de sesión con código QR completado!", + "loginQrCodeExpired": "El código QR ha caducado, generando uno nuevo...", + "loginManual": "También puede introducir un token de bot o un número de teléfono para iniciar sesión manualmente: ", + "loginUserCode": "Introduzca el código: ", + "loginUserPass": "Introduzca su contraseña (pista: %s): ", + "loginUserPassWeb": "Introduzca su contraseña: ", + "loginUserPassHint": "Pista: %s", + "signupFirstName": "Introduzca su nombre: ", + "signupLastName": "Introduzca sus apellidos (puede dejarse vacío): ", + "signupWeb": "Regístrese", + "signupFirstNameWeb": "Nombre", + "signupLastNameWeb": "Apellidos", + "loginNoCode": "¡No ha proporcionado el código de verificación!", + "loginNoPass": "¡No ha proporcionado la contraseña!", + "loginNoName": "¡No ha proporcionado el nombre!", + "loginBotTokenWeb": "Token del bot", + "loginUserPhoneWeb": "Número de teléfono", + "loginUserPhoneCodeWeb": "Código", + "done": "¡Listo!", + "nearest_dc": "Estamos en %s, el DC más cercano es %d.", + "serialization_ofd": "La serialización está desactualizada, ¡reconstruyendo el objeto!", + "api_not_set": "Debe proporcionar una clave de API y un ID de API, obtenga los suyos en my.telegram.org", + "session_corrupted": "¡La sesión está dañada!", + "value_bigger_than_2147483647": "El valor proporcionado %s es mayor que 2147483647", + "value_smaller_than_2147483648": "El valor proporcionado %s es menor que -2147483648", + "value_bigger_than_9223372036854775807": "El valor proporcionado %s es mayor que 9223372036854775807", + "value_smaller_than_9223372036854775808": "El valor proporcionado %s es menor que -9223372036854775808", + "value_bigger_than_4294967296": "El valor proporcionado %s es mayor que 4294967296", + "value_smaller_than_0": "El valor proporcionado %s es menor que 0", + "encode_double_error": "No se pudo codificar correctamente el valor double", + "file_not_exist": "El archivo no existe", + "deserialization_error": "Se produjo un error durante la deserialización", + "rpc_tg_error": "Telegram devolvió un error RPC: %s (%s), causado por %s:%s%sTraza TL:", + "madelineproto_ready": "¡MadelineProto está listo!", + "logout_ok": "¡Sesión cerrada correctamente!", + "already_loggedIn": "¡Esta instancia de MadelineProto ya ha iniciado sesión!", + "login_ok": "¡Sesión iniciada correctamente!", + "login_user": "Iniciando sesión como usuario normal...", + "login_bot": "Iniciando sesión como bot...", + "login_code_sending": "Enviando el código...", + "login_code_sent": "¡Código enviado correctamente! Cuando reciba el código, utilice la función completePhoneLogin.", + "login_code_uncalled": "¡No se está esperando ningún código! Llame primero al método phoneLogin", + "login_2fa_enabled": "La 2FA está activada, deberá llamar a la función complete2falogin...", + "login_need_signup": "No se ha creado ninguna cuenta para este número, deberá llamar a la función completeSignup...", + "login_auth_key": "Iniciando sesión con la clave de autorización...", + "not_loggedIn": "¡No se ha iniciado sesión!", + "signup_uncalled": "¡No se está esperando ningún registro! Llame primero a los métodos phoneLogin y completePhoneLogin.", + "signing_up": "Registrándose como usuario normal...", + "signup_ok": "¡Registro completado correctamente!", + "2fa_uncalled": "¡No se está esperando la contraseña! Llame primero a los métodos phoneLogin y completePhoneLogin.", + "peer_not_in_db": "Este peer no está presente en la base de datos interna de peers", + "call_error_1": "No se pudo encontrar y aceptar la llamada %s", + "accepting_call": "Aceptando la llamada de %s...", + "call_already_accepted": "La llamada %s ya ha sido aceptada", + "call_already_declined": "La llamada %s ya ha sido rechazada", + "call_error_2": "No se pudo encontrar y confirmar la llamada %s", + "call_confirming": "Confirmando la llamada de %s...", + "call_error_3": "No se pudo encontrar y completar la llamada %s", + "call_completing": "Completando la llamada de %s...", + "fingerprint_invalid": "¡Huella digital de la clave no válida!", + "call_discarding": "Descartando la llamada %s...", + "file_parsing": "Analizando %s...", + "src_file_invalid": "Se proporcionó un archivo de origen no válido: ", + "bool_error": "No se pudo extraer el booleano", + "not_numeric": "El valor proporcionado no es numérico", + "long_not_16": "El valor proporcionado no tiene una longitud de 16 bytes", + "long_not_32": "El valor proporcionado no tiene una longitud de 32 bytes", + "long_not_64": "El valor proporcionado no tiene una longitud de 64 bytes", + "array_invalid": "No ha proporcionado un array válido", + "predicate_not_set": "¡No se ha establecido el predicado (el valor de _)!", + "update_madelineproto": "Está ejecutando una versión antigua de MadelineProto y es necesario actualizarla: la versión actual es %s, ¡pero la última versión, con numerosas correcciones de errores y nuevas funciones, es %s!", + "type_extract_error": "No se pudo extraer el tipo \"%s\", ¡actualice MadelineProto!", + "method_not_found": "No se encontró el método: ", + "params_missing": "Falta un parámetro obligatorio", + "sec_peer_not_in_db": "Este peer secreto no está presente en la base de datos interna de peers", + "stream_handle_invalid": "Se proporcionó un descriptor de flujo no válido.", + "length_too_big": "La longitud es demasiado grande", + "string_required": "¡Se esperaba una cadena!", + "waveform_must_have_100_values": "¡Un array de forma de onda debe tener 100 valores!", + "waveform_value": "¡Un valor de forma de onda debe estar entre 0 y 31!", + "could_not_convert_object": "No se pudo convertir el objeto de tipo %s", + "type_extract_error_id": "No se pudo extraer el tipo: %s con id %s, ¡actualice MadelineProto!", + "constructor_not_found": "No se encontró el constructor para el tipo: ", + "botapi_conversion_error": "No se puede convertir %s en un objeto de la bot API", + "non_text_conversion": "¡Todavía no se pueden convertir mensajes que no sean de texto!", + "file_type_invalid": "Se detectó un tipo de archivo no válido (%s)", + "static_analysis_minor": "Se encontró un problema menor durante el análisis estático de %s: %s", + "static_analysis_severe": "Se encontró un problema grave durante el análisis estático de %s: %s", + "secret_chat_skipping": "El chat secreto %s no está en la base de datos, se omite el mensaje...", + "must_have_declare_types": "por motivos de rendimiento, la primera instrucción de un archivo de gestor de eventos debe ser \"declare(strict_types=1);\"", + "do_not_delete_MadelineProto.log": "el archivo MadelineProto.log nunca debe eliminarse, ¡en su lugar, establezca un tamaño máximo personalizado en la configuración!", + "do_not_remove_MadelineProto.log_phar": "No elimine madeline.phar ni madeline.php, o MadelineProto fallará. Si tiene algún problema con MadelineProto, notifíquelo en https://github.com/danog/MadelineProto o en https://t.me/pwrtelegramgroup", + "do_not_use_blocking_function": "por motivos de rendimiento, los gestores de eventos no pueden usar la función bloqueante no asíncrona %s, utilice %s en su lugar", + "do_not_use_blocking_class": "por motivos de rendimiento, los gestores no pueden usar la clase bloqueante no asíncrona %s, utilice %s en su lugar", + "do_not_use_deprecated_function": "la función %s está obsoleta, utilice %s en su lugar", + "do_not_use_non_root_require_in_event_handler": "por motivos de rendimiento, no se debe usar require ni include dentro de una clase de gestor de eventos, solo se permiten los require de nivel raíz.", + "do_not_use_yield": "MadelineProto 8 no requiere ni admite el uso de yield en funciones asíncronas, debe eliminar todas las palabras clave yield usadas anteriormente en las llamadas a funciones asíncronas", + "recommend_not_use_filesystem_function": "no se recomienda usar la función %s, porque acceder al sistema de archivos durante la gestión de las actualizaciones ralentizará su bot; consulte https://docs.madelineproto.xyz/docs/UPDATES.html#avoiding-the-use-of-filesystem-functions para ver una lista de formas alternativas de almacenar datos que no ralentizarán su bot.", + "plugins_do_not_use_require": "por motivos de rendimiento, los plugins solo pueden incluir o requerir automáticamente otros archivos presentes en la carpeta de plugins a través del autoloader PSR-4 (no mediante require() manuales).", + "plugins_must_have_exactly_one_class": "¡un plugin debe definir exactamente una clase! Para definir varias clases, interfaces o traits, cree archivos separados: MadelineProto los cargará automáticamente.", + "cli_need_dl.php_link": "¡Especifique la URL de un script de descarga al usar getDownloadLink desde la CLI!", + "invalid_dl.php_session": "%s no es un script de descarga válido porque su ID de sesión es diferente (se esperaba %s, se obtuvo %s)", + "need_dl.php": "No se pudo generar el script de descarga predeterminado (%s), cree un archivo dl.php con el siguiente contenido: %s y pase su URL como segundo parámetro de getDownloadLink", + "dl.php_powered_by_madelineproto": "¡Servidor de descarga de archivos de Telegram (hasta 4 GB) basado en MadelineProto!
Haga clic aquí para obtener más información sobre cómo configurar su propio servidor de descarga de archivos de Telegram.", + "dl.php_check_logs_make_sure_session_running": "El bot EventHandler de MadelineProto asociado o el servidor IPC de MadelineProto están desconectados, ¡revise los registros y asegúrese de que al menos uno de ellos esté en ejecución!", + "account_banned": "!!!!!!! ADVERTENCIA !!!!!!!\nEl sistema de prevención de flood de Telegram ha suspendido esta cuenta.\nPara continuar, se requiere una verificación manual.\nEnvíe un correo electrónico a recover@telegram.org solicitando el desbloqueo del número de teléfono %s y describa brevemente qué hará con este número de teléfono.\nA continuación, vuelva a iniciar sesión.\nSi eliminó esta cuenta intencionadamente, ignore este mensaje.", + "plugin_path_does_not_exist": "¡La ruta del plugin %s no existe!", + "could_not_connect_to_MadelineProto": "No se pudo conectar con MadelineProto: para solucionarlo, habilite proc_open y elimine las restricciones de open_basedir, o desactive las reescrituras de rutas del servidor web. Si ya lo ha hecho, asegúrese de que la versión CLI de PHP sea exactamente la misma que la versión web (misma versión, extensiones, etc.) y consulte el archivo MadelineProto.log para obtener más información sobre el error que impidió que se iniciara el servidor IPC.", + "translate_madelineproto_web": "MadelineProto puede traducirse a su idioma (progreso actual de la traducción: %d%%), haga clic aquí para contribuir a la traducción.", + "translate_madelineproto_cli": "MadelineProto puede traducirse a su idioma (progreso actual de la traducción: %d%%), visite https://github.com/danog/MadelineProto/tree/v8/langs para contribuir a la traducción.", + "apiInvalidWeb": "El API ID es un número y el API hash tiene 32 caracteres: cópielos de nuevo desde my.telegram.org.", + "webDoneLead": "MadelineProto sigue ejecutándose en el servidor: puede cerrar esta página.", + "apiChooseManualAuto": "¿Desea obtener el API ID y el hash automáticamente desde my.telegram.org (a) o introducirlos manualmente (m)?", + "apiAutoFallbackManual": "Introduzca el API ID y el hash manualmente.", + "apiSetupTitleWeb": "Obtenga su API ID y su hash", + "apiSetupLeadWeb": "Toda aplicación de Telegram necesita un API ID y un hash. MadelineProto puede obtenerlos por usted desde my.telegram.org, con el número de teléfono de una cuenta de Telegram existente.", + "apiAutoPhoneHintWeb": "my.telegram.org envía el código de inicio de sesión a su aplicación de Telegram, no por SMS.", + "apiSendCodeWeb": "Enviar código", + "apiChooseManualWeb": "Ya tengo un API ID", + "apiChooseAutoWeb": "Obtenerlos automáticamente", + "apiStartOverWeb": "Empezar de nuevo", + "apiAutoCodeTitleWeb": "Introduzca el código de Telegram", + "apiAutoCodeLeadWeb": "my.telegram.org ha enviado un código de inicio de sesión a su aplicación de Telegram, en el chat con Telegram (no por SMS).", + "apiAutoCodeLabelWeb": "Código de inicio de sesión", + "apiCreateTitleWeb": "Cree su aplicación", + "apiCreateLeadWeb": "Esta cuenta aún no tiene ninguna aplicación en my.telegram.org. Estos datos solo los verá usted y podrá cambiarlos más adelante.", + "apiAppTitleLabelWeb": "Nombre de la aplicación", + "apiAppShortNameLabelWeb": "Nombre corto", + "apiAppUrlLabelWeb": "URL", + "apiAppDescLabelWeb": "Descripción", + "apiCreateWeb": "Crear aplicación", + "apiSaveWeb": "Guardar y continuar", + "apiAutoErrorTitle": "my.telegram.org ha devuelto un error", + "apiCreateErrorTitle": "my.telegram.org no ha creado la aplicación", + "apiCreateVpsWarning": "Telegram no permite crear nuevas aplicaciones en my.telegram.org desde rangos de IP de VPS, VPN u otros centros de datos, y la solicitud se hizo desde la IP de la máquina que ejecuta MadelineProto. Cree la aplicación manualmente en https://my.telegram.org desde una conexión residencial (como su teléfono con datos móviles) y luego introduzca el API ID y el hash.", + "loginTitleWeb": "Iniciar sesión en Telegram", + "loginLeadWeb": "Elija la cuenta o el bot con el que se ejecutará esta instancia de MadelineProto.", + "loginTypeWeb": "Iniciar sesión como", + "loginUserPhoneHintWeb": "Con el prefijo del país, por ejemplo +39 123 456 7890.", + "loginBotTokenHintWeb": "El token que le dio @BotFather al crear el bot.", + "loginCodeTitleWeb": "Introduzca el código de inicio de sesión", + "loginCodeLeadWeb": "Telegram ha enviado un código de inicio de sesión a su aplicación de Telegram, o por SMS si no tiene la sesión iniciada en ningún otro sitio.", + "loginPasswordTitleWeb": "Verificación en dos pasos", + "loginPasswordLeadWeb": "Esta cuenta está protegida con una contraseña, configurada en Ajustes > Privacidad y seguridad > Verificación en dos pasos.", + "loginPasswordLabelWeb": "Contraseña", + "signupTitleWeb": "Cree su cuenta", + "signupLeadWeb": "Este número de teléfono aún no está en Telegram: elija el nombre de la nueva cuenta.", + "webContinue": "Continuar", + "webLogin": "Iniciar sesión", + "webError": "%s. Compruébelo e inténtelo de nuevo.", + "webStepApp": "API ID y hash", + "webStepAccount": "Cuenta", + "webStepVerify": "Verificación", + "webStepDone": "En ejecución", + "webProgress": "Progreso de la configuración", + "webDocs": "Documentación", + "webOptional": "opcional", + "webShowPassword": "Mostrar", + "webHidePassword": "Ocultar", + "webQrTitle": "Iniciar sesión con un código QR", + "webQrWaiting": "Esperando el escaneo…", + "webFieldRequired": "Rellene este campo.", + "webPhoneInvalid": "Introduzca el número de teléfono con el prefijo del país, por ejemplo +39 123 456 7890.", + "tweb.Login.Title": "Iniciar sesión en MadelineProto", + "tweb.Login.PhoneLabelInvalid": "Número de teléfono no válido", + "tweb.Login.StartText": "Confirme el código de su país\ne introduzca su número de teléfono.", + "tweb.Login.Code.SentSms": "Le hemos enviado un SMS\ncon el código.", + "tweb.Login.Code.SentInApp": "Le hemos enviado un mensaje en Telegram\ncon el código.", + "tweb.Login.Code.SentCall": "Le llamaremos para dictarle\nel código.", + "tweb.Login.Code.SentEmail": "Revise su correo **%s** (no olvide la carpeta de spam) e introduzca el código que le acabamos de enviar.", + "tweb.Login.Code.SentUnknown": "Busque un código\nen todas partes (tipo: %s)", + "tweb.Login.Code.SentMissedCall": "En los próximos segundos recibirá\nuna breve llamada de **%s**. No la conteste:\nsolo introduzca los últimos dígitos de ese número.", + "tweb.Login.Code.SentSmsWord": "Hemos enviado un SMS con una palabra secreta\na su teléfono **%s**.", + "tweb.Login.Code.SentSmsWordBeginning": "Hemos enviado un SMS con una palabra secreta que empieza\npor \"**%2$s**\" a su teléfono **%1$s**.", + "tweb.Login.Code.SentSmsPhrase": "Hemos enviado un SMS con una frase secreta\na su teléfono **%s**.", + "tweb.Login.Code.SentSmsPhraseBeginning": "Hemos enviado un SMS con una frase secreta que empieza\npor \"**%2$s**\" a su teléfono **%1$s**.", + "tweb.Login.Code.SecretWord": "Palabra secreta", + "tweb.Login.Code.SecretPhrase": "Frase secreta", + "tweb.Login.Code.WordInvalid": "Incorrecto, inténtelo de nuevo", + "tweb.Login.Code.WordBeginningInvalid": "Palabra incorrecta", + "tweb.Login.Password.Title": "Introduzca su contraseña", + "tweb.Login.Password.Subtitle": "Su cuenta está protegida con\nuna contraseña adicional", + "tweb.Login.Register.Subtitle": "Introduzca su nombre\npara crear su cuenta", + "tweb.PleaseWait": "Espere, por favor...", + "tweb.Code": "Código", + "tweb.LoginPassword": "Contraseña", + "tweb.YourName": "Su nombre", + "tweb.FirstName": "Nombre (obligatorio)", + "tweb.LastName": "Apellidos (opcional)", + "tweb.StartMessaging": "Empezar a chatear", + "tweb.Country": "País", + "tweb.Contacts.PhoneNumber.Placeholder": "Número de teléfono", + "tweb.Login.Next": "Siguiente", + "tweb.Login.QR.Title": "Iniciar sesión con código QR", + "tweb.Login.QR.Help1": "Abra Telegram en su teléfono", + "tweb.Login.QR.Help2": "Vaya a **Ajustes** > **Dispositivos** > **Vincular dispositivo**", + "tweb.Login.QR.Help3": "Apunte su teléfono a esta pantalla para confirmar el inicio de sesión", + "tweb.Login.QR.Cancel": "Iniciar sesión con número de teléfono >", + "tweb.Login.QR.Login": "Iniciar sesión con código QR >", + "tweb.Login.QR.Subtitle": "Escanee con la aplicación de Telegram de su teléfono", + "tweb.PhoneNumber.Code.Fragment.Info": "Obtenga el código en la sección Numbers de [Fragment]()", + "tweb.PHONE_CODE_INVALID": "Código no válido", + "tweb.PHONE_CODE_EXPIRED": "El código ha caducado", + "tweb.PASSWORD_HASH_INVALID": "Contraseña incorrecta", + "tweb.DarkMode": "Modo oscuro", + "tweb.Error.AnError": "Se ha producido un error. Inténtelo de nuevo más tarde.", + "tweb.AccDescr.LoginCode": "Código de inicio de sesión", + "tweb.Login.Bot": "Iniciar sesión como bot >", + "tweb.Login.Bot.Title": "Iniciar sesión como bot", + "tweb.Login.Bot.Subtitle": "Introduzca el token que le dio @BotFather\nal crear el bot.", + "tweb.Login.Bot.Token": "Token del bot", + "tweb.Login.Bot.Cancel": "Iniciar sesión como usuario >", + "tweb.Optional": "opcional", + "tweb.PHONE_NUMBER_INVALID": "Número de teléfono no válido", + "tweb.PHONE_NUMBER_BANNED": "Este número de teléfono está bloqueado", + "tweb.PHONE_NUMBER_FLOOD": "Demasiados intentos, inténtelo más tarde", + "tweb.PHONE_CODE_EMPTY": "Código no válido", + "tweb.PHONE_PASSWORD_FLOOD": "Demasiados intentos, inténtelo más tarde", + "tweb.ACCESS_TOKEN_INVALID": "Token del bot no válido", + "tweb.ACCESS_TOKEN_EXPIRED": "Este token del bot ha sido revocado", + "tweb.FIRSTNAME_INVALID": "Nombre no válido", + "tweb.LASTNAME_INVALID": "Apellidos no válidos", + "tweb.Close": "Cerrar" +} diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/fa.json b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/fa.json index ae67208..5f2d0f1 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/fa.json +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/fa.json @@ -1,31 +1,46 @@ { + "baseDirLimitation": "یک محدودیت basedir پیکربندی شده است: این میتواند روی پرفورمنس تاثیر بگذارد و باعث ایجاد مشکلات شود، لطفا در صورت امکان آن را غیرفعال کنید!", + "noReportPeers": "هشدار: هیچ peerی به عنوان peer گزارشات تنظیم نشده، لطفا متود زیر را به ایونت هندلر اضافه کنید", + "manualAdminActionRequired": "!!!!!!!!! فعالیت دستی ادمین سیستم نیاز است !!!!!!!!!", + "mmapErrorPart1": "بیشترین مقدار حافظه تخصیص داده شده (mmap ) پر شده است (%s ) : لطفا از داخل کانفیگ های مربوط به کرنل مقدار vm.max_map_count را به مقدار 262144 افزایش دهیدتا مشکل رفع گردد.", + "mmapErrorPart2": "برای حل کردن مشکل، کامند مقابل را با دسترسی root اجرا کنید: %s", + "mmapErrorPart3": "برای تداوم تغییر در طول راه‌اندازی دوباره: %s", + "mmapErrorPart4": "روی ویندوز و WSL، افزایش سایز pagefile ممکن است کمک کند؛ اگر مشکل پافشاری کرد لطفا سیستم‌عامل خود را به لینوکس تغییر دهید.", + "botAlreadyRunning": "ربات هم اکنون در حال اجرا است!", + "extensionRequired": "مدلین برای اجرا نیاز به افزونه %s دارد. %s", + "extensionRequiredInstallWithApt": "اجرای کامند sudo apt-get install %s را امتحان کنید.", + "extensionRequiredInstallWithCustomInstructions": "برای نصب آن، دستورالعمل ها را در %s دنبال کنید.", + "extensionRecommended": "هشدار: افزونه %s نصب نشده است. لطفا برای افزایش سرعت مدلین‌پروتو آن را نصب کنید!", + "go": "برو", + "apiChooseManualAutoTip": "در نظر داشته باشید که می‌توانید API ID و API Hash را به طور مستقیم داخل کدتان با استفاده از تنظیمات وارد کنید. %s", + "apiChooseManualAutoTipWeb": "در نظر باشید که می‌توانید API ID و API Hash را به صورت مستقیم داخل کدتان با استفاده از تنظیمات وارد کنید.", "apiChoosePrompt": "انتخاب شما (m/a): ", "apiManualInstructions0": "وارد حساب خود در https://my.telegram.org شوید", + "apiManualInstructions1": "به ابزارهای توسعه API بروید", + "apiManualInstructions2": "روی create application کلیک کنید", "apiAppInstructionsManual0": "اسم اپلیکیشن شما، می‌تواند هرچیزی باشد", "apiAppInstructionsManual1": "اسم کوتاه اپلیکیشن شما، 5 تا 32 کاراکتر، حروف و اعداد انگلیسی", "apiAppInstructionsManual2": "لینک اپلیکیشن/وبسایت شما، یا t.me/yourusername", "apiAppInstructionsManual3": "هرچیزی", "apiAppInstructionsManual4": "اپلیکیشن خود را اینجا توصیف کنید", + "apiManualWeb": "API ID و API HASH خود را وارد کنید", "apiManualPrompt0": "API ID خود را وارد کنید: ", "apiManualPrompt1": "API Hash خود را وارد کنید: ", + "apiAutoWeb": "برای دریافت API ID شماره‌ای را وارد کنید که از قبل در تلگرام ثبت‌نام کرده باشد", "apiAutoPrompt0": "شماره‌ای را وارد کنید که از قبل در تلگرام ثبت‌نام کرده باشد: ", "apiAutoPrompt1": "کد تاییدی را که در تلگرام دریافت کردید، وارد کنید ", "apiAppWeb": "اطلاعات API را وارد کنید", + "apiAppInstructionsAuto0": "نام برنامه خود را وارد کنید، میتواند هرچیزی باشد ", "apiAppInstructionsAuto1": "نام مخفف برنامه‌تان را وارد کنید، 5 تا 32 کاراکتر الفبا اعداد: ", "apiAppInstructionsAuto2": "لینک برنامه/وبسایت را وارد کنید، یا t.me/yourusername: ", + "apiAppInstructionsAuto3": "سکوی (پلتفرم) برنامه را وارد کنید: ", "apiAppInstructionsAuto4": "برنامه‌تان را توصیف کنید: ", "apiAppInstructionsAutoTypeOther": "مابقی (در توضیحات مشخص کنید)", - "apiChooseManualAutoTip": "در نظر داشته باشید که می‌توانید API ID و API Hash را به طور مستقیم داخل کدتان با استفاده از تنظیمات وارد کنید. %s", - "apiChooseManualAutoTipWeb": "در نظر باشید که می‌توانید API ID و API Hash را به صورت مستقیم داخل کدتان با استفاده از تنظیمات وارد کنید.", - "go": "برو", - "apiManualWeb": "API ID و API HASH خود را وارد کنید", - "apiAutoWeb": "برای دریافت API ID شماره‌ای را وارد کنید که از قبل در تلگرام ثبت‌نام کرده باشد", - "apiAppInstructionsAuto0": "نام برنامه خود را وارد کنید، میتواند هرچیزی باشد ", - "apiAppInstructionsAuto3": "سکوی (پلتفرم) برنامه را وارد کنید: ", "apiParamsError": "شما تمام ورودی‌های موردنیاز را وارد نکردید!", "apiError": "ارور: %s. دوباره امتحان کنید.", "loginChoosePromptWeb": "میخواهید به عنوان یک کاربر یا به عنوان یک ربات، وارد شوید؟", "loginWebQr": "همچنین میتوانید به صورت خودکار با اسکن QR Code پایین وارد شوید:", + "loginWebQr1": "تلگرام را در موبایل خود باز کنید", "loginWebQr2": "بروید به تنظیمات > دستگاه‌ها > اتصال دستگاه دسکتاپ", "loginWebQr3": "گوشی خود را به سمت این صفحه بگیرید تا ورود را تایید کنید", "loginOptionBot": "ربات", @@ -40,123 +55,220 @@ "loginUserPass": "رمز خود را وارد کنید (اشاره %s): ", "loginUserPassWeb": "رمز خود را وارد کنید: ", "loginUserPassHint": "اشاره: %s", - "signupFirstNameWeb": "نام", - "nearest_dc": "ما در %s هستیم، نزدیک ترین دیتاسنتر %d است.", - "fingerprint_invalid": "اثرانگشت کلید نامعتبر است!", - "value_bigger_than_2147483647": "مقدار داده شده‌ی %s بیشتر از 2147483647 است", - "value_bigger_than_9223372036854775807": "مقدار داده شده‌ی %s بیشتر از 9223372036854775807 است", - "already_loggedIn": "نمونه‌ی MadelineProto از قبل وارد شده!", - "login_code_sent": "کد با موفقیت ارسال شد! زمانی که کد را دریافت کردید باید از تابع completePhoneLogin استفاده کنید.", - "apiManualInstructions2": "روی create application کلیک کنید", "signupFirstName": "نام خود را وارد کنید: ", "signupLastName": "نام خانوادگی خود را وارد کنید (می‌تواند خالی باشد): ", + "signupWeb": "لطفا ثبت‌نام کنید", + "signupFirstNameWeb": "نام", + "signupLastNameWeb": "نام خانوادگی", + "loginNoCode": "شما کد شماره را وارد نکردید!", "loginNoPass": "شما کلمه عبور را وارد نکردید!", "loginNoName": "شما نام را وارد نکردید!", "loginBotTokenWeb": "توکن ربات", "loginUserPhoneWeb": "شماره تلفن", "loginUserPhoneCodeWeb": "کد", "done": "انجام شد!", + "nearest_dc": "ما در %s هستیم، نزدیک ترین دیتاسنتر %d است.", "serialization_ofd": "مرتب سازی (سریالایز) منقضی شده، درحال بازسازی شی!", + "api_not_set": "شما باید یک api key و یک api id وارد کنید، @ خوتان را از my.telegram.org بگیرید", "session_corrupted": "سشن شما خراب است!", - "value_smaller_than_9223372036854775808": "مقدار داده شده‌ی %s کمتر از -9223372036854775808 است", + "value_bigger_than_2147483647": "مقدار داده شده‌ی %s بیشتر از 2147483647 است", "value_smaller_than_2147483648": "مقدار داده شده‌ی %s کمتر از -2147483648 است", + "value_bigger_than_9223372036854775807": "مقدار داده شده‌ی %s بیشتر از 9223372036854775807 است", + "value_smaller_than_9223372036854775808": "مقدار داده شده‌ی %s کمتر از -9223372036854775808 است", "value_bigger_than_4294967296": "مقدار داده شده‌ی %s بیشتر از 4294967296 است", "value_smaller_than_0": "مقدار داده شده‌ی %s کمتر از 0 است", + "encode_double_error": "نمی‌توان به درستی double را رمزنگاری (انکد) کرد", "file_not_exist": "فایل وجود ندارد", + "deserialization_error": "مشکلی در سریال‌زدایی پیش آمد", + "rpc_tg_error": "تلگرام یک خطای RPC برگرداند: %s (%s), ناشی از %s:%s%sTL رد:", "madelineproto_ready": "MadelineProto آماده است!", "logout_ok": "با موفقیت خارج شد!", + "already_loggedIn": "نمونه‌ی MadelineProto از قبل وارد شده!", "login_ok": "با موفقیت وارد شد!", "login_user": "در حال ورود به عنوان یک کاربر عادی...", "login_bot": "در حال ورود به عنوان یک ربات...", "login_code_sending": "در حال ارسال کد...", + "login_code_sent": "کد با موفقیت ارسال شد! زمانی که کد را دریافت کردید باید از تابع completePhoneLogin استفاده کنید.", "login_code_uncalled": "من منتظر کد نیستم! لطفا اول تابع phoneLogin را صدا بزنید", + "login_2fa_enabled": "احراز هویت دوعاملی فعال است، شما باید تابع complete2falogin را صدا بزنید...", "login_need_signup": "حسابی برای این شماره ساخته نشده‌است، شما باید تابع completeSignup را صدا بزنید...", "login_auth_key": "درحال ورود با استفاده از کلید هویتی...", "not_loggedIn": "من وارد نشدم!", + "signup_uncalled": "من منتظر ساخت حساب نیستم! لطفا اول توابع phoneLogin و completePhoneLogin را صدا بزنید!", "signing_up": "در حال ثبت‌نام به عنوان یک کاربر عادی...", "signup_ok": "با موفقیت ثبت‌نام شد!", "2fa_uncalled": "من منتظر کلمه عبور نیستم! لطفا اول توابع phoneLogin و completePhoneLogin را صدا بزنید!", + "peer_not_in_db": "این peer در پایگاه داده (دیتابیس) peer وجود ندارد", + "call_error_1": "نمی‌توان تماس %s را پیدا کرد و پذیرفت", "accepting_call": "در حال پذیرش تماس از طرف %s...", "call_already_accepted": "تماس %s از قبل پذیرفته شده", "call_already_declined": "تماس %s از قبل رد شده", - "login_2fa_enabled": "احراز هویت دوعاملی فعال است، شما باید تابع complete2falogin را صدا بزنید...", + "call_error_2": "نمی‌توان تماس %s را پیدا و تایید کرد", + "call_confirming": "در حال تایید تماس از طرف %s...", "call_error_3": "نمیتوان تماس %s را یافت و کامل کرد", "call_completing": "در حال کامل کردن تماس از طرف %s...", + "fingerprint_invalid": "اثرانگشت کلید نامعتبر است!", "call_discarding": "درحال صرف نظر کردن از تماس %s...", "file_parsing": "درحال تجزیه %s...", + "src_file_invalid": "منبع فایل نامعتبری لحاظ گردیده: ", + "bool_error": "نمی‌توان‌ boolean را استخراج کرد", "not_numeric": "مقدار ورودی عددی نیست", - "signup_uncalled": "من منتظر ساخت حساب نیستم! لطفا اول توابع phoneLogin و completePhoneLogin را صدا بزنید!", - "call_error_1": "نمی‌توان تماس %s را پیدا کرد و پذیرفت", - "call_error_2": "نمی‌توان تماس %s را پیدا و تایید کرد", - "signupLastNameWeb": "نام خانوادگی", - "call_confirming": "در حال تایید تماس از طرف %s...", "long_not_16": "مقدار ورودی به طول 16 بایت نیست", "long_not_32": "مقدار ورودی به طول 32 بایت نیست", "long_not_64": "مقدار ورودی به طول 64 بایت نیست", "array_invalid": "شما یک آرایه معتبر وارد نکردید", "predicate_not_set": "مستند (مقدار تحت _) تنظیم نشده!", + "update_madelineproto": "شما نسخه قدیمی MadelineProto را اجرا می‌کنید، سورس شما نیاز به بروزرسانی دارد: در حال حاضر %s در حال اجرا است، اما آخرین نسخه با چندین رفع اشکال و ویژگی‌های جدید %s است!", "type_extract_error": "نمی‌توان نوع (تایپ) \"%s\" را استخراج کرد، شما باید MadelineProto را به روز رسانی کنید!", - "apiManualInstructions1": "به ابزارهای توسعه API بروید", - "loginWebQr1": "تلگرام را در موبایل خود باز کنید", - "signupWeb": "لطفا ثبت‌نام کنید", - "loginNoCode": "شما کد شماره را وارد نکردید!", - "api_not_set": "شما باید یک api key و یک api id وارد کنید، @ خوتان را از my.telegram.org بگیرید", - "deserialization_error": "مشکلی در سریال‌زدایی پیش آمد", - "rpc_tg_error": "تلگرام یک خطای RPC برگرداند: %s (%s), ناشی از %s:%s%sTL رد:", - "peer_not_in_db": "این peer در پایگاه داده (دیتابیس) peer وجود ندارد", - "encode_double_error": "نمی‌توان به درستی double را رمزنگاری (انکد) کرد", "method_not_found": "تابع پیدا نشد: ", "params_missing": "ورودی موردنیاز یافت نشد", + "sec_peer_not_in_db": "این peer مخفی در پایگاه داده (دیتابیس) داخلی peer وجود ندارد", + "stream_handle_invalid": "یک کنترل‌کننده جریان (استریم هندل) نامعتبر لحاظ گردیده.", "length_too_big": "طول بسیار بزرگ است", + "string_required": "مقدار مورد انتظار رشته است!", + "waveform_must_have_100_values": "آرایه waveformباید 100 مقدار داشته باشد(سایز مورد انتظار 100 است ) !", + "waveform_value": "مقدار عددیwaveform باید بین 0 تا 31 باشد!", + "could_not_convert_object": "نمیتوان مقدار آبجکت تایپ %s را تبدیل کرد", "type_extract_error_id": "نمی‌توان نوع: %s را با ایدی %s استخراج کرد، شما باید MadelineProto را به روز رسانی کنید!", "constructor_not_found": "سازنده برای این نوع پیدا نشد: ", "botapi_conversion_error": "نمیتوان %s را به شی ربات API تبدیل کرد", "non_text_conversion": "فعلا نمی‌توان پیام‌های غیرمتنی را تبدیل کرد!", "file_type_invalid": "نوع فایل نامعتبر شناسایی شد (%s)", + "static_analysis_minor": "یک مشکل جزئی در طول بررسی استاتیک %s رخ داد: %s", + "static_analysis_severe": "یک مشکل سمت سرور در طول بررسی استاتیک %s رخ داد: %s", "secret_chat_skipping": "من چت مخفی (سکرت) %s را در پایگاه داده (دیتابیس) ندارم، درحال رد شدن از پیام...", - "src_file_invalid": "منبع فایل نامعتبری لحاظ گردیده: ", - "bool_error": "نمی‌توان‌ boolean را استخراج کرد", - "sec_peer_not_in_db": "این peer مخفی در پایگاه داده (دیتابیس) داخلی peer وجود ندارد", - "stream_handle_invalid": "یک کنترل‌کننده جریان (استریم هندل) نامعتبر لحاظ گردیده.", - "noReportPeers": "هشدار: هیچ peerی به عنوان peer گزارشات تنظیم نشده، لطفا متود زیر را به ایونت هندلر اضافه کنید", - "mmapErrorPart2": "برای حل کردن مشکل، کامند مقابل را با دسترسی root اجرا کنید: %s", - "mmapErrorPart4": "روی ویندوز و WSL، افزایش سایز pagefile ممکن است کمک کند؛ اگر مشکل پافشاری کرد لطفا سیستم‌عامل خود را به لینوکس تغییر دهید.", - "extensionRecommended": "هشدار: افزونه %s نصب نشده است. لطفا برای افزایش سرعت مدلین‌پروتو آن را نصب کنید!", - "botAlreadyRunning": "ربات هم اکنون در حال اجرا است!", - "extensionRequiredInstallWithApt": "اجرای کامند sudo apt-get install %s را امتحان کنید.", - "extensionRequiredInstallWithCustomInstructions": "برای نصب آن، دستورالعمل ها را در %s دنبال کنید.", - "extensionRequired": "مدلین برای اجرا نیاز به افزونه %s دارد. %s", - "manualAdminActionRequired": "!!!!!!!!! فعالیت دستی ادمین سیستم نیاز است !!!!!!!!!", "must_have_declare_types": "به دلایل عملکردی و اجرایی، اولین دستور فایل ایونت‌هندلر باید دستور مقابل باشد: \"declare(strict_types=1);\"", "do_not_delete_MadelineProto.log": "فایل MadelineProto.log هیچوقت نباید حذف شود، لطفا به جای حذف، بیشترین اندازه دلخواه را در تنظیمات مشخص کنید!", "do_not_remove_MadelineProto.log_phar": "لطفا madeline.phar یا madeline.php را حذف نکنید، در غیراینصورت مدلین‌پروتو crash خواهد کرد. در صورت داشتن هرگونه مشکل با مدلین‌پروتو، آن را به https://github.com/danog/MadelineProto یا https://t.me/pwrtelegramgroup گزارش کنید", - "do_not_use_deprecated_function": "تابع %s منسوخ شده، لطفا به جای آن از %s استفاده کنید", - "mmapErrorPart3": "برای تداوم تغییر در طول راه‌اندازی دوباره: %s", - "recommend_not_use_filesystem_function": "استفاده از تابع %s پیشنهاد نمیشود، چراکه دسترسی و کار با فایل های سیستمی موقع پردازش آپدیت باعث کم شدن سرعت ربات شما میشود، لطفا صفحه https://docs.madelineproto.xyz/docs/UPDATES.html#avoiding-the-use-of-filesystem-functions را ببینید تا با راه‌های جایگزین برای ذخیره اطلاعات که باعث کاهش سرعت ربات شما نمیشوند آشنا شوید!", "do_not_use_blocking_function": "به دلایل عملکردی و اجرایی، ایونت‌هندلرها نباید از فانکشن %s که async نیست استفاده کنند، لطفا به جای آن از %s استفاده کنید", "do_not_use_blocking_class": "به دلایل عملکردی و اجرایی، هندلرها نباید از کلس %s که async نیست استفاده کنند، به جای آن از %s استفاده کنید", + "do_not_use_deprecated_function": "تابع %s منسوخ شده، لطفا به جای آن از %s استفاده کنید", "do_not_use_non_root_require_in_event_handler": "به دلایل عملکردی و اجرایی، شما نباید از require یا include داخل کلس ایونت‌هندلر استفاده کنید، فقط require های سطح root مجاز هستند.", - "plugins_must_have_exactly_one_class": "یک پلاگین باید دقیقا یک کلس را تعریف کند! برای تعریف چند کلس، اینترفیس یا تریت، فایل‌های جداگانه بسازید، آنها توسط مدلین‌پروتو به صورت خودکار بارگذاری خواهند شد.", + "do_not_use_yield": "مدلین‌پروتو نسخه 8 نیازی به yield در توابع async ندارد و حتی آن را پشتیبانی هم نمیکند، شما باید تمام کلمات کلیدی yield را که قبلا در اجرای توابع async به کار میرفتند حذف کنید", + "recommend_not_use_filesystem_function": "استفاده از تابع %s پیشنهاد نمیشود، چراکه دسترسی و کار با فایل های سیستمی موقع پردازش آپدیت باعث کم شدن سرعت ربات شما میشود، لطفا صفحه https://docs.madelineproto.xyz/docs/UPDATES.html#avoiding-the-use-of-filesystem-functions را ببینید تا با راه‌های جایگزین برای ذخیره اطلاعات که باعث کاهش سرعت ربات شما نمیشوند آشنا شوید!", "plugins_do_not_use_require": "به دلایل عملکردی و اجرایی، پلاگین‌ها فقط میتوانند فایل های دیگر را که در پوشه پلاگین هاست با استفاده از راه‌اندازی بارگذار خودکار PSR-4، به صورت خودکار include یا require کنند (بدون require کردن دستی آنها).", - "static_analysis_minor": "یک مشکل جزئی در طول بررسی استاتیک %s رخ داد: %s", - "static_analysis_severe": "یک مشکل سمت سرور در طول بررسی استاتیک %s رخ داد: %s", + "plugins_must_have_exactly_one_class": "یک پلاگین باید دقیقا یک کلس را تعریف کند! برای تعریف چند کلس، اینترفیس یا تریت، فایل‌های جداگانه بسازید، آنها توسط مدلین‌پروتو به صورت خودکار بارگذاری خواهند شد.", "cli_need_dl.php_link": "لطفا هنگام استفاده از getDownloadLink روی CLI (محیط ترمینال)، لینک اسکریپت دانلود را مشخص کنید!", + "invalid_dl.php_session": "%s یک اسکریپت دانلود درست و معتبر نیست چرا که سشن‌آیدی متفاوت است (انتظار این سشن‌آیدی وجود داشت: %s، اما این دریافت شد: %s)", "need_dl.php": "اسکریپت دانلود پیشفرض تولید نشد (%s)، لطفا یک فایل dl.php بسیازید و این محتوا را در آن قرار دهید: %s سپس لینک آن فایل را به ورودی دوم getDownloadLink بدهید", "dl.php_powered_by_madelineproto": "سرور دانلود فایل تلگرام (تا حداکثر 4 گیگابایت)، قدرت گرفته از مدلین‌پروتو!
برای اطلاعات بیشتر در مورد طریقه اجرای سرور دانلود تلگرام شخصی خود اینجا کلیک کنید!", - "update_madelineproto": "شما نسخه قدیمی MadelineProto را اجرا می‌کنید، سورس شما نیاز به بروزرسانی دارد: در حال حاضر %s در حال اجرا است، اما آخرین نسخه با چندین رفع اشکال و ویژگی‌های جدید %s است!", "dl.php_check_logs_make_sure_session_running": "هم ربات ایونت‌هندلر مدلین‌پروتو مرتبط و هم سرور IPC مدلین‌پروتو آفلاین هستند، لطفا لاگ‌ها را بررسی کنید و مطمئن شوید حداقل یکی از آنها در حال اجراست!", - "invalid_dl.php_session": "%s یک اسکریپت دانلود درست و معتبر نیست چرا که سشن‌آیدی متفاوت است (انتظار این سشن‌آیدی وجود داشت: %s، اما این دریافت شد: %s)", "account_banned": "!!!!!!! اخطار !!!!!!!\nسیستم جلوگیری از فلود تلگرام، این حساب را معلق کرده.\nبرای ادامه، تایید دستی نیاز است.\nیک ایمیل به recover@telegram.org بفرستید، و از آنها آزادسازی شماره %s را جویا باشید، و کوتاه توضیح دهید که چه کاری با این شماره انجام خواهید داد.\nسپس دوباره وارد شوید.\nاگر از قصد این حساب را حذف کرده‌اید، این پیام را نادیده بگیرید.", "plugin_path_does_not_exist": "مسیر پلاگین %s وجود ندارد!", - "string_required": "مقدار مورد انتظار رشته است!", - "waveform_must_have_100_values": "آرایه waveformباید 100 مقدار داشته باشد(سایز مورد انتظار 100 است ) !", - "waveform_value": "مقدار عددیwaveform باید بین 0 تا 31 باشد!", - "could_not_convert_object": "نمیتوان مقدار آبجکت تایپ %s را تبدیل کرد", - "mmapErrorPart1": "بیشترین مقدار حافظه تخصیص داده شده (mmap ) پر شده است (%s ) : لطفا از داخل کانفیگ های مربوط به کرنل مقدار vm.max_map_count را به مقدار 262144 افزایش دهیدتا مشکل رفع گردد.", "could_not_connect_to_MadelineProto": "نمی توان به مدلین‌پروتو متصل شد، لطفاً proc_open را فعال کنید و محدودیت open_basedir را بردارید، یا بازنویسی مسیر وب سرور را غیرفعال کنید تا مشکل رفع شود! اگر این کار را کردید، مطمئن شوید که نسخه PHP در کامندلاین و وبسرور دقیقا یکی است (ورژن یکسان، افزونه‌های یکسان و...) و برای کسب اطلاعات بیشتر راجب اروری که مانع شروع IPC server میشود، فایل MadelineProto.log را بررسی کنید.", - "do_not_use_yield": "مدلین‌پروتو نسخه 8 نیازی به yield در توابع async ندارد و حتی آن را پشتیبانی هم نمیکند، شما باید تمام کلمات کلیدی yield را که قبلا در اجرای توابع async به کار میرفتند حذف کنید", - "windows_warning": "برای کاربران ویندوزی: لطفا اگر این ناموفق بود به لینوکس کوچ کنید. همچنین میتوانید تلاش کنید تا تنظیمات فایروال خود را تغییر دهید تا به تمام پروسه‌های PHP اجازه ساخت سوکت را بدهید (100 درصد تغییر سیستم به لینوکس آسان‌تر است، مدلین‌پروتو در لینوکس خارج از باکس کار میکند، نیازی به تغییر ندارد)", - "translate_madelineproto_web": "مدلین‌پروتو را می‌توان به زبان شما ترجمه کرد (پیشرفت ترجمه فعلی: %d%%)، برای مشارکت در ترجمه اینجا را کلیک کنید!", - "translate_madelineproto_cli": "مدلین‌پروتو را می‌توان به زبان شما ترجمه کرد (پیشرفت ترجمه فعلی: %d%%)، برای مشارکت در ترجمه به https://weblate.madelineproto.xyz بروید!", - "baseDirLimitation": "یک محدودیت basedir پیکربندی شده است: این میتواند روی پرفورمنس تاثیر بگذارد و باعث ایجاد مشکلات شود، لطفا در صورت امکان آن را غیرفعال کنید!" + "translate_madelineproto_web": "مدلین‌پروتو را می‌توان به زبان شما ترجمه کرد (پیشرفت ترجمه فعلی: %d%%)، برای مشارکت در ترجمه اینجا را کلیک کنید!", + "translate_madelineproto_cli": "مدلین‌پروتو را می‌توان به زبان شما ترجمه کرد (پیشرفت ترجمه فعلی: %d%%)، برای مشارکت در ترجمه به https://github.com/danog/MadelineProto/tree/v8/langs بروید!", + "apiInvalidWeb": "API ID یک عدد است و API Hash ۳۲ کاراکتر دارد: آن‌ها را دوباره از my.telegram.org کپی کنید.", + "webDoneLead": "MadelineProto روی سرور به اجرا ادامه می‌دهد: می‌توانید این صفحه را ببندید.", + "apiChooseManualAuto": "می‌خواهید API ID و API Hash را به‌صورت خودکار از my.telegram.org دریافت کنید (a)، یا آن‌ها را دستی وارد کنید (m)؟", + "apiAutoFallbackManual": "به‌جای آن، API ID و API Hash را دستی وارد کنید.", + "apiSetupTitleWeb": "API ID و API Hash خود را دریافت کنید", + "apiSetupLeadWeb": "هر برنامه Telegram به یک API ID و API Hash نیاز دارد. MadelineProto می‌تواند آن‌ها را با شماره تلفن یک حساب Telegram موجود، از my.telegram.org برایتان دریافت کند.", + "apiAutoPhoneHintWeb": "my.telegram.org کد ورود را به برنامه Telegram شما می‌فرستد، نه با پیامک.", + "apiSendCodeWeb": "ارسال کد", + "apiChooseManualWeb": "از قبل API ID دارم", + "apiChooseAutoWeb": "دریافت خودکار", + "apiStartOverWeb": "شروع دوباره", + "apiAutoCodeTitleWeb": "کد دریافتی از Telegram را وارد کنید", + "apiAutoCodeLeadWeb": "my.telegram.org یک کد ورود به برنامه Telegram شما، در گفتگو با Telegram فرستاد (نه با پیامک).", + "apiAutoCodeLabelWeb": "کد ورود", + "apiCreateTitleWeb": "برنامه خود را بسازید", + "apiCreateLeadWeb": "این حساب هنوز هیچ برنامه‌ای در my.telegram.org ندارد. این اطلاعات فقط به شما نمایش داده می‌شود و بعداً قابل تغییر است.", + "apiAppTitleLabelWeb": "نام برنامه", + "apiAppShortNameLabelWeb": "نام کوتاه", + "apiAppUrlLabelWeb": "لینک", + "apiAppDescLabelWeb": "توضیحات", + "apiCreateWeb": "ساخت برنامه", + "apiSaveWeb": "ذخیره و ادامه", + "apiAutoErrorTitle": "my.telegram.org خطا برگرداند", + "apiCreateErrorTitle": "my.telegram.org برنامه را نساخت", + "apiCreateVpsWarning": "Telegram اجازه نمی‌دهد از IPهای VPS، VPN و دیگر محدوده‌های IP دیتاسنترها برنامه جدید در my.telegram.org ساخته شود، و این درخواست از IP دستگاهی ارسال شد که MadelineProto را اجرا می‌کند. برنامه را به‌صورت دستی در https://my.telegram.org با یک اتصال خانگی (مثلاً گوشی خود با اینترنت همراه) بسازید، سپس API ID و API Hash را وارد کنید.", + "loginTitleWeb": "ورود به Telegram", + "loginLeadWeb": "حساب یا رباتی را انتخاب کنید که این نمونه MadelineProto با آن اجرا خواهد شد.", + "loginTypeWeb": "ورود به عنوان", + "loginUserPhoneHintWeb": "همراه با کد کشور، مانند +39 123 456 7890.", + "loginBotTokenHintWeb": "توکنی که @BotFather هنگام ساخت ربات به شما داد.", + "loginCodeTitleWeb": "کد ورود را وارد کنید", + "loginCodeLeadWeb": "Telegram یک کد ورود به برنامه Telegram شما فرستاد، یا اگر جای دیگری وارد نشده باشید، با پیامک.", + "loginPasswordTitleWeb": "تأیید دو مرحله‌ای", + "loginPasswordLeadWeb": "این حساب با رمز عبوری محافظت می‌شود که در تنظیمات > حریم خصوصی و امنیت > تأیید دو مرحله‌ای تعیین شده است.", + "loginPasswordLabelWeb": "رمز عبور", + "signupTitleWeb": "حساب خود را بسازید", + "signupLeadWeb": "این شماره تلفن هنوز در Telegram ثبت نشده است: نام حساب جدید را انتخاب کنید.", + "webContinue": "ادامه", + "webLogin": "ورود", + "webError": "%s. آن را بررسی کنید و دوباره امتحان کنید.", + "webStepApp": "API ID و API Hash", + "webStepAccount": "حساب", + "webStepVerify": "تأیید", + "webStepDone": "در حال اجرا", + "webProgress": "پیشرفت راه‌اندازی", + "webDocs": "مستندات", + "webOptional": "اختیاری", + "webShowPassword": "نمایش", + "webHidePassword": "پنهان کردن", + "webQrTitle": "ورود با QR Code", + "webQrWaiting": "در انتظار اسکن…", + "webFieldRequired": "این فیلد را پر کنید.", + "webPhoneInvalid": "شماره تلفن را همراه با کد کشور وارد کنید، مانند +39 123 456 7890.", + "tweb.Login.Title": "ورود به MadelineProto", + "tweb.Login.PhoneLabelInvalid": "شماره تلفن نامعتبر است", + "tweb.Login.StartText": "لطفاً کد کشور خود را تأیید کنید\nو شماره تلفن خود را وارد کنید.", + "tweb.Login.Code.SentSms": "کد را با پیامک\nبرایتان فرستادیم.", + "tweb.Login.Code.SentInApp": "کد را در پیامی در Telegram\nبرایتان فرستادیم.", + "tweb.Login.Code.SentCall": "با شما تماس می‌گیریم و\nکد را برایتان می‌خوانیم.", + "tweb.Login.Code.SentEmail": "لطفاً ایمیل خود **%s** را بررسی کنید (پوشه اسپم را فراموش نکنید) و کدی را که همین حالا فرستادیم وارد کنید.", + "tweb.Login.Code.SentUnknown": "لطفاً همه‌جا را برای یافتن\nکد بررسی کنید (نوع: %s)", + "tweb.Login.Code.SentMissedCall": "تا چند ثانیه دیگر یک تماس کوتاه\nاز **%s** دریافت می‌کنید. به آن پاسخ ندهید —\nفقط ارقام آخر آن شماره را وارد کنید.", + "tweb.Login.Code.SentSmsWord": "یک پیامک حاوی کلمه مخفی\nبه شماره **%s** فرستادیم.", + "tweb.Login.Code.SentSmsWordBeginning": "یک پیامک حاوی کلمه مخفی که با\n\"**%2$s**\" شروع می‌شود به شماره **%1$s** فرستادیم.", + "tweb.Login.Code.SentSmsPhrase": "یک پیامک حاوی عبارت مخفی\nبه شماره **%s** فرستادیم.", + "tweb.Login.Code.SentSmsPhraseBeginning": "یک پیامک حاوی عبارت مخفی که با\n\"**%2$s**\" شروع می‌شود به شماره **%1$s** فرستادیم.", + "tweb.Login.Code.SecretWord": "کلمه مخفی", + "tweb.Login.Code.SecretPhrase": "عبارت مخفی", + "tweb.Login.Code.WordInvalid": "نادرست است، لطفاً دوباره امتحان کنید", + "tweb.Login.Code.WordBeginningInvalid": "کلمه نادرست", + "tweb.Login.Password.Title": "رمز عبور خود را وارد کنید", + "tweb.Login.Password.Subtitle": "حساب شما با یک رمز عبور\nاضافی محافظت می‌شود", + "tweb.Login.Register.Subtitle": "برای ساخت حساب\nنام خود را وارد کنید", + "tweb.PleaseWait": "لطفاً صبر کنید...", + "tweb.Code": "کد", + "tweb.LoginPassword": "رمز عبور", + "tweb.YourName": "نام شما", + "tweb.FirstName": "نام (الزامی)", + "tweb.LastName": "نام خانوادگی (اختیاری)", + "tweb.StartMessaging": "شروع پیام‌رسانی", + "tweb.Country": "کشور", + "tweb.Contacts.PhoneNumber.Placeholder": "شماره تلفن", + "tweb.Login.Next": "بعدی", + "tweb.Login.QR.Title": "ورود با QR Code", + "tweb.Login.QR.Help1": "Telegram را در گوشی خود باز کنید", + "tweb.Login.QR.Help2": "به **تنظیمات** > **دستگاه‌ها** > **افزودن دستگاه** بروید", + "tweb.Login.QR.Help3": "گوشی خود را به سمت این صفحه بگیرید تا ورود را تأیید کنید", + "tweb.Login.QR.Cancel": "ورود با شماره تلفن >", + "tweb.Login.QR.Login": "ورود با QR Code >", + "tweb.Login.QR.Subtitle": "با برنامه Telegram روی گوشی خود اسکن کنید", + "tweb.PhoneNumber.Code.Fragment.Info": "کد را از بخش شماره‌ها در [Fragment]() دریافت کنید", + "tweb.PHONE_CODE_INVALID": "کد نامعتبر است", + "tweb.PHONE_CODE_EXPIRED": "کد منقضی شده است", + "tweb.PASSWORD_HASH_INVALID": "رمز عبور نادرست است", + "tweb.DarkMode": "حالت تاریک", + "tweb.Error.AnError": "خطایی رخ داد. لطفاً بعداً دوباره امتحان کنید.", + "tweb.AccDescr.LoginCode": "کد ورود", + "tweb.Login.Bot": "ورود به عنوان ربات >", + "tweb.Login.Bot.Title": "ورود به عنوان ربات", + "tweb.Login.Bot.Subtitle": "توکنی را که @BotFather هنگام ساخت ربات\nبه شما داد وارد کنید.", + "tweb.Login.Bot.Token": "توکن ربات", + "tweb.Login.Bot.Cancel": "ورود به عنوان کاربر >", + "tweb.Optional": "اختیاری", + "tweb.PHONE_NUMBER_INVALID": "شماره تلفن نامعتبر است", + "tweb.PHONE_NUMBER_BANNED": "این شماره تلفن مسدود شده است", + "tweb.PHONE_NUMBER_FLOOD": "تلاش‌های بیش از حد، بعداً دوباره امتحان کنید", + "tweb.PHONE_CODE_EMPTY": "کد نامعتبر است", + "tweb.PHONE_PASSWORD_FLOOD": "تلاش‌های بیش از حد، بعداً دوباره امتحان کنید", + "tweb.ACCESS_TOKEN_INVALID": "توکن ربات نامعتبر است", + "tweb.ACCESS_TOKEN_EXPIRED": "این توکن ربات باطل شده است", + "tweb.FIRSTNAME_INVALID": "نام نامعتبر است", + "tweb.LASTNAME_INVALID": "نام خانوادگی نامعتبر است", + "tweb.Close": "بستن" } diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/fr.json b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/fr.json index c49e3c2..9f64034 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/fr.json +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/fr.json @@ -1,61 +1,274 @@ { + "baseDirLimitation": "Une restriction basedir est configurée: cela peut affecter les performances et causer des problèmes, veuillez la désactiver si possible!", + "noReportPeers": "Avertissement: aucun destinataire des rapports (report peers) n'est défini, veuillez ajouter la méthode suivante à votre gestionnaire d'événements", + "manualAdminActionRequired": "!!!!!!!!! INTERVENTION MANUELLE DE L'ADMINISTRATEUR SYSTÈME REQUISE !!!!!!!!!", + "mmapErrorPart1": "Le nombre maximal de régions mappées en mémoire (mmap) a été atteint (%s): pour corriger le problème, veuillez augmenter le paramètre du noyau vm.max_map_count à 262144.", + "mmapErrorPart2": "Pour corriger le problème, exécutez la commande suivante en tant que root: %s", + "mmapErrorPart3": "Pour conserver la modification après un redémarrage: %s", + "mmapErrorPart4": "Sous Windows et WSL, augmenter la taille du fichier d'échange peut aider; veuillez passer à un Linux natif si le problème persiste.", + "botAlreadyRunning": "Le bot est déjà en cours d'exécution!", + "extensionRequired": "MadelineProto nécessite l'extension %s pour fonctionner. %s", + "extensionRequiredInstallWithApt": "Essayez d'exécuter sudo apt-get install %s.", + "extensionRequiredInstallWithCustomInstructions": "Suivez les instructions sur %s pour l'installer.", + "extensionRecommended": "Avertissement: l'extension %s n'est pas installée, veuillez l'installer pour accélérer MadelineProto!", + "go": "Valider", + "apiChooseManualAutoTip": "Notez que vous pouvez également fournir l'API ID/hash directement dans le code via les paramètres: %s", + "apiChooseManualAutoTipWeb": "Notez que vous pouvez également fournir l'API ID/hash directement dans le code via les paramètres.", + "apiChoosePrompt": "Votre choix (m/a): ", + "apiManualInstructions0": "Connectez-vous à https://my.telegram.org", + "apiManualInstructions1": "Allez dans « API development tools »", + "apiManualInstructions2": "Cliquez sur « Create application »", + "apiAppInstructionsManual0": "le nom de votre application, peut être n'importe quoi", + "apiAppInstructionsManual1": "le nom court de votre application, alphanumérique, 5-32 caractères", + "apiAppInstructionsManual2": "l'URL de votre application/site web, ou t.me/yourusername", + "apiAppInstructionsManual3": "n'importe quoi", + "apiAppInstructionsManual4": "Décrivez votre application ici", + "apiManualWeb": "Entrez votre API ID et votre API hash", + "apiManualPrompt0": "Entrez votre API ID: ", + "apiManualPrompt1": "Entrez votre API hash: ", + "apiAutoWeb": "Entrez un numéro de téléphone déjà enregistré sur Telegram pour obtenir l'API ID", + "apiAutoPrompt0": "Entrez un numéro de téléphone déjà enregistré sur Telegram: ", + "apiAutoPrompt1": "Saisissez le code de vérification que vous avez reçu dans Telegram : ", + "apiAppWeb": "Entrez les informations de l'API", + "apiAppInstructionsAuto0": "Entrez le nom de l'application, peut être n'importe quoi: ", + "apiAppInstructionsAuto1": "Entrez le nom court de l'application, alphanumérique, 5-32 caractères: ", + "apiAppInstructionsAuto2": "Entrez l'URL de l'application/du site web, ou t.me/yourusername: ", + "apiAppInstructionsAuto3": "Entrez la plateforme de l'application: ", + "apiAppInstructionsAuto4": "Décrivez votre application: ", + "apiAppInstructionsAutoTypeOther": "Autre (à préciser dans la description)", + "apiParamsError": "Vous n'avez pas fourni tous les paramètres requis!", + "apiError": "ERREUR: %s. Essayez de nouveau.", + "loginChoosePromptWeb": "Voulez-vous vous connecter en tant qu'utilisateur ou en tant que bot?", + "loginWebQr": "Vous pouvez également vous connecter automatiquement en ouvrant Telegram sur votre téléphone, en allant dans Paramètres > Appareils > Lier un appareil de bureau et en scannant le code QR suivant:", + "loginWebQr1": "Ouvrez Telegram sur votre téléphone", + "loginWebQr2": "Allez dans Paramètres > Appareils > Lier un appareil de bureau", + "loginWebQr3": "Pointez votre téléphone vers cet écran pour confirmer la connexion", + "loginOptionBot": "Bot", + "loginOptionUser": "Utilisateur", + "loginBot": "Entrez le token de votre bot: ", + "loginUser": "Entrez votre numéro de téléphone: ", + "loginQr": "Ouvrez Telegram sur votre téléphone, allez dans Paramètres > Appareils > Lier un appareil de bureau et scannez le code QR ci-dessus pour vous connecter automatiquement.", + "loginQrCodeSuccessful": "Connexion par code QR réussie!", + "loginQrCodeExpired": "Le code QR a expiré, génération d'un nouveau code...", + "loginManual": "Vous pouvez aussi entrer un token de bot ou un numéro de téléphone pour vous connecter manuellement: ", "loginUserCode": "Entrez le code: ", "loginUserPass": "Entrez votre mot de passe (Indice %s): ", "loginUserPassWeb": "Entrez votre mot de passe: ", "loginUserPassHint": "Indice: %s", "signupFirstName": "Entrez votre prénom: ", "signupLastName": "Entrez votre nom de famille (peut être vide): ", - "loginOptionUser": "Utilisateur", - "loginUser": "Entrez votre numéro de téléphone: ", - "file_not_exist": "Le fichier n'existe pas", - "deserialization_error": "Une erreur s'est produite lors de la désérialisation", - "loginUserPhoneCodeWeb": "Code", + "signupWeb": "Inscrivez-vous s'il vous plaît", + "signupFirstNameWeb": "Prénom", + "signupLastNameWeb": "Nom de famille", + "loginNoCode": "Vous n'avez pas fourni de code de vérification!", + "loginNoPass": "Vous n'avez pas fourni le mot de passe!", "loginNoName": "Vous n'avez pas fourni le prénom!", + "loginBotTokenWeb": "Token du bot", "loginUserPhoneWeb": "Numéro de téléphone", - "login_user": "Connexion en tant qu'utilisateur normal...", + "loginUserPhoneCodeWeb": "Code", + "done": "Terminé!", + "nearest_dc": "Nous sommes en %s, le DC le plus proche est %d.", + "serialization_ofd": "La sérialisation est obsolète, reconstruction de l'objet!", + "api_not_set": "Vous devez fournir une clé API et un ID API, obtenez les vôtres sur my.telegram.org", + "session_corrupted": "La session est corrompue!", + "value_bigger_than_2147483647": "La valeur fournie %s est supérieure à 2147483647", + "value_smaller_than_2147483648": "La valeur fournie %s est inférieure à -2147483648", + "value_bigger_than_9223372036854775807": "La valeur fournie %s est supérieure à 9223372036854775807", + "value_smaller_than_9223372036854775808": "La valeur fournie %s est inférieure à -9223372036854775808", + "value_bigger_than_4294967296": "La valeur fournie %s est supérieure à 4294967296", + "value_smaller_than_0": "La valeur fournie %s est inférieure à 0", + "encode_double_error": "Impossible d'encoder correctement le double", + "file_not_exist": "Le fichier n'existe pas", + "deserialization_error": "Une erreur s'est produite lors de la désérialisation", + "rpc_tg_error": "Telegram a renvoyé une erreur RPC: %s (%s), causée par %s:%s%sTrace TL:", "madelineproto_ready": "MadelineProto est prêt!", "logout_ok": "Déconnecté avec succès!", "already_loggedIn": "Cette instance de MadelineProto est déjà connectée!", "login_ok": "Connecté avec succès!", - "apiManualInstructions0": "Connectez-vous à https://my.telegram.org", - "apiAutoPrompt1": "Saisissez le code de vérification que vous avez reçu dans Telegram : ", - "params_missing": "Paramètre requis manquant", - "array_invalid": "Vous n'avez pas fourni de tableau valide", - "not_numeric": "La valeur donnée n'est pas numérique", - "non_text_conversion": "Impossible de convertir des messages non textuels pour le moment!", - "signup_ok": "Inscription réussie!", + "login_user": "Connexion en tant qu'utilisateur normal...", + "login_bot": "Connexion en tant que bot...", "login_code_sending": "Envoi du code...", "login_code_sent": "Code envoyé avec succès! Une fois que vous avez reçu le code, vous devez utiliser la fonction completePhoneLogin.", - "loginQr": "Scannez le code QR ci-dessus pour vous connecter automatiquement.", - "loginQrCodeSuccessful": "Connexion par code QR réussie!", - "loginWebQr": "Vous pouvez également vous connecter automatiquement en scannant le code QR suivant:", - "loginWebQr1": "Ouvrez Telegram sur votre téléphone", - "loginNoPass": "Vous n'avez pas fourni le mot de passe!", - "signupFirstNameWeb": "Prénom", - "signupLastNameWeb": "Nom de famille", - "serialization_ofd": "La sérialisation est obsolète, reconstruction de l'objet!", - "session_corrupted": "La session est corrompue!", - "apiParamsError": "Vous n'avez pas fourni tous les paramètres requis!", - "apiError": "ERREUR: %s. Essayez de nouveau.", - "signupWeb": "Inscrivez-vous s'il vous plaît", - "loginWebQr3": "Pointez votre téléphone vers cet écran pour confirmer la connexion", + "login_code_uncalled": "Je n'attends pas de code! Veuillez d'abord appeler la méthode phoneLogin", "login_2fa_enabled": "2FA activé, vous devrez appeler la fonction complete2falogin...", + "login_need_signup": "Aucun compte n'a été créé pour ce numéro, vous devrez appeler la fonction completeSignup...", + "login_auth_key": "Connexion avec la clé d'autorisation...", + "not_loggedIn": "Je ne suis pas connecté!", + "signup_uncalled": "Je n'attends pas d'inscription! Veuillez d'abord appeler les méthodes phoneLogin et completePhoneLogin!", "signing_up": "Inscription en tant qu'utilisateur normal...", - "value_bigger_than_9223372036854775807": "La valeur fournie %s est supérieure à 9223372036854775807", - "value_smaller_than_9223372036854775808": "La valeur fournie %s est inférieure à -9223372036854775808", - "value_bigger_than_4294967296": "La valeur fournie %s est supérieure à 4294967296", - "value_smaller_than_0": "La valeur fournie %s est inférieure à 0", - "value_bigger_than_2147483647": "La valeur fournie %s est supérieure à 2147483647", - "value_smaller_than_2147483648": "La valeur fournie %s est inférieure à -2147483648", + "signup_ok": "Inscription réussie!", + "2fa_uncalled": "Je n'attends pas le mot de passe! Veuillez d'abord appeler les méthodes phoneLogin et completePhoneLogin!", + "peer_not_in_db": "Ce peer n'est pas présent dans la base de données interne des peers", "call_error_1": "Impossible de trouver et d'accepter l'appel %s", "accepting_call": "Acceptation de l'appel de %s...", + "call_already_accepted": "Appel %s déjà accepté", + "call_already_declined": "Appel %s déjà refusé", "call_error_2": "Impossible de trouver et de confirmer l'appel %s", + "call_confirming": "Confirmation de l'appel de %s...", + "call_error_3": "Impossible de trouver et de finaliser l'appel %s", + "call_completing": "Finalisation de l'appel de %s...", + "fingerprint_invalid": "Empreinte de clé invalide!", + "call_discarding": "Abandon de l'appel %s...", + "file_parsing": "Analyse de %s...", + "src_file_invalid": "Un fichier source invalide a été fourni: ", + "bool_error": "Impossible d'extraire le booléen", + "not_numeric": "La valeur donnée n'est pas numérique", "long_not_16": "La valeur donnée ne fait pas 16 octets", "long_not_32": "La valeur donnée ne fait pas 32 octets", "long_not_64": "La valeur donnée ne fait pas 64 octets", - "call_error_3": "Impossible de trouver et de terminer l'appel %s", - "call_completing": "Fin de l'appel de %s...", - "call_confirming": "Confirmation de l'appel de %s...", - "call_discarding": "Abandon de l'appel %s...", - "file_parsing": "Analyse de %s..." + "array_invalid": "Vous n'avez pas fourni de tableau valide", + "predicate_not_set": "Le prédicat (valeur sous _) n'a pas été défini!", + "update_madelineproto": "Vous utilisez une ancienne version de MadelineProto, une mise à jour est requise: vous utilisez actuellement la version %s, mais la dernière version, avec de nombreuses corrections de bugs et nouvelles fonctionnalités, est la %s!", + "type_extract_error": "Impossible d'extraire le type \"%s\", vous devriez mettre à jour MadelineProto!", + "method_not_found": "Méthode introuvable: ", + "params_missing": "Paramètre requis manquant", + "sec_peer_not_in_db": "Ce peer secret n'est pas présent dans la base de données interne des peers", + "stream_handle_invalid": "Un handle de flux invalide a été fourni.", + "length_too_big": "La longueur est trop grande", + "string_required": "Une chaîne était attendue!", + "waveform_must_have_100_values": "Un tableau de forme d'onde doit contenir 100 valeurs!", + "waveform_value": "Une valeur de forme d'onde doit être comprise entre 0 et 31!", + "could_not_convert_object": "Impossible de convertir l'objet de type %s", + "type_extract_error_id": "Impossible d'extraire le type %s avec l'id %s, vous devriez mettre à jour MadelineProto!", + "constructor_not_found": "Constructeur introuvable pour le type: ", + "botapi_conversion_error": "Impossible de convertir %s en objet de la bot API", + "non_text_conversion": "Impossible de convertir des messages non textuels pour le moment!", + "file_type_invalid": "Type de fichier invalide détecté (%s)", + "static_analysis_minor": "Un problème mineur a été détecté lors de l'analyse statique de %s: %s", + "static_analysis_severe": "Un problème grave a été détecté lors de l'analyse statique de %s: %s", + "secret_chat_skipping": "Je n'ai pas le chat secret %s dans la base de données, message ignoré...", + "must_have_declare_types": "pour des raisons de performance, la première instruction d'un fichier de gestionnaire d'événements doit être \"declare(strict_types=1);\"", + "do_not_delete_MadelineProto.log": "le fichier MadelineProto.log ne doit jamais être supprimé, veuillez plutôt définir une taille maximale personnalisée dans les paramètres!", + "do_not_remove_MadelineProto.log_phar": "Veuillez ne pas supprimer madeline.phar ou madeline.php, sinon MadelineProto plantera. Si vous rencontrez un problème avec MadelineProto, signalez-le sur https://github.com/danog/MadelineProto ou https://t.me/pwrtelegramgroup", + "do_not_use_blocking_function": "pour des raisons de performance, les gestionnaires d'événements ne peuvent pas utiliser la fonction bloquante non asynchrone %s, veuillez plutôt utiliser %s", + "do_not_use_blocking_class": "pour des raisons de performance, les gestionnaires ne peuvent pas utiliser la classe bloquante non asynchrone %s, veuillez plutôt utiliser %s", + "do_not_use_deprecated_function": "la fonction %s est obsolète, veuillez plutôt utiliser %s", + "do_not_use_non_root_require_in_event_handler": "pour des raisons de performance, vous ne devez pas utiliser require ou include à l'intérieur d'une classe de gestionnaire d'événements, seuls les require au niveau racine sont autorisés.", + "do_not_use_yield": "MadelineProto 8 ne nécessite pas et ne prend pas en charge l'utilisation de yield dans les fonctions asynchrones, vous devez supprimer tous les mots-clés yield utilisés auparavant pour les appels de fonctions asynchrones", + "recommend_not_use_filesystem_function": "l'utilisation de la fonction %s n'est pas recommandée, car accéder au système de fichiers pendant le traitement des mises à jour ralentira votre bot, consultez https://docs.madelineproto.xyz/docs/UPDATES.html#avoiding-the-use-of-filesystem-functions pour une liste de méthodes alternatives de stockage des données qui ne ralentiront pas votre bot!", + "plugins_do_not_use_require": "pour des raisons de performance, les plugins ne peuvent inclure ou requérir automatiquement d'autres fichiers présents dans le dossier des plugins qu'en déclenchant l'autoloader PSR-4 (et non en les incluant manuellement avec require()).", + "plugins_must_have_exactly_one_class": "un plugin doit définir exactement une classe! Pour définir plusieurs classes, interfaces ou traits, créez des fichiers séparés, ils seront chargés automatiquement par MadelineProto.", + "cli_need_dl.php_link": "Veuillez spécifier l'URL d'un script de téléchargement lorsque vous utilisez getDownloadLink en CLI!", + "invalid_dl.php_session": "%s n'est pas un script de téléchargement valide car son ID de session est différent (attendu %s, obtenu %s)", + "need_dl.php": "Impossible de générer le script de téléchargement par défaut (%s), veuillez créer un fichier dl.php avec le contenu suivant: %s et passer son URL comme deuxième paramètre de getDownloadLink", + "dl.php_powered_by_madelineproto": "Serveur de téléchargement de fichiers Telegram (jusqu'à 4 Go), propulsé par MadelineProto!
Cliquez ici pour savoir comment configurer votre propre serveur de téléchargement de fichiers Telegram!", + "dl.php_check_logs_make_sure_session_running": "Le bot EventHandler MadelineProto associé ou le serveur IPC MadelineProto est hors ligne, veuillez vérifier les logs et vous assurer qu'au moins l'un d'eux est en cours d'exécution!", + "account_banned": "!!!!!!! AVERTISSEMENT !!!!!!!\nLe système anti-flood de Telegram a suspendu ce compte.\nPour continuer, une vérification manuelle est requise.\nEnvoyez un e-mail à recover@telegram.org pour demander le débannissement du numéro de téléphone %s, en décrivant brièvement ce que vous ferez avec ce numéro.\nPuis connectez-vous à nouveau.\nSi vous avez supprimé ce compte intentionnellement, ignorez ce message.", + "plugin_path_does_not_exist": "Le chemin du plugin %s n'existe pas!", + "could_not_connect_to_MadelineProto": "Impossible de se connecter à MadelineProto, veuillez activer proc_open et supprimer les restrictions open_basedir ou désactiver la réécriture des chemins du serveur web pour corriger le problème! Si c'est déjà fait, assurez-vous que la version CLI de PHP est exactement la même que la version web (même version, mêmes extensions, etc.) et consultez le fichier MadelineProto.log pour plus d'informations sur l'erreur qui a empêché le démarrage du serveur IPC.", + "translate_madelineproto_web": "MadelineProto peut être traduit dans votre langue (progression actuelle de la traduction: %d%%), cliquez ici pour contribuer à la traduction!", + "translate_madelineproto_cli": "MadelineProto peut être traduit dans votre langue (progression actuelle de la traduction: %d%%), rendez-vous sur https://github.com/danog/MadelineProto/tree/v8/langs pour contribuer à la traduction!", + "apiInvalidWeb": "L'API ID est un nombre et l'API hash fait 32 caractères : copiez-les à nouveau depuis my.telegram.org.", + "webDoneLead": "MadelineProto continue de tourner sur le serveur : vous pouvez fermer cette page.", + "apiChooseManualAuto": "Voulez-vous obtenir l'API ID et le hash automatiquement depuis my.telegram.org (a), ou les saisir manuellement (m) ?", + "apiAutoFallbackManual": "Saisissez plutôt l'API ID et le hash manuellement.", + "apiSetupTitleWeb": "Obtenez votre API ID et votre hash", + "apiSetupLeadWeb": "Chaque application Telegram a besoin d'un API ID et d'un hash. MadelineProto peut les obtenir pour vous depuis my.telegram.org, avec le numéro de téléphone d'un compte Telegram existant.", + "apiAutoPhoneHintWeb": "my.telegram.org envoie le code de connexion à votre application Telegram, pas par SMS.", + "apiSendCodeWeb": "Envoyer le code", + "apiChooseManualWeb": "J'ai déjà un API ID", + "apiChooseAutoWeb": "Les obtenir automatiquement", + "apiStartOverWeb": "Recommencer", + "apiAutoCodeTitleWeb": "Entrez le code reçu dans Telegram", + "apiAutoCodeLeadWeb": "my.telegram.org a envoyé un code de connexion à votre application Telegram, dans la discussion avec Telegram (pas par SMS).", + "apiAutoCodeLabelWeb": "Code de connexion", + "apiCreateTitleWeb": "Créez votre application", + "apiCreateLeadWeb": "Ce compte n'a pas encore d'application sur my.telegram.org. Ces informations ne sont visibles que par vous et pourront être modifiées plus tard.", + "apiAppTitleLabelWeb": "Nom de l'application", + "apiAppShortNameLabelWeb": "Nom court", + "apiAppUrlLabelWeb": "URL", + "apiAppDescLabelWeb": "Description", + "apiCreateWeb": "Créer l'application", + "apiSaveWeb": "Enregistrer et continuer", + "apiAutoErrorTitle": "my.telegram.org a renvoyé une erreur", + "apiCreateErrorTitle": "my.telegram.org n'a pas créé l'application", + "apiCreateVpsWarning": "Telegram ne permet pas aux plages d'IP de VPS, de VPN et autres centres de données de créer de nouvelles applications sur my.telegram.org, et la requête a été faite depuis l'IP de la machine qui exécute MadelineProto. Créez l'application manuellement sur https://my.telegram.org depuis une connexion résidentielle (comme votre téléphone en données mobiles), puis saisissez l'API ID et le hash.", + "loginTitleWeb": "Connexion à Telegram", + "loginLeadWeb": "Choisissez le compte ou le bot sous lequel cette instance de MadelineProto fonctionnera.", + "loginTypeWeb": "Se connecter en tant que", + "loginUserPhoneHintWeb": "Avec l'indicatif du pays, par exemple +39 123 456 7890.", + "loginBotTokenHintWeb": "Le token que @BotFather vous a donné lors de la création du bot.", + "loginCodeTitleWeb": "Entrez le code de connexion", + "loginCodeLeadWeb": "Telegram a envoyé un code de connexion à votre application Telegram, ou par SMS si vous n'êtes connecté nulle part ailleurs.", + "loginPasswordTitleWeb": "Validation en deux étapes", + "loginPasswordLeadWeb": "Ce compte est protégé par un mot de passe, défini dans Paramètres > Confidentialité et sécurité > Validation en deux étapes.", + "loginPasswordLabelWeb": "Mot de passe", + "signupTitleWeb": "Créez votre compte", + "signupLeadWeb": "Ce numéro de téléphone n'est pas encore sur Telegram : choisissez le nom du nouveau compte.", + "webContinue": "Continuer", + "webLogin": "Se connecter", + "webError": "%s. Vérifiez et réessayez.", + "webStepApp": "API ID et hash", + "webStepAccount": "Compte", + "webStepVerify": "Vérification", + "webStepDone": "En cours d'exécution", + "webProgress": "Progression de la configuration", + "webDocs": "Documentation", + "webOptional": "facultatif", + "webShowPassword": "Afficher", + "webHidePassword": "Masquer", + "webQrTitle": "Se connecter avec un code QR", + "webQrWaiting": "En attente du scan…", + "webFieldRequired": "Veuillez remplir ce champ.", + "webPhoneInvalid": "Entrez le numéro de téléphone avec l'indicatif du pays, par exemple +39 123 456 7890.", + "tweb.Login.Title": "Connexion à MadelineProto", + "tweb.Login.PhoneLabelInvalid": "Numéro de téléphone invalide", + "tweb.Login.StartText": "Veuillez confirmer l'indicatif de votre pays\net entrer votre numéro de téléphone.", + "tweb.Login.Code.SentSms": "Nous vous avons envoyé un SMS\navec le code.", + "tweb.Login.Code.SentInApp": "Nous vous avons envoyé un message dans Telegram\navec le code.", + "tweb.Login.Code.SentCall": "Nous allons vous appeler pour vous dicter\nle code.", + "tweb.Login.Code.SentEmail": "Veuillez consulter votre e-mail **%s** (sans oublier le dossier des spams) et entrer le code que nous venons de vous envoyer.", + "tweb.Login.Code.SentUnknown": "Veuillez chercher un code\npartout (type : %s)", + "tweb.Login.Code.SentMissedCall": "Dans les prochaines secondes, vous allez recevoir\nun bref appel de **%s**. Ne répondez pas :\nentrez simplement les derniers chiffres de ce numéro.", + "tweb.Login.Code.SentSmsWord": "Nous avons envoyé un SMS avec un mot secret\nà votre numéro **%s**.", + "tweb.Login.Code.SentSmsWordBeginning": "Nous avons envoyé un SMS avec un mot secret commençant\npar « **%2$s** » à votre numéro **%1$s**.", + "tweb.Login.Code.SentSmsPhrase": "Nous avons envoyé un SMS avec une phrase secrète\nà votre numéro **%s**.", + "tweb.Login.Code.SentSmsPhraseBeginning": "Nous avons envoyé un SMS avec une phrase secrète commençant\npar « **%2$s** » à votre numéro **%1$s**.", + "tweb.Login.Code.SecretWord": "Mot secret", + "tweb.Login.Code.SecretPhrase": "Phrase secrète", + "tweb.Login.Code.WordInvalid": "Incorrect, veuillez réessayer", + "tweb.Login.Code.WordBeginningInvalid": "Mot incorrect", + "tweb.Login.Password.Title": "Entrez votre mot de passe", + "tweb.Login.Password.Subtitle": "Votre compte est protégé par\nun mot de passe supplémentaire", + "tweb.Login.Register.Subtitle": "Entrez votre nom\npour créer votre compte", + "tweb.PleaseWait": "Veuillez patienter...", + "tweb.Code": "Code", + "tweb.LoginPassword": "Mot de passe", + "tweb.YourName": "Votre nom", + "tweb.FirstName": "Prénom (obligatoire)", + "tweb.LastName": "Nom (facultatif)", + "tweb.StartMessaging": "Commencer", + "tweb.Country": "Pays", + "tweb.Contacts.PhoneNumber.Placeholder": "Numéro de téléphone", + "tweb.Login.Next": "Suivant", + "tweb.Login.QR.Title": "Connexion par code QR", + "tweb.Login.QR.Help1": "Ouvrez Telegram sur votre téléphone", + "tweb.Login.QR.Help2": "Allez dans **Paramètres** > **Appareils** > **Ajouter un appareil**", + "tweb.Login.QR.Help3": "Pointez votre téléphone vers cet écran pour confirmer la connexion", + "tweb.Login.QR.Cancel": "Connexion par numéro de téléphone >", + "tweb.Login.QR.Login": "Connexion par code QR >", + "tweb.Login.QR.Subtitle": "Scannez avec l'application Telegram sur votre téléphone", + "tweb.PhoneNumber.Code.Fragment.Info": "Obtenez le code dans la section Numbers sur [Fragment]()", + "tweb.PHONE_CODE_INVALID": "Code invalide", + "tweb.PHONE_CODE_EXPIRED": "Code expiré", + "tweb.PASSWORD_HASH_INVALID": "Mot de passe incorrect", + "tweb.DarkMode": "Mode sombre", + "tweb.Error.AnError": "Une erreur s'est produite. Veuillez réessayer plus tard.", + "tweb.AccDescr.LoginCode": "Code de connexion", + "tweb.Login.Bot": "Se connecter en tant que bot >", + "tweb.Login.Bot.Title": "Connexion en tant que bot", + "tweb.Login.Bot.Subtitle": "Entrez le token que @BotFather vous a donné\nlors de la création du bot.", + "tweb.Login.Bot.Token": "Token du bot", + "tweb.Login.Bot.Cancel": "Se connecter en tant qu'utilisateur >", + "tweb.Optional": "facultatif", + "tweb.PHONE_NUMBER_INVALID": "Numéro de téléphone invalide", + "tweb.PHONE_NUMBER_BANNED": "Ce numéro de téléphone est banni", + "tweb.PHONE_NUMBER_FLOOD": "Trop de tentatives, réessayez plus tard", + "tweb.PHONE_CODE_EMPTY": "Code invalide", + "tweb.PHONE_PASSWORD_FLOOD": "Trop de tentatives, réessayez plus tard", + "tweb.ACCESS_TOKEN_INVALID": "Token de bot invalide", + "tweb.ACCESS_TOKEN_EXPIRED": "Ce token de bot a été révoqué", + "tweb.FIRSTNAME_INVALID": "Prénom invalide", + "tweb.LASTNAME_INVALID": "Nom invalide", + "tweb.Close": "Fermer" } diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/he.json b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/he.json index f10635a..574fee8 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/he.json +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/he.json @@ -1,4 +1,16 @@ { + "baseDirLimitation": "מגבלת תיקיית בסיס מוגדרת: זה יכול להשפיע על הביצועים ולגרום לבעיות מסוימות, אנא השבת אותה אם אפשר!", + "noReportPeers": "אזהרה: לא מוגדרים עמיתים לדיווח, אנא הוסף את השיטה הבאה למטפל באירועים שלך", + "manualAdminActionRequired": "!!!!!!!!! נדרשת פעולה ידנית של מנהל מערכת !!!!!!!!!", + "mmapErrorPart1": "המספר המרבי של אזורים ממופי זיכרון (mmap) הושג (%s): הגדל את תצורת ליבת vm.max_map_count ל-262144 כדי לתקן.", + "mmapErrorPart2": "כדי לתקן, הפעל את הפקודה הבאה: %s (בתור root)", + "mmapErrorPart3": "כדי להחיל את השינוי לאחר אתחול מחדש: %s", + "mmapErrorPart4": "ב-Windows וב-WSL, הגדלת גודל קובץ הדף עשויה לעזור; אנא עבור ללינוקס מקורית אם הבעיה נמשכת.", + "botAlreadyRunning": "הבוט כבר פועל!", + "extensionRequired": "MadelineProto דורשת את התוסף %s כדי לפעול. %s", + "extensionRequiredInstallWithApt": "נסה להפעיל את sudo apt-get install %s.", + "extensionRequiredInstallWithCustomInstructions": "עקוב אחר ההוראות ב-%s כדי להתקין אותו.", + "extensionRecommended": "אזהרה: התוסף %s אינו מותקן, אנא התקן אותו כדי להאיץ את MadelineProto!", "go": "קדימה", "apiChooseManualAutoTip": "שים לב שאתה יכול גם לספק את מזהה ה-API/hash ישירות בקוד באמצעות ההגדרות: %s", "apiChooseManualAutoTipWeb": "שים לב שאתה יכול גם לספק את מזהה ה-API/hash ישירות בקוד באמצעות ה- הגדרות.", @@ -106,57 +118,157 @@ "long_not_64": "הערך הנתון אינו באורך 64 בתים", "array_invalid": "לא סיפקת מערך חוקי", "predicate_not_set": "פרדיקט (ערך תחת _) לא הוגדר!", + "update_madelineproto": "אתה מפעיל גרסה ישנה של MadelineProto, נדרש עדכון: פועל כעת %s, אך הגרסה האחרונה עם מספר תיקוני באגים ותכונות חדשות היא %s!", "type_extract_error": "לא ניתן היה לחלץ את הסוג \"%s\", נדרש לעדכן את MadelineProto!", "method_not_found": "הפונקציה לא נמצא: ", "params_missing": "חסר פרמטר נדרש", "sec_peer_not_in_db": "עמית סודי זה אינו קיים במסד הנתונים הפנימי של עמיתים", "stream_handle_invalid": "סופק stream handle לא חוקי.", "length_too_big": "האורך גדול מדי", + "string_required": "המחרוזת הייתה צפויה!", + "waveform_must_have_100_values": "מערך צורות גל(waveform ) חייב להיות 100 ערכים!", + "waveform_value": "ערך waveform חייב להיות בין 0 ל-31!", + "could_not_convert_object": "לא ניתן להמיר אובייקט מסוג %s", "type_extract_error_id": "לא ניתן היה לחלץ את הסוג: %s עם מזהה id %s, נדרש לעדכן את MadelineProto!", "constructor_not_found": "הבנאי לא נמצא לסוג: ", "botapi_conversion_error": "לא ניתן להמיר את %s לאובייקט bot API", "non_text_conversion": "עדיין לא ניתן להמיר הודעות שאינן טקסט!", "file_type_invalid": "זוהה סוג קובץ לא חוקי (%s)", + "static_analysis_minor": "נתקלה בבעיה קלה במהלך ניתוח סטטי של %s: %s", + "static_analysis_severe": "נתקלה בבעיה חמורה במהלך ניתוח סטטי של %s: %s", "secret_chat_skipping": "אין לי את הצ'אט הסודי %s במסד הנתונים, דילוג על הודעה...", - "waveform_value": "ערך waveform חייב להיות בין 0 ל-31!", - "string_required": "המחרוזת הייתה צפויה!", - "waveform_must_have_100_values": "מערך צורות גל(waveform ) חייב להיות 100 ערכים!", - "could_not_convert_object": "לא ניתן להמיר אובייקט מסוג %s", + "must_have_declare_types": "מסיבות ביצועים, ההצהרה הראשונה של קובץ מטפל באירוע חייבת להיות \"declare(strict_types=1);\"", "do_not_delete_MadelineProto.log": "אסור למחוק את הקובץ MadelineProto.log, אנא הגדר גודל מקסימלי מותאם אישית בהגדרות, במקום זאת!", "do_not_remove_MadelineProto.log_phar": "נא לא להסיר madeline.phar או madeline.php, אחרת MadelineProto תקרוס. אם יש לך בעיה כלשהי עם MadelineProto, דווח על זה אל https://github.com/danog/MadelineProto או https://t.me/pwrtelegramgroup", - "plugins_must_have_exactly_one_class": "תוסף חייב להגדיר בדיוק מחלקה אחת! כדי להגדיר מספר מחלקות, ממשקים או תכונות, צור קבצים נפרדים, הם ייטענו אוטומטית על ידי MadelineProto באופן אוטומטי.", + "do_not_use_blocking_function": "מטעמי ביצועים, ייתכן שמטפלי אירועים לא ישתמשו בפונקציית החסימה הלא-אסינכרונית %s, אנא השתמש ב-%s, במקום זאת", "do_not_use_blocking_class": "מטעמי ביצועים, מטפלים אינם רשאים להשתמש במחלקה החוסמת ללא אסינכרון %s, אנא השתמש ב-%s, במקום זאת", - "need_dl.php": "לא ניתן ליצור סקריפט הורדה כברירת מחדל (%s), אנא צור קובץ dl.php עם התוכן הבא: %s והעביר את כתובת האתר שלו לפרמטר השני של getDownloadLink", - "mmapErrorPart2": "כדי לתקן, הפעל את הפקודה הבאה: %s (בתור root)", - "mmapErrorPart3": "כדי להחיל את השינוי לאחר אתחול מחדש: %s", - "static_analysis_minor": "נתקלה בבעיה קלה במהלך ניתוח סטטי של %s: %s", - "static_analysis_severe": "נתקלה בבעיה חמורה במהלך ניתוח סטטי של %s: %s", - "cli_need_dl.php_link": "אנא ציין כתובת אתר של סקריפט הורדה בעת שימוש ב-getDownloadLink דרך CLI!", - "manualAdminActionRequired": "!!!!!!!!! נדרשת פעולה ידנית של מנהל מערכת !!!!!!!!!", - "extensionRequired": "MadelineProto דורשת את התוסף %s כדי לפעול. %s", - "extensionRequiredInstallWithCustomInstructions": "עקוב אחר ההוראות ב-%s כדי להתקין אותו.", - "plugin_path_does_not_exist": "נתיב התוסף %s אינו קיים!", - "update_madelineproto": "אתה מפעיל גרסה ישנה של MadelineProto, נדרש עדכון: פועל כעת %s, אך הגרסה האחרונה עם מספר תיקוני באגים ותכונות חדשות היא %s!", "do_not_use_deprecated_function": "הפונקציה %s הוצאה משימוש, אנא השתמש ב-%s במקום זאת", - "baseDirLimitation": "מגבלת תיקיית בסיס מוגדרת: זה יכול להשפיע על הביצועים ולגרום לבעיות מסוימות, אנא השבת אותה אם אפשר!", - "noReportPeers": "אזהרה: לא מוגדרים עמיתים לדיווח, אנא הוסף את השיטה הבאה למטפל באירועים שלך", - "mmapErrorPart1": "המספר המרבי של אזורים ממופי זיכרון (mmap) הושג (%s): הגדל את תצורת ליבת vm.max_map_count ל-262144 כדי לתקן.", - "mmapErrorPart4": "ב-Windows וב-WSL, הגדלת גודל קובץ הדף עשויה לעזור; אנא עבור ללינוקס מקורית אם הבעיה נמשכת.", - "botAlreadyRunning": "הבוט כבר פועל!", - "extensionRequiredInstallWithApt": "נסה להפעיל את sudo apt-get install %s.", - "extensionRecommended": "אזהרה: התוסף %s אינו מותקן, אנא התקן אותו כדי להאיץ את MadelineProto!", - "must_have_declare_types": "מסיבות ביצועים, ההצהרה הראשונה של קובץ מטפל באירוע חייבת להיות \"declare(strict_types=1);\"", - "do_not_use_blocking_function": "מטעמי ביצועים, ייתכן שמטפלי אירועים לא ישתמשו בפונקציית החסימה הלא-אסינכרונית %s, אנא השתמש ב-%s, במקום זאת", - "could_not_connect_to_MadelineProto": "לא ניתן להתחבר ל-MadelineProto, אנא הפעל את proc_open והסר הגבלות open_basedir או השבת שכתוב של נתיב שרת אינטרנט כדי לתקן! אם כבר עשית זאת, ודא שגרסת ה-CLI של PHP זהה בדיוק לגרסת האינטרנט (אותה גרסה, הרחבות וכו') ועיין בקובץ MadelineProto.log לקבלת מידע נוסף על השגיאה שמנעה משרת ה-IPC להתחיל.", "do_not_use_non_root_require_in_event_handler": "מסיבות ביצועים, אסור להשתמש ב-require או לכלול בתוך מחלקה של מטפל באירועים, רק דרישות ברמת השורש מותרות.", "do_not_use_yield": "MadelineProto 8 אינו דורש או תומך בשימוש בתשואה בפונקציות אסינכרון, עליך להסיר את כל מילות המפתח של תשואה ששימשו בעבר עבור קריאות פונקציות אסינכרון", - "account_banned": "!!!!!!! אזהרה!!!!!!!\nמערכת מניעת הצפות של טלגרם השעתה את החשבון הזה.\nכדי להמשיך, נדרש אימות ידני.\nשלח אימייל לכתובת recover@telegram.org, בבקשה לבטל את החסימה של מספר הטלפון %s, ותאר בקצרה מה תעשה עם מספר הטלפון הזה.\nלאחר מכן התחבר שוב.\nאם מחקת את החשבון הזה בכוונה, התעלם מהודעה זו.", - "windows_warning": "למשתמשי Windows: נא לעבור ללינוקס אם זה נכשל. אתה יכול גם לנסות לשנות את הגדרות חומת האש כדי לאפשר לכל תהליכי PHP ליצור שקעים (קל ב-100% פשוט לעבור ללינוקס, ב-Linux MadelineProto פשוט עובד מחוץ לקופסה, אין צורך בשינויים)", - "translate_madelineproto_cli": "ניתן לתרגם את MadelineProto בשפה שלך (התקדמות התרגום הנוכחית: %d%%), עבור אל https://weblate.madelineproto.xyz כדי לתרום עם התרגום!", "recommend_not_use_filesystem_function": "השימוש בפונקציה %s אינו מומלץ, מכיוון שגישה למערכת הקבצים במהלך טיפול בעדכונים תאט את הבוט שלך, אנא ראה https://docs.madelineproto.xyz/docs/UPDATES.html#avoiding-the-use-of-filesystem-functions עבור רשימה של דרכים חלופיות לאחסון נתונים שלא יאט את הבוט שלך!", "plugins_do_not_use_require": "מטעמי ביצועים, תוספים יכולים לכלול או לדרוש אוטומטית קבצים אחרים הנמצאים בתיקיית התוספים על ידי הפעלת הטעינה האוטומטית של PSR-4 (לא על ידי הפעלתם ידנית של require()'ing them).", - "dl.php_check_logs_make_sure_session_running": "הבוט של MadelineProto EventHandler או שרת ה-IPC של MadelineProto אינם מקוונים, אנא בדוק יומנים וודא שלפחות אחד מהם פועל!", + "plugins_must_have_exactly_one_class": "תוסף חייב להגדיר בדיוק מחלקה אחת! כדי להגדיר מספר מחלקות, ממשקים או תכונות, צור קבצים נפרדים, הם ייטענו אוטומטית על ידי MadelineProto באופן אוטומטי.", + "cli_need_dl.php_link": "אנא ציין כתובת אתר של סקריפט הורדה בעת שימוש ב-getDownloadLink דרך CLI!", "invalid_dl.php_session": "%s אינו סקריפט הורדה חוקי מכיוון שמזהה ההפעלה שלו שונה (צפי %s, קיבל %s)", + "need_dl.php": "לא ניתן ליצור סקריפט הורדה כברירת מחדל (%s), אנא צור קובץ dl.php עם התוכן הבא: %s והעביר את כתובת האתר שלו לפרמטר השני של getDownloadLink", "dl.php_powered_by_madelineproto": "שרת הורדת קבצי Telegram (עד 4GB), מופעל על ידי MadelineProto!
Click here למידע נוסף על איך להגדיר שרת הורדת קבצים משלך בטלגרם!", - "translate_madelineproto_web": "ניתן לתרגם את MadelineProto בשפה שלך (התקדמות התרגום הנוכחית: %d%%), לחץ כאן כדי לתרום עם התרגום!" + "dl.php_check_logs_make_sure_session_running": "הבוט של MadelineProto EventHandler או שרת ה-IPC של MadelineProto אינם מקוונים, אנא בדוק יומנים וודא שלפחות אחד מהם פועל!", + "account_banned": "!!!!!!! אזהרה!!!!!!!\nמערכת מניעת הצפות של טלגרם השעתה את החשבון הזה.\nכדי להמשיך, נדרש אימות ידני.\nשלח אימייל לכתובת recover@telegram.org, בבקשה לבטל את החסימה של מספר הטלפון %s, ותאר בקצרה מה תעשה עם מספר הטלפון הזה.\nלאחר מכן התחבר שוב.\nאם מחקת את החשבון הזה בכוונה, התעלם מהודעה זו.", + "plugin_path_does_not_exist": "נתיב התוסף %s אינו קיים!", + "could_not_connect_to_MadelineProto": "לא ניתן להתחבר ל-MadelineProto, אנא הפעל את proc_open והסר הגבלות open_basedir או השבת שכתוב של נתיב שרת אינטרנט כדי לתקן! אם כבר עשית זאת, ודא שגרסת ה-CLI של PHP זהה בדיוק לגרסת האינטרנט (אותה גרסה, הרחבות וכו') ועיין בקובץ MadelineProto.log לקבלת מידע נוסף על השגיאה שמנעה משרת ה-IPC להתחיל.", + "translate_madelineproto_web": "ניתן לתרגם את MadelineProto בשפה שלך (התקדמות התרגום הנוכחית: %d%%), לחץ כאן כדי לתרום עם התרגום!", + "translate_madelineproto_cli": "ניתן לתרגם את MadelineProto בשפה שלך (התקדמות התרגום הנוכחית: %d%%), עבור אל https://github.com/danog/MadelineProto/tree/v8/langs כדי לתרום עם התרגום!", + "apiInvalidWeb": "ה-API ID הוא מספר, וה-API hash באורך 32 תווים: העתק אותם שוב מ-my.telegram.org.", + "webDoneLead": "MadelineProto ממשיך לפעול בשרת: אפשר לסגור את הדף הזה.", + "apiChooseManualAuto": "האם לקבל את ה-API ID וה-hash אוטומטית מ-my.telegram.org (a), או להזין אותם ידנית (m)?", + "apiAutoFallbackManual": "במקום זאת, הזן את ה-API ID וה-hash ידנית.", + "apiSetupTitleWeb": "קבלת API ID ו-hash", + "apiSetupLeadWeb": "כל אפליקציית Telegram צריכה API ID ו-hash. MadelineProto יכול לקבל אותם עבורך מ-my.telegram.org, בעזרת מספר הטלפון של חשבון Telegram קיים.", + "apiAutoPhoneHintWeb": "my.telegram.org שולח את קוד הכניסה לאפליקציית Telegram שלך, לא ב-SMS.", + "apiSendCodeWeb": "שליחת קוד", + "apiChooseManualWeb": "כבר יש לי API ID", + "apiChooseAutoWeb": "קבלה אוטומטית", + "apiStartOverWeb": "התחלה מחדש", + "apiAutoCodeTitleWeb": "הזן את הקוד מ-Telegram", + "apiAutoCodeLeadWeb": "my.telegram.org שלח קוד כניסה לאפליקציית Telegram שלך, בצ'אט עם Telegram (לא ב-SMS).", + "apiAutoCodeLabelWeb": "קוד כניסה", + "apiCreateTitleWeb": "יצירת האפליקציה שלך", + "apiCreateLeadWeb": "לחשבון הזה עדיין אין אפליקציה ב-my.telegram.org. הפרטים האלה מוצגים רק לך, ואפשר לשנות אותם בהמשך.", + "apiAppTitleLabelWeb": "שם האפליקציה", + "apiAppShortNameLabelWeb": "שם קצר", + "apiAppUrlLabelWeb": "כתובת URL", + "apiAppDescLabelWeb": "תיאור", + "apiCreateWeb": "יצירת אפליקציה", + "apiSaveWeb": "שמירה והמשך", + "apiAutoErrorTitle": "my.telegram.org החזיר שגיאה", + "apiCreateErrorTitle": "my.telegram.org לא יצר את האפליקציה", + "apiCreateVpsWarning": "Telegram לא מאפשר ליצור אפליקציות חדשות ב-my.telegram.org מטווחי IP של VPS, VPN ומרכזי נתונים אחרים, והבקשה נשלחה מה-IP של המחשב שמריץ את MadelineProto. צור את האפליקציה ידנית ב-https://my.telegram.org מחיבור ביתי (למשל מהטלפון שלך עם גלישה סלולרית), ואז הזן את ה-API ID וה-hash.", + "loginTitleWeb": "כניסה ל-Telegram", + "loginLeadWeb": "בחר את החשבון או הבוט שבשמו יפעל מופע MadelineProto הזה.", + "loginTypeWeb": "כניסה בתור", + "loginUserPhoneHintWeb": "עם קידומת המדינה, למשל +39 123 456 7890.", + "loginBotTokenHintWeb": "הטוקן ש-@BotFather נתן לך כשיצרת את הבוט.", + "loginCodeTitleWeb": "הזן את קוד הכניסה", + "loginCodeLeadWeb": "Telegram שלח קוד כניסה לאפליקציית Telegram שלך, או ב-SMS אם אינך מחובר בשום מקום אחר.", + "loginPasswordTitleWeb": "אימות דו-שלבי", + "loginPasswordLeadWeb": "החשבון הזה מוגן בסיסמה, שהוגדרה בהגדרות > פרטיות ואבטחה > אימות דו-שלבי.", + "loginPasswordLabelWeb": "סיסמה", + "signupTitleWeb": "יצירת החשבון שלך", + "signupLeadWeb": "מספר הטלפון הזה עדיין לא רשום ב-Telegram: בחר את השם של החשבון החדש.", + "webContinue": "המשך", + "webLogin": "כניסה", + "webError": "%s. בדוק ונסה שוב.", + "webStepApp": "API ID ו-hash", + "webStepAccount": "חשבון", + "webStepVerify": "אימות", + "webStepDone": "פועל", + "webProgress": "התקדמות ההגדרה", + "webDocs": "תיעוד", + "webOptional": "אופציונלי", + "webShowPassword": "הצג", + "webHidePassword": "הסתר", + "webQrTitle": "כניסה באמצעות קוד QR", + "webQrWaiting": "ממתין לסריקה…", + "webFieldRequired": "יש למלא את השדה הזה.", + "webPhoneInvalid": "הזן את מספר הטלפון עם קידומת המדינה, למשל +39 123 456 7890.", + "tweb.Login.Title": "כניסה ל-MadelineProto", + "tweb.Login.PhoneLabelInvalid": "מספר טלפון לא תקין", + "tweb.Login.StartText": "נא לאשר את קידומת המדינה\nולהזין את מספר הטלפון שלך.", + "tweb.Login.Code.SentSms": "שלחנו לך SMS\nעם הקוד.", + "tweb.Login.Code.SentInApp": "שלחנו לך הודעה ב-Telegram\nעם הקוד.", + "tweb.Login.Code.SentCall": "נתקשר אליך ונקריא לך\nאת הקוד.", + "tweb.Login.Code.SentEmail": "נא לבדוק את האימייל שלך **%s** (אל תשכח את תיקיית הספאם) ולהזין את הקוד ששלחנו לך זה עתה.", + "tweb.Login.Code.SentUnknown": "נא לחפש בכל מקום\nאת הקוד (סוג: %s)", + "tweb.Login.Code.SentMissedCall": "בשניות הקרובות תקבל\nשיחה קצרה מ-**%s**. אל תענה לה —\nפשוט הזן את הספרות האחרונות של המספר הזה.", + "tweb.Login.Code.SentSmsWord": "שלחנו SMS עם מילה סודית\nלטלפון שלך **%s**.", + "tweb.Login.Code.SentSmsWordBeginning": "שלחנו SMS עם מילה סודית שמתחילה\nב-\"**%2$s**\" לטלפון שלך **%1$s**.", + "tweb.Login.Code.SentSmsPhrase": "שלחנו SMS עם ביטוי סודי\nלטלפון שלך **%s**.", + "tweb.Login.Code.SentSmsPhraseBeginning": "שלחנו SMS עם ביטוי סודי שמתחיל\nב-\"**%2$s**\" לטלפון שלך **%1$s**.", + "tweb.Login.Code.SecretWord": "מילה סודית", + "tweb.Login.Code.SecretPhrase": "ביטוי סודי", + "tweb.Login.Code.WordInvalid": "שגוי, נא לנסות שוב", + "tweb.Login.Code.WordBeginningInvalid": "מילה שגויה", + "tweb.Login.Password.Title": "הזן את הסיסמה שלך", + "tweb.Login.Password.Subtitle": "החשבון שלך מוגן\nבסיסמה נוספת", + "tweb.Login.Register.Subtitle": "הזן את שמך\nכדי ליצור את החשבון שלך", + "tweb.PleaseWait": "נא להמתין...", + "tweb.Code": "קוד", + "tweb.LoginPassword": "סיסמה", + "tweb.YourName": "השם שלך", + "tweb.FirstName": "שם פרטי (חובה)", + "tweb.LastName": "שם משפחה (אופציונלי)", + "tweb.StartMessaging": "התחל לשלוח הודעות", + "tweb.Country": "מדינה", + "tweb.Contacts.PhoneNumber.Placeholder": "מספר טלפון", + "tweb.Login.Next": "הבא", + "tweb.Login.QR.Title": "כניסה באמצעות קוד QR", + "tweb.Login.QR.Help1": "פתח את Telegram בטלפון שלך", + "tweb.Login.QR.Help2": "עבור אל **הגדרות** > **מכשירים** > **הוספת מכשיר**", + "tweb.Login.QR.Help3": "כוון את הטלפון שלך למסך זה כדי לאשר את הכניסה", + "tweb.Login.QR.Cancel": "כניסה באמצעות מספר טלפון >", + "tweb.Login.QR.Login": "כניסה באמצעות קוד QR >", + "tweb.Login.QR.Subtitle": "סרוק באמצעות אפליקציית Telegram בטלפון שלך", + "tweb.PhoneNumber.Code.Fragment.Info": "קבל את הקוד באזור המספרים ב-[Fragment]()", + "tweb.PHONE_CODE_INVALID": "קוד שגוי", + "tweb.PHONE_CODE_EXPIRED": "פג תוקף הקוד", + "tweb.PASSWORD_HASH_INVALID": "סיסמה שגויה", + "tweb.DarkMode": "מצב כהה", + "tweb.Error.AnError": "אירעה שגיאה. נא לנסות שוב מאוחר יותר.", + "tweb.AccDescr.LoginCode": "קוד כניסה", + "tweb.Login.Bot": "כניסה בתור בוט >", + "tweb.Login.Bot.Title": "כניסה בתור בוט", + "tweb.Login.Bot.Subtitle": "הזן את הטוקן ש-@BotFather נתן לך\nכשיצרת את הבוט.", + "tweb.Login.Bot.Token": "טוקן הבוט", + "tweb.Login.Bot.Cancel": "כניסה בתור משתמש >", + "tweb.Optional": "אופציונלי", + "tweb.PHONE_NUMBER_INVALID": "מספר טלפון לא תקין", + "tweb.PHONE_NUMBER_BANNED": "מספר הטלפון הזה חסום", + "tweb.PHONE_NUMBER_FLOOD": "יותר מדי ניסיונות, נסה שוב מאוחר יותר", + "tweb.PHONE_CODE_EMPTY": "קוד שגוי", + "tweb.PHONE_PASSWORD_FLOOD": "יותר מדי ניסיונות, נסה שוב מאוחר יותר", + "tweb.ACCESS_TOKEN_INVALID": "טוקן בוט לא תקין", + "tweb.ACCESS_TOKEN_EXPIRED": "טוקן הבוט הזה בוטל", + "tweb.FIRSTNAME_INVALID": "שם פרטי לא תקין", + "tweb.LASTNAME_INVALID": "שם משפחה לא תקין", + "tweb.Close": "סגירה" } diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/hi.json b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/hi.json new file mode 100644 index 0000000..28520ac --- /dev/null +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/hi.json @@ -0,0 +1,274 @@ +{ + "baseDirLimitation": "basedir प्रतिबंध कॉन्फ़िगर किया गया है: इससे परफ़ॉर्मेंस प्रभावित हो सकती है और कुछ समस्याएँ हो सकती हैं, कृपया संभव हो तो इसे अक्षम करें!", + "noReportPeers": "चेतावनी: कोई रिपोर्ट पीयर सेट नहीं है, कृपया अपने इवेंट हैंडलर में निम्नलिखित मेथड जोड़ें", + "manualAdminActionRequired": "!!!!!!!!! सिस्टम एडमिन द्वारा मैन्युअल कार्रवाई आवश्यक है !!!!!!!!!", + "mmapErrorPart1": "मेमोरी मैप्ड (mmap) क्षेत्रों की अधिकतम संख्या पूरी हो गई है (%s): इसे ठीक करने के लिए कृपया कर्नेल कॉन्फ़िग vm.max_map_count को बढ़ाकर 262144 करें।", + "mmapErrorPart2": "ठीक करने के लिए, निम्नलिखित कमांड को root के रूप में चलाएँ: %s", + "mmapErrorPart3": "रीबूट के बाद भी बदलाव बनाए रखने के लिए: %s", + "mmapErrorPart4": "Windows और WSL पर, pagefile का आकार बढ़ाने से मदद मिल सकती है; यदि समस्या बनी रहती है तो कृपया नेटिव Linux पर स्विच करें।", + "botAlreadyRunning": "बॉट पहले से चल रहा है!", + "extensionRequired": "MadelineProto को चलने के लिए %s एक्सटेंशन की आवश्यकता है। %s", + "extensionRequiredInstallWithApt": "sudo apt-get install %s चलाकर देखें।", + "extensionRequiredInstallWithCustomInstructions": "इसे इंस्टॉल करने के लिए %s पर दिए गए निर्देशों का पालन करें।", + "extensionRecommended": "चेतावनी: %s एक्सटेंशन इंस्टॉल नहीं है, कृपया MadelineProto की गति बढ़ाने के लिए इसे इंस्टॉल करें!", + "go": "आगे बढ़ें", + "apiChooseManualAutoTip": "ध्यान दें कि आप सेटिंग्स का उपयोग करके API ID/hash सीधे कोड में भी दे सकते हैं: %s", + "apiChooseManualAutoTipWeb": "ध्यान दें कि आप सेटिंग्स का उपयोग करके API ID/hash सीधे कोड में भी दे सकते हैं।", + "apiChoosePrompt": "आपका विकल्प (m/a): ", + "apiManualInstructions0": "https://my.telegram.org पर लॉगिन करें", + "apiManualInstructions1": "API development tools पर जाएँ", + "apiManualInstructions2": "create application पर क्लिक करें", + "apiAppInstructionsManual0": "आपके ऐप का नाम, कुछ भी हो सकता है", + "apiAppInstructionsManual1": "आपके ऐप का छोटा नाम, केवल अक्षर और अंक, 5-32 वर्ण", + "apiAppInstructionsManual2": "आपके ऐप/वेबसाइट का URL, या t.me/yourusername", + "apiAppInstructionsManual3": "कुछ भी", + "apiAppInstructionsManual4": "यहाँ अपने ऐप का विवरण दें", + "apiManualWeb": "अपना API ID और API hash दर्ज करें", + "apiManualPrompt0": "अपना API ID दर्ज करें: ", + "apiManualPrompt1": "अपना API hash दर्ज करें: ", + "apiAutoWeb": "API ID प्राप्त करने के लिए वह फ़ोन नंबर दर्ज करें जो Telegram पर पहले से रजिस्टर्ड है", + "apiAutoPrompt0": "वह फ़ोन नंबर दर्ज करें जो Telegram पर पहले से रजिस्टर्ड है: ", + "apiAutoPrompt1": "Telegram में प्राप्त वेरिफ़िकेशन कोड दर्ज करें: ", + "apiAppWeb": "API जानकारी दर्ज करें", + "apiAppInstructionsAuto0": "ऐप का नाम दर्ज करें, कुछ भी हो सकता है: ", + "apiAppInstructionsAuto1": "ऐप का छोटा नाम दर्ज करें, केवल अक्षर और अंक, 5-32 वर्ण: ", + "apiAppInstructionsAuto2": "ऐप/वेबसाइट का URL दर्ज करें, या t.me/yourusername: ", + "apiAppInstructionsAuto3": "ऐप का प्लेटफ़ॉर्म दर्ज करें: ", + "apiAppInstructionsAuto4": "अपने ऐप का विवरण दें: ", + "apiAppInstructionsAutoTypeOther": "अन्य (विवरण में बताएँ)", + "apiParamsError": "आपने सभी आवश्यक पैरामीटर नहीं दिए!", + "apiError": "त्रुटि: %s। फिर से प्रयास करें।", + "loginChoosePromptWeb": "क्या आप यूज़र के रूप में लॉगिन करना चाहते हैं या बॉट के रूप में?", + "loginWebQr": "आप अपने फ़ोन पर Telegram खोलकर, Settings > Devices > Link Desktop Device पर जाकर और निम्नलिखित QR कोड स्कैन करके अपने-आप भी लॉगिन कर सकते हैं:", + "loginWebQr1": "अपने फ़ोन पर Telegram खोलें", + "loginWebQr2": "Settings > Devices > Link Desktop Device पर जाएँ", + "loginWebQr3": "लॉगिन की पुष्टि करने के लिए अपने फ़ोन को इस स्क्रीन की ओर करें", + "loginOptionBot": "बॉट", + "loginOptionUser": "यूज़र", + "loginBot": "अपना बॉट टोकन दर्ज करें: ", + "loginUser": "अपना फ़ोन नंबर दर्ज करें: ", + "loginQr": "अपने फ़ोन पर Telegram खोलें, Settings > Devices > Link Desktop Device पर जाएँ और अपने-आप लॉगिन करने के लिए ऊपर दिया गया QR कोड स्कैन करें।", + "loginQrCodeSuccessful": "QR कोड से लॉगिन सफल रहा!", + "loginQrCodeExpired": "QR कोड की समय-सीमा समाप्त हो गई, नया कोड बनाया जा रहा है...", + "loginManual": "वैकल्पिक रूप से, आप मैन्युअल रूप से लॉगिन करने के लिए बॉट टोकन या फ़ोन नंबर भी दर्ज कर सकते हैं: ", + "loginUserCode": "कोड दर्ज करें: ", + "loginUserPass": "अपना पासवर्ड दर्ज करें (संकेत %s): ", + "loginUserPassWeb": "अपना पासवर्ड दर्ज करें: ", + "loginUserPassHint": "संकेत: %s", + "signupFirstName": "अपना पहला नाम दर्ज करें: ", + "signupLastName": "अपना उपनाम दर्ज करें (खाली छोड़ सकते हैं): ", + "signupWeb": "कृपया साइन अप करें", + "signupFirstNameWeb": "पहला नाम", + "signupLastNameWeb": "उपनाम", + "loginNoCode": "आपने फ़ोन कोड नहीं दिया!", + "loginNoPass": "आपने पासवर्ड नहीं दिया!", + "loginNoName": "आपने पहला नाम नहीं दिया!", + "loginBotTokenWeb": "बॉट टोकन", + "loginUserPhoneWeb": "फ़ोन नंबर", + "loginUserPhoneCodeWeb": "कोड", + "done": "हो गया!", + "nearest_dc": "हम %s में हैं, निकटतम DC %d है।", + "serialization_ofd": "सीरियलाइज़ेशन पुराना हो गया है, ऑब्जेक्ट को फिर से बनाया जा रहा है!", + "api_not_set": "आपको api key और api id देनी होगी, अपनी खुद की my.telegram.org पर प्राप्त करें", + "session_corrupted": "सेशन दूषित हो गया है!", + "value_bigger_than_2147483647": "दिया गया मान %s, 2147483647 से बड़ा है", + "value_smaller_than_2147483648": "दिया गया मान %s, -2147483648 से छोटा है", + "value_bigger_than_9223372036854775807": "दिया गया मान %s, 9223372036854775807 से बड़ा है", + "value_smaller_than_9223372036854775808": "दिया गया मान %s, -9223372036854775808 से छोटा है", + "value_bigger_than_4294967296": "दिया गया मान %s, 4294967296 से बड़ा है", + "value_smaller_than_0": "दिया गया मान %s, 0 से छोटा है", + "encode_double_error": "double को ठीक से एनकोड नहीं किया जा सका", + "file_not_exist": "फ़ाइल मौजूद नहीं है", + "deserialization_error": "डीसीरियलाइज़ेशन के दौरान एक त्रुटि हुई", + "rpc_tg_error": "Telegram ने एक RPC त्रुटि लौटाई: %s (%s), जो %s:%s के कारण हुई%sTL ट्रेस:", + "madelineproto_ready": "MadelineProto तैयार है!", + "logout_ok": "सफलतापूर्वक लॉग आउट हो गया!", + "already_loggedIn": "MadelineProto का यह इंस्टेंस पहले से लॉग इन है!", + "login_ok": "सफलतापूर्वक लॉग इन हो गया!", + "login_user": "सामान्य यूज़र के रूप में लॉग इन किया जा रहा है...", + "login_bot": "बॉट के रूप में लॉग इन किया जा रहा है...", + "login_code_sending": "कोड भेजा जा रहा है...", + "login_code_sent": "कोड सफलतापूर्वक भेज दिया गया! कोड प्राप्त होने के बाद आपको completePhoneLogin फ़ंक्शन का उपयोग करना चाहिए।", + "login_code_uncalled": "मैं कोड की प्रतीक्षा नहीं कर रहा हूँ! कृपया पहले phoneLogin मेथड कॉल करें", + "login_2fa_enabled": "2FA सक्षम है, आपको complete2falogin फ़ंक्शन कॉल करना होगा...", + "login_need_signup": "इस नंबर के लिए कोई अकाउंट नहीं बनाया गया है, आपको completeSignup फ़ंक्शन कॉल करना होगा...", + "login_auth_key": "auth key का उपयोग करके लॉग इन किया जा रहा है...", + "not_loggedIn": "मैं लॉग इन नहीं हूँ!", + "signup_uncalled": "मैं साइन अप की प्रतीक्षा नहीं कर रहा हूँ! कृपया पहले phoneLogin और completePhoneLogin मेथड कॉल करें!", + "signing_up": "सामान्य यूज़र के रूप में साइन अप किया जा रहा है...", + "signup_ok": "सफलतापूर्वक साइन अप हो गया!", + "2fa_uncalled": "मैं पासवर्ड की प्रतीक्षा नहीं कर रहा हूँ! कृपया पहले phoneLogin और completePhoneLogin मेथड कॉल करें!", + "peer_not_in_db": "यह पीयर आंतरिक पीयर डेटाबेस में मौजूद नहीं है", + "call_error_1": "कॉल %s को ढूँढकर स्वीकार नहीं किया जा सका", + "accepting_call": "%s की कॉल स्वीकार की जा रही है...", + "call_already_accepted": "कॉल %s पहले ही स्वीकार की जा चुकी है", + "call_already_declined": "कॉल %s पहले ही अस्वीकार की जा चुकी है", + "call_error_2": "कॉल %s को ढूँढकर उसकी पुष्टि नहीं की जा सकी", + "call_confirming": "%s की कॉल की पुष्टि की जा रही है...", + "call_error_3": "कॉल %s को ढूँढकर पूरा नहीं किया जा सका", + "call_completing": "%s की कॉल पूरी की जा रही है...", + "fingerprint_invalid": "अमान्य कुंजी फ़िंगरप्रिंट!", + "call_discarding": "कॉल %s समाप्त की जा रही है...", + "file_parsing": "%s पार्स किया जा रहा है...", + "src_file_invalid": "अमान्य सोर्स फ़ाइल दी गई: ", + "bool_error": "boolean नहीं निकाला जा सका", + "not_numeric": "दिया गया मान संख्यात्मक नहीं है", + "long_not_16": "दिया गया मान 16 बाइट लंबा नहीं है", + "long_not_32": "दिया गया मान 32 बाइट लंबा नहीं है", + "long_not_64": "दिया गया मान 64 बाइट लंबा नहीं है", + "array_invalid": "आपने एक मान्य array नहीं दिया", + "predicate_not_set": "Predicate (_ के अंतर्गत मान) सेट नहीं किया गया!", + "update_madelineproto": "आप MadelineProto का पुराना संस्करण चला रहे हैं, अपडेट आवश्यक है: अभी %s चल रहा है, लेकिन कई बग फ़िक्स और नई सुविधाओं वाला नवीनतम संस्करण %s है!", + "type_extract_error": "टाइप \"%s\" नहीं निकाला जा सका, आपको MadelineProto अपडेट करना चाहिए!", + "method_not_found": "मेथड नहीं मिला: ", + "params_missing": "आवश्यक पैरामीटर मौजूद नहीं है", + "sec_peer_not_in_db": "यह सीक्रेट पीयर आंतरिक पीयर डेटाबेस में मौजूद नहीं है", + "stream_handle_invalid": "एक अमान्य स्ट्रीम हैंडल दिया गया।", + "length_too_big": "लंबाई बहुत अधिक है", + "string_required": "एक string अपेक्षित थी!", + "waveform_must_have_100_values": "waveform array में 100 मान होने चाहिए!", + "waveform_value": "waveform का मान 0 और 31 के बीच होना चाहिए!", + "could_not_convert_object": "%s टाइप के ऑब्जेक्ट को कन्वर्ट नहीं किया जा सका", + "type_extract_error_id": "टाइप नहीं निकाला जा सका: %s (id %s), आपको MadelineProto अपडेट करना चाहिए!", + "constructor_not_found": "इस टाइप के लिए constructor नहीं मिला: ", + "botapi_conversion_error": "%s को bot API ऑब्जेक्ट में कन्वर्ट नहीं किया जा सकता", + "non_text_conversion": "गैर-टेक्स्ट संदेशों को अभी कन्वर्ट नहीं किया जा सकता!", + "file_type_invalid": "अमान्य फ़ाइल टाइप का पता चला (%s)", + "static_analysis_minor": "%s के स्टैटिक एनालिसिस के दौरान एक छोटी समस्या मिली: %s", + "static_analysis_severe": "%s के स्टैटिक एनालिसिस के दौरान एक गंभीर समस्या मिली: %s", + "secret_chat_skipping": "डेटाबेस में सीक्रेट चैट %s मौजूद नहीं है, संदेश छोड़ा जा रहा है...", + "must_have_declare_types": "परफ़ॉर्मेंस कारणों से, इवेंट हैंडलर फ़ाइल का पहला स्टेटमेंट \"declare(strict_types=1);\" होना चाहिए", + "do_not_delete_MadelineProto.log": "MadelineProto.log फ़ाइल को कभी भी डिलीट नहीं किया जाना चाहिए, इसके बजाय कृपया सेटिंग्स में एक कस्टम अधिकतम आकार सेट करें!", + "do_not_remove_MadelineProto.log_phar": "कृपया madeline.phar या madeline.php को न हटाएँ, अन्यथा MadelineProto क्रैश हो जाएगा। यदि आपको MadelineProto के साथ कोई समस्या है, तो उसे https://github.com/danog/MadelineProto या https://t.me/pwrtelegramgroup पर रिपोर्ट करें", + "do_not_use_blocking_function": "परफ़ॉर्मेंस कारणों से, इवेंट हैंडलर नॉन-async ब्लॉकिंग फ़ंक्शन %s का उपयोग नहीं कर सकते, कृपया इसके बजाय %s का उपयोग करें", + "do_not_use_blocking_class": "परफ़ॉर्मेंस कारणों से, हैंडलर नॉन-async ब्लॉकिंग क्लास %s का उपयोग नहीं कर सकते, कृपया इसके बजाय %s का उपयोग करें", + "do_not_use_deprecated_function": "%s फ़ंक्शन अप्रचलित (deprecated) है, कृपया इसके बजाय %s का उपयोग करें", + "do_not_use_non_root_require_in_event_handler": "परफ़ॉर्मेंस कारणों से, आपको इवेंट हैंडलर क्लास के अंदर require या include का उपयोग नहीं करना चाहिए, केवल रूट-लेवल require की अनुमति है।", + "do_not_use_yield": "MadelineProto 8 को async फ़ंक्शनों में yield के उपयोग की न तो आवश्यकता है और न ही यह इसका समर्थन करता है, आपको async फ़ंक्शन कॉल के लिए पहले उपयोग किए गए सभी yield कीवर्ड हटाने होंगे", + "recommend_not_use_filesystem_function": "%s फ़ंक्शन का उपयोग अनुशंसित नहीं है, क्योंकि अपडेट हैंडल करते समय फ़ाइलसिस्टम एक्सेस करने से आपका बॉट धीमा हो जाएगा, डेटा स्टोर करने के ऐसे वैकल्पिक तरीकों की सूची के लिए जो आपके बॉट को धीमा नहीं करेंगे, कृपया https://docs.madelineproto.xyz/docs/UPDATES.html#avoiding-the-use-of-filesystem-functions देखें!", + "plugins_do_not_use_require": "परफ़ॉर्मेंस कारणों से, प्लगइन plugins फ़ोल्डर में मौजूद अन्य फ़ाइलों को केवल PSR-4 autoloader को ट्रिगर करके ही अपने-आप include या require कर सकते हैं (उन्हें मैन्युअल रूप से require() करके नहीं)।", + "plugins_must_have_exactly_one_class": "एक प्लगइन को ठीक एक क्लास परिभाषित करनी चाहिए! कई क्लास, interface या trait परिभाषित करने के लिए अलग-अलग फ़ाइलें बनाएँ, MadelineProto उन्हें अपने-आप autoload कर लेगा।", + "cli_need_dl.php_link": "CLI के माध्यम से getDownloadLink का उपयोग करते समय कृपया डाउनलोड स्क्रिप्ट का URL निर्दिष्ट करें!", + "invalid_dl.php_session": "%s एक मान्य डाउनलोड स्क्रिप्ट नहीं है क्योंकि इसका सेशन ID अलग है (अपेक्षित %s, प्राप्त %s)", + "need_dl.php": "डिफ़ॉल्ट डाउनलोड स्क्रिप्ट नहीं बनाई जा सकी (%s), कृपया निम्नलिखित सामग्री के साथ एक dl.php फ़ाइल बनाएँ: %s और उसका URL getDownloadLink के दूसरे पैरामीटर में पास करें", + "dl.php_powered_by_madelineproto": "Telegram फ़ाइल डाउनलोड सर्वर (4GB तक), MadelineProto द्वारा संचालित!
अपना खुद का Telegram फ़ाइल डाउनलोड सर्वर सेट अप करने के बारे में अधिक जानकारी के लिए यहाँ क्लिक करें!", + "dl.php_check_logs_make_sure_session_running": "या तो संबंधित MadelineProto EventHandler बॉट या MadelineProto IPC सर्वर ऑफ़लाइन है, कृपया लॉग जाँचें और सुनिश्चित करें कि उनमें से कम से कम एक चल रहा हो!", + "account_banned": "!!!!!!! चेतावनी !!!!!!!\nTelegram की फ़्लड रोकथाम प्रणाली ने इस अकाउंट को निलंबित कर दिया है।\nजारी रखने के लिए मैन्युअल वेरिफ़िकेशन आवश्यक है।\nrecover@telegram.org पर एक ईमेल भेजें, जिसमें फ़ोन नंबर %s को अनबैन करने का अनुरोध करें, और संक्षेप में बताएँ कि आप इस फ़ोन नंबर के साथ क्या करेंगे।\nफिर दोबारा लॉगिन करें।\nयदि आपने जानबूझकर यह अकाउंट डिलीट किया है, तो इस संदेश को अनदेखा करें।", + "plugin_path_does_not_exist": "प्लगइन पाथ %s मौजूद नहीं है!", + "could_not_connect_to_MadelineProto": "MadelineProto से कनेक्ट नहीं किया जा सका, इसे ठीक करने के लिए कृपया proc_open सक्षम करें और open_basedir प्रतिबंध हटाएँ या वेबसर्वर पाथ रीराइट अक्षम करें! यदि आप यह पहले ही कर चुके हैं, तो सुनिश्चित करें कि PHP का CLI संस्करण वेब संस्करण के बिल्कुल समान है (समान संस्करण, एक्सटेंशन आदि) और उस त्रुटि के बारे में अधिक जानकारी के लिए MadelineProto.log फ़ाइल देखें जिसने IPC सर्वर को शुरू होने से रोका।", + "translate_madelineproto_web": "MadelineProto का आपकी भाषा में अनुवाद किया जा सकता है (वर्तमान अनुवाद प्रगति: %d%%), अनुवाद में योगदान देने के लिए यहाँ क्लिक करें!", + "translate_madelineproto_cli": "MadelineProto का आपकी भाषा में अनुवाद किया जा सकता है (वर्तमान अनुवाद प्रगति: %d%%), अनुवाद में योगदान देने के लिए https://github.com/danog/MadelineProto/tree/v8/langs पर जाएँ!", + "apiInvalidWeb": "API ID एक संख्या होती है और API hash 32 वर्णों का होता है: इन्हें my.telegram.org से फिर से कॉपी करें।", + "webDoneLead": "MadelineProto सर्वर पर चलता रहेगा: आप यह पेज बंद कर सकते हैं।", + "apiChooseManualAuto": "क्या आप API ID और hash को my.telegram.org से अपने-आप प्राप्त करना चाहते हैं (a), या उन्हें मैन्युअल रूप से दर्ज करना चाहते हैं (m)?", + "apiAutoFallbackManual": "इसके बजाय API ID और hash मैन्युअल रूप से दर्ज करें।", + "apiSetupTitleWeb": "अपना API ID और hash प्राप्त करें", + "apiSetupLeadWeb": "हर Telegram ऐप को एक API ID और hash की ज़रूरत होती है। MadelineProto किसी मौजूदा Telegram अकाउंट के फ़ोन नंबर से इन्हें आपके लिए my.telegram.org से प्राप्त कर सकता है।", + "apiAutoPhoneHintWeb": "my.telegram.org लॉगिन कोड SMS से नहीं, बल्कि आपके Telegram ऐप पर भेजता है।", + "apiSendCodeWeb": "कोड भेजें", + "apiChooseManualWeb": "मेरे पास पहले से API ID है", + "apiChooseAutoWeb": "अपने-आप प्राप्त करें", + "apiStartOverWeb": "फिर से शुरू करें", + "apiAutoCodeTitleWeb": "Telegram से मिला कोड दर्ज करें", + "apiAutoCodeLeadWeb": "my.telegram.org ने आपके Telegram ऐप में, Telegram वाली चैट में एक लॉगिन कोड भेजा है (SMS से नहीं)।", + "apiAutoCodeLabelWeb": "लॉगिन कोड", + "apiCreateTitleWeb": "अपना ऐप बनाएँ", + "apiCreateLeadWeb": "इस अकाउंट का my.telegram.org पर अभी कोई ऐप नहीं है। ये जानकारी केवल आपको दिखाई देती है और बाद में बदली जा सकती है।", + "apiAppTitleLabelWeb": "ऐप का नाम", + "apiAppShortNameLabelWeb": "छोटा नाम", + "apiAppUrlLabelWeb": "URL", + "apiAppDescLabelWeb": "विवरण", + "apiCreateWeb": "ऐप बनाएँ", + "apiSaveWeb": "सहेजें और जारी रखें", + "apiAutoErrorTitle": "my.telegram.org ने एक त्रुटि लौटाई", + "apiCreateErrorTitle": "my.telegram.org ने ऐप नहीं बनाया", + "apiCreateVpsWarning": "Telegram, VPS, VPN और अन्य डेटा सेंटर IP रेंज से my.telegram.org पर नए ऐप बनाने की अनुमति नहीं देता, और यह अनुरोध MadelineProto चला रही मशीन के IP से भेजा गया था। किसी घरेलू कनेक्शन (जैसे मोबाइल डेटा पर आपका फ़ोन) से https://my.telegram.org पर मैन्युअल रूप से ऐप बनाएँ, फिर API ID और hash दर्ज करें।", + "loginTitleWeb": "Telegram में लॉगिन करें", + "loginLeadWeb": "वह अकाउंट या बॉट चुनें जिसके रूप में यह MadelineProto इंस्टेंस चलेगा।", + "loginTypeWeb": "इस रूप में लॉगिन करें", + "loginUserPhoneHintWeb": "देश कोड के साथ, जैसे +39 123 456 7890।", + "loginBotTokenHintWeb": "बॉट बनाते समय @BotFather द्वारा दिया गया टोकन।", + "loginCodeTitleWeb": "लॉगिन कोड दर्ज करें", + "loginCodeLeadWeb": "Telegram ने आपके Telegram ऐप पर एक लॉगिन कोड भेजा है, या यदि आप कहीं और लॉग इन नहीं हैं तो SMS से।", + "loginPasswordTitleWeb": "टू-स्टेप वेरिफ़िकेशन", + "loginPasswordLeadWeb": "यह अकाउंट एक पासवर्ड से सुरक्षित है, जो Settings > Privacy and Security > Two-Step Verification में सेट किया गया है।", + "loginPasswordLabelWeb": "पासवर्ड", + "signupTitleWeb": "अपना अकाउंट बनाएँ", + "signupLeadWeb": "यह फ़ोन नंबर अभी Telegram पर नहीं है: नए अकाउंट का नाम चुनें।", + "webContinue": "जारी रखें", + "webLogin": "लॉगिन करें", + "webError": "%s। इसे जाँचें और फिर से प्रयास करें।", + "webStepApp": "API ID और hash", + "webStepAccount": "अकाउंट", + "webStepVerify": "वेरिफ़िकेशन", + "webStepDone": "चल रहा है", + "webProgress": "सेटअप की प्रगति", + "webDocs": "डॉक्यूमेंटेशन", + "webOptional": "वैकल्पिक", + "webShowPassword": "दिखाएँ", + "webHidePassword": "छिपाएँ", + "webQrTitle": "QR कोड से लॉगिन करें", + "webQrWaiting": "स्कैन की प्रतीक्षा की जा रही है…", + "webFieldRequired": "यह फ़ील्ड भरें।", + "webPhoneInvalid": "देश कोड के साथ फ़ोन नंबर दर्ज करें, जैसे +39 123 456 7890।", + "tweb.Login.Title": "MadelineProto में साइन इन करें", + "tweb.Login.PhoneLabelInvalid": "अमान्य फ़ोन नंबर", + "tweb.Login.StartText": "कृपया अपने देश कोड की पुष्टि करें\nऔर अपना फ़ोन नंबर दर्ज करें।", + "tweb.Login.Code.SentSms": "हमने आपको कोड के साथ\nएक SMS भेजा है।", + "tweb.Login.Code.SentInApp": "हमने आपको Telegram में कोड के साथ\nएक संदेश भेजा है।", + "tweb.Login.Code.SentCall": "हम आपको कॉल करके\nकोड बताएँगे।", + "tweb.Login.Code.SentEmail": "कृपया अपना ईमेल **%s** जाँचें (स्पैम फ़ोल्डर देखना न भूलें) और हमारे द्वारा अभी भेजा गया कोड दर्ज करें।", + "tweb.Login.Code.SentUnknown": "कृपया हर जगह कोड\nदेखें (प्रकार: %s)", + "tweb.Login.Code.SentMissedCall": "अगले कुछ सेकंड में आपको **%s** से\nएक छोटी कॉल आएगी। इसका जवाब न दें —\nबस उस नंबर के आख़िरी अंक दर्ज करें।", + "tweb.Login.Code.SentSmsWord": "हमने आपके फ़ोन **%s** पर\nएक गुप्त शब्द के साथ SMS भेजा है।", + "tweb.Login.Code.SentSmsWordBeginning": "हमने आपके फ़ोन **%1$s** पर एक गुप्त शब्द के साथ SMS भेजा है,\nजो \"**%2$s**\" से शुरू होता है।", + "tweb.Login.Code.SentSmsPhrase": "हमने आपके फ़ोन **%s** पर\nएक गुप्त वाक्यांश के साथ SMS भेजा है।", + "tweb.Login.Code.SentSmsPhraseBeginning": "हमने आपके फ़ोन **%1$s** पर एक गुप्त वाक्यांश के साथ SMS भेजा है,\nजो \"**%2$s**\" से शुरू होता है।", + "tweb.Login.Code.SecretWord": "गुप्त शब्द", + "tweb.Login.Code.SecretPhrase": "गुप्त वाक्यांश", + "tweb.Login.Code.WordInvalid": "गलत है, कृपया फिर से प्रयास करें", + "tweb.Login.Code.WordBeginningInvalid": "गलत शब्द", + "tweb.Login.Password.Title": "अपना पासवर्ड दर्ज करें", + "tweb.Login.Password.Subtitle": "आपका अकाउंट एक अतिरिक्त पासवर्ड\nसे सुरक्षित है", + "tweb.Login.Register.Subtitle": "अपना अकाउंट बनाने के लिए\nअपना नाम दर्ज करें", + "tweb.PleaseWait": "कृपया प्रतीक्षा करें...", + "tweb.Code": "कोड", + "tweb.LoginPassword": "पासवर्ड", + "tweb.YourName": "आपका नाम", + "tweb.FirstName": "पहला नाम (आवश्यक)", + "tweb.LastName": "उपनाम (वैकल्पिक)", + "tweb.StartMessaging": "मैसेजिंग शुरू करें", + "tweb.Country": "देश", + "tweb.Contacts.PhoneNumber.Placeholder": "फ़ोन नंबर", + "tweb.Login.Next": "आगे", + "tweb.Login.QR.Title": "QR कोड से लॉगिन करें", + "tweb.Login.QR.Help1": "अपने फ़ोन पर Telegram खोलें", + "tweb.Login.QR.Help2": "**Settings** > **Devices** > **Add Device** पर जाएँ", + "tweb.Login.QR.Help3": "लॉगिन की पुष्टि करने के लिए अपने फ़ोन को इस स्क्रीन की ओर करें", + "tweb.Login.QR.Cancel": "फ़ोन नंबर से लॉगिन करें >", + "tweb.Login.QR.Login": "QR कोड से लॉगिन करें >", + "tweb.Login.QR.Subtitle": "अपने फ़ोन पर Telegram ऐप से स्कैन करें", + "tweb.PhoneNumber.Code.Fragment.Info": "[Fragment]() पर Numbers सेक्शन में कोड प्राप्त करें", + "tweb.PHONE_CODE_INVALID": "अमान्य कोड", + "tweb.PHONE_CODE_EXPIRED": "कोड की समय-सीमा समाप्त हो गई", + "tweb.PASSWORD_HASH_INVALID": "गलत पासवर्ड", + "tweb.DarkMode": "डार्क मोड", + "tweb.Error.AnError": "एक त्रुटि हुई। कृपया बाद में फिर से प्रयास करें।", + "tweb.AccDescr.LoginCode": "लॉगिन कोड", + "tweb.Login.Bot": "बॉट के रूप में लॉगिन करें >", + "tweb.Login.Bot.Title": "बॉट के रूप में लॉगिन करें", + "tweb.Login.Bot.Subtitle": "बॉट बनाते समय @BotFather द्वारा\nदिया गया टोकन दर्ज करें।", + "tweb.Login.Bot.Token": "बॉट टोकन", + "tweb.Login.Bot.Cancel": "यूज़र के रूप में लॉगिन करें >", + "tweb.Optional": "वैकल्पिक", + "tweb.PHONE_NUMBER_INVALID": "अमान्य फ़ोन नंबर", + "tweb.PHONE_NUMBER_BANNED": "यह फ़ोन नंबर प्रतिबंधित है", + "tweb.PHONE_NUMBER_FLOOD": "बहुत अधिक प्रयास, बाद में फिर से प्रयास करें", + "tweb.PHONE_CODE_EMPTY": "अमान्य कोड", + "tweb.PHONE_PASSWORD_FLOOD": "बहुत अधिक प्रयास, बाद में फिर से प्रयास करें", + "tweb.ACCESS_TOKEN_INVALID": "अमान्य बॉट टोकन", + "tweb.ACCESS_TOKEN_EXPIRED": "यह बॉट टोकन रद्द कर दिया गया है", + "tweb.FIRSTNAME_INVALID": "अमान्य पहला नाम", + "tweb.LASTNAME_INVALID": "अमान्य उपनाम", + "tweb.Close": "बंद करें" +} diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/id.json b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/id.json new file mode 100644 index 0000000..9a32ca1 --- /dev/null +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/id.json @@ -0,0 +1,274 @@ +{ + "baseDirLimitation": "Pembatasan basedir sedang dikonfigurasi: hal ini dapat memengaruhi kinerja dan menyebabkan beberapa masalah, harap nonaktifkan jika memungkinkan!", + "noReportPeers": "Peringatan: tidak ada peer pelaporan yang diatur, harap tambahkan metode berikut ke event handler Anda", + "manualAdminActionRequired": "!!!!!!!!! DIPERLUKAN TINDAKAN MANUAL DARI ADMIN SISTEM !!!!!!!!!", + "mmapErrorPart1": "Jumlah maksimum region memori yang dipetakan (mmap) telah tercapai (%s): harap naikkan konfigurasi kernel vm.max_map_count menjadi 262144 untuk memperbaikinya.", + "mmapErrorPart2": "Untuk memperbaikinya, jalankan perintah berikut sebagai root: %s", + "mmapErrorPart3": "Agar perubahan tetap berlaku setelah reboot: %s", + "mmapErrorPart4": "Di Windows dan WSL, memperbesar ukuran pagefile mungkin dapat membantu; harap beralih ke Linux native jika masalah berlanjut.", + "botAlreadyRunning": "Bot sudah berjalan!", + "extensionRequired": "MadelineProto memerlukan ekstensi %s untuk berjalan. %s", + "extensionRequiredInstallWithApt": "Coba jalankan sudo apt-get install %s.", + "extensionRequiredInstallWithCustomInstructions": "Ikuti petunjuk di %s untuk memasangnya.", + "extensionRecommended": "Peringatan: ekstensi %s tidak terpasang, harap pasang untuk mempercepat MadelineProto!", + "go": "Lanjut", + "apiChooseManualAutoTip": "Perhatikan bahwa Anda juga dapat memberikan API ID/hash langsung di kode menggunakan pengaturan: %s", + "apiChooseManualAutoTipWeb": "Perhatikan bahwa Anda juga dapat memberikan API ID/hash langsung di kode menggunakan pengaturan.", + "apiChoosePrompt": "Pilihan Anda (m/a): ", + "apiManualInstructions0": "Login ke https://my.telegram.org", + "apiManualInstructions1": "Buka API development tools", + "apiManualInstructions2": "Klik create application", + "apiAppInstructionsManual0": "nama aplikasi Anda, bebas", + "apiAppInstructionsManual1": "nama pendek aplikasi Anda, alfanumerik, 5-32 karakter", + "apiAppInstructionsManual2": "URL aplikasi/situs web Anda, atau t.me/yourusername", + "apiAppInstructionsManual3": "bebas", + "apiAppInstructionsManual4": "Jelaskan aplikasi Anda di sini", + "apiManualWeb": "Masukkan API ID dan API hash Anda", + "apiManualPrompt0": "Masukkan API ID Anda: ", + "apiManualPrompt1": "Masukkan API hash Anda: ", + "apiAutoWeb": "Masukkan nomor telepon yang sudah terdaftar di Telegram untuk mendapatkan API ID", + "apiAutoPrompt0": "Masukkan nomor telepon yang sudah terdaftar di Telegram: ", + "apiAutoPrompt1": "Masukkan kode verifikasi yang Anda terima di Telegram: ", + "apiAppWeb": "Masukkan informasi API", + "apiAppInstructionsAuto0": "Masukkan nama aplikasi, bebas: ", + "apiAppInstructionsAuto1": "Masukkan nama pendek aplikasi, alfanumerik, 5-32 karakter: ", + "apiAppInstructionsAuto2": "Masukkan URL aplikasi/situs web, atau t.me/yourusername: ", + "apiAppInstructionsAuto3": "Masukkan platform aplikasi: ", + "apiAppInstructionsAuto4": "Jelaskan aplikasi Anda: ", + "apiAppInstructionsAutoTypeOther": "Lainnya (jelaskan di deskripsi)", + "apiParamsError": "Anda tidak memberikan semua parameter yang diperlukan!", + "apiError": "KESALAHAN: %s. Silakan coba lagi.", + "loginChoosePromptWeb": "Apakah Anda ingin login sebagai pengguna atau sebagai bot?", + "loginWebQr": "Anda juga dapat login secara otomatis dengan membuka Telegram di ponsel Anda, masuk ke Pengaturan > Perangkat > Tautkan Perangkat Desktop, lalu memindai kode QR berikut:", + "loginWebQr1": "Buka Telegram di ponsel Anda", + "loginWebQr2": "Masuk ke Pengaturan > Perangkat > Tautkan Perangkat Desktop", + "loginWebQr3": "Arahkan ponsel Anda ke layar ini untuk mengonfirmasi login", + "loginOptionBot": "Bot", + "loginOptionUser": "Pengguna", + "loginBot": "Masukkan token bot Anda: ", + "loginUser": "Masukkan nomor telepon Anda: ", + "loginQr": "Buka Telegram di ponsel Anda, masuk ke Pengaturan > Perangkat > Tautkan Perangkat Desktop, lalu pindai kode QR di atas untuk login secara otomatis.", + "loginQrCodeSuccessful": "Login dengan kode QR berhasil!", + "loginQrCodeExpired": "Kode QR kedaluwarsa, membuat kode baru...", + "loginManual": "Atau, Anda juga dapat memasukkan token bot atau nomor telepon untuk login secara manual: ", + "loginUserCode": "Masukkan kode: ", + "loginUserPass": "Masukkan kata sandi Anda (petunjuk %s): ", + "loginUserPassWeb": "Masukkan kata sandi Anda: ", + "loginUserPassHint": "Petunjuk: %s", + "signupFirstName": "Masukkan nama depan Anda: ", + "signupLastName": "Masukkan nama belakang Anda (boleh kosong): ", + "signupWeb": "Silakan mendaftar", + "signupFirstNameWeb": "Nama depan", + "signupLastNameWeb": "Nama belakang", + "loginNoCode": "Anda tidak memberikan kode telepon!", + "loginNoPass": "Anda tidak memberikan kata sandi!", + "loginNoName": "Anda tidak memberikan nama depan!", + "loginBotTokenWeb": "Token bot", + "loginUserPhoneWeb": "Nomor telepon", + "loginUserPhoneCodeWeb": "Kode", + "done": "Selesai!", + "nearest_dc": "Kami berada di %s, DC terdekat adalah %d.", + "serialization_ofd": "Serialisasi sudah usang, merekonstruksi objek!", + "api_not_set": "Anda harus memberikan api key dan api id, dapatkan milik Anda sendiri di my.telegram.org", + "session_corrupted": "Sesi rusak!", + "value_bigger_than_2147483647": "Nilai yang diberikan %s lebih besar dari 2147483647", + "value_smaller_than_2147483648": "Nilai yang diberikan %s lebih kecil dari -2147483648", + "value_bigger_than_9223372036854775807": "Nilai yang diberikan %s lebih besar dari 9223372036854775807", + "value_smaller_than_9223372036854775808": "Nilai yang diberikan %s lebih kecil dari -9223372036854775808", + "value_bigger_than_4294967296": "Nilai yang diberikan %s lebih besar dari 4294967296", + "value_smaller_than_0": "Nilai yang diberikan %s lebih kecil dari 0", + "encode_double_error": "Tidak dapat mengenkode double dengan benar", + "file_not_exist": "File tidak ada", + "deserialization_error": "Terjadi kesalahan saat deserialisasi", + "rpc_tg_error": "Telegram mengembalikan galat RPC: %s (%s), disebabkan oleh %s:%s%sJejak TL:", + "madelineproto_ready": "MadelineProto siap!", + "logout_ok": "Berhasil logout!", + "already_loggedIn": "Instance MadelineProto ini sudah login!", + "login_ok": "Berhasil login!", + "login_user": "Login sebagai pengguna biasa...", + "login_bot": "Login sebagai bot...", + "login_code_sending": "Mengirim kode...", + "login_code_sent": "Kode berhasil dikirim! Setelah menerima kode, Anda harus menggunakan fungsi completePhoneLogin.", + "login_code_uncalled": "Saya tidak sedang menunggu kode! Harap panggil metode phoneLogin terlebih dahulu", + "login_2fa_enabled": "2FA aktif, Anda harus memanggil fungsi complete2falogin...", + "login_need_signup": "Belum ada akun yang dibuat untuk nomor ini, Anda harus memanggil fungsi completeSignup...", + "login_auth_key": "Login menggunakan auth key...", + "not_loggedIn": "Saya belum login!", + "signup_uncalled": "Saya tidak sedang menunggu pendaftaran! Harap panggil metode phoneLogin dan completePhoneLogin terlebih dahulu!", + "signing_up": "Mendaftar sebagai pengguna biasa...", + "signup_ok": "Berhasil mendaftar!", + "2fa_uncalled": "Saya tidak sedang menunggu kata sandi! Harap panggil metode phoneLogin dan completePhoneLogin terlebih dahulu!", + "peer_not_in_db": "Peer ini tidak ada di database peer internal", + "call_error_1": "Tidak dapat menemukan dan menerima panggilan %s", + "accepting_call": "Menerima panggilan dari %s...", + "call_already_accepted": "Panggilan %s sudah diterima", + "call_already_declined": "Panggilan %s sudah ditolak", + "call_error_2": "Tidak dapat menemukan dan mengonfirmasi panggilan %s", + "call_confirming": "Mengonfirmasi panggilan dari %s...", + "call_error_3": "Tidak dapat menemukan dan menyelesaikan panggilan %s", + "call_completing": "Menyelesaikan panggilan dari %s...", + "fingerprint_invalid": "Fingerprint kunci tidak valid!", + "call_discarding": "Mengakhiri panggilan %s...", + "file_parsing": "Mem-parsing %s...", + "src_file_invalid": "File sumber yang diberikan tidak valid: ", + "bool_error": "Tidak dapat mengekstrak boolean", + "not_numeric": "Nilai yang diberikan bukan numerik", + "long_not_16": "Panjang nilai yang diberikan bukan 16 byte", + "long_not_32": "Panjang nilai yang diberikan bukan 32 byte", + "long_not_64": "Panjang nilai yang diberikan bukan 64 byte", + "array_invalid": "Anda tidak memberikan array yang valid", + "predicate_not_set": "Predicate (nilai di bawah _) tidak diatur!", + "update_madelineproto": "Anda menjalankan versi lama MadelineProto, pembaruan diperlukan: versi saat ini %s, sedangkan versi terbaru dengan banyak perbaikan bug dan fitur baru adalah %s!", + "type_extract_error": "Tidak dapat mengekstrak tipe \"%s\", Anda harus memperbarui MadelineProto!", + "method_not_found": "Tidak dapat menemukan metode: ", + "params_missing": "Parameter wajib tidak ada", + "sec_peer_not_in_db": "Peer rahasia ini tidak ada di database peer internal", + "stream_handle_invalid": "Stream handle yang diberikan tidak valid.", + "length_too_big": "Panjang terlalu besar", + "string_required": "Diharapkan sebuah string!", + "waveform_must_have_100_values": "Array waveform harus memiliki 100 nilai!", + "waveform_value": "Nilai waveform harus antara 0 dan 31!", + "could_not_convert_object": "Tidak dapat mengonversi objek bertipe %s", + "type_extract_error_id": "Tidak dapat mengekstrak tipe: %s dengan id %s, Anda harus memperbarui MadelineProto!", + "constructor_not_found": "Constructor tidak ditemukan untuk tipe: ", + "botapi_conversion_error": "Tidak dapat mengonversi %s menjadi objek bot API", + "non_text_conversion": "Belum dapat mengonversi pesan non-teks!", + "file_type_invalid": "Terdeteksi tipe file tidak valid (%s)", + "static_analysis_minor": "Ditemukan masalah kecil saat analisis statis %s: %s", + "static_analysis_severe": "Ditemukan masalah serius saat analisis statis %s: %s", + "secret_chat_skipping": "Saya tidak memiliki obrolan rahasia %s di database, melewati pesan...", + "must_have_declare_types": "demi alasan kinerja, pernyataan pertama dari file event handler harus \"declare(strict_types=1);\"", + "do_not_delete_MadelineProto.log": "file MadelineProto.log tidak boleh dihapus, sebagai gantinya atur ukuran maksimum kustom di pengaturan!", + "do_not_remove_MadelineProto.log_phar": "Jangan hapus madeline.phar atau madeline.php, karena MadelineProto akan crash. Jika Anda mengalami masalah dengan MadelineProto, laporkan ke https://github.com/danog/MadelineProto atau https://t.me/pwrtelegramgroup", + "do_not_use_blocking_function": "demi alasan kinerja, event handler tidak boleh menggunakan fungsi blocking non-async %s, sebagai gantinya gunakan %s", + "do_not_use_blocking_class": "demi alasan kinerja, handler tidak boleh menggunakan kelas blocking non-async %s, sebagai gantinya gunakan %s", + "do_not_use_deprecated_function": "fungsi %s sudah usang (deprecated), sebagai gantinya gunakan %s", + "do_not_use_non_root_require_in_event_handler": "demi alasan kinerja, Anda tidak boleh menggunakan require atau include di dalam kelas event handler, hanya require di level root yang diizinkan.", + "do_not_use_yield": "MadelineProto 8 tidak memerlukan maupun mendukung penggunaan yield dalam fungsi async, Anda harus menghapus semua kata kunci yield yang sebelumnya digunakan untuk pemanggilan fungsi async", + "recommend_not_use_filesystem_function": "penggunaan fungsi %s tidak disarankan, karena mengakses filesystem saat menangani update akan memperlambat bot Anda, silakan lihat https://docs.madelineproto.xyz/docs/UPDATES.html#avoiding-the-use-of-filesystem-functions untuk daftar cara alternatif menyimpan data yang tidak akan memperlambat bot Anda!", + "plugins_do_not_use_require": "demi alasan kinerja, plugin hanya dapat meng-include atau me-require file lain yang ada di folder plugins secara otomatis dengan memicu autoloader PSR-4 (bukan dengan require() secara manual).", + "plugins_must_have_exactly_one_class": "sebuah plugin harus mendefinisikan tepat satu kelas! Untuk mendefinisikan beberapa kelas, interface, atau trait, buat file terpisah, file-file tersebut akan dimuat otomatis oleh MadelineProto.", + "cli_need_dl.php_link": "Harap tentukan URL skrip unduhan saat menggunakan getDownloadLink melalui CLI!", + "invalid_dl.php_session": "%s bukan skrip unduhan yang valid karena ID sesinya berbeda (diharapkan %s, didapat %s)", + "need_dl.php": "Tidak dapat membuat skrip unduhan default (%s), harap buat file dl.php dengan konten berikut: %s dan berikan URL-nya ke parameter kedua getDownloadLink", + "dl.php_powered_by_madelineproto": "Server unduhan file Telegram (hingga 4GB), diberdayakan oleh MadelineProto!
Klik di sini untuk info lebih lanjut tentang cara menyiapkan server unduhan file Telegram Anda sendiri!", + "dl.php_check_logs_make_sure_session_running": "Bot EventHandler MadelineProto terkait atau server IPC MadelineProto sedang offline, harap periksa log dan pastikan setidaknya salah satunya berjalan!", + "account_banned": "!!!!!!! PERINGATAN !!!!!!!\nSistem pencegahan flood Telegram telah menangguhkan akun ini.\nUntuk melanjutkan, diperlukan verifikasi manual.\nKirim email ke recover@telegram.org, minta agar blokir nomor telepon %s dibuka, dan jelaskan secara singkat apa yang akan Anda lakukan dengan nomor telepon ini.\nKemudian login kembali.\nJika Anda sengaja menghapus akun ini, abaikan pesan ini.", + "plugin_path_does_not_exist": "Path plugin %s tidak ada!", + "could_not_connect_to_MadelineProto": "Tidak dapat terhubung ke MadelineProto, harap aktifkan proc_open dan hapus pembatasan open_basedir atau nonaktifkan path rewrite webserver untuk memperbaikinya! Jika Anda sudah melakukannya, pastikan versi CLI PHP sama persis dengan versi web (versi, ekstensi, dan lain-lain yang sama) dan periksa file MadelineProto.log untuk info lebih lanjut tentang kesalahan yang mencegah server IPC berjalan.", + "translate_madelineproto_web": "MadelineProto dapat diterjemahkan ke bahasa Anda (progres terjemahan saat ini: %d%%), klik di sini untuk berkontribusi pada terjemahan!", + "translate_madelineproto_cli": "MadelineProto dapat diterjemahkan ke bahasa Anda (progres terjemahan saat ini: %d%%), kunjungi https://github.com/danog/MadelineProto/tree/v8/langs untuk berkontribusi pada terjemahan!", + "apiInvalidWeb": "API ID berupa angka, dan API hash terdiri dari 32 karakter: salin kembali keduanya dari my.telegram.org.", + "webDoneLead": "MadelineProto tetap berjalan di server: Anda dapat menutup halaman ini.", + "apiChooseManualAuto": "Apakah Anda ingin mendapatkan API ID dan hash secara otomatis dari my.telegram.org (a), atau memasukkannya secara manual (m)?", + "apiAutoFallbackManual": "Sebagai gantinya, masukkan API ID dan hash secara manual.", + "apiSetupTitleWeb": "Dapatkan API ID dan hash Anda", + "apiSetupLeadWeb": "Setiap aplikasi Telegram memerlukan API ID dan hash. MadelineProto dapat mengambilnya untuk Anda dari my.telegram.org, menggunakan nomor telepon akun Telegram yang sudah ada.", + "apiAutoPhoneHintWeb": "my.telegram.org mengirimkan kode login ke aplikasi Telegram Anda, bukan melalui SMS.", + "apiSendCodeWeb": "Kirim kode", + "apiChooseManualWeb": "Saya sudah punya API ID", + "apiChooseAutoWeb": "Dapatkan secara otomatis", + "apiStartOverWeb": "Mulai dari awal", + "apiAutoCodeTitleWeb": "Masukkan kode dari Telegram", + "apiAutoCodeLeadWeb": "my.telegram.org telah mengirimkan kode login ke aplikasi Telegram Anda, di obrolan dengan Telegram (bukan melalui SMS).", + "apiAutoCodeLabelWeb": "Kode login", + "apiCreateTitleWeb": "Buat aplikasi Anda", + "apiCreateLeadWeb": "Akun ini belum memiliki aplikasi di my.telegram.org. Detail ini hanya ditampilkan kepada Anda, dan dapat diubah nanti.", + "apiAppTitleLabelWeb": "Nama aplikasi", + "apiAppShortNameLabelWeb": "Nama pendek", + "apiAppUrlLabelWeb": "URL", + "apiAppDescLabelWeb": "Deskripsi", + "apiCreateWeb": "Buat aplikasi", + "apiSaveWeb": "Simpan dan lanjutkan", + "apiAutoErrorTitle": "my.telegram.org mengembalikan kesalahan", + "apiCreateErrorTitle": "my.telegram.org tidak membuat aplikasi", + "apiCreateVpsWarning": "Telegram tidak mengizinkan rentang IP VPS, VPN, dan pusat data lainnya membuat aplikasi baru di my.telegram.org, dan permintaan ini dibuat dari IP mesin yang menjalankan MadelineProto. Buat aplikasi secara manual di https://my.telegram.org dari koneksi rumahan (misalnya ponsel Anda dengan data seluler), lalu masukkan API ID dan hash.", + "loginTitleWeb": "Login ke Telegram", + "loginLeadWeb": "Pilih akun atau bot yang akan digunakan untuk menjalankan instance MadelineProto ini.", + "loginTypeWeb": "Login sebagai", + "loginUserPhoneHintWeb": "Dengan kode negara, misalnya +39 123 456 7890.", + "loginBotTokenHintWeb": "Token yang diberikan @BotFather saat Anda membuat bot.", + "loginCodeTitleWeb": "Masukkan kode login", + "loginCodeLeadWeb": "Telegram telah mengirimkan kode login ke aplikasi Telegram Anda, atau melalui SMS jika Anda tidak login di tempat lain.", + "loginPasswordTitleWeb": "Verifikasi dua langkah", + "loginPasswordLeadWeb": "Akun ini dilindungi kata sandi, yang diatur di Pengaturan > Privasi dan Keamanan > Verifikasi Dua Langkah.", + "loginPasswordLabelWeb": "Kata sandi", + "signupTitleWeb": "Buat akun Anda", + "signupLeadWeb": "Nomor telepon ini belum terdaftar di Telegram: pilih nama untuk akun baru.", + "webContinue": "Lanjutkan", + "webLogin": "Login", + "webError": "%s. Periksa dan coba lagi.", + "webStepApp": "API ID dan hash", + "webStepAccount": "Akun", + "webStepVerify": "Verifikasi", + "webStepDone": "Berjalan", + "webProgress": "Progres penyiapan", + "webDocs": "Dokumentasi", + "webOptional": "opsional", + "webShowPassword": "Tampilkan", + "webHidePassword": "Sembunyikan", + "webQrTitle": "Login dengan kode QR", + "webQrWaiting": "Menunggu pemindaian…", + "webFieldRequired": "Isi kolom ini.", + "webPhoneInvalid": "Masukkan nomor telepon beserta kode negaranya, misalnya +39 123 456 7890.", + "tweb.Login.Title": "Login ke MadelineProto", + "tweb.Login.PhoneLabelInvalid": "Nomor telepon tidak valid", + "tweb.Login.StartText": "Silakan konfirmasi kode negara Anda\ndan masukkan nomor telepon Anda.", + "tweb.Login.Code.SentSms": "Kami telah mengirimkan SMS\nberisi kode kepada Anda.", + "tweb.Login.Code.SentInApp": "Kami telah mengirimkan pesan di Telegram\nberisi kode kepada Anda.", + "tweb.Login.Code.SentCall": "Kami akan menelepon Anda dan\nmenyebutkan kodenya.", + "tweb.Login.Code.SentEmail": "Silakan periksa email Anda **%s** (jangan lupa folder spam) dan masukkan kode yang baru saja kami kirimkan.", + "tweb.Login.Code.SentUnknown": "Silakan periksa semuanya\nuntuk menemukan kode (tipe: %s)", + "tweb.Login.Code.SentMissedCall": "Dalam beberapa detik, Anda akan menerima\npanggilan singkat dari **%s**. Jangan dijawab —\ncukup masukkan digit terakhir dari nomor tersebut.", + "tweb.Login.Code.SentSmsWord": "Kami telah mengirimkan SMS berisi kata rahasia\nke ponsel Anda **%s**.", + "tweb.Login.Code.SentSmsWordBeginning": "Kami telah mengirimkan SMS berisi kata rahasia yang diawali\ndengan \"**%2$s**\" ke ponsel Anda **%1$s**.", + "tweb.Login.Code.SentSmsPhrase": "Kami telah mengirimkan SMS berisi frasa rahasia\nke ponsel Anda **%s**.", + "tweb.Login.Code.SentSmsPhraseBeginning": "Kami telah mengirimkan SMS berisi frasa rahasia yang diawali\ndengan \"**%2$s**\" ke ponsel Anda **%1$s**.", + "tweb.Login.Code.SecretWord": "Kata rahasia", + "tweb.Login.Code.SecretPhrase": "Frasa rahasia", + "tweb.Login.Code.WordInvalid": "Salah, silakan coba lagi", + "tweb.Login.Code.WordBeginningInvalid": "Kata salah", + "tweb.Login.Password.Title": "Masukkan kata sandi Anda", + "tweb.Login.Password.Subtitle": "Akun Anda dilindungi dengan\nkata sandi tambahan", + "tweb.Login.Register.Subtitle": "Masukkan nama Anda\nuntuk membuat akun", + "tweb.PleaseWait": "Mohon tunggu...", + "tweb.Code": "Kode", + "tweb.LoginPassword": "Kata sandi", + "tweb.YourName": "Nama Anda", + "tweb.FirstName": "Nama depan (wajib)", + "tweb.LastName": "Nama belakang (opsional)", + "tweb.StartMessaging": "Mulai Berkirim Pesan", + "tweb.Country": "Negara", + "tweb.Contacts.PhoneNumber.Placeholder": "Nomor telepon", + "tweb.Login.Next": "Berikutnya", + "tweb.Login.QR.Title": "Login dengan kode QR", + "tweb.Login.QR.Help1": "Buka Telegram di ponsel Anda", + "tweb.Login.QR.Help2": "Masuk ke **Pengaturan** > **Perangkat** > **Tambah Perangkat**", + "tweb.Login.QR.Help3": "Arahkan ponsel Anda ke layar ini untuk mengonfirmasi login", + "tweb.Login.QR.Cancel": "Login dengan nomor telepon >", + "tweb.Login.QR.Login": "Login dengan kode QR >", + "tweb.Login.QR.Subtitle": "Pindai dengan aplikasi Telegram di ponsel Anda", + "tweb.PhoneNumber.Code.Fragment.Info": "Dapatkan kode di bagian Numbers di [Fragment]()", + "tweb.PHONE_CODE_INVALID": "Kode tidak valid", + "tweb.PHONE_CODE_EXPIRED": "Kode kedaluwarsa", + "tweb.PASSWORD_HASH_INVALID": "Kata sandi salah", + "tweb.DarkMode": "Mode Gelap", + "tweb.Error.AnError": "Terjadi kesalahan. Silakan coba lagi nanti.", + "tweb.AccDescr.LoginCode": "Kode login", + "tweb.Login.Bot": "Login sebagai bot >", + "tweb.Login.Bot.Title": "Login sebagai bot", + "tweb.Login.Bot.Subtitle": "Masukkan token yang diberikan @BotFather\nsaat Anda membuat bot.", + "tweb.Login.Bot.Token": "Token bot", + "tweb.Login.Bot.Cancel": "Login sebagai pengguna >", + "tweb.Optional": "opsional", + "tweb.PHONE_NUMBER_INVALID": "Nomor telepon tidak valid", + "tweb.PHONE_NUMBER_BANNED": "Nomor telepon ini diblokir", + "tweb.PHONE_NUMBER_FLOOD": "Terlalu banyak percobaan, coba lagi nanti", + "tweb.PHONE_CODE_EMPTY": "Kode tidak valid", + "tweb.PHONE_PASSWORD_FLOOD": "Terlalu banyak percobaan, coba lagi nanti", + "tweb.ACCESS_TOKEN_INVALID": "Token bot tidak valid", + "tweb.ACCESS_TOKEN_EXPIRED": "Token bot ini telah dicabut", + "tweb.FIRSTNAME_INVALID": "Nama depan tidak valid", + "tweb.LASTNAME_INVALID": "Nama belakang tidak valid", + "tweb.Close": "Tutup" +} diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/it.json b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/it.json index 8da2889..1baffe2 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/it.json +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/it.json @@ -1,4 +1,72 @@ { + "baseDirLimitation": "È presente una limitazione basedir: questo può impattare negativamente sulle performance e causare vari problemi, si prega di disabilitare le limitazioni basedir se possibile!", + "noReportPeers": "Attenzione: non è stato impostato alcun peer per la segnalazione errori, per favore aggiungi il seguente metodo all'event handler", + "manualAdminActionRequired": "!!!!!!!!! È NECESSARIO L'INTERVENTO DELL'AMMINISTRATORE DI SISTEMA !!!!!!!!!", + "mmapErrorPart1": "È stato raggiunto il limite massimo di regioni di memoria mappate (mmap, %s): è necessario incrementare il parametro di configurazione del kernel vm.max_map_count a 262144 per correggere l'errore.", + "mmapErrorPart2": "Per correggere l'errore, avviare il seguente comando come root: %s", + "mmapErrorPart3": "Per correggere l'errore in modo permanente, anche dopo un riavvio: %s", + "mmapErrorPart4": "Su Windows e WSL, potrebbe aiutare l'incremento della dimensione del file di paginazione; passare a Linux nativo se il problema persiste.", + "botAlreadyRunning": "Il bot è già in esecuzione!", + "extensionRequired": "MadelineProto richiede l'estensione %s. %s", + "extensionRequiredInstallWithApt": "Provate ad avviare sudo apt-get install %s.", + "extensionRequiredInstallWithCustomInstructions": "Seguire le istruzioni su %s per installarla.", + "extensionRecommended": "Attenzione: l'estensione %s non è installata, si prega di installarla per velocizzare MadelineProto!", + "go": "Vai", + "apiChooseManualAutoTip": "Nota che puoi anche fornire i parametri API direttamente nelle impostazioni: %s", + "apiChooseManualAutoTipWeb": "Nota che puoi anche fornire i parametri API direttamente nelle impostazioni.", + "apiChoosePrompt": "La tua scelta (m/a): ", + "apiManualInstructions0": "Effettua il login su https://my.telegram.org", + "apiManualInstructions1": "Vai su API development tools", + "apiManualInstructions2": "Clicca su create application", + "apiAppInstructionsManual0": "titolo dell'app, può essere qualsiasi cosa", + "apiAppInstructionsManual1": "il nome ridotto dell'app, caratteri alfanumerici", + "apiAppInstructionsManual2": "L'indirizzo del tuo sito, oppure t.me/username", + "apiAppInstructionsManual3": "Qualsiasi", + "apiAppInstructionsManual4": "Descrivi la tua app", + "apiManualWeb": "Inserisci il tuo API ID e API hash", + "apiManualPrompt0": "Inserisci il tuo API ID: ", + "apiManualPrompt1": "Inserisci il tuo API hash: ", + "apiAutoWeb": "Inserisci un numero di telefono già registrato su Telegram per ottenere l'API ID", + "apiAutoPrompt0": "Inserisci un numero di telefono che è già registrato su Telegram: ", + "apiAutoPrompt1": "Inserisci il codice di verifica che hai ricevuto su Telegram: ", + "apiAppWeb": "Inserire informazioni API", + "apiAppInstructionsAuto0": "Inserisci il nome dell'app, può essere qualsiasi cosa: ", + "apiAppInstructionsAuto1": "Inserisci il nome ridotto dell'app, caratteri alfanumerici: ", + "apiAppInstructionsAuto2": "Inserisci il sito internet dell'app, oppure t.me/username: ", + "apiAppInstructionsAuto3": "Inserisci la piattaforma dell'app: ", + "apiAppInstructionsAuto4": "Descrivi la tua app: ", + "apiAppInstructionsAutoTypeOther": "Altro (specificare nella descrizione)", + "apiParamsError": "Non hai fornito tutti i parametri richiesti!", + "apiError": "ERRORE: %s. Prova ancora.", + "loginChoosePromptWeb": "Vuoi effettuare il login come utente o come bot?", + "loginWebQr": "Puoi anche effettuare il login automaticamente aprendo Telegram sul telefono, andando in Impostazioni > Dispositivi > Collega dispositivo desktop e scansionando il seguente codice QR:", + "loginWebQr1": "Apri Telegram sul tuo telefono", + "loginWebQr2": "Vai su Impostazioni > Dispositivi > Collega dispositivo desktop", + "loginWebQr3": "Inquadra il codice sullo schermo per completare il login", + "loginOptionBot": "Bot", + "loginOptionUser": "Utente", + "loginBot": "Inserisci il tuo bot token: ", + "loginUser": "Inserisci il tuo numero di telefono: ", + "loginQr": "Apri Telegram sul tuo telefono, vai in Impostazioni > Dispositivi > Collega dispositivo desktop e scansiona il codice QR per fare il login automaticamente.", + "loginQrCodeSuccessful": "Il login con codice QR è stato effettuato correttamente!", + "loginQrCodeExpired": "Il codice QR è scaduto, generazione di un nuovo codice QR in corso...", + "loginManual": "In alternativa, puoi inserire un bot token o un numero di telefono per effettuare il login manualmente: ", + "loginUserCode": "Inserisci il codice di verifica: ", + "loginUserPass": "Inserisci la tua password (suggerimento %s): ", + "loginUserPassWeb": "Inserisci la tua password: ", + "loginUserPassHint": "Suggerimento: %s", + "signupFirstName": "Inserisci il tuo nome: ", + "signupLastName": "Inserisci il tuo cognome: ", + "signupWeb": "Registrazione", + "signupFirstNameWeb": "Nome", + "signupLastNameWeb": "Cognome", + "loginNoCode": "Non hai fornito un codice di verifica!", + "loginNoPass": "Non hai fornito la password!", + "loginNoName": "Non hai fornito un nome!", + "loginBotTokenWeb": "Token del bot", + "loginUserPhoneWeb": "Numero di telefono", + "loginUserPhoneCodeWeb": "Codice di verifica", + "done": "Fatto!", "nearest_dc": "Siamo in %s, il DC più vicino è %d.", "serialization_ofd": "La serializzazione non è aggiornata, reistanziamento dell'oggetto in corso!", "api_not_set": "Devi specificare una chiave ed un ID API, ottienili su https://my.telegram.org", @@ -50,113 +118,157 @@ "long_not_64": "Il valore fornito non è lungo 64 byte", "array_invalid": "Il valore fornito non è un array", "predicate_not_set": "Il predicato (valore sotto chiave _, esempio ['_' => 'inputPeer']) non è impostato!", + "update_madelineproto": "Stai usando una vecchia versione di MadelineProto, è necessario un aggiornamento: la versione che stai usando adesso è %s, ma l'ultima versione con tutti gli ultimi bugfix e tante nuove funzionalità è %s!", "type_extract_error": "Impossibile estrarre il tipo \"%s\", dovresti aggiornare MadelineProto!", "method_not_found": "Impossibile trovare il seguente metodo: ", "params_missing": "Non hai fornito un parametro obbligatorio, rileggi la documentazione API", "sec_peer_not_in_db": "La chat segreta non è presente nel database interno MadelineProto", "stream_handle_invalid": "Il valore fornito non è uno stream.", "length_too_big": "Il valore fornito è troppo lungo", + "string_required": "È richiesta una stringa!", + "waveform_must_have_100_values": "Una forma d'onda deve essere un array contenente 100 valori!", + "waveform_value": "Un singolo valore di una forma d'onda deve essere compreso tra 0 e 31!", + "could_not_convert_object": "Non è stato possibile convertire l'oggetto di tipo %s", "type_extract_error_id": "Non sono riuscito ad estrarre il tipo %s con ID %s, dovresti aggiornare MadelineProto!", "constructor_not_found": "Costruttore non trovato per tipo: ", "botapi_conversion_error": "Non sono risucito a convertire %s in un oggetto bot API", "non_text_conversion": "Non posso ancora convertire messaggi media!", - "file_type_invalid": "È stato fornito un tipo file errato", + "file_type_invalid": "È stato rilevato un tipo di file non valido (%s)", + "static_analysis_minor": "È stato riscontrato un problema minore durante l'analisi statica di %s: %s", + "static_analysis_severe": "È stato riscontrato un problema grave durante l'analisi statica di %s: %s", "secret_chat_skipping": "Non ho la chat segreta %s nel database, ignorando messaggio...", - "done": "Fatto!", - "apiAppInstructionsAuto0": "Inserisci il nome dell'app, può essere qualsiasi cosa: ", - "apiAppInstructionsAuto1": "Inserisci il nome ridotto dell'app, caratteri alfanumerici: ", - "apiAppInstructionsAuto2": "Inserisci il sito internet dell'app, oppure t.me/username: ", - "apiAppInstructionsAuto3": "Inserisci la piattaforma dell'app: ", - "apiAppInstructionsAuto4": "Descrivi la tua app: ", - "apiAppInstructionsManual0": "titolo dell'app, può essere qualsiasi cosa", - "apiAppInstructionsManual1": "il nome ridotto dell'app, caratteri alfanumerici", - "apiAppInstructionsManual2": "L'indirizzo del tuo sito, oppure t.me/username", - "apiAppInstructionsManual3": "Qualsiasi", - "apiAppInstructionsManual4": "Descrivi la tua app", - "apiAutoPrompt0": "Inserisci un numero di telefono che è già registrato su Telegram: ", - "apiAutoPrompt1": "Inserisci il codice di verifica che hai ricevuto su Telegram: ", - "apiChooseManualAutoTip": "Nota che puoi anche fornire i parametri API direttamente nelle impostazioni: %s", - "apiChoosePrompt": "La tua scelta (m/a): ", - "apiError": "ERRORE: %s. Prova ancora.", - "apiManualInstructions0": "Effettua il login su https://my.telegram.org", - "apiManualInstructions1": "Vai su API development tools", - "apiManualInstructions2": "Clicca su create application", - "apiManualPrompt0": "Inserisci il tuo API ID: ", - "apiManualPrompt1": "Inserisci il tuo API hash: ", - "apiParamsError": "Non hai fornito tutti i parametri richiesti!", - "loginBot": "Inserisci il tuo bot token: ", - "loginQr": "Apri Telegram sul tuo telefono, vai in Impostazioni > Dispositivi > Collega dispositivo desktop e scansiona il codice QR per fare il login automaticamente.", - "loginManual": "In alternativa, puoi inserire un bot token o un numero di telefono per effettuare il login manualmente: ", - "loginNoCode": "Non hai fornito un codice di verifica!", - "loginNoName": "Non hai fornito un nome!", - "loginNoPass": "Non hai fornito la password!", - "loginUser": "Inserisci il tuo numero di telefono: ", - "loginUserPass": "Inserisci la tua password (suggerimento %s): ", - "loginUserPassHint": "Suggerimento: %s", - "loginUserPassWeb": "Inserisci la tua password: ", - "loginUserCode": "Inserisci il codice di verifica: ", - "signupFirstName": "Inserisci il tuo nome: ", - "signupFirstNameWeb": "Nome", - "signupLastName": "Inserisci il tuo cognome: ", - "signupLastNameWeb": "Cognome", - "signupWeb": "Registrazione", - "go": "Vai", - "loginChoosePromptWeb": "Vuoi effettuare il login come utente o come bot?", - "loginWebQr": "Puoi anche effettuare il login automaticamente aprendo Telegram sul telefono, andando in Impostazioni > Dispositivi > Collega dispositivo desktop e scansionando il seguente codice QR:", - "loginWebQr1": "Apri Telegram sul tuo telefono", - "loginWebQr2": "Vai su Impostazioni > Dispositivi > Collega dispositivo desktop", - "loginWebQr3": "Inquadra il codice sullo schermo per completare il login", - "loginOptionBot": "Bot", - "loginOptionUser": "Utente", - "loginBotTokenWeb": "Token del bot", - "loginUserPhoneCodeWeb": "Codice di verifica", - "loginUserPhoneWeb": "Numero di telefono", - "apiAutoWeb": "Inserisci un numero di telefono già registrato su Telegram per ottenere l'API ID", - "apiManualWeb": "Inserisci il tuo API ID e API hash", - "apiAppInstructionsAutoTypeOther": "Altro (specificare nella descrizione)", - "apiAppWeb": "Inserire informazioni API", - "apiChooseManualAutoTipWeb": "Nota che puoi anche fornire i parametri API direttamente nelle impostazioni.", - "loginQrCodeSuccessful": "Il login con codice QR è stato effettuato correttamente!", - "loginQrCodeExpired": "Il codice QR è scaduto, generazione di un nuovo codice QR in corso...", - "noReportPeers": "Attenzione: non è stato impostato alcun peer per la segnalazione errori, per favore aggiungi il seguente metodo all'event handler", - "manualAdminActionRequired": "!!!!!!!!! È NECESSARIO L'INTERVENTO DELL'AMMINISTRATORE DI SISTEMA !!!!!!!!!", - "mmapErrorPart2": "Per correggere l'errore, avviare il seguente comando come root: %s", - "mmapErrorPart3": "Per correggere l'errore in modo permanente, anche dopo un riavvio: %s", - "mmapErrorPart4": "Su Windows e WSL, potrebbe aiutare l'incremento della dimensione del file di paginazione; passare a Linux nativo se il problema persiste.", - "extensionRequired": "MadelineProto richiede l'estensione %s. %s", - "extensionRequiredInstallWithApt": "Provate ad avviare sudo apt-get install %s.", - "extensionRequiredInstallWithCustomInstructions": "Seguire le istruzioni su %s per installarla.", - "extensionRecommended": "Attenzione: l'estensione %s non è installata, si prega di installarla per velocizzare MadelineProto!", - "mmapErrorPart1": "È stato raggiunto il limite massimo di regioni di memoria mappate (mmap, %s): è necessario incrementare il parametro di configurazione del kernel vm.max_map_count a 262144 per correggere l'errore.", - "botAlreadyRunning": "Il bot è già in esecuzione!", + "must_have_declare_types": "per motivi di performance, la prima riga del file contenente l'event handler deve essere uguale a \"declare(strict_types=1);\"", + "do_not_delete_MadelineProto.log": "il file MadelineProto.log non deve essere mai eliminato, per favore imposta una dimensione massima nelle impostazioni invece di eliminarlo!", "do_not_remove_MadelineProto.log_phar": "Per favore non rimuovere madeline.phar o madeline.php, o MadelineProto crasherà. Se hai problemi con MadelineProto, segnalali su https://github.com/danog/MadelineProto o https://t.me/pwrtelegramgroup", "do_not_use_blocking_function": "per motivi di performance, gli event handler non possono usare la funzione bloccante non asincrona %s, per favore usa %s", - "do_not_use_deprecated_function": "la funzione %s è deprecata, per favore usa %s", - "recommend_not_use_filesystem_function": "l'uso della funzione %s non è racommandato, perché l'accesso al filesystem durante la gestione degli update rallenterà il bot, si prega di leggere https://docs.madelineproto.xyz/docs/UPDATES.html#avoiding-the-use-of-filesystem-functions per una lista di modi alternativi per memorizzare informazioni in modi che non rallenteranno il tuo bot!", "do_not_use_blocking_class": "per motivi di performance, gli event handler non possono usare la classe bloccante non-asincrona %s, per favore usa %s", - "must_have_declare_types": "per motivi di performance, la prima riga del file contenente l'event handler deve essere uguale a \"declare(strict_types=1);\"", - "do_not_delete_MadelineProto.log": "il file MadelineProto.log non deve essere mai eliminato, per favore imposta una dimensione massima nelle impostazioni invece di eliminarlo!", + "do_not_use_deprecated_function": "la funzione %s è deprecata, per favore usa %s", "do_not_use_non_root_require_in_event_handler": "per motivi di performance, non è possibile usare require o include dentro l'event handler, è possibile includere file solo all'esterno della classe.", - "static_analysis_minor": "È stato riscontrato un problema minore durante l'analisi statica di %s: %s", - "static_analysis_severe": "È stato riscontrato un problema grave durante l'analisi statica di %s: %s", - "plugins_must_have_exactly_one_class": "un plugin deve definire esattamente una classe! Per definire più classi, interfacce o trait, si prega di creare file separati, che verranno caricati da MadelineProto automaticamente.", + "do_not_use_yield": "MadelineProto 8 non richede e non supporta l'uso della parola chiave yield in funzioni asincrono, è necessario rimuovere tutte gli yield usati in precedenza per chiamate a funzioni asincrone", + "recommend_not_use_filesystem_function": "l'uso della funzione %s non è racommandato, perché l'accesso al filesystem durante la gestione degli update rallenterà il bot, si prega di leggere https://docs.madelineproto.xyz/docs/UPDATES.html#avoiding-the-use-of-filesystem-functions per una lista di modi alternativi per memorizzare informazioni in modi che non rallenteranno il tuo bot!", "plugins_do_not_use_require": "per motivi di performance, i plugin possono solo includere altri file presenti nella cartella plugins usando il meccanismo di autocaricamento PSR-4 (non usando require o include).", + "plugins_must_have_exactly_one_class": "un plugin deve definire esattamente una classe! Per definire più classi, interfacce o trait, si prega di creare file separati, che verranno caricati da MadelineProto automaticamente.", "cli_need_dl.php_link": "È necessario specificare l'URL dello script di scaricamente per usare getDownloadLink via CLI!", + "invalid_dl.php_session": "%s non è uno script di scaricamento valido perché l'ID della sessione non è corretto (mi aspettavo %s, ho ricevuto %s)", "need_dl.php": "Impossibile generare lo script di scaricamento di default (%s), è necessario creare un file dl.php con il seguente contenuto: %s e passare il suo URL al secondo parametro di getDownloadLink", "dl.php_powered_by_madelineproto": "Server di scaricamento file Telegram (fino a 4GB), creato usando MadelineProto!
Clicca qui per configurare il tuo personale server di scaricamento file Telegram!", - "invalid_dl.php_session": "%s non è uno script di scaricamento valido perché l'ID della sessione non è corretto (mi aspettavo %s, ho ricevuto %s)", + "dl.php_check_logs_make_sure_session_running": "Sia l'event handler associato al bot che il server IPC della sessione sono offline, controllare i log e assicurarsi che almeno uno dei due sia online!", "account_banned": "!!!!!!! ATTENZIONE !!!!!!!\nIl sistema antispam di telegram ha sospeso questo account.\nPer continuare, è richiesta una verifica manuale.\nMandare un'email in inglese a recover@telegram.org, chiedendo di sbannare il numero di telefono %s, spiegando brevemente cosa si ha intenzione di fare con l'account.\nPoi rieseguite nuovamente il login.\nIgnorare questo messaggio se la sessione è stata resettata intenzionalmente.", "plugin_path_does_not_exist": "La cartella dei plugin %s non esiste!", - "string_required": "È richiesta una stringa!", - "waveform_must_have_100_values": "Una forma d'onda deve essere un array contenente 100 valori!", - "waveform_value": "Un singolo valore di una forma d'onda deve essere compreso tra 0 e 31!", - "could_not_convert_object": "Non è stato possibile convertire l'oggetto di tipo %s", - "dl.php_check_logs_make_sure_session_running": "Sia l'event handler associato al bot che il server IPC della sessione sono offline, controllare i log e assicurarsi che almeno uno dei due sia online!", - "update_madelineproto": "Stai usando una vecchia versione di MadelineProto, è necessario un aggiornamento: la versione che stai usando adesso è %s, ma l'ultima versione con tutti gli ultimi bugfix e tante nuove funzionalità è %s!", - "do_not_use_yield": "MadelineProto 8 non richede e non supporta l'uso della parola chiave yield in funzioni asincrono, è necessario rimuovere tutte gli yield usati in precedenza per chiamate a funzioni asincrone", - "translate_madelineproto_web": "MadelineProto può essere tradotto nella tua lingua (stato attuale della traduzione: %d%%), cliccate qui per contribuire alla traduzione!", - "translate_madelineproto_cli": "MadelineProto può essere tradotto nella tua lingua (stato attuale della traduzione: %d%%), vai su https://weblate.madelineproto.xyz per contribuire alla traduzione!", - "windows_warning": "Per utenti Windows: per favore passate a Linux se questo passaggio fallisce. Per continuare ad usare Windows, potrebbe essere necessario modificare le impostazioni del firewall per permettere a tutti i processi PHP di creare socket (100% è più facile passare a Linux, su Linux MadelineProto funziona direttamente senza alcuna modifica richiesta)", "could_not_connect_to_MadelineProto": "Non è stato possibile collegarsi a MadelineProto, per favore abilitare la funzione proc_open e rimuovere ogni limitazione open_basedir o disabilitare le rewrite lato server per fixare! Se l'avete già fatto, assicuratevi che la versione PHP CLI è la stessa versione di PHP web (apache/php-fpm) (stessa versione, estensioni, eccetera) e controllate il file MadelineProto.log per più informazioni sull'errore che ha impedito l'avvio del server IPC.", - "baseDirLimitation": "È presente una limitazione basedir: questo può impattare negativamente sulle performance e causare vari problemi, si prega di disabilitare le limitazioni basedir se possibile!" + "translate_madelineproto_web": "MadelineProto può essere tradotto nella tua lingua (stato attuale della traduzione: %d%%), cliccate qui per contribuire alla traduzione!", + "translate_madelineproto_cli": "MadelineProto può essere tradotto nella tua lingua (stato attuale della traduzione: %d%%), vai su https://github.com/danog/MadelineProto/tree/v8/langs per contribuire alla traduzione!", + "apiInvalidWeb": "L'API ID è un numero e l'API hash è lungo 32 caratteri: copiali di nuovo da my.telegram.org.", + "webDoneLead": "MadelineProto continua a funzionare sul server: puoi chiudere questa pagina.", + "apiChooseManualAuto": "Vuoi ottenere API ID e hash automaticamente da my.telegram.org (a) o inserirli manualmente (m)?", + "apiAutoFallbackManual": "Inserisci invece API ID e hash manualmente.", + "apiSetupTitleWeb": "Ottieni API ID e hash", + "apiSetupLeadWeb": "Ogni app Telegram ha bisogno di un API ID e di un hash. MadelineProto può ottenerli per te da my.telegram.org, usando il numero di telefono di un account Telegram già esistente.", + "apiAutoPhoneHintWeb": "my.telegram.org invia il codice di accesso alla tua app Telegram, non via SMS.", + "apiSendCodeWeb": "Invia codice", + "apiChooseManualWeb": "Ho già un API ID", + "apiChooseAutoWeb": "Ottienili automaticamente", + "apiStartOverWeb": "Ricomincia", + "apiAutoCodeTitleWeb": "Inserisci il codice ricevuto su Telegram", + "apiAutoCodeLeadWeb": "my.telegram.org ha inviato un codice di accesso alla tua app Telegram, nella chat con Telegram (non via SMS).", + "apiAutoCodeLabelWeb": "Codice di accesso", + "apiCreateTitleWeb": "Crea la tua app", + "apiCreateLeadWeb": "Questo account non ha ancora un'app su my.telegram.org. Questi dati sono visibili solo a te e potrai modificarli in seguito.", + "apiAppTitleLabelWeb": "Titolo dell'app", + "apiAppShortNameLabelWeb": "Nome breve", + "apiAppUrlLabelWeb": "URL", + "apiAppDescLabelWeb": "Descrizione", + "apiCreateWeb": "Crea app", + "apiSaveWeb": "Salva e continua", + "apiAutoErrorTitle": "my.telegram.org ha restituito un errore", + "apiCreateErrorTitle": "my.telegram.org non ha creato l'app", + "apiCreateVpsWarning": "Telegram non permette di creare nuove app su my.telegram.org da indirizzi IP di VPS, VPN e altri datacenter, e la richiesta è partita dall'IP della macchina su cui gira MadelineProto. Crea l'app manualmente su https://my.telegram.org da una connessione domestica (ad esempio dal telefono con i dati mobili), poi inserisci API ID e hash.", + "loginTitleWeb": "Accedi a Telegram", + "loginLeadWeb": "Scegli l'account o il bot con cui funzionerà questa istanza di MadelineProto.", + "loginTypeWeb": "Accedi come", + "loginUserPhoneHintWeb": "Con il prefisso internazionale, ad esempio +39 123 456 7890.", + "loginBotTokenHintWeb": "Il token che ti ha dato @BotFather quando hai creato il bot.", + "loginCodeTitleWeb": "Inserisci il codice di accesso", + "loginCodeLeadWeb": "Telegram ha inviato un codice di accesso alla tua app Telegram, oppure via SMS se non hai effettuato l'accesso da nessun'altra parte.", + "loginPasswordTitleWeb": "Verifica in due passaggi", + "loginPasswordLeadWeb": "Questo account è protetto da una password, impostata in Impostazioni > Privacy e sicurezza > Verifica in due passaggi.", + "loginPasswordLabelWeb": "Password", + "signupTitleWeb": "Crea il tuo account", + "signupLeadWeb": "Questo numero di telefono non è ancora su Telegram: scegli il nome del nuovo account.", + "webContinue": "Continua", + "webLogin": "Accedi", + "webError": "%s. Controlla e riprova.", + "webStepApp": "API ID e hash", + "webStepAccount": "Account", + "webStepVerify": "Verifica", + "webStepDone": "In esecuzione", + "webProgress": "Avanzamento della configurazione", + "webDocs": "Documentazione", + "webOptional": "facoltativo", + "webShowPassword": "Mostra", + "webHidePassword": "Nascondi", + "webQrTitle": "Accedi con un codice QR", + "webQrWaiting": "In attesa della scansione…", + "webFieldRequired": "Compila questo campo.", + "webPhoneInvalid": "Inserisci il numero di telefono con il prefisso internazionale, ad esempio +39 123 456 7890.", + "tweb.Login.Title": "Accedi a MadelineProto", + "tweb.Login.PhoneLabelInvalid": "Numero di telefono non valido", + "tweb.Login.StartText": "Conferma il prefisso del tuo paese\ne inserisci il tuo numero di telefono.", + "tweb.Login.Code.SentSms": "Ti abbiamo inviato un SMS\ncon il codice.", + "tweb.Login.Code.SentInApp": "Ti abbiamo inviato un messaggio su Telegram\ncon il codice.", + "tweb.Login.Code.SentCall": "Ti chiameremo per dettarti\nil codice.", + "tweb.Login.Code.SentEmail": "Controlla la tua email **%s** (non dimenticare la cartella spam) e inserisci il codice che ti abbiamo appena inviato.", + "tweb.Login.Code.SentUnknown": "Cerca un codice\novunque (tipo: %s)", + "tweb.Login.Code.SentMissedCall": "Entro pochi secondi riceverai\nuna breve chiamata da **%s**. Non rispondere:\ninserisci solo le ultime cifre di quel numero.", + "tweb.Login.Code.SentSmsWord": "Abbiamo inviato un SMS con una parola segreta\nal tuo numero **%s**.", + "tweb.Login.Code.SentSmsWordBeginning": "Abbiamo inviato un SMS con una parola segreta che inizia\ncon \"**%2$s**\" al tuo numero **%1$s**.", + "tweb.Login.Code.SentSmsPhrase": "Abbiamo inviato un SMS con una frase segreta\nal tuo numero **%s**.", + "tweb.Login.Code.SentSmsPhraseBeginning": "Abbiamo inviato un SMS con una frase segreta che inizia\ncon \"**%2$s**\" al tuo numero **%1$s**.", + "tweb.Login.Code.SecretWord": "Parola segreta", + "tweb.Login.Code.SecretPhrase": "Frase segreta", + "tweb.Login.Code.WordInvalid": "Non corretta, riprova", + "tweb.Login.Code.WordBeginningInvalid": "Parola non corretta", + "tweb.Login.Password.Title": "Inserisci la tua password", + "tweb.Login.Password.Subtitle": "Il tuo account è protetto\nda una password aggiuntiva", + "tweb.Login.Register.Subtitle": "Inserisci il tuo nome\nper creare il tuo account", + "tweb.PleaseWait": "Attendi...", + "tweb.Code": "Codice", + "tweb.LoginPassword": "Password", + "tweb.YourName": "Il tuo nome", + "tweb.FirstName": "Nome (obbligatorio)", + "tweb.LastName": "Cognome (facoltativo)", + "tweb.StartMessaging": "Inizia a messaggiare", + "tweb.Country": "Paese", + "tweb.Contacts.PhoneNumber.Placeholder": "Numero di telefono", + "tweb.Login.Next": "Avanti", + "tweb.Login.QR.Title": "Accedi con codice QR", + "tweb.Login.QR.Help1": "Apri Telegram sul tuo telefono", + "tweb.Login.QR.Help2": "Vai su **Impostazioni** > **Dispositivi** > **Aggiungi dispositivo**", + "tweb.Login.QR.Help3": "Inquadra questo schermo con il telefono per confermare l'accesso", + "tweb.Login.QR.Cancel": "Accedi con il numero di telefono >", + "tweb.Login.QR.Login": "Accedi con codice QR >", + "tweb.Login.QR.Subtitle": "Scansiona con l'app Telegram sul tuo telefono", + "tweb.PhoneNumber.Code.Fragment.Info": "Ottieni il codice nella sezione Numbers su [Fragment]()", + "tweb.PHONE_CODE_INVALID": "Codice non valido", + "tweb.PHONE_CODE_EXPIRED": "Codice scaduto", + "tweb.PASSWORD_HASH_INVALID": "Password errata", + "tweb.DarkMode": "Modalità scura", + "tweb.Error.AnError": "Si è verificato un errore. Riprova più tardi.", + "tweb.AccDescr.LoginCode": "Codice di accesso", + "tweb.Login.Bot": "Accedi come bot >", + "tweb.Login.Bot.Title": "Accedi come bot", + "tweb.Login.Bot.Subtitle": "Inserisci il token che ti ha dato @BotFather\nquando hai creato il bot.", + "tweb.Login.Bot.Token": "Token del bot", + "tweb.Login.Bot.Cancel": "Accedi come utente >", + "tweb.Optional": "facoltativo", + "tweb.PHONE_NUMBER_INVALID": "Numero di telefono non valido", + "tweb.PHONE_NUMBER_BANNED": "Questo numero di telefono è stato bannato", + "tweb.PHONE_NUMBER_FLOOD": "Troppi tentativi, riprova più tardi", + "tweb.PHONE_CODE_EMPTY": "Codice non valido", + "tweb.PHONE_PASSWORD_FLOOD": "Troppi tentativi, riprova più tardi", + "tweb.ACCESS_TOKEN_INVALID": "Token del bot non valido", + "tweb.ACCESS_TOKEN_EXPIRED": "Questo token del bot è stato revocato", + "tweb.FIRSTNAME_INVALID": "Nome non valido", + "tweb.LASTNAME_INVALID": "Cognome non valido", + "tweb.Close": "Chiudi" } diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/ja.json b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/ja.json new file mode 100644 index 0000000..317d457 --- /dev/null +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/ja.json @@ -0,0 +1,274 @@ +{ + "baseDirLimitation": "basedir 制限が設定されています。パフォーマンスに影響し、問題の原因になる可能性があるため、可能であれば無効にしてください。", + "noReportPeers": "警告: レポート先のピアが設定されていません。イベントハンドラーに次のメソッドを追加してください", + "manualAdminActionRequired": "!!!!!!!!! システム管理者による手動対応が必要です !!!!!!!!!", + "mmapErrorPart1": "メモリマップ (mmap) 領域の最大数に達しました (%s)。修正するには、カーネル設定 vm.max_map_count を 262144 に増やしてください。", + "mmapErrorPart2": "修正するには、root として次のコマンドを実行してください: %s", + "mmapErrorPart3": "再起動後も変更を維持するには: %s", + "mmapErrorPart4": "Windows および WSL では、ページファイルのサイズを増やすと改善する場合があります。問題が解決しない場合は、ネイティブの Linux に切り替えてください。", + "botAlreadyRunning": "ボットはすでに実行中です!", + "extensionRequired": "MadelineProto の実行には %s 拡張機能が必要です。%s", + "extensionRequiredInstallWithApt": "sudo apt-get install %s を実行してみてください。", + "extensionRequiredInstallWithCustomInstructions": "%s の手順に従ってインストールしてください。", + "extensionRecommended": "警告: %s 拡張機能がインストールされていません。MadelineProto を高速化するためにインストールしてください!", + "go": "実行", + "apiChooseManualAutoTip": "API ID/hash は、設定を使ってコード内で直接指定することもできます: %s", + "apiChooseManualAutoTipWeb": "API ID/hash は、設定を使ってコード内で直接指定することもできます。", + "apiChoosePrompt": "選択してください (m/a): ", + "apiManualInstructions0": "https://my.telegram.org にログインします", + "apiManualInstructions1": "API development tools に移動します", + "apiManualInstructions2": "create application をクリックします", + "apiAppInstructionsManual0": "アプリの名前 (任意)", + "apiAppInstructionsManual1": "アプリの短い名前 (英数字、5〜32 文字)", + "apiAppInstructionsManual2": "アプリ/ウェブサイトの URL、または t.me/yourusername", + "apiAppInstructionsManual3": "任意", + "apiAppInstructionsManual4": "ここにアプリの説明を入力します", + "apiManualWeb": "API ID と API hash を入力してください", + "apiManualPrompt0": "API ID を入力してください: ", + "apiManualPrompt1": "API hash を入力してください: ", + "apiAutoWeb": "API ID を取得するには、Telegram に登録済みの電話番号を入力してください", + "apiAutoPrompt0": "Telegram に登録済みの電話番号を入力してください: ", + "apiAutoPrompt1": "Telegram で受け取った認証コードを入力してください: ", + "apiAppWeb": "API 情報を入力してください", + "apiAppInstructionsAuto0": "アプリの名前を入力してください (任意): ", + "apiAppInstructionsAuto1": "アプリの短い名前を入力してください (英数字、5〜32 文字): ", + "apiAppInstructionsAuto2": "アプリ/ウェブサイトの URL、または t.me/yourusername を入力してください: ", + "apiAppInstructionsAuto3": "アプリのプラットフォームを入力してください: ", + "apiAppInstructionsAuto4": "アプリの説明を入力してください: ", + "apiAppInstructionsAutoTypeOther": "その他 (説明欄に記入)", + "apiParamsError": "必須パラメーターがすべて指定されていません!", + "apiError": "エラー: %s。もう一度お試しください。", + "loginChoosePromptWeb": "ユーザーとボットのどちらでログインしますか?", + "loginWebQr": "スマートフォンで Telegram を開き、[設定] > [デバイス] > [デスクトップ端末をリンク] に進んで次の QR コードをスキャンすると、自動でログインすることもできます:", + "loginWebQr1": "スマートフォンで Telegram を開きます", + "loginWebQr2": "[設定] > [デバイス] > [デスクトップ端末をリンク] に進みます", + "loginWebQr3": "スマートフォンをこの画面に向けてログインを確認します", + "loginOptionBot": "ボット", + "loginOptionUser": "ユーザー", + "loginBot": "ボットトークンを入力してください: ", + "loginUser": "電話番号を入力してください: ", + "loginQr": "スマートフォンで Telegram を開き、[設定] > [デバイス] > [デスクトップ端末をリンク] に進んで上の QR コードをスキャンすると、自動でログインできます。", + "loginQrCodeSuccessful": "QR コードでのログインに成功しました!", + "loginQrCodeExpired": "QR コードの有効期限が切れました。新しいコードを生成しています...", + "loginManual": "または、ボットトークンか電話番号を入力して手動でログインすることもできます: ", + "loginUserCode": "コードを入力してください: ", + "loginUserPass": "パスワードを入力してください (ヒント: %s): ", + "loginUserPassWeb": "パスワードを入力してください: ", + "loginUserPassHint": "ヒント: %s", + "signupFirstName": "名を入力してください: ", + "signupLastName": "姓を入力してください (空欄可): ", + "signupWeb": "アカウントを登録してください", + "signupFirstNameWeb": "名", + "signupLastNameWeb": "姓", + "loginNoCode": "電話認証コードが入力されていません!", + "loginNoPass": "パスワードが入力されていません!", + "loginNoName": "名が入力されていません!", + "loginBotTokenWeb": "ボットトークン", + "loginUserPhoneWeb": "電話番号", + "loginUserPhoneCodeWeb": "コード", + "done": "完了しました!", + "nearest_dc": "現在地は %s、最寄りの DC は %d です。", + "serialization_ofd": "シリアライズ形式が古いため、オブジェクトを再構築しています!", + "api_not_set": "API キーと API ID を指定する必要があります。my.telegram.org で取得してください", + "session_corrupted": "セッションが破損しています!", + "value_bigger_than_2147483647": "指定された値 %s が 2147483647 より大きいです", + "value_smaller_than_2147483648": "指定された値 %s が -2147483648 より小さいです", + "value_bigger_than_9223372036854775807": "指定された値 %s が 9223372036854775807 より大きいです", + "value_smaller_than_9223372036854775808": "指定された値 %s が -9223372036854775808 より小さいです", + "value_bigger_than_4294967296": "指定された値 %s が 4294967296 より大きいです", + "value_smaller_than_0": "指定された値 %s が 0 より小さいです", + "encode_double_error": "double を正しくエンコードできませんでした", + "file_not_exist": "ファイルが存在しません", + "deserialization_error": "デシリアライズ中にエラーが発生しました", + "rpc_tg_error": "Telegram が RPC エラーを返しました: %s (%s)、発生箇所 %s:%s%sTL トレース:", + "madelineproto_ready": "MadelineProto の準備ができました!", + "logout_ok": "ログアウトしました!", + "already_loggedIn": "この MadelineProto インスタンスはすでにログインしています!", + "login_ok": "ログインしました!", + "login_user": "通常のユーザーとしてログインしています...", + "login_bot": "ボットとしてログインしています...", + "login_code_sending": "コードを送信しています...", + "login_code_sent": "コードを送信しました!コードを受け取ったら completePhoneLogin 関数を使用してください。", + "login_code_uncalled": "コードを待機していません!先に phoneLogin メソッドを呼び出してください", + "login_2fa_enabled": "2 段階認証が有効になっています。complete2falogin 関数を呼び出す必要があります...", + "login_need_signup": "この番号のアカウントはまだ作成されていません。completeSignup 関数を呼び出す必要があります...", + "login_auth_key": "認証キーを使用してログインしています...", + "not_loggedIn": "ログインしていません!", + "signup_uncalled": "登録を待機していません!先に phoneLogin と completePhoneLogin メソッドを呼び出してください!", + "signing_up": "通常のユーザーとして登録しています...", + "signup_ok": "登録しました!", + "2fa_uncalled": "パスワードを待機していません!先に phoneLogin と completePhoneLogin メソッドを呼び出してください!", + "peer_not_in_db": "このピアは内部のピアデータベースに存在しません", + "call_error_1": "通話 %s が見つからず、応答できませんでした", + "accepting_call": "%s からの通話に応答しています...", + "call_already_accepted": "通話 %s はすでに応答済みです", + "call_already_declined": "通話 %s はすでに拒否されています", + "call_error_2": "通話 %s が見つからず、確認できませんでした", + "call_confirming": "%s からの通話を確認しています...", + "call_error_3": "通話 %s が見つからず、完了できませんでした", + "call_completing": "%s からの通話を完了しています...", + "fingerprint_invalid": "キーのフィンガープリントが無効です!", + "call_discarding": "通話 %s を破棄しています...", + "file_parsing": "%s を解析しています...", + "src_file_invalid": "無効なソースファイルが指定されました: ", + "bool_error": "ブール値を抽出できませんでした", + "not_numeric": "指定された値は数値ではありません", + "long_not_16": "指定された値の長さが 16 バイトではありません", + "long_not_32": "指定された値の長さが 32 バイトではありません", + "long_not_64": "指定された値の長さが 64 バイトではありません", + "array_invalid": "有効な配列が指定されていません", + "predicate_not_set": "述語 (_ の値) が設定されていません!", + "update_madelineproto": "古いバージョンの MadelineProto を実行しているため、アップデートが必要です。現在のバージョンは %s ですが、多数のバグ修正と新機能を含む最新バージョンは %s です!", + "type_extract_error": "型 \"%s\" を抽出できませんでした。MadelineProto をアップデートしてください!", + "method_not_found": "メソッドが見つかりませんでした: ", + "params_missing": "必須パラメーターがありません", + "sec_peer_not_in_db": "このシークレットピアは内部のピアデータベースに存在しません", + "stream_handle_invalid": "無効なストリームハンドルが指定されました。", + "length_too_big": "長さが大きすぎます", + "string_required": "文字列が必要です!", + "waveform_must_have_100_values": "波形の配列には 100 個の値が必要です!", + "waveform_value": "波形の値は 0 から 31 の範囲でなければなりません!", + "could_not_convert_object": "型 %s のオブジェクトを変換できませんでした", + "type_extract_error_id": "型 %s (ID %s) を抽出できませんでした。MadelineProto をアップデートしてください!", + "constructor_not_found": "次の型のコンストラクターが見つかりません: ", + "botapi_conversion_error": "%s を Bot API オブジェクトに変換できません", + "non_text_conversion": "テキスト以外のメッセージはまだ変換できません!", + "file_type_invalid": "無効なファイル形式が検出されました (%s)", + "static_analysis_minor": "%s の静的解析中に軽微な問題が見つかりました: %s", + "static_analysis_severe": "%s の静的解析中に重大な問題が見つかりました: %s", + "secret_chat_skipping": "シークレットチャット %s がデータベースにないため、メッセージをスキップします...", + "must_have_declare_types": "パフォーマンス上の理由から、イベントハンドラーファイルの最初の文は \"declare(strict_types=1);\" でなければなりません", + "do_not_delete_MadelineProto.log": "MadelineProto.log ファイルは絶対に削除しないでください。代わりに、設定でカスタムの最大サイズを指定してください!", + "do_not_remove_MadelineProto.log_phar": "madeline.phar や madeline.php を削除しないでください。削除すると MadelineProto がクラッシュします。MadelineProto で問題が発生した場合は、https://github.com/danog/MadelineProto または https://t.me/pwrtelegramgroup に報告してください", + "do_not_use_blocking_function": "パフォーマンス上の理由から、イベントハンドラーでは非同期でないブロッキング関数 %s を使用できません。代わりに %s を使用してください", + "do_not_use_blocking_class": "パフォーマンス上の理由から、ハンドラーでは非同期でないブロッキングクラス %s を使用できません。代わりに %s を使用してください", + "do_not_use_deprecated_function": "%s 関数は非推奨です。代わりに %s を使用してください", + "do_not_use_non_root_require_in_event_handler": "パフォーマンス上の理由から、イベントハンドラークラスの内部で require や include を使用してはいけません。ルートレベルの require のみ使用できます。", + "do_not_use_yield": "MadelineProto 8 では非同期関数での yield の使用は不要で、サポートもされていません。非同期関数の呼び出しに使用していた yield キーワードをすべて削除してください", + "recommend_not_use_filesystem_function": "%s 関数の使用は推奨されません。アップデートの処理中にファイルシステムにアクセスするとボットが遅くなるためです。ボットを遅くしないデータの保存方法については https://docs.madelineproto.xyz/docs/UPDATES.html#avoiding-the-use-of-filesystem-functions を参照してください!", + "plugins_do_not_use_require": "パフォーマンス上の理由から、プラグインが plugins フォルダー内の他のファイルを読み込めるのは、PSR-4 オートローダーによる自動的な include/require のみです (手動で require() することはできません)。", + "plugins_must_have_exactly_one_class": "プラグインはクラスを 1 つだけ定義する必要があります!複数のクラス、インターフェイス、トレイトを定義するには別々のファイルを作成してください。MadelineProto が自動的にオートロードします。", + "cli_need_dl.php_link": "CLI から getDownloadLink を使用する場合は、ダウンロードスクリプトの URL を指定してください!", + "invalid_dl.php_session": "%s はセッション ID が異なるため、有効なダウンロードスクリプトではありません (想定: %s、実際: %s)", + "need_dl.php": "デフォルトのダウンロードスクリプトを生成できませんでした (%s)。次の内容で dl.php ファイルを作成し: %s その URL を getDownloadLink の第 2 引数に渡してください", + "dl.php_powered_by_madelineproto": "Telegram ファイルダウンロードサーバー (最大 4GB)、powered by MadelineProto!
独自の Telegram ファイルダウンロードサーバーを構築する方法の詳細はこちらをクリックしてください!", + "dl.php_check_logs_make_sure_session_running": "関連付けられた MadelineProto EventHandler ボットか MadelineProto IPC サーバーのいずれかがオフラインです。ログを確認し、少なくとも一方が実行中であることを確認してください!", + "account_banned": "!!!!!!! 警告 !!!!!!!\nTelegram のフラッド防止システムによって、このアカウントは停止されました。\n続行するには手動での認証が必要です。\nrecover@telegram.org にメールを送り、電話番号 %s の停止解除を依頼するとともに、この電話番号で何をするのかを簡単に説明してください。\nその後、もう一度ログインしてください。\nこのアカウントを意図的に削除した場合は、このメッセージを無視してください。", + "plugin_path_does_not_exist": "プラグインのパス %s が存在しません!", + "could_not_connect_to_MadelineProto": "MadelineProto に接続できませんでした。修正するには、proc_open を有効にして open_basedir の制限を解除するか、Web サーバーのパス書き換えを無効にしてください!すでに対応済みの場合は、CLI 版の PHP が Web 版とまったく同じ (バージョン、拡張機能など) であることを確認し、IPC サーバーの起動を妨げたエラーの詳細について MadelineProto.log ファイルを確認してください。", + "translate_madelineproto_web": "MadelineProto はあなたの言語に翻訳できます (現在の翻訳進捗: %d%%)。こちらをクリックして翻訳に協力してください!", + "translate_madelineproto_cli": "MadelineProto はあなたの言語に翻訳できます (現在の翻訳進捗: %d%%)。翻訳に協力するには https://github.com/danog/MadelineProto/tree/v8/langs にアクセスしてください!", + "apiInvalidWeb": "API ID は数字で、API hash は 32 文字です。my.telegram.org からもう一度コピーしてください。", + "webDoneLead": "MadelineProto はサーバー上で実行を続けています。このページは閉じてもかまいません。", + "apiChooseManualAuto": "API ID と hash を my.telegram.org から自動で取得しますか (a)、それとも手動で入力しますか (m)?", + "apiAutoFallbackManual": "代わりに API ID と hash を手動で入力してください。", + "apiSetupTitleWeb": "API ID と hash を取得", + "apiSetupLeadWeb": "すべての Telegram アプリには API ID と hash が必要です。既存の Telegram アカウントの電話番号を使って、MadelineProto が my.telegram.org から取得できます。", + "apiAutoPhoneHintWeb": "my.telegram.org はログインコードを SMS ではなく Telegram アプリに送信します。", + "apiSendCodeWeb": "コードを送信", + "apiChooseManualWeb": "API ID を持っています", + "apiChooseAutoWeb": "自動で取得する", + "apiStartOverWeb": "最初からやり直す", + "apiAutoCodeTitleWeb": "Telegram で受け取ったコードを入力", + "apiAutoCodeLeadWeb": "my.telegram.org が Telegram アプリの「Telegram」とのチャットにログインコードを送信しました (SMS ではありません)。", + "apiAutoCodeLabelWeb": "ログインコード", + "apiCreateTitleWeb": "アプリを作成", + "apiCreateLeadWeb": "このアカウントには my.telegram.org のアプリがまだありません。以下の情報はあなたにのみ表示され、後から変更できます。", + "apiAppTitleLabelWeb": "アプリ名", + "apiAppShortNameLabelWeb": "短い名前", + "apiAppUrlLabelWeb": "URL", + "apiAppDescLabelWeb": "説明", + "apiCreateWeb": "アプリを作成", + "apiSaveWeb": "保存して続行", + "apiAutoErrorTitle": "my.telegram.org がエラーを返しました", + "apiCreateErrorTitle": "my.telegram.org でアプリを作成できませんでした", + "apiCreateVpsWarning": "Telegram では、VPS、VPN などのデータセンターの IP 範囲から my.telegram.org で新しいアプリを作成することはできません。このリクエストは MadelineProto を実行しているマシンの IP から送信されました。家庭用回線 (モバイルデータ通信中のスマートフォンなど) から https://my.telegram.org で手動でアプリを作成し、API ID と hash を入力してください。", + "loginTitleWeb": "Telegram にログイン", + "loginLeadWeb": "この MadelineProto インスタンスで使用するアカウントまたはボットを選択してください。", + "loginTypeWeb": "ログインの種類", + "loginUserPhoneHintWeb": "国番号を含めて入力してください (例: +39 123 456 7890)。", + "loginBotTokenHintWeb": "ボットの作成時に @BotFather から受け取ったトークンです。", + "loginCodeTitleWeb": "ログインコードを入力", + "loginCodeLeadWeb": "Telegram がログインコードを Telegram アプリに送信しました。他の端末でログインしていない場合は SMS で送信されます。", + "loginPasswordTitleWeb": "2 段階認証", + "loginPasswordLeadWeb": "このアカウントは、[設定] > [プライバシーとセキュリティ] > [2 段階認証] で設定されたパスワードで保護されています。", + "loginPasswordLabelWeb": "パスワード", + "signupTitleWeb": "アカウントを作成", + "signupLeadWeb": "この電話番号はまだ Telegram に登録されていません。新しいアカウントの名前を入力してください。", + "webContinue": "続行", + "webLogin": "ログイン", + "webError": "%s。確認してもう一度お試しください。", + "webStepApp": "API ID と hash", + "webStepAccount": "アカウント", + "webStepVerify": "認証", + "webStepDone": "実行中", + "webProgress": "セットアップの進捗", + "webDocs": "ドキュメント", + "webOptional": "任意", + "webShowPassword": "表示", + "webHidePassword": "非表示", + "webQrTitle": "QR コードでログイン", + "webQrWaiting": "スキャンを待っています…", + "webFieldRequired": "この項目を入力してください。", + "webPhoneInvalid": "国番号を含めて電話番号を入力してください (例: +39 123 456 7890)。", + "tweb.Login.Title": "MadelineProto にログイン", + "tweb.Login.PhoneLabelInvalid": "無効な電話番号", + "tweb.Login.StartText": "国番号を確認して\n電話番号を入力してください。", + "tweb.Login.Code.SentSms": "コードを記載した SMS を\n送信しました。", + "tweb.Login.Code.SentInApp": "コードを記載したメッセージを\nTelegram で送信しました。", + "tweb.Login.Code.SentCall": "お電話でコードを\nお伝えします。", + "tweb.Login.Code.SentEmail": "メールアドレス **%s** を確認し (迷惑メールフォルダーもご確認ください)、送信したコードを入力してください。", + "tweb.Login.Code.SentUnknown": "あらゆる場所でコードを\nご確認ください (種類: %s)", + "tweb.Login.Code.SentMissedCall": "数秒以内に **%s** から\n短い着信があります。応答せずに、\nその番号の末尾の数字を入力してください。", + "tweb.Login.Code.SentSmsWord": "電話番号 **%s** に\n秘密の単語を記載した SMS を送信しました。", + "tweb.Login.Code.SentSmsWordBeginning": "電話番号 **%1$s** に、「**%2$s**」で始まる\n秘密の単語を記載した SMS を送信しました。", + "tweb.Login.Code.SentSmsPhrase": "電話番号 **%s** に\n秘密のフレーズを記載した SMS を送信しました。", + "tweb.Login.Code.SentSmsPhraseBeginning": "電話番号 **%1$s** に、「**%2$s**」で始まる\n秘密のフレーズを記載した SMS を送信しました。", + "tweb.Login.Code.SecretWord": "秘密の単語", + "tweb.Login.Code.SecretPhrase": "秘密のフレーズ", + "tweb.Login.Code.WordInvalid": "正しくありません。もう一度お試しください", + "tweb.Login.Code.WordBeginningInvalid": "単語が正しくありません", + "tweb.Login.Password.Title": "パスワードを入力", + "tweb.Login.Password.Subtitle": "このアカウントは追加のパスワードで\n保護されています", + "tweb.Login.Register.Subtitle": "アカウントを作成するには\n名前を入力してください", + "tweb.PleaseWait": "お待ちください...", + "tweb.Code": "コード", + "tweb.LoginPassword": "パスワード", + "tweb.YourName": "名前", + "tweb.FirstName": "名 (必須)", + "tweb.LastName": "姓 (任意)", + "tweb.StartMessaging": "メッセージを始める", + "tweb.Country": "国", + "tweb.Contacts.PhoneNumber.Placeholder": "電話番号", + "tweb.Login.Next": "次へ", + "tweb.Login.QR.Title": "QR コードでログイン", + "tweb.Login.QR.Help1": "スマートフォンで Telegram を開きます", + "tweb.Login.QR.Help2": "**[設定]** > **[デバイス]** > **[デバイスを追加]** に進みます", + "tweb.Login.QR.Help3": "スマートフォンをこの画面に向けてログインを確認します", + "tweb.Login.QR.Cancel": "電話番号でログイン >", + "tweb.Login.QR.Login": "QR コードでログイン >", + "tweb.Login.QR.Subtitle": "スマートフォンの Telegram アプリでスキャンしてください", + "tweb.PhoneNumber.Code.Fragment.Info": "[Fragment]() の Numbers セクションでコードを確認してください", + "tweb.PHONE_CODE_INVALID": "無効なコードです", + "tweb.PHONE_CODE_EXPIRED": "コードの有効期限が切れました", + "tweb.PASSWORD_HASH_INVALID": "パスワードが正しくありません", + "tweb.DarkMode": "ダークモード", + "tweb.Error.AnError": "エラーが発生しました。しばらくしてからもう一度お試しください。", + "tweb.AccDescr.LoginCode": "ログインコード", + "tweb.Login.Bot": "ボットとしてログイン >", + "tweb.Login.Bot.Title": "ボットとしてログイン", + "tweb.Login.Bot.Subtitle": "ボットの作成時に @BotFather から\n受け取ったトークンを入力してください。", + "tweb.Login.Bot.Token": "ボットトークン", + "tweb.Login.Bot.Cancel": "ユーザーとしてログイン >", + "tweb.Optional": "任意", + "tweb.PHONE_NUMBER_INVALID": "無効な電話番号です", + "tweb.PHONE_NUMBER_BANNED": "この電話番号は利用停止されています", + "tweb.PHONE_NUMBER_FLOOD": "試行回数が多すぎます。しばらくしてからもう一度お試しください", + "tweb.PHONE_CODE_EMPTY": "無効なコードです", + "tweb.PHONE_PASSWORD_FLOOD": "試行回数が多すぎます。しばらくしてからもう一度お試しください", + "tweb.ACCESS_TOKEN_INVALID": "無効なボットトークンです", + "tweb.ACCESS_TOKEN_EXPIRED": "このボットトークンは無効化されています", + "tweb.FIRSTNAME_INVALID": "無効な名です", + "tweb.LASTNAME_INVALID": "無効な姓です", + "tweb.Close": "閉じる" +} diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/ko.json b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/ko.json new file mode 100644 index 0000000..1c9e265 --- /dev/null +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/ko.json @@ -0,0 +1,274 @@ +{ + "baseDirLimitation": "basedir 제한이 설정되어 있습니다. 성능에 영향을 주고 문제를 일으킬 수 있으므로 가능하면 비활성화하십시오!", + "noReportPeers": "경고: 보고 대상 피어가 설정되지 않았습니다. 이벤트 핸들러에 다음 메서드를 추가하십시오", + "manualAdminActionRequired": "!!!!!!!!! 시스템 관리자의 수동 조치가 필요합니다 !!!!!!!!!", + "mmapErrorPart1": "메모리 매핑(mmap) 영역의 최대 개수에 도달했습니다(%s). 해결하려면 커널 설정 vm.max_map_count를 262144로 늘리십시오.", + "mmapErrorPart2": "해결하려면 root 권한으로 다음 명령을 실행하십시오: %s", + "mmapErrorPart3": "재부팅 후에도 변경 사항을 유지하려면: %s", + "mmapErrorPart4": "Windows 및 WSL에서는 페이지 파일 크기를 늘리면 도움이 될 수 있습니다. 문제가 계속되면 네이티브 Linux로 전환하십시오.", + "botAlreadyRunning": "봇이 이미 실행 중입니다!", + "extensionRequired": "MadelineProto를 실행하려면 %s 확장이 필요합니다. %s", + "extensionRequiredInstallWithApt": "sudo apt-get install %s 명령을 실행해 보십시오.", + "extensionRequiredInstallWithCustomInstructions": "%s의 안내에 따라 설치하십시오.", + "extensionRecommended": "경고: %s 확장이 설치되어 있지 않습니다. MadelineProto의 속도를 높이려면 설치하십시오!", + "go": "실행", + "apiChooseManualAutoTip": "설정을 사용하여 코드에서 API ID/hash를 직접 지정할 수도 있습니다: %s", + "apiChooseManualAutoTipWeb": "설정을 사용하여 코드에서 API ID/hash를 직접 지정할 수도 있습니다.", + "apiChoosePrompt": "선택하십시오 (m/a): ", + "apiManualInstructions0": "https://my.telegram.org에 로그인합니다", + "apiManualInstructions1": "API development tools로 이동합니다", + "apiManualInstructions2": "create application을 클릭합니다", + "apiAppInstructionsManual0": "앱 이름, 아무 이름이나 가능", + "apiAppInstructionsManual1": "앱의 짧은 이름, 영문자와 숫자, 5~32자", + "apiAppInstructionsManual2": "앱/웹사이트 URL 또는 t.me/yourusername", + "apiAppInstructionsManual3": "아무 값이나 가능", + "apiAppInstructionsManual4": "여기에 앱 설명을 입력합니다", + "apiManualWeb": "API ID와 API hash를 입력하십시오", + "apiManualPrompt0": "API ID를 입력하십시오: ", + "apiManualPrompt1": "API hash를 입력하십시오: ", + "apiAutoWeb": "API ID를 받으려면 Telegram에 이미 등록된 전화번호를 입력하십시오", + "apiAutoPrompt0": "Telegram에 이미 등록된 전화번호를 입력하십시오: ", + "apiAutoPrompt1": "Telegram에서 받은 인증 코드를 입력하십시오: ", + "apiAppWeb": "API 정보를 입력하십시오", + "apiAppInstructionsAuto0": "앱 이름을 입력하십시오(아무 이름이나 가능): ", + "apiAppInstructionsAuto1": "앱의 짧은 이름을 입력하십시오(영문자와 숫자, 5~32자): ", + "apiAppInstructionsAuto2": "앱/웹사이트 URL 또는 t.me/yourusername을 입력하십시오: ", + "apiAppInstructionsAuto3": "앱 플랫폼을 입력하십시오: ", + "apiAppInstructionsAuto4": "앱 설명을 입력하십시오: ", + "apiAppInstructionsAutoTypeOther": "기타(설명에 명시)", + "apiParamsError": "필수 매개변수를 모두 입력하지 않았습니다!", + "apiError": "오류: %s. 다시 시도하십시오.", + "loginChoosePromptWeb": "사용자와 봇 중 어느 것으로 로그인하시겠습니까?", + "loginWebQr": "휴대폰에서 Telegram을 열고 설정 > 기기 > 데스크톱 기기 연결로 이동하여 다음 QR 코드를 스캔하면 자동으로 로그인할 수도 있습니다:", + "loginWebQr1": "휴대폰에서 Telegram을 엽니다", + "loginWebQr2": "설정 > 기기 > 데스크톱 기기 연결로 이동합니다", + "loginWebQr3": "휴대폰을 이 화면에 비추어 로그인을 확인합니다", + "loginOptionBot": "봇", + "loginOptionUser": "사용자", + "loginBot": "봇 토큰을 입력하십시오: ", + "loginUser": "전화번호를 입력하십시오: ", + "loginQr": "휴대폰에서 Telegram을 열고 설정 > 기기 > 데스크톱 기기 연결로 이동하여 위의 QR 코드를 스캔하면 자동으로 로그인됩니다.", + "loginQrCodeSuccessful": "QR 코드 로그인에 성공했습니다!", + "loginQrCodeExpired": "QR 코드가 만료되었습니다. 새 코드를 생성하는 중...", + "loginManual": "또는 봇 토큰이나 전화번호를 입력하여 수동으로 로그인할 수도 있습니다: ", + "loginUserCode": "코드를 입력하십시오: ", + "loginUserPass": "비밀번호를 입력하십시오(힌트: %s): ", + "loginUserPassWeb": "비밀번호를 입력하십시오: ", + "loginUserPassHint": "힌트: %s", + "signupFirstName": "이름을 입력하십시오: ", + "signupLastName": "성을 입력하십시오(비워 둘 수 있음): ", + "signupWeb": "가입하십시오", + "signupFirstNameWeb": "이름", + "signupLastNameWeb": "성", + "loginNoCode": "전화 인증 코드를 입력하지 않았습니다!", + "loginNoPass": "비밀번호를 입력하지 않았습니다!", + "loginNoName": "이름을 입력하지 않았습니다!", + "loginBotTokenWeb": "봇 토큰", + "loginUserPhoneWeb": "전화번호", + "loginUserPhoneCodeWeb": "코드", + "done": "완료되었습니다!", + "nearest_dc": "현재 위치는 %s이며, 가장 가까운 DC는 %d입니다.", + "serialization_ofd": "직렬화 형식이 오래되어 객체를 재구성하는 중입니다!", + "api_not_set": "API 키와 API ID를 입력해야 합니다. my.telegram.org에서 발급받으십시오", + "session_corrupted": "세션이 손상되었습니다!", + "value_bigger_than_2147483647": "입력한 값 %s이(가) 2147483647보다 큽니다", + "value_smaller_than_2147483648": "입력한 값 %s이(가) -2147483648보다 작습니다", + "value_bigger_than_9223372036854775807": "입력한 값 %s이(가) 9223372036854775807보다 큽니다", + "value_smaller_than_9223372036854775808": "입력한 값 %s이(가) -9223372036854775808보다 작습니다", + "value_bigger_than_4294967296": "입력한 값 %s이(가) 4294967296보다 큽니다", + "value_smaller_than_0": "입력한 값 %s이(가) 0보다 작습니다", + "encode_double_error": "double을 올바르게 인코딩할 수 없습니다", + "file_not_exist": "파일이 존재하지 않습니다", + "deserialization_error": "역직렬화 중 오류가 발생했습니다", + "rpc_tg_error": "Telegram이 RPC 오류를 반환했습니다: %s (%s), 발생 위치 %s:%s%sTL 추적:", + "madelineproto_ready": "MadelineProto가 준비되었습니다!", + "logout_ok": "로그아웃되었습니다!", + "already_loggedIn": "이 MadelineProto 인스턴스는 이미 로그인되어 있습니다!", + "login_ok": "로그인되었습니다!", + "login_user": "일반 사용자로 로그인하는 중...", + "login_bot": "봇으로 로그인하는 중...", + "login_code_sending": "코드를 보내는 중...", + "login_code_sent": "코드를 보냈습니다! 코드를 받으면 completePhoneLogin 함수를 사용하십시오.", + "login_code_uncalled": "코드를 기다리고 있지 않습니다! 먼저 phoneLogin 메서드를 호출하십시오", + "login_2fa_enabled": "2단계 인증이 활성화되어 있습니다. complete2falogin 함수를 호출해야 합니다...", + "login_need_signup": "이 번호로 생성된 계정이 없습니다. completeSignup 함수를 호출해야 합니다...", + "login_auth_key": "인증 키로 로그인하는 중...", + "not_loggedIn": "로그인되어 있지 않습니다!", + "signup_uncalled": "가입을 기다리고 있지 않습니다! 먼저 phoneLogin 및 completePhoneLogin 메서드를 호출하십시오!", + "signing_up": "일반 사용자로 가입하는 중...", + "signup_ok": "가입되었습니다!", + "2fa_uncalled": "비밀번호를 기다리고 있지 않습니다! 먼저 phoneLogin 및 completePhoneLogin 메서드를 호출하십시오!", + "peer_not_in_db": "이 피어는 내부 피어 데이터베이스에 없습니다", + "call_error_1": "통화 %s을(를) 찾아 수락할 수 없습니다", + "accepting_call": "%s의 통화를 수락하는 중...", + "call_already_accepted": "통화 %s은(는) 이미 수락되었습니다", + "call_already_declined": "통화 %s은(는) 이미 거절되었습니다", + "call_error_2": "통화 %s을(를) 찾아 확인할 수 없습니다", + "call_confirming": "%s의 통화를 확인하는 중...", + "call_error_3": "통화 %s을(를) 찾아 완료할 수 없습니다", + "call_completing": "%s의 통화를 완료하는 중...", + "fingerprint_invalid": "키 지문이 유효하지 않습니다!", + "call_discarding": "통화 %s을(를) 종료하는 중...", + "file_parsing": "%s을(를) 파싱하는 중...", + "src_file_invalid": "유효하지 않은 소스 파일이 입력되었습니다: ", + "bool_error": "불리언 값을 추출할 수 없습니다", + "not_numeric": "입력한 값이 숫자가 아닙니다", + "long_not_16": "입력한 값의 길이가 16바이트가 아닙니다", + "long_not_32": "입력한 값의 길이가 32바이트가 아닙니다", + "long_not_64": "입력한 값의 길이가 64바이트가 아닙니다", + "array_invalid": "유효한 배열을 입력하지 않았습니다", + "predicate_not_set": "술어(_ 아래의 값)가 설정되지 않았습니다!", + "update_madelineproto": "오래된 버전의 MadelineProto를 실행 중이므로 업데이트가 필요합니다. 현재 실행 중인 버전은 %s이지만, 여러 버그 수정과 새 기능이 포함된 최신 버전은 %s입니다!", + "type_extract_error": "타입 \"%s\"을(를) 추출할 수 없습니다. MadelineProto를 업데이트하십시오!", + "method_not_found": "메서드를 찾을 수 없습니다: ", + "params_missing": "필수 매개변수가 없습니다", + "sec_peer_not_in_db": "이 비밀 피어는 내부 피어 데이터베이스에 없습니다", + "stream_handle_invalid": "유효하지 않은 스트림 핸들이 입력되었습니다.", + "length_too_big": "길이가 너무 깁니다", + "string_required": "문자열이 필요합니다!", + "waveform_must_have_100_values": "파형 배열에는 100개의 값이 있어야 합니다!", + "waveform_value": "파형 값은 0에서 31 사이여야 합니다!", + "could_not_convert_object": "%s 타입의 객체를 변환할 수 없습니다", + "type_extract_error_id": "타입 %s(ID %s)을(를) 추출할 수 없습니다. MadelineProto를 업데이트하십시오!", + "constructor_not_found": "다음 타입의 생성자를 찾을 수 없습니다: ", + "botapi_conversion_error": "%s을(를) Bot API 객체로 변환할 수 없습니다", + "non_text_conversion": "텍스트가 아닌 메시지는 아직 변환할 수 없습니다!", + "file_type_invalid": "유효하지 않은 파일 형식이 감지되었습니다(%s)", + "static_analysis_minor": "%s의 정적 분석 중 경미한 문제가 발견되었습니다: %s", + "static_analysis_severe": "%s의 정적 분석 중 심각한 문제가 발견되었습니다: %s", + "secret_chat_skipping": "데이터베이스에 비밀 채팅 %s이(가) 없으므로 메시지를 건너뜁니다...", + "must_have_declare_types": "성능상의 이유로 이벤트 핸들러 파일의 첫 번째 문은 \"declare(strict_types=1);\"이어야 합니다", + "do_not_delete_MadelineProto.log": "MadelineProto.log 파일은 절대 삭제하면 안 됩니다. 대신 설정에서 사용자 지정 최대 크기를 설정하십시오!", + "do_not_remove_MadelineProto.log_phar": "madeline.phar 또는 madeline.php를 삭제하지 마십시오. 삭제하면 MadelineProto가 비정상 종료됩니다. MadelineProto에 문제가 있으면 https://github.com/danog/MadelineProto 또는 https://t.me/pwrtelegramgroup에 보고하십시오", + "do_not_use_blocking_function": "성능상의 이유로 이벤트 핸들러에서는 비동기가 아닌 블로킹 함수 %s을(를) 사용할 수 없습니다. 대신 %s을(를) 사용하십시오", + "do_not_use_blocking_class": "성능상의 이유로 핸들러에서는 비동기가 아닌 블로킹 클래스 %s을(를) 사용할 수 없습니다. 대신 %s을(를) 사용하십시오", + "do_not_use_deprecated_function": "%s 함수는 더 이상 사용되지 않습니다. 대신 %s을(를) 사용하십시오", + "do_not_use_non_root_require_in_event_handler": "성능상의 이유로 이벤트 핸들러 클래스 내부에서 require 또는 include를 사용하면 안 됩니다. 루트 수준의 require만 허용됩니다.", + "do_not_use_yield": "MadelineProto 8에서는 비동기 함수에서 yield를 사용할 필요가 없으며 지원하지도 않습니다. 이전에 비동기 함수 호출에 사용한 yield 키워드를 모두 제거하십시오", + "recommend_not_use_filesystem_function": "%s 함수는 사용하지 않는 것이 좋습니다. 업데이트를 처리하는 동안 파일 시스템에 접근하면 봇이 느려지기 때문입니다. 봇을 느리게 하지 않는 데이터 저장 방법은 https://docs.madelineproto.xyz/docs/UPDATES.html#avoiding-the-use-of-filesystem-functions 을 참조하십시오!", + "plugins_do_not_use_require": "성능상의 이유로 플러그인은 PSR-4 오토로더를 통해서만 plugins 폴더의 다른 파일을 자동으로 include 또는 require할 수 있습니다(직접 require()할 수 없습니다).", + "plugins_must_have_exactly_one_class": "플러그인은 정확히 하나의 클래스만 정의해야 합니다! 여러 클래스, 인터페이스 또는 트레이트를 정의하려면 별도의 파일을 만드십시오. MadelineProto가 자동으로 오토로드합니다.", + "cli_need_dl.php_link": "CLI에서 getDownloadLink를 사용할 때는 다운로드 스크립트 URL을 지정하십시오!", + "invalid_dl.php_session": "%s은(는) 세션 ID가 달라 유효한 다운로드 스크립트가 아닙니다(예상: %s, 실제: %s)", + "need_dl.php": "기본 다운로드 스크립트를 생성할 수 없습니다(%s). 다음 내용으로 dl.php 파일을 만들고: %s 해당 URL을 getDownloadLink의 두 번째 매개변수로 전달하십시오", + "dl.php_powered_by_madelineproto": "Telegram 파일 다운로드 서버(최대 4GB), powered by MadelineProto!
나만의 Telegram 파일 다운로드 서버를 설정하는 방법에 대한 자세한 내용은 여기를 클릭하십시오!", + "dl.php_check_logs_make_sure_session_running": "연결된 MadelineProto EventHandler 봇 또는 MadelineProto IPC 서버가 오프라인입니다. 로그를 확인하고 둘 중 하나 이상이 실행 중인지 확인하십시오!", + "account_banned": "!!!!!!! 경고 !!!!!!!\nTelegram의 플러드 방지 시스템이 이 계정을 정지했습니다.\n계속하려면 수동 인증이 필요합니다.\nrecover@telegram.org로 이메일을 보내 전화번호 %s의 정지 해제를 요청하고, 이 전화번호로 무엇을 할 것인지 간단히 설명하십시오.\n그런 다음 다시 로그인하십시오.\n이 계정을 의도적으로 삭제한 경우 이 메시지를 무시하십시오.", + "plugin_path_does_not_exist": "플러그인 경로 %s이(가) 존재하지 않습니다!", + "could_not_connect_to_MadelineProto": "MadelineProto에 연결할 수 없습니다. 해결하려면 proc_open을 활성화하고 open_basedir 제한을 제거하거나 웹 서버의 경로 재작성을 비활성화하십시오! 이미 그렇게 했다면 CLI 버전의 PHP가 웹 버전과 정확히 같은지(버전, 확장 등) 확인하고, IPC 서버의 시작을 막은 오류에 대한 자세한 내용은 MadelineProto.log 파일을 확인하십시오.", + "translate_madelineproto_web": "MadelineProto를 여러분의 언어로 번역할 수 있습니다(현재 번역 진행률: %d%%). 여기를 클릭하여 번역에 참여하십시오!", + "translate_madelineproto_cli": "MadelineProto를 여러분의 언어로 번역할 수 있습니다(현재 번역 진행률: %d%%). 번역에 참여하려면 https://github.com/danog/MadelineProto/tree/v8/langs 에 방문하십시오!", + "apiInvalidWeb": "API ID는 숫자이고 API hash는 32자입니다. my.telegram.org에서 다시 복사하십시오.", + "webDoneLead": "MadelineProto가 서버에서 계속 실행 중입니다. 이 페이지를 닫아도 됩니다.", + "apiChooseManualAuto": "my.telegram.org에서 API ID와 hash를 자동으로 받으시겠습니까(a), 아니면 직접 입력하시겠습니까(m)?", + "apiAutoFallbackManual": "대신 API ID와 hash를 직접 입력하십시오.", + "apiSetupTitleWeb": "API ID와 hash 받기", + "apiSetupLeadWeb": "모든 Telegram 앱에는 API ID와 hash가 필요합니다. 기존 Telegram 계정의 전화번호로 MadelineProto가 my.telegram.org에서 대신 받아올 수 있습니다.", + "apiAutoPhoneHintWeb": "my.telegram.org는 로그인 코드를 SMS가 아닌 Telegram 앱으로 보냅니다.", + "apiSendCodeWeb": "코드 보내기", + "apiChooseManualWeb": "이미 API ID가 있습니다", + "apiChooseAutoWeb": "자동으로 받기", + "apiStartOverWeb": "처음부터 다시", + "apiAutoCodeTitleWeb": "Telegram에서 받은 코드 입력", + "apiAutoCodeLeadWeb": "my.telegram.org가 Telegram 앱의 Telegram 채팅으로 로그인 코드를 보냈습니다(SMS 아님).", + "apiAutoCodeLabelWeb": "로그인 코드", + "apiCreateTitleWeb": "앱 만들기", + "apiCreateLeadWeb": "이 계정에는 아직 my.telegram.org 앱이 없습니다. 아래 정보는 본인에게만 표시되며 나중에 변경할 수 있습니다.", + "apiAppTitleLabelWeb": "앱 이름", + "apiAppShortNameLabelWeb": "짧은 이름", + "apiAppUrlLabelWeb": "URL", + "apiAppDescLabelWeb": "설명", + "apiCreateWeb": "앱 만들기", + "apiSaveWeb": "저장하고 계속", + "apiAutoErrorTitle": "my.telegram.org가 오류를 반환했습니다", + "apiCreateErrorTitle": "my.telegram.org에서 앱을 만들지 못했습니다", + "apiCreateVpsWarning": "Telegram은 VPS, VPN 및 기타 데이터 센터 IP 대역에서 my.telegram.org의 새 앱을 만드는 것을 허용하지 않으며, 이 요청은 MadelineProto를 실행하는 머신의 IP에서 전송되었습니다. 가정용 회선(예: 모바일 데이터를 사용하는 휴대폰)에서 https://my.telegram.org에 접속해 직접 앱을 만든 다음 API ID와 hash를 입력하십시오.", + "loginTitleWeb": "Telegram에 로그인", + "loginLeadWeb": "이 MadelineProto 인스턴스가 사용할 계정 또는 봇을 선택하십시오.", + "loginTypeWeb": "로그인 유형", + "loginUserPhoneHintWeb": "국가 코드를 포함하여 입력하십시오(예: +39 123 456 7890).", + "loginBotTokenHintWeb": "봇을 만들 때 @BotFather가 알려 준 토큰입니다.", + "loginCodeTitleWeb": "로그인 코드 입력", + "loginCodeLeadWeb": "Telegram이 Telegram 앱으로 로그인 코드를 보냈습니다. 다른 곳에 로그인되어 있지 않다면 SMS로 보냅니다.", + "loginPasswordTitleWeb": "2단계 인증", + "loginPasswordLeadWeb": "이 계정은 설정 > 개인정보 및 보안 > 2단계 인증에서 설정한 비밀번호로 보호되어 있습니다.", + "loginPasswordLabelWeb": "비밀번호", + "signupTitleWeb": "계정 만들기", + "signupLeadWeb": "이 전화번호는 아직 Telegram에 가입되어 있지 않습니다. 새 계정의 이름을 입력하십시오.", + "webContinue": "계속", + "webLogin": "로그인", + "webError": "%s. 확인 후 다시 시도하십시오.", + "webStepApp": "API ID 및 hash", + "webStepAccount": "계정", + "webStepVerify": "인증", + "webStepDone": "실행 중", + "webProgress": "설정 진행 상황", + "webDocs": "문서", + "webOptional": "선택 사항", + "webShowPassword": "표시", + "webHidePassword": "숨기기", + "webQrTitle": "QR 코드로 로그인", + "webQrWaiting": "스캔을 기다리는 중…", + "webFieldRequired": "이 항목을 입력하십시오.", + "webPhoneInvalid": "국가 코드를 포함한 전화번호를 입력하십시오(예: +39 123 456 7890).", + "tweb.Login.Title": "MadelineProto에 로그인", + "tweb.Login.PhoneLabelInvalid": "잘못된 전화번호", + "tweb.Login.StartText": "국가 코드를 확인하고\n전화번호를 입력하십시오.", + "tweb.Login.Code.SentSms": "코드가 담긴 SMS를\n보냈습니다.", + "tweb.Login.Code.SentInApp": "코드가 담긴 메시지를\nTelegram으로 보냈습니다.", + "tweb.Login.Code.SentCall": "전화로 코드를\n불러 드립니다.", + "tweb.Login.Code.SentEmail": "이메일 **%s**을(를) 확인하고(스팸함도 확인하십시오) 방금 보낸 코드를 입력하십시오.", + "tweb.Login.Code.SentUnknown": "모든 곳에서 코드를\n확인하십시오(유형: %s)", + "tweb.Login.Code.SentMissedCall": "몇 초 안에 **%s**에서\n짧은 전화가 걸려 옵니다. 받지 말고\n그 번호의 마지막 숫자를 입력하십시오.", + "tweb.Login.Code.SentSmsWord": "전화번호 **%s**(으)로\n비밀 단어가 담긴 SMS를 보냈습니다.", + "tweb.Login.Code.SentSmsWordBeginning": "전화번호 **%1$s**(으)로 \"**%2$s**\"(으)로 시작하는\n비밀 단어가 담긴 SMS를 보냈습니다.", + "tweb.Login.Code.SentSmsPhrase": "전화번호 **%s**(으)로\n비밀 문구가 담긴 SMS를 보냈습니다.", + "tweb.Login.Code.SentSmsPhraseBeginning": "전화번호 **%1$s**(으)로 \"**%2$s**\"(으)로 시작하는\n비밀 문구가 담긴 SMS를 보냈습니다.", + "tweb.Login.Code.SecretWord": "비밀 단어", + "tweb.Login.Code.SecretPhrase": "비밀 문구", + "tweb.Login.Code.WordInvalid": "올바르지 않습니다. 다시 시도하십시오", + "tweb.Login.Code.WordBeginningInvalid": "잘못된 단어", + "tweb.Login.Password.Title": "비밀번호 입력", + "tweb.Login.Password.Subtitle": "이 계정은 추가 비밀번호로\n보호되어 있습니다", + "tweb.Login.Register.Subtitle": "계정을 만들려면\n이름을 입력하십시오", + "tweb.PleaseWait": "잠시 기다려 주십시오...", + "tweb.Code": "코드", + "tweb.LoginPassword": "비밀번호", + "tweb.YourName": "이름", + "tweb.FirstName": "이름(필수)", + "tweb.LastName": "성(선택 사항)", + "tweb.StartMessaging": "메시지 시작하기", + "tweb.Country": "국가", + "tweb.Contacts.PhoneNumber.Placeholder": "전화번호", + "tweb.Login.Next": "다음", + "tweb.Login.QR.Title": "QR 코드로 로그인", + "tweb.Login.QR.Help1": "휴대폰에서 Telegram을 엽니다", + "tweb.Login.QR.Help2": "**설정** > **기기** > **기기 추가**로 이동합니다", + "tweb.Login.QR.Help3": "휴대폰을 이 화면에 비추어 로그인을 확인합니다", + "tweb.Login.QR.Cancel": "전화번호로 로그인 >", + "tweb.Login.QR.Login": "QR 코드로 로그인 >", + "tweb.Login.QR.Subtitle": "휴대폰의 Telegram 앱으로 스캔하십시오", + "tweb.PhoneNumber.Code.Fragment.Info": "[Fragment]()의 Numbers 섹션에서 코드를 받으십시오", + "tweb.PHONE_CODE_INVALID": "잘못된 코드", + "tweb.PHONE_CODE_EXPIRED": "코드가 만료되었습니다", + "tweb.PASSWORD_HASH_INVALID": "비밀번호가 올바르지 않습니다", + "tweb.DarkMode": "다크 모드", + "tweb.Error.AnError": "오류가 발생했습니다. 나중에 다시 시도하십시오.", + "tweb.AccDescr.LoginCode": "로그인 코드", + "tweb.Login.Bot": "봇으로 로그인 >", + "tweb.Login.Bot.Title": "봇으로 로그인", + "tweb.Login.Bot.Subtitle": "봇을 만들 때 @BotFather가 알려 준\n토큰을 입력하십시오.", + "tweb.Login.Bot.Token": "봇 토큰", + "tweb.Login.Bot.Cancel": "사용자로 로그인 >", + "tweb.Optional": "선택 사항", + "tweb.PHONE_NUMBER_INVALID": "잘못된 전화번호", + "tweb.PHONE_NUMBER_BANNED": "이 전화번호는 차단되었습니다", + "tweb.PHONE_NUMBER_FLOOD": "시도 횟수가 너무 많습니다. 나중에 다시 시도하십시오", + "tweb.PHONE_CODE_EMPTY": "잘못된 코드", + "tweb.PHONE_PASSWORD_FLOOD": "시도 횟수가 너무 많습니다. 나중에 다시 시도하십시오", + "tweb.ACCESS_TOKEN_INVALID": "잘못된 봇 토큰", + "tweb.ACCESS_TOKEN_EXPIRED": "이 봇 토큰은 폐기되었습니다", + "tweb.FIRSTNAME_INVALID": "잘못된 이름", + "tweb.LASTNAME_INVALID": "잘못된 성", + "tweb.Close": "닫기" +} diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/pl.json b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/pl.json index aafea4b..9f9f37e 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/pl.json +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/pl.json @@ -1,4 +1,274 @@ { - "noReportPeers": "Ostrzeżenie: nie ustawiono żadnych elementów równorzędnych raportu, dodaj następującą metodę do programu obsługi zdarzeń", - "baseDirLimitation": "Skonfigurowane jest ograniczenie katalogu bazowego: może to wpłynąć na wydajność i spowodować pewne problemy, wyłącz je, jeśli to możliwe!" + "baseDirLimitation": "Skonfigurowane jest ograniczenie katalogu bazowego: może to wpłynąć na wydajność i spowodować pewne problemy, wyłącz je, jeśli to możliwe!", + "noReportPeers": "Ostrzeżenie: nie ustawiono odbiorców raportów (report peers), dodaj następującą metodę do swojego event handlera", + "manualAdminActionRequired": "!!!!!!!!! WYMAGANA RĘCZNA INTERWENCJA ADMINISTRATORA SYSTEMU !!!!!!!!!", + "mmapErrorPart1": "Osiągnięto maksymalną liczbę regionów pamięci mapowanej (mmap) (%s): aby to naprawić, zwiększ parametr jądra vm.max_map_count do 262144.", + "mmapErrorPart2": "Aby to naprawić, uruchom jako root następujące polecenie: %s", + "mmapErrorPart3": "Aby zmiana została zachowana po ponownym uruchomieniu: %s", + "mmapErrorPart4": "W systemie Windows i WSL może pomóc zwiększenie rozmiaru pliku stronicowania; jeśli problem nie ustąpi, przejdź na natywny system Linux.", + "botAlreadyRunning": "Bot jest już uruchomiony!", + "extensionRequired": "MadelineProto wymaga do działania rozszerzenia %s. %s", + "extensionRequiredInstallWithApt": "Spróbuj uruchomić sudo apt-get install %s.", + "extensionRequiredInstallWithCustomInstructions": "Aby je zainstalować, postępuj zgodnie z instrukcjami na %s.", + "extensionRecommended": "Ostrzeżenie: rozszerzenie %s nie jest zainstalowane, zainstaluj je, aby przyspieszyć MadelineProto!", + "go": "Dalej", + "apiChooseManualAutoTip": "Pamiętaj, że API ID/hash możesz też podać bezpośrednio w kodzie za pomocą ustawień: %s", + "apiChooseManualAutoTipWeb": "Pamiętaj, że API ID/hash możesz też podać bezpośrednio w kodzie za pomocą ustawień.", + "apiChoosePrompt": "Twój wybór (m/a): ", + "apiManualInstructions0": "Zaloguj się na https://my.telegram.org", + "apiManualInstructions1": "Przejdź do „API development tools”", + "apiManualInstructions2": "Kliknij „Create application”", + "apiAppInstructionsManual0": "nazwa aplikacji, dowolna", + "apiAppInstructionsManual1": "krótka nazwa aplikacji, alfanumeryczna, 5-32 znaki", + "apiAppInstructionsManual2": "adres URL aplikacji/strony internetowej lub t.me/yourusername", + "apiAppInstructionsManual3": "cokolwiek", + "apiAppInstructionsManual4": "Opisz tutaj swoją aplikację", + "apiManualWeb": "Wprowadź swoje API ID i API hash", + "apiManualPrompt0": "Wprowadź swoje API ID: ", + "apiManualPrompt1": "Wprowadź swój API hash: ", + "apiAutoWeb": "Wprowadź numer telefonu, który jest już zarejestrowany w Telegramie, aby uzyskać API ID", + "apiAutoPrompt0": "Wprowadź numer telefonu, który jest już zarejestrowany w Telegramie: ", + "apiAutoPrompt1": "Wprowadź kod weryfikacyjny otrzymany w Telegramie: ", + "apiAppWeb": "Wprowadź informacje o API", + "apiAppInstructionsAuto0": "Wprowadź nazwę aplikacji (dowolną): ", + "apiAppInstructionsAuto1": "Wprowadź krótką nazwę aplikacji (alfanumeryczną, 5-32 znaki): ", + "apiAppInstructionsAuto2": "Wprowadź adres URL aplikacji/strony internetowej lub t.me/yourusername: ", + "apiAppInstructionsAuto3": "Wprowadź platformę aplikacji: ", + "apiAppInstructionsAuto4": "Opisz swoją aplikację: ", + "apiAppInstructionsAutoTypeOther": "Inna (określ w opisie)", + "apiParamsError": "Nie podano wszystkich wymaganych parametrów!", + "apiError": "BŁĄD: %s. Spróbuj ponownie.", + "loginChoosePromptWeb": "Czy chcesz zalogować się jako użytkownik, czy jako bot?", + "loginWebQr": "Możesz też zalogować się automatycznie: otwórz Telegram na telefonie, przejdź do Ustawienia > Urządzenia > Połącz urządzenie desktopowe i zeskanuj poniższy kod QR:", + "loginWebQr1": "Otwórz Telegram na telefonie", + "loginWebQr2": "Przejdź do Ustawienia > Urządzenia > Połącz urządzenie desktopowe", + "loginWebQr3": "Skieruj telefon na ten ekran, aby potwierdzić logowanie", + "loginOptionBot": "Bot", + "loginOptionUser": "Użytkownik", + "loginBot": "Wprowadź token bota: ", + "loginUser": "Wprowadź swój numer telefonu: ", + "loginQr": "Otwórz Telegram na telefonie, przejdź do Ustawienia > Urządzenia > Połącz urządzenie desktopowe i zeskanuj powyższy kod QR, aby zalogować się automatycznie.", + "loginQrCodeSuccessful": "Logowanie kodem QR powiodło się!", + "loginQrCodeExpired": "Kod QR wygasł, generowanie nowego...", + "loginManual": "Możesz też wprowadzić token bota lub numer telefonu, aby zalogować się ręcznie: ", + "loginUserCode": "Wprowadź kod: ", + "loginUserPass": "Wprowadź hasło (podpowiedź: %s): ", + "loginUserPassWeb": "Wprowadź hasło: ", + "loginUserPassHint": "Podpowiedź: %s", + "signupFirstName": "Wprowadź imię: ", + "signupLastName": "Wprowadź nazwisko (może być puste): ", + "signupWeb": "Zarejestruj się", + "signupFirstNameWeb": "Imię", + "signupLastNameWeb": "Nazwisko", + "loginNoCode": "Nie podano kodu weryfikacyjnego!", + "loginNoPass": "Nie podano hasła!", + "loginNoName": "Nie podano imienia!", + "loginBotTokenWeb": "Token bota", + "loginUserPhoneWeb": "Numer telefonu", + "loginUserPhoneCodeWeb": "Kod", + "done": "Gotowe!", + "nearest_dc": "Jesteśmy w %s, najbliższe DC to %d.", + "serialization_ofd": "Serializacja jest nieaktualna, odtwarzanie obiektu!", + "api_not_set": "Musisz podać klucz API i API ID, uzyskaj własne na my.telegram.org", + "session_corrupted": "Sesja jest uszkodzona!", + "value_bigger_than_2147483647": "Podana wartość %s jest większa niż 2147483647", + "value_smaller_than_2147483648": "Podana wartość %s jest mniejsza niż -2147483648", + "value_bigger_than_9223372036854775807": "Podana wartość %s jest większa niż 9223372036854775807", + "value_smaller_than_9223372036854775808": "Podana wartość %s jest mniejsza niż -9223372036854775808", + "value_bigger_than_4294967296": "Podana wartość %s jest większa niż 4294967296", + "value_smaller_than_0": "Podana wartość %s jest mniejsza niż 0", + "encode_double_error": "Nie udało się poprawnie zakodować wartości double", + "file_not_exist": "Plik nie istnieje", + "deserialization_error": "Wystąpił błąd podczas deserializacji", + "rpc_tg_error": "Telegram zwrócił błąd RPC: %s (%s), spowodowany przez %s:%s%sŚlad TL:", + "madelineproto_ready": "MadelineProto jest gotowe!", + "logout_ok": "Wylogowano pomyślnie!", + "already_loggedIn": "Ta instancja MadelineProto jest już zalogowana!", + "login_ok": "Zalogowano pomyślnie!", + "login_user": "Logowanie jako zwykły użytkownik...", + "login_bot": "Logowanie jako bot...", + "login_code_sending": "Wysyłanie kodu...", + "login_code_sent": "Kod został wysłany! Po otrzymaniu kodu użyj funkcji completePhoneLogin.", + "login_code_uncalled": "Nie oczekuję na kod! Najpierw wywołaj metodę phoneLogin", + "login_2fa_enabled": "Włączono 2FA, musisz wywołać funkcję complete2falogin...", + "login_need_signup": "Dla tego numeru nie utworzono konta, musisz wywołać funkcję completeSignup...", + "login_auth_key": "Logowanie za pomocą klucza autoryzacji...", + "not_loggedIn": "Nie jestem zalogowany!", + "signup_uncalled": "Nie oczekuję na rejestrację! Najpierw wywołaj metody phoneLogin i completePhoneLogin!", + "signing_up": "Rejestracja jako zwykły użytkownik...", + "signup_ok": "Zarejestrowano pomyślnie!", + "2fa_uncalled": "Nie oczekuję na hasło! Najpierw wywołaj metody phoneLogin i completePhoneLogin!", + "peer_not_in_db": "Tego peera nie ma w wewnętrznej bazie danych peerów", + "call_error_1": "Nie udało się znaleźć i odebrać połączenia %s", + "accepting_call": "Odbieranie połączenia od %s...", + "call_already_accepted": "Połączenie %s zostało już odebrane", + "call_already_declined": "Połączenie %s zostało już odrzucone", + "call_error_2": "Nie udało się znaleźć i potwierdzić połączenia %s", + "call_confirming": "Potwierdzanie połączenia od %s...", + "call_error_3": "Nie udało się znaleźć i sfinalizować połączenia %s", + "call_completing": "Finalizowanie połączenia od %s...", + "fingerprint_invalid": "Nieprawidłowy odcisk klucza!", + "call_discarding": "Kończenie połączenia %s...", + "file_parsing": "Parsowanie %s...", + "src_file_invalid": "Podano nieprawidłowy plik źródłowy: ", + "bool_error": "Nie udało się wyodrębnić wartości logicznej", + "not_numeric": "Podana wartość nie jest liczbą", + "long_not_16": "Podana wartość nie ma długości 16 bajtów", + "long_not_32": "Podana wartość nie ma długości 32 bajtów", + "long_not_64": "Podana wartość nie ma długości 64 bajtów", + "array_invalid": "Nie podano prawidłowej tablicy", + "predicate_not_set": "Predykat (wartość pod _) nie został ustawiony!", + "update_madelineproto": "Używasz starej wersji MadelineProto, wymagana jest aktualizacja: obecnie uruchomiona jest wersja %s, a najnowsza wersja z wieloma poprawkami błędów i nowymi funkcjami to %s!", + "type_extract_error": "Nie udało się wyodrębnić typu \"%s\", zaktualizuj MadelineProto!", + "method_not_found": "Nie znaleziono metody: ", + "params_missing": "Brak wymaganego parametru", + "sec_peer_not_in_db": "Tego tajnego peera nie ma w wewnętrznej bazie danych peerów", + "stream_handle_invalid": "Podano nieprawidłowy uchwyt strumienia.", + "length_too_big": "Długość jest zbyt duża", + "string_required": "Oczekiwano ciągu znaków!", + "waveform_must_have_100_values": "Tablica kształtu fali (waveform) musi zawierać 100 wartości!", + "waveform_value": "Wartość kształtu fali (waveform) musi mieścić się w zakresie od 0 do 31!", + "could_not_convert_object": "Nie udało się przekonwertować obiektu typu %s", + "type_extract_error_id": "Nie udało się wyodrębnić typu %s o id %s, zaktualizuj MadelineProto!", + "constructor_not_found": "Nie znaleziono konstruktora dla typu: ", + "botapi_conversion_error": "Nie można przekonwertować %s na obiekt Bot API", + "non_text_conversion": "Konwersja wiadomości innych niż tekstowe nie jest jeszcze obsługiwana!", + "file_type_invalid": "Wykryto nieprawidłowy typ pliku (%s)", + "static_analysis_minor": "Podczas analizy statycznej %s napotkano drobny problem: %s", + "static_analysis_severe": "Podczas analizy statycznej %s napotkano poważny problem: %s", + "secret_chat_skipping": "Nie mam tajnego czatu %s w bazie danych, pomijanie wiadomości...", + "must_have_declare_types": "ze względu na wydajność pierwszą instrukcją pliku event handlera musi być \"declare(strict_types=1);\"", + "do_not_delete_MadelineProto.log": "pliku MadelineProto.log nigdy nie wolno usuwać, zamiast tego ustaw w ustawieniach niestandardowy rozmiar maksymalny!", + "do_not_remove_MadelineProto.log_phar": "Nie usuwaj madeline.phar ani madeline.php, w przeciwnym razie MadelineProto ulegnie awarii. Jeśli masz jakikolwiek problem z MadelineProto, zgłoś go na https://github.com/danog/MadelineProto lub https://t.me/pwrtelegramgroup", + "do_not_use_blocking_function": "ze względu na wydajność event handlery nie mogą używać nieasynchronicznej, blokującej funkcji %s, zamiast niej użyj %s", + "do_not_use_blocking_class": "ze względu na wydajność handlery nie mogą używać nieasynchronicznej, blokującej klasy %s, zamiast niej użyj %s", + "do_not_use_deprecated_function": "funkcja %s jest przestarzała, zamiast niej użyj %s", + "do_not_use_non_root_require_in_event_handler": "ze względu na wydajność nie wolno używać require ani include wewnątrz klasy event handlera, dozwolone są tylko require na najwyższym poziomie.", + "do_not_use_yield": "MadelineProto 8 nie wymaga ani nie obsługuje używania yield w funkcjach asynchronicznych, musisz usunąć wszystkie słowa kluczowe yield używane wcześniej przy wywołaniach funkcji asynchronicznych", + "recommend_not_use_filesystem_function": "używanie funkcji %s nie jest zalecane, ponieważ dostęp do systemu plików podczas obsługi aktualizacji spowolni bota; na stronie https://docs.madelineproto.xyz/docs/UPDATES.html#avoiding-the-use-of-filesystem-functions znajdziesz listę alternatywnych sposobów przechowywania danych, które nie spowalniają bota!", + "plugins_do_not_use_require": "ze względu na wydajność pluginy mogą automatycznie dołączać inne pliki z folderu pluginów wyłącznie za pośrednictwem autoloadera PSR-4 (a nie przez ręczne require()).", + "plugins_must_have_exactly_one_class": "plugin musi definiować dokładnie jedną klasę! Aby zdefiniować wiele klas, interfejsów lub traitów, utwórz osobne pliki, MadelineProto załaduje je automatycznie.", + "cli_need_dl.php_link": "Podaj adres URL skryptu pobierania, gdy używasz getDownloadLink z poziomu CLI!", + "invalid_dl.php_session": "%s nie jest prawidłowym skryptem pobierania, ponieważ jego ID sesji jest inne (oczekiwano %s, otrzymano %s)", + "need_dl.php": "Nie udało się wygenerować domyślnego skryptu pobierania (%s), utwórz plik dl.php o następującej zawartości: %s i przekaż jego adres URL jako drugi parametr getDownloadLink", + "dl.php_powered_by_madelineproto": "Serwer pobierania plików z Telegrama (do 4 GB), oparty na MadelineProto!
Kliknij tutaj, aby dowiedzieć się, jak skonfigurować własny serwer pobierania plików z Telegrama!", + "dl.php_check_logs_make_sure_session_running": "Powiązany bot EventHandler MadelineProto lub serwer IPC MadelineProto jest offline, sprawdź logi i upewnij się, że co najmniej jeden z nich działa!", + "account_banned": "!!!!!!! OSTRZEŻENIE !!!!!!!\nSystem ochrony przed floodem Telegrama zawiesił to konto.\nAby kontynuować, wymagana jest ręczna weryfikacja.\nWyślij e-mail na adres recover@telegram.org z prośbą o odblokowanie numeru telefonu %s i krótko opisz, do czego będzie używany ten numer.\nNastępnie zaloguj się ponownie.\nJeśli konto zostało celowo usunięte, zignoruj tę wiadomość.", + "plugin_path_does_not_exist": "Ścieżka pluginu %s nie istnieje!", + "could_not_connect_to_MadelineProto": "Nie udało się połączyć z MadelineProto, aby to naprawić, włącz proc_open i usuń ograniczenia open_basedir lub wyłącz przepisywanie ścieżek na serwerze WWW! Jeśli zostało to już zrobione, upewnij się, że wersja CLI PHP jest dokładnie taka sama jak wersja webowa (ta sama wersja, rozszerzenia itd.), i sprawdź plik MadelineProto.log, aby uzyskać więcej informacji o błędzie, który uniemożliwił uruchomienie serwera IPC.", + "translate_madelineproto_web": "MadelineProto można przetłumaczyć na Twój język (obecny postęp tłumaczenia: %d%%), kliknij tutaj, aby pomóc w tłumaczeniu!", + "translate_madelineproto_cli": "MadelineProto można przetłumaczyć na Twój język (obecny postęp tłumaczenia: %d%%), przejdź na https://github.com/danog/MadelineProto/tree/v8/langs, aby pomóc w tłumaczeniu!", + "apiInvalidWeb": "API ID to liczba, a API hash ma 32 znaki: skopiuj je ponownie z my.telegram.org.", + "webDoneLead": "MadelineProto nadal działa na serwerze: możesz zamknąć tę stronę.", + "apiChooseManualAuto": "Czy chcesz pobrać API ID i API hash automatycznie z my.telegram.org (a), czy wprowadzić je ręcznie (m)?", + "apiAutoFallbackManual": "Zamiast tego wprowadź API ID i API hash ręcznie.", + "apiSetupTitleWeb": "Uzyskaj API ID i API hash", + "apiSetupLeadWeb": "Każda aplikacja Telegrama potrzebuje API ID i API hash. MadelineProto może pobrać je za Ciebie z my.telegram.org, używając numeru telefonu istniejącego konta Telegram.", + "apiAutoPhoneHintWeb": "my.telegram.org wysyła kod logowania do aplikacji Telegram, a nie SMS-em.", + "apiSendCodeWeb": "Wyślij kod", + "apiChooseManualWeb": "Mam już API ID", + "apiChooseAutoWeb": "Pobierz automatycznie", + "apiStartOverWeb": "Zacznij od nowa", + "apiAutoCodeTitleWeb": "Wprowadź kod z Telegrama", + "apiAutoCodeLeadWeb": "my.telegram.org wysłał kod logowania do Twojej aplikacji Telegram, na czacie z Telegramem (nie SMS-em).", + "apiAutoCodeLabelWeb": "Kod logowania", + "apiCreateTitleWeb": "Utwórz aplikację", + "apiCreateLeadWeb": "To konto nie ma jeszcze aplikacji na my.telegram.org. Te dane widzisz tylko Ty i możesz je później zmienić.", + "apiAppTitleLabelWeb": "Nazwa aplikacji", + "apiAppShortNameLabelWeb": "Krótka nazwa", + "apiAppUrlLabelWeb": "URL", + "apiAppDescLabelWeb": "Opis", + "apiCreateWeb": "Utwórz aplikację", + "apiSaveWeb": "Zapisz i kontynuuj", + "apiAutoErrorTitle": "my.telegram.org zwrócił błąd", + "apiCreateErrorTitle": "my.telegram.org nie utworzył aplikacji", + "apiCreateVpsWarning": "Telegram nie pozwala na tworzenie nowych aplikacji na my.telegram.org z adresów IP serwerów VPS, sieci VPN i innych centrów danych, a żądanie zostało wysłane z adresu IP maszyny, na której działa MadelineProto. Utwórz aplikację ręcznie na https://my.telegram.org z połączenia domowego (np. z telefonu przez dane komórkowe), a następnie wprowadź API ID i API hash.", + "loginTitleWeb": "Zaloguj się do Telegrama", + "loginLeadWeb": "Wybierz konto lub bota, jako który będzie działać ta instancja MadelineProto.", + "loginTypeWeb": "Zaloguj jako", + "loginUserPhoneHintWeb": "Z numerem kierunkowym kraju, np. +39 123 456 7890.", + "loginBotTokenHintWeb": "Token, który otrzymałeś od @BotFather podczas tworzenia bota.", + "loginCodeTitleWeb": "Wprowadź kod logowania", + "loginCodeLeadWeb": "Telegram wysłał kod logowania do Twojej aplikacji Telegram lub SMS-em, jeśli nie jesteś zalogowany nigdzie indziej.", + "loginPasswordTitleWeb": "Weryfikacja dwuetapowa", + "loginPasswordLeadWeb": "To konto jest chronione hasłem ustawionym w Ustawienia > Prywatność i bezpieczeństwo > Weryfikacja dwuetapowa.", + "loginPasswordLabelWeb": "Hasło", + "signupTitleWeb": "Utwórz konto", + "signupLeadWeb": "Tego numeru telefonu nie ma jeszcze w Telegramie: wybierz nazwę nowego konta.", + "webContinue": "Kontynuuj", + "webLogin": "Zaloguj się", + "webError": "%s. Sprawdź i spróbuj ponownie.", + "webStepApp": "API ID i API hash", + "webStepAccount": "Konto", + "webStepVerify": "Weryfikacja", + "webStepDone": "Działa", + "webProgress": "Postęp konfiguracji", + "webDocs": "Dokumentacja", + "webOptional": "opcjonalnie", + "webShowPassword": "Pokaż", + "webHidePassword": "Ukryj", + "webQrTitle": "Zaloguj się kodem QR", + "webQrWaiting": "Oczekiwanie na zeskanowanie…", + "webFieldRequired": "Wypełnij to pole.", + "webPhoneInvalid": "Wprowadź numer telefonu z numerem kierunkowym kraju, np. +39 123 456 7890.", + "tweb.Login.Title": "Zaloguj się do MadelineProto", + "tweb.Login.PhoneLabelInvalid": "Nieprawidłowy numer telefonu", + "tweb.Login.StartText": "Potwierdź kod kraju\ni wprowadź swój numer telefonu.", + "tweb.Login.Code.SentSms": "Wysłaliśmy Ci SMS\nz kodem.", + "tweb.Login.Code.SentInApp": "Wysłaliśmy Ci wiadomość w Telegramie\nz kodem.", + "tweb.Login.Code.SentCall": "Zadzwonimy do Ciebie i podyktujemy\nkod.", + "tweb.Login.Code.SentEmail": "Sprawdź swoją skrzynkę **%s** (nie zapomnij o folderze spam) i wprowadź kod, który właśnie wysłaliśmy.", + "tweb.Login.Code.SentUnknown": "Poszukaj kodu\nwszędzie (typ: %s)", + "tweb.Login.Code.SentMissedCall": "W ciągu kilku sekund powinieneś otrzymać\nkrótkie połączenie z numeru **%s**. Nie odbieraj —\npo prostu wpisz ostatnie cyfry tego numeru.", + "tweb.Login.Code.SentSmsWord": "Wysłaliśmy SMS z tajnym słowem\nna Twój telefon **%s**.", + "tweb.Login.Code.SentSmsWordBeginning": "Wysłaliśmy SMS z tajnym słowem zaczynającym się\nod „**%2$s**” na Twój telefon **%1$s**.", + "tweb.Login.Code.SentSmsPhrase": "Wysłaliśmy SMS z tajną frazą\nna Twój telefon **%s**.", + "tweb.Login.Code.SentSmsPhraseBeginning": "Wysłaliśmy SMS z tajną frazą zaczynającą się\nod „**%2$s**” na Twój telefon **%1$s**.", + "tweb.Login.Code.SecretWord": "Tajne słowo", + "tweb.Login.Code.SecretPhrase": "Tajna fraza", + "tweb.Login.Code.WordInvalid": "Niepoprawnie, spróbuj ponownie", + "tweb.Login.Code.WordBeginningInvalid": "Niepoprawne słowo", + "tweb.Login.Password.Title": "Wprowadź hasło", + "tweb.Login.Password.Subtitle": "Twoje konto jest chronione\ndodatkowym hasłem", + "tweb.Login.Register.Subtitle": "Wprowadź swoje imię,\naby utworzyć konto", + "tweb.PleaseWait": "Proszę czekać...", + "tweb.Code": "Kod", + "tweb.LoginPassword": "Hasło", + "tweb.YourName": "Twoje imię", + "tweb.FirstName": "Imię (wymagane)", + "tweb.LastName": "Nazwisko (opcjonalnie)", + "tweb.StartMessaging": "Zacznij pisać", + "tweb.Country": "Kraj", + "tweb.Contacts.PhoneNumber.Placeholder": "Numer telefonu", + "tweb.Login.Next": "Dalej", + "tweb.Login.QR.Title": "Zaloguj się kodem QR", + "tweb.Login.QR.Help1": "Otwórz Telegram na telefonie", + "tweb.Login.QR.Help2": "Przejdź do **Ustawienia** > **Urządzenia** > **Połącz urządzenie desktopowe**", + "tweb.Login.QR.Help3": "Skieruj telefon na ten ekran, aby potwierdzić logowanie", + "tweb.Login.QR.Cancel": "Zaloguj się numerem telefonu >", + "tweb.Login.QR.Login": "Zaloguj się kodem QR >", + "tweb.Login.QR.Subtitle": "Zeskanuj aplikacją Telegram na telefonie", + "tweb.PhoneNumber.Code.Fragment.Info": "Odbierz kod w sekcji Numbers na [Fragment]()", + "tweb.PHONE_CODE_INVALID": "Nieprawidłowy kod", + "tweb.PHONE_CODE_EXPIRED": "Kod wygasł", + "tweb.PASSWORD_HASH_INVALID": "Nieprawidłowe hasło", + "tweb.DarkMode": "Tryb ciemny", + "tweb.Error.AnError": "Wystąpił błąd. Spróbuj ponownie później.", + "tweb.AccDescr.LoginCode": "Kod logowania", + "tweb.Login.Bot": "Zaloguj się jako bot >", + "tweb.Login.Bot.Title": "Zaloguj się jako bot", + "tweb.Login.Bot.Subtitle": "Wprowadź token, który otrzymałeś od @BotFather\npodczas tworzenia bota.", + "tweb.Login.Bot.Token": "Token bota", + "tweb.Login.Bot.Cancel": "Zaloguj się jako użytkownik >", + "tweb.Optional": "opcjonalnie", + "tweb.PHONE_NUMBER_INVALID": "Nieprawidłowy numer telefonu", + "tweb.PHONE_NUMBER_BANNED": "Ten numer telefonu jest zablokowany", + "tweb.PHONE_NUMBER_FLOOD": "Zbyt wiele prób, spróbuj ponownie później", + "tweb.PHONE_CODE_EMPTY": "Nieprawidłowy kod", + "tweb.PHONE_PASSWORD_FLOOD": "Zbyt wiele prób, spróbuj ponownie później", + "tweb.ACCESS_TOKEN_INVALID": "Nieprawidłowy token bota", + "tweb.ACCESS_TOKEN_EXPIRED": "Ten token bota został unieważniony", + "tweb.FIRSTNAME_INVALID": "Nieprawidłowe imię", + "tweb.LASTNAME_INVALID": "Nieprawidłowe nazwisko", + "tweb.Close": "Zamknij" } diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/pt.json b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/pt.json index 58b8bff..839241b 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/pt.json +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/pt.json @@ -1,13 +1,19 @@ { - "go": "Pronto", - "loginChoosePromptWeb": "Deseja fazer login como Usuário ou como Bot?", - "noReportPeers": "Aviso: nenhum peers de relatório está definido, adicione o seguinte método ao seu event handler", + "baseDirLimitation": "Uma limitação de basedir está configurada: isso pode afetar o desempenho e causar alguns problemas, desative-a se possível!", + "noReportPeers": "Aviso: nenhum peer de relatório está definido, adicione o seguinte método ao seu event handler", "manualAdminActionRequired": "!!!!!!!!! AÇÃO MANUAL DO ADMINISTRADOR DO SISTEMA NECESSÁRIA !!!!!!!!", + "mmapErrorPart1": "O número máximo de regiões mapeadas de memória (mmap) foi atingido (%s): aumente a configuração do kernel vm.max_map_count para 262144 para corrigir.", "mmapErrorPart2": "Para corrigir, execute o seguinte comando como root: %s", + "mmapErrorPart3": "Para manter a alteração após reinicializações: %s", + "mmapErrorPart4": "No Windows e no WSL, aumentar o tamanho do arquivo de paginação pode ajudar; mude para o Linux nativo se o problema persistir.", "botAlreadyRunning": "O bot já está em execução!", "extensionRequired": "MadelineProto requer a extensão %s para ser executada. %s", "extensionRequiredInstallWithApt": "Tente executar sudo apt-get install %s.", "extensionRequiredInstallWithCustomInstructions": "Siga as instruções em %s para instalá-lo.", + "extensionRecommended": "Aviso: a extensão %s não está instalada, instale-a para acelerar o MadelineProto!", + "go": "Pronto", + "apiChooseManualAutoTip": "Observe que você também pode fornecer o ID/hash da API diretamente no código usando as configurações: %s", + "apiChooseManualAutoTipWeb": "Observe que você também pode fornecer o ID/hash da API diretamente no código usando as configurações.", "apiChoosePrompt": "Sua escolha (m/a): ", "apiManualInstructions0": "Faça login em https://my.telegram.org", "apiManualInstructions1": "Ir para API development tools", @@ -15,28 +21,16 @@ "apiAppInstructionsManual0": "nome do seu aplicativo, pode ser qualquer coisa", "apiAppInstructionsManual1": "o nome abreviado do seu aplicativo, alfanumérico, de 5 a 32 caracteres", "apiAppInstructionsManual2": "URL do seu aplicativo/site ou t.me/yourusername", + "apiAppInstructionsManual3": "qualquer coisa", "apiAppInstructionsManual4": "Descreva seu aplicativo aqui", "apiManualWeb": "Insira seu API ID e API hash", "apiManualPrompt0": "Insira seu API ID: ", "apiManualPrompt1": "Insira seu API hash: ", - "loginWebQr1": "Abra o Telegram no seu telefone", - "mmapErrorPart3": "Para manter a alteração após reinicializações: %s", - "translate_madelineproto_web": "MadelineProto pode ser traduzido para o seu idioma (progresso atual da tradução: %d%%), clique aqui para contribuir com a tradução!", - "loginWebQr": "Você também pode fazer login automaticamente abrindo o Telegram no seu telefone, acessando Configurações > Dispositivos > Conectar Desktop e digitalizando o seguinte código QR:", - "extensionRecommended": "Aviso: a extensão %s não está instalada, instale-a para acelerar o MadelineProto!", - "baseDirLimitation": "Uma limitação baseada está configurada: isso pode afetar o desempenho e causar alguns problemas, desative-o se possível!", - "mmapErrorPart1": "O número máximo de regiões mapeadas de memória (mmap) foi atingido (%s): aumente a configuração do kernel vm.max_map_count para 262144 a corrigir.", - "apiChooseManualAutoTip": "Observe que você também pode fornecer o ID/hash da API diretamente no código usando as configurações: %s", - "apiChooseManualAutoTipWeb": "Observe que você também pode fornecer o ID/hash da API diretamente no código usando as configurações.", - "mmapErrorPart4": "No Windows e no WSL, aumentar o tamanho do arquivo de paginação pode ajudar; mude para o Linux nativo se o problema persistir.", - "apiAppInstructionsManual3": "qualquer coisa", "apiAutoWeb": "Insira um número de telefone que já esteja registrado no Telegram para obter o ID da API", "apiAutoPrompt0": "Digite um número de telefone que já esteja registrado no Telegram: ", "apiAutoPrompt1": "Digite o código de verificação recebido pelo Telegram: ", "apiAppWeb": "Insira as informações da API", "apiAppInstructionsAuto0": "Digite o nome do app, pode ser qualquer coisa: ", - "loginOptionUser": "Usuário", - "signupFirstNameWeb": "Primeiro nome", "apiAppInstructionsAuto1": "Digite o nome do seu aplicativo, alfanumérico, de 5 a 32 caracteres: ", "apiAppInstructionsAuto2": "Digite a URL do seu aplicativo/site ou t.me/seuusuário: ", "apiAppInstructionsAuto3": "Digite a plataforma do aplicativo: ", @@ -44,12 +38,19 @@ "apiAppInstructionsAutoTypeOther": "Outro (especifique na descrição)", "apiParamsError": "Você não forneceu todos os parâmetros necessários!", "apiError": "ERRO: %s. Tente novamente.", + "loginChoosePromptWeb": "Deseja fazer login como Usuário ou como Bot?", + "loginWebQr": "Você também pode fazer login automaticamente abrindo o Telegram no seu telefone, acessando Configurações > Dispositivos > Conectar Desktop e digitalizando o seguinte código QR:", + "loginWebQr1": "Abra o Telegram no seu telefone", "loginWebQr2": "Vá para Configurações > Dispositivos > Conectar Desktop", "loginWebQr3": "Aponte seu telefone para tela para confirmar o login", "loginOptionBot": "Bot", + "loginOptionUser": "Usuário", "loginBot": "Digite o token do seu bot: ", "loginUser": "Digite seu número de telefone: ", + "loginQr": "Abra o Telegram no seu telefone, vá para Configurações > Dispositivos > Conectar Desktop e escaneie o QR code acima para fazer login automaticamente.", + "loginQrCodeSuccessful": "Login efetuado com sucesso, utilizando QR code!", "loginQrCodeExpired": "O QR code expirou, gerando um novo...", + "loginManual": "Alternativamente, você também pode inserir um token de bot ou número de telefone para fazer login manualmente: ", "loginUserCode": "Digite o código: ", "loginUserPass": "Digite sua senha (dica %s): ", "loginUserPassWeb": "Digite sua senha: ", @@ -57,27 +58,25 @@ "signupFirstName": "Digite seu primeiro nome: ", "signupLastName": "Digite seu sobrenome (pode ficar em branco): ", "signupWeb": "Faça seu cadastro, por favor", + "signupFirstNameWeb": "Primeiro nome", "signupLastNameWeb": "Sobrenome", "loginNoCode": "Você não forneceu o código do telefone!", "loginNoPass": "Você não forneceu a senha!", - "loginBotTokenWeb": "token do Bot", - "loginUserPhoneWeb": "Número telefone", + "loginNoName": "Você não forneceu o primeiro nome!", + "loginBotTokenWeb": "Token do bot", + "loginUserPhoneWeb": "Número de telefone", "loginUserPhoneCodeWeb": "Código", "done": "Concluído!", "nearest_dc": "Estamos em %s, o DC mais próximo é %d.", + "serialization_ofd": "A serialização está desatualizada, reconstruindo o objeto!", "api_not_set": "Você deve fornecer uma chave de API e um ID de API, você pode obter em @ my.telegram.org", "session_corrupted": "A sessão está corrompida!", "value_bigger_than_2147483647": "O valor fornecido %s é maior que 2147483647", "value_smaller_than_2147483648": "O valor fornecido %s é menor que -2147483648", + "value_bigger_than_9223372036854775807": "O valor fornecido %s é maior que 9223372036854775807", "value_smaller_than_9223372036854775808": "O valor fornecido %s é menor que -9223372036854775808", "value_bigger_than_4294967296": "O valor fornecido %s é maior que 4294967296", "value_smaller_than_0": "O valor fornecido %s é menor que 0", - "loginQr": "Abra o Telegram no seu telefone, vá para Configurações > Dispositivos > Conectar Desktop e escaneie o QR code acima para fazer login automaticamente.", - "loginQrCodeSuccessful": "Login efetuado com sucesso, utilizando QR code!", - "loginManual": "Alternativa, você também pode inserir um token de bot ou número de telefone para fazer login manualmente: ", - "loginNoName": "Você não forneceu o primeiro nome!", - "serialization_ofd": "A serialização está desatualizada, reconstruindo o objeto!", - "value_bigger_than_9223372036854775807": "O valor fornecido %s é maior que 9223372036854775807", "encode_double_error": "Não foi possível codificar o número decimal corretamente", "file_not_exist": "Arquivo não existe", "deserialization_error": "Ocorreu um erro na deserialização", @@ -92,13 +91,13 @@ "login_code_sent": "Código enviado com sucesso! Assim que receber o código, você deve usar a função completePhoneLogin.", "login_code_uncalled": "Não estou esperando pelo código! Por favor, chame primeiro o método phoneLogin", "login_2fa_enabled": "Autenticação de dois fatores ativada, você terá que chamar a função complete2falogin...", + "login_need_signup": "Uma conta não foi criada para este número, você terá que chamar a função completeSignup...", "login_auth_key": "Conectando-se usando a chave de autenticação...", "not_loggedIn": "Não estou conectado!", + "signup_uncalled": "Não estou esperando para me cadastrar! Por favor, chame primeiro os métodos phoneLogin e completePhoneLogin!", "signing_up": "Cadastrando-se como um usuário normal...", "signup_ok": "Cadastro realizado com sucesso!", "2fa_uncalled": "Não estou esperando pela senha! Por favor, chame primeiro os métodos phoneLogin e completePhoneLogin!", - "login_need_signup": "Uma conta não foi criada para este número, você terá que chamar a função completeSignup...", - "signup_uncalled": "Não estou esperando para me cadastrar! Por favor, chame primeiro os métodos phoneLogin e completePhoneLogin!", "peer_not_in_db": "Este peer não está presente no banco de dados interno de peers", "call_error_1": "Não foi possível encontrar e aceitar a chamada %s", "accepting_call": "Aceitando chamada de %s...", @@ -108,7 +107,7 @@ "call_confirming": "Confirmando chamada de %s...", "call_error_3": "Não foi possível encontrar e completar a chamada %s", "call_completing": "Completando chamada de %s...", - "fingerprint_invalid": "Chave de impressão inválida!", + "fingerprint_invalid": "Impressão digital da chave inválida!", "call_discarding": "Descartando chamada %s...", "file_parsing": "Processando %s...", "src_file_invalid": "Arquivo de origem inválido foi fornecido: ", @@ -119,6 +118,7 @@ "long_not_64": "O valor fornecido não tem 64 bytes de comprimento", "array_invalid": "Você não forneceu um array válido", "predicate_not_set": "Predicado (valor sob _) não foi definido!", + "update_madelineproto": "Você está executando uma versão antiga do MadelineProto, uma atualização é necessária: atualmente rodando %s, mas a versão mais recente com várias correções de bugs e novos recursos é %s!", "type_extract_error": "Não foi possível extrair o tipo \"%s\", você deve atualizar o MadelineProto!", "method_not_found": "Não foi possível encontrar o método: ", "params_missing": "Parâmetro obrigatório ausente", @@ -126,8 +126,149 @@ "stream_handle_invalid": "Um identificador de fluxo inválido foi fornecido.", "length_too_big": "O comprimento é muito grande", "string_required": "Uma string era esperada!", - "waveform_value": "Um between de waveform deve estar entre 0 e 31!", - "could_not_convert_object": "Não foi possível converter o objeto do tipo %s", "waveform_must_have_100_values": "Um array de waveform deve ter 100 valores!", - "update_madelineproto": "Você está executando uma versão antiga do MadelineProto, uma atualização é necessária: atualmente rodando %s, mas a versão mais recente com várias correções de bugs e novos recursos é %s!" + "waveform_value": "Um valor de waveform deve estar entre 0 e 31!", + "could_not_convert_object": "Não foi possível converter o objeto do tipo %s", + "type_extract_error_id": "Não foi possível extrair o tipo: %s com id %s, você deve atualizar o MadelineProto!", + "constructor_not_found": "Construtor não encontrado para o tipo: ", + "botapi_conversion_error": "Não é possível converter %s em um objeto da API de bots", + "non_text_conversion": "Ainda não é possível converter mensagens que não sejam de texto!", + "file_type_invalid": "Tipo de arquivo inválido detectado (%s)", + "static_analysis_minor": "Um problema menor foi encontrado durante a análise estática de %s: %s", + "static_analysis_severe": "Um problema grave foi encontrado durante a análise estática de %s: %s", + "secret_chat_skipping": "Não tenho o chat secreto %s no banco de dados, ignorando a mensagem...", + "must_have_declare_types": "por motivos de desempenho, a primeira instrução de um arquivo de event handler deve ser \"declare(strict_types=1);\"", + "do_not_delete_MadelineProto.log": "o arquivo MadelineProto.log nunca deve ser excluído; em vez disso, defina um tamanho máximo personalizado nas configurações!", + "do_not_remove_MadelineProto.log_phar": "Não remova madeline.phar nem madeline.php, ou o MadelineProto irá travar. Se tiver algum problema com o MadelineProto, reporte-o em https://github.com/danog/MadelineProto ou https://t.me/pwrtelegramgroup", + "do_not_use_blocking_function": "por motivos de desempenho, os event handlers não podem usar a função bloqueante não assíncrona %s; use %s em vez disso", + "do_not_use_blocking_class": "por motivos de desempenho, os handlers não podem usar a classe bloqueante não assíncrona %s; use %s em vez disso", + "do_not_use_deprecated_function": "a função %s está obsoleta; use %s em vez disso", + "do_not_use_non_root_require_in_event_handler": "por motivos de desempenho, você não deve usar require ou include dentro de uma classe de event handler; somente requires no nível raiz são permitidos.", + "do_not_use_yield": "O MadelineProto 8 não requer nem suporta o uso de yield em funções assíncronas; você deve remover todas as palavras-chave yield usadas anteriormente para chamadas de funções assíncronas", + "recommend_not_use_filesystem_function": "o uso da função %s não é recomendado, pois acessar o sistema de arquivos durante o processamento de updates deixará seu bot mais lento. Consulte https://docs.madelineproto.xyz/docs/UPDATES.html#avoiding-the-use-of-filesystem-functions para ver formas alternativas de armazenar dados que não deixarão seu bot mais lento!", + "plugins_do_not_use_require": "por motivos de desempenho, os plugins só podem incluir automaticamente (include ou require) outros arquivos presentes na pasta de plugins por meio do autoloader PSR-4 (e não usando require() manualmente).", + "plugins_must_have_exactly_one_class": "um plugin deve definir exatamente uma classe! Para definir várias classes, interfaces ou traits, crie arquivos separados; eles serão carregados automaticamente pelo MadelineProto.", + "cli_need_dl.php_link": "Especifique a URL de um script de download ao usar getDownloadLink pela CLI!", + "invalid_dl.php_session": "%s não é um script de download válido porque seu ID de sessão é diferente (esperado %s, recebido %s)", + "need_dl.php": "Não foi possível gerar o script de download padrão (%s); crie um arquivo dl.php com o seguinte conteúdo: %s e passe sua URL como segundo parâmetro de getDownloadLink", + "dl.php_powered_by_madelineproto": "Servidor de download de arquivos do Telegram (até 4GB), desenvolvido com MadelineProto!
Clique aqui para mais informações sobre como configurar seu próprio servidor de download de arquivos do Telegram!", + "dl.php_check_logs_make_sure_session_running": "O bot EventHandler do MadelineProto associado ou o servidor IPC do MadelineProto está offline; verifique os logs e certifique-se de que pelo menos um deles esteja em execução!", + "account_banned": "!!!!!!! AVISO !!!!!!!\nO sistema de prevenção de flood do Telegram suspendeu esta conta.\nPara continuar, é necessária uma verificação manual.\nEnvie um e-mail para recover@telegram.org pedindo o desbanimento do número de telefone %s e descreva brevemente o que você fará com este número.\nDepois, faça login novamente.\nSe você excluiu esta conta intencionalmente, ignore esta mensagem.", + "plugin_path_does_not_exist": "O caminho do plugin %s não existe!", + "could_not_connect_to_MadelineProto": "Não foi possível conectar ao MadelineProto. Para corrigir, habilite proc_open e remova as restrições de open_basedir ou desative as reescritas de caminho do servidor web! Se você já fez isso, certifique-se de que a versão CLI do PHP seja exatamente igual à versão web (mesma versão, extensões etc.) e consulte o arquivo MadelineProto.log para mais informações sobre o erro que impediu a inicialização do servidor IPC.", + "translate_madelineproto_web": "MadelineProto pode ser traduzido para o seu idioma (progresso atual da tradução: %d%%), clique aqui para contribuir com a tradução!", + "translate_madelineproto_cli": "MadelineProto pode ser traduzido para o seu idioma (progresso atual da tradução: %d%%), acesse https://github.com/danog/MadelineProto/tree/v8/langs para contribuir com a tradução!", + "apiInvalidWeb": "O API ID é um número e o API hash tem 32 caracteres: copie-os novamente de my.telegram.org.", + "webDoneLead": "O MadelineProto continua em execução no servidor: você pode fechar esta página.", + "apiChooseManualAuto": "Deseja obter o API ID e o API hash automaticamente de my.telegram.org (a) ou inseri-los manualmente (m)?", + "apiAutoFallbackManual": "Em vez disso, insira o API ID e o API hash manualmente.", + "apiSetupTitleWeb": "Obtenha seu API ID e API hash", + "apiSetupLeadWeb": "Todo aplicativo do Telegram precisa de um API ID e um API hash. O MadelineProto pode obtê-los para você em my.telegram.org, com o número de telefone de uma conta do Telegram já existente.", + "apiAutoPhoneHintWeb": "O my.telegram.org envia o código de login para o seu aplicativo do Telegram, não por SMS.", + "apiSendCodeWeb": "Enviar código", + "apiChooseManualWeb": "Já tenho um API ID", + "apiChooseAutoWeb": "Obter automaticamente", + "apiStartOverWeb": "Recomeçar", + "apiAutoCodeTitleWeb": "Digite o código do Telegram", + "apiAutoCodeLeadWeb": "O my.telegram.org enviou um código de login para o seu aplicativo do Telegram, no chat com o Telegram (não por SMS).", + "apiAutoCodeLabelWeb": "Código de login", + "apiCreateTitleWeb": "Crie seu aplicativo", + "apiCreateLeadWeb": "Esta conta ainda não tem nenhum aplicativo em my.telegram.org. Estes dados são exibidos apenas para você e podem ser alterados depois.", + "apiAppTitleLabelWeb": "Nome do aplicativo", + "apiAppShortNameLabelWeb": "Nome abreviado", + "apiAppUrlLabelWeb": "URL", + "apiAppDescLabelWeb": "Descrição", + "apiCreateWeb": "Criar aplicativo", + "apiSaveWeb": "Salvar e continuar", + "apiAutoErrorTitle": "O my.telegram.org retornou um erro", + "apiCreateErrorTitle": "O my.telegram.org não criou o aplicativo", + "apiCreateVpsWarning": "O Telegram não permite que IPs de VPS, VPN e outros datacenters criem novos aplicativos em my.telegram.org, e a solicitação foi feita a partir do IP da máquina que executa o MadelineProto. Crie o aplicativo manualmente em https://my.telegram.org usando uma conexão residencial (como o seu celular nos dados móveis) e depois insira o API ID e o API hash.", + "loginTitleWeb": "Entrar no Telegram", + "loginLeadWeb": "Escolha a conta ou o bot com que esta instância do MadelineProto será executada.", + "loginTypeWeb": "Entrar como", + "loginUserPhoneHintWeb": "Com o código do país, por exemplo +39 123 456 7890.", + "loginBotTokenHintWeb": "O token que o @BotFather forneceu quando você criou o bot.", + "loginCodeTitleWeb": "Digite o código de login", + "loginCodeLeadWeb": "O Telegram enviou um código de login para o seu aplicativo do Telegram, ou por SMS se você não estiver conectado em nenhum outro lugar.", + "loginPasswordTitleWeb": "Verificação em duas etapas", + "loginPasswordLeadWeb": "Esta conta está protegida por uma senha, definida em Configurações > Privacidade e Segurança > Verificação em Duas Etapas.", + "loginPasswordLabelWeb": "Senha", + "signupTitleWeb": "Crie sua conta", + "signupLeadWeb": "Este número de telefone ainda não está no Telegram: escolha o nome da nova conta.", + "webContinue": "Continuar", + "webLogin": "Entrar", + "webError": "%s. Verifique e tente novamente.", + "webStepApp": "API ID e API hash", + "webStepAccount": "Conta", + "webStepVerify": "Verificação", + "webStepDone": "Em execução", + "webProgress": "Progresso da configuração", + "webDocs": "Documentação", + "webOptional": "opcional", + "webShowPassword": "Mostrar", + "webHidePassword": "Ocultar", + "webQrTitle": "Entrar com um QR code", + "webQrWaiting": "Aguardando a leitura…", + "webFieldRequired": "Preencha este campo.", + "webPhoneInvalid": "Digite o número de telefone com o código do país, por exemplo +39 123 456 7890.", + "tweb.Login.Title": "Entrar no MadelineProto", + "tweb.Login.PhoneLabelInvalid": "Número de telefone inválido", + "tweb.Login.StartText": "Confirme o código do seu país\ne digite seu número de telefone.", + "tweb.Login.Code.SentSms": "Enviamos um SMS\ncom o código.", + "tweb.Login.Code.SentInApp": "Enviamos uma mensagem no Telegram\ncom o código.", + "tweb.Login.Code.SentCall": "Vamos ligar para você e ditar\no código.", + "tweb.Login.Code.SentEmail": "Verifique seu e-mail **%s** (não se esqueça da pasta de spam) e digite o código que acabamos de enviar.", + "tweb.Login.Code.SentUnknown": "Procure o código\nem todos os lugares (tipo: %s)", + "tweb.Login.Code.SentMissedCall": "Nos próximos segundos, você deve receber\numa ligação curta de **%s**. Não atenda —\napenas digite os últimos dígitos desse número.", + "tweb.Login.Code.SentSmsWord": "Enviamos um SMS com uma palavra secreta\npara o seu telefone **%s**.", + "tweb.Login.Code.SentSmsWordBeginning": "Enviamos um SMS com uma palavra secreta que começa\ncom \"**%2$s**\" para o seu telefone **%1$s**.", + "tweb.Login.Code.SentSmsPhrase": "Enviamos um SMS com uma frase secreta\npara o seu telefone **%s**.", + "tweb.Login.Code.SentSmsPhraseBeginning": "Enviamos um SMS com uma frase secreta que começa\ncom \"**%2$s**\" para o seu telefone **%1$s**.", + "tweb.Login.Code.SecretWord": "Palavra secreta", + "tweb.Login.Code.SecretPhrase": "Frase secreta", + "tweb.Login.Code.WordInvalid": "Incorreto, tente novamente", + "tweb.Login.Code.WordBeginningInvalid": "Palavra incorreta", + "tweb.Login.Password.Title": "Digite sua senha", + "tweb.Login.Password.Subtitle": "Sua conta está protegida com\numa senha adicional", + "tweb.Login.Register.Subtitle": "Digite seu nome\npara criar sua conta", + "tweb.PleaseWait": "Aguarde...", + "tweb.Code": "Código", + "tweb.LoginPassword": "Senha", + "tweb.YourName": "Seu nome", + "tweb.FirstName": "Nome (obrigatório)", + "tweb.LastName": "Sobrenome (opcional)", + "tweb.StartMessaging": "Começar a conversar", + "tweb.Country": "País", + "tweb.Contacts.PhoneNumber.Placeholder": "Número de telefone", + "tweb.Login.Next": "Avançar", + "tweb.Login.QR.Title": "Entrar com QR code", + "tweb.Login.QR.Help1": "Abra o Telegram no seu celular", + "tweb.Login.QR.Help2": "Vá para **Configurações** > **Dispositivos** > **Conectar Desktop**", + "tweb.Login.QR.Help3": "Aponte seu celular para esta tela para confirmar o login", + "tweb.Login.QR.Cancel": "Entrar com número de telefone >", + "tweb.Login.QR.Login": "Entrar com QR code >", + "tweb.Login.QR.Subtitle": "Escaneie com o app do Telegram no seu celular", + "tweb.PhoneNumber.Code.Fragment.Info": "Obtenha o código na seção Números do [Fragment]()", + "tweb.PHONE_CODE_INVALID": "Código inválido", + "tweb.PHONE_CODE_EXPIRED": "Código expirado", + "tweb.PASSWORD_HASH_INVALID": "Senha incorreta", + "tweb.DarkMode": "Modo escuro", + "tweb.Error.AnError": "Ocorreu um erro. Tente novamente mais tarde.", + "tweb.AccDescr.LoginCode": "Código de login", + "tweb.Login.Bot": "Entrar como bot >", + "tweb.Login.Bot.Title": "Entrar como bot", + "tweb.Login.Bot.Subtitle": "Digite o token que o @BotFather forneceu\nquando você criou o bot.", + "tweb.Login.Bot.Token": "Token do bot", + "tweb.Login.Bot.Cancel": "Entrar como usuário >", + "tweb.Optional": "opcional", + "tweb.PHONE_NUMBER_INVALID": "Número de telefone inválido", + "tweb.PHONE_NUMBER_BANNED": "Este número de telefone está banido", + "tweb.PHONE_NUMBER_FLOOD": "Muitas tentativas, tente novamente mais tarde", + "tweb.PHONE_CODE_EMPTY": "Código inválido", + "tweb.PHONE_PASSWORD_FLOOD": "Muitas tentativas, tente novamente mais tarde", + "tweb.ACCESS_TOKEN_INVALID": "Token do bot inválido", + "tweb.ACCESS_TOKEN_EXPIRED": "Este token do bot foi revogado", + "tweb.FIRSTNAME_INVALID": "Nome inválido", + "tweb.LASTNAME_INVALID": "Sobrenome inválido", + "tweb.Close": "Fechar" } diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/ru.json b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/ru.json index 9170a90..8e75f8f 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/ru.json +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/ru.json @@ -1,44 +1,62 @@ { + "baseDirLimitation": "Настройка basedir сконфигурирована: это может повлиять на производительность и вызвать некоторые проблемы, отключите её если это возможно!", + "noReportPeers": "Внимание: не настроен ни один юзер для сообщения ошибок, пожалуйста добавьте этот метод в Event Handler", + "manualAdminActionRequired": "!!!!!!!!! НЕОБХОДИМЫ РУЧНЫЕ ДЕЙСТВИЯ СИСТЕМНОГО АДМИНИСТРАТОРА !!!!!!!!!", + "mmapErrorPart1": "Превышено максимальное количество маппированных зон памяти (%s, это НЕ потребление памяти, а mmap): пожалуйста увеличьте значение настройки ядра vm.max_map_count до 262144, чтобы исправить проблему.", + "mmapErrorPart2": "Чтобы исправить, необходимо запустить эту команду как root: %s", + "mmapErrorPart3": "Чтобы сохранить настройки даже после перезапуска: %s", + "mmapErrorPart4": "На Windows и WSL, проблема может испариться при увеличении размера page file; пожалуйста перейдите на нативный Linux если это не исправит проблему.", + "botAlreadyRunning": "Бот уже запущен!", + "extensionRequired": "MadelineProto нуждается в расширении %s. %s", + "extensionRequiredInstallWithApt": "Попробуйте запустить sudo apt-get install %s.", + "extensionRequiredInstallWithCustomInstructions": "Следуйте инструкциям в %s для установки.", + "extensionRecommended": "Внимание: расширение %s не установлено, просьба его установить для ускорения MadelineProto!", "go": "ОК", + "apiChooseManualAutoTip": "Также можно указать API ID/hash сразу в коде используя настройки: %s", + "apiChooseManualAutoTipWeb": "Также можно указать API ID/hash сразу в коде с помощью настроек.", "apiChoosePrompt": "Ваш выбор (m/a): ", - "apiManualInstructions0": "Залогинтесь в https://my.telegram.org", + "apiManualInstructions0": "Войдите в https://my.telegram.org", "apiManualInstructions1": "Нажмите на \"API development tools\"", "apiManualInstructions2": "Выберите \"create application\"", "apiAppInstructionsManual0": "Имя вашего приложения, что угодно", - "apiAppInstructionsManual1": "короткое имя вашего приложения, латиница и цифры, 5-32 букв", - "apiAppInstructionsManual2": "Ссылка на сайт важего приложения, или t.me/username", + "apiAppInstructionsManual1": "короткое имя вашего приложения, латиница и цифры, 5-32 символа", + "apiAppInstructionsManual2": "Ссылка на сайт вашего приложения, или t.me/username", "apiAppInstructionsManual3": "что угодно", + "apiAppInstructionsManual4": "Опишите ваше приложение здесь", "apiManualWeb": "Введите ваш API ID и API hash", "apiManualPrompt0": "Введите ваш API ID: ", "apiManualPrompt1": "Введите ваш API hash: ", - "apiAutoPrompt0": "Введите номер телефона который уже записан в Telegram: ", + "apiAutoWeb": "Введите номер телефона, который уже зарегистрирован в Telegram, чтобы получить API ID", + "apiAutoPrompt0": "Введите номер телефона, который уже зарегистрирован в Telegram: ", "apiAutoPrompt1": "Введите код проверки, который вы получили в Telegram: ", "apiAppWeb": "Введите API информацию", + "apiAppInstructionsAuto0": "Введите имя приложения, может быть что угодно: ", + "apiAppInstructionsAuto1": "Введите короткое имя вашего приложения, латиница и цифры, 5-32 символа: ", "apiAppInstructionsAuto2": "Введите ссылку на сайт вашего приложения, или t.me/yourusername: ", + "apiAppInstructionsAuto3": "Введите платформу приложения: ", "apiAppInstructionsAuto4": "Опишите ваше приложение: ", - "apiAppInstructionsAutoTypeOther": "Другое (указано в описании)", + "apiAppInstructionsAutoTypeOther": "Другое (укажите в описании)", "apiParamsError": "Вы не заполнили все обязательные параметры!", - "apiChooseManualAutoTip": "Также можно указать API ID/hash сразу в коде используя настройки: %s", - "apiChooseManualAutoTipWeb": "Также можно указать API ID/hash сразу в коде с помощью настроек.", - "apiAppInstructionsManual4": "Опишите ваше приложение сдесь", - "apiAutoWeb": "Введите номер телефона который уже записан в Телеграме чтобы получить API ID", - "apiAppInstructionsAuto0": "Введите имя приложения, может быть что угодно: ", - "apiAppInstructionsAuto1": "Введите короткое имя вашего приложения, латиница и цифры, 5-32 букв: ", - "apiAppInstructionsAuto3": "Введите платформу приложения: ", "apiError": "ОШИБКА: %s. Попробуйте снова.", + "loginChoosePromptWeb": "Авторизоваться как пользователь или как бот?", + "loginWebQr": "Вы также можете войти автоматически: откройте Telegram на смартфоне, перейдите в Настройки > Устройства > Подключить устройство и отсканируйте этот QR код:", "loginWebQr1": "Откройте Telegram в вашем смартфоне", "loginWebQr2": "Откройте Настройки > Устройства > Подключить устройство", + "loginWebQr3": "Наведите ваш смартфон на этот экран чтобы подтвердить вход", + "loginOptionBot": "Бот", + "loginOptionUser": "Пользователь", + "loginBot": "Введите токен бота: ", "loginUser": "Номер телефона: ", - "loginQr": "Отсканируйте QR код выше чтобы войти автоматически.", + "loginQr": "Откройте Telegram на смартфоне, перейдите в Настройки > Устройства > Подключить устройство и отсканируйте QR код выше, чтобы войти автоматически.", "loginQrCodeSuccessful": "Вход по QR коду прошел успешно!", + "loginQrCodeExpired": "QR код больше не действует, генерируем новый...", + "loginManual": "Вы также можете ввести токен бота или номер телефона чтобы войти вручную: ", "loginUserCode": "Введите код: ", "loginUserPass": "Введите ваш пароль (подсказка %s): ", "loginUserPassWeb": "Введите ваш пароль: ", "loginUserPassHint": "Подсказка: %s", "signupFirstName": "Введите ваше имя: ", - "loginOptionBot": "Бот", - "loginOptionUser": "Пользователь", - "loginBot": "Введите токен бота: ", + "signupLastName": "Введите вашу фамилию (может быть пустым): ", "signupWeb": "Зарегистрируйтесь, пожалуйста", "signupFirstNameWeb": "Имя", "signupLastNameWeb": "Фамилия", @@ -46,89 +64,211 @@ "loginNoPass": "Вы не ввели пароль!", "loginNoName": "Вы не ввели имя!", "loginBotTokenWeb": "Токен бота", + "loginUserPhoneWeb": "Номер телефона", "loginUserPhoneCodeWeb": "Код", "done": "Готово!", "nearest_dc": "Вы в %s, ближайший ДЦ: %d.", - "loginQrCodeExpired": "QR код больше не действует, генерируем новый...", - "signupLastName": "Введите вашу фамилию (может быть пустым): ", - "loginUserPhoneWeb": "Номер телефона", - "loginManual": "Вы также можете ввести токен бота или номер телефона чтобы войти вручную: ", - "loginChoosePromptWeb": "Авторизоваться как пользователь или как бот?", - "loginWebQr": "Вы также можете войти, отсканировав QR код:", - "loginWebQr3": "Наведите ваш смартфон на этот экран чтобы подтвердить вход", - "api_not_set": "Необходимо указать свой api ключ, достаньте свой @ my.telegram.org", - "value_smaller_than_2147483648": "Значение %s меньше чем -2147483648", - "value_bigger_than_9223372036854775807": "Значение %s больше чем 9223372036854775807", + "serialization_ofd": "Сериализация устарела, объект реконструируется!", + "api_not_set": "Необходимо указать api key и api id, получите свои на my.telegram.org", "session_corrupted": "Сессия повреждена!", "value_bigger_than_2147483647": "Значение %s больше чем 2147483647", + "value_smaller_than_2147483648": "Значение %s меньше чем -2147483648", + "value_bigger_than_9223372036854775807": "Значение %s больше чем 9223372036854775807", "value_smaller_than_9223372036854775808": "Значение %s меньше чем -9223372036854775808", - "serialization_ofd": "Сериализация старая, реконструкция объекта!", - "logout_ok": "Logout!", - "already_loggedIn": "Этот инстанс MadelineProto уже залогинен!", - "login_ok": "Мы залогинены!", - "rpc_tg_error": "Телеграм возвратил RPC ошибку: %s (%s), из-за %s:%s%sTL trace:", - "madelineproto_ready": "MadelineProto готов!", - "mmapErrorPart1": "Превышено максимальное количество маппированных зон памяти (%s, это НЕ потребление памяти, а mmap): пожалуйста увеличьте значение настройки ядра vm.max_map_count до 262144, чтобы исправить проблему.", - "mmapErrorPart2": "Чтобы исправить, необходимо запустить эту команду как root: %s", - "mmapErrorPart3": "Чтобы сохранить настройки даже после перезапуска: %s", - "mmapErrorPart4": "На Windows и WSL, проблема может испариться при увеличении размера page file; пожалуйста перейдите на нативный Linux если это не исправит проблему.", - "extensionRequired": "MadelineProto нуждается в расширении %s. %s", - "extensionRequiredInstallWithApt": "Попробуйте запустить sudo apt-get install %s.", - "extensionRequiredInstallWithCustomInstructions": "Следуйте инструкциям в %s для установки.", - "extensionRecommended": "Внимание: расширение %s не установлено, просьба его установить для ускорения MadelineProto!", - "botAlreadyRunning": "Бот уже запущен!", "value_bigger_than_4294967296": "Значение %s больше чем 4294967296", "value_smaller_than_0": "Значение %s меньше нуля", - "encode_double_error": "Невозможно создать double", + "encode_double_error": "Невозможно корректно закодировать double", "file_not_exist": "Файл не существует", - "deserialization_error": "Произошла ошибка при deserialization", - "noReportPeers": "Внимание: не настроен ни один юзер для сообщения ошибок, пожалуйста добавьте этот метод в Event Handler", - "manualAdminActionRequired": "!!!!!!!!! НЕОБХОДИМЫ РУЧНЫЕ ДЕЙСТВИЯ СИСТЕМНОГО АДМИНИСТРАТОРА !!!!!!!!!", - "login_code_uncalled": "Я не ожидаю код! Пожалуйста сначала вызовите метод phoneLogin", - "login_auth_key": "Вход с помощью ключа авторизации...", - "signing_up": "Вход под нормальным пользователем...", - "baseDirLimitation": "Настройка basedir сконфигурирована: это может повлиять на производительность и вызвать некоторые проблемы, отключите её если это возможно!", + "deserialization_error": "Произошла ошибка при десериализации", + "rpc_tg_error": "Телеграм возвратил RPC ошибку: %s (%s), из-за %s:%s%sTL trace:", + "madelineproto_ready": "MadelineProto готов!", + "logout_ok": "Выход выполнен успешно!", + "already_loggedIn": "Этот инстанс MadelineProto уже залогинен!", + "login_ok": "Мы залогинены!", + "login_user": "Вхожу как пользователь...", + "login_bot": "Вхожу как бот...", "login_code_sending": "Отправка кода...", "login_code_sent": "Код успешно отправлен! Как только Вы получите код Вам нужно использовать функцию completePhoneLogin.", + "login_code_uncalled": "Я не ожидаю код! Пожалуйста сначала вызовите метод phoneLogin", "login_2fa_enabled": "2FA активно, вам необходимо сначала вызвать функцию complete2falogin...", - "not_loggedIn": "Я вошёл в систему!", + "login_need_signup": "Для этого номера телефона не создана учётная запись, вам необходимо вызвать функцию completeSignup...", + "login_auth_key": "Вход с помощью ключа авторизации...", + "not_loggedIn": "Я не вошёл в систему!", + "signup_uncalled": "Я не ожидаю регистрации! Пожалуйста, вызовите сначала методы phoneLogin и completePhoneLogin!", + "signing_up": "Регистрация в качестве обычного пользователя...", + "signup_ok": "Регистрация прошла успешно!", + "2fa_uncalled": "Я не жду сейчас пароля! Вызовите сначала методы phoneLogin и completePhoneLogin!", + "peer_not_in_db": "Этот peer не находится во внутренней базе", "call_error_1": "Не смог найти и принять звонок %s", - "string_required": "Ожидана string!", - "waveform_must_have_100_values": "Массив waveform должен иметь 100 значений!", - "waveform_value": "Значение waveform должно быть между 0 и 31!", - "method_not_found": "Невозможно найти метод: ", - "params_missing": "Не хватает необходимого папаметра", - "sec_peer_not_in_db": "Этого секретного чата нету во внутренней базе", - "length_too_big": "Длина слишком большая", - "login_user": "Вхожу как пользователь...", - "signup_ok": "Запись прошла успешно!", - "accepting_call": "Принимяю звонок от %s...", + "accepting_call": "Принимаю звонок от %s...", + "call_already_accepted": "Звонок %s уже был принят", "call_already_declined": "Звонок %s уже был отвергнут", - "call_error_3": "Невозможно найти и подтвердить звонок %s", + "call_error_2": "Невозможно найти и подтвердить звонок %s", + "call_confirming": "Подтверждаю звонок от %s...", + "call_error_3": "Невозможно найти и завершить звонок %s", "call_completing": "Финализирую звонок от %s...", "fingerprint_invalid": "Невалидный фингерпринт ключа!", + "call_discarding": "Отвергаю звонок %s...", "file_parsing": "Чтение %s...", "src_file_invalid": "Невалидный файл: ", "bool_error": "Невозможно считать boolean", - "not_numeric": "Данное значение не цифра", - "long_not_32": "Длинна данного значения не равна 32 байтам", + "not_numeric": "Данное значение не является числом", + "long_not_16": "Длина данного значения не равна 16 байтам", + "long_not_32": "Длина данного значения не равна 32 байтам", + "long_not_64": "Длина данного значения не равна 64 байтам", "array_invalid": "Вы указали невалидный массив", "predicate_not_set": "Предикат (значение под ключом _) не был указан!", - "login_bot": "Вхожу как бот...", - "login_need_signup": "На этот номер телефона не найдена учётная запись Телеграм...", - "long_not_16": "Длинна данного значения не равна 16 байтам", - "signup_uncalled": "Я не в процессе записи! Пожалуйста, вызовите сначала методы phoneLogin и completePhoneLogin!", - "2fa_uncalled": "Я не жду сейчас пароля! Вызовите сначала методы phoneLogin и completePhoneLogin!", - "call_already_accepted": "Звонок %s уже был принят", - "call_error_2": "Невозможно найти и подтвердить звонок %s", - "call_confirming": "Подтверждаю звонок от %s...", - "translate_madelineproto_cli": "MadelineProto можно локализировать на ваш язык (на данный момент переведено: %d%%), откройте https://weblate.madelineproto.xyz чтобы помочь с переводом!", - "translate_madelineproto_web": "MadelineProto можно локализировать на ваш язык (на данный момент переведено: %d%%), кликните сюда чтобы помочь с переводом!", - "peer_not_in_db": "Этот peer не находится во внутренней базе", - "call_discarding": "Отвергаю звонок %s...", - "stream_handle_invalid": "Использован невалидный стрим.", - "long_not_64": "Длинна данного значения не равна 64 байтам", - "update_madelineproto": "Вы используете старую версию MadelineProto, необходимо обновится: сейчас используется версия %s, но последняя версия со многими поправками и с новым функционалом - %s!", + "update_madelineproto": "Вы используете старую версию MadelineProto, необходимо обновиться: сейчас используется версия %s, но последняя версия со многими исправлениями и новым функционалом - %s!", "type_extract_error": "Невозможно распаковать тип \"%s\", необходимо обновить MadelineProto!", - "could_not_convert_object": "Невозможно сконвертировать объект типа %s" + "method_not_found": "Невозможно найти метод: ", + "params_missing": "Не хватает обязательного параметра", + "sec_peer_not_in_db": "Этого секретного чата нет во внутренней базе", + "stream_handle_invalid": "Использован невалидный стрим.", + "length_too_big": "Длина слишком большая", + "string_required": "Ожидалась строка!", + "waveform_must_have_100_values": "Массив waveform должен иметь 100 значений!", + "waveform_value": "Значение waveform должно быть между 0 и 31!", + "could_not_convert_object": "Невозможно сконвертировать объект типа %s", + "type_extract_error_id": "Невозможно распаковать тип %s с id %s, необходимо обновить MadelineProto!", + "constructor_not_found": "Не найден конструктор для типа: ", + "botapi_conversion_error": "Невозможно сконвертировать %s в объект Bot API", + "non_text_conversion": "Конвертация нетекстовых сообщений пока не поддерживается!", + "file_type_invalid": "Обнаружен невалидный тип файла (%s)", + "static_analysis_minor": "При статическом анализе %s обнаружена незначительная проблема: %s", + "static_analysis_severe": "При статическом анализе %s обнаружена серьёзная проблема: %s", + "secret_chat_skipping": "Секретного чата %s нет в базе, пропускаю сообщение...", + "must_have_declare_types": "по соображениям производительности первой инструкцией файла event handler'а должна быть \"declare(strict_types=1);\"", + "do_not_delete_MadelineProto.log": "файл MadelineProto.log никогда нельзя удалять, вместо этого укажите свой максимальный размер в настройках!", + "do_not_remove_MadelineProto.log_phar": "Пожалуйста, не удаляйте madeline.phar или madeline.php, иначе MadelineProto упадёт. Если у вас возникли проблемы с MadelineProto, сообщите о них на https://github.com/danog/MadelineProto или в https://t.me/pwrtelegramgroup", + "do_not_use_blocking_function": "по соображениям производительности event handler'ы не должны использовать неасинхронную блокирующую функцию %s, используйте вместо неё %s", + "do_not_use_blocking_class": "по соображениям производительности handler'ы не должны использовать неасинхронный блокирующий класс %s, используйте вместо него %s", + "do_not_use_deprecated_function": "функция %s устарела, используйте вместо неё %s", + "do_not_use_non_root_require_in_event_handler": "по соображениям производительности нельзя использовать require или include внутри класса event handler'а, разрешены только require на верхнем уровне файла.", + "do_not_use_yield": "MadelineProto 8 не требует и не поддерживает использование yield в асинхронных функциях, необходимо удалить все ключевые слова yield, которые ранее использовались для вызова асинхронных функций", + "recommend_not_use_filesystem_function": "не рекомендуется использовать функцию %s, так как обращение к файловой системе во время обработки апдейтов замедлит вашего бота, список альтернативных способов хранения данных, которые не замедлят вашего бота, смотрите на https://docs.madelineproto.xyz/docs/UPDATES.html#avoiding-the-use-of-filesystem-functions!", + "plugins_do_not_use_require": "по соображениям производительности плагины могут подключать (include или require) другие файлы из папки плагинов только автоматически, через автозагрузчик PSR-4 (а не вручную через require()).", + "plugins_must_have_exactly_one_class": "плагин должен определять ровно один класс! Чтобы определить несколько классов, интерфейсов или трейтов, создайте отдельные файлы, MadelineProto загрузит их автоматически.", + "cli_need_dl.php_link": "Пожалуйста, укажите URL скрипта загрузки при использовании getDownloadLink через CLI!", + "invalid_dl.php_session": "%s не является валидным скриптом загрузки, так как его ID сессии отличается (ожидался %s, получен %s)", + "need_dl.php": "Не удалось сгенерировать скрипт загрузки по умолчанию (%s), пожалуйста, создайте файл dl.php со следующим содержимым: %s и передайте его URL вторым параметром getDownloadLink", + "dl.php_powered_by_madelineproto": "Сервер загрузки файлов Telegram (до 4GB) на базе MadelineProto!
Нажмите сюда, чтобы узнать, как настроить свой собственный сервер загрузки файлов Telegram!", + "dl.php_check_logs_make_sure_session_running": "Связанный бот EventHandler MadelineProto или IPC сервер MadelineProto не запущен, пожалуйста, проверьте логи и убедитесь, что запущен хотя бы один из них!", + "account_banned": "!!!!!!! ВНИМАНИЕ !!!!!!!\nСистема защиты от флуда Telegram заблокировала этот аккаунт.\nДля продолжения необходима ручная проверка.\nОтправьте письмо на recover@telegram.org с просьбой разблокировать номер телефона %s и кратко опишите, для чего вы будете использовать этот номер.\nЗатем войдите снова.\nЕсли вы удалили этот аккаунт намеренно, проигнорируйте это сообщение.", + "plugin_path_does_not_exist": "Путь к плагину %s не существует!", + "could_not_connect_to_MadelineProto": "Не удалось подключиться к MadelineProto, чтобы исправить, включите proc_open и уберите ограничения open_basedir или отключите перезапись путей веб-сервера! Если вы уже это сделали, убедитесь, что CLI версия PHP точно такая же, как веб-версия (та же версия, расширения и т.д.), и посмотрите файл MadelineProto.log, чтобы узнать подробнее об ошибке, из-за которой не запустился IPC сервер.", + "translate_madelineproto_web": "MadelineProto можно локализировать на ваш язык (на данный момент переведено: %d%%), кликните сюда чтобы помочь с переводом!", + "translate_madelineproto_cli": "MadelineProto можно локализировать на ваш язык (на данный момент переведено: %d%%), откройте https://github.com/danog/MadelineProto/tree/v8/langs чтобы помочь с переводом!", + "apiInvalidWeb": "API ID — это число, а API hash состоит из 32 символов: скопируйте их ещё раз с my.telegram.org.", + "webDoneLead": "MadelineProto продолжает работать на сервере: эту страницу можно закрыть.", + "apiChooseManualAuto": "Получить API ID и API hash автоматически с my.telegram.org (a) или ввести их вручную (m)?", + "apiAutoFallbackManual": "Вместо этого введите API ID и API hash вручную.", + "apiSetupTitleWeb": "Получите API ID и API hash", + "apiSetupLeadWeb": "Каждому приложению Telegram нужны API ID и API hash. MadelineProto может получить их за вас с my.telegram.org по номеру телефона существующего аккаунта Telegram.", + "apiAutoPhoneHintWeb": "my.telegram.org отправляет код входа в приложение Telegram, а не по SMS.", + "apiSendCodeWeb": "Отправить код", + "apiChooseManualWeb": "У меня уже есть API ID", + "apiChooseAutoWeb": "Получить автоматически", + "apiStartOverWeb": "Начать заново", + "apiAutoCodeTitleWeb": "Введите код из Telegram", + "apiAutoCodeLeadWeb": "my.telegram.org отправил код входа в ваше приложение Telegram, в чат с Telegram (не по SMS).", + "apiAutoCodeLabelWeb": "Код входа", + "apiCreateTitleWeb": "Создайте приложение", + "apiCreateLeadWeb": "У этого аккаунта пока нет приложения на my.telegram.org. Эти данные видны только вам, и их можно изменить позже.", + "apiAppTitleLabelWeb": "Название приложения", + "apiAppShortNameLabelWeb": "Короткое имя", + "apiAppUrlLabelWeb": "URL", + "apiAppDescLabelWeb": "Описание", + "apiCreateWeb": "Создать приложение", + "apiSaveWeb": "Сохранить и продолжить", + "apiAutoErrorTitle": "my.telegram.org вернул ошибку", + "apiCreateErrorTitle": "my.telegram.org не создал приложение", + "apiCreateVpsWarning": "Telegram не позволяет создавать новые приложения на my.telegram.org с IP-адресов VPS, VPN и других дата-центров, а запрос был отправлен с IP машины, на которой работает MadelineProto. Создайте приложение вручную на https://my.telegram.org с домашнего подключения (например, с телефона через мобильный интернет), затем введите API ID и API hash.", + "loginTitleWeb": "Вход в Telegram", + "loginLeadWeb": "Выберите аккаунт или бота, от имени которого будет работать этот экземпляр MadelineProto.", + "loginTypeWeb": "Войти как", + "loginUserPhoneHintWeb": "С кодом страны, например +39 123 456 7890.", + "loginBotTokenHintWeb": "Токен, который выдал @BotFather при создании бота.", + "loginCodeTitleWeb": "Введите код входа", + "loginCodeLeadWeb": "Telegram отправил код входа в ваше приложение Telegram или по SMS, если вы больше нигде не авторизованы.", + "loginPasswordTitleWeb": "Двухэтапная аутентификация", + "loginPasswordLeadWeb": "Этот аккаунт защищён паролем, заданным в разделе Настройки > Конфиденциальность > Облачный пароль.", + "loginPasswordLabelWeb": "Пароль", + "signupTitleWeb": "Создайте аккаунт", + "signupLeadWeb": "Этот номер телефона ещё не зарегистрирован в Telegram: выберите имя нового аккаунта.", + "webContinue": "Продолжить", + "webLogin": "Войти", + "webError": "%s. Проверьте и попробуйте снова.", + "webStepApp": "API ID и API hash", + "webStepAccount": "Аккаунт", + "webStepVerify": "Подтверждение", + "webStepDone": "Работает", + "webProgress": "Ход настройки", + "webDocs": "Документация", + "webOptional": "необязательно", + "webShowPassword": "Показать", + "webHidePassword": "Скрыть", + "webQrTitle": "Вход по QR-коду", + "webQrWaiting": "Ожидание сканирования…", + "webFieldRequired": "Заполните это поле.", + "webPhoneInvalid": "Введите номер телефона с кодом страны, например +39 123 456 7890.", + "tweb.Login.Title": "Вход в MadelineProto", + "tweb.Login.PhoneLabelInvalid": "Неверный номер телефона", + "tweb.Login.StartText": "Пожалуйста, проверьте код страны\nи введите свой номер телефона.", + "tweb.Login.Code.SentSms": "Мы отправили вам SMS\nс кодом.", + "tweb.Login.Code.SentInApp": "Мы отправили вам сообщение в Telegram\nс кодом.", + "tweb.Login.Code.SentCall": "Мы позвоним вам и продиктуем\nкод.", + "tweb.Login.Code.SentEmail": "Проверьте почту **%s** (не забудьте про папку «Спам») и введите код, который мы только что отправили.", + "tweb.Login.Code.SentUnknown": "Поищите код\nвезде (тип: %s)", + "tweb.Login.Code.SentMissedCall": "В течение нескольких секунд вам поступит\nкороткий звонок с номера **%s**. Не отвечайте —\nпросто введите последние цифры этого номера.", + "tweb.Login.Code.SentSmsWord": "Мы отправили SMS с секретным словом\nна ваш номер **%s**.", + "tweb.Login.Code.SentSmsWordBeginning": "Мы отправили SMS с секретным словом, которое начинается\nс «**%2$s**», на ваш номер **%1$s**.", + "tweb.Login.Code.SentSmsPhrase": "Мы отправили SMS с секретной фразой\nна ваш номер **%s**.", + "tweb.Login.Code.SentSmsPhraseBeginning": "Мы отправили SMS с секретной фразой, которая начинается\nс «**%2$s**», на ваш номер **%1$s**.", + "tweb.Login.Code.SecretWord": "Секретное слово", + "tweb.Login.Code.SecretPhrase": "Секретная фраза", + "tweb.Login.Code.WordInvalid": "Неверно, попробуйте ещё раз", + "tweb.Login.Code.WordBeginningInvalid": "Неверное слово", + "tweb.Login.Password.Title": "Введите пароль", + "tweb.Login.Password.Subtitle": "Ваш аккаунт защищён\nдополнительным паролем", + "tweb.Login.Register.Subtitle": "Введите своё имя,\nчтобы создать аккаунт", + "tweb.PleaseWait": "Пожалуйста, подождите...", + "tweb.Code": "Код", + "tweb.LoginPassword": "Пароль", + "tweb.YourName": "Ваше имя", + "tweb.FirstName": "Имя (обязательно)", + "tweb.LastName": "Фамилия (необязательно)", + "tweb.StartMessaging": "Начать общение", + "tweb.Country": "Страна", + "tweb.Contacts.PhoneNumber.Placeholder": "Номер телефона", + "tweb.Login.Next": "Далее", + "tweb.Login.QR.Title": "Вход по QR-коду", + "tweb.Login.QR.Help1": "Откройте Telegram на телефоне", + "tweb.Login.QR.Help2": "Перейдите в **Настройки** > **Устройства** > **Подключить устройство**", + "tweb.Login.QR.Help3": "Наведите телефон на этот экран, чтобы подтвердить вход", + "tweb.Login.QR.Cancel": "Вход по номеру телефона >", + "tweb.Login.QR.Login": "Вход по QR-коду >", + "tweb.Login.QR.Subtitle": "Отсканируйте приложением Telegram на телефоне", + "tweb.PhoneNumber.Code.Fragment.Info": "Получите код в разделе Numbers на [Fragment]()", + "tweb.PHONE_CODE_INVALID": "Неверный код", + "tweb.PHONE_CODE_EXPIRED": "Срок действия кода истёк", + "tweb.PASSWORD_HASH_INVALID": "Неверный пароль", + "tweb.DarkMode": "Тёмная тема", + "tweb.Error.AnError": "Произошла ошибка. Попробуйте позже.", + "tweb.AccDescr.LoginCode": "Код входа", + "tweb.Login.Bot": "Войти как бот >", + "tweb.Login.Bot.Title": "Вход как бот", + "tweb.Login.Bot.Subtitle": "Введите токен, который выдал @BotFather\nпри создании бота.", + "tweb.Login.Bot.Token": "Токен бота", + "tweb.Login.Bot.Cancel": "Войти как пользователь >", + "tweb.Optional": "необязательно", + "tweb.PHONE_NUMBER_INVALID": "Неверный номер телефона", + "tweb.PHONE_NUMBER_BANNED": "Этот номер телефона заблокирован", + "tweb.PHONE_NUMBER_FLOOD": "Слишком много попыток, попробуйте позже", + "tweb.PHONE_CODE_EMPTY": "Неверный код", + "tweb.PHONE_PASSWORD_FLOOD": "Слишком много попыток, попробуйте позже", + "tweb.ACCESS_TOKEN_INVALID": "Неверный токен бота", + "tweb.ACCESS_TOKEN_EXPIRED": "Этот токен бота был отозван", + "tweb.FIRSTNAME_INVALID": "Недопустимое имя", + "tweb.LASTNAME_INVALID": "Недопустимая фамилия", + "tweb.Close": "Закрыть" } diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/tr.json b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/tr.json new file mode 100644 index 0000000..ad933e4 --- /dev/null +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/tr.json @@ -0,0 +1,274 @@ +{ + "baseDirLimitation": "Bir basedir kısıtlaması yapılandırılmış: bu, performansı etkileyebilir ve bazı sorunlara yol açabilir, mümkünse lütfen devre dışı bırakın!", + "noReportPeers": "Uyarı: hiçbir rapor alıcısı (report peers) ayarlanmamış, lütfen olay işleyicinize aşağıdaki metodu ekleyin", + "manualAdminActionRequired": "!!!!!!!!! MANUEL SİSTEM YÖNETİCİSİ MÜDAHALESİ GEREKLİ !!!!!!!!!", + "mmapErrorPart1": "Belleğe eşlenmiş (mmap) bölge sayısının üst sınırına ulaşıldı (%s): düzeltmek için lütfen vm.max_map_count çekirdek ayarını 262144 değerine yükseltin.", + "mmapErrorPart2": "Düzeltmek için aşağıdaki komutu root olarak çalıştırın: %s", + "mmapErrorPart3": "Değişikliğin yeniden başlatmalardan sonra da kalıcı olması için: %s", + "mmapErrorPart4": "Windows ve WSL'de sayfa dosyasının (pagefile) boyutunu artırmak yardımcı olabilir; sorun devam ederse lütfen yerel (native) Linux'a geçin.", + "botAlreadyRunning": "Bot zaten çalışıyor!", + "extensionRequired": "MadelineProto'nun çalışması için %s eklentisi gereklidir. %s", + "extensionRequiredInstallWithApt": "sudo apt-get install %s komutunu çalıştırmayı deneyin.", + "extensionRequiredInstallWithCustomInstructions": "Kurmak için %s adresindeki talimatları izleyin.", + "extensionRecommended": "Uyarı: %s eklentisi kurulu değil, MadelineProto'yu hızlandırmak için lütfen kurun!", + "go": "Devam", + "apiChooseManualAutoTip": "API ID/hash bilgisini ayarlar aracılığıyla doğrudan kodda da sağlayabileceğinizi unutmayın: %s", + "apiChooseManualAutoTipWeb": "API ID/hash bilgisini ayarlar aracılığıyla doğrudan kodda da sağlayabileceğinizi unutmayın.", + "apiChoosePrompt": "Seçiminiz (m/a): ", + "apiManualInstructions0": "https://my.telegram.org adresinde oturum açın", + "apiManualInstructions1": "\"API development tools\" bölümüne gidin", + "apiManualInstructions2": "\"create application\" seçeneğine tıklayın", + "apiAppInstructionsManual0": "uygulamanızın adı, herhangi bir şey olabilir", + "apiAppInstructionsManual1": "uygulamanızın kısa adı, alfanümerik, 5-32 karakter", + "apiAppInstructionsManual2": "uygulamanızın/web sitenizin URL'si veya t.me/yourusername", + "apiAppInstructionsManual3": "herhangi bir şey", + "apiAppInstructionsManual4": "Uygulamanızı burada açıklayın", + "apiManualWeb": "API ID ve API hash bilgilerinizi girin", + "apiManualPrompt0": "API ID'nizi girin: ", + "apiManualPrompt1": "API hash'inizi girin: ", + "apiAutoWeb": "API ID'yi almak için Telegram'a zaten kayıtlı bir telefon numarası girin", + "apiAutoPrompt0": "Telegram'a zaten kayıtlı bir telefon numarası girin: ", + "apiAutoPrompt1": "Telegram'da aldığınız doğrulama kodunu girin: ", + "apiAppWeb": "API bilgilerini girin", + "apiAppInstructionsAuto0": "Uygulamanın adını girin, herhangi bir şey olabilir: ", + "apiAppInstructionsAuto1": "Uygulamanın kısa adını girin, alfanümerik, 5-32 karakter: ", + "apiAppInstructionsAuto2": "Uygulamanın/web sitesinin URL'sini veya t.me/yourusername girin: ", + "apiAppInstructionsAuto3": "Uygulamanın platformunu girin: ", + "apiAppInstructionsAuto4": "Uygulamanızı açıklayın: ", + "apiAppInstructionsAutoTypeOther": "Diğer (açıklamada belirtin)", + "apiParamsError": "Gerekli parametrelerin tümünü sağlamadınız!", + "apiError": "HATA: %s. Tekrar deneyin.", + "loginChoosePromptWeb": "Kullanıcı olarak mı yoksa bot olarak mı oturum açmak istiyorsunuz?", + "loginWebQr": "Telefonunuzda Telegram'ı açıp Ayarlar > Cihazlar > Masaüstü Cihazı Bağla bölümüne giderek aşağıdaki QR kodunu tarayarak da otomatik olarak oturum açabilirsiniz:", + "loginWebQr1": "Telefonunuzda Telegram'ı açın", + "loginWebQr2": "Ayarlar > Cihazlar > Masaüstü Cihazı Bağla bölümüne gidin", + "loginWebQr3": "Oturum açmayı onaylamak için telefonunuzu bu ekrana doğrultun", + "loginOptionBot": "Bot", + "loginOptionUser": "Kullanıcı", + "loginBot": "Bot token'ınızı girin: ", + "loginUser": "Telefon numaranızı girin: ", + "loginQr": "Otomatik olarak oturum açmak için telefonunuzda Telegram'ı açın, Ayarlar > Cihazlar > Masaüstü Cihazı Bağla bölümüne gidin ve yukarıdaki QR kodunu tarayın.", + "loginQrCodeSuccessful": "QR kodu ile oturum açma başarılı!", + "loginQrCodeExpired": "QR kodunun süresi doldu, yenisi oluşturuluyor...", + "loginManual": "Alternatif olarak, manuel olarak oturum açmak için bir bot token'ı veya telefon numarası da girebilirsiniz: ", + "loginUserCode": "Kodu girin: ", + "loginUserPass": "Parolanızı girin (ipucu: %s): ", + "loginUserPassWeb": "Parolanızı girin: ", + "loginUserPassHint": "İpucu: %s", + "signupFirstName": "Adınızı girin: ", + "signupLastName": "Soyadınızı girin (boş bırakılabilir): ", + "signupWeb": "Lütfen kaydolun", + "signupFirstNameWeb": "Ad", + "signupLastNameWeb": "Soyad", + "loginNoCode": "Doğrulama kodunu girmediniz!", + "loginNoPass": "Parolayı girmediniz!", + "loginNoName": "Adı girmediniz!", + "loginBotTokenWeb": "Bot token'ı", + "loginUserPhoneWeb": "Telefon numarası", + "loginUserPhoneCodeWeb": "Kod", + "done": "Tamamlandı!", + "nearest_dc": "Konumumuz: %s, en yakın DC: %d.", + "serialization_ofd": "Serileştirme güncel değil, nesne yeniden oluşturuluyor!", + "api_not_set": "Bir api key ve api id sağlamanız gerekir, kendinizinkini my.telegram.org adresinden alın", + "session_corrupted": "Oturum bozuk!", + "value_bigger_than_2147483647": "Sağlanan %s değeri 2147483647'den büyük", + "value_smaller_than_2147483648": "Sağlanan %s değeri -2147483648'den küçük", + "value_bigger_than_9223372036854775807": "Sağlanan %s değeri 9223372036854775807'den büyük", + "value_smaller_than_9223372036854775808": "Sağlanan %s değeri -9223372036854775808'den küçük", + "value_bigger_than_4294967296": "Sağlanan %s değeri 4294967296'dan büyük", + "value_smaller_than_0": "Sağlanan %s değeri 0'dan küçük", + "encode_double_error": "double değeri düzgün kodlanamadı", + "file_not_exist": "Dosya mevcut değil", + "deserialization_error": "Serileştirmeyi çözme sırasında bir hata oluştu", + "rpc_tg_error": "Telegram bir RPC hatası döndürdü: %s (%s), kaynağı: %s:%s%sTL izi:", + "madelineproto_ready": "MadelineProto hazır!", + "logout_ok": "Oturum başarıyla kapatıldı!", + "already_loggedIn": "Bu MadelineProto örneğinde zaten oturum açılmış!", + "login_ok": "Oturum başarıyla açıldı!", + "login_user": "Normal kullanıcı olarak oturum açılıyor...", + "login_bot": "Bot olarak oturum açılıyor...", + "login_code_sending": "Kod gönderiliyor...", + "login_code_sent": "Kod başarıyla gönderildi! Kodu aldığınızda completePhoneLogin fonksiyonunu kullanmalısınız.", + "login_code_uncalled": "Kod beklemiyorum! Lütfen önce phoneLogin metodunu çağırın", + "login_2fa_enabled": "2FA etkin, complete2falogin fonksiyonunu çağırmanız gerekecek...", + "login_need_signup": "Bu numara için bir hesap oluşturulmamış, completeSignup fonksiyonunu çağırmanız gerekecek...", + "login_auth_key": "Yetkilendirme anahtarı (auth key) kullanılarak oturum açılıyor...", + "not_loggedIn": "Oturum açılmamış!", + "signup_uncalled": "Kayıt beklemiyorum! Lütfen önce phoneLogin ve completePhoneLogin metotlarını çağırın!", + "signing_up": "Normal kullanıcı olarak kaydolunuyor...", + "signup_ok": "Kayıt başarılı!", + "2fa_uncalled": "Parola beklemiyorum! Lütfen önce phoneLogin ve completePhoneLogin metotlarını çağırın!", + "peer_not_in_db": "Bu peer, dahili peer veritabanında bulunmuyor", + "call_error_1": "%s araması bulunup kabul edilemedi", + "accepting_call": "%s tarafından gelen arama kabul ediliyor...", + "call_already_accepted": "%s araması zaten kabul edildi", + "call_already_declined": "%s araması zaten reddedildi", + "call_error_2": "%s araması bulunup onaylanamadı", + "call_confirming": "%s tarafından gelen arama onaylanıyor...", + "call_error_3": "%s araması bulunup kurulumu tamamlanamadı", + "call_completing": "%s tarafından gelen aramanın kurulumu tamamlanıyor...", + "fingerprint_invalid": "Geçersiz anahtar parmak izi!", + "call_discarding": "%s araması sonlandırılıyor...", + "file_parsing": "%s ayrıştırılıyor...", + "src_file_invalid": "Geçersiz kaynak dosyası sağlandı: ", + "bool_error": "Boolean değer çıkarılamadı", + "not_numeric": "Verilen değer sayısal değil", + "long_not_16": "Verilen değer 16 bayt uzunluğunda değil", + "long_not_32": "Verilen değer 32 bayt uzunluğunda değil", + "long_not_64": "Verilen değer 64 bayt uzunluğunda değil", + "array_invalid": "Geçerli bir dizi sağlamadınız", + "predicate_not_set": "Predicate (_ altındaki değer) ayarlanmadı!", + "update_madelineproto": "MadelineProto'nun eski bir sürümünü kullanıyorsunuz, güncelleme gerekli: şu anda %s sürümü çalışıyor, ancak çok sayıda hata düzeltmesi ve yeni özellik içeren en son sürüm %s!", + "type_extract_error": "\"%s\" türü çıkarılamadı, MadelineProto'yu güncellemelisiniz!", + "method_not_found": "Metot bulunamadı: ", + "params_missing": "Gerekli parametre eksik", + "sec_peer_not_in_db": "Bu gizli peer, dahili peer veritabanında bulunmuyor", + "stream_handle_invalid": "Geçersiz bir akış tanıtıcısı (stream handle) sağlandı.", + "length_too_big": "Uzunluk çok büyük", + "string_required": "Bir dize (string) bekleniyordu!", + "waveform_must_have_100_values": "Bir waveform dizisi 100 değer içermelidir!", + "waveform_value": "Bir waveform değeri 0 ile 31 arasında olmalıdır!", + "could_not_convert_object": "%s türündeki nesne dönüştürülemedi", + "type_extract_error_id": "Tür çıkarılamadı: %s, id %s; MadelineProto'yu güncellemelisiniz!", + "constructor_not_found": "Şu tür için constructor bulunamadı: ", + "botapi_conversion_error": "%s bir bot API nesnesine dönüştürülemiyor", + "non_text_conversion": "Metin dışı mesajlar henüz dönüştürülemiyor!", + "file_type_invalid": "Geçersiz dosya türü algılandı (%s)", + "static_analysis_minor": "%s statik analizi sırasında küçük bir sorunla karşılaşıldı: %s", + "static_analysis_severe": "%s statik analizi sırasında ciddi bir sorunla karşılaşıldı: %s", + "secret_chat_skipping": "%s gizli sohbeti veritabanında yok, mesaj atlanıyor...", + "must_have_declare_types": "performans nedenleriyle, bir olay işleyici dosyasının ilk ifadesi \"declare(strict_types=1);\" olmalıdır", + "do_not_delete_MadelineProto.log": "MadelineProto.log dosyası asla silinmemelidir, bunun yerine lütfen ayarlarda özel bir maksimum boyut belirleyin!", + "do_not_remove_MadelineProto.log_phar": "Lütfen madeline.phar veya madeline.php dosyalarını silmeyin, aksi halde MadelineProto çöker. MadelineProto ile ilgili bir sorununuz varsa https://github.com/danog/MadelineProto veya https://t.me/pwrtelegramgroup adresine bildirin", + "do_not_use_blocking_function": "performans nedenleriyle, olay işleyiciler async olmayan, engelleyici %s fonksiyonunu kullanamaz, lütfen bunun yerine %s kullanın", + "do_not_use_blocking_class": "performans nedenleriyle, işleyiciler async olmayan, engelleyici %s sınıfını kullanamaz, lütfen bunun yerine %s kullanın", + "do_not_use_deprecated_function": "%s fonksiyonu kullanımdan kaldırılmıştır, lütfen bunun yerine %s kullanın", + "do_not_use_non_root_require_in_event_handler": "performans nedenleriyle, bir olay işleyici sınıfının içinde require veya include kullanmamalısınız, yalnızca kök düzeydeki require'lara izin verilir.", + "do_not_use_yield": "MadelineProto 8, async fonksiyonlarda yield kullanımını gerektirmez ve desteklemez; daha önce async fonksiyon çağrıları için kullanılan tüm yield anahtar sözcüklerini kaldırmalısınız", + "recommend_not_use_filesystem_function": "%s fonksiyonunun kullanılması önerilmez, çünkü güncellemeler işlenirken dosya sistemine erişmek botunuzu yavaşlatır; botunuzu yavaşlatmayan alternatif veri saklama yöntemlerinin listesi için lütfen https://docs.madelineproto.xyz/docs/UPDATES.html#avoiding-the-use-of-filesystem-functions adresine bakın!", + "plugins_do_not_use_require": "performans nedenleriyle, eklentiler eklenti klasöründeki diğer dosyaları yalnızca PSR-4 otomatik yükleyicisini tetikleyerek otomatik olarak include veya require edebilir (require() ile elle dahil ederek değil).", + "plugins_must_have_exactly_one_class": "bir eklenti tam olarak bir sınıf tanımlamalıdır! Birden fazla sınıf, arayüz veya trait tanımlamak için ayrı dosyalar oluşturun; bunlar MadelineProto tarafından otomatik olarak yüklenecektir.", + "cli_need_dl.php_link": "getDownloadLink'i CLI üzerinden kullanırken lütfen bir indirme betiği URL'si belirtin!", + "invalid_dl.php_session": "%s geçerli bir indirme betiği değil, çünkü oturum kimliği farklı (beklenen %s, alınan %s)", + "need_dl.php": "Varsayılan indirme betiği oluşturulamadı (%s), lütfen aşağıdaki içeriğe sahip bir dl.php dosyası oluşturun: %s ve URL'sini getDownloadLink'in ikinci parametresine iletin", + "dl.php_powered_by_madelineproto": "MadelineProto tarafından desteklenen Telegram dosya indirme sunucusu (4 GB'a kadar)!
Kendi Telegram dosya indirme sunucunuzu nasıl kuracağınız hakkında daha fazla bilgi için buraya tıklayın!", + "dl.php_check_logs_make_sure_session_running": "İlişkili MadelineProto EventHandler botu veya MadelineProto IPC sunucusu çevrimdışı, lütfen günlükleri kontrol edin ve en az birinin çalıştığından emin olun!", + "account_banned": "!!!!!!! UYARI !!!!!!!\nTelegram'ın flood önleme sistemi bu hesabı askıya aldı.\nDevam etmek için manuel doğrulama gerekiyor.\nrecover@telegram.org adresine %s telefon numarasının engelinin kaldırılmasını isteyen bir e-posta gönderin ve bu telefon numarasıyla ne yapacağınızı kısaca açıklayın.\nArdından tekrar oturum açın.\nBu hesabı bilerek sildiyseniz bu mesajı dikkate almayın.", + "plugin_path_does_not_exist": "%s eklenti yolu mevcut değil!", + "could_not_connect_to_MadelineProto": "MadelineProto'ya bağlanılamadı, düzeltmek için lütfen proc_open'ı etkinleştirin ve open_basedir kısıtlamalarını kaldırın ya da web sunucusunun yol yeniden yazma (rewrite) özelliğini devre dışı bırakın! Bunu zaten yaptıysanız, PHP'nin CLI sürümünün web sürümüyle tamamen aynı olduğundan (aynı sürüm, eklentiler vb.) emin olun ve IPC sunucusunun başlamasını engelleyen hata hakkında daha fazla bilgi için MadelineProto.log dosyasına bakın.", + "translate_madelineproto_web": "MadelineProto sizin dilinize çevrilebilir (mevcut çeviri ilerlemesi: %%%d), çeviriye katkıda bulunmak için buraya tıklayın!", + "translate_madelineproto_cli": "MadelineProto sizin dilinize çevrilebilir (mevcut çeviri ilerlemesi: %%%d), çeviriye katkıda bulunmak için https://github.com/danog/MadelineProto/tree/v8/langs adresine gidin!", + "apiInvalidWeb": "API ID bir sayıdır, API hash ise 32 karakter uzunluğundadır: bunları my.telegram.org adresinden yeniden kopyalayın.", + "webDoneLead": "MadelineProto sunucuda çalışmaya devam ediyor: bu sayfayı kapatabilirsiniz.", + "apiChooseManualAuto": "API ID ve hash bilgilerini my.telegram.org adresinden otomatik olarak mı almak istersiniz (a), yoksa manuel olarak mı girmek istersiniz (m)?", + "apiAutoFallbackManual": "Bunun yerine API ID ve hash bilgilerini manuel olarak girin.", + "apiSetupTitleWeb": "API ID ve hash bilgilerinizi alın", + "apiSetupLeadWeb": "Her Telegram uygulamasının bir API ID ve hash bilgisine ihtiyacı vardır. MadelineProto, mevcut bir Telegram hesabının telefon numarasıyla bunları sizin için my.telegram.org adresinden alabilir.", + "apiAutoPhoneHintWeb": "my.telegram.org giriş kodunu SMS ile değil, Telegram uygulamanıza gönderir.", + "apiSendCodeWeb": "Kod gönder", + "apiChooseManualWeb": "Zaten bir API ID'm var", + "apiChooseAutoWeb": "Otomatik olarak al", + "apiStartOverWeb": "Baştan başla", + "apiAutoCodeTitleWeb": "Telegram'dan gelen kodu girin", + "apiAutoCodeLeadWeb": "my.telegram.org, Telegram uygulamanıza Telegram sohbetinde bir giriş kodu gönderdi (SMS ile değil).", + "apiAutoCodeLabelWeb": "Giriş kodu", + "apiCreateTitleWeb": "Uygulamanızı oluşturun", + "apiCreateLeadWeb": "Bu hesabın my.telegram.org üzerinde henüz bir uygulaması yok. Bu bilgiler yalnızca size gösterilir ve daha sonra değiştirilebilir.", + "apiAppTitleLabelWeb": "Uygulama adı", + "apiAppShortNameLabelWeb": "Kısa ad", + "apiAppUrlLabelWeb": "URL", + "apiAppDescLabelWeb": "Açıklama", + "apiCreateWeb": "Uygulama oluştur", + "apiSaveWeb": "Kaydet ve devam et", + "apiAutoErrorTitle": "my.telegram.org bir hata döndürdü", + "apiCreateErrorTitle": "my.telegram.org uygulamayı oluşturmadı", + "apiCreateVpsWarning": "Telegram, VPS, VPN ve diğer veri merkezi IP aralıklarının my.telegram.org üzerinde yeni uygulama oluşturmasına izin vermez ve istek, MadelineProto'yu çalıştıran makinenin IP adresinden yapıldı. Uygulamayı bir ev bağlantısından (örneğin mobil veri kullanan telefonunuzdan) https://my.telegram.org adresinde manuel olarak oluşturun, ardından API ID ve hash bilgilerini girin.", + "loginTitleWeb": "Telegram'da oturum açın", + "loginLeadWeb": "Bu MadelineProto örneğinin hangi hesap veya bot olarak çalışacağını seçin.", + "loginTypeWeb": "Şu olarak oturum aç", + "loginUserPhoneHintWeb": "Ülke koduyla birlikte, örneğin +39 123 456 7890.", + "loginBotTokenHintWeb": "Botu oluşturduğunuzda @BotFather'ın size verdiği token.", + "loginCodeTitleWeb": "Giriş kodunu girin", + "loginCodeLeadWeb": "Telegram, Telegram uygulamanıza bir giriş kodu gönderdi; başka hiçbir yerde oturum açmadıysanız kod SMS ile gönderilir.", + "loginPasswordTitleWeb": "İki adımlı doğrulama", + "loginPasswordLeadWeb": "Bu hesap, Ayarlar > Gizlilik ve Güvenlik > İki Adımlı Doğrulama bölümünde belirlenen bir parolayla korunuyor.", + "loginPasswordLabelWeb": "Parola", + "signupTitleWeb": "Hesabınızı oluşturun", + "signupLeadWeb": "Bu telefon numarası henüz Telegram'da değil: yeni hesabın adını seçin.", + "webContinue": "Devam", + "webLogin": "Oturum aç", + "webError": "%s. Kontrol edip tekrar deneyin.", + "webStepApp": "API ID ve hash", + "webStepAccount": "Hesap", + "webStepVerify": "Doğrulama", + "webStepDone": "Çalışıyor", + "webProgress": "Kurulum ilerlemesi", + "webDocs": "Belgeler", + "webOptional": "isteğe bağlı", + "webShowPassword": "Göster", + "webHidePassword": "Gizle", + "webQrTitle": "QR kodu ile oturum açın", + "webQrWaiting": "Taranması bekleniyor…", + "webFieldRequired": "Bu alanı doldurun.", + "webPhoneInvalid": "Telefon numarasını ülke koduyla birlikte girin, örneğin +39 123 456 7890.", + "tweb.Login.Title": "MadelineProto'da oturum açın", + "tweb.Login.PhoneLabelInvalid": "Geçersiz telefon numarası", + "tweb.Login.StartText": "Lütfen ülke kodunuzu onaylayın\nve telefon numaranızı girin.", + "tweb.Login.Code.SentSms": "Size kodu içeren\nbir SMS gönderdik.", + "tweb.Login.Code.SentInApp": "Size Telegram'da kodu içeren\nbir mesaj gönderdik.", + "tweb.Login.Code.SentCall": "Sizi arayıp kodu\nsesli olarak ileteceğiz.", + "tweb.Login.Code.SentEmail": "Lütfen **%s** e-posta adresinizi kontrol edin (spam klasörünü unutmayın) ve az önce gönderdiğimiz kodu girin.", + "tweb.Login.Code.SentUnknown": "Lütfen kod için her yeri\nkontrol edin (tür: %s)", + "tweb.Login.Code.SentMissedCall": "Birkaç saniye içinde **%s** numarasından\nkısa bir arama alacaksınız. Aramayı yanıtlamayın,\nyalnızca o numaranın son hanelerini girin.", + "tweb.Login.Code.SentSmsWord": "**%s** numaralı telefonunuza\ngizli kelimeyi içeren bir SMS gönderdik.", + "tweb.Login.Code.SentSmsWordBeginning": "**%1$s** numaralı telefonunuza \"**%2$s**\" ile\nbaşlayan gizli bir kelime içeren SMS gönderdik.", + "tweb.Login.Code.SentSmsPhrase": "**%s** numaralı telefonunuza\ngizli ifadeyi içeren bir SMS gönderdik.", + "tweb.Login.Code.SentSmsPhraseBeginning": "**%1$s** numaralı telefonunuza \"**%2$s**\" ile\nbaşlayan gizli bir ifade içeren SMS gönderdik.", + "tweb.Login.Code.SecretWord": "Gizli kelime", + "tweb.Login.Code.SecretPhrase": "Gizli ifade", + "tweb.Login.Code.WordInvalid": "Yanlış, lütfen tekrar deneyin", + "tweb.Login.Code.WordBeginningInvalid": "Yanlış kelime", + "tweb.Login.Password.Title": "Parolanızı girin", + "tweb.Login.Password.Subtitle": "Hesabınız ek bir parola\nile korunuyor", + "tweb.Login.Register.Subtitle": "Hesabınızı oluşturmak için\nadınızı girin", + "tweb.PleaseWait": "Lütfen bekleyin...", + "tweb.Code": "Kod", + "tweb.LoginPassword": "Parola", + "tweb.YourName": "Adınız", + "tweb.FirstName": "Ad (zorunlu)", + "tweb.LastName": "Soyad (isteğe bağlı)", + "tweb.StartMessaging": "Mesajlaşmaya başla", + "tweb.Country": "Ülke", + "tweb.Contacts.PhoneNumber.Placeholder": "Telefon numarası", + "tweb.Login.Next": "İleri", + "tweb.Login.QR.Title": "QR kodu ile oturum açın", + "tweb.Login.QR.Help1": "Telefonunuzda Telegram'ı açın", + "tweb.Login.QR.Help2": "**Ayarlar** > **Cihazlar** > **Cihaz Ekle** bölümüne gidin", + "tweb.Login.QR.Help3": "Oturum açmayı onaylamak için telefonunuzu bu ekrana doğrultun", + "tweb.Login.QR.Cancel": "Telefon numarasıyla oturum aç >", + "tweb.Login.QR.Login": "QR kodu ile oturum aç >", + "tweb.Login.QR.Subtitle": "Telefonunuzdaki Telegram uygulamasıyla tarayın", + "tweb.PhoneNumber.Code.Fragment.Info": "Kodu [Fragment]() üzerindeki Numaralar bölümünden alın", + "tweb.PHONE_CODE_INVALID": "Geçersiz kod", + "tweb.PHONE_CODE_EXPIRED": "Kodun süresi doldu", + "tweb.PASSWORD_HASH_INVALID": "Yanlış parola", + "tweb.DarkMode": "Karanlık mod", + "tweb.Error.AnError": "Bir hata oluştu. Lütfen daha sonra tekrar deneyin.", + "tweb.AccDescr.LoginCode": "Giriş kodu", + "tweb.Login.Bot": "Bot olarak oturum aç >", + "tweb.Login.Bot.Title": "Bot olarak oturum açın", + "tweb.Login.Bot.Subtitle": "Botu oluşturduğunuzda @BotFather'ın\nsize verdiği token'ı girin.", + "tweb.Login.Bot.Token": "Bot token'ı", + "tweb.Login.Bot.Cancel": "Kullanıcı olarak oturum aç >", + "tweb.Optional": "isteğe bağlı", + "tweb.PHONE_NUMBER_INVALID": "Geçersiz telefon numarası", + "tweb.PHONE_NUMBER_BANNED": "Bu telefon numarası yasaklanmış", + "tweb.PHONE_NUMBER_FLOOD": "Çok fazla deneme yapıldı, daha sonra tekrar deneyin", + "tweb.PHONE_CODE_EMPTY": "Geçersiz kod", + "tweb.PHONE_PASSWORD_FLOOD": "Çok fazla deneme yapıldı, daha sonra tekrar deneyin", + "tweb.ACCESS_TOKEN_INVALID": "Geçersiz bot token'ı", + "tweb.ACCESS_TOKEN_EXPIRED": "Bu bot token'ı iptal edildi", + "tweb.FIRSTNAME_INVALID": "Geçersiz ad", + "tweb.LASTNAME_INVALID": "Geçersiz soyad", + "tweb.Close": "Kapat" +} diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/uk.json b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/uk.json new file mode 100644 index 0000000..99d9ae3 --- /dev/null +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/uk.json @@ -0,0 +1,274 @@ +{ + "baseDirLimitation": "Налаштовано обмеження basedir: це може вплинути на продуктивність і спричинити певні проблеми, вимкніть його, якщо можливо!", + "noReportPeers": "Попередження: не задано одержувачів звітів (report peers), додайте до свого обробника подій такий метод", + "manualAdminActionRequired": "!!!!!!!!! ПОТРІБНЕ ВТРУЧАННЯ СИСТЕМНОГО АДМІНІСТРАТОРА !!!!!!!!!", + "mmapErrorPart1": "Досягнуто максимальної кількості відображених у пам'ять областей (mmap) (%s): щоб виправити це, збільште параметр ядра vm.max_map_count до 262144.", + "mmapErrorPart2": "Щоб виправити, виконайте від імені root таку команду: %s", + "mmapErrorPart3": "Щоб зміна зберігалася після перезавантаження: %s", + "mmapErrorPart4": "У Windows і WSL може допомогти збільшення файлу підкачки; якщо проблема не зникне, перейдіть на нативний Linux.", + "botAlreadyRunning": "Бот уже запущено!", + "extensionRequired": "Для роботи MadelineProto потрібне розширення %s. %s", + "extensionRequiredInstallWithApt": "Спробуйте виконати sudo apt-get install %s.", + "extensionRequiredInstallWithCustomInstructions": "Щоб установити його, дотримуйтеся інструкцій за адресою %s.", + "extensionRecommended": "Попередження: розширення %s не встановлено, установіть його, щоб пришвидшити MadelineProto!", + "go": "Далі", + "apiChooseManualAutoTip": "Зверніть увагу, що API ID/hash також можна вказати безпосередньо в коді через налаштування: %s", + "apiChooseManualAutoTipWeb": "Зверніть увагу, що API ID/hash також можна вказати безпосередньо в коді через налаштування.", + "apiChoosePrompt": "Ваш вибір (m/a): ", + "apiManualInstructions0": "Увійдіть на https://my.telegram.org", + "apiManualInstructions1": "Перейдіть до розділу «API development tools»", + "apiManualInstructions2": "Натисніть «create application»", + "apiAppInstructionsManual0": "назва вашого застосунку, може бути будь-якою", + "apiAppInstructionsManual1": "коротка назва вашого застосунку, літери й цифри, 5-32 символи", + "apiAppInstructionsManual2": "URL вашого застосунку/вебсайту або t.me/yourusername", + "apiAppInstructionsManual3": "будь-що", + "apiAppInstructionsManual4": "Опишіть тут свій застосунок", + "apiManualWeb": "Введіть свої API ID та API hash", + "apiManualPrompt0": "Введіть свій API ID: ", + "apiManualPrompt1": "Введіть свій API hash: ", + "apiAutoWeb": "Введіть номер телефону, уже зареєстрований у Telegram, щоб отримати API ID", + "apiAutoPrompt0": "Введіть номер телефону, уже зареєстрований у Telegram: ", + "apiAutoPrompt1": "Введіть код підтвердження, отриманий у Telegram: ", + "apiAppWeb": "Введіть інформацію про API", + "apiAppInstructionsAuto0": "Введіть назву застосунку, може бути будь-якою: ", + "apiAppInstructionsAuto1": "Введіть коротку назву застосунку, літери й цифри, 5-32 символи: ", + "apiAppInstructionsAuto2": "Введіть URL застосунку/вебсайту або t.me/yourusername: ", + "apiAppInstructionsAuto3": "Введіть платформу застосунку: ", + "apiAppInstructionsAuto4": "Опишіть свій застосунок: ", + "apiAppInstructionsAutoTypeOther": "Інше (уточніть в описі)", + "apiParamsError": "Ви вказали не всі обов'язкові параметри!", + "apiError": "ПОМИЛКА: %s. Спробуйте ще раз.", + "loginChoosePromptWeb": "Увійти як користувач чи як бот?", + "loginWebQr": "Також можна увійти автоматично: відкрийте Telegram на телефоні, перейдіть у Налаштування > Пристрої > Підключити пристрій і відскануйте цей QR-код:", + "loginWebQr1": "Відкрийте Telegram на телефоні", + "loginWebQr2": "Перейдіть у Налаштування > Пристрої > Підключити пристрій", + "loginWebQr3": "Наведіть телефон на цей екран, щоб підтвердити вхід", + "loginOptionBot": "Бот", + "loginOptionUser": "Користувач", + "loginBot": "Введіть токен бота: ", + "loginUser": "Введіть свій номер телефону: ", + "loginQr": "Відкрийте Telegram на телефоні, перейдіть у Налаштування > Пристрої > Підключити пристрій і відскануйте QR-код вище, щоб увійти автоматично.", + "loginQrCodeSuccessful": "Вхід за QR-кодом виконано успішно!", + "loginQrCodeExpired": "Термін дії QR-коду минув, генерується новий...", + "loginManual": "Або ж введіть токен бота чи номер телефону, щоб увійти вручну: ", + "loginUserCode": "Введіть код: ", + "loginUserPass": "Введіть свій пароль (підказка: %s): ", + "loginUserPassWeb": "Введіть свій пароль: ", + "loginUserPassHint": "Підказка: %s", + "signupFirstName": "Введіть своє ім'я: ", + "signupLastName": "Введіть своє прізвище (можна залишити порожнім): ", + "signupWeb": "Зареєструйтеся", + "signupFirstNameWeb": "Ім'я", + "signupLastNameWeb": "Прізвище", + "loginNoCode": "Ви не вказали код підтвердження!", + "loginNoPass": "Ви не вказали пароль!", + "loginNoName": "Ви не вказали ім'я!", + "loginBotTokenWeb": "Токен бота", + "loginUserPhoneWeb": "Номер телефону", + "loginUserPhoneCodeWeb": "Код", + "done": "Готово!", + "nearest_dc": "Наше розташування: %s, найближчий DC: %d.", + "serialization_ofd": "Серіалізація застаріла, об'єкт реконструюється!", + "api_not_set": "Потрібно вказати api key та api id, отримайте власні на my.telegram.org", + "session_corrupted": "Сесію пошкоджено!", + "value_bigger_than_2147483647": "Передане значення %s більше за 2147483647", + "value_smaller_than_2147483648": "Передане значення %s менше за -2147483648", + "value_bigger_than_9223372036854775807": "Передане значення %s більше за 9223372036854775807", + "value_smaller_than_9223372036854775808": "Передане значення %s менше за -9223372036854775808", + "value_bigger_than_4294967296": "Передане значення %s більше за 4294967296", + "value_smaller_than_0": "Передане значення %s менше за 0", + "encode_double_error": "Не вдалося правильно закодувати double", + "file_not_exist": "Файл не існує", + "deserialization_error": "Під час десеріалізації сталася помилка", + "rpc_tg_error": "Telegram повернув помилку RPC: %s (%s), спричинену в %s:%s%sTL-трасування:", + "madelineproto_ready": "MadelineProto готовий до роботи!", + "logout_ok": "Вихід виконано успішно!", + "already_loggedIn": "У цьому екземплярі MadelineProto вже виконано вхід!", + "login_ok": "Вхід виконано успішно!", + "login_user": "Вхід як звичайний користувач...", + "login_bot": "Вхід як бот...", + "login_code_sending": "Надсилання коду...", + "login_code_sent": "Код успішно надіслано! Отримавши код, скористайтеся функцією completePhoneLogin.", + "login_code_uncalled": "Я не очікую коду! Спочатку викличте метод phoneLogin", + "login_2fa_enabled": "Увімкнено 2FA, потрібно буде викликати функцію complete2falogin...", + "login_need_signup": "Для цього номера не створено обліковий запис, потрібно буде викликати функцію completeSignup...", + "login_auth_key": "Вхід за допомогою ключа авторизації...", + "not_loggedIn": "Вхід не виконано!", + "signup_uncalled": "Я не очікую реєстрації! Спочатку викличте методи phoneLogin і completePhoneLogin!", + "signing_up": "Реєстрація як звичайний користувач...", + "signup_ok": "Реєстрацію виконано успішно!", + "2fa_uncalled": "Я не очікую пароля! Спочатку викличте методи phoneLogin і completePhoneLogin!", + "peer_not_in_db": "Цього співрозмовника (peer) немає у внутрішній базі даних співрозмовників", + "call_error_1": "Не вдалося знайти й прийняти дзвінок %s", + "accepting_call": "Прийняття дзвінка від %s...", + "call_already_accepted": "Дзвінок %s уже прийнято", + "call_already_declined": "Дзвінок %s уже відхилено", + "call_error_2": "Не вдалося знайти й підтвердити дзвінок %s", + "call_confirming": "Підтвердження дзвінка від %s...", + "call_error_3": "Не вдалося знайти дзвінок %s і завершити його встановлення", + "call_completing": "Завершення встановлення дзвінка від %s...", + "fingerprint_invalid": "Недійсний відбиток ключа!", + "call_discarding": "Завершення дзвінка %s...", + "file_parsing": "Розбір %s...", + "src_file_invalid": "Передано недійсний вихідний файл: ", + "bool_error": "Не вдалося видобути булеве значення", + "not_numeric": "Передане значення не є числовим", + "long_not_16": "Довжина переданого значення не дорівнює 16 байтам", + "long_not_32": "Довжина переданого значення не дорівнює 32 байтам", + "long_not_64": "Довжина переданого значення не дорівнює 64 байтам", + "array_invalid": "Ви не передали дійсний масив", + "predicate_not_set": "Предикат (значення в _) не задано!", + "update_madelineproto": "Ви використовуєте стару версію MadelineProto, потрібне оновлення: поточна версія — %s, а остання версія з численними виправленнями помилок і новими функціями — %s!", + "type_extract_error": "Не вдалося видобути тип \"%s\", оновіть MadelineProto!", + "method_not_found": "Не вдалося знайти метод: ", + "params_missing": "Відсутній обов'язковий параметр", + "sec_peer_not_in_db": "Цього секретного співрозмовника немає у внутрішній базі даних співрозмовників", + "stream_handle_invalid": "Передано недійсний дескриптор потоку.", + "length_too_big": "Завелика довжина", + "string_required": "Очікувався рядок!", + "waveform_must_have_100_values": "Масив waveform має містити 100 значень!", + "waveform_value": "Значення waveform має бути від 0 до 31!", + "could_not_convert_object": "Не вдалося перетворити об'єкт типу %s", + "type_extract_error_id": "Не вдалося видобути тип: %s з id %s, оновіть MadelineProto!", + "constructor_not_found": "Не знайдено конструктор для типу: ", + "botapi_conversion_error": "Не вдається перетворити %s на об'єкт bot API", + "non_text_conversion": "Перетворення нетекстових повідомлень поки не підтримується!", + "file_type_invalid": "Виявлено недійсний тип файлу (%s)", + "static_analysis_minor": "Під час статичного аналізу %s виявлено незначну проблему: %s", + "static_analysis_severe": "Під час статичного аналізу %s виявлено серйозну проблему: %s", + "secret_chat_skipping": "Секретного чату %s немає в базі даних, повідомлення пропускається...", + "must_have_declare_types": "з міркувань продуктивності першою інструкцією файлу обробника подій має бути \"declare(strict_types=1);\"", + "do_not_delete_MadelineProto.log": "файл MadelineProto.log ніколи не можна видаляти, натомість задайте власний максимальний розмір у налаштуваннях!", + "do_not_remove_MadelineProto.log_phar": "Не видаляйте madeline.phar або madeline.php, інакше MadelineProto аварійно завершить роботу. Якщо у вас виникли проблеми з MadelineProto, повідомте про них на https://github.com/danog/MadelineProto або https://t.me/pwrtelegramgroup", + "do_not_use_blocking_function": "з міркувань продуктивності обробники подій не можуть використовувати неасинхронну блокувальну функцію %s, натомість використовуйте %s", + "do_not_use_blocking_class": "з міркувань продуктивності обробники не можуть використовувати неасинхронний блокувальний клас %s, натомість використовуйте %s", + "do_not_use_deprecated_function": "функція %s застаріла, натомість використовуйте %s", + "do_not_use_non_root_require_in_event_handler": "з міркувань продуктивності не можна використовувати require або include всередині класу обробника подій, дозволено лише require на кореневому рівні.", + "do_not_use_yield": "MadelineProto 8 не потребує й не підтримує використання yield в асинхронних функціях, вилучіть усі ключові слова yield, які раніше використовувалися для викликів асинхронних функцій", + "recommend_not_use_filesystem_function": "використовувати функцію %s не рекомендується, оскільки доступ до файлової системи під час обробки оновлень сповільнює вашого бота; перелік альтернативних способів зберігання даних, які не сповільнюють бота, див. на https://docs.madelineproto.xyz/docs/UPDATES.html#avoiding-the-use-of-filesystem-functions!", + "plugins_do_not_use_require": "з міркувань продуктивності плагіни можуть автоматично підключати (include або require) інші файли з теки плагінів лише через автозавантажувач PSR-4 (а не вручну через require()).", + "plugins_must_have_exactly_one_class": "плагін має визначати рівно один клас! Щоб визначити кілька класів, інтерфейсів або трейтів, створіть окремі файли, MadelineProto завантажить їх автоматично.", + "cli_need_dl.php_link": "Під час використання getDownloadLink через CLI вкажіть URL скрипту завантаження!", + "invalid_dl.php_session": "%s не є дійсним скриптом завантаження, оскільки його ID сесії відрізняється (очікувався %s, отримано %s)", + "need_dl.php": "Не вдалося згенерувати стандартний скрипт завантаження (%s), створіть файл dl.php з таким вмістом: %s і передайте його URL другим параметром getDownloadLink", + "dl.php_powered_by_madelineproto": "Сервер завантаження файлів Telegram (до 4 ГБ) на базі MadelineProto!
Натисніть тут, щоб дізнатися, як налаштувати власний сервер завантаження файлів Telegram!", + "dl.php_check_logs_make_sure_session_running": "Пов'язаний бот MadelineProto EventHandler або IPC-сервер MadelineProto не працюють, перевірте журнали й переконайтеся, що хоча б один із них запущено!", + "account_banned": "!!!!!!! ПОПЕРЕДЖЕННЯ !!!!!!!\nСистема захисту від флуду Telegram призупинила цей обліковий запис.\nЩоб продовжити, потрібна ручна перевірка.\nНадішліть лист на recover@telegram.org із проханням розблокувати номер телефону %s і коротко опишіть, як ви використовуватимете цей номер.\nПотім увійдіть знову.\nЯкщо ви навмисно видалили цей обліковий запис, проігноруйте це повідомлення.", + "plugin_path_does_not_exist": "Шлях до плагіна %s не існує!", + "could_not_connect_to_MadelineProto": "Не вдалося підключитися до MadelineProto: щоб виправити це, увімкніть proc_open і зніміть обмеження open_basedir або вимкніть перезапис шляхів вебсервера! Якщо ви вже це зробили, переконайтеся, що CLI-версія PHP точно така сама, як вебверсія (та сама версія, розширення тощо), і перегляньте файл MadelineProto.log, щоб дізнатися більше про помилку, через яку не вдалося запустити IPC-сервер.", + "translate_madelineproto_web": "MadelineProto можна перекласти вашою мовою (поточний прогрес перекладу: %d%%), натисніть тут, щоб долучитися до перекладу!", + "translate_madelineproto_cli": "MadelineProto можна перекласти вашою мовою (поточний прогрес перекладу: %d%%), перейдіть на https://github.com/danog/MadelineProto/tree/v8/langs, щоб долучитися до перекладу!", + "apiInvalidWeb": "API ID — це число, а API hash складається з 32 символів: скопіюйте їх ще раз з my.telegram.org.", + "webDoneLead": "MadelineProto продовжує працювати на сервері: цю сторінку можна закрити.", + "apiChooseManualAuto": "Отримати API ID та API hash автоматично з my.telegram.org (a) чи ввести їх вручну (m)?", + "apiAutoFallbackManual": "Натомість введіть API ID та API hash вручну.", + "apiSetupTitleWeb": "Отримайте API ID та API hash", + "apiSetupLeadWeb": "Кожному застосунку Telegram потрібні API ID та API hash. MadelineProto може отримати їх для вас з my.telegram.org за номером телефону наявного облікового запису Telegram.", + "apiAutoPhoneHintWeb": "my.telegram.org надсилає код входу в застосунок Telegram, а не SMS.", + "apiSendCodeWeb": "Надіслати код", + "apiChooseManualWeb": "У мене вже є API ID", + "apiChooseAutoWeb": "Отримати автоматично", + "apiStartOverWeb": "Почати спочатку", + "apiAutoCodeTitleWeb": "Введіть код із Telegram", + "apiAutoCodeLeadWeb": "my.telegram.org надіслав код входу у ваш застосунок Telegram, у чат із Telegram (не SMS).", + "apiAutoCodeLabelWeb": "Код входу", + "apiCreateTitleWeb": "Створіть застосунок", + "apiCreateLeadWeb": "У цього облікового запису ще немає застосунку на my.telegram.org. Ці дані бачите лише ви, і їх можна змінити пізніше.", + "apiAppTitleLabelWeb": "Назва застосунку", + "apiAppShortNameLabelWeb": "Коротка назва", + "apiAppUrlLabelWeb": "URL", + "apiAppDescLabelWeb": "Опис", + "apiCreateWeb": "Створити застосунок", + "apiSaveWeb": "Зберегти й продовжити", + "apiAutoErrorTitle": "my.telegram.org повернув помилку", + "apiCreateErrorTitle": "my.telegram.org не створив застосунок", + "apiCreateVpsWarning": "Telegram не дозволяє створювати нові застосунки на my.telegram.org з IP-адрес VPS, VPN та інших дата-центрів, а запит було надіслано з IP машини, на якій працює MadelineProto. Створіть застосунок вручну на https://my.telegram.org з домашнього підключення (наприклад, з телефона через мобільний інтернет), а потім введіть API ID та API hash.", + "loginTitleWeb": "Вхід у Telegram", + "loginLeadWeb": "Виберіть обліковий запис або бота, від імені якого працюватиме цей екземпляр MadelineProto.", + "loginTypeWeb": "Увійти як", + "loginUserPhoneHintWeb": "З кодом країни, наприклад +39 123 456 7890.", + "loginBotTokenHintWeb": "Токен, який видав @BotFather під час створення бота.", + "loginCodeTitleWeb": "Введіть код входу", + "loginCodeLeadWeb": "Telegram надіслав код входу у ваш застосунок Telegram або SMS, якщо ви ніде більше не ввійшли.", + "loginPasswordTitleWeb": "Двоетапна перевірка", + "loginPasswordLeadWeb": "Цей обліковий запис захищено паролем, заданим у розділі Налаштування > Приватність і безпека > Двоетапна перевірка.", + "loginPasswordLabelWeb": "Пароль", + "signupTitleWeb": "Створіть обліковий запис", + "signupLeadWeb": "Цього номера телефону ще немає в Telegram: виберіть ім'я нового облікового запису.", + "webContinue": "Продовжити", + "webLogin": "Увійти", + "webError": "%s. Перевірте й спробуйте ще раз.", + "webStepApp": "API ID та API hash", + "webStepAccount": "Обліковий запис", + "webStepVerify": "Підтвердження", + "webStepDone": "Працює", + "webProgress": "Перебіг налаштування", + "webDocs": "Документація", + "webOptional": "необов'язково", + "webShowPassword": "Показати", + "webHidePassword": "Приховати", + "webQrTitle": "Вхід за QR-кодом", + "webQrWaiting": "Очікування сканування…", + "webFieldRequired": "Заповніть це поле.", + "webPhoneInvalid": "Введіть номер телефону з кодом країни, наприклад +39 123 456 7890.", + "tweb.Login.Title": "Вхід у MadelineProto", + "tweb.Login.PhoneLabelInvalid": "Неправильний номер телефону", + "tweb.Login.StartText": "Перевірте код країни\nі введіть свій номер телефону.", + "tweb.Login.Code.SentSms": "Ми надіслали вам SMS\nз кодом.", + "tweb.Login.Code.SentInApp": "Ми надіслали вам повідомлення в Telegram\nз кодом.", + "tweb.Login.Code.SentCall": "Ми зателефонуємо вам і продиктуємо\nкод.", + "tweb.Login.Code.SentEmail": "Перевірте пошту **%s** (не забудьте про теку «Спам») і введіть код, який ми щойно надіслали.", + "tweb.Login.Code.SentUnknown": "Пошукайте код\nусюди (тип: %s)", + "tweb.Login.Code.SentMissedCall": "Протягом кількох секунд вам надійде\nкороткий дзвінок з номера **%s**. Не відповідайте —\nпросто введіть останні цифри цього номера.", + "tweb.Login.Code.SentSmsWord": "Ми надіслали SMS із секретним словом\nна ваш номер **%s**.", + "tweb.Login.Code.SentSmsWordBeginning": "Ми надіслали SMS із секретним словом, яке починається\nз «**%2$s**», на ваш номер **%1$s**.", + "tweb.Login.Code.SentSmsPhrase": "Ми надіслали SMS із секретною фразою\nна ваш номер **%s**.", + "tweb.Login.Code.SentSmsPhraseBeginning": "Ми надіслали SMS із секретною фразою, яка починається\nз «**%2$s**», на ваш номер **%1$s**.", + "tweb.Login.Code.SecretWord": "Секретне слово", + "tweb.Login.Code.SecretPhrase": "Секретна фраза", + "tweb.Login.Code.WordInvalid": "Неправильно, спробуйте ще раз", + "tweb.Login.Code.WordBeginningInvalid": "Неправильне слово", + "tweb.Login.Password.Title": "Введіть пароль", + "tweb.Login.Password.Subtitle": "Ваш обліковий запис захищено\nдодатковим паролем", + "tweb.Login.Register.Subtitle": "Введіть своє ім'я,\nщоб створити обліковий запис", + "tweb.PleaseWait": "Зачекайте...", + "tweb.Code": "Код", + "tweb.LoginPassword": "Пароль", + "tweb.YourName": "Ваше ім'я", + "tweb.FirstName": "Ім'я (обов'язково)", + "tweb.LastName": "Прізвище (необов'язково)", + "tweb.StartMessaging": "Почати спілкування", + "tweb.Country": "Країна", + "tweb.Contacts.PhoneNumber.Placeholder": "Номер телефону", + "tweb.Login.Next": "Далі", + "tweb.Login.QR.Title": "Вхід за QR-кодом", + "tweb.Login.QR.Help1": "Відкрийте Telegram на телефоні", + "tweb.Login.QR.Help2": "Перейдіть у **Налаштування** > **Пристрої** > **Підключити пристрій**", + "tweb.Login.QR.Help3": "Наведіть телефон на цей екран, щоб підтвердити вхід", + "tweb.Login.QR.Cancel": "Вхід за номером телефону >", + "tweb.Login.QR.Login": "Вхід за QR-кодом >", + "tweb.Login.QR.Subtitle": "Відскануйте застосунком Telegram на телефоні", + "tweb.PhoneNumber.Code.Fragment.Info": "Отримайте код у розділі Numbers на [Fragment]()", + "tweb.PHONE_CODE_INVALID": "Неправильний код", + "tweb.PHONE_CODE_EXPIRED": "Термін дії коду минув", + "tweb.PASSWORD_HASH_INVALID": "Неправильний пароль", + "tweb.DarkMode": "Темна тема", + "tweb.Error.AnError": "Сталася помилка. Спробуйте пізніше.", + "tweb.AccDescr.LoginCode": "Код входу", + "tweb.Login.Bot": "Увійти як бот >", + "tweb.Login.Bot.Title": "Вхід як бот", + "tweb.Login.Bot.Subtitle": "Введіть токен, який видав @BotFather\nпід час створення бота.", + "tweb.Login.Bot.Token": "Токен бота", + "tweb.Login.Bot.Cancel": "Увійти як користувач >", + "tweb.Optional": "необов'язково", + "tweb.PHONE_NUMBER_INVALID": "Неправильний номер телефону", + "tweb.PHONE_NUMBER_BANNED": "Цей номер телефону заблоковано", + "tweb.PHONE_NUMBER_FLOOD": "Забагато спроб, спробуйте пізніше", + "tweb.PHONE_CODE_EMPTY": "Неправильний код", + "tweb.PHONE_PASSWORD_FLOOD": "Забагато спроб, спробуйте пізніше", + "tweb.ACCESS_TOKEN_INVALID": "Неправильний токен бота", + "tweb.ACCESS_TOKEN_EXPIRED": "Цей токен бота відкликано", + "tweb.FIRSTNAME_INVALID": "Неприпустиме ім'я", + "tweb.LASTNAME_INVALID": "Неприпустиме прізвище", + "tweb.Close": "Закрити" +} diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/uz.json b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/uz.json index 422150a..a1c0e0a 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/uz.json +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/uz.json @@ -1,81 +1,93 @@ { + "baseDirLimitation": "Basedir cheklovi sozlangan: bu ishlashga taʼsir qilishi va baʼzi muammolarni keltirib chiqarishi mumkin, iloji boʻlsa, uni oʻchirib qoʻying!", + "noReportPeers": "Ogohlantirish: hech qanday hisobot tengdoshlari o'rnatilmagan, iltimos, voqea ishlov beruvchingizga quyidagi usulni qo'shing", + "manualAdminActionRequired": "!!!!!!!! QO'L QUVVAT TIZIMI ADMIN HARAKATI TALAB QILINADI !!!!!!!!!!!", + "mmapErrorPart1": "Xotira xaritalangan (mmap) mintaqalarining maksimal soniga erishildi (%s): tuzatish uchun vm.max_map_count yadro konfiguratsiyasini 262144 ga oshiring.", + "mmapErrorPart2": "Tuzatish uchun quyidagi buyruqni root sifatida ishga tushiring: %s", + "mmapErrorPart3": "Qayta yuklashda oʻzgarishlarni davom ettirish uchun: %s", + "mmapErrorPart4": "Windows va WSL da sahifa fayli hajmini oshirish yordam berishi mumkin; muammo davom etsa, mahalliy Linuxga o'ting.", + "botAlreadyRunning": "Bot allaqachon ishlayapti!", + "extensionRequired": "MadelineProto ishlashi uchun %s kengaytmasi talab qilinadi. %s", + "extensionRequiredInstallWithApt": "Sudo apt-get install %s ni ishga tushirib ko‘ring.", + "extensionRequiredInstallWithCustomInstructions": "Uni oʻrnatish uchun %s koʻrsatmalariga amal qiling.", + "extensionRecommended": "Ogohlantirish: %s kengaytmasi oʻrnatilmagan, MadelineProto tezligini oshirish uchun uni oʻrnating!", + "go": "Boshlash", + "apiChooseManualAutoTip": "Shuni esda tutingki, siz API ID/hashni to'g'ridan-to'g'ri kodda sozlamalardan foydalanib ko'rsatishingiz mumkin: %s", + "apiChooseManualAutoTipWeb": "Shuni esda tutingki, siz API identifikatorini/xesh-ni to'g'ridan-to'g'ri kodda sozlamalardan foydalanib ko'rsatishingiz mumkin.", + "apiChoosePrompt": "Sizning tanlovingiz (q/a): ", + "apiManualInstructions0": "https://my.telegram.org ga kirish", + "apiManualInstructions1": "API yaratish asboblariga o'tish", + "apiManualInstructions2": "Ilova yaratishga bosing", + "apiAppInstructionsManual0": "sizning ilovangizni nomi, u istalgan ko'rinishda bo'lishi mumkin", "apiAppInstructionsManual1": "Ilovangizni qisqacha nomi, harflar va raqamlardan iborat 5-32 belgilar orasida", "apiAppInstructionsManual2": "Ilova yoki vebsaytingiz manzili, yoki t.me/havola", "apiAppInstructionsManual3": "istalgan narsa", "apiAppInstructionsManual4": "Ilovangizni izoh bering", "apiManualWeb": "API ID va API hash qiymatlaringizni kiriting", + "apiManualPrompt0": "API ID qiymatingizni kiriting ", "apiManualPrompt1": "API hash qiymatingizni kiriting ", + "apiAutoWeb": "API ID olish uchun telegramdan oldin ro'yhatdan o'tkazilgan telefon raqamingizni kiriting", "apiAutoPrompt0": "Telegram ro'yhatdan o'tkazilgan telefon raqamingizni kiriting ", "apiAutoPrompt1": "Telegramdan olgan tasdiqlash kodingizni kiriting ", "apiAppWeb": "API ma'lumotlarini kiriting", + "apiAppInstructionsAuto0": "Ilovangiz nomini kiriting: ", + "apiAppInstructionsAuto1": "Ilovani qisqacha nomini kiriting, harflar va raqamlardan iborat 5-32 belgilar orasida ", + "apiAppInstructionsAuto2": "Ilova yoki vebsay manzilini kiriting, yoki t.me/havola ", + "apiAppInstructionsAuto3": "Ilova platformasini kiriting: ", + "apiAppInstructionsAuto4": "Ilovangizni izohlang: ", + "apiAppInstructionsAutoTypeOther": "Boshqa (izohda ko'rsatiladi)", + "apiParamsError": "Siz barcha kerakli parametrlarni taqdim etmadingiz!", + "apiError": "Xatolik: %s. Qayta urinib ko'ring.", + "loginChoosePromptWeb": "Foydalanuvchi sifatida yoki bot sifatida kirmoqchimisiz?", + "loginWebQr": "Shuningdek, siz telefoningizda Telegram’ni ochib, Sozlamalar > Qurilmalar > Ish stoli qurilmasini bog‘lash bo‘limiga o‘tib, quyidagi QR kodni skanerlash orqali ham avtomatik tarzda kirishingiz mumkin:", + "loginWebQr1": "Telegram dasturini telefoningizda oching", + "loginWebQr2": "Sozlamalar > Uskunalar > Yangi qurilma ulashga o'ting", + "loginWebQr3": "Kirishni tasdiqlash uchun telefoningizni ushbu ekranga yo'naltiring", "loginOptionBot": "Bot", "loginOptionUser": "Foydalanuvchi", "loginBot": "Bot tokeningizni kiriting ", "loginUser": "Telefon raqamingizni kiriting ", + "loginQr": "Telefoningizda Telegram-ni oching, Sozlamalar > Qurilmalar > Ish stoli qurilmasini ulash-ga o‘ting va avtomatik kirish uchun yuqoridagi QR kodni skanerlang.", "loginQrCodeSuccessful": "QR kod orqali muvaffaqiyatli kirish amalga oshirildi!", "loginQrCodeExpired": "QR kod eskirdi, yangisini yaratish...", + "loginManual": "Shu bilan bir qatorda, qo'lda kirish uchun bot tokenini yoki telefon raqamini ham kiritishingiz mumkin: ", "loginUserCode": "Kodni kiriting: ", "loginUserPass": "Parolingizni kiriting (eslatma %s): ", "loginUserPassWeb": "Parolingizni kiriting: ", "loginUserPassHint": "Eslatma: %s", "signupFirstName": "Ismingizni kiriting: ", + "signupLastName": "Familiyangizni kiriting (bo'sh qoldirish mumkin): ", "signupWeb": "Iltimos, ro'yhatdan o'ting", + "signupFirstNameWeb": "Ism", "signupLastNameWeb": "Familiya", + "loginNoCode": "Telefon raqamingiz kodini kiritmadingiz!", "loginNoPass": "Parolingizni kiritmadingiz!", "loginNoName": "Ismingizni kiritmadingiz!", "loginBotTokenWeb": "Bot tokeni", "loginUserPhoneWeb": "Telefon raqam", "loginUserPhoneCodeWeb": "Kod", "done": "Bajarildi!", - "apiManualInstructions2": "Ilova yaratishga bosing", - "apiAppInstructionsManual0": "sizning ilovangizni nomi, u istalgan ko'rinishda bo'lishi mumkin", - "apiManualPrompt0": "API ID qiymatingizni kiriting ", - "apiAutoWeb": "API ID olish uchun telegramdan oldin ro'yhatdan o'tkazilgan telefon raqamingizni kiriting", - "loginQr": "Telefoningizda Telegram-ni oching, Sozlamalar > Qurilmalar > Ish stoli qurilmasini ulash-ga o‘ting va avtomatik kirish uchun yuqoridagi QR kodni skanerlang.", - "signupLastName": "Familiyangizni kiriting (bo'sh qoldirish mumkin): ", - "signupFirstNameWeb": "Ism", - "loginNoCode": "Telefon raqamingiz kodini kiritmadingiz!", + "nearest_dc": "Biz %s ichidamiz, eng yaqin shahar %d.", + "serialization_ofd": "Seriyalash eskirgan, ob'ekt qayta tiklanmoqda!", + "api_not_set": "Siz api kaliti va api ID taqdim etishingiz kerak, o'zingiz @ my.telegram.org manzilidan oling", + "session_corrupted": "Sessiya buzilgan!", "value_bigger_than_2147483647": "Taqdim etilgan %s qiymati 2147483647 dan katta", "value_smaller_than_2147483648": "Taqdim etilgan %s qiymati -2147483648dan kichik", "value_bigger_than_9223372036854775807": "Taqdim etilgan %s qiymati 9223372036854775807 dan katta", "value_smaller_than_9223372036854775808": "Taqdim etilgan %s qiymati -9223372036854775808 dan kichik", "value_bigger_than_4294967296": "Taqdim etilgan %s qiymati 4294967296 dan katta", "value_smaller_than_0": "Taqdim etilgan %s qiymati 0 dan kichik", + "encode_double_error": "Doubleni toʻgʻri kodlab boʻlmadi", "file_not_exist": "Fayl mavjud emas", + "deserialization_error": "Seriyadan chiqarishda xatolik yuz berdi", + "rpc_tg_error": "Telegram RPC xatosini qaytardi: %s (%s), %s:%s%s TL izidan kelib chiqqan:", "madelineproto_ready": "MadelineProto tayyor!", "logout_ok": "Chiqish muvaffaqiyatli amalga oshirildi!", + "already_loggedIn": "MadelineProto-ning bu nusxasi allaqachon tizimga kirgan!", "login_ok": "Kirish muvaffaqiyatli amalga oshirildi!", "login_user": "Odatiy foydalanuvchi kabi kirish...", "login_bot": "Bot ko'rinishida kirish...", "login_code_sending": "Kod yuborilmoqda...", - "apiAppInstructionsAuto0": "Ilovangiz nomini kiriting: ", - "apiAppInstructionsAuto1": "Ilovani qisqacha nomini kiriting, harflar va raqamlardan iborat 5-32 belgilar orasida ", - "apiAppInstructionsAuto2": "Ilova yoki vebsay manzilini kiriting, yoki t.me/havola ", - "apiAppInstructionsAuto3": "Ilova platformasini kiriting: ", - "apiAppInstructionsAuto4": "Ilovangizni izohlang: ", - "apiAppInstructionsAutoTypeOther": "Boshqa (izohda ko'rsatiladi)", - "apiParamsError": "Siz barcha kerakli parametrlarni taqdim etmadingiz!", - "apiError": "Xatolik: %s. Qayta urinib ko'ring.", - "loginChoosePromptWeb": "Foydalanuvchi sifatida yoki bot sifatida kirmoqchimisiz?", - "loginWebQr": "Shuningdek, siz telefoningizda Telegram’ni ochib, Sozlamalar > Qurilmalar > Ish stoli qurilmasini bog‘lash bo‘limiga o‘tib, quyidagi QR kodni skanerlash orqali ham avtomatik tarzda kirishingiz mumkin:", - "go": "Boshlash", - "apiChooseManualAutoTip": "Shuni esda tutingki, siz API ID/hashni to'g'ridan-to'g'ri kodda sozlamalardan foydalanib ko'rsatishingiz mumkin: %s", - "apiChooseManualAutoTipWeb": "Shuni esda tutingki, siz API identifikatorini/xesh-ni to'g'ridan-to'g'ri kodda sozlamalardan foydalanib ko'rsatishingiz mumkin.", - "apiChoosePrompt": "Sizning tanlovingiz (q/a): ", - "apiManualInstructions0": "https://my.telegram.org ga kirish", - "apiManualInstructions1": "API yaratish asboblariga o'tish", - "loginWebQr1": "Telegram dasturini telefoningizda oching", - "loginWebQr2": "Sozlamalar > Uskunalar > Yangi qurilma ulashga o'ting", - "loginWebQr3": "Kirishni tasdiqlash uchun telefoningizni ushbu ekranga yo'naltiring", - "loginManual": "Shu bilan bir qatorda, qo'lda kirish uchun bot tokenini yoki telefon raqamini ham kiritishingiz mumkin: ", - "nearest_dc": "Biz %s ichidamiz, eng yaqin shahar %d.", - "serialization_ofd": "Seriyalash eskirgan, ob'ekt qayta tiklanmoqda!", - "api_not_set": "Siz api kaliti va api ID taqdim etishingiz kerak, o'zingiz @ my.telegram.org manzilidan oling", - "session_corrupted": "Sessiya buzilgan!", - "encode_double_error": "Doubleni toʻgʻri kodlab boʻlmadi", - "deserialization_error": "Seriyadan chiqarishda xatolik yuz berdi", - "rpc_tg_error": "Telegram RPC xatosini qaytardi: %s (%s), %s:%s%s TL izidan kelib chiqqan:", - "already_loggedIn": "MadelineProto-ning bu nusxasi allaqachon tizimga kirgan!", "login_code_sent": "Kod muvaffaqiyatli yuborildi! Kodni olganingizdan so'ng siz to'liq PhoneLogin funksiyasidan foydalanishingiz kerak.", "login_code_uncalled": "Men kodni kutmayapman! Iltimos, avval phoneLogin funsksiyasini ishga tushuring", "login_2fa_enabled": "2FA faollashtirilgan, siz complete2falogin funksiyasini chaqirishingiz kerak bo'ladi...", @@ -106,57 +118,157 @@ "long_not_64": "Berilgan qiymat 64 bayt emas", "array_invalid": "Siz toʻgʻri massiv taqdim qilmadingiz", "predicate_not_set": "Predikat (_ ostidagi qiymat) belgilanmagan!", + "update_madelineproto": "Siz MadelineProto’ning eski versiyasini ishga tushiryapsiz, yangilash talab qilinadi: hozirda %s ishlayapti, lekin bir nechta xatoliklar tuzatilgan va yangi funksiyalarga ega so‘nggi versiya %s!", "type_extract_error": "“%s” turini chiqarib bo‘lmadi, siz MadelineProtoni yangilashingiz kerak!", "method_not_found": "Metodni topib bo'lmadi: ", "params_missing": "Talab etiladigan parametr kiritilmagan", "sec_peer_not_in_db": "Ushbu maxfiy obyekt ichki obyektlar bazasida mavjud emas", "stream_handle_invalid": "Yaroqsiz oqim tutqichi taqdim etildi.", "length_too_big": "Uzunlik juda katta", + "string_required": "Bir qator kutilgan edi!", + "waveform_must_have_100_values": "To'lqin shakli qatori 100 ta qiymatga ega bo'lishi kerak!", + "waveform_value": "To'lqin shakli qiymati 0 dan 31 gacha bo'lishi kerak!", + "could_not_convert_object": "%s turdagi obyektni aylantirib bo‘lmadi", "type_extract_error_id": "Turni ajratib bo‘lmadi: %s identifikatori %s, siz MadelineProtoni yangilashingiz kerak!", "constructor_not_found": "Ushbu tur uchun konstruktor topilmadi: ", "botapi_conversion_error": "%s bot API obyektiga aylantirib bo‘lmadi", "non_text_conversion": "Matnli boʻlmagan xabarlarni oʻzgartirib boʻlmaydi!", "file_type_invalid": "Yaroqsiz fayl turi aniqlandi (%s)", + "static_analysis_minor": "%s: %s ni statik tahlil qilishda kichik muammoga duch keldi", + "static_analysis_severe": "%s: %s ni statik tahlil qilishda jiddiy muammoga duch keldi", "secret_chat_skipping": "Menda %s maxfiy chati maʼlumotlar bazasida yoʻq, xabar oʻtkazib yuborilmoqda...", - "botAlreadyRunning": "Bot allaqachon ishlayapti!", - "mmapErrorPart2": "Tuzatish uchun quyidagi buyruqni root sifatida ishga tushiring: %s", - "mmapErrorPart3": "Qayta yuklashda oʻzgarishlarni davom ettirish uchun: %s", - "extensionRecommended": "Ogohlantirish: %s kengaytmasi oʻrnatilmagan, MadelineProto tezligini oshirish uchun uni oʻrnating!", - "do_not_delete_MadelineProto.log": "MadelineProto.log fayli hech qachon o'chirilmasligi kerak, o'rniga sozlamalarda maxsus maksimal o'lchamni o'rnating!", - "string_required": "Bir qator kutilgan edi!", - "waveform_must_have_100_values": "To'lqin shakli qatori 100 ta qiymatga ega bo'lishi kerak!", - "waveform_value": "To'lqin shakli qiymati 0 dan 31 gacha bo'lishi kerak!", - "could_not_convert_object": "%s turdagi obyektni aylantirib bo‘lmadi", "must_have_declare_types": "ishlash sabablariga ko'ra, voqea ishlov beruvchi faylining birinchi bayonoti \"declare(strict_types=1);\" bo'lishi kerak", + "do_not_delete_MadelineProto.log": "MadelineProto.log fayli hech qachon o'chirilmasligi kerak, o'rniga sozlamalarda maxsus maksimal o'lchamni o'rnating!", + "do_not_remove_MadelineProto.log_phar": "Iltimos, madeline.phar yoki madeline.php ni olib tashlamang, aks holda MadelineProto ishlamay qoladi. Agar sizda MadelineProto bilan bog'liq muammo bo'lsa, uni https://github.com/danog/MadelineProto yoki https://t.me/pwrtelegramgroup manziliga xabar qiling", "do_not_use_blocking_function": "samaradorlik sabablariga ko‘ra, hodisa ishlov beruvchilari %s asinxron bo‘lmagan blokirovka funksiyasidan foydalanmasligi mumkin, o‘rniga %s dan foydalaning", - "do_not_use_deprecated_function": "%s funksiyasi eskirgan, o‘rniga %s dan foydalaning", "do_not_use_blocking_class": "ishlash sabablariga ko'ra, ishlov beruvchilar asinxron bo'lmagan bloklash sinfi %s dan foydalanmasligi mumkin, o'rniga %s dan foydalaning", + "do_not_use_deprecated_function": "%s funksiyasi eskirgan, o‘rniga %s dan foydalaning", "do_not_use_non_root_require_in_event_handler": "ishlash sabablariga ko'ra, voqea ishlov beruvchisi sinfiga talab yoki qo'shmaslik kerak, faqat ildiz darajasidagi talablarga ruxsat beriladi.", - "static_analysis_minor": "%s: %s ni statik tahlil qilishda kichik muammoga duch keldi", - "static_analysis_severe": "%s: %s ni statik tahlil qilishda jiddiy muammoga duch keldi", - "plugins_must_have_exactly_one_class": "plagin aynan bitta sinfni belgilashi kerak! Bir nechta sinflarni, interfeyslarni yoki xususiyatlarni aniqlash uchun alohida fayllar yarating, ular MadelineProto tomonidan avtomatik ravishda yuklanadi.", - "translate_madelineproto_web": "MadelineProto oʻz tilingizga tarjima qilinishi mumkin (hozirgi tarjima jarayoni: %d%%), tarjimaga hissa qoʻshish uchun bu yerni bosing!", - "noReportPeers": "Ogohlantirish: hech qanday hisobot tengdoshlari o'rnatilmagan, iltimos, voqea ishlov beruvchingizga quyidagi usulni qo'shing", - "manualAdminActionRequired": "!!!!!!!! QO'L QUVVAT TIZIMI ADMIN HARAKATI TALAB QILINADI !!!!!!!!!!!", - "extensionRequired": "MadelineProto ishlashi uchun %s kengaytmasi talab qilinadi. %s", - "extensionRequiredInstallWithApt": "Sudo apt-get install %s ni ishga tushirib ko‘ring.", - "plugin_path_does_not_exist": "%s plagin yoʻli mavjud emas!", - "dl.php_check_logs_make_sure_session_running": "MadelineProto EventHandler boti yoki MadelineProto IPC serveri oflayn, iltimos jurnallarni tekshiring va ulardan kamida bittasi ishlayotganiga ishonch hosil qiling!", - "baseDirLimitation": "Basedir cheklovi sozlangan: bu ishlashga taʼsir qilishi va baʼzi muammolarni keltirib chiqarishi mumkin, iloji boʻlsa, uni oʻchirib qoʻying!", - "extensionRequiredInstallWithCustomInstructions": "Uni oʻrnatish uchun %s koʻrsatmalariga amal qiling.", - "update_madelineproto": "Siz MadelineProto’ning eski versiyasini ishga tushiryapsiz, yangilash talab qilinadi: hozirda %s ishlayapti, lekin bir nechta xatoliklar tuzatilgan va yangi funksiyalarga ega so‘nggi versiya %s!", "do_not_use_yield": "MadelineProto 8 asinx funksiyalarida yield dan foydalanishni talab qilmaydi yoki qo‘llab-quvvatlamaydi, avval asinxron funksiya chaqiruvlari uchun ishlatilgan barcha yield kalit so‘zlarini olib tashlashingiz kerak", "recommend_not_use_filesystem_function": "%s funksiyasidan foydalanish tavsiya etilmaydi, chunki yangilanishni qayta ishlash jarayonida fayl tizimiga kirish botni sekinlashtiradi, botni sekinlashtirmaydigan maʼlumotlarni saqlashning muqobil usullari roʻyxatini https://docs.madelineproto.xyz/docs/UPDATES.html#avoiding-the-use-of-filesystem-functions sahifasiga oʻting!", "plugins_do_not_use_require": "ishlash sabablariga ko'ra, plaginlar faqat PSR-4 avtomatik yuklagichini ishga tushirish orqali plaginlar jildida mavjud bo'lgan boshqa fayllarni avtomatik ravishda kiritishi yoki talab qilishi mumkin (ularni qo'lda talab qilish orqali emas).", - "could_not_connect_to_MadelineProto": "MadelineProto-ga ulanib bo'lmadi, iltimos, proc_open-ni yoqing va open_basedir cheklovlarini olib tashlang yoki tuzatish uchun veb-server yo'lini qayta yozishni o'chirib qo'ying! Agar siz buni allaqachon qilgan bo'lsangiz, PHP ning CLI versiyasi veb-versiyasi bilan bir xil ekanligiga ishonch hosil qiling (xuddi shu versiya, kengaytmalar va boshqalar) va IPC serverini ishga tushirishga to'sqinlik qilgan xato haqida ko'proq ma'lumot olish uchun MadelineProto.log faylini tekshiring.", - "invalid_dl.php_session": "%s yuklab olish skripti noto‘g‘ri, chunki uning seans identifikatori boshqacha (kutilgan %s, %s oldi)", - "dl.php_powered_by_madelineproto": "MadelineProto tomonidan quvvatlangan Telegram fayl yuklab olish serveri (4 GB gacha)!
Batafsil ma'lumot olish uchun MadelineProto tomonidan quvvatlangan Telegram fayl yuklab olish serveri (4 GB gacha)!
O'zingizning Telegram fayl yuklab olish serveringizni sozlash haqida batafsil ma'lumot olish uchun bu yerni bosing!", + "dl.php_check_logs_make_sure_session_running": "MadelineProto EventHandler boti yoki MadelineProto IPC serveri oflayn, iltimos jurnallarni tekshiring va ulardan kamida bittasi ishlayotganiga ishonch hosil qiling!", "account_banned": "!!!!!!! OGOHLANTIRISH!!!!!!\nTelegram’ning suv toshqini oldini olish tizimi ushbu akkauntni to‘xtatib qo‘ydi.\nDavom etish uchun qo‘lda tekshirish kerak.\n%s telefon raqamini blokdan chiqarishni so‘rab, recover@telegram.org manziliga xat yuboring va bu telefon raqami bilan nima qilishingizni qisqacha tasvirlab bering.\nKeyin yana tizimga kiring.\nAgar siz ushbu hisobni ataylab o'chirib tashlagan bo'lsangiz, bu xabarni e'tiborsiz qoldiring.", - "windows_warning": "Windows foydalanuvchilari uchun: agar bu bajarilmasa, Linuxga o'ting. Shuningdek, barcha PHP jarayonlariga rozetkalar yaratishga ruxsat berish uchun xavfsizlik devori sozlamalarini oʻzgartirishga urinib koʻrishingiz mumkin (Linux’ga oʻtish 100% oson, Linuxda MadelineProto shunchaki qutidan tashqarida ishlaydi, hech qanday oʻzgartirish kerak emas)", - "mmapErrorPart1": "Xotira xaritalangan (mmap) mintaqalarining maksimal soniga erishildi (%s): tuzatish uchun vm.max_map_count yadro konfiguratsiyasini 262144 ga oshiring.", - "mmapErrorPart4": "Windows va WSL da sahifa fayli hajmini oshirish yordam berishi mumkin; muammo davom etsa, mahalliy Linuxga o'ting.", - "do_not_remove_MadelineProto.log_phar": "Iltimos, madeline.phar yoki madeline.php ni olib tashlamang, aks holda MadelineProto ishlamay qoladi. Agar sizda MadelineProto bilan bog'liq muammo bo'lsa, uni https://github.com/danog/MadelineProto yoki https://t.me/pwrtelegramgroup manziliga xabar qiling", - "need_dl.php": "Standart yuklab olish skriptini (%s) yaratib bo‘lmadi, iltimos, quyidagi tarkibga ega dl.php faylini yarating: %s va uning URL manzilini getDownloadLink ikkinchi parametriga o‘tkazing" + "plugin_path_does_not_exist": "%s plagin yoʻli mavjud emas!", + "could_not_connect_to_MadelineProto": "MadelineProto-ga ulanib bo'lmadi, iltimos, proc_open-ni yoqing va open_basedir cheklovlarini olib tashlang yoki tuzatish uchun veb-server yo'lini qayta yozishni o'chirib qo'ying! Agar siz buni allaqachon qilgan bo'lsangiz, PHP ning CLI versiyasi veb-versiyasi bilan bir xil ekanligiga ishonch hosil qiling (xuddi shu versiya, kengaytmalar va boshqalar) va IPC serverini ishga tushirishga to'sqinlik qilgan xato haqida ko'proq ma'lumot olish uchun MadelineProto.log faylini tekshiring.", + "translate_madelineproto_web": "MadelineProto oʻz tilingizga tarjima qilinishi mumkin (hozirgi tarjima jarayoni: %d%%), tarjimaga hissa qoʻshish uchun bu yerni bosing!", + "translate_madelineproto_cli": "MadelineProto o'z tilingizga tarjima qilinishi mumkin (hozirgi tarjima jarayoni: %d%%), tarjimaga hissa qo'shish uchun https://github.com/danog/MadelineProto/tree/v8/langs saytiga o'ting!", + "apiInvalidWeb": "API ID raqamdan iborat, API hash esa 32 belgidan iborat: ularni my.telegram.org saytidan qaytadan nusxalang.", + "webDoneLead": "MadelineProto serverda ishlashda davom etmoqda: bu sahifani yopishingiz mumkin.", + "apiChooseManualAuto": "API ID va hashni my.telegram.org saytidan avtomatik olishni (a) yoki ularni qoʻlda kiritishni (m) xohlaysizmi?", + "apiAutoFallbackManual": "Buning oʻrniga API ID va hashni qoʻlda kiriting.", + "apiSetupTitleWeb": "API ID va hashni oling", + "apiSetupLeadWeb": "Har bir Telegram ilovasiga API ID va hash kerak. MadelineProto ularni mavjud Telegram akkauntining telefon raqami yordamida my.telegram.org saytidan siz uchun olib berishi mumkin.", + "apiAutoPhoneHintWeb": "my.telegram.org kirish kodini SMS orqali emas, Telegram ilovangizga yuboradi.", + "apiSendCodeWeb": "Kodni yuborish", + "apiChooseManualWeb": "Menda API ID allaqachon bor", + "apiChooseAutoWeb": "Avtomatik olish", + "apiStartOverWeb": "Boshidan boshlash", + "apiAutoCodeTitleWeb": "Telegramdan kelgan kodni kiriting", + "apiAutoCodeLeadWeb": "my.telegram.org Telegram ilovangizga, Telegram bilan chatga kirish kodini yubordi (SMS orqali emas).", + "apiAutoCodeLabelWeb": "Kirish kodi", + "apiCreateTitleWeb": "Ilovangizni yarating", + "apiCreateLeadWeb": "Bu akkauntda my.telegram.org saytida hali ilova yoʻq. Bu maʼlumotlar faqat sizga koʻrsatiladi va keyinroq ularni oʻzgartirish mumkin.", + "apiAppTitleLabelWeb": "Ilova nomi", + "apiAppShortNameLabelWeb": "Qisqa nom", + "apiAppUrlLabelWeb": "URL", + "apiAppDescLabelWeb": "Tavsif", + "apiCreateWeb": "Ilova yaratish", + "apiSaveWeb": "Saqlash va davom etish", + "apiAutoErrorTitle": "my.telegram.org xatolik qaytardi", + "apiCreateErrorTitle": "my.telegram.org ilovani yaratmadi", + "apiCreateVpsWarning": "Telegram VPS, VPN va boshqa maʼlumotlar markazlari IP diapazonlaridan my.telegram.org saytida yangi ilova yaratishga ruxsat bermaydi, soʻrov esa MadelineProto ishlayotgan mashinaning IP manzilidan yuborildi. Ilovani uy internetidan (masalan, mobil internetdagi telefoningizdan) https://my.telegram.org saytida qoʻlda yarating, soʻngra API ID va hashni kiriting.", + "loginTitleWeb": "Telegramga kirish", + "loginLeadWeb": "Ushbu MadelineProto nusxasi qaysi akkaunt yoki bot sifatida ishlashini tanlang.", + "loginTypeWeb": "Kim sifatida kirish", + "loginUserPhoneHintWeb": "Davlat kodi bilan, masalan +39 123 456 7890.", + "loginBotTokenHintWeb": "Botni yaratganingizda @BotFather bergan token.", + "loginCodeTitleWeb": "Kirish kodini kiriting", + "loginCodeLeadWeb": "Telegram kirish kodini Telegram ilovangizga yubordi, agar boshqa joyda kirmagan boʻlsangiz, SMS orqali yuboriladi.", + "loginPasswordTitleWeb": "Ikki bosqichli tasdiqlash", + "loginPasswordLeadWeb": "Bu akkaunt Sozlamalar > Maxfiylik va xavfsizlik > Ikki bosqichli tasdiqlash boʻlimida oʻrnatilgan parol bilan himoyalangan.", + "loginPasswordLabelWeb": "Parol", + "signupTitleWeb": "Akkauntingizni yarating", + "signupLeadWeb": "Bu telefon raqami hali Telegramda yoʻq: yangi akkaunt uchun ism tanlang.", + "webContinue": "Davom etish", + "webLogin": "Kirish", + "webError": "%s. Tekshirib, qayta urinib koʻring.", + "webStepApp": "API ID va hash", + "webStepAccount": "Akkaunt", + "webStepVerify": "Tasdiqlash", + "webStepDone": "Ishlamoqda", + "webProgress": "Sozlash jarayoni", + "webDocs": "Hujjatlar", + "webOptional": "ixtiyoriy", + "webShowPassword": "Koʻrsatish", + "webHidePassword": "Yashirish", + "webQrTitle": "QR kod orqali kirish", + "webQrWaiting": "Skanerlash kutilmoqda…", + "webFieldRequired": "Bu maydonni toʻldiring.", + "webPhoneInvalid": "Telefon raqamini davlat kodi bilan kiriting, masalan +39 123 456 7890.", + "tweb.Login.Title": "MadelineProto’ga kirish", + "tweb.Login.PhoneLabelInvalid": "Telefon raqami notoʻgʻri", + "tweb.Login.StartText": "Iltimos, davlat kodini tasdiqlang\nva telefon raqamingizni kiriting.", + "tweb.Login.Code.SentSms": "Sizga kod yozilgan\nSMS yubordik.", + "tweb.Login.Code.SentInApp": "Sizga Telegramda kod yozilgan\nxabar yubordik.", + "tweb.Login.Code.SentCall": "Sizga qoʻngʻiroq qilib,\nkodni aytib beramiz.", + "tweb.Login.Code.SentEmail": "Iltimos, **%s** elektron pochtangizni tekshiring (spam jildini ham unutmang) va hozirgina yuborgan kodimizni kiriting.", + "tweb.Login.Code.SentUnknown": "Iltimos, kodni hamma joydan\nqidirib koʻring (turi: %s)", + "tweb.Login.Code.SentMissedCall": "Bir necha soniya ichida **%s** raqamidan\nqisqa qoʻngʻiroq kelishi kerak. Javob bermang —\nshunchaki shu raqamning oxirgi raqamlarini kiriting.", + "tweb.Login.Code.SentSmsWord": "**%s** telefon raqamingizga\nmaxfiy soʻz yozilgan SMS yubordik.", + "tweb.Login.Code.SentSmsWordBeginning": "**%1$s** telefon raqamingizga \"**%2$s**\" bilan\nboshlanadigan maxfiy soʻz yozilgan SMS yubordik.", + "tweb.Login.Code.SentSmsPhrase": "**%s** telefon raqamingizga\nmaxfiy ibora yozilgan SMS yubordik.", + "tweb.Login.Code.SentSmsPhraseBeginning": "**%1$s** telefon raqamingizga \"**%2$s**\" bilan\nboshlanadigan maxfiy ibora yozilgan SMS yubordik.", + "tweb.Login.Code.SecretWord": "Maxfiy soʻz", + "tweb.Login.Code.SecretPhrase": "Maxfiy ibora", + "tweb.Login.Code.WordInvalid": "Notoʻgʻri, qayta urinib koʻring", + "tweb.Login.Code.WordBeginningInvalid": "Notoʻgʻri soʻz", + "tweb.Login.Password.Title": "Parolingizni kiriting", + "tweb.Login.Password.Subtitle": "Akkauntingiz qoʻshimcha\nparol bilan himoyalangan", + "tweb.Login.Register.Subtitle": "Akkaunt yaratish uchun\nismingizni kiriting", + "tweb.PleaseWait": "Iltimos, kuting...", + "tweb.Code": "Kod", + "tweb.LoginPassword": "Parol", + "tweb.YourName": "Ismingiz", + "tweb.FirstName": "Ism (majburiy)", + "tweb.LastName": "Familiya (ixtiyoriy)", + "tweb.StartMessaging": "Yozishmani boshlash", + "tweb.Country": "Davlat", + "tweb.Contacts.PhoneNumber.Placeholder": "Telefon raqami", + "tweb.Login.Next": "Keyingi", + "tweb.Login.QR.Title": "QR kod orqali kirish", + "tweb.Login.QR.Help1": "Telefoningizda Telegramni oching", + "tweb.Login.QR.Help2": "**Sozlamalar** > **Qurilmalar** > **Qurilma qoʻshish** boʻlimiga oʻting", + "tweb.Login.QR.Help3": "Kirishni tasdiqlash uchun telefoningizni ushbu ekranga yoʻnaltiring", + "tweb.Login.QR.Cancel": "Telefon raqami orqali kirish >", + "tweb.Login.QR.Login": "QR kod orqali kirish >", + "tweb.Login.QR.Subtitle": "Telefoningizdagi Telegram ilovasi bilan skanerlang", + "tweb.PhoneNumber.Code.Fragment.Info": "Kodni [Fragment]() saytidagi Raqamlar boʻlimidan oling", + "tweb.PHONE_CODE_INVALID": "Kod notoʻgʻri", + "tweb.PHONE_CODE_EXPIRED": "Kod muddati tugagan", + "tweb.PASSWORD_HASH_INVALID": "Parol notoʻgʻri", + "tweb.DarkMode": "Tungi rejim", + "tweb.Error.AnError": "Xatolik yuz berdi. Keyinroq qayta urinib koʻring.", + "tweb.AccDescr.LoginCode": "Kirish kodi", + "tweb.Login.Bot": "Bot sifatida kirish >", + "tweb.Login.Bot.Title": "Bot sifatida kirish", + "tweb.Login.Bot.Subtitle": "Botni yaratganingizda @BotFather\nbergan tokenni kiriting.", + "tweb.Login.Bot.Token": "Bot tokeni", + "tweb.Login.Bot.Cancel": "Foydalanuvchi sifatida kirish >", + "tweb.Optional": "ixtiyoriy", + "tweb.PHONE_NUMBER_INVALID": "Telefon raqami notoʻgʻri", + "tweb.PHONE_NUMBER_BANNED": "Bu telefon raqami bloklangan", + "tweb.PHONE_NUMBER_FLOOD": "Urinishlar juda koʻp, keyinroq qayta urinib koʻring", + "tweb.PHONE_CODE_EMPTY": "Kod notoʻgʻri", + "tweb.PHONE_PASSWORD_FLOOD": "Urinishlar juda koʻp, keyinroq qayta urinib koʻring", + "tweb.ACCESS_TOKEN_INVALID": "Bot tokeni notoʻgʻri", + "tweb.ACCESS_TOKEN_EXPIRED": "Bu bot tokeni bekor qilingan", + "tweb.FIRSTNAME_INVALID": "Ism notoʻgʻri", + "tweb.LASTNAME_INVALID": "Familiya notoʻgʻri", + "tweb.Close": "Yopish" } diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/vi.json b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/vi.json new file mode 100644 index 0000000..004ac26 --- /dev/null +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/vi.json @@ -0,0 +1,274 @@ +{ + "baseDirLimitation": "Đã cấu hình giới hạn basedir: điều này có thể ảnh hưởng đến hiệu năng và gây ra một số vấn đề, vui lòng tắt nó nếu có thể!", + "noReportPeers": "Cảnh báo: chưa thiết lập peer nhận báo cáo nào, vui lòng thêm phương thức sau vào event handler của bạn", + "manualAdminActionRequired": "!!!!!!!!! CẦN QUẢN TRỊ VIÊN HỆ THỐNG THAO TÁC THỦ CÔNG !!!!!!!!!", + "mmapErrorPart1": "Đã đạt đến số lượng tối đa vùng bộ nhớ ánh xạ (mmap) (%s): vui lòng tăng cấu hình kernel vm.max_map_count lên 262144 để khắc phục.", + "mmapErrorPart2": "Để khắc phục, hãy chạy lệnh sau với quyền root: %s", + "mmapErrorPart3": "Để giữ thay đổi sau khi khởi động lại: %s", + "mmapErrorPart4": "Trên Windows và WSL, tăng kích thước pagefile có thể giúp ích; vui lòng chuyển sang Linux gốc nếu sự cố vẫn tiếp diễn.", + "botAlreadyRunning": "Bot đang chạy rồi!", + "extensionRequired": "MadelineProto cần extension %s để chạy. %s", + "extensionRequiredInstallWithApt": "Hãy thử chạy sudo apt-get install %s.", + "extensionRequiredInstallWithCustomInstructions": "Làm theo hướng dẫn tại %s để cài đặt.", + "extensionRecommended": "Cảnh báo: extension %s chưa được cài đặt, vui lòng cài đặt để tăng tốc MadelineProto!", + "go": "Tiếp tục", + "apiChooseManualAutoTip": "Lưu ý rằng bạn cũng có thể cung cấp API ID/hash trực tiếp trong code bằng phần cài đặt: %s", + "apiChooseManualAutoTipWeb": "Lưu ý rằng bạn cũng có thể cung cấp API ID/hash trực tiếp trong code bằng phần cài đặt.", + "apiChoosePrompt": "Lựa chọn của bạn (m/a): ", + "apiManualInstructions0": "Đăng nhập vào https://my.telegram.org", + "apiManualInstructions1": "Vào API development tools", + "apiManualInstructions2": "Nhấn vào create application", + "apiAppInstructionsManual0": "tên ứng dụng của bạn, đặt tùy ý", + "apiAppInstructionsManual1": "tên ngắn của ứng dụng, chỉ gồm chữ và số, 5-32 ký tự", + "apiAppInstructionsManual2": "URL của ứng dụng/trang web của bạn, hoặc t.me/yourusername", + "apiAppInstructionsManual3": "tùy ý", + "apiAppInstructionsManual4": "Mô tả ứng dụng của bạn tại đây", + "apiManualWeb": "Nhập API ID và API hash của bạn", + "apiManualPrompt0": "Nhập API ID của bạn: ", + "apiManualPrompt1": "Nhập API hash của bạn: ", + "apiAutoWeb": "Nhập số điện thoại đã được đăng ký trên Telegram để lấy API ID", + "apiAutoPrompt0": "Nhập số điện thoại đã được đăng ký trên Telegram: ", + "apiAutoPrompt1": "Nhập mã xác minh bạn nhận được trong Telegram: ", + "apiAppWeb": "Nhập thông tin API", + "apiAppInstructionsAuto0": "Nhập tên ứng dụng, đặt tùy ý: ", + "apiAppInstructionsAuto1": "Nhập tên ngắn của ứng dụng, chỉ gồm chữ và số, 5-32 ký tự: ", + "apiAppInstructionsAuto2": "Nhập URL của ứng dụng/trang web, hoặc t.me/yourusername: ", + "apiAppInstructionsAuto3": "Nhập nền tảng của ứng dụng: ", + "apiAppInstructionsAuto4": "Mô tả ứng dụng của bạn: ", + "apiAppInstructionsAutoTypeOther": "Khác (ghi rõ trong phần mô tả)", + "apiParamsError": "Bạn chưa cung cấp đủ các tham số bắt buộc!", + "apiError": "LỖI: %s. Vui lòng thử lại.", + "loginChoosePromptWeb": "Bạn muốn đăng nhập với tư cách người dùng hay bot?", + "loginWebQr": "Bạn cũng có thể đăng nhập tự động bằng cách mở Telegram trên điện thoại, vào Cài đặt > Thiết bị > Liên kết thiết bị máy tính và quét mã QR sau:", + "loginWebQr1": "Mở Telegram trên điện thoại của bạn", + "loginWebQr2": "Vào Cài đặt > Thiết bị > Liên kết thiết bị máy tính", + "loginWebQr3": "Hướng điện thoại vào màn hình này để xác nhận đăng nhập", + "loginOptionBot": "Bot", + "loginOptionUser": "Người dùng", + "loginBot": "Nhập token bot của bạn: ", + "loginUser": "Nhập số điện thoại của bạn: ", + "loginQr": "Mở Telegram trên điện thoại, vào Cài đặt > Thiết bị > Liên kết thiết bị máy tính và quét mã QR ở trên để đăng nhập tự động.", + "loginQrCodeSuccessful": "Đăng nhập bằng mã QR thành công!", + "loginQrCodeExpired": "Mã QR đã hết hạn, đang tạo mã mới...", + "loginManual": "Ngoài ra, bạn cũng có thể nhập token bot hoặc số điện thoại để đăng nhập thủ công: ", + "loginUserCode": "Nhập mã: ", + "loginUserPass": "Nhập mật khẩu của bạn (gợi ý %s): ", + "loginUserPassWeb": "Nhập mật khẩu của bạn: ", + "loginUserPassHint": "Gợi ý: %s", + "signupFirstName": "Nhập tên của bạn: ", + "signupLastName": "Nhập họ của bạn (có thể để trống): ", + "signupWeb": "Vui lòng đăng ký", + "signupFirstNameWeb": "Tên", + "signupLastNameWeb": "Họ", + "loginNoCode": "Bạn chưa cung cấp mã điện thoại!", + "loginNoPass": "Bạn chưa cung cấp mật khẩu!", + "loginNoName": "Bạn chưa cung cấp tên!", + "loginBotTokenWeb": "Token bot", + "loginUserPhoneWeb": "Số điện thoại", + "loginUserPhoneCodeWeb": "Mã", + "done": "Xong!", + "nearest_dc": "Chúng ta đang ở %s, DC gần nhất là %d.", + "serialization_ofd": "Dữ liệu tuần tự hóa đã lỗi thời, đang tái tạo đối tượng!", + "api_not_set": "Bạn phải cung cấp api key và api id, hãy lấy của riêng bạn tại my.telegram.org", + "session_corrupted": "Phiên bị hỏng!", + "value_bigger_than_2147483647": "Giá trị %s được cung cấp lớn hơn 2147483647", + "value_smaller_than_2147483648": "Giá trị %s được cung cấp nhỏ hơn -2147483648", + "value_bigger_than_9223372036854775807": "Giá trị %s được cung cấp lớn hơn 9223372036854775807", + "value_smaller_than_9223372036854775808": "Giá trị %s được cung cấp nhỏ hơn -9223372036854775808", + "value_bigger_than_4294967296": "Giá trị %s được cung cấp lớn hơn 4294967296", + "value_smaller_than_0": "Giá trị %s được cung cấp nhỏ hơn 0", + "encode_double_error": "Không thể mã hóa double đúng cách", + "file_not_exist": "Tệp không tồn tại", + "deserialization_error": "Đã xảy ra lỗi khi giải tuần tự hóa", + "rpc_tg_error": "Telegram trả về lỗi RPC: %s (%s), gây ra bởi %s:%s%sTruy vết TL:", + "madelineproto_ready": "MadelineProto đã sẵn sàng!", + "logout_ok": "Đăng xuất thành công!", + "already_loggedIn": "Instance MadelineProto này đã đăng nhập rồi!", + "login_ok": "Đăng nhập thành công!", + "login_user": "Đang đăng nhập với tư cách người dùng thông thường...", + "login_bot": "Đang đăng nhập với tư cách bot...", + "login_code_sending": "Đang gửi mã...", + "login_code_sent": "Đã gửi mã thành công! Khi nhận được mã, bạn cần sử dụng hàm completePhoneLogin.", + "login_code_uncalled": "Tôi không đang chờ mã! Vui lòng gọi phương thức phoneLogin trước", + "login_2fa_enabled": "2FA đã được bật, bạn sẽ phải gọi hàm complete2falogin...", + "login_need_signup": "Chưa có tài khoản nào được tạo cho số này, bạn sẽ phải gọi hàm completeSignup...", + "login_auth_key": "Đang đăng nhập bằng auth key...", + "not_loggedIn": "Tôi chưa đăng nhập!", + "signup_uncalled": "Tôi không đang chờ đăng ký! Vui lòng gọi các phương thức phoneLogin và completePhoneLogin trước!", + "signing_up": "Đang đăng ký với tư cách người dùng thông thường...", + "signup_ok": "Đăng ký thành công!", + "2fa_uncalled": "Tôi không đang chờ mật khẩu! Vui lòng gọi các phương thức phoneLogin và completePhoneLogin trước!", + "peer_not_in_db": "Peer này không có trong cơ sở dữ liệu peer nội bộ", + "call_error_1": "Không thể tìm và chấp nhận cuộc gọi %s", + "accepting_call": "Đang chấp nhận cuộc gọi từ %s...", + "call_already_accepted": "Cuộc gọi %s đã được chấp nhận", + "call_already_declined": "Cuộc gọi %s đã bị từ chối", + "call_error_2": "Không thể tìm và xác nhận cuộc gọi %s", + "call_confirming": "Đang xác nhận cuộc gọi từ %s...", + "call_error_3": "Không thể tìm và hoàn tất cuộc gọi %s", + "call_completing": "Đang hoàn tất cuộc gọi từ %s...", + "fingerprint_invalid": "Fingerprint của khóa không hợp lệ!", + "call_discarding": "Đang kết thúc cuộc gọi %s...", + "file_parsing": "Đang phân tích %s...", + "src_file_invalid": "Tệp nguồn được cung cấp không hợp lệ: ", + "bool_error": "Không thể trích xuất giá trị boolean", + "not_numeric": "Giá trị đã cho không phải là số", + "long_not_16": "Giá trị đã cho không dài 16 byte", + "long_not_32": "Giá trị đã cho không dài 32 byte", + "long_not_64": "Giá trị đã cho không dài 64 byte", + "array_invalid": "Bạn chưa cung cấp một mảng hợp lệ", + "predicate_not_set": "Predicate (giá trị trong _) chưa được thiết lập!", + "update_madelineproto": "Bạn đang chạy phiên bản cũ của MadelineProto, cần phải cập nhật: phiên bản hiện tại là %s, nhưng phiên bản mới nhất với nhiều bản sửa lỗi và tính năng mới là %s!", + "type_extract_error": "Không thể trích xuất kiểu \"%s\", bạn nên cập nhật MadelineProto!", + "method_not_found": "Không tìm thấy phương thức: ", + "params_missing": "Thiếu tham số bắt buộc", + "sec_peer_not_in_db": "Peer bí mật này không có trong cơ sở dữ liệu peer nội bộ", + "stream_handle_invalid": "Stream handle được cung cấp không hợp lệ.", + "length_too_big": "Độ dài quá lớn", + "string_required": "Yêu cầu một chuỗi (string)!", + "waveform_must_have_100_values": "Mảng waveform phải có 100 giá trị!", + "waveform_value": "Giá trị waveform phải nằm trong khoảng từ 0 đến 31!", + "could_not_convert_object": "Không thể chuyển đổi đối tượng kiểu %s", + "type_extract_error_id": "Không thể trích xuất kiểu: %s với id %s, bạn nên cập nhật MadelineProto!", + "constructor_not_found": "Không tìm thấy constructor cho kiểu: ", + "botapi_conversion_error": "Không thể chuyển đổi %s thành đối tượng bot API", + "non_text_conversion": "Chưa thể chuyển đổi tin nhắn không phải văn bản!", + "file_type_invalid": "Phát hiện loại tệp không hợp lệ (%s)", + "static_analysis_minor": "Phát hiện một vấn đề nhỏ trong quá trình phân tích tĩnh %s: %s", + "static_analysis_severe": "Phát hiện một vấn đề nghiêm trọng trong quá trình phân tích tĩnh %s: %s", + "secret_chat_skipping": "Tôi không có cuộc trò chuyện bí mật %s trong cơ sở dữ liệu, bỏ qua tin nhắn...", + "must_have_declare_types": "vì lý do hiệu năng, câu lệnh đầu tiên của tệp event handler phải là \"declare(strict_types=1);\"", + "do_not_delete_MadelineProto.log": "tuyệt đối không được xóa tệp MadelineProto.log, thay vào đó hãy đặt kích thước tối đa tùy chỉnh trong phần cài đặt!", + "do_not_remove_MadelineProto.log_phar": "Vui lòng không xóa madeline.phar hoặc madeline.php, nếu không MadelineProto sẽ bị crash. Nếu bạn gặp bất kỳ vấn đề nào với MadelineProto, hãy báo cáo tại https://github.com/danog/MadelineProto hoặc https://t.me/pwrtelegramgroup", + "do_not_use_blocking_function": "vì lý do hiệu năng, event handler không được sử dụng hàm blocking không async %s, thay vào đó hãy sử dụng %s", + "do_not_use_blocking_class": "vì lý do hiệu năng, handler không được sử dụng lớp blocking không async %s, thay vào đó hãy sử dụng %s", + "do_not_use_deprecated_function": "hàm %s đã lỗi thời (deprecated), thay vào đó hãy sử dụng %s", + "do_not_use_non_root_require_in_event_handler": "vì lý do hiệu năng, bạn không được sử dụng require hoặc include bên trong lớp event handler, chỉ cho phép require ở cấp gốc.", + "do_not_use_yield": "MadelineProto 8 không yêu cầu cũng không hỗ trợ việc sử dụng yield trong các hàm async, bạn phải xóa tất cả các từ khóa yield đã dùng trước đây cho các lời gọi hàm async", + "recommend_not_use_filesystem_function": "không khuyến khích sử dụng hàm %s, vì truy cập hệ thống tệp trong khi xử lý update sẽ làm chậm bot của bạn, vui lòng xem https://docs.madelineproto.xyz/docs/UPDATES.html#avoiding-the-use-of-filesystem-functions để biết danh sách các cách lưu trữ dữ liệu thay thế không làm chậm bot của bạn!", + "plugins_do_not_use_require": "vì lý do hiệu năng, plugin chỉ có thể tự động include hoặc require các tệp khác có trong thư mục plugins bằng cách kích hoạt autoloader PSR-4 (không phải bằng cách require() thủ công).", + "plugins_must_have_exactly_one_class": "một plugin phải định nghĩa chính xác một lớp! Để định nghĩa nhiều lớp, interface hoặc trait, hãy tạo các tệp riêng biệt, chúng sẽ được MadelineProto tự động nạp.", + "cli_need_dl.php_link": "Vui lòng chỉ định URL của script tải xuống khi sử dụng getDownloadLink qua CLI!", + "invalid_dl.php_session": "%s không phải là script tải xuống hợp lệ vì ID phiên của nó khác (mong đợi %s, nhận được %s)", + "need_dl.php": "Không thể tạo script tải xuống mặc định (%s), vui lòng tạo tệp dl.php với nội dung sau: %s và truyền URL của nó vào tham số thứ hai của getDownloadLink", + "dl.php_powered_by_madelineproto": "Máy chủ tải xuống tệp Telegram (tối đa 4GB), được cung cấp bởi MadelineProto!
Nhấn vào đây để biết thêm thông tin về cách thiết lập máy chủ tải xuống tệp Telegram của riêng bạn!", + "dl.php_check_logs_make_sure_session_running": "Bot EventHandler MadelineProto liên quan hoặc máy chủ IPC MadelineProto đang ngoại tuyến, vui lòng kiểm tra log và đảm bảo ít nhất một trong số chúng đang chạy!", + "account_banned": "!!!!!!! CẢNH BÁO !!!!!!!\nHệ thống chống flood của Telegram đã tạm khóa tài khoản này.\nĐể tiếp tục, cần xác minh thủ công.\nHãy gửi email đến recover@telegram.org, yêu cầu gỡ chặn số điện thoại %s, và mô tả ngắn gọn bạn sẽ làm gì với số điện thoại này.\nSau đó đăng nhập lại.\nNếu bạn cố ý xóa tài khoản này, hãy bỏ qua thông báo này.", + "plugin_path_does_not_exist": "Đường dẫn plugin %s không tồn tại!", + "could_not_connect_to_MadelineProto": "Không thể kết nối đến MadelineProto, vui lòng bật proc_open và gỡ bỏ giới hạn open_basedir hoặc tắt tính năng rewrite đường dẫn của webserver để khắc phục! Nếu bạn đã làm vậy, hãy đảm bảo phiên bản CLI của PHP giống hệt phiên bản web (cùng phiên bản, extension, v.v.) và xem tệp MadelineProto.log để biết thêm thông tin về lỗi đã ngăn máy chủ IPC khởi động.", + "translate_madelineproto_web": "MadelineProto có thể được dịch sang ngôn ngữ của bạn (tiến độ dịch hiện tại: %d%%), nhấn vào đây để đóng góp bản dịch!", + "translate_madelineproto_cli": "MadelineProto có thể được dịch sang ngôn ngữ của bạn (tiến độ dịch hiện tại: %d%%), hãy truy cập https://github.com/danog/MadelineProto/tree/v8/langs để đóng góp bản dịch!", + "apiInvalidWeb": "API ID là một số, còn API hash dài 32 ký tự: hãy sao chép lại chúng từ my.telegram.org.", + "webDoneLead": "MadelineProto vẫn tiếp tục chạy trên máy chủ: bạn có thể đóng trang này.", + "apiChooseManualAuto": "Bạn muốn lấy API ID và hash tự động từ my.telegram.org (a), hay tự nhập thủ công (m)?", + "apiAutoFallbackManual": "Thay vào đó, hãy nhập API ID và hash thủ công.", + "apiSetupTitleWeb": "Lấy API ID và hash của bạn", + "apiSetupLeadWeb": "Mọi ứng dụng Telegram đều cần API ID và hash. MadelineProto có thể lấy chúng giúp bạn từ my.telegram.org, bằng số điện thoại của một tài khoản Telegram hiện có.", + "apiAutoPhoneHintWeb": "my.telegram.org gửi mã đăng nhập đến ứng dụng Telegram của bạn, không phải qua SMS.", + "apiSendCodeWeb": "Gửi mã", + "apiChooseManualWeb": "Tôi đã có API ID", + "apiChooseAutoWeb": "Lấy tự động", + "apiStartOverWeb": "Bắt đầu lại", + "apiAutoCodeTitleWeb": "Nhập mã từ Telegram", + "apiAutoCodeLeadWeb": "my.telegram.org đã gửi mã đăng nhập đến ứng dụng Telegram của bạn, trong cuộc trò chuyện với Telegram (không phải qua SMS).", + "apiAutoCodeLabelWeb": "Mã đăng nhập", + "apiCreateTitleWeb": "Tạo ứng dụng của bạn", + "apiCreateLeadWeb": "Tài khoản này chưa có ứng dụng nào trên my.telegram.org. Các thông tin này chỉ hiển thị với bạn và có thể thay đổi sau.", + "apiAppTitleLabelWeb": "Tên ứng dụng", + "apiAppShortNameLabelWeb": "Tên ngắn", + "apiAppUrlLabelWeb": "URL", + "apiAppDescLabelWeb": "Mô tả", + "apiCreateWeb": "Tạo ứng dụng", + "apiSaveWeb": "Lưu và tiếp tục", + "apiAutoErrorTitle": "my.telegram.org đã trả về lỗi", + "apiCreateErrorTitle": "my.telegram.org không tạo được ứng dụng", + "apiCreateVpsWarning": "Telegram không cho phép các dải IP của VPS, VPN và các trung tâm dữ liệu khác tạo ứng dụng mới trên my.telegram.org, và yêu cầu này được gửi từ IP của máy đang chạy MadelineProto. Hãy tạo ứng dụng thủ công tại https://my.telegram.org từ một kết nối gia đình (ví dụ điện thoại của bạn dùng dữ liệu di động), sau đó nhập API ID và hash.", + "loginTitleWeb": "Đăng nhập vào Telegram", + "loginLeadWeb": "Chọn tài khoản hoặc bot sẽ được dùng để chạy phiên bản MadelineProto này.", + "loginTypeWeb": "Đăng nhập với tư cách", + "loginUserPhoneHintWeb": "Kèm mã quốc gia, ví dụ +39 123 456 7890.", + "loginBotTokenHintWeb": "Token mà @BotFather đã cung cấp khi bạn tạo bot.", + "loginCodeTitleWeb": "Nhập mã đăng nhập", + "loginCodeLeadWeb": "Telegram đã gửi mã đăng nhập đến ứng dụng Telegram của bạn, hoặc qua SMS nếu bạn chưa đăng nhập ở nơi nào khác.", + "loginPasswordTitleWeb": "Xác minh hai bước", + "loginPasswordLeadWeb": "Tài khoản này được bảo vệ bằng mật khẩu, được đặt trong Cài đặt > Quyền riêng tư và bảo mật > Xác minh hai bước.", + "loginPasswordLabelWeb": "Mật khẩu", + "signupTitleWeb": "Tạo tài khoản của bạn", + "signupLeadWeb": "Số điện thoại này chưa có trên Telegram: hãy chọn tên cho tài khoản mới.", + "webContinue": "Tiếp tục", + "webLogin": "Đăng nhập", + "webError": "%s. Hãy kiểm tra và thử lại.", + "webStepApp": "API ID và hash", + "webStepAccount": "Tài khoản", + "webStepVerify": "Xác minh", + "webStepDone": "Đang chạy", + "webProgress": "Tiến trình thiết lập", + "webDocs": "Tài liệu", + "webOptional": "không bắt buộc", + "webShowPassword": "Hiện", + "webHidePassword": "Ẩn", + "webQrTitle": "Đăng nhập bằng mã QR", + "webQrWaiting": "Đang chờ quét…", + "webFieldRequired": "Vui lòng điền vào trường này.", + "webPhoneInvalid": "Nhập số điện thoại kèm mã quốc gia, ví dụ +39 123 456 7890.", + "tweb.Login.Title": "Đăng nhập vào MadelineProto", + "tweb.Login.PhoneLabelInvalid": "Số điện thoại không hợp lệ", + "tweb.Login.StartText": "Vui lòng xác nhận mã quốc gia\nvà nhập số điện thoại của bạn.", + "tweb.Login.Code.SentSms": "Chúng tôi đã gửi cho bạn một SMS\nchứa mã.", + "tweb.Login.Code.SentInApp": "Chúng tôi đã gửi cho bạn một tin nhắn\ntrên Telegram chứa mã.", + "tweb.Login.Code.SentCall": "Chúng tôi sẽ gọi cho bạn và đọc\nmã.", + "tweb.Login.Code.SentEmail": "Vui lòng kiểm tra email **%s** của bạn (đừng quên thư mục spam) và nhập mã chúng tôi vừa gửi.", + "tweb.Login.Code.SentUnknown": "Vui lòng kiểm tra mọi nơi\nđể tìm mã (loại: %s)", + "tweb.Login.Code.SentMissedCall": "Trong vài giây tới, bạn sẽ nhận được\nmột cuộc gọi ngắn từ **%s**. Đừng trả lời —\nchỉ cần nhập các chữ số cuối của số đó.", + "tweb.Login.Code.SentSmsWord": "Chúng tôi đã gửi một SMS chứa từ bí mật\nđến số điện thoại **%s** của bạn.", + "tweb.Login.Code.SentSmsWordBeginning": "Chúng tôi đã gửi một SMS chứa từ bí mật bắt đầu\nbằng \"**%2$s**\" đến số điện thoại **%1$s** của bạn.", + "tweb.Login.Code.SentSmsPhrase": "Chúng tôi đã gửi một SMS chứa cụm từ bí mật\nđến số điện thoại **%s** của bạn.", + "tweb.Login.Code.SentSmsPhraseBeginning": "Chúng tôi đã gửi một SMS chứa cụm từ bí mật bắt đầu\nbằng \"**%2$s**\" đến số điện thoại **%1$s** của bạn.", + "tweb.Login.Code.SecretWord": "Từ bí mật", + "tweb.Login.Code.SecretPhrase": "Cụm từ bí mật", + "tweb.Login.Code.WordInvalid": "Không đúng, vui lòng thử lại", + "tweb.Login.Code.WordBeginningInvalid": "Từ không đúng", + "tweb.Login.Password.Title": "Nhập mật khẩu của bạn", + "tweb.Login.Password.Subtitle": "Tài khoản của bạn được bảo vệ bằng\nmột mật khẩu bổ sung", + "tweb.Login.Register.Subtitle": "Nhập tên của bạn\nđể tạo tài khoản", + "tweb.PleaseWait": "Vui lòng chờ...", + "tweb.Code": "Mã", + "tweb.LoginPassword": "Mật khẩu", + "tweb.YourName": "Tên của bạn", + "tweb.FirstName": "Tên (bắt buộc)", + "tweb.LastName": "Họ (không bắt buộc)", + "tweb.StartMessaging": "Bắt đầu nhắn tin", + "tweb.Country": "Quốc gia", + "tweb.Contacts.PhoneNumber.Placeholder": "Số điện thoại", + "tweb.Login.Next": "Tiếp", + "tweb.Login.QR.Title": "Đăng nhập bằng mã QR", + "tweb.Login.QR.Help1": "Mở Telegram trên điện thoại của bạn", + "tweb.Login.QR.Help2": "Vào **Cài đặt** > **Thiết bị** > **Thêm thiết bị**", + "tweb.Login.QR.Help3": "Hướng điện thoại vào màn hình này để xác nhận đăng nhập", + "tweb.Login.QR.Cancel": "Đăng nhập bằng số điện thoại >", + "tweb.Login.QR.Login": "Đăng nhập bằng mã QR >", + "tweb.Login.QR.Subtitle": "Quét bằng ứng dụng Telegram trên điện thoại của bạn", + "tweb.PhoneNumber.Code.Fragment.Info": "Lấy mã trong mục Numbers trên [Fragment]()", + "tweb.PHONE_CODE_INVALID": "Mã không hợp lệ", + "tweb.PHONE_CODE_EXPIRED": "Mã đã hết hạn", + "tweb.PASSWORD_HASH_INVALID": "Mật khẩu không đúng", + "tweb.DarkMode": "Chế độ tối", + "tweb.Error.AnError": "Đã xảy ra lỗi. Vui lòng thử lại sau.", + "tweb.AccDescr.LoginCode": "Mã đăng nhập", + "tweb.Login.Bot": "Đăng nhập với tư cách bot >", + "tweb.Login.Bot.Title": "Đăng nhập với tư cách bot", + "tweb.Login.Bot.Subtitle": "Nhập token mà @BotFather đã cung cấp\nkhi bạn tạo bot.", + "tweb.Login.Bot.Token": "Token bot", + "tweb.Login.Bot.Cancel": "Đăng nhập với tư cách người dùng >", + "tweb.Optional": "không bắt buộc", + "tweb.PHONE_NUMBER_INVALID": "Số điện thoại không hợp lệ", + "tweb.PHONE_NUMBER_BANNED": "Số điện thoại này đã bị cấm", + "tweb.PHONE_NUMBER_FLOOD": "Quá nhiều lần thử, vui lòng thử lại sau", + "tweb.PHONE_CODE_EMPTY": "Mã không hợp lệ", + "tweb.PHONE_PASSWORD_FLOOD": "Quá nhiều lần thử, vui lòng thử lại sau", + "tweb.ACCESS_TOKEN_INVALID": "Token bot không hợp lệ", + "tweb.ACCESS_TOKEN_EXPIRED": "Token bot này đã bị thu hồi", + "tweb.FIRSTNAME_INVALID": "Tên không hợp lệ", + "tweb.LASTNAME_INVALID": "Họ không hợp lệ", + "tweb.Close": "Đóng" +} diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/zh_Hans.json b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/zh.json similarity index 60% rename from resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/zh_Hans.json rename to resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/zh.json index 1781bdb..fb539a5 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/zh_Hans.json +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/zh.json @@ -1,24 +1,45 @@ { + "baseDirLimitation": "配置了 basedir 限制:这可能会影响性能并导致一些问题,请尽可能禁用它!", "noReportPeers": "警告:未设置报告对等体,请将以下方法添加到您的事件处理程序中", - "mmapErrorPart1": "已达到内存映射(mmap)区域的最大数量(%s):请将 vm.max_map_count 内核配置增加到 262144 进行修复。", - "mmapErrorPart2": "要修复此问题,请以 root 身份运行以下命令:%s", - "mmapErrorPart3": "要在重启后保留更改:%s", + "manualAdminActionRequired": "!!!!!!!!! 需要系统管理员手动操作 !!!!!!!!!", + "mmapErrorPart1": "已达到内存映射(mmap)区域的最大数量(%s):请将 vm.max_map_count 内核配置增加到 262144 进行修复。", + "mmapErrorPart2": "要修复此问题,请以 root 身份运行以下命令:%s", + "mmapErrorPart3": "要在重启后保留更改:%s", + "mmapErrorPart4": "在 Windows 和 WSL 上,增加页面文件的大小可能会有所帮助;如果问题仍然存在,请切换到原生 Linux。", "botAlreadyRunning": "机器人已开始运行!", - "extensionRequiredInstallWithApt": "尝试运行 sudo apt-get install %s.", "extensionRequired": "MadelineProto 需要 %s 扩展才能运行.%s", + "extensionRequiredInstallWithApt": "尝试运行 sudo apt-get install %s.", "extensionRequiredInstallWithCustomInstructions": "按照 %s 中的说明进行安装。", + "extensionRecommended": "警告:未安装 %s 扩展,请安装它以加快 MadelineProto 的速度!", + "go": "去", + "apiChooseManualAutoTip": "请注意,您也可以使用以下设置直接在代码中提供 API ID/hash:%s", + "apiChooseManualAutoTipWeb": "请注意,您还可以使用设置直接在代码中提供 API ID/hash。", + "apiChoosePrompt": "您的选择 (m/a): ", + "apiManualInstructions0": "登录 https://my.telegram.org", + "apiManualInstructions1": "前往API 开发工具", + "apiManualInstructions2": "点击创建应用程序", + "apiAppInstructionsManual0": "你的应用名称,可以是任意名称", + "apiAppInstructionsManual1": "您的应用的简称,字母数字,5-32 个字符", + "apiAppInstructionsManual2": "你的应用/网站的 URL,或者 t.me/yourusername", + "apiAppInstructionsManual3": "任何事", + "apiAppInstructionsManual4": "在此描述您的应用", + "apiManualWeb": "输入您的 API ID 和 API hash", "apiManualPrompt0": "输入您的 API ID: ", + "apiManualPrompt1": "输入您的 API hash: ", "apiAutoWeb": "输入已在电报上注册的电话号码以获取 API ID", "apiAutoPrompt0": "输入已经在 Telegram 注册的电话号码: ", + "apiAutoPrompt1": "输入您在 Telegram 中收到的验证码: ", "apiAppWeb": "输入 API 信息", "apiAppInstructionsAuto0": "输入应用程序的名称,可以是任何内容: ", "apiAppInstructionsAuto1": "输入应用程序的简称,字母数字,5-32个字符: ", + "apiAppInstructionsAuto2": "输入应用程序/网站的 URL,或 t.me/yourusername: ", "apiAppInstructionsAuto3": "输入应用纲领: ", "apiAppInstructionsAuto4": "描述你的应用: ", "apiAppInstructionsAutoTypeOther": "其他(在描述中指定)", "apiParamsError": "您没有提供所有必需的参数!", "apiError": "错误:%s. 请重试。", "loginChoosePromptWeb": "您想以用户身份还是机器人身份登录?", + "loginWebQr": "您也可以通过扫描以下二维码自动登录:", "loginWebQr1": "在手机上打开 Telegram", "loginWebQr2": "前往“设置”>“设备”>“链接桌面设备”", "loginWebQr3": "将你的手机对准此屏幕以确认登录", @@ -26,72 +47,78 @@ "loginOptionUser": "用户", "loginBot": "输入您的机器人令牌: ", "loginUser": "输入你的电话号码: ", + "loginQr": "扫描以上二维码即可自动登录。", "loginQrCodeSuccessful": "二维码登录成功!", "loginQrCodeExpired": "QR 码已过期,正在生成新的 QR 码...", "loginManual": "或者,您也可以输入机器人令牌或电话号码手动登录: ", "loginUserCode": "输入验证码: ", + "loginUserPass": "输入您的密码(提示 %s): ", "loginUserPassWeb": "输入您的密码: ", "loginUserPassHint": "提示:%s", "signupFirstName": "输入您的名字: ", - "go": "去", - "apiChooseManualAutoTip": "请注意,您也可以使用以下设置直接在代码中提供 API ID/hash:%s", - "apiChooseManualAutoTipWeb": "请注意,您还可以使用设置直接在代码中提供 API ID/hash。", - "apiChoosePrompt": "您的选择 (m/a): ", - "apiManualInstructions0": "登录 https://my.telegram.org", - "apiManualInstructions1": "前往API 开发工具", - "apiManualInstructions2": "点击创建应用程序", - "apiAppInstructionsManual1": "您的应用的简称,字母数字,5-32 个字符", - "apiAppInstructionsManual2": "你的应用/网站的 URL,或者 t.me/yourusername", - "apiAppInstructionsManual3": "任何事", - "apiAppInstructionsManual4": "在此描述您的应用", + "signupLastName": "输入您的姓氏(可以为空): ", + "signupWeb": "请注册", + "signupFirstNameWeb": "名字", "signupLastNameWeb": "姓氏", + "loginNoCode": "您没有提供电话代码!", "loginNoPass": "您没有提供密码!", "loginNoName": "您没有提供名字!", "loginBotTokenWeb": "机器人令牌", "loginUserPhoneWeb": "电话号码", "loginUserPhoneCodeWeb": "验证码", "done": "完成!", + "nearest_dc": "我们在 %s,最近的 DC 是 %d。", "serialization_ofd": "序列化已过时,正在重建对象!", "api_not_set": "您必须提供一个 api key 和一个 api id,请获取您自己的 @ my.telegram.org", "session_corrupted": "会话已损坏!", + "value_bigger_than_2147483647": "提供的值 %s 大于 2147483647", "value_smaller_than_2147483648": "提供的值 %s 小于 -2147483648", "value_bigger_than_9223372036854775807": "提供的值 %s 大于 9223372036854775807", "value_smaller_than_9223372036854775808": "提供的值 %s 小于 -9223372036854775808", "value_bigger_than_4294967296": "提供的值 %s 大于 4294967296", "value_smaller_than_0": "提供的值 %s 小于 0", + "encode_double_error": "无法正确编码双重", "file_not_exist": "文件不存在", "deserialization_error": "反序列化时发生错误", "rpc_tg_error": "Telegram 返回了 RPC 错误:%s(%s),由 %s:%s%sTL 跟踪导致:", "madelineproto_ready": "MadelineProto 已准备好!", "logout_ok": "退出成功!", + "already_loggedIn": "MadelineProto 的这个实例已经登录!", "login_ok": "登录成功!", "login_user": "以普通用户身份登录...", - "peer_not_in_db": "内部对等数据库中不存在此对等点", - "call_error_1": "无法找到并接受呼叫 %s", - "accepting_call": "正在接听来自 %s 的电话...", - "call_already_accepted": "呼叫 %s 已被接受", "login_bot": "以机器人身份登录...", "login_code_sending": "正在发送代码...", "login_code_sent": "代码发送成功!收到代码后,您应该使用 completePhoneLogin 函数。", + "login_code_uncalled": "我不等代码了!请先调用 phoneLogin 方法", "login_2fa_enabled": "启用 2FA 后,您将必须调用 complete2falogin 函数...", "login_need_signup": "尚未为此号码创建帐户,您必须调用 completeSignup 函数...", "login_auth_key": "使用身份验证密钥登录...", "not_loggedIn": "我还没有登录!", + "signup_uncalled": "我不等着注册!请先调用 phoneLogin 和 completePhoneLogin 方法!", "signing_up": "正在注册为普通用户...", "signup_ok": "报名成功!", + "2fa_uncalled": "我不等你输入密码!请先调用 phoneLogin 和 completePhoneLogin 方法!", + "peer_not_in_db": "内部对等数据库中不存在此对等点", + "call_error_1": "无法找到并接受呼叫 %s", + "accepting_call": "正在接听来自 %s 的电话...", + "call_already_accepted": "呼叫 %s 已被接受", "call_already_declined": "已拒绝来电 %s", "call_error_2": "无法找到并确认呼叫 %s", + "call_confirming": "确认来自 %s 的呼叫...", "call_error_3": "无法找到并完成呼叫 %s", + "call_completing": "正在完成来自 %s 的呼叫...", "fingerprint_invalid": "密钥指纹无效!", "call_discarding": "正在丢弃呼叫 %s...", "file_parsing": "正在解析 %s...", "src_file_invalid": "提供的源文件无效: ", "bool_error": "无法提取布尔值", "not_numeric": "给定值不是数字", + "long_not_16": "给定值的长度不是 16 个字节", "long_not_32": "给定值的长度不是 32 个字节", "long_not_64": "给定值的长度不是 64 个字节", "array_invalid": "您没有提供有效的数组", "predicate_not_set": "谓词(_ 下的值)未设置!", + "update_madelineproto": "您正在运行旧版本的 MadelineProto,需要更新:当前运行 %s,但最新版本具有多项错误修复和新功能是 %s!", "type_extract_error": "无法提取类型“%s”,您应该更新 MadelineProto!", "method_not_found": "找不到方法: ", "params_missing": "缺少必需参数", @@ -101,62 +128,147 @@ "string_required": "期望的是字符串!", "waveform_must_have_100_values": "波形数组必须有 100 个值!", "waveform_value": "波形值必须介于0至31之间!", + "could_not_convert_object": "无法转换 %s 类型的对象", "type_extract_error_id": "无法提取类型:%s,ID 为 %s,您应该更新 MadelineProto!", "constructor_not_found": "未找到该类型的构造函数: ", "botapi_conversion_error": "无法将 %s 转换为机器人 API 对象", + "non_text_conversion": "尚无法转换非文本信息!", "file_type_invalid": "检测到无效的文件类型 (%s)", "static_analysis_minor": "对 %s 进行静态分析时遇到一个小问题:%s", "static_analysis_severe": "对 %s 进行静态分析时遇到严重问题:%s", + "secret_chat_skipping": "我的数据库中没有秘密聊天 %s,跳过消息...", "must_have_declare_types": "出于性能原因,事件处理程序文件的第一个语句必须是“declare(strict_types=1);”", + "do_not_delete_MadelineProto.log": "绝不能删除 MadelineProto.log 文件,请在设置中设置自定义最大大小!", + "do_not_remove_MadelineProto.log_phar": "请不要删除 madeline.phar 或 madeline.php,否则 MadelineProto 将崩溃。如果您对 MadelineProto 有任何问题,请报告给 https://github.com/danog/MadelineProto 或 https://t.me/pwrtelegramgroup", "do_not_use_blocking_function": "出于性能原因,事件处理程序可能不会使用非异步阻塞函数 %s,请改用 %s", "do_not_use_blocking_class": "出于性能原因,处理程序可能不会使用非异步阻塞类 %s,请改用 %s", "do_not_use_deprecated_function": "%s 函数已弃用,请使用 %s 代替", "do_not_use_non_root_require_in_event_handler": "出于性能原因,您不能在事件处理程序类中使用 require 或 include,只允许使用根级需要。", "do_not_use_yield": "MadelineProto 8 不要求或支持在异步函数中使用 Yield,您必须删除以前用于异步函数调用的所有 Yield 关键字", - "baseDirLimitation": "配置了 basedir 限制:这可能会影响性能并导致一些问题,请尽可能禁用它!", - "manualAdminActionRequired": "!!!!!!!!! 需要系统管理员手动操作 !!!!!!!!!", - "mmapErrorPart4": "在 Windows 和 WSL 上,增加页面文件的大小可能会有所帮助;如果问题仍然存在,请切换到原生 Linux。", - "apiManualWeb": "输入您的 API ID 和 API hash", - "apiManualPrompt1": "输入您的 API hash: ", - "apiAutoPrompt1": "输入您在 Telegram 中收到的验证码: ", - "apiAppInstructionsAuto2": "输入应用程序/网站的 URL,或 t.me/yourusername: ", - "loginWebQr": "您也可以通过扫描以下二维码自动登录:", - "loginQr": "扫描以上二维码即可自动登录。", - "loginUserPass": "输入您的密码(提示 %s): ", - "signupLastName": "输入您的姓氏(可以为空): ", - "signupWeb": "请注册", - "signupFirstNameWeb": "名字", + "recommend_not_use_filesystem_function": "不建议使用 %s 函数,因为在更新处理期间访问文件系统会减慢您的机器人速度,请参阅 https://docs.madelineproto.xyz/docs/UPDATES.html#avoiding-the-use-of-filesystem-functions 以获取不会减慢您的机器人速度的替代数据存储方法列表!", "plugins_do_not_use_require": "出于性能原因,插件只能通过触发 PSR-4 自动加载器来自动包含或需要插件文件夹中的其他文件(而不是通过手动 require() 它们)。", + "plugins_must_have_exactly_one_class": "一个插件必须定义一个类!要定义多个类、接口或特征,请创建单独的文件,它们将由 MadelineProto 自动加载。", "cli_need_dl.php_link": "通过 CLI 使用 getDownloadLink 时,请指定下载脚本 URL!", "invalid_dl.php_session": "%s 不是有效的下载脚本,因为其会话 ID 不同(预期为 %s,实际为 %s)", - "need_dl.php": "无法生成默认下载脚本(%s),请创建一个包含以下内容的 dl.php 文件:%s 并将其 URL 传递给 getDownloadLink 的第二个参数", + "need_dl.php": "无法生成默认下载脚本(%s),请创建一个包含以下内容的 dl.php 文件:%s 并将其 URL 传递给 getDownloadLink 的第二个参数", + "dl.php_powered_by_madelineproto": "Telegram 文件下载服务器(最高 4GB),由 MadelineProto 提供支持!
单击此处了解有关如何设置您自己的 Telegram 文件下载服务器的更多信息!", "dl.php_check_logs_make_sure_session_running": "相关的 MadelineProto EventHandler 机器人或 MadelineProto IPC 服务器处于离线状态,请检查日志并确保其中至少有一个正在运行!", - "plugin_path_does_not_exist": "插件路径 %s 不存在!", - "windows_warning": "对于 Windows 用户:如果失败,请切换到 Linux。您还可以尝试修改防火墙设置以允许所有 PHP 进程创建套接字(切换到 Linux 更容易,在 Linux 上 MadelineProto 开箱即用,无需进行任何更改)", - "translate_madelineproto_web": "MadelineProto 可以翻译成您的语言(当前翻译进度:%d%%),点击此处为翻译做出贡献!", - "translate_madelineproto_cli": "MadelineProto 可以翻译成您的语言(当前翻译进度:%d%%),请访问 https://weblate.madelineproto.xyz 为翻译做出贡献!", - "loginNoCode": "您没有提供电话代码!", - "2fa_uncalled": "我不等你输入密码!请先调用 phoneLogin 和 completePhoneLogin 方法!", "account_banned": "!!!!!!! 警告 !!!!!!!\nTelegram 的防洪系统已暂停此帐户。\n要继续,需要手动验证。\n发送电子邮件至 recovery@telegram.org,要求解禁电话号码 %s,并简要描述您将如何处理此电话号码。\n然后重新登录。\n如果您有意删除此帐户,请忽略此消息。", + "plugin_path_does_not_exist": "插件路径 %s 不存在!", "could_not_connect_to_MadelineProto": "无法连接到 MadelineProto,请启用 proc_open 并删除 open_basedir 限制或禁用 webserver 路径重写以进行修复!如果您已经这样做了,请确保 PHP 的 CLI 版本与 web 版本完全相同(相同的版本、扩展等),并查看 MadelineProto.log 文件以获取有关阻止 IPC 服务器启动的错误的更多信息。", - "nearest_dc": "我们在 %s,最近的 DC 是 %d。", - "value_bigger_than_2147483647": "提供的值 %s 大于 2147483647", - "encode_double_error": "无法正确编码双重", - "already_loggedIn": "MadelineProto 的这个实例已经登录!", - "extensionRecommended": "警告:未安装 %s 扩展,请安装它以加快 MadelineProto 的速度!", - "apiAppInstructionsManual0": "你的应用名称,可以是任意名称", - "login_code_uncalled": "我不等代码了!请先调用 phoneLogin 方法", - "call_confirming": "确认来自 %s 的呼叫...", - "call_completing": "正在完成来自 %s 的呼叫...", - "long_not_16": "给定值的长度不是 16 个字节", - "could_not_convert_object": "无法转换 %s 类型的对象", - "non_text_conversion": "尚无法转换非文本信息!", - "secret_chat_skipping": "我的数据库中没有秘密聊天 %s,跳过消息...", - "do_not_delete_MadelineProto.log": "绝不能删除 MadelineProto.log 文件,请在设置中设置自定义最大大小!", - "do_not_remove_MadelineProto.log_phar": "请不要删除 madeline.phar 或 madeline.php,否则 MadelineProto 将崩溃。如果您对 MadelineProto 有任何问题,请报告给 https://github.com/danog/MadelineProto 或 https://t.me/pwrtelegramgroup", - "recommend_not_use_filesystem_function": "不建议使用 %s 函数,因为在更新处理期间访问文件系统会减慢您的机器人速度,请参阅 https://docs.madelineproto.xyz/docs/UPDATES.html#avoiding-the-use-of-filesystem-functions 以获取不会减慢您的机器人速度的替代数据存储方法列表!", - "signup_uncalled": "我不等着注册!请先调用 phoneLogin 和 completePhoneLogin 方法!", - "update_madelineproto": "您正在运行旧版本的 MadelineProto,需要更新:当前运行 %s,但最新版本具有多项错误修复和新功能是 %s!", - "plugins_must_have_exactly_one_class": "一个插件必须定义一个类!要定义多个类、接口或特征,请创建单独的文件,它们将由 MadelineProto 自动加载。", - "dl.php_powered_by_madelineproto": "Telegram 文件下载服务器(最高 4GB),由 MadelineProto 提供支持!
单击此处了解有关如何设置您自己的 Telegram 文件下载服务器的更多信息!" + "translate_madelineproto_web": "MadelineProto 可以翻译成您的语言(当前翻译进度:%d%%),点击此处为翻译做出贡献!", + "translate_madelineproto_cli": "MadelineProto 可以翻译成您的语言(当前翻译进度:%d%%),请访问 https://github.com/danog/MadelineProto/tree/v8/langs 为翻译做出贡献!", + "apiInvalidWeb": "API ID 是一个数字,API hash 长度为 32 个字符:请从 my.telegram.org 重新复制。", + "webDoneLead": "MadelineProto 会在服务器上继续运行:您可以关闭此页面。", + "apiChooseManualAuto": "您想从 my.telegram.org 自动获取 API ID 和 hash(a),还是手动输入(m)?", + "apiAutoFallbackManual": "请改为手动输入 API ID 和 hash。", + "apiSetupTitleWeb": "获取您的 API ID 和 hash", + "apiSetupLeadWeb": "每个 Telegram 应用都需要 API ID 和 hash。MadelineProto 可以使用现有 Telegram 帐户的电话号码,为您从 my.telegram.org 获取。", + "apiAutoPhoneHintWeb": "my.telegram.org 会将登录码发送到您的 Telegram 应用,而不是通过短信发送。", + "apiSendCodeWeb": "发送验证码", + "apiChooseManualWeb": "我已有 API ID", + "apiChooseAutoWeb": "自动获取", + "apiStartOverWeb": "重新开始", + "apiAutoCodeTitleWeb": "输入 Telegram 发送的验证码", + "apiAutoCodeLeadWeb": "my.telegram.org 已将登录码发送到您的 Telegram 应用中与 Telegram 的对话里(不是通过短信)。", + "apiAutoCodeLabelWeb": "登录码", + "apiCreateTitleWeb": "创建您的应用", + "apiCreateLeadWeb": "此帐户在 my.telegram.org 上还没有应用。这些信息仅对您可见,以后也可以修改。", + "apiAppTitleLabelWeb": "应用名称", + "apiAppShortNameLabelWeb": "简称", + "apiAppUrlLabelWeb": "URL", + "apiAppDescLabelWeb": "描述", + "apiCreateWeb": "创建应用", + "apiSaveWeb": "保存并继续", + "apiAutoErrorTitle": "my.telegram.org 返回了错误", + "apiCreateErrorTitle": "my.telegram.org 未能创建应用", + "apiCreateVpsWarning": "Telegram 不允许来自 VPS、VPN 及其他数据中心 IP 段的请求在 my.telegram.org 上创建新应用,而此请求是从运行 MadelineProto 的机器的 IP 发出的。请使用家庭网络(例如使用移动数据的手机)访问 https://my.telegram.org 手动创建应用,然后输入 API ID 和 hash。", + "loginTitleWeb": "登录 Telegram", + "loginLeadWeb": "选择此 MadelineProto 实例要使用的帐户或机器人。", + "loginTypeWeb": "登录身份", + "loginUserPhoneHintWeb": "请包含国家代码,例如 +39 123 456 7890。", + "loginBotTokenHintWeb": "创建机器人时 @BotFather 提供给您的令牌。", + "loginCodeTitleWeb": "输入登录码", + "loginCodeLeadWeb": "Telegram 已将登录码发送到您的 Telegram 应用;如果您未在其他地方登录,则会通过短信发送。", + "loginPasswordTitleWeb": "两步验证", + "loginPasswordLeadWeb": "此帐户受密码保护,该密码在“设置”>“隐私与安全”>“两步验证”中设置。", + "loginPasswordLabelWeb": "密码", + "signupTitleWeb": "创建您的帐户", + "signupLeadWeb": "此电话号码尚未注册 Telegram:请为新帐户设置名字。", + "webContinue": "继续", + "webLogin": "登录", + "webError": "%s。请检查后重试。", + "webStepApp": "API ID 和 hash", + "webStepAccount": "帐户", + "webStepVerify": "验证", + "webStepDone": "运行中", + "webProgress": "设置进度", + "webDocs": "文档", + "webOptional": "可选", + "webShowPassword": "显示", + "webHidePassword": "隐藏", + "webQrTitle": "使用二维码登录", + "webQrWaiting": "等待扫描…", + "webFieldRequired": "请填写此字段。", + "webPhoneInvalid": "请输入包含国家代码的电话号码,例如 +39 123 456 7890。", + "tweb.Login.Title": "登录 MadelineProto", + "tweb.Login.PhoneLabelInvalid": "电话号码无效", + "tweb.Login.StartText": "请确认您的国家代码\n并输入您的电话号码。", + "tweb.Login.Code.SentSms": "我们已通过短信\n向您发送验证码。", + "tweb.Login.Code.SentInApp": "我们已通过 Telegram 消息\n向您发送验证码。", + "tweb.Login.Code.SentCall": "我们将致电您\n并告知验证码。", + "tweb.Login.Code.SentEmail": "请查看您的邮箱 **%s**(别忘了查看垃圾邮件文件夹),并输入我们刚刚发送给您的验证码。", + "tweb.Login.Code.SentUnknown": "请在各处查找\n验证码(类型:%s)", + "tweb.Login.Code.SentMissedCall": "几秒钟内您将收到来自 **%s** 的\n一个短暂来电。请不要接听——\n只需输入该号码的最后几位数字。", + "tweb.Login.Code.SentSmsWord": "我们已向您的手机 **%s**\n发送了一条包含密语的短信。", + "tweb.Login.Code.SentSmsWordBeginning": "我们已向您的手机 **%1$s** 发送了一条短信,\n其中包含以“**%2$s**”开头的密语。", + "tweb.Login.Code.SentSmsPhrase": "我们已向您的手机 **%s**\n发送了一条包含密语短句的短信。", + "tweb.Login.Code.SentSmsPhraseBeginning": "我们已向您的手机 **%1$s** 发送了一条短信,\n其中包含以“**%2$s**”开头的密语短句。", + "tweb.Login.Code.SecretWord": "密语", + "tweb.Login.Code.SecretPhrase": "密语短句", + "tweb.Login.Code.WordInvalid": "不正确,请重试", + "tweb.Login.Code.WordBeginningInvalid": "单词不正确", + "tweb.Login.Password.Title": "输入您的密码", + "tweb.Login.Password.Subtitle": "您的帐户受\n附加密码保护", + "tweb.Login.Register.Subtitle": "请输入您的名字\n以创建帐户", + "tweb.PleaseWait": "请稍候...", + "tweb.Code": "验证码", + "tweb.LoginPassword": "密码", + "tweb.YourName": "您的名字", + "tweb.FirstName": "名字(必填)", + "tweb.LastName": "姓氏(可选)", + "tweb.StartMessaging": "开始聊天", + "tweb.Country": "国家/地区", + "tweb.Contacts.PhoneNumber.Placeholder": "电话号码", + "tweb.Login.Next": "下一步", + "tweb.Login.QR.Title": "使用二维码登录", + "tweb.Login.QR.Help1": "在手机上打开 Telegram", + "tweb.Login.QR.Help2": "前往 **设置** > **设备** > **添加设备**", + "tweb.Login.QR.Help3": "将手机对准此屏幕以确认登录", + "tweb.Login.QR.Cancel": "使用电话号码登录 >", + "tweb.Login.QR.Login": "使用二维码登录 >", + "tweb.Login.QR.Subtitle": "使用手机上的 Telegram 应用扫描", + "tweb.PhoneNumber.Code.Fragment.Info": "在 [Fragment]() 的 Numbers 栏目中获取验证码", + "tweb.PHONE_CODE_INVALID": "验证码无效", + "tweb.PHONE_CODE_EXPIRED": "验证码已过期", + "tweb.PASSWORD_HASH_INVALID": "密码不正确", + "tweb.DarkMode": "深色模式", + "tweb.Error.AnError": "发生错误,请稍后重试。", + "tweb.AccDescr.LoginCode": "登录码", + "tweb.Login.Bot": "以机器人身份登录 >", + "tweb.Login.Bot.Title": "以机器人身份登录", + "tweb.Login.Bot.Subtitle": "输入创建机器人时\n@BotFather 提供给您的令牌。", + "tweb.Login.Bot.Token": "机器人令牌", + "tweb.Login.Bot.Cancel": "以用户身份登录 >", + "tweb.Optional": "可选", + "tweb.PHONE_NUMBER_INVALID": "电话号码无效", + "tweb.PHONE_NUMBER_BANNED": "此电话号码已被封禁", + "tweb.PHONE_NUMBER_FLOOD": "尝试次数过多,请稍后重试", + "tweb.PHONE_CODE_EMPTY": "验证码无效", + "tweb.PHONE_PASSWORD_FLOOD": "尝试次数过多,请稍后重试", + "tweb.ACCESS_TOKEN_INVALID": "机器人令牌无效", + "tweb.ACCESS_TOKEN_EXPIRED": "此机器人令牌已被撤销", + "tweb.FIRSTNAME_INVALID": "名字无效", + "tweb.LASTNAME_INVALID": "姓氏无效", + "tweb.Close": "关闭" } diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225_file_ref_map.dat b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225_file_ref_map.dat deleted file mode 100644 index 0c66c61322f049c568577bece2391bb8e6fa765f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54304 zcmdsgTa08$dRFdEclD*FYr49tr>A=^o9@D1nVl&rvo2ZHW4!9=o=Zv7yY23oSOfWrL8gEL-qkgv0~3UqD=!`h!94K5!@ePeEP+5W zAg}qqi1;J^h!f}J$*P`V@H|X)M*Q*LE_(?DqP}LFd8IXgXToZZtPro$dW< zuXDRU8a^h-cU1M82JGIbJsTv$>H79=tySyn#UK^vqtR^APVOgZ+I*a>HiC09H!0ov^N^Aw`;9td#~NFtazx>>7++u zPm=Cz$P^7*)6vkfp!m!uIhq`=xA*Fs$yU;WDt(Ug+I=f&J%FxaaG3Npp+WN#7)y9h7R4iS&*MA&)@-o8L!QyC*SCa4 z3uJvTNuKnQr}vXiuerY2Z0^^#w`_d zB=hwBpxNta>aE&dXMc0MUf#Zsnop9>{aM;;uXj4NW@C4EyE-HFTXnJ8N*nL)QFE${ zx8F$`JKatKQ>eaDsD5e&d#RSY-K4gU;NclD&jh5!L2ovAK)rXg-rnDAG`F|Axqa`> zblPkm-A{%yGQfI!Yjd-{yT9$Uo=4?_qhvtcpx)Ue?`T_xEUlJrHT(Ss&2chW-`VW6 zy7g{jaU74P6oit=qhz|iwcVy@yt!XZby=EBZyyZDv#Ep0Re`ekyS;9@UfW6^sncb+tR{bsA5yxr|mG*8!)*4|EIue&+F#lu7g z!*qQ!+1{#e?d|2ZL3|){W0258M6$J?B=tt%x@CGjj~#CvzeizdeY0EJsU@4;YI@YH z@9f@g9Z!?An)ZGnF@dBvNDikoZpHiLkAMAz%J*)yM?;E`GmLlXt=r%J-mPBe*6mww z)M{Jxy}f#^Uc2@Bt?`7yMY}mosK$=6C~r=h1GM_i>$gCMsxjW)`t)^+rcvMA*{N^V zVrVedmcdfnY}9vlHXF6AfENrRaRdsrWn+7{sJcjIh)OM8Txr`GA||x&|5;n?Ztc|?TRYpExvZE}FUkyMeN=7&5^J)U#NaqH6d<*O6FtyWY)b>aTb6ip-!cn#scfK0=!A^a@z7Kp+J-A$0<*`w^ ztnvbXbjMk_&hbWVtF~LK(-^#$%bZQ?qkPFOa{BPF zv$wOoyGK0ba^ofnQFhFnf$B_<2)nK1H>^8xmwuzRyG`k3jdJ*0#%W@q<|9$IsgGf5 z60$v~5A8J?n>&>J4cN-lOc3+O%&b0JB%SRm>t^{wsAO_~g$ zQM8MC^CpSf4$~*-pyY9TG%oGuTTe~9qU5qxbN%wf4prOQ+1=T%?d`@AQazy9iQMPM z6@|}jn(OW5`U%VoA`KE7SAH}ZqHomNT~iXD%#!~MjXRD4T@!rDoU^}ZVkNu5pny=J%cQ^A> zr*Hx+k=y<_Hzc1Vf2i+l(fU$tKi^_JpVBkxC}(TtLi@Fd)U z6py;(go9*yH0r2{^{17}wSWCvuhhR(sr>F={I|b!o*AY!@ADnAluZ8y%yabjZ~xv` z{}X|Fb!);w?V5~f1K73i|H|&K|Mi{cfdjw)#S6c7BahC-=9JcVTQgc{sH`$C6m4}` zrSkj#;XnSPi>?DJz6hn_>jM3iJWIap!XCk}EF1r@`t+~u{mT*Fg7 z`ekYp^U+HRZ@Qt#q}0F6Z*owD2UMxJ!v463pN71L{<);Xr0sWkw3oGB6pOq6{Wt#j z>Ok)^r5nWMyKl|;<{o!Q`V*p47S4R5@Xhdb)Umw5xVhcJt&+QOI1Yw340XP0Y^iLZJWcCX+Likn`?a;>lU^qw zW6NkT7-ArVe>Dn!-vp>Eyr&}sg!P5kMI;ct~#7n;FI!q!^&$r`>Amn9cFsXNqKx(^GHj%Wa78z zL;-CWr@}5gM#b#HW7K8NNe&0rN9Os$E0!+I7Z5h~`>bfcW@sB}N%p(6%}-}}zWZ~t zWOA(f%V$N~*pFzwJ4;gdEk!^g3j58YiFxf6+Wtx=$*`TUveRfTiLvRLmeZuNw6(9= z`Ed>X^9sY=>scUM)^TOh$H43J!{n*sB0s0KxCDNq2c#!VQw7A6(15JQpOma77zk=v znN8nJHzL4Q)<;{93l7l-qtW|%4jl4XCbuu5Y3njHHSZj6%jz9Exo*0n84Ht%Ne{t0 z`ZMQkF26%U>~cs~j^x;tFDg5Dx#98Bqv5t=5lVgl>&98i4|ubU_+_}?noa&L{PrcI zt8{~b9wzCmuf}9o*EEOBTwTcjQu2f{o3yfKe1WmOjbcI9>MIA1`Hr<``$6wZ`p8V> zW(?0Ab+*us**q7|!+pig+nB74Un||#Z-?tfPA?4Z^ujchzi>72d(P<=ecuu!$-&;+oedKKV{l_G_|fjR2j|#<&#$L7~5d0dAUsy&7aJt zi9yedvf8g@?0=qCr=M_O1rG+2d0G~6m+QE1l+ndk^ZB}$^ph!{wUzzkw7R&JPm>N) zjFHcOUb?4g49(|EGP{V3h)v#{>|QTz&(f6UdLBOL%GzO|DWw}(U^ma~WDrTd;2ZPC z7x4BImKNql#z}NqF(*mVyk{f2FR}7=~2`np0zGP@Mq!hz<~^@6%#LR zQGe_ZguI`{;bfXzUa;-6G-RE^tMEOTwP>k_M0whrbUdAqiVEWyWPB~1Hm6ELc4maM#C{hEi}cEN>Ze#OeHl$tDs)dvG_d^7uJ_sYd}Z9 zj+IU26fV{k{KKue`GBrG^$>(Imx+5WMiD=H9QTNY{n%fJ6Xen9iFpZMB!i3JQihYQ z>%gx(z1kT*Ia(o4KA_X<$Gotn5G<-!$Q`a@^E$I$$Hs`Qb%l8;=O$;yy8Mh9(Ovnu ziB8RzQEmniUO!l&y;M5gpL8ha>CmP{NH??xuT7ab)1zeagx0pdF`D+eIGjzxvF3~8 z46#=!+7CfJkJp?}t(dXYAXh%YIU4Yu=QR)dciuh>@N%wy$%H49-rGLM`!FHBy!{yP zP_)Mp;yLMFM~El3=K)^Ay`8*$8P;#82hOLoUf>*b35jx*JHzxTHe{sVYJKX8iwac# zJM<4(cX14q4vu{Sf6MyBe4cgMd>WqFr_K5!55B51K|bkwi}W$pANyGh|DwKD#4GQk z@!r}W{_2nah|6Mg#3EcvgY+?N)2Y2S;DHaaE*AAWjz_FJ)(c_~bbF4j^^wD+(suv@ zpJU&Zv1=KAW#X8`1;1KJNBtSXP|0`}iyv1^{82k2W^Xs7v#eu~3YtYRQ{^lMpH5!K zv^zDTBT&Z8Xn+Z2bz|G346v(9Gj)Yb|>k}>~A;q8lO?X z+n-D+=0G19e?l2n5>svLxfX5ZViotbA{tlSx{WaOrd;laFxTa&~|lnAyGgC2Gv;b`t*!&gPc)JbUNy7>>ig`TIBjLAb{E0%XGc z1XSqnOZ?lV$GU>}WIOA#H~K(C%+^IXzDTm(5V9Ka@6b_z-V-|eP*&C=9A6|^?OK9a zk04X48BAF@^V)xrWV|lyscyFzqn4F1uRUbELH_?)_fN#%uzxP2n;AKlv9%J&R1|Y1 zJY>Ka_<6_>o~g=aqs=nsji2x{mgQOwt}^2r#ygy= zUWCUOPw*??$@9Z-oQ&l`i}1klrl@c7Jc0dsP5bp-y^CzkZG8heCv{Yc{2RHucdpBz z$=KZH_l^#)*Q6W9U_=Y;IBzaPyJ*~J9(X@C%scGwRHqw~HvHh6DVH{6oX{m?FB*#( z7W4s|H=c!Xd1Hcv!}^!z3v2YGH}ERf*J)lh;&p$i&zP?Quh)Naa4ph*%J3HB1-ad6 z`%M|zMe9ziXYMa~<00z}{bZiMun+K@L(OyXED80#*dD$+Lk9o=Rw}NHHY-h;RBdPw@l!CuMqfnYy$j6pgPn8lpLQR?|HhLci5vVuJrG7bYcj% zT{%v3-;uiGx(iR~IMW!fmJq-8;+yOH9LGJr+}wnuVs2fV*w~aOBVw<-iS7UO29(3h>E!oFqIqRRta5Z*fJ%Z+` zcl!NDy!asDFy3A<`M`z%vSrjgxFP!qd>HzD9&@Ne)0lqCm?&w4If9smS)bu}a+P@z zK(LmF+_+KN~lX@j|EG zGs5eakLYmF%%0QYdEc6aqk0B{4Q)9cuo30bhFD8EchrLy9A8$=#S5EM7y3&K=CVSc zZ3q9r7y%mL9!|Jl#`(~B;CkHaV$N_L{LqVgJbysmj+_E{UyP=>C!3K3a-e-|z250b zHKYHLk_q;@)t_46wJKyA=B?Qy4+z&B7p3tWJ)b4-aN@VjFEBQ#b)1Z(aor$ak?U6Y zeHwgA`WZ0qo++2H&*bUv^R(fs85;^eB_lseTh62Pr@^N4Wc)mB`xAw>)rZNRrG3lL z`_o|KGIE~A&KM6CiNmjD?EGlfO52m(SlFJj-a zIHeuS*cW=bru0NdnLMp)AC`R}5AIp%DG&c?^puD5lnyUJEs+<7_*`-D4-M>x#ZpAjcBcXIb`d_Y%j_6ZFF&^l2+wR@4X zaesuzGjOWTpUc5d-8p;>cQ6>!CmQ$^o)3?;f-pYtzNo@~FnltiQ{a+k@E*?l^3JMB zy~b$qxq3y*p4fAJiq|5a6+PaIQuNgNj86-)#nuj3e#An+#PBS#ZV~D{hA+kkuV3rE z!t7Z)a zvrew@qaJXVn*He^!%$2LVPM;3^)?WFY~o2W;l0DqkLCWK+6z)&Gw^+hP z!)HOR>a!r&O#oK4JIlIdpD2s7=+5y^n?2RYJ!g_=_&BlDwM?)T`})N(?j1jA_UYv= zscWvkfP2Tf+N+l`tNerB`lD6bDfWA;3eC6*U*kOV3d0E?TlSQ+qr)|rW&2XtPWF}3eJGIU(iHp9S^1y~=&Fo=!+%!U zFUWrsiHPs4FpL4PzZDNzpII{HEVs0C=(BbkJ)jG?t4y~|mocY_q8{S1FuKo2VJ=oljHP{k{ypyD(?$nCF*-!uHcJR`OdO`p%Y#m4XlMtH8lNEzc%|a>}}^ z6u-35KOFWxo+Vg*2R!#V;5-vqpXb=HGKCKw+FlpybHKst7he%}a1@;fguL4LCl!8Yrm2lvV^HN-T zU?5k<5Ao`D?4RJ3_InuI%dtZIJeHVooF2RC{{WueJz(4_O)~KG#9vQc zC=Pj{bFl`V)}svY2P1_#!^_JSmK0-P3G#!Z*`O8Tr8BHCJ~B9+F6dD&`nr-so0W~u zyBeIhFxYG}u%wMXB+v7mM=Vn(=QKXquk+3;cLwqA5l#$O-o+CbaU0BMt+DYune%@KVH3`GxEXfzfF)1_C6Y|;lHd~;*A3uNrQX_Hs^b$<|%Onq8V54u*YtoA9mC)LgnH+7ceJxLD-CTp1ZWa$gs==eG&4 zCacM4zz}~}k9A-TuV(wYk>QKS1N_aKBS`$PnfHDVt-;YZwUQ1K5bqTcN;`JAw=d!i zTs=+hA_&0)^9sDQhmI%IDxs_)uim<&e)radAV0T&UEKPj59rD#>fu~QAbEm)%8b#_ zpXV>{P;HVn^NWU2$s9K#l;~nT$wm*N>!Z<^DFh;b~@Vv(Px9%eM zlMg5TXr8O!e4tfTruz^#%&1Lp;`VK#4+A=! z*?8gn!W`;j>yZGi&K%?ubs3q7w=(?_{C&mQSUsF3y8-!)9iw<`@^aSu$3~p2EN=X9 zK(1_H8=i)DzfYRCbSy{ZVi4z@B&(V#asUhYT2gT+EgbjraGhk%5%aA){EN&x;O{Zq zbXJ``3b`n&LB$RBdyGkC=U#dEo|P{0@Gq*1aBqa~4yw%NU7BE!%+eR=C#}Qi@-w0y zhD79fKO zV-RS=j{KMVNQ~}khIQTU9JR;%3wV|(v7tzH2=&T27}sB>WjPwi4x7W?z&wfO#cT_g z(u=R{>0CHk02XO*Yo+%WvmnC12ToW$nYW7&ecN2L)yfnbCI~5B4MGA7a2AHwB>3U#UYUV zsMtSoxI^8*U)Tro@QL$U0SAs($usn9_Zq+(vqrQe9Avu|m90{FjmtgR?v92u@1-L= z3J?1_p)FhkkuuK1dm>qRZbeHZgWhaFA21up^Nr9ic(ik{0PaQC*Ss3m75}v{UD5ME zD|(JL_834r))D+*NuB4&=GNeiaff?xyoRFp;;0MU>GwxZ6SeNixbgQn8V{CGJsxLl z%;o6+Tn~P@znmmblQw0%mz^FBC)(dYD;BRpzQQ$L{4UdO(YGy$%(C# zys3D`YvM$tD4rGJ6nCjI%zz&B$$y#uuy61hxY?(+m$@Xrz!Td~4spx7V6-0T-3#M> z23+&(f|wfe$$6#Er{0Y|39li3{w9`>|G|tF-I{6gO?-bP6R*qYB&73a%^FGpoqI_e z%lO&xp$xs)oaD7|PNLO@TWPelpx67PeNIZ}D%G3fn<)O&!x&_;JB%`R;sYxnkb z0=zFvytIN%AAYdF5-;M=OBOZ&B;B|=+7OaRs1A5IKahHqeumru`@!;^G+J-dY*Sv( z-$|A{f&Z%IiTu&R>pn(5>5Ft(`?xzu@dmCwWd=Ni;9*hw-HP&wIdWnmf^Qq>`zyAM z<MfsMz2p;mKi|}1U@X5GMM;IEF{xwlQ3Olh2{1O2q#d3`^~CvUYQD+ID|8`G zZXHgp`KJ|EF4z0Bv98P>A!L_6y27&RaORDH(C;F?3*0gPrnTz8=kJd?N%mVeW!F5T ze)r+{@r1tqOEV7K-pbh9`4!nw4U2vQSI^A)^`YObrp>{)Pb)#(jmZIHvP&DIZ~vtA zf6=!MDH{?Z*|?Vzh3eQzh7?K_1yGI7G=i2Vleb>kJgJL<>>=)q|ADd zyD!RTzA|V%exN_sMjyb9h>&SRd+_=l5>mN(XV&;3_~iA07>u`%LvL89w$z4oihIW4 zIXa3vnwB9H!^`(t^4@p=ej;OYvk<5K-R!q!gKWH9GUaqm&vG5&ly!7|&x3=XV2p=; zE@E9T=iM@0r$1sH&IOr&*v!5aqs^=|!#ZUB$6!vPe<@cC=OViIc-QV$%)5YjX1oiW z3-gY*)Z8Jl`*_iu{ea(hxvXJSmZ|{AaHdRU!d%Aof?vQtE)=W-NZVhJ@F2gx#dpWW zxq4hHR42}vSB{-_jZ~kFwkw;=8~aio+)36K-FXuV9`{D=86M4f>-fE9dSv4O(=CD( zv;!b}MIF$MofF{ryHRI}P45Y3~=1m&<(vE;|k03xggV z<)0pp3AuOoS(JzNcjtM?7I$Y9wFc@a2P>4s_F_NA&u|@sb*R@da4hw0+@(GmO-I(A zd26GRpBQfD&#aNm9zRY}x_>;v(x`c!dLbH!KWlnV8K?Jgrc|Mka&kYuWZ)Qpf9qm5 zW^w-w_o_3p1^BL*-}+DdJ6J_HAhls{i%!x5x60hrjv#zkK;pZ#bSQ(>zN0UFUy%mRI%>^l`kav4Luyw{vdtnEic~j7+I#xv$AIyTHH@%zeYdd z@-qFm44p5E-7szy-7zlst}zXkbjR3qevY%;*Y*8k9SJzTaGknaY=Q*Wg|Q_Zr~R?? zVM5mhQ`&o0FSb$!cAwV@dCdwj|192arNQx%2kv4ruXTs@s}qSHLyA9Mf(FORT>b-^ zK2GErr^mVG@dCO<~#rEYtLO&-~84Fy{N`9{qJQYEC(I+18|oV z9A{aiUj^%auV{E%fHteD%{zqX{Skk+@rKvVuPck=MTJAL<{^+g|I`0@?}zq&B;Aal zhey1@Me2)GQ8_=xz={!%=DUh-tq0&K$`L|57)QhQR~7DbgVqJ<fZ_h=<*yL{D@=Brj;| z?rq{7qWk>0?W`XT^y4sLd;TtDx`Fog@{dI%^{V8^!6Rg#gD&^5c~Y7OCxafnw5I*O zRHOs9|E}A|-nU^J7vaf!Z%XQ*sD0j>NuiI#Z0W`4935Y$;||t)#ZyX>KNWj(+TT#^ zC&_5iq1lT-Kyf;QLjiFg)E0riy=d1!lTXl@&2vCrd+3Pbl6oh|e9F)CMTf_(#lhv( z+L-1+_N6>MX+PB8gp2hjiyJN-!JX&Fwy&xe_DKd6e{3kNgt1`N#R67?rw7mp-zk#) z5BM%C8jt8;T0ha+p*0_c*DsUyDe^(N4>atkD+UU!Y!4kT4{%XkTPMbYl2v^BRmVM7 zAo1ntQ~8U%?}7K^XuUh~jabODq`wPVk>3Rk^}XWs4NOYc>@P~!v?CzDZ!C4qwhg}- zDq%u;R|UOhuM^edJo`%gHyyqY)q`F1L2t8)rDVao#T*CDU>v94Iv2+9>ehkjtp~c% zoUK#$g3Y}OtV@Lc%Q}$n8EO9X7#qre#qsO$$vP(zYP>rw9ibPdgHKsbhE0F}4mK|0 zedPf2f8=*s9_=sgxAa-&UCQtKD}qOUTh2j4n!s_TtN8{-eae}>SMHC8{o2E! z7Y^;-z#=$`&O|dF_y}|o`u@ zMS1{Fd?z#Az##M3S~c{mBDsp*DPemQ>4tNZWxP|D>U*3qdmt{#{6()9AeT`|IgjSyz1)bXLblbooaO_;=|=f%iv`v+*j% zKYUH*+Sk?Ct5SB(wbjrI9+4-r565t!u52!SHfLQ2{Diro_J1TA9!r@xn8%Zf4H5f* zR$jjIiqb=nGuob))os!E4?12yH+jy>kvxY_ffj#H*Q-26R*;1Nz&l?x!1+RT;z)J@oBTX+`Tc%UebtW*pM!Lw)2?( zeDKM-+k3_qNTu?i@mFr}c_7r`z2zU=`N98yuj4m=-v?zY>bu=(`zYzm`gA`-!e9S* zM#<43C0qUD!}N$&*V;2&6a_Ehtx`33{?)BN`5npy>{&V#@^|SW1ID!9+5G9-%)_#N z3;kz^wV$2*;Q#y)>xKCQtdv2=|Ezq0UZ_*(4|ane_uhu?S*Ve`;2YYIm(Q4hHp&!j zx*~H#JhMLj(m(&-{|2@Pz1V#=&~t0fM2|w8yi*69xQhpT%i8}HfIBCk8ywuzeLvI} zpRtkpk@wqxSHj4;P#%W6{r$i7?;#WZgIuvU${<(XcUaLUftzirZKU_ee(LTY{!5ex zc=>ta3h=JkbqUg!tpCCD2GkOnKg1;gUEb81T3}6U3iv9T&$B-;Poe(#?19oz z$E?N$sco{5itjesCowyI&y0TWIOdD57km59w)#nzx4>&CBIw_-?-Mr^ln6V9upHd z6bWqy8Gj57{th+wcaAThQ51hbEAPIzlBeJ%I8AB_}C`oI>HB)E(!BHG`_Q~NC-NLMKL_r-H@vy;(!4yu!%5&>&jD4_3i_TtOQC z)`c9)l|K5TAx%S-on)QTTX!^}hhG$J*6aBne)AWDIB8#mR=&x(Gr5(m2>P0Q!yP>6 zxuk=JY_*cW2%4Hg+0lKe2*A%yr6=mn;XIRB@A?WrXUv- zV~;u~Pphgac;P$f?ub2VeBYCJ+3sOZCdOHXpBHnmHv&30gzZ8A$jx!A3@s6VGI#Gm z%U}PGzbg=<$2kB?e8ot+f{1)$Mf^L02ZvCQWb-FP~svkalpYCK4 zPWbLM@zy4iA3C(r!$oJpDRdyjZ_%?2o$6>;b&m?+w4JaT3bPOZI#NP3ha; zm1s|e*X#R{ecGxnt5RA|2E$XrX_cNau3E)HUZYF5KTCFsZ=+Tg!RK;Cz38G=S&81m zJLE7)delEAi()l~l&7{NwGTY)_50OPYufA$tIaB1Wt%3SOi8;0KBAPh+9MUGRoX(H zR;MFCAOmF?oIW(_@Ql}IMH_x|L;L5WWb%Z*eD;mewAbzNIm$nCmuAPx2Hj-ZJ|gxN z5d6tP$^PQS4YPV;W^C6o2kW!2)r8uO^>CvcDZPU8=>(yoog>^YhN+$_D z@l3CYR1L#q#h<6g?6_YQya`5ztWex>LT1M`XI$o@_moUu zb$4^ohQ@MQGnbdIPl{K*DRWXBbm!Bsq@LlZoD@&&?(Ru(&AWSiQoLpEd!Gb1b*qXU zPq1p6bBFA8FE)o`iSkeKXcJ5bC&vqW)","op":{"_":"vectorOp","values":[{"_":"copyOp","from":"id"}]}}},{"_":"typedOpArg","key":"peer","value":{"_":"typedOp","type":"InputPeer","op":{"_":"getInputPeerByIdOp","from":"peer"}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceWebPage","action":{"_":"callOp","method":"messages.getWebPage","args":[{"_":"typedOpArg","key":"url","value":{"_":"typedOp","type":"string","op":{"_":"copyOp","from":"url"}}},{"_":"typedOpArg","key":"hash","value":{"_":"typedOp","type":"int","op":{"_":"intLiteralOp","value":0}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceBotApp","action":{"_":"callOp","method":"messages.getBotApp","args":[{"_":"typedOpArg","key":"app","value":{"_":"typedOp","type":"InputBotApp","op":{"_":"constructorOp","constructor":"inputBotAppID","args":[{"_":"typedOpArg","key":"id","value":{"_":"typedOp","type":"long","op":{"_":"copyOp","from":"id"}}},{"_":"typedOpArg","key":"access_hash","value":{"_":"typedOp","type":"long","op":{"_":"copyOp","from":"access_hash"}}}]}}},{"_":"typedOpArg","key":"hash","value":{"_":"typedOp","type":"long","op":{"_":"longLiteralOp","value":0}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceUserFull","action":{"_":"callOp","method":"users.getFullUser","args":[{"_":"typedOpArg","key":"id","value":{"_":"typedOp","type":"InputUser","op":{"_":"getInputUserByIdOp","from":"id"}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceAdminLog","action":{"_":"callOp","method":"channels.getAdminLog","args":[{"_":"typedOpArg","key":"channel","value":{"_":"typedOp","type":"InputChannel","op":{"_":"getInputChannelByIdOp","from":"channel"}}},{"_":"typedOpArg","key":"max_id","value":{"_":"typedOp","type":"long","op":{"_":"copyOp","from":"max_id"}}},{"_":"typedOpArg","key":"min_id","value":{"_":"typedOp","type":"long","op":{"_":"copyOp","from":"max_id"}}},{"_":"typedOpArg","key":"limit","value":{"_":"typedOp","type":"int","op":{"_":"intLiteralOp","value":1}}},{"_":"typedOpArg","key":"q","value":{"_":"typedOp","type":"string","op":{"_":"stringLiteralOp","value":""}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceStoryAlbum","action":{"_":"callOp","method":"stories.getAlbums","args":[{"_":"typedOpArg","key":"peer","value":{"_":"typedOp","type":"InputPeer","op":{"_":"getInputPeerByIdOp","from":"peer"}}},{"_":"typedOpArg","key":"hash","value":{"_":"typedOp","type":"long","op":{"_":"longLiteralOp","value":0}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceBotPreviewMedia","action":{"_":"callOp","method":"bots.getPreviewMedias","args":[{"_":"typedOpArg","key":"bot","value":{"_":"typedOp","type":"InputUser","op":{"_":"getInputUserByIdOp","from":"bot"}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceBotPreviewInfo","action":{"_":"callOp","method":"bots.getPreviewInfo","args":[{"_":"typedOpArg","key":"bot","value":{"_":"typedOp","type":"InputUser","op":{"_":"getInputUserByIdOp","from":"bot"}}},{"_":"typedOpArg","key":"lang_code","value":{"_":"typedOp","type":"string","op":{"_":"copyOp","from":"lang_code"}}}]}},{"_":"refreshAction","stored_constructor":"fileSourcePaidMedia","action":{"_":"callOp","method":"messages.getExtendedMedia","args":[{"_":"typedOpArg","key":"id","value":{"_":"typedOp","type":"Vector","op":{"_":"vectorOp","values":[{"_":"copyOp","from":"id"}]}}},{"_":"typedOpArg","key":"peer","value":{"_":"typedOp","type":"InputPeer","op":{"_":"getInputPeerByIdOp","from":"peer"}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceSavedMusic","action":{"_":"callOp","method":"users.getSavedMusicByID","args":[{"_":"typedOpArg","key":"id","value":{"_":"typedOp","type":"InputUser","op":{"_":"getInputUserByIdOp","from":"user_id"}}},{"_":"typedOpArg","key":"documents","value":{"_":"typedOp","type":"Vector","op":{"_":"vectorOp","values":[{"_":"constructorOp","constructor":"inputDocument","args":[{"_":"typedOpArg","key":"id","value":{"_":"typedOp","type":"long","op":{"_":"copyOp","from":"id"}}},{"_":"typedOpArg","key":"access_hash","value":{"_":"typedOp","type":"long","op":{"_":"copyOp","from":"access_hash"}}},{"_":"typedOpArg","key":"file_reference","value":{"_":"typedOp","type":"bytes","op":{"_":"bytesLiteralOp","value":{"_":"bytes","bytes":""}}}}]}]}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceChatFull","action":{"_":"callOp","method":"messages.getFullChat","args":[{"_":"typedOpArg","key":"chat_id","value":{"_":"typedOp","type":"long","op":{"_":"copyOp","from":"chat_id"}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceChannelFull","action":{"_":"callOp","method":"channels.getFullChannel","args":[{"_":"typedOpArg","key":"channel","value":{"_":"typedOp","type":"InputChannel","op":{"_":"getInputChannelByIdOp","from":"channel"}}}]}},{"_":"refreshAction","stored_constructor":"fileSourcePremiumPromo","action":{"_":"callOp","method":"help.getPremiumPromo","args":[]}},{"_":"refreshAction","stored_constructor":"fileSourceStarsTransaction","action":{"_":"callOp","method":"payments.getStarsTransactionsByID","args":[{"_":"typedOpArg","key":"peer","value":{"_":"typedOp","type":"InputPeer","op":{"_":"getInputPeerByIdOp","from":"peer"}}},{"_":"typedOpArg","key":"ton","value":{"_":"typedOp","type":"true","op":{"_":"copyOp","from":"ton"}}},{"_":"typedOpArg","key":"id","value":{"_":"typedOp","type":"Vector","op":{"_":"vectorOp","values":[{"_":"constructorOp","constructor":"inputStarsTransaction","args":[{"_":"typedOpArg","key":"id","value":{"_":"typedOp","type":"string","op":{"_":"copyOp","from":"id"}}},{"_":"typedOpArg","key":"refund","value":{"_":"typedOp","type":"true","op":{"_":"copyOp","from":"refund"}}}]}]}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceAttachMenuBot","action":{"_":"callOp","method":"messages.getAttachMenuBot","args":[{"_":"typedOpArg","key":"bot","value":{"_":"typedOp","type":"InputUser","op":{"_":"getInputUserByIdOp","from":"bot"}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceTheme","action":{"_":"callOp","method":"account.getTheme","args":[{"_":"typedOpArg","key":"theme","value":{"_":"typedOp","type":"InputTheme","op":{"_":"constructorOp","constructor":"inputTheme","args":[{"_":"typedOpArg","key":"id","value":{"_":"typedOp","type":"long","op":{"_":"copyOp","from":"id"}}},{"_":"typedOpArg","key":"access_hash","value":{"_":"typedOp","type":"long","op":{"_":"copyOp","from":"access_hash"}}}]}}},{"_":"typedOpArg","key":"format","value":{"_":"typedOp","type":"string","op":{"_":"themeFormatLiteralOp"}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceWallPaper","action":{"_":"callOp","method":"account.getWallPaper","args":[{"_":"typedOpArg","key":"wallpaper","value":{"_":"typedOp","type":"InputWallPaper","op":{"_":"constructorOp","constructor":"inputWallPaper","args":[{"_":"typedOpArg","key":"id","value":{"_":"typedOp","type":"long","op":{"_":"copyOp","from":"id"}}},{"_":"typedOpArg","key":"access_hash","value":{"_":"typedOp","type":"long","op":{"_":"copyOp","from":"access_hash"}}}]}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceStickerSet","action":{"_":"callOp","method":"messages.getStickerSet","args":[{"_":"typedOpArg","key":"stickerset","value":{"_":"typedOp","type":"InputStickerSet","op":{"_":"copyOp","from":"stickerset"}}},{"_":"typedOpArg","key":"hash","value":{"_":"typedOp","type":"int","op":{"_":"intLiteralOp","value":0}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceSavedGifs","action":{"_":"callOp","method":"messages.getSavedGifs","args":[{"_":"typedOpArg","key":"hash","value":{"_":"typedOp","type":"long","op":{"_":"longLiteralOp","value":0}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceSavedRingtones","action":{"_":"callOp","method":"account.getSavedRingtones","args":[{"_":"typedOpArg","key":"hash","value":{"_":"typedOp","type":"long","op":{"_":"longLiteralOp","value":0}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceAvailableEffects","action":{"_":"callOp","method":"messages.getAvailableEffects","args":[{"_":"typedOpArg","key":"hash","value":{"_":"typedOp","type":"int","op":{"_":"intLiteralOp","value":0}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceAvailableReactions","action":{"_":"callOp","method":"messages.getAvailableReactions","args":[{"_":"typedOpArg","key":"hash","value":{"_":"typedOp","type":"int","op":{"_":"intLiteralOp","value":0}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceUserProfilePhoto","action":{"_":"callOp","method":"photos.getUserPhotos","args":[{"_":"typedOpArg","key":"user_id","value":{"_":"typedOp","type":"InputUser","op":{"_":"getInputUserByIdOp","from":"user_id"}}},{"_":"typedOpArg","key":"offset","value":{"_":"typedOp","type":"int","op":{"_":"intLiteralOp","value":-1}}},{"_":"typedOpArg","key":"max_id","value":{"_":"typedOp","type":"long","op":{"_":"copyOp","from":"max_id"}}},{"_":"typedOpArg","key":"limit","value":{"_":"typedOp","type":"int","op":{"_":"intLiteralOp","value":1}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceDocumentByHash","action":{"_":"callOp","method":"messages.getDocumentByHash","args":[{"_":"typedOpArg","key":"sha256","value":{"_":"typedOp","type":"bytes","op":{"_":"copyOp","from":"sha256"}}},{"_":"typedOpArg","key":"size","value":{"_":"typedOp","type":"long","op":{"_":"copyOp","from":"size"}}},{"_":"typedOpArg","key":"mime_type","value":{"_":"typedOp","type":"string","op":{"_":"copyOp","from":"mime_type"}}}]}}],"skipped_incoming_sources":[{"_":"skippedSource","predicate":"messages.getSponsoredMessages","is_constructor":false,"why":"Do not store file references from sponsored messages"},{"_":"skippedSource","predicate":"help.getAppUpdate","is_constructor":false,"why":"Don't handle file references from ephemeral app update info"},{"_":"skippedSource","predicate":"help.getRecentMeUrls","is_constructor":false,"why":"Don't handle file references from recent t.me URLs"},{"_":"skippedSource","predicate":"recentMeUrlChatInvite","is_constructor":true,"why":"Do not store references based on chat invite links"},{"_":"skippedSource","predicate":"messages.checkChatInvite","is_constructor":false,"why":"Do not store references based on chat invite links"},{"_":"skippedSource","predicate":"messages.getInlineBotResults","is_constructor":false,"why":"Inline bot results are ephemeral"},{"_":"skippedSource","predicate":"messages.getPreparedInlineMessage","is_constructor":false,"why":"Inline bot results are ephemeral"},{"_":"skippedSource","predicate":"messages.uploadMedia","is_constructor":false,"why":"A freshly uploaded media file will obtain a context only once it is sent to a chat"},{"_":"skippedSource","predicate":"messages.uploadImportedMedia","is_constructor":false,"why":"A freshly uploaded media file will obtain a context only once it is sent to a chat"},{"_":"skippedSource","predicate":"updateServiceNotification","is_constructor":true,"why":"Cannot refetch service notifications"},{"_":"skippedSource","predicate":"messages.getWebPagePreview","is_constructor":false,"why":"No locations are added for the method call, as it doesn't use persistent IDs as input; the location is instead extracted from the persistent IDs in the returned WebPage object"},{"_":"skippedSource","predicate":"payments.resaleStarGifts","is_constructor":true,"why":"Contexts for star gifts are not yet implemented"},{"_":"skippedSource","predicate":"payments.starGiftUpgradePreview","is_constructor":true,"why":"Contexts for star gifts are not yet implemented"},{"_":"skippedSource","predicate":"starGift","is_constructor":true,"why":"Contexts for star gifts are not yet implemented"},{"_":"skippedSource","predicate":"starGiftUnique","is_constructor":true,"why":"Contexts for star gifts are not yet implemented"},{"_":"skippedSource","predicate":"starGiftCollection","is_constructor":true,"why":"Contexts for star gifts are not yet implemented"},{"_":"skippedSource","predicate":"payments.starGiftCollections","is_constructor":true,"why":"Contexts for star gifts are not yet implemented"},{"_":"skippedSource","predicate":"payments.starGiftUpgradeAttributes","is_constructor":true,"why":"Contexts for star gifts are not yet implemented"},{"_":"skippedSource","predicate":"messages.getCustomEmojiDocuments","is_constructor":false,"why":"Do not store file references in this context"},{"_":"skippedSource","predicate":"account.uploadTheme","is_constructor":false,"why":"A freshly uploaded theme file will obtain a context only once it is created via account.createTheme"}]} \ No newline at end of file diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225.json b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232.json similarity index 90% rename from resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225.json rename to resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232.json index be33e4b..52d484a 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225.json +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232.json @@ -1185,7 +1185,7 @@ "type": "User" }, { - "id": "829899656", + "id": "-1313289085", "predicate": "user", "params": [ { @@ -1312,6 +1312,10 @@ "name": "bot_guestchat", "type": "flags2.19?true" }, + { + "name": "bot_guard", + "type": "flags2.20?true" + }, { "name": "id", "type": "long" @@ -1391,6 +1395,10 @@ { "name": "send_paid_messages_stars", "type": "flags2.15?long" + }, + { + "name": "linked_community_id", + "type": "flags2.21?long" } ], "type": "User" @@ -1603,7 +1611,7 @@ "type": "Chat" }, { - "id": "473084188", + "id": "2060538432", "predicate": "channel", "params": [ { @@ -1726,6 +1734,10 @@ "name": "forum_tabs", "type": "flags2.19?true" }, + { + "name": "in_news", + "type": "flags2.21?true" + }, { "name": "id", "type": "long" @@ -1809,6 +1821,14 @@ { "name": "linked_monoforum_id", "type": "flags2.18?long" + }, + { + "name": "linked_community_id", + "type": "flags2.20?long" + }, + { + "name": "pinned_msg_id", + "type": "flags2.22?int" } ], "type": "Chat" @@ -1852,6 +1872,88 @@ ], "type": "Chat" }, + { + "id": "-46343496", + "predicate": "communityForbidden", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "id", + "type": "long" + }, + { + "name": "access_hash", + "type": "flags.13?long" + }, + { + "name": "title", + "type": "string" + } + ], + "type": "Chat" + }, + { + "id": "1710221652", + "predicate": "community", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "creator", + "type": "flags.0?true" + }, + { + "name": "left", + "type": "flags.2?true" + }, + { + "name": "min", + "type": "flags.12?true" + }, + { + "name": "flags2", + "type": "#" + }, + { + "name": "collapsed_in_dialogs", + "type": "flags2.20?true" + }, + { + "name": "id", + "type": "long" + }, + { + "name": "access_hash", + "type": "flags.13?long" + }, + { + "name": "title", + "type": "string" + }, + { + "name": "photo", + "type": "ChatPhoto" + }, + { + "name": "date", + "type": "int" + }, + { + "name": "admin_rights", + "type": "flags.14?ChatAdminRights" + }, + { + "name": "default_banned_rights", + "type": "flags.18?ChatBannedRights" + } + ], + "type": "Chat" + }, { "id": "640893467", "predicate": "chatFull", @@ -1872,6 +1974,10 @@ "name": "translations_disabled", "type": "flags.19?true" }, + { + "name": "has_welcome_messages", + "type": "flags.21?true" + }, { "name": "id", "type": "long" @@ -1944,7 +2050,7 @@ "type": "ChatFull" }, { - "id": "-455036259", + "id": "-993731264", "predicate": "channelFull", "params": [ { @@ -2039,6 +2145,10 @@ "name": "paid_messages_available", "type": "flags2.20?true" }, + { + "name": "has_welcome_messages", + "type": "flags2.24?true" + }, { "name": "id", "type": "long" @@ -2218,6 +2328,53 @@ { "name": "main_tab", "type": "flags2.22?ProfileTab" + }, + { + "name": "guard_bot_id", + "type": "flags2.23?long" + }, + { + "name": "share_theme", + "type": "flags2.25?ShareTheme" + } + ], + "type": "ChatFull" + }, + { + "id": "-877157113", + "predicate": "communityFull", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "id", + "type": "long" + }, + { + "name": "about", + "type": "string" + }, + { + "name": "chat_photo", + "type": "Photo" + }, + { + "name": "linked_peers", + "type": "Vector" + }, + { + "name": "admins_count", + "type": "flags.1?int" + }, + { + "name": "kicked_count", + "type": "flags.2?int" + }, + { + "name": "peer_link_requests_pending", + "type": "flags.0?int" } ], "type": "ChatFull" @@ -2386,7 +2543,7 @@ "type": "Message" }, { - "id": "-1779470549", + "id": "1979759059", "predicate": "message", "params": [ { @@ -2588,6 +2745,10 @@ { "name": "summary_from_language", "type": "flags2.11?string" + }, + { + "name": "rich_message", + "type": "flags2.13?RichMessage" } ], "type": "Message" @@ -4089,7 +4250,7 @@ "type": "MessageAction" }, { - "id": "-423422686", + "id": "2115768711", "predicate": "messageActionStarGiftUnique", "params": [ { @@ -4128,6 +4289,10 @@ "name": "craft", "type": "flags.16?true" }, + { + "name": "name_hidden", + "type": "flags.17?true" + }, { "name": "gift", "type": "StarGift" @@ -4171,6 +4336,10 @@ { "name": "can_craft_at", "type": "flags.15?int" + }, + { + "name": "message", + "type": "flags.18?TextWithEntities" } ], "type": "MessageAction" @@ -4516,6 +4685,108 @@ ], "type": "MessageAction" }, + { + "id": "1562426088", + "predicate": "messageActionChangeCommunity", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "community_id", + "type": "flags.0?long" + } + ], + "type": "MessageAction" + }, + { + "id": "1250688640", + "predicate": "messageActionChatJoinedViaCommunity", + "params": [ + { + "name": "community_id", + "type": "long" + } + ], + "type": "MessageAction" + }, + { + "id": "-1825969613", + "predicate": "messageActionGramTransfer", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "comment_encrypted", + "type": "flags.1?true" + }, + { + "name": "amount", + "type": "long" + }, + { + "name": "peer_address", + "type": "string" + }, + { + "name": "transaction_id", + "type": "string" + }, + { + "name": "comment", + "type": "flags.0?string" + } + ], + "type": "MessageAction" + }, + { + "id": "1773716671", + "predicate": "messageActionWalletTonConnectRequest", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "accepted", + "type": "flags.2?true" + }, + { + "name": "declined", + "type": "flags.3?true" + }, + { + "name": "session_id", + "type": "long" + }, + { + "name": "expires", + "type": "int" + }, + { + "name": "topic", + "type": "flags.0?string" + }, + { + "name": "trace_id", + "type": "flags.1?string" + }, + { + "name": "dapp_name", + "type": "flags.4?string" + } + ], + "type": "MessageAction" + }, + { + "id": "-1043140154", + "predicate": "messageActionNoPaidMessagesTokenUsed", + "params": [], + "type": "MessageAction" + }, { "id": "-58066957", "predicate": "dialog", @@ -4634,6 +4905,29 @@ ], "type": "Dialog" }, + { + "id": "-141948557", + "predicate": "dialogCommunity", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "pinned", + "type": "flags.2?true" + }, + { + "name": "community_id", + "type": "long" + }, + { + "name": "notify_settings", + "type": "PeerNotifySettings" + } + ], + "type": "Dialog" + }, { "id": "590459437", "predicate": "photoEmpty", @@ -5009,6 +5303,17 @@ ], "type": "InputNotifyPeer" }, + { + "id": "666573532", + "predicate": "inputNotifyCommunity", + "params": [ + { + "name": "community", + "type": "InputChannel" + } + ], + "type": "InputNotifyPeer" + }, { "id": "-892638494", "predicate": "inputPeerNotifySettings", @@ -5333,7 +5638,7 @@ "type": "ReportReason" }, { - "id": "114026053", + "id": "-1190384899", "predicate": "userFull", "params": [ { @@ -5575,6 +5880,14 @@ { "name": "bot_manager_id", "type": "flags2.25?long" + }, + { + "name": "wallet_card", + "type": "flags2.19?wallet.Card" + }, + { + "name": "share_theme", + "type": "flags2.27?ShareTheme" } ], "type": "UserFull" @@ -7946,9 +8259,13 @@ "type": "Update" }, { - "id": "299870598", + "id": "2092125561", "predicate": "updateBotChatInviteRequester", "params": [ + { + "name": "flags", + "type": "#" + }, { "name": "peer", "type": "Peer" @@ -7972,6 +8289,10 @@ { "name": "qts", "type": "int" + }, + { + "name": "query_id", + "type": "flags.0?long" } ], "type": "Update" @@ -8986,6 +9307,296 @@ "params": [], "type": "Update" }, + { + "id": "-1112768912", + "predicate": "updateJoinChatWebViewDecision", + "params": [ + { + "name": "peer", + "type": "Peer" + }, + { + "name": "query_id", + "type": "long" + }, + { + "name": "result", + "type": "JoinChatBotResult" + } + ], + "type": "Update" + }, + { + "id": "-1306491994", + "predicate": "updateNewBotConnection", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "confirmed", + "type": "flags.0?true" + }, + { + "name": "bot_id", + "type": "long" + }, + { + "name": "date", + "type": "flags.1?int" + }, + { + "name": "device", + "type": "flags.1?string" + }, + { + "name": "location", + "type": "flags.1?string" + } + ], + "type": "Update" + }, + { + "id": "-1013306658", + "predicate": "updateWebBrowserSettings", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "open_external_browser", + "type": "flags.0?true" + }, + { + "name": "display_close_button", + "type": "flags.1?true" + } + ], + "type": "Update" + }, + { + "id": "335872721", + "predicate": "updateWebBrowserException", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "delete", + "type": "flags.1?true" + }, + { + "name": "open_external_browser", + "type": "flags.0?Bool" + }, + { + "name": "exception", + "type": "WebDomainException" + } + ], + "type": "Update" + }, + { + "id": "549239713", + "predicate": "updateNewEphemeralMessage", + "params": [ + { + "name": "message", + "type": "EphemeralMessage" + } + ], + "type": "Update" + }, + { + "id": "1457257720", + "predicate": "updateDeleteEphemeralMessages", + "params": [ + { + "name": "peer", + "type": "Peer" + }, + { + "name": "ids", + "type": "Vector" + } + ], + "type": "Update" + }, + { + "id": "1270583041", + "predicate": "updateEditEphemeralMessage", + "params": [ + { + "name": "message", + "type": "EphemeralMessage" + } + ], + "type": "Update" + }, + { + "id": "2081454550", + "predicate": "updateEphemeralBotCallbackQuery", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "query_id", + "type": "long" + }, + { + "name": "user_id", + "type": "long" + }, + { + "name": "peer", + "type": "flags.0?Peer" + }, + { + "name": "msg_id", + "type": "int" + }, + { + "name": "data", + "type": "bytes" + }, + { + "name": "chat_instance", + "type": "flags.1?long" + }, + { + "name": "message", + "type": "EphemeralMessage" + } + ], + "type": "Update" + }, + { + "id": "1812827683", + "predicate": "updateBotStarsSubscription", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "canceled", + "type": "flags.0?true" + }, + { + "name": "payment_failed", + "type": "flags.1?true" + }, + { + "name": "restored", + "type": "flags.2?true" + }, + { + "name": "user_id", + "type": "long" + }, + { + "name": "payload", + "type": "bytes" + }, + { + "name": "qts", + "type": "int" + } + ], + "type": "Update" + }, + { + "id": "1791226538", + "predicate": "updateWalletState", + "params": [ + { + "name": "state", + "type": "WalletState" + } + ], + "type": "Update" + }, + { + "id": "-1320989366", + "predicate": "updateSentWalletTransaction", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "gasless", + "type": "flags.0?true" + }, + { + "name": "msg_hash", + "type": "string" + }, + { + "name": "transaction", + "type": "flags.1?WalletTransaction" + } + ], + "type": "Update" + }, + { + "id": "-1464984404", + "predicate": "updateWalletGaslessInfo", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "available", + "type": "flags.0?true" + }, + { + "name": "left", + "type": "int" + }, + { + "name": "reset_at", + "type": "int" + }, + { + "name": "min_amount", + "type": "long" + }, + { + "name": "relayer_address", + "type": "string" + } + ], + "type": "Update" + }, + { + "id": "1352896014", + "predicate": "updateWalletTonConnectSession", + "params": [ + { + "name": "session", + "type": "TonConnectSession" + } + ], + "type": "Update" + }, + { + "id": "-772898407", + "predicate": "updateWalletTonConnectPendingDisconnect", + "params": [ + { + "name": "session_ids", + "type": "Vector" + } + ], + "type": "Update" + }, { "id": "-1519637954", "predicate": "updates.state", @@ -10291,6 +10902,17 @@ ], "type": "NotifyPeer" }, + { + "id": "-1103664743", + "predicate": "notifyCommunity", + "params": [ + { + "name": "community_id", + "type": "long" + } + ], + "type": "NotifyPeer" + }, { "id": "381645902", "predicate": "sendMessageTypingAction", @@ -10448,9 +11070,21 @@ "type": "SendMessageAction" }, { - "id": "929929052", + "id": "909162586", "predicate": "sendMessageTextDraftAction", "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "can_stop", + "type": "flags.0?true" + }, + { + "name": "keep_on_stop", + "type": "flags.1?true" + }, { "name": "random_id", "type": "long" @@ -10462,6 +11096,71 @@ ], "type": "SendMessageAction" }, + { + "id": "-1455962178", + "predicate": "inputSendMessageRichMessageDraftAction", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "can_stop", + "type": "flags.0?true" + }, + { + "name": "keep_on_stop", + "type": "flags.1?true" + }, + { + "name": "random_id", + "type": "long" + }, + { + "name": "rich_message", + "type": "InputRichMessage" + } + ], + "type": "SendMessageAction" + }, + { + "id": "1381386387", + "predicate": "sendMessageRichMessageDraftAction", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "can_stop", + "type": "flags.0?true" + }, + { + "name": "keep_on_stop", + "type": "flags.1?true" + }, + { + "name": "random_id", + "type": "long" + }, + { + "name": "rich_message", + "type": "RichMessage" + } + ], + "type": "SendMessageAction" + }, + { + "id": "-67566928", + "predicate": "sendMessageStopDraftAction", + "params": [ + { + "name": "random_id", + "type": "long" + } + ], + "type": "SendMessageAction" + }, { "id": "-1290580579", "predicate": "contacts.found", @@ -11880,9 +12579,17 @@ "type": "messages.StickerSet" }, { - "id": "-1032140601", + "id": "-1739401518", "predicate": "botCommand", "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "ephemeral", + "type": "flags.0?true" + }, { "name": "command", "type": "string" @@ -11946,342 +12653,8 @@ "type": "BotInfo" }, { - "id": "2098662655", + "id": "795322159", "predicate": "keyboardButton", - "params": [ - { - "name": "flags", - "type": "#" - }, - { - "name": "style", - "type": "flags.10?KeyboardButtonStyle" - }, - { - "name": "text", - "type": "string" - } - ], - "type": "KeyboardButton" - }, - { - "id": "-670292500", - "predicate": "keyboardButtonUrl", - "params": [ - { - "name": "flags", - "type": "#" - }, - { - "name": "style", - "type": "flags.10?KeyboardButtonStyle" - }, - { - "name": "text", - "type": "string" - }, - { - "name": "url", - "type": "string" - } - ], - "type": "KeyboardButton" - }, - { - "id": "-433338016", - "predicate": "keyboardButtonCallback", - "params": [ - { - "name": "flags", - "type": "#" - }, - { - "name": "requires_password", - "type": "flags.0?true" - }, - { - "name": "style", - "type": "flags.10?KeyboardButtonStyle" - }, - { - "name": "text", - "type": "string" - }, - { - "name": "data", - "type": "bytes" - } - ], - "type": "KeyboardButton" - }, - { - "id": "1098841487", - "predicate": "keyboardButtonRequestPhone", - "params": [ - { - "name": "flags", - "type": "#" - }, - { - "name": "style", - "type": "flags.10?KeyboardButtonStyle" - }, - { - "name": "text", - "type": "string" - } - ], - "type": "KeyboardButton" - }, - { - "id": "-1438582451", - "predicate": "keyboardButtonRequestGeoLocation", - "params": [ - { - "name": "flags", - "type": "#" - }, - { - "name": "style", - "type": "flags.10?KeyboardButtonStyle" - }, - { - "name": "text", - "type": "string" - } - ], - "type": "KeyboardButton" - }, - { - "id": "-1726768644", - "predicate": "keyboardButtonSwitchInline", - "params": [ - { - "name": "flags", - "type": "#" - }, - { - "name": "same_peer", - "type": "flags.0?true" - }, - { - "name": "style", - "type": "flags.10?KeyboardButtonStyle" - }, - { - "name": "text", - "type": "string" - }, - { - "name": "query", - "type": "string" - }, - { - "name": "peer_types", - "type": "flags.1?Vector" - } - ], - "type": "KeyboardButton" - }, - { - "id": "-1983540999", - "predicate": "keyboardButtonGame", - "params": [ - { - "name": "flags", - "type": "#" - }, - { - "name": "style", - "type": "flags.10?KeyboardButtonStyle" - }, - { - "name": "text", - "type": "string" - } - ], - "type": "KeyboardButton" - }, - { - "id": "1067792645", - "predicate": "keyboardButtonBuy", - "params": [ - { - "name": "flags", - "type": "#" - }, - { - "name": "style", - "type": "flags.10?KeyboardButtonStyle" - }, - { - "name": "text", - "type": "string" - } - ], - "type": "KeyboardButton" - }, - { - "id": "-183499015", - "predicate": "keyboardButtonUrlAuth", - "params": [ - { - "name": "flags", - "type": "#" - }, - { - "name": "style", - "type": "flags.10?KeyboardButtonStyle" - }, - { - "name": "text", - "type": "string" - }, - { - "name": "fwd_text", - "type": "flags.0?string" - }, - { - "name": "url", - "type": "string" - }, - { - "name": "button_id", - "type": "int" - } - ], - "type": "KeyboardButton" - }, - { - "id": "1744911986", - "predicate": "inputKeyboardButtonUrlAuth", - "params": [ - { - "name": "flags", - "type": "#" - }, - { - "name": "request_write_access", - "type": "flags.0?true" - }, - { - "name": "style", - "type": "flags.10?KeyboardButtonStyle" - }, - { - "name": "text", - "type": "string" - }, - { - "name": "fwd_text", - "type": "flags.1?string" - }, - { - "name": "url", - "type": "string" - }, - { - "name": "bot", - "type": "InputUser" - } - ], - "type": "KeyboardButton" - }, - { - "id": "2047989634", - "predicate": "keyboardButtonRequestPoll", - "params": [ - { - "name": "flags", - "type": "#" - }, - { - "name": "style", - "type": "flags.10?KeyboardButtonStyle" - }, - { - "name": "quiz", - "type": "flags.0?Bool" - }, - { - "name": "text", - "type": "string" - } - ], - "type": "KeyboardButton" - }, - { - "id": "2103314375", - "predicate": "inputKeyboardButtonUserProfile", - "params": [ - { - "name": "flags", - "type": "#" - }, - { - "name": "style", - "type": "flags.10?KeyboardButtonStyle" - }, - { - "name": "text", - "type": "string" - }, - { - "name": "user_id", - "type": "InputUser" - } - ], - "type": "KeyboardButton" - }, - { - "id": "-1057137399", - "predicate": "keyboardButtonUserProfile", - "params": [ - { - "name": "flags", - "type": "#" - }, - { - "name": "style", - "type": "flags.10?KeyboardButtonStyle" - }, - { - "name": "text", - "type": "string" - }, - { - "name": "user_id", - "type": "long" - } - ], - "type": "KeyboardButton" - }, - { - "id": "-398020192", - "predicate": "keyboardButtonWebView", - "params": [ - { - "name": "flags", - "type": "#" - }, - { - "name": "style", - "type": "flags.10?KeyboardButtonStyle" - }, - { - "name": "text", - "type": "string" - }, - { - "name": "url", - "type": "string" - } - ], - "type": "KeyboardButton" - }, - { - "id": "-514047120", - "predicate": "keyboardButtonSimpleWebView", "params": [ { "name": "flags", @@ -12296,105 +12669,8 @@ "type": "string" }, { - "name": "url", - "type": "string" - } - ], - "type": "KeyboardButton" - }, - { - "id": "1527715317", - "predicate": "keyboardButtonRequestPeer", - "params": [ - { - "name": "flags", - "type": "#" - }, - { - "name": "style", - "type": "flags.10?KeyboardButtonStyle" - }, - { - "name": "text", - "type": "string" - }, - { - "name": "button_id", - "type": "int" - }, - { - "name": "peer_type", - "type": "RequestPeerType" - }, - { - "name": "max_quantity", - "type": "int" - } - ], - "type": "KeyboardButton" - }, - { - "id": "45580630", - "predicate": "inputKeyboardButtonRequestPeer", - "params": [ - { - "name": "flags", - "type": "#" - }, - { - "name": "name_requested", - "type": "flags.0?true" - }, - { - "name": "username_requested", - "type": "flags.1?true" - }, - { - "name": "photo_requested", - "type": "flags.2?true" - }, - { - "name": "style", - "type": "flags.10?KeyboardButtonStyle" - }, - { - "name": "text", - "type": "string" - }, - { - "name": "button_id", - "type": "int" - }, - { - "name": "peer_type", - "type": "RequestPeerType" - }, - { - "name": "max_quantity", - "type": "int" - } - ], - "type": "KeyboardButton" - }, - { - "id": "-1127960816", - "predicate": "keyboardButtonCopy", - "params": [ - { - "name": "flags", - "type": "#" - }, - { - "name": "style", - "type": "flags.10?KeyboardButtonStyle" - }, - { - "name": "text", - "type": "string" - }, - { - "name": "copy_text", - "type": "string" + "name": "type", + "type": "ButtonType" } ], "type": "KeyboardButton" @@ -12472,6 +12748,10 @@ "name": "persistent", "type": "flags.4?true" }, + { + "name": "force_reply", + "type": "flags.5?true" + }, { "name": "rows", "type": "Vector" @@ -12484,12 +12764,20 @@ "type": "ReplyMarkup" }, { - "id": "1218642516", + "id": "-1297000592", "predicate": "replyInlineMarkup", "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "force_reply", + "type": "flags.5?true" + }, { "name": "rows", - "type": "Vector" + "type": "Vector" } ], "type": "ReplyMarkup" @@ -12933,6 +13221,21 @@ ], "type": "MessageEntity" }, + { + "id": "-39075891", + "predicate": "messageEntityTonAddress", + "params": [ + { + "name": "offset", + "type": "int" + }, + { + "name": "length", + "type": "int" + } + ], + "type": "MessageEntity" + }, { "id": "-292807034", "predicate": "inputChannelEmpty", @@ -13744,6 +14047,25 @@ ], "type": "InputBotInlineMessage" }, + { + "id": "-1271007892", + "predicate": "inputBotInlineMessageRichMessage", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "reply_markup", + "type": "flags.2?ReplyMarkup" + }, + { + "name": "rich_message", + "type": "InputRichMessage" + } + ], + "type": "InputBotInlineMessage" + }, { "id": "-2000710887", "predicate": "inputBotInlineResult", @@ -14113,6 +14435,25 @@ ], "type": "BotInlineMessage" }, + { + "id": "174161531", + "predicate": "botInlineMessageRichMessage", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "reply_markup", + "type": "flags.2?ReplyMarkup" + }, + { + "name": "rich_message", + "type": "RichMessage" + } + ], + "type": "BotInlineMessage" + }, { "id": "295067450", "predicate": "botInlineResult", @@ -14814,7 +15155,7 @@ "type": "DraftMessage" }, { - "id": "-1763006997", + "id": "1627271828", "predicate": "draftMessage", "params": [ { @@ -14856,6 +15197,10 @@ { "name": "suggested_post", "type": "flags.8?SuggestedPost" + }, + { + "name": "rich_message", + "type": "flags.9?RichMessage" } ], "type": "DraftMessage" @@ -15374,6 +15719,238 @@ ], "type": "RichText" }, + { + "id": "-1657885545", + "predicate": "textMath", + "params": [ + { + "name": "source", + "type": "string" + } + ], + "type": "RichText" + }, + { + "id": "-1570679104", + "predicate": "textCustomEmoji", + "params": [ + { + "name": "document_id", + "type": "long" + }, + { + "name": "alt", + "type": "string" + } + ], + "type": "RichText" + }, + { + "id": "1277844834", + "predicate": "textSpoiler", + "params": [ + { + "name": "text", + "type": "RichText" + } + ], + "type": "RichText" + }, + { + "id": "-853225660", + "predicate": "textMention", + "params": [ + { + "name": "text", + "type": "RichText" + } + ], + "type": "RichText" + }, + { + "id": "1368728810", + "predicate": "textHashtag", + "params": [ + { + "name": "text", + "type": "RichText" + } + ], + "type": "RichText" + }, + { + "id": "50276819", + "predicate": "textBotCommand", + "params": [ + { + "name": "text", + "type": "RichText" + } + ], + "type": "RichText" + }, + { + "id": "2073958401", + "predicate": "textCashtag", + "params": [ + { + "name": "text", + "type": "RichText" + } + ], + "type": "RichText" + }, + { + "id": "-1402305622", + "predicate": "textAutoUrl", + "params": [ + { + "name": "text", + "type": "RichText" + } + ], + "type": "RichText" + }, + { + "id": "-984177571", + "predicate": "textAutoEmail", + "params": [ + { + "name": "text", + "type": "RichText" + } + ], + "type": "RichText" + }, + { + "id": "616720265", + "predicate": "textAutoPhone", + "params": [ + { + "name": "text", + "type": "RichText" + } + ], + "type": "RichText" + }, + { + "id": "-1185513171", + "predicate": "textBankCard", + "params": [ + { + "name": "text", + "type": "RichText" + } + ], + "type": "RichText" + }, + { + "id": "27917308", + "predicate": "textMentionName", + "params": [ + { + "name": "text", + "type": "RichText" + }, + { + "name": "user_id", + "type": "long" + } + ], + "type": "RichText" + }, + { + "id": "-1514906069", + "predicate": "textDate", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "relative", + "type": "flags.0?true" + }, + { + "name": "short_time", + "type": "flags.1?true" + }, + { + "name": "long_time", + "type": "flags.2?true" + }, + { + "name": "short_date", + "type": "flags.3?true" + }, + { + "name": "long_date", + "type": "flags.4?true" + }, + { + "name": "day_of_week", + "type": "flags.5?true" + }, + { + "name": "text", + "type": "RichText" + }, + { + "name": "date", + "type": "int" + } + ], + "type": "RichText" + }, + { + "id": "-1769551024", + "predicate": "textDiff", + "params": [ + { + "name": "text", + "type": "RichText" + }, + { + "name": "old_text", + "type": "RichText" + } + ], + "type": "RichText" + }, + { + "id": "-1345872682", + "predicate": "textButton", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "text", + "type": "RichText" + }, + { + "name": "type", + "type": "InlineButtonType" + }, + { + "name": "style", + "type": "flags.0?RichButtonStyle" + } + ], + "type": "RichText" + }, + { + "id": "1020437354", + "predicate": "textTonAddress", + "params": [ + { + "name": "text", + "type": "RichText" + } + ], + "type": "RichText" + }, { "id": "324435594", "predicate": "pageBlockUnsupported", @@ -15505,9 +16082,17 @@ "type": "PageBlock" }, { - "id": "641563686", + "id": "1724999435", "predicate": "pageBlockBlockquote", "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "collapsed", + "type": "flags.0?true" + }, { "name": "text", "type": "RichText" @@ -15542,6 +16127,10 @@ "name": "flags", "type": "#" }, + { + "name": "spoiler", + "type": "flags.1?true" + }, { "name": "photo_id", "type": "long" @@ -15577,6 +16166,10 @@ "name": "loop", "type": "flags.1?true" }, + { + "name": "spoiler", + "type": "flags.2?true" + }, { "name": "video_id", "type": "long" @@ -15760,6 +16353,10 @@ "name": "striped", "type": "flags.1?true" }, + { + "name": "compact", + "type": "flags.2?true" + }, { "name": "title", "type": "RichText" @@ -15772,12 +16369,28 @@ "type": "PageBlock" }, { - "id": "-1702174239", + "id": "534181569", "predicate": "pageBlockOrderedList", "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "reversed", + "type": "flags.2?true" + }, { "name": "items", "type": "Vector" + }, + { + "name": "start", + "type": "flags.0?int" + }, + { + "name": "type", + "type": "flags.1?string" } ], "type": "PageBlock" @@ -15847,6 +16460,178 @@ ], "type": "PageBlock" }, + { + "id": "-1157691601", + "predicate": "pageBlockHeading1", + "params": [ + { + "name": "text", + "type": "RichText" + } + ], + "type": "PageBlock" + }, + { + "id": "158018284", + "predicate": "pageBlockHeading2", + "params": [ + { + "name": "text", + "type": "RichText" + } + ], + "type": "PageBlock" + }, + { + "id": "1743204781", + "predicate": "pageBlockHeading3", + "params": [ + { + "name": "text", + "type": "RichText" + } + ], + "type": "PageBlock" + }, + { + "id": "-1254983893", + "predicate": "pageBlockHeading4", + "params": [ + { + "name": "text", + "type": "RichText" + } + ], + "type": "PageBlock" + }, + { + "id": "-608277398", + "predicate": "pageBlockHeading5", + "params": [ + { + "name": "text", + "type": "RichText" + } + ], + "type": "PageBlock" + }, + { + "id": "1747599785", + "predicate": "pageBlockHeading6", + "params": [ + { + "name": "text", + "type": "RichText" + } + ], + "type": "PageBlock" + }, + { + "id": "1493699616", + "predicate": "pageBlockMath", + "params": [ + { + "name": "source", + "type": "string" + } + ], + "type": "PageBlock" + }, + { + "id": "1009361890", + "predicate": "pageBlockThinking", + "params": [ + { + "name": "text", + "type": "RichText" + } + ], + "type": "PageBlock" + }, + { + "id": "1464557951", + "predicate": "inputPageBlockMap", + "params": [ + { + "name": "geo", + "type": "InputGeoPoint" + }, + { + "name": "zoom", + "type": "int" + }, + { + "name": "w", + "type": "int" + }, + { + "name": "h", + "type": "int" + }, + { + "name": "caption", + "type": "PageCaption" + } + ], + "type": "PageBlock" + }, + { + "id": "242108356", + "predicate": "pageBlockBlockquoteBlocks", + "params": [ + { + "name": "blocks", + "type": "Vector" + }, + { + "name": "caption", + "type": "RichText" + } + ], + "type": "PageBlock" + }, + { + "id": "1835270936", + "predicate": "pageBlockButtonRow", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "align_left", + "type": "flags.0?true" + }, + { + "name": "align_center", + "type": "flags.1?true" + }, + { + "name": "align_right", + "type": "flags.2?true" + }, + { + "name": "buttons", + "type": "Vector" + } + ], + "type": "PageBlock" + }, + { + "id": "955923363", + "predicate": "pageBlockDocument", + "params": [ + { + "name": "document_id", + "type": "long" + }, + { + "name": "caption", + "type": "PageCaption" + } + ], + "type": "PageBlock" + }, { "id": "-2048646399", "predicate": "phoneCallDiscardReasonMissed", @@ -18331,6 +19116,17 @@ ], "type": "InputDialogPeer" }, + { + "id": "1777300164", + "predicate": "inputDialogPeerCommunity", + "params": [ + { + "name": "community", + "type": "InputChannel" + } + ], + "type": "InputDialogPeer" + }, { "id": "-445792507", "predicate": "dialogPeer", @@ -18353,6 +19149,17 @@ ], "type": "DialogPeer" }, + { + "id": "795199716", + "predicate": "dialogPeerCommunity", + "params": [ + { + "name": "community_id", + "type": "long" + } + ], + "type": "DialogPeer" + }, { "id": "223655517", "predicate": "messages.foundStickerSetsNotModified", @@ -19373,9 +20180,21 @@ "type": "PageCaption" }, { - "id": "-1188055347", + "id": "794323004", "predicate": "pageListItemText", "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "checkbox", + "type": "flags.0?true" + }, + { + "name": "checked", + "type": "flags.1?true" + }, { "name": "text", "type": "RichText" @@ -19384,9 +20203,21 @@ "type": "PageListItem" }, { - "id": "635466748", + "id": "1674209194", "predicate": "pageListItemBlocks", "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "checkbox", + "type": "flags.0?true" + }, + { + "name": "checked", + "type": "flags.1?true" + }, { "name": "blocks", "type": "Vector" @@ -19395,31 +20226,71 @@ "type": "PageListItem" }, { - "id": "1577484359", + "id": "352522633", "predicate": "pageListOrderedItemText", "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "checkbox", + "type": "flags.0?true" + }, + { + "name": "checked", + "type": "flags.1?true" + }, { "name": "num", - "type": "string" + "type": "flags.2?string" }, { "name": "text", "type": "RichText" + }, + { + "name": "value", + "type": "flags.3?int" + }, + { + "name": "type", + "type": "flags.4?string" } ], "type": "PageListOrderedItem" }, { - "id": "-1730311882", + "id": "-1879910928", "predicate": "pageListOrderedItemBlocks", "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "checkbox", + "type": "flags.0?true" + }, + { + "name": "checked", + "type": "flags.1?true" + }, { "name": "num", - "type": "string" + "type": "flags.2?string" }, { "name": "blocks", "type": "Vector" + }, + { + "name": "value", + "type": "flags.3?int" + }, + { + "name": "type", + "type": "flags.4?string" } ], "type": "PageListOrderedItem" @@ -19850,6 +20721,14 @@ { "name": "manage_ranks", "type": "flags.18?true" + }, + { + "name": "manage_linked_peers", + "type": "flags.19?true" + }, + { + "name": "manage_welcome_messages", + "type": "flags.20?true" } ], "type": "ChatAdminRights" @@ -19950,6 +20829,10 @@ "name": "send_reactions", "type": "flags.27?true" }, + { + "name": "manage_linked_peers", + "type": "flags.28?true" + }, { "name": "until_date", "type": "int" @@ -20347,7 +21230,7 @@ "type": "messages.SearchCounter" }, { - "id": "1020666860", + "id": "-1110810265", "predicate": "urlAuthResultRequest", "params": [ { @@ -20370,6 +21253,10 @@ "name": "is_app", "type": "flags.6?true" }, + { + "name": "request_wallet", + "type": "flags.8?true" + }, { "name": "bot", "type": "User" @@ -20405,6 +21292,14 @@ { "name": "verified_app_name", "type": "flags.7?string" + }, + { + "name": "tc_session_id", + "type": "flags.9?long" + }, + { + "name": "tc_client_id", + "type": "flags.10?string" } ], "type": "UrlAuthResult" @@ -21738,7 +22633,7 @@ "type": "messages.DiscussionMessage" }, { - "id": "462937446", + "id": "-575296651", "predicate": "messageReplyHeader", "params": [ { @@ -21757,6 +22652,10 @@ "name": "quote", "type": "flags.9?true" }, + { + "name": "reply_to_ephemeral", + "type": "flags.13?true" + }, { "name": "reply_to_msg_id", "type": "flags.4?int" @@ -21796,6 +22695,10 @@ { "name": "poll_option", "type": "flags.12?bytes" + }, + { + "name": "quote_rich", + "type": "flags.14?Vector" } ], "type": "MessageReplyHeader" @@ -23362,6 +24265,10 @@ "name": "fullscreen", "type": "flags.2?true" }, + { + "name": "same_origin", + "type": "flags.3?true" + }, { "name": "query_id", "type": "flags.0?long" @@ -23688,7 +24595,7 @@ "type": "InputInvoice" }, { - "id": "-1012968668", + "id": "-374290856", "predicate": "inputInvoiceStarGiftResale", "params": [ { @@ -23699,6 +24606,10 @@ "name": "ton", "type": "flags.0?true" }, + { + "name": "show_name", + "type": "flags.2?true" + }, { "name": "slug", "type": "string" @@ -23706,6 +24617,10 @@ { "name": "to_id", "type": "InputPeer" + }, + { + "name": "message", + "type": "flags.1?TextWithEntities" } ], "type": "InputInvoice" @@ -24554,6 +25469,14 @@ "name": "active", "type": "flags.1?true" }, + { + "name": "deletable", + "type": "flags.2?true" + }, + { + "name": "expired", + "type": "flags.3?true" + }, { "name": "username", "type": "string" @@ -25817,7 +26740,7 @@ "type": "stories.StoryViews" }, { - "id": "1003796418", + "id": "1975627120", "predicate": "inputReplyToMessage", "params": [ { @@ -25859,6 +26782,10 @@ { "name": "poll_option", "type": "flags.7?bytes" + }, + { + "name": "quote_rich", + "type": "flags.8?Vector" } ], "type": "InputReplyTo" @@ -25889,6 +26816,17 @@ ], "type": "InputReplyTo" }, + { + "id": "1092204894", + "predicate": "inputReplyToEphemeralMessage", + "params": [ + { + "name": "id", + "type": "int" + } + ], + "type": "InputReplyTo" + }, { "id": "1070138683", "predicate": "exportedStoryLink", @@ -27603,7 +28541,7 @@ "type": "messages.QuickReplies" }, { - "id": "-849058964", + "id": "54448129", "predicate": "connectedBot", "params": [ { @@ -27621,6 +28559,18 @@ { "name": "rights", "type": "BusinessBotRights" + }, + { + "name": "device", + "type": "flags.0?string" + }, + { + "name": "date", + "type": "flags.1?int" + }, + { + "name": "location", + "type": "flags.2?string" } ], "type": "ConnectedBot" @@ -29627,7 +30577,7 @@ "type": "messages.FoundStickers" }, { - "id": "-1328716265", + "id": "-1591021569", "predicate": "botVerifierSettings", "params": [ { @@ -29648,13 +30598,13 @@ }, { "name": "custom_description", - "type": "flags.0?string" + "type": "flags.0?TextWithEntities" } ], "type": "BotVerifierSettings" }, { - "id": "-113453988", + "id": "-147976487", "predicate": "botVerification", "params": [ { @@ -29667,7 +30617,7 @@ }, { "name": "description", - "type": "string" + "type": "TextWithEntities" } ], "type": "BotVerification" @@ -31375,17 +32325,6 @@ ], "type": "InputPasskeyCredential" }, - { - "id": "1528613672", - "predicate": "inputPasskeyCredentialFirebasePNV", - "params": [ - { - "name": "pnv_token", - "type": "string" - } - ], - "type": "InputPasskeyCredential" - }, { "id": "-1342872680", "predicate": "starGiftBackground", @@ -31692,6 +32631,17 @@ ], "type": "InputAiComposeTone" }, + { + "id": "235681199", + "predicate": "inputAiComposeToneSingleUse", + "params": [ + { + "name": "custom_prompt", + "type": "string" + } + ], + "type": "InputAiComposeTone" + }, { "id": "-805945687", "predicate": "aiComposeTone", @@ -31820,2890 +32770,5044 @@ } ], "type": "bots.AccessSettings" - } - ], - "methods": [ + }, { - "id": "-878758099", - "method": "invokeAfterMsg", + "id": "1146512295", + "predicate": "messages.chatInviteJoinResultOk", "params": [ { - "name": "msg_id", + "name": "updates", + "type": "Updates" + } + ], + "type": "messages.ChatInviteJoinResult" + }, + { + "id": "1640638931", + "predicate": "messages.chatInviteJoinResultWebView", + "params": [ + { + "name": "bot_id", "type": "long" }, { - "name": "query", - "type": "!X" + "name": "query_id", + "type": "long" + }, + { + "name": "users", + "type": "Vector" } ], - "type": "X" + "type": "messages.ChatInviteJoinResult" }, { - "id": "1036301552", - "method": "invokeAfterMsgs", + "id": "-1374344599", + "predicate": "joinChatBotResultApproved", + "params": [], + "type": "JoinChatBotResult" + }, + { + "id": "251265428", + "predicate": "joinChatBotResultDeclined", + "params": [], + "type": "JoinChatBotResult" + }, + { + "id": "-1734105024", + "predicate": "joinChatBotResultQueued", + "params": [], + "type": "JoinChatBotResult" + }, + { + "id": "-689719277", + "predicate": "joinChatBotResultWebView", "params": [ { - "name": "msg_ids", - "type": "Vector" - }, - { - "name": "query", - "type": "!X" + "name": "url", + "type": "string" } ], - "type": "X" + "type": "JoinChatBotResult" }, { - "id": "-1043505495", - "method": "initConnection", + "id": "-1824741993", + "predicate": "webDomainException", "params": [ { "name": "flags", "type": "#" }, { - "name": "api_id", - "type": "int" - }, - { - "name": "device_model", + "name": "domain", "type": "string" }, { - "name": "system_version", + "name": "url", "type": "string" }, { - "name": "app_version", + "name": "title", "type": "string" }, { - "name": "system_lang_code", - "type": "string" + "name": "favicon", + "type": "flags.0?long" + } + ], + "type": "WebDomainException" + }, + { + "id": "-1021538482", + "predicate": "account.webBrowserSettingsNotModified", + "params": [], + "type": "account.WebBrowserSettings" + }, + { + "id": "2045480115", + "predicate": "account.webBrowserSettings", + "params": [ + { + "name": "flags", + "type": "#" }, { - "name": "lang_pack", - "type": "string" + "name": "open_external_browser", + "type": "flags.0?true" }, { - "name": "lang_code", - "type": "string" + "name": "display_close_button", + "type": "flags.1?true" }, { - "name": "proxy", - "type": "flags.0?InputClientProxy" + "name": "external_exceptions", + "type": "Vector" }, { - "name": "params", - "type": "flags.1?JSONValue" + "name": "inapp_exceptions", + "type": "Vector" }, { - "name": "query", - "type": "!X" + "name": "hash", + "type": "long" } ], - "type": "X" + "type": "account.WebBrowserSettings" }, { - "id": "-627372787", - "method": "invokeWithLayer", + "id": "-1694473685", + "predicate": "inputRichFilePhoto", "params": [ { - "name": "layer", - "type": "int" + "name": "id", + "type": "string" }, { - "name": "query", - "type": "!X" + "name": "photo", + "type": "InputPhoto" } ], - "type": "X" + "type": "InputRichFile" }, { - "id": "-1080796745", - "method": "invokeWithoutUpdates", + "id": "-2094522947", + "predicate": "inputRichFileDocument", "params": [ { - "name": "query", - "type": "!X" + "name": "id", + "type": "string" + }, + { + "name": "document", + "type": "InputDocument" } ], - "type": "X" + "type": "InputRichFile" }, { - "id": "911373810", - "method": "invokeWithMessagesRange", + "id": "-456898052", + "predicate": "inputRichMessage", "params": [ { - "name": "range", - "type": "MessageRange" + "name": "flags", + "type": "#" }, { - "name": "query", - "type": "!X" - } - ], - "type": "X" - }, - { - "id": "-1398145746", - "method": "invokeWithTakeout", - "params": [ + "name": "rtl", + "type": "flags.0?true" + }, { - "name": "takeout_id", - "type": "long" + "name": "noautolink", + "type": "flags.1?true" }, { - "name": "query", - "type": "!X" - } - ], - "type": "X" - }, - { - "id": "-584540274", - "method": "invokeWithBusinessConnection", - "params": [ + "name": "blocks", + "type": "Vector" + }, { - "name": "connection_id", - "type": "string" + "name": "photos", + "type": "flags.2?Vector" }, { - "name": "query", - "type": "!X" + "name": "documents", + "type": "flags.3?Vector" + }, + { + "name": "users", + "type": "flags.4?Vector" } ], - "type": "X" + "type": "InputRichMessage" }, { - "id": "502868356", - "method": "invokeWithGooglePlayIntegrity", + "id": "-624196758", + "predicate": "inputRichMessageHTML", "params": [ { - "name": "nonce", - "type": "string" + "name": "flags", + "type": "#" }, { - "name": "token", + "name": "rtl", + "type": "flags.0?true" + }, + { + "name": "noautolink", + "type": "flags.1?true" + }, + { + "name": "html", "type": "string" }, { - "name": "query", - "type": "!X" + "name": "files", + "type": "flags.2?Vector" } ], - "type": "X" + "type": "InputRichMessage" }, { - "id": "229528824", - "method": "invokeWithApnsSecret", + "id": "4937516", + "predicate": "inputRichMessageMarkdown", "params": [ { - "name": "nonce", - "type": "string" + "name": "flags", + "type": "#" }, { - "name": "secret", + "name": "rtl", + "type": "flags.0?true" + }, + { + "name": "noautolink", + "type": "flags.1?true" + }, + { + "name": "markdown", "type": "string" }, { - "name": "query", - "type": "!X" + "name": "files", + "type": "flags.2?Vector" } ], - "type": "X" + "type": "InputRichMessage" }, { - "id": "-1380249708", - "method": "invokeWithReCaptcha", + "id": "-1158439541", + "predicate": "richMessage", "params": [ { - "name": "token", - "type": "string" + "name": "flags", + "type": "#" }, { - "name": "query", - "type": "!X" + "name": "rtl", + "type": "flags.0?true" + }, + { + "name": "part", + "type": "flags.1?true" + }, + { + "name": "blocks", + "type": "Vector" + }, + { + "name": "photos", + "type": "Vector" + }, + { + "name": "documents", + "type": "Vector" } ], - "type": "X" + "type": "RichMessage" }, { - "id": "-1502141361", - "method": "auth.sendCode", + "id": "1981030077", + "predicate": "communityPeer", "params": [ { - "name": "phone_number", - "type": "string" + "name": "flags", + "type": "#" }, { - "name": "api_id", - "type": "int" + "name": "can_view_history", + "type": "flags.2?true" }, { - "name": "api_hash", - "type": "string" + "name": "visible", + "type": "flags.0?Bool" }, { - "name": "settings", - "type": "CodeSettings" + "name": "peer", + "type": "Peer" } ], - "type": "auth.SentCode" + "type": "CommunityPeer" }, { - "id": "-1429752041", - "method": "auth.signUp", + "id": "2078997125", + "predicate": "communityPeerRequest", "params": [ { "name": "flags", "type": "#" }, { - "name": "no_joined_notifications", + "name": "visible", "type": "flags.0?true" }, { - "name": "phone_number", - "type": "string" - }, - { - "name": "phone_code_hash", - "type": "string" + "name": "peer", + "type": "Peer" }, { - "name": "first_name", - "type": "string" + "name": "requested_by", + "type": "long" }, { - "name": "last_name", - "type": "string" + "name": "date", + "type": "int" } ], - "type": "auth.Authorization" + "type": "CommunityPeerRequest" }, { - "id": "-1923962543", - "method": "auth.signIn", + "id": "574926765", + "predicate": "communities.peerLinkRequests", "params": [ { "name": "flags", "type": "#" }, { - "name": "phone_number", - "type": "string" + "name": "total_count", + "type": "int" }, { - "name": "phone_code_hash", - "type": "string" + "name": "requests", + "type": "Vector" }, { - "name": "phone_code", + "name": "next_offset", "type": "flags.0?string" }, { - "name": "email_verification", - "type": "flags.1?EmailVerification" - } - ], - "type": "auth.Authorization" - }, - { - "id": "1047706137", - "method": "auth.logOut", - "params": [], - "type": "auth.LoggedOut" - }, - { - "id": "-1616179942", - "method": "auth.resetAuthorizations", - "params": [], - "type": "Bool" - }, - { - "id": "-440401971", - "method": "auth.exportAuthorization", - "params": [ + "name": "chats", + "type": "Vector" + }, { - "name": "dc_id", - "type": "int" + "name": "users", + "type": "Vector" } ], - "type": "auth.ExportedAuthorization" + "type": "communities.PeerLinkRequests" }, { - "id": "-1518699091", - "method": "auth.importAuthorization", + "id": "-584597783", + "predicate": "ephemeralMessage", "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "out", + "type": "flags.0?true" + }, + { + "name": "welcome_template", + "type": "flags.5?true" + }, + { + "name": "invert_media", + "type": "flags.7?true" + }, + { + "name": "noforwards", + "type": "flags.12?true" + }, { "name": "id", - "type": "long" + "type": "int" }, { - "name": "bytes", - "type": "bytes" - } - ], - "type": "auth.Authorization" - }, - { - "id": "-841733627", - "method": "auth.bindTempAuthKey", - "params": [ + "name": "from_id", + "type": "Peer" + }, { - "name": "perm_auth_key_id", - "type": "long" + "name": "peer_id", + "type": "flags.9?Peer" }, { - "name": "nonce", + "name": "receiver_id", "type": "long" }, { - "name": "expires_at", + "name": "top_msg_id", + "type": "flags.1?int" + }, + { + "name": "date", "type": "int" }, { - "name": "encrypted_message", - "type": "bytes" + "name": "message", + "type": "string" + }, + { + "name": "entities", + "type": "flags.2?Vector" + }, + { + "name": "media", + "type": "flags.3?MessageMedia" + }, + { + "name": "reply_markup", + "type": "flags.4?ReplyMarkup" + }, + { + "name": "reply_to", + "type": "flags.6?MessageReplyHeader" + }, + { + "name": "rich_message", + "type": "flags.8?RichMessage" + }, + { + "name": "chat_instance", + "type": "flags.10?long" + }, + { + "name": "anchor_msg_id", + "type": "flags.11?int" } ], - "type": "Bool" + "type": "EphemeralMessage" }, { - "id": "1738800940", - "method": "auth.importBotAuthorization", + "id": "-1921494742", + "predicate": "communities.participantJoinedChats", "params": [ { - "name": "flags", - "type": "int" + "name": "creator_chat_ids", + "type": "Vector" }, { - "name": "api_id", - "type": "int" + "name": "joined_chat_ids", + "type": "Vector" }, { - "name": "api_hash", - "type": "string" + "name": "chats", + "type": "Vector" }, { - "name": "bot_auth_token", - "type": "string" + "name": "users", + "type": "Vector" } ], - "type": "auth.Authorization" + "type": "communities.ParticipantJoinedChats" }, { - "id": "-779399914", - "method": "auth.checkPassword", + "id": "1107532175", + "predicate": "messages.translatedRichMessage", "params": [ { - "name": "password", - "type": "InputCheckPasswordSRP" + "name": "result", + "type": "Vector" } ], - "type": "auth.Authorization" + "type": "messages.TranslatedRichMessage" }, { - "id": "-661144474", - "method": "auth.requestPasswordRecovery", + "id": "1279604680", + "predicate": "messages.composedRichMessageWithAI", + "params": [ + { + "name": "result", + "type": "RichMessage" + } + ], + "type": "messages.ComposedRichMessageWithAI" + }, + { + "id": "-908226327", + "predicate": "buttonTypeDefault", "params": [], - "type": "auth.PasswordRecovery" + "type": "ButtonType" }, { - "id": "923364464", - "method": "auth.recoverPassword", + "id": "-549636359", + "predicate": "buttonTypeRequestPhone", + "params": [], + "type": "ButtonType" + }, + { + "id": "-1678843584", + "predicate": "buttonTypeRequestGeoLocation", + "params": [], + "type": "ButtonType" + }, + { + "id": "-1429209212", + "predicate": "buttonTypeRequestPoll", "params": [ { "name": "flags", "type": "#" }, { - "name": "code", - "type": "string" - }, - { - "name": "new_settings", - "type": "flags.0?account.PasswordInputSettings" + "name": "quiz", + "type": "flags.0?Bool" } ], - "type": "auth.Authorization" + "type": "ButtonType" }, { - "id": "-890997469", - "method": "auth.resendCode", + "id": "1331208759", + "predicate": "buttonTypeRequestPeer", "params": [ { "name": "flags", "type": "#" }, { - "name": "phone_number", - "type": "string" + "name": "button_id", + "type": "int" }, { - "name": "phone_code_hash", - "type": "string" + "name": "peer_type", + "type": "RequestPeerType" }, { - "name": "reason", - "type": "flags.0?string" + "name": "max_quantity", + "type": "int" } ], - "type": "auth.SentCode" + "type": "ButtonType" }, { - "id": "520357240", - "method": "auth.cancelCode", + "id": "1071802622", + "predicate": "inputButtonTypeRequestPeer", "params": [ { - "name": "phone_number", - "type": "string" + "name": "flags", + "type": "#" }, { - "name": "phone_code_hash", - "type": "string" - } - ], - "type": "Bool" - }, - { - "id": "-1907842680", - "method": "auth.dropTempAuthKeys", - "params": [ + "name": "name_requested", + "type": "flags.0?true" + }, { - "name": "except_auth_keys", - "type": "Vector" - } - ], - "type": "Bool" - }, - { - "id": "-1210022402", - "method": "auth.exportLoginToken", - "params": [ + "name": "username_requested", + "type": "flags.1?true" + }, { - "name": "api_id", - "type": "int" + "name": "photo_requested", + "type": "flags.2?true" }, { - "name": "api_hash", - "type": "string" + "name": "button_id", + "type": "int" }, { - "name": "except_ids", - "type": "Vector" - } - ], - "type": "auth.LoginToken" - }, - { - "id": "-1783866140", - "method": "auth.importLoginToken", - "params": [ + "name": "peer_type", + "type": "RequestPeerType" + }, { - "name": "token", - "type": "bytes" + "name": "max_quantity", + "type": "int" } ], - "type": "auth.LoginToken" + "type": "ButtonType" }, { - "id": "-392909491", - "method": "auth.acceptLoginToken", + "id": "-1072014982", + "predicate": "buttonTypeSimpleWebView", "params": [ { - "name": "token", - "type": "bytes" + "name": "url", + "type": "string" } ], - "type": "Authorization" + "type": "ButtonType" }, { - "id": "221691769", - "method": "auth.checkRecoveryPassword", + "id": "-324732716", + "predicate": "inlineButtonTypeUrl", "params": [ { - "name": "code", + "name": "url", "type": "string" } ], - "type": "Bool" + "type": "InlineButtonType" }, { - "id": "767062953", - "method": "auth.importWebTokenAuthorization", + "id": "-1076875870", + "predicate": "inlineButtonTypeUrlAuth", "params": [ { - "name": "api_id", - "type": "int" + "name": "flags", + "type": "#" }, { - "name": "api_hash", - "type": "string" + "name": "fwd_text", + "type": "flags.0?string" }, { - "name": "web_auth_token", + "name": "url", "type": "string" + }, + { + "name": "button_id", + "type": "int" } ], - "type": "auth.Authorization" + "type": "InlineButtonType" }, { - "id": "-1908857314", - "method": "auth.requestFirebaseSms", + "id": "-1721647948", + "predicate": "inputInlineButtonTypeUrlAuth", "params": [ { "name": "flags", "type": "#" }, { - "name": "phone_number", - "type": "string" - }, - { - "name": "phone_code_hash", - "type": "string" + "name": "request_write_access", + "type": "flags.0?true" }, { - "name": "safety_net_token", - "type": "flags.0?string" + "name": "fwd_text", + "type": "flags.1?string" }, { - "name": "play_integrity_token", - "type": "flags.2?string" + "name": "url", + "type": "string" }, { - "name": "ios_push_secret", - "type": "flags.1?string" + "name": "bot", + "type": "flags.2?InputUser" } ], - "type": "Bool" + "type": "InlineButtonType" }, { - "id": "2123760019", - "method": "auth.resetLoginEmail", + "id": "1003140532", + "predicate": "inlineButtonTypeWebView", "params": [ { - "name": "phone_number", - "type": "string" - }, - { - "name": "phone_code_hash", + "name": "url", "type": "string" } ], - "type": "auth.SentCode" + "type": "InlineButtonType" }, { - "id": "-878841866", - "method": "auth.reportMissingCode", + "id": "693484600", + "predicate": "inlineButtonTypeCallback", "params": [ { - "name": "phone_number", - "type": "string" + "name": "flags", + "type": "#" }, { - "name": "phone_code_hash", - "type": "string" + "name": "requires_password", + "type": "flags.0?true" }, { - "name": "mnc", - "type": "string" + "name": "data", + "type": "bytes" } ], - "type": "Bool" + "type": "InlineButtonType" }, { - "id": "1457889180", - "method": "auth.checkPaidAuth", + "id": "1557360797", + "predicate": "inlineButtonTypeGame", + "params": [], + "type": "InlineButtonType" + }, + { + "id": "1220204453", + "predicate": "inlineButtonTypeBuy", + "params": [], + "type": "InlineButtonType" + }, + { + "id": "-1820901387", + "predicate": "inlineButtonTypeSwitchInline", "params": [ { - "name": "phone_number", - "type": "string" + "name": "flags", + "type": "#" }, { - "name": "phone_code_hash", + "name": "same_peer", + "type": "flags.0?true" + }, + { + "name": "query", "type": "string" }, { - "name": "form_id", + "name": "peer_types", + "type": "flags.1?Vector" + } + ], + "type": "InlineButtonType" + }, + { + "id": "1067663311", + "predicate": "inlineButtonTypeUserProfile", + "params": [ + { + "name": "user_id", "type": "long" } ], - "type": "auth.SentCode" + "type": "InlineButtonType" }, { - "id": "1368051895", - "method": "auth.initPasskeyLogin", + "id": "1408487002", + "predicate": "inputInlineButtonTypeUserProfile", "params": [ { - "name": "api_id", - "type": "int" - }, + "name": "user_id", + "type": "InputUser" + } + ], + "type": "InlineButtonType" + }, + { + "id": "-1273154958", + "predicate": "inlineButtonTypeCopy", + "params": [ { - "name": "api_hash", + "name": "copy_text", "type": "string" } ], - "type": "auth.PasskeyLoginOptions" + "type": "InlineButtonType" }, { - "id": "-1739084537", - "method": "auth.finishPasskeyLogin", + "id": "-1539808867", + "predicate": "inlineButtonTypeDisabled", + "params": [], + "type": "InlineButtonType" + }, + { + "id": "297902882", + "predicate": "keyboardInlineButton", "params": [ { "name": "flags", "type": "#" }, { - "name": "credential", - "type": "InputPasskeyCredential" + "name": "style", + "type": "flags.10?KeyboardButtonStyle" }, { - "name": "from_dc_id", - "type": "flags.0?int" + "name": "text", + "type": "string" }, { - "name": "from_auth_key_id", - "type": "flags.0?long" + "name": "type", + "type": "InlineButtonType" } ], - "type": "auth.Authorization" + "type": "KeyboardInlineButton" }, { - "id": "-326762118", - "method": "account.registerDevice", + "id": "423758582", + "predicate": "keyboardInlineButtonRow", + "params": [ + { + "name": "buttons", + "type": "Vector" + } + ], + "type": "KeyboardInlineButtonRow" + }, + { + "id": "63312061", + "predicate": "richButtonStyle", "params": [ { "name": "flags", "type": "#" }, { - "name": "no_muted", + "name": "bg_primary", "type": "flags.0?true" }, { - "name": "token_type", - "type": "int" + "name": "bg_danger", + "type": "flags.1?true" }, { - "name": "token", - "type": "string" + "name": "bg_success", + "type": "flags.2?true" }, { - "name": "app_sandbox", - "type": "Bool" + "name": "link", + "type": "flags.3?true" + } + ], + "type": "RichButtonStyle" + }, + { + "id": "1764381832", + "predicate": "pageButton", + "params": [ + { + "name": "flags", + "type": "#" }, { - "name": "secret", - "type": "bytes" + "name": "text", + "type": "RichText" }, { - "name": "other_uids", - "type": "Vector" + "name": "type", + "type": "InlineButtonType" + }, + { + "name": "style", + "type": "flags.0?RichButtonStyle" } ], - "type": "Bool" + "type": "PageButton" }, { - "id": "1779249670", - "method": "account.unregisterDevice", + "id": "1509940017", + "predicate": "ephemeral.welcomeMessagesNotModified", + "params": [], + "type": "ephemeral.WelcomeMessages" + }, + { + "id": "273664114", + "predicate": "ephemeral.welcomeMessages", "params": [ { - "name": "token_type", - "type": "int" + "name": "hash", + "type": "long" }, { - "name": "token", + "name": "messages", + "type": "Vector" + } + ], + "type": "ephemeral.WelcomeMessages" + }, + { + "id": "819557436", + "predicate": "currencyRate", + "params": [ + { + "name": "currency", "type": "string" }, { - "name": "other_uids", - "type": "Vector" + "name": "rate", + "type": "double" } ], - "type": "Bool" + "type": "CurrencyRate" }, { - "id": "-2067899501", - "method": "account.updateNotifySettings", + "id": "-1144199998", + "predicate": "payments.currencyRates", "params": [ { - "name": "peer", - "type": "InputNotifyPeer" - }, - { - "name": "settings", - "type": "InputPeerNotifySettings" + "name": "rates", + "type": "Vector" } ], - "type": "Bool" + "type": "payments.CurrencyRates" }, { - "id": "313765169", - "method": "account.getNotifySettings", + "id": "-1399980519", + "predicate": "toncenter.apiResponse", "params": [ { - "name": "peer", - "type": "InputNotifyPeer" + "name": "response", + "type": "DataJSON" } ], - "type": "PeerNotifySettings" + "type": "toncenter.ApiResponse" }, { - "id": "-612493497", - "method": "account.resetNotifySettings", - "params": [], - "type": "Bool" + "id": "428373505", + "predicate": "toncenter.streamingUrl", + "params": [ + { + "name": "url", + "type": "string" + }, + { + "name": "expires", + "type": "int" + } + ], + "type": "toncenter.StreamingUrl" }, { - "id": "2018596725", - "method": "account.updateProfile", + "id": "-1631009112", + "predicate": "onrampMethodAvailability", "params": [ { "name": "flags", "type": "#" }, { - "name": "first_name", - "type": "flags.0?string" - }, - { - "name": "last_name", - "type": "flags.1?string" + "name": "available", + "type": "flags.0?true" }, { - "name": "about", - "type": "flags.2?string" + "name": "payment_method", + "type": "string" } ], - "type": "User" + "type": "OnrampMethodAvailability" }, { - "id": "1713919532", - "method": "account.updateStatus", + "id": "230847874", + "predicate": "onrampProviderInfo", "params": [ { - "name": "offline", - "type": "Bool" + "name": "flags", + "type": "#" + }, + { + "name": "supports_base_currencies", + "type": "flags.0?true" + }, + { + "name": "supports_limits", + "type": "flags.1?true" + }, + { + "name": "supports_quote", + "type": "flags.2?true" + }, + { + "name": "id", + "type": "string" + }, + { + "name": "name", + "type": "string" + }, + { + "name": "crypto_currencies", + "type": "Vector" } ], - "type": "Bool" + "type": "OnrampProviderInfo" }, { - "id": "127302966", - "method": "account.getWallPapers", + "id": "-104314509", + "predicate": "onrampAvailability", "params": [ { - "name": "hash", - "type": "long" + "name": "flags", + "type": "#" + }, + { + "name": "allowed", + "type": "flags.0?true" + }, + { + "name": "buy_allowed", + "type": "flags.1?true" + }, + { + "name": "country_code", + "type": "string" + }, + { + "name": "state", + "type": "flags.2?string" + }, + { + "name": "methods", + "type": "Vector" } ], - "type": "account.WallPapers" + "type": "OnrampAvailability" }, { - "id": "-977650298", - "method": "account.reportPeer", + "id": "2078435198", + "predicate": "onrampLimits", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "base_currency", + "type": "string" }, { - "name": "reason", - "type": "ReportReason" + "name": "base_min_amount", + "type": "string" }, { - "name": "message", + "name": "base_max_amount", + "type": "string" + }, + { + "name": "crypto_min_amount", + "type": "string" + }, + { + "name": "crypto_max_amount", + "type": "string" + }, + { + "name": "payment_method", "type": "string" } ], - "type": "Bool" + "type": "OnrampLimits" }, { - "id": "655677548", - "method": "account.checkUsername", + "id": "2055213545", + "predicate": "onrampQuote", "params": [ { - "name": "username", + "name": "base_currency", + "type": "string" + }, + { + "name": "base_amount", + "type": "string" + }, + { + "name": "crypto_currency", + "type": "string" + }, + { + "name": "crypto_amount", + "type": "string" + }, + { + "name": "crypto_price", + "type": "string" + }, + { + "name": "fee_amount", + "type": "string" + }, + { + "name": "extra_fee_amount", "type": "string" + }, + { + "name": "network_fee_amount", + "type": "string" + }, + { + "name": "total_amount", + "type": "string" + }, + { + "name": "payment_method", + "type": "string" + }, + { + "name": "expires_date", + "type": "int" } ], - "type": "Bool" + "type": "OnrampQuote" }, { - "id": "1040964988", - "method": "account.updateUsername", + "id": "-773575132", + "predicate": "onrampSession", "params": [ { - "name": "username", + "name": "provider", + "type": "string" + }, + { + "name": "session_id", + "type": "string" + }, + { + "name": "url", "type": "string" + }, + { + "name": "expires_date", + "type": "int" } ], - "type": "User" + "type": "OnrampSession" }, { - "id": "-623130288", - "method": "account.getPrivacy", + "id": "-1665551636", + "predicate": "walletStateEmpty", "params": [ { - "name": "key", - "type": "InputPrivacyKey" + "name": "flags", + "type": "#" + }, + { + "name": "creating", + "type": "flags.0?true" } ], - "type": "account.PrivacyRules" + "type": "WalletState" }, { - "id": "-906486552", - "method": "account.setPrivacy", + "id": "-1782238101", + "predicate": "walletState", "params": [ { - "name": "key", - "type": "InputPrivacyKey" + "name": "flags", + "type": "#" }, { - "name": "rules", - "type": "Vector" + "name": "backup_enabled", + "type": "flags.0?true" + }, + { + "name": "can_export_phrase", + "type": "flags.1?true" + }, + { + "name": "can_enable_backup", + "type": "flags.2?true" + }, + { + "name": "address", + "type": "string" + }, + { + "name": "public_key", + "type": "bytes" + }, + { + "name": "balance", + "type": "long" } ], - "type": "account.PrivacyRules" + "type": "WalletState" }, { - "id": "-1564422284", - "method": "account.deleteAccount", + "id": "-25628980", + "predicate": "walletUserAddress", "params": [ { "name": "flags", "type": "#" }, { - "name": "reason", + "name": "user_id", + "type": "flags.0?long" + }, + { + "name": "address", "type": "string" }, { - "name": "password", - "type": "flags.0?InputCheckPasswordSRP" + "name": "public_key", + "type": "bytes" } ], - "type": "Bool" + "type": "WalletUserAddress" }, { - "id": "150761757", - "method": "account.getAccountTTL", - "params": [], - "type": "AccountDaysTTL" - }, - { - "id": "608323678", - "method": "account.setAccountTTL", + "id": "-1836156075", + "predicate": "wallet.userAddresses", "params": [ { - "name": "ttl", - "type": "AccountDaysTTL" + "name": "addresses", + "type": "Vector" + }, + { + "name": "users", + "type": "Vector" } ], - "type": "Bool" + "type": "wallet.UserAddresses" }, { - "id": "-2108208411", - "method": "account.sendChangePhoneCode", + "id": "-722833299", + "predicate": "walletTransactionPeerUser", "params": [ { - "name": "phone_number", + "name": "flags", + "type": "#" + }, + { + "name": "user_id", + "type": "long" + }, + { + "name": "address", "type": "string" }, { - "name": "settings", - "type": "CodeSettings" + "name": "domain", + "type": "flags.0?string" } ], - "type": "auth.SentCode" + "type": "WalletTransactionPeer" }, { - "id": "1891839707", - "method": "account.changePhone", + "id": "103596476", + "predicate": "walletTransactionPeerAddress", "params": [ { - "name": "phone_number", - "type": "string" + "name": "flags", + "type": "#" }, { - "name": "phone_code_hash", + "name": "address", "type": "string" }, { - "name": "phone_code", - "type": "string" + "name": "domain", + "type": "flags.0?string" } ], - "type": "User" + "type": "WalletTransactionPeer" }, { - "id": "954152242", - "method": "account.updateDeviceLocked", + "id": "-443213714", + "predicate": "walletTransactionPeerOnramp", "params": [ { - "name": "period", - "type": "int" + "name": "flags", + "type": "#" + }, + { + "name": "address", + "type": "string" + }, + { + "name": "domain", + "type": "flags.0?string" + }, + { + "name": "provider_name", + "type": "string" } ], - "type": "Bool" + "type": "WalletTransactionPeer" }, { - "id": "-484392616", - "method": "account.getAuthorizations", + "id": "1921772890", + "predicate": "walletTransactionPeerUnsupported", "params": [], - "type": "account.Authorizations" + "type": "WalletTransactionPeer" }, { - "id": "-545786948", - "method": "account.resetAuthorization", + "id": "1424428081", + "predicate": "walletTransactionPeerChannel", "params": [ { - "name": "hash", + "name": "flags", + "type": "#" + }, + { + "name": "channel_id", "type": "long" - } - ], - "type": "Bool" - }, - { - "id": "1418342645", - "method": "account.getPassword", - "params": [], - "type": "account.Password" - }, - { - "id": "-1663767815", - "method": "account.getPasswordSettings", - "params": [ + }, { - "name": "password", - "type": "InputCheckPasswordSRP" + "name": "address", + "type": "string" + }, + { + "name": "domain", + "type": "flags.0?string" } ], - "type": "account.PasswordSettings" + "type": "WalletTransactionPeer" }, { - "id": "-1516564433", - "method": "account.updatePasswordSettings", + "id": "-193817447", + "predicate": "walletTransactionPeerTelegramGift", "params": [ { - "name": "password", - "type": "InputCheckPasswordSRP" + "name": "flags", + "type": "#" }, { - "name": "new_settings", - "type": "account.PasswordInputSettings" + "name": "own_profile", + "type": "flags.0?true" } ], - "type": "Bool" + "type": "WalletTransactionPeer" }, { - "id": "457157256", - "method": "account.sendConfirmPhoneCode", + "id": "-1792163517", + "predicate": "walletTransaction", "params": [ { - "name": "hash", - "type": "string" + "name": "flags", + "type": "#" }, { - "name": "settings", - "type": "CodeSettings" - } - ], - "type": "auth.SentCode" - }, - { - "id": "1596029123", - "method": "account.confirmPhone", - "params": [ + "name": "incoming", + "type": "flags.0?true" + }, { - "name": "phone_code_hash", - "type": "string" + "name": "gasless", + "type": "flags.1?true" }, { - "name": "phone_code", + "name": "failed", + "type": "flags.2?true" + }, + { + "name": "key_change", + "type": "flags.5?true" + }, + { + "name": "comment_encrypted", + "type": "flags.6?true" + }, + { + "name": "id", "type": "string" - } - ], - "type": "Bool" - }, - { - "id": "1151208273", - "method": "account.getTmpPassword", - "params": [ + }, { - "name": "password", - "type": "InputCheckPasswordSRP" + "name": "amount", + "type": "long" }, { - "name": "period", + "name": "fee", + "type": "long" + }, + { + "name": "date", "type": "int" + }, + { + "name": "peer", + "type": "WalletTransactionPeer" + }, + { + "name": "comment", + "type": "flags.3?string" + }, + { + "name": "tx_hash", + "type": "flags.4?string" + }, + { + "name": "nft", + "type": "flags.7?wallet.NftItem" } ], - "type": "account.TmpPassword" - }, - { - "id": "405695855", - "method": "account.getWebAuthorizations", - "params": [], - "type": "account.WebAuthorizations" + "type": "WalletTransaction" }, { - "id": "755087855", - "method": "account.resetWebAuthorization", + "id": "1126356389", + "predicate": "wallet.transactions", "params": [ { - "name": "hash", + "name": "flags", + "type": "#" + }, + { + "name": "balance", "type": "long" - } - ], - "type": "Bool" - }, - { - "id": "1747789204", - "method": "account.resetWebAuthorizations", - "params": [], - "type": "Bool" - }, - { - "id": "-1299661699", - "method": "account.getAllSecureValues", - "params": [], - "type": "Vector" - }, - { - "id": "1936088002", - "method": "account.getSecureValue", - "params": [ + }, { - "name": "types", - "type": "Vector" + "name": "transactions", + "type": "Vector" + }, + { + "name": "next_offset", + "type": "flags.0?string" + }, + { + "name": "chats", + "type": "Vector" + }, + { + "name": "users", + "type": "Vector" } ], - "type": "Vector" + "type": "wallet.Transactions" }, { - "id": "-1986010339", - "method": "account.saveSecureValue", + "id": "-422514943", + "predicate": "wallet.secretPhraseParts", "params": [ { - "name": "value", - "type": "InputSecureValue" + "name": "token", + "type": "string" }, { - "name": "secure_secret_id", - "type": "long" + "name": "dcs", + "type": "Vector" } ], - "type": "SecureValue" + "type": "wallet.SecretPhraseParts" }, { - "id": "-1199522741", - "method": "account.deleteSecureValue", + "id": "417867063", + "predicate": "wallet.encryptedSecretPhrasePart", "params": [ { - "name": "types", - "type": "Vector" + "name": "data", + "type": "bytes" } ], - "type": "Bool" + "type": "wallet.EncryptedSecretPhrasePart" }, { - "id": "-1456907910", - "method": "account.getAuthorizationForm", + "id": "-103410961", + "predicate": "wallet.holderDc", "params": [ { - "name": "bot_id", - "type": "long" - }, - { - "name": "scope", - "type": "string" + "name": "dc", + "type": "int" }, { "name": "public_key", - "type": "string" + "type": "bytes" } ], - "type": "account.AuthorizationForm" + "type": "wallet.HolderDc" }, { - "id": "-202552205", - "method": "account.acceptAuthorization", + "id": "-1713105145", + "predicate": "wallet.proofChallenge", "params": [ { - "name": "bot_id", - "type": "long" - }, - { - "name": "scope", - "type": "string" - }, - { - "name": "public_key", + "name": "payload", "type": "string" }, { - "name": "value_hashes", - "type": "Vector" + "name": "expires", + "type": "int" }, { - "name": "credentials", - "type": "SecureCredentialsEncrypted" + "name": "domain", + "type": "string" } ], - "type": "Bool" + "type": "wallet.ProofChallenge" }, { - "id": "-1516022023", - "method": "account.sendVerifyPhoneCode", + "id": "1622985485", + "predicate": "walletOwnershipProof", "params": [ { - "name": "phone_number", - "type": "string" + "name": "timestamp", + "type": "int" }, { - "name": "settings", - "type": "CodeSettings" + "name": "signature", + "type": "bytes" } ], - "type": "auth.SentCode" + "type": "WalletOwnershipProof" }, { - "id": "1305716726", - "method": "account.verifyPhone", + "id": "1671708892", + "predicate": "inputWalletNew", + "params": [], + "type": "InputWalletReplacement" + }, + { + "id": "1722182203", + "predicate": "inputWalletImported", "params": [ { - "name": "phone_number", - "type": "string" + "name": "flags", + "type": "#" }, { - "name": "phone_code_hash", - "type": "string" + "name": "public_key", + "type": "bytes" }, { - "name": "phone_code", - "type": "string" + "name": "anchor_public_key", + "type": "flags.0?bytes" + }, + { + "name": "proof", + "type": "WalletOwnershipProof" } ], - "type": "Bool" + "type": "InputWalletReplacement" }, { - "id": "-1730136133", - "method": "account.sendVerifyEmailCode", + "id": "304255588", + "predicate": "tonConnectManifest", "params": [ { - "name": "purpose", - "type": "EmailVerifyPurpose" + "name": "flags", + "type": "#" }, { - "name": "email", + "name": "url", "type": "string" - } - ], - "type": "account.SentEmailCode" - }, - { - "id": "53322959", - "method": "account.verifyEmail", - "params": [ + }, { - "name": "purpose", - "type": "EmailVerifyPurpose" + "name": "name", + "type": "string" }, { - "name": "verification", - "type": "EmailVerification" + "name": "icon", + "type": "flags.0?WebDocument" } ], - "type": "account.EmailVerified" + "type": "TonConnectManifest" }, { - "id": "-1896617296", - "method": "account.initTakeoutSession", + "id": "308631238", + "predicate": "tonConnectSession", "params": [ { "name": "flags", "type": "#" }, { - "name": "contacts", + "name": "pending", "type": "flags.0?true" }, { - "name": "message_users", + "name": "closing", "type": "flags.1?true" }, { - "name": "message_chats", + "name": "closed", "type": "flags.2?true" }, { - "name": "message_megagroups", - "type": "flags.3?true" + "name": "id", + "type": "long" }, { - "name": "message_channels", - "type": "flags.4?true" + "name": "dapp_client_id", + "type": "string" }, { - "name": "files", - "type": "flags.5?true" + "name": "client_id", + "type": "flags.3?string" }, { - "name": "file_max_size", - "type": "flags.5?long" + "name": "nonce", + "type": "bytes" + }, + { + "name": "manifest", + "type": "flags.4?TonConnectManifest" + }, + { + "name": "manifest_error", + "type": "flags.5?int" + }, + { + "name": "date", + "type": "int" } ], - "type": "account.Takeout" + "type": "TonConnectSession" }, { - "id": "489050862", - "method": "account.finishTakeoutSession", + "id": "1271436947", + "predicate": "wallet.tonConnectChallenge", "params": [ { - "name": "flags", - "type": "#" + "name": "challenge", + "type": "bytes" }, { - "name": "success", - "type": "flags.0?true" + "name": "event_id", + "type": "long" } ], - "type": "Bool" + "type": "wallet.TonConnectChallenge" }, { - "id": "-1881204448", - "method": "account.confirmPasswordEmail", + "id": "1478780131", + "predicate": "tonConnectNextEventId", "params": [ { - "name": "code", - "type": "string" + "name": "event_id", + "type": "long" } ], - "type": "Bool" - }, - { - "id": "2055154197", - "method": "account.resendPasswordEmail", - "params": [], - "type": "Bool" + "type": "TonConnectNextEventId" }, { - "id": "-1043606090", - "method": "account.cancelPasswordEmail", - "params": [], - "type": "Bool" + "id": "-1587575533", + "predicate": "tonConnectRequest", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "session_id", + "type": "long" + }, + { + "name": "msg_id", + "type": "int" + }, + { + "name": "body", + "type": "bytes" + }, + { + "name": "expires", + "type": "int" + }, + { + "name": "topic", + "type": "flags.0?string" + }, + { + "name": "trace_id", + "type": "flags.1?string" + } + ], + "type": "TonConnectRequest" }, { - "id": "-1626880216", - "method": "account.getContactSignUpNotification", - "params": [], - "type": "Bool" + "id": "-2050952924", + "predicate": "wallet.tonConnectPending", + "params": [ + { + "name": "session", + "type": "TonConnectSession" + }, + { + "name": "requests", + "type": "Vector" + } + ], + "type": "wallet.TonConnectPending" }, { - "id": "-806076575", - "method": "account.setContactSignUpNotification", + "id": "236939414", + "predicate": "wallet.tonConnectSessions", "params": [ { - "name": "silent", - "type": "Bool" + "name": "sessions", + "type": "Vector" } ], - "type": "Bool" + "type": "wallet.TonConnectSessions" }, { - "id": "1398240377", - "method": "account.getNotifyExceptions", + "id": "-1108800883", + "predicate": "wallet.existingBalance", "params": [ { "name": "flags", "type": "#" }, { - "name": "compare_sound", - "type": "flags.1?true" - }, - { - "name": "compare_stories", - "type": "flags.2?true" + "name": "has_balance", + "type": "flags.0?true" }, { - "name": "peer", - "type": "flags.0?InputNotifyPeer" + "name": "url", + "type": "string" } ], - "type": "Updates" + "type": "wallet.ExistingBalance" }, { - "id": "-57811990", - "method": "account.getWallPaper", + "id": "1277096206", + "predicate": "wallet.nftAttribute", "params": [ { - "name": "wallpaper", - "type": "InputWallPaper" + "name": "trait_type", + "type": "string" + }, + { + "name": "value", + "type": "string" } ], - "type": "WallPaper" + "type": "wallet.NftAttribute" }, { - "id": "-476410109", - "method": "account.uploadWallPaper", + "id": "389937907", + "predicate": "wallet.nftItem", "params": [ { "name": "flags", "type": "#" }, { - "name": "for_chat", - "type": "flags.0?true" + "name": "collection_address", + "type": "flags.0?string" }, { - "name": "file", - "type": "InputFile" + "name": "address", + "type": "string" }, { - "name": "mime_type", + "name": "owner_address", "type": "string" }, { - "name": "settings", - "type": "WallPaperSettings" + "name": "index", + "type": "string" + }, + { + "name": "name", + "type": "flags.1?string" + }, + { + "name": "description", + "type": "flags.2?string" + }, + { + "name": "image", + "type": "flags.3?WebDocument" + }, + { + "name": "image_small", + "type": "flags.4?WebDocument" + }, + { + "name": "content_url", + "type": "flags.5?WebDocument" + }, + { + "name": "lottie", + "type": "flags.6?WebDocument" + }, + { + "name": "attributes", + "type": "flags.7?Vector" + }, + { + "name": "extra", + "type": "flags.8?DataJSON" + }, + { + "name": "gift", + "type": "flags.9?StarGift" } ], - "type": "WallPaper" + "type": "wallet.NftItem" }, { - "id": "1817860919", - "method": "account.saveWallPaper", + "id": "2035107951", + "predicate": "wallet.nftItems", "params": [ { - "name": "wallpaper", - "type": "InputWallPaper" + "name": "flags", + "type": "#" }, { - "name": "unsave", - "type": "Bool" + "name": "items", + "type": "Vector" }, { - "name": "settings", - "type": "WallPaperSettings" + "name": "next_offset", + "type": "flags.0?string" } ], - "type": "Bool" + "type": "wallet.NftItems" }, { - "id": "-18000023", - "method": "account.installWallPaper", + "id": "-547700724", + "predicate": "auth.firebasePnvIntent", "params": [ { - "name": "wallpaper", - "type": "InputWallPaper" + "name": "nonce", + "type": "string" }, { - "name": "settings", - "type": "WallPaperSettings" + "name": "digital_credential_payload", + "type": "string" } ], - "type": "Bool" - }, - { - "id": "-1153722364", - "method": "account.resetWallPapers", - "params": [], - "type": "Bool" - }, - { - "id": "1457130303", - "method": "account.getAutoDownloadSettings", - "params": [], - "type": "account.AutoDownloadSettings" + "type": "auth.FirebasePnvIntent" }, { - "id": "1995661875", - "method": "account.saveAutoDownloadSettings", + "id": "1654613710", + "predicate": "inputTonConnectOauthSession", "params": [ { - "name": "flags", - "type": "#" + "name": "session_id", + "type": "long" }, { - "name": "low", - "type": "flags.0?true" + "name": "challenge_answer", + "type": "bytes" }, { - "name": "high", - "type": "flags.1?true" + "name": "body", + "type": "bytes" }, { - "name": "settings", - "type": "AutoDownloadSettings" + "name": "proof", + "type": "WalletOwnershipProof" } ], - "type": "Bool" + "type": "InputTonConnectOauthSession" }, { - "id": "473805619", - "method": "account.uploadTheme", + "id": "1767755842", + "predicate": "exportedNoPaidMessagesToken", "params": [ { "name": "flags", "type": "#" }, { - "name": "file", - "type": "InputFile" - }, - { - "name": "thumb", - "type": "flags.0?InputFile" + "name": "token", + "type": "string" }, { - "name": "file_name", + "name": "url", "type": "string" }, { - "name": "mime_type", - "type": "string" + "name": "expires", + "type": "flags.0?int" } ], - "type": "Document" + "type": "ExportedNoPaidMessagesToken" }, { - "id": "1697530880", - "method": "account.createTheme", + "id": "-1783830449", + "predicate": "shareThemeDefault", + "params": [], + "type": "ShareTheme" + }, + { + "id": "1689466081", + "predicate": "shareThemeEmojiBackdrop", "params": [ { "name": "flags", "type": "#" }, { - "name": "slug", - "type": "string" - }, - { - "name": "title", - "type": "string" - }, - { - "name": "document", - "type": "flags.2?InputDocument" + "name": "backdrop_id", + "type": "flags.0?int" }, { - "name": "settings", - "type": "flags.3?Vector" + "name": "emojis", + "type": "flags.1?Vector" } ], - "type": "Theme" + "type": "ShareTheme" }, { - "id": "737414348", - "method": "account.updateTheme", + "id": "-336796051", + "predicate": "shareThemeGift", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "format", - "type": "string" - }, - { - "name": "theme", - "type": "InputTheme" - }, - { - "name": "slug", - "type": "flags.0?string" - }, - { - "name": "title", - "type": "flags.1?string" - }, - { - "name": "document", - "type": "flags.2?InputDocument" - }, - { - "name": "settings", - "type": "flags.3?Vector" + "name": "stargift", + "type": "StarGift" } ], - "type": "Theme" + "type": "ShareTheme" }, { - "id": "-229175188", - "method": "account.saveTheme", + "id": "1069099867", + "predicate": "inputShareThemeGift", "params": [ { - "name": "theme", - "type": "InputTheme" - }, - { - "name": "unsave", - "type": "Bool" + "name": "stargift", + "type": "InputSavedStarGift" } ], - "type": "Bool" + "type": "ShareTheme" }, { - "id": "-953697477", - "method": "account.installTheme", + "id": "1170331218", + "predicate": "shareThemeBackdropOption", "params": [ { - "name": "flags", - "type": "#" + "name": "backdrop_id", + "type": "int" }, { - "name": "dark", - "type": "flags.0?true" + "name": "name", + "type": "string" }, { - "name": "theme", - "type": "flags.1?InputTheme" + "name": "center_color", + "type": "int" }, { - "name": "format", - "type": "flags.2?string" + "name": "edge_color", + "type": "int" }, { - "name": "base_theme", - "type": "flags.3?BaseTheme" + "name": "pattern_color", + "type": "int" + }, + { + "name": "text_color", + "type": "int" } ], - "type": "Bool" + "type": "ShareThemeBackdropOption" }, { - "id": "978872812", - "method": "account.getTheme", + "id": "2050977279", + "predicate": "shareThemeBackdropsNotModified", + "params": [], + "type": "ShareThemeBackdrops" + }, + { + "id": "-1427448608", + "predicate": "shareThemeBackdrops", "params": [ { - "name": "format", - "type": "string" + "name": "hash", + "type": "int" }, { - "name": "theme", - "type": "InputTheme" + "name": "backdrops", + "type": "Vector" } ], - "type": "Theme" + "type": "ShareThemeBackdrops" }, { - "id": "1913054296", - "method": "account.getThemes", + "id": "1474250151", + "predicate": "inputWalletCardSticker", "params": [ { - "name": "format", - "type": "string" + "name": "coordinates", + "type": "MediaAreaCoordinates" }, { - "name": "hash", - "type": "long" + "name": "nft_address", + "type": "string" } ], - "type": "account.Themes" + "type": "InputWalletCardSticker" }, { - "id": "-1250643605", - "method": "account.setContentSettings", + "id": "-218035014", + "predicate": "wallet.cardSticker", "params": [ { - "name": "flags", - "type": "#" + "name": "coordinates", + "type": "MediaAreaCoordinates" }, { - "name": "sensitive_enabled", - "type": "flags.0?true" + "name": "nft", + "type": "wallet.NftItem" } ], - "type": "Bool" - }, - { - "id": "-1952756306", - "method": "account.getContentSettings", - "params": [], - "type": "account.ContentSettings" + "type": "wallet.CardSticker" }, { - "id": "1705865692", - "method": "account.getMultiWallPapers", + "id": "-1898953807", + "predicate": "wallet.card", "params": [ { - "name": "wallpapers", - "type": "Vector" - } - ], - "type": "Vector" - }, - { - "id": "-349483786", - "method": "account.getGlobalPrivacySettings", - "params": [], - "type": "GlobalPrivacySettings" - }, - { - "id": "517647042", - "method": "account.setGlobalPrivacySettings", - "params": [ + "name": "flags", + "type": "#" + }, { - "name": "settings", - "type": "GlobalPrivacySettings" + "name": "stickers", + "type": "flags.0?Vector" + }, + { + "name": "bg_nft_item", + "type": "flags.1?wallet.NftItem" + }, + { + "name": "address", + "type": "string" + }, + { + "name": "balance", + "type": "long" } ], - "type": "GlobalPrivacySettings" + "type": "wallet.Card" }, { - "id": "-91437323", - "method": "account.reportProfilePhoto", + "id": "1918612715", + "predicate": "payments.starGiftDepositPayload", "params": [ { - "name": "peer", - "type": "InputPeer" - }, - { - "name": "photo_id", - "type": "InputPhoto" + "name": "nft_address", + "type": "string" }, { - "name": "reason", - "type": "ReportReason" + "name": "payload", + "type": "bytes" }, { - "name": "message", - "type": "string" + "name": "amount", + "type": "long" } ], - "type": "Bool" - }, - { - "id": "-1828139493", - "method": "account.resetPassword", - "params": [], - "type": "account.ResetPasswordResult" - }, - { - "id": "1284770294", - "method": "account.declinePasswordReset", - "params": [], - "type": "Bool" - }, + "type": "payments.StarGiftDepositPayload" + } + ], + "methods": [ { - "id": "-700916087", - "method": "account.getChatThemes", + "id": "-878758099", + "method": "invokeAfterMsg", "params": [ { - "name": "hash", + "name": "msg_id", "type": "long" + }, + { + "name": "query", + "type": "!X" } ], - "type": "account.Themes" + "type": "X" }, { - "id": "-1081501024", - "method": "account.setAuthorizationTTL", + "id": "1036301552", + "method": "invokeAfterMsgs", "params": [ { - "name": "authorization_ttl_days", - "type": "int" + "name": "msg_ids", + "type": "Vector" + }, + { + "name": "query", + "type": "!X" } ], - "type": "Bool" + "type": "X" }, { - "id": "1089766498", - "method": "account.changeAuthorizationSettings", + "id": "-1043505495", + "method": "initConnection", "params": [ { "name": "flags", "type": "#" }, { - "name": "confirmed", - "type": "flags.3?true" + "name": "api_id", + "type": "int" }, { - "name": "hash", - "type": "long" + "name": "device_model", + "type": "string" }, { - "name": "encrypted_requests_disabled", - "type": "flags.0?Bool" + "name": "system_version", + "type": "string" }, { - "name": "call_requests_disabled", - "type": "flags.1?Bool" - } - ], - "type": "Bool" - }, - { - "id": "-510647672", - "method": "account.getSavedRingtones", - "params": [ + "name": "app_version", + "type": "string" + }, { - "name": "hash", - "type": "long" + "name": "system_lang_code", + "type": "string" + }, + { + "name": "lang_pack", + "type": "string" + }, + { + "name": "lang_code", + "type": "string" + }, + { + "name": "proxy", + "type": "flags.0?InputClientProxy" + }, + { + "name": "params", + "type": "flags.1?JSONValue" + }, + { + "name": "query", + "type": "!X" } ], - "type": "account.SavedRingtones" + "type": "X" }, { - "id": "1038768899", - "method": "account.saveRingtone", + "id": "-627372787", + "method": "invokeWithLayer", "params": [ { - "name": "id", - "type": "InputDocument" + "name": "layer", + "type": "int" }, { - "name": "unsave", - "type": "Bool" + "name": "query", + "type": "!X" } ], - "type": "account.SavedRingtone" + "type": "X" }, { - "id": "-2095414366", - "method": "account.uploadRingtone", + "id": "-1080796745", + "method": "invokeWithoutUpdates", "params": [ { - "name": "file", - "type": "InputFile" - }, - { - "name": "file_name", - "type": "string" - }, - { - "name": "mime_type", - "type": "string" + "name": "query", + "type": "!X" } ], - "type": "Document" + "type": "X" }, { - "id": "-70001045", - "method": "account.updateEmojiStatus", + "id": "911373810", + "method": "invokeWithMessagesRange", "params": [ { - "name": "emoji_status", - "type": "EmojiStatus" + "name": "range", + "type": "MessageRange" + }, + { + "name": "query", + "type": "!X" } ], - "type": "Bool" + "type": "X" }, { - "id": "-696962170", - "method": "account.getDefaultEmojiStatuses", + "id": "-1398145746", + "method": "invokeWithTakeout", "params": [ { - "name": "hash", + "name": "takeout_id", "type": "long" + }, + { + "name": "query", + "type": "!X" } ], - "type": "account.EmojiStatuses" + "type": "X" }, { - "id": "257392901", - "method": "account.getRecentEmojiStatuses", + "id": "-584540274", + "method": "invokeWithBusinessConnection", "params": [ { - "name": "hash", - "type": "long" + "name": "connection_id", + "type": "string" + }, + { + "name": "query", + "type": "!X" } ], - "type": "account.EmojiStatuses" - }, - { - "id": "404757166", - "method": "account.clearRecentEmojiStatuses", - "params": [], - "type": "Bool" + "type": "X" }, { - "id": "-279966037", - "method": "account.reorderUsernames", + "id": "502868356", + "method": "invokeWithGooglePlayIntegrity", "params": [ { - "name": "order", - "type": "Vector" + "name": "nonce", + "type": "string" + }, + { + "name": "token", + "type": "string" + }, + { + "name": "query", + "type": "!X" } ], - "type": "Bool" + "type": "X" }, { - "id": "1490465654", - "method": "account.toggleUsername", + "id": "229528824", + "method": "invokeWithApnsSecret", "params": [ { - "name": "username", + "name": "nonce", "type": "string" }, { - "name": "active", - "type": "Bool" + "name": "secret", + "type": "string" + }, + { + "name": "query", + "type": "!X" } ], - "type": "Bool" + "type": "X" }, { - "id": "-495647960", - "method": "account.getDefaultProfilePhotoEmojis", + "id": "-1380249708", + "method": "invokeWithReCaptcha", "params": [ { - "name": "hash", - "type": "long" + "name": "token", + "type": "string" + }, + { + "name": "query", + "type": "!X" } ], - "type": "EmojiList" + "type": "X" }, { - "id": "-1856479058", - "method": "account.getDefaultGroupPhotoEmojis", + "id": "-1502141361", + "method": "auth.sendCode", "params": [ { - "name": "hash", - "type": "long" + "name": "phone_number", + "type": "string" + }, + { + "name": "api_id", + "type": "int" + }, + { + "name": "api_hash", + "type": "string" + }, + { + "name": "settings", + "type": "CodeSettings" } ], - "type": "EmojiList" - }, - { - "id": "-1379156774", - "method": "account.getAutoSaveSettings", - "params": [], - "type": "account.AutoSaveSettings" + "type": "auth.SentCode" }, { - "id": "-694451359", - "method": "account.saveAutoSaveSettings", + "id": "-1429752041", + "method": "auth.signUp", "params": [ { "name": "flags", "type": "#" }, { - "name": "users", + "name": "no_joined_notifications", "type": "flags.0?true" }, { - "name": "chats", - "type": "flags.1?true" + "name": "phone_number", + "type": "string" }, { - "name": "broadcasts", - "type": "flags.2?true" + "name": "phone_code_hash", + "type": "string" }, { - "name": "peer", - "type": "flags.3?InputPeer" + "name": "first_name", + "type": "string" }, { - "name": "settings", - "type": "AutoSaveSettings" - } - ], - "type": "Bool" - }, - { - "id": "1404829728", - "method": "account.deleteAutoSaveExceptions", - "params": [], - "type": "Bool" - }, - { - "id": "-896866118", - "method": "account.invalidateSignInCodes", - "params": [ - { - "name": "codes", - "type": "Vector" + "name": "last_name", + "type": "string" } ], - "type": "Bool" + "type": "auth.Authorization" }, { - "id": "1749885262", - "method": "account.updateColor", + "id": "-1923962543", + "method": "auth.signIn", "params": [ { "name": "flags", "type": "#" }, { - "name": "for_profile", - "type": "flags.1?true" + "name": "phone_number", + "type": "string" }, { - "name": "color", - "type": "flags.2?PeerColor" + "name": "phone_code_hash", + "type": "string" + }, + { + "name": "phone_code", + "type": "flags.0?string" + }, + { + "name": "email_verification", + "type": "flags.1?EmailVerification" } ], + "type": "auth.Authorization" + }, + { + "id": "1047706137", + "method": "auth.logOut", + "params": [], + "type": "auth.LoggedOut" + }, + { + "id": "-1616179942", + "method": "auth.resetAuthorizations", + "params": [], "type": "Bool" }, { - "id": "-1509246514", - "method": "account.getDefaultBackgroundEmojis", + "id": "-440401971", + "method": "auth.exportAuthorization", "params": [ { - "name": "hash", - "type": "long" + "name": "dc_id", + "type": "int" } ], - "type": "EmojiList" + "type": "auth.ExportedAuthorization" }, { - "id": "1999087573", - "method": "account.getChannelDefaultEmojiStatuses", + "id": "-1518699091", + "method": "auth.importAuthorization", "params": [ { - "name": "hash", + "name": "id", "type": "long" + }, + { + "name": "bytes", + "type": "bytes" } ], - "type": "account.EmojiStatuses" + "type": "auth.Authorization" }, { - "id": "900325589", - "method": "account.getChannelRestrictedStatusEmojis", + "id": "-841733627", + "method": "auth.bindTempAuthKey", "params": [ { - "name": "hash", + "name": "perm_auth_key_id", "type": "long" - } - ], - "type": "EmojiList" - }, - { - "id": "1258348646", - "method": "account.updateBusinessWorkHours", - "params": [ + }, { - "name": "flags", - "type": "#" + "name": "nonce", + "type": "long" }, { - "name": "business_work_hours", - "type": "flags.0?BusinessWorkHours" + "name": "expires_at", + "type": "int" + }, + { + "name": "encrypted_message", + "type": "bytes" } ], "type": "Bool" }, { - "id": "-1637149926", - "method": "account.updateBusinessLocation", + "id": "1738800940", + "method": "auth.importBotAuthorization", "params": [ { "name": "flags", - "type": "#" + "type": "int" }, { - "name": "geo_point", - "type": "flags.1?InputGeoPoint" + "name": "api_id", + "type": "int" }, { - "name": "address", - "type": "flags.0?string" + "name": "api_hash", + "type": "string" + }, + { + "name": "bot_auth_token", + "type": "string" } ], - "type": "Bool" + "type": "auth.Authorization" }, { - "id": "1724755908", - "method": "account.updateBusinessGreetingMessage", + "id": "-779399914", + "method": "auth.checkPassword", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "message", - "type": "flags.0?InputBusinessGreetingMessage" + "name": "password", + "type": "InputCheckPasswordSRP" } ], - "type": "Bool" + "type": "auth.Authorization" }, { - "id": "-1570078811", - "method": "account.updateBusinessAwayMessage", + "id": "-661144474", + "method": "auth.requestPasswordRecovery", + "params": [], + "type": "auth.PasswordRecovery" + }, + { + "id": "923364464", + "method": "auth.recoverPassword", "params": [ { "name": "flags", "type": "#" }, { - "name": "message", - "type": "flags.0?InputBusinessAwayMessage" + "name": "code", + "type": "string" + }, + { + "name": "new_settings", + "type": "flags.0?account.PasswordInputSettings" } ], - "type": "Bool" + "type": "auth.Authorization" }, { - "id": "1721797758", - "method": "account.updateConnectedBot", + "id": "-890997469", + "method": "auth.resendCode", "params": [ { "name": "flags", "type": "#" }, { - "name": "deleted", - "type": "flags.1?true" - }, - { - "name": "rights", - "type": "flags.0?BusinessBotRights" + "name": "phone_number", + "type": "string" }, { - "name": "bot", - "type": "InputUser" + "name": "phone_code_hash", + "type": "string" }, { - "name": "recipients", - "type": "InputBusinessBotRecipients" + "name": "reason", + "type": "flags.0?string" } ], - "type": "Updates" - }, - { - "id": "1319421967", - "method": "account.getConnectedBots", - "params": [], - "type": "account.ConnectedBots" + "type": "auth.SentCode" }, { - "id": "1990746736", - "method": "account.getBotBusinessConnection", + "id": "520357240", + "method": "auth.cancelCode", "params": [ { - "name": "connection_id", + "name": "phone_number", + "type": "string" + }, + { + "name": "phone_code_hash", "type": "string" } ], - "type": "Updates" + "type": "Bool" }, { - "id": "-1508585420", - "method": "account.updateBusinessIntro", + "id": "-1907842680", + "method": "auth.dropTempAuthKeys", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "intro", - "type": "flags.0?InputBusinessIntro" + "name": "except_auth_keys", + "type": "Vector" } ], "type": "Bool" }, { - "id": "1684934807", - "method": "account.toggleConnectedBotPaused", + "id": "-1210022402", + "method": "auth.exportLoginToken", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "api_id", + "type": "int" }, { - "name": "paused", - "type": "Bool" + "name": "api_hash", + "type": "string" + }, + { + "name": "except_ids", + "type": "Vector" } ], - "type": "Bool" + "type": "auth.LoginToken" }, { - "id": "1581481689", - "method": "account.disablePeerConnectedBot", + "id": "-1783866140", + "method": "auth.importLoginToken", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "token", + "type": "bytes" } ], - "type": "Bool" + "type": "auth.LoginToken" }, { - "id": "-865203183", - "method": "account.updateBirthday", + "id": "-392909491", + "method": "auth.acceptLoginToken", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "birthday", - "type": "flags.0?Birthday" + "name": "token", + "type": "bytes" } ], - "type": "Bool" + "type": "Authorization" }, { - "id": "-2007898482", - "method": "account.createBusinessChatLink", + "id": "221691769", + "method": "auth.checkRecoveryPassword", "params": [ { - "name": "link", - "type": "InputBusinessChatLink" + "name": "code", + "type": "string" } ], - "type": "BusinessChatLink" + "type": "Bool" }, { - "id": "-1942744913", - "method": "account.editBusinessChatLink", + "id": "767062953", + "method": "auth.importWebTokenAuthorization", "params": [ { - "name": "slug", + "name": "api_id", + "type": "int" + }, + { + "name": "api_hash", "type": "string" }, { - "name": "link", - "type": "InputBusinessChatLink" + "name": "web_auth_token", + "type": "string" } ], - "type": "BusinessChatLink" + "type": "auth.Authorization" }, { - "id": "1611085428", - "method": "account.deleteBusinessChatLink", + "id": "-1908857314", + "method": "auth.requestFirebaseSms", "params": [ { - "name": "slug", + "name": "flags", + "type": "#" + }, + { + "name": "phone_number", + "type": "string" + }, + { + "name": "phone_code_hash", "type": "string" + }, + { + "name": "safety_net_token", + "type": "flags.0?string" + }, + { + "name": "play_integrity_token", + "type": "flags.2?string" + }, + { + "name": "ios_push_secret", + "type": "flags.1?string" } ], "type": "Bool" }, { - "id": "1869667809", - "method": "account.getBusinessChatLinks", - "params": [], - "type": "account.BusinessChatLinks" - }, - { - "id": "1418913262", - "method": "account.resolveBusinessChatLink", + "id": "2123760019", + "method": "auth.resetLoginEmail", "params": [ { - "name": "slug", + "name": "phone_number", "type": "string" - } - ], - "type": "account.ResolvedBusinessChatLinks" - }, - { - "id": "-649919008", - "method": "account.updatePersonalChannel", - "params": [ + }, { - "name": "channel", - "type": "InputChannel" + "name": "phone_code_hash", + "type": "string" } ], - "type": "Bool" + "type": "auth.SentCode" }, { - "id": "-1176919155", - "method": "account.toggleSponsoredMessages", + "id": "-878841866", + "method": "auth.reportMissingCode", "params": [ { - "name": "enabled", - "type": "Bool" + "name": "phone_number", + "type": "string" + }, + { + "name": "phone_code_hash", + "type": "string" + }, + { + "name": "mnc", + "type": "string" } ], "type": "Bool" }, { - "id": "115172684", - "method": "account.getReactionsNotifySettings", - "params": [], - "type": "ReactionsNotifySettings" - }, - { - "id": "829220168", - "method": "account.setReactionsNotifySettings", + "id": "1457889180", + "method": "auth.checkPaidAuth", "params": [ { - "name": "settings", - "type": "ReactionsNotifySettings" + "name": "phone_number", + "type": "string" + }, + { + "name": "phone_code_hash", + "type": "string" + }, + { + "name": "form_id", + "type": "long" } ], - "type": "ReactionsNotifySettings" + "type": "auth.SentCode" }, { - "id": "779830595", - "method": "account.getCollectibleEmojiStatuses", + "id": "1368051895", + "method": "auth.initPasskeyLogin", "params": [ { - "name": "hash", - "type": "long" + "name": "api_id", + "type": "int" + }, + { + "name": "api_hash", + "type": "string" } ], - "type": "account.EmojiStatuses" + "type": "auth.PasskeyLoginOptions" }, { - "id": "431639143", - "method": "account.getPaidMessagesRevenue", + "id": "-1739084537", + "method": "auth.finishPasskeyLogin", "params": [ { "name": "flags", "type": "#" }, { - "name": "parent_peer", - "type": "flags.0?InputPeer" + "name": "credential", + "type": "InputPasskeyCredential" }, { - "name": "user_id", - "type": "InputUser" + "name": "from_dc_id", + "type": "flags.0?int" + }, + { + "name": "from_auth_key_id", + "type": "flags.0?long" } ], - "type": "account.PaidMessagesRevenue" + "type": "auth.Authorization" }, { - "id": "-30483850", - "method": "account.toggleNoPaidMessagesException", + "id": "1225633185", + "method": "auth.cancelWebTokenAuthorization", + "params": [ + { + "name": "web_auth_token", + "type": "string" + } + ], + "type": "Bool" + }, + { + "id": "1682904512", + "method": "auth.initFirebasePnvLogin", "params": [ { "name": "flags", "type": "#" }, { - "name": "refund_charged", - "type": "flags.0?true" - }, - { - "name": "require_payment", - "type": "flags.2?true" + "name": "except_ids", + "type": "flags.0?Vector" }, { - "name": "parent_peer", - "type": "flags.1?InputPeer" + "name": "api_id", + "type": "int" }, { - "name": "user_id", - "type": "InputUser" + "name": "api_hash", + "type": "string" } ], - "type": "Bool" + "type": "auth.FirebasePnvIntent" }, { - "id": "1575909552", - "method": "account.setMainProfileTab", + "id": "746916172", + "method": "auth.finishFirebasePnvLogin", "params": [ { - "name": "tab", - "type": "ProfileTab" + "name": "google_token", + "type": "string" } ], - "type": "Bool" + "type": "auth.Authorization" }, { - "id": "-1301859671", - "method": "account.saveMusic", + "id": "2017422166", + "method": "auth.firebasePnvSignUp", "params": [ { "name": "flags", "type": "#" }, { - "name": "unsave", + "name": "no_joined_notifications", "type": "flags.0?true" }, { - "name": "id", - "type": "InputDocument" + "name": "first_name", + "type": "string" }, { - "name": "after_id", - "type": "flags.1?InputDocument" + "name": "last_name", + "type": "string" } ], - "type": "Bool" + "type": "auth.Authorization" }, { - "id": "-526557265", - "method": "account.getSavedMusicIds", + "id": "-326762118", + "method": "account.registerDevice", "params": [ { - "name": "hash", - "type": "long" + "name": "flags", + "type": "#" + }, + { + "name": "no_muted", + "type": "flags.0?true" + }, + { + "name": "token_type", + "type": "int" + }, + { + "name": "token", + "type": "string" + }, + { + "name": "app_sandbox", + "type": "Bool" + }, + { + "name": "secret", + "type": "bytes" + }, + { + "name": "other_uids", + "type": "Vector" } ], - "type": "account.SavedMusicIds" + "type": "Bool" }, { - "id": "-466818615", - "method": "account.getUniqueGiftChatThemes", + "id": "1779249670", + "method": "account.unregisterDevice", "params": [ { - "name": "offset", - "type": "string" + "name": "token_type", + "type": "int" }, { - "name": "limit", - "type": "int" + "name": "token", + "type": "string" }, { - "name": "hash", - "type": "long" + "name": "other_uids", + "type": "Vector" } ], - "type": "account.ChatThemes" + "type": "Bool" }, { - "id": "1117079528", - "method": "account.initPasskeyRegistration", - "params": [], - "type": "account.PasskeyRegistrationOptions" + "id": "-2067899501", + "method": "account.updateNotifySettings", + "params": [ + { + "name": "peer", + "type": "InputNotifyPeer" + }, + { + "name": "settings", + "type": "InputPeerNotifySettings" + } + ], + "type": "Bool" }, { - "id": "1437867990", - "method": "account.registerPasskey", + "id": "313765169", + "method": "account.getNotifySettings", "params": [ { - "name": "credential", - "type": "InputPasskeyCredential" + "name": "peer", + "type": "InputNotifyPeer" } ], - "type": "Passkey" + "type": "PeerNotifySettings" }, { - "id": "-367063982", - "method": "account.getPasskeys", + "id": "-612493497", + "method": "account.resetNotifySettings", "params": [], - "type": "account.Passkeys" + "type": "Bool" }, { - "id": "-172665281", - "method": "account.deletePasskey", + "id": "2018596725", + "method": "account.updateProfile", "params": [ { - "name": "id", - "type": "string" + "name": "flags", + "type": "#" + }, + { + "name": "first_name", + "type": "flags.0?string" + }, + { + "name": "last_name", + "type": "flags.1?string" + }, + { + "name": "about", + "type": "flags.2?string" } ], - "type": "Bool" + "type": "User" }, { - "id": "227648840", - "method": "users.getUsers", + "id": "1713919532", + "method": "account.updateStatus", "params": [ { - "name": "id", - "type": "Vector" + "name": "offline", + "type": "Bool" } ], - "type": "Vector" + "type": "Bool" }, { - "id": "-1240508136", - "method": "users.getFullUser", + "id": "127302966", + "method": "account.getWallPapers", "params": [ { - "name": "id", - "type": "InputUser" + "name": "hash", + "type": "long" } ], - "type": "users.UserFull" + "type": "account.WallPapers" }, { - "id": "-1865902923", - "method": "users.setSecureValueErrors", + "id": "-977650298", + "method": "account.reportPeer", "params": [ { - "name": "id", - "type": "InputUser" + "name": "peer", + "type": "InputPeer" }, { - "name": "errors", - "type": "Vector" + "name": "reason", + "type": "ReportReason" + }, + { + "name": "message", + "type": "string" } ], "type": "Bool" }, { - "id": "-660962397", - "method": "users.getRequirementsToContact", + "id": "655677548", + "method": "account.checkUsername", "params": [ { - "name": "id", - "type": "Vector" + "name": "username", + "type": "string" } ], - "type": "Vector" + "type": "Bool" }, { - "id": "2022539235", - "method": "users.getSavedMusic", + "id": "1040964988", + "method": "account.updateUsername", "params": [ { - "name": "id", - "type": "InputUser" - }, - { - "name": "offset", - "type": "int" - }, - { - "name": "limit", - "type": "int" - }, - { - "name": "hash", - "type": "long" + "name": "username", + "type": "string" } ], - "type": "users.SavedMusic" + "type": "User" }, { - "id": "1970513129", - "method": "users.getSavedMusicByID", + "id": "-623130288", + "method": "account.getPrivacy", "params": [ { - "name": "id", - "type": "InputUser" - }, - { - "name": "documents", - "type": "Vector" + "name": "key", + "type": "InputPrivacyKey" } ], - "type": "users.SavedMusic" + "type": "account.PrivacyRules" }, { - "id": "-61656206", - "method": "users.suggestBirthday", + "id": "-906486552", + "method": "account.setPrivacy", "params": [ { - "name": "id", - "type": "InputUser" + "name": "key", + "type": "InputPrivacyKey" }, { - "name": "birthday", - "type": "Birthday" + "name": "rules", + "type": "Vector" } ], - "type": "Updates" + "type": "account.PrivacyRules" }, { - "id": "2061264541", - "method": "contacts.getContactIDs", + "id": "-1564422284", + "method": "account.deleteAccount", "params": [ { - "name": "hash", - "type": "long" + "name": "flags", + "type": "#" + }, + { + "name": "reason", + "type": "string" + }, + { + "name": "password", + "type": "flags.0?InputCheckPasswordSRP" } ], - "type": "Vector" + "type": "Bool" }, { - "id": "-995929106", - "method": "contacts.getStatuses", + "id": "150761757", + "method": "account.getAccountTTL", "params": [], - "type": "Vector" + "type": "AccountDaysTTL" }, { - "id": "1574346258", - "method": "contacts.getContacts", + "id": "608323678", + "method": "account.setAccountTTL", "params": [ { - "name": "hash", - "type": "long" + "name": "ttl", + "type": "AccountDaysTTL" } ], - "type": "contacts.Contacts" + "type": "Bool" }, { - "id": "746589157", - "method": "contacts.importContacts", + "id": "-2108208411", + "method": "account.sendChangePhoneCode", "params": [ { - "name": "contacts", - "type": "Vector" + "name": "phone_number", + "type": "string" + }, + { + "name": "settings", + "type": "CodeSettings" } ], - "type": "contacts.ImportedContacts" + "type": "auth.SentCode" }, { - "id": "157945344", - "method": "contacts.deleteContacts", + "id": "1891839707", + "method": "account.changePhone", "params": [ { - "name": "id", - "type": "Vector" + "name": "phone_number", + "type": "string" + }, + { + "name": "phone_code_hash", + "type": "string" + }, + { + "name": "phone_code", + "type": "string" } ], - "type": "Updates" + "type": "User" }, { - "id": "269745566", - "method": "contacts.deleteByPhones", + "id": "954152242", + "method": "account.updateDeviceLocked", "params": [ { - "name": "phones", - "type": "Vector" + "name": "period", + "type": "int" } ], "type": "Bool" }, { - "id": "774801204", - "method": "contacts.block", + "id": "-484392616", + "method": "account.getAuthorizations", + "params": [], + "type": "account.Authorizations" + }, + { + "id": "-545786948", + "method": "account.resetAuthorization", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "my_stories_from", - "type": "flags.0?true" - }, - { - "name": "id", - "type": "InputPeer" + "name": "hash", + "type": "long" } ], "type": "Bool" }, { - "id": "-1252994264", - "method": "contacts.unblock", + "id": "1418342645", + "method": "account.getPassword", + "params": [], + "type": "account.Password" + }, + { + "id": "-1663767815", + "method": "account.getPasswordSettings", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "my_stories_from", - "type": "flags.0?true" - }, - { - "name": "id", - "type": "InputPeer" + "name": "password", + "type": "InputCheckPasswordSRP" } ], - "type": "Bool" + "type": "account.PasswordSettings" }, { - "id": "-1702457472", - "method": "contacts.getBlocked", + "id": "-1516564433", + "method": "account.updatePasswordSettings", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "my_stories_from", - "type": "flags.0?true" - }, - { - "name": "offset", - "type": "int" + "name": "password", + "type": "InputCheckPasswordSRP" }, { - "name": "limit", - "type": "int" + "name": "new_settings", + "type": "account.PasswordInputSettings" } ], - "type": "contacts.Blocked" + "type": "Bool" }, { - "id": "301470424", - "method": "contacts.search", + "id": "457157256", + "method": "account.sendConfirmPhoneCode", "params": [ { - "name": "q", + "name": "hash", "type": "string" }, { - "name": "limit", - "type": "int" + "name": "settings", + "type": "CodeSettings" } ], - "type": "contacts.Found" + "type": "auth.SentCode" }, { - "id": "1918565308", - "method": "contacts.resolveUsername", + "id": "1596029123", + "method": "account.confirmPhone", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "username", + "name": "phone_code_hash", "type": "string" }, { - "name": "referer", - "type": "flags.0?string" + "name": "phone_code", + "type": "string" } ], - "type": "contacts.ResolvedPeer" + "type": "Bool" }, { - "id": "-1758168906", - "method": "contacts.getTopPeers", + "id": "1151208273", + "method": "account.getTmpPassword", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "correspondents", - "type": "flags.0?true" - }, - { - "name": "bots_pm", - "type": "flags.1?true" - }, - { - "name": "bots_inline", - "type": "flags.2?true" - }, - { - "name": "phone_calls", - "type": "flags.3?true" - }, - { - "name": "forward_users", - "type": "flags.4?true" - }, - { - "name": "forward_chats", - "type": "flags.5?true" - }, - { - "name": "groups", - "type": "flags.10?true" - }, - { - "name": "channels", - "type": "flags.15?true" - }, - { - "name": "bots_app", - "type": "flags.16?true" - }, - { - "name": "bots_guestchat", - "type": "flags.17?true" - }, - { - "name": "offset", - "type": "int" + "name": "password", + "type": "InputCheckPasswordSRP" }, { - "name": "limit", + "name": "period", "type": "int" - }, - { - "name": "hash", - "type": "long" } ], - "type": "contacts.TopPeers" + "type": "account.TmpPassword" }, { - "id": "451113900", - "method": "contacts.resetTopPeerRating", + "id": "405695855", + "method": "account.getWebAuthorizations", + "params": [], + "type": "account.WebAuthorizations" + }, + { + "id": "755087855", + "method": "account.resetWebAuthorization", "params": [ { - "name": "category", - "type": "TopPeerCategory" - }, - { - "name": "peer", - "type": "InputPeer" + "name": "hash", + "type": "long" } ], "type": "Bool" }, { - "id": "-2020263951", - "method": "contacts.resetSaved", + "id": "1747789204", + "method": "account.resetWebAuthorizations", "params": [], "type": "Bool" }, { - "id": "-2098076769", - "method": "contacts.getSaved", + "id": "-1299661699", + "method": "account.getAllSecureValues", "params": [], - "type": "Vector" + "type": "Vector" }, { - "id": "-2062238246", - "method": "contacts.toggleTopPeers", + "id": "1936088002", + "method": "account.getSecureValue", "params": [ { - "name": "enabled", - "type": "Bool" + "name": "types", + "type": "Vector" } ], - "type": "Bool" + "type": "Vector" }, { - "id": "-642109868", - "method": "contacts.addContact", + "id": "-1986010339", + "method": "account.saveSecureValue", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "add_phone_privacy_exception", - "type": "flags.0?true" - }, - { - "name": "id", - "type": "InputUser" - }, - { - "name": "first_name", - "type": "string" - }, - { - "name": "last_name", - "type": "string" - }, - { - "name": "phone", - "type": "string" + "name": "value", + "type": "InputSecureValue" }, { - "name": "note", - "type": "flags.1?TextWithEntities" + "name": "secure_secret_id", + "type": "long" } ], - "type": "Updates" + "type": "SecureValue" }, { - "id": "-130964977", - "method": "contacts.acceptContact", + "id": "-1199522741", + "method": "account.deleteSecureValue", "params": [ { - "name": "id", - "type": "InputUser" + "name": "types", + "type": "Vector" } ], - "type": "Updates" + "type": "Bool" }, { - "id": "-750207932", - "method": "contacts.getLocated", + "id": "-1456907910", + "method": "account.getAuthorizationForm", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "background", - "type": "flags.1?true" + "name": "bot_id", + "type": "long" }, { - "name": "geo_point", - "type": "InputGeoPoint" + "name": "scope", + "type": "string" }, { - "name": "self_expires", - "type": "flags.0?int" + "name": "public_key", + "type": "string" } ], - "type": "Updates" + "type": "account.AuthorizationForm" }, { - "id": "698914348", - "method": "contacts.blockFromReplies", + "id": "-202552205", + "method": "account.acceptAuthorization", "params": [ { - "name": "flags", - "type": "#" + "name": "bot_id", + "type": "long" }, { - "name": "delete_message", - "type": "flags.0?true" + "name": "scope", + "type": "string" }, { - "name": "delete_history", - "type": "flags.1?true" + "name": "public_key", + "type": "string" }, { - "name": "report_spam", - "type": "flags.2?true" + "name": "value_hashes", + "type": "Vector" }, { - "name": "msg_id", - "type": "int" + "name": "credentials", + "type": "SecureCredentialsEncrypted" } ], - "type": "Updates" + "type": "Bool" }, { - "id": "-1963375804", - "method": "contacts.resolvePhone", + "id": "-1516022023", + "method": "account.sendVerifyPhoneCode", "params": [ { - "name": "phone", + "name": "phone_number", "type": "string" + }, + { + "name": "settings", + "type": "CodeSettings" } ], - "type": "contacts.ResolvedPeer" + "type": "auth.SentCode" }, { - "id": "-127582169", - "method": "contacts.exportContactToken", - "params": [], - "type": "ExportedContactToken" + "id": "1305716726", + "method": "account.verifyPhone", + "params": [ + { + "name": "phone_number", + "type": "string" + }, + { + "name": "phone_code_hash", + "type": "string" + }, + { + "name": "phone_code", + "type": "string" + } + ], + "type": "Bool" }, { - "id": "318789512", - "method": "contacts.importContactToken", + "id": "-1730136133", + "method": "account.sendVerifyEmailCode", "params": [ { - "name": "token", + "name": "purpose", + "type": "EmailVerifyPurpose" + }, + { + "name": "email", "type": "string" } ], - "type": "User" + "type": "account.SentEmailCode" }, { - "id": "-1167653392", - "method": "contacts.editCloseFriends", + "id": "53322959", + "method": "account.verifyEmail", "params": [ { - "name": "id", - "type": "Vector" + "name": "purpose", + "type": "EmailVerifyPurpose" + }, + { + "name": "verification", + "type": "EmailVerification" } ], - "type": "Bool" + "type": "account.EmailVerified" }, { - "id": "-1798939530", - "method": "contacts.setBlocked", + "id": "-1896617296", + "method": "account.initTakeoutSession", "params": [ { "name": "flags", "type": "#" }, { - "name": "my_stories_from", + "name": "contacts", "type": "flags.0?true" }, { - "name": "id", - "type": "Vector" + "name": "message_users", + "type": "flags.1?true" }, { - "name": "limit", - "type": "int" - } - ], - "type": "Bool" - }, + "name": "message_chats", + "type": "flags.2?true" + }, + { + "name": "message_megagroups", + "type": "flags.3?true" + }, + { + "name": "message_channels", + "type": "flags.4?true" + }, + { + "name": "files", + "type": "flags.5?true" + }, + { + "name": "file_max_size", + "type": "flags.5?long" + } + ], + "type": "account.Takeout" + }, + { + "id": "489050862", + "method": "account.finishTakeoutSession", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "success", + "type": "flags.0?true" + } + ], + "type": "Bool" + }, + { + "id": "-1881204448", + "method": "account.confirmPasswordEmail", + "params": [ + { + "name": "code", + "type": "string" + } + ], + "type": "Bool" + }, + { + "id": "2055154197", + "method": "account.resendPasswordEmail", + "params": [], + "type": "Bool" + }, + { + "id": "-1043606090", + "method": "account.cancelPasswordEmail", + "params": [], + "type": "Bool" + }, + { + "id": "-1626880216", + "method": "account.getContactSignUpNotification", + "params": [], + "type": "Bool" + }, + { + "id": "-806076575", + "method": "account.setContactSignUpNotification", + "params": [ + { + "name": "silent", + "type": "Bool" + } + ], + "type": "Bool" + }, + { + "id": "1398240377", + "method": "account.getNotifyExceptions", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "compare_sound", + "type": "flags.1?true" + }, + { + "name": "compare_stories", + "type": "flags.2?true" + }, + { + "name": "peer", + "type": "flags.0?InputNotifyPeer" + } + ], + "type": "Updates" + }, + { + "id": "-57811990", + "method": "account.getWallPaper", + "params": [ + { + "name": "wallpaper", + "type": "InputWallPaper" + } + ], + "type": "WallPaper" + }, + { + "id": "-476410109", + "method": "account.uploadWallPaper", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "for_chat", + "type": "flags.0?true" + }, + { + "name": "file", + "type": "InputFile" + }, + { + "name": "mime_type", + "type": "string" + }, + { + "name": "settings", + "type": "WallPaperSettings" + } + ], + "type": "WallPaper" + }, + { + "id": "1817860919", + "method": "account.saveWallPaper", + "params": [ + { + "name": "wallpaper", + "type": "InputWallPaper" + }, + { + "name": "unsave", + "type": "Bool" + }, + { + "name": "settings", + "type": "WallPaperSettings" + } + ], + "type": "Bool" + }, + { + "id": "-18000023", + "method": "account.installWallPaper", + "params": [ + { + "name": "wallpaper", + "type": "InputWallPaper" + }, + { + "name": "settings", + "type": "WallPaperSettings" + } + ], + "type": "Bool" + }, + { + "id": "-1153722364", + "method": "account.resetWallPapers", + "params": [], + "type": "Bool" + }, + { + "id": "1457130303", + "method": "account.getAutoDownloadSettings", + "params": [], + "type": "account.AutoDownloadSettings" + }, + { + "id": "1995661875", + "method": "account.saveAutoDownloadSettings", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "low", + "type": "flags.0?true" + }, + { + "name": "high", + "type": "flags.1?true" + }, + { + "name": "settings", + "type": "AutoDownloadSettings" + } + ], + "type": "Bool" + }, + { + "id": "473805619", + "method": "account.uploadTheme", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "file", + "type": "InputFile" + }, + { + "name": "thumb", + "type": "flags.0?InputFile" + }, + { + "name": "file_name", + "type": "string" + }, + { + "name": "mime_type", + "type": "string" + } + ], + "type": "Document" + }, + { + "id": "1697530880", + "method": "account.createTheme", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "slug", + "type": "string" + }, + { + "name": "title", + "type": "string" + }, + { + "name": "document", + "type": "flags.2?InputDocument" + }, + { + "name": "settings", + "type": "flags.3?Vector" + } + ], + "type": "Theme" + }, + { + "id": "737414348", + "method": "account.updateTheme", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "format", + "type": "string" + }, + { + "name": "theme", + "type": "InputTheme" + }, + { + "name": "slug", + "type": "flags.0?string" + }, + { + "name": "title", + "type": "flags.1?string" + }, + { + "name": "document", + "type": "flags.2?InputDocument" + }, + { + "name": "settings", + "type": "flags.3?Vector" + } + ], + "type": "Theme" + }, + { + "id": "-229175188", + "method": "account.saveTheme", + "params": [ + { + "name": "theme", + "type": "InputTheme" + }, + { + "name": "unsave", + "type": "Bool" + } + ], + "type": "Bool" + }, + { + "id": "-953697477", + "method": "account.installTheme", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "dark", + "type": "flags.0?true" + }, + { + "name": "theme", + "type": "flags.1?InputTheme" + }, + { + "name": "format", + "type": "flags.2?string" + }, + { + "name": "base_theme", + "type": "flags.3?BaseTheme" + } + ], + "type": "Bool" + }, + { + "id": "978872812", + "method": "account.getTheme", + "params": [ + { + "name": "format", + "type": "string" + }, + { + "name": "theme", + "type": "InputTheme" + } + ], + "type": "Theme" + }, + { + "id": "1913054296", + "method": "account.getThemes", + "params": [ + { + "name": "format", + "type": "string" + }, + { + "name": "hash", + "type": "long" + } + ], + "type": "account.Themes" + }, + { + "id": "-1250643605", + "method": "account.setContentSettings", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "sensitive_enabled", + "type": "flags.0?true" + } + ], + "type": "Bool" + }, + { + "id": "-1952756306", + "method": "account.getContentSettings", + "params": [], + "type": "account.ContentSettings" + }, + { + "id": "1705865692", + "method": "account.getMultiWallPapers", + "params": [ + { + "name": "wallpapers", + "type": "Vector" + } + ], + "type": "Vector" + }, + { + "id": "-349483786", + "method": "account.getGlobalPrivacySettings", + "params": [], + "type": "GlobalPrivacySettings" + }, + { + "id": "517647042", + "method": "account.setGlobalPrivacySettings", + "params": [ + { + "name": "settings", + "type": "GlobalPrivacySettings" + } + ], + "type": "GlobalPrivacySettings" + }, + { + "id": "-91437323", + "method": "account.reportProfilePhoto", + "params": [ + { + "name": "peer", + "type": "InputPeer" + }, + { + "name": "photo_id", + "type": "InputPhoto" + }, + { + "name": "reason", + "type": "ReportReason" + }, + { + "name": "message", + "type": "string" + } + ], + "type": "Bool" + }, + { + "id": "-1828139493", + "method": "account.resetPassword", + "params": [], + "type": "account.ResetPasswordResult" + }, + { + "id": "1284770294", + "method": "account.declinePasswordReset", + "params": [], + "type": "Bool" + }, + { + "id": "-700916087", + "method": "account.getChatThemes", + "params": [ + { + "name": "hash", + "type": "long" + } + ], + "type": "account.Themes" + }, + { + "id": "-1081501024", + "method": "account.setAuthorizationTTL", + "params": [ + { + "name": "authorization_ttl_days", + "type": "int" + } + ], + "type": "Bool" + }, + { + "id": "1089766498", + "method": "account.changeAuthorizationSettings", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "confirmed", + "type": "flags.3?true" + }, + { + "name": "hash", + "type": "long" + }, + { + "name": "encrypted_requests_disabled", + "type": "flags.0?Bool" + }, + { + "name": "call_requests_disabled", + "type": "flags.1?Bool" + } + ], + "type": "Bool" + }, + { + "id": "-510647672", + "method": "account.getSavedRingtones", + "params": [ + { + "name": "hash", + "type": "long" + } + ], + "type": "account.SavedRingtones" + }, + { + "id": "1038768899", + "method": "account.saveRingtone", + "params": [ + { + "name": "id", + "type": "InputDocument" + }, + { + "name": "unsave", + "type": "Bool" + } + ], + "type": "account.SavedRingtone" + }, + { + "id": "-2095414366", + "method": "account.uploadRingtone", + "params": [ + { + "name": "file", + "type": "InputFile" + }, + { + "name": "file_name", + "type": "string" + }, + { + "name": "mime_type", + "type": "string" + } + ], + "type": "Document" + }, + { + "id": "-70001045", + "method": "account.updateEmojiStatus", + "params": [ + { + "name": "emoji_status", + "type": "EmojiStatus" + } + ], + "type": "Bool" + }, + { + "id": "-696962170", + "method": "account.getDefaultEmojiStatuses", + "params": [ + { + "name": "hash", + "type": "long" + } + ], + "type": "account.EmojiStatuses" + }, + { + "id": "257392901", + "method": "account.getRecentEmojiStatuses", + "params": [ + { + "name": "hash", + "type": "long" + } + ], + "type": "account.EmojiStatuses" + }, + { + "id": "404757166", + "method": "account.clearRecentEmojiStatuses", + "params": [], + "type": "Bool" + }, + { + "id": "-279966037", + "method": "account.reorderUsernames", + "params": [ + { + "name": "order", + "type": "Vector" + } + ], + "type": "Bool" + }, + { + "id": "1490465654", + "method": "account.toggleUsername", + "params": [ + { + "name": "username", + "type": "string" + }, + { + "name": "active", + "type": "Bool" + } + ], + "type": "Bool" + }, + { + "id": "-495647960", + "method": "account.getDefaultProfilePhotoEmojis", + "params": [ + { + "name": "hash", + "type": "long" + } + ], + "type": "EmojiList" + }, + { + "id": "-1856479058", + "method": "account.getDefaultGroupPhotoEmojis", + "params": [ + { + "name": "hash", + "type": "long" + } + ], + "type": "EmojiList" + }, + { + "id": "-1379156774", + "method": "account.getAutoSaveSettings", + "params": [], + "type": "account.AutoSaveSettings" + }, + { + "id": "-694451359", + "method": "account.saveAutoSaveSettings", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "users", + "type": "flags.0?true" + }, + { + "name": "chats", + "type": "flags.1?true" + }, + { + "name": "broadcasts", + "type": "flags.2?true" + }, + { + "name": "peer", + "type": "flags.3?InputPeer" + }, + { + "name": "settings", + "type": "AutoSaveSettings" + } + ], + "type": "Bool" + }, + { + "id": "1404829728", + "method": "account.deleteAutoSaveExceptions", + "params": [], + "type": "Bool" + }, + { + "id": "-896866118", + "method": "account.invalidateSignInCodes", + "params": [ + { + "name": "codes", + "type": "Vector" + } + ], + "type": "Bool" + }, + { + "id": "1749885262", + "method": "account.updateColor", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "for_profile", + "type": "flags.1?true" + }, + { + "name": "color", + "type": "flags.2?PeerColor" + } + ], + "type": "Bool" + }, + { + "id": "-1509246514", + "method": "account.getDefaultBackgroundEmojis", + "params": [ + { + "name": "hash", + "type": "long" + } + ], + "type": "EmojiList" + }, + { + "id": "1999087573", + "method": "account.getChannelDefaultEmojiStatuses", + "params": [ + { + "name": "hash", + "type": "long" + } + ], + "type": "account.EmojiStatuses" + }, + { + "id": "900325589", + "method": "account.getChannelRestrictedStatusEmojis", + "params": [ + { + "name": "hash", + "type": "long" + } + ], + "type": "EmojiList" + }, + { + "id": "1258348646", + "method": "account.updateBusinessWorkHours", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "business_work_hours", + "type": "flags.0?BusinessWorkHours" + } + ], + "type": "Bool" + }, + { + "id": "-1637149926", + "method": "account.updateBusinessLocation", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "geo_point", + "type": "flags.1?InputGeoPoint" + }, + { + "name": "address", + "type": "flags.0?string" + } + ], + "type": "Bool" + }, + { + "id": "1724755908", + "method": "account.updateBusinessGreetingMessage", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "message", + "type": "flags.0?InputBusinessGreetingMessage" + } + ], + "type": "Bool" + }, + { + "id": "-1570078811", + "method": "account.updateBusinessAwayMessage", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "message", + "type": "flags.0?InputBusinessAwayMessage" + } + ], + "type": "Bool" + }, + { + "id": "1721797758", + "method": "account.updateConnectedBot", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "deleted", + "type": "flags.1?true" + }, + { + "name": "rights", + "type": "flags.0?BusinessBotRights" + }, + { + "name": "bot", + "type": "InputUser" + }, + { + "name": "recipients", + "type": "InputBusinessBotRecipients" + } + ], + "type": "Updates" + }, + { + "id": "1319421967", + "method": "account.getConnectedBots", + "params": [], + "type": "account.ConnectedBots" + }, + { + "id": "1990746736", + "method": "account.getBotBusinessConnection", + "params": [ + { + "name": "connection_id", + "type": "string" + } + ], + "type": "Updates" + }, + { + "id": "-1508585420", + "method": "account.updateBusinessIntro", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "intro", + "type": "flags.0?InputBusinessIntro" + } + ], + "type": "Bool" + }, + { + "id": "1684934807", + "method": "account.toggleConnectedBotPaused", + "params": [ + { + "name": "peer", + "type": "InputPeer" + }, + { + "name": "paused", + "type": "Bool" + } + ], + "type": "Bool" + }, + { + "id": "1581481689", + "method": "account.disablePeerConnectedBot", + "params": [ + { + "name": "peer", + "type": "InputPeer" + } + ], + "type": "Bool" + }, + { + "id": "-865203183", + "method": "account.updateBirthday", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "birthday", + "type": "flags.0?Birthday" + } + ], + "type": "Bool" + }, + { + "id": "-2007898482", + "method": "account.createBusinessChatLink", + "params": [ + { + "name": "link", + "type": "InputBusinessChatLink" + } + ], + "type": "BusinessChatLink" + }, + { + "id": "-1942744913", + "method": "account.editBusinessChatLink", + "params": [ + { + "name": "slug", + "type": "string" + }, + { + "name": "link", + "type": "InputBusinessChatLink" + } + ], + "type": "BusinessChatLink" + }, + { + "id": "1611085428", + "method": "account.deleteBusinessChatLink", + "params": [ + { + "name": "slug", + "type": "string" + } + ], + "type": "Bool" + }, + { + "id": "1869667809", + "method": "account.getBusinessChatLinks", + "params": [], + "type": "account.BusinessChatLinks" + }, + { + "id": "1418913262", + "method": "account.resolveBusinessChatLink", + "params": [ + { + "name": "slug", + "type": "string" + } + ], + "type": "account.ResolvedBusinessChatLinks" + }, + { + "id": "-649919008", + "method": "account.updatePersonalChannel", + "params": [ + { + "name": "channel", + "type": "InputChannel" + } + ], + "type": "Bool" + }, + { + "id": "-1176919155", + "method": "account.toggleSponsoredMessages", + "params": [ + { + "name": "enabled", + "type": "Bool" + } + ], + "type": "Bool" + }, + { + "id": "115172684", + "method": "account.getReactionsNotifySettings", + "params": [], + "type": "ReactionsNotifySettings" + }, + { + "id": "829220168", + "method": "account.setReactionsNotifySettings", + "params": [ + { + "name": "settings", + "type": "ReactionsNotifySettings" + } + ], + "type": "ReactionsNotifySettings" + }, + { + "id": "779830595", + "method": "account.getCollectibleEmojiStatuses", + "params": [ + { + "name": "hash", + "type": "long" + } + ], + "type": "account.EmojiStatuses" + }, + { + "id": "431639143", + "method": "account.getPaidMessagesRevenue", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "parent_peer", + "type": "flags.0?InputPeer" + }, + { + "name": "user_id", + "type": "InputUser" + } + ], + "type": "account.PaidMessagesRevenue" + }, + { + "id": "-30483850", + "method": "account.toggleNoPaidMessagesException", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "refund_charged", + "type": "flags.0?true" + }, + { + "name": "require_payment", + "type": "flags.2?true" + }, + { + "name": "parent_peer", + "type": "flags.1?InputPeer" + }, + { + "name": "user_id", + "type": "InputUser" + } + ], + "type": "Bool" + }, + { + "id": "1575909552", + "method": "account.setMainProfileTab", + "params": [ + { + "name": "tab", + "type": "ProfileTab" + } + ], + "type": "Bool" + }, + { + "id": "-1301859671", + "method": "account.saveMusic", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "unsave", + "type": "flags.0?true" + }, + { + "name": "id", + "type": "InputDocument" + }, + { + "name": "after_id", + "type": "flags.1?InputDocument" + } + ], + "type": "Bool" + }, + { + "id": "-526557265", + "method": "account.getSavedMusicIds", + "params": [ + { + "name": "hash", + "type": "long" + } + ], + "type": "account.SavedMusicIds" + }, + { + "id": "-466818615", + "method": "account.getUniqueGiftChatThemes", + "params": [ + { + "name": "offset", + "type": "string" + }, + { + "name": "limit", + "type": "int" + }, + { + "name": "hash", + "type": "long" + } + ], + "type": "account.ChatThemes" + }, + { + "id": "1117079528", + "method": "account.initPasskeyRegistration", + "params": [], + "type": "account.PasskeyRegistrationOptions" + }, + { + "id": "1437867990", + "method": "account.registerPasskey", + "params": [ + { + "name": "credential", + "type": "InputPasskeyCredential" + } + ], + "type": "Passkey" + }, + { + "id": "-367063982", + "method": "account.getPasskeys", + "params": [], + "type": "account.Passkeys" + }, + { + "id": "-172665281", + "method": "account.deletePasskey", + "params": [ + { + "name": "id", + "type": "string" + } + ], + "type": "Bool" + }, + { + "id": "1743593320", + "method": "account.confirmBotConnection", + "params": [ + { + "name": "bot_id", + "type": "InputUser" + } + ], + "type": "Bool" + }, + { + "id": "1449482088", + "method": "account.getWebBrowserSettings", + "params": [ + { + "name": "hash", + "type": "long" + } + ], + "type": "account.WebBrowserSettings" + }, + { + "id": "-1696627970", + "method": "account.updateWebBrowserSettings", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "open_external_browser", + "type": "flags.0?true" + }, + { + "name": "display_close_button", + "type": "flags.1?true" + } + ], + "type": "account.WebBrowserSettings" + }, + { + "id": "1626161705", + "method": "account.toggleWebBrowserSettingsException", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "delete", + "type": "flags.1?true" + }, + { + "name": "open_external_browser", + "type": "flags.0?Bool" + }, + { + "name": "url", + "type": "string" + } + ], + "type": "Updates" + }, + { + "id": "-2036304291", + "method": "account.deleteWebBrowserSettingsExceptions", + "params": [], + "type": "account.WebBrowserSettings" + }, + { + "id": "227648840", + "method": "users.getUsers", + "params": [ + { + "name": "id", + "type": "Vector" + } + ], + "type": "Vector" + }, + { + "id": "-1240508136", + "method": "users.getFullUser", + "params": [ + { + "name": "id", + "type": "InputUser" + } + ], + "type": "users.UserFull" + }, + { + "id": "-1865902923", + "method": "users.setSecureValueErrors", + "params": [ + { + "name": "id", + "type": "InputUser" + }, + { + "name": "errors", + "type": "Vector" + } + ], + "type": "Bool" + }, + { + "id": "-660962397", + "method": "users.getRequirementsToContact", + "params": [ + { + "name": "id", + "type": "Vector" + } + ], + "type": "Vector" + }, + { + "id": "2022539235", + "method": "users.getSavedMusic", + "params": [ + { + "name": "id", + "type": "InputUser" + }, + { + "name": "offset", + "type": "int" + }, + { + "name": "limit", + "type": "int" + }, + { + "name": "hash", + "type": "long" + } + ], + "type": "users.SavedMusic" + }, + { + "id": "1970513129", + "method": "users.getSavedMusicByID", + "params": [ + { + "name": "id", + "type": "InputUser" + }, + { + "name": "documents", + "type": "Vector" + } + ], + "type": "users.SavedMusic" + }, + { + "id": "-61656206", + "method": "users.suggestBirthday", + "params": [ + { + "name": "id", + "type": "InputUser" + }, + { + "name": "birthday", + "type": "Birthday" + } + ], + "type": "Updates" + }, + { + "id": "2061264541", + "method": "contacts.getContactIDs", + "params": [ + { + "name": "hash", + "type": "long" + } + ], + "type": "Vector" + }, + { + "id": "-995929106", + "method": "contacts.getStatuses", + "params": [], + "type": "Vector" + }, + { + "id": "1574346258", + "method": "contacts.getContacts", + "params": [ + { + "name": "hash", + "type": "long" + } + ], + "type": "contacts.Contacts" + }, + { + "id": "746589157", + "method": "contacts.importContacts", + "params": [ + { + "name": "contacts", + "type": "Vector" + } + ], + "type": "contacts.ImportedContacts" + }, + { + "id": "157945344", + "method": "contacts.deleteContacts", + "params": [ + { + "name": "id", + "type": "Vector" + } + ], + "type": "Updates" + }, + { + "id": "269745566", + "method": "contacts.deleteByPhones", + "params": [ + { + "name": "phones", + "type": "Vector" + } + ], + "type": "Bool" + }, + { + "id": "774801204", + "method": "contacts.block", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "my_stories_from", + "type": "flags.0?true" + }, + { + "name": "id", + "type": "InputPeer" + } + ], + "type": "Bool" + }, + { + "id": "-1252994264", + "method": "contacts.unblock", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "my_stories_from", + "type": "flags.0?true" + }, + { + "name": "id", + "type": "InputPeer" + } + ], + "type": "Bool" + }, + { + "id": "-1702457472", + "method": "contacts.getBlocked", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "my_stories_from", + "type": "flags.0?true" + }, + { + "name": "offset", + "type": "int" + }, + { + "name": "limit", + "type": "int" + } + ], + "type": "contacts.Blocked" + }, + { + "id": "99978511", + "method": "contacts.search", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "broadcasts", + "type": "flags.0?true" + }, + { + "name": "bots", + "type": "flags.1?true" + }, + { + "name": "q", + "type": "string" + }, + { + "name": "limit", + "type": "int" + } + ], + "type": "contacts.Found" + }, + { + "id": "1918565308", + "method": "contacts.resolveUsername", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "username", + "type": "string" + }, + { + "name": "referer", + "type": "flags.0?string" + } + ], + "type": "contacts.ResolvedPeer" + }, + { + "id": "-1758168906", + "method": "contacts.getTopPeers", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "correspondents", + "type": "flags.0?true" + }, + { + "name": "bots_pm", + "type": "flags.1?true" + }, + { + "name": "bots_inline", + "type": "flags.2?true" + }, + { + "name": "phone_calls", + "type": "flags.3?true" + }, + { + "name": "forward_users", + "type": "flags.4?true" + }, + { + "name": "forward_chats", + "type": "flags.5?true" + }, + { + "name": "groups", + "type": "flags.10?true" + }, + { + "name": "channels", + "type": "flags.15?true" + }, + { + "name": "bots_app", + "type": "flags.16?true" + }, + { + "name": "bots_guestchat", + "type": "flags.17?true" + }, + { + "name": "offset", + "type": "int" + }, + { + "name": "limit", + "type": "int" + }, + { + "name": "hash", + "type": "long" + } + ], + "type": "contacts.TopPeers" + }, + { + "id": "451113900", + "method": "contacts.resetTopPeerRating", + "params": [ + { + "name": "category", + "type": "TopPeerCategory" + }, + { + "name": "peer", + "type": "InputPeer" + } + ], + "type": "Bool" + }, + { + "id": "-2020263951", + "method": "contacts.resetSaved", + "params": [], + "type": "Bool" + }, + { + "id": "-2098076769", + "method": "contacts.getSaved", + "params": [], + "type": "Vector" + }, + { + "id": "-2062238246", + "method": "contacts.toggleTopPeers", + "params": [ + { + "name": "enabled", + "type": "Bool" + } + ], + "type": "Bool" + }, + { + "id": "-642109868", + "method": "contacts.addContact", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "add_phone_privacy_exception", + "type": "flags.0?true" + }, + { + "name": "id", + "type": "InputUser" + }, + { + "name": "first_name", + "type": "string" + }, + { + "name": "last_name", + "type": "string" + }, + { + "name": "phone", + "type": "string" + }, + { + "name": "note", + "type": "flags.1?TextWithEntities" + } + ], + "type": "Updates" + }, + { + "id": "-130964977", + "method": "contacts.acceptContact", + "params": [ + { + "name": "id", + "type": "InputUser" + } + ], + "type": "Updates" + }, + { + "id": "-750207932", + "method": "contacts.getLocated", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "background", + "type": "flags.1?true" + }, + { + "name": "geo_point", + "type": "InputGeoPoint" + }, + { + "name": "self_expires", + "type": "flags.0?int" + } + ], + "type": "Updates" + }, + { + "id": "698914348", + "method": "contacts.blockFromReplies", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "delete_message", + "type": "flags.0?true" + }, + { + "name": "delete_history", + "type": "flags.1?true" + }, + { + "name": "report_spam", + "type": "flags.2?true" + }, + { + "name": "msg_id", + "type": "int" + } + ], + "type": "Updates" + }, + { + "id": "-1963375804", + "method": "contacts.resolvePhone", + "params": [ + { + "name": "phone", + "type": "string" + } + ], + "type": "contacts.ResolvedPeer" + }, + { + "id": "-127582169", + "method": "contacts.exportContactToken", + "params": [], + "type": "ExportedContactToken" + }, + { + "id": "318789512", + "method": "contacts.importContactToken", + "params": [ + { + "name": "token", + "type": "string" + } + ], + "type": "User" + }, + { + "id": "-1167653392", + "method": "contacts.editCloseFriends", + "params": [ + { + "name": "id", + "type": "Vector" + } + ], + "type": "Bool" + }, + { + "id": "-1798939530", + "method": "contacts.setBlocked", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "my_stories_from", + "type": "flags.0?true" + }, + { + "name": "id", + "type": "Vector" + }, + { + "name": "limit", + "type": "int" + } + ], + "type": "Bool" + }, { "id": "-621959068", "method": "contacts.getBirthdays", @@ -34736,6 +37840,40 @@ ], "type": "Bool" }, + { + "id": "-2084206930", + "method": "contacts.exportNoPaidMessagesToken", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "revoke", + "type": "flags.0?true" + }, + { + "name": "temporary", + "type": "flags.1?true" + } + ], + "type": "ExportedNoPaidMessagesToken" + }, + { + "id": "900187850", + "method": "contacts.importNoPaidMessagesToken", + "params": [ + { + "name": "user_id", + "type": "InputUser" + }, + { + "name": "token", + "type": "string" + } + ], + "type": "User" + }, { "id": "1673946374", "method": "messages.getMessages", @@ -35000,7 +38138,7 @@ "type": "Bool" }, { - "id": "1415369050", + "id": "-17526942", "method": "messages.sendMessage", "params": [ { @@ -35090,6 +38228,10 @@ { "name": "suggested_post", "type": "flags.22?SuggestedPost" + }, + { + "name": "rich_message", + "type": "flags.23?InputRichMessage" } ], "type": "Updates" @@ -35225,6 +38367,10 @@ "name": "allow_paid_floodskip", "type": "flags.19?true" }, + { + "name": "from_ephemeral", + "type": "flags.25?true" + }, { "name": "from_peer", "type": "InputPeer" @@ -35754,7 +38900,7 @@ "type": "ChatInvite" }, { - "id": "1817183516", + "id": "-560905362", "method": "messages.importChatInvite", "params": [ { @@ -35762,7 +38908,7 @@ "type": "string" } ], - "type": "Updates" + "type": "messages.ChatInviteJoinResult" }, { "id": "-928977804", @@ -35852,147 +38998,599 @@ "method": "messages.editChatAdmin", "params": [ { - "name": "chat_id", + "name": "chat_id", + "type": "long" + }, + { + "name": "user_id", + "type": "InputUser" + }, + { + "name": "is_admin", + "type": "Bool" + } + ], + "type": "Bool" + }, + { + "id": "-1568189671", + "method": "messages.migrateChat", + "params": [ + { + "name": "chat_id", + "type": "long" + } + ], + "type": "Updates" + }, + { + "id": "1629922364", + "method": "messages.searchGlobal", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "broadcasts_only", + "type": "flags.1?true" + }, + { + "name": "groups_only", + "type": "flags.2?true" + }, + { + "name": "users_only", + "type": "flags.3?true" + }, + { + "name": "folder_id", + "type": "flags.0?int" + }, + { + "name": "community", + "type": "flags.4?InputChannel" + }, + { + "name": "q", + "type": "string" + }, + { + "name": "filter", + "type": "MessagesFilter" + }, + { + "name": "min_date", + "type": "int" + }, + { + "name": "max_date", + "type": "int" + }, + { + "name": "offset_rate", + "type": "int" + }, + { + "name": "offset_peer", + "type": "InputPeer" + }, + { + "name": "offset_id", + "type": "int" + }, + { + "name": "limit", + "type": "int" + } + ], + "type": "messages.Messages" + }, + { + "id": "2016638777", + "method": "messages.reorderStickerSets", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "masks", + "type": "flags.0?true" + }, + { + "name": "emojis", + "type": "flags.1?true" + }, + { + "name": "order", + "type": "Vector" + } + ], + "type": "Bool" + }, + { + "id": "-1309538785", + "method": "messages.getDocumentByHash", + "params": [ + { + "name": "sha256", + "type": "bytes" + }, + { + "name": "size", + "type": "long" + }, + { + "name": "mime_type", + "type": "string" + } + ], + "type": "Document" + }, + { + "id": "1559270965", + "method": "messages.getSavedGifs", + "params": [ + { + "name": "hash", + "type": "long" + } + ], + "type": "messages.SavedGifs" + }, + { + "id": "846868683", + "method": "messages.saveGif", + "params": [ + { + "name": "id", + "type": "InputDocument" + }, + { + "name": "unsave", + "type": "Bool" + } + ], + "type": "Bool" + }, + { + "id": "1364105629", + "method": "messages.getInlineBotResults", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "bot", + "type": "InputUser" + }, + { + "name": "peer", + "type": "InputPeer" + }, + { + "name": "geo_point", + "type": "flags.0?InputGeoPoint" + }, + { + "name": "query", + "type": "string" + }, + { + "name": "offset", + "type": "string" + } + ], + "type": "messages.BotResults" + }, + { + "id": "-1156406247", + "method": "messages.setInlineBotResults", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "gallery", + "type": "flags.0?true" + }, + { + "name": "private", + "type": "flags.1?true" + }, + { + "name": "query_id", + "type": "long" + }, + { + "name": "results", + "type": "Vector" + }, + { + "name": "cache_time", + "type": "int" + }, + { + "name": "next_offset", + "type": "flags.2?string" + }, + { + "name": "switch_pm", + "type": "flags.3?InlineBotSwitchPM" + }, + { + "name": "switch_webview", + "type": "flags.4?InlineBotWebView" + } + ], + "type": "Bool" + }, + { + "id": "-1060145594", + "method": "messages.sendInlineBotResult", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "silent", + "type": "flags.5?true" + }, + { + "name": "background", + "type": "flags.6?true" + }, + { + "name": "clear_draft", + "type": "flags.7?true" + }, + { + "name": "hide_via", + "type": "flags.11?true" + }, + { + "name": "peer", + "type": "InputPeer" + }, + { + "name": "reply_to", + "type": "flags.0?InputReplyTo" + }, + { + "name": "random_id", + "type": "long" + }, + { + "name": "query_id", + "type": "long" + }, + { + "name": "id", + "type": "string" + }, + { + "name": "schedule_date", + "type": "flags.10?int" + }, + { + "name": "send_as", + "type": "flags.13?InputPeer" + }, + { + "name": "quick_reply_shortcut", + "type": "flags.17?InputQuickReplyShortcut" + }, + { + "name": "allow_paid_stars", + "type": "flags.21?long" + } + ], + "type": "Updates" + }, + { + "id": "-39416522", + "method": "messages.getMessageEditData", + "params": [ + { + "name": "peer", + "type": "InputPeer" + }, + { + "name": "id", + "type": "int" + } + ], + "type": "messages.MessageEditData" + }, + { + "id": "-1324947860", + "method": "messages.editMessage", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "no_webpage", + "type": "flags.1?true" + }, + { + "name": "invert_media", + "type": "flags.16?true" + }, + { + "name": "peer", + "type": "InputPeer" + }, + { + "name": "id", + "type": "int" + }, + { + "name": "message", + "type": "flags.11?string" + }, + { + "name": "media", + "type": "flags.14?InputMedia" + }, + { + "name": "reply_markup", + "type": "flags.2?ReplyMarkup" + }, + { + "name": "entities", + "type": "flags.3?Vector" + }, + { + "name": "schedule_date", + "type": "flags.15?int" + }, + { + "name": "schedule_repeat_period", + "type": "flags.18?int" + }, + { + "name": "quick_reply_shortcut_id", + "type": "flags.17?int" + }, + { + "name": "rich_message", + "type": "flags.23?InputRichMessage" + } + ], + "type": "Updates" + }, + { + "id": "-1541162159", + "method": "messages.editInlineBotMessage", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "no_webpage", + "type": "flags.1?true" + }, + { + "name": "invert_media", + "type": "flags.16?true" + }, + { + "name": "id", + "type": "InputBotInlineMessageID" + }, + { + "name": "message", + "type": "flags.11?string" + }, + { + "name": "media", + "type": "flags.14?InputMedia" + }, + { + "name": "reply_markup", + "type": "flags.2?ReplyMarkup" + }, + { + "name": "entities", + "type": "flags.3?Vector" + }, + { + "name": "rich_message", + "type": "flags.23?InputRichMessage" + } + ], + "type": "Bool" + }, + { + "id": "-1824339449", + "method": "messages.getBotCallbackAnswer", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "game", + "type": "flags.1?true" + }, + { + "name": "peer", + "type": "InputPeer" + }, + { + "name": "msg_id", + "type": "int" + }, + { + "name": "data", + "type": "flags.0?bytes" + }, + { + "name": "password", + "type": "flags.2?InputCheckPasswordSRP" + } + ], + "type": "messages.BotCallbackAnswer" + }, + { + "id": "-712043766", + "method": "messages.setBotCallbackAnswer", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "alert", + "type": "flags.1?true" + }, + { + "name": "query_id", "type": "long" }, { - "name": "user_id", - "type": "InputUser" + "name": "message", + "type": "flags.0?string" }, { - "name": "is_admin", - "type": "Bool" + "name": "url", + "type": "flags.2?string" + }, + { + "name": "cache_time", + "type": "int" } ], "type": "Bool" }, { - "id": "-1568189671", - "method": "messages.migrateChat", + "id": "-462373635", + "method": "messages.getPeerDialogs", "params": [ { - "name": "chat_id", - "type": "long" + "name": "peers", + "type": "Vector" } ], - "type": "Updates" + "type": "messages.PeerDialogs" }, { - "id": "1271290010", - "method": "messages.searchGlobal", + "id": "-1391484580", + "method": "messages.saveDraft", "params": [ { "name": "flags", "type": "#" }, { - "name": "broadcasts_only", + "name": "no_webpage", "type": "flags.1?true" }, { - "name": "groups_only", - "type": "flags.2?true" + "name": "invert_media", + "type": "flags.6?true" }, { - "name": "users_only", - "type": "flags.3?true" + "name": "reply_to", + "type": "flags.4?InputReplyTo" }, { - "name": "folder_id", - "type": "flags.0?int" + "name": "peer", + "type": "InputPeer" }, { - "name": "q", + "name": "message", "type": "string" }, { - "name": "filter", - "type": "MessagesFilter" - }, - { - "name": "min_date", - "type": "int" - }, - { - "name": "max_date", - "type": "int" + "name": "entities", + "type": "flags.3?Vector" }, { - "name": "offset_rate", - "type": "int" + "name": "media", + "type": "flags.5?InputMedia" }, { - "name": "offset_peer", - "type": "InputPeer" + "name": "effect", + "type": "flags.7?long" }, { - "name": "offset_id", - "type": "int" + "name": "suggested_post", + "type": "flags.8?SuggestedPost" }, { - "name": "limit", - "type": "int" + "name": "rich_message", + "type": "flags.9?InputRichMessage" } ], - "type": "messages.Messages" + "type": "Bool" }, { - "id": "2016638777", - "method": "messages.reorderStickerSets", + "id": "1782549861", + "method": "messages.getAllDrafts", + "params": [], + "type": "Updates" + }, + { + "id": "1685588756", + "method": "messages.getFeaturedStickers", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "masks", - "type": "flags.0?true" - }, - { - "name": "emojis", - "type": "flags.1?true" - }, + "name": "hash", + "type": "long" + } + ], + "type": "messages.FeaturedStickers" + }, + { + "id": "1527873830", + "method": "messages.readFeaturedStickers", + "params": [ { - "name": "order", + "name": "id", "type": "Vector" } ], "type": "Bool" }, { - "id": "-1309538785", - "method": "messages.getDocumentByHash", + "id": "-1649852357", + "method": "messages.getRecentStickers", "params": [ { - "name": "sha256", - "type": "bytes" + "name": "flags", + "type": "#" }, { - "name": "size", - "type": "long" + "name": "attached", + "type": "flags.0?true" }, - { - "name": "mime_type", - "type": "string" - } - ], - "type": "Document" - }, - { - "id": "1559270965", - "method": "messages.getSavedGifs", - "params": [ { "name": "hash", "type": "long" } ], - "type": "messages.SavedGifs" + "type": "messages.RecentStickers" }, { - "id": "846868683", - "method": "messages.saveGif", + "id": "958863608", + "method": "messages.saveRecentSticker", "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "attached", + "type": "flags.0?true" + }, { "name": "id", "type": "InputDocument" @@ -36005,826 +39603,1075 @@ "type": "Bool" }, { - "id": "1364105629", - "method": "messages.getInlineBotResults", + "id": "-1986437075", + "method": "messages.clearRecentStickers", "params": [ { "name": "flags", "type": "#" }, { - "name": "bot", - "type": "InputUser" + "name": "attached", + "type": "flags.0?true" + } + ], + "type": "Bool" + }, + { + "id": "1475442322", + "method": "messages.getArchivedStickers", + "params": [ + { + "name": "flags", + "type": "#" }, { - "name": "peer", - "type": "InputPeer" + "name": "masks", + "type": "flags.0?true" }, { - "name": "geo_point", - "type": "flags.0?InputGeoPoint" + "name": "emojis", + "type": "flags.1?true" }, { - "name": "query", - "type": "string" + "name": "offset_id", + "type": "long" }, { - "name": "offset", - "type": "string" + "name": "limit", + "type": "int" } ], - "type": "messages.BotResults" + "type": "messages.ArchivedStickers" }, { - "id": "-1156406247", - "method": "messages.setInlineBotResults", + "id": "1678738104", + "method": "messages.getMaskStickers", + "params": [ + { + "name": "hash", + "type": "long" + } + ], + "type": "messages.AllStickers" + }, + { + "id": "-866424884", + "method": "messages.getAttachedStickers", + "params": [ + { + "name": "media", + "type": "InputStickeredMedia" + } + ], + "type": "Vector" + }, + { + "id": "-1896289088", + "method": "messages.setGameScore", "params": [ { "name": "flags", "type": "#" }, { - "name": "gallery", + "name": "edit_message", "type": "flags.0?true" }, { - "name": "private", + "name": "force", "type": "flags.1?true" }, { - "name": "query_id", - "type": "long" - }, - { - "name": "results", - "type": "Vector" + "name": "peer", + "type": "InputPeer" }, { - "name": "cache_time", + "name": "id", "type": "int" }, { - "name": "next_offset", - "type": "flags.2?string" - }, - { - "name": "switch_pm", - "type": "flags.3?InlineBotSwitchPM" + "name": "user_id", + "type": "InputUser" }, { - "name": "switch_webview", - "type": "flags.4?InlineBotWebView" + "name": "score", + "type": "int" } ], - "type": "Bool" + "type": "Updates" }, { - "id": "-1060145594", - "method": "messages.sendInlineBotResult", + "id": "363700068", + "method": "messages.setInlineGameScore", "params": [ { "name": "flags", "type": "#" }, { - "name": "silent", - "type": "flags.5?true" + "name": "edit_message", + "type": "flags.0?true" }, { - "name": "background", - "type": "flags.6?true" + "name": "force", + "type": "flags.1?true" }, { - "name": "clear_draft", - "type": "flags.7?true" + "name": "id", + "type": "InputBotInlineMessageID" }, { - "name": "hide_via", - "type": "flags.11?true" + "name": "user_id", + "type": "InputUser" }, + { + "name": "score", + "type": "int" + } + ], + "type": "Bool" + }, + { + "id": "-400399203", + "method": "messages.getGameHighScores", + "params": [ { "name": "peer", "type": "InputPeer" }, { - "name": "reply_to", - "type": "flags.0?InputReplyTo" - }, - { - "name": "random_id", - "type": "long" + "name": "id", + "type": "int" }, { - "name": "query_id", - "type": "long" - }, + "name": "user_id", + "type": "InputUser" + } + ], + "type": "messages.HighScores" + }, + { + "id": "258170395", + "method": "messages.getInlineGameHighScores", + "params": [ { "name": "id", - "type": "string" + "type": "InputBotInlineMessageID" }, { - "name": "schedule_date", - "type": "flags.10?int" - }, + "name": "user_id", + "type": "InputUser" + } + ], + "type": "messages.HighScores" + }, + { + "id": "-468934396", + "method": "messages.getCommonChats", + "params": [ { - "name": "send_as", - "type": "flags.13?InputPeer" + "name": "user_id", + "type": "InputUser" }, { - "name": "quick_reply_shortcut", - "type": "flags.17?InputQuickReplyShortcut" + "name": "max_id", + "type": "long" }, { - "name": "allow_paid_stars", - "type": "flags.21?long" + "name": "limit", + "type": "int" } ], - "type": "Updates" + "type": "messages.Chats" }, { - "id": "-39416522", - "method": "messages.getMessageEditData", + "id": "-1919511901", + "method": "messages.getWebPage", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "url", + "type": "string" }, { - "name": "id", + "name": "hash", "type": "int" } ], - "type": "messages.MessageEditData" + "type": "messages.WebPage" }, { - "id": "1374175969", - "method": "messages.editMessage", + "id": "-1489903017", + "method": "messages.toggleDialogPin", "params": [ { "name": "flags", "type": "#" }, { - "name": "no_webpage", - "type": "flags.1?true" + "name": "pinned", + "type": "flags.0?true" }, { - "name": "invert_media", - "type": "flags.16?true" + "name": "peer", + "type": "InputDialogPeer" + } + ], + "type": "Bool" + }, + { + "id": "991616823", + "method": "messages.reorderPinnedDialogs", + "params": [ + { + "name": "flags", + "type": "#" }, { - "name": "peer", - "type": "InputPeer" + "name": "force", + "type": "flags.0?true" }, { - "name": "id", + "name": "folder_id", "type": "int" }, { - "name": "message", - "type": "flags.11?string" + "name": "order", + "type": "Vector" + } + ], + "type": "Bool" + }, + { + "id": "-692498958", + "method": "messages.getPinnedDialogs", + "params": [ + { + "name": "folder_id", + "type": "int" + } + ], + "type": "messages.PeerDialogs" + }, + { + "id": "-436833542", + "method": "messages.setBotShippingResults", + "params": [ + { + "name": "flags", + "type": "#" }, { - "name": "media", - "type": "flags.14?InputMedia" + "name": "query_id", + "type": "long" }, { - "name": "reply_markup", - "type": "flags.2?ReplyMarkup" + "name": "error", + "type": "flags.0?string" }, { - "name": "entities", - "type": "flags.3?Vector" + "name": "shipping_options", + "type": "flags.1?Vector" + } + ], + "type": "Bool" + }, + { + "id": "163765653", + "method": "messages.setBotPrecheckoutResults", + "params": [ + { + "name": "flags", + "type": "#" }, { - "name": "schedule_date", - "type": "flags.15?int" + "name": "success", + "type": "flags.1?true" }, { - "name": "schedule_repeat_period", - "type": "flags.18?int" + "name": "query_id", + "type": "long" }, { - "name": "quick_reply_shortcut_id", - "type": "flags.17?int" + "name": "error", + "type": "flags.0?string" } ], - "type": "Updates" + "type": "Bool" }, { - "id": "-2091549254", - "method": "messages.editInlineBotMessage", + "id": "345405816", + "method": "messages.uploadMedia", "params": [ { "name": "flags", "type": "#" }, { - "name": "no_webpage", - "type": "flags.1?true" + "name": "business_connection_id", + "type": "flags.0?string" }, { - "name": "invert_media", - "type": "flags.16?true" + "name": "peer", + "type": "InputPeer" }, { - "name": "id", - "type": "InputBotInlineMessageID" - }, + "name": "media", + "type": "InputMedia" + } + ], + "type": "MessageMedia" + }, + { + "id": "-1589618665", + "method": "messages.sendScreenshotNotification", + "params": [ { - "name": "message", - "type": "flags.11?string" + "name": "peer", + "type": "InputPeer" }, { - "name": "media", - "type": "flags.14?InputMedia" + "name": "reply_to", + "type": "InputReplyTo" }, { - "name": "reply_markup", - "type": "flags.2?ReplyMarkup" + "name": "random_id", + "type": "long" + } + ], + "type": "Updates" + }, + { + "id": "82946729", + "method": "messages.getFavedStickers", + "params": [ + { + "name": "hash", + "type": "long" + } + ], + "type": "messages.FavedStickers" + }, + { + "id": "-1174420133", + "method": "messages.faveSticker", + "params": [ + { + "name": "id", + "type": "InputDocument" }, { - "name": "entities", - "type": "flags.3?Vector" + "name": "unfave", + "type": "Bool" } ], "type": "Bool" }, { - "id": "-1824339449", - "method": "messages.getBotCallbackAnswer", + "id": "-251140208", + "method": "messages.getUnreadMentions", "params": [ { "name": "flags", "type": "#" }, - { - "name": "game", - "type": "flags.1?true" - }, { "name": "peer", "type": "InputPeer" }, { - "name": "msg_id", + "name": "top_msg_id", + "type": "flags.0?int" + }, + { + "name": "offset_id", "type": "int" }, { - "name": "data", - "type": "flags.0?bytes" + "name": "add_offset", + "type": "int" }, { - "name": "password", - "type": "flags.2?InputCheckPasswordSRP" + "name": "limit", + "type": "int" + }, + { + "name": "max_id", + "type": "int" + }, + { + "name": "min_id", + "type": "int" } ], - "type": "messages.BotCallbackAnswer" + "type": "messages.Messages" }, { - "id": "-712043766", - "method": "messages.setBotCallbackAnswer", + "id": "921026381", + "method": "messages.readMentions", "params": [ { "name": "flags", "type": "#" }, { - "name": "alert", - "type": "flags.1?true" - }, - { - "name": "query_id", - "type": "long" - }, - { - "name": "message", - "type": "flags.0?string" - }, - { - "name": "url", - "type": "flags.2?string" + "name": "peer", + "type": "InputPeer" }, { - "name": "cache_time", - "type": "int" + "name": "top_msg_id", + "type": "flags.0?int" } ], - "type": "Bool" + "type": "messages.AffectedHistory" }, { - "id": "-462373635", - "method": "messages.getPeerDialogs", + "id": "1881817312", + "method": "messages.getRecentLocations", "params": [ { - "name": "peers", - "type": "Vector" + "name": "peer", + "type": "InputPeer" + }, + { + "name": "limit", + "type": "int" + }, + { + "name": "hash", + "type": "long" } ], - "type": "messages.PeerDialogs" + "type": "messages.Messages" }, { - "id": "1420701838", - "method": "messages.saveDraft", + "id": "469278068", + "method": "messages.sendMultiMedia", "params": [ { "name": "flags", "type": "#" }, { - "name": "no_webpage", - "type": "flags.1?true" + "name": "silent", + "type": "flags.5?true" }, { - "name": "invert_media", + "name": "background", "type": "flags.6?true" }, { - "name": "reply_to", - "type": "flags.4?InputReplyTo" + "name": "clear_draft", + "type": "flags.7?true" + }, + { + "name": "noforwards", + "type": "flags.14?true" + }, + { + "name": "update_stickersets_order", + "type": "flags.15?true" + }, + { + "name": "invert_media", + "type": "flags.16?true" + }, + { + "name": "allow_paid_floodskip", + "type": "flags.19?true" }, { "name": "peer", "type": "InputPeer" }, { - "name": "message", - "type": "string" + "name": "reply_to", + "type": "flags.0?InputReplyTo" }, { - "name": "entities", - "type": "flags.3?Vector" + "name": "multi_media", + "type": "Vector" }, { - "name": "media", - "type": "flags.5?InputMedia" + "name": "schedule_date", + "type": "flags.10?int" + }, + { + "name": "send_as", + "type": "flags.13?InputPeer" + }, + { + "name": "quick_reply_shortcut", + "type": "flags.17?InputQuickReplyShortcut" }, { "name": "effect", - "type": "flags.7?long" + "type": "flags.18?long" }, { - "name": "suggested_post", - "type": "flags.8?SuggestedPost" + "name": "allow_paid_stars", + "type": "flags.21?long" } ], - "type": "Bool" - }, - { - "id": "1782549861", - "method": "messages.getAllDrafts", - "params": [], "type": "Updates" }, { - "id": "1685588756", - "method": "messages.getFeaturedStickers", + "id": "1347929239", + "method": "messages.uploadEncryptedFile", "params": [ { - "name": "hash", - "type": "long" - } - ], - "type": "messages.FeaturedStickers" - }, - { - "id": "1527873830", - "method": "messages.readFeaturedStickers", - "params": [ + "name": "peer", + "type": "InputEncryptedChat" + }, { - "name": "id", - "type": "Vector" + "name": "file", + "type": "InputEncryptedFile" } ], - "type": "Bool" + "type": "EncryptedFile" }, { - "id": "-1649852357", - "method": "messages.getRecentStickers", + "id": "896555914", + "method": "messages.searchStickerSets", "params": [ { "name": "flags", "type": "#" }, { - "name": "attached", + "name": "exclude_featured", "type": "flags.0?true" }, + { + "name": "q", + "type": "string" + }, { "name": "hash", "type": "long" } ], - "type": "messages.RecentStickers" + "type": "messages.FoundStickerSets" }, { - "id": "958863608", - "method": "messages.saveRecentSticker", + "id": "486505992", + "method": "messages.getSplitRanges", + "params": [], + "type": "Vector" + }, + { + "id": "-1940912392", + "method": "messages.markDialogUnread", "params": [ { "name": "flags", "type": "#" }, { - "name": "attached", + "name": "unread", "type": "flags.0?true" }, { - "name": "id", - "type": "InputDocument" + "name": "parent_peer", + "type": "flags.1?InputPeer" }, { - "name": "unsave", - "type": "Bool" + "name": "peer", + "type": "InputDialogPeer" } ], "type": "Bool" }, { - "id": "-1986437075", - "method": "messages.clearRecentStickers", + "id": "555754018", + "method": "messages.getDialogUnreadMarks", "params": [ { "name": "flags", "type": "#" }, { - "name": "attached", - "type": "flags.0?true" + "name": "parent_peer", + "type": "flags.0?InputPeer" } ], + "type": "Vector" + }, + { + "id": "2119757468", + "method": "messages.clearAllDrafts", + "params": [], "type": "Bool" }, { - "id": "1475442322", - "method": "messages.getArchivedStickers", + "id": "-760547348", + "method": "messages.updatePinnedMessage", "params": [ { "name": "flags", "type": "#" }, { - "name": "masks", + "name": "silent", "type": "flags.0?true" }, { - "name": "emojis", + "name": "unpin", "type": "flags.1?true" }, { - "name": "offset_id", - "type": "long" + "name": "pm_oneside", + "type": "flags.2?true" }, { - "name": "limit", + "name": "peer", + "type": "InputPeer" + }, + { + "name": "id", "type": "int" } ], - "type": "messages.ArchivedStickers" + "type": "Updates" }, { - "id": "1678738104", - "method": "messages.getMaskStickers", + "id": "283795844", + "method": "messages.sendVote", "params": [ { - "name": "hash", - "type": "long" - } - ], - "type": "messages.AllStickers" - }, - { - "id": "-866424884", - "method": "messages.getAttachedStickers", - "params": [ + "name": "peer", + "type": "InputPeer" + }, { - "name": "media", - "type": "InputStickeredMedia" + "name": "msg_id", + "type": "int" + }, + { + "name": "options", + "type": "Vector" } ], - "type": "Vector" + "type": "Updates" }, { - "id": "-1896289088", - "method": "messages.setGameScore", + "id": "-308026565", + "method": "messages.getPollResults", "params": [ - { - "name": "flags", - "type": "#" - }, - { - "name": "edit_message", - "type": "flags.0?true" - }, - { - "name": "force", - "type": "flags.1?true" - }, { "name": "peer", "type": "InputPeer" }, { - "name": "id", + "name": "msg_id", "type": "int" }, { - "name": "user_id", - "type": "InputUser" - }, - { - "name": "score", - "type": "int" + "name": "poll_hash", + "type": "long" } ], "type": "Updates" }, { - "id": "363700068", - "method": "messages.setInlineGameScore", + "id": "1848369232", + "method": "messages.getOnlines", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "edit_message", - "type": "flags.0?true" - }, - { - "name": "force", - "type": "flags.1?true" - }, - { - "name": "id", - "type": "InputBotInlineMessageID" - }, + "name": "peer", + "type": "InputPeer" + } + ], + "type": "ChatOnlines" + }, + { + "id": "-554301545", + "method": "messages.editChatAbout", + "params": [ { - "name": "user_id", - "type": "InputUser" + "name": "peer", + "type": "InputPeer" }, { - "name": "score", - "type": "int" + "name": "about", + "type": "string" } ], "type": "Bool" }, { - "id": "-400399203", - "method": "messages.getGameHighScores", + "id": "-1517917375", + "method": "messages.editChatDefaultBannedRights", "params": [ { "name": "peer", "type": "InputPeer" }, { - "name": "id", - "type": "int" - }, - { - "name": "user_id", - "type": "InputUser" + "name": "banned_rights", + "type": "ChatBannedRights" } ], - "type": "messages.HighScores" + "type": "Updates" }, { - "id": "258170395", - "method": "messages.getInlineGameHighScores", + "id": "899735650", + "method": "messages.getEmojiKeywords", "params": [ { - "name": "id", - "type": "InputBotInlineMessageID" - }, - { - "name": "user_id", - "type": "InputUser" + "name": "lang_code", + "type": "string" } ], - "type": "messages.HighScores" + "type": "EmojiKeywordsDifference" }, { - "id": "-468934396", - "method": "messages.getCommonChats", + "id": "352892591", + "method": "messages.getEmojiKeywordsDifference", "params": [ { - "name": "user_id", - "type": "InputUser" - }, - { - "name": "max_id", - "type": "long" + "name": "lang_code", + "type": "string" }, { - "name": "limit", + "name": "from_version", "type": "int" } ], - "type": "messages.Chats" + "type": "EmojiKeywordsDifference" }, { - "id": "-1919511901", - "method": "messages.getWebPage", + "id": "1318675378", + "method": "messages.getEmojiKeywordsLanguages", "params": [ { - "name": "url", + "name": "lang_codes", + "type": "Vector" + } + ], + "type": "Vector" + }, + { + "id": "-709817306", + "method": "messages.getEmojiURL", + "params": [ + { + "name": "lang_code", "type": "string" + } + ], + "type": "EmojiURL" + }, + { + "id": "465367808", + "method": "messages.getSearchCounters", + "params": [ + { + "name": "flags", + "type": "#" }, { - "name": "hash", - "type": "int" + "name": "peer", + "type": "InputPeer" + }, + { + "name": "saved_peer_id", + "type": "flags.2?InputPeer" + }, + { + "name": "top_msg_id", + "type": "flags.0?int" + }, + { + "name": "filters", + "type": "Vector" } ], - "type": "messages.WebPage" + "type": "Vector" }, { - "id": "-1489903017", - "method": "messages.toggleDialogPin", + "id": "-1991456356", + "method": "messages.requestUrlAuth", "params": [ { "name": "flags", "type": "#" }, { - "name": "pinned", - "type": "flags.0?true" + "name": "peer", + "type": "flags.1?InputPeer" }, { - "name": "peer", - "type": "InputDialogPeer" + "name": "msg_id", + "type": "flags.1?int" + }, + { + "name": "button_id", + "type": "flags.1?int" + }, + { + "name": "url", + "type": "flags.2?string" + }, + { + "name": "in_app_origin", + "type": "flags.3?string" } ], - "type": "Bool" + "type": "UrlAuthResult" }, { - "id": "991616823", - "method": "messages.reorderPinnedDialogs", + "id": "417156754", + "method": "messages.acceptUrlAuth", "params": [ { "name": "flags", "type": "#" }, { - "name": "force", + "name": "write_allowed", "type": "flags.0?true" }, { - "name": "folder_id", - "type": "int" + "name": "share_phone_number", + "type": "flags.3?true" }, { - "name": "order", - "type": "Vector" + "name": "peer", + "type": "flags.1?InputPeer" + }, + { + "name": "msg_id", + "type": "flags.1?int" + }, + { + "name": "button_id", + "type": "flags.1?int" + }, + { + "name": "url", + "type": "flags.2?string" + }, + { + "name": "match_code", + "type": "flags.4?string" + }, + { + "name": "tonconnect_session", + "type": "flags.5?InputTonConnectOauthSession" } ], - "type": "Bool" + "type": "UrlAuthResult" }, { - "id": "-692498958", - "method": "messages.getPinnedDialogs", + "id": "1336717624", + "method": "messages.hidePeerSettingsBar", "params": [ { - "name": "folder_id", - "type": "int" + "name": "peer", + "type": "InputPeer" } ], - "type": "messages.PeerDialogs" + "type": "Bool" }, { - "id": "-436833542", - "method": "messages.setBotShippingResults", + "id": "-183077365", + "method": "messages.getScheduledHistory", "params": [ { - "name": "flags", - "type": "#" + "name": "peer", + "type": "InputPeer" }, { - "name": "query_id", + "name": "hash", "type": "long" + } + ], + "type": "messages.Messages" + }, + { + "id": "-1111817116", + "method": "messages.getScheduledMessages", + "params": [ + { + "name": "peer", + "type": "InputPeer" }, { - "name": "error", - "type": "flags.0?string" + "name": "id", + "type": "Vector" + } + ], + "type": "messages.Messages" + }, + { + "id": "-1120369398", + "method": "messages.sendScheduledMessages", + "params": [ + { + "name": "peer", + "type": "InputPeer" }, { - "name": "shipping_options", - "type": "flags.1?Vector" + "name": "id", + "type": "Vector" } ], - "type": "Bool" + "type": "Updates" }, { - "id": "163765653", - "method": "messages.setBotPrecheckoutResults", + "id": "1504586518", + "method": "messages.deleteScheduledMessages", + "params": [ + { + "name": "peer", + "type": "InputPeer" + }, + { + "name": "id", + "type": "Vector" + } + ], + "type": "Updates" + }, + { + "id": "-1200736242", + "method": "messages.getPollVotes", "params": [ { - "name": "flags", - "type": "#" + "name": "flags", + "type": "#" + }, + { + "name": "peer", + "type": "InputPeer" + }, + { + "name": "id", + "type": "int" }, { - "name": "success", - "type": "flags.1?true" + "name": "option", + "type": "flags.0?bytes" }, { - "name": "query_id", - "type": "long" + "name": "offset", + "type": "flags.1?string" }, { - "name": "error", - "type": "flags.0?string" + "name": "limit", + "type": "int" } ], - "type": "Bool" + "type": "messages.VotesList" }, { - "id": "345405816", - "method": "messages.uploadMedia", + "id": "-1257951254", + "method": "messages.toggleStickerSets", "params": [ { "name": "flags", "type": "#" }, { - "name": "business_connection_id", - "type": "flags.0?string" + "name": "uninstall", + "type": "flags.0?true" }, { - "name": "peer", - "type": "InputPeer" + "name": "archive", + "type": "flags.1?true" }, { - "name": "media", - "type": "InputMedia" + "name": "unarchive", + "type": "flags.2?true" + }, + { + "name": "stickersets", + "type": "Vector" } ], - "type": "MessageMedia" + "type": "Bool" }, { - "id": "-1589618665", - "method": "messages.sendScreenshotNotification", + "id": "-271283063", + "method": "messages.getDialogFilters", + "params": [], + "type": "messages.DialogFilters" + }, + { + "id": "-1566780372", + "method": "messages.getSuggestedDialogFilters", + "params": [], + "type": "Vector" + }, + { + "id": "450142282", + "method": "messages.updateDialogFilter", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "flags", + "type": "#" }, { - "name": "reply_to", - "type": "InputReplyTo" + "name": "id", + "type": "int" }, { - "name": "random_id", - "type": "long" + "name": "filter", + "type": "flags.0?DialogFilter" } ], - "type": "Updates" + "type": "Bool" }, { - "id": "82946729", - "method": "messages.getFavedStickers", + "id": "-983318044", + "method": "messages.updateDialogFiltersOrder", "params": [ { - "name": "hash", - "type": "long" + "name": "order", + "type": "Vector" } ], - "type": "messages.FavedStickers" + "type": "Bool" }, { - "id": "-1174420133", - "method": "messages.faveSticker", + "id": "2127598753", + "method": "messages.getOldFeaturedStickers", "params": [ { - "name": "id", - "type": "InputDocument" + "name": "offset", + "type": "int" }, { - "name": "unfave", - "type": "Bool" + "name": "limit", + "type": "int" + }, + { + "name": "hash", + "type": "long" } ], - "type": "Bool" + "type": "messages.FeaturedStickers" }, { - "id": "-251140208", - "method": "messages.getUnreadMentions", + "id": "584962828", + "method": "messages.getReplies", "params": [ - { - "name": "flags", - "type": "#" - }, { "name": "peer", "type": "InputPeer" }, { - "name": "top_msg_id", - "type": "flags.0?int" + "name": "msg_id", + "type": "int" }, { "name": "offset_id", "type": "int" }, + { + "name": "offset_date", + "type": "int" + }, { "name": "add_offset", "type": "int" @@ -36840,368 +40687,397 @@ { "name": "min_id", "type": "int" + }, + { + "name": "hash", + "type": "long" } ], "type": "messages.Messages" }, { - "id": "921026381", - "method": "messages.readMentions", + "id": "1147761405", + "method": "messages.getDiscussionMessage", "params": [ - { - "name": "flags", - "type": "#" - }, { "name": "peer", "type": "InputPeer" }, { - "name": "top_msg_id", - "type": "flags.0?int" + "name": "msg_id", + "type": "int" } ], - "type": "messages.AffectedHistory" + "type": "messages.DiscussionMessage" }, { - "id": "1881817312", - "method": "messages.getRecentLocations", + "id": "-147740172", + "method": "messages.readDiscussion", "params": [ { "name": "peer", "type": "InputPeer" }, { - "name": "limit", + "name": "msg_id", "type": "int" }, { - "name": "hash", - "type": "long" + "name": "read_max_id", + "type": "int" } ], - "type": "messages.Messages" + "type": "Bool" }, { - "id": "469278068", - "method": "messages.sendMultiMedia", + "id": "103667527", + "method": "messages.unpinAllMessages", "params": [ { "name": "flags", "type": "#" }, { - "name": "silent", - "type": "flags.5?true" + "name": "peer", + "type": "InputPeer" }, { - "name": "background", - "type": "flags.6?true" + "name": "top_msg_id", + "type": "flags.0?int" }, { - "name": "clear_draft", - "type": "flags.7?true" - }, + "name": "saved_peer_id", + "type": "flags.1?InputPeer" + } + ], + "type": "messages.AffectedHistory" + }, + { + "id": "1540419152", + "method": "messages.deleteChat", + "params": [ { - "name": "noforwards", - "type": "flags.14?true" - }, + "name": "chat_id", + "type": "long" + } + ], + "type": "Bool" + }, + { + "id": "-104078327", + "method": "messages.deletePhoneCallHistory", + "params": [ { - "name": "update_stickersets_order", - "type": "flags.15?true" + "name": "flags", + "type": "#" }, { - "name": "invert_media", - "type": "flags.16?true" - }, + "name": "revoke", + "type": "flags.0?true" + } + ], + "type": "messages.AffectedFoundMessages" + }, + { + "id": "1140726259", + "method": "messages.checkHistoryImport", + "params": [ { - "name": "allow_paid_floodskip", - "type": "flags.19?true" - }, + "name": "import_head", + "type": "string" + } + ], + "type": "messages.HistoryImportParsed" + }, + { + "id": "873008187", + "method": "messages.initHistoryImport", + "params": [ { "name": "peer", "type": "InputPeer" }, { - "name": "reply_to", - "type": "flags.0?InputReplyTo" - }, - { - "name": "multi_media", - "type": "Vector" + "name": "file", + "type": "InputFile" }, { - "name": "schedule_date", - "type": "flags.10?int" - }, + "name": "media_count", + "type": "int" + } + ], + "type": "messages.HistoryImport" + }, + { + "id": "713433234", + "method": "messages.uploadImportedMedia", + "params": [ { - "name": "send_as", - "type": "flags.13?InputPeer" + "name": "peer", + "type": "InputPeer" }, { - "name": "quick_reply_shortcut", - "type": "flags.17?InputQuickReplyShortcut" + "name": "import_id", + "type": "long" }, { - "name": "effect", - "type": "flags.18?long" + "name": "file_name", + "type": "string" }, { - "name": "allow_paid_stars", - "type": "flags.21?long" + "name": "media", + "type": "InputMedia" } ], - "type": "Updates" + "type": "MessageMedia" }, { - "id": "1347929239", - "method": "messages.uploadEncryptedFile", + "id": "-1271008444", + "method": "messages.startHistoryImport", "params": [ { "name": "peer", - "type": "InputEncryptedChat" + "type": "InputPeer" }, { - "name": "file", - "type": "InputEncryptedFile" + "name": "import_id", + "type": "long" } ], - "type": "EncryptedFile" + "type": "Bool" }, { - "id": "896555914", - "method": "messages.searchStickerSets", + "id": "-1565154314", + "method": "messages.getExportedChatInvites", "params": [ { "name": "flags", "type": "#" }, { - "name": "exclude_featured", - "type": "flags.0?true" + "name": "revoked", + "type": "flags.3?true" }, { - "name": "q", - "type": "string" + "name": "peer", + "type": "InputPeer" }, { - "name": "hash", - "type": "long" - } - ], - "type": "messages.FoundStickerSets" - }, - { - "id": "486505992", - "method": "messages.getSplitRanges", - "params": [], - "type": "Vector" - }, - { - "id": "-1940912392", - "method": "messages.markDialogUnread", - "params": [ - { - "name": "flags", - "type": "#" + "name": "admin_id", + "type": "InputUser" }, { - "name": "unread", - "type": "flags.0?true" + "name": "offset_date", + "type": "flags.2?int" }, { - "name": "parent_peer", - "type": "flags.1?InputPeer" + "name": "offset_link", + "type": "flags.2?string" }, { - "name": "peer", - "type": "InputDialogPeer" + "name": "limit", + "type": "int" } ], - "type": "Bool" + "type": "messages.ExportedChatInvites" }, { - "id": "555754018", - "method": "messages.getDialogUnreadMarks", + "id": "1937010524", + "method": "messages.getExportedChatInvite", "params": [ { - "name": "flags", - "type": "#" + "name": "peer", + "type": "InputPeer" }, { - "name": "parent_peer", - "type": "flags.0?InputPeer" + "name": "link", + "type": "string" } ], - "type": "Vector" - }, - { - "id": "2119757468", - "method": "messages.clearAllDrafts", - "params": [], - "type": "Bool" + "type": "messages.ExportedChatInvite" }, { - "id": "-760547348", - "method": "messages.updatePinnedMessage", + "id": "-1110823051", + "method": "messages.editExportedChatInvite", "params": [ { "name": "flags", "type": "#" }, { - "name": "silent", - "type": "flags.0?true" + "name": "revoked", + "type": "flags.2?true" }, { - "name": "unpin", - "type": "flags.1?true" + "name": "peer", + "type": "InputPeer" }, { - "name": "pm_oneside", - "type": "flags.2?true" + "name": "link", + "type": "string" }, { - "name": "peer", - "type": "InputPeer" + "name": "expire_date", + "type": "flags.0?int" }, { - "name": "id", - "type": "int" + "name": "usage_limit", + "type": "flags.1?int" + }, + { + "name": "request_needed", + "type": "flags.3?Bool" + }, + { + "name": "title", + "type": "flags.4?string" } ], - "type": "Updates" + "type": "messages.ExportedChatInvite" }, { - "id": "283795844", - "method": "messages.sendVote", + "id": "1452833749", + "method": "messages.deleteRevokedExportedChatInvites", "params": [ { "name": "peer", "type": "InputPeer" }, { - "name": "msg_id", - "type": "int" - }, - { - "name": "options", - "type": "Vector" + "name": "admin_id", + "type": "InputUser" } ], - "type": "Updates" + "type": "Bool" }, { - "id": "-308026565", - "method": "messages.getPollResults", + "id": "-731601877", + "method": "messages.deleteExportedChatInvite", "params": [ { "name": "peer", "type": "InputPeer" }, { - "name": "msg_id", - "type": "int" - }, - { - "name": "poll_hash", - "type": "long" + "name": "link", + "type": "string" } ], - "type": "Updates" + "type": "Bool" }, { - "id": "1848369232", - "method": "messages.getOnlines", + "id": "958457583", + "method": "messages.getAdminsWithInvites", "params": [ { "name": "peer", "type": "InputPeer" } ], - "type": "ChatOnlines" + "type": "messages.ChatAdminsWithInvites" }, { - "id": "-554301545", - "method": "messages.editChatAbout", + "id": "-553329330", + "method": "messages.getChatInviteImporters", "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "requested", + "type": "flags.0?true" + }, + { + "name": "subscription_expired", + "type": "flags.3?true" + }, { "name": "peer", "type": "InputPeer" }, { - "name": "about", - "type": "string" + "name": "link", + "type": "flags.1?string" + }, + { + "name": "q", + "type": "flags.2?string" + }, + { + "name": "offset_date", + "type": "int" + }, + { + "name": "offset_user", + "type": "InputUser" + }, + { + "name": "limit", + "type": "int" } ], - "type": "Bool" + "type": "messages.ChatInviteImporters" }, { - "id": "-1517917375", - "method": "messages.editChatDefaultBannedRights", + "id": "-1207017500", + "method": "messages.setHistoryTTL", "params": [ { "name": "peer", "type": "InputPeer" }, { - "name": "banned_rights", - "type": "ChatBannedRights" + "name": "period", + "type": "int" } ], "type": "Updates" }, { - "id": "899735650", - "method": "messages.getEmojiKeywords", + "id": "1573261059", + "method": "messages.checkHistoryImportPeer", "params": [ { - "name": "lang_code", - "type": "string" + "name": "peer", + "type": "InputPeer" } ], - "type": "EmojiKeywordsDifference" + "type": "messages.CheckedHistoryImportPeer" }, { - "id": "352892591", - "method": "messages.getEmojiKeywordsDifference", + "id": "135398089", + "method": "messages.setChatTheme", "params": [ { - "name": "lang_code", - "type": "string" + "name": "peer", + "type": "InputPeer" }, { - "name": "from_version", - "type": "int" + "name": "theme", + "type": "InputChatTheme" } ], - "type": "EmojiKeywordsDifference" + "type": "Updates" }, { - "id": "1318675378", - "method": "messages.getEmojiKeywordsLanguages", + "id": "834782287", + "method": "messages.getMessageReadParticipants", "params": [ { - "name": "lang_codes", - "type": "Vector" - } - ], - "type": "Vector" - }, - { - "id": "-709817306", - "method": "messages.getEmojiURL", - "params": [ + "name": "peer", + "type": "InputPeer" + }, { - "name": "lang_code", - "type": "string" + "name": "msg_id", + "type": "int" } ], - "type": "EmojiURL" + "type": "Vector" }, { - "id": "465367808", - "method": "messages.getSearchCounters", + "id": "1789130429", + "method": "messages.getSearchResultsCalendar", "params": [ { "name": "flags", @@ -37216,19 +41092,23 @@ "type": "flags.2?InputPeer" }, { - "name": "top_msg_id", - "type": "flags.0?int" + "name": "filter", + "type": "MessagesFilter" }, { - "name": "filters", - "type": "Vector" + "name": "offset_id", + "type": "int" + }, + { + "name": "offset_date", + "type": "int" } ], - "type": "Vector" + "type": "messages.SearchResultsCalendar" }, { - "id": "-1991456356", - "method": "messages.requestUrlAuth", + "id": "-1669386480", + "method": "messages.getSearchResultsPositions", "params": [ { "name": "flags", @@ -37236,125 +41116,145 @@ }, { "name": "peer", - "type": "flags.1?InputPeer" + "type": "InputPeer" }, { - "name": "msg_id", - "type": "flags.1?int" + "name": "saved_peer_id", + "type": "flags.2?InputPeer" }, { - "name": "button_id", - "type": "flags.1?int" + "name": "filter", + "type": "MessagesFilter" }, { - "name": "url", - "type": "flags.2?string" + "name": "offset_id", + "type": "int" }, { - "name": "in_app_origin", - "type": "flags.3?string" + "name": "limit", + "type": "int" } ], - "type": "UrlAuthResult" + "type": "messages.SearchResultsPositions" }, { - "id": "1738797278", - "method": "messages.acceptUrlAuth", + "id": "2145904661", + "method": "messages.hideChatJoinRequest", "params": [ { "name": "flags", "type": "#" }, { - "name": "write_allowed", + "name": "approved", "type": "flags.0?true" }, - { - "name": "share_phone_number", - "type": "flags.3?true" - }, { "name": "peer", - "type": "flags.1?InputPeer" - }, - { - "name": "msg_id", - "type": "flags.1?int" - }, - { - "name": "button_id", - "type": "flags.1?int" - }, - { - "name": "url", - "type": "flags.2?string" + "type": "InputPeer" }, { - "name": "match_code", - "type": "flags.4?string" + "name": "user_id", + "type": "InputUser" } ], - "type": "UrlAuthResult" + "type": "Updates" }, { - "id": "1336717624", - "method": "messages.hidePeerSettingsBar", + "id": "-528091926", + "method": "messages.hideAllChatJoinRequests", "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "approved", + "type": "flags.0?true" + }, { "name": "peer", "type": "InputPeer" + }, + { + "name": "link", + "type": "flags.1?string" } ], - "type": "Bool" + "type": "Updates" }, { - "id": "-183077365", - "method": "messages.getScheduledHistory", + "id": "-1308091851", + "method": "messages.toggleNoForwards", "params": [ + { + "name": "flags", + "type": "#" + }, { "name": "peer", "type": "InputPeer" }, { - "name": "hash", - "type": "long" + "name": "enabled", + "type": "Bool" + }, + { + "name": "request_msg_id", + "type": "flags.0?int" } ], - "type": "messages.Messages" + "type": "Updates" }, { - "id": "-1111817116", - "method": "messages.getScheduledMessages", + "id": "-855777386", + "method": "messages.saveDefaultSendAs", "params": [ { "name": "peer", "type": "InputPeer" }, { - "name": "id", - "type": "Vector" + "name": "send_as", + "type": "InputPeer" } ], - "type": "messages.Messages" + "type": "Bool" }, { - "id": "-1120369398", - "method": "messages.sendScheduledMessages", + "id": "-754091820", + "method": "messages.sendReaction", "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "big", + "type": "flags.1?true" + }, + { + "name": "add_to_recent", + "type": "flags.2?true" + }, { "name": "peer", "type": "InputPeer" }, { - "name": "id", - "type": "Vector" + "name": "msg_id", + "type": "int" + }, + { + "name": "reaction", + "type": "flags.0?Vector" } ], "type": "Updates" }, { - "id": "1504586518", - "method": "messages.deleteScheduledMessages", + "id": "-1950707482", + "method": "messages.getMessagesReactions", "params": [ { "name": "peer", @@ -37368,8 +41268,8 @@ "type": "Updates" }, { - "id": "-1200736242", - "method": "messages.getPollVotes", + "id": "1176190792", + "method": "messages.getMessageReactionsList", "params": [ { "name": "flags", @@ -37384,8 +41284,8 @@ "type": "int" }, { - "name": "option", - "type": "flags.0?bytes" + "name": "reaction", + "type": "flags.0?Reaction" }, { "name": "offset", @@ -37396,114 +41296,110 @@ "type": "int" } ], - "type": "messages.VotesList" + "type": "messages.MessageReactionsList" }, { - "id": "-1257951254", - "method": "messages.toggleStickerSets", + "id": "-2041895551", + "method": "messages.setChatAvailableReactions", "params": [ { "name": "flags", "type": "#" }, { - "name": "uninstall", - "type": "flags.0?true" + "name": "peer", + "type": "InputPeer" }, { - "name": "archive", - "type": "flags.1?true" + "name": "available_reactions", + "type": "ChatReactions" }, { - "name": "unarchive", - "type": "flags.2?true" + "name": "reactions_limit", + "type": "flags.0?int" }, { - "name": "stickersets", - "type": "Vector" + "name": "paid_enabled", + "type": "flags.1?Bool" } ], - "type": "Bool" - }, - { - "id": "-271283063", - "method": "messages.getDialogFilters", - "params": [], - "type": "messages.DialogFilters" - }, - { - "id": "-1566780372", - "method": "messages.getSuggestedDialogFilters", - "params": [], - "type": "Vector" + "type": "Updates" }, { - "id": "450142282", - "method": "messages.updateDialogFilter", + "id": "417243308", + "method": "messages.getAvailableReactions", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "id", + "name": "hash", "type": "int" - }, - { - "name": "filter", - "type": "flags.0?DialogFilter" } ], - "type": "Bool" + "type": "messages.AvailableReactions" }, { - "id": "-983318044", - "method": "messages.updateDialogFiltersOrder", + "id": "1330094102", + "method": "messages.setDefaultReaction", "params": [ { - "name": "order", - "type": "Vector" + "name": "reaction", + "type": "Reaction" } ], "type": "Bool" }, { - "id": "2127598753", - "method": "messages.getOldFeaturedStickers", + "id": "-1511079099", + "method": "messages.translateText", "params": [ { - "name": "offset", - "type": "int" + "name": "flags", + "type": "#" }, { - "name": "limit", - "type": "int" + "name": "peer", + "type": "flags.0?InputPeer" }, { - "name": "hash", - "type": "long" + "name": "id", + "type": "flags.0?Vector" + }, + { + "name": "text", + "type": "flags.1?Vector" + }, + { + "name": "to_lang", + "type": "string" + }, + { + "name": "tone", + "type": "flags.2?string" } ], - "type": "messages.FeaturedStickers" + "type": "messages.TranslatedText" }, { - "id": "584962828", - "method": "messages.getReplies", + "id": "-1115713364", + "method": "messages.getUnreadReactions", "params": [ + { + "name": "flags", + "type": "#" + }, { "name": "peer", "type": "InputPeer" }, { - "name": "msg_id", - "type": "int" + "name": "top_msg_id", + "type": "flags.0?int" }, { - "name": "offset_id", - "type": "int" + "name": "saved_peer_id", + "type": "flags.1?InputPeer" }, { - "name": "offset_date", + "name": "offset_id", "type": "int" }, { @@ -37521,51 +41417,13 @@ { "name": "min_id", "type": "int" - }, - { - "name": "hash", - "type": "long" } ], "type": "messages.Messages" }, { - "id": "1147761405", - "method": "messages.getDiscussionMessage", - "params": [ - { - "name": "peer", - "type": "InputPeer" - }, - { - "name": "msg_id", - "type": "int" - } - ], - "type": "messages.DiscussionMessage" - }, - { - "id": "-147740172", - "method": "messages.readDiscussion", - "params": [ - { - "name": "peer", - "type": "InputPeer" - }, - { - "name": "msg_id", - "type": "int" - }, - { - "name": "read_max_id", - "type": "int" - } - ], - "type": "Bool" - }, - { - "id": "103667527", - "method": "messages.unpinAllMessages", + "id": "-1631301741", + "method": "messages.readReactions", "params": [ { "name": "flags", @@ -37587,316 +41445,251 @@ "type": "messages.AffectedHistory" }, { - "id": "1540419152", - "method": "messages.deleteChat", + "id": "276705696", + "method": "messages.searchSentMedia", "params": [ { - "name": "chat_id", - "type": "long" - } - ], - "type": "Bool" - }, - { - "id": "-104078327", - "method": "messages.deletePhoneCallHistory", - "params": [ + "name": "q", + "type": "string" + }, { - "name": "flags", - "type": "#" + "name": "filter", + "type": "MessagesFilter" }, { - "name": "revoke", - "type": "flags.0?true" + "name": "limit", + "type": "int" } ], - "type": "messages.AffectedFoundMessages" + "type": "messages.Messages" }, { - "id": "1140726259", - "method": "messages.checkHistoryImport", + "id": "385663691", + "method": "messages.getAttachMenuBots", "params": [ { - "name": "import_head", - "type": "string" + "name": "hash", + "type": "long" } ], - "type": "messages.HistoryImportParsed" + "type": "AttachMenuBots" }, { - "id": "873008187", - "method": "messages.initHistoryImport", + "id": "1998676370", + "method": "messages.getAttachMenuBot", "params": [ { - "name": "peer", - "type": "InputPeer" - }, - { - "name": "file", - "type": "InputFile" - }, - { - "name": "media_count", - "type": "int" + "name": "bot", + "type": "InputUser" } ], - "type": "messages.HistoryImport" + "type": "AttachMenuBotsBot" }, { - "id": "713433234", - "method": "messages.uploadImportedMedia", + "id": "1777704297", + "method": "messages.toggleBotInAttachMenu", "params": [ { - "name": "peer", - "type": "InputPeer" - }, - { - "name": "import_id", - "type": "long" + "name": "flags", + "type": "#" }, { - "name": "file_name", - "type": "string" + "name": "write_allowed", + "type": "flags.0?true" }, { - "name": "media", - "type": "InputMedia" - } - ], - "type": "MessageMedia" - }, - { - "id": "-1271008444", - "method": "messages.startHistoryImport", - "params": [ - { - "name": "peer", - "type": "InputPeer" + "name": "bot", + "type": "InputUser" }, { - "name": "import_id", - "type": "long" + "name": "enabled", + "type": "Bool" } ], "type": "Bool" }, { - "id": "-1565154314", - "method": "messages.getExportedChatInvites", + "id": "647873217", + "method": "messages.requestWebView", "params": [ { "name": "flags", "type": "#" }, { - "name": "revoked", - "type": "flags.3?true" - }, - { - "name": "peer", - "type": "InputPeer" + "name": "from_bot_menu", + "type": "flags.4?true" }, { - "name": "admin_id", - "type": "InputUser" + "name": "silent", + "type": "flags.5?true" }, { - "name": "offset_date", - "type": "flags.2?int" + "name": "compact", + "type": "flags.7?true" }, { - "name": "offset_link", - "type": "flags.2?string" + "name": "fullscreen", + "type": "flags.8?true" }, - { - "name": "limit", - "type": "int" - } - ], - "type": "messages.ExportedChatInvites" - }, - { - "id": "1937010524", - "method": "messages.getExportedChatInvite", - "params": [ { "name": "peer", "type": "InputPeer" }, { - "name": "link", - "type": "string" - } - ], - "type": "messages.ExportedChatInvite" - }, - { - "id": "-1110823051", - "method": "messages.editExportedChatInvite", - "params": [ - { - "name": "flags", - "type": "#" - }, - { - "name": "revoked", - "type": "flags.2?true" + "name": "bot", + "type": "InputUser" }, { - "name": "peer", - "type": "InputPeer" + "name": "url", + "type": "flags.1?string" }, { - "name": "link", - "type": "string" + "name": "start_param", + "type": "flags.3?string" }, { - "name": "expire_date", - "type": "flags.0?int" + "name": "theme_params", + "type": "flags.2?DataJSON" }, { - "name": "usage_limit", - "type": "flags.1?int" + "name": "platform", + "type": "string" }, { - "name": "request_needed", - "type": "flags.3?Bool" + "name": "reply_to", + "type": "flags.0?InputReplyTo" }, { - "name": "title", - "type": "flags.4?string" + "name": "send_as", + "type": "flags.13?InputPeer" } ], - "type": "messages.ExportedChatInvite" + "type": "WebViewResult" }, { - "id": "1452833749", - "method": "messages.deleteRevokedExportedChatInvites", + "id": "-1328014717", + "method": "messages.prolongWebView", "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "silent", + "type": "flags.5?true" + }, { "name": "peer", "type": "InputPeer" }, { - "name": "admin_id", + "name": "bot", "type": "InputUser" - } - ], - "type": "Bool" - }, - { - "id": "-731601877", - "method": "messages.deleteExportedChatInvite", - "params": [ + }, { - "name": "peer", - "type": "InputPeer" + "name": "query_id", + "type": "long" }, { - "name": "link", - "type": "string" - } - ], - "type": "Bool" - }, - { - "id": "958457583", - "method": "messages.getAdminsWithInvites", - "params": [ + "name": "reply_to", + "type": "flags.0?InputReplyTo" + }, { - "name": "peer", - "type": "InputPeer" + "name": "send_as", + "type": "flags.13?InputPeer" } ], - "type": "messages.ChatAdminsWithInvites" + "type": "Bool" }, { - "id": "-553329330", - "method": "messages.getChatInviteImporters", + "id": "1094336115", + "method": "messages.requestSimpleWebView", "params": [ { "name": "flags", "type": "#" }, { - "name": "requested", - "type": "flags.0?true" + "name": "from_switch_webview", + "type": "flags.1?true" + }, + { + "name": "from_side_menu", + "type": "flags.2?true" }, { - "name": "subscription_expired", - "type": "flags.3?true" + "name": "compact", + "type": "flags.7?true" }, { - "name": "peer", - "type": "InputPeer" + "name": "fullscreen", + "type": "flags.8?true" }, { - "name": "link", - "type": "flags.1?string" + "name": "bot", + "type": "InputUser" }, { - "name": "q", - "type": "flags.2?string" + "name": "url", + "type": "flags.3?string" }, { - "name": "offset_date", - "type": "int" + "name": "start_param", + "type": "flags.4?string" }, { - "name": "offset_user", - "type": "InputUser" + "name": "theme_params", + "type": "flags.0?DataJSON" }, { - "name": "limit", - "type": "int" + "name": "platform", + "type": "string" } ], - "type": "messages.ChatInviteImporters" + "type": "WebViewResult" }, { - "id": "-1207017500", - "method": "messages.setHistoryTTL", + "id": "172168437", + "method": "messages.sendWebViewResultMessage", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "bot_query_id", + "type": "string" }, { - "name": "period", - "type": "int" + "name": "result", + "type": "InputBotInlineResult" } ], - "type": "Updates" + "type": "WebViewMessageSent" }, { - "id": "1573261059", - "method": "messages.checkHistoryImportPeer", + "id": "-603831608", + "method": "messages.sendWebViewData", "params": [ { - "name": "peer", - "type": "InputPeer" - } - ], - "type": "messages.CheckedHistoryImportPeer" - }, - { - "id": "135398089", - "method": "messages.setChatTheme", - "params": [ + "name": "bot", + "type": "InputUser" + }, { - "name": "peer", - "type": "InputPeer" + "name": "random_id", + "type": "long" }, { - "name": "theme", - "type": "InputChatTheme" + "name": "button_text", + "type": "string" + }, + { + "name": "data", + "type": "string" } ], "type": "Updates" }, { - "id": "834782287", - "method": "messages.getMessageReadParticipants", + "id": "647928393", + "method": "messages.transcribeAudio", "params": [ { "name": "peer", @@ -37907,188 +41700,122 @@ "type": "int" } ], - "type": "Vector" + "type": "messages.TranscribedAudio" }, { - "id": "1789130429", - "method": "messages.getSearchResultsCalendar", + "id": "2132608815", + "method": "messages.rateTranscribedAudio", "params": [ - { - "name": "flags", - "type": "#" - }, { "name": "peer", "type": "InputPeer" }, { - "name": "saved_peer_id", - "type": "flags.2?InputPeer" - }, - { - "name": "filter", - "type": "MessagesFilter" + "name": "msg_id", + "type": "int" }, { - "name": "offset_id", - "type": "int" + "name": "transcription_id", + "type": "long" }, { - "name": "offset_date", - "type": "int" + "name": "good", + "type": "Bool" } ], - "type": "messages.SearchResultsCalendar" + "type": "Bool" }, { - "id": "-1669386480", - "method": "messages.getSearchResultsPositions", + "id": "-643100844", + "method": "messages.getCustomEmojiDocuments", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "peer", - "type": "InputPeer" - }, - { - "name": "saved_peer_id", - "type": "flags.2?InputPeer" - }, - { - "name": "filter", - "type": "MessagesFilter" - }, - { - "name": "offset_id", - "type": "int" - }, - { - "name": "limit", - "type": "int" + "name": "document_id", + "type": "Vector" } ], - "type": "messages.SearchResultsPositions" + "type": "Vector" }, { - "id": "2145904661", - "method": "messages.hideChatJoinRequest", + "id": "-67329649", + "method": "messages.getEmojiStickers", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "approved", - "type": "flags.0?true" - }, - { - "name": "peer", - "type": "InputPeer" - }, - { - "name": "user_id", - "type": "InputUser" + "name": "hash", + "type": "long" } ], - "type": "Updates" + "type": "messages.AllStickers" }, { - "id": "-528091926", - "method": "messages.hideAllChatJoinRequests", + "id": "248473398", + "method": "messages.getFeaturedEmojiStickers", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "approved", - "type": "flags.0?true" - }, - { - "name": "peer", - "type": "InputPeer" - }, - { - "name": "link", - "type": "flags.1?string" + "name": "hash", + "type": "long" } ], - "type": "Updates" + "type": "messages.FeaturedStickers" }, { - "id": "-1308091851", - "method": "messages.toggleNoForwards", + "id": "1063567478", + "method": "messages.reportReaction", "params": [ - { - "name": "flags", - "type": "#" - }, { "name": "peer", "type": "InputPeer" }, { - "name": "enabled", - "type": "Bool" + "name": "id", + "type": "int" }, { - "name": "request_msg_id", - "type": "flags.0?int" + "name": "reaction_peer", + "type": "InputPeer" } ], - "type": "Updates" + "type": "Bool" }, { - "id": "-855777386", - "method": "messages.saveDefaultSendAs", + "id": "-1149164102", + "method": "messages.getTopReactions", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "limit", + "type": "int" }, { - "name": "send_as", - "type": "InputPeer" + "name": "hash", + "type": "long" } ], - "type": "Bool" + "type": "messages.Reactions" }, { - "id": "-754091820", - "method": "messages.sendReaction", + "id": "960896434", + "method": "messages.getRecentReactions", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "big", - "type": "flags.1?true" - }, - { - "name": "add_to_recent", - "type": "flags.2?true" - }, - { - "name": "peer", - "type": "InputPeer" - }, - { - "name": "msg_id", + "name": "limit", "type": "int" }, { - "name": "reaction", - "type": "flags.0?Vector" + "name": "hash", + "type": "long" } ], - "type": "Updates" + "type": "messages.Reactions" }, { - "id": "-1950707482", - "method": "messages.getMessagesReactions", + "id": "-1644236876", + "method": "messages.clearRecentReactions", + "params": [], + "type": "Bool" + }, + { + "id": "-2064119788", + "method": "messages.getExtendedMedia", "params": [ { "name": "peer", @@ -38102,8 +41829,25 @@ "type": "Updates" }, { - "id": "1176190792", - "method": "messages.getMessageReactionsList", + "id": "-1632299963", + "method": "messages.setDefaultHistoryTTL", + "params": [ + { + "name": "period", + "type": "int" + } + ], + "type": "Bool" + }, + { + "id": "1703637384", + "method": "messages.getDefaultHistoryTTL", + "params": [], + "type": "DefaultHistoryTTL" + }, + { + "id": "1818030759", + "method": "messages.sendBotRequestedPeer", "params": [ { "name": "flags", @@ -38114,416 +41858,420 @@ "type": "InputPeer" }, { - "name": "id", - "type": "int" - }, - { - "name": "reaction", - "type": "flags.0?Reaction" + "name": "msg_id", + "type": "flags.0?int" }, { - "name": "offset", + "name": "webapp_req_id", "type": "flags.1?string" }, { - "name": "limit", + "name": "button_id", "type": "int" + }, + { + "name": "requested_peers", + "type": "Vector" } ], - "type": "messages.MessageReactionsList" + "type": "Updates" }, { - "id": "-2041895551", - "method": "messages.setChatAvailableReactions", + "id": "1955122779", + "method": "messages.getEmojiGroups", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "peer", - "type": "InputPeer" - }, - { - "name": "available_reactions", - "type": "ChatReactions" - }, - { - "name": "reactions_limit", - "type": "flags.0?int" - }, + "name": "hash", + "type": "int" + } + ], + "type": "messages.EmojiGroups" + }, + { + "id": "785209037", + "method": "messages.getEmojiStatusGroups", + "params": [ { - "name": "paid_enabled", - "type": "flags.1?Bool" + "name": "hash", + "type": "int" } ], - "type": "Updates" + "type": "messages.EmojiGroups" }, { - "id": "417243308", - "method": "messages.getAvailableReactions", + "id": "564480243", + "method": "messages.getEmojiProfilePhotoGroups", "params": [ { "name": "hash", "type": "int" } ], - "type": "messages.AvailableReactions" + "type": "messages.EmojiGroups" }, { - "id": "1330094102", - "method": "messages.setDefaultReaction", + "id": "739360983", + "method": "messages.searchCustomEmoji", "params": [ { - "name": "reaction", - "type": "Reaction" + "name": "emoticon", + "type": "string" + }, + { + "name": "hash", + "type": "long" } ], - "type": "Bool" + "type": "EmojiList" }, { - "id": "-1511079099", - "method": "messages.translateText", + "id": "-461589127", + "method": "messages.togglePeerTranslations", "params": [ { "name": "flags", "type": "#" }, { - "name": "peer", - "type": "flags.0?InputPeer" - }, - { - "name": "id", - "type": "flags.0?Vector" + "name": "disabled", + "type": "flags.0?true" }, { - "name": "text", - "type": "flags.1?Vector" - }, + "name": "peer", + "type": "InputPeer" + } + ], + "type": "Bool" + }, + { + "id": "889046467", + "method": "messages.getBotApp", + "params": [ { - "name": "to_lang", - "type": "string" + "name": "app", + "type": "InputBotApp" }, { - "name": "tone", - "type": "flags.2?string" + "name": "hash", + "type": "long" } ], - "type": "messages.TranslatedText" + "type": "messages.BotApp" }, { - "id": "-1115713364", - "method": "messages.getUnreadReactions", + "id": "1398901710", + "method": "messages.requestAppWebView", "params": [ { "name": "flags", "type": "#" }, { - "name": "peer", - "type": "InputPeer" + "name": "write_allowed", + "type": "flags.0?true" }, { - "name": "top_msg_id", - "type": "flags.0?int" + "name": "compact", + "type": "flags.7?true" }, { - "name": "saved_peer_id", - "type": "flags.1?InputPeer" + "name": "fullscreen", + "type": "flags.8?true" }, { - "name": "offset_id", - "type": "int" + "name": "peer", + "type": "InputPeer" }, { - "name": "add_offset", - "type": "int" + "name": "app", + "type": "InputBotApp" }, { - "name": "limit", - "type": "int" + "name": "start_param", + "type": "flags.1?string" }, { - "name": "max_id", - "type": "int" + "name": "theme_params", + "type": "flags.2?DataJSON" }, { - "name": "min_id", - "type": "int" + "name": "platform", + "type": "string" } ], - "type": "messages.Messages" + "type": "WebViewResult" }, { - "id": "-1631301741", - "method": "messages.readReactions", + "id": "-1879389471", + "method": "messages.setChatWallPaper", "params": [ { "name": "flags", "type": "#" }, + { + "name": "for_both", + "type": "flags.3?true" + }, + { + "name": "revert", + "type": "flags.4?true" + }, { "name": "peer", "type": "InputPeer" }, { - "name": "top_msg_id", - "type": "flags.0?int" + "name": "wallpaper", + "type": "flags.0?InputWallPaper" }, { - "name": "saved_peer_id", - "type": "flags.1?InputPeer" + "name": "settings", + "type": "flags.2?WallPaperSettings" + }, + { + "name": "id", + "type": "flags.1?int" } ], - "type": "messages.AffectedHistory" + "type": "Updates" }, { - "id": "276705696", - "method": "messages.searchSentMedia", + "id": "-1833678516", + "method": "messages.searchEmojiStickerSets", "params": [ { - "name": "q", - "type": "string" + "name": "flags", + "type": "#" }, { - "name": "filter", - "type": "MessagesFilter" + "name": "exclude_featured", + "type": "flags.0?true" }, { - "name": "limit", - "type": "int" - } - ], - "type": "messages.Messages" - }, - { - "id": "385663691", - "method": "messages.getAttachMenuBots", - "params": [ + "name": "q", + "type": "string" + }, { "name": "hash", "type": "long" } ], - "type": "AttachMenuBots" - }, - { - "id": "1998676370", - "method": "messages.getAttachMenuBot", - "params": [ - { - "name": "bot", - "type": "InputUser" - } - ], - "type": "AttachMenuBotsBot" + "type": "messages.FoundStickerSets" }, { - "id": "1777704297", - "method": "messages.toggleBotInAttachMenu", + "id": "512883865", + "method": "messages.getSavedDialogs", "params": [ { "name": "flags", "type": "#" }, { - "name": "write_allowed", + "name": "exclude_pinned", "type": "flags.0?true" }, { - "name": "bot", - "type": "InputUser" + "name": "parent_peer", + "type": "flags.1?InputPeer" }, { - "name": "enabled", - "type": "Bool" + "name": "offset_date", + "type": "int" + }, + { + "name": "offset_id", + "type": "int" + }, + { + "name": "offset_peer", + "type": "InputPeer" + }, + { + "name": "limit", + "type": "int" + }, + { + "name": "hash", + "type": "long" } ], - "type": "Bool" + "type": "messages.SavedDialogs" }, { - "id": "647873217", - "method": "messages.requestWebView", + "id": "-1718964215", + "method": "messages.getSavedHistory", "params": [ { "name": "flags", "type": "#" }, { - "name": "from_bot_menu", - "type": "flags.4?true" - }, - { - "name": "silent", - "type": "flags.5?true" - }, - { - "name": "compact", - "type": "flags.7?true" - }, - { - "name": "fullscreen", - "type": "flags.8?true" + "name": "parent_peer", + "type": "flags.0?InputPeer" }, { "name": "peer", "type": "InputPeer" }, { - "name": "bot", - "type": "InputUser" + "name": "offset_id", + "type": "int" }, { - "name": "url", - "type": "flags.1?string" + "name": "offset_date", + "type": "int" }, { - "name": "start_param", - "type": "flags.3?string" + "name": "add_offset", + "type": "int" }, { - "name": "theme_params", - "type": "flags.2?DataJSON" + "name": "limit", + "type": "int" }, { - "name": "platform", - "type": "string" + "name": "max_id", + "type": "int" }, { - "name": "reply_to", - "type": "flags.0?InputReplyTo" + "name": "min_id", + "type": "int" }, { - "name": "send_as", - "type": "flags.13?InputPeer" + "name": "hash", + "type": "long" } ], - "type": "WebViewResult" + "type": "messages.Messages" }, { - "id": "-1328014717", - "method": "messages.prolongWebView", + "id": "1304758367", + "method": "messages.deleteSavedHistory", "params": [ { "name": "flags", "type": "#" }, { - "name": "silent", - "type": "flags.5?true" + "name": "parent_peer", + "type": "flags.0?InputPeer" }, { "name": "peer", "type": "InputPeer" }, { - "name": "bot", - "type": "InputUser" - }, - { - "name": "query_id", - "type": "long" + "name": "max_id", + "type": "int" }, { - "name": "reply_to", - "type": "flags.0?InputReplyTo" + "name": "min_date", + "type": "flags.2?int" }, { - "name": "send_as", - "type": "flags.13?InputPeer" + "name": "max_date", + "type": "flags.3?int" } ], - "type": "Bool" + "type": "messages.AffectedHistory" }, { - "id": "1094336115", - "method": "messages.requestSimpleWebView", + "id": "-700607264", + "method": "messages.getPinnedSavedDialogs", + "params": [], + "type": "messages.SavedDialogs" + }, + { + "id": "-1400783906", + "method": "messages.toggleSavedDialogPin", "params": [ { "name": "flags", "type": "#" }, { - "name": "from_switch_webview", - "type": "flags.1?true" - }, - { - "name": "from_side_menu", - "type": "flags.2?true" + "name": "pinned", + "type": "flags.0?true" }, { - "name": "compact", - "type": "flags.7?true" - }, + "name": "peer", + "type": "InputDialogPeer" + } + ], + "type": "Bool" + }, + { + "id": "-1955502713", + "method": "messages.reorderPinnedSavedDialogs", + "params": [ { - "name": "fullscreen", - "type": "flags.8?true" + "name": "flags", + "type": "#" }, { - "name": "bot", - "type": "InputUser" + "name": "force", + "type": "flags.0?true" }, { - "name": "url", - "type": "flags.3?string" - }, + "name": "order", + "type": "Vector" + } + ], + "type": "Bool" + }, + { + "id": "909631579", + "method": "messages.getSavedReactionTags", + "params": [ { - "name": "start_param", - "type": "flags.4?string" + "name": "flags", + "type": "#" }, { - "name": "theme_params", - "type": "flags.0?DataJSON" + "name": "peer", + "type": "flags.0?InputPeer" }, { - "name": "platform", - "type": "string" + "name": "hash", + "type": "long" } ], - "type": "WebViewResult" + "type": "messages.SavedReactionTags" }, { - "id": "172168437", - "method": "messages.sendWebViewResultMessage", + "id": "1613331948", + "method": "messages.updateSavedReactionTag", "params": [ { - "name": "bot_query_id", - "type": "string" + "name": "flags", + "type": "#" }, { - "name": "result", - "type": "InputBotInlineResult" + "name": "reaction", + "type": "Reaction" + }, + { + "name": "title", + "type": "flags.0?string" } ], - "type": "WebViewMessageSent" + "type": "Bool" }, { - "id": "-603831608", - "method": "messages.sendWebViewData", + "id": "-1107741656", + "method": "messages.getDefaultTagReactions", "params": [ { - "name": "bot", - "type": "InputUser" - }, - { - "name": "random_id", + "name": "hash", "type": "long" - }, - { - "name": "button_text", - "type": "string" - }, - { - "name": "data", - "type": "string" } ], - "type": "Updates" + "type": "messages.Reactions" }, { - "id": "647928393", - "method": "messages.transcribeAudio", + "id": "-1941176739", + "method": "messages.getOutboxReadDate", "params": [ { "name": "peer", @@ -38534,510 +42282,706 @@ "type": "int" } ], - "type": "messages.TranscribedAudio" + "type": "OutboxReadDate" }, { - "id": "2132608815", - "method": "messages.rateTranscribedAudio", + "id": "-729550168", + "method": "messages.getQuickReplies", "params": [ { - "name": "peer", - "type": "InputPeer" - }, - { - "name": "msg_id", - "type": "int" - }, - { - "name": "transcription_id", + "name": "hash", "type": "long" - }, + } + ], + "type": "messages.QuickReplies" + }, + { + "id": "1613961479", + "method": "messages.reorderQuickReplies", + "params": [ { - "name": "good", - "type": "Bool" + "name": "order", + "type": "Vector" } ], "type": "Bool" }, { - "id": "-643100844", - "method": "messages.getCustomEmojiDocuments", + "id": "-237962285", + "method": "messages.checkQuickReplyShortcut", "params": [ { - "name": "document_id", - "type": "Vector" + "name": "shortcut", + "type": "string" } ], - "type": "Vector" + "type": "Bool" }, { - "id": "-67329649", - "method": "messages.getEmojiStickers", + "id": "1543519471", + "method": "messages.editQuickReplyShortcut", "params": [ { - "name": "hash", - "type": "long" + "name": "shortcut_id", + "type": "int" + }, + { + "name": "shortcut", + "type": "string" } ], - "type": "messages.AllStickers" + "type": "Bool" }, { - "id": "248473398", - "method": "messages.getFeaturedEmojiStickers", + "id": "1019234112", + "method": "messages.deleteQuickReplyShortcut", + "params": [ + { + "name": "shortcut_id", + "type": "int" + } + ], + "type": "Bool" + }, + { + "id": "-1801153085", + "method": "messages.getQuickReplyMessages", "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "shortcut_id", + "type": "int" + }, + { + "name": "id", + "type": "flags.0?Vector" + }, { "name": "hash", "type": "long" } ], - "type": "messages.FeaturedStickers" + "type": "messages.Messages" }, { - "id": "1063567478", - "method": "messages.reportReaction", + "id": "1819610593", + "method": "messages.sendQuickReplyMessages", "params": [ { "name": "peer", "type": "InputPeer" }, { - "name": "id", + "name": "shortcut_id", "type": "int" }, { - "name": "reaction_peer", - "type": "InputPeer" + "name": "id", + "type": "Vector" + }, + { + "name": "random_id", + "type": "Vector" } ], - "type": "Bool" + "type": "Updates" }, { - "id": "-1149164102", - "method": "messages.getTopReactions", + "id": "-519706352", + "method": "messages.deleteQuickReplyMessages", "params": [ { - "name": "limit", + "name": "shortcut_id", "type": "int" }, { - "name": "hash", - "type": "long" + "name": "id", + "type": "Vector" } ], - "type": "messages.Reactions" + "type": "Updates" }, { - "id": "960896434", - "method": "messages.getRecentReactions", + "id": "-47326647", + "method": "messages.toggleDialogFilterTags", + "params": [ + { + "name": "enabled", + "type": "Bool" + } + ], + "type": "Bool" + }, + { + "id": "-793386500", + "method": "messages.getMyStickers", "params": [ + { + "name": "offset_id", + "type": "long" + }, { "name": "limit", "type": "int" - }, + } + ], + "type": "messages.MyStickers" + }, + { + "id": "500711669", + "method": "messages.getEmojiStickerGroups", + "params": [ { "name": "hash", - "type": "long" + "type": "int" } ], - "type": "messages.Reactions" + "type": "messages.EmojiGroups" }, { - "id": "-1644236876", - "method": "messages.clearRecentReactions", - "params": [], - "type": "Bool" + "id": "-559805895", + "method": "messages.getAvailableEffects", + "params": [ + { + "name": "hash", + "type": "int" + } + ], + "type": "messages.AvailableEffects" }, { - "id": "-2064119788", - "method": "messages.getExtendedMedia", + "id": "92925557", + "method": "messages.editFactCheck", "params": [ { "name": "peer", "type": "InputPeer" }, { - "name": "id", - "type": "Vector" + "name": "msg_id", + "type": "int" + }, + { + "name": "text", + "type": "TextWithEntities" } ], "type": "Updates" }, { - "id": "-1632299963", - "method": "messages.setDefaultHistoryTTL", + "id": "-774204404", + "method": "messages.deleteFactCheck", "params": [ { - "name": "period", + "name": "peer", + "type": "InputPeer" + }, + { + "name": "msg_id", "type": "int" } ], - "type": "Bool" + "type": "Updates" }, { - "id": "1703637384", - "method": "messages.getDefaultHistoryTTL", - "params": [], - "type": "DefaultHistoryTTL" + "id": "-1177696786", + "method": "messages.getFactCheck", + "params": [ + { + "name": "peer", + "type": "InputPeer" + }, + { + "name": "msg_id", + "type": "Vector" + } + ], + "type": "Vector" }, { - "id": "1818030759", - "method": "messages.sendBotRequestedPeer", + "id": "-908059013", + "method": "messages.requestMainWebView", "params": [ { "name": "flags", "type": "#" }, + { + "name": "compact", + "type": "flags.7?true" + }, + { + "name": "fullscreen", + "type": "flags.8?true" + }, { "name": "peer", "type": "InputPeer" }, { - "name": "msg_id", - "type": "flags.0?int" + "name": "bot", + "type": "InputUser" }, { - "name": "webapp_req_id", + "name": "start_param", "type": "flags.1?string" }, { - "name": "button_id", + "name": "theme_params", + "type": "flags.0?DataJSON" + }, + { + "name": "platform", + "type": "string" + } + ], + "type": "WebViewResult" + }, + { + "id": "1488702288", + "method": "messages.sendPaidReaction", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "peer", + "type": "InputPeer" + }, + { + "name": "msg_id", "type": "int" }, { - "name": "requested_peers", - "type": "Vector" + "name": "count", + "type": "int" + }, + { + "name": "random_id", + "type": "long" + }, + { + "name": "private", + "type": "flags.0?PaidReactionPrivacy" } ], "type": "Updates" }, { - "id": "1955122779", - "method": "messages.getEmojiGroups", + "id": "1129874869", + "method": "messages.togglePaidReactionPrivacy", "params": [ { - "name": "hash", + "name": "peer", + "type": "InputPeer" + }, + { + "name": "msg_id", "type": "int" + }, + { + "name": "private", + "type": "PaidReactionPrivacy" } ], - "type": "messages.EmojiGroups" + "type": "Bool" }, { - "id": "785209037", - "method": "messages.getEmojiStatusGroups", + "id": "1193563562", + "method": "messages.getPaidReactionPrivacy", + "params": [], + "type": "Updates" + }, + { + "id": "647902787", + "method": "messages.viewSponsoredMessage", "params": [ { - "name": "hash", - "type": "int" + "name": "random_id", + "type": "bytes" } ], - "type": "messages.EmojiGroups" + "type": "Bool" }, { - "id": "564480243", - "method": "messages.getEmojiProfilePhotoGroups", + "id": "-2110454402", + "method": "messages.clickSponsoredMessage", "params": [ { - "name": "hash", - "type": "int" + "name": "flags", + "type": "#" + }, + { + "name": "media", + "type": "flags.0?true" + }, + { + "name": "fullscreen", + "type": "flags.1?true" + }, + { + "name": "random_id", + "type": "bytes" } ], - "type": "messages.EmojiGroups" + "type": "Bool" }, { - "id": "739360983", - "method": "messages.searchCustomEmoji", + "id": "315355332", + "method": "messages.reportSponsoredMessage", + "params": [ + { + "name": "random_id", + "type": "bytes" + }, + { + "name": "option", + "type": "bytes" + } + ], + "type": "channels.SponsoredMessageReportResult" + }, + { + "id": "1030547536", + "method": "messages.getSponsoredMessages", "params": [ { - "name": "emoticon", - "type": "string" + "name": "flags", + "type": "#" + }, + { + "name": "peer", + "type": "InputPeer" }, { - "name": "hash", - "type": "long" + "name": "msg_id", + "type": "flags.0?int" } ], - "type": "EmojiList" + "type": "messages.SponsoredMessages" }, { - "id": "-461589127", - "method": "messages.togglePeerTranslations", + "id": "-232816849", + "method": "messages.savePreparedInlineMessage", "params": [ { "name": "flags", "type": "#" }, { - "name": "disabled", - "type": "flags.0?true" + "name": "result", + "type": "InputBotInlineResult" }, { - "name": "peer", - "type": "InputPeer" + "name": "user_id", + "type": "InputUser" + }, + { + "name": "peer_types", + "type": "flags.0?Vector" } ], - "type": "Bool" + "type": "messages.BotPreparedInlineMessage" }, { - "id": "889046467", - "method": "messages.getBotApp", + "id": "-2055291464", + "method": "messages.getPreparedInlineMessage", "params": [ { - "name": "app", - "type": "InputBotApp" + "name": "bot", + "type": "InputUser" }, { - "name": "hash", - "type": "long" + "name": "id", + "type": "string" } ], - "type": "messages.BotApp" + "type": "messages.PreparedInlineMessage" }, { - "id": "1398901710", - "method": "messages.requestAppWebView", + "id": "699516522", + "method": "messages.searchStickers", "params": [ { "name": "flags", "type": "#" }, { - "name": "write_allowed", + "name": "emojis", "type": "flags.0?true" }, { - "name": "compact", - "type": "flags.7?true" - }, - { - "name": "fullscreen", - "type": "flags.8?true" + "name": "q", + "type": "string" }, { - "name": "peer", - "type": "InputPeer" + "name": "emoticon", + "type": "string" }, { - "name": "app", - "type": "InputBotApp" + "name": "lang_code", + "type": "Vector" }, { - "name": "start_param", - "type": "flags.1?string" + "name": "offset", + "type": "int" }, { - "name": "theme_params", - "type": "flags.2?DataJSON" + "name": "limit", + "type": "int" }, { - "name": "platform", - "type": "string" + "name": "hash", + "type": "long" } ], - "type": "WebViewResult" + "type": "messages.FoundStickers" }, { - "id": "-1879389471", - "method": "messages.setChatWallPaper", + "id": "1517122453", + "method": "messages.reportMessagesDelivery", "params": [ { "name": "flags", "type": "#" }, { - "name": "for_both", - "type": "flags.3?true" - }, - { - "name": "revert", - "type": "flags.4?true" + "name": "push", + "type": "flags.0?true" }, { "name": "peer", "type": "InputPeer" }, - { - "name": "wallpaper", - "type": "flags.0?InputWallPaper" - }, - { - "name": "settings", - "type": "flags.2?WallPaperSettings" - }, { "name": "id", - "type": "flags.1?int" + "type": "Vector" } ], - "type": "Updates" + "type": "Bool" }, { - "id": "-1833678516", - "method": "messages.searchEmojiStickerSets", + "id": "1869585558", + "method": "messages.getSavedDialogsByID", "params": [ { "name": "flags", "type": "#" }, { - "name": "exclude_featured", - "type": "flags.0?true" - }, - { - "name": "q", - "type": "string" + "name": "parent_peer", + "type": "flags.1?InputPeer" }, { - "name": "hash", - "type": "long" + "name": "ids", + "type": "Vector" } ], - "type": "messages.FoundStickerSets" + "type": "messages.SavedDialogs" }, { - "id": "512883865", - "method": "messages.getSavedDialogs", + "id": "-1169540261", + "method": "messages.readSavedHistory", "params": [ { - "name": "flags", - "type": "#" + "name": "parent_peer", + "type": "InputPeer" }, { - "name": "exclude_pinned", - "type": "flags.0?true" + "name": "peer", + "type": "InputPeer" }, { - "name": "parent_peer", - "type": "flags.1?InputPeer" + "name": "max_id", + "type": "int" + } + ], + "type": "Bool" + }, + { + "id": "-740282076", + "method": "messages.toggleTodoCompleted", + "params": [ + { + "name": "peer", + "type": "InputPeer" }, { - "name": "offset_date", + "name": "msg_id", "type": "int" }, { - "name": "offset_id", - "type": "int" + "name": "completed", + "type": "Vector" }, { - "name": "offset_peer", + "name": "incompleted", + "type": "Vector" + } + ], + "type": "Updates" + }, + { + "id": "564531287", + "method": "messages.appendTodoList", + "params": [ + { + "name": "peer", "type": "InputPeer" }, { - "name": "limit", + "name": "msg_id", "type": "int" }, { - "name": "hash", - "type": "long" + "name": "list", + "type": "Vector" } ], - "type": "messages.SavedDialogs" + "type": "Updates" }, { - "id": "-1718964215", - "method": "messages.getSavedHistory", + "id": "-2130229924", + "method": "messages.toggleSuggestedPostApproval", "params": [ { "name": "flags", "type": "#" }, { - "name": "parent_peer", - "type": "flags.0?InputPeer" + "name": "reject", + "type": "flags.1?true" }, { "name": "peer", "type": "InputPeer" }, { - "name": "offset_id", + "name": "msg_id", "type": "int" }, { - "name": "offset_date", - "type": "int" + "name": "schedule_date", + "type": "flags.0?int" }, { - "name": "add_offset", + "name": "reject_comment", + "type": "flags.2?string" + } + ], + "type": "Updates" + }, + { + "id": "1000635391", + "method": "messages.getForumTopics", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "peer", + "type": "InputPeer" + }, + { + "name": "q", + "type": "flags.0?string" + }, + { + "name": "offset_date", "type": "int" }, { - "name": "limit", + "name": "offset_id", "type": "int" }, { - "name": "max_id", + "name": "offset_topic", "type": "int" }, { - "name": "min_id", + "name": "limit", "type": "int" + } + ], + "type": "messages.ForumTopics" + }, + { + "id": "-1358280184", + "method": "messages.getForumTopicsByID", + "params": [ + { + "name": "peer", + "type": "InputPeer" }, { - "name": "hash", - "type": "long" + "name": "topics", + "type": "Vector" } ], - "type": "messages.Messages" + "type": "messages.ForumTopics" }, { - "id": "1304758367", - "method": "messages.deleteSavedHistory", + "id": "-825487052", + "method": "messages.editForumTopic", "params": [ { "name": "flags", "type": "#" }, - { - "name": "parent_peer", - "type": "flags.0?InputPeer" - }, { "name": "peer", "type": "InputPeer" }, { - "name": "max_id", + "name": "topic_id", "type": "int" }, { - "name": "min_date", - "type": "flags.2?int" + "name": "title", + "type": "flags.0?string" }, { - "name": "max_date", - "type": "flags.3?int" + "name": "icon_emoji_id", + "type": "flags.1?long" + }, + { + "name": "closed", + "type": "flags.2?Bool" + }, + { + "name": "hidden", + "type": "flags.3?Bool" } ], - "type": "messages.AffectedHistory" - }, - { - "id": "-700607264", - "method": "messages.getPinnedSavedDialogs", - "params": [], - "type": "messages.SavedDialogs" + "type": "Updates" }, { - "id": "-1400783906", - "method": "messages.toggleSavedDialogPin", + "id": "392032849", + "method": "messages.updatePinnedForumTopic", "params": [ { - "name": "flags", - "type": "#" + "name": "peer", + "type": "InputPeer" }, { - "name": "pinned", - "type": "flags.0?true" + "name": "topic_id", + "type": "int" }, { - "name": "peer", - "type": "InputDialogPeer" + "name": "pinned", + "type": "Bool" } ], - "type": "Bool" + "type": "Updates" }, { - "id": "-1955502713", - "method": "messages.reorderPinnedSavedDialogs", + "id": "242762224", + "method": "messages.reorderPinnedForumTopics", "params": [ { "name": "flags", @@ -39047,248 +42991,243 @@ "name": "force", "type": "flags.0?true" }, + { + "name": "peer", + "type": "InputPeer" + }, { "name": "order", - "type": "Vector" + "type": "Vector" } ], - "type": "Bool" + "type": "Updates" }, { - "id": "909631579", - "method": "messages.getSavedReactionTags", + "id": "798540757", + "method": "messages.createForumTopic", "params": [ { "name": "flags", "type": "#" }, { - "name": "peer", - "type": "flags.0?InputPeer" + "name": "title_missing", + "type": "flags.4?true" }, { - "name": "hash", - "type": "long" - } - ], - "type": "messages.SavedReactionTags" - }, - { - "id": "1613331948", - "method": "messages.updateSavedReactionTag", - "params": [ + "name": "peer", + "type": "InputPeer" + }, { - "name": "flags", - "type": "#" + "name": "title", + "type": "string" }, { - "name": "reaction", - "type": "Reaction" + "name": "icon_color", + "type": "flags.0?int" }, { - "name": "title", - "type": "flags.0?string" - } - ], - "type": "Bool" - }, - { - "id": "-1107741656", - "method": "messages.getDefaultTagReactions", - "params": [ + "name": "icon_emoji_id", + "type": "flags.3?long" + }, { - "name": "hash", + "name": "random_id", "type": "long" + }, + { + "name": "send_as", + "type": "flags.2?InputPeer" } ], - "type": "messages.Reactions" + "type": "Updates" }, { - "id": "-1941176739", - "method": "messages.getOutboxReadDate", + "id": "-763269360", + "method": "messages.deleteTopicHistory", "params": [ { "name": "peer", "type": "InputPeer" }, { - "name": "msg_id", + "name": "top_msg_id", "type": "int" } ], - "type": "OutboxReadDate" + "type": "messages.AffectedHistory" }, { - "id": "-729550168", - "method": "messages.getQuickReplies", - "params": [ - { - "name": "hash", - "type": "long" - } - ], - "type": "messages.QuickReplies" + "id": "-75592537", + "method": "messages.getEmojiGameInfo", + "params": [], + "type": "messages.EmojiGameInfo" }, { - "id": "1613961479", - "method": "messages.reorderQuickReplies", + "id": "-1413754042", + "method": "messages.summarizeText", "params": [ { - "name": "order", - "type": "Vector" - } - ], - "type": "Bool" - }, - { - "id": "-237962285", - "method": "messages.checkQuickReplyShortcut", - "params": [ + "name": "flags", + "type": "#" + }, { - "name": "shortcut", - "type": "string" - } - ], - "type": "Bool" - }, - { - "id": "1543519471", - "method": "messages.editQuickReplyShortcut", - "params": [ + "name": "peer", + "type": "InputPeer" + }, { - "name": "shortcut_id", + "name": "id", "type": "int" }, { - "name": "shortcut", - "type": "string" - } - ], - "type": "Bool" - }, - { - "id": "1019234112", - "method": "messages.deleteQuickReplyShortcut", - "params": [ + "name": "to_lang", + "type": "flags.0?string" + }, { - "name": "shortcut_id", - "type": "int" + "name": "tone", + "type": "flags.2?string" } ], - "type": "Bool" + "type": "TextWithEntities" }, { - "id": "-1801153085", - "method": "messages.getQuickReplyMessages", + "id": "-146556841", + "method": "messages.editChatCreator", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "shortcut_id", - "type": "int" + "name": "peer", + "type": "InputPeer" }, { - "name": "id", - "type": "flags.0?Vector" + "name": "user_id", + "type": "InputUser" }, { - "name": "hash", - "type": "long" + "name": "password", + "type": "InputCheckPasswordSRP" } ], - "type": "messages.Messages" + "type": "Updates" }, { - "id": "1819610593", - "method": "messages.sendQuickReplyMessages", + "id": "998051494", + "method": "messages.getFutureChatCreatorAfterLeave", "params": [ { "name": "peer", "type": "InputPeer" - }, + } + ], + "type": "User" + }, + { + "id": "-1609616720", + "method": "messages.editChatParticipantRank", + "params": [ { - "name": "shortcut_id", - "type": "int" + "name": "peer", + "type": "InputPeer" }, { - "name": "id", - "type": "Vector" + "name": "participant", + "type": "InputPeer" }, { - "name": "random_id", - "type": "Vector" + "name": "rank", + "type": "string" } ], "type": "Updates" }, { - "id": "-519706352", - "method": "messages.deleteQuickReplyMessages", + "id": "893610940", + "method": "messages.declineUrlAuth", "params": [ { - "name": "shortcut_id", - "type": "int" - }, - { - "name": "id", - "type": "Vector" + "name": "url", + "type": "string" } ], - "type": "Updates" + "type": "Bool" }, { - "id": "-47326647", - "method": "messages.toggleDialogFilterTags", + "id": "-911967477", + "method": "messages.checkUrlAuthMatchCode", "params": [ { - "name": "enabled", - "type": "Bool" + "name": "url", + "type": "string" + }, + { + "name": "match_code", + "type": "string" } ], "type": "Bool" }, { - "id": "-793386500", - "method": "messages.getMyStickers", + "id": "-622017143", + "method": "messages.composeMessageWithAI", "params": [ { - "name": "offset_id", - "type": "long" + "name": "flags", + "type": "#" + }, + { + "name": "proofread", + "type": "flags.0?true" + }, + { + "name": "emojify", + "type": "flags.3?true" + }, + { + "name": "text", + "type": "TextWithEntities" }, { - "name": "limit", - "type": "int" + "name": "translate_to_lang", + "type": "flags.1?string" + }, + { + "name": "tone", + "type": "flags.2?InputAiComposeTone" } ], - "type": "messages.MyStickers" + "type": "messages.ComposedMessageWithAI" }, { - "id": "500711669", - "method": "messages.getEmojiStickerGroups", + "id": "1080542694", + "method": "messages.reportReadMetrics", "params": [ { - "name": "hash", - "type": "int" + "name": "peer", + "type": "InputPeer" + }, + { + "name": "metrics", + "type": "Vector" } ], - "type": "messages.EmojiGroups" + "type": "Bool" }, { - "id": "-559805895", - "method": "messages.getAvailableEffects", + "id": "-574826471", + "method": "messages.reportMusicListen", "params": [ { - "name": "hash", + "name": "id", + "type": "InputDocument" + }, + { + "name": "listened_duration", "type": "int" } ], - "type": "messages.AvailableEffects" + "type": "Bool" }, { - "id": "92925557", - "method": "messages.editFactCheck", + "id": "431770477", + "method": "messages.addPollAnswer", "params": [ { "name": "peer", @@ -39299,15 +43238,15 @@ "type": "int" }, { - "name": "text", - "type": "TextWithEntities" + "name": "answer", + "type": "PollAnswer" } ], "type": "Updates" }, { - "id": "-774204404", - "method": "messages.deleteFactCheck", + "id": "-1400568411", + "method": "messages.deletePollAnswer", "params": [ { "name": "peer", @@ -39316,67 +43255,56 @@ { "name": "msg_id", "type": "int" - } - ], - "type": "Updates" - }, - { - "id": "-1177696786", - "method": "messages.getFactCheck", - "params": [ - { - "name": "peer", - "type": "InputPeer" }, { - "name": "msg_id", - "type": "Vector" + "name": "option", + "type": "bytes" } ], - "type": "Vector" + "type": "Updates" }, { - "id": "-908059013", - "method": "messages.requestMainWebView", + "id": "1126722802", + "method": "messages.getUnreadPollVotes", "params": [ { "name": "flags", "type": "#" }, { - "name": "compact", - "type": "flags.7?true" + "name": "peer", + "type": "InputPeer" }, { - "name": "fullscreen", - "type": "flags.8?true" + "name": "top_msg_id", + "type": "flags.0?int" }, { - "name": "peer", - "type": "InputPeer" + "name": "offset_id", + "type": "int" }, { - "name": "bot", - "type": "InputUser" + "name": "add_offset", + "type": "int" }, { - "name": "start_param", - "type": "flags.1?string" + "name": "limit", + "type": "int" }, { - "name": "theme_params", - "type": "flags.0?DataJSON" + "name": "max_id", + "type": "int" }, { - "name": "platform", - "type": "string" + "name": "min_id", + "type": "int" } ], - "type": "WebViewResult" + "type": "messages.Messages" }, { - "id": "1488702288", - "method": "messages.sendPaidReaction", + "id": "388019416", + "method": "messages.readPollVotes", "params": [ { "name": "flags", @@ -39387,27 +43315,45 @@ "type": "InputPeer" }, { - "name": "msg_id", - "type": "int" - }, + "name": "top_msg_id", + "type": "flags.0?int" + } + ], + "type": "messages.AffectedHistory" + }, + { + "id": "-1192163613", + "method": "messages.setBotGuestChatResult", + "params": [ { - "name": "count", - "type": "int" + "name": "query_id", + "type": "long" }, { - "name": "random_id", - "type": "long" + "name": "result", + "type": "InputBotInlineResult" + } + ], + "type": "InputBotInlineMessageID" + }, + { + "id": "-1598550792", + "method": "messages.deleteParticipantReactions", + "params": [ + { + "name": "peer", + "type": "InputPeer" }, { - "name": "private", - "type": "flags.0?PaidReactionPrivacy" + "name": "participant", + "type": "InputPeer" } ], - "type": "Updates" + "type": "Bool" }, { - "id": "1129874869", - "method": "messages.togglePaidReactionPrivacy", + "id": "-474482644", + "method": "messages.deleteParticipantReaction", "params": [ { "name": "peer", @@ -39418,1124 +43364,1210 @@ "type": "int" }, { - "name": "private", - "type": "PaidReactionPrivacy" + "name": "participant", + "type": "InputPeer" } ], - "type": "Bool" + "type": "Updates" }, { - "id": "1193563562", - "method": "messages.getPaidReactionPrivacy", - "params": [], - "type": "Updates" + "id": "1442515350", + "method": "messages.getPersonalChannelHistory", + "params": [ + { + "name": "user_id", + "type": "InputUser" + }, + { + "name": "limit", + "type": "int" + }, + { + "name": "max_id", + "type": "int" + }, + { + "name": "min_id", + "type": "int" + }, + { + "name": "hash", + "type": "long" + } + ], + "type": "messages.Messages" }, { - "id": "647902787", - "method": "messages.viewSponsoredMessage", + "id": "1343580623", + "method": "messages.getRichMessage", "params": [ { - "name": "random_id", - "type": "bytes" + "name": "peer", + "type": "InputPeer" + }, + { + "name": "id", + "type": "int" } ], - "type": "Bool" + "type": "messages.Messages" }, { - "id": "-2110454402", - "method": "messages.clickSponsoredMessage", + "id": "441720836", + "method": "messages.translateRichMessage", "params": [ { "name": "flags", "type": "#" }, { - "name": "media", - "type": "flags.0?true" + "name": "peer", + "type": "flags.0?InputPeer" }, { - "name": "fullscreen", - "type": "flags.1?true" + "name": "id", + "type": "flags.0?Vector" }, { - "name": "random_id", - "type": "bytes" - } - ], - "type": "Bool" - }, - { - "id": "315355332", - "method": "messages.reportSponsoredMessage", - "params": [ + "name": "text", + "type": "flags.1?Vector" + }, { - "name": "random_id", - "type": "bytes" + "name": "to_lang", + "type": "string" }, { - "name": "option", - "type": "bytes" + "name": "tone", + "type": "flags.2?string" } ], - "type": "channels.SponsoredMessageReportResult" + "type": "messages.TranslatedRichMessage" }, { - "id": "1030547536", - "method": "messages.getSponsoredMessages", + "id": "-1921325393", + "method": "messages.composeRichMessageWithAI", "params": [ { "name": "flags", "type": "#" }, { - "name": "peer", - "type": "InputPeer" + "name": "proofread", + "type": "flags.0?true" }, { - "name": "msg_id", - "type": "flags.0?int" + "name": "emojify", + "type": "flags.3?true" + }, + { + "name": "text", + "type": "flags.4?InputRichMessage" + }, + { + "name": "translate_to_lang", + "type": "flags.1?string" + }, + { + "name": "tone", + "type": "flags.2?InputAiComposeTone" } ], - "type": "messages.SponsoredMessages" + "type": "messages.ComposedRichMessageWithAI" }, { - "id": "-232816849", - "method": "messages.savePreparedInlineMessage", + "id": "-1163991431", + "method": "messages.requestChatJoinWebView", "params": [ { "name": "flags", "type": "#" }, { - "name": "result", - "type": "InputBotInlineResult" + "name": "query_id", + "type": "long" }, { - "name": "user_id", - "type": "InputUser" + "name": "theme_params", + "type": "flags.0?DataJSON" }, { - "name": "peer_types", - "type": "flags.0?Vector" + "name": "platform", + "type": "string" } ], - "type": "messages.BotPreparedInlineMessage" + "type": "WebViewResult" }, { - "id": "-2055291464", - "method": "messages.getPreparedInlineMessage", + "id": "1770691354", + "method": "messages.setShareTheme", "params": [ { - "name": "bot", - "type": "InputUser" + "name": "peer", + "type": "InputPeer" }, { - "name": "id", - "type": "string" + "name": "theme", + "type": "ShareTheme" } ], - "type": "messages.PreparedInlineMessage" + "type": "Bool" }, { - "id": "699516522", - "method": "messages.searchStickers", + "id": "-195453198", + "method": "messages.getShareThemeBackdrops", + "params": [ + { + "name": "hash", + "type": "int" + } + ], + "type": "ShareThemeBackdrops" + }, + { + "id": "-304838614", + "method": "updates.getState", + "params": [], + "type": "updates.State" + }, + { + "id": "432207715", + "method": "updates.getDifference", "params": [ { "name": "flags", "type": "#" }, { - "name": "emojis", - "type": "flags.0?true" - }, - { - "name": "q", - "type": "string" + "name": "pts", + "type": "int" }, { - "name": "emoticon", - "type": "string" + "name": "pts_limit", + "type": "flags.1?int" }, { - "name": "lang_code", - "type": "Vector" + "name": "pts_total_limit", + "type": "flags.0?int" }, { - "name": "offset", + "name": "date", "type": "int" }, { - "name": "limit", + "name": "qts", "type": "int" }, { - "name": "hash", - "type": "long" + "name": "qts_limit", + "type": "flags.2?int" } ], - "type": "messages.FoundStickers" + "type": "updates.Difference" }, { - "id": "1517122453", - "method": "messages.reportMessagesDelivery", + "id": "51854712", + "method": "updates.getChannelDifference", "params": [ { "name": "flags", "type": "#" }, { - "name": "push", + "name": "force", "type": "flags.0?true" }, { - "name": "peer", - "type": "InputPeer" + "name": "channel", + "type": "InputChannel" }, { - "name": "id", - "type": "Vector" + "name": "filter", + "type": "ChannelMessagesFilter" + }, + { + "name": "pts", + "type": "int" + }, + { + "name": "limit", + "type": "int" } ], - "type": "Bool" + "type": "updates.ChannelDifference" }, { - "id": "1869585558", - "method": "messages.getSavedDialogsByID", + "id": "166207545", + "method": "photos.updateProfilePhoto", "params": [ { "name": "flags", "type": "#" }, { - "name": "parent_peer", - "type": "flags.1?InputPeer" + "name": "fallback", + "type": "flags.0?true" }, { - "name": "ids", - "type": "Vector" + "name": "bot", + "type": "flags.1?InputUser" + }, + { + "name": "id", + "type": "InputPhoto" } ], - "type": "messages.SavedDialogs" + "type": "photos.Photo" }, { - "id": "-1169540261", - "method": "messages.readSavedHistory", + "id": "59286453", + "method": "photos.uploadProfilePhoto", "params": [ { - "name": "parent_peer", - "type": "InputPeer" + "name": "flags", + "type": "#" }, { - "name": "peer", - "type": "InputPeer" + "name": "fallback", + "type": "flags.3?true" }, { - "name": "max_id", - "type": "int" - } - ], - "type": "Bool" - }, - { - "id": "-740282076", - "method": "messages.toggleTodoCompleted", - "params": [ + "name": "bot", + "type": "flags.5?InputUser" + }, { - "name": "peer", - "type": "InputPeer" + "name": "file", + "type": "flags.0?InputFile" }, { - "name": "msg_id", - "type": "int" + "name": "video", + "type": "flags.1?InputFile" }, { - "name": "completed", - "type": "Vector" + "name": "video_start_ts", + "type": "flags.2?double" }, { - "name": "incompleted", - "type": "Vector" + "name": "video_emoji_markup", + "type": "flags.4?VideoSize" } ], - "type": "Updates" + "type": "photos.Photo" }, { - "id": "564531287", - "method": "messages.appendTodoList", + "id": "-2016444625", + "method": "photos.deletePhotos", "params": [ { - "name": "peer", - "type": "InputPeer" - }, - { - "name": "msg_id", - "type": "int" - }, - { - "name": "list", - "type": "Vector" + "name": "id", + "type": "Vector" } ], - "type": "Updates" + "type": "Vector" }, { - "id": "-2130229924", - "method": "messages.toggleSuggestedPostApproval", + "id": "-1848823128", + "method": "photos.getUserPhotos", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "reject", - "type": "flags.1?true" - }, - { - "name": "peer", - "type": "InputPeer" + "name": "user_id", + "type": "InputUser" }, { - "name": "msg_id", + "name": "offset", "type": "int" }, { - "name": "schedule_date", - "type": "flags.0?int" + "name": "max_id", + "type": "long" }, { - "name": "reject_comment", - "type": "flags.2?string" + "name": "limit", + "type": "int" } ], - "type": "Updates" + "type": "photos.Photos" }, { - "id": "1000635391", - "method": "messages.getForumTopics", + "id": "-515093903", + "method": "photos.uploadContactProfilePhoto", "params": [ { "name": "flags", "type": "#" }, { - "name": "peer", - "type": "InputPeer" + "name": "suggest", + "type": "flags.3?true" }, { - "name": "q", - "type": "flags.0?string" + "name": "save", + "type": "flags.4?true" }, { - "name": "offset_date", - "type": "int" + "name": "user_id", + "type": "InputUser" }, { - "name": "offset_id", - "type": "int" + "name": "file", + "type": "flags.0?InputFile" }, { - "name": "offset_topic", - "type": "int" + "name": "video", + "type": "flags.1?InputFile" }, { - "name": "limit", - "type": "int" + "name": "video_start_ts", + "type": "flags.2?double" + }, + { + "name": "video_emoji_markup", + "type": "flags.5?VideoSize" } ], - "type": "messages.ForumTopics" + "type": "photos.Photo" }, { - "id": "-1358280184", - "method": "messages.getForumTopicsByID", + "id": "-1291540959", + "method": "upload.saveFilePart", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "file_id", + "type": "long" }, { - "name": "topics", - "type": "Vector" + "name": "file_part", + "type": "int" + }, + { + "name": "bytes", + "type": "bytes" } ], - "type": "messages.ForumTopics" + "type": "Bool" }, { - "id": "-825487052", - "method": "messages.editForumTopic", + "id": "-1101843010", + "method": "upload.getFile", "params": [ { "name": "flags", - "type": "#" - }, - { - "name": "peer", - "type": "InputPeer" + "type": "#" }, { - "name": "topic_id", - "type": "int" + "name": "precise", + "type": "flags.0?true" }, { - "name": "title", - "type": "flags.0?string" + "name": "cdn_supported", + "type": "flags.1?true" }, { - "name": "icon_emoji_id", - "type": "flags.1?long" + "name": "location", + "type": "InputFileLocation" }, { - "name": "closed", - "type": "flags.2?Bool" + "name": "offset", + "type": "long" }, { - "name": "hidden", - "type": "flags.3?Bool" + "name": "limit", + "type": "int" } ], - "type": "Updates" + "type": "upload.File" }, { - "id": "392032849", - "method": "messages.updatePinnedForumTopic", + "id": "-562337987", + "method": "upload.saveBigFilePart", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "file_id", + "type": "long" }, { - "name": "topic_id", + "name": "file_part", "type": "int" }, { - "name": "pinned", - "type": "Bool" + "name": "file_total_parts", + "type": "int" + }, + { + "name": "bytes", + "type": "bytes" } ], - "type": "Updates" + "type": "Bool" }, { - "id": "242762224", - "method": "messages.reorderPinnedForumTopics", + "id": "619086221", + "method": "upload.getWebFile", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "force", - "type": "flags.0?true" + "name": "location", + "type": "InputWebFileLocation" }, { - "name": "peer", - "type": "InputPeer" + "name": "offset", + "type": "int" }, { - "name": "order", - "type": "Vector" + "name": "limit", + "type": "int" } ], - "type": "Updates" + "type": "upload.WebFile" }, { - "id": "798540757", - "method": "messages.createForumTopic", + "id": "962554330", + "method": "upload.getCdnFile", "params": [ { - "name": "flags", - "type": "#" + "name": "file_token", + "type": "bytes" }, { - "name": "title_missing", - "type": "flags.4?true" + "name": "offset", + "type": "long" }, { - "name": "peer", - "type": "InputPeer" - }, + "name": "limit", + "type": "int" + } + ], + "type": "upload.CdnFile" + }, + { + "id": "-1691921240", + "method": "upload.reuploadCdnFile", + "params": [ { - "name": "title", - "type": "string" + "name": "file_token", + "type": "bytes" }, { - "name": "icon_color", - "type": "flags.0?int" - }, + "name": "request_token", + "type": "bytes" + } + ], + "type": "Vector" + }, + { + "id": "-1847836879", + "method": "upload.getCdnFileHashes", + "params": [ { - "name": "icon_emoji_id", - "type": "flags.3?long" + "name": "file_token", + "type": "bytes" }, { - "name": "random_id", + "name": "offset", "type": "long" - }, - { - "name": "send_as", - "type": "flags.2?InputPeer" } ], - "type": "Updates" + "type": "Vector" }, { - "id": "-763269360", - "method": "messages.deleteTopicHistory", + "id": "-1856595926", + "method": "upload.getFileHashes", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "location", + "type": "InputFileLocation" }, { - "name": "top_msg_id", - "type": "int" + "name": "offset", + "type": "long" } ], - "type": "messages.AffectedHistory" + "type": "Vector" }, { - "id": "-75592537", - "method": "messages.getEmojiGameInfo", + "id": "-990308245", + "method": "help.getConfig", "params": [], - "type": "messages.EmojiGameInfo" + "type": "Config" }, { - "id": "-1413754042", - "method": "messages.summarizeText", + "id": "531836966", + "method": "help.getNearestDc", + "params": [], + "type": "NearestDc" + }, + { + "id": "1378703997", + "method": "help.getAppUpdate", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "peer", - "type": "InputPeer" - }, + "name": "source", + "type": "string" + } + ], + "type": "help.AppUpdate" + }, + { + "id": "1295590211", + "method": "help.getInviteText", + "params": [], + "type": "help.InviteText" + }, + { + "id": "-1663104819", + "method": "help.getSupport", + "params": [], + "type": "help.Support" + }, + { + "id": "-333262899", + "method": "help.setBotUpdatesStatus", + "params": [ { - "name": "id", + "name": "pending_updates_count", "type": "int" }, { - "name": "to_lang", - "type": "flags.0?string" - }, - { - "name": "tone", - "type": "flags.2?string" + "name": "message", + "type": "string" } ], - "type": "TextWithEntities" + "type": "Bool" }, { - "id": "-146556841", - "method": "messages.editChatCreator", + "id": "1375900482", + "method": "help.getCdnConfig", + "params": [], + "type": "CdnConfig" + }, + { + "id": "1036054804", + "method": "help.getRecentMeUrls", "params": [ { - "name": "peer", - "type": "InputPeer" - }, - { - "name": "user_id", - "type": "InputUser" - }, - { - "name": "password", - "type": "InputCheckPasswordSRP" + "name": "referer", + "type": "string" } ], - "type": "Updates" + "type": "help.RecentMeUrls" }, { - "id": "998051494", - "method": "messages.getFutureChatCreatorAfterLeave", + "id": "749019089", + "method": "help.getTermsOfServiceUpdate", + "params": [], + "type": "help.TermsOfServiceUpdate" + }, + { + "id": "-294455398", + "method": "help.acceptTermsOfService", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "id", + "type": "DataJSON" } ], - "type": "User" + "type": "Bool" }, { - "id": "-1609616720", - "method": "messages.editChatParticipantRank", + "id": "1072547679", + "method": "help.getDeepLinkInfo", "params": [ { - "name": "peer", - "type": "InputPeer" - }, - { - "name": "participant", - "type": "InputPeer" - }, - { - "name": "rank", + "name": "path", "type": "string" } ], - "type": "Updates" + "type": "help.DeepLinkInfo" }, { - "id": "893610940", - "method": "messages.declineUrlAuth", + "id": "1642330196", + "method": "help.getAppConfig", "params": [ { - "name": "url", - "type": "string" + "name": "hash", + "type": "int" } ], - "type": "Bool" + "type": "help.AppConfig" }, { - "id": "-911967477", - "method": "messages.checkUrlAuthMatchCode", + "id": "1862465352", + "method": "help.saveAppLog", "params": [ { - "name": "url", - "type": "string" - }, - { - "name": "match_code", - "type": "string" + "name": "events", + "type": "Vector" } ], "type": "Bool" }, { - "id": "-622017143", - "method": "messages.composeMessageWithAI", + "id": "-966677240", + "method": "help.getPassportConfig", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "proofread", - "type": "flags.0?true" - }, + "name": "hash", + "type": "int" + } + ], + "type": "help.PassportConfig" + }, + { + "id": "-748624084", + "method": "help.getSupportName", + "params": [], + "type": "help.SupportName" + }, + { + "id": "59377875", + "method": "help.getUserInfo", + "params": [ { - "name": "emojify", - "type": "flags.3?true" - }, + "name": "user_id", + "type": "InputUser" + } + ], + "type": "help.UserInfo" + }, + { + "id": "1723407216", + "method": "help.editUserInfo", + "params": [ { - "name": "text", - "type": "TextWithEntities" + "name": "user_id", + "type": "InputUser" }, { - "name": "translate_to_lang", - "type": "flags.1?string" + "name": "message", + "type": "string" }, { - "name": "tone", - "type": "flags.2?InputAiComposeTone" + "name": "entities", + "type": "Vector" } ], - "type": "messages.ComposedMessageWithAI" + "type": "help.UserInfo" }, { - "id": "1080542694", - "method": "messages.reportReadMetrics", + "id": "-1063816159", + "method": "help.getPromoData", + "params": [], + "type": "help.PromoData" + }, + { + "id": "505748629", + "method": "help.hidePromoData", "params": [ { "name": "peer", "type": "InputPeer" - }, - { - "name": "metrics", - "type": "Vector" } ], "type": "Bool" }, { - "id": "-574826471", - "method": "messages.reportMusicListen", + "id": "-183649631", + "method": "help.dismissSuggestion", "params": [ { - "name": "id", - "type": "InputDocument" + "name": "peer", + "type": "InputPeer" }, { - "name": "listened_duration", - "type": "int" + "name": "suggestion", + "type": "string" } ], "type": "Bool" }, { - "id": "431770477", - "method": "messages.addPollAnswer", + "id": "1935116200", + "method": "help.getCountriesList", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "lang_code", + "type": "string" }, { - "name": "msg_id", + "name": "hash", "type": "int" - }, - { - "name": "answer", - "type": "PollAnswer" } ], - "type": "Updates" + "type": "help.CountriesList" }, { - "id": "-1400568411", - "method": "messages.deletePollAnswer", + "id": "-1206152236", + "method": "help.getPremiumPromo", + "params": [], + "type": "help.PremiumPromo" + }, + { + "id": "-629083089", + "method": "help.getPeerColors", "params": [ { - "name": "peer", - "type": "InputPeer" - }, - { - "name": "msg_id", + "name": "hash", "type": "int" - }, - { - "name": "option", - "type": "bytes" } ], - "type": "Updates" + "type": "help.PeerColors" }, { - "id": "1126722802", - "method": "messages.getUnreadPollVotes", + "id": "-1412453891", + "method": "help.getPeerProfileColors", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "peer", - "type": "InputPeer" - }, - { - "name": "top_msg_id", - "type": "flags.0?int" - }, - { - "name": "offset_id", + "name": "hash", "type": "int" - }, + } + ], + "type": "help.PeerColors" + }, + { + "id": "1236468288", + "method": "help.getTimezonesList", + "params": [ { - "name": "add_offset", + "name": "hash", "type": "int" - }, + } + ], + "type": "help.TimezonesList" + }, + { + "id": "-871347913", + "method": "channels.readHistory", + "params": [ { - "name": "limit", - "type": "int" + "name": "channel", + "type": "InputChannel" }, { "name": "max_id", "type": "int" + } + ], + "type": "Bool" + }, + { + "id": "-2067661490", + "method": "channels.deleteMessages", + "params": [ + { + "name": "channel", + "type": "InputChannel" }, { - "name": "min_id", - "type": "int" + "name": "id", + "type": "Vector" } ], - "type": "messages.Messages" + "type": "messages.AffectedMessages" }, { - "id": "388019416", - "method": "messages.readPollVotes", + "id": "-196443371", + "method": "channels.reportSpam", "params": [ { - "name": "flags", - "type": "#" + "name": "channel", + "type": "InputChannel" }, { - "name": "peer", + "name": "participant", "type": "InputPeer" }, { - "name": "top_msg_id", - "type": "flags.0?int" + "name": "id", + "type": "Vector" } ], - "type": "messages.AffectedHistory" + "type": "Bool" }, { - "id": "-1192163613", - "method": "messages.setBotGuestChatResult", + "id": "-1383294429", + "method": "channels.getMessages", "params": [ { - "name": "query_id", - "type": "long" + "name": "channel", + "type": "InputChannel" }, { - "name": "result", - "type": "InputBotInlineResult" + "name": "id", + "type": "Vector" } ], - "type": "InputBotInlineMessageID" + "type": "messages.Messages" }, { - "id": "-1598550792", - "method": "messages.deleteParticipantReactions", + "id": "2010044880", + "method": "channels.getParticipants", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "channel", + "type": "InputChannel" }, { - "name": "participant", - "type": "InputPeer" + "name": "filter", + "type": "ChannelParticipantsFilter" + }, + { + "name": "offset", + "type": "int" + }, + { + "name": "limit", + "type": "int" + }, + { + "name": "hash", + "type": "long" } ], - "type": "Bool" + "type": "channels.ChannelParticipants" }, { - "id": "-474482644", - "method": "messages.deleteParticipantReaction", + "id": "-1599378234", + "method": "channels.getParticipant", "params": [ { - "name": "peer", - "type": "InputPeer" - }, - { - "name": "msg_id", - "type": "int" + "name": "channel", + "type": "InputChannel" }, { "name": "participant", "type": "InputPeer" } ], - "type": "Updates" + "type": "channels.ChannelParticipant" }, { - "id": "1442515350", - "method": "messages.getPersonalChannelHistory", + "id": "176122811", + "method": "channels.getChannels", "params": [ { - "name": "user_id", - "type": "InputUser" - }, - { - "name": "limit", - "type": "int" - }, - { - "name": "max_id", - "type": "int" - }, - { - "name": "min_id", - "type": "int" - }, - { - "name": "hash", - "type": "long" + "name": "id", + "type": "Vector" } ], - "type": "messages.Messages" + "type": "messages.Chats" }, { - "id": "-304838614", - "method": "updates.getState", - "params": [], - "type": "updates.State" + "id": "141781513", + "method": "channels.getFullChannel", + "params": [ + { + "name": "channel", + "type": "InputChannel" + } + ], + "type": "messages.ChatFull" }, { - "id": "432207715", - "method": "updates.getDifference", + "id": "-1862244601", + "method": "channels.createChannel", "params": [ { "name": "flags", "type": "#" }, { - "name": "pts", - "type": "int" + "name": "broadcast", + "type": "flags.0?true" }, { - "name": "pts_limit", - "type": "flags.1?int" + "name": "megagroup", + "type": "flags.1?true" }, { - "name": "pts_total_limit", - "type": "flags.0?int" + "name": "for_import", + "type": "flags.3?true" }, { - "name": "date", - "type": "int" + "name": "forum", + "type": "flags.5?true" }, { - "name": "qts", - "type": "int" + "name": "title", + "type": "string" }, { - "name": "qts_limit", - "type": "flags.2?int" + "name": "about", + "type": "string" + }, + { + "name": "geo_point", + "type": "flags.2?InputGeoPoint" + }, + { + "name": "address", + "type": "flags.2?string" + }, + { + "name": "ttl_period", + "type": "flags.4?int" } ], - "type": "updates.Difference" + "type": "Updates" }, { - "id": "51854712", - "method": "updates.getChannelDifference", + "id": "-1701270168", + "method": "channels.editAdmin", "params": [ { "name": "flags", "type": "#" }, - { - "name": "force", - "type": "flags.0?true" - }, { "name": "channel", "type": "InputChannel" }, { - "name": "filter", - "type": "ChannelMessagesFilter" + "name": "user_id", + "type": "InputUser" }, { - "name": "pts", - "type": "int" + "name": "admin_rights", + "type": "ChatAdminRights" }, { - "name": "limit", - "type": "int" + "name": "rank", + "type": "flags.0?string" } ], - "type": "updates.ChannelDifference" + "type": "Updates" }, { - "id": "166207545", - "method": "photos.updateProfilePhoto", + "id": "1450044624", + "method": "channels.editTitle", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "fallback", - "type": "flags.0?true" - }, - { - "name": "bot", - "type": "flags.1?InputUser" + "name": "channel", + "type": "InputChannel" }, { - "name": "id", - "type": "InputPhoto" + "name": "title", + "type": "string" } ], - "type": "photos.Photo" + "type": "Updates" }, { - "id": "59286453", - "method": "photos.uploadProfilePhoto", + "id": "-248621111", + "method": "channels.editPhoto", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "fallback", - "type": "flags.3?true" + "name": "channel", + "type": "InputChannel" }, { - "name": "bot", - "type": "flags.5?InputUser" - }, + "name": "photo", + "type": "InputChatPhoto" + } + ], + "type": "Updates" + }, + { + "id": "283557164", + "method": "channels.checkUsername", + "params": [ { - "name": "file", - "type": "flags.0?InputFile" + "name": "channel", + "type": "InputChannel" }, { - "name": "video", - "type": "flags.1?InputFile" - }, + "name": "username", + "type": "string" + } + ], + "type": "Bool" + }, + { + "id": "890549214", + "method": "channels.updateUsername", + "params": [ { - "name": "video_start_ts", - "type": "flags.2?double" + "name": "channel", + "type": "InputChannel" }, { - "name": "video_emoji_markup", - "type": "flags.4?VideoSize" + "name": "username", + "type": "string" } ], - "type": "photos.Photo" + "type": "Bool" }, { - "id": "-2016444625", - "method": "photos.deletePhotos", + "id": "2137660962", + "method": "channels.joinChannel", "params": [ { - "name": "id", - "type": "Vector" + "name": "channel", + "type": "InputChannel" } ], - "type": "Vector" + "type": "messages.ChatInviteJoinResult" }, { - "id": "-1848823128", - "method": "photos.getUserPhotos", + "id": "-130635115", + "method": "channels.leaveChannel", "params": [ { - "name": "user_id", - "type": "InputUser" - }, + "name": "channel", + "type": "InputChannel" + } + ], + "type": "Updates" + }, + { + "id": "-907854508", + "method": "channels.inviteToChannel", + "params": [ { - "name": "offset", - "type": "int" + "name": "channel", + "type": "InputChannel" }, { - "name": "max_id", - "type": "long" - }, + "name": "users", + "type": "Vector" + } + ], + "type": "messages.InvitedUsers" + }, + { + "id": "-1072619549", + "method": "channels.deleteChannel", + "params": [ { - "name": "limit", - "type": "int" + "name": "channel", + "type": "InputChannel" } ], - "type": "photos.Photos" + "type": "Updates" }, { - "id": "-515093903", - "method": "photos.uploadContactProfilePhoto", + "id": "-432034325", + "method": "channels.exportMessageLink", "params": [ { "name": "flags", "type": "#" }, { - "name": "suggest", - "type": "flags.3?true" - }, - { - "name": "save", - "type": "flags.4?true" - }, - { - "name": "user_id", - "type": "InputUser" - }, - { - "name": "file", - "type": "flags.0?InputFile" + "name": "grouped", + "type": "flags.0?true" }, { - "name": "video", - "type": "flags.1?InputFile" + "name": "thread", + "type": "flags.1?true" }, { - "name": "video_start_ts", - "type": "flags.2?double" + "name": "channel", + "type": "InputChannel" }, { - "name": "video_emoji_markup", - "type": "flags.5?VideoSize" + "name": "id", + "type": "int" } ], - "type": "photos.Photo" + "type": "ExportedMessageLink" }, { - "id": "-1291540959", - "method": "upload.saveFilePart", + "id": "1099781276", + "method": "channels.toggleSignatures", "params": [ { - "name": "file_id", - "type": "long" + "name": "flags", + "type": "#" }, { - "name": "file_part", - "type": "int" + "name": "signatures_enabled", + "type": "flags.0?true" }, { - "name": "bytes", - "type": "bytes" + "name": "profiles_enabled", + "type": "flags.1?true" + }, + { + "name": "channel", + "type": "InputChannel" } ], - "type": "Bool" + "type": "Updates" }, { - "id": "-1101843010", - "method": "upload.getFile", + "id": "-122669393", + "method": "channels.getAdminedPublicChannels", "params": [ { "name": "flags", "type": "#" }, { - "name": "precise", + "name": "by_location", "type": "flags.0?true" }, { - "name": "cdn_supported", + "name": "check_limit", "type": "flags.1?true" }, { - "name": "location", - "type": "InputFileLocation" - }, - { - "name": "offset", - "type": "long" + "name": "for_personal", + "type": "flags.2?true" }, { - "name": "limit", - "type": "int" + "name": "for_community_peer", + "type": "flags.3?true" } ], - "type": "upload.File" + "type": "messages.Chats" }, { - "id": "-562337987", - "method": "upload.saveBigFilePart", + "id": "-1763259007", + "method": "channels.editBanned", "params": [ { - "name": "file_id", - "type": "long" - }, - { - "name": "file_part", - "type": "int" + "name": "channel", + "type": "InputChannel" }, { - "name": "file_total_parts", - "type": "int" + "name": "participant", + "type": "InputPeer" }, { - "name": "bytes", - "type": "bytes" + "name": "banned_rights", + "type": "ChatBannedRights" } ], - "type": "Bool" + "type": "Updates" }, { - "id": "619086221", - "method": "upload.getWebFile", + "id": "870184064", + "method": "channels.getAdminLog", "params": [ { - "name": "location", - "type": "InputWebFileLocation" + "name": "flags", + "type": "#" }, { - "name": "offset", - "type": "int" + "name": "channel", + "type": "InputChannel" }, { - "name": "limit", - "type": "int" - } - ], - "type": "upload.WebFile" - }, - { - "id": "962554330", - "method": "upload.getCdnFile", - "params": [ + "name": "q", + "type": "string" + }, { - "name": "file_token", - "type": "bytes" + "name": "events_filter", + "type": "flags.0?ChannelAdminLogEventsFilter" }, { - "name": "offset", + "name": "admins", + "type": "flags.1?Vector" + }, + { + "name": "max_id", + "type": "long" + }, + { + "name": "min_id", "type": "long" }, { @@ -40543,2213 +44575,2411 @@ "type": "int" } ], - "type": "upload.CdnFile" + "type": "channels.AdminLogResults" }, { - "id": "-1691921240", - "method": "upload.reuploadCdnFile", + "id": "-359881479", + "method": "channels.setStickers", "params": [ { - "name": "file_token", - "type": "bytes" + "name": "channel", + "type": "InputChannel" }, { - "name": "request_token", - "type": "bytes" + "name": "stickerset", + "type": "InputStickerSet" } ], - "type": "Vector" + "type": "Bool" }, { - "id": "-1847836879", - "method": "upload.getCdnFileHashes", + "id": "-357180360", + "method": "channels.readMessageContents", "params": [ { - "name": "file_token", - "type": "bytes" + "name": "channel", + "type": "InputChannel" }, { - "name": "offset", - "type": "long" + "name": "id", + "type": "Vector" } ], - "type": "Vector" + "type": "Bool" }, { - "id": "-1856595926", - "method": "upload.getFileHashes", + "id": "-1683319225", + "method": "channels.deleteHistory", "params": [ { - "name": "location", - "type": "InputFileLocation" + "name": "flags", + "type": "#" }, { - "name": "offset", - "type": "long" - } - ], - "type": "Vector" - }, - { - "id": "-990308245", - "method": "help.getConfig", - "params": [], - "type": "Config" - }, - { - "id": "531836966", - "method": "help.getNearestDc", - "params": [], - "type": "NearestDc" - }, - { - "id": "1378703997", - "method": "help.getAppUpdate", - "params": [ + "name": "for_everyone", + "type": "flags.0?true" + }, { - "name": "source", - "type": "string" + "name": "channel", + "type": "InputChannel" + }, + { + "name": "max_id", + "type": "int" } ], - "type": "help.AppUpdate" - }, - { - "id": "1295590211", - "method": "help.getInviteText", - "params": [], - "type": "help.InviteText" - }, - { - "id": "-1663104819", - "method": "help.getSupport", - "params": [], - "type": "help.Support" + "type": "Updates" }, { - "id": "-333262899", - "method": "help.setBotUpdatesStatus", + "id": "-356796084", + "method": "channels.togglePreHistoryHidden", "params": [ { - "name": "pending_updates_count", - "type": "int" + "name": "channel", + "type": "InputChannel" }, { - "name": "message", - "type": "string" + "name": "enabled", + "type": "Bool" } ], - "type": "Bool" - }, - { - "id": "1375900482", - "method": "help.getCdnConfig", - "params": [], - "type": "CdnConfig" + "type": "Updates" }, { - "id": "1036054804", - "method": "help.getRecentMeUrls", + "id": "-2092831552", + "method": "channels.getLeftChannels", "params": [ { - "name": "referer", - "type": "string" + "name": "offset", + "type": "int" } ], - "type": "help.RecentMeUrls" + "type": "messages.Chats" }, { - "id": "749019089", - "method": "help.getTermsOfServiceUpdate", + "id": "-170208392", + "method": "channels.getGroupsForDiscussion", "params": [], - "type": "help.TermsOfServiceUpdate" + "type": "messages.Chats" }, { - "id": "-294455398", - "method": "help.acceptTermsOfService", + "id": "1079520178", + "method": "channels.setDiscussionGroup", "params": [ { - "name": "id", - "type": "DataJSON" + "name": "broadcast", + "type": "InputChannel" + }, + { + "name": "group", + "type": "InputChannel" } ], "type": "Bool" }, { - "id": "1072547679", - "method": "help.getDeepLinkInfo", + "id": "1491484525", + "method": "channels.editLocation", "params": [ { - "name": "path", + "name": "channel", + "type": "InputChannel" + }, + { + "name": "geo_point", + "type": "InputGeoPoint" + }, + { + "name": "address", "type": "string" } ], - "type": "help.DeepLinkInfo" + "type": "Bool" }, { - "id": "1642330196", - "method": "help.getAppConfig", + "id": "-304832784", + "method": "channels.toggleSlowMode", "params": [ { - "name": "hash", + "name": "channel", + "type": "InputChannel" + }, + { + "name": "seconds", "type": "int" } ], - "type": "help.AppConfig" + "type": "Updates" }, { - "id": "1862465352", - "method": "help.saveAppLog", + "id": "300429806", + "method": "channels.getInactiveChannels", + "params": [], + "type": "messages.InactiveChats" + }, + { + "id": "187239529", + "method": "channels.convertToGigagroup", "params": [ { - "name": "events", - "type": "Vector" + "name": "channel", + "type": "InputChannel" } ], - "type": "Bool" + "type": "Updates" }, { - "id": "-966677240", - "method": "help.getPassportConfig", + "id": "-410672065", + "method": "channels.getSendAs", "params": [ { - "name": "hash", - "type": "int" + "name": "flags", + "type": "#" + }, + { + "name": "for_paid_reactions", + "type": "flags.0?true" + }, + { + "name": "for_live_stories", + "type": "flags.1?true" + }, + { + "name": "peer", + "type": "InputPeer" } ], - "type": "help.PassportConfig" - }, - { - "id": "-748624084", - "method": "help.getSupportName", - "params": [], - "type": "help.SupportName" + "type": "channels.SendAsPeers" }, { - "id": "59377875", - "method": "help.getUserInfo", + "id": "913655003", + "method": "channels.deleteParticipantHistory", "params": [ { - "name": "user_id", - "type": "InputUser" + "name": "channel", + "type": "InputChannel" + }, + { + "name": "participant", + "type": "InputPeer" } ], - "type": "help.UserInfo" + "type": "messages.AffectedHistory" }, { - "id": "1723407216", - "method": "help.editUserInfo", + "id": "-456419968", + "method": "channels.toggleJoinToSend", "params": [ { - "name": "user_id", - "type": "InputUser" - }, - { - "name": "message", - "type": "string" + "name": "channel", + "type": "InputChannel" }, { - "name": "entities", - "type": "Vector" + "name": "enabled", + "type": "Bool" } ], - "type": "help.UserInfo" - }, - { - "id": "-1063816159", - "method": "help.getPromoData", - "params": [], - "type": "help.PromoData" + "type": "Updates" }, { - "id": "505748629", - "method": "help.hidePromoData", + "id": "248260120", + "method": "channels.toggleJoinRequest", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "flags", + "type": "#" + }, + { + "name": "apply_to_invites", + "type": "flags.1?true" + }, + { + "name": "channel", + "type": "InputChannel" + }, + { + "name": "enabled", + "type": "Bool" + }, + { + "name": "guard_bot", + "type": "flags.0?InputUser" } ], - "type": "Bool" + "type": "Updates" }, { - "id": "-183649631", - "method": "help.dismissSuggestion", + "id": "-1268978403", + "method": "channels.reorderUsernames", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "channel", + "type": "InputChannel" }, { - "name": "suggestion", - "type": "string" + "name": "order", + "type": "Vector" } ], "type": "Bool" }, { - "id": "1935116200", - "method": "help.getCountriesList", + "id": "1358053637", + "method": "channels.toggleUsername", "params": [ { - "name": "lang_code", + "name": "channel", + "type": "InputChannel" + }, + { + "name": "username", "type": "string" }, { - "name": "hash", - "type": "int" + "name": "active", + "type": "Bool" } ], - "type": "help.CountriesList" - }, - { - "id": "-1206152236", - "method": "help.getPremiumPromo", - "params": [], - "type": "help.PremiumPromo" + "type": "Bool" }, { - "id": "-629083089", - "method": "help.getPeerColors", + "id": "170155475", + "method": "channels.deactivateAllUsernames", "params": [ { - "name": "hash", - "type": "int" + "name": "channel", + "type": "InputChannel" } ], - "type": "help.PeerColors" + "type": "Bool" }, { - "id": "-1412453891", - "method": "help.getPeerProfileColors", + "id": "1073174324", + "method": "channels.toggleForum", "params": [ { - "name": "hash", - "type": "int" + "name": "channel", + "type": "InputChannel" + }, + { + "name": "enabled", + "type": "Bool" + }, + { + "name": "tabs", + "type": "Bool" } ], - "type": "help.PeerColors" + "type": "Updates" }, { - "id": "1236468288", - "method": "help.getTimezonesList", + "id": "1760814315", + "method": "channels.toggleAntiSpam", "params": [ { - "name": "hash", - "type": "int" + "name": "channel", + "type": "InputChannel" + }, + { + "name": "enabled", + "type": "Bool" } ], - "type": "help.TimezonesList" + "type": "Updates" }, { - "id": "-871347913", - "method": "channels.readHistory", + "id": "-1471109485", + "method": "channels.reportAntiSpamFalsePositive", "params": [ { "name": "channel", "type": "InputChannel" }, { - "name": "max_id", + "name": "msg_id", "type": "int" } ], "type": "Bool" }, { - "id": "-2067661490", - "method": "channels.deleteMessages", + "id": "1785624660", + "method": "channels.toggleParticipantsHidden", "params": [ { "name": "channel", "type": "InputChannel" }, { - "name": "id", - "type": "Vector" + "name": "enabled", + "type": "Bool" } ], - "type": "messages.AffectedMessages" + "type": "Updates" }, { - "id": "-196443371", - "method": "channels.reportSpam", + "id": "-659933583", + "method": "channels.updateColor", "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "for_profile", + "type": "flags.1?true" + }, { "name": "channel", "type": "InputChannel" }, { - "name": "participant", - "type": "InputPeer" + "name": "color", + "type": "flags.2?int" }, { - "name": "id", - "type": "Vector" + "name": "background_emoji_id", + "type": "flags.0?long" } ], - "type": "Bool" + "type": "Updates" }, { - "id": "-1383294429", - "method": "channels.getMessages", + "id": "-1757889771", + "method": "channels.toggleViewForumAsMessages", "params": [ { "name": "channel", "type": "InputChannel" }, { - "name": "id", - "type": "Vector" + "name": "enabled", + "type": "Bool" } ], - "type": "messages.Messages" + "type": "Updates" }, { - "id": "2010044880", - "method": "channels.getParticipants", + "id": "631707458", + "method": "channels.getChannelRecommendations", "params": [ { - "name": "channel", - "type": "InputChannel" - }, - { - "name": "filter", - "type": "ChannelParticipantsFilter" + "name": "flags", + "type": "#" }, { - "name": "offset", - "type": "int" - }, + "name": "channel", + "type": "flags.0?InputChannel" + } + ], + "type": "messages.Chats" + }, + { + "id": "-254548312", + "method": "channels.updateEmojiStatus", + "params": [ { - "name": "limit", - "type": "int" + "name": "channel", + "type": "InputChannel" }, { - "name": "hash", - "type": "long" + "name": "emoji_status", + "type": "EmojiStatus" } ], - "type": "channels.ChannelParticipants" + "type": "Updates" }, { - "id": "-1599378234", - "method": "channels.getParticipant", + "id": "-1388733202", + "method": "channels.setBoostsToUnblockRestrictions", "params": [ { "name": "channel", "type": "InputChannel" }, { - "name": "participant", - "type": "InputPeer" + "name": "boosts", + "type": "int" } ], - "type": "channels.ChannelParticipant" + "type": "Updates" }, { - "id": "176122811", - "method": "channels.getChannels", + "id": "1020866743", + "method": "channels.setEmojiStickers", "params": [ { - "name": "id", - "type": "Vector" + "name": "channel", + "type": "InputChannel" + }, + { + "name": "stickerset", + "type": "InputStickerSet" } ], - "type": "messages.Chats" + "type": "Bool" }, { - "id": "141781513", - "method": "channels.getFullChannel", + "id": "-1696000743", + "method": "channels.restrictSponsoredMessages", "params": [ { "name": "channel", "type": "InputChannel" + }, + { + "name": "restricted", + "type": "Bool" } ], - "type": "messages.ChatFull" + "type": "Updates" }, { - "id": "-1862244601", - "method": "channels.createChannel", + "id": "-221973939", + "method": "channels.searchPosts", "params": [ { "name": "flags", "type": "#" }, { - "name": "broadcast", - "type": "flags.0?true" + "name": "hashtag", + "type": "flags.0?string" }, { - "name": "megagroup", - "type": "flags.1?true" + "name": "query", + "type": "flags.1?string" }, { - "name": "for_import", - "type": "flags.3?true" + "name": "offset_rate", + "type": "int" }, { - "name": "forum", - "type": "flags.5?true" + "name": "offset_peer", + "type": "InputPeer" }, { - "name": "title", - "type": "string" + "name": "offset_id", + "type": "int" }, { - "name": "about", - "type": "string" + "name": "limit", + "type": "int" }, { - "name": "geo_point", - "type": "flags.2?InputGeoPoint" + "name": "allow_paid_stars", + "type": "flags.2?long" + } + ], + "type": "messages.Messages" + }, + { + "id": "1259483771", + "method": "channels.updatePaidMessagesPrice", + "params": [ + { + "name": "flags", + "type": "#" }, { - "name": "address", - "type": "flags.2?string" + "name": "broadcast_messages_allowed", + "type": "flags.0?true" }, { - "name": "ttl_period", - "type": "flags.4?int" + "name": "channel", + "type": "InputChannel" + }, + { + "name": "send_paid_messages_stars", + "type": "long" } ], "type": "Updates" }, { - "id": "-1701270168", - "method": "channels.editAdmin", + "id": "377471137", + "method": "channels.toggleAutotranslation", "params": [ { - "name": "flags", - "type": "#" + "name": "channel", + "type": "InputChannel" }, + { + "name": "enabled", + "type": "Bool" + } + ], + "type": "Updates" + }, + { + "id": "-320691994", + "method": "channels.getMessageAuthor", + "params": [ { "name": "channel", "type": "InputChannel" }, { - "name": "user_id", - "type": "InputUser" - }, + "name": "id", + "type": "int" + } + ], + "type": "User" + }, + { + "id": "576090389", + "method": "channels.checkSearchPostsFlood", + "params": [ { - "name": "admin_rights", - "type": "ChatAdminRights" + "name": "flags", + "type": "#" }, { - "name": "rank", + "name": "query", "type": "flags.0?string" } ], - "type": "Updates" + "type": "SearchPostsFlood" }, { - "id": "1450044624", - "method": "channels.editTitle", + "id": "897842353", + "method": "channels.setMainProfileTab", "params": [ { "name": "channel", "type": "InputChannel" }, { - "name": "title", + "name": "tab", + "type": "ProfileTab" + } + ], + "type": "Bool" + }, + { + "id": "-1440257555", + "method": "bots.sendCustomRequest", + "params": [ + { + "name": "custom_method", "type": "string" + }, + { + "name": "params", + "type": "DataJSON" } ], - "type": "Updates" + "type": "DataJSON" }, { - "id": "-248621111", - "method": "channels.editPhoto", + "id": "-434028723", + "method": "bots.answerWebhookJSONQuery", "params": [ { - "name": "channel", - "type": "InputChannel" + "name": "query_id", + "type": "long" }, { - "name": "photo", - "type": "InputChatPhoto" + "name": "data", + "type": "DataJSON" } ], - "type": "Updates" + "type": "Bool" }, { - "id": "283557164", - "method": "channels.checkUsername", + "id": "85399130", + "method": "bots.setBotCommands", "params": [ { - "name": "channel", - "type": "InputChannel" + "name": "scope", + "type": "BotCommandScope" }, { - "name": "username", + "name": "lang_code", "type": "string" + }, + { + "name": "commands", + "type": "Vector" } ], "type": "Bool" }, { - "id": "890549214", - "method": "channels.updateUsername", + "id": "1032708345", + "method": "bots.resetBotCommands", "params": [ { - "name": "channel", - "type": "InputChannel" + "name": "scope", + "type": "BotCommandScope" }, { - "name": "username", + "name": "lang_code", "type": "string" } ], "type": "Bool" }, { - "id": "615851205", - "method": "channels.joinChannel", + "id": "-481554986", + "method": "bots.getBotCommands", "params": [ { - "name": "channel", - "type": "InputChannel" + "name": "scope", + "type": "BotCommandScope" + }, + { + "name": "lang_code", + "type": "string" } ], - "type": "Updates" + "type": "Vector" }, { - "id": "-130635115", - "method": "channels.leaveChannel", + "id": "1157944655", + "method": "bots.setBotMenuButton", "params": [ { - "name": "channel", - "type": "InputChannel" + "name": "user_id", + "type": "InputUser" + }, + { + "name": "button", + "type": "BotMenuButton" } ], - "type": "Updates" + "type": "Bool" }, { - "id": "-907854508", - "method": "channels.inviteToChannel", + "id": "-1671369944", + "method": "bots.getBotMenuButton", "params": [ { - "name": "channel", - "type": "InputChannel" - }, + "name": "user_id", + "type": "InputUser" + } + ], + "type": "BotMenuButton" + }, + { + "id": "2021942497", + "method": "bots.setBotBroadcastDefaultAdminRights", + "params": [ { - "name": "users", - "type": "Vector" + "name": "admin_rights", + "type": "ChatAdminRights" } ], - "type": "messages.InvitedUsers" + "type": "Bool" }, { - "id": "-1072619549", - "method": "channels.deleteChannel", + "id": "-1839281686", + "method": "bots.setBotGroupDefaultAdminRights", "params": [ { - "name": "channel", - "type": "InputChannel" + "name": "admin_rights", + "type": "ChatAdminRights" } ], - "type": "Updates" + "type": "Bool" }, { - "id": "-432034325", - "method": "channels.exportMessageLink", + "id": "282013987", + "method": "bots.setBotInfo", "params": [ { "name": "flags", "type": "#" }, { - "name": "grouped", - "type": "flags.0?true" + "name": "bot", + "type": "flags.2?InputUser" }, { - "name": "thread", - "type": "flags.1?true" + "name": "lang_code", + "type": "string" }, { - "name": "channel", - "type": "InputChannel" + "name": "name", + "type": "flags.3?string" }, { - "name": "id", - "type": "int" + "name": "about", + "type": "flags.0?string" + }, + { + "name": "description", + "type": "flags.1?string" } ], - "type": "ExportedMessageLink" + "type": "Bool" }, { - "id": "1099781276", - "method": "channels.toggleSignatures", + "id": "-589753091", + "method": "bots.getBotInfo", "params": [ { "name": "flags", "type": "#" }, { - "name": "signatures_enabled", - "type": "flags.0?true" - }, - { - "name": "profiles_enabled", - "type": "flags.1?true" + "name": "bot", + "type": "flags.0?InputUser" }, { - "name": "channel", - "type": "InputChannel" + "name": "lang_code", + "type": "string" } ], - "type": "Updates" + "type": "bots.BotInfo" }, { - "id": "-122669393", - "method": "channels.getAdminedPublicChannels", + "id": "-1760972350", + "method": "bots.reorderUsernames", "params": [ { - "name": "flags", - "type": "#" + "name": "bot", + "type": "InputUser" }, { - "name": "by_location", - "type": "flags.0?true" + "name": "order", + "type": "Vector" + } + ], + "type": "Bool" + }, + { + "id": "87861619", + "method": "bots.toggleUsername", + "params": [ + { + "name": "bot", + "type": "InputUser" }, { - "name": "check_limit", - "type": "flags.1?true" + "name": "username", + "type": "string" }, { - "name": "for_personal", - "type": "flags.2?true" + "name": "active", + "type": "Bool" } ], - "type": "messages.Chats" + "type": "Bool" }, { - "id": "-1763259007", - "method": "channels.editBanned", + "id": "324662502", + "method": "bots.canSendMessage", "params": [ { - "name": "channel", - "type": "InputChannel" - }, - { - "name": "participant", - "type": "InputPeer" - }, + "name": "bot", + "type": "InputUser" + } + ], + "type": "Bool" + }, + { + "id": "-248323089", + "method": "bots.allowSendMessage", + "params": [ { - "name": "banned_rights", - "type": "ChatBannedRights" + "name": "bot", + "type": "InputUser" } ], "type": "Updates" }, { - "id": "870184064", - "method": "channels.getAdminLog", + "id": "142591463", + "method": "bots.invokeWebViewCustomMethod", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "channel", - "type": "InputChannel" + "name": "bot", + "type": "InputUser" }, { - "name": "q", + "name": "custom_method", "type": "string" }, { - "name": "events_filter", - "type": "flags.0?ChannelAdminLogEventsFilter" - }, + "name": "params", + "type": "DataJSON" + } + ], + "type": "DataJSON" + }, + { + "id": "-1034878574", + "method": "bots.getPopularAppBots", + "params": [ { - "name": "admins", - "type": "flags.1?Vector" + "name": "offset", + "type": "string" }, { - "name": "max_id", - "type": "long" + "name": "limit", + "type": "int" + } + ], + "type": "bots.PopularAppBots" + }, + { + "id": "397326170", + "method": "bots.addPreviewMedia", + "params": [ + { + "name": "bot", + "type": "InputUser" }, { - "name": "min_id", - "type": "long" + "name": "lang_code", + "type": "string" }, { - "name": "limit", - "type": "int" + "name": "media", + "type": "InputMedia" } ], - "type": "channels.AdminLogResults" + "type": "BotPreviewMedia" }, { - "id": "-359881479", - "method": "channels.setStickers", + "id": "-2061148049", + "method": "bots.editPreviewMedia", "params": [ { - "name": "channel", - "type": "InputChannel" + "name": "bot", + "type": "InputUser" }, { - "name": "stickerset", - "type": "InputStickerSet" + "name": "lang_code", + "type": "string" + }, + { + "name": "media", + "type": "InputMedia" + }, + { + "name": "new_media", + "type": "InputMedia" } ], - "type": "Bool" + "type": "BotPreviewMedia" }, { - "id": "-357180360", - "method": "channels.readMessageContents", + "id": "755054003", + "method": "bots.deletePreviewMedia", "params": [ { - "name": "channel", - "type": "InputChannel" + "name": "bot", + "type": "InputUser" }, { - "name": "id", - "type": "Vector" + "name": "lang_code", + "type": "string" + }, + { + "name": "media", + "type": "Vector" } ], "type": "Bool" }, { - "id": "-1683319225", - "method": "channels.deleteHistory", + "id": "-1238895702", + "method": "bots.reorderPreviewMedias", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "for_everyone", - "type": "flags.0?true" + "name": "bot", + "type": "InputUser" }, { - "name": "channel", - "type": "InputChannel" + "name": "lang_code", + "type": "string" }, { - "name": "max_id", - "type": "int" + "name": "order", + "type": "Vector" } ], - "type": "Updates" + "type": "Bool" }, { - "id": "-356796084", - "method": "channels.togglePreHistoryHidden", + "id": "1111143341", + "method": "bots.getPreviewInfo", "params": [ { - "name": "channel", - "type": "InputChannel" + "name": "bot", + "type": "InputUser" }, { - "name": "enabled", - "type": "Bool" + "name": "lang_code", + "type": "string" } ], - "type": "Updates" + "type": "bots.PreviewInfo" }, { - "id": "-2092831552", - "method": "channels.getLeftChannels", + "id": "-1566222003", + "method": "bots.getPreviewMedias", "params": [ { - "name": "offset", - "type": "int" + "name": "bot", + "type": "InputUser" } ], - "type": "messages.Chats" - }, - { - "id": "-170208392", - "method": "channels.getGroupsForDiscussion", - "params": [], - "type": "messages.Chats" + "type": "Vector" }, { - "id": "1079520178", - "method": "channels.setDiscussionGroup", + "id": "-308334395", + "method": "bots.updateUserEmojiStatus", "params": [ { - "name": "broadcast", - "type": "InputChannel" + "name": "user_id", + "type": "InputUser" }, { - "name": "group", - "type": "InputChannel" + "name": "emoji_status", + "type": "EmojiStatus" } ], "type": "Bool" }, { - "id": "1491484525", - "method": "channels.editLocation", + "id": "115237778", + "method": "bots.toggleUserEmojiStatusPermission", "params": [ { - "name": "channel", - "type": "InputChannel" - }, - { - "name": "geo_point", - "type": "InputGeoPoint" + "name": "bot", + "type": "InputUser" }, { - "name": "address", - "type": "string" + "name": "enabled", + "type": "Bool" } ], "type": "Bool" }, { - "id": "-304832784", - "method": "channels.toggleSlowMode", + "id": "1342666121", + "method": "bots.checkDownloadFileParams", "params": [ { - "name": "channel", - "type": "InputChannel" + "name": "bot", + "type": "InputUser" }, { - "name": "seconds", - "type": "int" + "name": "file_name", + "type": "string" + }, + { + "name": "url", + "type": "string" } ], - "type": "Updates" + "type": "Bool" }, { - "id": "300429806", - "method": "channels.getInactiveChannels", + "id": "-1334764157", + "method": "bots.getAdminedBots", "params": [], - "type": "messages.InactiveChats" + "type": "Vector" }, { - "id": "187239529", - "method": "channels.convertToGigagroup", + "id": "2005621427", + "method": "bots.updateStarRefProgram", "params": [ { - "name": "channel", - "type": "InputChannel" + "name": "flags", + "type": "#" + }, + { + "name": "bot", + "type": "InputUser" + }, + { + "name": "commission_permille", + "type": "int" + }, + { + "name": "duration_months", + "type": "flags.0?int" } ], - "type": "Updates" + "type": "StarRefProgram" }, { - "id": "-410672065", - "method": "channels.getSendAs", + "id": "-191600809", + "method": "bots.setCustomVerification", "params": [ { "name": "flags", "type": "#" }, { - "name": "for_paid_reactions", - "type": "flags.0?true" + "name": "enabled", + "type": "flags.1?true" }, { - "name": "for_live_stories", - "type": "flags.1?true" + "name": "bot", + "type": "flags.0?InputUser" }, { "name": "peer", "type": "InputPeer" - } - ], - "type": "channels.SendAsPeers" - }, - { - "id": "913655003", - "method": "channels.deleteParticipantHistory", - "params": [ - { - "name": "channel", - "type": "InputChannel" }, { - "name": "participant", - "type": "InputPeer" + "name": "custom_description", + "type": "flags.2?TextWithEntities" } ], - "type": "messages.AffectedHistory" + "type": "Bool" }, { - "id": "-456419968", - "method": "channels.toggleJoinToSend", + "id": "-1581840363", + "method": "bots.getBotRecommendations", "params": [ { - "name": "channel", - "type": "InputChannel" - }, - { - "name": "enabled", - "type": "Bool" + "name": "bot", + "type": "InputUser" } ], - "type": "Updates" + "type": "users.Users" }, { - "id": "1277789622", - "method": "channels.toggleJoinRequest", + "id": "-475247519", + "method": "bots.checkUsername", "params": [ { - "name": "channel", - "type": "InputChannel" + "name": "flags", + "type": "#" }, { - "name": "enabled", - "type": "Bool" - } - ], - "type": "Updates" - }, - { - "id": "-1268978403", - "method": "channels.reorderUsernames", - "params": [ - { - "name": "channel", - "type": "InputChannel" + "name": "additional", + "type": "flags.0?true" }, { - "name": "order", - "type": "Vector" + "name": "username", + "type": "string" } ], "type": "Bool" }, { - "id": "1358053637", - "method": "channels.toggleUsername", + "id": "-441352405", + "method": "bots.createBot", "params": [ { - "name": "channel", - "type": "InputChannel" + "name": "flags", + "type": "#" }, { - "name": "username", + "name": "via_deeplink", + "type": "flags.0?true" + }, + { + "name": "name", "type": "string" }, { - "name": "active", - "type": "Bool" - } - ], - "type": "Bool" - }, - { - "id": "170155475", - "method": "channels.deactivateAllUsernames", - "params": [ + "name": "username", + "type": "string" + }, { - "name": "channel", - "type": "InputChannel" + "name": "manager_id", + "type": "InputUser" } ], - "type": "Bool" + "type": "User" }, { - "id": "1073174324", - "method": "channels.toggleForum", + "id": "-1123182101", + "method": "bots.exportBotToken", "params": [ { - "name": "channel", - "type": "InputChannel" - }, - { - "name": "enabled", - "type": "Bool" + "name": "bot", + "type": "InputUser" }, { - "name": "tabs", + "name": "revoke", "type": "Bool" } ], - "type": "Updates" + "type": "bots.ExportedBotToken" }, { - "id": "1760814315", - "method": "channels.toggleAntiSpam", + "id": "832742238", + "method": "bots.requestWebViewButton", "params": [ { - "name": "channel", - "type": "InputChannel" + "name": "user_id", + "type": "InputUser" }, { - "name": "enabled", - "type": "Bool" + "name": "button", + "type": "KeyboardButton" } ], - "type": "Updates" + "type": "bots.RequestedButton" }, { - "id": "-1471109485", - "method": "channels.reportAntiSpamFalsePositive", + "id": "-1088047117", + "method": "bots.getRequestedWebViewButton", "params": [ { - "name": "channel", - "type": "InputChannel" + "name": "bot", + "type": "InputUser" }, { - "name": "msg_id", - "type": "int" + "name": "webapp_req_id", + "type": "string" } ], - "type": "Bool" + "type": "KeyboardButton" }, { - "id": "1785624660", - "method": "channels.toggleParticipantsHidden", + "id": "557339555", + "method": "bots.getAccessSettings", "params": [ { - "name": "channel", - "type": "InputChannel" - }, - { - "name": "enabled", - "type": "Bool" + "name": "bot", + "type": "InputUser" } ], - "type": "Updates" + "type": "bots.AccessSettings" }, { - "id": "-659933583", - "method": "channels.updateColor", + "id": "830553304", + "method": "bots.editAccessSettings", "params": [ { "name": "flags", "type": "#" }, { - "name": "for_profile", - "type": "flags.1?true" - }, - { - "name": "channel", - "type": "InputChannel" + "name": "restricted", + "type": "flags.0?true" }, { - "name": "color", - "type": "flags.2?int" + "name": "bot", + "type": "InputUser" }, { - "name": "background_emoji_id", - "type": "flags.0?long" + "name": "add_users", + "type": "flags.1?Vector" } ], - "type": "Updates" + "type": "Bool" }, { - "id": "-1757889771", - "method": "channels.toggleViewForumAsMessages", + "id": "-417708016", + "method": "bots.setJoinChatResults", "params": [ { - "name": "channel", - "type": "InputChannel" + "name": "query_id", + "type": "long" }, { - "name": "enabled", - "type": "Bool" + "name": "result", + "type": "JoinChatBotResult" } ], - "type": "Updates" + "type": "Bool" }, { - "id": "631707458", - "method": "channels.getChannelRecommendations", + "id": "889307274", + "method": "bots.addUsername", "params": [ { - "name": "flags", - "type": "#" + "name": "bot", + "type": "InputUser" }, { - "name": "channel", - "type": "flags.0?InputChannel" + "name": "username", + "type": "string" } ], - "type": "messages.Chats" + "type": "Bool" }, { - "id": "-254548312", - "method": "channels.updateEmojiStatus", + "id": "-956033923", + "method": "bots.removeUsername", "params": [ { - "name": "channel", - "type": "InputChannel" + "name": "bot", + "type": "InputUser" }, { - "name": "emoji_status", - "type": "EmojiStatus" + "name": "username", + "type": "string" } ], - "type": "Updates" + "type": "Bool" }, { - "id": "-1388733202", - "method": "channels.setBoostsToUnblockRestrictions", + "id": "924093883", + "method": "payments.getPaymentForm", "params": [ { - "name": "channel", - "type": "InputChannel" + "name": "flags", + "type": "#" }, { - "name": "boosts", - "type": "int" + "name": "invoice", + "type": "InputInvoice" + }, + { + "name": "theme_params", + "type": "flags.0?DataJSON" } ], - "type": "Updates" + "type": "payments.PaymentForm" }, { - "id": "1020866743", - "method": "channels.setEmojiStickers", + "id": "611897804", + "method": "payments.getPaymentReceipt", "params": [ { - "name": "channel", - "type": "InputChannel" + "name": "peer", + "type": "InputPeer" }, { - "name": "stickerset", - "type": "InputStickerSet" + "name": "msg_id", + "type": "int" } ], - "type": "Bool" + "type": "payments.PaymentReceipt" }, { - "id": "-1696000743", - "method": "channels.restrictSponsoredMessages", + "id": "-1228345045", + "method": "payments.validateRequestedInfo", "params": [ { - "name": "channel", - "type": "InputChannel" + "name": "flags", + "type": "#" }, { - "name": "restricted", - "type": "Bool" + "name": "save", + "type": "flags.0?true" + }, + { + "name": "invoice", + "type": "InputInvoice" + }, + { + "name": "info", + "type": "PaymentRequestedInfo" } ], - "type": "Updates" + "type": "payments.ValidatedRequestedInfo" }, { - "id": "-221973939", - "method": "channels.searchPosts", + "id": "755192367", + "method": "payments.sendPaymentForm", "params": [ { "name": "flags", "type": "#" }, { - "name": "hashtag", - "type": "flags.0?string" - }, - { - "name": "query", - "type": "flags.1?string" + "name": "form_id", + "type": "long" }, { - "name": "offset_rate", - "type": "int" + "name": "invoice", + "type": "InputInvoice" }, { - "name": "offset_peer", - "type": "InputPeer" + "name": "requested_info_id", + "type": "flags.0?string" }, { - "name": "offset_id", - "type": "int" + "name": "shipping_option_id", + "type": "flags.1?string" }, { - "name": "limit", - "type": "int" + "name": "credentials", + "type": "InputPaymentCredentials" }, { - "name": "allow_paid_stars", + "name": "tip_amount", "type": "flags.2?long" } ], - "type": "messages.Messages" + "type": "payments.PaymentResult" }, { - "id": "1259483771", - "method": "channels.updatePaidMessagesPrice", + "id": "578650699", + "method": "payments.getSavedInfo", + "params": [], + "type": "payments.SavedInfo" + }, + { + "id": "-667062079", + "method": "payments.clearSavedInfo", "params": [ { "name": "flags", "type": "#" }, { - "name": "broadcast_messages_allowed", + "name": "credentials", "type": "flags.0?true" }, { - "name": "channel", - "type": "InputChannel" - }, - { - "name": "send_paid_messages_stars", - "type": "long" + "name": "info", + "type": "flags.1?true" } ], - "type": "Updates" + "type": "Bool" }, { - "id": "377471137", - "method": "channels.toggleAutotranslation", + "id": "779736953", + "method": "payments.getBankCardData", "params": [ { - "name": "channel", - "type": "InputChannel" - }, - { - "name": "enabled", - "type": "Bool" + "name": "number", + "type": "string" } ], - "type": "Updates" + "type": "payments.BankCardData" }, { - "id": "-320691994", - "method": "channels.getMessageAuthor", + "id": "261206117", + "method": "payments.exportInvoice", "params": [ { - "name": "channel", - "type": "InputChannel" - }, - { - "name": "id", - "type": "int" + "name": "invoice_media", + "type": "InputMedia" } ], - "type": "User" + "type": "payments.ExportedInvoice" }, { - "id": "576090389", - "method": "channels.checkSearchPostsFlood", + "id": "-2131921795", + "method": "payments.assignAppStoreTransaction", "params": [ { - "name": "flags", - "type": "#" + "name": "receipt", + "type": "bytes" }, { - "name": "query", - "type": "flags.0?string" + "name": "purpose", + "type": "InputStorePaymentPurpose" } ], - "type": "SearchPostsFlood" + "type": "Updates" }, { - "id": "897842353", - "method": "channels.setMainProfileTab", + "id": "-537046829", + "method": "payments.assignPlayMarketTransaction", "params": [ { - "name": "channel", - "type": "InputChannel" + "name": "receipt", + "type": "DataJSON" }, { - "name": "tab", - "type": "ProfileTab" + "name": "purpose", + "type": "InputStorePaymentPurpose" } ], - "type": "Bool" + "type": "Updates" }, { - "id": "-1440257555", - "method": "bots.sendCustomRequest", + "id": "660060756", + "method": "payments.getPremiumGiftCodeOptions", "params": [ { - "name": "custom_method", - "type": "string" + "name": "flags", + "type": "#" }, { - "name": "params", - "type": "DataJSON" + "name": "boost_peer", + "type": "flags.0?InputPeer" } ], - "type": "DataJSON" + "type": "Vector" }, { - "id": "-434028723", - "method": "bots.answerWebhookJSONQuery", + "id": "-1907247935", + "method": "payments.checkGiftCode", "params": [ { - "name": "query_id", - "type": "long" - }, - { - "name": "data", - "type": "DataJSON" + "name": "slug", + "type": "string" } ], - "type": "Bool" + "type": "payments.CheckedGiftCode" }, { - "id": "85399130", - "method": "bots.setBotCommands", + "id": "-152934316", + "method": "payments.applyGiftCode", "params": [ { - "name": "scope", - "type": "BotCommandScope" - }, - { - "name": "lang_code", + "name": "slug", "type": "string" - }, - { - "name": "commands", - "type": "Vector" } ], - "type": "Bool" + "type": "Updates" }, { - "id": "1032708345", - "method": "bots.resetBotCommands", + "id": "-198994907", + "method": "payments.getGiveawayInfo", "params": [ { - "name": "scope", - "type": "BotCommandScope" + "name": "peer", + "type": "InputPeer" }, { - "name": "lang_code", - "type": "string" + "name": "msg_id", + "type": "int" } ], - "type": "Bool" + "type": "payments.GiveawayInfo" }, { - "id": "-481554986", - "method": "bots.getBotCommands", + "id": "1609928480", + "method": "payments.launchPrepaidGiveaway", "params": [ { - "name": "scope", - "type": "BotCommandScope" + "name": "peer", + "type": "InputPeer" }, { - "name": "lang_code", - "type": "string" - } - ], - "type": "Vector" - }, - { - "id": "1157944655", - "method": "bots.setBotMenuButton", - "params": [ - { - "name": "user_id", - "type": "InputUser" + "name": "giveaway_id", + "type": "long" }, { - "name": "button", - "type": "BotMenuButton" + "name": "purpose", + "type": "InputStorePaymentPurpose" } ], - "type": "Bool" + "type": "Updates" }, { - "id": "-1671369944", - "method": "bots.getBotMenuButton", - "params": [ - { - "name": "user_id", - "type": "InputUser" - } - ], - "type": "BotMenuButton" + "id": "-1072773165", + "method": "payments.getStarsTopupOptions", + "params": [], + "type": "Vector" }, { - "id": "2021942497", - "method": "bots.setBotBroadcastDefaultAdminRights", + "id": "1319744447", + "method": "payments.getStarsStatus", "params": [ { - "name": "admin_rights", - "type": "ChatAdminRights" - } - ], - "type": "Bool" - }, - { - "id": "-1839281686", - "method": "bots.setBotGroupDefaultAdminRights", - "params": [ + "name": "flags", + "type": "#" + }, { - "name": "admin_rights", - "type": "ChatAdminRights" + "name": "ton", + "type": "flags.0?true" + }, + { + "name": "peer", + "type": "InputPeer" } ], - "type": "Bool" + "type": "payments.StarsStatus" }, { - "id": "282013987", - "method": "bots.setBotInfo", + "id": "1775912279", + "method": "payments.getStarsTransactions", "params": [ { "name": "flags", "type": "#" }, { - "name": "bot", - "type": "flags.2?InputUser" + "name": "inbound", + "type": "flags.0?true" }, { - "name": "lang_code", - "type": "string" + "name": "outbound", + "type": "flags.1?true" }, { - "name": "name", - "type": "flags.3?string" + "name": "ascending", + "type": "flags.2?true" }, { - "name": "about", - "type": "flags.0?string" + "name": "ton", + "type": "flags.4?true" }, { - "name": "description", - "type": "flags.1?string" - } - ], - "type": "Bool" - }, - { - "id": "-589753091", - "method": "bots.getBotInfo", - "params": [ - { - "name": "flags", - "type": "#" + "name": "subscription_id", + "type": "flags.3?string" }, { - "name": "bot", - "type": "flags.0?InputUser" + "name": "peer", + "type": "InputPeer" }, { - "name": "lang_code", + "name": "offset", "type": "string" + }, + { + "name": "limit", + "type": "int" } ], - "type": "bots.BotInfo" + "type": "payments.StarsStatus" }, { - "id": "-1760972350", - "method": "bots.reorderUsernames", + "id": "2040056084", + "method": "payments.sendStarsForm", "params": [ { - "name": "bot", - "type": "InputUser" + "name": "form_id", + "type": "long" }, { - "name": "order", - "type": "Vector" + "name": "invoice", + "type": "InputInvoice" } ], - "type": "Bool" + "type": "payments.PaymentResult" }, { - "id": "87861619", - "method": "bots.toggleUsername", + "id": "632196938", + "method": "payments.refundStarsCharge", "params": [ { - "name": "bot", + "name": "user_id", "type": "InputUser" }, { - "name": "username", + "name": "charge_id", "type": "string" - }, - { - "name": "active", - "type": "Bool" } ], - "type": "Bool" + "type": "Updates" }, { - "id": "324662502", - "method": "bots.canSendMessage", + "id": "-652215594", + "method": "payments.getStarsRevenueStats", "params": [ { - "name": "bot", - "type": "InputUser" - } - ], - "type": "Bool" - }, - { - "id": "-248323089", - "method": "bots.allowSendMessage", - "params": [ + "name": "flags", + "type": "#" + }, { - "name": "bot", - "type": "InputUser" + "name": "dark", + "type": "flags.0?true" + }, + { + "name": "ton", + "type": "flags.1?true" + }, + { + "name": "peer", + "type": "InputPeer" } ], - "type": "Updates" + "type": "payments.StarsRevenueStats" }, { - "id": "142591463", - "method": "bots.invokeWebViewCustomMethod", + "id": "607378578", + "method": "payments.getStarsRevenueWithdrawalUrl", "params": [ { - "name": "bot", - "type": "InputUser" + "name": "flags", + "type": "#" }, { - "name": "custom_method", - "type": "string" + "name": "ton", + "type": "flags.0?true" }, { - "name": "params", - "type": "DataJSON" + "name": "peer", + "type": "InputPeer" + }, + { + "name": "amount", + "type": "flags.1?long" + }, + { + "name": "password", + "type": "InputCheckPasswordSRP" } ], - "type": "DataJSON" + "type": "payments.StarsRevenueWithdrawalUrl" }, { - "id": "-1034878574", - "method": "bots.getPopularAppBots", + "id": "-774377531", + "method": "payments.getStarsRevenueAdsAccountUrl", "params": [ { - "name": "offset", - "type": "string" - }, - { - "name": "limit", - "type": "int" + "name": "peer", + "type": "InputPeer" } ], - "type": "bots.PopularAppBots" + "type": "payments.StarsRevenueAdsAccountUrl" }, { - "id": "397326170", - "method": "bots.addPreviewMedia", + "id": "768218808", + "method": "payments.getStarsTransactionsByID", "params": [ { - "name": "bot", - "type": "InputUser" + "name": "flags", + "type": "#" }, { - "name": "lang_code", - "type": "string" + "name": "ton", + "type": "flags.0?true" }, { - "name": "media", - "type": "InputMedia" + "name": "peer", + "type": "InputPeer" + }, + { + "name": "id", + "type": "Vector" } ], - "type": "BotPreviewMedia" + "type": "payments.StarsStatus" }, { - "id": "-2061148049", - "method": "bots.editPreviewMedia", - "params": [ - { - "name": "bot", - "type": "InputUser" - }, - { - "name": "lang_code", - "type": "string" - }, + "id": "-741774392", + "method": "payments.getStarsGiftOptions", + "params": [ { - "name": "media", - "type": "InputMedia" + "name": "flags", + "type": "#" }, { - "name": "new_media", - "type": "InputMedia" + "name": "user_id", + "type": "flags.0?InputUser" } ], - "type": "BotPreviewMedia" + "type": "Vector" }, { - "id": "755054003", - "method": "bots.deletePreviewMedia", + "id": "52761285", + "method": "payments.getStarsSubscriptions", "params": [ { - "name": "bot", - "type": "InputUser" + "name": "flags", + "type": "#" }, { - "name": "lang_code", - "type": "string" + "name": "missing_balance", + "type": "flags.0?true" }, { - "name": "media", - "type": "Vector" + "name": "peer", + "type": "InputPeer" + }, + { + "name": "offset", + "type": "string" } ], - "type": "Bool" + "type": "payments.StarsStatus" }, { - "id": "-1238895702", - "method": "bots.reorderPreviewMedias", + "id": "-948500360", + "method": "payments.changeStarsSubscription", "params": [ { - "name": "bot", - "type": "InputUser" + "name": "flags", + "type": "#" }, { - "name": "lang_code", + "name": "peer", + "type": "InputPeer" + }, + { + "name": "subscription_id", "type": "string" }, { - "name": "order", - "type": "Vector" + "name": "canceled", + "type": "flags.0?Bool" } ], "type": "Bool" }, { - "id": "1111143341", - "method": "bots.getPreviewInfo", + "id": "-866391117", + "method": "payments.fulfillStarsSubscription", "params": [ { - "name": "bot", - "type": "InputUser" + "name": "peer", + "type": "InputPeer" }, { - "name": "lang_code", + "name": "subscription_id", "type": "string" } ], - "type": "bots.PreviewInfo" + "type": "Bool" }, { - "id": "-1566222003", - "method": "bots.getPreviewMedias", + "id": "-1122042562", + "method": "payments.getStarsGiveawayOptions", + "params": [], + "type": "Vector" + }, + { + "id": "-1000983152", + "method": "payments.getStarGifts", "params": [ { - "name": "bot", - "type": "InputUser" + "name": "hash", + "type": "int" } ], - "type": "Vector" + "type": "payments.StarGifts" }, { - "id": "-308334395", - "method": "bots.updateUserEmojiStatus", + "id": "707422588", + "method": "payments.saveStarGift", "params": [ { - "name": "user_id", - "type": "InputUser" + "name": "flags", + "type": "#" }, { - "name": "emoji_status", - "type": "EmojiStatus" + "name": "unsave", + "type": "flags.0?true" + }, + { + "name": "stargift", + "type": "InputSavedStarGift" } ], "type": "Bool" }, { - "id": "115237778", - "method": "bots.toggleUserEmojiStatusPermission", + "id": "1958676331", + "method": "payments.convertStarGift", "params": [ { - "name": "bot", - "type": "InputUser" - }, - { - "name": "enabled", - "type": "Bool" + "name": "stargift", + "type": "InputSavedStarGift" } ], "type": "Bool" }, { - "id": "1342666121", - "method": "bots.checkDownloadFileParams", + "id": "1845102114", + "method": "payments.botCancelStarsSubscription", "params": [ { - "name": "bot", - "type": "InputUser" + "name": "flags", + "type": "#" }, { - "name": "file_name", - "type": "string" + "name": "restore", + "type": "flags.0?true" }, { - "name": "url", + "name": "user_id", + "type": "InputUser" + }, + { + "name": "charge_id", "type": "string" } ], "type": "Bool" }, { - "id": "-1334764157", - "method": "bots.getAdminedBots", - "params": [], - "type": "Vector" - }, - { - "id": "2005621427", - "method": "bots.updateStarRefProgram", + "id": "1483318611", + "method": "payments.getConnectedStarRefBots", "params": [ { "name": "flags", "type": "#" }, { - "name": "bot", - "type": "InputUser" + "name": "peer", + "type": "InputPeer" }, { - "name": "commission_permille", + "name": "offset_date", + "type": "flags.2?int" + }, + { + "name": "offset_link", + "type": "flags.2?string" + }, + { + "name": "limit", "type": "int" + } + ], + "type": "payments.ConnectedStarRefBots" + }, + { + "id": "-1210476304", + "method": "payments.getConnectedStarRefBot", + "params": [ + { + "name": "peer", + "type": "InputPeer" }, { - "name": "duration_months", - "type": "flags.0?int" + "name": "bot", + "type": "InputUser" } ], - "type": "StarRefProgram" + "type": "payments.ConnectedStarRefBots" }, { - "id": "-1953898563", - "method": "bots.setCustomVerification", + "id": "225134839", + "method": "payments.getSuggestedStarRefBots", "params": [ { "name": "flags", "type": "#" }, { - "name": "enabled", - "type": "flags.1?true" + "name": "order_by_revenue", + "type": "flags.0?true" }, { - "name": "bot", - "type": "flags.0?InputUser" + "name": "order_by_date", + "type": "flags.1?true" }, { "name": "peer", "type": "InputPeer" }, { - "name": "custom_description", - "type": "flags.2?string" + "name": "offset", + "type": "string" + }, + { + "name": "limit", + "type": "int" } ], - "type": "Bool" + "type": "payments.SuggestedStarRefBots" }, { - "id": "-1581840363", - "method": "bots.getBotRecommendations", + "id": "2127901834", + "method": "payments.connectStarRefBot", "params": [ + { + "name": "peer", + "type": "InputPeer" + }, { "name": "bot", "type": "InputUser" } ], - "type": "users.Users" + "type": "payments.ConnectedStarRefBots" }, { - "id": "-2014174821", - "method": "bots.checkUsername", + "id": "-453204829", + "method": "payments.editConnectedStarRefBot", "params": [ { - "name": "username", + "name": "flags", + "type": "#" + }, + { + "name": "revoked", + "type": "flags.0?true" + }, + { + "name": "peer", + "type": "InputPeer" + }, + { + "name": "link", "type": "string" } ], - "type": "Bool" + "type": "payments.ConnectedStarRefBots" }, { - "id": "-441352405", - "method": "bots.createBot", + "id": "-1667580751", + "method": "payments.getStarGiftUpgradePreview", + "params": [ + { + "name": "gift_id", + "type": "long" + } + ], + "type": "payments.StarGiftUpgradePreview" + }, + { + "id": "-1361648395", + "method": "payments.upgradeStarGift", "params": [ { "name": "flags", "type": "#" }, { - "name": "via_deeplink", + "name": "keep_original_details", "type": "flags.0?true" }, { - "name": "name", - "type": "string" - }, - { - "name": "username", - "type": "string" - }, - { - "name": "manager_id", - "type": "InputUser" + "name": "stargift", + "type": "InputSavedStarGift" } ], - "type": "User" + "type": "Updates" }, { - "id": "-1123182101", - "method": "bots.exportBotToken", + "id": "2132285290", + "method": "payments.transferStarGift", "params": [ { - "name": "bot", - "type": "InputUser" + "name": "stargift", + "type": "InputSavedStarGift" }, { - "name": "revoke", - "type": "Bool" + "name": "to_id", + "type": "InputPeer" } ], - "type": "bots.ExportedBotToken" + "type": "Updates" }, { - "id": "832742238", - "method": "bots.requestWebViewButton", + "id": "-1583919758", + "method": "payments.getUniqueStarGift", "params": [ { - "name": "user_id", - "type": "InputUser" - }, - { - "name": "button", - "type": "KeyboardButton" + "name": "slug", + "type": "string" } ], - "type": "bots.RequestedButton" + "type": "payments.UniqueStarGift" }, { - "id": "-1088047117", - "method": "bots.getRequestedWebViewButton", + "id": "-1558583959", + "method": "payments.getSavedStarGifts", "params": [ { - "name": "bot", - "type": "InputUser" + "name": "flags", + "type": "#" }, { - "name": "webapp_req_id", + "name": "exclude_unsaved", + "type": "flags.0?true" + }, + { + "name": "exclude_saved", + "type": "flags.1?true" + }, + { + "name": "exclude_unlimited", + "type": "flags.2?true" + }, + { + "name": "exclude_unique", + "type": "flags.4?true" + }, + { + "name": "sort_by_value", + "type": "flags.5?true" + }, + { + "name": "exclude_upgradable", + "type": "flags.7?true" + }, + { + "name": "exclude_unupgradable", + "type": "flags.8?true" + }, + { + "name": "peer_color_available", + "type": "flags.9?true" + }, + { + "name": "exclude_hosted", + "type": "flags.10?true" + }, + { + "name": "peer", + "type": "InputPeer" + }, + { + "name": "collection_id", + "type": "flags.6?int" + }, + { + "name": "offset", "type": "string" + }, + { + "name": "limit", + "type": "int" } ], - "type": "KeyboardButton" + "type": "payments.SavedStarGifts" }, { - "id": "557339555", - "method": "bots.getAccessSettings", + "id": "-1269456634", + "method": "payments.getSavedStarGift", "params": [ { - "name": "bot", - "type": "InputUser" + "name": "stargift", + "type": "Vector" } ], - "type": "bots.AccessSettings" + "type": "payments.SavedStarGifts" }, { - "id": "830553304", - "method": "bots.editAccessSettings", + "id": "-926252677", + "method": "payments.getStarGiftWithdrawalUrl", "params": [ { "name": "flags", "type": "#" }, { - "name": "restricted", - "type": "flags.0?true" - }, - { - "name": "bot", - "type": "InputUser" + "name": "stargift", + "type": "InputSavedStarGift" }, { - "name": "add_users", - "type": "flags.1?Vector" + "name": "tmp_password", + "type": "bytes" } ], - "type": "Bool" + "type": "payments.StarGiftWithdrawalUrl" }, { - "id": "924093883", - "method": "payments.getPaymentForm", + "id": "1626009505", + "method": "payments.toggleChatStarGiftNotifications", "params": [ { "name": "flags", "type": "#" }, { - "name": "invoice", - "type": "InputInvoice" + "name": "enabled", + "type": "flags.0?true" }, { - "name": "theme_params", - "type": "flags.0?DataJSON" + "name": "peer", + "type": "InputPeer" } ], - "type": "payments.PaymentForm" + "type": "Bool" }, { - "id": "611897804", - "method": "payments.getPaymentReceipt", + "id": "353626032", + "method": "payments.toggleStarGiftsPinnedToTop", "params": [ { "name": "peer", "type": "InputPeer" }, { - "name": "msg_id", - "type": "int" + "name": "stargift", + "type": "Vector" } ], - "type": "payments.PaymentReceipt" + "type": "Bool" }, { - "id": "-1228345045", - "method": "payments.validateRequestedInfo", + "id": "1339842215", + "method": "payments.canPurchaseStore", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "save", - "type": "flags.0?true" - }, - { - "name": "invoice", - "type": "InputInvoice" - }, - { - "name": "info", - "type": "PaymentRequestedInfo" + "name": "purpose", + "type": "InputStorePaymentPurpose" } ], - "type": "payments.ValidatedRequestedInfo" + "type": "Bool" }, { - "id": "755192367", - "method": "payments.sendPaymentForm", + "id": "2053087798", + "method": "payments.getResaleStarGifts", "params": [ { "name": "flags", "type": "#" }, { - "name": "form_id", - "type": "long" + "name": "sort_by_price", + "type": "flags.1?true" }, { - "name": "invoice", - "type": "InputInvoice" + "name": "sort_by_num", + "type": "flags.2?true" }, { - "name": "requested_info_id", - "type": "flags.0?string" + "name": "for_craft", + "type": "flags.4?true" }, { - "name": "shipping_option_id", - "type": "flags.1?string" + "name": "stars_only", + "type": "flags.5?true" }, { - "name": "credentials", - "type": "InputPaymentCredentials" + "name": "attributes_hash", + "type": "flags.0?long" }, { - "name": "tip_amount", - "type": "flags.2?long" + "name": "gift_id", + "type": "long" + }, + { + "name": "attributes", + "type": "flags.3?Vector" + }, + { + "name": "offset", + "type": "string" + }, + { + "name": "limit", + "type": "int" } ], - "type": "payments.PaymentResult" - }, - { - "id": "578650699", - "method": "payments.getSavedInfo", - "params": [], - "type": "payments.SavedInfo" + "type": "payments.ResaleStarGifts" }, { - "id": "-667062079", - "method": "payments.clearSavedInfo", + "id": "-306287413", + "method": "payments.updateStarGiftPrice", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "credentials", - "type": "flags.0?true" + "name": "stargift", + "type": "InputSavedStarGift" }, { - "name": "info", - "type": "flags.1?true" + "name": "resell_amount", + "type": "StarsAmount" } ], - "type": "Bool" + "type": "Updates" }, { - "id": "779736953", - "method": "payments.getBankCardData", + "id": "524947079", + "method": "payments.createStarGiftCollection", "params": [ { - "name": "number", + "name": "peer", + "type": "InputPeer" + }, + { + "name": "title", "type": "string" + }, + { + "name": "stargift", + "type": "Vector" } ], - "type": "payments.BankCardData" + "type": "StarGiftCollection" }, { - "id": "261206117", - "method": "payments.exportInvoice", + "id": "1339932391", + "method": "payments.updateStarGiftCollection", "params": [ { - "name": "invoice_media", - "type": "InputMedia" + "name": "flags", + "type": "#" + }, + { + "name": "peer", + "type": "InputPeer" + }, + { + "name": "collection_id", + "type": "int" + }, + { + "name": "title", + "type": "flags.0?string" + }, + { + "name": "delete_stargift", + "type": "flags.1?Vector" + }, + { + "name": "add_stargift", + "type": "flags.2?Vector" + }, + { + "name": "order", + "type": "flags.3?Vector" } ], - "type": "payments.ExportedInvoice" + "type": "StarGiftCollection" }, { - "id": "-2131921795", - "method": "payments.assignAppStoreTransaction", + "id": "-1020594996", + "method": "payments.reorderStarGiftCollections", "params": [ { - "name": "receipt", - "type": "bytes" + "name": "peer", + "type": "InputPeer" }, { - "name": "purpose", - "type": "InputStorePaymentPurpose" + "name": "order", + "type": "Vector" } ], - "type": "Updates" + "type": "Bool" }, { - "id": "-537046829", - "method": "payments.assignPlayMarketTransaction", + "id": "-1386854168", + "method": "payments.deleteStarGiftCollection", "params": [ { - "name": "receipt", - "type": "DataJSON" + "name": "peer", + "type": "InputPeer" }, { - "name": "purpose", - "type": "InputStorePaymentPurpose" + "name": "collection_id", + "type": "int" } ], - "type": "Updates" + "type": "Bool" }, { - "id": "660060756", - "method": "payments.getPremiumGiftCodeOptions", + "id": "-1743023651", + "method": "payments.getStarGiftCollections", "params": [ { - "name": "flags", - "type": "#" + "name": "peer", + "type": "InputPeer" }, { - "name": "boost_peer", - "type": "flags.0?InputPeer" + "name": "hash", + "type": "long" } ], - "type": "Vector" + "type": "payments.StarGiftCollections" }, { - "id": "-1907247935", - "method": "payments.checkGiftCode", + "id": "1130737515", + "method": "payments.getUniqueStarGiftValueInfo", "params": [ { "name": "slug", "type": "string" } ], - "type": "payments.CheckedGiftCode" + "type": "payments.UniqueStarGiftValueInfo" }, { - "id": "-152934316", - "method": "payments.applyGiftCode", + "id": "-1060835895", + "method": "payments.checkCanSendGift", "params": [ { - "name": "slug", - "type": "string" + "name": "gift_id", + "type": "long" } ], - "type": "Updates" + "type": "payments.CheckCanSendGiftResult" }, { - "id": "-198994907", - "method": "payments.getGiveawayInfo", + "id": "1553986774", + "method": "payments.getStarGiftAuctionState", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "auction", + "type": "InputStarGiftAuction" }, { - "name": "msg_id", + "name": "version", "type": "int" } ], - "type": "payments.GiveawayInfo" + "type": "payments.StarGiftAuctionState" }, { - "id": "1609928480", - "method": "payments.launchPrepaidGiveaway", + "id": "1805831148", + "method": "payments.getStarGiftAuctionAcquiredGifts", "params": [ { - "name": "peer", - "type": "InputPeer" - }, - { - "name": "giveaway_id", + "name": "gift_id", "type": "long" - }, - { - "name": "purpose", - "type": "InputStorePaymentPurpose" } ], - "type": "Updates" + "type": "payments.StarGiftAuctionAcquiredGifts" }, { - "id": "-1072773165", - "method": "payments.getStarsTopupOptions", - "params": [], - "type": "Vector" + "id": "-1513074355", + "method": "payments.getStarGiftActiveAuctions", + "params": [ + { + "name": "hash", + "type": "long" + } + ], + "type": "payments.StarGiftActiveAuctions" }, { - "id": "1319744447", - "method": "payments.getStarsStatus", + "id": "-372344804", + "method": "payments.resolveStarGiftOffer", "params": [ { "name": "flags", "type": "#" }, { - "name": "ton", + "name": "decline", "type": "flags.0?true" }, { - "name": "peer", - "type": "InputPeer" + "name": "offer_msg_id", + "type": "int" } ], - "type": "payments.StarsStatus" + "type": "Updates" }, { - "id": "1775912279", - "method": "payments.getStarsTransactions", + "id": "-1883739327", + "method": "payments.sendStarGiftOffer", "params": [ { "name": "flags", "type": "#" }, { - "name": "inbound", - "type": "flags.0?true" + "name": "peer", + "type": "InputPeer" }, { - "name": "outbound", - "type": "flags.1?true" + "name": "slug", + "type": "string" }, { - "name": "ascending", - "type": "flags.2?true" + "name": "price", + "type": "StarsAmount" }, { - "name": "ton", - "type": "flags.4?true" + "name": "duration", + "type": "int" }, { - "name": "subscription_id", - "type": "flags.3?string" + "name": "random_id", + "type": "long" }, { - "name": "peer", - "type": "InputPeer" + "name": "allow_paid_stars", + "type": "flags.0?long" + } + ], + "type": "Updates" + }, + { + "id": "1828948824", + "method": "payments.getStarGiftUpgradeAttributes", + "params": [ + { + "name": "gift_id", + "type": "long" + } + ], + "type": "payments.StarGiftUpgradeAttributes" + }, + { + "id": "-49947392", + "method": "payments.getCraftStarGifts", + "params": [ + { + "name": "gift_id", + "type": "long" }, { "name": "offset", @@ -42760,271 +46990,244 @@ "type": "int" } ], - "type": "payments.StarsStatus" + "type": "payments.SavedStarGifts" }, { - "id": "2040056084", - "method": "payments.sendStarsForm", + "id": "-1325832113", + "method": "payments.craftStarGift", "params": [ { - "name": "form_id", - "type": "long" + "name": "stargift", + "type": "Vector" + } + ], + "type": "Updates" + }, + { + "id": "-749108248", + "method": "payments.getCurrencyRates", + "params": [], + "type": "payments.CurrencyRates" + }, + { + "id": "1061028060", + "method": "payments.getOnrampProviders", + "params": [ + { + "name": "flags", + "type": "#" }, { - "name": "invoice", - "type": "InputInvoice" + "name": "crypto_currency", + "type": "flags.0?string" } ], - "type": "payments.PaymentResult" + "type": "Vector" }, { - "id": "632196938", - "method": "payments.refundStarsCharge", + "id": "478932467", + "method": "payments.getOnrampBaseCurrencies", "params": [ { - "name": "user_id", - "type": "InputUser" + "name": "provider", + "type": "string" }, { - "name": "charge_id", + "name": "crypto_currency", "type": "string" } ], - "type": "Updates" + "type": "Vector" }, { - "id": "-652215594", - "method": "payments.getStarsRevenueStats", + "id": "784505169", + "method": "payments.getOnrampAvailability", "params": [ { "name": "flags", "type": "#" }, { - "name": "dark", - "type": "flags.0?true" + "name": "provider", + "type": "string" }, { - "name": "ton", - "type": "flags.1?true" + "name": "crypto_currency", + "type": "string" }, { - "name": "peer", - "type": "InputPeer" + "name": "base_currency", + "type": "flags.0?string" } ], - "type": "payments.StarsRevenueStats" + "type": "OnrampAvailability" }, { - "id": "607378578", - "method": "payments.getStarsRevenueWithdrawalUrl", + "id": "-2132258307", + "method": "payments.getOnrampLimits", "params": [ { "name": "flags", "type": "#" }, { - "name": "ton", - "type": "flags.0?true" + "name": "provider", + "type": "string" }, { - "name": "peer", - "type": "InputPeer" + "name": "crypto_currency", + "type": "string" }, { - "name": "amount", - "type": "flags.1?long" + "name": "base_currency", + "type": "string" }, { - "name": "password", - "type": "InputCheckPasswordSRP" - } - ], - "type": "payments.StarsRevenueWithdrawalUrl" - }, - { - "id": "-774377531", - "method": "payments.getStarsRevenueAdsAccountUrl", - "params": [ - { - "name": "peer", - "type": "InputPeer" + "name": "payment_method", + "type": "flags.0?string" } ], - "type": "payments.StarsRevenueAdsAccountUrl" + "type": "OnrampLimits" }, { - "id": "768218808", - "method": "payments.getStarsTransactionsByID", + "id": "-530168326", + "method": "payments.getOnrampQuote", "params": [ { "name": "flags", "type": "#" }, { - "name": "ton", - "type": "flags.0?true" + "name": "provider", + "type": "string" }, { - "name": "peer", - "type": "InputPeer" + "name": "crypto_currency", + "type": "string" }, { - "name": "id", - "type": "Vector" - } - ], - "type": "payments.StarsStatus" - }, - { - "id": "-741774392", - "method": "payments.getStarsGiftOptions", - "params": [ + "name": "base_currency", + "type": "string" + }, { - "name": "flags", - "type": "#" + "name": "base_amount", + "type": "flags.0?string" }, { - "name": "user_id", - "type": "flags.0?InputUser" + "name": "crypto_amount", + "type": "flags.1?string" + }, + { + "name": "payment_method", + "type": "flags.2?string" } ], - "type": "Vector" + "type": "OnrampQuote" }, { - "id": "52761285", - "method": "payments.getStarsSubscriptions", + "id": "-1575387914", + "method": "payments.createOnrampSession", "params": [ { "name": "flags", "type": "#" }, { - "name": "missing_balance", - "type": "flags.0?true" + "name": "provider", + "type": "string" }, { - "name": "peer", - "type": "InputPeer" + "name": "crypto_currency", + "type": "string" }, { - "name": "offset", + "name": "address", "type": "string" - } - ], - "type": "payments.StarsStatus" - }, - { - "id": "-948500360", - "method": "payments.changeStarsSubscription", - "params": [ + }, { - "name": "flags", - "type": "#" + "name": "payment_method", + "type": "flags.0?string" }, { - "name": "peer", - "type": "InputPeer" + "name": "base_currency", + "type": "flags.1?string" }, { - "name": "subscription_id", - "type": "string" + "name": "base_amount", + "type": "flags.2?string" }, { - "name": "canceled", - "type": "flags.0?Bool" - } - ], - "type": "Bool" - }, - { - "id": "-866391117", - "method": "payments.fulfillStarsSubscription", - "params": [ + "name": "memo", + "type": "flags.3?string" + }, { - "name": "peer", - "type": "InputPeer" + "name": "theme", + "type": "flags.4?string" }, { - "name": "subscription_id", - "type": "string" - } - ], - "type": "Bool" - }, - { - "id": "-1122042562", - "method": "payments.getStarsGiveawayOptions", - "params": [], - "type": "Vector" - }, - { - "id": "-1000983152", - "method": "payments.getStarGifts", - "params": [ + "name": "success_return_url", + "type": "flags.5?string" + }, { - "name": "hash", - "type": "int" + "name": "fail_return_url", + "type": "flags.6?string" + }, + { + "name": "crypto_amount", + "type": "flags.7?string" } ], - "type": "payments.StarGifts" + "type": "OnrampSession" }, { - "id": "707422588", - "method": "payments.saveStarGift", + "id": "-333434706", + "method": "payments.withdrawStarGift", "params": [ { "name": "flags", "type": "#" }, { - "name": "unsave", + "name": "keep_on_profile", "type": "flags.0?true" }, { "name": "stargift", "type": "InputSavedStarGift" - } - ], - "type": "Bool" - }, - { - "id": "1958676331", - "method": "payments.convertStarGift", - "params": [ + }, { - "name": "stargift", - "type": "InputSavedStarGift" + "name": "tmp_password", + "type": "bytes" } ], "type": "Bool" }, { - "id": "1845102114", - "method": "payments.botCancelStarsSubscription", + "id": "-1063064929", + "method": "payments.depositStarGift", "params": [ { "name": "flags", "type": "#" }, { - "name": "restore", + "name": "hide_sender", "type": "flags.0?true" }, { - "name": "user_id", - "type": "InputUser" + "name": "peer", + "type": "InputPeer" }, { - "name": "charge_id", + "name": "slug", "type": "string" } ], - "type": "Bool" + "type": "payments.StarGiftDepositPayload" }, { - "id": "1483318611", - "method": "payments.getConnectedStarRefBots", + "id": "1252389118", + "method": "payments.displayStarGift", "params": [ { "name": "flags", @@ -43032,392 +47235,423 @@ }, { "name": "peer", - "type": "InputPeer" - }, - { - "name": "offset_date", - "type": "flags.2?int" - }, - { - "name": "offset_link", - "type": "flags.2?string" + "type": "flags.0?InputPeer" }, { - "name": "limit", - "type": "int" + "name": "slug", + "type": "string" } ], - "type": "payments.ConnectedStarRefBots" + "type": "Bool" }, { - "id": "-1210476304", - "method": "payments.getConnectedStarRefBot", + "id": "1020983466", + "method": "payments.deleteStarGift", "params": [ { - "name": "peer", - "type": "InputPeer" - }, - { - "name": "bot", - "type": "InputUser" + "name": "stargift", + "type": "InputSavedStarGift" } ], - "type": "payments.ConnectedStarRefBots" + "type": "Bool" }, { - "id": "225134839", - "method": "payments.getSuggestedStarRefBots", + "id": "-1876841625", + "method": "stickers.createStickerSet", "params": [ { "name": "flags", "type": "#" }, { - "name": "order_by_revenue", + "name": "masks", "type": "flags.0?true" }, { - "name": "order_by_date", - "type": "flags.1?true" + "name": "emojis", + "type": "flags.5?true" }, { - "name": "peer", - "type": "InputPeer" + "name": "text_color", + "type": "flags.6?true" }, { - "name": "offset", + "name": "user_id", + "type": "InputUser" + }, + { + "name": "title", "type": "string" }, { - "name": "limit", - "type": "int" + "name": "short_name", + "type": "string" + }, + { + "name": "thumb", + "type": "flags.2?InputDocument" + }, + { + "name": "stickers", + "type": "Vector" + }, + { + "name": "software", + "type": "flags.3?string" } ], - "type": "payments.SuggestedStarRefBots" + "type": "messages.StickerSet" }, { - "id": "2127901834", - "method": "payments.connectStarRefBot", + "id": "-143257775", + "method": "stickers.removeStickerFromSet", "params": [ { - "name": "peer", - "type": "InputPeer" - }, - { - "name": "bot", - "type": "InputUser" + "name": "sticker", + "type": "InputDocument" } ], - "type": "payments.ConnectedStarRefBots" + "type": "messages.StickerSet" }, { - "id": "-453204829", - "method": "payments.editConnectedStarRefBot", + "id": "-4795190", + "method": "stickers.changeStickerPosition", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "revoked", - "type": "flags.0?true" - }, - { - "name": "peer", - "type": "InputPeer" + "name": "sticker", + "type": "InputDocument" }, { - "name": "link", - "type": "string" + "name": "position", + "type": "int" } ], - "type": "payments.ConnectedStarRefBots" + "type": "messages.StickerSet" }, { - "id": "-1667580751", - "method": "payments.getStarGiftUpgradePreview", + "id": "-2041315650", + "method": "stickers.addStickerToSet", "params": [ { - "name": "gift_id", - "type": "long" + "name": "stickerset", + "type": "InputStickerSet" + }, + { + "name": "sticker", + "type": "InputStickerSetItem" } ], - "type": "payments.StarGiftUpgradePreview" + "type": "messages.StickerSet" }, { - "id": "-1361648395", - "method": "payments.upgradeStarGift", + "id": "-1486204014", + "method": "stickers.setStickerSetThumb", "params": [ { "name": "flags", "type": "#" }, { - "name": "keep_original_details", - "type": "flags.0?true" + "name": "stickerset", + "type": "InputStickerSet" + }, + { + "name": "thumb", + "type": "flags.0?InputDocument" }, { - "name": "stargift", - "type": "InputSavedStarGift" + "name": "thumb_document_id", + "type": "flags.1?long" } ], - "type": "Updates" + "type": "messages.StickerSet" }, { - "id": "2132285290", - "method": "payments.transferStarGift", + "id": "676017721", + "method": "stickers.checkShortName", "params": [ { - "name": "stargift", - "type": "InputSavedStarGift" - }, - { - "name": "to_id", - "type": "InputPeer" + "name": "short_name", + "type": "string" } ], - "type": "Updates" + "type": "Bool" }, { - "id": "-1583919758", - "method": "payments.getUniqueStarGift", + "id": "1303364867", + "method": "stickers.suggestShortName", "params": [ { - "name": "slug", + "name": "title", "type": "string" } ], - "type": "payments.UniqueStarGift" + "type": "stickers.SuggestedShortName" }, { - "id": "-1558583959", - "method": "payments.getSavedStarGifts", + "id": "-179077444", + "method": "stickers.changeSticker", "params": [ { "name": "flags", "type": "#" }, { - "name": "exclude_unsaved", - "type": "flags.0?true" - }, - { - "name": "exclude_saved", - "type": "flags.1?true" - }, - { - "name": "exclude_unlimited", - "type": "flags.2?true" - }, - { - "name": "exclude_unique", - "type": "flags.4?true" - }, - { - "name": "sort_by_value", - "type": "flags.5?true" - }, - { - "name": "exclude_upgradable", - "type": "flags.7?true" - }, - { - "name": "exclude_unupgradable", - "type": "flags.8?true" + "name": "sticker", + "type": "InputDocument" }, { - "name": "peer_color_available", - "type": "flags.9?true" + "name": "emoji", + "type": "flags.0?string" }, { - "name": "exclude_hosted", - "type": "flags.10?true" + "name": "mask_coords", + "type": "flags.1?MaskCoords" }, { - "name": "peer", - "type": "InputPeer" - }, + "name": "keywords", + "type": "flags.2?string" + } + ], + "type": "messages.StickerSet" + }, + { + "id": "306912256", + "method": "stickers.renameStickerSet", + "params": [ { - "name": "collection_id", - "type": "flags.6?int" + "name": "stickerset", + "type": "InputStickerSet" }, { - "name": "offset", + "name": "title", "type": "string" - }, - { - "name": "limit", - "type": "int" } ], - "type": "payments.SavedStarGifts" + "type": "messages.StickerSet" }, { - "id": "-1269456634", - "method": "payments.getSavedStarGift", + "id": "-2022685804", + "method": "stickers.deleteStickerSet", "params": [ { - "name": "stargift", - "type": "Vector" + "name": "stickerset", + "type": "InputStickerSet" } ], - "type": "payments.SavedStarGifts" + "type": "Bool" }, { - "id": "-798059608", - "method": "payments.getStarGiftWithdrawalUrl", + "id": "1184253338", + "method": "stickers.replaceSticker", "params": [ { - "name": "stargift", - "type": "InputSavedStarGift" + "name": "sticker", + "type": "InputDocument" }, { - "name": "password", - "type": "InputCheckPasswordSRP" + "name": "new_sticker", + "type": "InputStickerSetItem" } ], - "type": "payments.StarGiftWithdrawalUrl" + "type": "messages.StickerSet" }, { - "id": "1626009505", - "method": "payments.toggleChatStarGiftNotifications", + "id": "1430593449", + "method": "phone.getCallConfig", + "params": [], + "type": "DataJSON" + }, + { + "id": "1124046573", + "method": "phone.requestCall", "params": [ { "name": "flags", "type": "#" }, { - "name": "enabled", + "name": "video", "type": "flags.0?true" }, + { + "name": "user_id", + "type": "InputUser" + }, + { + "name": "random_id", + "type": "int" + }, + { + "name": "g_a_hash", + "type": "bytes" + }, + { + "name": "protocol", + "type": "PhoneCallProtocol" + } + ], + "type": "phone.PhoneCall" + }, + { + "id": "1003664544", + "method": "phone.acceptCall", + "params": [ { "name": "peer", - "type": "InputPeer" + "type": "InputPhoneCall" + }, + { + "name": "g_b", + "type": "bytes" + }, + { + "name": "protocol", + "type": "PhoneCallProtocol" } ], - "type": "Bool" + "type": "phone.PhoneCall" }, { - "id": "353626032", - "method": "payments.toggleStarGiftsPinnedToTop", + "id": "788404002", + "method": "phone.confirmCall", "params": [ { "name": "peer", - "type": "InputPeer" + "type": "InputPhoneCall" }, { - "name": "stargift", - "type": "Vector" + "name": "g_a", + "type": "bytes" + }, + { + "name": "key_fingerprint", + "type": "long" + }, + { + "name": "protocol", + "type": "PhoneCallProtocol" } ], - "type": "Bool" + "type": "phone.PhoneCall" }, { - "id": "1339842215", - "method": "payments.canPurchaseStore", + "id": "399855457", + "method": "phone.receivedCall", "params": [ { - "name": "purpose", - "type": "InputStorePaymentPurpose" + "name": "peer", + "type": "InputPhoneCall" } ], "type": "Bool" }, { - "id": "2053087798", - "method": "payments.getResaleStarGifts", + "id": "-1295269440", + "method": "phone.discardCall", "params": [ { "name": "flags", "type": "#" }, { - "name": "sort_by_price", - "type": "flags.1?true" - }, - { - "name": "sort_by_num", - "type": "flags.2?true" + "name": "video", + "type": "flags.0?true" }, { - "name": "for_craft", - "type": "flags.4?true" + "name": "peer", + "type": "InputPhoneCall" }, { - "name": "stars_only", - "type": "flags.5?true" + "name": "duration", + "type": "int" }, { - "name": "attributes_hash", - "type": "flags.0?long" + "name": "reason", + "type": "PhoneCallDiscardReason" }, { - "name": "gift_id", + "name": "connection_id", "type": "long" + } + ], + "type": "Updates" + }, + { + "id": "1508562471", + "method": "phone.setCallRating", + "params": [ + { + "name": "flags", + "type": "#" }, { - "name": "attributes", - "type": "flags.3?Vector" + "name": "user_initiative", + "type": "flags.0?true" }, { - "name": "offset", - "type": "string" + "name": "peer", + "type": "InputPhoneCall" }, { - "name": "limit", + "name": "rating", "type": "int" + }, + { + "name": "comment", + "type": "string" } ], - "type": "payments.ResaleStarGifts" + "type": "Updates" }, { - "id": "-306287413", - "method": "payments.updateStarGiftPrice", + "id": "662363518", + "method": "phone.saveCallDebug", "params": [ { - "name": "stargift", - "type": "InputSavedStarGift" + "name": "peer", + "type": "InputPhoneCall" }, { - "name": "resell_amount", - "type": "StarsAmount" + "name": "debug", + "type": "DataJSON" } ], - "type": "Updates" + "type": "Bool" }, { - "id": "524947079", - "method": "payments.createStarGiftCollection", + "id": "-8744061", + "method": "phone.sendSignalingData", "params": [ { "name": "peer", - "type": "InputPeer" - }, - { - "name": "title", - "type": "string" + "type": "InputPhoneCall" }, { - "name": "stargift", - "type": "Vector" + "name": "data", + "type": "bytes" } ], - "type": "StarGiftCollection" + "type": "Bool" }, { - "id": "1339932391", - "method": "payments.updateStarGiftCollection", + "id": "1221445336", + "method": "phone.createGroupCall", "params": [ { "name": "flags", "type": "#" }, + { + "name": "rtmp_stream", + "type": "flags.2?true" + }, { "name": "peer", "type": "InputPeer" }, { - "name": "collection_id", + "name": "random_id", "type": "int" }, { @@ -43425,774 +47659,837 @@ "type": "flags.0?string" }, { - "name": "delete_stargift", - "type": "flags.1?Vector" - }, - { - "name": "add_stargift", - "type": "flags.2?Vector" - }, - { - "name": "order", - "type": "flags.3?Vector" + "name": "schedule_date", + "type": "flags.1?int" } ], - "type": "StarGiftCollection" + "type": "Updates" }, { - "id": "-1020594996", - "method": "payments.reorderStarGiftCollections", + "id": "-1883951017", + "method": "phone.joinGroupCall", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "flags", + "type": "#" }, { - "name": "order", - "type": "Vector" - } - ], - "type": "Bool" - }, - { - "id": "-1386854168", - "method": "payments.deleteStarGiftCollection", - "params": [ + "name": "muted", + "type": "flags.0?true" + }, { - "name": "peer", - "type": "InputPeer" + "name": "video_stopped", + "type": "flags.2?true" }, { - "name": "collection_id", - "type": "int" - } - ], - "type": "Bool" - }, - { - "id": "-1743023651", - "method": "payments.getStarGiftCollections", - "params": [ + "name": "call", + "type": "InputGroupCall" + }, { - "name": "peer", + "name": "join_as", "type": "InputPeer" }, { - "name": "hash", - "type": "long" - } - ], - "type": "payments.StarGiftCollections" - }, - { - "id": "1130737515", - "method": "payments.getUniqueStarGiftValueInfo", - "params": [ + "name": "invite_hash", + "type": "flags.1?string" + }, { - "name": "slug", - "type": "string" - } - ], - "type": "payments.UniqueStarGiftValueInfo" - }, - { - "id": "-1060835895", - "method": "payments.checkCanSendGift", - "params": [ + "name": "public_key", + "type": "flags.3?int256" + }, { - "name": "gift_id", - "type": "long" + "name": "block", + "type": "flags.3?bytes" + }, + { + "name": "params", + "type": "DataJSON" } ], - "type": "payments.CheckCanSendGiftResult" + "type": "Updates" }, { - "id": "1553986774", - "method": "payments.getStarGiftAuctionState", + "id": "1342404601", + "method": "phone.leaveGroupCall", "params": [ { - "name": "auction", - "type": "InputStarGiftAuction" + "name": "call", + "type": "InputGroupCall" }, { - "name": "version", + "name": "source", "type": "int" } ], - "type": "payments.StarGiftAuctionState" + "type": "Updates" }, { - "id": "1805831148", - "method": "payments.getStarGiftAuctionAcquiredGifts", + "id": "2067345760", + "method": "phone.inviteToGroupCall", "params": [ { - "name": "gift_id", - "type": "long" + "name": "call", + "type": "InputGroupCall" + }, + { + "name": "users", + "type": "Vector" } ], - "type": "payments.StarGiftAuctionAcquiredGifts" + "type": "Updates" }, { - "id": "-1513074355", - "method": "payments.getStarGiftActiveAuctions", + "id": "2054648117", + "method": "phone.discardGroupCall", "params": [ { - "name": "hash", - "type": "long" + "name": "call", + "type": "InputGroupCall" } ], - "type": "payments.StarGiftActiveAuctions" + "type": "Updates" }, { - "id": "-372344804", - "method": "payments.resolveStarGiftOffer", + "id": "-1757179150", + "method": "phone.toggleGroupCallSettings", "params": [ { "name": "flags", "type": "#" }, { - "name": "decline", - "type": "flags.0?true" + "name": "reset_invite_hash", + "type": "flags.1?true" }, { - "name": "offer_msg_id", - "type": "int" + "name": "call", + "type": "InputGroupCall" + }, + { + "name": "join_muted", + "type": "flags.0?Bool" + }, + { + "name": "messages_enabled", + "type": "flags.2?Bool" + }, + { + "name": "send_paid_messages_stars", + "type": "flags.3?long" } ], "type": "Updates" }, { - "id": "-1883739327", - "method": "payments.sendStarGiftOffer", + "id": "68699611", + "method": "phone.getGroupCall", "params": [ { - "name": "flags", - "type": "#" + "name": "call", + "type": "InputGroupCall" }, { - "name": "peer", - "type": "InputPeer" - }, + "name": "limit", + "type": "int" + } + ], + "type": "phone.GroupCall" + }, + { + "id": "-984033109", + "method": "phone.getGroupParticipants", + "params": [ { - "name": "slug", - "type": "string" + "name": "call", + "type": "InputGroupCall" }, { - "name": "price", - "type": "StarsAmount" + "name": "ids", + "type": "Vector" }, { - "name": "duration", - "type": "int" + "name": "sources", + "type": "Vector" }, { - "name": "random_id", - "type": "long" + "name": "offset", + "type": "string" }, { - "name": "allow_paid_stars", - "type": "flags.0?long" + "name": "limit", + "type": "int" } ], - "type": "Updates" + "type": "phone.GroupParticipants" }, { - "id": "1828948824", - "method": "payments.getStarGiftUpgradeAttributes", + "id": "-1248003721", + "method": "phone.checkGroupCall", "params": [ { - "name": "gift_id", - "type": "long" + "name": "call", + "type": "InputGroupCall" + }, + { + "name": "sources", + "type": "Vector" } ], - "type": "payments.StarGiftUpgradeAttributes" + "type": "Vector" }, { - "id": "-49947392", - "method": "payments.getCraftStarGifts", + "id": "-248985848", + "method": "phone.toggleGroupCallRecord", "params": [ { - "name": "gift_id", - "type": "long" + "name": "flags", + "type": "#" + }, + { + "name": "start", + "type": "flags.0?true" + }, + { + "name": "video", + "type": "flags.2?true" + }, + { + "name": "call", + "type": "InputGroupCall" }, { - "name": "offset", - "type": "string" + "name": "title", + "type": "flags.1?string" }, { - "name": "limit", - "type": "int" - } - ], - "type": "payments.SavedStarGifts" - }, - { - "id": "-1325832113", - "method": "payments.craftStarGift", - "params": [ - { - "name": "stargift", - "type": "Vector" + "name": "video_portrait", + "type": "flags.2?Bool" } ], "type": "Updates" }, { - "id": "-1876841625", - "method": "stickers.createStickerSet", + "id": "-1524155713", + "method": "phone.editGroupCallParticipant", "params": [ { "name": "flags", "type": "#" }, { - "name": "masks", - "type": "flags.0?true" + "name": "call", + "type": "InputGroupCall" }, { - "name": "emojis", - "type": "flags.5?true" + "name": "participant", + "type": "InputPeer" }, { - "name": "text_color", - "type": "flags.6?true" + "name": "muted", + "type": "flags.0?Bool" }, { - "name": "user_id", - "type": "InputUser" + "name": "volume", + "type": "flags.1?int" }, { - "name": "title", - "type": "string" + "name": "raise_hand", + "type": "flags.2?Bool" }, { - "name": "short_name", - "type": "string" + "name": "video_stopped", + "type": "flags.3?Bool" }, { - "name": "thumb", - "type": "flags.2?InputDocument" + "name": "video_paused", + "type": "flags.4?Bool" }, { - "name": "stickers", - "type": "Vector" + "name": "presentation_paused", + "type": "flags.5?Bool" + } + ], + "type": "Updates" + }, + { + "id": "480685066", + "method": "phone.editGroupCallTitle", + "params": [ + { + "name": "call", + "type": "InputGroupCall" }, { - "name": "software", - "type": "flags.3?string" + "name": "title", + "type": "string" } ], - "type": "messages.StickerSet" + "type": "Updates" }, { - "id": "-143257775", - "method": "stickers.removeStickerFromSet", + "id": "-277077702", + "method": "phone.getGroupCallJoinAs", "params": [ { - "name": "sticker", - "type": "InputDocument" + "name": "peer", + "type": "InputPeer" } ], - "type": "messages.StickerSet" + "type": "phone.JoinAsPeers" }, { - "id": "-4795190", - "method": "stickers.changeStickerPosition", + "id": "-425040769", + "method": "phone.exportGroupCallInvite", "params": [ { - "name": "sticker", - "type": "InputDocument" + "name": "flags", + "type": "#" }, { - "name": "position", - "type": "int" + "name": "can_self_unmute", + "type": "flags.0?true" + }, + { + "name": "call", + "type": "InputGroupCall" } ], - "type": "messages.StickerSet" + "type": "phone.ExportedGroupCallInvite" }, { - "id": "-2041315650", - "method": "stickers.addStickerToSet", + "id": "563885286", + "method": "phone.toggleGroupCallStartSubscription", "params": [ { - "name": "stickerset", - "type": "InputStickerSet" + "name": "call", + "type": "InputGroupCall" }, { - "name": "sticker", - "type": "InputStickerSetItem" + "name": "subscribed", + "type": "Bool" } ], - "type": "messages.StickerSet" + "type": "Updates" }, { - "id": "-1486204014", - "method": "stickers.setStickerSetThumb", + "id": "1451287362", + "method": "phone.startScheduledGroupCall", "params": [ { - "name": "flags", - "type": "#" - }, + "name": "call", + "type": "InputGroupCall" + } + ], + "type": "Updates" + }, + { + "id": "1465786252", + "method": "phone.saveDefaultGroupCallJoinAs", + "params": [ { - "name": "stickerset", - "type": "InputStickerSet" + "name": "peer", + "type": "InputPeer" }, { - "name": "thumb", - "type": "flags.0?InputDocument" + "name": "join_as", + "type": "InputPeer" + } + ], + "type": "Bool" + }, + { + "id": "-873829436", + "method": "phone.joinGroupCallPresentation", + "params": [ + { + "name": "call", + "type": "InputGroupCall" }, { - "name": "thumb_document_id", - "type": "flags.1?long" + "name": "params", + "type": "DataJSON" } ], - "type": "messages.StickerSet" + "type": "Updates" }, { - "id": "676017721", - "method": "stickers.checkShortName", + "id": "475058500", + "method": "phone.leaveGroupCallPresentation", "params": [ { - "name": "short_name", - "type": "string" + "name": "call", + "type": "InputGroupCall" } ], - "type": "Bool" + "type": "Updates" }, { - "id": "1303364867", - "method": "stickers.suggestShortName", + "id": "447879488", + "method": "phone.getGroupCallStreamChannels", "params": [ { - "name": "title", - "type": "string" + "name": "call", + "type": "InputGroupCall" } ], - "type": "stickers.SuggestedShortName" + "type": "phone.GroupCallStreamChannels" }, { - "id": "-179077444", - "method": "stickers.changeSticker", + "id": "1525991226", + "method": "phone.getGroupCallStreamRtmpUrl", "params": [ { "name": "flags", "type": "#" }, { - "name": "sticker", - "type": "InputDocument" - }, - { - "name": "emoji", - "type": "flags.0?string" + "name": "live_story", + "type": "flags.0?true" }, { - "name": "mask_coords", - "type": "flags.1?MaskCoords" + "name": "peer", + "type": "InputPeer" }, { - "name": "keywords", - "type": "flags.2?string" + "name": "revoke", + "type": "Bool" } ], - "type": "messages.StickerSet" + "type": "phone.GroupCallStreamRtmpUrl" }, { - "id": "306912256", - "method": "stickers.renameStickerSet", + "id": "1092913030", + "method": "phone.saveCallLog", "params": [ { - "name": "stickerset", - "type": "InputStickerSet" + "name": "peer", + "type": "InputPhoneCall" }, { - "name": "title", - "type": "string" - } - ], - "type": "messages.StickerSet" - }, - { - "id": "-2022685804", - "method": "stickers.deleteStickerSet", - "params": [ - { - "name": "stickerset", - "type": "InputStickerSet" + "name": "file", + "type": "InputFile" } ], "type": "Bool" }, { - "id": "1184253338", - "method": "stickers.replaceSticker", + "id": "2097431739", + "method": "phone.createConferenceCall", "params": [ { - "name": "sticker", - "type": "InputDocument" + "name": "flags", + "type": "#" }, { - "name": "new_sticker", - "type": "InputStickerSetItem" + "name": "muted", + "type": "flags.0?true" + }, + { + "name": "video_stopped", + "type": "flags.2?true" + }, + { + "name": "join", + "type": "flags.3?true" + }, + { + "name": "random_id", + "type": "int" + }, + { + "name": "public_key", + "type": "flags.3?int256" + }, + { + "name": "block", + "type": "flags.3?bytes" + }, + { + "name": "params", + "type": "flags.3?DataJSON" } ], - "type": "messages.StickerSet" - }, - { - "id": "1430593449", - "method": "phone.getCallConfig", - "params": [], - "type": "DataJSON" + "type": "Updates" }, { - "id": "1124046573", - "method": "phone.requestCall", + "id": "-1935276763", + "method": "phone.deleteConferenceCallParticipants", "params": [ { "name": "flags", "type": "#" }, { - "name": "video", + "name": "only_left", "type": "flags.0?true" }, { - "name": "user_id", - "type": "InputUser" + "name": "kick", + "type": "flags.1?true" }, { - "name": "random_id", - "type": "int" + "name": "call", + "type": "InputGroupCall" }, { - "name": "g_a_hash", - "type": "bytes" + "name": "ids", + "type": "Vector" }, { - "name": "protocol", - "type": "PhoneCallProtocol" + "name": "block", + "type": "bytes" } ], - "type": "phone.PhoneCall" + "type": "Updates" }, { - "id": "1003664544", - "method": "phone.acceptCall", + "id": "-965732096", + "method": "phone.sendConferenceCallBroadcast", "params": [ { - "name": "peer", - "type": "InputPhoneCall" + "name": "call", + "type": "InputGroupCall" }, { - "name": "g_b", + "name": "block", "type": "bytes" - }, - { - "name": "protocol", - "type": "PhoneCallProtocol" } ], - "type": "phone.PhoneCall" + "type": "Updates" }, { - "id": "788404002", - "method": "phone.confirmCall", + "id": "-1124981115", + "method": "phone.inviteConferenceCallParticipant", "params": [ { - "name": "peer", - "type": "InputPhoneCall" + "name": "flags", + "type": "#" }, { - "name": "g_a", - "type": "bytes" + "name": "video", + "type": "flags.0?true" }, { - "name": "key_fingerprint", - "type": "long" + "name": "call", + "type": "InputGroupCall" }, { - "name": "protocol", - "type": "PhoneCallProtocol" + "name": "user_id", + "type": "InputUser" } ], - "type": "phone.PhoneCall" + "type": "Updates" }, { - "id": "399855457", - "method": "phone.receivedCall", + "id": "1011325297", + "method": "phone.declineConferenceCallInvite", "params": [ { - "name": "peer", - "type": "InputPhoneCall" + "name": "msg_id", + "type": "int" } ], - "type": "Bool" + "type": "Updates" }, { - "id": "-1295269440", - "method": "phone.discardCall", + "id": "-291534682", + "method": "phone.getGroupCallChainBlocks", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "video", - "type": "flags.0?true" - }, - { - "name": "peer", - "type": "InputPhoneCall" + "name": "call", + "type": "InputGroupCall" }, { - "name": "duration", + "name": "sub_chain_id", "type": "int" }, { - "name": "reason", - "type": "PhoneCallDiscardReason" + "name": "offset", + "type": "int" }, { - "name": "connection_id", - "type": "long" + "name": "limit", + "type": "int" } ], "type": "Updates" }, { - "id": "1508562471", - "method": "phone.setCallRating", + "id": "-1311697904", + "method": "phone.sendGroupCallMessage", "params": [ { "name": "flags", "type": "#" }, { - "name": "user_initiative", - "type": "flags.0?true" + "name": "call", + "type": "InputGroupCall" }, { - "name": "peer", - "type": "InputPhoneCall" + "name": "random_id", + "type": "long" }, { - "name": "rating", - "type": "int" + "name": "message", + "type": "TextWithEntities" }, { - "name": "comment", - "type": "string" - } - ], - "type": "Updates" - }, - { - "id": "662363518", - "method": "phone.saveCallDebug", - "params": [ - { - "name": "peer", - "type": "InputPhoneCall" + "name": "allow_paid_stars", + "type": "flags.0?long" }, { - "name": "debug", - "type": "DataJSON" + "name": "send_as", + "type": "flags.1?InputPeer" } ], - "type": "Bool" + "type": "Updates" }, { - "id": "-8744061", - "method": "phone.sendSignalingData", + "id": "-441473683", + "method": "phone.sendGroupCallEncryptedMessage", "params": [ { - "name": "peer", - "type": "InputPhoneCall" + "name": "call", + "type": "InputGroupCall" }, { - "name": "data", + "name": "encrypted_message", "type": "bytes" } ], "type": "Bool" }, { - "id": "1221445336", - "method": "phone.createGroupCall", + "id": "-162573065", + "method": "phone.deleteGroupCallMessages", "params": [ { "name": "flags", "type": "#" }, { - "name": "rtmp_stream", - "type": "flags.2?true" - }, - { - "name": "peer", - "type": "InputPeer" - }, - { - "name": "random_id", - "type": "int" + "name": "report_spam", + "type": "flags.0?true" }, { - "name": "title", - "type": "flags.0?string" + "name": "call", + "type": "InputGroupCall" }, { - "name": "schedule_date", - "type": "flags.1?int" + "name": "messages", + "type": "Vector" } ], "type": "Updates" }, { - "id": "-1883951017", - "method": "phone.joinGroupCall", + "id": "499117216", + "method": "phone.deleteGroupCallParticipantMessages", "params": [ { "name": "flags", "type": "#" }, { - "name": "muted", + "name": "report_spam", "type": "flags.0?true" }, { - "name": "video_stopped", - "type": "flags.2?true" + "name": "call", + "type": "InputGroupCall" }, + { + "name": "participant", + "type": "InputPeer" + } + ], + "type": "Updates" + }, + { + "id": "1868784386", + "method": "phone.getGroupCallStars", + "params": [ + { + "name": "call", + "type": "InputGroupCall" + } + ], + "type": "phone.GroupCallStars" + }, + { + "id": "1097313745", + "method": "phone.saveDefaultSendAs", + "params": [ { "name": "call", "type": "InputGroupCall" }, { - "name": "join_as", + "name": "send_as", "type": "InputPeer" + } + ], + "type": "Bool" + }, + { + "id": "-219008246", + "method": "langpack.getLangPack", + "params": [ + { + "name": "lang_pack", + "type": "string" }, { - "name": "invite_hash", - "type": "flags.1?string" + "name": "lang_code", + "type": "string" + } + ], + "type": "LangPackDifference" + }, + { + "id": "-269862909", + "method": "langpack.getStrings", + "params": [ + { + "name": "lang_pack", + "type": "string" }, { - "name": "public_key", - "type": "flags.3?int256" + "name": "lang_code", + "type": "string" + }, + { + "name": "keys", + "type": "Vector" + } + ], + "type": "Vector" + }, + { + "id": "-845657435", + "method": "langpack.getDifference", + "params": [ + { + "name": "lang_pack", + "type": "string" }, { - "name": "block", - "type": "flags.3?bytes" + "name": "lang_code", + "type": "string" }, { - "name": "params", - "type": "DataJSON" + "name": "from_version", + "type": "int" } ], - "type": "Updates" + "type": "LangPackDifference" }, { - "id": "1342404601", - "method": "phone.leaveGroupCall", + "id": "1120311183", + "method": "langpack.getLanguages", "params": [ { - "name": "call", - "type": "InputGroupCall" - }, - { - "name": "source", - "type": "int" + "name": "lang_pack", + "type": "string" } ], - "type": "Updates" + "type": "Vector" }, { - "id": "2067345760", - "method": "phone.inviteToGroupCall", + "id": "1784243458", + "method": "langpack.getLanguage", "params": [ { - "name": "call", - "type": "InputGroupCall" + "name": "lang_pack", + "type": "string" }, { - "name": "users", - "type": "Vector" + "name": "lang_code", + "type": "string" } ], - "type": "Updates" + "type": "LangPackLanguage" }, { - "id": "2054648117", - "method": "phone.discardGroupCall", + "id": "1749536939", + "method": "folders.editPeerFolders", "params": [ { - "name": "call", - "type": "InputGroupCall" + "name": "folder_peers", + "type": "Vector" } ], "type": "Updates" }, { - "id": "-1757179150", - "method": "phone.toggleGroupCallSettings", + "id": "-1421720550", + "method": "stats.getBroadcastStats", "params": [ { "name": "flags", "type": "#" }, { - "name": "reset_invite_hash", - "type": "flags.1?true" + "name": "dark", + "type": "flags.0?true" }, { - "name": "call", - "type": "InputGroupCall" - }, + "name": "channel", + "type": "InputChannel" + } + ], + "type": "stats.BroadcastStats" + }, + { + "id": "1646092192", + "method": "stats.loadAsyncGraph", + "params": [ { - "name": "join_muted", - "type": "flags.0?Bool" + "name": "flags", + "type": "#" }, { - "name": "messages_enabled", - "type": "flags.2?Bool" + "name": "token", + "type": "string" }, { - "name": "send_paid_messages_stars", - "type": "flags.3?long" + "name": "x", + "type": "flags.0?long" } ], - "type": "Updates" + "type": "StatsGraph" }, { - "id": "68699611", - "method": "phone.getGroupCall", + "id": "-589330937", + "method": "stats.getMegagroupStats", "params": [ { - "name": "call", - "type": "InputGroupCall" + "name": "flags", + "type": "#" }, { - "name": "limit", - "type": "int" + "name": "dark", + "type": "flags.0?true" + }, + { + "name": "channel", + "type": "InputChannel" } ], - "type": "phone.GroupCall" + "type": "stats.MegagroupStats" }, { - "id": "-984033109", - "method": "phone.getGroupParticipants", + "id": "1595212100", + "method": "stats.getMessagePublicForwards", "params": [ { - "name": "call", - "type": "InputGroupCall" - }, - { - "name": "ids", - "type": "Vector" + "name": "channel", + "type": "InputChannel" }, { - "name": "sources", - "type": "Vector" + "name": "msg_id", + "type": "int" }, { "name": "offset", @@ -44203,721 +48500,662 @@ "type": "int" } ], - "type": "phone.GroupParticipants" + "type": "stats.PublicForwards" }, { - "id": "-1248003721", - "method": "phone.checkGroupCall", + "id": "-1226791947", + "method": "stats.getMessageStats", "params": [ { - "name": "call", - "type": "InputGroupCall" + "name": "flags", + "type": "#" }, { - "name": "sources", - "type": "Vector" + "name": "dark", + "type": "flags.0?true" + }, + { + "name": "channel", + "type": "InputChannel" + }, + { + "name": "msg_id", + "type": "int" } ], - "type": "Vector" + "type": "stats.MessageStats" }, { - "id": "-248985848", - "method": "phone.toggleGroupCallRecord", + "id": "927985472", + "method": "stats.getStoryStats", "params": [ { "name": "flags", "type": "#" }, { - "name": "start", + "name": "dark", "type": "flags.0?true" }, { - "name": "video", - "type": "flags.2?true" - }, - { - "name": "call", - "type": "InputGroupCall" - }, - { - "name": "title", - "type": "flags.1?string" + "name": "peer", + "type": "InputPeer" }, { - "name": "video_portrait", - "type": "flags.2?Bool" + "name": "id", + "type": "int" } ], - "type": "Updates" + "type": "stats.StoryStats" }, { - "id": "-1524155713", - "method": "phone.editGroupCallParticipant", + "id": "-1505526026", + "method": "stats.getStoryPublicForwards", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "call", - "type": "InputGroupCall" - }, - { - "name": "participant", + "name": "peer", "type": "InputPeer" }, { - "name": "muted", - "type": "flags.0?Bool" + "name": "id", + "type": "int" }, { - "name": "volume", - "type": "flags.1?int" + "name": "offset", + "type": "string" }, { - "name": "raise_hand", - "type": "flags.2?Bool" + "name": "limit", + "type": "int" + } + ], + "type": "stats.PublicForwards" + }, + { + "id": "-1031931288", + "method": "stats.getPollStats", + "params": [ + { + "name": "flags", + "type": "#" }, { - "name": "video_stopped", - "type": "flags.3?Bool" + "name": "dark", + "type": "flags.0?true" }, { - "name": "video_paused", - "type": "flags.4?Bool" + "name": "peer", + "type": "InputPeer" }, { - "name": "presentation_paused", - "type": "flags.5?Bool" + "name": "msg_id", + "type": "int" } ], - "type": "Updates" + "type": "stats.PollStats" }, { - "id": "480685066", - "method": "phone.editGroupCallTitle", + "id": "-2072885362", + "method": "chatlists.exportChatlistInvite", "params": [ { - "name": "call", - "type": "InputGroupCall" + "name": "chatlist", + "type": "InputChatlist" }, { "name": "title", "type": "string" + }, + { + "name": "peers", + "type": "Vector" } ], - "type": "Updates" + "type": "chatlists.ExportedChatlistInvite" }, { - "id": "-277077702", - "method": "phone.getGroupCallJoinAs", + "id": "1906072670", + "method": "chatlists.deleteExportedInvite", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "chatlist", + "type": "InputChatlist" + }, + { + "name": "slug", + "type": "string" } ], - "type": "phone.JoinAsPeers" + "type": "Bool" }, { - "id": "-425040769", - "method": "phone.exportGroupCallInvite", + "id": "1698543165", + "method": "chatlists.editExportedInvite", "params": [ { "name": "flags", "type": "#" }, { - "name": "can_self_unmute", - "type": "flags.0?true" + "name": "chatlist", + "type": "InputChatlist" }, { - "name": "call", - "type": "InputGroupCall" + "name": "slug", + "type": "string" + }, + { + "name": "title", + "type": "flags.1?string" + }, + { + "name": "peers", + "type": "flags.2?Vector" } ], - "type": "phone.ExportedGroupCallInvite" + "type": "ExportedChatlistInvite" }, { - "id": "563885286", - "method": "phone.toggleGroupCallStartSubscription", + "id": "-838608253", + "method": "chatlists.getExportedInvites", "params": [ { - "name": "call", - "type": "InputGroupCall" - }, - { - "name": "subscribed", - "type": "Bool" + "name": "chatlist", + "type": "InputChatlist" } ], - "type": "Updates" + "type": "chatlists.ExportedInvites" }, { - "id": "1451287362", - "method": "phone.startScheduledGroupCall", + "id": "1103171583", + "method": "chatlists.checkChatlistInvite", "params": [ { - "name": "call", - "type": "InputGroupCall" + "name": "slug", + "type": "string" } ], - "type": "Updates" + "type": "chatlists.ChatlistInvite" }, { - "id": "1465786252", - "method": "phone.saveDefaultGroupCallJoinAs", + "id": "-1498291302", + "method": "chatlists.joinChatlistInvite", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "slug", + "type": "string" }, { - "name": "join_as", - "type": "InputPeer" + "name": "peers", + "type": "Vector" } ], - "type": "Bool" + "type": "Updates" }, { - "id": "-873829436", - "method": "phone.joinGroupCallPresentation", + "id": "-1992190687", + "method": "chatlists.getChatlistUpdates", "params": [ { - "name": "call", - "type": "InputGroupCall" + "name": "chatlist", + "type": "InputChatlist" + } + ], + "type": "chatlists.ChatlistUpdates" + }, + { + "id": "-527828747", + "method": "chatlists.joinChatlistUpdates", + "params": [ + { + "name": "chatlist", + "type": "InputChatlist" }, { - "name": "params", - "type": "DataJSON" + "name": "peers", + "type": "Vector" } ], "type": "Updates" }, { - "id": "475058500", - "method": "phone.leaveGroupCallPresentation", + "id": "1726252795", + "method": "chatlists.hideChatlistUpdates", "params": [ { - "name": "call", - "type": "InputGroupCall" + "name": "chatlist", + "type": "InputChatlist" } ], - "type": "Updates" + "type": "Bool" }, { - "id": "447879488", - "method": "phone.getGroupCallStreamChannels", + "id": "-37955820", + "method": "chatlists.getLeaveChatlistSuggestions", "params": [ { - "name": "call", - "type": "InputGroupCall" + "name": "chatlist", + "type": "InputChatlist" } ], - "type": "phone.GroupCallStreamChannels" + "type": "Vector" }, { - "id": "1525991226", - "method": "phone.getGroupCallStreamRtmpUrl", + "id": "1962598714", + "method": "chatlists.leaveChatlist", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "live_story", - "type": "flags.0?true" - }, - { - "name": "peer", - "type": "InputPeer" + "name": "chatlist", + "type": "InputChatlist" }, { - "name": "revoke", - "type": "Bool" + "name": "peers", + "type": "Vector" } ], - "type": "phone.GroupCallStreamRtmpUrl" + "type": "Updates" }, { - "id": "1092913030", - "method": "phone.saveCallLog", + "id": "820732912", + "method": "stories.canSendStory", "params": [ { "name": "peer", - "type": "InputPhoneCall" - }, - { - "name": "file", - "type": "InputFile" + "type": "InputPeer" } ], - "type": "Bool" + "type": "stories.CanSendStoryCount" }, { - "id": "2097431739", - "method": "phone.createConferenceCall", + "id": "-1885443944", + "method": "stories.sendStory", "params": [ { "name": "flags", "type": "#" }, { - "name": "muted", - "type": "flags.0?true" - }, - { - "name": "video_stopped", + "name": "pinned", "type": "flags.2?true" }, { - "name": "join", - "type": "flags.3?true" - }, - { - "name": "random_id", - "type": "int" - }, - { - "name": "public_key", - "type": "flags.3?int256" - }, - { - "name": "block", - "type": "flags.3?bytes" + "name": "noforwards", + "type": "flags.4?true" }, { - "name": "params", - "type": "flags.3?DataJSON" - } - ], - "type": "Updates" - }, - { - "id": "-1935276763", - "method": "phone.deleteConferenceCallParticipants", - "params": [ - { - "name": "flags", - "type": "#" + "name": "fwd_modified", + "type": "flags.7?true" }, { - "name": "only_left", - "type": "flags.0?true" + "name": "peer", + "type": "InputPeer" }, { - "name": "kick", - "type": "flags.1?true" + "name": "media", + "type": "InputMedia" }, { - "name": "call", - "type": "InputGroupCall" + "name": "media_areas", + "type": "flags.5?Vector" }, { - "name": "ids", - "type": "Vector" + "name": "caption", + "type": "flags.0?string" }, { - "name": "block", - "type": "bytes" - } - ], - "type": "Updates" - }, - { - "id": "-965732096", - "method": "phone.sendConferenceCallBroadcast", - "params": [ - { - "name": "call", - "type": "InputGroupCall" + "name": "entities", + "type": "flags.1?Vector" }, { - "name": "block", - "type": "bytes" - } - ], - "type": "Updates" - }, - { - "id": "-1124981115", - "method": "phone.inviteConferenceCallParticipant", - "params": [ - { - "name": "flags", - "type": "#" + "name": "privacy_rules", + "type": "Vector" }, { - "name": "video", - "type": "flags.0?true" + "name": "random_id", + "type": "long" }, { - "name": "call", - "type": "InputGroupCall" + "name": "period", + "type": "flags.3?int" }, { - "name": "user_id", - "type": "InputUser" - } - ], - "type": "Updates" - }, - { - "id": "1011325297", - "method": "phone.declineConferenceCallInvite", - "params": [ - { - "name": "msg_id", - "type": "int" - } - ], - "type": "Updates" - }, - { - "id": "-291534682", - "method": "phone.getGroupCallChainBlocks", - "params": [ - { - "name": "call", - "type": "InputGroupCall" + "name": "fwd_from_id", + "type": "flags.6?InputPeer" }, { - "name": "sub_chain_id", - "type": "int" + "name": "fwd_from_story", + "type": "flags.6?int" }, { - "name": "offset", - "type": "int" + "name": "albums", + "type": "flags.8?Vector" }, { - "name": "limit", - "type": "int" + "name": "music", + "type": "flags.9?InputDocument" } ], "type": "Updates" }, { - "id": "-1311697904", - "method": "phone.sendGroupCallMessage", + "id": "744728363", + "method": "stories.editStory", "params": [ { "name": "flags", "type": "#" }, { - "name": "call", - "type": "InputGroupCall" + "name": "peer", + "type": "InputPeer" }, { - "name": "random_id", - "type": "long" + "name": "id", + "type": "int" }, { - "name": "message", - "type": "TextWithEntities" + "name": "media", + "type": "flags.0?InputMedia" }, { - "name": "allow_paid_stars", - "type": "flags.0?long" + "name": "media_areas", + "type": "flags.3?Vector" }, { - "name": "send_as", - "type": "flags.1?InputPeer" + "name": "caption", + "type": "flags.1?string" + }, + { + "name": "entities", + "type": "flags.1?Vector" + }, + { + "name": "privacy_rules", + "type": "flags.2?Vector" + }, + { + "name": "music", + "type": "flags.4?InputDocument" } ], "type": "Updates" }, { - "id": "-441473683", - "method": "phone.sendGroupCallEncryptedMessage", + "id": "-1369842849", + "method": "stories.deleteStories", "params": [ { - "name": "call", - "type": "InputGroupCall" + "name": "peer", + "type": "InputPeer" }, { - "name": "encrypted_message", - "type": "bytes" + "name": "id", + "type": "Vector" } ], - "type": "Bool" + "type": "Vector" }, { - "id": "-162573065", - "method": "phone.deleteGroupCallMessages", + "id": "-1703566865", + "method": "stories.togglePinned", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "report_spam", - "type": "flags.0?true" + "name": "peer", + "type": "InputPeer" }, { - "name": "call", - "type": "InputGroupCall" + "name": "id", + "type": "Vector" }, { - "name": "messages", - "type": "Vector" + "name": "pinned", + "type": "Bool" } ], - "type": "Updates" + "type": "Vector" }, { - "id": "499117216", - "method": "phone.deleteGroupCallParticipantMessages", + "id": "-290400731", + "method": "stories.getAllStories", "params": [ { "name": "flags", "type": "#" }, { - "name": "report_spam", - "type": "flags.0?true" + "name": "next", + "type": "flags.1?true" }, { - "name": "call", - "type": "InputGroupCall" + "name": "hidden", + "type": "flags.2?true" }, { - "name": "participant", - "type": "InputPeer" - } - ], - "type": "Updates" - }, - { - "id": "1868784386", - "method": "phone.getGroupCallStars", - "params": [ - { - "name": "call", - "type": "InputGroupCall" + "name": "state", + "type": "flags.0?string" } ], - "type": "phone.GroupCallStars" + "type": "stories.AllStories" }, { - "id": "1097313745", - "method": "phone.saveDefaultSendAs", + "id": "1478600156", + "method": "stories.getPinnedStories", "params": [ { - "name": "call", - "type": "InputGroupCall" - }, - { - "name": "send_as", + "name": "peer", "type": "InputPeer" - } - ], - "type": "Bool" - }, - { - "id": "-219008246", - "method": "langpack.getLangPack", - "params": [ + }, { - "name": "lang_pack", - "type": "string" + "name": "offset_id", + "type": "int" }, { - "name": "lang_code", - "type": "string" + "name": "limit", + "type": "int" } ], - "type": "LangPackDifference" + "type": "stories.Stories" }, { - "id": "-269862909", - "method": "langpack.getStrings", + "id": "-1271586794", + "method": "stories.getStoriesArchive", "params": [ { - "name": "lang_pack", - "type": "string" + "name": "peer", + "type": "InputPeer" }, { - "name": "lang_code", - "type": "string" + "name": "offset_id", + "type": "int" }, { - "name": "keys", - "type": "Vector" + "name": "limit", + "type": "int" } ], - "type": "Vector" + "type": "stories.Stories" }, { - "id": "-845657435", - "method": "langpack.getDifference", + "id": "1467271796", + "method": "stories.getStoriesByID", "params": [ { - "name": "lang_pack", - "type": "string" - }, - { - "name": "lang_code", - "type": "string" + "name": "peer", + "type": "InputPeer" }, { - "name": "from_version", - "type": "int" + "name": "id", + "type": "Vector" } ], - "type": "LangPackDifference" + "type": "stories.Stories" }, { - "id": "1120311183", - "method": "langpack.getLanguages", + "id": "2082822084", + "method": "stories.toggleAllStoriesHidden", "params": [ { - "name": "lang_pack", - "type": "string" + "name": "hidden", + "type": "Bool" } ], - "type": "Vector" + "type": "Bool" }, { - "id": "1784243458", - "method": "langpack.getLanguage", + "id": "-1521034552", + "method": "stories.readStories", "params": [ { - "name": "lang_pack", - "type": "string" + "name": "peer", + "type": "InputPeer" }, { - "name": "lang_code", - "type": "string" + "name": "max_id", + "type": "int" } ], - "type": "LangPackLanguage" + "type": "Vector" }, { - "id": "1749536939", - "method": "folders.editPeerFolders", + "id": "-1308456197", + "method": "stories.incrementStoryViews", "params": [ { - "name": "folder_peers", - "type": "Vector" + "name": "peer", + "type": "InputPeer" + }, + { + "name": "id", + "type": "Vector" } ], - "type": "Updates" + "type": "Bool" }, { - "id": "-1421720550", - "method": "stats.getBroadcastStats", + "id": "2127707223", + "method": "stories.getStoryViewsList", "params": [ { "name": "flags", "type": "#" }, { - "name": "dark", + "name": "just_contacts", "type": "flags.0?true" }, { - "name": "channel", - "type": "InputChannel" - } - ], - "type": "stats.BroadcastStats" - }, - { - "id": "1646092192", - "method": "stats.loadAsyncGraph", - "params": [ + "name": "reactions_first", + "type": "flags.2?true" + }, { - "name": "flags", - "type": "#" + "name": "forwards_first", + "type": "flags.3?true" }, { - "name": "token", + "name": "peer", + "type": "InputPeer" + }, + { + "name": "q", + "type": "flags.1?string" + }, + { + "name": "id", + "type": "int" + }, + { + "name": "offset", "type": "string" }, { - "name": "x", - "type": "flags.0?long" + "name": "limit", + "type": "int" } ], - "type": "StatsGraph" + "type": "stories.StoryViewsList" }, { - "id": "-589330937", - "method": "stats.getMegagroupStats", + "id": "685862088", + "method": "stories.getStoriesViews", "params": [ { - "name": "flags", - "type": "#" + "name": "peer", + "type": "InputPeer" }, { - "name": "dark", - "type": "flags.0?true" + "name": "id", + "type": "Vector" + } + ], + "type": "stories.StoryViews" + }, + { + "id": "2072899360", + "method": "stories.exportStoryLink", + "params": [ + { + "name": "peer", + "type": "InputPeer" }, { - "name": "channel", - "type": "InputChannel" + "name": "id", + "type": "int" } ], - "type": "stats.MegagroupStats" + "type": "ExportedStoryLink" }, { - "id": "1595212100", - "method": "stats.getMessagePublicForwards", + "id": "433646405", + "method": "stories.report", "params": [ { - "name": "channel", - "type": "InputChannel" + "name": "peer", + "type": "InputPeer" }, { - "name": "msg_id", - "type": "int" + "name": "id", + "type": "Vector" }, { - "name": "offset", - "type": "string" + "name": "option", + "type": "bytes" }, { - "name": "limit", - "type": "int" + "name": "message", + "type": "string" } ], - "type": "stats.PublicForwards" + "type": "ReportResult" }, { - "id": "-1226791947", - "method": "stats.getMessageStats", + "id": "1471926630", + "method": "stories.activateStealthMode", "params": [ { "name": "flags", "type": "#" }, { - "name": "dark", + "name": "past", "type": "flags.0?true" }, { - "name": "channel", - "type": "InputChannel" - }, - { - "name": "msg_id", - "type": "int" + "name": "future", + "type": "flags.1?true" } ], - "type": "stats.MessageStats" + "type": "Updates" }, { - "id": "927985472", - "method": "stats.getStoryStats", + "id": "2144810674", + "method": "stories.sendReaction", "params": [ { "name": "flags", "type": "#" }, { - "name": "dark", + "name": "add_to_recent", "type": "flags.0?true" }, { @@ -44925,233 +49163,271 @@ "type": "InputPeer" }, { - "name": "id", + "name": "story_id", "type": "int" + }, + { + "name": "reaction", + "type": "Reaction" } ], - "type": "stats.StoryStats" + "type": "Updates" }, { - "id": "-1505526026", - "method": "stats.getStoryPublicForwards", + "id": "743103056", + "method": "stories.getPeerStories", "params": [ { "name": "peer", "type": "InputPeer" - }, + } + ], + "type": "stories.PeerStories" + }, + { + "id": "-1688541191", + "method": "stories.getAllReadPeerStories", + "params": [], + "type": "Updates" + }, + { + "id": "2018087280", + "method": "stories.getPeerMaxIDs", + "params": [ { "name": "id", - "type": "int" - }, + "type": "Vector" + } + ], + "type": "Vector" + }, + { + "id": "-1519744160", + "method": "stories.getChatsToSend", + "params": [], + "type": "messages.Chats" + }, + { + "id": "-1123805756", + "method": "stories.togglePeerStoriesHidden", + "params": [ { - "name": "offset", - "type": "string" + "name": "peer", + "type": "InputPeer" }, { - "name": "limit", - "type": "int" + "name": "hidden", + "type": "Bool" } ], - "type": "stats.PublicForwards" + "type": "Bool" }, { - "id": "-1031931288", - "method": "stats.getPollStats", + "id": "-1179482081", + "method": "stories.getStoryReactionsList", "params": [ { "name": "flags", "type": "#" }, { - "name": "dark", - "type": "flags.0?true" + "name": "forwards_first", + "type": "flags.2?true" }, { "name": "peer", "type": "InputPeer" }, { - "name": "msg_id", + "name": "id", "type": "int" - } - ], - "type": "stats.PollStats" - }, - { - "id": "-2072885362", - "method": "chatlists.exportChatlistInvite", - "params": [ + }, { - "name": "chatlist", - "type": "InputChatlist" + "name": "reaction", + "type": "flags.0?Reaction" }, { - "name": "title", - "type": "string" + "name": "offset", + "type": "flags.1?string" }, { - "name": "peers", - "type": "Vector" + "name": "limit", + "type": "int" } ], - "type": "chatlists.ExportedChatlistInvite" + "type": "stories.StoryReactionsList" }, { - "id": "1906072670", - "method": "chatlists.deleteExportedInvite", + "id": "187268763", + "method": "stories.togglePinnedToTop", "params": [ { - "name": "chatlist", - "type": "InputChatlist" + "name": "peer", + "type": "InputPeer" }, { - "name": "slug", - "type": "string" + "name": "id", + "type": "Vector" } ], "type": "Bool" }, { - "id": "1698543165", - "method": "chatlists.editExportedInvite", + "id": "-780072697", + "method": "stories.searchPosts", "params": [ { "name": "flags", "type": "#" }, { - "name": "chatlist", - "type": "InputChatlist" + "name": "hashtag", + "type": "flags.0?string" }, { - "name": "slug", - "type": "string" + "name": "area", + "type": "flags.1?MediaArea" }, { - "name": "title", - "type": "flags.1?string" + "name": "peer", + "type": "flags.2?InputPeer" }, { - "name": "peers", - "type": "flags.2?Vector" - } - ], - "type": "ExportedChatlistInvite" - }, - { - "id": "-838608253", - "method": "chatlists.getExportedInvites", - "params": [ + "name": "offset", + "type": "string" + }, { - "name": "chatlist", - "type": "InputChatlist" + "name": "limit", + "type": "int" } ], - "type": "chatlists.ExportedInvites" + "type": "stories.FoundStories" }, { - "id": "1103171583", - "method": "chatlists.checkChatlistInvite", + "id": "-1553754395", + "method": "stories.createAlbum", "params": [ { - "name": "slug", - "type": "string" - } - ], - "type": "chatlists.ChatlistInvite" - }, - { - "id": "-1498291302", - "method": "chatlists.joinChatlistInvite", - "params": [ + "name": "peer", + "type": "InputPeer" + }, { - "name": "slug", + "name": "title", "type": "string" }, { - "name": "peers", - "type": "Vector" + "name": "stories", + "type": "Vector" } ], - "type": "Updates" + "type": "StoryAlbum" }, { - "id": "-1992190687", - "method": "chatlists.getChatlistUpdates", + "id": "1582455222", + "method": "stories.updateAlbum", "params": [ { - "name": "chatlist", - "type": "InputChatlist" - } - ], - "type": "chatlists.ChatlistUpdates" - }, - { - "id": "-527828747", - "method": "chatlists.joinChatlistUpdates", - "params": [ + "name": "flags", + "type": "#" + }, + { + "name": "peer", + "type": "InputPeer" + }, + { + "name": "album_id", + "type": "int" + }, + { + "name": "title", + "type": "flags.0?string" + }, + { + "name": "delete_stories", + "type": "flags.1?Vector" + }, { - "name": "chatlist", - "type": "InputChatlist" + "name": "add_stories", + "type": "flags.2?Vector" }, { - "name": "peers", - "type": "Vector" + "name": "order", + "type": "flags.3?Vector" } ], - "type": "Updates" + "type": "StoryAlbum" }, { - "id": "1726252795", - "method": "chatlists.hideChatlistUpdates", + "id": "-2060059687", + "method": "stories.reorderAlbums", "params": [ { - "name": "chatlist", - "type": "InputChatlist" + "name": "peer", + "type": "InputPeer" + }, + { + "name": "order", + "type": "Vector" } ], "type": "Bool" }, { - "id": "-37955820", - "method": "chatlists.getLeaveChatlistSuggestions", + "id": "-1925949744", + "method": "stories.deleteAlbum", "params": [ { - "name": "chatlist", - "type": "InputChatlist" + "name": "peer", + "type": "InputPeer" + }, + { + "name": "album_id", + "type": "int" } ], - "type": "Vector" + "type": "Bool" }, { - "id": "1962598714", - "method": "chatlists.leaveChatlist", + "id": "632548039", + "method": "stories.getAlbums", "params": [ { - "name": "chatlist", - "type": "InputChatlist" + "name": "peer", + "type": "InputPeer" }, { - "name": "peers", - "type": "Vector" + "name": "hash", + "type": "long" } ], - "type": "Updates" + "type": "stories.Albums" }, { - "id": "820732912", - "method": "stories.canSendStory", + "id": "-1400869535", + "method": "stories.getAlbumStories", "params": [ { "name": "peer", "type": "InputPeer" + }, + { + "name": "album_id", + "type": "int" + }, + { + "name": "offset", + "type": "int" + }, + { + "name": "limit", + "type": "int" } ], - "type": "stories.CanSendStoryCount" + "type": "stories.Stories" }, { - "id": "-1885443944", - "method": "stories.sendStory", + "id": "-798372642", + "method": "stories.startLive", "params": [ { "name": "flags", @@ -45166,21 +49442,13 @@ "type": "flags.4?true" }, { - "name": "fwd_modified", - "type": "flags.7?true" + "name": "rtmp_stream", + "type": "flags.5?true" }, { "name": "peer", "type": "InputPeer" }, - { - "name": "media", - "type": "InputMedia" - }, - { - "name": "media_areas", - "type": "flags.5?Vector" - }, { "name": "caption", "type": "flags.0?string" @@ -45198,581 +49466,693 @@ "type": "long" }, { - "name": "period", - "type": "flags.3?int" - }, - { - "name": "fwd_from_id", - "type": "flags.6?InputPeer" - }, - { - "name": "fwd_from_story", - "type": "flags.6?int" - }, - { - "name": "albums", - "type": "flags.8?Vector" + "name": "messages_enabled", + "type": "flags.6?Bool" }, { - "name": "music", - "type": "flags.9?InputDocument" + "name": "send_paid_messages_stars", + "type": "flags.7?long" } ], "type": "Updates" }, { - "id": "744728363", - "method": "stories.editStory", + "id": "1626764896", + "method": "premium.getBoostsList", "params": [ { "name": "flags", "type": "#" }, { - "name": "peer", - "type": "InputPeer" - }, - { - "name": "id", - "type": "int" + "name": "gifts", + "type": "flags.0?true" }, { - "name": "media", - "type": "flags.0?InputMedia" + "name": "peer", + "type": "InputPeer" }, { - "name": "media_areas", - "type": "flags.3?Vector" + "name": "offset", + "type": "string" }, { - "name": "caption", - "type": "flags.1?string" - }, + "name": "limit", + "type": "int" + } + ], + "type": "premium.BoostsList" + }, + { + "id": "199719754", + "method": "premium.getMyBoosts", + "params": [], + "type": "premium.MyBoosts" + }, + { + "id": "1803396934", + "method": "premium.applyBoost", + "params": [ { - "name": "entities", - "type": "flags.1?Vector" + "name": "flags", + "type": "#" }, { - "name": "privacy_rules", - "type": "flags.2?Vector" + "name": "slots", + "type": "flags.0?Vector" }, { - "name": "music", - "type": "flags.4?InputDocument" + "name": "peer", + "type": "InputPeer" } ], - "type": "Updates" + "type": "premium.MyBoosts" }, { - "id": "-1369842849", - "method": "stories.deleteStories", + "id": "70197089", + "method": "premium.getBoostsStatus", "params": [ { "name": "peer", "type": "InputPeer" - }, - { - "name": "id", - "type": "Vector" } ], - "type": "Vector" + "type": "premium.BoostsStatus" }, { - "id": "-1703566865", - "method": "stories.togglePinned", + "id": "965037343", + "method": "premium.getUserBoosts", "params": [ { "name": "peer", "type": "InputPeer" }, { - "name": "id", - "type": "Vector" - }, - { - "name": "pinned", - "type": "Bool" + "name": "user_id", + "type": "InputUser" } ], - "type": "Vector" + "type": "premium.BoostsList" }, { - "id": "-290400731", - "method": "stories.getAllStories", + "id": "249313744", + "method": "smsjobs.isEligibleToJoin", + "params": [], + "type": "smsjobs.EligibilityToJoin" + }, + { + "id": "-1488007635", + "method": "smsjobs.join", + "params": [], + "type": "Bool" + }, + { + "id": "-1734824589", + "method": "smsjobs.leave", + "params": [], + "type": "Bool" + }, + { + "id": "155164863", + "method": "smsjobs.updateSettings", "params": [ { "name": "flags", "type": "#" }, { - "name": "next", - "type": "flags.1?true" + "name": "allow_international", + "type": "flags.0?true" + } + ], + "type": "Bool" + }, + { + "id": "279353576", + "method": "smsjobs.getStatus", + "params": [], + "type": "smsjobs.Status" + }, + { + "id": "2005766191", + "method": "smsjobs.getSmsJob", + "params": [ + { + "name": "job_id", + "type": "string" + } + ], + "type": "SmsJob" + }, + { + "id": "1327415076", + "method": "smsjobs.finishJob", + "params": [ + { + "name": "flags", + "type": "#" }, { - "name": "hidden", - "type": "flags.2?true" + "name": "job_id", + "type": "string" }, { - "name": "state", + "name": "error", "type": "flags.0?string" } ], - "type": "stories.AllStories" + "type": "Bool" }, { - "id": "1478600156", - "method": "stories.getPinnedStories", + "id": "-1105295942", + "method": "fragment.getCollectibleInfo", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "collectible", + "type": "InputCollectible" + } + ], + "type": "fragment.CollectibleInfo" + }, + { + "id": "1252538643", + "method": "aicompose.createTone", + "params": [ + { + "name": "flags", + "type": "#" }, { - "name": "offset_id", - "type": "int" + "name": "display_author", + "type": "flags.0?true" }, { - "name": "limit", - "type": "int" + "name": "emoji_id", + "type": "long" + }, + { + "name": "title", + "type": "string" + }, + { + "name": "prompt", + "type": "string" } ], - "type": "stories.Stories" + "type": "AiComposeTone" }, { - "id": "-1271586794", - "method": "stories.getStoriesArchive", + "id": "-1875128487", + "method": "aicompose.updateTone", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "flags", + "type": "#" }, { - "name": "offset_id", - "type": "int" + "name": "tone", + "type": "InputAiComposeTone" }, { - "name": "limit", - "type": "int" + "name": "display_author", + "type": "flags.0?Bool" + }, + { + "name": "emoji_id", + "type": "flags.1?long" + }, + { + "name": "title", + "type": "flags.2?string" + }, + { + "name": "prompt", + "type": "flags.3?string" } ], - "type": "stories.Stories" + "type": "AiComposeTone" }, { - "id": "1467271796", - "method": "stories.getStoriesByID", + "id": "394447793", + "method": "aicompose.saveTone", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "tone", + "type": "InputAiComposeTone" }, { - "name": "id", - "type": "Vector" + "name": "unsave", + "type": "Bool" } ], - "type": "stories.Stories" + "type": "Bool" }, { - "id": "2082822084", - "method": "stories.toggleAllStoriesHidden", + "id": "-583454358", + "method": "aicompose.deleteTone", "params": [ { - "name": "hidden", - "type": "Bool" + "name": "tone", + "type": "InputAiComposeTone" } ], "type": "Bool" }, { - "id": "-1521034552", - "method": "stories.readStories", + "id": "-1293370877", + "method": "aicompose.getTone", "params": [ { - "name": "peer", - "type": "InputPeer" - }, + "name": "tone", + "type": "InputAiComposeTone" + } + ], + "type": "aicompose.Tones" + }, + { + "id": "-1412066815", + "method": "aicompose.getTones", + "params": [ { - "name": "max_id", - "type": "int" + "name": "hash", + "type": "long" } ], - "type": "Vector" + "type": "aicompose.Tones" }, { - "id": "-1308456197", - "method": "stories.incrementStoryViews", + "id": "-776688876", + "method": "aicompose.getToneExample", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "tone", + "type": "InputAiComposeTone" }, { - "name": "id", - "type": "Vector" + "name": "num", + "type": "int" } ], - "type": "Bool" + "type": "AiComposeToneExample" }, { - "id": "2127707223", - "method": "stories.getStoryViewsList", + "id": "-1506256404", + "method": "communities.create", "params": [ { "name": "flags", "type": "#" }, { - "name": "just_contacts", - "type": "flags.0?true" + "name": "hidden", + "type": "flags.1?true" }, { - "name": "reactions_first", - "type": "flags.2?true" + "name": "title", + "type": "string" }, { - "name": "forwards_first", - "type": "flags.3?true" + "name": "about", + "type": "flags.0?string" }, { "name": "peer", "type": "InputPeer" + } + ], + "type": "Updates" + }, + { + "id": "1936576490", + "method": "communities.togglePeerLink", + "params": [ + { + "name": "flags", + "type": "#" }, { - "name": "q", - "type": "flags.1?string" + "name": "visible", + "type": "flags.0?true" }, { - "name": "id", - "type": "int" + "name": "hidden", + "type": "flags.1?true" }, { - "name": "offset", - "type": "string" + "name": "deleted", + "type": "flags.2?true" }, { - "name": "limit", - "type": "int" + "name": "community", + "type": "InputChannel" + }, + { + "name": "peer", + "type": "InputPeer" } ], - "type": "stories.StoryViewsList" + "type": "Bool" }, { - "id": "685862088", - "method": "stories.getStoriesViews", + "id": "-1503401936", + "method": "communities.getJoinedCommunities", + "params": [], + "type": "messages.Chats" + }, + { + "id": "-681122838", + "method": "communities.toggleCommunityCollapsedInDialogs", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "flags", + "type": "#" }, { - "name": "id", - "type": "Vector" + "name": "collapsed", + "type": "flags.0?true" + }, + { + "name": "community", + "type": "InputChannel" } ], - "type": "stories.StoryViews" + "type": "Updates" }, { - "id": "2072899360", - "method": "stories.exportStoryLink", + "id": "-1820904636", + "method": "communities.getPeerLinkRequests", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "community", + "type": "InputChannel" }, { - "name": "id", + "name": "offset", + "type": "string" + }, + { + "name": "limit", "type": "int" } ], - "type": "ExportedStoryLink" + "type": "communities.PeerLinkRequests" }, { - "id": "433646405", - "method": "stories.report", + "id": "-1937630808", + "method": "communities.togglePeerLinkRequestApproval", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "flags", + "type": "#" }, { - "name": "id", - "type": "Vector" + "name": "reject", + "type": "flags.0?true" }, { - "name": "option", - "type": "bytes" + "name": "community", + "type": "InputChannel" }, { - "name": "message", - "type": "string" + "name": "peer", + "type": "InputPeer" } ], - "type": "ReportResult" + "type": "Bool" }, { - "id": "1471926630", - "method": "stories.activateStealthMode", + "id": "-1075585731", + "method": "communities.toggleAllPeerLinkRequestApproval", "params": [ { "name": "flags", "type": "#" }, { - "name": "past", + "name": "reject", "type": "flags.0?true" }, { - "name": "future", - "type": "flags.1?true" + "name": "community", + "type": "InputChannel" } ], - "type": "Updates" + "type": "Bool" }, { - "id": "2144810674", - "method": "stories.sendReaction", + "id": "-1721258737", + "method": "communities.toggleParticipantBanned", "params": [ { "name": "flags", "type": "#" }, { - "name": "add_to_recent", + "name": "unban", "type": "flags.0?true" }, { - "name": "peer", - "type": "InputPeer" - }, - { - "name": "story_id", - "type": "int" - }, - { - "name": "reaction", - "type": "Reaction" - } - ], - "type": "Updates" - }, - { - "id": "743103056", - "method": "stories.getPeerStories", - "params": [ - { - "name": "peer", - "type": "InputPeer" - } - ], - "type": "stories.PeerStories" - }, - { - "id": "-1688541191", - "method": "stories.getAllReadPeerStories", - "params": [], - "type": "Updates" - }, - { - "id": "2018087280", - "method": "stories.getPeerMaxIDs", - "params": [ + "name": "community", + "type": "InputChannel" + }, { - "name": "id", - "type": "Vector" + "name": "participant", + "type": "InputPeer" } ], - "type": "Vector" - }, - { - "id": "-1519744160", - "method": "stories.getChatsToSend", - "params": [], - "type": "messages.Chats" + "type": "Bool" }, { - "id": "-1123805756", - "method": "stories.togglePeerStoriesHidden", + "id": "-125916245", + "method": "communities.getParticipantJoinedChats", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "community", + "type": "InputChannel" }, { - "name": "hidden", - "type": "Bool" + "name": "participant", + "type": "InputPeer" } ], - "type": "Bool" + "type": "communities.ParticipantJoinedChats" }, { - "id": "-1179482081", - "method": "stories.getStoryReactionsList", + "id": "-1165140171", + "method": "ephemeral.sendMessage", "params": [ { "name": "flags", "type": "#" }, { - "name": "forwards_first", - "type": "flags.2?true" + "name": "invert_media", + "type": "flags.6?true" + }, + { + "name": "welcome", + "type": "flags.7?true" + }, + { + "name": "anchor", + "type": "flags.9?true" + }, + { + "name": "noforwards", + "type": "flags.10?true" }, { "name": "peer", - "type": "InputPeer" + "type": "flags.8?InputPeer" }, { - "name": "id", - "type": "int" + "name": "receiver_id", + "type": "InputUser" }, { - "name": "reaction", - "type": "flags.0?Reaction" + "name": "query_id", + "type": "flags.0?long" }, { - "name": "offset", - "type": "flags.1?string" + "name": "message", + "type": "string" }, { - "name": "limit", - "type": "int" + "name": "entities", + "type": "flags.1?Vector" + }, + { + "name": "media", + "type": "flags.2?InputMedia" + }, + { + "name": "reply_markup", + "type": "flags.3?ReplyMarkup" + }, + { + "name": "rich_message", + "type": "flags.4?InputRichMessage" + }, + { + "name": "random_id", + "type": "long" + }, + { + "name": "reply_to", + "type": "flags.5?InputReplyTo" } ], - "type": "stories.StoryReactionsList" + "type": "Updates" }, { - "id": "187268763", - "method": "stories.togglePinnedToTop", + "id": "-1829312617", + "method": "ephemeral.deleteMessage", "params": [ + { + "name": "flags", + "type": "#" + }, { "name": "peer", - "type": "InputPeer" + "type": "flags.0?InputPeer" + }, + { + "name": "receiver_id", + "type": "InputUser" }, { "name": "id", - "type": "Vector" + "type": "int" } ], "type": "Bool" }, { - "id": "-780072697", - "method": "stories.searchPosts", + "id": "-2029718849", + "method": "ephemeral.reportMessage", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "hashtag", - "type": "flags.0?string" + "name": "peer", + "type": "InputPeer" }, { - "name": "area", - "type": "flags.1?MediaArea" + "name": "id", + "type": "int" }, { - "name": "peer", - "type": "flags.2?InputPeer" + "name": "option", + "type": "bytes" }, { - "name": "offset", + "name": "message", "type": "string" - }, - { - "name": "limit", - "type": "int" } ], - "type": "stories.FoundStories" + "type": "ReportResult" }, { - "id": "-1553754395", - "method": "stories.createAlbum", + "id": "1067738312", + "method": "ephemeral.getCallbackAnswer", "params": [ + { + "name": "flags", + "type": "#" + }, { "name": "peer", "type": "InputPeer" }, { - "name": "title", - "type": "string" + "name": "id", + "type": "int" }, { - "name": "stories", - "type": "Vector" + "name": "data", + "type": "flags.1?bytes" } ], - "type": "StoryAlbum" + "type": "messages.BotCallbackAnswer" }, { - "id": "1582455222", - "method": "stories.updateAlbum", + "id": "-811830693", + "method": "ephemeral.editMessage", "params": [ { "name": "flags", "type": "#" }, + { + "name": "invert_media", + "type": "flags.5?true" + }, + { + "name": "welcome", + "type": "flags.6?true" + }, { "name": "peer", - "type": "InputPeer" + "type": "flags.7?InputPeer" }, { - "name": "album_id", + "name": "receiver_id", + "type": "InputUser" + }, + { + "name": "id", "type": "int" }, { - "name": "title", + "name": "message", "type": "flags.0?string" }, { - "name": "delete_stories", - "type": "flags.1?Vector" + "name": "media", + "type": "flags.3?InputMedia" }, { - "name": "add_stories", - "type": "flags.2?Vector" + "name": "entities", + "type": "flags.1?Vector" }, { - "name": "order", - "type": "flags.3?Vector" + "name": "reply_markup", + "type": "flags.2?ReplyMarkup" + }, + { + "name": "rich_message", + "type": "flags.4?InputRichMessage" } ], - "type": "StoryAlbum" + "type": "Updates" }, { - "id": "-2060059687", - "method": "stories.reorderAlbums", + "id": "-394090015", + "method": "ephemeral.deleteWelcomeMessage", "params": [ { "name": "peer", "type": "InputPeer" }, { - "name": "order", - "type": "Vector" + "name": "id", + "type": "int" } ], "type": "Bool" }, { - "id": "-1925949744", - "method": "stories.deleteAlbum", + "id": "1934595873", + "method": "ephemeral.deleteAllWelcomeMessages", "params": [ { "name": "peer", "type": "InputPeer" - }, - { - "name": "album_id", - "type": "int" } ], "type": "Bool" }, { - "id": "632548039", - "method": "stories.getAlbums", + "id": "-610614899", + "method": "ephemeral.getWelcomeMessages", "params": [ { "name": "peer", @@ -45783,97 +50163,85 @@ "type": "long" } ], - "type": "stories.Albums" + "type": "ephemeral.WelcomeMessages" }, { - "id": "-1400869535", - "method": "stories.getAlbumStories", + "id": "-1921262239", + "method": "toncenter.performApiRequest", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "flags", + "type": "#" }, { - "name": "album_id", - "type": "int" + "name": "post", + "type": "flags.0?true" }, { - "name": "offset", - "type": "int" + "name": "endpoint", + "type": "string" }, { - "name": "limit", - "type": "int" + "name": "query", + "type": "flags.1?string" + }, + { + "name": "payload", + "type": "flags.2?string" } ], - "type": "stories.Stories" + "type": "toncenter.ApiResponse" }, { - "id": "-798372642", - "method": "stories.startLive", + "id": "-844143673", + "method": "toncenter.getStreamingUrl", + "params": [], + "type": "toncenter.StreamingUrl" + }, + { + "id": "-1417432262", + "method": "wallet.getState", + "params": [], + "type": "WalletState" + }, + { + "id": "1383456733", + "method": "wallet.getUserAddresses", "params": [ { "name": "flags", "type": "#" }, { - "name": "pinned", - "type": "flags.2?true" - }, - { - "name": "noforwards", - "type": "flags.4?true" - }, - { - "name": "rtmp_stream", - "type": "flags.5?true" - }, - { - "name": "peer", - "type": "InputPeer" - }, - { - "name": "caption", - "type": "flags.0?string" - }, - { - "name": "entities", - "type": "flags.1?Vector" - }, - { - "name": "privacy_rules", - "type": "Vector" - }, - { - "name": "random_id", - "type": "long" + "name": "force", + "type": "flags.0?true" }, { - "name": "messages_enabled", - "type": "flags.6?Bool" + "name": "id", + "type": "Vector" }, { - "name": "send_paid_messages_stars", - "type": "flags.7?long" + "name": "addresses", + "type": "Vector" } ], - "type": "Updates" + "type": "wallet.UserAddresses" }, { - "id": "1626764896", - "method": "premium.getBoostsList", + "id": "-1467807101", + "method": "wallet.getTransactions", "params": [ { "name": "flags", "type": "#" }, { - "name": "gifts", + "name": "inbound", "type": "flags.0?true" }, { - "name": "peer", - "type": "InputPeer" + "name": "outbound", + "type": "flags.1?true" }, { "name": "offset", @@ -45884,259 +50252,383 @@ "type": "int" } ], - "type": "premium.BoostsList" + "type": "wallet.Transactions" }, { - "id": "199719754", - "method": "premium.getMyBoosts", - "params": [], - "type": "premium.MyBoosts" + "id": "-2128811338", + "method": "wallet.getTransactionsByIDs", + "params": [ + { + "name": "id", + "type": "Vector" + } + ], + "type": "wallet.Transactions" }, { - "id": "1803396934", - "method": "premium.applyBoost", + "id": "-1497663139", + "method": "wallet.getTransactionsByMsgHash", + "params": [ + { + "name": "msg_hash", + "type": "Vector" + } + ], + "type": "wallet.Transactions" + }, + { + "id": "-1871197780", + "method": "wallet.exportSecretPhrase", "params": [ { "name": "flags", "type": "#" }, { - "name": "slots", - "type": "flags.0?Vector" + "name": "password", + "type": "flags.0?InputCheckPasswordSRP" + } + ], + "type": "wallet.SecretPhraseParts" + }, + { + "id": "-180804145", + "method": "wallet.fetchEncryptedSecretPhrasePart", + "params": [ + { + "name": "token", + "type": "string" }, { - "name": "peer", - "type": "InputPeer" + "name": "public_key", + "type": "bytes" } ], - "type": "premium.MyBoosts" + "type": "wallet.EncryptedSecretPhrasePart" }, { - "id": "70197089", - "method": "premium.getBoostsStatus", + "id": "-658034964", + "method": "wallet.replaceWallet", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "flags", + "type": "#" + }, + { + "name": "wallet", + "type": "InputWalletReplacement" + }, + { + "name": "password", + "type": "flags.0?InputCheckPasswordSRP" } ], - "type": "premium.BoostsStatus" + "type": "WalletState" }, { - "id": "965037343", - "method": "premium.getUserBoosts", + "id": "185331930", + "method": "wallet.disableBackup", "params": [ { - "name": "peer", - "type": "InputPeer" + "name": "flags", + "type": "#" }, { - "name": "user_id", - "type": "InputUser" + "name": "password", + "type": "flags.0?InputCheckPasswordSRP" + }, + { + "name": "new_public_key", + "type": "flags.1?bytes" + }, + { + "name": "proof", + "type": "flags.2?WalletOwnershipProof" } ], - "type": "premium.BoostsList" + "type": "WalletState" }, { - "id": "249313744", - "method": "smsjobs.isEligibleToJoin", + "id": "-780544876", + "method": "wallet.getBackupHolderDcs", "params": [], - "type": "smsjobs.EligibilityToJoin" + "type": "Vector" }, { - "id": "-1488007635", - "method": "smsjobs.join", - "params": [], - "type": "Bool" + "id": "1157678373", + "method": "wallet.enableBackup", + "params": [ + { + "name": "flags", + "type": "#" + }, + { + "name": "parts", + "type": "Vector" + }, + { + "name": "new_public_key", + "type": "flags.1?bytes" + }, + { + "name": "proof", + "type": "flags.2?WalletOwnershipProof" + } + ], + "type": "WalletState" }, { - "id": "-1734824589", - "method": "smsjobs.leave", + "id": "539354775", + "method": "wallet.getProofChallenge", "params": [], - "type": "Bool" + "type": "wallet.ProofChallenge" }, { - "id": "155164863", - "method": "smsjobs.updateSettings", + "id": "-639247902", + "method": "wallet.sendTransfer", "params": [ { "name": "flags", "type": "#" }, { - "name": "allow_international", - "type": "flags.0?true" + "name": "data_normal", + "type": "bytes" + }, + { + "name": "data_gasless", + "type": "flags.0?bytes" + }, + { + "name": "user_id", + "type": "InputUser" + }, + { + "name": "random_id", + "type": "long" } ], - "type": "Bool" + "type": "Updates" }, { - "id": "279353576", - "method": "smsjobs.getStatus", + "id": "1949167777", + "method": "wallet.getGaslessInfo", "params": [], - "type": "smsjobs.Status" + "type": "Updates" }, { - "id": "2005766191", - "method": "smsjobs.getSmsJob", + "id": "1763656544", + "method": "wallet.getExistingWaltBalance", + "params": [], + "type": "wallet.ExistingBalance" + }, + { + "id": "-1944915036", + "method": "wallet.getNfts", "params": [ { - "name": "job_id", + "name": "offset", "type": "string" + }, + { + "name": "limit", + "type": "int" } ], - "type": "SmsJob" + "type": "wallet.NftItems" }, { - "id": "1327415076", - "method": "smsjobs.finishJob", + "id": "-862777274", + "method": "wallet.tonConnectCreateSession", "params": [ { - "name": "flags", - "type": "#" - }, - { - "name": "job_id", + "name": "dapp_client_id", "type": "string" }, { - "name": "error", - "type": "flags.0?string" + "name": "manifest_url", + "type": "string" } ], - "type": "Bool" + "type": "TonConnectSession" }, { - "id": "-1105295942", - "method": "fragment.getCollectibleInfo", + "id": "864800540", + "method": "wallet.tonConnectRegisterKey", "params": [ { - "name": "collectible", - "type": "InputCollectible" + "name": "session_id", + "type": "long" + }, + { + "name": "client_id", + "type": "string" } ], - "type": "fragment.CollectibleInfo" + "type": "wallet.TonConnectChallenge" }, { - "id": "1252538643", - "method": "aicompose.createTone", + "id": "-1027602567", + "method": "wallet.tonConnectSubmitConnectResult", "params": [ { "name": "flags", "type": "#" }, { - "name": "display_author", + "name": "error", "type": "flags.0?true" }, { - "name": "emoji_id", + "name": "session_id", "type": "long" }, { - "name": "title", - "type": "string" + "name": "challenge_answer", + "type": "bytes" }, { - "name": "prompt", - "type": "string" + "name": "body", + "type": "bytes" + }, + { + "name": "trace_id", + "type": "flags.1?string" } ], - "type": "AiComposeTone" + "type": "Bool" }, { - "id": "-1875128487", - "method": "aicompose.updateTone", + "id": "296673381", + "method": "wallet.tonConnectGetPending", "params": [ { "name": "flags", "type": "#" }, { - "name": "tone", - "type": "InputAiComposeTone" - }, - { - "name": "display_author", - "type": "flags.0?Bool" + "name": "dapp_client_id", + "type": "flags.0?string" }, { - "name": "emoji_id", + "name": "session_id", "type": "flags.1?long" - }, - { - "name": "title", - "type": "flags.2?string" - }, - { - "name": "prompt", - "type": "flags.3?string" } ], - "type": "AiComposeTone" + "type": "wallet.TonConnectPending" }, { - "id": "394447793", - "method": "aicompose.saveTone", + "id": "1723169601", + "method": "wallet.tonConnectClaimRequest", "params": [ { - "name": "tone", - "type": "InputAiComposeTone" + "name": "flags", + "type": "#" }, { - "name": "unsave", - "type": "Bool" + "name": "declined", + "type": "flags.1?true" + }, + { + "name": "session_id", + "type": "long" + }, + { + "name": "msg_id", + "type": "int" + }, + { + "name": "app_request_id", + "type": "string" + }, + { + "name": "challenge_answer", + "type": "flags.0?bytes" } ], "type": "Bool" }, { - "id": "-583454358", - "method": "aicompose.deleteTone", + "id": "-87655108", + "method": "wallet.tonConnectSubmitResponse", "params": [ { - "name": "tone", - "type": "InputAiComposeTone" + "name": "flags", + "type": "#" + }, + { + "name": "session_id", + "type": "long" + }, + { + "name": "msg_id", + "type": "int" + }, + { + "name": "body", + "type": "bytes" + }, + { + "name": "trace_id", + "type": "flags.0?string" } ], "type": "Bool" }, { - "id": "-1293370877", - "method": "aicompose.getTone", + "id": "2002612804", + "method": "wallet.tonConnectNextEventId", "params": [ { - "name": "tone", - "type": "InputAiComposeTone" + "name": "session_id", + "type": "long" } ], - "type": "aicompose.Tones" + "type": "TonConnectNextEventId" }, { - "id": "-1412066815", - "method": "aicompose.getTones", + "id": "-700489266", + "method": "wallet.tonConnectCloseSession", "params": [ { - "name": "hash", + "name": "flags", + "type": "#" + }, + { + "name": "session_id", "type": "long" + }, + { + "name": "body", + "type": "flags.0?bytes" } ], - "type": "aicompose.Tones" + "type": "Bool" }, { - "id": "-776688876", - "method": "aicompose.getToneExample", + "id": "-1476414098", + "method": "wallet.tonConnectGetSessions", + "params": [], + "type": "wallet.TonConnectSessions" + }, + { + "id": "109382060", + "method": "wallet.setCardStickers", "params": [ { - "name": "tone", - "type": "InputAiComposeTone" + "name": "flags", + "type": "#" }, { - "name": "num", - "type": "int" + "name": "stickers", + "type": "Vector" + }, + { + "name": "bg_nft_address", + "type": "flags.0?string" } ], - "type": "AiComposeToneExample" + "type": "wallet.Card" } ] } \ No newline at end of file diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225.tl b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232.tl similarity index 86% rename from resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225.tl rename to resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232.tl index 2ad8d9c..8319b7d 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225.tl +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232.tl @@ -86,7 +86,7 @@ storage.fileMp4#b3cea0e4 = storage.FileType; storage.fileWebp#1081464c = storage.FileType; userEmpty#d3bc4b7a id:long = User; -user#31774388 flags:# self:flags.10?true contact:flags.11?true mutual_contact:flags.12?true deleted:flags.13?true bot:flags.14?true bot_chat_history:flags.15?true bot_nochats:flags.16?true verified:flags.17?true restricted:flags.18?true min:flags.20?true bot_inline_geo:flags.21?true support:flags.23?true scam:flags.24?true apply_min_photo:flags.25?true fake:flags.26?true bot_attach_menu:flags.27?true premium:flags.28?true attach_menu_enabled:flags.29?true flags2:# bot_can_edit:flags2.1?true close_friend:flags2.2?true stories_hidden:flags2.3?true stories_unavailable:flags2.4?true contact_require_premium:flags2.10?true bot_business:flags2.11?true bot_has_main_app:flags2.13?true bot_forum_view:flags2.16?true bot_forum_can_manage_topics:flags2.17?true bot_can_manage_bots:flags2.18?true bot_guestchat:flags2.19?true id:long access_hash:flags.0?long first_name:flags.1?string last_name:flags.2?string username:flags.3?string phone:flags.4?string photo:flags.5?UserProfilePhoto status:flags.6?UserStatus bot_info_version:flags.14?int restriction_reason:flags.18?Vector bot_inline_placeholder:flags.19?string lang_code:flags.22?string emoji_status:flags.30?EmojiStatus usernames:flags2.0?Vector stories_max_id:flags2.5?RecentStory color:flags2.8?PeerColor profile_color:flags2.9?PeerColor bot_active_users:flags2.12?int bot_verification_icon:flags2.14?long send_paid_messages_stars:flags2.15?long = User; +user#b1b8cc83 flags:# self:flags.10?true contact:flags.11?true mutual_contact:flags.12?true deleted:flags.13?true bot:flags.14?true bot_chat_history:flags.15?true bot_nochats:flags.16?true verified:flags.17?true restricted:flags.18?true min:flags.20?true bot_inline_geo:flags.21?true support:flags.23?true scam:flags.24?true apply_min_photo:flags.25?true fake:flags.26?true bot_attach_menu:flags.27?true premium:flags.28?true attach_menu_enabled:flags.29?true flags2:# bot_can_edit:flags2.1?true close_friend:flags2.2?true stories_hidden:flags2.3?true stories_unavailable:flags2.4?true contact_require_premium:flags2.10?true bot_business:flags2.11?true bot_has_main_app:flags2.13?true bot_forum_view:flags2.16?true bot_forum_can_manage_topics:flags2.17?true bot_can_manage_bots:flags2.18?true bot_guestchat:flags2.19?true bot_guard:flags2.20?true id:long access_hash:flags.0?long first_name:flags.1?string last_name:flags.2?string username:flags.3?string phone:flags.4?string photo:flags.5?UserProfilePhoto status:flags.6?UserStatus bot_info_version:flags.14?int restriction_reason:flags.18?Vector bot_inline_placeholder:flags.19?string lang_code:flags.22?string emoji_status:flags.30?EmojiStatus usernames:flags2.0?Vector stories_max_id:flags2.5?RecentStory color:flags2.8?PeerColor profile_color:flags2.9?PeerColor bot_active_users:flags2.12?int bot_verification_icon:flags2.14?long send_paid_messages_stars:flags2.15?long linked_community_id:flags2.21?long = User; userProfilePhotoEmpty#4f11bae1 = UserProfilePhoto; userProfilePhoto#82d1f706 flags:# has_video:flags.0?true personal:flags.2?true photo_id:long stripped_thumb:flags.1?bytes dc_id:int = UserProfilePhoto; @@ -101,11 +101,14 @@ userStatusLastMonth#65899777 flags:# by_me:flags.0?true = UserStatus; chatEmpty#29562865 id:long = Chat; chat#41cbf256 flags:# creator:flags.0?true left:flags.2?true deactivated:flags.5?true call_active:flags.23?true call_not_empty:flags.24?true noforwards:flags.25?true id:long title:string photo:ChatPhoto participants_count:int date:int version:int migrated_to:flags.6?InputChannel admin_rights:flags.14?ChatAdminRights default_banned_rights:flags.18?ChatBannedRights = Chat; chatForbidden#6592a1a7 id:long title:string = Chat; -channel#1c32b11c flags:# creator:flags.0?true left:flags.2?true broadcast:flags.5?true verified:flags.7?true megagroup:flags.8?true restricted:flags.9?true signatures:flags.11?true min:flags.12?true scam:flags.19?true has_link:flags.20?true has_geo:flags.21?true slowmode_enabled:flags.22?true call_active:flags.23?true call_not_empty:flags.24?true fake:flags.25?true gigagroup:flags.26?true noforwards:flags.27?true join_to_send:flags.28?true join_request:flags.29?true forum:flags.30?true flags2:# stories_hidden:flags2.1?true stories_hidden_min:flags2.2?true stories_unavailable:flags2.3?true signature_profiles:flags2.12?true autotranslation:flags2.15?true broadcast_messages_allowed:flags2.16?true monoforum:flags2.17?true forum_tabs:flags2.19?true id:long access_hash:flags.13?long title:string username:flags.6?string photo:ChatPhoto date:int restriction_reason:flags.9?Vector admin_rights:flags.14?ChatAdminRights banned_rights:flags.15?ChatBannedRights default_banned_rights:flags.18?ChatBannedRights participants_count:flags.17?int usernames:flags2.0?Vector stories_max_id:flags2.4?RecentStory color:flags2.7?PeerColor profile_color:flags2.8?PeerColor emoji_status:flags2.9?EmojiStatus level:flags2.10?int subscription_until_date:flags2.11?int bot_verification_icon:flags2.13?long send_paid_messages_stars:flags2.14?long linked_monoforum_id:flags2.18?long = Chat; +channel#7ad15240 flags:# creator:flags.0?true left:flags.2?true broadcast:flags.5?true verified:flags.7?true megagroup:flags.8?true restricted:flags.9?true signatures:flags.11?true min:flags.12?true scam:flags.19?true has_link:flags.20?true has_geo:flags.21?true slowmode_enabled:flags.22?true call_active:flags.23?true call_not_empty:flags.24?true fake:flags.25?true gigagroup:flags.26?true noforwards:flags.27?true join_to_send:flags.28?true join_request:flags.29?true forum:flags.30?true flags2:# stories_hidden:flags2.1?true stories_hidden_min:flags2.2?true stories_unavailable:flags2.3?true signature_profiles:flags2.12?true autotranslation:flags2.15?true broadcast_messages_allowed:flags2.16?true monoforum:flags2.17?true forum_tabs:flags2.19?true in_news:flags2.21?true id:long access_hash:flags.13?long title:string username:flags.6?string photo:ChatPhoto date:int restriction_reason:flags.9?Vector admin_rights:flags.14?ChatAdminRights banned_rights:flags.15?ChatBannedRights default_banned_rights:flags.18?ChatBannedRights participants_count:flags.17?int usernames:flags2.0?Vector stories_max_id:flags2.4?RecentStory color:flags2.7?PeerColor profile_color:flags2.8?PeerColor emoji_status:flags2.9?EmojiStatus level:flags2.10?int subscription_until_date:flags2.11?int bot_verification_icon:flags2.13?long send_paid_messages_stars:flags2.14?long linked_monoforum_id:flags2.18?long linked_community_id:flags2.20?long pinned_msg_id:flags2.22?int = Chat; channelForbidden#17d493d5 flags:# broadcast:flags.5?true megagroup:flags.8?true monoforum:flags.10?true id:long access_hash:long title:string until_date:flags.16?int = Chat; +communityForbidden#fd3cdab8 flags:# id:long access_hash:flags.13?long title:string = Chat; +community#65efe954 flags:# creator:flags.0?true left:flags.2?true min:flags.12?true flags2:# collapsed_in_dialogs:flags2.20?true id:long access_hash:flags.13?long title:string photo:ChatPhoto date:int admin_rights:flags.14?ChatAdminRights default_banned_rights:flags.18?ChatBannedRights = Chat; -chatFull#2633421b flags:# can_set_username:flags.7?true has_scheduled:flags.8?true translations_disabled:flags.19?true id:long about:string participants:ChatParticipants chat_photo:flags.2?Photo notify_settings:PeerNotifySettings exported_invite:flags.13?ExportedChatInvite bot_info:flags.3?Vector pinned_msg_id:flags.6?int folder_id:flags.11?int call:flags.12?InputGroupCall ttl_period:flags.14?int groupcall_default_join_as:flags.15?Peer theme_emoticon:flags.16?string requests_pending:flags.17?int recent_requesters:flags.17?Vector available_reactions:flags.18?ChatReactions reactions_limit:flags.20?int = ChatFull; -channelFull#e4e0b29d flags:# can_view_participants:flags.3?true can_set_username:flags.6?true can_set_stickers:flags.7?true hidden_prehistory:flags.10?true can_set_location:flags.16?true has_scheduled:flags.19?true can_view_stats:flags.20?true blocked:flags.22?true flags2:# can_delete_channel:flags2.0?true antispam:flags2.1?true participants_hidden:flags2.2?true translations_disabled:flags2.3?true stories_pinned_available:flags2.5?true view_forum_as_messages:flags2.6?true restricted_sponsored:flags2.11?true can_view_revenue:flags2.12?true paid_media_allowed:flags2.14?true can_view_stars_revenue:flags2.15?true paid_reactions_available:flags2.16?true stargifts_available:flags2.19?true paid_messages_available:flags2.20?true id:long about:string participants_count:flags.0?int admins_count:flags.1?int kicked_count:flags.2?int banned_count:flags.2?int online_count:flags.13?int read_inbox_max_id:int read_outbox_max_id:int unread_count:int chat_photo:Photo notify_settings:PeerNotifySettings exported_invite:flags.23?ExportedChatInvite bot_info:Vector migrated_from_chat_id:flags.4?long migrated_from_max_id:flags.4?int pinned_msg_id:flags.5?int stickerset:flags.8?StickerSet available_min_id:flags.9?int folder_id:flags.11?int linked_chat_id:flags.14?long location:flags.15?ChannelLocation slowmode_seconds:flags.17?int slowmode_next_send_date:flags.18?int stats_dc:flags.12?int pts:int call:flags.21?InputGroupCall ttl_period:flags.24?int pending_suggestions:flags.25?Vector groupcall_default_join_as:flags.26?Peer theme_emoticon:flags.27?string requests_pending:flags.28?int recent_requesters:flags.28?Vector default_send_as:flags.29?Peer available_reactions:flags.30?ChatReactions reactions_limit:flags2.13?int stories:flags2.4?PeerStories wallpaper:flags2.7?WallPaper boosts_applied:flags2.8?int boosts_unrestrict:flags2.9?int emojiset:flags2.10?StickerSet bot_verification:flags2.17?BotVerification stargifts_count:flags2.18?int send_paid_messages_stars:flags2.21?long main_tab:flags2.22?ProfileTab = ChatFull; +chatFull#2633421b flags:# can_set_username:flags.7?true has_scheduled:flags.8?true translations_disabled:flags.19?true has_welcome_messages:flags.21?true id:long about:string participants:ChatParticipants chat_photo:flags.2?Photo notify_settings:PeerNotifySettings exported_invite:flags.13?ExportedChatInvite bot_info:flags.3?Vector pinned_msg_id:flags.6?int folder_id:flags.11?int call:flags.12?InputGroupCall ttl_period:flags.14?int groupcall_default_join_as:flags.15?Peer theme_emoticon:flags.16?string requests_pending:flags.17?int recent_requesters:flags.17?Vector available_reactions:flags.18?ChatReactions reactions_limit:flags.20?int = ChatFull; +channelFull#c4c4dd40 flags:# can_view_participants:flags.3?true can_set_username:flags.6?true can_set_stickers:flags.7?true hidden_prehistory:flags.10?true can_set_location:flags.16?true has_scheduled:flags.19?true can_view_stats:flags.20?true blocked:flags.22?true flags2:# can_delete_channel:flags2.0?true antispam:flags2.1?true participants_hidden:flags2.2?true translations_disabled:flags2.3?true stories_pinned_available:flags2.5?true view_forum_as_messages:flags2.6?true restricted_sponsored:flags2.11?true can_view_revenue:flags2.12?true paid_media_allowed:flags2.14?true can_view_stars_revenue:flags2.15?true paid_reactions_available:flags2.16?true stargifts_available:flags2.19?true paid_messages_available:flags2.20?true has_welcome_messages:flags2.24?true id:long about:string participants_count:flags.0?int admins_count:flags.1?int kicked_count:flags.2?int banned_count:flags.2?int online_count:flags.13?int read_inbox_max_id:int read_outbox_max_id:int unread_count:int chat_photo:Photo notify_settings:PeerNotifySettings exported_invite:flags.23?ExportedChatInvite bot_info:Vector migrated_from_chat_id:flags.4?long migrated_from_max_id:flags.4?int pinned_msg_id:flags.5?int stickerset:flags.8?StickerSet available_min_id:flags.9?int folder_id:flags.11?int linked_chat_id:flags.14?long location:flags.15?ChannelLocation slowmode_seconds:flags.17?int slowmode_next_send_date:flags.18?int stats_dc:flags.12?int pts:int call:flags.21?InputGroupCall ttl_period:flags.24?int pending_suggestions:flags.25?Vector groupcall_default_join_as:flags.26?Peer theme_emoticon:flags.27?string requests_pending:flags.28?int recent_requesters:flags.28?Vector default_send_as:flags.29?Peer available_reactions:flags.30?ChatReactions reactions_limit:flags2.13?int stories:flags2.4?PeerStories wallpaper:flags2.7?WallPaper boosts_applied:flags2.8?int boosts_unrestrict:flags2.9?int emojiset:flags2.10?StickerSet bot_verification:flags2.17?BotVerification stargifts_count:flags2.18?int send_paid_messages_stars:flags2.21?long main_tab:flags2.22?ProfileTab guard_bot_id:flags2.23?long share_theme:flags2.25?ShareTheme = ChatFull; +communityFull#cbb7a507 flags:# id:long about:string chat_photo:Photo linked_peers:Vector admins_count:flags.1?int kicked_count:flags.2?int peer_link_requests_pending:flags.0?int = ChatFull; chatParticipant#38e79fde flags:# user_id:long inviter_id:long date:int rank:flags.0?string = ChatParticipant; chatParticipantCreator#e1f867b8 flags:# user_id:long rank:flags.0?string = ChatParticipant; @@ -118,7 +121,7 @@ chatPhotoEmpty#37c1011c = ChatPhoto; chatPhoto#1c6e1c11 flags:# has_video:flags.0?true photo_id:long stripped_thumb:flags.1?bytes dc_id:int = ChatPhoto; messageEmpty#90a6ca84 flags:# id:int peer_id:flags.0?Peer = Message; -message#95ef6f2b flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true post:flags.14?true from_scheduled:flags.18?true legacy:flags.19?true edit_hide:flags.21?true pinned:flags.24?true noforwards:flags.26?true invert_media:flags.27?true flags2:# offline:flags2.1?true video_processing_pending:flags2.4?true paid_suggested_post_stars:flags2.8?true paid_suggested_post_ton:flags2.9?true id:int from_id:flags.8?Peer from_boosts_applied:flags.29?int from_rank:flags2.12?string peer_id:Peer saved_peer_id:flags.28?Peer fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?long via_business_bot_id:flags2.0?long guestchat_via_from:flags2.19?Peer reply_to:flags.3?MessageReplyHeader date:int message:string media:flags.9?MessageMedia reply_markup:flags.6?ReplyMarkup entities:flags.7?Vector views:flags.10?int forwards:flags.10?int replies:flags.23?MessageReplies edit_date:flags.15?int post_author:flags.16?string grouped_id:flags.17?long reactions:flags.20?MessageReactions restriction_reason:flags.22?Vector ttl_period:flags.25?int quick_reply_shortcut_id:flags.30?int effect:flags2.2?long factcheck:flags2.3?FactCheck report_delivery_until_date:flags2.5?int paid_message_stars:flags2.6?long suggested_post:flags2.7?SuggestedPost schedule_repeat_period:flags2.10?int summary_from_language:flags2.11?string = Message; +message#7600b9d3 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true post:flags.14?true from_scheduled:flags.18?true legacy:flags.19?true edit_hide:flags.21?true pinned:flags.24?true noforwards:flags.26?true invert_media:flags.27?true flags2:# offline:flags2.1?true video_processing_pending:flags2.4?true paid_suggested_post_stars:flags2.8?true paid_suggested_post_ton:flags2.9?true id:int from_id:flags.8?Peer from_boosts_applied:flags.29?int from_rank:flags2.12?string peer_id:Peer saved_peer_id:flags.28?Peer fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?long via_business_bot_id:flags2.0?long guestchat_via_from:flags2.19?Peer reply_to:flags.3?MessageReplyHeader date:int message:string media:flags.9?MessageMedia reply_markup:flags.6?ReplyMarkup entities:flags.7?Vector views:flags.10?int forwards:flags.10?int replies:flags.23?MessageReplies edit_date:flags.15?int post_author:flags.16?string grouped_id:flags.17?long reactions:flags.20?MessageReactions restriction_reason:flags.22?Vector ttl_period:flags.25?int quick_reply_shortcut_id:flags.30?int effect:flags2.2?long factcheck:flags2.3?FactCheck report_delivery_until_date:flags2.5?int paid_message_stars:flags2.6?long suggested_post:flags2.7?SuggestedPost schedule_repeat_period:flags2.10?int summary_from_language:flags2.11?string rich_message:flags2.13?RichMessage = Message; messageService#7a800e0a flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true reactions_are_possible:flags.9?true silent:flags.13?true post:flags.14?true legacy:flags.19?true id:int from_id:flags.8?Peer peer_id:Peer saved_peer_id:flags.28?Peer reply_to:flags.3?MessageReplyHeader date:int action:MessageAction reactions:flags.20?MessageReactions ttl_period:flags.25?int = Message; messageMediaEmpty#3ded6320 = MessageMedia; @@ -188,7 +191,7 @@ messageActionPaymentRefunded#41b3e202 flags:# peer:Peer currency:string total_am messageActionGiftStars#45d5b021 flags:# currency:string amount:long stars:long crypto_currency:flags.0?string crypto_amount:flags.0?long transaction_id:flags.1?string = MessageAction; messageActionPrizeStars#b00c47a2 flags:# unclaimed:flags.0?true stars:long transaction_id:string boost_peer:Peer giveaway_msg_id:int = MessageAction; messageActionStarGift#ea2c31d3 flags:# name_hidden:flags.0?true saved:flags.2?true converted:flags.3?true upgraded:flags.5?true refunded:flags.9?true can_upgrade:flags.10?true prepaid_upgrade:flags.13?true upgrade_separate:flags.16?true auction_acquired:flags.17?true gift:StarGift message:flags.1?TextWithEntities convert_stars:flags.4?long upgrade_msg_id:flags.5?int upgrade_stars:flags.8?long from_id:flags.11?Peer peer:flags.12?Peer saved_id:flags.12?long prepaid_upgrade_hash:flags.14?string gift_msg_id:flags.15?int to_id:flags.18?Peer gift_num:flags.19?int = MessageAction; -messageActionStarGiftUnique#e6c31522 flags:# upgrade:flags.0?true transferred:flags.1?true saved:flags.2?true refunded:flags.5?true prepaid_upgrade:flags.11?true assigned:flags.13?true from_offer:flags.14?true craft:flags.16?true gift:StarGift can_export_at:flags.3?int transfer_stars:flags.4?long from_id:flags.6?Peer peer:flags.7?Peer saved_id:flags.7?long resale_amount:flags.8?StarsAmount can_transfer_at:flags.9?int can_resell_at:flags.10?int drop_original_details_stars:flags.12?long can_craft_at:flags.15?int = MessageAction; +messageActionStarGiftUnique#7e1c1187 flags:# upgrade:flags.0?true transferred:flags.1?true saved:flags.2?true refunded:flags.5?true prepaid_upgrade:flags.11?true assigned:flags.13?true from_offer:flags.14?true craft:flags.16?true name_hidden:flags.17?true gift:StarGift can_export_at:flags.3?int transfer_stars:flags.4?long from_id:flags.6?Peer peer:flags.7?Peer saved_id:flags.7?long resale_amount:flags.8?StarsAmount can_transfer_at:flags.9?int can_resell_at:flags.10?int drop_original_details_stars:flags.12?long can_craft_at:flags.15?int message:flags.18?TextWithEntities = MessageAction; messageActionPaidMessagesRefunded#ac1f1fcd count:int stars:long = MessageAction; messageActionPaidMessagesPrice#84b88578 flags:# broadcast_messages_allowed:flags.0?true stars:long = MessageAction; messageActionConferenceCall#2ffe2f7a flags:# missed:flags.0?true active:flags.1?true video:flags.4?true call_id:long duration:flags.2?int other_participants:flags.3?Vector = MessageAction; @@ -208,9 +211,15 @@ messageActionNoForwardsRequest#3e2793ba flags:# expired:flags.0?true prev_value: messageActionPollAppendAnswer#9da1cd6c answer:PollAnswer = MessageAction; messageActionPollDeleteAnswer#399674dc answer:PollAnswer = MessageAction; messageActionManagedBotCreated#16605e3e bot_id:long = MessageAction; +messageActionChangeCommunity#5d20bae8 flags:# community_id:flags.0?long = MessageAction; +messageActionChatJoinedViaCommunity#4a8bfe80 community_id:long = MessageAction; +messageActionGramTransfer#9329ea33 flags:# comment_encrypted:flags.1?true amount:long peer_address:string transaction_id:string comment:flags.0?string = MessageAction; +messageActionWalletTonConnectRequest#69b8c4bf flags:# accepted:flags.2?true declined:flags.3?true session_id:long expires:int topic:flags.0?string trace_id:flags.1?string dapp_name:flags.4?string = MessageAction; +messageActionNoPaidMessagesTokenUsed#c1d2f1c6 = MessageAction; dialog#fc89f7f3 flags:# pinned:flags.2?true unread_mark:flags.3?true view_forum_as_messages:flags.6?true peer:Peer top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int unread_reactions_count:int unread_poll_votes_count:int notify_settings:PeerNotifySettings pts:flags.0?int draft:flags.1?DraftMessage folder_id:flags.4?int ttl_period:flags.5?int = Dialog; dialogFolder#71bd134c flags:# pinned:flags.2?true folder:Folder peer:Peer top_message:int unread_muted_peers_count:int unread_unmuted_peers_count:int unread_muted_messages_count:int unread_unmuted_messages_count:int = Dialog; +dialogCommunity#f78a0973 flags:# pinned:flags.2?true community_id:long notify_settings:PeerNotifySettings = Dialog; photoEmpty#2331b22d id:long = Photo; photo#fb197a65 flags:# has_stickers:flags.0?true id:long access_hash:long file_reference:bytes date:int sizes:Vector video_sizes:flags.1?Vector dc_id:int = Photo; @@ -239,6 +248,7 @@ inputNotifyUsers#193b4417 = InputNotifyPeer; inputNotifyChats#4a95e84e = InputNotifyPeer; inputNotifyBroadcasts#b1db7c7e = InputNotifyPeer; inputNotifyForumTopic#5c467992 peer:InputPeer top_msg_id:int = InputNotifyPeer; +inputNotifyCommunity#27bb1adc community:InputChannel = InputNotifyPeer; inputPeerNotifySettings#cacb6ae2 flags:# show_previews:flags.0?Bool silent:flags.1?Bool mute_until:flags.2?int sound:flags.3?NotificationSound stories_muted:flags.6?Bool stories_hide_sender:flags.7?Bool stories_sound:flags.8?NotificationSound = InputPeerNotifySettings; @@ -260,7 +270,7 @@ inputReportReasonFake#f5ddd6e7 = ReportReason; inputReportReasonIllegalDrugs#a8eb2be = ReportReason; inputReportReasonPersonalDetails#9ec7863d = ReportReason; -userFull#6cbe645 flags:# blocked:flags.0?true phone_calls_available:flags.4?true phone_calls_private:flags.5?true can_pin_message:flags.7?true has_scheduled:flags.12?true video_calls_available:flags.13?true voice_messages_forbidden:flags.20?true translations_disabled:flags.23?true stories_pinned_available:flags.26?true blocked_my_stories_from:flags.27?true wallpaper_overridden:flags.28?true contact_require_premium:flags.29?true read_dates_private:flags.30?true flags2:# sponsored_enabled:flags2.7?true can_view_revenue:flags2.9?true bot_can_manage_emoji_status:flags2.10?true display_gifts_button:flags2.16?true noforwards_my_enabled:flags2.23?true noforwards_peer_enabled:flags2.24?true unofficial_security_risk:flags2.26?true id:long about:flags.1?string settings:PeerSettings personal_photo:flags.21?Photo profile_photo:flags.2?Photo fallback_photo:flags.22?Photo notify_settings:PeerNotifySettings bot_info:flags.3?BotInfo pinned_msg_id:flags.6?int common_chats_count:int folder_id:flags.11?int ttl_period:flags.14?int theme:flags.15?ChatTheme private_forward_name:flags.16?string bot_group_admin_rights:flags.17?ChatAdminRights bot_broadcast_admin_rights:flags.18?ChatAdminRights wallpaper:flags.24?WallPaper stories:flags.25?PeerStories business_work_hours:flags2.0?BusinessWorkHours business_location:flags2.1?BusinessLocation business_greeting_message:flags2.2?BusinessGreetingMessage business_away_message:flags2.3?BusinessAwayMessage business_intro:flags2.4?BusinessIntro birthday:flags2.5?Birthday personal_channel_id:flags2.6?long personal_channel_message:flags2.6?int stargifts_count:flags2.8?int starref_program:flags2.11?StarRefProgram bot_verification:flags2.12?BotVerification send_paid_messages_stars:flags2.14?long disallowed_gifts:flags2.15?DisallowedGiftsSettings stars_rating:flags2.17?StarsRating stars_my_pending_rating:flags2.18?StarsRating stars_my_pending_rating_date:flags2.18?int main_tab:flags2.20?ProfileTab saved_music:flags2.21?Document note:flags2.22?TextWithEntities bot_manager_id:flags2.25?long = UserFull; +userFull#b90c2afd flags:# blocked:flags.0?true phone_calls_available:flags.4?true phone_calls_private:flags.5?true can_pin_message:flags.7?true has_scheduled:flags.12?true video_calls_available:flags.13?true voice_messages_forbidden:flags.20?true translations_disabled:flags.23?true stories_pinned_available:flags.26?true blocked_my_stories_from:flags.27?true wallpaper_overridden:flags.28?true contact_require_premium:flags.29?true read_dates_private:flags.30?true flags2:# sponsored_enabled:flags2.7?true can_view_revenue:flags2.9?true bot_can_manage_emoji_status:flags2.10?true display_gifts_button:flags2.16?true noforwards_my_enabled:flags2.23?true noforwards_peer_enabled:flags2.24?true unofficial_security_risk:flags2.26?true id:long about:flags.1?string settings:PeerSettings personal_photo:flags.21?Photo profile_photo:flags.2?Photo fallback_photo:flags.22?Photo notify_settings:PeerNotifySettings bot_info:flags.3?BotInfo pinned_msg_id:flags.6?int common_chats_count:int folder_id:flags.11?int ttl_period:flags.14?int theme:flags.15?ChatTheme private_forward_name:flags.16?string bot_group_admin_rights:flags.17?ChatAdminRights bot_broadcast_admin_rights:flags.18?ChatAdminRights wallpaper:flags.24?WallPaper stories:flags.25?PeerStories business_work_hours:flags2.0?BusinessWorkHours business_location:flags2.1?BusinessLocation business_greeting_message:flags2.2?BusinessGreetingMessage business_away_message:flags2.3?BusinessAwayMessage business_intro:flags2.4?BusinessIntro birthday:flags2.5?Birthday personal_channel_id:flags2.6?long personal_channel_message:flags2.6?int stargifts_count:flags2.8?int starref_program:flags2.11?StarRefProgram bot_verification:flags2.12?BotVerification send_paid_messages_stars:flags2.14?long disallowed_gifts:flags2.15?DisallowedGiftsSettings stars_rating:flags2.17?StarsRating stars_my_pending_rating:flags2.18?StarsRating stars_my_pending_rating_date:flags2.18?int main_tab:flags2.20?ProfileTab saved_music:flags2.21?Document note:flags2.22?TextWithEntities bot_manager_id:flags2.25?long wallet_card:flags2.19?wallet.Card share_theme:flags2.27?ShareTheme = UserFull; contact#145ade0b user_id:long mutual:Bool = Contact; @@ -405,7 +415,7 @@ updateBotStopped#c4870a49 user_id:long date:int stopped:Bool qts:int = Update; updateGroupCallConnection#b783982 flags:# presentation:flags.0?true params:DataJSON = Update; updateBotCommands#4d712f2e peer:Peer bot_id:long commands:Vector = Update; updatePendingJoinRequests#7063c3db peer:Peer requests_pending:int recent_requesters:Vector = Update; -updateBotChatInviteRequester#11dfa986 peer:Peer date:int user_id:long about:string invite:ExportedChatInvite qts:int = Update; +updateBotChatInviteRequester#7cb34d79 flags:# peer:Peer date:int user_id:long about:string invite:ExportedChatInvite qts:int query_id:flags.0?long = Update; updateMessageReactions#1e297bfa flags:# peer:Peer msg_id:int top_msg_id:flags.0?int saved_peer_id:flags.1?Peer reactions:MessageReactions = Update; updateAttachMenuBots#17b7a20b = Update; updateWebViewResultSent#1592b79d query_id:long = Update; @@ -467,6 +477,20 @@ updateChatParticipantRank#bd8367b9 chat_id:long user_id:long rank:string version updateManagedBot#4880ed9a user_id:long bot_id:long qts:int = Update; updateBotGuestChatQuery#cdd4093d flags:# query_id:long message:Message reference_messages:flags.0?Vector qts:int = Update; updateAiComposeTones#8c0f91fb = Update; +updateJoinChatWebViewDecision#bdac7e70 peer:Peer query_id:long result:JoinChatBotResult = Update; +updateNewBotConnection#b22083a6 flags:# confirmed:flags.0?true bot_id:long date:flags.1?int device:flags.1?string location:flags.1?string = Update; +updateWebBrowserSettings#c39a2ade flags:# open_external_browser:flags.0?true display_close_button:flags.1?true = Update; +updateWebBrowserException#140502d1 flags:# delete:flags.1?true open_external_browser:flags.0?Bool exception:WebDomainException = Update; +updateNewEphemeralMessage#20bcbba1 message:EphemeralMessage = Update; +updateDeleteEphemeralMessages#56dbfcf8 peer:Peer ids:Vector = Update; +updateEditEphemeralMessage#4bbb8f01 message:EphemeralMessage = Update; +updateEphemeralBotCallbackQuery#7c1079d6 flags:# query_id:long user_id:long peer:flags.0?Peer msg_id:int data:bytes chat_instance:flags.1?long message:EphemeralMessage = Update; +updateBotStarsSubscription#6c0d8e23 flags:# canceled:flags.0?true payment_failed:flags.1?true restored:flags.2?true user_id:long payload:bytes qts:int = Update; +updateWalletState#6ac3f2aa state:WalletState = Update; +updateSentWalletTransaction#b1434d4a flags:# gasless:flags.0?true msg_hash:string transaction:flags.1?WalletTransaction = Update; +updateWalletGaslessInfo#a8ae1cac flags:# available:flags.0?true left:int reset_at:int min_amount:long relayer_address:string = Update; +updateWalletTonConnectSession#50a38e0e session:TonConnectSession = Update; +updateWalletTonConnectPendingDisconnect#d1ee8199 session_ids:Vector = Update; updates.state#a56c2a3e pts:int qts:int date:int seq:int unread_count:int = updates.State; @@ -540,6 +564,7 @@ notifyUsers#b4c83b4c = NotifyPeer; notifyChats#c007cec3 = NotifyPeer; notifyBroadcasts#d612e8ef = NotifyPeer; notifyForumTopic#226e6308 peer:Peer top_msg_id:int = NotifyPeer; +notifyCommunity#be376999 community_id:long = NotifyPeer; sendMessageTypingAction#16bf744e = SendMessageAction; sendMessageCancelAction#fd5ec8f5 = SendMessageAction; @@ -559,7 +584,10 @@ sendMessageHistoryImportAction#dbda9246 progress:int = SendMessageAction; sendMessageChooseStickerAction#b05ac6b1 = SendMessageAction; sendMessageEmojiInteraction#25972bcb emoticon:string msg_id:int interaction:DataJSON = SendMessageAction; sendMessageEmojiInteractionSeen#b665902e emoticon:string = SendMessageAction; -sendMessageTextDraftAction#376d975c random_id:long text:TextWithEntities = SendMessageAction; +sendMessageTextDraftAction#3630b85a flags:# can_stop:flags.0?true keep_on_stop:flags.1?true random_id:long text:TextWithEntities = SendMessageAction; +inputSendMessageRichMessageDraftAction#a937c7be flags:# can_stop:flags.0?true keep_on_stop:flags.1?true random_id:long rich_message:InputRichMessage = SendMessageAction; +sendMessageRichMessageDraftAction#52564893 flags:# can_stop:flags.0?true keep_on_stop:flags.1?true random_id:long rich_message:RichMessage = SendMessageAction; +sendMessageStopDraftAction#fbf902b0 random_id:long = SendMessageAction; contacts.found#b3134d9d my_results:Vector results:Vector chats:Vector users:Vector = contacts.Found; @@ -686,35 +714,18 @@ stickerSet#2dd14edc flags:# archived:flags.1?true official:flags.2?true masks:fl messages.stickerSet#6e153f16 set:StickerSet packs:Vector keywords:Vector documents:Vector = messages.StickerSet; messages.stickerSetNotModified#d3f924eb = messages.StickerSet; -botCommand#c27ac8c7 command:string description:string = BotCommand; +botCommand#9852d6d2 flags:# ephemeral:flags.0?true command:string description:string = BotCommand; botInfo#4d8a0299 flags:# has_preview_medias:flags.6?true user_id:flags.0?long description:flags.1?string description_photo:flags.4?Photo description_document:flags.5?Document commands:flags.2?Vector menu_button:flags.3?BotMenuButton privacy_policy_url:flags.7?string app_settings:flags.8?BotAppSettings verifier_settings:flags.9?BotVerifierSettings = BotInfo; -keyboardButton#7d170cff flags:# style:flags.10?KeyboardButtonStyle text:string = KeyboardButton; -keyboardButtonUrl#d80c25ec flags:# style:flags.10?KeyboardButtonStyle text:string url:string = KeyboardButton; -keyboardButtonCallback#e62bc960 flags:# requires_password:flags.0?true style:flags.10?KeyboardButtonStyle text:string data:bytes = KeyboardButton; -keyboardButtonRequestPhone#417efd8f flags:# style:flags.10?KeyboardButtonStyle text:string = KeyboardButton; -keyboardButtonRequestGeoLocation#aa40f94d flags:# style:flags.10?KeyboardButtonStyle text:string = KeyboardButton; -keyboardButtonSwitchInline#991399fc flags:# same_peer:flags.0?true style:flags.10?KeyboardButtonStyle text:string query:string peer_types:flags.1?Vector = KeyboardButton; -keyboardButtonGame#89c590f9 flags:# style:flags.10?KeyboardButtonStyle text:string = KeyboardButton; -keyboardButtonBuy#3fa53905 flags:# style:flags.10?KeyboardButtonStyle text:string = KeyboardButton; -keyboardButtonUrlAuth#f51006f9 flags:# style:flags.10?KeyboardButtonStyle text:string fwd_text:flags.0?string url:string button_id:int = KeyboardButton; -inputKeyboardButtonUrlAuth#68013e72 flags:# request_write_access:flags.0?true style:flags.10?KeyboardButtonStyle text:string fwd_text:flags.1?string url:string bot:InputUser = KeyboardButton; -keyboardButtonRequestPoll#7a11d782 flags:# style:flags.10?KeyboardButtonStyle quiz:flags.0?Bool text:string = KeyboardButton; -inputKeyboardButtonUserProfile#7d5e07c7 flags:# style:flags.10?KeyboardButtonStyle text:string user_id:InputUser = KeyboardButton; -keyboardButtonUserProfile#c0fd5d09 flags:# style:flags.10?KeyboardButtonStyle text:string user_id:long = KeyboardButton; -keyboardButtonWebView#e846b1a0 flags:# style:flags.10?KeyboardButtonStyle text:string url:string = KeyboardButton; -keyboardButtonSimpleWebView#e15c4370 flags:# style:flags.10?KeyboardButtonStyle text:string url:string = KeyboardButton; -keyboardButtonRequestPeer#5b0f15f5 flags:# style:flags.10?KeyboardButtonStyle text:string button_id:int peer_type:RequestPeerType max_quantity:int = KeyboardButton; -inputKeyboardButtonRequestPeer#2b78156 flags:# name_requested:flags.0?true username_requested:flags.1?true photo_requested:flags.2?true style:flags.10?KeyboardButtonStyle text:string button_id:int peer_type:RequestPeerType max_quantity:int = KeyboardButton; -keyboardButtonCopy#bcc4af10 flags:# style:flags.10?KeyboardButtonStyle text:string copy_text:string = KeyboardButton; +keyboardButton#2f67a72f flags:# style:flags.10?KeyboardButtonStyle text:string type:ButtonType = KeyboardButton; keyboardButtonRow#77608b83 buttons:Vector = KeyboardButtonRow; replyKeyboardHide#a03e5b85 flags:# selective:flags.2?true = ReplyMarkup; replyKeyboardForceReply#86b40b08 flags:# single_use:flags.1?true selective:flags.2?true placeholder:flags.3?string = ReplyMarkup; -replyKeyboardMarkup#85dd99d1 flags:# resize:flags.0?true single_use:flags.1?true selective:flags.2?true persistent:flags.4?true rows:Vector placeholder:flags.3?string = ReplyMarkup; -replyInlineMarkup#48a30254 rows:Vector = ReplyMarkup; +replyKeyboardMarkup#85dd99d1 flags:# resize:flags.0?true single_use:flags.1?true selective:flags.2?true persistent:flags.4?true force_reply:flags.5?true rows:Vector placeholder:flags.3?string = ReplyMarkup; +replyInlineMarkup#b2b15770 flags:# force_reply:flags.5?true rows:Vector = ReplyMarkup; messageEntityUnknown#bb92ba95 offset:int length:int = MessageEntity; messageEntityMention#fa04579d offset:int length:int = MessageEntity; @@ -741,6 +752,7 @@ messageEntityFormattedDate#904ac7c7 flags:# relative:flags.0?true short_time:fla messageEntityDiffInsert#71777116 offset:int length:int = MessageEntity; messageEntityDiffReplace#c6c1e5a7 offset:int length:int old_text:string = MessageEntity; messageEntityDiffDelete#652c1c5 offset:int length:int = MessageEntity; +messageEntityTonAddress#fdabbfcd offset:int length:int = MessageEntity; inputChannelEmpty#ee8c1e86 = InputChannel; inputChannel#f35aec28 channel_id:long access_hash:long = InputChannel; @@ -791,6 +803,7 @@ inputBotInlineMessageMediaContact#a6edbffd flags:# phone_number:string first_nam inputBotInlineMessageGame#4b425864 flags:# reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage; inputBotInlineMessageMediaInvoice#d7e78225 flags:# title:string description:string photo:flags.0?InputWebDocument invoice:Invoice payload:bytes provider:string provider_data:DataJSON reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage; inputBotInlineMessageMediaWebPage#bddcc510 flags:# invert_media:flags.3?true force_large_media:flags.4?true force_small_media:flags.5?true optional:flags.6?true message:string entities:flags.1?Vector url:string reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage; +inputBotInlineMessageRichMessage#b43df56c flags:# reply_markup:flags.2?ReplyMarkup rich_message:InputRichMessage = InputBotInlineMessage; inputBotInlineResult#88bf9319 flags:# id:string type:string title:flags.1?string description:flags.2?string url:flags.3?string thumb:flags.4?InputWebDocument content:flags.5?InputWebDocument send_message:InputBotInlineMessage = InputBotInlineResult; inputBotInlineResultPhoto#a8d864a7 id:string type:string photo:InputPhoto send_message:InputBotInlineMessage = InputBotInlineResult; @@ -804,6 +817,7 @@ botInlineMessageMediaVenue#8a86659c flags:# geo:GeoPoint title:string address:st botInlineMessageMediaContact#18d1cdc2 flags:# phone_number:string first_name:string last_name:string vcard:string reply_markup:flags.2?ReplyMarkup = BotInlineMessage; botInlineMessageMediaInvoice#354a9b09 flags:# shipping_address_requested:flags.1?true test:flags.3?true title:string description:string photo:flags.0?WebDocument currency:string total_amount:long reply_markup:flags.2?ReplyMarkup = BotInlineMessage; botInlineMessageMediaWebPage#809ad9a6 flags:# invert_media:flags.3?true force_large_media:flags.4?true force_small_media:flags.5?true manual:flags.7?true safe:flags.8?true message:string entities:flags.1?Vector url:string reply_markup:flags.2?ReplyMarkup = BotInlineMessage; +botInlineMessageRichMessage#a617e7b flags:# reply_markup:flags.2?ReplyMarkup rich_message:RichMessage = BotInlineMessage; botInlineResult#11965f3a flags:# id:string type:string title:flags.1?string description:flags.2?string url:flags.3?string thumb:flags.4?WebDocument content:flags.5?WebDocument send_message:BotInlineMessage = BotInlineResult; botInlineMediaResult#17db940b flags:# id:string type:string photo:flags.0?Photo document:flags.1?Document title:flags.2?string description:flags.3?string send_message:BotInlineMessage = BotInlineResult; @@ -863,7 +877,7 @@ contacts.topPeers#70b772a8 categories:Vector chats:Vector< contacts.topPeersDisabled#b52c939d = contacts.TopPeers; draftMessageEmpty#1b0c841a flags:# date:flags.0?int = DraftMessage; -draftMessage#96eaa5eb flags:# no_webpage:flags.1?true invert_media:flags.6?true reply_to:flags.4?InputReplyTo message:string entities:flags.3?Vector media:flags.5?InputMedia date:int effect:flags.7?long suggested_post:flags.8?SuggestedPost = DraftMessage; +draftMessage#60fe3294 flags:# no_webpage:flags.1?true invert_media:flags.6?true reply_to:flags.4?InputReplyTo message:string entities:flags.3?Vector media:flags.5?InputMedia date:int effect:flags.7?long suggested_post:flags.8?SuggestedPost rich_message:flags.9?RichMessage = DraftMessage; messages.featuredStickersNotModified#c6dc0c66 count:int = messages.FeaturedStickers; messages.featuredStickers#be382906 flags:# premium:flags.0?true hash:long count:int sets:Vector unread:Vector = messages.FeaturedStickers; @@ -911,6 +925,22 @@ textMarked#34b8621 text:RichText = RichText; textPhone#1ccb966a text:RichText phone:string = RichText; textImage#81ccf4f document_id:long w:int h:int = RichText; textAnchor#35553762 text:RichText name:string = RichText; +textMath#9d2eac97 source:string = RichText; +textCustomEmoji#a26156c0 document_id:long alt:string = RichText; +textSpoiler#4c2a5d62 text:RichText = RichText; +textMention#cd24cf44 text:RichText = RichText; +textHashtag#519524ea text:RichText = RichText; +textBotCommand#2ff29d3 text:RichText = RichText; +textCashtag#7b9e1801 text:RichText = RichText; +textAutoUrl#ac6a83aa text:RichText = RichText; +textAutoEmail#c556a45d text:RichText = RichText; +textAutoPhone#24c26789 text:RichText = RichText; +textBankCard#b956812d text:RichText = RichText; +textMentionName#1a9fbfc text:RichText user_id:long = RichText; +textDate#a5b45e2b flags:# relative:flags.0?true short_time:flags.1?true long_time:flags.2?true short_date:flags.3?true long_date:flags.4?true day_of_week:flags.5?true text:RichText date:int = RichText; +textDiff#9686cb50 text:RichText old_text:RichText = RichText; +textButton#afc79cd6 flags:# text:RichText type:InlineButtonType style:flags.0?RichButtonStyle = RichText; +textTonAddress#3cd2a36a text:RichText = RichText; pageBlockUnsupported#13567e8a = PageBlock; pageBlockTitle#70abc3fd text:RichText = PageBlock; @@ -924,10 +954,10 @@ pageBlockFooter#48870999 text:RichText = PageBlock; pageBlockDivider#db20b188 = PageBlock; pageBlockAnchor#ce0d37b0 name:string = PageBlock; pageBlockList#e4e88011 items:Vector = PageBlock; -pageBlockBlockquote#263d7c26 text:RichText caption:RichText = PageBlock; +pageBlockBlockquote#66d1670b flags:# collapsed:flags.0?true text:RichText caption:RichText = PageBlock; pageBlockPullquote#4f4456d3 text:RichText caption:RichText = PageBlock; -pageBlockPhoto#1759c560 flags:# photo_id:long caption:PageCaption url:flags.0?string webpage_id:flags.0?long = PageBlock; -pageBlockVideo#7c8fe7b6 flags:# autoplay:flags.0?true loop:flags.1?true video_id:long caption:PageCaption = PageBlock; +pageBlockPhoto#1759c560 flags:# spoiler:flags.1?true photo_id:long caption:PageCaption url:flags.0?string webpage_id:flags.0?long = PageBlock; +pageBlockVideo#7c8fe7b6 flags:# autoplay:flags.0?true loop:flags.1?true spoiler:flags.2?true video_id:long caption:PageCaption = PageBlock; pageBlockCover#39f23300 cover:PageBlock = PageBlock; pageBlockEmbed#a8718dc5 flags:# full_width:flags.0?true allow_scrolling:flags.3?true url:flags.1?string html:flags.2?string poster_photo_id:flags.4?long w:flags.5?int h:flags.5?int caption:PageCaption = PageBlock; pageBlockEmbedPost#f259a80b url:string webpage_id:long author_photo_id:long author:string date:int blocks:Vector caption:PageCaption = PageBlock; @@ -936,11 +966,23 @@ pageBlockSlideshow#31f9590 items:Vector caption:PageCaption = PageBlo pageBlockChannel#ef1751b5 channel:Chat = PageBlock; pageBlockAudio#804361ea audio_id:long caption:PageCaption = PageBlock; pageBlockKicker#1e148390 text:RichText = PageBlock; -pageBlockTable#bf4dea82 flags:# bordered:flags.0?true striped:flags.1?true title:RichText rows:Vector = PageBlock; -pageBlockOrderedList#9a8ae1e1 items:Vector = PageBlock; +pageBlockTable#bf4dea82 flags:# bordered:flags.0?true striped:flags.1?true compact:flags.2?true title:RichText rows:Vector = PageBlock; +pageBlockOrderedList#1fd6f6c1 flags:# reversed:flags.2?true items:Vector start:flags.0?int type:flags.1?string = PageBlock; pageBlockDetails#76768bed flags:# open:flags.0?true blocks:Vector title:RichText = PageBlock; pageBlockRelatedArticles#16115a96 title:RichText articles:Vector = PageBlock; pageBlockMap#a44f3ef6 geo:GeoPoint zoom:int w:int h:int caption:PageCaption = PageBlock; +pageBlockHeading1#baff072f text:RichText = PageBlock; +pageBlockHeading2#96b2aec text:RichText = PageBlock; +pageBlockHeading3#67e731ad text:RichText = PageBlock; +pageBlockHeading4#b532772b text:RichText = PageBlock; +pageBlockHeading5#dbbe6c6a text:RichText = PageBlock; +pageBlockHeading6#682a41a9 text:RichText = PageBlock; +pageBlockMath#59080c20 source:string = PageBlock; +pageBlockThinking#3c29a3e2 text:RichText = PageBlock; +inputPageBlockMap#574b617f geo:InputGeoPoint zoom:int w:int h:int caption:PageCaption = PageBlock; +pageBlockBlockquoteBlocks#e6e47c4 blocks:Vector caption:RichText = PageBlock; +pageBlockButtonRow#6d640318 flags:# align_left:flags.0?true align_center:flags.1?true align_right:flags.2?true buttons:Vector = PageBlock; +pageBlockDocument#38fa3ba3 document_id:long caption:PageCaption = PageBlock; phoneCallDiscardReasonMissed#85e42301 = PhoneCallDiscardReason; phoneCallDiscardReasonDisconnect#e095c1a0 = PhoneCallDiscardReason; @@ -1114,9 +1156,11 @@ inputMessageCallbackQuery#acfa1a7e id:int query_id:long = InputMessage; inputDialogPeer#fcaafeb7 peer:InputPeer = InputDialogPeer; inputDialogPeerFolder#64600527 folder_id:int = InputDialogPeer; +inputDialogPeerCommunity#69ef72c4 community:InputChannel = InputDialogPeer; dialogPeer#e56dbf05 peer:Peer = DialogPeer; dialogPeerFolder#514519e2 folder_id:int = DialogPeer; +dialogPeerCommunity#2f65c8e4 community_id:long = DialogPeer; messages.foundStickerSetsNotModified#d54b65d = messages.FoundStickerSets; messages.foundStickerSets#8af09dd2 hash:long sets:Vector = messages.FoundStickerSets; @@ -1217,11 +1261,11 @@ pageTableRow#e0c0c5e5 cells:Vector = PageTableRow; pageCaption#6f747657 text:RichText credit:RichText = PageCaption; -pageListItemText#b92fb6cd text:RichText = PageListItem; -pageListItemBlocks#25e073fc blocks:Vector = PageListItem; +pageListItemText#2f58683c flags:# checkbox:flags.0?true checked:flags.1?true text:RichText = PageListItem; +pageListItemBlocks#63ca67aa flags:# checkbox:flags.0?true checked:flags.1?true blocks:Vector = PageListItem; -pageListOrderedItemText#5e068047 num:string text:RichText = PageListOrderedItem; -pageListOrderedItemBlocks#98dd8936 num:string blocks:Vector = PageListOrderedItem; +pageListOrderedItemText#15031189 flags:# checkbox:flags.0?true checked:flags.1?true num:flags.2?string text:RichText value:flags.3?int type:flags.4?string = PageListOrderedItem; +pageListOrderedItemBlocks#8ff2d5f0 flags:# checkbox:flags.0?true checked:flags.1?true num:flags.2?string blocks:Vector value:flags.3?int type:flags.4?string = PageListOrderedItem; pageRelatedArticle#b390dc08 flags:# url:string webpage_id:long title:flags.0?string description:flags.1?string photo_id:flags.2?long author:flags.3?string published_date:flags.4?int = PageRelatedArticle; @@ -1245,9 +1289,9 @@ chatOnlines#f041e250 onlines:int = ChatOnlines; statsURL#47a971e0 url:string = StatsURL; -chatAdminRights#5fb224d5 flags:# change_info:flags.0?true post_messages:flags.1?true edit_messages:flags.2?true delete_messages:flags.3?true ban_users:flags.4?true invite_users:flags.5?true pin_messages:flags.7?true add_admins:flags.9?true anonymous:flags.10?true manage_call:flags.11?true other:flags.12?true manage_topics:flags.13?true post_stories:flags.14?true edit_stories:flags.15?true delete_stories:flags.16?true manage_direct_messages:flags.17?true manage_ranks:flags.18?true = ChatAdminRights; +chatAdminRights#5fb224d5 flags:# change_info:flags.0?true post_messages:flags.1?true edit_messages:flags.2?true delete_messages:flags.3?true ban_users:flags.4?true invite_users:flags.5?true pin_messages:flags.7?true add_admins:flags.9?true anonymous:flags.10?true manage_call:flags.11?true other:flags.12?true manage_topics:flags.13?true post_stories:flags.14?true edit_stories:flags.15?true delete_stories:flags.16?true manage_direct_messages:flags.17?true manage_ranks:flags.18?true manage_linked_peers:flags.19?true manage_welcome_messages:flags.20?true = ChatAdminRights; -chatBannedRights#9f120418 flags:# view_messages:flags.0?true send_messages:flags.1?true send_media:flags.2?true send_stickers:flags.3?true send_gifs:flags.4?true send_games:flags.5?true send_inline:flags.6?true embed_links:flags.7?true send_polls:flags.8?true change_info:flags.10?true invite_users:flags.15?true pin_messages:flags.17?true manage_topics:flags.18?true send_photos:flags.19?true send_videos:flags.20?true send_roundvideos:flags.21?true send_audios:flags.22?true send_voices:flags.23?true send_docs:flags.24?true send_plain:flags.25?true edit_rank:flags.26?true send_reactions:flags.27?true until_date:int = ChatBannedRights; +chatBannedRights#9f120418 flags:# view_messages:flags.0?true send_messages:flags.1?true send_media:flags.2?true send_stickers:flags.3?true send_gifs:flags.4?true send_games:flags.5?true send_inline:flags.6?true embed_links:flags.7?true send_polls:flags.8?true change_info:flags.10?true invite_users:flags.15?true pin_messages:flags.17?true manage_topics:flags.18?true send_photos:flags.19?true send_videos:flags.20?true send_roundvideos:flags.21?true send_audios:flags.22?true send_voices:flags.23?true send_docs:flags.24?true send_plain:flags.25?true edit_rank:flags.26?true send_reactions:flags.27?true manage_linked_peers:flags.28?true until_date:int = ChatBannedRights; inputWallPaper#e630b979 id:long access_hash:long = InputWallPaper; inputWallPaperSlug#72091c80 slug:string = InputWallPaper; @@ -1281,7 +1325,7 @@ folderPeer#e9baa668 peer:Peer folder_id:int = FolderPeer; messages.searchCounter#e844ebff flags:# inexact:flags.1?true filter:MessagesFilter count:int = messages.SearchCounter; -urlAuthResultRequest#3cd623ec flags:# request_write_access:flags.0?true request_phone_number:flags.1?true match_codes_first:flags.5?true is_app:flags.6?true bot:User domain:string browser:flags.2?string platform:flags.2?string ip:flags.2?string region:flags.2?string match_codes:flags.3?Vector user_id_hint:flags.4?long verified_app_name:flags.7?string = UrlAuthResult; +urlAuthResultRequest#bdca6167 flags:# request_write_access:flags.0?true request_phone_number:flags.1?true match_codes_first:flags.5?true is_app:flags.6?true request_wallet:flags.8?true bot:User domain:string browser:flags.2?string platform:flags.2?string ip:flags.2?string region:flags.2?string match_codes:flags.3?Vector user_id_hint:flags.4?long verified_app_name:flags.7?string tc_session_id:flags.9?long tc_client_id:flags.10?string = UrlAuthResult; urlAuthResultAccepted#623a8fa0 flags:# url:flags.0?string = UrlAuthResult; urlAuthResultDefault#a9d6db1f = UrlAuthResult; @@ -1381,7 +1425,7 @@ messages.messageViews#b6c4f543 views:Vector chats:Vector use messages.discussionMessage#a6341782 flags:# messages:Vector max_id:flags.0?int read_inbox_max_id:flags.1?int read_outbox_max_id:flags.2?int unread_count:int chats:Vector users:Vector = messages.DiscussionMessage; -messageReplyHeader#1b97dd66 flags:# reply_to_scheduled:flags.2?true forum_topic:flags.3?true quote:flags.9?true reply_to_msg_id:flags.4?int reply_to_peer_id:flags.0?Peer reply_from:flags.5?MessageFwdHeader reply_media:flags.8?MessageMedia reply_to_top_id:flags.1?int quote_text:flags.6?string quote_entities:flags.7?Vector quote_offset:flags.10?int todo_item_id:flags.11?int poll_option:flags.12?bytes = MessageReplyHeader; +messageReplyHeader#ddb5ab75 flags:# reply_to_scheduled:flags.2?true forum_topic:flags.3?true quote:flags.9?true reply_to_ephemeral:flags.13?true reply_to_msg_id:flags.4?int reply_to_peer_id:flags.0?Peer reply_from:flags.5?MessageFwdHeader reply_media:flags.8?MessageMedia reply_to_top_id:flags.1?int quote_text:flags.6?string quote_entities:flags.7?Vector quote_offset:flags.10?int todo_item_id:flags.11?int poll_option:flags.12?bytes quote_rich:flags.14?Vector = MessageReplyHeader; messageReplyStoryHeader#e5af939 peer:Peer story_id:int = MessageReplyHeader; messageReplies#83d60fc2 flags:# comments:flags.0?true replies:int replies_pts:int recent_repliers:flags.1?Vector channel_id:flags.0?long max_id:flags.2?int read_max_id:flags.3?int = MessageReplies; @@ -1510,7 +1554,7 @@ attachMenuBots#3c4301c0 hash:long bots:Vector users:Vector attachMenuBotsBot#93bf667f bot:AttachMenuBot users:Vector = AttachMenuBotsBot; -webViewResultUrl#4d22ff98 flags:# fullsize:flags.1?true fullscreen:flags.2?true query_id:flags.0?long url:string = WebViewResult; +webViewResultUrl#4d22ff98 flags:# fullsize:flags.1?true fullscreen:flags.2?true same_origin:flags.3?true query_id:flags.0?long url:string = WebViewResult; webViewMessageSent#c94511c flags:# msg_id:flags.0?InputBotInlineMessageID = WebViewMessageSent; @@ -1545,7 +1589,7 @@ inputInvoiceStarGiftUpgrade#4d818d5d flags:# keep_original_details:flags.0?true inputInvoiceStarGiftTransfer#4a5f5bd9 stargift:InputSavedStarGift to_id:InputPeer = InputInvoice; inputInvoicePremiumGiftStars#dabab2ef flags:# user_id:InputUser months:int message:flags.0?TextWithEntities = InputInvoice; inputInvoiceBusinessBotTransferStars#f4997e42 bot:InputUser stars:long = InputInvoice; -inputInvoiceStarGiftResale#c39f5324 flags:# ton:flags.0?true slug:string to_id:InputPeer = InputInvoice; +inputInvoiceStarGiftResale#e9b0c658 flags:# ton:flags.0?true show_name:flags.2?true slug:string to_id:InputPeer message:flags.1?TextWithEntities = InputInvoice; inputInvoiceStarGiftPrepaidUpgrade#9a0b48b8 peer:InputPeer hash:string = InputInvoice; inputInvoicePremiumAuthCode#3e77f614 purpose:InputStorePaymentPurpose = InputInvoice; inputInvoiceStarGiftDropOriginalDetails#923d8d1 stargift:InputSavedStarGift = InputInvoice; @@ -1608,7 +1652,7 @@ messageExtendedMedia#ee479c64 media:MessageMedia = MessageExtendedMedia; stickerKeyword#fcfeb29c document_id:long keyword:Vector = StickerKeyword; -username#b4073647 flags:# editable:flags.0?true active:flags.1?true username:string = Username; +username#b4073647 flags:# editable:flags.0?true active:flags.1?true deletable:flags.2?true expired:flags.3?true username:string = Username; forumTopicDeleted#23f109b id:int = ForumTopic; forumTopic#fcdad815 flags:# my:flags.1?true closed:flags.2?true pinned:flags.3?true short:flags.5?true hidden:flags.6?true title_missing:flags.7?true id:int date:int peer:Peer title:string icon_color:int icon_emoji_id:flags.0?long top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int unread_reactions_count:int unread_poll_votes_count:int from_id:Peer notify_settings:PeerNotifySettings draft:flags.4?DraftMessage = ForumTopic; @@ -1697,9 +1741,10 @@ stories.storyViewsList#59d78fc5 flags:# count:int views_count:int forwards_count stories.storyViews#de9eed1d views:Vector users:Vector = stories.StoryViews; -inputReplyToMessage#3bd4b7c2 flags:# reply_to_msg_id:int top_msg_id:flags.0?int reply_to_peer_id:flags.1?InputPeer quote_text:flags.2?string quote_entities:flags.3?Vector quote_offset:flags.4?int monoforum_peer_id:flags.5?InputPeer todo_item_id:flags.6?int poll_option:flags.7?bytes = InputReplyTo; +inputReplyToMessage#75c1ad70 flags:# reply_to_msg_id:int top_msg_id:flags.0?int reply_to_peer_id:flags.1?InputPeer quote_text:flags.2?string quote_entities:flags.3?Vector quote_offset:flags.4?int monoforum_peer_id:flags.5?InputPeer todo_item_id:flags.6?int poll_option:flags.7?bytes quote_rich:flags.8?Vector = InputReplyTo; inputReplyToStory#5881323a peer:InputPeer story_id:int = InputReplyTo; inputReplyToMonoForum#69d66c45 monoforum_peer_id:InputPeer = InputReplyTo; +inputReplyToEphemeralMessage#4119b95e id:int = InputReplyTo; exportedStoryLink#3fc9053b link:string = ExportedStoryLink; @@ -1828,7 +1873,7 @@ inputQuickReplyShortcutId#1190cf1 shortcut_id:int = InputQuickReplyShortcut; messages.quickReplies#c68d6695 quick_replies:Vector messages:Vector chats:Vector users:Vector = messages.QuickReplies; messages.quickRepliesNotModified#5f91eb5b = messages.QuickReplies; -connectedBot#cd64636c flags:# bot_id:long recipients:BusinessBotRecipients rights:BusinessBotRights = ConnectedBot; +connectedBot#33ed001 flags:# bot_id:long recipients:BusinessBotRecipients rights:BusinessBotRights device:flags.0?string date:flags.1?int location:flags.2?string = ConnectedBot; account.connectedBots#17d7f87b connected_bots:Vector users:Vector = account.ConnectedBots; @@ -1972,9 +2017,9 @@ starsTonAmount#74aee3e0 amount:long = StarsAmount; messages.foundStickersNotModified#6010c534 flags:# next_offset:flags.0?int = messages.FoundStickers; messages.foundStickers#82c9e290 flags:# next_offset:flags.0?int hash:long stickers:Vector = messages.FoundStickers; -botVerifierSettings#b0cd6617 flags:# can_modify_custom_description:flags.1?true icon:long company:string custom_description:flags.0?string = BotVerifierSettings; +botVerifierSettings#a12aefff flags:# can_modify_custom_description:flags.1?true icon:long company:string custom_description:flags.0?TextWithEntities = BotVerifierSettings; -botVerification#f93cd45c bot_id:long icon:long description:string = BotVerification; +botVerification#f72e0ed9 bot_id:long icon:long description:TextWithEntities = BotVerification; starGiftAttributeModel#565251e2 flags:# crafted:flags.0?true name:string document:Document rarity:StarGiftAttributeRarity = StarGiftAttribute; starGiftAttributePattern#4e7085ea name:string document:Document rarity:StarGiftAttributeRarity = StarGiftAttribute; @@ -2121,7 +2166,6 @@ inputPasskeyResponseRegister#3e63935c client_data:DataJSON attestation_data:byte inputPasskeyResponseLogin#c31fc14a client_data:DataJSON authenticator_data:bytes signature:bytes user_handle:string = InputPasskeyResponse; inputPasskeyCredentialPublicKey#3c27b78f id:string raw_id:string response:InputPasskeyResponse = InputPasskeyCredential; -inputPasskeyCredentialFirebasePNV#5b1ccb28 pnv_token:string = InputPasskeyCredential; starGiftBackground#aff56398 center_color:int edge_color:int text_color:int = StarGiftBackground; @@ -2156,6 +2200,7 @@ stats.pollStats#2999beed votes_graph:StatsGraph = stats.PollStats; inputAiComposeToneDefault#1fe9a9bf tone:string = InputAiComposeTone; inputAiComposeToneID#773c080 id:long access_hash:long = InputAiComposeTone; inputAiComposeToneSlug#1fa01357 slug:string = InputAiComposeTone; +inputAiComposeToneSingleUse#e0c35af custom_prompt:string = InputAiComposeTone; aiComposeTone#cff63ea9 flags:# creator:flags.0?true id:long access_hash:long slug:string title:string emoji_id:flags.1?long prompt:flags.4?string installs_count:flags.2?int author_id:flags.3?long example_english:flags.5?AiComposeToneExample = AiComposeTone; aiComposeToneDefault#9bad6414 tone:string emoji_id:long title:string = AiComposeTone; @@ -2167,6 +2212,171 @@ aiComposeToneExample#f1d628ec from:TextWithEntities to:TextWithEntities = AiComp bots.accessSettings#dd1fbf93 flags:# restricted:flags.0?true add_users:flags.1?Vector = bots.AccessSettings; +messages.chatInviteJoinResultOk#445663a7 updates:Updates = messages.ChatInviteJoinResult; +messages.chatInviteJoinResultWebView#61ca29d3 bot_id:long query_id:long users:Vector = messages.ChatInviteJoinResult; + +joinChatBotResultApproved#ae152a69 = JoinChatBotResult; +joinChatBotResultDeclined#efa0194 = JoinChatBotResult; +joinChatBotResultQueued#98a3a840 = JoinChatBotResult; +joinChatBotResultWebView#d6e3b813 url:string = JoinChatBotResult; + +webDomainException#933ca597 flags:# domain:string url:string title:string favicon:flags.0?long = WebDomainException; + +account.webBrowserSettingsNotModified#c31c8f4e = account.WebBrowserSettings; +account.webBrowserSettings#79eb8cb3 flags:# open_external_browser:flags.0?true display_close_button:flags.1?true external_exceptions:Vector inapp_exceptions:Vector hash:long = account.WebBrowserSettings; + +inputRichFilePhoto#9b00622b id:string photo:InputPhoto = InputRichFile; +inputRichFileDocument#83281dbd id:string document:InputDocument = InputRichFile; + +inputRichMessage#e4c449fc flags:# rtl:flags.0?true noautolink:flags.1?true blocks:Vector photos:flags.2?Vector documents:flags.3?Vector users:flags.4?Vector = InputRichMessage; +inputRichMessageHTML#dacb836a flags:# rtl:flags.0?true noautolink:flags.1?true html:string files:flags.2?Vector = InputRichMessage; +inputRichMessageMarkdown#4b572c flags:# rtl:flags.0?true noautolink:flags.1?true markdown:string files:flags.2?Vector = InputRichMessage; + +richMessage#baf39d8b flags:# rtl:flags.0?true part:flags.1?true blocks:Vector photos:Vector documents:Vector = RichMessage; + +communityPeer#76141ebd flags:# can_view_history:flags.2?true visible:flags.0?Bool peer:Peer = CommunityPeer; + +communityPeerRequest#7beafa85 flags:# visible:flags.0?true peer:Peer requested_by:long date:int = CommunityPeerRequest; + +communities.peerLinkRequests#2244afad flags:# total_count:int requests:Vector next_offset:flags.0?string chats:Vector users:Vector = communities.PeerLinkRequests; + +ephemeralMessage#dd27bee9 flags:# out:flags.0?true welcome_template:flags.5?true invert_media:flags.7?true noforwards:flags.12?true id:int from_id:Peer peer_id:flags.9?Peer receiver_id:long top_msg_id:flags.1?int date:int message:string entities:flags.2?Vector media:flags.3?MessageMedia reply_markup:flags.4?ReplyMarkup reply_to:flags.6?MessageReplyHeader rich_message:flags.8?RichMessage chat_instance:flags.10?long anchor_msg_id:flags.11?int = EphemeralMessage; + +communities.participantJoinedChats#8d78512a creator_chat_ids:Vector joined_chat_ids:Vector chats:Vector users:Vector = communities.ParticipantJoinedChats; + +messages.translatedRichMessage#4203998f result:Vector = messages.TranslatedRichMessage; + +messages.composedRichMessageWithAI#4c4537c8 result:RichMessage = messages.ComposedRichMessageWithAI; + +buttonTypeDefault#c9dd90e9 = ButtonType; +buttonTypeRequestPhone#df3d36f9 = ButtonType; +buttonTypeRequestGeoLocation#9beee140 = ButtonType; +buttonTypeRequestPoll#aacfff84 flags:# quiz:flags.0?Bool = ButtonType; +buttonTypeRequestPeer#4f58a237 flags:# button_id:int peer_type:RequestPeerType max_quantity:int = ButtonType; +inputButtonTypeRequestPeer#3fe268fe flags:# name_requested:flags.0?true username_requested:flags.1?true photo_requested:flags.2?true button_id:int peer_type:RequestPeerType max_quantity:int = ButtonType; +buttonTypeSimpleWebView#c01a597a url:string = ButtonType; + +inlineButtonTypeUrl#eca4f8d4 url:string = InlineButtonType; +inlineButtonTypeUrlAuth#bfd02da2 flags:# fwd_text:flags.0?string url:string button_id:int = InlineButtonType; +inputInlineButtonTypeUrlAuth#9961bcb4 flags:# request_write_access:flags.0?true fwd_text:flags.1?string url:string bot:flags.2?InputUser = InlineButtonType; +inlineButtonTypeWebView#3bcab5b4 url:string = InlineButtonType; +inlineButtonTypeCallback#2955bc38 flags:# requires_password:flags.0?true data:bytes = InlineButtonType; +inlineButtonTypeGame#5cd3709d = InlineButtonType; +inlineButtonTypeBuy#48bad7a5 = InlineButtonType; +inlineButtonTypeSwitchInline#93773ff5 flags:# same_peer:flags.0?true query:string peer_types:flags.1?Vector = InlineButtonType; +inlineButtonTypeUserProfile#3fa33fcf user_id:long = InlineButtonType; +inputInlineButtonTypeUserProfile#53f3ce5a user_id:InputUser = InlineButtonType; +inlineButtonTypeCopy#b41d3272 copy_text:string = InlineButtonType; +inlineButtonTypeDisabled#a438619d = InlineButtonType; + +keyboardInlineButton#11c1a322 flags:# style:flags.10?KeyboardButtonStyle text:string type:InlineButtonType = KeyboardInlineButton; + +keyboardInlineButtonRow#19420af6 buttons:Vector = KeyboardInlineButtonRow; + +richButtonStyle#3c610bd flags:# bg_primary:flags.0?true bg_danger:flags.1?true bg_success:flags.2?true link:flags.3?true = RichButtonStyle; + +pageButton#692a5488 flags:# text:RichText type:InlineButtonType style:flags.0?RichButtonStyle = PageButton; + +ephemeral.welcomeMessagesNotModified#59ffdb31 = ephemeral.WelcomeMessages; +ephemeral.welcomeMessages#104fc872 hash:long messages:Vector = ephemeral.WelcomeMessages; + +currencyRate#30d9743c currency:string rate:double = CurrencyRate; + +payments.currencyRates#bbcce4c2 rates:Vector = payments.CurrencyRates; + +toncenter.apiResponse#ac8dfe19 response:DataJSON = toncenter.ApiResponse; + +toncenter.streamingUrl#19887601 url:string expires:int = toncenter.StreamingUrl; + +onrampMethodAvailability#9ec8c6a8 flags:# available:flags.0?true payment_method:string = OnrampMethodAvailability; + +onrampProviderInfo#dc27582 flags:# supports_base_currencies:flags.0?true supports_limits:flags.1?true supports_quote:flags.2?true id:string name:string crypto_currencies:Vector = OnrampProviderInfo; + +onrampAvailability#f9c84973 flags:# allowed:flags.0?true buy_allowed:flags.1?true country_code:string state:flags.2?string methods:Vector = OnrampAvailability; + +onrampLimits#7be2677e base_currency:string base_min_amount:string base_max_amount:string crypto_min_amount:string crypto_max_amount:string payment_method:string = OnrampLimits; + +onrampQuote#7a8011e9 base_currency:string base_amount:string crypto_currency:string crypto_amount:string crypto_price:string fee_amount:string extra_fee_amount:string network_fee_amount:string total_amount:string payment_method:string expires_date:int = OnrampQuote; + +onrampSession#d1e42e24 provider:string session_id:string url:string expires_date:int = OnrampSession; + +walletStateEmpty#9cb9b2ec flags:# creating:flags.0?true = WalletState; +walletState#95c5346b flags:# backup_enabled:flags.0?true can_export_phrase:flags.1?true can_enable_backup:flags.2?true address:string public_key:bytes balance:long = WalletState; + +walletUserAddress#fe78eecc flags:# user_id:flags.0?long address:string public_key:bytes = WalletUserAddress; + +wallet.userAddresses#928e7b55 addresses:Vector users:Vector = wallet.UserAddresses; + +walletTransactionPeerUser#d4ea706d flags:# user_id:long address:string domain:flags.0?string = WalletTransactionPeer; +walletTransactionPeerAddress#62cc1bc flags:# address:string domain:flags.0?string = WalletTransactionPeer; +walletTransactionPeerOnramp#e595186e flags:# address:string domain:flags.0?string provider_name:string = WalletTransactionPeer; +walletTransactionPeerUnsupported#728bed5a = WalletTransactionPeer; +walletTransactionPeerChannel#54e70c31 flags:# channel_id:long address:string domain:flags.0?string = WalletTransactionPeer; +walletTransactionPeerTelegramGift#f4729499 flags:# own_profile:flags.0?true = WalletTransactionPeer; + +walletTransaction#952dc143 flags:# incoming:flags.0?true gasless:flags.1?true failed:flags.2?true key_change:flags.5?true comment_encrypted:flags.6?true id:string amount:long fee:long date:int peer:WalletTransactionPeer comment:flags.3?string tx_hash:flags.4?string nft:flags.7?wallet.NftItem = WalletTransaction; + +wallet.transactions#4322d5a5 flags:# balance:long transactions:Vector next_offset:flags.0?string chats:Vector users:Vector = wallet.Transactions; + +wallet.secretPhraseParts#e6d0ef01 token:string dcs:Vector = wallet.SecretPhraseParts; + +wallet.encryptedSecretPhrasePart#18e82537 data:bytes = wallet.EncryptedSecretPhrasePart; + +wallet.holderDc#f9d612ef dc:int public_key:bytes = wallet.HolderDc; + +wallet.proofChallenge#99e41707 payload:string expires:int domain:string = wallet.ProofChallenge; + +walletOwnershipProof#60bccb0d timestamp:int signature:bytes = WalletOwnershipProof; + +inputWalletNew#63a440dc = InputWalletReplacement; +inputWalletImported#66a66a3b flags:# public_key:bytes anchor_public_key:flags.0?bytes proof:WalletOwnershipProof = InputWalletReplacement; + +tonConnectManifest#12229264 flags:# url:string name:string icon:flags.0?WebDocument = TonConnectManifest; + +tonConnectSession#126556c6 flags:# pending:flags.0?true closing:flags.1?true closed:flags.2?true id:long dapp_client_id:string client_id:flags.3?string nonce:bytes manifest:flags.4?TonConnectManifest manifest_error:flags.5?int date:int = TonConnectSession; + +wallet.tonConnectChallenge#4bc89693 challenge:bytes event_id:long = wallet.TonConnectChallenge; + +tonConnectNextEventId#582464e3 event_id:long = TonConnectNextEventId; + +tonConnectRequest#a15f8513 flags:# session_id:long msg_id:int body:bytes expires:int topic:flags.0?string trace_id:flags.1?string = TonConnectRequest; + +wallet.tonConnectPending#85c0f124 session:TonConnectSession requests:Vector = wallet.TonConnectPending; + +wallet.tonConnectSessions#e1f6896 sessions:Vector = wallet.TonConnectSessions; + +wallet.existingBalance#bde90a8d flags:# has_balance:flags.0?true url:string = wallet.ExistingBalance; + +wallet.nftAttribute#4c1ef10e trait_type:string value:string = wallet.NftAttribute; + +wallet.nftItem#173dfaf3 flags:# collection_address:flags.0?string address:string owner_address:string index:string name:flags.1?string description:flags.2?string image:flags.3?WebDocument image_small:flags.4?WebDocument content_url:flags.5?WebDocument lottie:flags.6?WebDocument attributes:flags.7?Vector extra:flags.8?DataJSON gift:flags.9?StarGift = wallet.NftItem; + +wallet.nftItems#794d486f flags:# items:Vector next_offset:flags.0?string = wallet.NftItems; + +auth.firebasePnvIntent#df5ac00c nonce:string digital_credential_payload:string = auth.FirebasePnvIntent; + +inputTonConnectOauthSession#629f66ce session_id:long challenge_answer:bytes body:bytes proof:WalletOwnershipProof = InputTonConnectOauthSession; + +exportedNoPaidMessagesToken#695dd042 flags:# token:string url:string expires:flags.0?int = ExportedNoPaidMessagesToken; + +shareThemeDefault#95ace84f = ShareTheme; +shareThemeEmojiBackdrop#64b334e1 flags:# backdrop_id:flags.0?int emojis:flags.1?Vector = ShareTheme; +shareThemeGift#ebece66d stargift:StarGift = ShareTheme; +inputShareThemeGift#3fb92b5b stargift:InputSavedStarGift = ShareTheme; + +shareThemeBackdropOption#45c1d652 backdrop_id:int name:string center_color:int edge_color:int pattern_color:int text_color:int = ShareThemeBackdropOption; + +shareThemeBackdropsNotModified#7a3f6dff = ShareThemeBackdrops; +shareThemeBackdrops#aaeadce0 hash:int backdrops:Vector = ShareThemeBackdrops; + +inputWalletCardSticker#57df45a7 coordinates:MediaAreaCoordinates nft_address:string = InputWalletCardSticker; + +wallet.cardSticker#f3010cba coordinates:MediaAreaCoordinates nft:wallet.NftItem = wallet.CardSticker; + +wallet.card#8ed043b1 flags:# stickers:flags.0?Vector bg_nft_item:flags.1?wallet.NftItem address:string balance:long = wallet.Card; + +payments.starGiftDepositPayload#725bb4eb nft_address:string payload:bytes amount:long = payments.StarGiftDepositPayload; + ---functions--- invokeAfterMsg#cb9f372d {X:Type} msg_id:long query:!X = X; @@ -2207,6 +2417,10 @@ auth.reportMissingCode#cb9deff6 phone_number:string phone_code_hash:string mnc:s auth.checkPaidAuth#56e59f9c phone_number:string phone_code_hash:string form_id:long = auth.SentCode; auth.initPasskeyLogin#518ad0b7 api_id:int api_hash:string = auth.PasskeyLoginOptions; auth.finishPasskeyLogin#9857ad07 flags:# credential:InputPasskeyCredential from_dc_id:flags.0?int from_auth_key_id:flags.0?long = auth.Authorization; +auth.cancelWebTokenAuthorization#490dada1 web_auth_token:string = Bool; +auth.initFirebasePnvLogin#644f15c0 flags:# except_ids:flags.0?Vector api_id:int api_hash:string = auth.FirebasePnvIntent; +auth.finishFirebasePnvLogin#2c85094c google_token:string = auth.Authorization; +auth.firebasePnvSignUp#783f6b56 flags:# no_joined_notifications:flags.0?true first_name:string last_name:string = auth.Authorization; account.registerDevice#ec86017a flags:# no_muted:flags.0?true token_type:int token:string app_sandbox:Bool secret:bytes other_uids:Vector = Bool; account.unregisterDevice#6a0d3206 token_type:int token:string other_uids:Vector = Bool; @@ -2331,6 +2545,11 @@ account.initPasskeyRegistration#429547e8 = account.PasskeyRegistrationOptions; account.registerPasskey#55b41fd6 credential:InputPasskeyCredential = Passkey; account.getPasskeys#ea1f0c52 = account.Passkeys; account.deletePasskey#f5b5563f id:string = Bool; +account.confirmBotConnection#67ed1f68 bot_id:InputUser = Bool; +account.getWebBrowserSettings#56655768 hash:long = account.WebBrowserSettings; +account.updateWebBrowserSettings#9adf82fe flags:# open_external_browser:flags.0?true display_close_button:flags.1?true = account.WebBrowserSettings; +account.toggleWebBrowserSettingsException#60ed4229 flags:# delete:flags.1?true open_external_browser:flags.0?Bool url:string = Updates; +account.deleteWebBrowserSettingsExceptions#86a0765d = account.WebBrowserSettings; users.getUsers#d91a548 id:Vector = Vector; users.getFullUser#b60f5918 id:InputUser = users.UserFull; @@ -2349,7 +2568,7 @@ contacts.deleteByPhones#1013fd9e phones:Vector = Bool; contacts.block#2e2e8734 flags:# my_stories_from:flags.0?true id:InputPeer = Bool; contacts.unblock#b550d328 flags:# my_stories_from:flags.0?true id:InputPeer = Bool; contacts.getBlocked#9a868f80 flags:# my_stories_from:flags.0?true offset:int limit:int = contacts.Blocked; -contacts.search#11f812d8 q:string limit:int = contacts.Found; +contacts.search#5f58d0f flags:# broadcasts:flags.0?true bots:flags.1?true q:string limit:int = contacts.Found; contacts.resolveUsername#725afbbc flags:# username:string referer:flags.0?string = contacts.ResolvedPeer; contacts.getTopPeers#973478b6 flags:# correspondents:flags.0?true bots_pm:flags.1?true bots_inline:flags.2?true phone_calls:flags.3?true forward_users:flags.4?true forward_chats:flags.5?true groups:flags.10?true channels:flags.15?true bots_app:flags.16?true bots_guestchat:flags.17?true offset:int limit:int hash:long = contacts.TopPeers; contacts.resetTopPeerRating#1ae373ac category:TopPeerCategory peer:InputPeer = Bool; @@ -2368,6 +2587,8 @@ contacts.setBlocked#94c65c76 flags:# my_stories_from:flags.0?true id:Vector = messages.Messages; messages.getDialogs#a0f4cb4f flags:# exclude_pinned:flags.0?true folder_id:flags.1?int offset_date:int offset_id:int offset_peer:InputPeer limit:int hash:long = messages.Dialogs; @@ -2378,9 +2599,9 @@ messages.deleteHistory#b08f922a flags:# just_clear:flags.0?true revoke:flags.1?t messages.deleteMessages#e58e95d2 flags:# revoke:flags.0?true id:Vector = messages.AffectedMessages; messages.receivedMessages#5a954c0 max_id:int = Vector; messages.setTyping#58943ee2 flags:# peer:InputPeer top_msg_id:flags.0?int action:SendMessageAction = Bool; -messages.sendMessage#545cd15a flags:# no_webpage:flags.1?true silent:flags.5?true background:flags.6?true clear_draft:flags.7?true noforwards:flags.14?true update_stickersets_order:flags.15?true invert_media:flags.16?true allow_paid_floodskip:flags.19?true peer:InputPeer reply_to:flags.0?InputReplyTo message:string random_id:long reply_markup:flags.2?ReplyMarkup entities:flags.3?Vector schedule_date:flags.10?int schedule_repeat_period:flags.24?int send_as:flags.13?InputPeer quick_reply_shortcut:flags.17?InputQuickReplyShortcut effect:flags.18?long allow_paid_stars:flags.21?long suggested_post:flags.22?SuggestedPost = Updates; +messages.sendMessage#fef48f62 flags:# no_webpage:flags.1?true silent:flags.5?true background:flags.6?true clear_draft:flags.7?true noforwards:flags.14?true update_stickersets_order:flags.15?true invert_media:flags.16?true allow_paid_floodskip:flags.19?true peer:InputPeer reply_to:flags.0?InputReplyTo message:string random_id:long reply_markup:flags.2?ReplyMarkup entities:flags.3?Vector schedule_date:flags.10?int schedule_repeat_period:flags.24?int send_as:flags.13?InputPeer quick_reply_shortcut:flags.17?InputQuickReplyShortcut effect:flags.18?long allow_paid_stars:flags.21?long suggested_post:flags.22?SuggestedPost rich_message:flags.23?InputRichMessage = Updates; messages.sendMedia#330e77f flags:# silent:flags.5?true background:flags.6?true clear_draft:flags.7?true noforwards:flags.14?true update_stickersets_order:flags.15?true invert_media:flags.16?true allow_paid_floodskip:flags.19?true peer:InputPeer reply_to:flags.0?InputReplyTo media:InputMedia message:string random_id:long reply_markup:flags.2?ReplyMarkup entities:flags.3?Vector schedule_date:flags.10?int schedule_repeat_period:flags.24?int send_as:flags.13?InputPeer quick_reply_shortcut:flags.17?InputQuickReplyShortcut effect:flags.18?long allow_paid_stars:flags.21?long suggested_post:flags.22?SuggestedPost = Updates; -messages.forwardMessages#13704a7c flags:# silent:flags.5?true background:flags.6?true with_my_score:flags.8?true drop_author:flags.11?true drop_media_captions:flags.12?true noforwards:flags.14?true allow_paid_floodskip:flags.19?true from_peer:InputPeer id:Vector random_id:Vector to_peer:InputPeer top_msg_id:flags.9?int reply_to:flags.22?InputReplyTo schedule_date:flags.10?int schedule_repeat_period:flags.24?int send_as:flags.13?InputPeer quick_reply_shortcut:flags.17?InputQuickReplyShortcut effect:flags.18?long video_timestamp:flags.20?int allow_paid_stars:flags.21?long suggested_post:flags.23?SuggestedPost = Updates; +messages.forwardMessages#13704a7c flags:# silent:flags.5?true background:flags.6?true with_my_score:flags.8?true drop_author:flags.11?true drop_media_captions:flags.12?true noforwards:flags.14?true allow_paid_floodskip:flags.19?true from_ephemeral:flags.25?true from_peer:InputPeer id:Vector random_id:Vector to_peer:InputPeer top_msg_id:flags.9?int reply_to:flags.22?InputReplyTo schedule_date:flags.10?int schedule_repeat_period:flags.24?int send_as:flags.13?InputPeer quick_reply_shortcut:flags.17?InputQuickReplyShortcut effect:flags.18?long video_timestamp:flags.20?int allow_paid_stars:flags.21?long suggested_post:flags.23?SuggestedPost = Updates; messages.reportSpam#cf1592db peer:InputPeer = Bool; messages.getPeerSettings#efd9a6a2 peer:InputPeer = messages.PeerSettings; messages.report#fc78af9b peer:InputPeer id:Vector option:bytes message:string = ReportResult; @@ -2408,7 +2629,7 @@ messages.getAllStickers#b8a0a1a8 hash:long = messages.AllStickers; messages.getWebPagePreview#570d6f6f flags:# message:string entities:flags.3?Vector = messages.WebPagePreview; messages.exportChatInvite#a455de90 flags:# legacy_revoke_permanent:flags.2?true request_needed:flags.3?true peer:InputPeer expire_date:flags.0?int usage_limit:flags.1?int title:flags.4?string subscription_pricing:flags.5?StarsSubscriptionPricing = ExportedChatInvite; messages.checkChatInvite#3eadb1bb hash:string = ChatInvite; -messages.importChatInvite#6c50051c hash:string = Updates; +messages.importChatInvite#de91436e hash:string = messages.ChatInviteJoinResult; messages.getStickerSet#c8a0ec74 stickerset:InputStickerSet hash:int = messages.StickerSet; messages.installStickerSet#c78fe460 stickerset:InputStickerSet archived:Bool = messages.StickerSetInstallResult; messages.uninstallStickerSet#f96e55de stickerset:InputStickerSet = Bool; @@ -2416,7 +2637,7 @@ messages.startBot#e6df7378 bot:InputUser peer:InputPeer random_id:long start_par messages.getMessagesViews#5784d3e1 peer:InputPeer id:Vector increment:Bool = messages.MessageViews; messages.editChatAdmin#a85bd1c2 chat_id:long user_id:InputUser is_admin:Bool = Bool; messages.migrateChat#a2875319 chat_id:long = Updates; -messages.searchGlobal#4bc6589a flags:# broadcasts_only:flags.1?true groups_only:flags.2?true users_only:flags.3?true folder_id:flags.0?int q:string filter:MessagesFilter min_date:int max_date:int offset_rate:int offset_peer:InputPeer offset_id:int limit:int = messages.Messages; +messages.searchGlobal#6126a43c flags:# broadcasts_only:flags.1?true groups_only:flags.2?true users_only:flags.3?true folder_id:flags.0?int community:flags.4?InputChannel q:string filter:MessagesFilter min_date:int max_date:int offset_rate:int offset_peer:InputPeer offset_id:int limit:int = messages.Messages; messages.reorderStickerSets#78337739 flags:# masks:flags.0?true emojis:flags.1?true order:Vector = Bool; messages.getDocumentByHash#b1f2061f sha256:bytes size:long mime_type:string = Document; messages.getSavedGifs#5cf09635 hash:long = messages.SavedGifs; @@ -2425,12 +2646,12 @@ messages.getInlineBotResults#514e999d flags:# bot:InputUser peer:InputPeer geo_p messages.setInlineBotResults#bb12a419 flags:# gallery:flags.0?true private:flags.1?true query_id:long results:Vector cache_time:int next_offset:flags.2?string switch_pm:flags.3?InlineBotSwitchPM switch_webview:flags.4?InlineBotWebView = Bool; messages.sendInlineBotResult#c0cf7646 flags:# silent:flags.5?true background:flags.6?true clear_draft:flags.7?true hide_via:flags.11?true peer:InputPeer reply_to:flags.0?InputReplyTo random_id:long query_id:long id:string schedule_date:flags.10?int send_as:flags.13?InputPeer quick_reply_shortcut:flags.17?InputQuickReplyShortcut allow_paid_stars:flags.21?long = Updates; messages.getMessageEditData#fda68d36 peer:InputPeer id:int = messages.MessageEditData; -messages.editMessage#51e842e1 flags:# no_webpage:flags.1?true invert_media:flags.16?true peer:InputPeer id:int message:flags.11?string media:flags.14?InputMedia reply_markup:flags.2?ReplyMarkup entities:flags.3?Vector schedule_date:flags.15?int schedule_repeat_period:flags.18?int quick_reply_shortcut_id:flags.17?int = Updates; -messages.editInlineBotMessage#83557dba flags:# no_webpage:flags.1?true invert_media:flags.16?true id:InputBotInlineMessageID message:flags.11?string media:flags.14?InputMedia reply_markup:flags.2?ReplyMarkup entities:flags.3?Vector = Bool; +messages.editMessage#b106e66c flags:# no_webpage:flags.1?true invert_media:flags.16?true peer:InputPeer id:int message:flags.11?string media:flags.14?InputMedia reply_markup:flags.2?ReplyMarkup entities:flags.3?Vector schedule_date:flags.15?int schedule_repeat_period:flags.18?int quick_reply_shortcut_id:flags.17?int rich_message:flags.23?InputRichMessage = Updates; +messages.editInlineBotMessage#a423bb51 flags:# no_webpage:flags.1?true invert_media:flags.16?true id:InputBotInlineMessageID message:flags.11?string media:flags.14?InputMedia reply_markup:flags.2?ReplyMarkup entities:flags.3?Vector rich_message:flags.23?InputRichMessage = Bool; messages.getBotCallbackAnswer#9342ca07 flags:# game:flags.1?true peer:InputPeer msg_id:int data:flags.0?bytes password:flags.2?InputCheckPasswordSRP = messages.BotCallbackAnswer; messages.setBotCallbackAnswer#d58f130a flags:# alert:flags.1?true query_id:long message:flags.0?string url:flags.2?string cache_time:int = Bool; messages.getPeerDialogs#e470bcfd peers:Vector = messages.PeerDialogs; -messages.saveDraft#54ae308e flags:# no_webpage:flags.1?true invert_media:flags.6?true reply_to:flags.4?InputReplyTo peer:InputPeer message:string entities:flags.3?Vector media:flags.5?InputMedia effect:flags.7?long suggested_post:flags.8?SuggestedPost = Bool; +messages.saveDraft#ad0fa15c flags:# no_webpage:flags.1?true invert_media:flags.6?true reply_to:flags.4?InputReplyTo peer:InputPeer message:string entities:flags.3?Vector media:flags.5?InputMedia effect:flags.7?long suggested_post:flags.8?SuggestedPost rich_message:flags.9?InputRichMessage = Bool; messages.getAllDrafts#6a3f8d65 = Updates; messages.getFeaturedStickers#64780b14 hash:long = messages.FeaturedStickers; messages.readFeaturedStickers#5b118126 id:Vector = Bool; @@ -2477,7 +2698,7 @@ messages.getEmojiKeywordsLanguages#4e9963b2 lang_codes:Vector = Vector = Vector; messages.requestUrlAuth#894cc99c flags:# peer:flags.1?InputPeer msg_id:flags.1?int button_id:flags.1?int url:flags.2?string in_app_origin:flags.3?string = UrlAuthResult; -messages.acceptUrlAuth#67a3f0de flags:# write_allowed:flags.0?true share_phone_number:flags.3?true peer:flags.1?InputPeer msg_id:flags.1?int button_id:flags.1?int url:flags.2?string match_code:flags.4?string = UrlAuthResult; +messages.acceptUrlAuth#18dd4e92 flags:# write_allowed:flags.0?true share_phone_number:flags.3?true peer:flags.1?InputPeer msg_id:flags.1?int button_id:flags.1?int url:flags.2?string match_code:flags.4?string tonconnect_session:flags.5?InputTonConnectOauthSession = UrlAuthResult; messages.hidePeerSettingsBar#4facb138 peer:InputPeer = Bool; messages.getScheduledHistory#f516760b peer:InputPeer hash:long = messages.Messages; messages.getScheduledMessages#bdbb0464 peer:InputPeer id:Vector = messages.Messages; @@ -2624,6 +2845,12 @@ messages.setBotGuestChatResult#b8f106e3 query_id:long result:InputBotInlineResul messages.deleteParticipantReactions#a0b80cf8 peer:InputPeer participant:InputPeer = Bool; messages.deleteParticipantReaction#e3b7f82c peer:InputPeer msg_id:int participant:InputPeer = Updates; messages.getPersonalChannelHistory#55fb0996 user_id:InputUser limit:int max_id:int min_id:int hash:long = messages.Messages; +messages.getRichMessage#501569cf peer:InputPeer id:int = messages.Messages; +messages.translateRichMessage#1a542004 flags:# peer:flags.0?InputPeer id:flags.0?Vector text:flags.1?Vector to_lang:string tone:flags.2?string = messages.TranslatedRichMessage; +messages.composeRichMessageWithAI#8d7ae6af flags:# proofread:flags.0?true emojify:flags.3?true text:flags.4?InputRichMessage translate_to_lang:flags.1?string tone:flags.2?InputAiComposeTone = messages.ComposedRichMessageWithAI; +messages.requestChatJoinWebView#ba9ee679 flags:# query_id:long theme_params:flags.0?DataJSON platform:string = WebViewResult; +messages.setShareTheme#698a9b1a peer:InputPeer theme:ShareTheme = Bool; +messages.getShareThemeBackdrops#f4599ef2 hash:int = ShareThemeBackdrops; updates.getState#edd4882a = updates.State; updates.getDifference#19c2f763 flags:# pts:int pts_limit:flags.1?int pts_total_limit:flags.0?int date:int qts:int qts_limit:flags.2?int = updates.Difference; @@ -2684,13 +2911,13 @@ channels.editTitle#566decd0 channel:InputChannel title:string = Updates; channels.editPhoto#f12e57c9 channel:InputChannel photo:InputChatPhoto = Updates; channels.checkUsername#10e6bd2c channel:InputChannel username:string = Bool; channels.updateUsername#3514b3de channel:InputChannel username:string = Bool; -channels.joinChannel#24b524c5 channel:InputChannel = Updates; +channels.joinChannel#7f6a1e22 channel:InputChannel = messages.ChatInviteJoinResult; channels.leaveChannel#f836aa95 channel:InputChannel = Updates; channels.inviteToChannel#c9e33d54 channel:InputChannel users:Vector = messages.InvitedUsers; channels.deleteChannel#c0111fe3 channel:InputChannel = Updates; channels.exportMessageLink#e63fadeb flags:# grouped:flags.0?true thread:flags.1?true channel:InputChannel id:int = ExportedMessageLink; channels.toggleSignatures#418d549c flags:# signatures_enabled:flags.0?true profiles_enabled:flags.1?true channel:InputChannel = Updates; -channels.getAdminedPublicChannels#f8b036af flags:# by_location:flags.0?true check_limit:flags.1?true for_personal:flags.2?true = messages.Chats; +channels.getAdminedPublicChannels#f8b036af flags:# by_location:flags.0?true check_limit:flags.1?true for_personal:flags.2?true for_community_peer:flags.3?true = messages.Chats; channels.editBanned#96e6cd81 channel:InputChannel participant:InputPeer banned_rights:ChatBannedRights = Updates; channels.getAdminLog#33ddf480 flags:# channel:InputChannel q:string events_filter:flags.0?ChannelAdminLogEventsFilter admins:flags.1?Vector max_id:long min_id:long limit:int = channels.AdminLogResults; channels.setStickers#ea8ca4f9 channel:InputChannel stickerset:InputStickerSet = Bool; @@ -2707,7 +2934,7 @@ channels.convertToGigagroup#b290c69 channel:InputChannel = Updates; channels.getSendAs#e785a43f flags:# for_paid_reactions:flags.0?true for_live_stories:flags.1?true peer:InputPeer = channels.SendAsPeers; channels.deleteParticipantHistory#367544db channel:InputChannel participant:InputPeer = messages.AffectedHistory; channels.toggleJoinToSend#e4cb9580 channel:InputChannel enabled:Bool = Updates; -channels.toggleJoinRequest#4c2985b6 channel:InputChannel enabled:Bool = Updates; +channels.toggleJoinRequest#ecc2618 flags:# apply_to_invites:flags.1?true channel:InputChannel enabled:Bool guard_bot:flags.0?InputUser = Updates; channels.reorderUsernames#b45ced1d channel:InputChannel order:Vector = Bool; channels.toggleUsername#50f24105 channel:InputChannel username:string active:Bool = Bool; channels.deactivateAllUsernames#a245dd3 channel:InputChannel = Bool; @@ -2757,15 +2984,18 @@ bots.toggleUserEmojiStatusPermission#6de6392 bot:InputUser enabled:Bool = Bool; bots.checkDownloadFileParams#50077589 bot:InputUser file_name:string url:string = Bool; bots.getAdminedBots#b0711d83 = Vector; bots.updateStarRefProgram#778b5ab3 flags:# bot:InputUser commission_permille:int duration_months:flags.0?int = StarRefProgram; -bots.setCustomVerification#8b89dfbd flags:# enabled:flags.1?true bot:flags.0?InputUser peer:InputPeer custom_description:flags.2?string = Bool; +bots.setCustomVerification#f4946757 flags:# enabled:flags.1?true bot:flags.0?InputUser peer:InputPeer custom_description:flags.2?TextWithEntities = Bool; bots.getBotRecommendations#a1b70815 bot:InputUser = users.Users; -bots.checkUsername#87f2219b username:string = Bool; +bots.checkUsername#e3ac4c61 flags:# additional:flags.0?true username:string = Bool; bots.createBot#e5b17f2b flags:# via_deeplink:flags.0?true name:string username:string manager_id:InputUser = User; bots.exportBotToken#bd0d99eb bot:InputUser revoke:Bool = bots.ExportedBotToken; bots.requestWebViewButton#31a2a35e user_id:InputUser button:KeyboardButton = bots.RequestedButton; bots.getRequestedWebViewButton#bf25b7f3 bot:InputUser webapp_req_id:string = KeyboardButton; bots.getAccessSettings#213853a3 bot:InputUser = bots.AccessSettings; bots.editAccessSettings#31813cd8 flags:# restricted:flags.0?true bot:InputUser add_users:flags.1?Vector = Bool; +bots.setJoinChatResults#e71a4810 query_id:long result:JoinChatBotResult = Bool; +bots.addUsername#3501c08a bot:InputUser username:string = Bool; +bots.removeUsername#c704147d bot:InputUser username:string = Bool; payments.getPaymentForm#37148dbb flags:# invoice:InputInvoice theme_params:flags.0?DataJSON = payments.PaymentForm; payments.getPaymentReceipt#2478d1cc peer:InputPeer msg_id:int = payments.PaymentReceipt; @@ -2811,7 +3041,7 @@ payments.transferStarGift#7f18176a stargift:InputSavedStarGift to_id:InputPeer = payments.getUniqueStarGift#a1974d72 slug:string = payments.UniqueStarGift; payments.getSavedStarGifts#a319e569 flags:# exclude_unsaved:flags.0?true exclude_saved:flags.1?true exclude_unlimited:flags.2?true exclude_unique:flags.4?true sort_by_value:flags.5?true exclude_upgradable:flags.7?true exclude_unupgradable:flags.8?true peer_color_available:flags.9?true exclude_hosted:flags.10?true peer:InputPeer collection_id:flags.6?int offset:string limit:int = payments.SavedStarGifts; payments.getSavedStarGift#b455a106 stargift:Vector = payments.SavedStarGifts; -payments.getStarGiftWithdrawalUrl#d06e93a8 stargift:InputSavedStarGift password:InputCheckPasswordSRP = payments.StarGiftWithdrawalUrl; +payments.getStarGiftWithdrawalUrl#c8ca817b flags:# stargift:InputSavedStarGift tmp_password:bytes = payments.StarGiftWithdrawalUrl; payments.toggleChatStarGiftNotifications#60eaefa1 flags:# enabled:flags.0?true peer:InputPeer = Bool; payments.toggleStarGiftsPinnedToTop#1513e7b0 peer:InputPeer stargift:Vector = Bool; payments.canPurchaseStore#4fdc5ea7 purpose:InputStorePaymentPurpose = Bool; @@ -2832,6 +3062,17 @@ payments.sendStarGiftOffer#8fb86b41 flags:# peer:InputPeer slug:string price:Sta payments.getStarGiftUpgradeAttributes#6d038b58 gift_id:long = payments.StarGiftUpgradeAttributes; payments.getCraftStarGifts#fd05dd00 gift_id:long offset:string limit:int = payments.SavedStarGifts; payments.craftStarGift#b0f9684f stargift:Vector = Updates; +payments.getCurrencyRates#d35983e8 = payments.CurrencyRates; +payments.getOnrampProviders#3f3e00dc flags:# crypto_currency:flags.0?string = Vector; +payments.getOnrampBaseCurrencies#1c8bedf3 provider:string crypto_currency:string = Vector; +payments.getOnrampAvailability#2ec29951 flags:# provider:string crypto_currency:string base_currency:flags.0?string = OnrampAvailability; +payments.getOnrampLimits#80e851fd flags:# provider:string crypto_currency:string base_currency:string payment_method:flags.0?string = OnrampLimits; +payments.getOnrampQuote#e06645fa flags:# provider:string crypto_currency:string base_currency:string base_amount:flags.0?string crypto_amount:flags.1?string payment_method:flags.2?string = OnrampQuote; +payments.createOnrampSession#a2197cf6 flags:# provider:string crypto_currency:string address:string payment_method:flags.0?string base_currency:flags.1?string base_amount:flags.2?string memo:flags.3?string theme:flags.4?string success_return_url:flags.5?string fail_return_url:flags.6?string crypto_amount:flags.7?string = OnrampSession; +payments.withdrawStarGift#ec2030ae flags:# keep_on_profile:flags.0?true stargift:InputSavedStarGift tmp_password:bytes = Bool; +payments.depositStarGift#c0a2ea9f flags:# hide_sender:flags.0?true peer:InputPeer slug:string = payments.StarGiftDepositPayload; +payments.displayStarGift#4aa5f0fe flags:# peer:flags.0?InputPeer slug:string = Bool; +payments.deleteStarGift#3cdaf8aa stargift:InputSavedStarGift = Bool; stickers.createStickerSet#9021ab67 flags:# masks:flags.0?true emojis:flags.5?true text_color:flags.6?true user_id:InputUser title:string short_name:string thumb:flags.2?InputDocument stickers:Vector software:flags.3?string = messages.StickerSet; stickers.removeStickerFromSet#f7760f51 sticker:InputDocument = messages.StickerSet; @@ -2976,4 +3217,53 @@ aicompose.getTone#b2e8ba03 tone:InputAiComposeTone = aicompose.Tones; aicompose.getTones#abd59201 hash:long = aicompose.Tones; aicompose.getToneExample#d1b4ab14 tone:InputAiComposeTone num:int = AiComposeToneExample; -// LAYER 225 +communities.create#a63859ec flags:# hidden:flags.1?true title:string about:flags.0?string peer:InputPeer = Updates; +communities.togglePeerLink#736dcfea flags:# visible:flags.0?true hidden:flags.1?true deleted:flags.2?true community:InputChannel peer:InputPeer = Bool; +communities.getJoinedCommunities#a663e830 = messages.Chats; +communities.toggleCommunityCollapsedInDialogs#d766e3ea flags:# collapsed:flags.0?true community:InputChannel = Updates; +communities.getPeerLinkRequests#93773344 community:InputChannel offset:string limit:int = communities.PeerLinkRequests; +communities.togglePeerLinkRequestApproval#8c8219a8 flags:# reject:flags.0?true community:InputChannel peer:InputPeer = Bool; +communities.toggleAllPeerLinkRequestApproval#bfe3dd3d flags:# reject:flags.0?true community:InputChannel = Bool; +communities.toggleParticipantBanned#9967ad0f flags:# unban:flags.0?true community:InputChannel participant:InputPeer = Bool; +communities.getParticipantJoinedChats#f87eabab community:InputChannel participant:InputPeer = communities.ParticipantJoinedChats; + +ephemeral.sendMessage#ba8d5f35 flags:# invert_media:flags.6?true welcome:flags.7?true anchor:flags.9?true noforwards:flags.10?true peer:flags.8?InputPeer receiver_id:InputUser query_id:flags.0?long message:string entities:flags.1?Vector media:flags.2?InputMedia reply_markup:flags.3?ReplyMarkup rich_message:flags.4?InputRichMessage random_id:long reply_to:flags.5?InputReplyTo = Updates; +ephemeral.deleteMessage#92f6e797 flags:# peer:flags.0?InputPeer receiver_id:InputUser id:int = Bool; +ephemeral.reportMessage#8704f2bf peer:InputPeer id:int option:bytes message:string = ReportResult; +ephemeral.getCallbackAnswer#3fa464c8 flags:# peer:InputPeer id:int data:flags.1?bytes = messages.BotCallbackAnswer; +ephemeral.editMessage#cf9c725b flags:# invert_media:flags.5?true welcome:flags.6?true peer:flags.7?InputPeer receiver_id:InputUser id:int message:flags.0?string media:flags.3?InputMedia entities:flags.1?Vector reply_markup:flags.2?ReplyMarkup rich_message:flags.4?InputRichMessage = Updates; +ephemeral.deleteWelcomeMessage#e882a9e1 peer:InputPeer id:int = Bool; +ephemeral.deleteAllWelcomeMessages#734f9721 peer:InputPeer = Bool; +ephemeral.getWelcomeMessages#db9ac18d peer:InputPeer hash:long = ephemeral.WelcomeMessages; + +toncenter.performApiRequest#8d7bdd61 flags:# post:flags.0?true endpoint:string query:flags.1?string payload:flags.2?string = toncenter.ApiResponse; +toncenter.getStreamingUrl#cdaf63c7 = toncenter.StreamingUrl; + +wallet.getState#ab83b33a = WalletState; +wallet.getUserAddresses#5275dfdd flags:# force:flags.0?true id:Vector addresses:Vector = wallet.UserAddresses; +wallet.getTransactions#a8830a83 flags:# inbound:flags.0?true outbound:flags.1?true offset:string limit:int = wallet.Transactions; +wallet.getTransactionsByIDs#811ceab6 id:Vector = wallet.Transactions; +wallet.getTransactionsByMsgHash#a6bb795d msg_hash:Vector = wallet.Transactions; +wallet.exportSecretPhrase#9077c9ac flags:# password:flags.0?InputCheckPasswordSRP = wallet.SecretPhraseParts; +wallet.fetchEncryptedSecretPhrasePart#f53925cf token:string public_key:bytes = wallet.EncryptedSecretPhrasePart; +wallet.replaceWallet#d8c72eec flags:# wallet:InputWalletReplacement password:flags.0?InputCheckPasswordSRP = WalletState; +wallet.disableBackup#b0bf0da flags:# password:flags.0?InputCheckPasswordSRP new_public_key:flags.1?bytes proof:flags.2?WalletOwnershipProof = WalletState; +wallet.getBackupHolderDcs#d179d494 = Vector; +wallet.enableBackup#4500c525 flags:# parts:Vector new_public_key:flags.1?bytes proof:flags.2?WalletOwnershipProof = WalletState; +wallet.getProofChallenge#2025e697 = wallet.ProofChallenge; +wallet.sendTransfer#d9e5d9e2 flags:# data_normal:bytes data_gasless:flags.0?bytes user_id:InputUser random_id:long = Updates; +wallet.getGaslessInfo#742df0a1 = Updates; +wallet.getExistingWaltBalance#691f4360 = wallet.ExistingBalance; +wallet.getNfts#8c12f3a4 offset:string limit:int = wallet.NftItems; +wallet.tonConnectCreateSession#cc931046 dapp_client_id:string manifest_url:string = TonConnectSession; +wallet.tonConnectRegisterKey#338bcf1c session_id:long client_id:string = wallet.TonConnectChallenge; +wallet.tonConnectSubmitConnectResult#c2c00779 flags:# error:flags.0?true session_id:long challenge_answer:bytes body:bytes trace_id:flags.1?string = Bool; +wallet.tonConnectGetPending#11aee065 flags:# dapp_client_id:flags.0?string session_id:flags.1?long = wallet.TonConnectPending; +wallet.tonConnectClaimRequest#66b57b41 flags:# declined:flags.1?true session_id:long msg_id:int app_request_id:string challenge_answer:flags.0?bytes = Bool; +wallet.tonConnectSubmitResponse#fac67d3c flags:# session_id:long msg_id:int body:bytes trace_id:flags.0?string = Bool; +wallet.tonConnectNextEventId#775d7244 session_id:long = TonConnectNextEventId; +wallet.tonConnectCloseSession#d63f61ce flags:# session_id:long body:flags.0?bytes = Bool; +wallet.tonConnectGetSessions#a7ffb56e = wallet.TonConnectSessions; +wallet.setCardStickers#68509ac flags:# stickers:Vector bg_nft_address:flags.0?string = wallet.Card; + +// LAYER 232 diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232_file_ref_map.dat b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232_file_ref_map.dat new file mode 100644 index 0000000000000000000000000000000000000000..b02fbd61e407a21a99c09dda64416931475caf9d GIT binary patch literal 64036 zcmdsgTZ~-Ed0xxp3@<|tXLwmIxwjT4lHf=?neMrB9SdA?S4&{IqBx{Bu^%EAOW0< z?fhR={Z)U}sdM`D%KJ2io{`&9r*I(E3@CUy(`p=b0<&XdUnaciP(0#YjO_P=V z=JxLH_WE}9&sX23!ne+&>hWljtWa@%dvkx&){IfQ-cDMr_4QpU1=L&TpC`@nV6;+e z?r%0XYMa&Xj&DCc944PsSE}Etj;r4$z;7y$>iDhm=i8lba=-QPU@#u6Y-~5y_FEgf z)lTbnchG-EkngJMw+z_5L37ee`s0<2t=fLAwG)F>pnHSKsF^%S(zNl6M5^t!H=5f! z)pob>EWN!_{m!J*{OIW@8Fmk!rU!%3xH%a=C8DZ+b?vL2{(u z`rmuw#wdL}YV^}abKDv9SDLl`MsugRZOM74(($N6qK%UFr0*y~mDTZ}Z&;{(RTbot zY#t=7NjGV+guAU~t-aaao`vhd=y0XEQ(sHglYMC17dnshhspj!=yW&P+~3~VZB{3v z?rkGeUYoZE<2%FQ%37`2-r3)7So1cTO|sC_gGPEF?VVNelQbEQy}P+vZ5}lG{iLf2^%@_;-onYUMEA&x5ASsMC%u);WUbb& z*Vl!5^9Yly4@b%KPV(YG(&{u;)*6l7+Qvq$x<42f({nBF_uGS&_HL`*+G;ml!)~Mh z>}hk*N~Y=iVWUHy0qXm;o!0K!M!md!_ZrX1ttM%wxzcLY8rxf28`TM^->Qq%R@!)X z4;o`-yxmr^z1eOhFoo)Fh3cnfu$OAN)lO==h%ufK^GtAe(Cbb5o$;Y+yWg(Ywzg}n za&5_Wz0Rcfa5U%*R+_tO+l`Hlc5c_dGafgZ2M?0|gp9Y+TwhzOZ|!b4i{)|n_#o*~ z7pk|`$g`T(nMd+%||UWNwT@dK605cax;P z9k_j&h{40t+lTK_NLyKJ*EVa(TDzJaH0qmMxAzanNm@-izmS+9)afNp$22rf>(3u1 z-R7Xj!&$o0Zf$R`uWdAP!x4??|97eK-CNB;pF;Bl<8gZH_P4%!tJAu5`_`Ma+IoFw zr(UbqZhhs}a72-!*%&8OW3vF1H%5&fT7CN~x4$Q#DEeb{(z$FX}X>`Xl znM0J8N`stOD@p<*Z%*puphXTP+aU*XKw4AeNf9kl9ug{1v+NZ4W^HX_W4pe-neiGY zV3?N8ENOX;b^0Tv)!ChsmzAQN8m?>Prbrk9>C|t!2DUbK>g)C0tz8HfHSu1MB}O$+ zUdl3d*}Z5BrA53LHzZP!sB)wzIprwY|Ah&u57f>yk_r zD*!RHwo$LGZ311?B{?mR(lg0jD5P@(JqCyMQ<&P^-mdMC5~jGMO7x>_&F*|P@`KI# zZau$ix?Er7=~24-gYj&lQdC^us@HdGTfi69zoUyeMp?4X0(J`GI4jpVFeGi&>NM2v z6M3iT1d2~@f8(nhfogEtEb~g(M%gNpe zlHRS?>l<5Z1tLEbQ$Ca{zK^4QhT(d11UM+Z`5gNU~?_sZo#TXl>73z7dd|~ z86ONxgWmu zd$RsFCZoS|Rdf%#U}oA9`pVVs{k^S!@Ygpl02hA$t4qIfBahzs#+cUr_b0RpR9R-8 zDAwz;O67O{%aX4$>$QhHeGdz z4#8c~WzUkaEB>iYt8z|-uqV_&^LfU2{QX~^AC;9KcuvE?hz?}M?^)U}h@nQ}k>!w& z&?_CqWZC}PhyQ|MJ_~(bkLdI5!~6ICf7NN8JW{WV=ri|Q?BS{p&Z)K4N@Z?{oj&c; z=r7U+T!(&l)Ac(zoeaRLKl~K6jrsINg+E$1)1B-gZ7T|_0&*}|Tn74A-;CO^R z*7uS|ivkD3&GoQ1RjFJsFlq`c@LU*mng>q}5h`DJM86Fz)08or`GMaoJHIh4T%3=^ znoy?eIqRFJXv+D?@Bf?E^6LNY=hi<7<6wyU3`R4We4Tzse@QOHz|$zBf0yA6{sulc zcCvl&7q*4Jy=K&=d?#E0B!__i0PemLs+D$9IxDLy*0GFJv+4uB!TNxmkR!}LQTneG*@5Y>A3=7s z<=?jcQ}U}ae!}|UxD@tjw!7-%D#H0O32}qtKF3!ZC!Tj&2?Z0GPlfbc%+mo)#XRe4 zCfMzDJI%zWdz@H^7=6{!pcw63+Qxp?2g{$XIv`iZNV2@e;xWhY`SD=bX{MF)?+!+j z-edgm=w`-{_c|$7-KFjTbBW2Xrb%PeJP7Nr1@&L+4)z;e%`2Hr#S-ATY2h%+_D2-$ zX-gbOVbTm=uSnQONt58-AJFb2fJ6GPN?03hj4(t$gr62q7#{I0qazGdog~A9$FG*n zPBR%FYz=%bTYj}Z_eeM%+wx&aXDZdsm+N(lmtenvqf2U3ePFVLj26@F53iSv-FFrwAhG6KZVegW-#e|&*hhE_9+w?XD=_3a3V%goZCRX%9T6R7dSzLB zJWjApUeWT>J`JU2Z__a>Iw_M1yRc8i?9Ail66fI}hvu9i&lg^`bYZ@Lu(98#Mf-I_ z+ek~Y-=*_SbcXVyZ%mTWq1TsAT5i(^i00QONeaKE2unnvr)lzH?sJ)T`jb)8Zzinl zG&+C6_;5|jX{L2_rb)H);~{+OGQ-{LSRh;0a%IxT!0Uy6^1^YEKaaDx1b(B3bk*Tk zf%GUeAgl2wC94Srf?8H)(>K%A2ym74(bVIKL-cqscwet4h4z})sbA$N^V}j{Y+Z&I zEfdG3vi5+kyzvy%9FxjICipwY2$ypTAgXuemu=ajGTjz7_7IF6w&8y%*r4D={TCtWr6ySj!s$?NKXN9uV#c}|&DTDfX`hq1kb zVnNsHF$a$MjtcqNkVn{v{eE$VM47ou2SI;>>!yX2bd0G(ho9kxL z#h3E=x|ej5F&`k6{fF3?nlBdV;#NLQIzK5oX-oVxCIai4AD13V3m|L6h=A7WojaLGQbm7X|c433(f!vSqH@5zPK2%np-uzgw zfPERMM>XzY<%HG+uoSN@gnW~3cBJpqf=X8BFEMNYXvb@3pW{Fq4$Ap9bgXq zy3i-ijrb-5>B_?u(N$2d=ve%oh%@WUt#zOyV29bJf0@|h)(w3?SDtzZAhYb>oTn~` z=Ckx~7u$$eJ^l+!zCXkN{dGpc8Uh0OfQ$+7ebzB)ed)UZ`(^o&uK5J{#o9U)Z04x6HmM=<>Ycq6uqeDq;I7<`RIzzD!6HbBMgXPw-N-KN;dW>ON(N zC$?V+edO(-Lcid(?A~0N{VC4ZLY;EHr*#ZRqoethOWo-w$T;m6{!Aq z=nt~){17M|9Qzmkmi4dcJnOXnI6QOzFzc+G0H}`1_TauZOMhkkNuQ0;IEvpE@yvV1 zyvP0rfB%pFkjr9o+ag@^z4RGv*Q-5u;DJB0Tt5yU<~YfAU|x7^JfnRym3{~q_%HVZ z8B-VFqb9yeT=3DwbkLn3JeG{JvGX36O<~qgZ#yNGNrUwzKGh z@xNj4vlha|`J>WMd6(5KW>>*+P~w+y%NX+Nls5458*VKvgOqXNj7oT3=Z3?bX*Z27 z$C$jcDxeD+@L%qaMKnd-3;zbN(+&51nWM%0Ski^=dHmB8+ac|~59n~U=|+@9N_gaV zF1Ovw0K2+0QwKco?I@ois)&A;A}~uK8PksG6!pnaF7|WNkBkD|`FKpZ0Q7+zGn8R5 zG1VqEUX8YLHj@5ZLX$g_VQuVL;TJCk<_vSCdFROs)^{M${Nbp`Ru zcApmCkdqhTflsi1{3Pn&hR}gg%N;rz)p<_m$7az%5uTrP9oY3sEcIv)P%9y`$e)Mf zCtddI!v5+?uu;G)vghIWamp^wpdvP54{-t8$VR>eY#j%(7R7kT$(98;~8R&b&zWhx9hq83PgG;c~#? z4K384COz5lLfuuM@y?u+<#Kr^NuGt}`h})m5d-bhKx}Ygjw0_IEg8PVl_Q(m$Q*_F z3+CpgwUaxRkAyOwqK6db^^GyL&y3%!7yiq7j`C-8WqF2=9y%Ua2Xm<|mv#q!__~zs zS`NOl<1WTw^qpCFjqwJ*10Kn*>?`5;9rN*7c;NU|)Tcvxu-{+Ret%b=zOim#eFrum zwN#4yA9D`xUW-8!(&TmHbk)&uWyW|!i)~w$c2Q2kJirIg-^0Af{)UfHo+N3*AI_L^ zX-mcl--hf(`2fR$K4A04&JZqdoRM&lNArb!N79?>C-}GC52Cf10qzn^_Jj)wjS&z{5H2-0r;JK2Tuj5@i>W#6p zP40{|003C2xH3AdVag;AWcJFrHi14xJIx={s{g13@s?(DH61UZ*gCey5qWYFX&k45YOHbzxHVWH-0YAUFQ+K zsD?Gc^LzNWdeOkf3ONo)-l5}bZq7y0vs5n5#KyWjT_ASL`>A}kiv5HCa%{M6^eAl$ z4nnwPdzTb;#dSu_AF0jSXHmnTQW@X;MydJ@oU)&5yQ7-yVq0bL%DS@_n}%B;`fQ^` zvW~h#5V1YzUL5MD_Dppq*I8_vqrW-ri+pEJS)P1@EI8Jtw|q_Wog%+m+&3qa$!W)< zLFFPJkG`*dS{e&#+xKY?v;JtF2LDaQPn&f1VL|_U^)CIJbywuS=r_`Tr48V};{2es zBHKFZyB3PY?+voN?wR`bexbpAnys!4qf)n4nazNw}52?-dK*o zw58w2aLtJYGI68|TrRwU5D`*N2Tmyn?Uy?(q8j9v$GE*mJhf1>)aT3rF<~ z1e@A&Is_@orA@JRbmpJ~uQ*&%&BY7%R2TYB3}#88&$ffVz;8e!+)E430B~+}7Py{u z+L-g41wZuUG|zvqhKAV8`zbNH(20Dz0D?=-AP?}w_DP(+lp^SVq-=uCvjf{SZ?6P- zM0lTLRvM@1<=E4BO_un;yA=2>^An6|YMn~4EG4CPLefzBN(K3jT&KhDgVyuh~ALHbH!EA>*H%+h&Y4jI1YZe~d4)#PioP_TQWAr_E7ksNb?EWBc$-QQ2|vvyQ(QAK+Vv!PDfHcEP`q zgG}qo9J?{@0=|s>!#30S3gNHNx}wU79_kOUU|kU~kX6pzVsMb_Ww!=MtC9i7)0ROK)2(se@7>{;>WM(KA}I@QjzxTD)NnDDlFVt}4D8t(HV4 z_>{KJgFTMDL%H&3%wq4dIHg@@u{ZQ~P3et}w0Tz0z8&_FJlK=eTON($=q(TD@%4s7 zQR2f+=8R-qZ&_IAO`J;&dXBR}EWVuO&y~Q(l?}7_^K{02hyQ{P_<}pLNw~~bs}V0V zw{!P8eLz=k_GJwM&^l7T?(v=4$*?=XBT_hhsdYnt)H(uqclWh4-2L8=KHu3+kOc`m)^fWW;;5p2cONkqR-}F_XJqg?zqGWSDf*!@C!{+N+l`tNexDf2P&tvAQk7<}%|jbceAGHn_}i zR?lh0mc4KdrJlg=dDJNlrn!6oKkMF{Ggmv!5*K*kz34f!4=rT@4lZXn)U(cDv%G%9 z{rW6@qi;-~(j)OJ7ZnZiEmOd}$iBvOg7|HD2klrN3;8VDx59SE>QjMy7soi^k(C#^ zDeLd>r)BmNN`VxKh%YTNi~+E}6%YC@IcS15bU1IyS$=8v(1-0Yg@7*Lt}xvuJpeFH z6!j37h0!q}3bVv`SVrPe;(;%gI!CCm`+XbZ(77pN%QQbF6t>@nv6J7N(sy)C>=b;k z-hqStTb}(0<&QUop6sgN68cY%$|H-ElQ^$o&D!IKjL8Rs`pu zmM;SjI35>cFs{rn7|;Rld3~Juk>gAZAI2PcE-3aLjp6S;``6*Rn#1LE;L04or>Ga6 zcOdGVxzr8onE!I0bZ^I!&6_Y5mIpKOQL58D3tou%sXZOOTHbCcXU-FP+zk z@sYvlbU}|-(ic!2+N^AJKH2JG*ljc!SkgwHlIJMTBDSfMiW;Bn=XqyJF%HGf1%eLx zi}X*4AATv$%^}iyXC!0!P#&*gUW7BB_|O{5%73{p^10VDw4TH3)Kb>vR$_M^^3F1Q-kNbcK%Mku$ncR95#gY5{F1^`H z>wD&51>%L7hq(Z4Z~~Tfx1-F>7>QXh`0K<4Q%h;Z;Cf?^)#`JAcQ{T zI7#OY@T{oXugKFIVzIX-s^6wJ;myxuz@uCH^Z{M@NIh=P2qaI?d6|3wJbAwLE=>g{ zq(4SVctYEA&YZ4hfn8lYgDB+hGz}T(N6Us5jT?8dK9sbwG-EK!sgC_&J873Wwc?cR ztLzJq{|&n)OnvL?-Bu`-lppY(zcKJTy}{3SoYKNJo{r6J-*P(60y`b!iwbmYSRgv8 zj(y+k&?nt#ox<5A;{#QzGY52Ex3YczOBTi%%7ZbY9f#+uoa^f@@*sIK>PB;F1?L0l zd4ldk+%Urn-6aIR1<_R67X8$#6X={~v_DI~L_QhwX^Gpni9T5AaAxC$^9yr8Qe{Te zJ4gUmXAVV*x{S=kTbX|8_Z`ij>;|A5%H!q34-SnuSy|jz<$zpS&o(>`?|z>&Z@yWM z%EchgX-QT!E#&|f@-?sGP&zed$isKk`Ay8n@@O1ojsyRX(V%+*>|w}vSuHA#a6iBp zHOss&59dkhCXdEZbrbI6@I6zNC4G%1H>3mUD;SqfKhx!>MLo(nx8rh#LwnA#05><| z9dEQ}{OHpzR?v9(F7jvBDI_dx@A|V3=*rt30x4_R90hdv&iQFvKqqFU%)m3RWKO-i zUeo-GWd{D(`s7Ws?zbO=X+egL`#PBTK3aMztb~MeR?*ra4Efx-W*Sb zqcz!a=Q*v$3&<$lgg)Cb1s~$-c|MBjQ?d%c3&p;z0)u%=|TFD z#GQ%xo}RM$_xVW4_B4m{_|Rpn8|DMDg*wUbA=dfT;>aV~fTS~|xF{rH)!4(Z0pLqq zu9k2d0?CgW8%7Rys2ljD^ocy2@C|XMGvLJW%)Iko?oW1~1iUhziIJ>oELl`;(&YHL2)1;m~7!J zV<7&XqVZ%N)x%-N2e=$@gX`hP+`o>J_l17WxMABRr&q&~_Dj%=#k-KdaJ?G8%d|V{ zK0e}@TXUtHCr6L&o0J;B{nm<=_9jsaZ4%zozsUFa&Aokz3%V||Pw3A}Io*0k4frzG zVPA9kx=oENu&cAlj;)itsd&ii`$S|~JS@Ts-x2rVGE9Lk^cwzUdBVQK>-lDn-d@a; z`~zQXFP&*HZh5bd){+eHopEbpEVaw=1A?FKJ>6B0Ij6p%O`a7>iWjM*}FMx95qFQQ-0(S8%~N#B*Y!NX09hvHsDckpTM z1MWVg59rD#>bwebc@&*^{HUCTv1R88j;;^r%2je>5lDWdelB{=v-%I~FM4P-JnJ3$ zn&!(YZga;?T<$HUK0UTpevtNhDMU zJkTHKH8DR!9rnKE8-KLkr`e`?!l<)98PkG{)5K6xw^rh@~E6OM4;E9O{zHPwg8@7$*(`(@BEuUV!2 z2^D4D{JS74NzRylq?{^l#CgKS;>=#m8+ot~(r52A(#*HoS!X0KsW~g>C4V-zV}@eG;}}|Do+R!Dd#k@}0Rw_5PeXpo%O*>5BapbX87^d;$OF zSVI2}{e8iJ{==lixy<5kZdx~krmCOA^%{%j>VwrdupKGHp6GTMFw4pOT`pqa( zxq2(z_#ya|>w_^k*v&f=Og9x34rk%H1c!qo|JnCTAP@T+N7`cA~j{OyXkGrSO zbCxBoUz|ODd^n^%AHpqVgbe&$#AWe?XTAQF?ZYvc&*R*xkx7Vm53_uUhjSy)Jj%DY z+&k&x6O)JabY1I-&Zy&MV2A!Vx(d$;<9&|se5|LF8PESJzoupU;J9z)6-y^;lu(|T z?4UnMTbZY41GQSWAOME zlH@hidlB80e7gAdof01SI7We{zIUt%OS*`is8{!nkI7eoKJ>>q6=&I)c3gej%GU>d z@mLd;`hfk5^nv=a`jFpczSJA^2g?6+=R1neVZ3+Wqf-kjU0PEUp*q_~-T5iCas&95 zY~boGKCfQ#sm3!}g2f#HIsO3#e!}^cJ6qly(32yn@Z6p__ zk%KXKBQTO*@Wgi-iue`xgYle-T9^oBvS%ms9Z!48f$7P-F%K5{InFr?@7xmKU3&Wv z%Um{&NIr_-16~4b+CEs1itTmFHIO12^R&)W-`uLq?H`VD_628yxa>H1Pp6$=*o(ecs(Aph@1{3C&=7>KHjImc-ADpYo2}MRMsL zZCQ;E^`$=cD~`djJADizZ64x5-Ym|2QRi}0xP4S-ltJXabkPtW9LF3+=JbRX;^d8j!$3Qd%Z3o2hGBgl#uj+HT zxQ&g3QlXLd9$>e|67_#>Y5c$-cpVp?mZ#ro;U3Z>GyOE$i#f4j2k&@sBM0r{f=4IzJx&$nx=%<{#+q zRpkijs!m(zOeLLm&Wne#-jAe^gKsL3XVfur{*{&h;UsPdy2>2M+rR_lhSlUeX)f0+8^+F2_AbfHq7DM zB{Y~`^uS&0<~SGDFOMX83_bq%3K|?!bNLTw`Z$r793SUZk58C`76phm8JDN=3fON^ zn{WTGFP}PpA7h+0=y^5X>3=UE!MWd3KLB@8!EyFU`c<&*_o9Zk1!%LZ+Pq7M-XAp0 zMUWd_JHM_hj+Yb;#hQme^8C;L=e-};_i^a9Iz3eB4L(v|q>9SfAqHTKj5J?Yd}}=b zj~l~UG~M;kczOpOjJIL?D++hIN_(jZwO0eaqz}Ih+x33xx4)|Ks9SNBOG;+-Z-oHu z(T@99*dFD|5A^m$CA1&pa_55eLM>kXlzc&+xt@LuRPuth?%f`$r>WC#?;qtNCv`Pivp|{;#x6o*ax@jS&%lfe&0){Fxpko&%Qts^Wi6 z`x~nLC>e}eG~*HoXspQKP(U09v_-(fOLp%%`4|DkJYnm#hl~^()!Vl8WCyyGi3bjk z-8)6MQ+t@22ktjTdeZ)_zi%Jw(-t?nN(A?`{xR3f$9*js;_ZFSmHRCxU|>34ZHSH9ol z_nDR2@zR?@E8D|&7J8`CUKis*$@-AaOWf(FFDSv$V~Q(~`0{kC`hn#K@xtMg?IF)R zoq`0N^8zN+_oCA`pfWMm+>cD~{tY^l)HRPIi|L>{!C}h?Oi1sFpx5Zo?j#|Vd_#}Z z>??V=>F_;Kk7p+>n*#wazHP+u?KE;E`mN_1NL_TD()AdxgJtW&Gkjs6XC275gf)LU ze+lKk?D+Ngl(7f7#Bu2ey)d13KE_$2hJT(6vKR5bcpv#Ga%U}%_80eC+Ky0V@+jY5 z5lZsga(*Au1dhv1ooc76z@d2wY3H?v4X!FVC~J`$y~MB1hl6sB-s=mHjqywSvTucN zL|yag*<1;-xSWAbS=w~!k$&Wg=t#NX7ySNJo(#b0_Gl2JK1}xUscVhW(w2B35AUTE z;dOg7IF3OB_YCh&72$RJRHOq^|JN|LgllM?Jsp(c6*j)2bZ$<+nrHD}?!bTjGGpEh zjWCDzZH2>L@%LEJhu9A|zl-q#9(BJ)j;-U5jtBg^*srDE0aq+vzpCUFIsAK%AG}Ze zN!uf)%^?$XuiaoIqZ|O(u?&4O-tDHL1Xk$Yw#jGPh8aBq2m~Coi7XAflh&w z&%(*LggA&gc|I@HH~O&MqYvKsX8quAk6!+$3HyJHPw1KVcXeC+ z=v>|%lRO-5Ou^er-1;ay=*2{(>i0Xe9^Ef3hkL`9&xhNmlN1iN8T3l;s;l`xXcPE1 z;N&}&-dInMuHo_)^j79gWVRupwD-G1n!r`&z2vgEroE5Mc#8A@p7_nSbQQ_@Gi%k* zulU}2Os=B0lGz?by5YQQ0pHR{_4{rydmzrqd7oaxMh>PHY3#@m@}B3_?%#!g}x%&Z)KkW5VUJl!=3RJSiWH*ax({{%7W4 zuP7b(^DypoW%?ZO>b#TYw&=EQORKV?aGUZwlU8S-u1%=--Wg2N0PoXsi)Gz^R%zB} z5NB3279(Kbiw20`X%6#fuHe)K8INHii<_qxbqN&c;-6&@rVxK#P|Sz8b9(;J#W6Ic;nyf zNf8^h+?((*9v7XR6=KPkvVpL1Y(Eup()|YnI`|53;QS`0)|pr#{UwGAv~d{jZ+!Fj ze|Nc!p=m(xsL&F&nJE2}AN}h0+&L+1!&fQ~xBtowzMq4-Q>4f5-}(Okz_=xUU;oa8 zlAWiNJarGBrU$fp(wyL-H_#GizV@02No&$Yr`1IN>iVDj$j#qL!Vtpj-(cMO(b`Yn zmb~b=o#hj7%-@3k#^cWr+dn({{{Q(y)<4St{w_IPsKFXMQSM>y;GwXSr0PS}XwSTq zrBRmez%CRQ9;$~w!H;_fSVs)hNM26So6WEXpF@RwC{wiQshk7SAKU9M{mcLTZ|SG< zgV=jlpy$>Oh#pNh<=b1pi8s4|Z$bBK1>nxq=?3@jX&(*s#piI@2EZrZzXDzfBkMwW z81DA>{?>nhO!yCa6yKk~VGngk7IH05=$E=Ph9dtQ2ynAawQuSAFW&uwAEG?K%U3lj zz(F8sV9x6=&?paSbB#jb_k@eRJCDdjQ zDESg}bj`$V)lGQ#{n<)I#&8#J7(n+ouZx?tZrYP?bBmS||Bx5kn_ouLMQd`IC| zfBB#N5%(DpbCCGjnB&$a$aW}2Ej5DOxG(Z|ZGcYO6Xyx4jfG=J@VOn`_S%TKpg7-36?=rujoBpY~xkSfSX~$UU#@)du-QWVg zgwVsfvIYB1nSKHPIz?}^DtnDb^aajJMUA;sCVlTU>Bk}Mh(GJRGX#u}qcV=b*Fl%| z+}iZ^u^tlyUtAv8R_{2O*NHQ6#;f)Hby`dnIh9&_0PehRCUTtMZw*4HdVZ^#R?yG& z*+u<37Vl)AVO_|)A?#POPU(&AchY0lN^h*!vp@LyFG61;CVxotboDh`<(oYJAh)s= zLBE#Yhy@RNp6s9@o8I$wWhX5kWRNl3ex-nTg&gi(8`VGTqNU_Re)kP>TvCDA%`f5m z5(YYz<2&ab+-HSO_b{f=ig5~F_}xo)tsgbM?@7FD_b~qxW4gls$US?kWWFJ67Xrwb zS%#K~KbdzwA(PvWC;et1@?{HkHtjul&~p3Ul9vDeJ&!q3wvd*P2}!VbC>C^z?l|F0 z4D8S2JN%_+?4KXB+bMm-4{*%KpU{7*Uz+?|J)DX`aOT{KBVt6 z4Cq@{W_C|};ynJwy+O4<7*{cENUBI;sy3NQt8ID#yP9%KzK=&uEsfZ>O@a5VdxQR$ z##KsuT7)u+*J`Lr^VO=}$D^(5_JH}f`Gxq_5oiN{eL8;q<)i9&wU<<%JbFL1Jcn-^ z;LhKQr-x7l>M?|r`MM^)sf2Wq4lB~rZIue}5MM%{0?$4@iQB3U`c+EM#v~@1RJ)!2 zM~<(TdwSsodn!ruBZ-=2J~D1E&PC20L8nz+UZp7$IRUPQr&aoNUDX;&*xj8uBKM9T z4N^SMg45;VdQnZUplf?SxBUX6Qe|e&$|nExgF%&-HnoN6EGg-e(yZ$E zAR)bu4+gDjlk%yrR2wOj*BT@#`ZKN2REM-kqc&g1ReHox0bu?3E!CFsLf!akTheG% z$rK|>`9T5k1SA3+WHpqI68h91z2aOoOp`@_o<1tVb}D*17JB+~xDrRiC~lD?DNQD- zczIBZ2n8M{u7{6{v>2~@M-6Q#r=fij`B2_*aLYHnkAsKa","op":{"_":"vectorOp","values":[{"_":"copyOp","from":"id"}]}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceStory","action":{"_":"callOp","method":"stories.getStoriesByID","args":[{"_":"typedOpArg","key":"id","value":{"_":"typedOp","type":"Vector","op":{"_":"vectorOp","values":[{"_":"copyOp","from":"id"}]}}},{"_":"typedOpArg","key":"peer","value":{"_":"typedOp","type":"InputPeer","op":{"_":"getInputPeerByIdOp","from":"peer"}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceWebPage","action":{"_":"callOp","method":"messages.getWebPage","args":[{"_":"typedOpArg","key":"url","value":{"_":"typedOp","type":"string","op":{"_":"copyOp","from":"url"}}},{"_":"typedOpArg","key":"hash","value":{"_":"typedOp","type":"int","op":{"_":"intLiteralOp","value":0}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceBotApp","action":{"_":"callOp","method":"messages.getBotApp","args":[{"_":"typedOpArg","key":"app","value":{"_":"typedOp","type":"InputBotApp","op":{"_":"constructorOp","constructor":"inputBotAppID","args":[{"_":"typedOpArg","key":"id","value":{"_":"typedOp","type":"long","op":{"_":"copyOp","from":"id"}}},{"_":"typedOpArg","key":"access_hash","value":{"_":"typedOp","type":"long","op":{"_":"copyOp","from":"access_hash"}}}]}}},{"_":"typedOpArg","key":"hash","value":{"_":"typedOp","type":"long","op":{"_":"longLiteralOp","value":0}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceUserFull","action":{"_":"callOp","method":"users.getFullUser","args":[{"_":"typedOpArg","key":"id","value":{"_":"typedOp","type":"InputUser","op":{"_":"getInputUserByIdOp","from":"id"}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceAdminLog","action":{"_":"callOp","method":"channels.getAdminLog","args":[{"_":"typedOpArg","key":"channel","value":{"_":"typedOp","type":"InputChannel","op":{"_":"getInputChannelByIdOp","from":"channel"}}},{"_":"typedOpArg","key":"max_id","value":{"_":"typedOp","type":"long","op":{"_":"copyOp","from":"max_id"}}},{"_":"typedOpArg","key":"min_id","value":{"_":"typedOp","type":"long","op":{"_":"copyOp","from":"max_id"}}},{"_":"typedOpArg","key":"limit","value":{"_":"typedOp","type":"int","op":{"_":"intLiteralOp","value":1}}},{"_":"typedOpArg","key":"q","value":{"_":"typedOp","type":"string","op":{"_":"stringLiteralOp","value":""}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceStoryAlbum","action":{"_":"callOp","method":"stories.getAlbums","args":[{"_":"typedOpArg","key":"peer","value":{"_":"typedOp","type":"InputPeer","op":{"_":"getInputPeerByIdOp","from":"peer"}}},{"_":"typedOpArg","key":"hash","value":{"_":"typedOp","type":"long","op":{"_":"longLiteralOp","value":0}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceBotPreviewMedia","action":{"_":"callOp","method":"bots.getPreviewMedias","args":[{"_":"typedOpArg","key":"bot","value":{"_":"typedOp","type":"InputUser","op":{"_":"getInputUserByIdOp","from":"bot"}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceBotPreviewInfo","action":{"_":"callOp","method":"bots.getPreviewInfo","args":[{"_":"typedOpArg","key":"bot","value":{"_":"typedOp","type":"InputUser","op":{"_":"getInputUserByIdOp","from":"bot"}}},{"_":"typedOpArg","key":"lang_code","value":{"_":"typedOp","type":"string","op":{"_":"copyOp","from":"lang_code"}}}]}},{"_":"refreshAction","stored_constructor":"fileSourcePaidMedia","action":{"_":"callOp","method":"messages.getExtendedMedia","args":[{"_":"typedOpArg","key":"id","value":{"_":"typedOp","type":"Vector","op":{"_":"vectorOp","values":[{"_":"copyOp","from":"id"}]}}},{"_":"typedOpArg","key":"peer","value":{"_":"typedOp","type":"InputPeer","op":{"_":"getInputPeerByIdOp","from":"peer"}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceSavedMusic","action":{"_":"callOp","method":"users.getSavedMusicByID","args":[{"_":"typedOpArg","key":"id","value":{"_":"typedOp","type":"InputUser","op":{"_":"getInputUserByIdOp","from":"user_id"}}},{"_":"typedOpArg","key":"documents","value":{"_":"typedOp","type":"Vector","op":{"_":"vectorOp","values":[{"_":"constructorOp","constructor":"inputDocument","args":[{"_":"typedOpArg","key":"id","value":{"_":"typedOp","type":"long","op":{"_":"copyOp","from":"id"}}},{"_":"typedOpArg","key":"access_hash","value":{"_":"typedOp","type":"long","op":{"_":"copyOp","from":"access_hash"}}},{"_":"typedOpArg","key":"file_reference","value":{"_":"typedOp","type":"bytes","op":{"_":"bytesLiteralOp","value":{"_":"bytes","bytes":""}}}}]}]}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceChatFull","action":{"_":"callOp","method":"messages.getFullChat","args":[{"_":"typedOpArg","key":"chat_id","value":{"_":"typedOp","type":"long","op":{"_":"copyOp","from":"chat_id"}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceChannelFull","action":{"_":"callOp","method":"channels.getFullChannel","args":[{"_":"typedOpArg","key":"channel","value":{"_":"typedOp","type":"InputChannel","op":{"_":"getInputChannelByIdOp","from":"channel"}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceCommunityFull","action":{"_":"callOp","method":"channels.getFullChannel","args":[{"_":"typedOpArg","key":"channel","value":{"_":"typedOp","type":"InputChannel","op":{"_":"getInputChannelByIdOp","from":"channel"}}}]}},{"_":"refreshAction","stored_constructor":"fileSourcePremiumPromo","action":{"_":"callOp","method":"help.getPremiumPromo","args":[]}},{"_":"refreshAction","stored_constructor":"fileSourceStarsTransaction","action":{"_":"callOp","method":"payments.getStarsTransactionsByID","args":[{"_":"typedOpArg","key":"peer","value":{"_":"typedOp","type":"InputPeer","op":{"_":"getInputPeerByIdOp","from":"peer"}}},{"_":"typedOpArg","key":"ton","value":{"_":"typedOp","type":"true","op":{"_":"copyOp","from":"ton"}}},{"_":"typedOpArg","key":"id","value":{"_":"typedOp","type":"Vector","op":{"_":"vectorOp","values":[{"_":"constructorOp","constructor":"inputStarsTransaction","args":[{"_":"typedOpArg","key":"id","value":{"_":"typedOp","type":"string","op":{"_":"copyOp","from":"id"}}},{"_":"typedOpArg","key":"refund","value":{"_":"typedOp","type":"true","op":{"_":"copyOp","from":"refund"}}}]}]}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceAttachMenuBot","action":{"_":"callOp","method":"messages.getAttachMenuBot","args":[{"_":"typedOpArg","key":"bot","value":{"_":"typedOp","type":"InputUser","op":{"_":"getInputUserByIdOp","from":"bot"}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceTheme","action":{"_":"callOp","method":"account.getTheme","args":[{"_":"typedOpArg","key":"theme","value":{"_":"typedOp","type":"InputTheme","op":{"_":"constructorOp","constructor":"inputTheme","args":[{"_":"typedOpArg","key":"id","value":{"_":"typedOp","type":"long","op":{"_":"copyOp","from":"id"}}},{"_":"typedOpArg","key":"access_hash","value":{"_":"typedOp","type":"long","op":{"_":"copyOp","from":"access_hash"}}}]}}},{"_":"typedOpArg","key":"format","value":{"_":"typedOp","type":"string","op":{"_":"themeFormatLiteralOp"}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceWallPaper","action":{"_":"callOp","method":"account.getWallPaper","args":[{"_":"typedOpArg","key":"wallpaper","value":{"_":"typedOp","type":"InputWallPaper","op":{"_":"constructorOp","constructor":"inputWallPaper","args":[{"_":"typedOpArg","key":"id","value":{"_":"typedOp","type":"long","op":{"_":"copyOp","from":"id"}}},{"_":"typedOpArg","key":"access_hash","value":{"_":"typedOp","type":"long","op":{"_":"copyOp","from":"access_hash"}}}]}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceStickerSet","action":{"_":"callOp","method":"messages.getStickerSet","args":[{"_":"typedOpArg","key":"stickerset","value":{"_":"typedOp","type":"InputStickerSet","op":{"_":"copyOp","from":"stickerset"}}},{"_":"typedOpArg","key":"hash","value":{"_":"typedOp","type":"int","op":{"_":"intLiteralOp","value":0}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceSavedGifs","action":{"_":"callOp","method":"messages.getSavedGifs","args":[{"_":"typedOpArg","key":"hash","value":{"_":"typedOp","type":"long","op":{"_":"longLiteralOp","value":0}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceSavedRingtones","action":{"_":"callOp","method":"account.getSavedRingtones","args":[{"_":"typedOpArg","key":"hash","value":{"_":"typedOp","type":"long","op":{"_":"longLiteralOp","value":0}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceAvailableEffects","action":{"_":"callOp","method":"messages.getAvailableEffects","args":[{"_":"typedOpArg","key":"hash","value":{"_":"typedOp","type":"int","op":{"_":"intLiteralOp","value":0}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceAvailableReactions","action":{"_":"callOp","method":"messages.getAvailableReactions","args":[{"_":"typedOpArg","key":"hash","value":{"_":"typedOp","type":"int","op":{"_":"intLiteralOp","value":0}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceUserProfilePhoto","action":{"_":"callOp","method":"photos.getUserPhotos","args":[{"_":"typedOpArg","key":"user_id","value":{"_":"typedOp","type":"InputUser","op":{"_":"getInputUserByIdOp","from":"user_id"}}},{"_":"typedOpArg","key":"offset","value":{"_":"typedOp","type":"int","op":{"_":"intLiteralOp","value":-1}}},{"_":"typedOpArg","key":"max_id","value":{"_":"typedOp","type":"long","op":{"_":"copyOp","from":"max_id"}}},{"_":"typedOpArg","key":"limit","value":{"_":"typedOp","type":"int","op":{"_":"intLiteralOp","value":1}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceDocumentByHash","action":{"_":"callOp","method":"messages.getDocumentByHash","args":[{"_":"typedOpArg","key":"sha256","value":{"_":"typedOp","type":"bytes","op":{"_":"copyOp","from":"sha256"}}},{"_":"typedOpArg","key":"size","value":{"_":"typedOp","type":"long","op":{"_":"copyOp","from":"size"}}},{"_":"typedOpArg","key":"mime_type","value":{"_":"typedOp","type":"string","op":{"_":"copyOp","from":"mime_type"}}}]}},{"_":"refreshAction","stored_constructor":"fileSourceWelcomeMessages","action":{"_":"callOp","method":"ephemeral.getWelcomeMessages","args":[{"_":"typedOpArg","key":"peer","value":{"_":"typedOp","type":"InputPeer","op":{"_":"getInputPeerByIdOp","from":"peer"}}},{"_":"typedOpArg","key":"hash","value":{"_":"typedOp","type":"long","op":{"_":"longLiteralOp","value":0}}}]}}],"skipped_incoming_sources":[{"_":"skippedSource","predicate":{"_":"predicate","predicate":"messages.getSponsoredMessages","is_constructor":false},"why":"Do not store file references from sponsored messages"},{"_":"skippedSource","predicate":{"_":"predicate","predicate":"help.getAppUpdate","is_constructor":false},"why":"Don't handle file references from ephemeral app update info"},{"_":"skippedSource","predicate":{"_":"predicate","predicate":"help.getRecentMeUrls","is_constructor":false},"why":"Don't handle file references from recent t.me URLs"},{"_":"skippedSource","predicate":{"_":"predicate","predicate":"draftMessage","is_constructor":true},"why":"Do not store references from drafts"},{"_":"skippedSource","predicate":{"_":"predicate","predicate":"recentMeUrlChatInvite","is_constructor":true},"why":"Do not store references based on chat invite links"},{"_":"skippedSource","predicate":{"_":"predicate","predicate":"messages.checkChatInvite","is_constructor":false},"why":"Do not store references based on chat invite links"},{"_":"skippedSource","predicate":{"_":"predicate","predicate":"messages.getInlineBotResults","is_constructor":false},"why":"Inline bot results are ephemeral"},{"_":"skippedSource","predicate":{"_":"predicate","predicate":"messages.getPreparedInlineMessage","is_constructor":false},"why":"Inline bot results are ephemeral"},{"_":"skippedSource","predicate":{"_":"predicate","predicate":"messages.uploadMedia","is_constructor":false},"why":"A freshly uploaded media file will obtain a context only once it is sent to a chat"},{"_":"skippedSource","predicate":{"_":"predicate","predicate":"messages.uploadImportedMedia","is_constructor":false},"why":"A freshly uploaded media file will obtain a context only once it is sent to a chat"},{"_":"skippedSource","predicate":{"_":"predicate","predicate":"updateServiceNotification","is_constructor":true},"why":"Cannot refetch service notifications"},{"_":"skippedSource","predicate":{"_":"predicate","predicate":"messages.getWebPagePreview","is_constructor":false},"why":"No locations are added for the method call, as it doesn't use persistent IDs as input; the location is instead extracted from the persistent IDs in the returned WebPage object"},{"_":"skippedSource","predicate":{"_":"predicate","predicate":"payments.resaleStarGifts","is_constructor":true},"why":"Contexts for star gifts are not yet implemented"},{"_":"skippedSource","predicate":{"_":"predicate","predicate":"payments.starGiftUpgradePreview","is_constructor":true},"why":"Contexts for star gifts are not yet implemented"},{"_":"skippedSource","predicate":{"_":"predicate","predicate":"starGift","is_constructor":true},"why":"Contexts for star gifts are not yet implemented"},{"_":"skippedSource","predicate":{"_":"predicate","predicate":"starGiftUnique","is_constructor":true},"why":"Contexts for star gifts are not yet implemented"},{"_":"skippedSource","predicate":{"_":"predicate","predicate":"starGiftCollection","is_constructor":true},"why":"Contexts for star gifts are not yet implemented"},{"_":"skippedSource","predicate":{"_":"predicate","predicate":"payments.starGiftCollections","is_constructor":true},"why":"Contexts for star gifts are not yet implemented"},{"_":"skippedSource","predicate":{"_":"predicate","predicate":"payments.starGiftUpgradeAttributes","is_constructor":true},"why":"Contexts for star gifts are not yet implemented"},{"_":"skippedSource","predicate":{"_":"predicate","predicate":"updateEditEphemeralMessage","is_constructor":true},"why":"Do not store file references from ephemeral messages"},{"_":"skippedSource","predicate":{"_":"predicate","predicate":"updateEphemeralBotCallbackQuery","is_constructor":true},"why":"Do not store file references from ephemeral messages"},{"_":"skippedSource","predicate":{"_":"predicate","predicate":"updateNewEphemeralMessage","is_constructor":true},"why":"Do not store file references from ephemeral messages"},{"_":"skippedSource","predicate":{"_":"predicate","predicate":"messages.translatedRichMessage","is_constructor":true},"why":"Do not store file references from translated rich messages"},{"_":"skippedSource","predicate":{"_":"predicate","predicate":"messages.composedRichMessageWithAI","is_constructor":true},"why":"Do not store file references from composed rich messages"},{"_":"skippedSource","predicate":{"_":"predicate","predicate":"updateChatUserTyping","is_constructor":true},"why":"Documents encountered in rich text message live drafts are ephemeral"},{"_":"skippedSource","predicate":{"_":"predicate","predicate":"updateChannelUserTyping","is_constructor":true},"why":"Documents encountered in rich text message live drafts are ephemeral"},{"_":"skippedSource","predicate":{"_":"predicate","predicate":"updateUserTyping","is_constructor":true},"why":"Documents encountered in rich text message live drafts are ephemeral"},{"_":"skippedSource","predicate":{"_":"predicate","predicate":"messages.getCustomEmojiDocuments","is_constructor":false},"why":"Do not store file references in this context"},{"_":"skippedSource","predicate":{"_":"predicate","predicate":"account.uploadTheme","is_constructor":false},"why":"A freshly uploaded theme file will obtain a context only once it is created via account.createTheme"}]} \ No newline at end of file diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225_file_ref_map_schema.json b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232_file_ref_map_schema.json similarity index 96% rename from resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225_file_ref_map_schema.json rename to resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232_file_ref_map_schema.json index 7b700b5..fbee5db 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225_file_ref_map_schema.json +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232_file_ref_map_schema.json @@ -156,7 +156,22 @@ "type": "TraverserIncoming" }, { - "id": "-584595818", + "id": "-566509478", + "predicate": "predicate", + "params": [ + { + "name": "predicate", + "type": "string" + }, + { + "name": "is_constructor", + "type": "Bool" + } + ], + "type": "Predicate" + }, + { + "id": "1321497882", "predicate": "source", "params": [ { @@ -165,11 +180,7 @@ }, { "name": "predicate", - "type": "string" - }, - { - "name": "is_constructor", - "type": "flags.0?true" + "type": "Predicate" }, { "name": "stored_constructor", @@ -185,11 +196,11 @@ }, { "name": "needs_parent", - "type": "flags.3?string" + "type": "flags.3?Predicate" }, { - "name": "parent_is_constructor", - "type": "flags.4?true" + "name": "needs_not_parents", + "type": "Vector" } ], "type": "Source" @@ -248,20 +259,12 @@ "type": "TraverserOutgoing" }, { - "id": "492031253", + "id": "726941551", "predicate": "skippedSource", "params": [ - { - "name": "flags", - "type": "#" - }, { "name": "predicate", - "type": "string" - }, - { - "name": "is_constructor", - "type": "flags.0?true" + "type": "Predicate" }, { "name": "why", @@ -514,7 +517,7 @@ "type": "ActionOp" }, { - "id": "595085800", + "id": "-1918582098", "predicate": "getMessageOp", "params": [ { @@ -525,10 +528,6 @@ "name": "id", "type": "TypedOp" }, - { - "name": "from_scheduled", - "type": "TypedOp" - }, { "name": "quick_reply_shortcut_id", "type": "TypedOp" diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225_file_ref_map_schema.tl b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232_file_ref_map_schema.tl similarity index 88% rename from resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225_file_ref_map_schema.tl rename to resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232_file_ref_map_schema.tl index 9da9731..ff5fa06 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225_file_ref_map_schema.tl +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232_file_ref_map_schema.tl @@ -14,7 +14,10 @@ traverseMethodResult#fda9f236 name:string push_sources:Vector is_needed_ traverseIncomingConstructor#6e4d00b6 type:string predicate:string params:Vector push_sources:Vector is_needed_parent:Bool = TraverserIncoming; traverseCommitSourceLocation#94cc59c5 type:string predicate:string push_sources:Vector stored_constructor:string = TraverserIncoming; -source#dd27c696 flags:# predicate:string is_constructor:flags.0?true stored_constructor:string stored_params:Vector skipped_flags:Vector needs_parent:flags.3?string parent_is_constructor:flags.4?true = Source; +// Points to a constructor or method +predicate#de3bc05a predicate:string is_constructor:Bool = Predicate; + +source#4ec4751a flags:# predicate:Predicate stored_constructor:string stored_params:Vector skipped_flags:Vector needs_parent:flags.3?Predicate needs_not_parents:Vector = Source; // Traversers (outgoing) traverseOutgoingConstructor#3fc5026d type:string predicate:string params:Vector = TraverserOutgoing; @@ -22,7 +25,7 @@ traverseSwapLocation#032bf95d type:string predicate:string stored_constructor:st traverseMethodCall#9244f5bb name:string params:Vector = TraverserOutgoing; // Skipped sources -skippedSource#1d53cd15 flags:# predicate:string is_constructor:flags.0?true why:string = SkippedSource; +skippedSource#2b543f6f predicate:Predicate why:string = SkippedSource; // Refresh actions refreshAction#d4e15689 stored_constructor:string action:ActionOp = RefreshAction; @@ -55,7 +58,7 @@ extractUserIdFromInputUserAndStore#7720aa2e from:Path to:string = FieldExtractor // Actions callOp#c2ff3383 method:string args:Vector = ActionOp; -getMessageOp#237849e8 peer:TypedOp id:TypedOp from_scheduled:TypedOp quick_reply_shortcut_id:TypedOp = ActionOp; +getMessageOp#8da4c2ae peer:TypedOp id:TypedOp quick_reply_shortcut_id:TypedOp = ActionOp; // For string => TypedOp dictionaries typedOpArg#3a2930c2 key:string value:TypedOp = TypedOpArg; diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/list.json b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/list.json index 0a7724a..c2cbf64 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/list.json +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/list.json @@ -1 +1 @@ -[18,23,25,27,33,38,40,41,42,44,45,46,51,53,55,57,62,65,66,68,70,71,72,73,75,81,82,86,89,91,95,97,98,100,102,103,104,105,109,110,111,112,113,114,117,119,120,121,129,131,135,136,139,140,142,143,144,145,146,148,150,151,152,155,158,160,161,162,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225] \ No newline at end of file +[18,23,25,27,33,38,40,41,42,44,45,46,51,53,55,57,62,65,66,68,70,71,72,73,75,81,82,86,89,91,95,97,98,100,102,103,104,105,109,110,111,112,113,114,117,119,120,121,129,131,135,136,139,140,142,143,144,145,146,148,150,151,152,155,158,160,161,162,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232] \ No newline at end of file diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/list_file_ref_map.json b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/list_file_ref_map.json index 8fdb225..ea219ae 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/list_file_ref_map.json +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/list_file_ref_map.json @@ -1 +1 @@ -[214,215,216,217,218,219,220,221,222,223,224,225] \ No newline at end of file +[214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232] \ No newline at end of file diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/AnnotationsBuilder.php b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/AnnotationsBuilder.php index 9da1b7c..8f78bfb 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/AnnotationsBuilder.php +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/AnnotationsBuilder.php @@ -24,6 +24,7 @@ use danog\ClassFinder\ClassFinder; use danog\MadelineProto\TL\TL; use ReflectionClass; +use ReflectionIntersectionType; use ReflectionMethod; use ReflectionNamedType; use ReflectionType; @@ -64,6 +65,9 @@ public function __construct(Logger $logger, array $settings, array $reflectionCl unset($this->blacklistHard['messages.getHistory'], $this->blacklistHard['channels.getMessages'], $this->blacklistHard['messages.getMessages'], $this->blacklistHard['updates.getDifference'], $this->blacklistHard['updates.getChannelDifference'], $this->blacklistHard['updates.getState']); file_put_contents(__DIR__.'/../src/Namespace/Blacklist.php', 'prepareTLPsalmType($data['type'], false); $description = $this->prepareTLTypeDescription($data['type'], ''); $contents .= " * @return {$psalmType} {$description}\n"; + // Every API method performs network I/O, so it is impure; declaring it lets Psalm's + // taint/security analysis reason about these entry points (psalm.dev/364). + $contents .= " * @psalm-impure\n"; $contents .= " */\n"; $contents .= " public function {$method}("; $contents .= implode(', ', $signature); @@ -592,6 +599,8 @@ private function createInternalClasses(): void fwrite($handle, " * This file is automatically generated by the build_docs.php file\n"); fwrite($handle, " * and is used only for autocompletion in multiple IDEs\n"); fwrite($handle, " * don't modify it manually.\n"); + fwrite($handle, " *\n"); + fwrite($handle, " * @generated Automatically generated by build_docs.php — do not edit.\n"); fwrite($handle, " */\n\n"); fwrite($handle, "namespace {$this->namespace};\n"); fwrite($handle, "use Generator;\n"); @@ -653,10 +662,15 @@ protected function exportNamespaces(): void fwrite($handle, " * This file is automatic generated by build_docs.php file\n"); fwrite($handle, " * and is used only for autocomplete in multiple IDE\n"); fwrite($handle, " * don't modify manually.\n"); + fwrite($handle, " *\n"); + fwrite($handle, " * @generated Automatically generated by build_docs.php — do not edit.\n"); fwrite($handle, " */\n\n"); fwrite($handle, "namespace {$this->namespace}\\Namespace;\n"); - fwrite($handle, "\ninterface {$namespace}\n{"); + // A namespace is a stateful service (it wraps the live API), not a value object, so + // it is explicitly mutable — this satisfies Psalm's security-analysis requirement + // that every interface declare its immutability (psalm.dev/365). + fwrite($handle, "\n/** @psalm-mutable */\ninterface {$namespace}\n{"); } foreach ($methods as $contents) { fwrite($handle, $contents); @@ -671,9 +685,11 @@ protected function exportNamespaces(): void fwrite($handle, " * This file is automatically generated by the build_docs.php file\n"); fwrite($handle, " * and is used only for autocompletion in multiple IDEs\n"); fwrite($handle, " * don't modify it manually.\n"); + fwrite($handle, " *\n"); + fwrite($handle, " * @generated Automatically generated by build_docs.php — do not edit.\n"); fwrite($handle, " */\n\n"); fwrite($handle, "namespace {$this->namespace}\\EventHandler;\n"); - fwrite($handle, "/** @internal An internal interface used to avoid type errors when using simple filters. */\n"); + fwrite($handle, "/**\n * @internal An internal interface used to avoid type errors when using simple filters.\n * @psalm-mutable\n */\n"); fwrite($handle, "interface SimpleFilters extends "); /** @psalm-suppress UndefinedClass */ fwrite($handle, implode(", ", array_map(static fn ($s) => "\\$s", ClassFinder::getClassesInNamespace(\danog\MadelineProto\EventHandler\SimpleFilter::class, ClassFinder::RECURSIVE_MODE|ClassFinder::ALLOW_INTERFACES)))); @@ -693,6 +709,8 @@ private function typeToStr(ReflectionType $type): string $new .= $type->getName() === 'self' ? $this->reflectionClasses['API'] : $type->getName(); } elseif ($type instanceof ReflectionUnionType) { return implode('|', array_map($this->typeToStr(...), $type->getTypes())); + } elseif ($type instanceof ReflectionIntersectionType) { + return implode('&', array_map($this->typeToStr(...), $type->getTypes())); } return $new; } diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/DocsBuilder.php b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/DocsBuilder.php index e31a9e8..3290eb5 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/DocsBuilder.php +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/DocsBuilder.php @@ -126,7 +126,7 @@ public function mkDocs(): void if (isset($this->tdDescriptions['types'][$otype])) { $header = "{$this->tdDescriptions['types'][$otype]}\n\n$header"; } - $header = sprintf( + $header = \sprintf( $this->templates['Type'], $type, $redir, @@ -163,6 +163,6 @@ public static function addToLang(string $key, string $value = '', bool $force = */ protected function template(string $name, string ...$params): string { - return sprintf($this->templates[$name], ...$params); + return \sprintf($this->templates[$name], ...$params); } } diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/BuildMode/Ast.php b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/BuildMode/Ast.php index 597bea1..05818ad 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/BuildMode/Ast.php +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/BuildMode/Ast.php @@ -258,7 +258,7 @@ public function addNode(TLContext $ctx, ?array $action = null, ?string $why = nu // aka the source_constructor will always be of the same type, it should have all // needed flags, and the behavior will be consistent. if ($action['_'] === 'getMessageOp') { - foreach (['from_scheduled', 'quick_reply_shortcut_id'] as $k) { + foreach (['quick_reply_shortcut_id'] as $k) { if (!isset($existingAction[$k]) && isset($action[$k])) { $existingAction[$k] = $action[$k]; } elseif (isset($existingAction[$k]) && !isset($action[$k])) { @@ -291,18 +291,40 @@ public function addNode(TLContext $ctx, ?array $action = null, ?string $why = nu ]; } + $needsNotParents = []; + if ($action['_'] === 'getMessageOp') { + $needsNotParents = [ + [ + '_' => 'predicate', + 'predicate' => 'messages.getScheduledMessages', + 'is_constructor' => false, + ], + [ + '_' => 'predicate', + 'predicate' => 'updateNewScheduledMessage', + 'is_constructor' => true, + ], + ]; + } + $out = [ '_' => 'source', - 'predicate' => $ctx->position, - 'is_constructor' => $ctx->isConstructor, + 'predicate' => [ + '_' => 'predicate', + 'predicate' => $ctx->position, + 'is_constructor' => $ctx->isConstructor, + ], 'stored_constructor' => $constructor, 'stored_params' => array_column($this->stored, 'extractor'), 'skipped_flags' => $skipped, - 'parent_is_constructor' => false, + 'needs_not_parents' => $needsNotParents, ]; if ($this->needsParent !== null) { - $out['needs_parent'] = $this->needsParent; - $out['parent_is_constructor'] = $ctx->tl->isConstructor($this->needsParent); + $out['needs_parent'] = [ + '_' => 'predicate', + 'predicate' => $this->needsParent, + 'is_constructor' => $ctx->tl->isConstructor($this->needsParent), + ]; $this->needsParentList[$this->needsParent] = true; } $this->output[$ctx->position][] = $out; @@ -315,8 +337,11 @@ public function addNode(TLContext $ctx, ?array $action = null, ?string $why = nu $this->skipped[] = [ '_' => 'skippedSource', 'why' => $why, - 'predicate' => $ctx->position, - 'is_constructor' => $ctx->isConstructor, + 'predicate' => [ + '_' => 'predicate', + 'predicate' => $ctx->position, + 'is_constructor' => $ctx->isConstructor, + ], ]; Assert::null($action); Assert::isEmpty($this->stored); diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/FileRefGenerator.php b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/FileRefGenerator.php index d2a4202..8236bdf 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/FileRefGenerator.php +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/FileRefGenerator.php @@ -67,12 +67,29 @@ public static function generate(int $layer, string $inputSchema, string $outputF $locations[$constructor][] = new GetMessageOp( new GetInputPeerOp(new Path([[$constructor, 'peer_id']])), new CopyOp([[$constructor, 'id']]), - $constructor === 'message' ? new CopyOp([[$constructor, 'from_scheduled', Path::FLAG_PASSTHROUGH]]) : null, $constructor === 'message' ? new CopyOp([[$constructor, 'quick_reply_shortcut_id', Path::FLAG_PASSTHROUGH]]) : null, 'fileSourceMessage', ); } + $locations['message'][] = new CallOp( + 'messages.getScheduledMessages', + [ + 'peer' => new GetInputPeerOp(new Path([['messages.getScheduledMessages', 'peer']], true)), + 'id' => new ArrayOp(new CopyOp([['message', 'id']])), + ], + 'fileSourceScheduledMessage' + ); + + $locations['message'][] = new CallOp( + 'messages.getScheduledMessages', + [ + 'peer' => new GetInputPeerOp(new Path([['updateNewScheduledMessage', 'message'], ['message', 'peer_id']], true)), + 'id' => new ArrayOp(new CopyOp([['message', 'id']])), + ], + 'fileSourceScheduledMessage' + ); + $storyMethods = []; foreach (['stories.Stories'] as $t) { foreach ($TL->getMethodsOfType($t) as $method => $_) { @@ -216,6 +233,13 @@ public static function generate(int $layer, string $inputSchema, string $outputF ], 'fileSourceChannelFull' ); + $locations['communityFull'][] = new CallOp( + 'channels.getFullChannel', + [ + 'channel' => new GetInputChannelOp(new Path([['communityFull', 'id']])), + ], + 'fileSourceCommunityFull' + ); $locations['help.getPremiumPromo'][] = new CopyMethodCallOp('help.getPremiumPromo', 'fileSourcePremiumPromo'); $locations['help.getAppUpdate'][] = new Noop("Don't handle file references from ephemeral app update info"); @@ -316,6 +340,7 @@ public static function generate(int $layer, string $inputSchema, string $outputF $locations[$c][] = new CallOp('account.getSavedRingtones', ['hash' => new PrimitiveLiteralOp('long', 0)], 'fileSourceSavedRingtones'); } + $locations['draftMessage'][] = new Noop('Do not store references from drafts'); $locations['recentMeUrlChatInvite'][] = new Noop('Do not store references based on chat invite links'); $locations['messages.checkChatInvite'][] = new Noop('Do not store references based on chat invite links'); @@ -334,7 +359,6 @@ public static function generate(int $layer, string $inputSchema, string $outputF new GetInputPeerOp(new Path([['updateMessagePoll', 'peer', Path::FLAG_IF_ABSENT_ABORT]])), new CopyOp([['updateMessagePoll', 'msg_id', Path::FLAG_IF_ABSENT_ABORT]]), null, - null, 'fileSourceMessage', ); @@ -438,6 +462,15 @@ public static function generate(int $layer, string $inputSchema, string $outputF 'fileSourceSavedMusic' ); + $locations['ephemeral.getWelcomeMessages'][] = new CallOp( + 'ephemeral.getWelcomeMessages', + [ + 'peer' => new GetInputPeerOp(new Path([['ephemeral.getWelcomeMessages', 'peer']])), + 'hash' => new PrimitiveLiteralOp('long', 0), + ], + 'fileSourceWelcomeMessages' + ); + // Ignore these for now foreach (['payments.ResaleStarGifts', 'payments.StarGiftUpgradePreview', 'StarGift', 'StarGiftCollection', 'payments.StarGiftCollections', 'payments.StarGiftUpgradeAttributes'] as $type) { foreach ($TL->getConstructorsOfType($type) as $constructor => $_) { @@ -448,6 +481,16 @@ public static function generate(int $layer, string $inputSchema, string $outputF } } + $locations['updateEditEphemeralMessage'][] = new Noop('Do not store file references from ephemeral messages'); + $locations['updateEphemeralBotCallbackQuery'][] = new Noop('Do not store file references from ephemeral messages'); + $locations['updateNewEphemeralMessage'][] = new Noop('Do not store file references from ephemeral messages'); + + $locations['messages.translatedRichMessage'][] = new Noop('Do not store file references from translated rich messages'); + $locations['messages.composedRichMessageWithAI'][] = new Noop('Do not store file references from composed rich messages'); + + foreach (['updateChatUserTyping', 'updateChannelUserTyping', 'updateUserTyping'] as $type) { + $locations[$type][] = new Noop('Documents encountered in rich text message live drafts are ephemeral'); + } $locations['messages.getCustomEmojiDocuments'][] = new Noop("Do not store file references in this context"); $locations['account.uploadTheme'][] = new Noop('A freshly uploaded theme file will obtain a context only once it is created via account.createTheme'); @@ -534,8 +577,7 @@ public static function generate(int $layer, string $inputSchema, string $outputF $pre = [ 'fileSourceMessage' => [ 'flags' => '#', - 'from_scheduled' => 'flags.0?true', - 'quick_reply_shortcut_id' => 'flags.1?int', + 'quick_reply_shortcut_id' => 'flags.0?int', 'peer' => 'long', 'id' => 'int', ], @@ -702,7 +744,7 @@ static function (array $stack) use ($locations, $TL, $tmp, &$incomingTraversalPa // The above are covered by the GetInputStickerSet document context || $top === 'updateMessagePoll' - // Tmp + // It's okay ) { return; } diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetMessageOp.php b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetMessageOp.php index d262014..a426aab 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetMessageOp.php +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetMessageOp.php @@ -28,7 +28,6 @@ public function __construct( private readonly TypedOp $peer, private readonly TypedOp $id, - private readonly ?TypedOp $fromScheduled, private readonly ?TypedOp $quickReplyShortcutId, private readonly string $stored_constructor ) { @@ -43,16 +42,12 @@ public function normalize(array $stack, string $current, bool $ignoreFlag): ?Act if ($id === null) { return null; } - $fromScheduled = $this->fromScheduled?->normalize($stack, $current, $ignoreFlag); - if ($fromScheduled === null && $this->fromScheduled !== null) { - return null; - } $quickReplyShortcutId = $this->quickReplyShortcutId?->normalize($stack, $current, $ignoreFlag); if ($quickReplyShortcutId === null && $this->quickReplyShortcutId !== null) { return null; } - if ($peer !== $this->peer || $id !== $this->id || $fromScheduled !== $this->fromScheduled || $quickReplyShortcutId !== $this->quickReplyShortcutId) { - return new self($peer, $id, $fromScheduled, $quickReplyShortcutId, $this->stored_constructor); + if ($peer !== $this->peer || $id !== $this->id || $quickReplyShortcutId !== $this->quickReplyShortcutId) { + return new self($peer, $id, $quickReplyShortcutId, $this->stored_constructor); } return $this; } @@ -65,16 +60,10 @@ public function build(TLContext $tl): void { Assert::eq($this->peer->getType($tl), 'InputPeer'); Assert::eq($this->id->getType($tl), 'int'); - if ($this->fromScheduled !== null) { - Assert::eq($this->fromScheduled->getType($tl), 'true'); - } if ($this->quickReplyShortcutId !== null) { Assert::eq($this->quickReplyShortcutId->getType($tl), 'int'); } $extra = []; - if ($this->fromScheduled !== null) { - $extra['from_scheduled'] = $tl->build($this->fromScheduled, 'from_scheduled'); - } if ($this->quickReplyShortcutId !== null) { $extra['quick_reply_shortcut_id'] = $tl->build($this->quickReplyShortcutId, 'quick_reply_shortcut_id'); } diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/TL/Builder.php b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/TL/Builder.php index 6d96cf1..102b8cc 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/TL/Builder.php +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/TL/Builder.php @@ -425,7 +425,7 @@ protected function w(string $data): void } public function build(): void { - $this->w("namespace};\n/** @internal Autogenerated using tools/TL/Builder.php */\n"); + $this->w("namespace};\n/** @internal @generated Autogenerated using tools/TL/Builder.php — do not edit. */\n"); foreach ([ MTProto::class, Connection::class, diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/build_docs.php b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/build_docs.php index d880c81..86c2bda 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/build_docs.php +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/build_docs.php @@ -1,5 +1,5 @@ #!/usr/bin/env php - * @license https://opensource.org/licenses/AGPL-3.0 AGPLv3 * @link https://docs.madelineproto.xyz MadelineProto documentation + * + * @generated Automatically generated by build_docs.php — do not edit. */ namespace danog\MadelineProto\RPCError; diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/build_docs/schemas.php b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/build_docs/schemas.php index 84bfdca..1324930 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/build_docs/schemas.php +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/build_docs/schemas.php @@ -13,22 +13,34 @@ function loadSchemas(): array $stored = trim(@file_get_contents(getcwd().'/schemas/last')); $page = 1; $had = []; + // The layer of the newest schema: layer numbers aren't monotonic (tdesktop went from layer 230 to 231 and back). + $current = null; $client = HttpClientBuilder::buildDefault(); do { - $res = $client->request(new Request("https://api.github.com/repos/telegramdesktop/tdesktop/commits?path=Telegram/SourceFiles/mtproto/scheme/api.tl&per_page=100&page=$page"))->getBody()->buffer(); + $request = new Request("https://api.github.com/repos/telegramdesktop/tdesktop/commits?path=Telegram/SourceFiles/mtproto/scheme/api.tl&per_page=100&page=$page"); + // Unauthenticated, the API allows 60 requests per hour per IP, shared by all of the jobs of a CI provider. + if ($token = getenv('GITHUB_TOKEN')) { + $request->setHeader('Authorization', "Bearer $token"); + } + $res = $client->request($request)->getBody()->buffer(); foreach (json_decode($res, true) as $idx => $commit) { $hash = $commit['sha']; if ($page === 1 && $idx === 0) { file_put_contents(getcwd().'/schemas/last', $hash); } + $last = $hash === $stored && $current !== null + ? '' + : file_get_contents("https://raw.githubusercontent.com/telegramdesktop/tdesktop/$hash/Telegram/SourceFiles/mtproto/scheme/api.tl"); + if (preg_match("|// Layer (\d+)|i", $last, $matches)) { + $current ??= (int) $matches[1]; + } if ($hash === $stored) { break 2; } - $last = file_get_contents("https://raw.githubusercontent.com/telegramdesktop/tdesktop/$hash/Telegram/SourceFiles/mtproto/scheme/api.tl"); - if (!preg_match("|// Layer (\d+)|i", $last, $matches)) { + if (!$matches) { continue; } - $layer = $matches[1]; + $layer = (int) $matches[1]; if (isset($had[$layer])) { continue; } @@ -39,6 +51,17 @@ function loadSchemas(): array $page++; } while (true); + // The schemas of the layers above the current one were abandoned, never served by Telegram. + foreach (glob(getcwd().'/schemas/TL_telegram_v*') as $file) { + if ($current !== null + && preg_match("/telegram_v(\d+)/", $file, $matches) + && (int) $matches[1] > $current + ) { + echo "Removing $file, above the current layer $current".PHP_EOL; + unlink($file); + } + } + $res = []; foreach (glob(getcwd().'/schemas/TL_telegram_*') as $file) { if (str_ends_with($file, '.tl')) { diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/fix_docs.sh b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/fix_docs.sh index a4d53cf..8750037 100755 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/fix_docs.sh +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/fix_docs.sh @@ -2,7 +2,7 @@ if which gsed &>/dev/null; then sed=gsed; else sed=sed;fi -find docs/ -name '*.md' -exec $sed 's/\.md/\.html/g' -i {} + +find docs/ -path docs/themes -prune -o -name '*.md' -exec $sed 's/\.md/\.html/g' -i {} + $sed 's:(danog:(/PHP/danog:g' -i docs/docs/PHP/index.md $sed 's/long|string/long\\|string/g' docs/docs/API_docs/methods/* -i diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/fuzzer.php b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/fuzzer.php index efdd59c..382adc2 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/fuzzer.php +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/fuzzer.php @@ -9,7 +9,6 @@ use danog\MadelineProto\PTSException; use danog\MadelineProto\RPCError\BusinessConnectionNotAllowedError; use danog\MadelineProto\RPCErrorException; -use danog\MadelineProto\Settings; use danog\MadelineProto\Settings\Logger as SettingsLogger; use danog\MadelineProto\Settings\TLSchema; use danog\MadelineProto\TL\TL; @@ -36,6 +35,33 @@ set_error_handler(['\danog\MadelineProto\Exception', 'ExceptionErrorHandler']); +$classes = []; +foreach (new RecursiveIteratorIterator( + new RecursiveDirectoryIterator( + __DIR__.'/../src/', + FilesystemIterator::CURRENT_AS_PATHNAME|FilesystemIterator::SKIP_DOTS, + ), + RecursiveIteratorIterator::LEAVES_ONLY, +) as $f +) { + $f = realpath($f); + $f = substr($f, strlen(realpath(__DIR__.'/../src/'))+1); + if (str_ends_with($f, '.php')) { + if ($f === 'polyfill.php' || basename($f) === 'entry.php' || $f === 'polyfill_phpseclib3.php') { + continue; + } + $f = str_replace(['/', '.php', 'src\\'], ['\\', '', ''], $f); + $f = "danog\\MadelineProto\\$f"; + $classes[$f] = true; + } +} + +foreach ($classes as $class => $_) { + if (!class_exists($class) && !interface_exists($class) && !trait_exists($class)) { + throw new \RuntimeException("Class $class does not exist"); + } +} + /** * @internal */ @@ -101,20 +127,24 @@ function getTL(TLSchema $schema) echo "No TELERPC_AUTH_TOKEN set, not setting layer number".PHP_EOL; } -$settings = new Settings; -$settings->setSchema($schema); -$settings->getLogger()->setLevel(Logger::ULTRA_VERBOSE); +// Only the settings to change, not a whole Settings object: merging it would also reset the others to their +// defaults, the test mode of the sessions (on the test servers) included. +$loggerSettings = (new SettingsLogger)->setLevel(Logger::ULTRA_VERBOSE); +$updateSettings = static function (API $API) use ($schema, $loggerSettings): void { + $API->updateSettings($schema); + $API->updateSettings($loggerSettings); +}; echo "Unauthed:".PHP_EOL; $unauthed = new \danog\MadelineProto\API('fuzz_unauth.madeline'); -$unauthed->updateSettings($settings); +$updateSettings($unauthed); Assert::false($unauthed->getSelf(), "fuzz_unauth.madeline is authed!"); $unauthed->restart(); echo "Bot login:".PHP_EOL; $bot = new \danog\MadelineProto\API('fuzz_bot.madeline'); $bot->start(); -$bot->updateSettings($settings); +$updateSettings($bot); Assert::true($bot->isSelfBot(), "fuzz_bot.madeline is not a bot!"); $u = $bot->getSelf()['username']; Assert::true($bot->getSelf()['bot_business'], "fuzz_bot.madeline ($u) is not a business bot, enable business mode in botfather!"); @@ -123,7 +153,7 @@ function getTL(TLSchema $schema) echo "User login:".PHP_EOL; $user = new \danog\MadelineProto\API('fuzz_user.madeline'); $user->start(); -$user->updateSettings($settings); +$updateSettings($user); Assert::true($user->isSelfUser(), "fuzz_user.madeline is not a user!"); $user->restart(); @@ -132,12 +162,13 @@ function getTL(TLSchema $schema) $cId = null; -$toggleBusiness = static function (bool $enable) use ($user, $bot, &$cId): void { +$toggleBusiness = static function (bool $enable) use ($user, $bot, $layer, &$cId): void { $bot->getUpdates(); Logger::log($enable ? "Initializing business connection..." : "Deinitializing business connection..."); $rights = ['_' => 'businessBotRights']; - foreach ($user->getTL()->getConstructors()->findByPredicate('businessBotRights')['params'] as $param) { + // Use the local schema: fetching the TL object over IPC would serialize the entire remote session. + foreach ($layer['constructors']->findByPredicate('businessBotRights')['params'] as $param) { if ($param['type'] === 'true') { $rights[$param['name']] = true; } @@ -195,33 +226,19 @@ function getCancellationReason(CancelledException $e): string $methods = []; -$wait = static function (bool $force = false) use (&$methods): void { - if (count($methods) >= 10 || $force) { - Logger::log("Processing ".implode(", ", array_keys($methods))); - await($methods); - Logger::log("Done!"); - Assert::isEmpty($methods, "Some methods were not processed!"); - } -}; - +$unauthedNames = []; foreach ($layer['methods']->by_id as $constructor) { $name = $constructor['method']; if (strtolower($name) === 'account.deleteaccount' || !str_contains($name, '.')) { continue; } - $methods["unauthed $name"]= async(static function () use ($unauthed, $name, &$methods): void { - try { - call($unauthed, $name); - } catch (CancelledException $e) { - throw new \RuntimeException("Got cancellation for unauthed $name: ".getCancellationReason($e), previous: $e); - } catch (RPCErrorException|PTSException) { - } - unset($methods["unauthed $name"]); - }); - $wait(); + $unauthedNames []= $name; } +// On the test servers, where the sessions of the CI are. +$testMode = $user->getSettings()->getConnection()->getTestMode(); + $names = []; foreach ($layer['methods']->by_id as $constructor) { $name = $constructor['method']; @@ -235,37 +252,89 @@ function getCancellationReason(CancelledException $e): string || $name === 'photos.updateProfilePhoto' || $name === 'photos.uploadProfilePhoto' || $name === 'payments.resolveStarGiftOffer' // tmp + || ($testMode && $name === 'contacts.getContactIDs') // Never answered on the test servers || !str_contains($name, '.')) { continue; } $names []= $constructor['method']; } +// unauthed + (bot, user, business, business invalid) + bot disconnected +$total = count($unauthedNames) + (count($names) * 5); +$done = 0; +$started = hrtime(true); + +$progress = static function () use (&$done, $total, $started): void { + $percent = $total ? ($done * 100) / $total : 100.0; + $elapsed = (hrtime(true) - $started) / 1e9; + $eta = $done ? ($elapsed / $done) * ($total - $done) : 0.0; + fprintf( + STDERR, + "Progress: %6.2f%% (%d/%d), elapsed %s, ETA %s\n", + $percent, + $done, + $total, + gmdate('H:i:s', (int) $elapsed), + gmdate('H:i:s', (int) $eta), + ); +}; + +$wait = static function (bool $force = false) use (&$methods, $progress): void { + if (count($methods) >= 10 || $force) { + Logger::log("Processing ".implode(", ", array_keys($methods))); + await($methods); + Logger::log("Done!"); + Assert::isEmpty($methods, "Some methods were not processed!"); + $progress(); + } +}; + +/** + * Spawn a fuzzing task, tracking completion for the progress indicator. + * + * @param string $key Unique task name + * @param Closure $task Task to run, must throw RuntimeException on cancellation + */ +$spawn = static function (string $key, Closure $task) use (&$methods, &$done): void { + $methods[$key] = async(static function () use ($key, $task, &$methods, &$done): void { + try { + $task(); + } catch (CancelledException $e) { + throw new \RuntimeException("Got cancellation for $key: ".getCancellationReason($e), previous: $e); + } finally { + unset($methods[$key]); + $done++; + } + }); +}; + +foreach ($unauthedNames as $name) { + $spawn("unauthed $name", static function () use ($unauthed, $name): void { + try { + call($unauthed, $name); + } catch (RPCErrorException|PTSException) { + } + }); + $wait(); +} + foreach ($names as $name) { - $methods["bot $name"]= async(static function () use ($bot, $name, &$methods): void { + $spawn("bot $name", static function () use ($bot, $name): void { try { call($bot, $name); - } catch (CancelledException $e) { - throw new \RuntimeException("Got cancellation for bot $name: ".getCancellationReason($e), previous: $e); } catch (RPCErrorException|PTSException) { } - unset($methods["bot $name"]); }); - $methods["user $name"] = async(static function () use ($user, $name, &$methods): void { + $spawn("user $name", static function () use ($user, $name): void { try { call($user, $name); - } catch (CancelledException $e) { - throw new \RuntimeException("Got cancellation for user $name: ".getCancellationReason($e), previous: $e); } catch (RPCErrorException|PTSException) { } - unset($methods["user $name"]); }); - $methods["business $name"] = async(static function () use ($bot, $name, $cId, $client, $auth, &$methods): void { + $spawn("business $name", static function () use ($bot, $name, $cId, $client, $auth): void { $ok = true; try { call($bot, $name, ['businessConnectionId' => $cId]); - } catch (CancelledException $e) { - throw new \RuntimeException("Got cancellation for business $name: ".getCancellationReason($e), previous: $e); } catch (PTSException|BusinessConnectionNotAllowedError) { $ok = false; } catch (RPCErrorException $e) { @@ -281,16 +350,12 @@ function getCancellationReason(CancelledException $e): string true, ); } - unset($methods["business $name"]); }); - $methods["business invalid $name"] = async(static function () use ($bot, $name, &$methods): void { + $spawn("business invalid $name", static function () use ($bot, $name): void { try { call($bot, $name, ['businessConnectionId' => '']); - } catch (CancelledException $e) { - throw new \RuntimeException("Got cancellation for business invalid $name: ".getCancellationReason($e), previous: $e); } catch (RPCErrorException|PTSException) { } - unset($methods["business invalid $name"]); }); $wait(); @@ -301,14 +366,11 @@ function getCancellationReason(CancelledException $e): string $toggleBusiness(false); foreach ($names as $name) { - $methods["bot disconnected $name"]= async(static function () use ($bot, $name, &$methods): void { + $spawn("bot disconnected $name", static function () use ($bot, $name): void { try { call($bot, $name); - } catch (CancelledException $e) { - throw new \RuntimeException("Got cancellation for bot disconnected $name: ".getCancellationReason($e), previous: $e); } catch (RPCErrorException|PTSException) { } - unset($methods["bot disconnected $name"]); }); $wait(); @@ -316,7 +378,10 @@ function getCancellationReason(CancelledException $e): string $wait(true); -unset($bot, $user, $unauthed, $wait, $toggleBusiness); +Assert::eq($done, $total, "Expected $total tasks, ran $done!"); +echo "Fuzzing complete!".PHP_EOL; + +unset($bot, $user, $unauthed, $wait, $spawn, $progress, $toggleBusiness); // Give time for error reporting routine to finish EventLoop::run(); diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/layerdiff.php b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/layerdiff.php index 84afbdf..dfc0289 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/layerdiff.php +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/layerdiff.php @@ -18,12 +18,17 @@ */ require 'vendor/autoload.php'; -$logger = new Logger(new SettingsLogger); +// The diff is printed on stdout (tests/release_notes.sh adds it to the release notes): log to stderr. +$logger = new Logger((new SettingsLogger)->setType(Logger::FILE_LOGGER)->setExtra('php://stderr')); set_error_handler(['\danog\MadelineProto\Exception', 'ExceptionErrorHandler']); -if ($argc !== 3) { - die("Usage: {$argv[0]} layernumberold layernumbernew\n"); +// --no-send: only print the diff, without sending it to @danogentili with the fuzz_bot.madeline session. +$send = !in_array('--no-send', $argv, true); +$args = array_values(array_filter(array_slice($argv, 1), static fn (string $arg): bool => $arg !== '--no-send')); +if (count($args) !== 2) { + fwrite(STDERR, "Usage: {$argv[0]} [--no-send] layernumberold layernumbernew\n"); + exit(1); } /** * Get TL info of layer. @@ -50,26 +55,36 @@ function getUrl($constructor, $type) return "[$constructor](https://docs.madelineproto.xyz/API_docs/$type/$orig.html)"; } -$old = getTL($argv[1]); -$new = getTL($argv[2]); +$old = getTL($args[0]); +$new = getTL($args[1]); $res = ''; +/** + * A section of the diff, empty if it has no entries. + * + * @internal + */ +function section(string $title, string $entries): string +{ + return $entries === '' ? '' : "\n\n$title:\n$entries"; +} foreach (['methods', 'constructors'] as $type) { $finder = $type === 'methods' ? 'findByMethod' : 'findByPredicate'; $key = $type === 'methods' ? 'method' : 'predicate'; // New constructors - $res .= "\n\nNew ".ucfirst($type).":\n"; + $entries = ''; foreach ($new[$type]->by_id as $constructor) { $name = $constructor[$key]; if (!$old[$type]->$finder($name)) { $name = getUrl($name, $type); - $res .= "- $name\n"; + $entries .= "- $name\n"; } } + $res .= section('New '.ucfirst($type), $entries); // Changed constructors - $res .= "\n\nChanged ".ucfirst($type).":\n"; + $entries = ''; foreach ($new[$type]->by_id as $constructor) { $name = $constructor[$key]; if ($old[$type]->$finder($name)) { @@ -88,33 +103,38 @@ function getUrl($constructor, $type) foreach ($final_new_args as $name => $ttype) { if (!isset($final_old_args[$name]) && $name !== 'flags' && $name !== 'flags2') { $name = Tools::markdownEscape($name); - $res .= "- Added $name param to $url\n"; + $entries .= "- Added $name param to $url\n"; } } foreach ($final_old_args as $name => $ttype) { if (!isset($final_new_args[$name]) && $name !== 'flags' && $name !== 'flags2') { $name = Tools::markdownEscape($name); - $res .= "- Removed $name param from $url\n"; + $entries .= "- Removed $name param from $url\n"; } } } } + $res .= section('Changed '.ucfirst($type), $entries); // Deleted constructors - $res .= "\n\nDeleted ".ucfirst($type).":\n"; + $entries = ''; foreach ($old[$type]->by_id as $constructor) { $name = $constructor[$key]; if (!$new[$type]->$finder($name)) { $name = Tools::markdownEscape($name); - $res .= "- $name\n"; + $entries .= "- $name\n"; } } + $res .= section('Deleted '.ucfirst($type), $entries); } -$bot = new \danog\MadelineProto\API('layerdiff.madeline'); -$bot->start(); - echo $res."\n\n"; +if (!$send) { + exit(0); +} + +$bot = new \danog\MadelineProto\API('fuzz_bot.madeline'); +$bot->start(); foreach (explode("\n\n", $res) as $chunk) { if (!$chunk || !trim(explode(':', $chunk)[1])) { continue; diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/makephar.php b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/makephar.php index ada587d..ebef250 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/makephar.php +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/makephar.php @@ -1,5 +1,5 @@ #!/usr/bin/env php -buildFromDirectory(realpath($argv[1]), '/^((?!tests).)*(\.php|\.py|\.exe|\.html|\.tl|\.json|\.dat|\.h|\.wav)$/i'); +$root = realpath($argv[1]); +$p->buildFromDirectory($root, '/^((?!tests).)*(\.php|\.py|\.exe|\.html|\.tl|\.json|\.dat|\.h|\.wav)$/i'); +// MadelineProto's own resources (like the templates and assets of the web UI) go in whatever their extension +$p->buildFromDirectory($root, '~^'.preg_quote($root, '~').'/vendor/danog/madelineproto/src/~'); $p->setStub('version = (string) min(81, (int) (PHP_MAJOR_VERSION.PHP_MINOR_VERSION)); \define('MADELINE_PHAR_GLOB', getcwd().DIRECTORY_SEPARATOR."madeline*-{$this->version}.phar"); \define('MADELINE_PHAR_VERSION', getcwd().DIRECTORY_SEPARATOR."madeline.version"); - \define('MADELINE_RELEASE_URL', sprintf(self::RELEASE_TEMPLATE, $this->version)); + \define('MADELINE_RELEASE_URL', \sprintf(self::RELEASE_TEMPLATE, $this->version)); } /** @@ -139,7 +141,7 @@ private static function reportComposer(?string $local_release, ?string $remote_r 'method' => 'POST', 'header' => [ 'Content-Type: application/json', - sprintf( + \sprintf( 'User-Agent: Composer/%s (%s; %s; %s; %s%s%s; MadelineProto)', '2.7.4', \function_exists('php_uname') ? @php_uname('s') : 'Unknown', @@ -221,7 +223,8 @@ public function install() if (!file_exists($madeline_phar)) { for ($x = 0; $x < 10; $x++) { - $pharTest = file_get_contents(sprintf(self::PHAR_TEMPLATE, $this->version, $remote_release.$x)); + $pharTest = file_get_contents(\sprintf(self::PHAR_TEMPLATE, $remote_release.$x)) + ?: file_get_contents(\sprintf(self::LEGACY_PHAR_TEMPLATE, $this->version, $remote_release.$x)); if ($pharTest && str_contains($pharTest, $remote_release)) { $phar = $pharTest; unset($pharTest); diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/phpdoc.php b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/phpdoc.php index 10f4a4d..9f405a8 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/phpdoc.php +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/phpdoc.php @@ -106,6 +106,7 @@ || str_starts_with($class, 'danog\\MadelineProto\\MTProtoSession\\') || str_starts_with($class, 'danog\\MadelineProto\\PhpDoc\\') || str_starts_with($class, 'danog\\MadelineProto\\Stream\\') + || str_starts_with($class, 'danog\\MadelineProto\\Test\\') || str_starts_with($class, 'danog\\MadelineProto\\Db\\NullCache')) { return false; } diff --git a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/translator.php b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/translator.php index bb90c87..e639758 100644 --- a/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/translator.php +++ b/resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/translator.php @@ -1,9 +1,7 @@ * @license https://opensource.org/licenses/AGPL-3.0 AGPLv3 * @link https://docs.madelineproto.xyz MadelineProto documentation + * + * @generated Automatically generated by build_docs.php — do not edit. */ namespace danog\MadelineProto; @@ -38,23 +38,40 @@ final class Lang public static array $current_lang = %s; }'; -$base = json_decode(file_get_contents("langs/en.json"), true); +$base = json_decode(file_get_contents("langs/en.json"), true, flags: JSON_THROW_ON_ERROR); + +/** + * The placeholders (they are sprintf formats) and the HTML tags of a string, which its translations must keep. + * + * @return list + */ +$markup = static function (string $string): array { + // Without the space flag: a literal "100% easier" isn't a placeholder. + preg_match_all('/%(?:\d+\$)?[-+0#]*\d*(?:\.\d+)?[bcdeEfFgGosuxX%]|<[^>]*>/', $string, $matches); + // "" is "". + $markup = array_map(static fn (string $m): string => preg_replace('/\s+(?=>)|(?<=<)\s+/', '', preg_replace('/\s+/', ' ', $m)), $matches[0]); + sort($markup); + return $markup; +}; $langs = []; $percentages = []; - -$res = file_get_contents("https://weblate.madelineproto.xyz/api/projects/madelineproto/languages/"); -if ($res !== false) { - $res = json_decode($res, true); - foreach ($res as ['code' => $code, 'translated_percent' => $percent]) { - $percentages[$code] = (int) $percent; - } - - foreach (glob("langs/*.json") as $lang) { - $code = basename($lang, '.json'); - $langs[$code] = array_merge($base, json_decode(file_get_contents($lang), true)); - ksort($langs[$code]); +foreach (glob("langs/*.json") as $file) { + $code = basename($file, '.json'); + $translation = json_decode(file_get_contents($file), true, flags: JSON_THROW_ON_ERROR); + foreach ($translation as $key => $string) { + if (!isset($base[$key]) || $string === '') { + unset($translation[$key]); + } elseif ($markup($string) !== $markup($base[$key])) { + fwrite(STDERR, "$file: the placeholders or tags of $key don't match en.json, using the English one".PHP_EOL); + unset($translation[$key]); + } } - - file_put_contents('src/Lang.php', sprintf($template, var_export($percentages, true), var_export($langs, true), var_export($langs['en'], true))); + $percentages[$code] = intdiv(100 * count($translation), count($base)); + $langs[$code] = array_merge($base, $translation); + ksort($langs[$code]); } +ksort($percentages); +ksort($langs); + +file_put_contents('src/Lang.php', sprintf($template, var_export($percentages, true), var_export($langs, true), var_export($langs['en'], true))); diff --git a/resources/release/preferred-source/additional-source/php-rtc-av/README.md b/resources/release/preferred-source/additional-source/php-rtc-av/README.md new file mode 100644 index 0000000..60ca064 --- /dev/null +++ b/resources/release/preferred-source/additional-source/php-rtc-av/README.md @@ -0,0 +1,47 @@ +# PHP AV Libraries + +[![PHP Version](https://img.shields.io/badge/php-%3E%3D8.2-blue.svg)](https://php.net/) +[![License](https://img.shields.io/badge/license-BSD-blue.svg)](LICENSE) + +PHP AV Libraries provides FFI bindings to AV libraries (including AVCodec and AVFilter) for encoding, transcoding, and manipulating audio/video streams. + +## About this fork + +This is the `danog/php-rtc-av` fork used by MadelineProto. It targets PHP 8.2+, loads FFI only when transcoding is requested, and rejects FFmpeg libraries whose ABI does not match the bundled FFmpeg 9 headers. Already-encoded media can be packetized without FFI. + +All internal Composer dependencies use their `danog/php-rtc-*` package names directly, so installing a component selects the maintained danog packages throughout the dependency graph. + +## Requirements + +- PHP ≥ 8.2 +- FFI and matching FFmpeg 9 shared libraries only when encoding, decoding, or transcoding media +- Linux (Windows and macOS support planned for future releases) +- FFmpeg/libav shared libraries (libavcodec, libavfilter, etc.) + - Compatible with FFmpeg version 9.x + +## Documentation + +This package is part of the PHP WebRTC library. For complete documentation, examples, and API reference, visit: + +[PHP WebRTC Documentation](https://github.com/danog/php-rtc-av) + +## Credits + +### Authors + +- **Daniil Gentili** + - Website: [daniil.it](https://daniil.it) + - GitHub: [danog](https://github.com/danog) +- **Amin Yazdanpanah** + - Website: [aminyazdanpanah.com](https://www.aminyazdanpanah.com) + - Email: [contact@aminyazdanpanah.com](mailto:contact@aminyazdanpanah.com) +- **Sana Moniri** + - GitHub: [sanamoniri](https://github.com/sanamoniri) + +## Reporting Issues + +Found a bug? Please open an issue on our [GitHub repository](https://github.com/your-repo-here). + +## License + +BSD 3-Clause License. See [LICENSE](LICENSE) for full details. diff --git a/resources/release/source-manifest.json b/resources/release/source-manifest.json index dbc07a2..2b0d903 100644 --- a/resources/release/source-manifest.json +++ b/resources/release/source-manifest.json @@ -1,4979 +1,6705 @@ { - "schema_version": 1, - "description": "Pinned runtime corresponding-source inputs; application source and release identity are added from the exact reviewed Git tree during packaging.", - "composer_lock_sha256": "a6a66ad9af4ccd6ef0fa7e62f7a7e28a1ae73cf07e8545552710bc9b8477e9bf", - "origin": { - "release_tag": "v3.0.0-dev.9", - "commit": "ff2c540e2adb613742e0637a01a9f013b0bf4d48", - "source_archive_url": "https://github.com/WizardLoop/shabbat/releases/download/v3.0.0-dev.9/shabbat-3.0.0-dev.9-corresponding-source.zip", - "source_archive_sha256": "d403caf1db6c6ad6b61a8c58afddfde2e7feebfd9b6b14efb6c8556f98d17f0c", - "source_scope_sha256": "a3d4254e5f70c754b4bc7c78a8a33e4a87403c9f6062ab2c6b21ce3bdc2597cd", - "verification": "The published anonymous download matched the reviewed local archive; every reused dependency/supplement file is pinned below." + "schema_version": 1, + "description": "Reviewed application Composer runtime source inputs for 3.1.0; exact locked dist bytes plus two manifest-approved local patches and pinned preferred-source supplements.", + "composer_lock_sha256": "c86f54854a177e458a01cc3943eb6d9eeeb06e29bd670a66a02d9b12bd4ca288", + "origin": { + "review_date": "2026-10-22", + "method": "Exact Composer cache ZIP identified by SHA-1 of locked dist URL and pinned Git-root reference; all runtime files matched original dist bytes except the two approved patch outputs. Supplemental downloads matched pinned upstream Git blobs.", + "runtime_distribution_count": 83, + "runtime_file_count_before_reviewed_omissions": 4097, + "approved_local_patches": [ + "patches/madelineproto-fresh-peer/manifest.json", + "patches/broadcastmanager/manifest.json" + ] + }, + "runtime_package_count": 83, + "development_packages_omitted": 26, + "runtime_packages": [ + { + "name": "amphp/amp", + "version": "v3.1.3", + "reference": "73c38b323ff8d790abf0f76c56fcc892bda4111a", + "source": "https://github.com/amphp/amp.git", + "license": [ + "MIT" + ], + "file_count": 28, + "dist_url": "https://api.github.com/repos/amphp/amp/zipball/73c38b323ff8d790abf0f76c56fcc892bda4111a", + "dist_sha256": "6b9051b59037d5a763a43bed0c44571671ce8dc8d45be4cd256c9afa1fe3cd51" + }, + { + "name": "amphp/byte-stream", + "version": "v2.1.2", + "reference": "55a6bd071aec26fa2a3e002618c20c35e3df1b46", + "source": "https://github.com/amphp/byte-stream.git", + "license": [ + "MIT" + ], + "file_count": 37, + "dist_url": "https://api.github.com/repos/amphp/byte-stream/zipball/55a6bd071aec26fa2a3e002618c20c35e3df1b46", + "dist_sha256": "ad97288111ccc0abc3a80b801a21671bc6bbd05ccb7fe6e6a5272cb755a1b0cd" + }, + { + "name": "amphp/cache", + "version": "v2.0.1", + "reference": "46912e387e6aa94933b61ea1ead9cf7540b7797c", + "source": "https://github.com/amphp/cache.git", + "license": [ + "MIT" + ], + "file_count": 15, + "dist_url": "https://api.github.com/repos/amphp/cache/zipball/46912e387e6aa94933b61ea1ead9cf7540b7797c", + "dist_sha256": "5e3a34ed7536737e1418b87a0d148bd3dfc389008f9f1c5cd1b2c5fa4b406a70" + }, + { + "name": "amphp/dns", + "version": "v2.4.1", + "reference": "ec5948bfafac808f410406e18bc7b52a2d4629b7", + "source": "https://github.com/amphp/dns.git", + "license": [ + "MIT" + ], + "file_count": 28, + "dist_url": "https://api.github.com/repos/amphp/dns/zipball/ec5948bfafac808f410406e18bc7b52a2d4629b7", + "dist_sha256": "e0b76650b8fb90af70bbf05d181fc21db1027ab95bb24f920cc0aad33b9b4c6f" + }, + { + "name": "amphp/file", + "version": "v3.2.0", + "reference": "28b38a805d2c235bb581d24415e78a42cd03aedc", + "source": "https://github.com/amphp/file.git", + "license": [ + "MIT" + ], + "file_count": 51, + "dist_url": "https://api.github.com/repos/amphp/file/zipball/28b38a805d2c235bb581d24415e78a42cd03aedc", + "dist_sha256": "f73b2eea15214647a4dc687fd7b4ccb7392b904187428d77e471d7aa3b528664" + }, + { + "name": "amphp/hpack", + "version": "v3.2.2", + "reference": "291da27078e7e149a9bad4d08ff05bf7d81c89f4", + "source": "https://github.com/amphp/hpack.git", + "license": [ + "MIT" + ], + "file_count": 17, + "dist_url": "https://api.github.com/repos/amphp/hpack/zipball/291da27078e7e149a9bad4d08ff05bf7d81c89f4", + "dist_sha256": "6bcd7bd3d6c82771c3f7967f08fd0745c8c16e47b05f801b19a180bb66800348" + }, + { + "name": "amphp/http", + "version": "v2.1.2", + "reference": "3680d80bd38b5d6f3c2cef2214ca6dd6cef26588", + "source": "https://github.com/amphp/http.git", + "license": [ + "MIT" + ], + "file_count": 20, + "dist_url": "https://api.github.com/repos/amphp/http/zipball/3680d80bd38b5d6f3c2cef2214ca6dd6cef26588", + "dist_sha256": "cac08311d6064b126777c325f5ce2f2c01a6e22db5de4609a31256b6931efbdc" + }, + { + "name": "amphp/http-client", + "version": "v5.3.6", + "reference": "ca155026acafa74a612d776a97202d53077fee86", + "source": "https://github.com/amphp/http-client.git", + "license": [ + "MIT" + ], + "file_count": 72, + "dist_url": "https://api.github.com/repos/amphp/http-client/zipball/ca155026acafa74a612d776a97202d53077fee86", + "dist_sha256": "b44c27f2c2ad267f75ab8f4efa9c51ded1a710934589c073358be2bb6084086e" + }, + { + "name": "amphp/http-client-cookies", + "version": "v2.0.0", + "reference": "4124b37ffa4d15034e70d5d30e6fb9605ed6c1a7", + "source": "https://github.com/amphp/http-client-cookies.git", + "license": [ + "MIT" + ], + "file_count": 25, + "dist_url": "https://api.github.com/repos/amphp/http-client-cookies/zipball/4124b37ffa4d15034e70d5d30e6fb9605ed6c1a7", + "dist_sha256": "94eb2c14e590ae49afc7490c0c11480cc9cce2a4ba21e6501e10f37f424f0d04" + }, + { + "name": "amphp/http-server", + "version": "v3.4.7", + "reference": "aa96ca38c5f822a827236543d5417d0c2a782ef0", + "source": "https://github.com/amphp/http-server.git", + "license": [ + "MIT" + ], + "file_count": 65, + "dist_url": "https://api.github.com/repos/amphp/http-server/zipball/aa96ca38c5f822a827236543d5417d0c2a782ef0", + "dist_sha256": "d48d165f703c05cd28d3b2ac15ebd3a920d605418de2d0dc3e41f21fd93ec258" + }, + { + "name": "amphp/log", + "version": "v2.0.0", + "reference": "bf1562b8a18a3f30efa069ed740f412ac70a8a6c", + "source": "https://github.com/amphp/log.git", + "license": [ + "MIT" + ], + "file_count": 13, + "dist_url": "https://api.github.com/repos/amphp/log/zipball/bf1562b8a18a3f30efa069ed740f412ac70a8a6c", + "dist_sha256": "ec9deccd85534503f7ce391cc9812d3fd85ae0c3d35c8930142adcc9732acfb5" + }, + { + "name": "amphp/mysql", + "version": "v3.1.1", + "reference": "ea3a5e07dc3dddc267669337ded2a98f02d86223", + "source": "https://github.com/amphp/mysql.git", + "license": [ + "MIT" + ], + "file_count": 51, + "dist_url": "https://api.github.com/repos/amphp/mysql/zipball/ea3a5e07dc3dddc267669337ded2a98f02d86223", + "dist_sha256": "4606d6592d7a8898fcddc310dd1dd933bd37169309116b13f772a50aa617608f" + }, + { + "name": "amphp/parallel", + "version": "v2.4.0", + "reference": "37f5b2754fadc229c00f9416bd68fb8d04529a81", + "source": "https://github.com/amphp/parallel.git", + "license": [ + "MIT" + ], + "file_count": 62, + "dist_url": "https://api.github.com/repos/amphp/parallel/zipball/37f5b2754fadc229c00f9416bd68fb8d04529a81", + "dist_sha256": "c559d71bf599850803eee2a7cf4c2ea23fffea33f53839dfdbfc016b98564ddb" + }, + { + "name": "amphp/parser", + "version": "v1.1.1", + "reference": "3cf1f8b32a0171d4b1bed93d25617637a77cded7", + "source": "https://github.com/amphp/parser.git", + "license": [ + "MIT" + ], + "file_count": 9, + "dist_url": "https://api.github.com/repos/amphp/parser/zipball/3cf1f8b32a0171d4b1bed93d25617637a77cded7", + "dist_sha256": "5957e324fdd005a669d926b50710e564ca664113392076c266c7acf17ea64714" + }, + { + "name": "amphp/pipeline", + "version": "v1.2.7", + "reference": "cf2d67696c2015ea7c7fd8f6ec5f8ed7c2d17c17", + "source": "https://github.com/amphp/pipeline.git", + "license": [ + "MIT" + ], + "file_count": 23, + "dist_url": "https://api.github.com/repos/amphp/pipeline/zipball/cf2d67696c2015ea7c7fd8f6ec5f8ed7c2d17c17", + "dist_sha256": "89b8212a965c8e6a45c1f410120d44c6a105cbef22c6ab2d285f7e228f662027" + }, + { + "name": "amphp/postgres", + "version": "v2.2.1", + "reference": "b68c4d5929d0ec1701781dbbb0bb81dd8d0a42d7", + "source": "https://github.com/amphp/postgres.git", + "license": [ + "MIT" + ], + "file_count": 53, + "dist_url": "https://api.github.com/repos/amphp/postgres/zipball/b68c4d5929d0ec1701781dbbb0bb81dd8d0a42d7", + "dist_sha256": "8d2116c7192cab2d1701de96118d2f2aa668585479fac0524c1639f1c4a74f8a" + }, + { + "name": "amphp/process", + "version": "v2.1.0", + "reference": "583959df17d00304ad7b0b32285373f985935643", + "source": "https://github.com/amphp/process.git", + "license": [ + "MIT" + ], + "file_count": 26, + "dist_url": "https://api.github.com/repos/amphp/process/zipball/583959df17d00304ad7b0b32285373f985935643", + "dist_sha256": "847deb511c18a0d960d19475ab9b3b20b7f9af211a4412959dfe227f3457a5f1" + }, + { + "name": "amphp/redis", + "version": "v2.0.4", + "reference": "964bcf6c2574645058371925a3668240a622bdab", + "source": "https://github.com/amphp/redis.git", + "license": [ + "MIT" + ], + "file_count": 42, + "dist_url": "https://api.github.com/repos/amphp/redis/zipball/964bcf6c2574645058371925a3668240a622bdab", + "dist_sha256": "05859c063647cbef49eb5d81413c02f18365af07a8899730f25a469e4302dc05" + }, + { + "name": "amphp/serialization", + "version": "v1.1.0", + "reference": "fdf2834d78cebb0205fb2672676c1b1eb84371f0", + "source": "https://github.com/amphp/serialization.git", + "license": [ + "MIT" + ], + "file_count": 12, + "dist_url": "https://api.github.com/repos/amphp/serialization/zipball/fdf2834d78cebb0205fb2672676c1b1eb84371f0", + "dist_sha256": "dd9e5de118346deed3af0d18203b22b7713da400ee86bdf820ceb75129eb0960" + }, + { + "name": "amphp/socket", + "version": "v2.4.1", + "reference": "b347be5aff6b2cc025208bb4d896607eb470c018", + "source": "https://github.com/amphp/socket.git", + "license": [ + "MIT" + ], + "file_count": 43, + "dist_url": "https://api.github.com/repos/amphp/socket/zipball/b347be5aff6b2cc025208bb4d896607eb470c018", + "dist_sha256": "2779c2c159a8ab261b638cad6d649f5ab943ac66c1b5975a72856bf48c61abd8" + }, + { + "name": "amphp/sql", + "version": "v2.1.1", + "reference": "258bafe5ecf8a0491d86681f2a2af1dee2933a69", + "source": "https://github.com/amphp/sql.git", + "license": [ + "MIT" + ], + "file_count": 27, + "dist_url": "https://api.github.com/repos/amphp/sql/zipball/258bafe5ecf8a0491d86681f2a2af1dee2933a69", + "dist_sha256": "338d4eb8253f95e6d4e64535b5ce4294c16fe821cc1246a78a3e0f8896106133" + }, + { + "name": "amphp/sql-common", + "version": "v2.0.4", + "reference": "735da17ef0a66e7139c9f7584af5c3f9827f83c0", + "source": "https://github.com/amphp/sql-common.git", + "license": [ + "MIT" + ], + "file_count": 24, + "dist_url": "https://api.github.com/repos/amphp/sql-common/zipball/735da17ef0a66e7139c9f7584af5c3f9827f83c0", + "dist_sha256": "41c8b8f9a10f6a7b88cb2e454361acd95674518ba4d37024cd23f84756c01f86" + }, + { + "name": "amphp/sync", + "version": "v2.3.0", + "reference": "217097b785130d77cfcc58ff583cf26cd1770bf1", + "source": "https://github.com/amphp/sync.git", + "license": [ + "MIT" + ], + "file_count": 34, + "dist_url": "https://api.github.com/repos/amphp/sync/zipball/217097b785130d77cfcc58ff583cf26cd1770bf1", + "dist_sha256": "e81a6e6202773d5de1f05269f4606aa28c546a14359801b0ceb7e9db91185d1d" + }, + { + "name": "amphp/websocket", + "version": "v2.0.4", + "reference": "963904b6a883c4b62d9222d1d9749814fac96a3b", + "source": "https://github.com/amphp/websocket.git", + "license": [ + "MIT" + ], + "file_count": 39, + "dist_url": "https://api.github.com/repos/amphp/websocket/zipball/963904b6a883c4b62d9222d1d9749814fac96a3b", + "dist_sha256": "9e9fe52285ef4e4326eec6e28dab184d9a45477d1966602ca6230b161a251e3d" + }, + { + "name": "amphp/websocket-client", + "version": "v2.0.2", + "reference": "dc033fdce0af56295a23f63ac4f579b34d470d6c", + "source": "https://github.com/amphp/websocket-client.git", + "license": [ + "MIT" + ], + "file_count": 19, + "dist_url": "https://api.github.com/repos/amphp/websocket-client/zipball/dc033fdce0af56295a23f63ac4f579b34d470d6c", + "dist_sha256": "76cbce380c0049612be910fcc30c8e6d523c42dbb7589dc681935c0ce2a73665" + }, + { + "name": "bacon/bacon-qr-code", + "version": "v3.1.1", + "reference": "4da2233e72eeecd9be3b62e0dc2cc9ed8e2e31c2", + "source": "https://github.com/Bacon/BaconQrCode.git", + "license": [ + "BSD-2-Clause" + ], + "file_count": 65, + "dist_url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/4da2233e72eeecd9be3b62e0dc2cc9ed8e2e31c2", + "dist_sha256": "a00d3e62f7c41ed790d57b85e3f465b87ba4cf4686609d66644a2c9307072cf9" + }, + { + "name": "brick/math", + "version": "1.0.0", + "reference": "2effe05d2177c451b86c6a073196a4034c02f211", + "source": "https://github.com/brick/math.git", + "license": [ + "MIT" + ], + "file_count": 27, + "dist_url": "https://api.github.com/repos/brick/math/zipball/2effe05d2177c451b86c6a073196a4034c02f211", + "dist_sha256": "12d3ac536b11ff0295c3e18a486adb52914433b8999538d03823d48644ce6b60" + }, + { + "name": "danog/async-orm", + "version": "1.1.6", + "reference": "4a2a7a54c5002bef6cdf80b338085e9e131bf719", + "source": "https://github.com/danog/AsyncOrm.git", + "license": [ + "Apache-2.0" + ], + "file_count": 73, + "dist_url": "https://api.github.com/repos/danog/AsyncOrm/zipball/4a2a7a54c5002bef6cdf80b338085e9e131bf719", + "dist_sha256": "48a4cf1c93d7e8a7576f83a081c7d2651ea72dd466ab39c53e32116e688a7b4b" + }, + { + "name": "danog/better-prometheus", + "version": "0.1.1", + "reference": "74e19343be41905572290878ca9fd0ef08ba0c5e", + "source": "https://github.com/danog/better-prometheus.git", + "license": [ + "Apache-2.0" + ], + "file_count": 24, + "dist_url": "https://api.github.com/repos/danog/better-prometheus/zipball/74e19343be41905572290878ca9fd0ef08ba0c5e", + "dist_sha256": "b66b9e599cfbfdd1bd2c93c068ff8c84b88d1bb51a114426f4b001edee292f7a" + }, + { + "name": "danog/dns-over-https", + "version": "1.0.1", + "reference": "142b8d439e7a582d66b13d9f1119820dd3110884", + "source": "https://github.com/danog/dns-over-https.git", + "license": [ + "MIT" + ], + "file_count": 20, + "dist_url": "https://api.github.com/repos/danog/dns-over-https/zipball/142b8d439e7a582d66b13d9f1119820dd3110884", + "dist_sha256": "acc2ff8914cdc856655e611cd01b937bfdad9b8a094151e51bd61ae1879977b8" + }, + { + "name": "danog/ipc", + "version": "1.1.0", + "reference": "eea6de6a57273f32a4f90a652ae1409786be18a0", + "source": "https://github.com/danog/ipc.git", + "license": [ + "MIT" + ], + "file_count": 28, + "dist_url": "https://api.github.com/repos/danog/ipc/zipball/eea6de6a57273f32a4f90a652ae1409786be18a0", + "dist_sha256": "7d73816da29fdbadc4fd1853db785001baa0b20f50618131d2195cf6ce51a517" + }, + { + "name": "danog/libdns-json", + "version": "0.2.1", + "reference": "cd2981a386a32ff62d447a9553e203384651ba90", + "source": "https://github.com/danog/LibDNSJson.git", + "license": [ + "MIT" + ], + "file_count": 17, + "dist_url": "https://api.github.com/repos/danog/LibDNSJson/zipball/cd2981a386a32ff62d447a9553e203384651ba90", + "dist_sha256": "a79ce010ff0f233f9d8aad09c317cfca7948131928bd82575b7cf017e90c247c" + }, + { + "name": "danog/loop", + "version": "1.1.1", + "reference": "83c42b26c1d8d070c56bc9c03e2e8a147b45c60f", + "source": "https://github.com/danog/loop.git", + "license": [ + "MIT" + ], + "file_count": 29, + "dist_url": "https://api.github.com/repos/danog/loop/zipball/83c42b26c1d8d070c56bc9c03e2e8a147b45c60f", + "dist_sha256": "82e974407b3d9defe51ae48f6fdfbeffed4328f0ae76237b7600eb0c5e064684" + }, + { + "name": "danog/madelineproto", + "version": "8.11.10", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "source": "https://github.com/danog/MadelineProto.git", + "license": [ + "AGPL-3.0-only" + ], + "file_count": 845, + "dist_url": "https://api.github.com/repos/danog/MadelineProto/zipball/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "dist_sha256": "9802a3dd4bbc43ded575e8132b4fa7c74518a4c88897a83256ec9bbebdae2ff3" + }, + { + "name": "danog/php-rtc-av", + "version": "1.1.11", + "reference": "f328e6b5682d7e885dcfab425839921312162008", + "source": "https://github.com/danog/php-rtc-av.git", + "license": [ + "MIT" + ], + "file_count": 54, + "dist_url": "https://api.github.com/repos/danog/php-rtc-av/zipball/f328e6b5682d7e885dcfab425839921312162008", + "dist_sha256": "9d7eb64c9f18d3dc0b336dbcdb575869850d2b5768b79874e1d978e1ce2009e6" + }, + { + "name": "danog/php-rtc-codecs", + "version": "1.1.19", + "reference": "00836382276949099077e19659ff6648b823284f", + "source": "https://github.com/danog/php-rtc-codecs.git", + "license": [ + "BSD-3-Clause" + ], + "file_count": 37, + "dist_url": "https://api.github.com/repos/danog/php-rtc-codecs/zipball/00836382276949099077e19659ff6648b823284f", + "dist_sha256": "58cd65dd0a9664655246d9cc663caee7b53e867772118125502105c0ca58759b" + }, + { + "name": "danog/php-rtc-datachannel", + "version": "1.1.10", + "reference": "3a5ad6f76326514f41a9e1847b41d503e157c459", + "source": "https://github.com/danog/php-rtc-datachannel.git", + "license": [ + "BSD-3-Clause" + ], + "file_count": 16, + "dist_url": "https://api.github.com/repos/danog/php-rtc-datachannel/zipball/3a5ad6f76326514f41a9e1847b41d503e157c459", + "dist_sha256": "1ce63b3ccdd08cc48b4f6c41a3f96205d1ec1a6809849101634ef67710864b66" + }, + { + "name": "danog/php-rtc-dtls", + "version": "2.0.20", + "reference": "794180b0c3cf54842df44b7bcb44f8fb50f199c8", + "source": "https://github.com/danog/php-rtc-dtls.git", + "license": [ + "BSD-3-Clause" + ], + "file_count": 45, + "dist_url": "https://api.github.com/repos/danog/php-rtc-dtls/zipball/794180b0c3cf54842df44b7bcb44f8fb50f199c8", + "dist_sha256": "cce68b90d236d3a9275ab1ab0385660e294a38ea99cd91431cfee37f76450636" + }, + { + "name": "danog/php-rtc-exception", + "version": "1.1.10", + "reference": "f9347a5376bb6b7b2fb008e06a8fd9fb6d9febd7", + "source": "https://github.com/danog/php-rtc-exception.git", + "license": [ + "BSD-3-Clause" + ], + "file_count": 11, + "dist_url": "https://api.github.com/repos/danog/php-rtc-exception/zipball/f9347a5376bb6b7b2fb008e06a8fd9fb6d9febd7", + "dist_sha256": "a6c75c9489ba72c67d2f7c9a219d1133126bfe51f1d78c70205d88ac6585d810" + }, + { + "name": "danog/php-rtc-ice", + "version": "2.0.18", + "reference": "91c53e982f334cf3bfe64a9e298d874bba51a3f1", + "source": "https://github.com/danog/php-rtc-ice.git", + "license": [ + "BSD-3-Clause" + ], + "file_count": 41, + "dist_url": "https://api.github.com/repos/danog/php-rtc-ice/zipball/91c53e982f334cf3bfe64a9e298d874bba51a3f1", + "dist_sha256": "070c50c30daa5e2d49f17cdfb29dcafd9c977a6f3566fa2f8d2cdc58b7314906" + }, + { + "name": "danog/php-rtc-mdns", + "version": "1.1.12", + "reference": "ff3f4315339ddcdd4d71bd4e02156903261ef57a", + "source": "https://github.com/danog/php-rtc-mdns.git", + "license": [ + "BSD-3-Clause" + ], + "file_count": 10, + "dist_url": "https://api.github.com/repos/danog/php-rtc-mdns/zipball/ff3f4315339ddcdd4d71bd4e02156903261ef57a", + "dist_sha256": "a12987ef716b216a8a1455d2e650f7184fede191d40a3fa0c208200ddfe817d4" + }, + { + "name": "danog/php-rtc-mixin", + "version": "2.0.9", + "reference": "e7a086a7fe01875f52e1f08301195db05e7ff9a5", + "source": "https://github.com/danog/php-rtc-mixin.git", + "license": [ + "BSD-3-Clause" + ], + "file_count": 10, + "dist_url": "https://api.github.com/repos/danog/php-rtc-mixin/zipball/e7a086a7fe01875f52e1f08301195db05e7ff9a5", + "dist_sha256": "2d7fbfaa449e67da7daa1824d8281e7e4e5de7c482f098034e1cb09222a55ee0" + }, + { + "name": "danog/php-rtc-ntp", + "version": "1.1.15", + "reference": "d70dc01410dba146cb808b9c2bf3c28ed1199d20", + "source": "https://github.com/danog/php-rtc-ntp.git", + "license": [ + "BSD-3-Clause" + ], + "file_count": 8, + "dist_url": "https://api.github.com/repos/danog/php-rtc-ntp/zipball/d70dc01410dba146cb808b9c2bf3c28ed1199d20", + "dist_sha256": "1c010f3f8a50ce0e4d0e30bd6689cbf181a82ffccf8848f28ccb9eb625b3a7ec" + }, + { + "name": "danog/php-rtc-rtcp", + "version": "1.1.11", + "reference": "f2e7c76d040fb0c4b2e4b62a611d13c6352af145", + "source": "https://github.com/danog/php-rtc-rtcp.git", + "license": [ + "BSD-3-Clause" + ], + "file_count": 22, + "dist_url": "https://api.github.com/repos/danog/php-rtc-rtcp/zipball/f2e7c76d040fb0c4b2e4b62a611d13c6352af145", + "dist_sha256": "3287a28195a169fd8a767abdd37ccb20081f99193ce8ca50acf3f53e3ad7fec0" + }, + { + "name": "danog/php-rtc-rtp", + "version": "2.0.23", + "reference": "e9bee7a5aae91f6abec1fe9a599eefbce219d967", + "source": "https://github.com/danog/php-rtc-rtp.git", + "license": [ + "BSD-3-Clause" + ], + "file_count": 51, + "dist_url": "https://api.github.com/repos/danog/php-rtc-rtp/zipball/e9bee7a5aae91f6abec1fe9a599eefbce219d967", + "dist_sha256": "9435333ea91392e9c7a5853158d9b1844136cfd4dbd823f4e506d824860f5094" + }, + { + "name": "danog/php-rtc-rtp-parameter", + "version": "1.1.8", + "reference": "cd1e34df768ddae43fc50c1306c2332cf99f07eb", + "source": "https://github.com/danog/php-rtc-rtp-parameter.git", + "license": [ + "BSD-3-Clause" + ], + "file_count": 22, + "dist_url": "https://api.github.com/repos/danog/php-rtc-rtp-parameter/zipball/cd1e34df768ddae43fc50c1306c2332cf99f07eb", + "dist_sha256": "eec92e5258446a41cbaa717eedb059b3ce8f58a3abe2a07b10bbcb347900302a" + }, + { + "name": "danog/php-rtc-sctp", + "version": "2.0.14", + "reference": "741697e355abd7eb8e8134b115fab775bb5ccd06", + "source": "https://github.com/danog/php-rtc-sctp.git", + "license": [ + "BSD-3-Clause" + ], + "file_count": 44, + "dist_url": "https://api.github.com/repos/danog/php-rtc-sctp/zipball/741697e355abd7eb8e8134b115fab775bb5ccd06", + "dist_sha256": "4d95ce8f8b82c49b71fcfb8c37ae5512d911185b4d197217e1502a1c01f0c2a4" + }, + { + "name": "danog/php-rtc-sdp", + "version": "1.1.12", + "reference": "315b9cbaff71625351864c292de0b6ac3b3a39fc", + "source": "https://github.com/danog/php-rtc-sdp.git", + "license": [ + "BSD-3-Clause" + ], + "file_count": 23, + "dist_url": "https://api.github.com/repos/danog/php-rtc-sdp/zipball/315b9cbaff71625351864c292de0b6ac3b3a39fc", + "dist_sha256": "7dce4d2ec57e61a3cc0c89c1077048f2cf21f9e63451dd27a9401005fb752442" + }, + { + "name": "danog/php-rtc-srtp", + "version": "1.1.16", + "reference": "b19959292663d8933a0a48cd1fda05788fb5c542", + "source": "https://github.com/danog/php-rtc-srtp.git", + "license": [ + "BSD-3-Clause" + ], + "file_count": 19, + "dist_url": "https://api.github.com/repos/danog/php-rtc-srtp/zipball/b19959292663d8933a0a48cd1fda05788fb5c542", + "dist_sha256": "8a377c9611707c0f069cf9a269b07d9a561fd702f0a8adf26cbce5d7ecd6bf26" + }, + { + "name": "danog/php-rtc-stats", + "version": "1.1.7", + "reference": "137934d7d57e97184d5b6b2fb58e571e0d3f9fbd", + "source": "https://github.com/danog/php-rtc-stats.git", + "license": [ + "BSD-3-Clause" + ], + "file_count": 18, + "dist_url": "https://api.github.com/repos/danog/php-rtc-stats/zipball/137934d7d57e97184d5b6b2fb58e571e0d3f9fbd", + "dist_sha256": "a436a3ab170543093c643cc110d2a15053c806fb9d3ab8a68d9a4fc01c102dde" + }, + { + "name": "danog/php-rtc-stun", + "version": "2.0.18", + "reference": "7f1b48a736e6d7a9ad174e7dc58b794168befed4", + "source": "https://github.com/danog/php-rtc-stun.git", + "license": [ + "BSD-3-Clause" + ], + "file_count": 33, + "dist_url": "https://api.github.com/repos/danog/php-rtc-stun/zipball/7f1b48a736e6d7a9ad174e7dc58b794168befed4", + "dist_sha256": "01e0c8877e38d2993dbe0be35fa481df778176ace58b7535c0156cdb5ddfd550" + }, + { + "name": "danog/php-rtc-turn", + "version": "2.0.9", + "reference": "5789c0d4b23c6097c72812fa8f9e9930ac288bc6", + "source": "https://github.com/danog/php-rtc-turn.git", + "license": [ + "BSD-3-Clause" + ], + "file_count": 15, + "dist_url": "https://api.github.com/repos/danog/php-rtc-turn/zipball/5789c0d4b23c6097c72812fa8f9e9930ac288bc6", + "dist_sha256": "d7ed36407ff184f61ecc67a79fda21d843547d4cf598f8bc2d5cc0952c528c12" + }, + { + "name": "danog/php-rtc-webrtc", + "version": "2.0.20", + "reference": "58f8a24180cd1e137127214f9bfba3b0a7eff97b", + "source": "https://github.com/danog/php-rtc-webrtc.git", + "license": [ + "BSD-3-Clause" + ], + "file_count": 21, + "dist_url": "https://api.github.com/repos/danog/php-rtc-webrtc/zipball/58f8a24180cd1e137127214f9bfba3b0a7eff97b", + "dist_sha256": "01f92385d0abe22f014ed993f0f5aeee3cf2c83ecbcf8f241157ee2134f5e9d5" + }, + { + "name": "danog/primemodule", + "version": "1.0.13", + "reference": "e7ebfc1ea64c24186e49064cd4b76bc76c28600e", + "source": "https://github.com/danog/PrimeModule.git", + "license": [ + "AGPL-3.0-only" + ], + "file_count": 6, + "dist_url": "https://api.github.com/repos/danog/PrimeModule/zipball/e7ebfc1ea64c24186e49064cd4b76bc76c28600e", + "dist_sha256": "7aab024907802ba864090dd35d782732ffbbb9b5affc214df1d7beff3dbf2c55" + }, + { + "name": "danog/telegram-entities", + "version": "1.1.0", + "reference": "92ca7621594b7a6c4a820c3b557e66ee1d439273", + "source": "https://github.com/danog/telegram-entities.git", + "license": [ + "Apache-2.0" + ], + "file_count": 18, + "dist_url": "https://api.github.com/repos/danog/telegram-entities/zipball/92ca7621594b7a6c4a820c3b557e66ee1d439273", + "dist_sha256": "769f4d86b171b0974aef656535ebbef5a2d71425a2bbed922921d050ff8dd258" + }, + { + "name": "danog/tg-dialog-id", + "version": "2.0.0", + "reference": "d03c653b2dad43d739675c83a6e8fa14b3b43636", + "source": "https://github.com/danog/tg-dialog-id.git", + "license": [ + "Apache-2.0" + ], + "file_count": 17, + "dist_url": "https://api.github.com/repos/danog/tg-dialog-id/zipball/d03c653b2dad43d739675c83a6e8fa14b3b43636", + "dist_sha256": "ea705866d6d26ac293ff08ef34cf4d535a197e783cd87499d299722ecfdbf645" + }, + { + "name": "danog/tg-file-decoder", + "version": "1.0.2", + "reference": "f4da78c28d47b658c4596249f1d6595956f3b796", + "source": "https://github.com/danog/tg-file-decoder.git", + "license": [ + "AGPL-3.0-only" + ], + "file_count": 38, + "dist_url": "https://api.github.com/repos/danog/tg-file-decoder/zipball/f4da78c28d47b658c4596249f1d6595956f3b796", + "dist_sha256": "a8bbafe6723f5e97e71207fd4824747bd020a0c78d5cdec6c4a09f3f88e5c95f" + }, + { + "name": "dasprid/enum", + "version": "1.0.7", + "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce", + "source": "https://github.com/DASPRiD/Enum.git", + "license": [ + "BSD-2-Clause" + ], + "file_count": 13, + "dist_url": "https://api.github.com/repos/DASPRiD/Enum/zipball/b5874fa9ed0043116c72162ec7f4fb50e02e7cce", + "dist_sha256": "1d2c1b552a83dce5a25392fae3afcf6ab81ce1481fa0f117714117464e32d4ac" + }, + { + "name": "daverandom/libdns", + "version": "v2.1.0", + "reference": "b84c94e8fe6b7ee4aecfe121bfe3b6177d303c8a", + "source": "https://github.com/DaveRandom/LibDNS.git", + "license": [ + "MIT" + ], + "file_count": 62, + "dist_url": "https://api.github.com/repos/DaveRandom/LibDNS/zipball/b84c94e8fe6b7ee4aecfe121bfe3b6177d303c8a", + "dist_sha256": "224409d0d4bd301ab8c1c31093094f0abbfb8c12b058d2975dee382a4cdc2ea6" + }, + { + "name": "kelunik/certificate", + "version": "v1.1.3", + "reference": "7e00d498c264d5eb4f78c69f41c8bd6719c0199e", + "source": "https://github.com/kelunik/certificate.git", + "license": [ + "MIT" + ], + "file_count": 10, + "dist_url": "https://api.github.com/repos/kelunik/certificate/zipball/7e00d498c264d5eb4f78c69f41c8bd6719c0199e", + "dist_sha256": "12ea71ed74a973c05a9040ea83bdd8c59e8820fe6d7646140e3f61dfd1fd8db0" + }, + { + "name": "league/uri", + "version": "7.8.1", + "reference": "08cf38e3924d4f56238125547b5720496fac8fd4", + "source": "https://github.com/thephpleague/uri.git", + "license": [ + "MIT" + ], + "file_count": 19, + "dist_url": "https://api.github.com/repos/thephpleague/uri/zipball/08cf38e3924d4f56238125547b5720496fac8fd4", + "dist_sha256": "7b2f3f64531b576a74ab0932903de0ba0f5937e4044d053c87c672094f487dc9" + }, + { + "name": "league/uri-components", + "version": "7.8.1", + "reference": "848ff9db2f0be06229d6034b7c2e33d41b4fd675", + "source": "https://github.com/thephpleague/uri-components.git", + "license": [ + "MIT" + ], + "file_count": 22, + "dist_url": "https://api.github.com/repos/thephpleague/uri-components/zipball/848ff9db2f0be06229d6034b7c2e33d41b4fd675", + "dist_sha256": "6c3c60a522e6bf806abbb3d60cc682d4f791c74aa012b1581221b03f7aea4d16" + }, + { + "name": "league/uri-interfaces", + "version": "7.8.1", + "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928", + "source": "https://github.com/thephpleague/uri-interfaces.git", + "license": [ + "MIT" + ], + "file_count": 47, + "dist_url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/85d5c77c5d6d3af6c54db4a78246364908f3c928", + "dist_sha256": "3d1f73528daae322e093f25b7ff6cc82b5f5553cd41b803999dff125ad073f98" + }, + { + "name": "monolog/monolog", + "version": "3.12.1", + "reference": "d7059e4c691d05ea1222b5124bed0f961be46e15", + "source": "https://github.com/Seldaek/monolog.git", + "license": [ + "MIT" + ], + "file_count": 129, + "dist_url": "https://api.github.com/repos/Seldaek/monolog/zipball/d7059e4c691d05ea1222b5124bed0f961be46e15", + "dist_sha256": "a8ea5681c77cdf47c1412da8c9278be5927adc123710d382ec654342b23729a9" + }, + { + "name": "nikic/php-parser", + "version": "v5.9.0", + "reference": "9e33da9553fe7786f0962b35f4e4ecf01be89def", + "source": "https://github.com/nikic/PHP-Parser.git", + "license": [ + "BSD-3-Clause" + ], + "file_count": 275, + "dist_url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/9e33da9553fe7786f0962b35f4e4ecf01be89def", + "dist_sha256": "c307260c466a105f12460f1866dc3600938ef4f7f8665e86f0d743a544848846" + }, + { + "name": "paragonie/constant_time_encoding", + "version": "v3.1.3", + "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77", + "source": "https://github.com/paragonie/constant_time_encoding.git", + "license": [ + "MIT" + ], + "file_count": 14, + "dist_url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77", + "dist_sha256": "a2997299df0a6307136355ec36e8aee3c0b730e3602f80a7dcf2839dc30662dc" + }, + { + "name": "phpseclib/phpseclib", + "version": "4.0.2", + "reference": "1fe20b9acb08ce810cec24d8a9d02e7c13426e4c", + "source": "https://github.com/phpseclib/phpseclib.git", + "license": [ + "MIT" + ], + "file_count": 548, + "dist_url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/1fe20b9acb08ce810cec24d8a9d02e7c13426e4c", + "dist_sha256": "e7e19b48f0ea967b1e8959faa420cebd87fd5baecaf540b8ca36258b8010206a" + }, + { + "name": "promphp/prometheus_client_php", + "version": "v2.15.1", + "reference": "e153786bda5ca1d07335a2b5f477742c37195c40", + "source": "https://github.com/PromPHP/prometheus_client_php.git", + "license": [ + "Apache-2.0" + ], + "file_count": 34, + "dist_url": "https://api.github.com/repos/PromPHP/prometheus_client_php/zipball/e153786bda5ca1d07335a2b5f477742c37195c40", + "dist_sha256": "d7380a22850356f4d58ea1b2d5b06cd110437a3a697c0dc0a2f146909a6e6bd4" + }, + { + "name": "psr/http-factory", + "version": "1.1.0", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "source": "https://github.com/php-fig/http-factory.git", + "license": [ + "MIT" + ], + "file_count": 9, + "dist_url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "dist_sha256": "a3c397252b6c1c15e60ad6fae927d61edbf4059f3473080bb1b3b40deabf80d2" + }, + { + "name": "psr/http-message", + "version": "2.0", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "source": "https://github.com/php-fig/http-message.git", + "license": [ + "MIT" + ], + "file_count": 13, + "dist_url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "dist_sha256": "d561d2c36e2e3c0ee8b54e0e9652b3bfa13cd763e5e6f93400969001f3a7968d" + }, + { + "name": "psr/log", + "version": "3.0.2", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "source": "https://github.com/php-fig/log.git", + "license": [ + "MIT" + ], + "file_count": 11, + "dist_url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "dist_sha256": "1e8dcf2df933fc3440b29146c5ca4e93ece51c5c7a9ac9653d926ec971c90892" + }, + { + "name": "ramsey/collection", + "version": "2.1.1", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2", + "source": "https://github.com/ramsey/collection.git", + "license": [ + "MIT" + ], + "file_count": 34, + "dist_url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2", + "dist_sha256": "a9d0d7949173c4fb8735a019f0052d3f1910d58fb10ed19e8003cab70f462c72" + }, + { + "name": "ramsey/uuid", + "version": "4.9.4", + "reference": "75d73f48d02797c2c285a7e9f348fadc0102ffe2", + "source": "https://github.com/ramsey/uuid.git", + "license": [ + "MIT" + ], + "file_count": 117, + "dist_url": "https://api.github.com/repos/ramsey/uuid/zipball/75d73f48d02797c2c285a7e9f348fadc0102ffe2", + "dist_sha256": "5c0350909d4cc04f49259753684b88e715358a196b942444a1c0946f59f5d05d" + }, + { + "name": "revolt/event-loop", + "version": "v1.0.9", + "reference": "44061cf513e53c6200372fc935ac42271566295d", + "source": "https://github.com/revoltphp/event-loop.git", + "license": [ + "MIT" + ], + "file_count": 28, + "dist_url": "https://api.github.com/repos/revoltphp/event-loop/zipball/44061cf513e53c6200372fc935ac42271566295d", + "dist_sha256": "8b80136b01aee8ee3d5fe28e7de96bda9f70b6c3bd11d6bd08dec3bd5c112816" + }, + { + "name": "symfony/polyfill-iconv", + "version": "v1.43.0", + "reference": "254724d95fe01b679cd97d88786e9623ee00bfb7", + "source": "https://github.com/symfony/polyfill-iconv.git", + "license": [ + "MIT" + ], + "file_count": 62, + "dist_url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/254724d95fe01b679cd97d88786e9623ee00bfb7", + "dist_sha256": "a74922e2dd1f515748c298f28af7e696a07e68df62021a273617bc5f0d84d88f" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.43.0", + "reference": "4d5d331bf731e0aedbc6b2f5e61135b7b7996a72", + "source": "https://github.com/symfony/polyfill-mbstring.git", + "license": [ + "MIT" + ], + "file_count": 11, + "dist_url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/4d5d331bf731e0aedbc6b2f5e61135b7b7996a72", + "dist_sha256": "8e92f8e20eb5b85770927e67246c03b1c8eae6326c7a9e618682730271b02573" }, - "runtime_package_count": 57, - "development_packages_omitted": 26, - "runtime_packages": [ + { + "name": "symfony/polyfill-php82", + "version": "v1.43.0", + "reference": "843bbe8b2a7934307b749751eede0f111f5d1cfc", + "source": "https://github.com/symfony/polyfill-php82.git", + "license": [ + "MIT" + ], + "file_count": 17, + "dist_url": "https://api.github.com/repos/symfony/polyfill-php82/zipball/843bbe8b2a7934307b749751eede0f111f5d1cfc", + "dist_sha256": "ab96ee62e8db90679222c8fcfd40a0557de830f46e0950ddb1e0bf4d91d4e22f" + }, + { + "name": "symfony/polyfill-php83", + "version": "v1.43.0", + "reference": "80ccff923a8d61f73ebe9da0aa94e25232f004ce", + "source": "https://github.com/symfony/polyfill-php83.git", + "license": [ + "MIT" + ], + "file_count": 18, + "dist_url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/80ccff923a8d61f73ebe9da0aa94e25232f004ce", + "dist_sha256": "7f08cc82e653dde20a6f4f8c79931e228968c704f1578a22ce1e0922f214214f" + }, + { + "name": "symfony/polyfill-php84", + "version": "v1.43.0", + "reference": "22c6548499cbe5c5bb072fc0c42312dff062a015", + "source": "https://github.com/symfony/polyfill-php84.git", + "license": [ + "MIT" + ], + "file_count": 18, + "dist_url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/22c6548499cbe5c5bb072fc0c42312dff062a015", + "dist_sha256": "58d40920f17c547ae016928216ed33432598074521f3646ab6835cb4f5a85152" + }, + { + "name": "symfony/polyfill-php85", + "version": "v1.43.0", + "reference": "86a42cbcc07adc331481a5ab310a4024bfc227f6", + "source": "https://github.com/symfony/polyfill-php85.git", + "license": [ + "MIT" + ], + "file_count": 10, + "dist_url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/86a42cbcc07adc331481a5ab310a4024bfc227f6", + "dist_sha256": "16276b9ee895e9953b71dd55107bddb5aada6411280077581f1968a5c4fc08cc" + }, + { + "name": "symfony/polyfill-php86", + "version": "v1.43.0", + "reference": "8840df45b24f33a49dc419fa18dc0057231ae1d8", + "source": "https://github.com/symfony/polyfill-php86.git", + "license": [ + "MIT" + ], + "file_count": 7, + "dist_url": "https://api.github.com/repos/symfony/polyfill-php86/zipball/8840df45b24f33a49dc419fa18dc0057231ae1d8", + "dist_sha256": "b2122b5bd79a676be2b524aab4aeebeb918009855cd9a665c5eefb827b2c3730" + }, + { + "name": "webmozart/assert", + "version": "2.5.0", + "reference": "8a163706bbcac613733dba03f51e13b5eb1bb819", + "source": "https://github.com/webmozarts/assert.git", + "license": [ + "MIT" + ], + "file_count": 9, + "dist_url": "https://api.github.com/repos/webmozarts/assert/zipball/8a163706bbcac613733dba03f51e13b5eb1bb819", + "dist_sha256": "cb596ab088651d7d5a00663e17302aaaf43d7487dbce63fc34ce9eba81c9e6a7" + }, + { + "name": "wizardloop/broadcastmanager", + "version": "3.2.2", + "reference": "f2792a383416b66bb68e55f09414563e540538d6", + "source": "https://github.com/WizardLoop/BroadcastManager.git", + "license": [ + "AGPL-3.0-only" + ], + "file_count": 16, + "dist_url": "https://api.github.com/repos/WizardLoop/BroadcastManager/zipball/f2792a383416b66bb68e55f09414563e540538d6", + "dist_sha256": "7cd81f0cabade50b4f161bc0e2e1eb95c439021bfb7ff7037fd30fa887137925" + } + ], + "source_symlinks": { + "vendor/danog/async-orm/docs/index.md": { + "target": "../README.md", + "mode": "120777", + "sha256": "dbcc210d7f4962499db6d4cfa18658e26d05ee700c962a811cac911f095e22fd" + }, + "vendor/danog/telegram-entities/docs/index.md": { + "target": "../README.md", + "mode": "120777", + "sha256": "dbcc210d7f4962499db6d4cfa18658e26d05ee700c962a811cac911f095e22fd" + } + }, + "files_sha256": { + "additional-source/amphp-windows-process-wrapper/.gitattributes": "e6518f1394b1372580e03c792bf6b1a51766e1da051815457fc881bf78476ecd", + "additional-source/amphp-windows-process-wrapper/.gitignore": "122661b5b5b483734ef04f7f291a24dcc786ffb0c9e92a1f35b2deb59ebb26fd", + "additional-source/amphp-windows-process-wrapper/LICENSE": "b41825e266bd6e700ef99630fee09db6338122a1d28c1d298c64cea6fc1c030c", + "additional-source/amphp-windows-process-wrapper/ProcessWrapper.sln": "5f26b1a717dda8d8b2573588ab8c87a585415538be92300e81c2e9524e347e6b", + "additional-source/amphp-windows-process-wrapper/ProcessWrapper.sln.DotSettings": "4db43cc7fbc6b8972f454e894b5a70a1cd9e214ba15c9649fb680e9cf430c8d7", + "additional-source/amphp-windows-process-wrapper/ProcessWrapper.vcxproj": "766e9040c299829a030bdaff7b450ec6781fac58ef123175b5b022598bf980f8", + "additional-source/amphp-windows-process-wrapper/ProcessWrapper.vcxproj.filters": "7eb705d68fce787832d0d26a945bd785802fefdd87ba1386cb19365e997b5ffc", + "additional-source/amphp-windows-process-wrapper/README.md": "22eb3f686641db618709bda289529feaa43c231aa725cd059731f1eef5dfe423", + "additional-source/amphp-windows-process-wrapper/resources/.gitattributes": "f9ff8e3d710fc3f6acbb095258e4746cc01d3e7d351c884ea6880455d82bae72", + "additional-source/amphp-windows-process-wrapper/resources/Icon_amphp.ico": "4d746cea582e3b984584fefccc2e6a90d39e75ec0b650ff43bfc893ea2e4eda2", + "additional-source/amphp-windows-process-wrapper/resources/ProcessWrapper.rc": "e08aa7682e9c823f4f68e47c237e4ee88b2b8b78616abb94a38ecada3508e993", + "additional-source/amphp-windows-process-wrapper/resources/resource.h": "58ff0eadb1c7e5c2a999f711ae95fbd765d6b0f718f48ab68558563ebf04f601", + "additional-source/amphp-windows-process-wrapper/src/Args.c": "b2d944379bd3af7a289aa500150f0ce27e618eb378d3f3eecf384f8a32a7d441", + "additional-source/amphp-windows-process-wrapper/src/Args.h": "f3203671d93c1fc7aec4dab123b1a96f2de525071e5f8e3bff73e96a19b4353c", + "additional-source/amphp-windows-process-wrapper/src/Encoding.h": "95e600fd81ce3830eaada2edaa2e560b9e060751f0d6518ec816ea57e682a5b9", + "additional-source/amphp-windows-process-wrapper/src/Errors.c": "c8021ac52ed123e4ece667f97048b1ecadbad122b993c1e43327db985a21c463", + "additional-source/amphp-windows-process-wrapper/src/Errors.h": "ec57545ed3bddf7710f23b8e14a21a0d5dda5f94613bf388b502fdd13932a34e", + "additional-source/amphp-windows-process-wrapper/src/ProcessWrapper.c": "f93286e07aea62ffa1d7ba20839a3bdc21ede954c7f8a6096796d9fdb229a389", + "additional-source/madelineproto-build-inputs/.gitattributes": "e547789f2db16032af766dcd086c02cd099e67f7002bb488e110e0117c25d209", + "additional-source/madelineproto-build-inputs/.gitmodules": "0be1b15bd151a137d0eda35e859e2a44dab559f77f74f6f50b628cec212044cb", + "additional-source/madelineproto-build-inputs/LICENSE": "57c8ff33c9c0cfc3ef00e650a1cc910d7ee479a8bc509f6c9209a7c2a11399d6", + "additional-source/madelineproto-build-inputs/README.md": "45b7b6cdb99e225b531adace51b30c754e3a7f52a4a75e32b0496c818349f7d0", + "additional-source/madelineproto-build-inputs/composer.json": "579e8ab6bb58af8ec91c11fc12f18693225bc8e4d5e1b2ba4bddec61cb417fd0", + "additional-source/madelineproto-build-inputs/docs/template/disallow.json": "8aab568b61b51b83619933be278db5b0c51218b16d0b991193173160ef752dd6", + "additional-source/madelineproto-build-inputs/extracted.json": "2b0b8ef62b64a70035a8d5d4c4b4bee60a22fa861d5b61e0b233f9f117c88534", + "additional-source/madelineproto-build-inputs/langs/ar.json": "eaf5912bf1355563ef68068ff1bd469dcfa713e6a0f4513a7715368d4f3491f2", + "additional-source/madelineproto-build-inputs/langs/ckb.json": "6f97da47cac5d0862b2cd9a0efe24bf405cad32ad4562b7d93cafaf19c75a9e3", + "additional-source/madelineproto-build-inputs/langs/de.json": "38927e51b5cca191f34ed13f1266a0f85683365dd1332b882874c776c3e9c6d7", + "additional-source/madelineproto-build-inputs/langs/en.json": "87701317d16f701cf4d368a9508a416d6b1a8f87578b9d6278101fe9f52607ff", + "additional-source/madelineproto-build-inputs/langs/es.json": "17b8a465119a78598eabc80dbaccac878878bd68a958579b4cabe08f6e63d2fc", + "additional-source/madelineproto-build-inputs/langs/fa.json": "f8f6b15ec10bcde2c5d03f37a90c89df81ee574225ac88efa240ca21a5f7225c", + "additional-source/madelineproto-build-inputs/langs/fr.json": "62094dadae08b43aed8069a4e120ef1e5429905af5a918a1da593aa4e427bd75", + "additional-source/madelineproto-build-inputs/langs/he.json": "42d989c982d10e303524df9cafba859fdec1c60a6a71200f49d1fa1a8a49b2da", + "additional-source/madelineproto-build-inputs/langs/hi.json": "c6a97eb32ea13ad0962b4788351d254068f34dc31f45052663c4127c02790bb5", + "additional-source/madelineproto-build-inputs/langs/id.json": "8168ec8bccd9686e386f431c79f4ff92fbede61b7c6df6bafb9cffa9bafc0b47", + "additional-source/madelineproto-build-inputs/langs/it.json": "50eee80875a93755592dabe49da63384f466d54e977871ef78a779d72851d3a1", + "additional-source/madelineproto-build-inputs/langs/ja.json": "76e3a50b73f2c78f94abf01d7a40d26fb4a33b0176a1ccbac86ca2d5bd5b3390", + "additional-source/madelineproto-build-inputs/langs/ko.json": "e22a239196192fd92ee77f88061714b98d50a0600a6dcc7fb826a12c39c71446", + "additional-source/madelineproto-build-inputs/langs/pl.json": "64c8ad1edc4d3caff307ac4cf2a785e4b789d417440fa8d6749496aadfa35c61", + "additional-source/madelineproto-build-inputs/langs/pt.json": "35f8d4a2dcfeae983d8503fe732dfaa3f10d43a496dae7c99a677d8a7ebdd634", + "additional-source/madelineproto-build-inputs/langs/ru.json": "530eebdc2019ff2addc770a98c63821fc9caf034544000343320a70e14abe362", + "additional-source/madelineproto-build-inputs/langs/tr.json": "47f200bf28f47c911ca5eaba46f3549a18f565aa1bf6552761c270aa975dd392", + "additional-source/madelineproto-build-inputs/langs/uk.json": "26e24853b813acadec71cf837275fc025cada0b277943a9ffd3da8f993f1fd22", + "additional-source/madelineproto-build-inputs/langs/uz.json": "b734cc8a7133eae78b6e6e5532e7b4bf7b109a6857837c9d1089d36a2a728a99", + "additional-source/madelineproto-build-inputs/langs/vi.json": "d45519ec06fb1f22254f62df14ba7ff541664f681499f6848eb4490fd7ca5f7e", + "additional-source/madelineproto-build-inputs/langs/zh.json": "e6f659019f5cc925977fc41dfd7854aeabb896270e15d2f2ca65ff93e9cf17ee", + "additional-source/madelineproto-build-inputs/schemas/README.md": "df080ca2974e01930ef5232f2373f326477a4bd51713f8046df0d6ac2c5ea1fa", + "additional-source/madelineproto-build-inputs/schemas/TL_mtproto_v1.tl": "a68bbcfb6aea699cb394aec44008b01b915f1e8b632a1d786001ddd7c7300dcd", + "additional-source/madelineproto-build-inputs/schemas/TL_secret.tl": "899beb4c1713a65c9f09677dd93406a1e96c52b661d46dcd30ac7c0a87b0d20c", + "additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232.json": "71b22961981cc76312032bbd4fc7159e6c65c2ff6d89b399cbab7e68ec7e531c", + "additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232.tl": "76922ce265441d3f2f5188f56b69b41e1cb11354657ea547707507f8c3b93826", + "additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232_file_ref_map.dat": "d03c0c48f9035b4d16628571c3b9f5a3eae0204642ffc66a8caadf62d5a6279e", + "additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232_file_ref_map.json": "6a55f3175c7bb5e01d88d7f8349cf0240fb4298af8c8519cbc27788070bf8d89", + "additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232_file_ref_map_schema.json": "7928e74428ad04f8936bfc4131f6fec4192117dfa94c04c30588fd996b4b88dc", + "additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232_file_ref_map_schema.tl": "805fb65042f0b776aceda2ca4c09bf4686fd145099be1ad97e9e0e734cca394a", + "additional-source/madelineproto-build-inputs/schemas/list.json": "418dbb129a047243d634e122c2b8d08150968c2a3afcb5520fdcb09558929564", + "additional-source/madelineproto-build-inputs/schemas/list_file_ref_map.json": "b6ce847aab1958eac6f514134141fdfb4bb9ee4ca1fd8395ff5da67f74039f19", + "additional-source/madelineproto-build-inputs/tools/AnnotationsBuilder.php": "6456068fa6c2cfdc231d22e5f892f0c71807baa9348f800a6192bef4cbdb3fbd", + "additional-source/madelineproto-build-inputs/tools/DocsBuilder.php": "b79399f20e61839c50130865fc46a961809071cfab9697a14207186d4b66c3f0", + "additional-source/madelineproto-build-inputs/tools/DocsBuilder/Constructors.php": "9799411e24b068ebf379f36bad567704e198486d707abcf6962172d84816ef41", + "additional-source/madelineproto-build-inputs/tools/DocsBuilder/Methods.php": "75c80725b49b68650e9abe2a9971929cef3b16b0828ca9ea475f3cd1be8acf1d", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/ActionOp.php": "1499bd3053681d6aa2269839e1d55825448deb1994ba90852270ba91340087dd", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/BuildMode.php": "6cc7d671f6ada2959621969efc733c0e8fa2dce8297ed3592af0228e7111026a", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/BuildMode/Ast.php": "f78857dc34eb5a606e7ccbcc3c0f9b2ef41d04c3d54d77aee6ccd2901b3f0524", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/FieldTransformationOp.php": "75bd3b3029b3907327fdb2bfdcb04f87eaa1582aba0bce9ed461778217fbe75a", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/FileRefGenerator.php": "ba17803b5ed12426b7147cec1a9e8f8dec29693bf93ee276cc5afad9b9808597", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/LiteralOp.php": "300fc3630eda3d03807e64f6017da0f35366a4397263097c49d2d3808fc5f3f6", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/ArrayOp.php": "3b4328ba6e38eacd076104e4533a6ff7c7083effbfc204e142fbe9a767ad8925", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/CallOp.php": "d76eb0ba098131a6a7166bd54c1a7cef00247742b9252821146bf4fc0ede34d1", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/ConstructorOp.php": "a79c8e4edc295a749f905806492a87d5a3ae35f1fcaf2454d97724d9fc064f01", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/CopyMethodCallOp.php": "4b695dd32bf8674cbd65704bf3214fcbd1811fc19df9be3e5f93c7ae6f50c5aa", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/CopyOp.php": "0388255cac8c0eaf32267d2c214e628d0c9a7bd7f85c86d52e0ad145bcf61526", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetInputChannelOp.php": "2b3c807797e2731a45d4feeee14e94994612130d3b1d3cfff8ecc8876d215558", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetInputPeerOp.php": "a9bc4d8af81fdb9a78908038690568e7e94c02cab64e59fc52a10f002dbf3662", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetInputStickerSet.php": "7c3b0ce0b2c6b3c0bbf7c5c4ba33e7b491a1a8547e0340667e40348c0e228779", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetInputUserOp.php": "d5bca8ffc5aa64c4cd33bede49392c21a0a800d9002bc22de0f46176a27e6a92", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetMessageOp.php": "112c0f0480e46146f8ebd0dff00d365a0b6d0a5162134d5b6910680ed00a4a10", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/Noop.php": "4e6c96a3014f3bddf3c39a4c0750f6237c5266ce03df7c09c2986855ff1c0c9a", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/PrimitiveLiteralOp.php": "e030b15127b2cb9407fd72e22dfd3b514327faa0a2c08c38581f9fa2ac001937", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/ThemeFormatOp.php": "e384c89147307988dbf4c2972ba1e5630f84ad2d40e067f93813d9fc03b42fae", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Path.php": "bdd3cbb15bcbb9504decec03dc1eb529f8805b5c9e73b4602eb219ebf7412b0c", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/TLContext.php": "0b975a77af7981eb7b4aa45c48adf7908be6f6d23f4016122e5548624367e9f0", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/TLWrapper.php": "88522ff62efa4e0fa690d1a7809726de2b3be1dd0fb14cbe2de4016172ce7987", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/TypedOp.php": "7604725c49ac22576f2c285fe2c56a7ebb0b87effa7422427850aaa33e753b34", + "additional-source/madelineproto-build-inputs/tools/TL/Builder.php": "0a27bd880c6dca139f5148bc6ee84413a24910d5afab96be982a30c0ee1e294a", + "additional-source/madelineproto-build-inputs/tools/TL/SecretBuilder.php": "6d5c40cef5c8d152686cc90ade49a759c2fc2a26b01fe4d2fee66d80406404ad", + "additional-source/madelineproto-build-inputs/tools/build_docs.php": "8b15e2a296f2bbbc1ffbcb1c87a052deb556d0e166b81753fafd77aa63cd5f20", + "additional-source/madelineproto-build-inputs/tools/build_docs/layerUpgrade.php": "b80237aa3f1d43d218c3e5c5aafb5866e8269580d359ca831f0e8931e0d7e082", + "additional-source/madelineproto-build-inputs/tools/build_docs/merge.php": "45c62d5c545d01934aaf86919f95f2fa46924577379d7d9ff904af6ddab0414d", + "additional-source/madelineproto-build-inputs/tools/build_docs/schemas.php": "78db962cb623c63c3b3b98a1f77f3ccfa82482e232a5f2db1186f21ec97b643c", + "additional-source/madelineproto-build-inputs/tools/build_tl.php": "647a38d12bf7f9624f4600ce3c9e2a52846fd6e75b01df63ee7be11f34bcda6b", + "additional-source/madelineproto-build-inputs/tools/fix_docs.sh": "f8f69e4175a2b639459f9fe8bbc260db0354add33c90aa6a139b84d82714b3b8", + "additional-source/madelineproto-build-inputs/tools/fuzzer.php": "306be2401bd3b3ba7a36aa140044b8f9d1d6974b33a329f868a82e36f28b3b08", + "additional-source/madelineproto-build-inputs/tools/genDataset.php": "6d487fed4569c1fa863387dc90dc9af4fa9828b026aac45f11e611d72fd9fa45", + "additional-source/madelineproto-build-inputs/tools/gen_filerefmap.php": "64c04660acb12f86e75949e31e9683867ebd3ec32bf230cc129e26163ff4dd58", + "additional-source/madelineproto-build-inputs/tools/layerdiff.php": "15f9716541f87d813f5d1faeee2ece5664a1c94ae6ed6635178265f19f1cdc50", + "additional-source/madelineproto-build-inputs/tools/makephar.php": "06cee80ffd3f64c4b34318fdda009b9b07166697ff812af9f5a495c24482a2cd", + "additional-source/madelineproto-build-inputs/tools/phar.php": "2cb09ef89f3bf87f148bc6a9c1d5df08d2d492d6aaa3270156b7a7bb9d65fa84", + "additional-source/madelineproto-build-inputs/tools/phpdoc.php": "0d7a4af3abc78265cdd6a75436f26691a3780214cd7c783a9cf80b54ee47b2c5", + "additional-source/madelineproto-build-inputs/tools/static.php": "77b36fc8ad17adf4ce1b979cccfc97c88ec8d1fbcf2e88f70af06ddd1ecb244f", + "additional-source/madelineproto-build-inputs/tools/std.php": "718e35b65340083a1f4c59e49d53e73a96b210321256a92cd6622fee88305c34", + "additional-source/madelineproto-build-inputs/tools/translator.php": "a55b87ddf3a09c03365143e736ae6444cb47f36cae78f970a7b553883ca3e054", + "additional-source/php-rtc-av/README.md": "811f02bddfc3c0fb6954f0f418d58215e78219c5f479cac60fbe2fbc398e9ae4", + "vendor/amphp/amp/LICENSE": "84904cb068b00a937d61104d0ae336bff1aa3518c0329d13dae8b71880dc2429", + "vendor/amphp/amp/composer.json": "6c95861590fa640fe7ef3c59b285b5980d362f9befe3b35891684329344a49b6", + "vendor/amphp/amp/src/Cancellation.php": "ebf61138d631d14fbafcc7372f48c371d2f9b4281b6e49145b874e5c04843f66", + "vendor/amphp/amp/src/CancelledException.php": "4045a6fe66b076eac2deecd7f185ec2242de4e1ea831bc2a67457c6256c764c3", + "vendor/amphp/amp/src/Closable.php": "0ad2b0fd45a9f6f7113b292b1fbb3fea7d488ca1a1026826fc6b248e6c5ca352", + "vendor/amphp/amp/src/CompositeCancellation.php": "7429a984776f5406715a1b36e2475dc772797066ad8421255545664f486c3231", + "vendor/amphp/amp/src/CompositeException.php": "289b56071a4882d0dc5ecd3ea90b5c1cf29f2c036e485bcaf90e1808938a8388", + "vendor/amphp/amp/src/CompositeLengthException.php": "ab18cc343df92298340be912332b91e4bc984304bc9fe8efe4eeaa73b3753791", + "vendor/amphp/amp/src/DeferredCancellation.php": "8645b7614818764f6872c536d11bdc438016b4b58a3a78f9a5997bb06966eca8", + "vendor/amphp/amp/src/DeferredFuture.php": "88652d2b81e29f8079dbe0b553e6be15aeaf111dae5c77dd9a7c8596459d0699", + "vendor/amphp/amp/src/ForbidCloning.php": "81e71e54e3368e45ef573a098d4361173ad69e315f54761baf936c8f9c242f5b", + "vendor/amphp/amp/src/ForbidSerialization.php": "a3979e28ef4303e2234bf3b400d6e35bc96db6cf41ece074dbc6ff8603ae4c52", + "vendor/amphp/amp/src/Future.php": "62404395d4558f635a7e53f45f2c5b4348ed2b767ea10ddeac50479691f183f5", + "vendor/amphp/amp/src/Future/UnhandledFutureError.php": "19cb06f102acb3521f7339792d9ca930297187734502b29a86dd155af5383dfd", + "vendor/amphp/amp/src/Future/functions.php": "514db68044f1b4ed5d37bab7cfdd811c72ea3a316b504f61e01a533ea31db35c", + "vendor/amphp/amp/src/Internal/Cancellable.php": "efa42a3c66bd550321e9490d68046ab7736beef6d9affd84720e97c5fc45c7c6", + "vendor/amphp/amp/src/Internal/FutureIterator.php": "eb0395360f1fc593db276ce49f433159cdff4fd01d0f669f92d140b8fd527fd1", + "vendor/amphp/amp/src/Internal/FutureIteratorQueue.php": "c8349f3a4434b8069b8a5c3f78563f93beebe43bc14dffd9a2f7466ad187ee3a", + "vendor/amphp/amp/src/Internal/FutureState.php": "1f9221e33da695127c599dc1daf79c8d1368a3386a6b9a0f60c7637e88c06c33", + "vendor/amphp/amp/src/Internal/WrappedCancellation.php": "3461882687da68bf31a021caa83f156b545dbecdbb57a9c85ed21bdf21d4b18f", + "vendor/amphp/amp/src/Internal/functions.php": "95f03b30a237f0d164ca111a9650f1cd1ede61a43020d93b8838b8c3b6e98ea2", + "vendor/amphp/amp/src/Interval.php": "a58f2bbdc857f519153387b67c5477c3ec1fae7f5c145b99ef91dafc5d39aa47", + "vendor/amphp/amp/src/NullCancellation.php": "6fdef4ebce044baa2eecf3113649fdbdb3dbd68df6ff989a904f0e2167994f9e", + "vendor/amphp/amp/src/SignalCancellation.php": "6af1fadba98945eb625aa786a8ed184936c3f997d0aaefd49bebcc2d022deb34", + "vendor/amphp/amp/src/SignalException.php": "d7ad4704319fa752e7cbae95e05cb8237e78b3ad81ac2031a916a1dfa0c2761a", + "vendor/amphp/amp/src/TimeoutCancellation.php": "da2860989529bbd6d30178c4a3dae9801fb6713ff46558cb2d3581604592edd0", + "vendor/amphp/amp/src/TimeoutException.php": "b7bc3aa27117fe6867040b22d6734205289e486a0dea9a29bb650df2992396ff", + "vendor/amphp/amp/src/functions.php": "17b647d5c150955668f9d998b9ada5af99c88ebd39b10fb69ad69189937a3c34", + "vendor/amphp/byte-stream/.github/workflows/ci.yml": "0078d569a4ddbc2a99769c59407802e6e2d4ecb91e6c5f35bc0583b3b568a98d", + "vendor/amphp/byte-stream/.php-cs-fixer.dist.php": "5ce44edecab0341a80260246cecaef8e48690f3a1b6be2ddbe812ad05c83851e", + "vendor/amphp/byte-stream/LICENSE": "5054607a36e0b2c287274145c01e3358ca62e79754d947159b7ace87cdd78305", + "vendor/amphp/byte-stream/composer-require-check.json": "7c052dcddc8d79aaaba0cc5cc131eeef1ac25e0406937fec5063e9e222237e68", + "vendor/amphp/byte-stream/composer.json": "986cfcf1044bb6b9ca4c36e70af51b4552cfce6bbc1eb2ada11872388961b2be", + "vendor/amphp/byte-stream/psalm.xml": "470a18311fdda9f3acd01180f14af36f4b4566358153a76430ec93607154cf66", + "vendor/amphp/byte-stream/src/AsyncWriter.php": "f717480c1a172230ea95383b7abce6e0fd6b17d3c243b87543c2d8920e72099f", + "vendor/amphp/byte-stream/src/Base64/Base64DecodingReadableStream.php": "e2db3f5226d5ee1e50d4c5b9fcc25ee1fcf5c2c1f88612d5012993a82ad0b84b", + "vendor/amphp/byte-stream/src/Base64/Base64DecodingWritableStream.php": "17658a26fcdf8cf5fd8dc6700faf8ec69d07c17a1de8d2250b16479ddf95e98b", + "vendor/amphp/byte-stream/src/Base64/Base64EncodingReadableStream.php": "2a6aca35f245409061a1d810b370208d6a73407059f607d8511097b509dc4684", + "vendor/amphp/byte-stream/src/Base64/Base64EncodingWritableStream.php": "ee7f99da7bbf0c15eccb8a2759b932a32bd94852fa5a4d197d8400f784359855", + "vendor/amphp/byte-stream/src/BufferException.php": "43dc80e36eda19b04cad50b69715c60367a9eead0aa6de560ec5c736fa5394b1", + "vendor/amphp/byte-stream/src/BufferedReader.php": "c2ac60b46765b615902ebcefc55fd5b41ca62158af61c34d60416ad8cf4e8f9b", + "vendor/amphp/byte-stream/src/ClosedException.php": "219a7bba4df3cefacb011eacdb15d8ba3c5b3ca003636f5daa1056025d8085a3", + "vendor/amphp/byte-stream/src/Compression/CompressingReadableStream.php": "8bfb0be2def1c7884c97abece12b5d823e8efee1c85c741c2aaeee4bcd8f0dd2", + "vendor/amphp/byte-stream/src/Compression/CompressingWritableStream.php": "a510920406333d81e34f9292dc0945318d2607ee1fff106537341b7f80de3245", + "vendor/amphp/byte-stream/src/Compression/DecompressingReadableStream.php": "90a2bbb209c5395b025666f357c6dbee7be67740b181240dc6f0915a6a55c2f2", + "vendor/amphp/byte-stream/src/Compression/DecompressingWritableStream.php": "1e33a31816aced792e387aed201ebb6226d41951a1720fc0d139f67c47415012", + "vendor/amphp/byte-stream/src/Internal/ChannelParser.php": "292e69e14d85ec26ac91911f239e44a0538f6ab1a8dfbec7f6982bf1889ff10d", + "vendor/amphp/byte-stream/src/Internal/functions.php": "4c8aee76eb56639121cbd04755ff7959cd18a477a3696653973c9990c1ca86c7", + "vendor/amphp/byte-stream/src/Payload.php": "a0eed51625b642ee66b6eae49885825861cdd80c321d4a2cc8a7b2080d31530e", + "vendor/amphp/byte-stream/src/PendingReadError.php": "de9a87b42ba1f066cee5cfce428e96d523bad90b50e7ced97c99e2420c6fe35f", + "vendor/amphp/byte-stream/src/Pipe.php": "a0aa04ba0a354100c79e5cf673bf1cd69c9101ef95612aa36b984351a0413972", + "vendor/amphp/byte-stream/src/ReadableBuffer.php": "e214ee17286081ae4dfc097bdf64572a52a4186562bd48701b3517c70971a4cc", + "vendor/amphp/byte-stream/src/ReadableIterableStream.php": "d45fadc7d36a23fcbcc22b1970bd8d39fba37c7a34464def65c6debbf70293ab", + "vendor/amphp/byte-stream/src/ReadableResourceStream.php": "d889460b5fdbe74604c77f5766206b748000f7e4776f829e7ee22276fa8332d8", + "vendor/amphp/byte-stream/src/ReadableStream.php": "f82bf255eea6f1ed3d093dbcae0eaf300ee6d970d83c07cd6f130ec84f759078", + "vendor/amphp/byte-stream/src/ReadableStreamChain.php": "0240a00cbfe487b25660e5fcb293fbffde3e1a19d4cbadf5fa58e707d6bdf18f", + "vendor/amphp/byte-stream/src/ReadableStreamIteratorAggregate.php": "651421877fc57b4d3c7360b373d2c4c363bef267bede3a7517738a8d062f7fa5", + "vendor/amphp/byte-stream/src/ResourceStream.php": "15a7a5f304afefa157da1465782890af7b50ba03bab264226a1c34200fdbe45b", + "vendor/amphp/byte-stream/src/StreamChannel.php": "1db3525604fbcacef129a1df7235413f6d4676d767c9f793d74bf2b339050381", + "vendor/amphp/byte-stream/src/StreamException.php": "22f706319d8bfb4337d3818cd01178270b5aaa0aeb0f049d2deff45ace02a020", + "vendor/amphp/byte-stream/src/WritableBuffer.php": "26d4160b3803445c9db8305e09355588bf57e6e8e9a66487ff7c4720aee7df36", + "vendor/amphp/byte-stream/src/WritableIterableStream.php": "e7fd0bb47e77c099d4617eea7b029a823446f3bfa3a3d7028eaa1bc7f1095615", + "vendor/amphp/byte-stream/src/WritableResourceStream.php": "3d2a9c11020de4de3b9ddb79da46840558b99fa01b43a2d3cd307d1f1cc77b7f", + "vendor/amphp/byte-stream/src/WritableStream.php": "50722ff821de631b67f9ec6f15744aa418d369a9fe80f92f1f1dc6df0624d4f4", + "vendor/amphp/byte-stream/src/functions.php": "6d26113166455a6d4f4f8d76e76b9d9160ec0b1ece22ed18b5318057e410e2c2", + "vendor/amphp/cache/.github/workflows/ci.yml": "2942ab7c0cabc36f2cc753d14cdc9e9f85cecc9cbdd5e2c4ef78218d6d682512", + "vendor/amphp/cache/.php-cs-fixer.dist.php": "3111e6ce024060615cb967c5da8c8ba4142ea53c13cf9389c4f3766f016d235d", + "vendor/amphp/cache/LICENSE": "a6d83873b76621737538da8481d4f737fa5ffa15dd3abe6e4c3a112f6f5ea1ac", + "vendor/amphp/cache/composer-require-check.json": "0a056b512ad306d1f7798449d4232fa59377c1870a77c4919fd391e54221ced7", + "vendor/amphp/cache/composer.json": "8d8b2b08f8eda5b3c8d6f87956a57deeab0b9065227430d9c5c20756e7dfb05b", + "vendor/amphp/cache/psalm.xml": "c9ae8182dc86669b279b1f873d67dcae590da9b10e43b27e79de9c1d13975217", + "vendor/amphp/cache/src/AtomicCache.php": "a2070275541df0f02a9b6df4136bf8f4cd1774b99c8deceecb21a46f37a590c3", + "vendor/amphp/cache/src/Cache.php": "047e8fdf2a8627c04226f5cd0f0e227e9245b2b1a1056bcc74722e165d211c79", + "vendor/amphp/cache/src/CacheException.php": "f8791b72ca1f43d9daa6cf151548abefcaf8508c5b8ceef29d1a9e388e048c0e", + "vendor/amphp/cache/src/LocalCache.php": "44c1815f46a1c7951021844414ef1be389b943efb3429bb67b40b85fdf2d4335", + "vendor/amphp/cache/src/NullCache.php": "26740b0e947d54af58727b49a02aeaf220c0f155db7e8f80304b80368fdfbd8e", + "vendor/amphp/cache/src/PrefixCache.php": "5eefd610752714b58414249f6c21b84c16c3fb98f527038424bc49bfe0bc52e8", + "vendor/amphp/cache/src/SerializedCache.php": "4fb5cb8b630267c5727aaf7ecf8b58211a6e01c3e276dfd6e9315530ba568639", + "vendor/amphp/cache/src/StringCache.php": "61afc450a01c56fcca98dc715e9249de22deaa6b2150ed7f72f3549a3f7c0fb7", + "vendor/amphp/cache/src/StringCacheAdapter.php": "aa727223ef87214cb6c8fa4a28f1ad87c1dcd6e0df1eef722ba819a3b0f4c067", + "vendor/amphp/dns/.github/workflows/ci.yml": "d232ea9bdc3e0c2b7a9381b5762e6f64dd7f9bb47adfd307b099951059ba3f22", + "vendor/amphp/dns/.php-cs-fixer.dist.php": "5ce44edecab0341a80260246cecaef8e48690f3a1b6be2ddbe812ad05c83851e", + "vendor/amphp/dns/CONTRIBUTING.md": "979aef790f3cd7c4a193f858996e079eaac50e4e496b092b05b0339bb2bedbfd", + "vendor/amphp/dns/LICENSE": "93dc2b2aae85651379265cbb4906d2b054020ac9cc4ee70e5040f79751e34651", + "vendor/amphp/dns/README.md": "9f26c13424ae8b1069197eabaace5d43f183b5a4f85609d42e9ef166c7472ed9", + "vendor/amphp/dns/composer-require-check.json": "00d70055d3bf2e423b34eabf91c61ebf9e8efd16af311d5eff14469ff7add9a5", + "vendor/amphp/dns/composer.json": "97433bdf58fbe0cf392d784a299697fe66347738b41d326aa2bb11e4d846fbc0", + "vendor/amphp/dns/phpunit.xml.dist": "345c60de31100b878744261dd711c4e6972212bd24e41d39548d141c1d9db796", + "vendor/amphp/dns/psalm.xml": "c01143dd7b83c6647e7fba08fe88b19c63257b6d5c88746db51fa12536deff0e", + "vendor/amphp/dns/src/BlockingFallbackDnsResolver.php": "4404de604b2d9e3a8c8ac7910adc63db83338df9ec9fd7edabdb021c7f4acf8f", + "vendor/amphp/dns/src/DnsConfig.php": "0ac27a78710ee04d75c16823431f475fb2ce611903201634e0f369be881458ca", + "vendor/amphp/dns/src/DnsConfigException.php": "2b0a21e796e602cdc7b24f759d2e05819b292fde368bca3d9f3e8a2e4143e8be", + "vendor/amphp/dns/src/DnsConfigLoader.php": "a854753faf02cdd59046b9b450c93e721de84a0871ce4c6935f558061e4cb010", + "vendor/amphp/dns/src/DnsException.php": "20a10431ffe1de7359ab906676c8eaae9bf6ba620a41441d22476d8f3758c02a", + "vendor/amphp/dns/src/DnsRecord.php": "ceeabbae9cf16ec769f38f37d0f338fbf3446b93e5be192d591a502ad581b4f0", + "vendor/amphp/dns/src/DnsResolver.php": "a6bae009efcc1b6aaa16cb6f8ff784d79102093920474151df66da85e6b5ee34", + "vendor/amphp/dns/src/DnsTimeoutException.php": "9d3ee237b310bcd9b0185fe3f1b1ea6496d8583e521c45e11018cca785b94af1", + "vendor/amphp/dns/src/HostLoader.php": "0dce1612711b2310d2b3175662f2702cebaf9dca44251c021a2171251ea61035", + "vendor/amphp/dns/src/Internal/Socket.php": "ca1129a565f769b8a20729d9499f199afd58aeefe7579ebe1e61aa6f545ec924", + "vendor/amphp/dns/src/Internal/TcpSocket.php": "b52949012c7510b5743e0b98cd63e7679e846eef9d404c5d8ff37ac029ce3939", + "vendor/amphp/dns/src/Internal/UdpSocket.php": "ac3dd8f2b6bb1e94ca3bc51fd263012b2d4a333c6ed3c0ec8194251d8311c981", + "vendor/amphp/dns/src/InvalidNameException.php": "183ad8d2ea5ab8d23989cf1f720adb8708120a0c55a4e50fdffc7a64fa96017a", + "vendor/amphp/dns/src/MissingDnsRecordException.php": "500ba6b03026b83732325619c6552fbba99ba54bacd9d1c2837e1162c63d4b57", + "vendor/amphp/dns/src/Rfc1035StubDnsResolver.php": "2c3b608e2323215751b69afbf3f484e7fa9fb4cf059fb3eb3dc2f2d42a63b4cc", + "vendor/amphp/dns/src/StaticDnsConfigLoader.php": "8205246b22b5757bdf7ab100fb1c174f68c936686f4fbd88fe42bcec00ac43e2", + "vendor/amphp/dns/src/UnixDnsConfigLoader.php": "477885d1a7245af452752dc02b8f7ad8641e721361f12e1242deaae91c2d0cb4", + "vendor/amphp/dns/src/WindowsDnsConfigLoader.php": "f103db8dc85f185e3fa5151e3d46df0578f9352bb1cd33df7b346b822ed3c7cd", + "vendor/amphp/dns/src/functions.php": "8255d8224fb36a550e4c18f260a9d4c82fa74dbc528c59ea2467b47629dff960", + "vendor/amphp/file/.github/workflows/ci.yml": "1beb65f104a33ed7566c223aaec60ff51db268c2784b82d1b44e57dc8269d3f5", + "vendor/amphp/file/LICENSE": "75ff14768ed3b0898ea24b8ff76e9615c21d1d4e6f7ba1d258cc55cb9689ca73", + "vendor/amphp/file/composer-require-check.json": "ab36b5ceb64ac09f0bb7bc569222b4f5817ff40af536eb386dd93eb7ff911ca2", + "vendor/amphp/file/composer.json": "73f832d745fa4509184f2841319a252cf2b4af8ae1e6faed33657d743924665e", + "vendor/amphp/file/phpunit.xml.dist": "85c7327041aeffa92733b7252c5f88978957fcc4db80f89d6a05aad9450f0d27", + "vendor/amphp/file/psalm.xml": "11dd3085b07900c38ecf4f2e270583becf1967b62d551ede56f9f1a10638a8ba", + "vendor/amphp/file/src/Driver/BlockingFile.php": "78b2f4acabbe46f620a286a90604a6d8e66ba340119115100cf4e1a303eb4322", + "vendor/amphp/file/src/Driver/BlockingFilesystemDriver.php": "013c3d7f2e24c11364ea1ca32d658bd9e290aa6aafefdb9c347d4a2daba45a6b", + "vendor/amphp/file/src/Driver/EioFile.php": "6637a1af69072da37a83b6b71fdeac2677d75a0a3ff9ea6ed66a8969003f2520", + "vendor/amphp/file/src/Driver/EioFilesystemDriver.php": "fa5d4d71c5b18f019864a146b21590bd2db1ed6e5205e066420081db472cbb13", + "vendor/amphp/file/src/Driver/ParallelFile.php": "ae59ef5c597e35980d7fb8b590e0977638b51897a86699a269566623df5434bb", + "vendor/amphp/file/src/Driver/ParallelFilesystemDriver.php": "d79984b3e162270e61c3044f2bb0b0c65d670e99bbe4b8a8c904286ad15e5ecf", + "vendor/amphp/file/src/Driver/StatusCachingFile.php": "a50013fd3b4678997fa6c2d48114f2d42c2ad290cd14510fd01218dcaa766de2", + "vendor/amphp/file/src/Driver/StatusCachingFilesystemDriver.php": "0399976e2907846ea8443426921038e1eb66e4f609ec851a8ec88fae3b939cbd", + "vendor/amphp/file/src/Driver/UvFile.php": "03a74f7baf754f925c26d3c54bdd9ae37e2f9dd804b30aab930edf51478d14db", + "vendor/amphp/file/src/Driver/UvFilesystemDriver.php": "6ec6031d1ccf524008e3d370ff3d71d85bd24615728dfa910fa2c8dedfb59b3d", + "vendor/amphp/file/src/File.php": "95802ba59e9fd3344472036e9155b75c16d1fcc0e88d498b839dd9e00cd963f0", + "vendor/amphp/file/src/FileCache.php": "f97317ed938130eae66e1a0ade67a2931c207c6522693d302ddf08785afa56ac", + "vendor/amphp/file/src/FileMutex.php": "cb75694b160855f5ef7e71ad794258523f53e7ca5128ea46743152905805a44e", + "vendor/amphp/file/src/Filesystem.php": "b771ef9129ec7499d44198ddc8cb5756a9a7d3be2fe19cf8e309024b2629fb96", + "vendor/amphp/file/src/FilesystemDriver.php": "ac8e6d9f2d2b2bb3326afb17aeb6ee25278aedcf3c4941f00323de8ae65c6876", + "vendor/amphp/file/src/FilesystemException.php": "ec9813de75586fbbb0f058ec7986edcc93d1207da459c0d89fe16f7df7ac53d0", + "vendor/amphp/file/src/Internal/Cache.php": "bb9806dadbfdc0559c1174677e0a627a543e61ab23572a198638d416b5652365", + "vendor/amphp/file/src/Internal/EioPoll.php": "3e9c9985a30bb0b9abb8370b5ea368a1b37aaa9bb5e1b13471bf07eda2ecf4c0", + "vendor/amphp/file/src/Internal/FileTask.php": "d4f7bb0f7b2e8fd18297a2bfd8eda931d05f40176ee02dae4a14ebfce0198f3e", + "vendor/amphp/file/src/Internal/FileWorker.php": "b05d4c3fb8ab3e306508820eab248d2e15120c277684283681f8488ef3f809db", + "vendor/amphp/file/src/Internal/QueuedWritesFile.php": "6db075c6366396a366c6cdeb775dcd141b8c299367e6dfeddca9130901bc7459", + "vendor/amphp/file/src/Internal/UvPoll.php": "d3905b98f01dfd9c12a6f628afff2a5c3f6ea3c34b5d3b782f4cf0f23087860c", + "vendor/amphp/file/src/KeyedFileMutex.php": "22fa5a027cafab1067853ca6506adca4ac3edd8807afce56d2ba70c5f816b9f6", + "vendor/amphp/file/src/PendingOperationError.php": "4bbe24c16b71edc7f7bdc0cdda844836bd3d696eb3bd54f67b34b152450f47ab", + "vendor/amphp/file/src/Whence.php": "c0a941fd362df34bc18714d859e6e80c5c3779882a71973e00f9c8ffc63e044c", + "vendor/amphp/file/src/functions.php": "1eb2e279fd5f89dbdcabbb57089b1a56e93c3350db1a4429c9019d64cba68b05", + "vendor/amphp/file/test/AsyncFileTest.php": "b7d82c70d8fb457647b009b1d603d0d8157edfecb8cd46889691ae556d8c6b16", + "vendor/amphp/file/test/Driver/BlockingFileTest.php": "4fb1887d4182bc945a08cabaa85c99b242a42b81d7c3b7fc3e2d0124f4d309cd", + "vendor/amphp/file/test/Driver/BlockingFilesystemDriverTest.php": "e9889056ad222a0ac8ce3e4dfecdc708a13e3facea0eb07e913d5cb230e6e6f2", + "vendor/amphp/file/test/Driver/EioFileTest.php": "947542cd11214a0398670ba7119eea7502ba1b45c48e6cf6e32fcc43c52eca8c", + "vendor/amphp/file/test/Driver/EioFilesystemDriverTest.php": "a285423a4a8e860fe0cf4d0f4ba0a132900b4e3983e64efa47ab88da7b037ecc", + "vendor/amphp/file/test/Driver/ParallelFileTest.php": "e9c77247ca25e150c828abbc0692ec1740b38989e82f69fdb444c952f43152d5", + "vendor/amphp/file/test/Driver/ParallelFilesystemDriverTest.php": "4e4c767f0667b5a0cb79ad67c69c76a0f60f3698417c512fc609f46ee8fba2b7", + "vendor/amphp/file/test/Driver/StatusCachingFileTest.php": "da97d2a34c9908b1f41b97cf8779dc06f3759ad5f29860ac2e08d72369623029", + "vendor/amphp/file/test/Driver/StatusCachingFilesystemDriverTest.php": "279d80f610e0eea5afca499324e2a86b1a0e7228ee20fb998d1ae62e1c65fa4c", + "vendor/amphp/file/test/Driver/UvFileTest.php": "5e3ab54267f31270730158fbf5fe298835033b2f3700e31e3588ee2c2161a0fd", + "vendor/amphp/file/test/Driver/UvFilesystemDriverTest.php": "7fa99e27a943600036c0f11e1910d7e92524327e371c5769b78d44efe244353b", + "vendor/amphp/file/test/FileCacheTest.php": "72b40f11820158479a29041b1e71f2d678a01177769443b8e168aabdb938e302", + "vendor/amphp/file/test/FileMutexTest.php": "0b279ea8ecf78e66232e5adc8b490972e3f66f841ec2daa249f3548e6d1c156f", + "vendor/amphp/file/test/FileTest.php": "6d0064ed62dd9d74dded9712af9b747e8eb88d6633f2bfd086db7f28365831e0", + "vendor/amphp/file/test/FilesystemDriverTest.php": "bf35b3bee4bdb8091e22755800cf1cbd72d82c0b5e8d8de6fdfc360d4f40e612", + "vendor/amphp/file/test/FilesystemTest.php": "5174af323c39fab5a84e6b655b2771e506745efc4e49020f00fdffb1eb0b248e", + "vendor/amphp/file/test/Fixture.php": "a11924262f9e5b989db8c90a4e050cf5c7f259b71ea55f60818f638af7934d81", + "vendor/amphp/file/test/KeyedFileMutexTest.php": "efe505b697b15e54d42882aa369d3064ba11cfe798dab4644d8ea8a7ff087308", + "vendor/amphp/file/test/phpt/issue69.phpt": "b8c3520e7f828b8f0c4ec50942880ca31374e2b9230449e8641119459bec4b41", + "vendor/amphp/hpack/.github/dependabot.yml": "1d602d1045ad62a174430bdb482a347b1ef7768bbce2402fe53ceaaea117ede6", + "vendor/amphp/hpack/.github/workflows/ci.yml": "7ce55fe242ff0a7538199b0c783d7260fd5eaa2d443a0fd200a170561c117b14", + "vendor/amphp/hpack/.php-cs-fixer.dist.php": "5ce44edecab0341a80260246cecaef8e48690f3a1b6be2ddbe812ad05c83851e", + "vendor/amphp/hpack/LICENSE": "93dc2b2aae85651379265cbb4906d2b054020ac9cc4ee70e5040f79751e34651", + "vendor/amphp/hpack/composer.json": "644f9460d5ecc66861888e48604f9009aab0f1cb1c0ce9e2a46a60cdb91fb22e", + "vendor/amphp/hpack/examples/bench.php": "3141e4bae4f1cc22f5bbde38ceaac93afb5f39c4362a2bcb889d3a6acf38ee41", + "vendor/amphp/hpack/src/HPack.php": "5c279bd82c145cce501f55b2742ec4df9f9465a613309613e4c89789910c64f9", + "vendor/amphp/hpack/src/HPackException.php": "ea994bae2a47ed62968729e3b57aa8a833c38bc6e3171289c63f6ac4ba349691", + "vendor/amphp/hpack/src/Internal/HPackNative.php": "576a240926ea0175f7cf9040f08d89216bb658e5d9c72b8458433767806fa341", + "vendor/amphp/hpack/src/Internal/HPackNghttp2.php": "bb439d875a6cd3d3f79405a3456bdcff09709f2e193b43af57ef0eaf15c4d836", + "vendor/amphp/hpack/src/Internal/amp-hpack.h": "7bc303aa3aa01fd9534aaac405c4b93d31932eb08a3a3ef1c21291ba49e89f6c", + "vendor/amphp/hpack/src/Internal/huffman-codes.php": "37db3e2675300925292f7dc9d86bbef22f66d4992099515f32a598af19da0f35", + "vendor/amphp/hpack/src/Internal/huffman-lookup.php": "2e01ff912324658a5cd5aa4bbfec36da4d6299601899a314325ab451be74deef", + "vendor/amphp/hpack/tools/compress.php": "bd42a505f81fec9d03a436bf382eb68e8c79452c2712b1ee89c684de5388b08e", + "vendor/amphp/hpack/tools/php-fuzzer/decode-crash.php": "8a5d97bdc8a1b36b9a26821a9f580213687faeed17cb26edd335b27287356597", + "vendor/amphp/hpack/tools/php-fuzzer/decode-oracle.php": "f55c456063227fdd3b97aeb9d9ba20054db766d8918b63bd73eac63e87f73909", + "vendor/amphp/hpack/tools/php-fuzzer/decode.php": "16cbf0005439780ea7cdffdc6674f249a548f91f1bc9d7fe270f9166c4c7fdc7", + "vendor/amphp/http-client-cookies/.github/workflows/ci.yml": "bd2b521ee75b17ed38f8d95b9653b662456efe48105fdb8a2f4e71ed47f55063", + "vendor/amphp/http-client-cookies/.gitignore": "496c9e4f0bce83f3e897cc64b11c8cc8416d2dc9a91dbedc76f94b5dc77232ab", + "vendor/amphp/http-client-cookies/.php-cs-fixer.dist.php": "471c989c811a3356ce22dc6212deb1161e85f043315e558cd23d30193caa53cc", + "vendor/amphp/http-client-cookies/LICENSE": "80a36409928641ee64ab2932c9a3a3876f7e2ee0f1b886dfa7c30404d7bd3767", + "vendor/amphp/http-client-cookies/README.md": "0c2068927aa518868ac9fa9007731a864a3c2a778d74c5af3ea51427701fa9ba", + "vendor/amphp/http-client-cookies/composer-require-check.json": "e6d1f771c1c69227b618129d07de6e8715933cb3357d9c7321bc2208afb14073", + "vendor/amphp/http-client-cookies/composer.json": "6d5898a130476185784f7528ea1283512bb327aa29df175607e55c71e07580d4", + "vendor/amphp/http-client-cookies/examples/.gitignore": "e80b4861a53fb52646cfa9301011c6e5eebd444e07652ba61e7a0585f068992a", + "vendor/amphp/http-client-cookies/examples/basic.php": "f9251cbe938e966855df31d831dbf1cadcc3354f9f65dbc616ce952f20987f4e", + "vendor/amphp/http-client-cookies/phpunit.xml.dist": "345c60de31100b878744261dd711c4e6972212bd24e41d39548d141c1d9db796", + "vendor/amphp/http-client-cookies/psalm.xml": "c32e7128dde79b3bca726c86d94b329d8479dfdd999fe96f5be741050bc64e1d", + "vendor/amphp/http-client-cookies/res/public_suffix_list.dat": "069cd86c0b13b0a26815c5700f7a33a37affba84dad51a1d71a2200fc748c29c", + "vendor/amphp/http-client-cookies/src/CookieInterceptor.php": "6bba4f674a43b409b969914129a5f9aa5b8572c3505a8c445d888d9427621240", + "vendor/amphp/http-client-cookies/src/CookieJar.php": "168dfa9107cc58c619a49ceb0a357fb545904b01ab60dca0fb66f1cf4346f71d", + "vendor/amphp/http-client-cookies/src/FileCookieJar.php": "763dc67edb706ffe0b858b115ccfe0eb7b8c9f1a8238c4047a8b23844aecba1a", + "vendor/amphp/http-client-cookies/src/Internal/PublicSuffixList.php": "520358e2c1278581e7aa56e196ea0d4f38d472334200c9aac885e36f66a56942", + "vendor/amphp/http-client-cookies/src/LocalCookieJar.php": "f424cae7cf5ec09f87609f04970604bedc26ca19a20a6c52b3d580281f7ce204", + "vendor/amphp/http-client-cookies/src/NullCookieJar.php": "13eae4a1ba0052f786bc33929b12a387fbfce55572f1f2c7d300a265f2e979bf", + "vendor/amphp/http-client-cookies/test/ClientCookieTest.php": "2d1324fbbb7397b3a7946958de2e4f06096a7d68421a181922729ea3f171243b", + "vendor/amphp/http-client-cookies/test/CookieJarTest.php": "135688f86ef132b967e2028dd14c60a284d4838c55fe4ea6eb50c569f58dd2b3", + "vendor/amphp/http-client-cookies/test/CookieTest.php": "46614828eb49bc130a0b56e9b4e9e897a8b4042792d11640b4a17d698b3adada", + "vendor/amphp/http-client-cookies/test/FileCookieJarTest.php": "82cec7e39f800dfd58850f2994ea80f0fdc17780a0e2eab5e88165895f5bc927", + "vendor/amphp/http-client-cookies/test/InMemoryCookieJarTest.php": "10e9e2564f9cf385678e7c67bb4b6fa8d53f23df3e6da38ee617f8c94ec92772", + "vendor/amphp/http-client-cookies/test/Internal/PublicSuffixListTest.php": "f2fd8c69c9fb9cd302e74a4da2c707daa569cd0adfa16c4c147788311f2659cf", + "vendor/amphp/http-client-cookies/test/fixture/public_suffix_list_tests.txt": "0090eed4ba1a288f7622ff40ca3e878e492e51d565935aa2c93171738d9941f9", + "vendor/amphp/http-client/.github/workflows/ci.yml": "0e55291eb41d6418a11994fbe8127818512854408464edebacb11d3af55bc79e", + "vendor/amphp/http-client/CHANGELOG.md": "2a5e604625fa6497b9847b144cd9f6292193930c4ef97b56bf451ab7a647fc5d", + "vendor/amphp/http-client/LICENSE": "5867f0443d153c8bc1510680d5dd922ad4db2bbc7445af9dd09d849a3efd7690", + "vendor/amphp/http-client/README.md": "e6e8a28d06a775da02e3c3df7cb6429265e73b55fc284e90f76632c30c6465d7", + "vendor/amphp/http-client/composer.json": "3d853c1799abdc78473e1cdc6c177c7e36c0a989aef88317a1f4425aa7458f8d", + "vendor/amphp/http-client/psalm.xml": "9d261419ff3e77acd13650135835988d13ce81fb4e000657c05efae298eec8f0", + "vendor/amphp/http-client/src/ApplicationInterceptor.php": "f96a2b7b46bef50d8dab019053489d17fea83e9619e298408dc0b6701a6e02dc", + "vendor/amphp/http-client/src/BufferedContent.php": "9be59c9d36dc745592431d9fe86e8ff0d4dff28f23f1691032396524a7738c43", + "vendor/amphp/http-client/src/Connection/Connection.php": "48366c20b22946169e40bbb26db2dc2ccd76e5060aa0c07eefe19dc554b981b2", + "vendor/amphp/http-client/src/Connection/ConnectionFactory.php": "6c947cba9548b2b668224e9ed278176929fcaab0ae60ca1a7dfd42dddcaf5362", + "vendor/amphp/http-client/src/Connection/ConnectionLimitingPool.php": "c60cd8f9b860e363eda1b037861e215e93624798a6b5a107e42b9a5be0a1059e", + "vendor/amphp/http-client/src/Connection/ConnectionPool.php": "d7932bf4519f95bc8163c267a3a5f632bbb4022f943aae30d860dc1a21c62eef", + "vendor/amphp/http-client/src/Connection/DefaultConnectionFactory.php": "5f860fc9c93a910ad65c4b71cebd29ff57ca2aef2311147c0fc987fa59439eb9", + "vendor/amphp/http-client/src/Connection/Http1Connection.php": "c60dfec5fe9cf6454494725f2a63237feb1b620972d8f600d94fa5d1d2e79c18", + "vendor/amphp/http-client/src/Connection/Http2Connection.php": "b65648a28cdc22b26b85f5818deeb1653274447b7adef36f5628a1a5cb9931a9", + "vendor/amphp/http-client/src/Connection/HttpStream.php": "844cc5d6f1b20224cc9a9c297457e2e2c665ab378e8a67796c71458ebd1ee01f", + "vendor/amphp/http-client/src/Connection/InterceptedStream.php": "028940da9cbed6c7bfc4b26d4e7aa6747e88a2c9427181b75a5d11ca78e93be3", + "vendor/amphp/http-client/src/Connection/Internal/Http1Parser.php": "79c6fdcb7c338fc08de3bc17b1c85356211b43054e08a868313f374d54fae49c", + "vendor/amphp/http-client/src/Connection/Internal/Http2ConnectionProcessor.php": "6b4be4510f1429e21ecd21bab849aa6d7d81a02262e9663405629832d4e530db", + "vendor/amphp/http-client/src/Connection/Internal/Http2Stream.php": "e7f7f31b469e4955b13f84060a6b90aa0a2e7d4dc36c6a19cce880fb148755fc", + "vendor/amphp/http-client/src/Connection/Internal/RequestNormalizer.php": "976b7cdbe02bb6dac652fed2d151e2dfacef7e8f4ccfff1ce7daf51fff17f9ef", + "vendor/amphp/http-client/src/Connection/Stream.php": "6bc530d9e0da21cdcdf91f1bd0c84686eb1f7874d114ac90ee2486c167c04881", + "vendor/amphp/http-client/src/Connection/StreamLimitingPool.php": "1ea5f15c0010fd3f81facc426f7af436cfd105f2d716a8b35b7293ed9b2aeb14", + "vendor/amphp/http-client/src/Connection/UnlimitedConnectionPool.php": "5ea90067d896d4d9533690dd3c1975af6dd2d0ed5099412dff063f4b0d92e6be", + "vendor/amphp/http-client/src/Connection/UpgradedSocket.php": "ebb4b80ae02abfef04cb99352e5621144a4f36df1c53d6315a2e3023baf85439", + "vendor/amphp/http-client/src/DelegateHttpClient.php": "2b9e275634ab651c37722e3a977dfbf029fcf5ea3a126bef4971da4df312c327", + "vendor/amphp/http-client/src/EventListener.php": "4678534bc4b4ec1f1adb8ad838de97af9a2a335d1d68df1f659db7fab0474ad7", + "vendor/amphp/http-client/src/EventListener/LogHttpArchive.php": "f8d60c9407a5144e3b4fb45284537b4b30297e318d55efbe56ec1a1b97fecc6e", + "vendor/amphp/http-client/src/Form.php": "87a03b257bdc43f01a5758a81b09b1c6b4cc28d913e79236577dde3d61f11029", + "vendor/amphp/http-client/src/HttpClient.php": "607cec846dbc7a5b1b16fdd45ce05e5f8b8d173b28564d829622d7505bcca5ae", + "vendor/amphp/http-client/src/HttpClientBuilder.php": "b1ad1ceb95cf49e20278db514c4a222b886a36ab7cab18479251a883339ec6d6", + "vendor/amphp/http-client/src/HttpContent.php": "e47609575f0e13412b3c0517b5c6629f526bf4e6c41c306d57e4b5f1ed14ba8d", + "vendor/amphp/http-client/src/HttpException.php": "ee3d3caa24e0ca1da267169d7f14d2e3b7899be5271cb7793e151ef934c9dc2c", + "vendor/amphp/http-client/src/InterceptedHttpClient.php": "cc60aa825b6b6ce0d8b2506b44fce0cc3c4965a03513e2c6d7d1f697329e4b6e", + "vendor/amphp/http-client/src/Interceptor/AddRequestHeader.php": "353d057a9a6bc6d7187ca5abf3eade79a7167a4a8c8676dad9250f50a02dae81", + "vendor/amphp/http-client/src/Interceptor/AddResponseHeader.php": "2f1345cb481baaec534e8dc5db4fa1d627a3266371680e8a39d0774707a07bdf", + "vendor/amphp/http-client/src/Interceptor/DecompressResponse.php": "a7120c369fb5edf612db36cc744578ace4f74f4cd75d464ab4e93cbf73a69576", + "vendor/amphp/http-client/src/Interceptor/FollowRedirects.php": "3970a18c5ff9fff3e3348a08fc200c951d73ce0843db5ab2ebb947d31633ffad", + "vendor/amphp/http-client/src/Interceptor/ForbidUriUserInfo.php": "4ce4612842a2de452b4ba79494236eebd5ca31f5f7893d27680ff34d0b0f6f50", + "vendor/amphp/http-client/src/Interceptor/MatchOrigin.php": "2e78ddaafbf419eed77a27ddb80d349064978dd4994aceb990b39f3d9337e800", + "vendor/amphp/http-client/src/Interceptor/ModifyRequest.php": "8b86e8aa804f9d931fdc10880dcf841ed1121ae855b15a8744fe51fe8dae3a4e", + "vendor/amphp/http-client/src/Interceptor/ModifyResponse.php": "5ee887b08172d89d7830dad42dbd10db6d9fe19570aed620f175ff957041c415", + "vendor/amphp/http-client/src/Interceptor/RemoveRequestHeader.php": "9b429aa3a50eff7226fc5ff2965b584deb87531a66f518a5996be4b0e2ec1283", + "vendor/amphp/http-client/src/Interceptor/RemoveResponseHeader.php": "3e610dd1b2da159c76f025fcc82968482f7f7e3aa90f526b6e4dcb422c37622a", + "vendor/amphp/http-client/src/Interceptor/ResolveBaseUri.php": "790201953a098285df02143d71cae3d533658b82c0fc82e5c5a38eaf16eb221d", + "vendor/amphp/http-client/src/Interceptor/RetryRequests.php": "65aaecab678d7ff27cfc5b63a61ae68edc3b4c2e2a77a4f4f7b475c4800ed74d", + "vendor/amphp/http-client/src/Interceptor/SetRequestHeader.php": "6293e2f095a71c6a8f7a700813d2d0cf11afa73b8995cf34517e9596b056e727", + "vendor/amphp/http-client/src/Interceptor/SetRequestHeaderIfUnset.php": "cf27548bca44619f5b12def7b0c0cf4945bc27db4bedcc026c94d0edce7513b8", + "vendor/amphp/http-client/src/Interceptor/SetRequestTimeout.php": "6161e0a9e0856fdcec2e4e12ac0100fd34d0cdf3b7f30f611b2c04e9020866f7", + "vendor/amphp/http-client/src/Interceptor/SetResponseHeader.php": "292b7ea3de224828aab610758a2c09c7543a4af87a769d3a1985f326a4729759", + "vendor/amphp/http-client/src/Interceptor/SetResponseHeaderIfUnset.php": "5413697bb7c920c8161fc2897fdd39944e04a2d1dc001c7a91616ab87245792d", + "vendor/amphp/http-client/src/Interceptor/TooManyRedirectsException.php": "2a70f07e0d9ed4fc4b50a1c172232269c7d705d395ddb4851fc76c8ccb04a56b", + "vendor/amphp/http-client/src/Internal/EventInvoker.php": "bcd2e2a5a5ee4431636a22ba7bd333e10f39fa542c7d78c5dfb000af5d3228f7", + "vendor/amphp/http-client/src/Internal/FormField.php": "59b5e64570148b12c1350989b0b218a4c27ee2e25ed0469ea2cd9b2dc35cbceb", + "vendor/amphp/http-client/src/Internal/HarAttributes.php": "733654dc27b93ca83c85a590ad1f370075d3544ed302e050bff58f154297db91", + "vendor/amphp/http-client/src/Internal/Phase.php": "664b1ea96223d0df4ff57d859787bb42d498678a35472cd2ddcce23c0fadde01", + "vendor/amphp/http-client/src/Internal/ResponseBodyStream.php": "bc6bc6ecfd428249beca2a0eb0d55fbb73bee28ae0a3bf74e155e689ce00fa6f", + "vendor/amphp/http-client/src/Internal/SizeLimitingReadableStream.php": "f18f2ca02c5bc72a775a4ef28a19b2c6fd1b51f291f1f4475983074e8fc3f9bf", + "vendor/amphp/http-client/src/Internal/functions.php": "def6c2623568de1a51250e28a3dfc87ebcb3d5ca48c55b82b87982e1f0f90839", + "vendor/amphp/http-client/src/InvalidRequestException.php": "764d90909d2073fd06abb74bc420794455521f16ce796cae69d3366a4808eebd", + "vendor/amphp/http-client/src/MissingAttributeError.php": "8181b67c2a85499306d69a0eb44739510c6f6e095a49fb7aa87318101dc95326", + "vendor/amphp/http-client/src/NetworkInterceptor.php": "8b353c8b8648e267f678935a99b7351a26eacda5661709085463fc36e01090ec", + "vendor/amphp/http-client/src/ParseException.php": "43f749fd40b8dd27865b7c01f84913ce0cd099e4efc2b93a19736a0756f50de2", + "vendor/amphp/http-client/src/PooledHttpClient.php": "3f784a03537e3919c0a289736997d0eaf549dbf09fdf28a93bdb645f755e42d5", + "vendor/amphp/http-client/src/Request.php": "706e4ceca44e97f24795032e89b0136280a5280aa34cfa8e30da727c3152c366", + "vendor/amphp/http-client/src/Response.php": "4c3095fb4ef080025911ccdafa65373b0fa8b07d704c2e1f387b2228d695afee", + "vendor/amphp/http-client/src/SocketException.php": "71d5dbdec09deec2c569ec40d75d29beb406b424281d4e785bbd41ac7be866aa", + "vendor/amphp/http-client/src/StreamedContent.php": "17d6a8be22b686d070b26f13de32b459fb90b00e6365ed1657447995fc4801a5", + "vendor/amphp/http-client/src/TimeoutException.php": "67158beb4ceb2e63698f20f6c6db5fc08dece1e23d04d900885f598eec9e1495", + "vendor/amphp/http-client/src/TlsException.php": "246ee4d306391d7e9ff1a3f132cb316d85c066c55c9d288203378f8aecce5576", + "vendor/amphp/http-client/src/Trailers.php": "2f26f4da4c517fb1a2de608326ed6bd6d86fbaf153cb5e192cce2d4bceeb652d", + "vendor/amphp/http-client/src/functions.php": "180c950c416116c03f9fa3ddff11f7846088820a2a12bd73c8d6b69df06f6dfc", + "vendor/amphp/http-server/.editorconfig": "671f270c30a8444d9e9925b8b1a3ae38e0550da305a70eb954328183a3572fe0", + "vendor/amphp/http-server/.github/dependabot.yml": "6e88c6b58f0687c7136021a6d2227a31e58a35bd78ae48ad5c619bf4cff2e309", + "vendor/amphp/http-server/.github/workflows/ci.yml": "fcd42ef20a2b441a04f0d6a59a6d9d938b3a0005ac67f3b1acb3621f1e3548aa", + "vendor/amphp/http-server/.php-cs-fixer.dist.php": "5ce44edecab0341a80260246cecaef8e48690f3a1b6be2ddbe812ad05c83851e", + "vendor/amphp/http-server/LICENSE": "75ff14768ed3b0898ea24b8ff76e9615c21d1d4e6f7ba1d258cc55cb9689ca73", + "vendor/amphp/http-server/composer-require-check.json": "7c20dd437581332623e2a893205e910fcc2ba50feef3b541ce9361ecff60267a", + "vendor/amphp/http-server/composer.json": "12a8a2c066d1b87c4682bfcb8e0771e0a4910adf87be3fefed11bef691048285", + "vendor/amphp/http-server/infection.json.dist": "c939360b5afb17f8a5e4d40b365cb9b4a389b4ce78a95aeeece158974a803847", + "vendor/amphp/http-server/psalm.xml": "9adce63af31e0f07b1dfa4ebaea46cbcfe5d1e82bee58b957ae7e0ae96ad6491", + "vendor/amphp/http-server/resources/error.html": "e277e98a5c5f49b6863e24a6d37368f798587428446eff3c86782a0199041445", + "vendor/amphp/http-server/resources/internal-server-error.html": "e512d4280e7e9a825198be12ebc902c9fc083a4c0b17a1e2a375d110155f0021", + "vendor/amphp/http-server/src/ClientException.php": "a5bc32337e39a4b9d118dd55803ebc671a293e267756e4a5ca204835db7fa920", + "vendor/amphp/http-server/src/DefaultErrorHandler.php": "2c3f1f0f3e99a291754264bcf0185db1e21bcc3ca2e4816f48016c7ee6e269e5", + "vendor/amphp/http-server/src/DefaultExceptionHandler.php": "44305ecea36a3671e93a54235bf5a208ec5a72fd2a165ea5ab13f6fab7f533a1", + "vendor/amphp/http-server/src/Driver/Client.php": "264adbcd2cfa880c1a8842fefac753603812a228be44a244911bea791d0389b8", + "vendor/amphp/http-server/src/Driver/ClientFactory.php": "6e51fe01cb356f24ea9e2b50c71a71003a13b8a886993ef45a9be42203eed1c9", + "vendor/amphp/http-server/src/Driver/ConnectionLimitingClientFactory.php": "33a80e030429f0f87758c97e72faea2048969958b657ac10972c0412d9fde073", + "vendor/amphp/http-server/src/Driver/ConnectionLimitingServerSocket.php": "00211aa09e54acfbd314911fcb4e23b71b19eabb110254a2969a2b338c8ae505", + "vendor/amphp/http-server/src/Driver/ConnectionLimitingServerSocketFactory.php": "79bb058e11d93a56d573ab9cfa5516951508aa23e76c5c139b335306d0bb87ca", + "vendor/amphp/http-server/src/Driver/DefaultHttpDriverFactory.php": "7c3ad83b1aa4e2dc3d8ecaf45256f377ea4818c759daabbc8187f52259dac815", + "vendor/amphp/http-server/src/Driver/Http1Driver.php": "a859f864327791deee06c937a12c0abcade24cc886640f542f7e0cb54258ebf7", + "vendor/amphp/http-server/src/Driver/Http2Driver.php": "dd9530527376cc069df7b008992df9316dba02344e18275946e4bbfcd7560498", + "vendor/amphp/http-server/src/Driver/HttpDriver.php": "be306954333718a90833ad553fa781ff5454aa522fd585c53d56582bb8f447e7", + "vendor/amphp/http-server/src/Driver/HttpDriverFactory.php": "5312b96ba43dd56aaec4d98fdab078857ee5dc20a5e1fd13e21dd677f1d23fc8", + "vendor/amphp/http-server/src/Driver/Internal/AbstractHttpDriver.php": "ef0a3b4fd7b32495472d7ecb8c5bd11ef6f3ca3db16e3a9d0d283d0f9e749e91", + "vendor/amphp/http-server/src/Driver/Internal/Http2Stream.php": "38c041ec098b709c004dab88cdacf781befd68771b85a6806ebaf8f04e1fc32b", + "vendor/amphp/http-server/src/Driver/Internal/HttpDriverErrorHandler.php": "db5391799034efe3048f67773d2d094372fd8d8146e4862f513f97a571010be2", + "vendor/amphp/http-server/src/Driver/Internal/StreamTimeoutTracker.php": "6de548d834b4b052a465572c36094c696bfb745f025fef62d10b7377bcc09fb6", + "vendor/amphp/http-server/src/Driver/Internal/TimeoutQueue.php": "4089aa60c9fae5036ce9df17242e535c4b0797c81d6182958cdd5b63feb30a26", + "vendor/amphp/http-server/src/Driver/LoggingSocketClientFactory.php": "f125aa2c2d0bbce396ede41a9ed356c4f561bf3b044cbee39b93234069f2999c", + "vendor/amphp/http-server/src/Driver/SocketClient.php": "aef7ccc9cf7d143715db67c0454834a9537ca4b5b61224c9162efceb4311c88e", + "vendor/amphp/http-server/src/Driver/SocketClientFactory.php": "1ff2ecb0736143edbf3ebd31edbbc0a68f1aaf717a135041d2350f99d05cb3bb", + "vendor/amphp/http-server/src/Driver/UpgradedSocket.php": "05cf0f6966f12498a08725a3e032465d929930be9719c5e6e5bb4f0e35d67ade", + "vendor/amphp/http-server/src/Driver/functions.php": "b56c067442ebfd41c83cc72617cbb7a18f8213532e281cd5db16c14e67cd66ac", + "vendor/amphp/http-server/src/ErrorHandler.php": "e80c7404af88840fa27aafdce26ca26d99c364a856152629cdd13af31f2cf193", + "vendor/amphp/http-server/src/ExceptionHandler.php": "f2e6343ae47d88666c17473f4639bbd0b601c63842e3844cdd5e7b620d3a66fc", + "vendor/amphp/http-server/src/HttpErrorException.php": "2284b130e224c4bc19d4d4abb6f8bc8b80c6574b66ff3313f81ea525b26315d5", + "vendor/amphp/http-server/src/HttpServer.php": "c4550bd634aa7dd3c45bbbeecbf3510e6dcbc961a2f067d9611c95113e1417d0", + "vendor/amphp/http-server/src/HttpServerStatus.php": "065572f5ab193d01da0d34eb1c715855bcced978aeddf56423db7a1eecbc8fa7", + "vendor/amphp/http-server/src/Middleware.php": "bc6ead6e859beeed0731622191010da8f7969e215858ac4347f0a7531fb5a821", + "vendor/amphp/http-server/src/Middleware/AccessLoggerMiddleware.php": "2c267fe2ca41543b30b0b063d99efc7d33fe4ec9700f46aaffdfa399b523886d", + "vendor/amphp/http-server/src/Middleware/AllowedMethodsMiddleware.php": "a93c83a2fc78834f56fdf7d4cf908e30a2157bb8685a8aaeb7749f2d43e46ee1", + "vendor/amphp/http-server/src/Middleware/ClosureMiddleware.php": "9fd2e59ab2998d0607ccb2cd882f09ab3459c4bd2087812b64c611b1dbc62e69", + "vendor/amphp/http-server/src/Middleware/CompressionMiddleware.php": "39f8a18b4deed96c025720d5622c84aa1e3da501cf0161ab23fa2d410e3ff09c", + "vendor/amphp/http-server/src/Middleware/ConcurrencyLimitingMiddleware.php": "cd5305b95503d4aef54b22f4b82fbe6cf0b7ab96c928730620ecf2b063a5f61b", + "vendor/amphp/http-server/src/Middleware/ExceptionHandlerMiddleware.php": "d4e6c9a3424ab0db3deac8443f428a04a396457238c997259e73ee26d3a59414", + "vendor/amphp/http-server/src/Middleware/Forwarded.php": "e66faad04cee480d9b6192fdd20e4274e629a58e88c86723a21d2262d47b2ba4", + "vendor/amphp/http-server/src/Middleware/ForwardedHeaderType.php": "a22cdd13ff21e3eebfe232860d401fc9bcd1e233ca95663ff31fcf7539c08763", + "vendor/amphp/http-server/src/Middleware/ForwardedMiddleware.php": "61788a3e0a26bbb6049bce6b2ec49c1118b075735edc38ca6ea07f0d7be0fc73", + "vendor/amphp/http-server/src/Middleware/Internal/MiddlewareRequestHandler.php": "2f7e94e258fdbafc982a949cda38ca9f9330a7a33943dfc2973de697c283bb48", + "vendor/amphp/http-server/src/Middleware/functions.php": "1009786de13317257038a6a9f981065c23f3508a0cc4d93e4b3c1a5833f0d6e1", + "vendor/amphp/http-server/src/MissingAttributeError.php": "5956ce8cfe604bd914377748dbb7c33797509d270787a7a341739ab3d2136882", + "vendor/amphp/http-server/src/Push.php": "97b8eb68082eb3c39c69f4564d87dff9dc63d016f4376ab4ba2cdb1b6e64b329", + "vendor/amphp/http-server/src/Request.php": "bb4e3f7368d5e57d95d3da2f5e9d77dbf1f684f9a7d68a09c364a18e2c987de4", + "vendor/amphp/http-server/src/RequestBody.php": "734ba8eb0ab7c261b10f89bc4d13adb7018325a3cae7aa5ddc1d96a97ab73e39", + "vendor/amphp/http-server/src/RequestHandler.php": "14a46e2e471aea5431adccd17aa2c41cee60ffe469bf14166e25e46f6a97a409", + "vendor/amphp/http-server/src/RequestHandler/ClosureRequestHandler.php": "a30b258ed991b26ba4021ac8f96d94a7ddbc55e86975144edd7084e5ac6150f9", + "vendor/amphp/http-server/src/Response.php": "409f3fb4786e274820468d1c14e0ab1d0338faa1d543a22a16016580d49dfa75", + "vendor/amphp/http-server/src/SocketHttpServer.php": "7d7ba166b112aef79099bfa2c12d0a1c8e7c4ecb5fa0c7449ad30c34f758405b", + "vendor/amphp/http-server/src/Trailers.php": "f46b56e1dd38537d89abf62be8fe99072dc2762c7f2d95231a0a4fce1351b658", + "vendor/amphp/http-server/src/functions.php": "f1ade9b3a1159c06088238ee39168238ef3e8b8d151a2580203c4dc8c96a963d", + "vendor/amphp/http-server/tools/h2spec.sh": "45af9225cebb6fa0096fabaecab81c46aa45e1e81a5505dbe11ac0b50fbe7e28", + "vendor/amphp/http-server/tools/tls/local.conf": "7b3a13d4b2065bb7caca908f778ad5494d122a235270153d6cdffcca2f5c0a50", + "vendor/amphp/http-server/tools/tls/localhost.cert.pem": "a348fe395065f151eac40d8b148731cebdc2fc47cb4713ca01e6d47b8fe02d1e", + "vendor/amphp/http-server/tools/tls/regenerate.sh": "b38dda15f5076a7cd582b8279cedc21c3154b710a37eb7d06396199e5358b8da", + "vendor/amphp/http/.github/workflows/ci.yml": "aaa2c49a998c8a7873869e09383831aac4e15eb6279664c5d33035d6af6d4b47", + "vendor/amphp/http/LICENSE": "95d9a352435f98f90b68c443bc8f6378701d1b708c8f5150a13509a9ceae4379", + "vendor/amphp/http/composer.json": "aceff22c6e55fc53b6c34065644415255626dce3bded532ccb19e8d003e3c9cc", + "vendor/amphp/http/psalm.xml": "a37b321ec8ac33b68c544c25bd5a43001752158f7f79f85320fa640a33c8b079", + "vendor/amphp/http/src/Cookie/CookieAttributes.php": "03912a26a1947bc20e306e75918be059435d2f64ee372e6c19cf7bb89a22d2e3", + "vendor/amphp/http/src/Cookie/InvalidCookieException.php": "7f68f2e13437eb550b87084bc64ccc5621d57f879e6873b02c8641e09cb86476", + "vendor/amphp/http/src/Cookie/RequestCookie.php": "7b7192747b2e19d6775433e900ca60b139597c0c2074364bec0e4e84e95c473e", + "vendor/amphp/http/src/Cookie/ResponseCookie.php": "7972bb12165f339bc8e011d448e42d0f2ce82a4c517f3a156f32d2e9b7cb54a0", + "vendor/amphp/http/src/Http1/Rfc7230.php": "e0ee7ade1e93787f0480fcb1cc5c1067cd53ca6ee19bde6523ba5dfda077abd3", + "vendor/amphp/http/src/Http2/Http2ConnectionException.php": "6a9632e0bb918aa0ae3916d519e9850880ae43669eac8fe763bb1ebc03edc2b7", + "vendor/amphp/http/src/Http2/Http2Parser.php": "0c74c6f85961021fc4dbff0c6bd035dfa928134ff5294022c773d5b1942dd441", + "vendor/amphp/http/src/Http2/Http2Processor.php": "ee38490c21462743dcf935a00d10306a1ec462b1becc3c1a3f737e7e370f421f", + "vendor/amphp/http/src/Http2/Http2StreamException.php": "575387649cc847357942cb653eafbbea0dff06b35ef65c12d50e8c43f543f599", + "vendor/amphp/http/src/HttpMessage.php": "cfa06785f5b02523ca36de84ff4834e2f3ffe32cea69a85639ef8c6a850af376", + "vendor/amphp/http/src/HttpRequest.php": "fe2f99f0b66c79686b1ebd4effc3c944959e87dd8ba09331bcf38ef629512e5e", + "vendor/amphp/http/src/HttpResponse.php": "c36da844f6060208a078a54b21ec592f3ba4f4012925c23c051307842347e5fb", + "vendor/amphp/http/src/HttpStatus.php": "d00a977b62b7e48666d758449b21343796d67eb716e34bbf4604f2e32a881e86", + "vendor/amphp/http/src/Internal/constants.php": "63e9578d3f63e8a06978be383779c8cfe7d674212a7f546e9475a8a506551f45", + "vendor/amphp/http/src/InvalidHeaderException.php": "b6fa9b6e91d72da5ec300b97c6512925709199510ebdacc9f788403c86acc8e4", + "vendor/amphp/http/src/functions.php": "ddc8d6e29c4225286d69c89915ab99e1c096429c34e9f6cc14d132095503dd92", + "vendor/amphp/log/.editorconfig": "671f270c30a8444d9e9925b8b1a3ae38e0550da305a70eb954328183a3572fe0", + "vendor/amphp/log/.github/workflows/ci.yml": "c522f5d107edc45cbb72979a636ed289857b4038de27b27a2c1a0186d29cb9c1", + "vendor/amphp/log/.php-cs-fixer.dist.php": "c469aab96d273faa0ed9fb763dde309b9b6c0a65146c8555a2a715e02d69fea0", + "vendor/amphp/log/LICENSE": "fc5149c45b0b34f924ad2ceee71216358599bce2e281892ef6d87fa9acd48006", + "vendor/amphp/log/README.md": "3738d25a5e5d622687057163459391639dc6eb21c755e167f5231b947b3857a7", + "vendor/amphp/log/composer-require-check.json": "99bd890a24235208affea0e3e6a81237a14136430108359bf2820e33bdc30850", + "vendor/amphp/log/composer.json": "be97fa773c66cdf15d789c17e7fa2858d3e8f106e6a4d811fe267e912fa0981f", + "vendor/amphp/log/examples/file-log.php": "ec832af21d337d9b4fdf24d88c21e1da76b12af02964c82d6d78153852938b9a", + "vendor/amphp/log/examples/hello-world.php": "3abd2c496beed65c06b213b0eb6d9ad940fcda260f1fa8249ebad32e73a32e8e", + "vendor/amphp/log/psalm.xml": "36bf514ef35f7cf8f3462a392cbcb2ef00cd34859d7f73d1ff2d649dfb160432", + "vendor/amphp/log/src/ConsoleFormatter.php": "5e49b9400f31fb625e4cfa540ea34941eeca8d0d543ce49a38863496f2ea8e2f", + "vendor/amphp/log/src/StreamHandler.php": "308240467cf97271eea57f311dcdc1eff53587dc852e4bb8927fa815d4423281", + "vendor/amphp/log/src/functions.php": "1a9b760fa59082244398709bf3bfd860d62ff4e4e5dbd44664b120843553d83a", + "vendor/amphp/mysql/.github/workflows/bootstrap.php": "d8ee330f9472a51893179dcf4b7d552fbbaef2de78c9407d86ff91a204d039bd", + "vendor/amphp/mysql/.github/workflows/ci.yml": "fd25a75af1fa06acae04ec99b16d601724b716f1865968283ce9e298862c0bc9", + "vendor/amphp/mysql/.php-cs-fixer.dist.php": "72f324e677e5328df668fc71aa7c7e71b42f431d025f7f3e0126ae9824cc0bc0", + "vendor/amphp/mysql/LICENSE": "4daf770ec2fb0eef9a9e1c2764c6cebfacafaeb13ab6cf48c1afdab27ef7a4ca", + "vendor/amphp/mysql/README.md": "1ea4718bbe3de1778f53c4e144dc5b072096cdc0444d279e975051075cbb3b82", + "vendor/amphp/mysql/benchmarks/AbstractBench.php": "e1aa0c19a6613a32ef3eae6a565bb117d1fc704fc1f804e7f24fc3b8f179fb23", + "vendor/amphp/mysql/benchmarks/QueryBench.php": "1e6ffb4d4edf9250a12f2a1090ad1ad1a16334d364f1151334e6b69e584910de", + "vendor/amphp/mysql/composer.json": "27aaa67e1ed6c96557653fafdb8ea3ed679487344ee106ca44f2f2a5d0da0588", + "vendor/amphp/mysql/examples/1-connect.php": "7325e95344baefb82c713b25f93ac8ff6d867c4847a16f369c71d550af3bd504", + "vendor/amphp/mysql/examples/2-simple-query.php": "ed9e07ca6392464ace70f70b6786e3e4dff0a8b6a8ab495d4b1e5d73c74336bc", + "vendor/amphp/mysql/examples/3-generic-with-yield.php": "23f1fecbac234411ba221f4a8bd8e959d81c90e847908a5d8cefabbe88c27770", + "vendor/amphp/mysql/examples/4-multi-rows.php": "ac5d3176560252443281c53cc9321b2f04146ccff0333ce01fb10085e3a7aadf", + "vendor/amphp/mysql/examples/5-multi-stmts.php": "fd417075ebf62a2942c2ef815c2743dc3e69b2b5322133ae6488566b9cc65374", + "vendor/amphp/mysql/examples/6-transaction.php": "7d1971805c93522b336b2d804b4e98c84e502ae3b275cb1d450b3bb5a3bf6647", + "vendor/amphp/mysql/examples/support/bootstrap.php": "cb75e989c72a9a4e6fa1d9e062802d7a5068330f5207b67bcd4e4e4143b1c026", + "vendor/amphp/mysql/examples/support/generic-table.php": "f61b67524319dd57a44d59122a93832cda2d89369d4aaad60bb5d236fbe2b669", + "vendor/amphp/mysql/phpbench.json": "df9bcb6df3547c911f1155a6a4c85b8956a8512f3d54592cdfe91f29cbce9002", + "vendor/amphp/mysql/psalm.xml": "7ab79f3012b0718a91dbfbe339016a593ada3c788c9453b33a67e0e0c0f4ac64", + "vendor/amphp/mysql/src/Internal/ConnectionProcessor.php": "e90525560a1b655042619713ed203b2ebedc6255f6e413ac00dc858cf85962da", + "vendor/amphp/mysql/src/Internal/ConnectionState.php": "fee06fbaedddb8ae294048fc59e826b1ad3c427d7bca964d945d2c49efef6ccf", + "vendor/amphp/mysql/src/Internal/MysqlCommandResult.php": "02dc71f03c80207a639148e4b411163b344c4abfbe47dee6f9015562bd57c117", + "vendor/amphp/mysql/src/Internal/MysqlConnectionMetadata.php": "5c9bf2721f8e843fbc8c72801a47d818f9a98a4ab8a479e7040484f6e1d8a277", + "vendor/amphp/mysql/src/Internal/MysqlConnectionResult.php": "cdd116c2391c2ca405288f6ead3756ecbe9852282bd0efd2ef3ad17937aad64b", + "vendor/amphp/mysql/src/Internal/MysqlConnectionStatement.php": "9aa988eb887a773ccac66739d9cdda40a6bdf7460b1b831e5a2d2c3a3ff51596", + "vendor/amphp/mysql/src/Internal/MysqlConnectionTransaction.php": "f6ffd51a292a6094182c37ff672cf666530fff6b98f9ace441399025e070cf0f", + "vendor/amphp/mysql/src/Internal/MysqlEncodedValue.php": "bfd5a7c14b4a666655102f44ae5f2e339c1d1aac2501ff433c26e8fb6b854b86", + "vendor/amphp/mysql/src/Internal/MysqlNestableExecutor.php": "349f9224b7b17e319b9bf944e2dbb26b41c222f3c3831eaab31f84c920eac9b4", + "vendor/amphp/mysql/src/Internal/MysqlNestedTransaction.php": "2a2ae0e3a4e5436ed443f68bb8ebf74c9dc8131955770d27867bf93cb4f6fb6a", + "vendor/amphp/mysql/src/Internal/MysqlPooledResult.php": "d56d801737a75ad81c83b4bb98657e79781b10491374952f39adaed899247f3c", + "vendor/amphp/mysql/src/Internal/MysqlPooledStatement.php": "0bb9590fedf71dc6bb6226709dfa2c6db1392d5afaa1e2f13560ae089fc51889", + "vendor/amphp/mysql/src/Internal/MysqlPooledTransaction.php": "19c0cf79c16537203856dbc470b3fbe6e260876e53d3305824f15375b62ace24", + "vendor/amphp/mysql/src/Internal/MysqlResultProxy.php": "1401858a73d786b97cb61a4af4e98471658c8c9a82fe83c485d3a656eb046011", + "vendor/amphp/mysql/src/Internal/MysqlResultProxyState.php": "a7953294240748ab76b4697c1dbec0f2d2fab040eba573d92187f8e05cc8de8a", + "vendor/amphp/mysql/src/Internal/MysqlStatementCreationDelegate.php": "0a969250bf8d4927da5416f56dc80f03cf1284c4cdf0d7419d82f2dce9b8e67e", + "vendor/amphp/mysql/src/Internal/MysqlStatementPool.php": "17c2b72113fee9ff44871f648973e4a78ed71a5b51916edf0bd0dc036e0d0e15", + "vendor/amphp/mysql/src/Internal/MysqlTransactionDelegate.php": "7061791453a201ce4c2caf212247d0d45c57f6d175c77ae46d38756ecfdcb8dc", + "vendor/amphp/mysql/src/Internal/PublicKeyCache.php": "adddcb2d3f4ead5c872125daf9ac2e10282d4c4e0a3886cd9127bfff462175d7", + "vendor/amphp/mysql/src/Internal/SessionStateType.php": "2a6943ffeefe9b417b9f206372e1f6e2f3f8d1b3067af61af46f171ccd6dd6e0", + "vendor/amphp/mysql/src/MysqlColumnDefinition.php": "33ee2b55c3f9cf9360b67b98548c37e30918a2930e62ef1429fc1d8e145e031f", + "vendor/amphp/mysql/src/MysqlConfig.php": "96296cb06b6c1e92789b0596cf728af38c4066abcbb44df23645d200de0e19ac", + "vendor/amphp/mysql/src/MysqlConnection.php": "b48075ccd9f1ff78ce00e77c1aadf502ea207271796a4549727088d04f17f329", + "vendor/amphp/mysql/src/MysqlConnectionPool.php": "65874da6518d99ed1840dd82e8df9b056e8758933758b22a38a9e6fcacfc9d2d", + "vendor/amphp/mysql/src/MysqlDataType.php": "17afd5e5c2ad1521652e93b86df2ac5bd47539ce458955199b492b6eaaeaf956", + "vendor/amphp/mysql/src/MysqlExecutor.php": "354c5256664d626737b3d789cf0a37f21c464bf76684a0075ee9037e08506628", + "vendor/amphp/mysql/src/MysqlLink.php": "41c025ecab9c8567fdc673f2fcd56c55ba1296e5ea01636b7c4ebddc863f8151", + "vendor/amphp/mysql/src/MysqlResult.php": "4fb2fc9a8dbb2e9e390989d987dbc34e98e889928d826361e78421c5d2d4abd4", + "vendor/amphp/mysql/src/MysqlStatement.php": "b5575c2f4490ef88b55bca8f43a4123e53e4a9a9dccc3ce44c53019b7881ffc5", + "vendor/amphp/mysql/src/MysqlTransaction.php": "5872d0834e8fde2652c7bf13b6d9e3d8cbd2097d3ada341ba770a9dc8d169d3d", + "vendor/amphp/mysql/src/SocketMysqlConnection.php": "0c5cbd239af869bf146871e68fdeb082d77562e499a718431b7067c13613ee5b", + "vendor/amphp/mysql/src/SocketMysqlConnector.php": "416f2811ce6432c2daad43b1ac76e2faa6d560572b2e0fd1cdee1c8364ffe576", + "vendor/amphp/mysql/src/functions.php": "a2edc5f74812dfda4560a171804876a548a91d5fe515fabaeac7808f0a484417", + "vendor/amphp/parallel/.php-cs-fixer.dist.php": "471c989c811a3356ce22dc6212deb1161e85f043315e558cd23d30193caa53cc", + "vendor/amphp/parallel/.valgrindrc": "ed83645aba09224d41df0665d056e98593daeef604448c84e731a413b6af6580", + "vendor/amphp/parallel/LICENSE": "93dc2b2aae85651379265cbb4906d2b054020ac9cc4ee70e5040f79751e34651", + "vendor/amphp/parallel/README.md": "cbe59ec1a4c0fb70e85cbe2cbc74018d0bd65534c4572a291e9f7537bef66b43", + "vendor/amphp/parallel/composer-require-check.json": "097dfed52774ff01100cf75af2ae408bba7d8ab42e1e5acb8cd99e2440c6fb7d", + "vendor/amphp/parallel/composer.json": "77b4a61fd842c3151bda4ca08f980d35d5866df78c7883fae611c73c7d4af81b", + "vendor/amphp/parallel/phpdoc.dist.xml": "7bf4e9fef14f72ec884712b25f0c195c7464de88f909e4206ad88d86d00c598d", + "vendor/amphp/parallel/src/Context/Context.php": "4aedf5cb3cf0ea1bc5066f44597d0198edcdf7b6a8edbd4f0d46337233e2cf85", + "vendor/amphp/parallel/src/Context/ContextException.php": "cc61fb096764771ea89083d52bafda4f7ab35535a961ecef75aa9c2a0459652f", + "vendor/amphp/parallel/src/Context/ContextFactory.php": "99da5a14e4a77d4e8c495373b585f5da73b6452e62f805d8fdc261c1871716f3", + "vendor/amphp/parallel/src/Context/ContextPanicError.php": "65afe795b3cb82de2ce9f7a53115c66c535958fe1ef776bfa8116d8e3e295d46", + "vendor/amphp/parallel/src/Context/DefaultContextFactory.php": "b23d2b0d6259d42c89857695fd3463b1d356bd80ae04df26d4f5acde5ba45e3b", + "vendor/amphp/parallel/src/Context/ForkContext.php": "872c7abd0e87e4e40c98585da5e31e2d8ccc267bf745c2b915c7ac5c53f457df", + "vendor/amphp/parallel/src/Context/ForkContextFactory.php": "57acc5db3d4ff71a774303053a4505aa987d14743595e5364fe7f4a67173000e", + "vendor/amphp/parallel/src/Context/Internal/AbstractContext.php": "20eaa1be4d020c06c3a48f1b289d14ec6bd4d49cd7519b9f66b8ca37b21d4ab1", + "vendor/amphp/parallel/src/Context/Internal/ContextChannel.php": "49f944b1e5036511011abda6cc77da0008be344e1d3106052e64772103b0ad56", + "vendor/amphp/parallel/src/Context/Internal/ContextException.php": "fd0522f80ae7ab77716914153b00f0ac1bfd79ddfd172bb591cdb47d8d4375c5", + "vendor/amphp/parallel/src/Context/Internal/ContextMessage.php": "b4a63c120b386cb14abe64fd24b79845098d888a99d57fc77492942957d9fb91", + "vendor/amphp/parallel/src/Context/Internal/ExitFailure.php": "633c314554877f39ee3d082513195bfee7a93274dd646520c765fd74691fba90", + "vendor/amphp/parallel/src/Context/Internal/ExitResult.php": "9ccf7c74972f1bae101b63463f6284cd96310b313700eb2b5522c7468bb6cf76", + "vendor/amphp/parallel/src/Context/Internal/ExitSuccess.php": "cfda5b9577c739c99bf4afbd636705b6d01a58b4441323eb7454e69615198156", + "vendor/amphp/parallel/src/Context/Internal/ParallelHub.php": "212423a2ef2f4e4186b34dfa14b4a1e558cdfd127d0cdee3d66794e825ac7e30", + "vendor/amphp/parallel/src/Context/Internal/functions.php": "abb5242f8720e8a235db5dfb01f2873bf466b82d364f33f46cba1f555d411bbb", + "vendor/amphp/parallel/src/Context/Internal/process-runner.php": "6a33eeef36b71de40deb860de9cdb3fb14fbd0d94cf7e3b7da9cfc939191854b", + "vendor/amphp/parallel/src/Context/ProcessContext.php": "aedf97731b5bd0bd725e33e7706563ce8d3c32a533a8126520edb29d954e03e9", + "vendor/amphp/parallel/src/Context/ProcessContextFactory.php": "9cbd0b17990ac24cb5383e4c95c2160cfe322bcd0fa7e34e16a9c4de966a964e", + "vendor/amphp/parallel/src/Context/StatusError.php": "e2d459dd03d98db908e9b798d3ed8e296bdbf82e7e1a72e98fb91f3176114771", + "vendor/amphp/parallel/src/Context/ThreadContext.php": "f63c8744a736e0c809da2d8db46329aa3e6e5aef8c36af8302b452d18ef80454", + "vendor/amphp/parallel/src/Context/ThreadContextFactory.php": "1479d2a990ea43bd005811147737f69b681b187b1b586c01146acf92f52faeaf", + "vendor/amphp/parallel/src/Context/functions.php": "537fcd1ad7f1bc719d31993b96bc94336e3230005a2774ea1f59fddf4f5994e0", + "vendor/amphp/parallel/src/Ipc/IpcHub.php": "ed62b8acd8e2bf4b5e171794b98da8a07928ed1e3e780c3962e725805ac5c86e", + "vendor/amphp/parallel/src/Ipc/LocalIpcHub.php": "a8262d0185fea2c533ec4caec464192902dfa63526d3ccbbd8c7c98a70d37e44", + "vendor/amphp/parallel/src/Ipc/SocketIpcHub.php": "3fdd589db431695e1ce2f2da5005fdc21763f9c36c16e6f6adf15ffb8676a39c", + "vendor/amphp/parallel/src/Ipc/functions.php": "475107b58e3109cf91935a8b993cada5279132cefaef2c1409da79e30a09c145", + "vendor/amphp/parallel/src/Worker/ContextWorkerFactory.php": "1e90cd668f2cab4bfb4806ae5b891496e650607a341ea7936a87b95b7c683875", + "vendor/amphp/parallel/src/Worker/ContextWorkerPool.php": "894c10678cada7dfbef3ee66be1f5f155729c1467422bb47eefe43e691d6b366", + "vendor/amphp/parallel/src/Worker/DelegatingWorkerPool.php": "7072a9d857c0862919531c2a98c1d2181dd46a25200cf8639b1d82867db55d87", + "vendor/amphp/parallel/src/Worker/Execution.php": "e87c057377f7cfccd9bdb2f6efb72e73bfbc3eb5f0ff6549a8d43e4a66d5464e", + "vendor/amphp/parallel/src/Worker/Internal/ContextWorker.php": "030076d8752fd0ea51e45cbf127eb557b2a429fd940f3dfe153aead49ba3c7ed", + "vendor/amphp/parallel/src/Worker/Internal/JobCancellation.php": "56ce90bed3c2ef5c387503285e7c95783444003233a0bd3c2e7a2af830aeb1f7", + "vendor/amphp/parallel/src/Worker/Internal/JobChannel.php": "34c00cadb054d819c0183aeeb2cf4006c05bdedea9944b34f2b00caa38b606d4", + "vendor/amphp/parallel/src/Worker/Internal/JobMessage.php": "c8462c6eb799929b4c428f34e30559a1f3c5b638242bc3c0c690c13f8d578390", + "vendor/amphp/parallel/src/Worker/Internal/JobPacket.php": "6c662abfd5451e5361a60ced4b81490b7b4a02bf4921345e8cbdb6b42c8cd62a", + "vendor/amphp/parallel/src/Worker/Internal/PooledWorker.php": "374d05f75eb2a35604a3b7084d4a7d204e902b2aafb36b6cbe132afc8658845c", + "vendor/amphp/parallel/src/Worker/Internal/TaskCancelled.php": "6c290bf2624df606b0894318d3de7fc5770a9c085cae7d39f6b668530e28a1cb", + "vendor/amphp/parallel/src/Worker/Internal/TaskExceptionType.php": "c4f7046a3ad981309a6f7af7be6b6476b8ac3494835c8d21443c8d88374139fc", + "vendor/amphp/parallel/src/Worker/Internal/TaskFailure.php": "4ced7439f5737f25f4a1fe078158aab980046f6d92d8f5bab1844523654831b9", + "vendor/amphp/parallel/src/Worker/Internal/TaskResult.php": "1dfef301be0d015b1e8a89991bb955ca5415419e5d8ed07f1ce0f0ffa5fe2024", + "vendor/amphp/parallel/src/Worker/Internal/TaskSubmission.php": "fdeb3bf1b0176ad1744deb0c5e326c4b6821e622d06576d1e74f7b4ced78ae25", + "vendor/amphp/parallel/src/Worker/Internal/TaskSuccess.php": "93226022202a89f2abddd005d284d37eb22d63d4e1bc40ec3c70ed707438fc99", + "vendor/amphp/parallel/src/Worker/Internal/task-runner.php": "5edcf07830bb6f19da4861b2ab6985886fd27c55936b0ca13cc5c853e8eda589", + "vendor/amphp/parallel/src/Worker/LimitedWorkerPool.php": "9c48c3bd59f869cd48df7e1572c7e010e67fcb274695d3193e6eaede3dbcb32c", + "vendor/amphp/parallel/src/Worker/Task.php": "14712c7f1386d15c8dc4b11fdc5488f6ceaaa6447c539ce4b846c4560b210634", + "vendor/amphp/parallel/src/Worker/TaskCancelledException.php": "f487cd84192e4bcbe5c357f017b09841518a318da14e7a28c120093b8789bdd1", + "vendor/amphp/parallel/src/Worker/TaskFailureError.php": "76a9cbfc05b65b7b8c20af0c3b2c9733100386488ba85f2fd05743af5a2b14d2", + "vendor/amphp/parallel/src/Worker/TaskFailureException.php": "277530a5e19a5a6f17a6b288d3329cdcfef3b2ab272c1d7bfd0cf9d0b5bffeec", + "vendor/amphp/parallel/src/Worker/TaskFailureThrowable.php": "9e2141322a65b3174154a771efeb1fc412e6715613e0f2cd21485e4a9fb6356a", + "vendor/amphp/parallel/src/Worker/Worker.php": "c9593ab565721611b0126b3ee77cf07838ae38753eaec0a589e9309db17c7dd5", + "vendor/amphp/parallel/src/Worker/WorkerException.php": "6ceadf2e6a56a39e799dad130f82b320fff19796e07902b01519001112734c56", + "vendor/amphp/parallel/src/Worker/WorkerFactory.php": "2574bcdfc7b8e34c7935e37293444ef20e074e4f8d1bd8dfcb11e4dd6ed6cb27", + "vendor/amphp/parallel/src/Worker/WorkerPool.php": "942dc616438725b756a686f89f522a94068ad8b27ffd0043f0d03b0f7afa46ab", + "vendor/amphp/parallel/src/Worker/functions.php": "29e79c38c3e56ce5d24416b5565da31f91eecd14ffb0844f48e71b7b0b1f1290", + "vendor/amphp/parser/.editorconfig": "c505dd87a78400bd38b4f457d9c5d2eb3a8d9f07ffe3c675cdcefb4ccfc98901", + "vendor/amphp/parser/.github/workflows/ci.yml": "5bb7ffdecdce395020d8d5846d17c281441b585b62ce45194029b5ae948cbee8", + "vendor/amphp/parser/.php-cs-fixer.dist.php": "5ce44edecab0341a80260246cecaef8e48690f3a1b6be2ddbe812ad05c83851e", + "vendor/amphp/parser/LICENSE": "16ac45b95d11c9e4b805ae5392d069cab777f8085779ad3869b47030ccf47734", + "vendor/amphp/parser/README.md": "5c0a07bce4fd85d7eac5f68d83bd38fcb3f3a254e302b8a8e0d45e92460affd1", + "vendor/amphp/parser/composer.json": "bad8b9dd2faefff26f36497a8470411822e5ea791925b5221e58a9d4fb746ca1", + "vendor/amphp/parser/psalm.xml": "2529e3294c0663afa1179873530156f599c02cf3c9c15fcef795d03647205d3a", + "vendor/amphp/parser/src/InvalidDelimiterError.php": "293de7140416f34652f9b19c7e437aa5a7a25b82f8517c68580fa32a318dbbe5", + "vendor/amphp/parser/src/Parser.php": "63084f6ac45d013e1271d1edbbf5bbc1942d27533386b3d83726c10c470ab386", + "vendor/amphp/pipeline/.github/dependabot.yml": "6e88c6b58f0687c7136021a6d2227a31e58a35bd78ae48ad5c619bf4cff2e309", + "vendor/amphp/pipeline/.github/workflows/ci.yml": "4804877ff9146cf97048d2a5f4293a3588f7b744f31023c676483a0852597395", + "vendor/amphp/pipeline/.php-cs-fixer.dist.php": "5ce44edecab0341a80260246cecaef8e48690f3a1b6be2ddbe812ad05c83851e", + "vendor/amphp/pipeline/LICENSE": "dd9b5da37883d21ecc6fe466ac0a4644d8caf7ea7cd5ff17f47c5f167e131091", + "vendor/amphp/pipeline/composer-require-check.json": "7e27d88847404786870ba719a60b502554589f77c922f22b9e872b2d70fcbe5e", + "vendor/amphp/pipeline/composer.json": "71ea6470e744cdab02e235e77c9ae7c41af2697b94c0d893c09aae087eb80ae9", + "vendor/amphp/pipeline/psalm.xml": "48966b84c14ab35d1b643f32918849df60b7628df7759d916fc2aed68ea88718", + "vendor/amphp/pipeline/src/ConcurrentIterator.php": "da818dbb67621e56db434a580324f540a7e95d2b34d287c50143fbf69c5fabf6", + "vendor/amphp/pipeline/src/DisposedException.php": "4c27d10d42d1db37b163a170a51ff90e4bfd026980c4556c922b6c3d58409b56", + "vendor/amphp/pipeline/src/Internal/ConcurrentArrayIterator.php": "6607bb256f0bf31d627c7fc5f5a0f7d74e937acc65c0a0507a824376bd594134", + "vendor/amphp/pipeline/src/Internal/ConcurrentChainedIterator.php": "aed315febcff2d9711a82b251da9af67a6fd7059a7b7b162e5aa66d2da723d18", + "vendor/amphp/pipeline/src/Internal/ConcurrentClosureIterator.php": "dd954fe7d6913025a995613271b29130a9ec87f7469e11043b5d1437299a5439", + "vendor/amphp/pipeline/src/Internal/ConcurrentFlatMapIterator.php": "e9c931a90cac3edcb617eaa365044041f29dfaccf4d04f4555bfdb7bf92b8163", + "vendor/amphp/pipeline/src/Internal/ConcurrentIterableIterator.php": "3dc685fae76af252067bcd67d73f60c4ec87b3d616423e39dd8e575464964d91", + "vendor/amphp/pipeline/src/Internal/ConcurrentMergedIterator.php": "0cced999ca38423aafd8083254ef2ea8c3fc53fff498dbce640cb86388af878c", + "vendor/amphp/pipeline/src/Internal/ConcurrentQueueIterator.php": "36c3b1f410de79ceb57efacfeb744c05661e3ba79fecb57366cbe56b2622ba4d", + "vendor/amphp/pipeline/src/Internal/FlatMapOperation.php": "24361078cee8ef347be0ebea645fe24901d4fbb203ffcb33c2d3019f00eadb28", + "vendor/amphp/pipeline/src/Internal/IntermediateOperation.php": "dad967605a9863d2da7817cf2c912ac93abf866514b1a55a03ec7f235d7c8750", + "vendor/amphp/pipeline/src/Internal/QueueState.php": "3a501f439ae5524768e5c8b0bc2b85a91714a47e87e5ed5f3fdf1a7092c5ce17", + "vendor/amphp/pipeline/src/Internal/Sequence.php": "26483a81d17264fe3e1dd102c3ff441cc1becee99c46ded4ec05dc68a23faf77", + "vendor/amphp/pipeline/src/Internal/SortOperation.php": "b86333ed0eda65ad5654e4d81976e4305d7d790dcb053c8054e8a761a95b020a", + "vendor/amphp/pipeline/src/Pipeline.php": "180f0ea53e6526aecf19addbce05d11f458fa2f09dc396aa0253f60ab570f99e", + "vendor/amphp/pipeline/src/Queue.php": "d6a821c709ebc403ff60d14507259068141bd09b8c16478271c7eaee068077bb", + "vendor/amphp/postgres/.github/workflows/ci.yml": "f3fc2152ed8997b0e2891726d4489c0ba963fc0a3d5c181016f80c02a449ac94", + "vendor/amphp/postgres/.php-cs-fixer.dist.php": "4e2c3fd1f0d253b43b685fdad9e5cf68eebed9d2e115ad1e096faf7b18f159c1", + "vendor/amphp/postgres/LICENSE": "4832233a325492ffa9dc1cb5c654a53e69c00adaec7f45d50a896d9d9c77a9df", + "vendor/amphp/postgres/README.md": "372217496287c9fc2818ec8f0dfe7453c55053ad1d3529418e463ed48ab9c2af", + "vendor/amphp/postgres/composer.json": "e734389b84ece88ff26bc47686cd0b782facd7adfdc3aaef0e045ca94c98752d", + "vendor/amphp/postgres/examples/1-basic.php": "32a3192a073acef256fc2da262fcaef5464483560a343e206ba2c288b8320096", + "vendor/amphp/postgres/examples/2-transaction.php": "a806a567715394703b25d79ae794ab51ad15b2149a46959807e2b16f4c872595", + "vendor/amphp/postgres/examples/3-listen.php": "ee523f665593b9fb636fc8833cc07c59e610c934e7006a0a87b6f5bccb7b5b57", + "vendor/amphp/postgres/examples/4-multi-listen.php": "ba8f0d154f0336a06170fcbea3a088105877f50353bc54fb8653f1515be024b4", + "vendor/amphp/postgres/examples/5-bytea.php": "0df9065e47cf81a68e43cff289e7752dfb15dab531a19719fdf4a4cf8ab7b918", + "vendor/amphp/postgres/psalm.xml": "f3e895e55a2dbd85c90524ea55d30c24e2faa565b5e5783db1ebfa26f826d711", + "vendor/amphp/postgres/src/DefaultPostgresConnector.php": "e4fe613146fb4936d27a49898eae41087f6152b6dfced5cce12048a313a48cf2", + "vendor/amphp/postgres/src/Internal/AbstractHandle.php": "59be029fb60d3f21494c74ec1075fbdf5c0221e7fdfe07d1899619d600afa468", + "vendor/amphp/postgres/src/Internal/ArrayParser.php": "65ee03a24245ccd1b6c163ca6bb997bd64f7aed1d357fb0528db2db987d637ff", + "vendor/amphp/postgres/src/Internal/PgSqlHandle.php": "f1f0d086bc9671d267ce079ae3d5ef3b8c188a1003603528d1437a4fdc938c99", + "vendor/amphp/postgres/src/Internal/PgSqlResultIterator.php": "350d8ff5deb0d6344eb8bc3443fecc6c22eeada6a03fa4c0c849c8816a139e9b", + "vendor/amphp/postgres/src/Internal/PgSqlResultSet.php": "8f0850091fae7246f27630bb563544c8347c83c6904ef4c89b4b73bf7da992c1", + "vendor/amphp/postgres/src/Internal/PgSqlType.php": "66efd4cd265f78ce141f379e64ad5f48e5a168bd881e43de01150136a570b259", + "vendor/amphp/postgres/src/Internal/PostgresCommandResult.php": "4ec7c389f00d848711f1de26793355a946a007e24a7a62f6593e16108d77a0a7", + "vendor/amphp/postgres/src/Internal/PostgresConnectionListener.php": "f8b7fafe6300cb83e6efbc8331dd473fbef0854b4732f9718cff5cec4ec0225f", + "vendor/amphp/postgres/src/Internal/PostgresConnectionStatement.php": "33bc8b7dba2210439f07ceef62b3b80f5c79764a7840e12edba567eaddf9e4dd", + "vendor/amphp/postgres/src/Internal/PostgresConnectionTransaction.php": "417d5f97826eda1e6e82984e18e9a9c1343bf392eae901eb6d35839ea9815f32", + "vendor/amphp/postgres/src/Internal/PostgresHandle.php": "f06b28893f8eb5b363b42a98fb6f03c78413a6c86b456c42015cf8fb31711f81", + "vendor/amphp/postgres/src/Internal/PostgresHandleConnection.php": "3490a0a5abc96493261a81ab8e73ad3063b08f36eda0b222ee453f2300a30fa6", + "vendor/amphp/postgres/src/Internal/PostgresNestedTransaction.php": "eb534091946957b0c4e444ccd9b17ee9890c815d77a28d2611d8e92e16da3b49", + "vendor/amphp/postgres/src/Internal/PostgresPooledListener.php": "cde8d76620f71bdf223e9898c54a8acf23c7311df84a7f5c6f3fdd4e2e5dd2f0", + "vendor/amphp/postgres/src/Internal/PostgresPooledResult.php": "b7efc1997dbb1f4dcaa33d7191eed257db7f698bdac636451a0d805c0db3845a", + "vendor/amphp/postgres/src/Internal/PostgresPooledStatement.php": "9ecd9855ec8d93cf12edb5394361ef6e5a704b62f13711a28c1ca9803238f349", + "vendor/amphp/postgres/src/Internal/PostgresPooledTransaction.php": "43f9413ac9850b436e530a7db925ebb6548e786820abfcd1fc97d07c16cdbf6b", + "vendor/amphp/postgres/src/Internal/PostgresStatementPool.php": "ec698527242f9cd5a5f58a08f9543037b408a95b20cb79a19b9c98e9fad7f265", + "vendor/amphp/postgres/src/Internal/PostgresTransactionDelegate.php": "50e8724a2b72ca9fba764a74a5f12ac00d093a54cd4c2b175a4277f5db85a510", + "vendor/amphp/postgres/src/Internal/PqBufferedResultSet.php": "72d5f51dc63e3a6afa3abc6e42163ed65d3bd965ae6ef9b7588879b584d35a6b", + "vendor/amphp/postgres/src/Internal/PqHandle.php": "54487c6b76249a6a3f2cd9a3b8520cfd9f5ecf36e017b7a244e965a5a1221f5a", + "vendor/amphp/postgres/src/Internal/PqUnbufferedResultSet.php": "eae425708304e0127983d6eadec1fe7046594fcd15289e7104009cddf789f1bf", + "vendor/amphp/postgres/src/Internal/StatementStorage.php": "48a2639085c11ddc268448af55caad5bb0e0e97429ed25af13d5c81d543e0aad", + "vendor/amphp/postgres/src/Internal/functions.php": "b66f478cc6bdb8138be6ef4eead7b623ebe7dc33df93902d9bb1835255b69aa8", + "vendor/amphp/postgres/src/PgSqlConnection.php": "b58f9b0a8b4e8454a882e1ab3ed06785061f4af4abefc7ec643fb5c16f7373f7", + "vendor/amphp/postgres/src/PostgresArray.php": "15f19d5fc33a5fcfbcb674c26063224c1cd8af447bce9bf776ab40bf8385f06f", + "vendor/amphp/postgres/src/PostgresByteA.php": "867f6913c0cfe2e48e4d14c19c2382dd8eb6893a7790688df7f5840a34996b64", + "vendor/amphp/postgres/src/PostgresConfig.php": "f591fb44fdec19613e51a79ceb73f7128bd081477f46d9290d73654044d95d02", + "vendor/amphp/postgres/src/PostgresConnection.php": "3164c9cbb47d91f7a2a80b7d939f6d7f7111c74d3d2a643f1d6fcb01bb3d6497", + "vendor/amphp/postgres/src/PostgresConnectionPool.php": "991ce5cbb0c57187c3c2f7ab15d10658580b71e30a2afffcd37e71e5526ac57e", + "vendor/amphp/postgres/src/PostgresExecutor.php": "10f57e1133b3f514e9fbc7eddfcae68b2cf956850d75431ed460cc0298542313", + "vendor/amphp/postgres/src/PostgresLink.php": "7a2bd8f88b7b20c5cdbfa454b243a18099c6b1587cbd12dae14779a5fa2d39cf", + "vendor/amphp/postgres/src/PostgresListener.php": "7f681691af452f445afaf617db82dcf0b2337683636f6365c9c74f84be5c8e54", + "vendor/amphp/postgres/src/PostgresNotification.php": "cae580e8585c80f14d8e25393237c4c6f7271ff3e9ba6f96e0814268d8e99609", + "vendor/amphp/postgres/src/PostgresParseException.php": "5b1acbbed6e227c902550debc1477ef8ca7a849b9676fcb14373f460f4e8a916", + "vendor/amphp/postgres/src/PostgresQueryError.php": "2ae6d3c836ef37cc960836e3022dcd27a762cd07f15512a5f2091f3d7041d566", + "vendor/amphp/postgres/src/PostgresResult.php": "b9ee20286b821c787428bb45850edb6ab63b09c929d34a8d3e3c96b36a5ae24e", + "vendor/amphp/postgres/src/PostgresStatement.php": "c00323acefd6ecc27348a9a8c077f5a0f9b54bc41bba09f2fdd131695a5e4614", + "vendor/amphp/postgres/src/PostgresTransaction.php": "851626184fd197a1f6fd1210edd311b4814ceb0891a298412bf34bb0af8d7019", + "vendor/amphp/postgres/src/PqConnection.php": "e4a03b84f0473dd5e69c5c2ff121f788e220ba12dc0838858260dd5062d65442", + "vendor/amphp/postgres/src/functions.php": "18ca8cb08024510ccd3c9e90bce3e03e19af373b4625c99850d94ac7e35b80d0", + "vendor/amphp/process/.github/dependabot.yml": "6e88c6b58f0687c7136021a6d2227a31e58a35bd78ae48ad5c619bf4cff2e309", + "vendor/amphp/process/.github/workflows/ci.yml": "3e3e9afd3256170474a8c0561217976f5cb7d64f815c8f6f9eb47f1d94c0554b", + "vendor/amphp/process/LICENSE": "5b8738686f873967502b48ff6b52d03a2065ea124146d4db7688ff469873b373", + "vendor/amphp/process/README.md": "3d141f3ac85988a5722b218fee0b9cddac24aad20cf453bd469868725c389fce", + "vendor/amphp/process/bin/windows/ProcessWrapper.exe": "5b6e66912c92e40ecfb6ac391a2595fa2a8d8e4f93a911c7ae0248aa14ec047d", + "vendor/amphp/process/bin/windows/ProcessWrapper64.exe": "1b7c6db9c3dae3073335433e1c3f913b80ac76109b869420e1332652b0c461a2", + "vendor/amphp/process/composer-require-check.json": "b061500858555c47ff47eeae35761abf6b176ac1e7598beddb99e45b21051428", + "vendor/amphp/process/composer.json": "1c888052d7e69de87034648fb56d00e4fa5a80ddbf0889bceab40e6964e4a38b", + "vendor/amphp/process/psalm.xml": "615edbcd0336788a70d1d7728c85cefaa6f1d2d9a429213baf50f749b954e915", + "vendor/amphp/process/src/Internal/Posix/PosixHandle.php": "409427c77b607c72af988970bc07bf66c6ba4f07dbe7130f65a31928c49a2da2", + "vendor/amphp/process/src/Internal/Posix/PosixRunner.php": "9fe8eda185e3cecd8e730c8c964ae89dd31c06859b835104916915d13a270ed3", + "vendor/amphp/process/src/Internal/ProcHolder.php": "7770b69a74f59747fd1566aa557e08d2cdebffc9449a4a36eada8dae5d9a784f", + "vendor/amphp/process/src/Internal/ProcessContext.php": "ab8defce5c0a9a2ceb338277bab6173b01482e2652ea9e8d0281f103c0baf993", + "vendor/amphp/process/src/Internal/ProcessHandle.php": "cd022f9106a08c15b9d07a31ce74f98962dc3c89f4a7ed16367523089b9f2079", + "vendor/amphp/process/src/Internal/ProcessRunner.php": "0a9d9ee576b05f386cf426b9045077aa763119800918533419aec9c04901cacd", + "vendor/amphp/process/src/Internal/ProcessStatus.php": "259ecbaa64a2f0dd9b68def2a4589da12792f25615fe803c67be7148ef5630a8", + "vendor/amphp/process/src/Internal/ProcessStreams.php": "b65519c35a1edd22e3bb11dadc61230aac6adf95d3d7522ab700afb2bbeadbd7", + "vendor/amphp/process/src/Internal/Windows/HandshakeException.php": "af91615b44abe0d6fd95673d3a0411f4d78c05eb5179749ba7998c98c87308f3", + "vendor/amphp/process/src/Internal/Windows/HandshakeStatus.php": "fc2f734715f298021772c50f1ced5ce74ce8291e6bc9e48a4e42d096ab2d05d9", + "vendor/amphp/process/src/Internal/Windows/SignalCode.php": "a9ae24ec0ccf8f68d78fc956c152d1c073c6fda5ebe3c203831ca6ed36221aa0", + "vendor/amphp/process/src/Internal/Windows/SocketConnector.php": "57e758aed11be151062f2df4ded6c69dd52ecb61419bcc3c9a80b125aa8d88b5", + "vendor/amphp/process/src/Internal/Windows/WindowsHandle.php": "e0af6d1b74990c48e40d514dcae66eac9398904d1964841e5d90463384903301", + "vendor/amphp/process/src/Internal/Windows/WindowsRunner.php": "16fc26529020d0d702e168a964571f6b56f0ef2a4527876cae9783c46e4cfbb6", + "vendor/amphp/process/src/Process.php": "a4271109e400e0ebc4cd512eeb4a4921c2f311c810df16df64b7f471671d602d", + "vendor/amphp/process/src/ProcessException.php": "c2e91647ce25e8c6221102fe1d045d743a6651e7816501ae34f4c870ebc77b4e", + "vendor/amphp/process/src/functions.php": "a4aaa06af5c5151e0455735d710c271a62ec98adf1ad88b30df2d2224329c0d6", + "vendor/amphp/redis/.github/workflows/ci.yml": "ce19488bd86c5662beb6e9f1488f1ee75af2affce78cee33438ca9b7d74bdfeb", + "vendor/amphp/redis/LICENSE": "93dc2b2aae85651379265cbb4906d2b054020ac9cc4ee70e5040f79751e34651", + "vendor/amphp/redis/composer-require-check.json": "3647431132a70a60064830cecda6ff51ec36dc57219f8296dde4d84f6f684758", + "vendor/amphp/redis/composer.json": "8540d1149f1911ff7f916f7331c211daf7d9bfa3d94789fb70170376d08505e1", + "vendor/amphp/redis/psalm.xml": "cb403c2ef67bb4ef66473f909c9c307f80023638588515204ef6c2144e0f8457", + "vendor/amphp/redis/src/Command/Boundary/LexBoundary.php": "bee1550612e528e0000e674b80b1304a99df94f7337a355041454566c71ecef2", + "vendor/amphp/redis/src/Command/Boundary/ScoreBoundary.php": "a9840212ba7bb0aaf2e05e05b5776e61a839c701dcf0be2bb2f560cb686d0ae4", + "vendor/amphp/redis/src/Command/Option/RangeOptions.php": "47e38b6534f1fa6c5ccfea91f95a4173e0d6df3e6207a88e498c2ea15206d397", + "vendor/amphp/redis/src/Command/Option/SetOptions.php": "6375dec982b2c8338588070474eb77275d73bbec39bdbf608d004913dd88373d", + "vendor/amphp/redis/src/Command/Option/SortOptions.php": "3a28bf3522d9f937c1ef9e7076ca71239d0156bf96bf990f4722e41765303b48", + "vendor/amphp/redis/src/Command/RedisHyperLogLog.php": "930ea381c9dcf7218a00cea05309b675c3a12a3f190d17f910f2260a4742c552", + "vendor/amphp/redis/src/Command/RedisList.php": "f0a2405c95a7909cab44fd0c1848dd5291f60561fadedee5e34b5cdf78976ce9", + "vendor/amphp/redis/src/Command/RedisMap.php": "6b3ebc7d6a2d1c4fae8d386cce34a9d4848e2f74cdaa78ee06fb655b158fb0d5", + "vendor/amphp/redis/src/Command/RedisSet.php": "db3fecbce65adc2b6624bdacacd9b213d81c0876bc901708cd966dee3c271889", + "vendor/amphp/redis/src/Command/RedisSortedSet.php": "c1f60ab96ff455861ee2f6b64364e6b2c3ccb688fed934dc3ef4b6964d81db4f", + "vendor/amphp/redis/src/Connection/Authenticator.php": "c4aff2f7a1ef7acda32e298f812fd361aa5e5baf13f1c194a45b5d15d44bbe99", + "vendor/amphp/redis/src/Connection/DatabaseSelector.php": "802413752f1275f0400c5fc7bd40a9353f021ed60b879e59f652dab77dfea61d", + "vendor/amphp/redis/src/Connection/ReconnectingRedisLink.php": "e56134f83f7a99d8f5e408c6262b7bfd1262a1643d6a253ee3ea6b76650cfc19", + "vendor/amphp/redis/src/Connection/RedisConnection.php": "341b2e217b0b1e1793f85a382414ed4e537e6118e17170fb126eb65958a02817", + "vendor/amphp/redis/src/Connection/RedisConnectionException.php": "0d4bcc78186816e4f91e8312b064320840be2033313ee50779caab078beb9e8a", + "vendor/amphp/redis/src/Connection/RedisConnector.php": "0f5d9383b7c3be1efef019ee5b038bbf1ff0c92cb068770de6283887d951cc51", + "vendor/amphp/redis/src/Connection/RedisLink.php": "cf52a4593845d4745455ca3962d27c98930c5704a4b00563ba5bc6b985b3518e", + "vendor/amphp/redis/src/Connection/SocketRedisConnection.php": "fe111c2e00da19e6d173dc05132456e26f4f42df85fb556e4b254350bb304564", + "vendor/amphp/redis/src/Connection/SocketRedisConnector.php": "921ff311ba33edd30cd8ad3589eb4fd5784c943cc1de6fcf051166ffe6ad7c8b", + "vendor/amphp/redis/src/Internal/functions.php": "55019964314610641b985aba628f5c5f433fafd815c455b323a1b8c520c7800f", + "vendor/amphp/redis/src/Protocol/ProtocolException.php": "e90c409291f92142d234da6b7d98aa4d38b5082bd99319206912fc7e3daf98b7", + "vendor/amphp/redis/src/Protocol/QueryException.php": "e7d339a02b52fa536c43b61cac4efaf9efdc29c5d93314de640a5c9a73d1dc03", + "vendor/amphp/redis/src/Protocol/RedisError.php": "12a33368941e1d4244664d1ba0af304df087db141b03a25d397580af1345a967", + "vendor/amphp/redis/src/Protocol/RedisResponse.php": "709a4a05ef6c42a619e4a7d9e2df704ba7de3d47db9960dbd7ca389dd1300233", + "vendor/amphp/redis/src/Protocol/RedisValue.php": "5aabbee18d71ab8324a3a5f3d347ceecc7bdf5de3a252b9ab8712c2fe3b0a4e9", + "vendor/amphp/redis/src/Protocol/RespParser.php": "b859ae2520eeccaa952b91c01d28da4533e3d9853728abacd6d6ba7bf1434a80", + "vendor/amphp/redis/src/RedisCache.php": "7d65095ff554e00612190ef890d13dd2792e58b9c286cddbf3cfbcc3afed29b7", + "vendor/amphp/redis/src/RedisClient.php": "3d22a15d7a5dfb82bf249ac527158b14d9b843ea647e30f23e9285affaa5122c", + "vendor/amphp/redis/src/RedisConfig.php": "b2ca3cae3e699eb18eb6b2579d89463dd2f83ab4ed250a6dc3307ccce3f2c295", + "vendor/amphp/redis/src/RedisException.php": "9ac3f87efa7077e993c2df4e66c7d9d0be6d6feac3e183af4af6a59c3f31d757", + "vendor/amphp/redis/src/RedisSubscriber.php": "3372f2367fcbfea6441dea1bc1e411aa072eff6f6d7402709300feb75127a095", + "vendor/amphp/redis/src/RedisSubscription.php": "a3baade4752621430ae23b0f9d28dad963b1344bcdd76eff9206460f23d0f7ff", + "vendor/amphp/redis/src/Sync/RedisMutex.php": "002dc05b5a96de697baaaa8d4bf42df485aea5b62d0a41b7368c71fb523f1f3d", + "vendor/amphp/redis/src/Sync/RedisMutexException.php": "0c979665387f2c431f11f44c04a4c0b1f88933e739105701a9627c12c273b2ef", + "vendor/amphp/redis/src/Sync/RedisMutexOptions.php": "fba0961b65eab7905cce3a9ac8fcc7da06eb064cf0897afb6999301506c93d4c", + "vendor/amphp/redis/src/Sync/RedisParcel.php": "61b2ad0d54ce683ffbe777db768415da8ed0bce9601c63e49f68b4c43fd0d5c9", + "vendor/amphp/redis/src/functions.php": "e89f40b167675d8cae07279ff3d2c804211afc4267fd93756d0fab57e53c231f", + "vendor/amphp/serialization/.php-cs-fixer.dist.php": "72f324e677e5328df668fc71aa7c7e71b42f431d025f7f3e0126ae9824cc0bc0", + "vendor/amphp/serialization/LICENSE": "9cbfa9126ef8d331fdada832a7f7048fbd9723870ad79844f2e38b56398c3662", + "vendor/amphp/serialization/README.md": "07437b3c7f1df6d6e7b9e3bbcff4088ce8291a54fcc140a7f19f2a889331e53c", + "vendor/amphp/serialization/composer.json": "aa451393d3225e4616ee4e43316490b162c5a056ec59258111ff3b21a60be694", + "vendor/amphp/serialization/psalm.xml": "33b0e5ab66798537d6b5941412e89683315e0de4c83d91462489e7dd2f29cedb", + "vendor/amphp/serialization/src/CompressingSerializer.php": "66b91f6806dc29ef50315dd5a039fad62ff2bdc1d4c098b6aeeac7bf5fd01e88", + "vendor/amphp/serialization/src/JsonSerializer.php": "9a986e2833b07dfee6cea80438e175fdeae178ff77f9da84df490a3d008cb614", + "vendor/amphp/serialization/src/NativeSerializer.php": "e245a0d2377b4f31ff1752d4c27209af3468d57ecfcc46ea53c467b242fac12f", + "vendor/amphp/serialization/src/PassthroughSerializer.php": "3d2df5ce4fb16b8a48bf3a51212b8b26c8af9df211ccf47c98fffc562e600872", + "vendor/amphp/serialization/src/SerializationException.php": "57a595b58387c117c23b19fae3ea66678fed21bf9eb9283ec2289f02181fd08f", + "vendor/amphp/serialization/src/Serializer.php": "3b509a046ab0c3ccc26d49476e81eaea1f459843bc10baa59329ef78cf42e99a", + "vendor/amphp/serialization/src/functions.php": "daadb074093333d4d06486a0af52126299ff6a775f070b7bf828fdb9be3ed3e8", + "vendor/amphp/socket/.github/workflows/ci.yml": "4c1a71669137877ae92e1f2d2c4e3926f7a70754878334bb57052ede4bc899b8", + "vendor/amphp/socket/.php-cs-fixer.dist.php": "471c989c811a3356ce22dc6212deb1161e85f043315e558cd23d30193caa53cc", + "vendor/amphp/socket/LICENSE": "75ff14768ed3b0898ea24b8ff76e9615c21d1d4e6f7ba1d258cc55cb9689ca73", + "vendor/amphp/socket/README.md": "76a11e81ca26e65da08b27b512cdc0e6e4776dbb163e5b5b469a503db62ed819", + "vendor/amphp/socket/composer-require-check.json": "1490118df06a0394fae8c7cf92698fbecc67d7629b77973b8cf8c6d14c6175d0", + "vendor/amphp/socket/composer.json": "e6346cb7e5528674d6a11e47a216d879f6dba5404498384636ee68492c996a77", + "vendor/amphp/socket/psalm.xml": "0e7922c2bf8907d460f4f8ef2c43ec0ae936a3b5b4db761ebf0124231df568c2", + "vendor/amphp/socket/src/BindContext.php": "df950b39c46a0930509694d39ef825dde1b2fec47ee9efa80d3ef1ce900ed0d6", + "vendor/amphp/socket/src/Certificate.php": "ba8135e687abf0513c5282c17cd366a0843366399e18ff25e94a2177cca7e5a2", + "vendor/amphp/socket/src/CidrMatcher.php": "42d79cea9d12e31805a5bb85764aad890b176bc9d5915afda947d8dd555c5abc", + "vendor/amphp/socket/src/ClientTlsContext.php": "8d7b60d726b81e8bd1f179750e2b75ce3f4321d79daf7f357b2663928972062f", + "vendor/amphp/socket/src/ConnectContext.php": "ad4319b9e3869e9a46b39908b2a4544e28ce6d060641bf6d43416478f46e4130", + "vendor/amphp/socket/src/ConnectException.php": "ba7e9359d5c05c04c7043033f07bd59d353db91eea3fa86afc43b747a393fa8c", + "vendor/amphp/socket/src/DnsSocketConnector.php": "8ce5b47d40ba846d48be976b8d6dcadf423536abb36fdf2739d10bdcddaaff7d", + "vendor/amphp/socket/src/Internal/functions.php": "c93698787a8fbafa5839860448d9a366fb850272b252636bd3745e01c3c777c0", + "vendor/amphp/socket/src/InternetAddress.php": "ef707bfc51cee0c1a3ebccd35495a25ade578b204cb78a709029b7be4cb7a472", + "vendor/amphp/socket/src/InternetAddressVersion.php": "9cea26b649156490bbba7d366caa5d820b45e511137c66ae8bfa6dfec87f315c", + "vendor/amphp/socket/src/PendingAcceptError.php": "91de35f68f361a684a7536687baa3f0ef94061fdce6e57ffb781c1d545ae85ae", + "vendor/amphp/socket/src/PendingReceiveError.php": "2515c51e75f5414e352660ab1fa58781f060ee129ccd29e037a1da56cd14c708", + "vendor/amphp/socket/src/ResourceServerSocket.php": "0978c8163b5a0a62c0021de1ebe18fbf7e947cc13f34d2a25c237f337030bcdd", + "vendor/amphp/socket/src/ResourceServerSocketFactory.php": "755ec24484ee5c21b5d345545e2285b5a04692df46b3f5b77706205efe78719c", + "vendor/amphp/socket/src/ResourceSocket.php": "d1ee2731f707181b4c55e66958070ff534e39b57b12a3f74c0de671f82331dbd", + "vendor/amphp/socket/src/ResourceUdpSocket.php": "bd520a6a05162448a9b9ea6cf492b8af3e603223e2810780f53c74e707b97ff9", + "vendor/amphp/socket/src/RetrySocketConnector.php": "7f713ec8a5b197a42972b31403264407732e5801d04369fb06771d2068974aeb", + "vendor/amphp/socket/src/ServerSocket.php": "8b15503dcdbc080df155621c2573678b0cd87373af6d6a2e157501c951383715", + "vendor/amphp/socket/src/ServerSocketFactory.php": "82930c4f88bbd2005e0426f58e821cd75dd70ec5a98e90c8890a6d0395e40ef7", + "vendor/amphp/socket/src/ServerTlsContext.php": "85b7303f9ccd2b6ab4e39ee469f5f9086d43edeaabd016a9b129a04118ec1ecc", + "vendor/amphp/socket/src/Socket.php": "3f0370fc8fd1a1f545ccee7a40b5d3f95c4efe3a092da95d5a20dd1edb093ce7", + "vendor/amphp/socket/src/SocketAddress.php": "6874e8a0b7acd95dc581c61b184f665b4276510490b31701abfc9d83db4e26ca", + "vendor/amphp/socket/src/SocketAddress/functions.php": "d091a920f76ab1e55e06bf1a677f38baf011d89fe8f954ed899bde60c592e626", + "vendor/amphp/socket/src/SocketAddressType.php": "6bfd97ceb2f238310626b1544bc0ad22a5ac492fe4c80df3be767ea76573669d", + "vendor/amphp/socket/src/SocketConnector.php": "0d66ed410fec7aae9740fe8eb75cad01e025dc5bd108cf46e1ae7b9f6aebf746", + "vendor/amphp/socket/src/SocketException.php": "0775f935deacf83aeccc22e1608a564c6fee31c81cf882f7d78951062e8b2db7", + "vendor/amphp/socket/src/SocketPool.php": "d2191670571ec9ce0080cc46717fee5935acf644de3fb6474f768a77f0958093", + "vendor/amphp/socket/src/Socks5SocketConnector.php": "f6ecf99b094351a847c6241c35ea678a6d48975544650eb37a96352d6b3d97c9", + "vendor/amphp/socket/src/StaticSocketConnector.php": "6e4a510b2a84ed06af0c98ee71c93a67e0e554f66fc1494433947a187bd312be", + "vendor/amphp/socket/src/TlsException.php": "533c68b17bd6b178d0c6726e24c46d90777ab8306ec0f476914a6f51e860a07b", + "vendor/amphp/socket/src/TlsInfo.php": "50acdb11bb6e83fdd52ccb39d9ae90ea8ba79a5bcbf8fc353632490be63b0839", + "vendor/amphp/socket/src/TlsState.php": "573bd8350ab1645655f676b0821027fb4adc76995b4f731c17ec34a34100072f", + "vendor/amphp/socket/src/UdpSocket.php": "7d85269d7b7ca58f1f2d5443edd58e957f43698115350f0b95a51abacc2af9e4", + "vendor/amphp/socket/src/UnixAddress.php": "42375396cc10a1b5869229fc846607d71260e2f3548bbf75ed83f27f2035e5bd", + "vendor/amphp/socket/src/UnlimitedSocketPool.php": "39825227eac72080df4af094c56948c8c6a4ca2927e0c049d9ba1bff30479b8a", + "vendor/amphp/socket/src/functions.php": "774e76f324fe0d4528f1bf89e1a39505aa313f47684cfb7c9d28b2f8b1e6b838", + "vendor/amphp/sql-common/.github/workflows/ci.yml": "14b97bc8bba10a22219deec4045713d35b3c663da00d8978da5ccb1b40efbda3", + "vendor/amphp/sql-common/.gitignore": "1609afa08b8d342c7fd86b92cb8e715ef0accb8ca88265701b4a7435c578f1a1", + "vendor/amphp/sql-common/.php-cs-fixer.dist.php": "72f324e677e5328df668fc71aa7c7e71b42f431d025f7f3e0126ae9824cc0bc0", + "vendor/amphp/sql-common/LICENSE": "d1224ddb6b3741731e97eb3a734cd157a6da4b050e2a3d700ad68a9bf2407e16", + "vendor/amphp/sql-common/README.md": "b2e3097f45f26591f827a5bb123ea50cbe142447cb504deb3afc80601c677651", + "vendor/amphp/sql-common/composer.json": "857b55e2467f8eae8c4e15f69579d3e9cbc3a192e4961875718266bce2a63ca0", + "vendor/amphp/sql-common/phpunit.xml.dist": "4060dbd83908ad35b20ef761ed9c604277e2145f637ef02585fc6311475fb604", + "vendor/amphp/sql-common/psalm.xml": "57e227983fcd1d809aa66e2c86a7d7e37d6bd51edef1308db9d53670aa0bca46", + "vendor/amphp/sql-common/src/RetrySqlConnector.php": "6f91bcc1bdb38a7bf69384adb0c9001d8d449ed4c998d4edbd9a45b154af3521", + "vendor/amphp/sql-common/src/SqlCommandResult.php": "6194a317c6439eddabc491be80e1e2d7318179260a2edd3cf590abac32f0c930", + "vendor/amphp/sql-common/src/SqlCommonConnectionPool.php": "1e36f58d6cc6256c642ce5b7b4432b366131dbe193ed6331e001fc9901f11fff", + "vendor/amphp/sql-common/src/SqlConnectionTransaction.php": "c9bee46ff824036cff73f21912ff7535ae5e6d79307b0eb6196e18545d59829a", + "vendor/amphp/sql-common/src/SqlNestableTransactionExecutor.php": "02314176147494c75951dfd34c22d036f8bbb7ede183a1acb2a8fc6cbe9fbf7f", + "vendor/amphp/sql-common/src/SqlNestedTransaction.php": "20bfb9eedcac6e747ca0f02bd4aedad9c01a8182a10fe911214c8eb9f0c28f3b", + "vendor/amphp/sql-common/src/SqlPooledResult.php": "5ccce98bcbe3a32f38e8be4ae53de7c2593045cce359c58da69f05ac8f7de19e", + "vendor/amphp/sql-common/src/SqlPooledStatement.php": "7ddb4cc2e23496a5addc9a423c207f150940928a0bcda8bd352e05ace6b94e69", + "vendor/amphp/sql-common/src/SqlPooledTransaction.php": "69aea4462678da7a6fec8248a5b5ba33a28061b4837daed0ff7bcca8b0fafd72", + "vendor/amphp/sql-common/src/SqlStatementPool.php": "65ebaed5387dad18ada3047ccd3f0e78273f0395670209bc526f3b2bd72d14a8", + "vendor/amphp/sql-common/test/RetrySqlConnectorTest.php": "5692c12c8bb10c706cdf84534a7741fd9bec08acdeaa0e88fb753361c171b48a", + "vendor/amphp/sql-common/test/SqlCommonConnectionPoolTest.php": "bdde704cd3aa9ee155a8b0e4999787bdee06f4a21bb2ce93e18ef539a08b4abe", + "vendor/amphp/sql-common/test/SqlPooledResultTest.php": "d2b54ce7b7157913b1a3b11769aadfa2707a42de04cb8b175dfa517691df328c", + "vendor/amphp/sql-common/test/SqlStatementPoolTest.php": "6fbac30a5eb41aba569f01a140085bb4f5c48a4b40cb04a770128b9d1d7f9381", + "vendor/amphp/sql-common/test/Stub/StubSqlPooledResult.php": "acd9c0455470066b927e4b7bd79e23779bb37c38b0617dd265a5307e80801ab4", + "vendor/amphp/sql-common/test/Stub/StubSqlResult.php": "ba1becc59b8d9af5609aec851d3578c8450b2e8caad0444970e32f8c4bb14122", + "vendor/amphp/sql/.github/workflows/ci.yml": "85f1e6d4f07463ce8dc56692f3256e48379edd00024dc51719d43ecd6f5badef", + "vendor/amphp/sql/.gitignore": "ef2b80a00f4cdf8ca35424aa058ff5d835ca106dcc7fd12de4738db9e10ad8bc", + "vendor/amphp/sql/.php-cs-fixer.dist.php": "72f324e677e5328df668fc71aa7c7e71b42f431d025f7f3e0126ae9824cc0bc0", + "vendor/amphp/sql/.php_cs": "ffc00778467991d3476ca0773768891f77d47d5ea8d34d93aac7776611680a27", + "vendor/amphp/sql/LICENSE": "d1224ddb6b3741731e97eb3a734cd157a6da4b050e2a3d700ad68a9bf2407e16", + "vendor/amphp/sql/README.md": "dba8f0cf0a9fa92730b60d4d59b6d1a1c7c8df56764c6b16a2ec5b28d2d579b5", + "vendor/amphp/sql/composer.json": "c0a73ba7b2764a0cfd90459e957b594c6e8fa62e3e2f38087691f614a6683d8f", + "vendor/amphp/sql/phpunit.xml.dist": "ec303239253b9fde72cebac20581df41b13bf592f1438b9448a2ec8355474afb", + "vendor/amphp/sql/psalm.xml": "fbf701740a4e50c9bddeff31429bb73d924fa3deb6d28e5c53050e856d7d2995", + "vendor/amphp/sql/src/SqlConfig.php": "df0391bd9b1fa21a165862c46a62f8e62fb8fdb132958d9b0d600010b8702325", + "vendor/amphp/sql/src/SqlConnection.php": "e5737fc31f8827e68ecb14ad1d947cdc9986e8556c5228a3c4b99e1e7d4af851", + "vendor/amphp/sql/src/SqlConnectionException.php": "2bd8f8476ac68d7e8052501c47eccefb7d9e5ee2b735af9971ca058273638867", + "vendor/amphp/sql/src/SqlConnectionPool.php": "0ad8a7386b74f574c49ebc5bee906d2368191753f8403cc0cbb5f460fce524fa", + "vendor/amphp/sql/src/SqlConnector.php": "0cb934694c570e60932b0b18e2f88c68e2e0c3aa4ad4cc25d80680dcab2ede2e", + "vendor/amphp/sql/src/SqlException.php": "0c35e214f4787968b8c0d02501e699ee356009243140a323e2de2634d5c4da2c", + "vendor/amphp/sql/src/SqlExecutor.php": "83831eabdb0607c772cea3c9572e5e856857bdc56f151cfe28a89aaa847ef7ce", + "vendor/amphp/sql/src/SqlLink.php": "83f0ba973c909d225aa9a367a2d86ed62aced6cce853e8c8988e28174a30dc1b", + "vendor/amphp/sql/src/SqlQueryError.php": "213700f91ebd9e8c37370a55575e0d1e52830ade0e86c09fea5685d48def36cd", + "vendor/amphp/sql/src/SqlResult.php": "e6cdeb992ca6c6180c467eb0aab55a9cffa237e6b508095c72aca9790d5ddda6", + "vendor/amphp/sql/src/SqlStatement.php": "e38d683720b99c98e3b39feeedd7105bca7230a73fe8de2674be25c96778435e", + "vendor/amphp/sql/src/SqlTransaction.php": "8c2b6176565464bf737d9265aa4ab50dc61b34e793a844402e4eacf34c6d501d", + "vendor/amphp/sql/src/SqlTransactionError.php": "35ee0c47d10af1c8d05dddfc6a33bf2efdd72155d2a3b030e67fe8f117a84e39", + "vendor/amphp/sql/src/SqlTransactionIsolation.php": "87d9fa68c0a9f8ab8cd6cf253f348e760503f97d0b7cd1b3c359585e86b31de3", + "vendor/amphp/sql/src/SqlTransactionIsolationLevel.php": "aa2f2491e1eb5155d7f4c537a71a76cc4bcda7bc6d5c7b28a300106cb936fe14", + "vendor/amphp/sql/src/SqlTransientResource.php": "426eaf78b9979f5223953919878977e55dc1ebc15793cc4d5a8956918c15597d", + "vendor/amphp/sql/test/SqlConfigTest.php": "670061090f364788ecafa896f6d25552d9f4c33238852afe4b6de61e9d139fb7", + "vendor/amphp/sql/test/SqlQueryErrorTest.php": "692af6ec0276e3589c93e2cc208edd1f61a546776238c245430d9a8c95915399", + "vendor/amphp/sync/.github/workflows/ci.yml": "f073bbdf8eced52251e084b25584ff129dfa26ecc60042d9f0efa70f52e9eb70", + "vendor/amphp/sync/.php-cs-fixer.dist.php": "4e2c3fd1f0d253b43b685fdad9e5cf68eebed9d2e115ad1e096faf7b18f159c1", + "vendor/amphp/sync/LICENSE": "0e4919a5d6d70ae53b3291c932d055d1734172a539db060bd8c8f392a13ff0f1", + "vendor/amphp/sync/README.md": "19e1624d7a3b976ff24620881bb59b30b67301e8ad065774f4da2acd145b2724", + "vendor/amphp/sync/composer-require-check.json": "786b675a4ccc2c48721806f6414893f1ae8d244e0fe0f0d0061f8e1b80279690", + "vendor/amphp/sync/composer.json": "93630de86fc737553b6c21322a2c90beae64d1492da06097327033da41d00bbb", + "vendor/amphp/sync/psalm.xml": "db55695e1e36ad2e4474f0beca9fd7e55a11e04c62f99e8f3c6d0367f066c2be", + "vendor/amphp/sync/src/Barrier.php": "8027603c451cc8f9535661a0557c0b5a2fab775325e1899fd4c5cc46624298a3", + "vendor/amphp/sync/src/Channel.php": "b83a4c5390faec971f8b0ca5a3b089b619f632317c50791a072914d3b83098bb", + "vendor/amphp/sync/src/ChannelException.php": "6f9342be068c764be30f87f283cd916bb7093731ffab223a6ac5f1f7a68ba707", + "vendor/amphp/sync/src/Internal/ConcurrentIteratorChannel.php": "69b8d45d8de9bbd6e14792b753e17ea67ff4cda21bf7f8016da0811d103be9a5", + "vendor/amphp/sync/src/KeyedMutex.php": "13a7347b92afbb6b92bdf1af7e1b253f93a7373f3f8b91042bcb342c65006e6e", + "vendor/amphp/sync/src/KeyedSemaphore.php": "ca2e1b53b18d5ca2575c233aea1e0f624f692aaf674bf6a4f359fb3e06f9ba98", + "vendor/amphp/sync/src/LocalKeyedMutex.php": "e83e9f01c246613f4cd02bc83bb3f983edb994be6444cd0cb287a4e6752a654f", + "vendor/amphp/sync/src/LocalKeyedSemaphore.php": "7c3f51f8bb3f09aa682fce6205a66f8b7ed09cb4a5a3c62cb13456bf56f198bc", + "vendor/amphp/sync/src/LocalMutex.php": "390b1aba4a85eede0559633b289a18984c802fc40f007b5af8fcada88e5c0e5e", + "vendor/amphp/sync/src/LocalParcel.php": "5c6bc02fbd0f039e2a621202a1d6d46b7b2fd2130544fda9a83ced5e4597bf3c", + "vendor/amphp/sync/src/LocalSemaphore.php": "1767930143bc1b021d15fe441fbd43bce6aff4abc46ee6bc249801dc9f623a41", + "vendor/amphp/sync/src/Lock.php": "aaa57f62212944780d3e159b54c9a5d8f959b2eebfc62c4c0f8304adbbe1f902", + "vendor/amphp/sync/src/Mutex.php": "e71e5a270c7f6bd84c3b634de70ffe8e2bfa17def7ab4b1b808af923cf6b0111", + "vendor/amphp/sync/src/Parcel.php": "15aea63af1167dfdd9713da6e5743a3b64a4b83d4b71f403dfdd9b97bbcb1195", + "vendor/amphp/sync/src/ParcelException.php": "264ba163bb97b31f204c4d8096a919777ae2144b48539ea06c7dc31f1d4058fc", + "vendor/amphp/sync/src/PosixSemaphore.php": "96ebbdc29a337440c0624d361779f5338181c5325cf196015db940a4c4b6a7a2", + "vendor/amphp/sync/src/PrefixedKeyedMutex.php": "b07fa9f4bf48617c0bc1da93d65a91c7a980f64ca28c5bc1173643729589b7d5", + "vendor/amphp/sync/src/PrefixedKeyedSemaphore.php": "d64f23a1f2d1176468ed475c2d29a6440d953697ab51663c7898bdae1dd52ff5", + "vendor/amphp/sync/src/PriorityQueue.php": "d39e41a24c5f2fd4da5636f0c5f8e2bc8e8c619c8e1566dc943b4d16f76b7774", + "vendor/amphp/sync/src/RateLimitingSemaphore.php": "9c9d39d208a48605ca801a53675cba8ab3f282ad9f3d84a0f3400baf285d7765", + "vendor/amphp/sync/src/Semaphore.php": "1f7102de2f187532dcc70a3a6cf829a3128190eccd81d4f4a2bd6091b3201d5e", + "vendor/amphp/sync/src/SemaphoreMutex.php": "e13be6ce205c6201e53bb870b32d91bbe55c1c49d4453f7f5300afd0f3f92572", + "vendor/amphp/sync/src/SharedMemoryParcel.php": "d91f6133947448f455fdfe48c3fb4c6ec1adf3caf08a80bd56f66a73c60f7c84", + "vendor/amphp/sync/src/StaticKeyMutex.php": "ea41a04108da4d53be1dab9537c00bafa7a1637a406b7acda3b2f2e093c48a46", + "vendor/amphp/sync/src/StaticKeySemaphore.php": "8d75ae7499e83eb28573fa32ff6b3bd9e7c4b552f1eeb0a15ef7629bc1204e08", + "vendor/amphp/sync/src/SyncException.php": "3ff2d8661d6db22fcb4e537fec84f9358a599fa21980d4406a8c140e4043285b", + "vendor/amphp/sync/src/functions.php": "f5f44253cf1710637e4e383eba6677e0a4395bcbd4ddb9bc8802b231b8edc1c4", + "vendor/amphp/websocket-client/.github/workflows/ci.yml": "aaa9586b07c3b621f0ef9b3ed5efcb43877e2defa861026bf80687ac4242d177", + "vendor/amphp/websocket-client/CONTRIBUTING.md": "874c604631ebbb98eac17e9e937519c024eb5d6ca67b4c707947e5dc727a47d0", + "vendor/amphp/websocket-client/LICENSE": "0e4919a5d6d70ae53b3291c932d055d1734172a539db060bd8c8f392a13ff0f1", + "vendor/amphp/websocket-client/README.md": "5dc6d52e390c21bf536a20e4e921ab2f29630eba997f1cf129e7255dd9790b29", + "vendor/amphp/websocket-client/composer-require-check.json": "c17a664da4bf74cb18fffaf081e113d0b525d7eb925cc26f72523eefafd97c24", + "vendor/amphp/websocket-client/composer.json": "bcf167f2883ec57cd5162a6ed71b9a645d62b572379f4c67b8e057e5c37e5653", + "vendor/amphp/websocket-client/phpunit.xml.dist": "92343b2b2eb05c960e0d20ebcc845e7fec07854f8b421bd77f33a7fd9f0d3597", + "vendor/amphp/websocket-client/psalm.xml": "fb2f1588a528703a92ea583cc7fcd693a34be2615a1cc281d209d3c7b7a40f25", + "vendor/amphp/websocket-client/src/Rfc6455Connection.php": "835fb1be69f7d6aaf7b49edc2f3e2df9823425465157820816fcff4aebd35dac", + "vendor/amphp/websocket-client/src/Rfc6455ConnectionFactory.php": "6b0361f63d447d5afce71c90412ce75796710beb90db34ed3be2c5d2c95c5362", + "vendor/amphp/websocket-client/src/Rfc6455Connector.php": "885786d523313fcf0a410ae2c5cead48eae49b7b94e6f1601e2bf322f4b4702d", + "vendor/amphp/websocket-client/src/WebsocketConnectException.php": "6dc1bf7aad37027f2b4a18ac4854048a425f8c5701ffb13a9bd8853b17a1ec89", + "vendor/amphp/websocket-client/src/WebsocketConnection.php": "dd3db91a7de72b59f7bbca7026de2c007d8c605cdedfee0917fa7833dc59e0a1", + "vendor/amphp/websocket-client/src/WebsocketConnectionFactory.php": "fff28bae804e4014dfa9073ef1888d797572ebf5a1e6e63a45afefdc5b07f82b", + "vendor/amphp/websocket-client/src/WebsocketConnector.php": "859704c59a7baa6dd4d308b2873a63aa8c8a45ea59698aa75f66c8d2da8748f5", + "vendor/amphp/websocket-client/src/WebsocketHandshake.php": "ab8a0719323903c899613eb05c199bbbbdc3dd9cd71d51b80664954ac08c4a89", + "vendor/amphp/websocket-client/src/functions.php": "28091299e7e10dbe5479a79df16f8d445969ee09fbc74b546a7f80e714376efe", + "vendor/amphp/websocket-client/test-autobahn/config/fuzzingserver.json": "47af83ed79586f243c16b478c83e14306d13d5cabb018776694e6f24552ae828", + "vendor/amphp/websocket-client/test-autobahn/runner.php": "9e4a8cc4bfd4304a2b62d28af7685e1d040f20cafe5b47f85517ba10d3cebdde", + "vendor/amphp/websocket/.github/workflows/ci.yml": "a475ceb7c033f3ec52050885be54bdc14ba68d4a3ed2efe5f959b024052073a0", + "vendor/amphp/websocket/.php-cs-fixer.dist.php": "72f324e677e5328df668fc71aa7c7e71b42f431d025f7f3e0126ae9824cc0bc0", + "vendor/amphp/websocket/CONTRIBUTING.md": "979aef790f3cd7c4a193f858996e079eaac50e4e496b092b05b0339bb2bedbfd", + "vendor/amphp/websocket/LICENSE": "93dc2b2aae85651379265cbb4906d2b054020ac9cc4ee70e5040f79751e34651", + "vendor/amphp/websocket/README.md": "e4835d8a3c27f31a1e121067a25c1a6f69dabd7b8c49b1de0293e892f258ebc1", + "vendor/amphp/websocket/composer-require-check.json": "1155fb0cd3f1c5be47203df55ae47b433bc86eba620d3b6774d456fbde62ab38", + "vendor/amphp/websocket/composer.json": "9b8a42c2e8d1d6e47cdbdb62f5a1d13d5edcb387bb0cce28fc61299dc2f58dea", + "vendor/amphp/websocket/psalm.xml": "2433c73bea9c4349227c217cbe41241a648170fab1d67f8878b3c95927a3c328", + "vendor/amphp/websocket/src/Compression/Rfc7692Compression.php": "4433aed65c3a3d8b7da11ddc2bf529051aed4c20ac2758a847eb60b21c5da36b", + "vendor/amphp/websocket/src/Compression/Rfc7692CompressionFactory.php": "361dfa108a927890c31adcccd68200ee99d49415d2b1c88b90fc1926b44bca17", + "vendor/amphp/websocket/src/Compression/WebsocketCompressionContext.php": "b0a95b7ebf395cdeed0f7f8798a4e864b1ef192689eedd70e7991c630e0ea605", + "vendor/amphp/websocket/src/Compression/WebsocketCompressionContextFactory.php": "eeeed28c35044061dfebb0f20fc64b9d22feb12e61073efc3718c9ca4e9a1f04", + "vendor/amphp/websocket/src/ConstantRateLimit.php": "ec583aa5a00ccfa150bfcacb2ffac5ee8353ff9a4cd5a2ea652f35bb5653ed54", + "vendor/amphp/websocket/src/Internal/Rfc6455FrameHandler.php": "34aefda3b77e5c4ff58157d24141061ff96bd15a44f5f5bbe1880e035fef4711", + "vendor/amphp/websocket/src/Internal/WebsocketClientMetadata.php": "593f648a57e6778a0bb121b38f607c0d6027b6f51a22172f42a08620aad6aaee", + "vendor/amphp/websocket/src/Parser/Rfc6455FrameCompiler.php": "911181546b396cf4e7c00e9a6c678dae19350d81b6f6f4073f889a33da802f3e", + "vendor/amphp/websocket/src/Parser/Rfc6455FrameCompilerFactory.php": "78b0890285710e796a50d626562e446964b6772814ad070aac99c977b8fa3ea5", + "vendor/amphp/websocket/src/Parser/Rfc6455Parser.php": "bb96f8c93cac412b2d66c2bdefc38cddbf364455f01be3b8c8a9efb0d88ba327", + "vendor/amphp/websocket/src/Parser/Rfc6455ParserFactory.php": "a96d7047a1f68e212836ae3af5892fd2c16c764012a0859eb19c188b296d28dc", + "vendor/amphp/websocket/src/Parser/WebsocketFrameCompiler.php": "44886f159c3a8633580eaa430f4c971064b04cec7d8143143be24ace0b06da65", + "vendor/amphp/websocket/src/Parser/WebsocketFrameCompilerFactory.php": "60cb612d62709efcca5cdb3288d3de6cc56b6685a8584a79144f4273d35d958e", + "vendor/amphp/websocket/src/Parser/WebsocketFrameHandler.php": "63099d2b3ae2b11233b535884fd198291c2e3e39a4a1d185919b7b4203599e46", + "vendor/amphp/websocket/src/Parser/WebsocketFrameType.php": "cebffdcd37c74ce7c0e02def339cd5a578e7ad713eef1c538a1761dea2c6c7a4", + "vendor/amphp/websocket/src/Parser/WebsocketParser.php": "e5410e27c12564e02cf1bf70f41634effbc9f2fb56aac52cef119ff1ea44a7b8", + "vendor/amphp/websocket/src/Parser/WebsocketParserException.php": "d0920f8057d27953073b1fe31c3cb03d14c38a6b036bd1d4d0bbf4040fd37fba", + "vendor/amphp/websocket/src/Parser/WebsocketParserFactory.php": "17e2adbf7c5b3c7ea682f73739a3f5de33d2573f89d939227bf5234798c9ea29", + "vendor/amphp/websocket/src/PeriodicHeartbeatQueue.php": "5d6353f22b3a0a48da46fa59c10a4fd9389de91f25cc71ba6cc98ecd5edb30ed", + "vendor/amphp/websocket/src/Rfc6455Client.php": "a75a0188ed6b91af272fc0be011f67a7d348d5cdfd27c0be47f153f000fa3779", + "vendor/amphp/websocket/src/WebsocketClient.php": "8d9ce079610c9d6c12145fcff71e3eb34be2e4eec0dc79b6275b901f8560d8da", + "vendor/amphp/websocket/src/WebsocketCloseCode.php": "282aafaf23d85384483081f4be4a316ac6f76629a95335559f84e66d55073a6e", + "vendor/amphp/websocket/src/WebsocketCloseInfo.php": "228d9831817cdcc9e877d2f6e32ab97962185ac1edfcfbe0b098dbb39562464a", + "vendor/amphp/websocket/src/WebsocketClosedException.php": "1a0f6087e490a4ca6892890798eb13568fd3bb2133340adfcfddd098c0591b3b", + "vendor/amphp/websocket/src/WebsocketCount.php": "b2522f3a59e8fe849f3b030655ee75b91716a71de30a81f9b2c90e40b560781a", + "vendor/amphp/websocket/src/WebsocketException.php": "0d29573ba5c7ae6ebcebdc09ad85241ada095bc39123c5d23888856d5aac6716", + "vendor/amphp/websocket/src/WebsocketHeartbeatQueue.php": "f743a22066f12029fc1d26691b418701dd07c6712966a69bd7748244a1bfa125", + "vendor/amphp/websocket/src/WebsocketMessage.php": "0f425ab4b786a7febcf343c437842ea386e143a543e070a2b623ddcc0c53b8c9", + "vendor/amphp/websocket/src/WebsocketRateLimit.php": "e2d18d3a6c0bf235920ac586cb34f079d446436f2d51c266aada110dba33fe2a", + "vendor/amphp/websocket/src/WebsocketTimestamp.php": "bed51c8e21058ee81b1028e60f20799963d9f255433b6973f2f809963e958af3", + "vendor/amphp/websocket/src/functions.php": "9383f805a44b1bdfc81761c09b31b89989163668a2ec441b023c8c448d3a49db", + "vendor/bacon/bacon-qr-code/LICENSE": "973af1db913b076a85e09732c75df802a6b8a61a63701c38f2ce6d471c213260", + "vendor/bacon/bacon-qr-code/README.md": "7ce81554c3d49e416960376ddc223d1198f66961aa8323972f3528024f357682", + "vendor/bacon/bacon-qr-code/composer.json": "9717ae6d82f298b024fb15fc5e7088245b8f94712cec088ee50922c7b9ca7462", + "vendor/bacon/bacon-qr-code/src/Common/BitArray.php": "b9a71976ddad1bd685220362baaadfd4c082619eddc09e9b5235dad908a3eaf9", + "vendor/bacon/bacon-qr-code/src/Common/BitMatrix.php": "aa3b36d931d6da6ed452b657f8d598b8cc1e4796c685ad1c1d2b989f0d0db6ec", + "vendor/bacon/bacon-qr-code/src/Common/BitUtils.php": "a461d2b3eb45e14b54cba362fb7fbb910bc624d4ae332340a6a5a9644267a354", + "vendor/bacon/bacon-qr-code/src/Common/CharacterSetEci.php": "fd9465a40872699c7fc8ac4dd0ebb40a5a9bd1b7b7618794755cf485b06d9ce4", + "vendor/bacon/bacon-qr-code/src/Common/EcBlock.php": "4aad2525cbf8329d9d5029b0d5c57c4edeba44e50b0c5a7d5b7705ae1cad7a4d", + "vendor/bacon/bacon-qr-code/src/Common/EcBlocks.php": "b6c802eb6360b6f97dcd2c5d90036a673678ae9751d28fe6246a7c29a1902bac", + "vendor/bacon/bacon-qr-code/src/Common/ErrorCorrectionLevel.php": "b2d5665585f00612801f02726a8e62575b3c4bd8a6058ef08e71cce123cdddb2", + "vendor/bacon/bacon-qr-code/src/Common/FormatInformation.php": "8104bbcee9af16bc3e786b40c8f9d70f24efbeeee7090e9fa55ea3c73a4c8a1f", + "vendor/bacon/bacon-qr-code/src/Common/Mode.php": "92f161ed7dacf352f7dda6ed3cc3d43a30cd92879e727b8b0753978904a83a9a", + "vendor/bacon/bacon-qr-code/src/Common/ReedSolomonCodec.php": "779785ad583b98b81700b48b95730143a0e6773b14177b826f9eb625e8e67837", + "vendor/bacon/bacon-qr-code/src/Common/Version.php": "a3c97701f474a454c7186f45b9bd3dc1a161efc73ab340aa42b9e8fd94ea0d51", + "vendor/bacon/bacon-qr-code/src/Encoder/BlockPair.php": "c2c03a4e2cf405de61555712c2d6ff039d4b8929783ab2b6dff0a522e81bb333", + "vendor/bacon/bacon-qr-code/src/Encoder/ByteMatrix.php": "3565cb4e23da44e769a888d67ca3d5f92abbf6866be5c0d2d1af82e9fd47dcf4", + "vendor/bacon/bacon-qr-code/src/Encoder/Encoder.php": "89bb2beba25474ebe196fc0b2d81b8dadeaea4ce008c678a48d8e6e668f74d58", + "vendor/bacon/bacon-qr-code/src/Encoder/MaskUtil.php": "23bb47d8120aee32dffbd4854a1d63309baf64ad74c5112759f3c9a9ca9b8851", + "vendor/bacon/bacon-qr-code/src/Encoder/MatrixUtil.php": "c5764dd1f44a57b918646e0039a2a82cedb80959ff23bc536e866e56356cf5da", + "vendor/bacon/bacon-qr-code/src/Encoder/QrCode.php": "347fe94c75b0cccc86a38c371cc939072ad30bcc2b8f02872b357670ad75283f", + "vendor/bacon/bacon-qr-code/src/Exception/ExceptionInterface.php": "c834a85c399d71e0a24f3f917f6bbc587d79aed093523ab61d7dab88d14c1fbd", + "vendor/bacon/bacon-qr-code/src/Exception/InvalidArgumentException.php": "ff8d83eee797fecd35bc1735cf1c4484ca3aaaf3504e929834f2f7d9749b55e6", + "vendor/bacon/bacon-qr-code/src/Exception/OutOfBoundsException.php": "c0eeb51ad8b504ce7cac32554ce234d9757335e41fd913d65eca391088de3b91", + "vendor/bacon/bacon-qr-code/src/Exception/RuntimeException.php": "8eeb51e804157983990fdfe1e131a17876c56bb3474f8e72b97afae40bcfcb01", + "vendor/bacon/bacon-qr-code/src/Exception/UnexpectedValueException.php": "e8e1c50b55259a6f2080480d045084949b1b8a3638f584a4d83d4a5161bfa15b", + "vendor/bacon/bacon-qr-code/src/Exception/WriterException.php": "76f2109c2cbaa518c40f04c4379247391aa277048e7a715a6cd2d982ddeea32a", + "vendor/bacon/bacon-qr-code/src/Renderer/Color/Alpha.php": "33bd0ebfaa060b4991f5582f4b006a607719a9339dab61f492fb6b120a1786a9", + "vendor/bacon/bacon-qr-code/src/Renderer/Color/Cmyk.php": "6a60d03366eaefb3ee68b6d19a0e31a12d8c89ef3352e5d8f8f25190993f9376", + "vendor/bacon/bacon-qr-code/src/Renderer/Color/ColorInterface.php": "6e61824b404db2cd01bf6e0f9e89b9871ec7253d40576ae7159ea637aaaba04d", + "vendor/bacon/bacon-qr-code/src/Renderer/Color/Gray.php": "cf8af193141742cb9fde98361269a9b3c06a0280a88af331bad24cc20279df9b", + "vendor/bacon/bacon-qr-code/src/Renderer/Color/Rgb.php": "7f35a334184109c9c173904df68b20efa7988f2578675dbc78a1bc026ec1dc7f", + "vendor/bacon/bacon-qr-code/src/Renderer/Eye/CompositeEye.php": "5c88e9a6d2db31a0cb91182cbcb22f824e4be60139ef834bcf5d58191d01935c", + "vendor/bacon/bacon-qr-code/src/Renderer/Eye/EyeInterface.php": "acb3b17678c4f99b9de6c1ce8632431bd773554a4c6ade86c29a52bddf783fa2", + "vendor/bacon/bacon-qr-code/src/Renderer/Eye/ModuleEye.php": "44436985af9b5fb3c6f6b57eef60383f22bea2233ad6baac21ea826bbf64ec15", + "vendor/bacon/bacon-qr-code/src/Renderer/Eye/PointyEye.php": "3e8a735e0fa473a1a5ac386c9d5866e244c1bcfeeb10f812345173590959c3c4", + "vendor/bacon/bacon-qr-code/src/Renderer/Eye/SimpleCircleEye.php": "5eaca1de9a0c3a6642768490a134dd9870702107b01d8a623c8c9cf9cc4aaaca", + "vendor/bacon/bacon-qr-code/src/Renderer/Eye/SquareEye.php": "b4a9d7f48ada373bff0137717dd34524bc82907c6c56ee9501d2709c1e3c4450", + "vendor/bacon/bacon-qr-code/src/Renderer/GDLibRenderer.php": "98969481235e2df682491c3c3413c31376453aa01f5fc0acf89f41932dd8a6b5", + "vendor/bacon/bacon-qr-code/src/Renderer/Image/EpsImageBackEnd.php": "40ce9982f506daddd6bce63fd16b07a8ca0b4a8d2f2b5e9c60bf07f97fda3fbe", + "vendor/bacon/bacon-qr-code/src/Renderer/Image/ImageBackEndInterface.php": "c9b026d3498ae283fd3f6c255f350835f2c017a6bacd0211b2142893dfd210fa", + "vendor/bacon/bacon-qr-code/src/Renderer/Image/ImagickImageBackEnd.php": "6fccfe219064bafe1e91da34c0344bca30bfb93526e45914e6478359a0b3f43a", + "vendor/bacon/bacon-qr-code/src/Renderer/Image/SvgImageBackEnd.php": "defe57ed85c6a8bc6227ab49fcca098428f0420955b1f52efb8de58c75209cd0", + "vendor/bacon/bacon-qr-code/src/Renderer/Image/TransformationMatrix.php": "521e20fcaa6c8ce9550705e894205754c2ec76ee0c3329c3df4ca27779019524", + "vendor/bacon/bacon-qr-code/src/Renderer/ImageRenderer.php": "d5badf3f1688171b9d89eb896016a18d5d16e8a073153cf4cfeab56cad9d0766", + "vendor/bacon/bacon-qr-code/src/Renderer/Module/DotsModule.php": "f9b85b0f3f5391c12bc4f93a65e864bec222b3bbb687632a1c2e66d9989a1a69", + "vendor/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/Edge.php": "f546451adb0671d2c781957c4fe9c47e150fa7d8f0d8d80d0559633cd830c29a", + "vendor/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/EdgeIterator.php": "b04654ecc48e0eb2c0da1a4e57e7098129906cef74cd715a98e59ca8e08840a0", + "vendor/bacon/bacon-qr-code/src/Renderer/Module/ModuleInterface.php": "c643acaf6b2e5ce50194cacf61cff18a3b5d37513ed06e4816074ef989053eb3", + "vendor/bacon/bacon-qr-code/src/Renderer/Module/RoundnessModule.php": "84ef74b3e06c025bc144010ab2208d8986de74c683752138b9a6fe151fad50a6", + "vendor/bacon/bacon-qr-code/src/Renderer/Module/SquareModule.php": "f52f335872d741c1adf19c0b1c826a37342dd7739c06ee1a277a6fec883d39a8", + "vendor/bacon/bacon-qr-code/src/Renderer/Path/Close.php": "71cc07b11a3567f28e288d49ff75237b8cf72e854b842cd847154802e15075f9", + "vendor/bacon/bacon-qr-code/src/Renderer/Path/Curve.php": "7bae782b56b9fb3493484861d10dfa895d4dd89ab40f06872d7c23a89b2d99ef", + "vendor/bacon/bacon-qr-code/src/Renderer/Path/EllipticArc.php": "15ced4eaef0219617821f47ea880cf2f08fb51afca9eed7106effa478d4568e7", + "vendor/bacon/bacon-qr-code/src/Renderer/Path/Line.php": "db77e473da6827822d4f914d34218210ca031c50238911d606d58ae426a29910", + "vendor/bacon/bacon-qr-code/src/Renderer/Path/Move.php": "e424dcde680170c40f622b011ba2c6b17585c11007e9ea25f41ba6c2ed51af44", + "vendor/bacon/bacon-qr-code/src/Renderer/Path/OperationInterface.php": "0b41de0dadc8d189b3419f357503947f37f6a6951963272fba714dddca204c42", + "vendor/bacon/bacon-qr-code/src/Renderer/Path/Path.php": "785d89f9cce10def715e7743fdf8342339538d0b155cdf19dd7739da91361b41", + "vendor/bacon/bacon-qr-code/src/Renderer/PlainTextRenderer.php": "89b62d1ad13592f664bec50085cefa4a9980e8caf3c6641545cbab3f69c32944", + "vendor/bacon/bacon-qr-code/src/Renderer/RendererInterface.php": "4452c80c1c07d8c0a04e24f9144439d994ea939c8060fb05b723cf590c4406b0", + "vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/EyeFill.php": "ad2cf08557f5525d6ecb34de99ecc55ec8d89ebeb2a5387c20af157ba8e07552", + "vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/Fill.php": "46d12cf210f4f9921a0542b96895b44e17398e8f3f8e239fbafa6a0ad177ffb1", + "vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/Gradient.php": "2fa4d25ed8cc2be381744858dec1db04c076da72003451577c7cd9cf4df5a43b", + "vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/GradientType.php": "144a098f4f5e2a30b667b337788ad0b1c66bdcb44f5f973d736089bb6e9588d0", + "vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/RendererStyle.php": "76884084da186d5f318f67f7eaf902bd594c2b2f6afaa752c78f46010a480369", + "vendor/bacon/bacon-qr-code/src/Writer.php": "b3f968284dafcb6b010287028eacca7f4e39a7c0d2e7852309596fa9121fbeb0", + "vendor/brick/math/CHANGELOG.md": "3ff370d55b0ef88bd974636ae94b1e37a83640a67c1b7182f4a4e0f1d00abc0d", + "vendor/brick/math/LICENSE": "d2625cc652e6ffa9f16827f1dba2d83ac12b050dc8150a38720420dbb810cae3", + "vendor/brick/math/README.md": "a47f0dcfe9537ca0c0dde49bfa0d980759435f5e525034378a7b6d9d43cd0981", + "vendor/brick/math/composer.json": "fe93d538393d24617d615b373389d8a8970d8be18a8928d17c5a5cd9381a6522", + "vendor/brick/math/src/BigDecimal.php": "ccf44c9e463182dd158190fd3b27b631ea7a58968505157e2bc715b61604515c", + "vendor/brick/math/src/BigInteger.php": "a6d7b7824a8399ece864332672800f13be4ef57609f868dd577de2cf586bc3a1", + "vendor/brick/math/src/BigNumber.php": "5a2a5ad1e73835fb200bbf1f959dbd36b8785b5e4a1c7c9ef505992130c08049", + "vendor/brick/math/src/BigRational.php": "99d999ae1d4ccb9bbe231a2e5242f315b9483f317b8b5bd226277ced1a4ba2ab", + "vendor/brick/math/src/Exception/DivisionByZeroException.php": "6dad71505461e21c56db4222659891b1a4efa8bf7737290418668aa881f6c3d3", + "vendor/brick/math/src/Exception/IntegerOverflowException.php": "d4264eb4bc039baa7cb8a4aa62c8928c85ff947e9823532095e156d87392455b", + "vendor/brick/math/src/Exception/InvalidArgumentException.php": "c25c58c48379436ce704ea28cc3c5cff5f853ed5e2b439e639d198ed7bdfddf9", + "vendor/brick/math/src/Exception/MathException.php": "34033cc2b90fa897e9e79d05a589c8e6411b9a117a80765b58013eacad0b255e", + "vendor/brick/math/src/Exception/NegativeNumberException.php": "2c6a1c878e96bbb06d07fcd64ce06b66e5ac56f5ba51a2ba69cdd62b1f5dfd6d", + "vendor/brick/math/src/Exception/NoInverseException.php": "1e072b6b8802ef678cd8aed6aab4f5534e83e514c67c10cfbd457aa9e67d77d2", + "vendor/brick/math/src/Exception/NumberFormatException.php": "9513693ceea593b6686ca7ef9253c595c6502145382f9da9872c791b37b5a258", + "vendor/brick/math/src/Exception/PlatformException.php": "b2bc33189336bf6c8b3b145bd8c8397218e90588cca9ead140ef4a66d1c6be51", + "vendor/brick/math/src/Exception/RandomSourceException.php": "462eb152713684b4d5ac0efe2fa27f8b2fd0d877ceb3e7315516757c5640e67c", + "vendor/brick/math/src/Exception/RoundingNecessaryException.php": "3f9e061a0eeda28fc35d6f70cd1625c74d3002891c2d063ed2bede16155c8549", + "vendor/brick/math/src/Internal/Calculator.php": "a92ba12d6e6487ef8ee6cf435ede5b2d4f4d4684b7bca14aa9c133b842724655", + "vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php": "aaf790516424d97f2257bf6fdc7eee9a95fc5440abd11d2fbc4f09ba73549b6a", + "vendor/brick/math/src/Internal/Calculator/GmpCalculator.php": "0351a740b49e88cf379319af9fccab8c8f437cd5d54b2d57b79c1ea72fcc0420", + "vendor/brick/math/src/Internal/Calculator/NativeCalculator.php": "4980f1a9b620a8de0588a018276044ed20c01293c2a0254613094e81e1cb6c1a", + "vendor/brick/math/src/Internal/CalculatorRegistry.php": "7047026d82935de4736cb9f2f73915a75c2e9a776c68476b72bd430cab115088", + "vendor/brick/math/src/Internal/DecimalHelper.php": "6884286a2dd2ebbba5d373140e2cca58d6efb8dd63b0868e517fb39eff4ad016", + "vendor/brick/math/src/Internal/Safe.php": "26100429b186305ee9143f0b45c36168c1a7d039099dff13f5ab1a9ca2e32ccf", + "vendor/brick/math/src/NumberSyntax.php": "f5ad04274721dd3bbc4572b90eb8e71fb47d052fd1ab6974e08aa013fef94b9e", + "vendor/brick/math/src/RoundingMode.php": "1b7e6399d071d1ee922ec6ee928ae06bfa092b6d932af5faac8fbe65ef9b258d", + "vendor/danog/async-orm/.gitattributes": "36480fff15b5a6cd4ebf6538b1dda9cecef8bc65ec65782fcc2ea78c032b0038", + "vendor/danog/async-orm/.github/FUNDING.yml": "d32aff5b00bb9eae134a36c19ba9680f222d4aa62d4af8b1e349769fe98e85dd", + "vendor/danog/async-orm/.github/workflows/main.yml": "8cd425af14e9646159eefc139634cbb8015435c701e405d20d7fc45bc9e0656a", + "vendor/danog/async-orm/.gitignore": "1920173c7c1839363833a34e3ba921b51b2f73933e7cc98b85ae710599201130", + "vendor/danog/async-orm/.php-cs-fixer.dist.php": "9b6af1b5d3d4d5f1c1bc495bd5fd0d5fe6a9bb2c3fdfc546c3c074a4bc82b717", + "vendor/danog/async-orm/LICENSE": "8c6db340475136df3c1201d458fa5755698eace76e510471ecc9d857d6083dac", + "vendor/danog/async-orm/NOTICE": "3dfd6d3468a650d538cdfc3f94d42200a3517c72864c9224a78a6e86900d6fc6", + "vendor/danog/async-orm/README.md": "31e9c0779d84de5b6fb38cd4b0744655faa1392f72833b9a0f44b93853413ac0", + "vendor/danog/async-orm/composer.json": "4738ca2c0a25d4c02c51bd38617e823d52a03dfc7801d1c675eea2f0b9f5c9ed", + "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Annotations/OrmMappedArray.md": "85f306d72732c8696045ffba1763e1fa46b4d179fcb4b3374821aa83cefc73c8", + "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/DbArray.md": "3206e68d18686144e6f8e3c9d8247fd8e9bc742ea2c8d7815aa41b6df4434fe8", + "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/DbArrayBuilder.md": "fe43a31501c8f8dcf8f1ea3d9ceae1ec6121fc8280585b546e3f416a679312de", + "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/DbAutoProperties.md": "970a4c54e892a0eef933e0f86ddd456d48c64a93da450d804a16e89a3b7a5711", + "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/DbObject.md": "469a9900c4070460ad6ec05a7cd3948aa63e014ea2ab0eb0e73124444656f6db", + "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Driver/DriverArray.md": "9282a1383ea89d2c82bba4df2b6287f518f5a02955981dfa64d9b63e7d64a15c", + "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Driver/MemoryArray.md": "29938c6d18ddb0f721323be513b5bdba2e30ecde964f6b922e6b92fa26703faa", + "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Driver/SqlArray.md": "daf48a68701ca552473aa37bfa7122319be03a9c13fbad3fdaa7832b87fd72a8", + "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/KeyType.md": "b07fb86e977d1497a06e99156bbd90ad18985ded45b507bf881fb484594159a3", + "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Serializer.md": "8ec4dc3500bb6ac42ce6e0e38882d95c4e6b967ce410dd6ee9beab1eff0e5d09", + "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Serializer/Igbinary.md": "8ec77b2685f68649457e8f6366aa317d28d92279c82d998b937ab41812948555", + "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Serializer/Json.md": "48c27c6fdaf87e328f1620f50dfccd0dda51c0401402402b0f9539a5d72fc635", + "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Serializer/Native.md": "32567292dbe6415ab48a029ed81d069a9b69cbca7cd38ec930b45928cf35e5bf", + "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Settings.md": "fb4e6ada7510b6e394b51b25f2f48e2c3899bd62843ee8ee54e197f47c83bbcb", + "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Settings/DriverSettings.md": "cd01e8499f689d5e041742c37ee47da0a2d16915b6b6b98a415db4a50ecd9af2", + "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Settings/MemorySettings.md": "0ddb9234bb2eb08cba8c15c21c47c6435bf06a1b9eef3ad4bda96d208e72e407", + "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Settings/MysqlSettings.md": "8ae78a9fe732aa083258c3234722532e6c5feef850841b8964e7722468c5d79d", + "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Settings/PostgresSettings.md": "158d5fed5eb643f8ba73558ff6b1562099425e34c9ce7a05c2f901dfa926ae88", + "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Settings/RedisSettings.md": "b67b3f02f62410c48e49dd6140d92facd292ba6a60da4558e8db11c251b8eb7f", + "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Settings/SqlSettings.md": "ef979909026d63875c482b2a6d0810ef64f9a5c4e8d9f0841911915ff7e0d4ce", + "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/ValueType.md": "f6de7c432ff5aa449f13628db4834d3a7c1bc9eb9d13edb26bdc1413423779bf", + "vendor/danog/async-orm/docs/docs/index.md": "164b8c57ebf7a814db515a15a31b4abbad18506c042a27c8022f45ada06cb0f8", + "vendor/danog/async-orm/docs/index.md": "dbcc210d7f4962499db6d4cfa18658e26d05ee700c962a811cac911f095e22fd", + "vendor/danog/async-orm/examples/1-automatic.php": "ca260596e6e13015dff1ff85c759579c8490d455d5a7cd2c37b67bf614d4dc45", + "vendor/danog/async-orm/examples/2-manual.php": "102ed5c5623f7edb7a5d503e38507f94650a82f6bacabf1504193626aff49da9", + "vendor/danog/async-orm/infection.json5": "1f325b4ae72ceb42a53b94e19ecb4c5504e9cd1e52afc29e7141010c79f705f8", + "vendor/danog/async-orm/phpunit.xml": "463c51e87c2ceb095955ef7cefd61d1bc4f4bda98e50ec4dc114ac69edd406c8", + "vendor/danog/async-orm/psalm-baseline.xml": "78e83bbe5a4a263a78cd120fc82d3d390bb20594b912e2a12416c7bf3c6c6d21", + "vendor/danog/async-orm/psalm.xml": "3ee85cafe74c637a426f63d8e468658d2f4a12231686459205bd4976ea0e347a", + "vendor/danog/async-orm/src/Annotations/OrmMappedArray.php": "1b795d4a245ee34d8dca64f0c7eeee4e68e85ed8cd56c983768efa371bca6ab6", + "vendor/danog/async-orm/src/DbArray.php": "8cbc05a307f4e0444f1f1e38608d57041bc78e7f32b3d28cfe6813379dd68da4", + "vendor/danog/async-orm/src/DbArrayBuilder.php": "5b6c007c55379cba0d1618ec79d0fa8dac45e009557080d827914f1bc064b46b", + "vendor/danog/async-orm/src/DbAutoProperties.php": "8669140fab335a4fafa308bc6dd288c4f24e61489990b8d1b99dc716733ec90d", + "vendor/danog/async-orm/src/DbObject.php": "2084365a06fff8467060018a5b8bd093e9efa66c1e0b60e5a28b0cc0623271cf", + "vendor/danog/async-orm/src/Driver/DriverArray.php": "c86e72687f967e079e74722db6087968df03fc154f4ab7c7228b820824464fe4", + "vendor/danog/async-orm/src/Driver/MemoryArray.php": "9c9db43ac78e50de9bc4f936cc1bdbf2c4ceb5ddd0baa700e24568251d024e7b", + "vendor/danog/async-orm/src/Driver/SqlArray.php": "8c77704084f10f60b28ce1102901ba5e7cedd998a778f85491f9296ae2b4b3ee", + "vendor/danog/async-orm/src/Internal/Containers/CacheContainer.php": "0fbaac29a626d60964c2c14f89fbb91a92ff75a8b1aa6e5b09218f0acce4147c", + "vendor/danog/async-orm/src/Internal/Containers/ObjectContainer.php": "e5181a1a6f5945224d0dcfbfde0db4722456d58136b01356e9cf7d9cb40b75c6", + "vendor/danog/async-orm/src/Internal/Containers/ObjectReference.php": "5726e63e7f8981538bb73a8d06afc6fd86e7016ac400ba005509d47838d58a84", + "vendor/danog/async-orm/src/Internal/Driver/CachedArray.php": "e8b0413b4e57d197054c2c5261cb5bf62c9540b813d3d72d909c6c5e1baa26f3", + "vendor/danog/async-orm/src/Internal/Driver/MysqlArray.php": "5b79fdaa23feedf62f42c453523830e89cf3780a600e7d5cf852bb7ab2a41d79", + "vendor/danog/async-orm/src/Internal/Driver/ObjectArray.php": "1e8c3a8d9d2a3b8849194b0fd5b69170e38a32f21576be8052b72c48f2c02a0b", + "vendor/danog/async-orm/src/Internal/Driver/PostgresArray.php": "97bbbc6cf1c2a72cd6ff58a64367ac783d4a2faa2be256c67319a426697be0ca", + "vendor/danog/async-orm/src/Internal/Driver/RedisArray.php": "1a68e32dfee490be4ad82655d341a977358431dc16c495f4346626c3582de12c", + "vendor/danog/async-orm/src/Internal/Serializer/BoolInt.php": "cd5ac7d7ed9bb5f6f4ab66994ad1dc1cb2bfce670ebfb64fd77d3f7e823bf351", + "vendor/danog/async-orm/src/Internal/Serializer/BoolString.php": "fae0be9cf7c2ea8dd7d5ce5eafa0e48496d0964fc936ab89f8b2bb684bb6e80d", + "vendor/danog/async-orm/src/Internal/Serializer/ByteaSerializer.php": "695d985e2ef35252bc0e231e79e2ec9d0cabe3366124edc541d2ffaf63b0b2fe", + "vendor/danog/async-orm/src/Internal/Serializer/FloatString.php": "fe4f158c8801bcae7fa947dbec4aeadbce3874c0b7d93e491716ea37bcc79b58", + "vendor/danog/async-orm/src/Internal/Serializer/IntString.php": "5ae3ef23d0279b8370be8712cf95e7910457396e83b8bf59bf5357f12525797b", + "vendor/danog/async-orm/src/Internal/Serializer/Passthrough.php": "7734da3e2c4ee629c0a5970715de2565f39d11da19db8fc15d79ff0141b8a81b", + "vendor/danog/async-orm/src/KeyType.php": "41d6890fc09635ee58e3a5b25a201d6338691742b0b0c2d45143f1b632337fa7", + "vendor/danog/async-orm/src/Serializer.php": "ad64caf3f4f2eb326128992def8ed8c6072a3f8386649568e0862cd20cf5f23d", + "vendor/danog/async-orm/src/Serializer/Igbinary.php": "5d884fd67e43fb25746465eef5b025641a2602dd8c909db54692864bb84b2e73", + "vendor/danog/async-orm/src/Serializer/Json.php": "c9e3e426771409d2aff88d0288a5e74d65c89a8057d8ea64469396266d7939ae", + "vendor/danog/async-orm/src/Serializer/Native.php": "c864389307969ad51ee6e20c7c17726d2b46e2b68fe0a7873f663b1c772655cd", + "vendor/danog/async-orm/src/Settings.php": "36e55e1be20d777e8fddddb20930883ca3eec6d77f77bc068a011a940e294488", + "vendor/danog/async-orm/src/Settings/DriverSettings.php": "717ef9772289ba993335604b84e94e0b88321ed6ec16c107b91a6393f4828f0b", + "vendor/danog/async-orm/src/Settings/MemorySettings.php": "47655399c86b6743ab520fc137421305a582e920a9176ad8418a17dbc0be2b48", + "vendor/danog/async-orm/src/Settings/MysqlSettings.php": "c412e72f0a3749dbcd6a02550b687c0d873e3685e5f285760888e90b67e0a879", + "vendor/danog/async-orm/src/Settings/PostgresSettings.php": "1208fcdca5be292dbe32d90d24ef518c34ed570b2ebfb3fce3eed6a21d46057e", + "vendor/danog/async-orm/src/Settings/RedisSettings.php": "e196da05f099b2ae095bf0af47cc8a06c6268a9aaf6c0da644067b71bae389a0", + "vendor/danog/async-orm/src/Settings/SqlSettings.php": "ec1d51814ba248d0ea7b38e5d934c430072759cc4b0edaf984fe16a0377bbd69", + "vendor/danog/async-orm/src/ValueType.php": "19b0d07851b64a9d2ea0eb4bb6376a4ebef76d3c0a906998ac4cc258de4a07c2", + "vendor/danog/better-prometheus/.github/FUNDING.yml": "d32aff5b00bb9eae134a36c19ba9680f222d4aa62d4af8b1e349769fe98e85dd", + "vendor/danog/better-prometheus/.github/workflows/jekyll-gh-pages.yml": "8028ba1bdddd05938c52b2ebd46a4c35e45aa595b5d4886731f053532c4cc0a9", + "vendor/danog/better-prometheus/.github/workflows/main.yml": "9d6e3dde9d5556c69c30aae948b9afb238787ccb8c14b0c311d911575807b10c", + "vendor/danog/better-prometheus/.gitignore": "7aaf4fcebed10e30dba385418de0e8d039fd425d784b96605b1c21f2a17aeb7e", + "vendor/danog/better-prometheus/.php-cs-fixer.dist.php": "24070f9bb5fcbf44e553dfdbe33d960f33e3016cc61e1ef8bc723843b141235e", + "vendor/danog/better-prometheus/LICENSE": "8c6db340475136df3c1201d458fa5755698eace76e510471ecc9d857d6083dac", + "vendor/danog/better-prometheus/NOTICE": "7ee673a8f098e3569a5af6f61f722bc735d340d92414a72a2dd4e35e38619eac", + "vendor/danog/better-prometheus/README.md": "c384729fbf4cbc0af29e8e1f12482d601574ea137394cb7a34bcf14d3c59605d", + "vendor/danog/better-prometheus/composer.json": "c1364655242e8957bd11c1f0ed08b3992150626f44ef2d42df647531f7f45a2e", + "vendor/danog/better-prometheus/docs/danog/BetterPrometheus/BetterCollector.md": "9a4e92aa5c17aeb27274347eb619f6c4bee5676bfb1412d7b680df50b32b8902", + "vendor/danog/better-prometheus/docs/danog/BetterPrometheus/BetterCollectorRegistry.md": "47ce1382ca3a173cca6e8f529ac978b17cc6d941d00bde96a0e8c0039506ce5e", + "vendor/danog/better-prometheus/docs/danog/BetterPrometheus/BetterCounter.md": "81ba08894b786ad48f81a9523d6eeb1ab0d8e5c772bae9b7d720c8308ce1b0a3", + "vendor/danog/better-prometheus/docs/danog/BetterPrometheus/BetterGauge.md": "8853df18d0fb31fe37d15833e8e46b3ceef6e1ef65f6c76b6ad8cfdfa63f7f9a", + "vendor/danog/better-prometheus/docs/danog/BetterPrometheus/BetterHistogram.md": "8c3d2001ee70b46f61406cda08444f780cb35837adff14bc23b54f35da066fab", + "vendor/danog/better-prometheus/docs/danog/BetterPrometheus/BetterSummary.md": "5adc577fd6be64a31cb208ef237df72587d7a5b3273f50509433206e4b159f07", + "vendor/danog/better-prometheus/docs/index.md": "3fce57f406112a3a4fd8952aea101306cb6e8b666dda18f9adf2d22dfc337bfd", + "vendor/danog/better-prometheus/examples/1-all.php": "1b66ea79dde41e1b9b56fb31a84660a543eaa003ed9201c4bbc8993df71bbbb3", + "vendor/danog/better-prometheus/lib/BetterCollector.php": "d7c08e0408d880f4b3e80f8ee728abbe436549253a51a2a61c84d0014ca6223b", + "vendor/danog/better-prometheus/lib/BetterCollectorRegistry.php": "83a35c6d769b56e310687bb184187edd95b4b47317b98a7c74bc3b0647e292da", + "vendor/danog/better-prometheus/lib/BetterCounter.php": "4060806a88a7aac67fdf14005b3f90c668d4d59ade0d32c8244564d3b4460a42", + "vendor/danog/better-prometheus/lib/BetterGauge.php": "d6b2649771b9c581e21d08657c60c6cf7b5f746a71e0e1d61bcdb336a07f5b67", + "vendor/danog/better-prometheus/lib/BetterHistogram.php": "d870cf92d8ecfaf8b3db62610ce3364e0f97046891e836ccbd9e34758b22b0e1", + "vendor/danog/better-prometheus/lib/BetterSummary.php": "64c667d9089dbb7526d4aa24d91382094510e67014b2d2460e200e36e1531cdb", + "vendor/danog/better-prometheus/psalm.xml": "5ebaa2b01fd79a7997839bdc13530effa4b760110e50a6f8d24d41d174d59314", + "vendor/danog/dns-over-https/.github/workflows/ci.yml": "91e40d9c09ec8200cde1bf237b22c7baf385d92c1ba41a4248da3b0452822385", + "vendor/danog/dns-over-https/.gitmodules": "7b14e4f1520d38491060b47535c5446448ca8324a323debb2349a102e75664c9", + "vendor/danog/dns-over-https/.php-cs-fixer.dist.php": "7dcd2b6be8dbfa9b371804e983e87ec9b7db7a17d0973e61a63d5a29dee36dd0", + "vendor/danog/dns-over-https/CONTRIBUTING.md": "979aef790f3cd7c4a193f858996e079eaac50e4e496b092b05b0339bb2bedbfd", + "vendor/danog/dns-over-https/LICENSE": "eff216d768cf4549198f24abbdb80f55fec10afb5876920291993d8d59c3aa47", + "vendor/danog/dns-over-https/Makefile": "98497c8a5babea50f6bb304a75b2cf2ad7d421b3a96dc385bb10e8500c7b72f3", + "vendor/danog/dns-over-https/README.md": "d433f048948ce8ea413efe1f3128a36dba730475580351a052f21b0fd59ad8f7", + "vendor/danog/dns-over-https/composer.json": "0d0c2d82977b42892636de71d048c4cd30b4efecfeb76a95fd436646fbef5231", + "vendor/danog/dns-over-https/docs/.gitignore": "5c29af322ccb837ab59ea245806b205294e4d61a2076b69c7fa5428e64b856d0", + "vendor/danog/dns-over-https/docs/Gemfile": "5ac3c69df09d777ef1650ea9ce7d56c714cb0a87b6dbccff2979d982345ea7c3", + "vendor/danog/dns-over-https/docs/_config.yml": "06d54826f9e65a5ba0edb1ab88d28fe11da838f591f21497d732b15078bdd40b", + "vendor/danog/dns-over-https/docs/index.md": "b2116ad1af827a26d9d479fc1c3a4d84b51cdb2168735973d2f3bda4005bdf84", + "vendor/danog/dns-over-https/lib/DoHConfig.php": "ede6d59a39ed70174086f528ba95db72f82e00382759f807d2222e7f27a29ee3", + "vendor/danog/dns-over-https/lib/DoHException.php": "9a0375347318b67758551f8bd2adab31dbe906d11650c9681a9961c942363149", + "vendor/danog/dns-over-https/lib/DoHNameserver.php": "479e819cbd925c1daec965dea8879cb7410660e56fdd3326ef11c4a10debdb6a", + "vendor/danog/dns-over-https/lib/DoHNameserverType.php": "31f0069d005c7ad5d5e9d52be2c92e8b8edcd39476f5c42d7f0b446a0dfcadd6", + "vendor/danog/dns-over-https/lib/Rfc8484StubDoHResolver.php": "be7cbb28e6f7f5d7d3f52954501da5790f85e37b81c48c47a78c8961096fb354", + "vendor/danog/dns-over-https/phpunit.xml.dist": "6cb69d48760426a3023e385aa5b87bd8f6bd4e3071c37bee8341a2e4deb28f24", + "vendor/danog/dns-over-https/psalm-baseline.xml": "5334fde90357cb8a419ad2bdccff589aa0730332eca9a9b4eea09854a511df79", + "vendor/danog/dns-over-https/psalm.xml": "1d941b70a8e9cd8335c31ce073fb83868b3f6c4044d58c64c75942914b0b5024", + "vendor/danog/ipc/.github/dependabot.yml": "380150216e6a0509993d20e2769fa4ca6800ab6c65536add10efcc88624b41ad", + "vendor/danog/ipc/.github/workflows/ci.yml": "13f9b45e926716158af8babbc6a2488b3ec7df9c09056d6cdfcc5f940ba80c0e", + "vendor/danog/ipc/.gitignore": "d592d2ec4051a3912f9db5c93049475759837d419032c1b3a545727502743a5a", + "vendor/danog/ipc/.php-cs-fixer.dist.php": "7dcd2b6be8dbfa9b371804e983e87ec9b7db7a17d0973e61a63d5a29dee36dd0", + "vendor/danog/ipc/CONTRIBUTING.md": "eed3a7ac5df070d50d9d665fb7cff7680b9f1be4ef2aaa6c9bffabe52d7ccd66", + "vendor/danog/ipc/LICENSE": "21aa06129a162cf89ab5bad3bd16cb7366ccd1fd6858a294be3092f336c1a227", + "vendor/danog/ipc/README.md": "29adbaeef4609a3c9208fa1504cd8484a544db2f9a6b4ff3939f71b1c43b2d6f", + "vendor/danog/ipc/composer.json": "01c3f1557420fa7c26e3d7a0b910e9f55f2583696f41bacebc7db0f2b188abb9", + "vendor/danog/ipc/examples/client.php": "c150fe2a1702240f059d1a8076fe42e00cb8cd61d4f42468bca70d91473ca4fc", + "vendor/danog/ipc/examples/server.php": "9348084c9e953b6dc4baea33aa32c931aa4a7b25285ed28a2f73138315bbca39", + "vendor/danog/ipc/lib/IpcServer.php": "b9248aa22b185280b654f6249e33dd2039f12b5c17115ef7492f458a8af25dda", + "vendor/danog/ipc/lib/IpcServerException.php": "d53adf935b4bc70a07800dec34a0a091e26d838dfe00d8b0d7399548c8890b40", + "vendor/danog/ipc/lib/PendingAcceptError.php": "e70c15b3114de37785164da67bf3331d8e00c87c386a5664755cdc787c972073", + "vendor/danog/ipc/lib/Sync/Channel.php": "0e62f12fb430702d0d7ba1c9ea951afe10f28b79c1f0067013dc0c4c59027bf9", + "vendor/danog/ipc/lib/Sync/ChannelCloseReq.php": "f9520aee209091c3471a974ba1a8db37cb5c6abf5fbdcbe96da033781a55ad35", + "vendor/danog/ipc/lib/Sync/ChannelException.php": "9281667c36fe89869dcd3d19093cd0d071f409f8a089e3aeedf27bb38c27cc52", + "vendor/danog/ipc/lib/Sync/ChannelInitAck.php": "51b4a7f7e6bb06570652f0e640756ed6b91c583c285c5087dfbf93adf7bc6d83", + "vendor/danog/ipc/lib/Sync/ChannelParser.php": "4025825d5599a96b1fc5ab67d559c62915621981366c54fb31ca7917ed456435", + "vendor/danog/ipc/lib/Sync/ChannelledSocket.php": "377badcf40f453664c885893f80bfbc2aee75ef974fa5f5072ff34c6567aafe4", + "vendor/danog/ipc/lib/Sync/PanicError.php": "e96e071026a81d12f7e5ddca66156af385455fe383718acd45fd8d251a174dd1", + "vendor/danog/ipc/lib/Sync/SerializationException.php": "18a8899fbf5fd54b3c00c8ef9954a0f1cbababb962b7c2db67f8cd9f9ddc1216", + "vendor/danog/ipc/lib/Sync/SynchronizationError.php": "f40f7f8054f108b721932887f62f6ede068c3cf07ab1da4e9a65870b49cdacb4", + "vendor/danog/ipc/lib/functions.php": "dd500ada1abf5747af7e6aa52f8bc9b4e407b1a67a064c251edcd6f8a9b7ac6a", + "vendor/danog/ipc/phpunit.xml.dist": "640f97fd6308b0cfa26bdea3b305e314d9916948ad6bbb3e69c52a6a81174349", + "vendor/danog/ipc/psalm.xml": "4961799da3607fb7698317e10f950b39856e16c02ae479ffd5b28d31bf236f81", + "vendor/danog/ipc/test/Fixtures/echoServer.php": "08df91ec3191e6a65ee55cbdd0354337b01588cc623455aad2bf463799b5e177", + "vendor/danog/ipc/test/Fixtures/server.php": "520282f145971165b56565c225d52689a4e0f626ea041122da73765db6660268", + "vendor/danog/ipc/test/IpcTest.php": "dbdc66251c0c9470def4dbae210d76773c46bd638aaabb897ed94f12965886f8", + "vendor/danog/libdns-json/.gitignore": "f0bfde2d9320509f1764870e061de56c1f0bd7a45281d82ae17832a0a8957951", + "vendor/danog/libdns-json/.php-cs-fixer.dist.php": "ed3405fa9e2eec9738384e65de13a8652fe39be09f7af2e8b317fc365b6b9213", + "vendor/danog/libdns-json/.travis.yml": "21280015a3000b9ab387386a9630e9b10ce6775ecc27514c0e008527101b5e86", + "vendor/danog/libdns-json/LICENSE": "eff216d768cf4549198f24abbdb80f55fec10afb5876920291993d8d59c3aa47", + "vendor/danog/libdns-json/README.md": "ebf7397249cd162821ce770ff28377be20349c478416c7ba16d2f4ec193046c6", + "vendor/danog/libdns-json/composer.json": "d06afda1f7b7dc8c3209ebd46fab935986f75f70414208311c66b6cc6580411f", + "vendor/danog/libdns-json/examples/.gitkeep": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "vendor/danog/libdns-json/lib/JsonDecoder.php": "54d75600f8b7ae4fec1c1863c0de73e79d53980aa1c895bd6156da633698fd99", + "vendor/danog/libdns-json/lib/JsonDecoderFactory.php": "8b4f3625d613ce8758ef474064a0c7a9bb6ff81c046e762f1d823c70ce2b2731", + "vendor/danog/libdns-json/lib/QueryEncoder.php": "e53efa0e5334eb209e80474056d9c4d105db14fcedf39967e5a8c080c54539fd", + "vendor/danog/libdns-json/lib/QueryEncoderFactory.php": "3ba84da1229e2e278581ee5faaebf2e77fd28c8c19220a9b2ed690c4b046468d", + "vendor/danog/libdns-json/phpunit.xml.dist": "6cb69d48760426a3023e385aa5b87bd8f6bd4e3071c37bee8341a2e4deb28f24", + "vendor/danog/libdns-json/psalm.xml": "4961799da3607fb7698317e10f950b39856e16c02ae479ffd5b28d31bf236f81", + "vendor/danog/libdns-json/test/JsonDecoderFactoryTest.php": "cd942ba54ecc4943a7968b0fd39572fa3ffee3f45a4d5845661c3bf15e3eb9ab", + "vendor/danog/libdns-json/test/JsonDecoderTest.php": "89a9350401dc605d49e1cb8e64d73a294b12cd509ea233ac0109fc84360227bc", + "vendor/danog/libdns-json/test/QueryEncoderFactoryTest.php": "6e6971edfc5d6f3a32bb3400d7b4a40066f2cd3d6ef342dfa3cadd80ef48973f", + "vendor/danog/libdns-json/test/QueryEncoderTest.php": "fd8538accecc7381d1670eeeb4a3588e26a14ce5e7f273509564aa37a6e85a9c", + "vendor/danog/loop/.github/FUNDING.yml": "d32aff5b00bb9eae134a36c19ba9680f222d4aa62d4af8b1e349769fe98e85dd", + "vendor/danog/loop/.github/workflows/main.yml": "454c61f954a3b3f3910bcbcc52878249efcfa9f25c1a0aeff0d6251df9d75691", + "vendor/danog/loop/.gitignore": "7aaf4fcebed10e30dba385418de0e8d039fd425d784b96605b1c21f2a17aeb7e", + "vendor/danog/loop/.php-cs-fixer.dist.php": "579e3f266e1b2e456343d181cb5c54e40bb6e77dad88bfb2efcd0b7dfc0f5a48", + "vendor/danog/loop/LICENSE": "30f46fa760c0c1f5d98504008487928f496c61043c304a3fe1624e15b3a7fb77", + "vendor/danog/loop/README.md": "47059cbba7664d2d091d470015c86bc448bb2c329ab6c736e6d6af10eca9dce4", + "vendor/danog/loop/composer.json": "1e55c4a5bcf86a146f6850e162869e166082e8f8639a07e4404ef699147cedee", + "vendor/danog/loop/examples/GenericLoop.php": "fa2572c2885e8efa059639d8286d2449df792809d4e23f7cf01fc2b5e3efd13e", + "vendor/danog/loop/examples/Loop.php": "69ded3ca8ddba3ad9c5fe6981330cbb76fa05c547e585db90b54d36b9315f0c2", + "vendor/danog/loop/examples/PeriodicLoop.php": "adfbfcff8a53f030959afbb762a8934ee775f468cc709686180bcf54899cac16", + "vendor/danog/loop/infection.json5": "819676233f92c8095236063d0af7b625dd95caa027e2805ae544b3bd3af58985", + "vendor/danog/loop/lib/GenericLoop.php": "a1452b0ec5c89a04448a60acb7d39a5b8e3aafcf659fedce88d053e7a064b359", + "vendor/danog/loop/lib/Loop.php": "397ebbb77587b95a36d64e73b3cfba3a614259e978f3638ace86e1aed1f0ba3e", + "vendor/danog/loop/lib/PeriodicLoop.php": "aa96e010d9075138e8c8dbc27cc9629f7a93a446fc483888a53fbc8863b34f43", + "vendor/danog/loop/phpunit.xml.dist": "a441a63283bda2e7379129be3ea96ce93d5f91880b190b2ad9d0ba2a74b48aa8", + "vendor/danog/loop/psalm-baseline.xml": "c4a5384a824b29519780c9e8408a2b699fb5906c72ea5f60a9f2454de86586ad", + "vendor/danog/loop/psalm.xml": "ba02d0f19ab58876346aa553b34fc02636e13ba4f962ec1272ada5675d8e0db5", + "vendor/danog/loop/test/Fixtures.php": "cae6a189844181c5d433467ecef2d3bf166ddbc97466da23d37fdbc525b9fe2a", + "vendor/danog/loop/test/GenericTest.php": "d52281a3b81fc45f5c858e983a2652b01646402e7f1b02d741dd251f866276b1", + "vendor/danog/loop/test/Interfaces/BasicInterface.php": "4e97dd218da2fb9b8391dbb2b4251725894cfaacfb25f96d274c7654dcee366d", + "vendor/danog/loop/test/Interfaces/IntervalInterface.php": "84dfd4c37982cb97af9e2a3783cd98109b4d2bc6ac5c42834f7d17e09884ed77", + "vendor/danog/loop/test/Interfaces/LoggingInterface.php": "e830216823258d98651d42238ed96bbc5e3e26c4f9aa46cc7c79abf915c3012c", + "vendor/danog/loop/test/Interfaces/LoggingPauseInterface.php": "7e9435182e06b198fe7b9e6c7fe95974c31128cdb7070b3478728e7567faab1a", + "vendor/danog/loop/test/LoopTest.php": "b3dc028124755095a853bfef89547dd4031a3db5894de7184ec1ff84690239c3", + "vendor/danog/loop/test/PeriodicTest.php": "7678d3c30e81ae27f137a77ebaaf99d8e48f45436380f9d3ca928c7161dba105", + "vendor/danog/loop/test/Traits/Basic.php": "a142d1944f8f2c9e318bd18b1a846202ae271139945cc1b4fe9a152a17ff321a", + "vendor/danog/loop/test/Traits/BasicException.php": "755a1e1dc7a4f9cc7e00022cba4225974c11d2b8b9fc3b51821b93fa12def6f2", + "vendor/danog/loop/test/Traits/Logging.php": "217d614489ca869e57d13164fd28f97530373236755f724cd081706c9962f2c9", + "vendor/danog/loop/test/Traits/LoggingPause.php": "b4c61ca0bf08f42e466361560b1bf9050299342649a6007cc036da4cf77c185e", + "vendor/danog/madelineproto/.env.example": "1faa2a097db34870da700695fd27c91aafc253ef614204423c87dd2a9e7b3852", + "vendor/danog/madelineproto/.gitattributes": "e547789f2db16032af766dcd086c02cd099e67f7002bb488e110e0117c25d209", + "vendor/danog/madelineproto/.github/FUNDING.yml": "d32aff5b00bb9eae134a36c19ba9680f222d4aa62d4af8b1e349769fe98e85dd", + "vendor/danog/madelineproto/.github/dependabot.yml": "ec98c9cfc9f5cf4cb81588992ac06ec886ef7f63c856b39c523addb10423422d", + "vendor/danog/madelineproto/.github/release.yml": "73fc02bd3a95c9442e91196a7ad43d7104050b9abdb5c84631f6badcb0e7c43a", + "vendor/danog/madelineproto/.github/workflows/autobuild.yml": "14d122e94cb0564fbc6276a38ffa824b169039882f2209d402341b7556a64d60", + "vendor/danog/madelineproto/.github/workflows/automerge.yml": "46a5be0708022bf00cd3c55fcd33b6608ba66a477a439e6d0f61ff81df1adc5d", + "vendor/danog/madelineproto/.github/workflows/ci.yml": "0cfcd495cd0569a2bc977f5ad67bfe1052884ccf6ce10c8d7369b0e1cd97bf90", + "vendor/danog/madelineproto/.github/workflows/dependabot-release.yml": "d1db36226f79c3a1342df113ccb2293ee498464223c1afc8ff8e419bdbc53ac7", + "vendor/danog/madelineproto/.github/workflows/pr-labels.yml": "720eacd10724cda713c9e189898e6267409205ec319468fc83883c653dddec84", + "vendor/danog/madelineproto/.github/workflows/prerelease.yml": "3fb3ae6060d59fe780a8e109ef1033d188520420d9e6bdafed0d156f93d2262f", + "vendor/danog/madelineproto/.github/workflows/pull-request.yml": "ea24a1073c86a0c185ca4afa585011096be24816efd4322144a42f4d7c984f32", + "vendor/danog/madelineproto/.github/workflows/release.yml": "f7a673c36416bb8a3a8077305ed203f672dcacd5aac10789d91222e9bf8b7b7b", + "vendor/danog/madelineproto/.gitignore": "fa9f6883d8b31f84c58a87ad3f2ad9d5aeee3ec35fc733e88406a6087a6d4be6", + "vendor/danog/madelineproto/.gitmodules": "0be1b15bd151a137d0eda35e859e2a44dab559f77f74f6f50b628cec212044cb", + "vendor/danog/madelineproto/.php-cs-fixer.dist.php": "50fbd64be69e814256abc3d86ea1bb9c71f4a77efe20e7de1cf269abc652c2f2", + "vendor/danog/madelineproto/CONTRIBUTING.md": "4b4213767922e7b3f8e7e12d4a771494309d3bce9867cbbb81a64bb737d59851", + "vendor/danog/madelineproto/LICENSE": "57c8ff33c9c0cfc3ef00e650a1cc910d7ee479a8bc509f6c9209a7c2a11399d6", + "vendor/danog/madelineproto/SECURITY.md": "0c6710a81610c0fbca17d32d52373950dbf24f83a1d5e84020486f69cbaec694", + "vendor/danog/madelineproto/composer.json": "579e8ab6bb58af8ec91c11fc12f18693225bc8e4d5e1b2ba4bddec61cb417fd0", + "vendor/danog/madelineproto/examples/PluginBase.php": "b164638114bbb205fd87104f09aa11447e293d75b2fb493a9dd9e50150003cff", + "vendor/danog/madelineproto/examples/bot.php": "ab08b6e6fc61f8f0c8864dd777b2b6c80a40e0a9b57796e07d7228e1d654a14c", + "vendor/danog/madelineproto/examples/combinedBot.php": "bd3b3152e0df0482d233deee69a6cc58cbc4acb75f562d6c4344cd74d312f668", + "vendor/danog/madelineproto/examples/libtgvoipbot.php": "60017993a9db0011fc67abbb42a205465dc3a3bf8b7bc5258a4f043463f65a11", + "vendor/danog/madelineproto/examples/plugins/Danogentili/OnlinePlugin.php": "9b0fa9b521334ab18f5890cf102189fc63a1a1266ed1f92c11ea2393937a3218", + "vendor/danog/madelineproto/examples/plugins/Danogentili/PingPlugin.php": "275e86e24331d00d361ef4a8948d91870aeba7d0696a63c086f8f4c921e17a61", + "vendor/danog/madelineproto/examples/secret_bot.php": "2eda80efdc0be46a78f08ab8b24522c4fc37bc47b002835b571567308aa2f375", + "vendor/danog/madelineproto/examples/simpleBot.php": "4d34e4e020e86469e71712b55aec639afe6bf231d97b4bf7ffbfcd3307b34b63", + "vendor/danog/madelineproto/examples/tgstories_dl_bot.php": "622c26b6057a984cef832acc8f7b6a35030e4db92b1f15aacc80bacb1c16bc99", + "vendor/danog/madelineproto/phpcs.xml": "e3e8b89077a156aeab302dd2f56efc25602f2e8177c18adb485cd6bab97fd285", + "vendor/danog/madelineproto/phpunit-light.xml": "d5ac89bfa9da06f48231b7639eb91487e6bedaebc159763a8b35df17323ef63d", + "vendor/danog/madelineproto/phpunit.xml": "adca612f09807422cee08d73a0c9d3e21d3ace9f6c91b3eb75da336cb8a8584b", + "vendor/danog/madelineproto/psalm.xml": "5d8f22e39a95dea25bcbb02d690d3968339fdeb9ac3da2cbd1fbe25dabb1e0d9", + "vendor/danog/madelineproto/src/API.php": "fd38d7e9c615442c5f1957539fc117d7165e5f09d54f6b3534d91385750b909b", + "vendor/danog/madelineproto/src/APIWrapper.php": "338df165b2fa1181cbd9761b999e5613fa14dbb99da90171c2d6bcba3388b4b6", + "vendor/danog/madelineproto/src/AbstractAPI.php": "265bdc96b822245b0117394960939b71bf8528772babc4021fb798e481f38dd0", + "vendor/danog/madelineproto/src/ApiWrappers/Start.php": "ff9a836becef64d5fbd258c5c4035c5c84e1d38e7ad023d89bdf8e086287eab2", + "vendor/danog/madelineproto/src/AsyncTools.php": "22ebd5e152196f15377baae3d43941e84c76422cf34e038243bbdcb313637b3d", + "vendor/danog/madelineproto/src/BotApiFileId.php": "d8a6b7d6f25cf6ac6bdc888644e1506fb99b36dc935917fbb3c39b027fd49407", + "vendor/danog/madelineproto/src/Broadcast/Action.php": "0f5d96b2c24074b17bb8ac9b2f57ccb196ec982bb98731f6b356aac5f03009e6", + "vendor/danog/madelineproto/src/Broadcast/Action/ActionForward.php": "81ce776aee9b390afd6cf11d8373a471ad603b9e2d475e82aa12ba7e9031316c", + "vendor/danog/madelineproto/src/Broadcast/Action/ActionSend.php": "ec0069cf52855100b852ae75bc58844ddcffe908c0273dfb0dde0b137028b5da", + "vendor/danog/madelineproto/src/Broadcast/Broadcast.php": "11ff4a91c96e3a89ff02d9b0d5f0ce491b2d782ed1e5d3dd2420833d1a9063dc", + "vendor/danog/madelineproto/src/Broadcast/BroadcastCancelledException.php": "1925ff1af92ae73106db74a2dec64804a0969993dfd0ebbd4a095856d7c69bd7", + "vendor/danog/madelineproto/src/Broadcast/Filter.php": "a8aacf306438ed5b53b997eeb07bee2520c35a1520b813c17be7de43a8cb72fd", + "vendor/danog/madelineproto/src/Broadcast/InternalState.php": "8ca424ead5cb34f10f565e17e52b69167cc119a095b260a389a98036aa9de318", + "vendor/danog/madelineproto/src/Broadcast/Progress.php": "02cac6647b22efb45e5538208c618a2b6d1bf67b9faa4a84cd265a5fc8a1799e", + "vendor/danog/madelineproto/src/Broadcast/Status.php": "55920995551c7dbedff78bce8df7f02302991c9e4aa803d7f7c91a6dd1cdbd6b", + "vendor/danog/madelineproto/src/Broadcast/StatusInternal.php": "d4dca162da0a7cf50952c70d609b417f17026199f1378625cc6187a49ebb9df2", + "vendor/danog/madelineproto/src/CallNotAllowedException.php": "1dc036e59ce4c8d52659c8cf526954ef893d714a49316dff822fc0f61e117a01", + "vendor/danog/madelineproto/src/CallStream.php": "a30729f84a025a717c40f323d841227b55f617c1587ca86c3f84d5347f17c086", + "vendor/danog/madelineproto/src/Connection.php": "090c2d916c17c0f01cdd529648dd5ad6db358b87cc7c83b5664703b056017072", + "vendor/danog/madelineproto/src/ContextConnector.php": "7150cc7ad72014c4f29a32c1de476bfa0534d13ff3ce37c92bf798dac8b6b062", + "vendor/danog/madelineproto/src/Conversion.php": "4227d2f3a4d1d956e662f9b76da38022788868f996713fdd5c9c0b05b0bb519c", + "vendor/danog/madelineproto/src/DataCenter.php": "deff5eb753d7a77e2beef459c5d70d154701b288f2660a42107b29dfb757afb5", + "vendor/danog/madelineproto/src/DataCenterConnection.php": "b92f733e2519f130167fd853652a912e7d9ee4ed7647e0b43353635ea0a921e4", + "vendor/danog/madelineproto/src/Db/CachedArray.php": "bc23bba950636a588d0368963b18fe58013922d0efc76384d42099ac79d1d14d", + "vendor/danog/madelineproto/src/Db/MemoryArray.php": "8261b365b222e0e025b943b1e2ba518e1bf6a19eac7d0a0d6dd7c26effd1a876", + "vendor/danog/madelineproto/src/DoHConnector.php": "348997238aad900bcaad4577fc9caa08f6e2d74b262de7b6ca40d2d6f04a0264", + "vendor/danog/madelineproto/src/DoHWrapper.php": "072176dbc8e24719f8d0fb587d8f2b70046c80e7c870c7108d5491e0373d3287", + "vendor/danog/madelineproto/src/EventHandler.php": "5d87e0a32473f3ea990b94cba76332720d3ad5dec0558b2b432aff42e5b92afb", + "vendor/danog/madelineproto/src/EventHandler/AbstractLocation.php": "379cbbc26da10967d26cacb5eb6ade688a2facc0553076ae6f8210606f3febf8", + "vendor/danog/madelineproto/src/EventHandler/AbstractMessage.php": "93c3f4241ce461b897765ccb8b06b727216bb4eda53f828b37e4473106cd4881", + "vendor/danog/madelineproto/src/EventHandler/AbstractPoll.php": "16c108e8c08e81c094df9914c831d685fa70c8f897589a04be1ab1f07670eed1", + "vendor/danog/madelineproto/src/EventHandler/AbstractPrivateMessage.php": "a8cf8692e13129d309359cc8ef8f79cf77d20d38932e788fbf9565e23bf0165a", + "vendor/danog/madelineproto/src/EventHandler/AbstractStory.php": "04378366abe7f094a64ffcb6700a18f875c827de09aa2fe62222270196d7e727", + "vendor/danog/madelineproto/src/EventHandler/Action.php": "3c46fd7db38e3d70916d44489067cab30397b56518b8b950e1f2356ddc60835c", + "vendor/danog/madelineproto/src/EventHandler/Action/Cancel.php": "9ec7ac3ae6cd90a513426fb7bbfedd296a0cce6dfd2df75409345e3c3d7ba0f0", + "vendor/danog/madelineproto/src/EventHandler/Action/ChooseContact.php": "808091cce619742cfda4ed688cb018a3ff9611805e321fa896bff4208ee115c5", + "vendor/danog/madelineproto/src/EventHandler/Action/ChooseSticker.php": "afaaed7ba9e50cc2794ed9029f3876af7512a6b17b930682142388f33b5376b8", + "vendor/danog/madelineproto/src/EventHandler/Action/EmojiSeen.php": "b2a03d7dfc947222c151d23da28ac44b8925ee65c661c7f1e4252e144b792fa3", + "vendor/danog/madelineproto/src/EventHandler/Action/EmojiTap.php": "bcd434c0b8edf3b487b0bd030d0d1d77ad55d2addbbe6052a48b613c65ddda14", + "vendor/danog/madelineproto/src/EventHandler/Action/GamePlay.php": "6ca989939c22fcf9c8b051eb151c72c7831c62fcbb14882c36fb883a7624efa9", + "vendor/danog/madelineproto/src/EventHandler/Action/GeoLocation.php": "fe598b8edcb81f5758101b3971463d2ab4d10e5eeb98e3c7ea1bbc8af6b1c1eb", + "vendor/danog/madelineproto/src/EventHandler/Action/GroupCallSpeaking.php": "d24cedd73d8e5c46bb3ea6f2c9545b99bdba11a3ffeb904cf3e9a3178c5bf40d", + "vendor/danog/madelineproto/src/EventHandler/Action/HistoryImport.php": "3a5abedaf2ebdd58009c56c2709c1da9aa90123cd46e8d872055423fb117a6d3", + "vendor/danog/madelineproto/src/EventHandler/Action/RecordAudio.php": "e57a5781190d682f4fa33dab8a112fc579b170bb9bf5e4268977aa556bbdc119", + "vendor/danog/madelineproto/src/EventHandler/Action/RecordRound.php": "37cfecbef5f50f9dbdb3c3e059c81e31849398588be05e753ec79c31dba80664", + "vendor/danog/madelineproto/src/EventHandler/Action/RecordVideo.php": "ce929a7122d470256a46688a4e128787b9539d56d9ba8b4fc0ac99d5289ded72", + "vendor/danog/madelineproto/src/EventHandler/Action/Typing.php": "65bdf4708c08a30f8ef7b961d51730e7e75ae4762b1794bcc68ecd29e99ccdb0", + "vendor/danog/madelineproto/src/EventHandler/Action/UploadAudio.php": "c3c5d5c0124b39923eaaa4632cd8ff6786de243e476f8b364430711d715fd046", + "vendor/danog/madelineproto/src/EventHandler/Action/UploadDocument.php": "929a153660ee4869f96deb5865f91254b77469aa944c07199374e61671624d1d", + "vendor/danog/madelineproto/src/EventHandler/Action/UploadPhoto.php": "6d4dd072c808d4862be015beafc39eebfa1b6a92c65bedfa04f5ab7c763af424", + "vendor/danog/madelineproto/src/EventHandler/Action/UploadRound.php": "2878d10c6a8bd8361ab68b7d27d38558b0c7cf05d409309f7d1aff7ffa93790e", + "vendor/danog/madelineproto/src/EventHandler/Action/UploadVideo.php": "ed3edde4ca3846cc89ad12b5ebcbd86df8e1892694b1c97ffc5000db07bca360", + "vendor/danog/madelineproto/src/EventHandler/Attributes/Cron.php": "916c78b9e086a6318f457180c4a0673f0c4f8784e77a8d8748079928198aaaff", + "vendor/danog/madelineproto/src/EventHandler/Attributes/Handler.php": "57f0cabbec299424f6aa3bfa76b19630043a450d5a46cbf95e26fd7e4aaa3b10", + "vendor/danog/madelineproto/src/EventHandler/BotApp.php": "c5d62f54dbf69993a06ec97f6e3d7cfe79768363cb179e30c804dcce3f5a4e48", + "vendor/danog/madelineproto/src/EventHandler/BotCommands.php": "08844e59367e3f572dd34cadbf0fca95b94941d9c97420d7d8aea29ba567e198", + "vendor/danog/madelineproto/src/EventHandler/Call.php": "3e608eac97e5c162fc2d9c71c0d26e4465007da5ecc5fdfd02b68de767d9be65", + "vendor/danog/madelineproto/src/EventHandler/CallbackQuery.php": "725806b0af55db343b2ce3c3d68ccb6fbb5a87f0d0e10fb56eda0896ab61cada", + "vendor/danog/madelineproto/src/EventHandler/Calls/AbstractGroupCall.php": "f1251c145d13b1597d0c1813ea7b426d9795fcb986f0677d5a394f78d47437c1", + "vendor/danog/madelineproto/src/EventHandler/Calls/AbstractGroupCallMessage.php": "475a38b171426735afeae09ef9feb575064ed3875a0de3690a78dfbc8a23e728", + "vendor/danog/madelineproto/src/EventHandler/Calls/AbstractGroupCallParticipant.php": "f8e93ddd20c945ad4fc9b4220cbceae4372931396114e5cfdb3bdb0af8a5a3b6", + "vendor/danog/madelineproto/src/EventHandler/Calls/CallDenialReason.php": "82a94ee62c7a2235b6568d58025e562801fab8947f2a24ddede127f06878b17a", + "vendor/danog/madelineproto/src/EventHandler/Calls/CallStreams.php": "176c3f3658d91291738bfc7c576d28f8f5915542fc3881df7d22a9cc1e0cf275", + "vendor/danog/madelineproto/src/EventHandler/Calls/ConferenceCall.php": "38b6a499c619e949554eed01f636706af24444c441376592e6f0f534d3973e84", + "vendor/danog/madelineproto/src/EventHandler/Calls/ConferenceCallMessage.php": "b300fe2d65ae500ae036aacda903b5d11dcf20e4fe2cc9124d944e351f89fd5d", + "vendor/danog/madelineproto/src/EventHandler/Calls/ConferenceCallParticipant.php": "75a94c6150d8f55c9f360b1c1ad816293b6afe481529192088fc0cba63b96398", + "vendor/danog/madelineproto/src/EventHandler/Calls/GroupCall.php": "41380e2b44660fd96f6a4e0fd1d72a7eb8ba4a11f74aef01d2276fcd1ad77049", + "vendor/danog/madelineproto/src/EventHandler/Calls/GroupCallDonor.php": "f9152dde35760c71c92cd8169d951d7ef57592742768d9ff0184df04695425de", + "vendor/danog/madelineproto/src/EventHandler/Calls/GroupCallMessage.php": "39b9e6cec892f3cfa2949abf6842cfc6ccb5298dcaf6613134f5c9cab8e57ebf", + "vendor/danog/madelineproto/src/EventHandler/Calls/GroupCallMessagesDeleted.php": "ddb0f43810a83e378a87ecf04f5ebf36eafda1aba74a16d7537bbf6247659430", + "vendor/danog/madelineproto/src/EventHandler/Calls/GroupCallParticipant.php": "8b9aab832e574ededa97ecc3339290f57871a9d23b5b633a59113e46e2b47d9f", + "vendor/danog/madelineproto/src/EventHandler/Calls/GroupCallParticipants.php": "8968f4198c9234d89486d7331dc6f2f43a63f08f431ccdac3d269904171a1ce6", + "vendor/danog/madelineproto/src/EventHandler/Calls/GroupCallStars.php": "94782d6e7c49b99ed150b48cb9e1c43c2dfe982db4dbba3dd57ceed35f092230", + "vendor/danog/madelineproto/src/EventHandler/Calls/GroupCallState.php": "77fb1cd5405fce08843385e7b78f84106debdfd7c34f638b634a22ceef3184e1", + "vendor/danog/madelineproto/src/EventHandler/Calls/LiveStory.php": "3bb470e480555664184479fe5a130f728fe210205f0c3cf2f9f72a40018b86fd", + "vendor/danog/madelineproto/src/EventHandler/Calls/LiveStoryMessage.php": "17d1295b5b939569887ff0a485073b368de82ff9f8141d21434b131ec6b1789b", + "vendor/danog/madelineproto/src/EventHandler/Calls/LiveStoryParticipant.php": "2c4912bd6968d119d5ff2d78d07813eda2215590d6077297ea3ed8ba5a710d8f", + "vendor/danog/madelineproto/src/EventHandler/Calls/MultiCallMessage.php": "15e8d279995796bbe70c14c8a4952f71ee57437118e8da199340ea79b480a8cd", + "vendor/danog/madelineproto/src/EventHandler/Calls/MultiCallParticipant.php": "872e9a61fc45b49db1e4e17cdb3f4dd30c6aa63355bd1352e3d99b0e77e1a390", + "vendor/danog/madelineproto/src/EventHandler/Calls/PrivateCall.php": "ef0d8df8fbd5a7b7b1a7ba167c4cb5a2e6dd7867c1d6c81d8a59d6c01e9a63fb", + "vendor/danog/madelineproto/src/EventHandler/Channel/ChannelParticipant.php": "aeb1c6a7130f2bc4fdfc8feebcc51a0406bf66a3235a7df71af02f06c42add62", + "vendor/danog/madelineproto/src/EventHandler/Channel/MessageForwards.php": "691984fa672027bafd14a7d9d98aa8a35e3f012731af0b1c4d24e0e68c07ebfc", + "vendor/danog/madelineproto/src/EventHandler/Channel/MessageViewsChanged.php": "c51c184e778c177f68fd6015e8df6ea076bcfb45abe545165f897dfea7b7c87e", + "vendor/danog/madelineproto/src/EventHandler/Channel/UpdateChannel.php": "94fb5ffbf1112a239b608bed961ef42420046a3ecefa096e43ec9b0edcd48bfe", + "vendor/danog/madelineproto/src/EventHandler/ChatInvite.php": "481188e2ddc569e040cd732bf527bff37e04beea367e29d10f142315fb24d628", + "vendor/danog/madelineproto/src/EventHandler/ChatInvite/ChatInviteExported.php": "51e5358c3cf4414f3c243420019c4c549c649c8b2b8c9834322a27260ef92d99", + "vendor/danog/madelineproto/src/EventHandler/ChatInvite/ChatInvitePublicJoin.php": "6d80f360be47a1b8af709011bfee9b7f8db1e3b3419348a3ded397237a409959", + "vendor/danog/madelineproto/src/EventHandler/ChatInviteRequester.php": "633a49e4cc57d5dc3bf3cf800e04f6a7f717f7864a105d099e0552086592cade", + "vendor/danog/madelineproto/src/EventHandler/ChatInviteRequester/BotChatInviteRequest.php": "b645648736574fcba815b5ed92a00ec55b0e891d944ab3512c07f4c74c849a25", + "vendor/danog/madelineproto/src/EventHandler/ChatInviteRequester/PendingJoinRequests.php": "1189b3ae276cb7b19f7108a420d9c34e98c025fba34cb9dd32bca4c997d9eea1", + "vendor/danog/madelineproto/src/EventHandler/Command.php": "a9326860dd37b549151d547ca1b7257ed91cec457201f488d77a7dde66f23cda", + "vendor/danog/madelineproto/src/EventHandler/CommandType.php": "7c548252933da96a72be1c654d36f64ff123ae7233d5cd383b4ab653f7b79fba", + "vendor/danog/madelineproto/src/EventHandler/Delete.php": "c0999f9ed0adbfdd8aed6f36d612818276c13a32e1470878fe98aa34c15dcd8d", + "vendor/danog/madelineproto/src/EventHandler/Delete/DeleteChannelMessages.php": "3ba97a0ae939d3632131013535e979630e6eeb680df2a04f3689d55205a202ba", + "vendor/danog/madelineproto/src/EventHandler/Delete/DeleteMessages.php": "bb9ed3f00faefb491c2fdc492c1c2fb8511d9f9815ff84c434a3d62fd9899aef", + "vendor/danog/madelineproto/src/EventHandler/Delete/DeleteScheduledMessages.php": "70d79d3423d8f72a1ec599a14c8b936cf47ab2efee8bcb45b336d8c2d0fb7849", + "vendor/danog/madelineproto/src/EventHandler/Filter/AbstractFilterFromSender.php": "5f9249b6d7b7d8d7e7876447d7405487a3786a126db2b9a81c69d18811d91ad1", + "vendor/danog/madelineproto/src/EventHandler/Filter/AbstractFilterFromSenders.php": "0153857ae20578fe5eb7eb42752e075721a9381c6b8657b856ddbb08982c093e", + "vendor/danog/madelineproto/src/EventHandler/Filter/Combinator/FilterNot.php": "0b67d6d3e727ec8a4dfee898d059759fc0aa59761253db4a3b5a6b11a58d6fa6", + "vendor/danog/madelineproto/src/EventHandler/Filter/Combinator/FiltersAnd.php": "fd9de43e39ab172cc1b2a5bed7e7cd7490525377127efaad816c0f8ee1e02635", + "vendor/danog/madelineproto/src/EventHandler/Filter/Combinator/FiltersOr.php": "cd77b6ee16fd8880a5817c491471eb0ae8ce4cd7b8b4af83621a3b339e12d336", + "vendor/danog/madelineproto/src/EventHandler/Filter/Filter.php": "4cbb2602a5eaef2f5943e4ceaa878e742eef4d57e91c56bc8cc12f2e15a8c59b", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterAllowAll.php": "c3bfe24d3b2a7ff5f30b252454525e56ab30f93604a3410c66495ed14f44c293", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterBotCommand.php": "46cff8472ecb360fc003813c4f9a41cb4bc0ccf0b1f0f1403d354e55b3cdc4a0", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterButtonQueryData.php": "01b106f527600c42b1c366b67b7d69a1beffa0a51338b16a1c7a08cc0337066a", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterChannel.php": "1fc9be3d4d5b720eb5e6f81d220d842e1a2450335cd7cb5c3ea59b9365a97324", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterCommand.php": "f517cc317d6c0aed1a45de55627630e370c92bc5c21be1d52563bc3f5b1fdcb7", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterCommandCaseInsensitive.php": "a7d8d9ab4cf84b2ee6f043c70fb10d2150696e405c04f23297ae33a752d19146", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterCommentReply.php": "ca018b92278df43b79e3626d748539f2a9a33affbca92b72e457f3ab39c6a735", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterEdited.php": "a4d61b527278adc682accee0f772563b9772fc4648525569deb01b5a31948475", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterEnded.php": "c9072f65b270ea780d94bebf52c90e106ad2bef944010e162fee3dbab5629577", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterForwarded.php": "80674b728e3787890e1c7785211ced4152f9aae7cf150901344f0dd4d840ea60", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterForwardedFrom.php": "179f56938063db15b2925ddb24aeb845055fdb27bd9aedbd5a7b0eae95afabe3", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterFromAdmin.php": "a7572490f1413c9d428ab870ab0e0041c35ca69b389e9d79e8a1bc964d2f20c3", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterFromBot.php": "4eda68298c4ab8f3ec1ad0b9f016dd9a527e9056b73998d4271fc717a25c84c0", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterFromSender.php": "e9cbb315ae3f7116dcafc3ebb1aec1d8a1eb45b7595253c4fe93f824e4c6f28c", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterFromSenders.php": "65b4e0ed59e47704fa5019050c554af57ee31236ddc360077e321ae1ca0f46b2", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterGroup.php": "b742220e1ca3cc83cdb69c9704882647000216a69a5b112a4d4ff4d7d3b2760f", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterIncoming.php": "1f9d9a261239cb21c3e021033649a4635c9696fb681612eb54ba87308b853f0f", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterLocation.php": "e54cab918816d9bcd03b5957421d6ab50fc6355f9dc59dc70d97edf872e851c4", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterMedia.php": "dbc25e2b172ec92c3cdaf424136387c7f9a33ee1424d2fae0e664691d997478d", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterMessage.php": "d960e0cd6ca7bce20f7042e8c3f4501291ed75b16b7264fb430d709d9ffcf167", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterNoMedia.php": "4b3302ffb68fa7e04d69b2fb3777b0fc4b05a34aa19bfb2e1bb7000e85d6193a", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterNotEdited.php": "69ee39aaa418e9139bb7aa70dc5845e24fc16bdfff285819dc4bedef68f4f1d0", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterOutgoing.php": "4192b5fbda92e8c39074d4daff311b6d9aedb8e904f68bc410e5ce803e956be4", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterPeer.php": "5cbd6044e165eb149a2c3786c5a7dafad1a27a35b70e378ac92074a7ceefc8a0", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterPoll.php": "0b266faf03e7ba126e1445998fab60946753e9cc657bc2b5b9fbbfbd15fdef33", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterPrivate.php": "9eee9adc3b9fcd8afa8d92a06694e4e2b4ee1c2ce6c3fe42548eb752430a9fe9", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterRegex.php": "ad343f8e9820d66b81a436d5ef03414f475c231854110b7038673559663d90f0", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterRegexMatchAll.php": "d682b0ababa66c6377d67f2d466b6f3164ed7cc127c4b082016c78b52e1a5f17", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterReply.php": "1172319ecb4b75cd311f7edf0684032c2deb8e4cded4c09984542afcff68a61f", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterReplyToSelf.php": "9b3b6058cc26b703181063feffffe246538c10b7850e5859c533f9273616b702", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterRunning.php": "a0b2cfce0fafde795a381da91285c51c2e6f7a8006924d4d6f0033ceaaf46dc2", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterSecret.php": "0496e85bc217a9792da4116b94d49c263f7cc3c53bfa4965d0d3ec2c5c71c4d9", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterSender.php": "53c3054df7aa708707b686a2cac7a5ffcf4c5827e2f388e1df05f9049a6d5900", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterSenders.php": "74a41ab0d199b4be7ce230debe58af35c8203f66c278a3d855f8ae45b92b94cd", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterService.php": "facc21e97463401e4555fb1022aae2198872b56b0f79d51b76a72ba3509893f7", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterText.php": "f9a16875cdc379f735150ac90739ffed1858695c6d3771f1da855de53b6f6a73", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterTextCaseInsensitive.php": "9671c2fefcc4200f7ad7af20a94446cf00c9c2ab3a47e8e0ac6e56c081b23bf1", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterTextContains.php": "cb99033638d10bab34eaa40e96e541c07688c972b4ad04f084fa8bfa40744ba4", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterTextContainsCaseInsensitive.php": "8da334b2e4a06b9b12193aa9c6117a15bf3f24705b9d350b6369cf1c220ab3e2", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterTextEnds.php": "fc7ea4c330614c0e9afc3a226b4248c1c39a9bcbcd4f26a38b86116953a8f9b9", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterTextEndsCaseInsensitive.php": "9f8b25f6924444e66e8e0a19e5ed59f5ab76f07f9dfe833a4341f4ad30f54bb6", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterTextStarts.php": "33af278ac4440d9916cb056cb2a7d704d3e0c5a81db25311934b5ac561f831ae", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterTextStartsCaseInsensitive.php": "6a480a356d5ad61c0ec48046c7c8f6d6319baa49e178fcecc735be6d571b5687", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterTopic.php": "1eea99aa2a077d19abb8b54352e701c2233f1cf879e0266ef8676d1ebfa139ef", + "vendor/danog/madelineproto/src/EventHandler/Filter/FilterTopicId.php": "657a0ef8f91b8d3b732764654f34fe6b8bab64849839481a44a18b8960ab6fa2", + "vendor/danog/madelineproto/src/EventHandler/Filter/Location/FilterLiveLocation.php": "93bbef8473c0b65cd906912aa704f88f9ef5a9fd64649a6d085b4d2f11024844", + "vendor/danog/madelineproto/src/EventHandler/Filter/Location/FilterVenue.php": "78f673477db9fab726a94a8fbd49203057879b88569e23eddbd749655b26904e", + "vendor/danog/madelineproto/src/EventHandler/Filter/Media/FilterAudio.php": "298e31e0d6d6884acf2c47f0c2da395b61071c0794c2a459f5a769a60ecc02e2", + "vendor/danog/madelineproto/src/EventHandler/Filter/Media/FilterDocument.php": "0999f0e6a8ce9bf955ef30b6559173498dc40633a69764bd799a0b9a05014785", + "vendor/danog/madelineproto/src/EventHandler/Filter/Media/FilterDocumentPhoto.php": "81d7b19afa6a4969256fb4704cc42369df30478acd3e5e50f65e86ca7b338554", + "vendor/danog/madelineproto/src/EventHandler/Filter/Media/FilterGif.php": "c04e3a3d34bab25b564f1c47e079fdbe9f524759227cd92058630c63e742df46", + "vendor/danog/madelineproto/src/EventHandler/Filter/Media/FilterPhoto.php": "890f5c40775497a9a2c200f8c87779ae3acd71988ee3e7b4e9c2bce5e4be32fd", + "vendor/danog/madelineproto/src/EventHandler/Filter/Media/FilterRoundVideo.php": "5ade00994ad9c8410354bed98bd6557824fdc4384152a6e0a5e4bf7a9f7178ea", + "vendor/danog/madelineproto/src/EventHandler/Filter/Media/FilterSticker.php": "48b5dad7819abac433ecc2710a750a5257d3b5a8de8861f8321ae4a9ea88b2d6", + "vendor/danog/madelineproto/src/EventHandler/Filter/Media/FilterVideo.php": "bb293c4059eede2f44ba3e10d7c43ca91cffca9ae82e1abd613862ed33e21c63", + "vendor/danog/madelineproto/src/EventHandler/Filter/Media/FilterVoice.php": "05a76fee04d0007bf11e8f955e5d7203fe5a3e530f2a1f4178e4362132198e94", + "vendor/danog/madelineproto/src/EventHandler/Filter/Poll/FilterMultiplePoll.php": "7acd60c0f60792c0846c555b424d6e17663ebd2ca9487839cf3da7b7648250d5", + "vendor/danog/madelineproto/src/EventHandler/Filter/Poll/FilterQuizPoll.php": "49c5a2f7308f0124eadfb6023a4a5eb5806b54cdfb9537583183c60f77052393", + "vendor/danog/madelineproto/src/EventHandler/Filter/Poll/FilterSinglePoll.php": "aa10981341a0f4f6559d8de554daebcb179b64a3620853c7437e72e9f19f1a3d", + "vendor/danog/madelineproto/src/EventHandler/ForwardedInfo.php": "69ff24ceb81a222131a4dc7f5dcfe1122555db604d965bdb8fbcf5ec4ef68d09", + "vendor/danog/madelineproto/src/EventHandler/GroupOrChannelMessage.php": "c6c171fa7f99324fcde87777b7b5881d280182a547fb760c86ed7d4c5b54e830", + "vendor/danog/madelineproto/src/EventHandler/InlineQuery.php": "2588dfdd1d622ec36f3419515f24c52c75108ef861a470547ae3f9031171002a", + "vendor/danog/madelineproto/src/EventHandler/InlineQueryPeerType.php": "fa56d38851c7281621e189fde66cf6bac71f4568a462838ff888b94682651fdb", + "vendor/danog/madelineproto/src/EventHandler/Keyboard.php": "18e9a86f253c6397b1e455f9d679c3b0f8477164455c292299cb1af21ff4c89f", + "vendor/danog/madelineproto/src/EventHandler/Keyboard/InlineKeyboard.php": "413ddf481facae27c8a89cf9bfbb0eed22cccddc1a3111f3dd8203fe236842d9", + "vendor/danog/madelineproto/src/EventHandler/Keyboard/ReplyKeyboard.php": "15adecd69c87772bc5cf32cc64226930bfa8d243639cc95245635b8c2f9129fa", + "vendor/danog/madelineproto/src/EventHandler/Location/LiveLocation.php": "08d4bd88009e20693eecc35dfe5639f4782f87faae42bd73c49a9e79476c5d06", + "vendor/danog/madelineproto/src/EventHandler/Location/StaticLocation.php": "52eae9b6b3683b27a959364270c58f6435830d046564d397f5f48f576af841db", + "vendor/danog/madelineproto/src/EventHandler/Location/Venue.php": "39c1bb18183a5dc44405d7c0b3a59e79f4ff8b21ea702ae75b77a344b1983b91", + "vendor/danog/madelineproto/src/EventHandler/Media.php": "c5023f5b9e8728cc36a6dd94ba553675e146252bd0e4e4a3027f40aa3748e721", + "vendor/danog/madelineproto/src/EventHandler/Media/AbstractAudio.php": "c0c45e83810f92f9d868af81b4e06a759dd938c21382c4538eefdf6d627c9794", + "vendor/danog/madelineproto/src/EventHandler/Media/AbstractSticker.php": "b603cfa8287764506e2e9342b82829131087cbbb0e3bebd5b5cd831df382879f", + "vendor/danog/madelineproto/src/EventHandler/Media/AbstractThumbnail.php": "c5a0265e97407e484108f9616a846ca4c6ffc208a90130df9ece8acc45c3a857", + "vendor/danog/madelineproto/src/EventHandler/Media/AbstractVideo.php": "8e615c13e0e0337b543d2177c92034c7f909423754fde25319a6ae9de9509f48", + "vendor/danog/madelineproto/src/EventHandler/Media/AnimatedSticker.php": "8de8133ae615548375db2f499a2b6ea2023f2438d5f1072f0d818dc87a306134", + "vendor/danog/madelineproto/src/EventHandler/Media/Audio.php": "36c49c35b8ebdb37a276123728faa1bcfc8254d0cca9a0866fdc9b7e8e39e5c9", + "vendor/danog/madelineproto/src/EventHandler/Media/CustomEmoji.php": "f59137897770703554e944395cea96a189755f0ab68975a3a939f9f7399bb97c", + "vendor/danog/madelineproto/src/EventHandler/Media/Document.php": "b05128a1260ac59675b2bf43ce59f3fb9cffd3d4cac707baa58e1200347e1420", + "vendor/danog/madelineproto/src/EventHandler/Media/DocumentPhoto.php": "d487506d892b2f4dd2e79e60625510c058b706a5df434277a42e12e942b46b46", + "vendor/danog/madelineproto/src/EventHandler/Media/GeoPoint.php": "aaa1a70f1b5b3c006e7087a8335e3e298b69f1c0623815d83ef1bb1103a4d5d3", + "vendor/danog/madelineproto/src/EventHandler/Media/Gif.php": "a9bfead03942681c0938897925357625d9e84b7601ed3509e08f5d17d5f934ae", + "vendor/danog/madelineproto/src/EventHandler/Media/InlineThumbnail.php": "4575240593650379871bbb73460415f54052d7eea5099bac73f43ed372c9de9f", + "vendor/danog/madelineproto/src/EventHandler/Media/MaskPosition.php": "1e0d27747ce30d8451c771f595b263de55fe2e03a9afaebcbb6e17cbea2b2dc5", + "vendor/danog/madelineproto/src/EventHandler/Media/MaskSticker.php": "d272228f60586e0242c1f1e88cd7f92c405ec88721a6d3ba5c7dfc532a028edc", + "vendor/danog/madelineproto/src/EventHandler/Media/MediaStory.php": "9b4a7f8495b55fc013e3474ddd6976c19a9a50dad2a69a937a1f3ecc8559629a", + "vendor/danog/madelineproto/src/EventHandler/Media/Photo.php": "581e33fc538e86522a0af6338c58f6ef643605536c0ea011def5bb020172f45f", + "vendor/danog/madelineproto/src/EventHandler/Media/RoundVideo.php": "bd0bb9eee6542d539b15a0fadb82dd638db8f29a8c5f1255302267d6aa88b652", + "vendor/danog/madelineproto/src/EventHandler/Media/StaticSticker.php": "920dbc4307b7b8a64e2ff7bdcb80c1afd6458360828520bfa11703e94b70a53a", + "vendor/danog/madelineproto/src/EventHandler/Media/Sticker.php": "3ed473a4cd6d50cdaa3d6d0c13086f3174bfbfee8d0f42927c449b9fbc23c02d", + "vendor/danog/madelineproto/src/EventHandler/Media/Thumbnail.php": "518cb0bdf771685f19f8214d90f05df52906e186eba837db446ee87c443f0905", + "vendor/danog/madelineproto/src/EventHandler/Media/Video.php": "da9d42ec8371a722f5ad98c94f0202fd804f1cb7d645319a0a1913b64937e2ba", + "vendor/danog/madelineproto/src/EventHandler/Media/VideoSticker.php": "d016bf1b1e472ed1b23c24a0a480fa75c7a616a61f7494aeb5e90eecf682262e", + "vendor/danog/madelineproto/src/EventHandler/Media/VideoThumbnail.php": "68012513f93bf1f62f905f676f402cdda7b4f0d4a94f972ac666e79dfc45c340", + "vendor/danog/madelineproto/src/EventHandler/Media/Voice.php": "afa6951a74f05d3b3368f5597685b7be60e807c20768f50cfa5169959ccb2be3", + "vendor/danog/madelineproto/src/EventHandler/Message.php": "8fcff6b6f27674be85846175a0c536f8ece26b9f58e9ff1a8c539eade74b7e81", + "vendor/danog/madelineproto/src/EventHandler/Message/ChannelMessage.php": "88b21b646054394c0d82a9fcd5eb89da0f36ac8e698fc7d4f84fc2577c70181c", + "vendor/danog/madelineproto/src/EventHandler/Message/CommentReply.php": "08877ad31f6a5df44969e7665c2cfb62d91a080f2103f74d3a91022b1952e33b", + "vendor/danog/madelineproto/src/EventHandler/Message/Entities/BankCard.php": "b6e641d5dba41953105f47957991ab1f7c685aa9d52b5a147a5988cbf0fdb453", + "vendor/danog/madelineproto/src/EventHandler/Message/Entities/Blockquote.php": "fe5f1d843aabff03fd62b1494e5d8769846766449ff8fb852e7f8cec2633c1db", + "vendor/danog/madelineproto/src/EventHandler/Message/Entities/Bold.php": "6e26e0fd06867bcc7ad37ac4969ff6810d549a22d5cb1d92017f43dd3289c03a", + "vendor/danog/madelineproto/src/EventHandler/Message/Entities/BotCommand.php": "5795e7723d32c0ba6ad5a0cc66dbde81dc689fdcc8e6556acc7b2e696c584e9c", + "vendor/danog/madelineproto/src/EventHandler/Message/Entities/Cashtag.php": "3b70a3940f5f44be0d4fe407c700487fd360f3e9d32d3355d5c4d8172577ba1e", + "vendor/danog/madelineproto/src/EventHandler/Message/Entities/Code.php": "1eaac4ea9e2e89b05359a30eb803a34dbc98087bb66067c5ae6ca331ec2643d5", + "vendor/danog/madelineproto/src/EventHandler/Message/Entities/CustomEmoji.php": "8936a1967bb942b76e0ac1a95a2bc10786f6d8446088c95b14c91124e64824c1", + "vendor/danog/madelineproto/src/EventHandler/Message/Entities/Email.php": "d769dc8db5e345c2e623706223935fa9806c413677a368a3f9a7befcd367762c", + "vendor/danog/madelineproto/src/EventHandler/Message/Entities/FormattedDate.php": "46e2cd11e76ddb640fea80bae4c5b590f1e579966587df0859659049bb101e49", + "vendor/danog/madelineproto/src/EventHandler/Message/Entities/Hashtag.php": "dd45d4c518b80adfe5f7407471c489d9777a7a21303d71741dc6cb0054fc0f33", + "vendor/danog/madelineproto/src/EventHandler/Message/Entities/InputMentionName.php": "dee6e208e6ccb738a10280f67e005321b370bb1f3f1b72aaaa98447557b5b73e", + "vendor/danog/madelineproto/src/EventHandler/Message/Entities/Italic.php": "bf9a1a593a046cb4d230c5476a919aaccfc7edaa95fb826f5a3e2a8be0b9befb", + "vendor/danog/madelineproto/src/EventHandler/Message/Entities/Mention.php": "5379f3d14653ba6b8a6d6ea50cc43c364c6fe15be13fd714fe06d46b62ecf0bc", + "vendor/danog/madelineproto/src/EventHandler/Message/Entities/MentionName.php": "2918ecf262d58aa20dfae7c81d700a653ad2c876da7bc27110596eb5b9d00ff8", + "vendor/danog/madelineproto/src/EventHandler/Message/Entities/MessageEntity.php": "f5ff214dd5e422d9cd2f37f61c714d92e046751546f702530e31fe9bed8fee3c", + "vendor/danog/madelineproto/src/EventHandler/Message/Entities/Phone.php": "721eb4c389e6af1e89ceca451ba6f9ecbdaa7de22ec1cba4bf6beff3a16b2895", + "vendor/danog/madelineproto/src/EventHandler/Message/Entities/Pre.php": "6b2fb347634de47fb90f6a2faa00dbd67a781b5cb35018528efe42f934b54b84", + "vendor/danog/madelineproto/src/EventHandler/Message/Entities/Spoiler.php": "b4753e616cfa2d55650c275e0387c8acbf57582acacd0b07cdb3d60d2f6f34ba", + "vendor/danog/madelineproto/src/EventHandler/Message/Entities/Strike.php": "8481f8b20b0a4dab385a09f91fa80a9dd2b415bd189fc73787404e1f04522259", + "vendor/danog/madelineproto/src/EventHandler/Message/Entities/TextUrl.php": "b17830731ef5edd497a8d7002089f8999d5385b5ad6b7d114b76ebd0e8b7d05f", + "vendor/danog/madelineproto/src/EventHandler/Message/Entities/TextWithEntities.php": "09383b3d63195ae324dce0a0d1f5a549b96b89daeb442e142c5599e973bee64a", + "vendor/danog/madelineproto/src/EventHandler/Message/Entities/Underline.php": "04e9c74a87c75b06515a8f33a9f6ac12c66141a1c71c6fb286eb381f00625a10", + "vendor/danog/madelineproto/src/EventHandler/Message/Entities/Unknown.php": "b74247ad396109be5cbbf355b3b76b78d7474dab99bb77c84826426bf856054a", + "vendor/danog/madelineproto/src/EventHandler/Message/Entities/Url.php": "39a154dfbbf3d34e6adef98540f0960e8689df42e400f4cf0df0164848c4e1dc", + "vendor/danog/madelineproto/src/EventHandler/Message/GroupMessage.php": "b7a1205a282de3e65a8eea9b2e0252192f9fee99d175f0b9b00d254b5631a707", + "vendor/danog/madelineproto/src/EventHandler/Message/PrivateMessage.php": "34f988bac66677c7c43b199f59888661446ed60588c8be8874c64db435d4fc0d", + "vendor/danog/madelineproto/src/EventHandler/Message/ReportReason.php": "5e93e74ec812284db1fd2046a10853a48217e465460b943fa74259a18914ac11", + "vendor/danog/madelineproto/src/EventHandler/Message/SecretMessage.php": "efa59ef3f5c745218c89e813389123055691f297bdbd54a23cd10d09397d5f7a", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogBotAllowed.php": "14dc96f42cb5577c1378f19888848e7a8ded34751ee0a49fcfd2d7bf3709e966", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogChannelCreated.php": "11353915336616d46b52f575f13a720209c5c26d3ff411fa4d0608b41f3f459c", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogChannelMigrateFrom.php": "3426b67cc626feb9902149a70e7acc060030b520f97981645c2d83f08704d7e1", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogChatJoinedByLink.php": "4c0f8bc1b5cca029d469a9af12da6610d1f473547b27af173292ff96704bfb2b", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogChatMigrateTo.php": "0f4f38948ccb68ad9e1e9d3fa19ec5406db1e09040517700ebc27971c767d208", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogConferenceCall.php": "11ee55d6edb5de1b63f5fb57f6e33dde717cbb0d51d814c5d8fe2e57d65515bd", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogContactSignUp.php": "725bfd42be96514458dad7f4cc8a896740e24d69cc9fa5765585e3a2a1446478", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogCreated.php": "5068ba611a253590b1b547353d39988c8e801c8fdfbba423eba1576302065603", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogDeleteMessages.php": "137ade12969daa05efb30598cb2e666ccc5a12a0e6da28641b39b2ec5c8e8f07", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogGameScore.php": "14b7f555e01c231e80096381458ffe0e1f6c0e983c607d6ccba2037c40b812aa", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogGeoProximityReached.php": "34764271b4820898748bbbb372cd9d9e3f858c60a19da901f9496c12c69fbf76", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogGiftPremium.php": "6cd1475dca61ad50da59dc9f87392e0fbb70ade3b6f4d905530e8b211c699c75", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogGiftStars.php": "12a8444bbd4294c72da9fbe0b1806f6829ffdae9f346ee75c1c37322239418da", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogGroupCall.php": "e476e148e1c8c68dcc537cf8a8252eaa49f93381b2c2359e9ab444d32988e399", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogGroupCall/GroupCall.php": "ced8fd9fb4a6ea50ad804101cee1983a90f06c8813f921cce9c608c679f5acf6", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogGroupCall/GroupCallInvited.php": "0fbe56022b4868c091a51f6660d7d7f5a169fe722748afa5484b794c04bef5fa", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogGroupCall/GroupCallScheduled.php": "af3c6a8e770cd70fb281db24b516abb3bfb7b2c3673830fe813fcd4234fd78a7", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogHistoryCleared.php": "712dc2e068cafab029d39043fe9154264c8ab298093b7b2b13d41fbf06f3376e", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogMemberJoinedByRequest.php": "48438023244fc6104f041cf9c527299571f5026292382377138e4738951e749e", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogMemberLeft.php": "121cc1fbc74c762f6204a79e56d7b49f46fb0ac2524acdf0e1d95094d55f8ec9", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogMembersJoined.php": "ac11d492b35a476cf898001352d7929d96669a6da6239e8b0fc99b11b4058692", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogMessagePinned.php": "8022872090d60a2904bafffebd5bec413ce3c4c8ea87baa9ea23bd4ec5e847bd", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogNoForwardRequest.php": "ef2f052c6e328f11749f88f8c9cc4570730bd0eeaa3faa41213d037fe48480aa", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogNoForwardToggle.php": "6886f947a7a4790bf4f86f90e79b333b74cd02ebdd2966341ac2103d168662b4", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogPaymentSent.php": "3e9cd6042840304b93169b71b1afc281b2dc2f48c4317f63da108b9ec7c756af", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogPaymentSentMe.php": "4ef0f56de82db27cbae0371a437339450d339d6688c554ea862008e4d40839a9", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogPeerRequested.php": "a9513102345febcd4f9d1704800431ac796b2785e7643349aebd538c4cdff127", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogPhoneCall.php": "b9f52ad760592b86d3657a0d7cc950985e403ae5b48838fb96024c5dd52ad33e", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogPhotoChanged.php": "5e39ab5bb3a2e9b565caaeff880b538e46b49d47092dd7b7e1299d83bf800773", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogReadMessages.php": "10fa943108b506e90563d6d638ca36418ff12d1a4c4b6673dd83cc2a3e9c711b", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogScreenshotTaken.php": "83684d7ff89fa8788a528ccdc5de9ca837d8195d337ba568f9904f40d7b863c9", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogSetChatTheme.php": "14450f40b3abbbcbe1444b4d922550641381319d7bfb89cd64f082627fe03fe6", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogSetChatWallPaper.php": "4862d668083034983aa431a2af55dc2b4f784ddabcc846f966d6483018869feb", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogSetTTL.php": "447685f4431cb5a2b7e12a062e85b6bcb184809456e417ba6e7eafcfa049e8a8", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogStarGift.php": "263889ef7a761102bf5b54d5e8cc9d705b2c112cdf125ec31e015fe7fe658f78", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogSuggestProfilePhoto.php": "b6751def82a03d9ef779a7d6903c4fee7b782270867a9a18ce57aa4d97aeb091", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogTitleChanged.php": "f8c68899db2ae4e1cf8ee7c5ad1515826939e0c8eb4753a7ed34b868660e4182", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogTopicCreated.php": "96c957516a9a151fea7b38cfde74e7a306ff20be531bebaac4297eddbb26b588", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogTopicEdited.php": "ee856c443fcac7e657dfac1425c5e7e083f45717c94056a189e42bf33822e883", + "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogWebView.php": "10e73e369e11faeb1ba5a9dad71b92a414022757ea61b414200681580fdc2e72", + "vendor/danog/madelineproto/src/EventHandler/Message/ServiceMessage.php": "becc5168a5642cfc43d9db973503f4cffd5f8c529e8c406fa324a016738ae66b", + "vendor/danog/madelineproto/src/EventHandler/MultiCall.php": "0e849678cf53c7e043140bca8329bb5bbcd4c23c231a842e64636ca2c40f3fee", + "vendor/danog/madelineproto/src/EventHandler/Participant.php": "7ded44f44874b5d16b19837c09d4e36c41aeb0cead120e935bfffcd8cd91d559", + "vendor/danog/madelineproto/src/EventHandler/Participant/Admin.php": "bdf58e04f000bf758a01a1c1c7ca4c1734adad740f59b2707980aea7d53dec8e", + "vendor/danog/madelineproto/src/EventHandler/Participant/Banned.php": "dc725a4e9e1ab9991cfeef3cb85d1003da22ba774679f2d3cf21d4438e52f809", + "vendor/danog/madelineproto/src/EventHandler/Participant/Creator.php": "4f4c905ec57329155ce5b6db38889806325b69f12dfb94cbb89d1b9d6005eca7", + "vendor/danog/madelineproto/src/EventHandler/Participant/Left.php": "85dfbb116301f9e4b82c7a12348ddddb5817f7c8303872a8ee4ae6c2cfead21b", + "vendor/danog/madelineproto/src/EventHandler/Participant/Member.php": "f10db83f74dfc87a00f734d9d97381b18eef17cc5b877fcd44e0435cf79b96ec", + "vendor/danog/madelineproto/src/EventHandler/Participant/MySelf.php": "f644dc99f944afa2bb4f92aa4762fa413df5765a50fab794d37d9b9bd64c90b5", + "vendor/danog/madelineproto/src/EventHandler/Participant/Rights.php": "ca2d81dd7569b2b8b85b10aabc2b7eae52e0d39b4e2a58968578bb60e80d79e7", + "vendor/danog/madelineproto/src/EventHandler/Participant/Rights/Admin.php": "11e4cf6accc2e450f46325c67b7268023aa5680ddf2981e2d42891ca890bdd62", + "vendor/danog/madelineproto/src/EventHandler/Participant/Rights/Banned.php": "baddfee4432a3a5e8d8d1b1177d0ed279072828a2ff44beb7b66f4d0192b9aeb", + "vendor/danog/madelineproto/src/EventHandler/Payments/Payment.php": "c729c5a8da42677d8bdf7e9094ccb1c22666a8b9e634cd6ae032aa54dae10229", + "vendor/danog/madelineproto/src/EventHandler/Payments/PaymentCharge.php": "16058eb88f395ea1ea4c932d7dd6c88ce20d27ad5043eb3c805f98aa6172601c", + "vendor/danog/madelineproto/src/EventHandler/Payments/PaymentRequestedInfo.php": "c576e53da15d2f38838d331fb8d80e106e13e9cac8be47368c33d5c267b029eb", + "vendor/danog/madelineproto/src/EventHandler/Payments/PostAddress.php": "650963eed6352413aa7c90cac2ccb31dab1e4ca94316fd2cc9af9fd51ddcd91a", + "vendor/danog/madelineproto/src/EventHandler/Payments/StarGift.php": "c747d5ad1cc2e5f1695195e220866eee202245ee32ba86d3ae0917d270c42e7e", + "vendor/danog/madelineproto/src/EventHandler/Pinned.php": "bc2adf9d80700491a16cf22cc2da7db16c740c19876bbd664e0ddac372ef1846", + "vendor/danog/madelineproto/src/EventHandler/Pinned/PinnedChannelMessages.php": "2775ebb9889cb5dcbb574e20499db51298994786076ba8d0717f2663ec3eeb6c", + "vendor/danog/madelineproto/src/EventHandler/Pinned/PinnedGroupMessages.php": "27dbde021ba9c9b6d8e826e0468c738577fb3613897327c2e56c7cb87ad4efb3", + "vendor/danog/madelineproto/src/EventHandler/Pinned/PinnedPrivateMessages.php": "c0964b46adf634b1b70c2f0900f4249c68ef0ac707a717fafedc3ed289a4b6bc", + "vendor/danog/madelineproto/src/EventHandler/Plugin/RestartPlugin.php": "1eb1e97008011f51511cc781f477dd9460b3a4c913d17dfdeb5976d16d79bd54", + "vendor/danog/madelineproto/src/EventHandler/Poll/MultiplePoll.php": "bdd84eb7a9a1f1c11487819d09876ba159d139ff42ee85248fde297073822144", + "vendor/danog/madelineproto/src/EventHandler/Poll/PollAnswer.php": "c2a7740c47941d19a4162ddfd19348bf7cdc6a60da82b8ec7e99b291c239d4f6", + "vendor/danog/madelineproto/src/EventHandler/Poll/QuizPoll.php": "7c8e360ed85934f36d86c5b27d61283d1233f90ce75239b66450714223eb4366", + "vendor/danog/madelineproto/src/EventHandler/Poll/SinglePoll.php": "70678587dcc9f6489e0df4ee06361b66d41a8edcdc83d3988ea1b6e286bca3cd", + "vendor/danog/madelineproto/src/EventHandler/Privacy.php": "ac606660d9763924e3aa572218b92a552437cf9133f13511c0c8ba3dc0b9f731", + "vendor/danog/madelineproto/src/EventHandler/Privacy/Rule.php": "badf96efcbc2ca0d825aeb491e8c4e309173695b7b4e2bf19dd554b9edb2071b", + "vendor/danog/madelineproto/src/EventHandler/Privacy/RuleDestination.php": "d940eb00aa818d43b105b1e8037dc9b5c5cb57534eaa5dc1f06dc17fb1936a93", + "vendor/danog/madelineproto/src/EventHandler/Privacy/RuleDestination/AllowAll.php": "1b93d5343640b561d9ff9b5e960589667f0e1967411003ab3d3f8bc6076e3126", + "vendor/danog/madelineproto/src/EventHandler/Privacy/RuleDestination/AllowChatParticipants.php": "4df4b7a0ca5a4414fff7a5eb9975472c64a9a35210b4534640ba1b9a511a357b", + "vendor/danog/madelineproto/src/EventHandler/Privacy/RuleDestination/AllowCloseFriends.php": "4be9c6a618ba5d3212c219e4b5449c9d91e2257d198fd18c2cce43da1f914451", + "vendor/danog/madelineproto/src/EventHandler/Privacy/RuleDestination/AllowContacts.php": "7ca7bc931e9abc5d9bfd53ebe55926c192dfa89344e65dad42574c845c238c1f", + "vendor/danog/madelineproto/src/EventHandler/Privacy/RuleDestination/AllowUsers.php": "d4da7018c6d4e752d70920c27516c9fb71a17bbe41e914d0536c0ac218db458f", + "vendor/danog/madelineproto/src/EventHandler/Privacy/RuleDestination/DisallowAll.php": "125d24bc07b0ffef9323afe0226e622f8a2e59d4a58573bde3999a0918170ee0", + "vendor/danog/madelineproto/src/EventHandler/Privacy/RuleDestination/DisallowChatParticipants.php": "c50c23b96046896df8a0b22cb4de3ee5830bbf0a8c4271eedcdd57ef6a8c7b5a", + "vendor/danog/madelineproto/src/EventHandler/Privacy/RuleDestination/DisallowContacts.php": "625b06bf77c4c9b0c8ceb19a3991a60f11e82746a1941b27cf49785be515924f", + "vendor/danog/madelineproto/src/EventHandler/Privacy/RuleDestination/DisallowUsers.php": "8f0b875e61febc54ccae37dd35ea6027b027e99aec4e7ad3d15452d98864415c", + "vendor/danog/madelineproto/src/EventHandler/Query/ButtonQuery.php": "fb024b74559f16ce50780448fa761918a78a3f50cf4f34fac29fdce679bae44e", + "vendor/danog/madelineproto/src/EventHandler/Query/ChatButtonQuery.php": "dd523a64280e4a5c5e08133880d7ac3247c62b3c0c284f0c549d4181dabd6ba2", + "vendor/danog/madelineproto/src/EventHandler/Query/ChatGameQuery.php": "94e28cd15d2555f774a78f85bbeb0e80e6f1d64a5a0552edca03bb8346dbb855", + "vendor/danog/madelineproto/src/EventHandler/Query/ChatTrait.php": "1614bf8aeba56b40c49b9f3bbb5334f0d17779638396959c8286fc5dc7b4509b", + "vendor/danog/madelineproto/src/EventHandler/Query/GameQuery.php": "d0a7c76c073ee1c5eabb9e3c03b51521914c2de6917f4a5808747422e8b65a96", + "vendor/danog/madelineproto/src/EventHandler/Query/InlineButtonQuery.php": "e6494a785e8d6a5c08b360fd432cb7873bca899c019d61326b5b0527dcf62969", + "vendor/danog/madelineproto/src/EventHandler/Query/InlineGameQuery.php": "c2f700018983848186937ff2025411e1be43b4f6f9a35b0cc9e6134fc837bf82", + "vendor/danog/madelineproto/src/EventHandler/Query/InlineTrait.php": "107bf97162e347078e21324803d61b243845784bde871cae427be44a01665dfa", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/Ended.php": "ce5e47db97ab6eb97bba72cda146b71e2b10029f8e6b1b0ce2f54594fe8ca95d", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/FromAdmin.php": "706ca7e9da0136a96add74636e89c53bdda8817b5c76356f469677ecb76c7cc1", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/FromAdminOrOutgoing.php": "3cb916d8837725ea19cfd537b3e42d7c59f0ad2a7f8c4bb13ee94ebc2b042435", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasAudio.php": "0d68787de9ea3ae38c9157f7bfefaa0ec4aaaa88cae2be099490ea179d11f0eb", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasDocument.php": "74f9b6ae97c4ecae5109e50cea77299d03fbfdd8748a66a3dc3bdaae74d81a0d", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasDocumentPhoto.php": "5ad33cc01773a47965d242b421559deacfc32b6d15e624b065374d4539c95e35", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasGif.php": "f8612dfdaab6f06382ee507b9f96be54e7a138df2aed0d056ba054ccdf04dbe3", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasLiveLocation.php": "f43ca1f15e9877b9b27d2757b5f8796bd8d1cdcd1e8ea25e13db5624dec34de2", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasLocation.php": "be8a808c92d3c5c66693b15d0d337d01392731a23509dfbfa9a8eb0df015d900", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasMedia.php": "4f8cbd9dddcb84eddceff6cb03ec859014c3e21fbac56876f54fae27033f05ed", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasMultiplePoll.php": "edbd5617fa2750b0e55c78eb5ac4a963695f2134cf98798697c43b693560e4d0", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasNoMedia.php": "887e0d1dccaed1c6f04be91b23111000778d5b314a3f4074829b58b417a32512", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasPhoto.php": "d2314129020d8255232002d4ff07ef1375ad03742e21bb30a99d7690636e9137", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasPoll.php": "50da822f11957ec5db97fa976389c509784e9a217afac2a2b16ed2855c47902f", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasQuizPoll.php": "0ef6c1c4bcf566b62c15f19d47a131f7524d201b005a4433d1debdce92cf77d3", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasRoundVideo.php": "f6312c02edef8bc5230f6998d956a8f2acbecf0a77350c8b548b09fbd2384914", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasSinglePoll.php": "03fc012ae56bb7797c86dd8c83610b6cf17d8a924c72a1fa0e46b730bfa30f08", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasSticker.php": "2b8fc348742484b59c225b5374b42d4164d80a17a09f1014e7ee0de2b5354e18", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasTopic.php": "6147c475cd49a443f5c8397ef0352842cf907e06553b8b0540bae82b8b7c840a", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasVenue.php": "d74b8929c89b7d48986514b2b193d041456aa5a06f9d9810d4263fb68cdbd845", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasVideo.php": "bbf165347c215f26696f931a277ad4a82e1dcc50597d24ce5244f37f831e65c3", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasVoice.php": "8ebf947b422ef9669137e47e4f70557e3a4f80766ef8c3d462e10248037406d6", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/Incoming.php": "9a3335cf9bb838fb09c8cd7ec66329dc1ee7189612c206b20158d039989c4d6c", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/IsEdited.php": "b77f080061c7f319441e42287b76bace2a4f7b972279b23023a0ecdac83bc428", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/IsForwarded.php": "c873f932bcb4c7d43ad1b4acd881563997a9d7a97c92eaa1a15eee9f88fdde6b", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/IsNotEdited.php": "3a7371cceb6fa1820efcf07d4219dbf6050940ba0432d8a35f25b0671d5478a9", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/IsReply.php": "39a1aa0ee7e938a7b3bfff16d05827eff22edbd95cd49042b5c7a853e9faee61", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/IsReplyToSelf.php": "4a9d33dc8a4da494d1f25a1beb19b85d33bbefa1cd04f974997afaf3ecf968fe", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/Outgoing.php": "8953d5d6a134089ac8960a9f20e0dfa685a96eceee2c738e01f839fd219f51d8", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/Running.php": "fdcd68e20c35546e039b5cd892b2652d3617dcd6c7d3aaa285150402e63e0cf6", + "vendor/danog/madelineproto/src/EventHandler/SimpleFilters.php": "ff919a9a3d7aecc02f6e22e4c8f2c7f95f3f3c516b5c0f1c6df1d689577e1f1e", + "vendor/danog/madelineproto/src/EventHandler/Story/Story.php": "159b8eb141b8d72b4de7ece000f6f877b0218617bf2f72181dad0115f9e2b728", + "vendor/danog/madelineproto/src/EventHandler/Story/StoryDeleted.php": "b3ed39b6c46348588828a497af6520cc2be19e6e25662177421fd57eb02e2a11", + "vendor/danog/madelineproto/src/EventHandler/Story/StoryReaction.php": "82c02608a6701925fa9cb34d867067b723e46f2c95713ef50db0b39ffc8616e2", + "vendor/danog/madelineproto/src/EventHandler/Topic/IconColor.php": "4d0fad8a45ba163bd209720e6ce744d62e8c58901ebc72eacab9be5864a83ca9", + "vendor/danog/madelineproto/src/EventHandler/Typing.php": "d0db5526c4834159ffbba8286b8d75dba690b2de09e4aaeefe9dd0c2effa6049", + "vendor/danog/madelineproto/src/EventHandler/Typing/ChatUserTyping.php": "5cdd34b680713eda2da97b4492e1f41daa01317cfe423aadb0d4a64b3404c78b", + "vendor/danog/madelineproto/src/EventHandler/Typing/SecretUserTyping.php": "0bd6c37a331f0cb1f023b6c612f64bfd80e6ea177750fac0fa217eac67715ace", + "vendor/danog/madelineproto/src/EventHandler/Typing/SupergroupUserTyping.php": "6a6e6862b5e5be9ae2134525f7cc981f60375e3cd85892e8ea2af1a18e16f4c9", + "vendor/danog/madelineproto/src/EventHandler/Typing/UserTyping.php": "d8d4c72ba4f3bbbabebeb52576667994195c7f64f0e46097cd482ce53d70c5dd", + "vendor/danog/madelineproto/src/EventHandler/Update.php": "c6c9bd4fb881d748c47c8773a45b434234e4443d063976f59caab9d87ac45531", + "vendor/danog/madelineproto/src/EventHandler/User/Blocked.php": "bc50a976e7512971c96ef888574df52257e20228e78a2c75ef3467c34827f612", + "vendor/danog/madelineproto/src/EventHandler/User/BotStopped.php": "78563811f1b6b303f4899fd1d49e0b0c08638a5c45ad4bc5ea112aeb16c28d03", + "vendor/danog/madelineproto/src/EventHandler/User/Phone.php": "f9f21090c9a5ef73c6f1b30be154c1d40a82476e00ae9d32de0be4dc78ed7c6e", + "vendor/danog/madelineproto/src/EventHandler/User/Status.php": "d2fef4696d284000b1c93a0bd35103e69adf9e21e5dfe53312e0c0a3fd1ebd2a", + "vendor/danog/madelineproto/src/EventHandler/User/Status/Emoji.php": "f59b400eb90bc2a460beadeb7eaabae7adec74e817bf237e411ce34ac9561fa6", + "vendor/danog/madelineproto/src/EventHandler/User/Status/EmptyStatus.php": "6b6487d6196cf77b4ec01efb4539e14600e42d1898b8ac93b40e7a2516aac6bd", + "vendor/danog/madelineproto/src/EventHandler/User/Status/LastMonth.php": "0e48e833de0e8c2ff2b1cee905793320148d312924dd036b870fe48775cb04c4", + "vendor/danog/madelineproto/src/EventHandler/User/Status/LastWeek.php": "8abe36573041dc0a95246460c78e4f22d2bf023f6294ec459f6a0027eafc992e", + "vendor/danog/madelineproto/src/EventHandler/User/Status/Offline.php": "09250d27a1d4b6077c517aeb3bc2d33199deb305a6079aea1869bc37ea6a68aa", + "vendor/danog/madelineproto/src/EventHandler/User/Status/Online.php": "ba1396cb518453a0e1be1b82583707b8e4bb077b28f60586726afc161d2d5553", + "vendor/danog/madelineproto/src/EventHandler/User/Status/Recently.php": "b8870f82ab61882a2fc76e7eba6a3bfd360bf7173728a81bcc62a85e3cb0c311", + "vendor/danog/madelineproto/src/EventHandler/User/Username.php": "b051b717ca3fb7616360a24ef407d9e8d0f0dcec6b2afacf750f7f1cfec791c4", + "vendor/danog/madelineproto/src/EventHandler/User/UsernameInfo.php": "82d6f0ff4174164b800bb7486e405623b05f76bb27545c75b99258ceda38c0a6", + "vendor/danog/madelineproto/src/EventHandler/Wallpaper.php": "e4f735db493ccc92b94c4b4e18024df714bbd63afb1bbc9e4ab70c572eefe772", + "vendor/danog/madelineproto/src/EventHandler/Wallpaper/WallpaperSettings.php": "405827958cb750b92a1e1ebb0ee9e90a992583847b69d0f460a4c13c29e8a9ed", + "vendor/danog/madelineproto/src/EventHandlerIssue.php": "813d63eb39b88411dfb7f04f829f531025be14e0d46fe206428100ccc3c92803", + "vendor/danog/madelineproto/src/Exception.php": "78d0fdb61a875a280205d73710a7e804b108cdd91449d47c12d6807de5bf260a", + "vendor/danog/madelineproto/src/FileCallback.php": "7fe836dcd1f7adb85533ac95fb4b83e7bc49c943d5daab197722f60b940b0d5a", + "vendor/danog/madelineproto/src/FileCallbackInterface.php": "be712b51e2ad5e346831f4480d57c7206a7a1613124cd807fc42083553463494", + "vendor/danog/madelineproto/src/FileRedirect.php": "bacf5d9b7b0be90a4c60eed4a08af573602527f001d62f2f2089bc70cc212ea8", + "vendor/danog/madelineproto/src/GarbageCollector.php": "b6d870d85b0061f4f84b372813680cbd7e9e33d754d3f9689c669954302534af", + "vendor/danog/madelineproto/src/GroupCall/GroupCallController.php": "455080a73e1f730158d9b40b3aab93df1df0538e08c6d95fe81343e8f5ac70c6", + "vendor/danog/madelineproto/src/GroupCall/Handler.php": "cecf29067606df70ce1fb579fa90b941ac52820741ea097a585cffd9e30f710d", + "vendor/danog/madelineproto/src/GroupCall/OggDemuxer.php": "66e3e466684ad154194ebea0c0424f361031ba6de3945234d672dfd6a952c0e1", + "vendor/danog/madelineproto/src/GroupCall/Rtmp/Amf0.php": "1bf770bddd5e195e0c5635c802ac53a95c8632c2185ca13bcd59af943f217411", + "vendor/danog/madelineproto/src/GroupCall/Rtmp/Amf0EcmaArray.php": "1fac5d4da0d45e1c83aa5576d874bccf878c16dfde7074f17472bde999d9ac3c", + "vendor/danog/madelineproto/src/GroupCall/Rtmp/FlvTags.php": "8e12aeb8bd7e2e9f6b338b522ac96630bc69f9aeb636a4239b79a5cc284a79d0", + "vendor/danog/madelineproto/src/GroupCall/Rtmp/RtmpClient.php": "78f9c14162f127d52c1a2649b310b86b537537f9086b7d63f254d2fc8ee0c3f2", + "vendor/danog/madelineproto/src/GroupCall/Rtmp/RtmpPublisher.php": "49db79dcb5247047684a606b0016fd5d848bcc6c23d1e439dfaef78366de87cb", + "vendor/danog/madelineproto/src/GroupCall/Rtmp/RtmpRefusedException.php": "a1444e62da6b48d73e90a3b0fe60d284bc447742de685a1cd6e27321576d55f0", + "vendor/danog/madelineproto/src/GroupCall/StreamReceiver.php": "feb18d6c2bf57e6afe178f914628467e18a0ce61d69880b6a6342215f20395fc", + "vendor/danog/madelineproto/src/InternalDoc.php": "25bc7a59625ccebe183c71515772fd2daf96af493757a880aa6e388cc360bc8c", + "vendor/danog/madelineproto/src/Ipc/AbstractServer.php": "84caf07b6fa30e706f30d6fea0433622a00793593a8ffab0f7cee352cc2b485c", + "vendor/danog/madelineproto/src/Ipc/AlreadyServedException.php": "793429d7a6386c38477ff13198c9c3c0202240d43c3f752d672a832a03328993", + "vendor/danog/madelineproto/src/Ipc/Client.php": "118d1e025362d9a185fb0635aae39aa3274f5e65eab9b0af0e64c720ad79da0b", + "vendor/danog/madelineproto/src/Ipc/ClientAbstract.php": "8ddf617a4c59d91a9a6d4449325d7fcf4fe0c46f30c5b565f905fcbcbb02f87d", + "vendor/danog/madelineproto/src/Ipc/EventHandlerProxy.php": "4eb3bc16a9a23af69d96da5976bbcd845fe9846eb9f4c5515b084055bc818875", + "vendor/danog/madelineproto/src/Ipc/ExitFailure.php": "93d996252d4569cca46cd39f2129e62775458ec4a9d72601243340afefb03201", + "vendor/danog/madelineproto/src/Ipc/IpcCapable.php": "22cde1278ab8d2ef9f6c6caaf0d7344a2f8568c423e9533f8e1327bce8a67c8f", + "vendor/danog/madelineproto/src/Ipc/IpcState.php": "4fe9cd55af338d74b08bb8e4c69adcc342d5bdef62cc4acde714b27825ce73fc", + "vendor/danog/madelineproto/src/Ipc/Runner/ProcessRunner.php": "80221d38f5f29cc69413b061d14f7dcd3a38484005abcacf1b699b80c9342010", + "vendor/danog/madelineproto/src/Ipc/Runner/RunnerAbstract.php": "257c54d6cdf9df942878e5056074767ea664b22e94ad56c091bc2abcdea6ccbd", + "vendor/danog/madelineproto/src/Ipc/Runner/WebRunner.php": "c8e37fb2e77303a42dee63040074aee13903dc61a139b83685a173f9d59d863e", + "vendor/danog/madelineproto/src/Ipc/Runner/entry.php": "e664e4a9d01f8b5896b7888a581f3edb678b0ba76316ddc02858bdd26154c750", + "vendor/danog/madelineproto/src/Ipc/Server.php": "97a5bec28abf8e47acfea4aaa01aee67143f29b08b87a455ebd091e4c8124120", + "vendor/danog/madelineproto/src/Ipc/ServerCallback.php": "8e4d1f0bdcdf58ce8c41531449cc4d5d236b07dd2612a13e56d7df5f46cc2fd8", + "vendor/danog/madelineproto/src/Ipc/Wrapper.php": "db444ae6b04e727752b4d24d4bbd1043bd4c24f43ed97802191d12e105287044", + "vendor/danog/madelineproto/src/Ipc/Wrapper/Cancellation.php": "b602bb366c7fc878b55ef1568411247d2425243223255f28547385be538e05ec", + "vendor/danog/madelineproto/src/Ipc/Wrapper/CancellationInner.php": "93bce53cb7a416e71ec42ab1b1f3a5cadecd45c14c58a79fc60ab05ef535b443", + "vendor/danog/madelineproto/src/Ipc/Wrapper/CancellationReference.php": "0270f595c96faf9f73564f6c1ac9c94a21bf10dfce59c105e274c36f30e0ce16", + "vendor/danog/madelineproto/src/Ipc/Wrapper/ClosableTrait.php": "df52816f52b3bdd5c26d4709f278baa2058845c97c630fa9e2656765133f7698", + "vendor/danog/madelineproto/src/Ipc/Wrapper/FileCallback.php": "aea2afdd373e6fa2a403b5e7c45fdf13ae832e016787215fc0d907de70724418", + "vendor/danog/madelineproto/src/Ipc/Wrapper/Obj.php": "0eb5a5a5afb097ab89bdb054b1a5da19df5095995d064349065cdbe9a73a3c84", + "vendor/danog/madelineproto/src/Ipc/Wrapper/ReadableStream.php": "3a915cd42f2ddadd501d6e1422d1068351f97c98fd45b5876d6c0ac38aa46779", + "vendor/danog/madelineproto/src/Ipc/Wrapper/SeekableReadableStream.php": "c7907c2dcb617a88a3cfbbba42d6b4c7cce414867355f583bc6cd17a92c5bf50", + "vendor/danog/madelineproto/src/Ipc/Wrapper/SeekableTrait.php": "79c6e4e172532d80c4977a82e91af68affd266583e1248d49ed397dc76898451", + "vendor/danog/madelineproto/src/Ipc/Wrapper/SeekableWritableStream.php": "4c4a772c96286af4e7b5a1708e2d8eb68dfc2b9f7e5b6c9872a99a0883313f2c", + "vendor/danog/madelineproto/src/Ipc/Wrapper/WrapMethodTrait.php": "2737a280ffa4cbaedb3787c4deed96629ff5b0b5c3ca3573ae097e37efa4416b", + "vendor/danog/madelineproto/src/Ipc/Wrapper/WrappedCancellation.php": "2b365698fa1fba6d34ce1b1764914996bf18789830cc0ab08c46e7204c98c0bb", + "vendor/danog/madelineproto/src/Ipc/Wrapper/WritableStream.php": "a8cb66e498b03df697c629601b4d8006911c3e742861c1bd07082ed40d2ec502", + "vendor/danog/madelineproto/src/Lang.php": "5b0d38b9830eb8441c82feb70d691b2a15c6570736bd7e521a50a6191ec66b9a", + "vendor/danog/madelineproto/src/LegacyMigrator.php": "3e317635c40fdeb46c58097f3b1e876ec491be9e3dc45a375442cbaa23e27aea", + "vendor/danog/madelineproto/src/LightState.php": "2fc2cc891825cc482c6e054a57afba3ca12dec7950c866667fdf90847aa61fab", + "vendor/danog/madelineproto/src/LocalDirectory.php": "aeb56b41ef44c0e08897e58cc4136f37dde986cb29535ffd5ff4d1ab1adfeef4", + "vendor/danog/madelineproto/src/LocalFile.php": "273a8a53f0197f334f453bb2eb275e97eee1c09e574a8ef0034a8511064cad5a", + "vendor/danog/madelineproto/src/Logger.php": "aa44be14d5f6873846102c1afcbcfb44364cc1e8619973dc80f39c8f4c45f4d6", + "vendor/danog/madelineproto/src/LoggerGetter.php": "b020ac5d053e0bab95e3f1b2f0ecb519d93a59a896c06c53fac453499b686fd4", + "vendor/danog/madelineproto/src/Loop/APILoop.php": "3d74d1ddd11b762e95043425f46ba566d2a41f42f863b2a5aa6ab3876854d94f", + "vendor/danog/madelineproto/src/Loop/Connection/CleanupLoop.php": "2e45e3c0b57ada35022cb5cc9439cb7552705547e147c34824119e2cc48d5c47", + "vendor/danog/madelineproto/src/Loop/Connection/Common.php": "756e2c2a7bf65af82a42639c195a967923e5dd7f91449a1b03e4850ff2be6d1f", + "vendor/danog/madelineproto/src/Loop/Connection/PingLoop.php": "698e22a41f68b020e398e4bb11d31f0979f545c18b3163793db9657c71c0ddca", + "vendor/danog/madelineproto/src/Loop/Connection/ReadLoop.php": "d6806ca9770a25ddc79c600df61faf400771c97ca5be20fda5e2c4c2dac6c1fd", + "vendor/danog/madelineproto/src/Loop/Connection/WriteLoop.php": "b1a222c2bf71fd3fb681d04fc97e5807b1916d850d23d88e0782c53c3ff9a1a4", + "vendor/danog/madelineproto/src/Loop/Generic/PeriodicLoopInternal.php": "3f452ba7e088e03f2c98d50bfe817f16b2b515caebaebdc9ac3d4818e5b42f89", + "vendor/danog/madelineproto/src/Loop/InternalLoop.php": "1ca7f36d24851ead0c18a374ee07b4ee79537a11249cca0915e516e26866a6a8", + "vendor/danog/madelineproto/src/Loop/LoggerLoop.php": "7b1f40fc462d92f2c8dc53dc8bffcff5ab2357d26c02167f094ea5f45871b03d", + "vendor/danog/madelineproto/src/Loop/Secret/SecretFeedLoop.php": "059706f005de1d19b5b498b1975b73995b3d985d272a85386461ea2b57257994", + "vendor/danog/madelineproto/src/Loop/Update/FeedLoop.php": "cdec807fc4e468849cd35a83fd1825fbc269649bc0adfafabecf3ae9644e184d", + "vendor/danog/madelineproto/src/Loop/Update/SeqLoop.php": "26a8585fcdb708c0a5d9094be733e3a07ca1942fea90c1a5a13752f74a74453b", + "vendor/danog/madelineproto/src/Loop/Update/UpdateLoop.php": "88fbdb4896583b351c0e4b85b91098d6a63faa8560947de9258c9c41b86d341e", + "vendor/danog/madelineproto/src/Loop/VoIP/DjLoop.php": "aa476c3fd83ca78db9e31d53d7ce87bc10fd3d3705a14eda706b2df8e032f3f3", + "vendor/danog/madelineproto/src/Loop/VoIP/StreamSnapshot.php": "c7f805255c8da38f3f4bd33866cddcc4810c83efd4fea451deb5a26c2b619bdf", + "vendor/danog/madelineproto/src/Loop/VoIPLoop.php": "89f03657cfd9ace9099fed26cd725f44777cc5a2795f7452d8bee135ec702731", + "vendor/danog/madelineproto/src/MTProto.php": "ca554762756b27ae2850bf7639b0c9e641980ae10b95fb511055d711efe15781", + "vendor/danog/madelineproto/src/MTProto/AuthKey.php": "f14f0bfb248ec03b692182dc2ea0cef6133adbc7d89def5dc7890e9433ef9f74", + "vendor/danog/madelineproto/src/MTProto/ConnectionState.php": "b5880356f18edcdfff6759b8478b64d4333dbce16ecd1c10c42ed5a88c181d4f", + "vendor/danog/madelineproto/src/MTProto/Container.php": "155c49a5622c92b6f9c1f31432b9963046d0a045debcb2dd337b681e0f0f1171", + "vendor/danog/madelineproto/src/MTProto/LinkedList.php": "80f903ce26d84efe18d66ba5bd8dc3503f4ee27e133d53f2d9e45c31bd85ae31", + "vendor/danog/madelineproto/src/MTProto/LoginState.php": "8aea01393bee04219c689a39ce41f0d5a66bbac8fc24d60b708d9a86c1676092", + "vendor/danog/madelineproto/src/MTProto/MTProtoIncomingMessage.php": "69b2e4ee17a40333f1cc146edfb20a13208cbbb9bd8ba803630413b53d2a8536", + "vendor/danog/madelineproto/src/MTProto/MTProtoMessage.php": "345c90dd6fbf59d4797abef404c4eae41e2e18d070ff3b78b3031d254830ffe2", + "vendor/danog/madelineproto/src/MTProto/MTProtoOutgoingMessage.php": "6a21be4479e771887157938b8da06276ae19fa98b6f2024e4f938b4a83806a9d", + "vendor/danog/madelineproto/src/MTProto/NewAuthKey.php": "a095361ab3516dcf74487aa40d60a05d2dd0e6c70961bc0916cf623c9d5ed4cf", + "vendor/danog/madelineproto/src/MTProto/PermAuthKey.php": "635d0303117a0cfaeec3e0f8f26eaee5e30dfbac8df1ce7b86c0a89032f0e69b", + "vendor/danog/madelineproto/src/MTProto/SpecialMethodType.php": "3b65d05d72dd107d11cd2dbf314a924aa5f472287633ece8e8ee0184301ec340", + "vendor/danog/madelineproto/src/MTProto/TempAuthKey.php": "4aaa75e691f33eaf226e5c9e18a350bf8dc61e7ba525db73dadf672774b53ef3", + "vendor/danog/madelineproto/src/MTProtoSession/AuthKeyHandler.php": "16b08bc4a98f82cf0880c39c19989f3be670a8ebb1bdcee148e43bcadd4c07e7", + "vendor/danog/madelineproto/src/MTProtoSession/CallHandler.php": "c9d2713c3064678e95404c0a6d3361e9e6ee2baceb23c6685e9f90a8ce4de9fe", + "vendor/danog/madelineproto/src/MTProtoSession/MsgIdHandler.php": "529e3cdf5ebacd21c8c35a58a6ab47f2e7a4ea06cffbf3c4f72df5aab48317fb", + "vendor/danog/madelineproto/src/MTProtoSession/Reliable.php": "fbb8edeef42219e85adeebcf8a1ee3fffa8c3744303e2b2af01725294e8cee5f", + "vendor/danog/madelineproto/src/MTProtoSession/ResponseHandler.php": "f3b56e527261b64ca23aad597abae77b1add9c97895402361c6ec413b30df1e7", + "vendor/danog/madelineproto/src/MTProtoSession/SeqNoHandler.php": "474e3fef5772a0ceeb4f8da015da1a0800ba61c7772273de744fed448a0c6a87", + "vendor/danog/madelineproto/src/MTProtoSession/Session.php": "b182a901e5c6f326c5794ccde51976a93e0c42350622ed36b5930f98f2472749", + "vendor/danog/madelineproto/src/MTProtoTools/AuthKeyHandler.php": "dc547b3c6dcb5cdeee1d43bcdef926230f05602a5b9617da1cd0ecba72350bf7", + "vendor/danog/madelineproto/src/MTProtoTools/CallHandler.php": "bcc0ceda3c55d1bf5529a4bbd295591bd4a71ab5395ade654ce1906f3827d277", + "vendor/danog/madelineproto/src/MTProtoTools/CombinedUpdatesState.php": "a9b6fa61d88226c265e041da6645f216f021fb78beb2e31fb58217e9c97a73b7", + "vendor/danog/madelineproto/src/MTProtoTools/Crypt.php": "27a7261f83e35d4ba4c63d6a7ff090b9319eb0bb4ad7a6f4857b7f93f27cf365", + "vendor/danog/madelineproto/src/MTProtoTools/Crypt/AesCtr.php": "a1ebbc2aacd15a71bb09975d26dcd0321da8e546fea655e1549c38b9c5f236ee", + "vendor/danog/madelineproto/src/MTProtoTools/Crypt/IGE.php": "7e1faafe4c142e393e196822b2fcc4d0225ec24903024f957ef2871a9fc15644", + "vendor/danog/madelineproto/src/MTProtoTools/Crypt/IGEOpenssl.php": "be681e1bed17b4ecb915aba3e3790dcb7369713b9fdc762d752f9cbc2cef9398", + "vendor/danog/madelineproto/src/MTProtoTools/Crypt/IGEPhpseclib.php": "6a006ba1f79228b88252ad9611bdccf43797b1b7cc8ae20ee28e45c9b37878b6", + "vendor/danog/madelineproto/src/MTProtoTools/DialogId.php": "4356a26fd081dda2cbcbfd8fab1c44ff96d7e3d7486ac3b36d54af97d67ee187", + "vendor/danog/madelineproto/src/MTProtoTools/FileServer.php": "0721e9f87af6b005b83c8b4b0155d1b4556eeb2a60481e9d98a179b87409ab16", + "vendor/danog/madelineproto/src/MTProtoTools/Files.php": "7c8284b8a3c7b0573868e184ee97dec683529c7b8676b693241465459e00848b", + "vendor/danog/madelineproto/src/MTProtoTools/FilesAbstraction.php": "db33ccdf5c568a3e4b4e30fd1f1cb55bdaa41ac64a445c89f7ce7dc1b57e2238", + "vendor/danog/madelineproto/src/MTProtoTools/FilesLogic.php": "a4e9bff8a20dd2dc3321153e59af498359f7d21b0da74a0ddbc93cc4c57e0b47", + "vendor/danog/madelineproto/src/MTProtoTools/MinDatabase.php": "52ac1cb308fe0867bd75c60558c01919a1446960e531112c0a0820cb44bc764d", + "vendor/danog/madelineproto/src/MTProtoTools/PasswordCalculator.php": "f78fefc4f056a043ff44b36ef1bfce901e51ed1995e18372a3a8543dd83e3ecd", + "vendor/danog/madelineproto/src/MTProtoTools/PeerDatabase.php": "d98da7262e13e5c3908ef47b2bbf2df3fd4163172c20d6ba310a88adcacf2000", + "vendor/danog/madelineproto/src/MTProtoTools/PeerHandler.php": "78187d7216c069d47d1c05d8128834603b958b55bc8478576850bce9e86489df", + "vendor/danog/madelineproto/src/MTProtoTools/ReferenceDatabase.php": "4ef3d750af63c54388f1662ec528efbfb628446c6d0667a9ef3eb8404d13557a", + "vendor/danog/madelineproto/src/MTProtoTools/ResponseInfo.php": "b1f4bf472f9e168bc7e0f281d86cb79e45513c3345d5f9b96d04c0ab2e265f33", + "vendor/danog/madelineproto/src/MTProtoTools/ResumableCalls.php": "aea59fdc1bd1b71073ed527b3a0a3dc58caa9d2f1cc7949de3a805aeaedd19b6", + "vendor/danog/madelineproto/src/MTProtoTools/TransferProgress.php": "0c6f402263af08812bc3af214479b64f266f8f0c81bb02858c66dc9cc24de518", + "vendor/danog/madelineproto/src/MTProtoTools/UpdateHandler.php": "e080635e26b3524b2a641ab1a46fa1843419fb099cbb547f4b071093e85c969b", + "vendor/danog/madelineproto/src/MTProtoTools/UpdatesState.php": "99dcc9af3c8c7e8442f07cf54c3e6248dcd6ccf35abc29032694383e661660b5", + "vendor/danog/madelineproto/src/Magic.php": "41b0f42a90ed36a490d94b20779e66c79fa7849a6168cadc0729c827d53810ff", + "vendor/danog/madelineproto/src/Matroska.php": "07649991374f1326c99024ac2787937b8426a72841f261abcb226187210ddfb8", + "vendor/danog/madelineproto/src/MatroskaWriter.php": "72dcb2cce8474e44b4047ac920a98e3bdbca13fd3ca0839e97d11c846e7cab48", + "vendor/danog/madelineproto/src/MediaDestination.php": "70fbd3c2b6443a858c9bbc649cf6da7089faa9cdb5eafa492bf781b8c9689c6f", + "vendor/danog/madelineproto/src/Mp4.php": "44e306c621c058770fb324d0cee5ced11c44b6dbf8b0032a3623afbfc15fea1a", + "vendor/danog/madelineproto/src/MyTelegramOrgWrapper.php": "69d4a6cd0d951acd102576b52ee69a8c7b97b098a012a63696b6a5bb5f786289", + "vendor/danog/madelineproto/src/Namespace/AbstractAPI.php": "cb4dd3dde720723c42ccb86077637dd0f4e9bfba1a5fdd3bb1984d7171f8ea29", + "vendor/danog/madelineproto/src/Namespace/Account.php": "553a6d88e7f8e6645d226bf03f1c9d754c5ebcfc1310fb459de946aa6b91fea7", + "vendor/danog/madelineproto/src/Namespace/Aicompose.php": "dca5aaf16e39dd064d91f3405c509789e9a986b61002b8f5123a1175f7b55445", + "vendor/danog/madelineproto/src/Namespace/Auth.php": "fbdc48b2d1ac3ada2a2c516f4e55cb2432fd8705dec481cdb495ed9ff780bce6", + "vendor/danog/madelineproto/src/Namespace/Blacklist.php": "349b44d36f85c08e37f411ace5014e2437c23b33664b2ba6ed3c0fdc9af75818", + "vendor/danog/madelineproto/src/Namespace/Bots.php": "beeb1472c1ebc6b4479d3f2d6eb7200cd6e541a66433503e58f53a2f68c6deb7", + "vendor/danog/madelineproto/src/Namespace/Channels.php": "4193548542c8e26f725e8bac457b40b09e9b47bd6f988c0ac59b49ba596afb54", + "vendor/danog/madelineproto/src/Namespace/Chatlists.php": "3e2b9c8e8440d46ddcaf6f694d6f443e08caf9210d6b169e1ace4d144ef56d6f", + "vendor/danog/madelineproto/src/Namespace/Communities.php": "7c3348434984649f5826ec5b802c3c3fe9165471152826dd0a0ad9574931b8f5", + "vendor/danog/madelineproto/src/Namespace/Contacts.php": "b1ca2474d2385050d03291eada435d9abccbc9cbdbab087e02c3b256527dea85", + "vendor/danog/madelineproto/src/Namespace/Ephemeral.php": "76746f3debdad4cef63abb89c252220678395315ccf95119cda170906f8220da", + "vendor/danog/madelineproto/src/Namespace/Folders.php": "f70ea333d2a5ba668004b3e36e06f0009efa00612e718955974dfb65ddec54be", + "vendor/danog/madelineproto/src/Namespace/Fragment.php": "731d1727804a18afef31d78657921e07456096d5bbbc3363f8d1ab0aa5c570d8", + "vendor/danog/madelineproto/src/Namespace/Help.php": "c1511db1141b446155ddd58343ab45aee09328c41a96d96dc906e0e316e10aee", + "vendor/danog/madelineproto/src/Namespace/Langpack.php": "5fe90740fb1435b3f48652dbd317123fc76f8f4933ee8d4cc6e60e2f84901ff5", + "vendor/danog/madelineproto/src/Namespace/Messages.php": "75d40a57cbe27461db759b2e8f9a0cc4d9589caab78d1fd9084cb2f48c412fa5", + "vendor/danog/madelineproto/src/Namespace/Payments.php": "2046f927d54a27334cafb1774541035ad43b1a6f03d14ad9daba45c945f99551", + "vendor/danog/madelineproto/src/Namespace/Phone.php": "346bf6fba1ba2375979c60c1c59728948683265f4096bd45d72621cf11b268c1", + "vendor/danog/madelineproto/src/Namespace/Photos.php": "7f97699151fcd3aaa3a59531ab5d18ae7361e814ccda70b35150a45a9c94b0be", + "vendor/danog/madelineproto/src/Namespace/Premium.php": "31335574e85727570b07d5d6e96ad0ab534c435c935da3fd5b869b757e1ba0ed", + "vendor/danog/madelineproto/src/Namespace/Smsjobs.php": "697af4ebd2e754c8e2392f923b8b7701398e034a10d241292a88a63e8316d0dc", + "vendor/danog/madelineproto/src/Namespace/Stats.php": "d0bd3918f2d5350063f3361768953947f321cd9fa1f9620c46d925053b77999c", + "vendor/danog/madelineproto/src/Namespace/Stickers.php": "dd2137cfe26b3408cddd19abcd34cdf0e8d9229ae185762dc04f623a3dc96cbc", + "vendor/danog/madelineproto/src/Namespace/Stories.php": "fe8d8019aa775dcaba43a2e206a44d243685a0862d971b31bd47bc559c2bf133", + "vendor/danog/madelineproto/src/Namespace/Toncenter.php": "6b8883777e89ec1b0f608b99f04c6e7f42a9661495a5dc7fa2e0bd4c4c165bfd", + "vendor/danog/madelineproto/src/Namespace/Updates.php": "eb3a81670d253bcfbddda5276d0a3094b2bbdb24a341d9bc6fd886b715feb479", + "vendor/danog/madelineproto/src/Namespace/Upload.php": "2d6e01a3ce0d41a3a079a8028f75a3d321c15956ec60f4fe3ddce19f18d75793", + "vendor/danog/madelineproto/src/Namespace/Users.php": "8535161fda863455e44721264b9508ccb4f763df012375ef49e3860218c185fb", + "vendor/danog/madelineproto/src/Namespace/Wallet.php": "f109c4c517d424173725bd504e1a1eb6db32a26ed598d82365de6dec46ac758a", + "vendor/danog/madelineproto/src/NothingInTheSocketException.php": "48b317474f34f82c45b35225d965c39f6eaeeba8ea617ac9520ffb8fd6281b33", + "vendor/danog/madelineproto/src/Ogg.php": "214f3aebbac9c78c035d6f14d797b760a54635999941ff91722e10e5e4c9a8b7", + "vendor/danog/madelineproto/src/OggWriter.php": "f6e75c037869c5ff56404a7da55721341519d5074f20434cf8efefa6487e12ec", + "vendor/danog/madelineproto/src/PTSException.php": "44a5b5a5ff6f004af7e8397ccc1f662d44df93d623750db60b36b6731a36bb88", + "vendor/danog/madelineproto/src/ParseMode.php": "778ba1b78c86bd463e91ab5d3fbc536115a434d2952ec8dd8f89b8d3b4d32d8e", + "vendor/danog/madelineproto/src/PeerNotInDbException.php": "46e4a0be5ae63fd0f234fb0c5ad8eb61ab7f9c6aa901449f2ba633d63bfdd23e", + "vendor/danog/madelineproto/src/PluginEventHandler.php": "d80d4117fb798a893cd817b3e52511e9aa8a6a0bcde12153b97c91998f468e01", + "vendor/danog/madelineproto/src/PsrLogger.php": "83e43268baf00792c9be2f88bf5bd44ed230ca9c9d2922f1919a5a636274d9df", + "vendor/danog/madelineproto/src/RPCError/AllowPaymentRequiredError.php": "7545c8d284afc79bc6c2d098025bae017329d50966f41fc7bbb50f02cb1784f8", + "vendor/danog/madelineproto/src/RPCError/BalanceTooLowError.php": "be58dbf2c8cf4544f52aae169dc02dc9ad3e793bb70e85b7e65ada9f621bb98a", + "vendor/danog/madelineproto/src/RPCError/BotGamesDisabledError.php": "6a8c993991ae5cbad7aea4af0f11ac0448c8e5e353421572cbcd44f7e7944b92", + "vendor/danog/madelineproto/src/RPCError/BotPaymentsDisabledError.php": "f31e2c316e4ffed20f5d381b85d90c80a7cb7f7ecb568e42691a62db2c53ff9d", + "vendor/danog/madelineproto/src/RPCError/BroadcastPublicVotersForbiddenError.php": "fad8d8dcc7b4f04ae8a6151a566d9b19ce457b07702f892f0ed448ec57a6eb36", + "vendor/danog/madelineproto/src/RPCError/BusinessConnectionNotAllowedError.php": "e747661aa1db85e55c432c271762ade4f5f93fd8aae42bf23b9a0d2f6ed71f8d", + "vendor/danog/madelineproto/src/RPCError/BusinessPeerUsageMissingError.php": "d336a77c26faa71184c4a9815ce4a53767732e8bdae2c84b17c9259a3adebf7d", + "vendor/danog/madelineproto/src/RPCError/ButtonUserPrivacyRestrictedError.php": "59e4760628c4b39d59da6cf64a7a86566966883de3caa060ec25f9ecfd225733", + "vendor/danog/madelineproto/src/RPCError/CallAlreadyAcceptedError.php": "367e461d42d350e786c83b691b63ca39fc39f5b4cbfe5bed371aba8dafd2ddaf", + "vendor/danog/madelineproto/src/RPCError/CallAlreadyDeclinedError.php": "da5e4270e751b6becd3c83335657510ced82f552eae0235203bcec6bc1c71531", + "vendor/danog/madelineproto/src/RPCError/ChannelInvalidError.php": "7f183cce6407c07a5db317ee45a77ce4f6bb21f61a73d5de04e5a9bad4588e48", + "vendor/danog/madelineproto/src/RPCError/ChannelMonoforumUnsupportedError.php": "5b0bbc9d2d1a021a7e659aff91b20a9894bb697893a1bc1f17e5eab6bf40596d", + "vendor/danog/madelineproto/src/RPCError/ChannelPrivateError.php": "898949247f010d1f38ad653fe3af0adc830952ca1dd922bbc50e80410f75492f", + "vendor/danog/madelineproto/src/RPCError/ChatAdminRequiredError.php": "8a8f4ded10b5c1ca3e5dd1b7156f6611c8c105745776278a550be7ee7aeefe36", + "vendor/danog/madelineproto/src/RPCError/ChatForbiddenError.php": "07241c8670466c9f6028f8260bf817aa4383d58e4b654eb3f8a8ac4f0431aabb", + "vendor/danog/madelineproto/src/RPCError/ChatForwardsRestrictedError.php": "eaee0e7423bd575fab5ef58136fc9bd939bca2bb03f9eb1b252af13cb987b155", + "vendor/danog/madelineproto/src/RPCError/ChatGuestSendForbiddenError.php": "a081846726f2d9d99cddf3598986cac36893df64f2fadc3523c74a9f44215a1d", + "vendor/danog/madelineproto/src/RPCError/ChatRestrictedError.php": "2755c4a550b443fdaa5bf7abf12213c847fba546c4258f4543abce4b9f5c2e54", + "vendor/danog/madelineproto/src/RPCError/ChatSendAudiosForbiddenError.php": "76c95e76e06b6b620a48749044d4db4ab63f3572ca585dddf86119ee60932f06", + "vendor/danog/madelineproto/src/RPCError/ChatSendDocsForbiddenError.php": "62a2b369b168e659ffe71d3613846fd4b82a329f47686ce6a332a6bf4aeb5951", + "vendor/danog/madelineproto/src/RPCError/ChatSendGifsForbiddenError.php": "96a28e65a8bc0a2680bdc015a9a93966bc5d3ef0b9d9ef9abf56f35cc13d3184", + "vendor/danog/madelineproto/src/RPCError/ChatSendMediaForbiddenError.php": "2daeb7b356ce5a0ff0adeb52098fc758ad8e4e1269d004d28e47931db0d9314a", + "vendor/danog/madelineproto/src/RPCError/ChatSendPhotosForbiddenError.php": "5c4a5de2faeaa9ff5df5b780adfecc8aabdfdcb91e38658edd514d87827f42b2", + "vendor/danog/madelineproto/src/RPCError/ChatSendPlainForbiddenError.php": "517d597be1120dea4b50d9fd2d9084c4b01dc1cb92460fb800c80bb0cd0cb0dc", + "vendor/danog/madelineproto/src/RPCError/ChatSendPollForbiddenError.php": "e98ed4ac4d9d1e3fe1275d0b3fed499ab734453e47ddd4993752f8e88c391a77", + "vendor/danog/madelineproto/src/RPCError/ChatSendRoundvideosForbiddenError.php": "6da29dcd9c05273648bef101e9d83ae804be4ce5ddd9321fe3537c3fe4db0fdb", + "vendor/danog/madelineproto/src/RPCError/ChatSendStickersForbiddenError.php": "52806e59a495b8926e34aa755a40e275608f9aa443549253496a598ab982e801", + "vendor/danog/madelineproto/src/RPCError/ChatSendVideosForbiddenError.php": "2fee03e38a8d19100ca00a4c10fe22faf7c9210508c03fb272eff635953361ef", + "vendor/danog/madelineproto/src/RPCError/ChatSendVoicesForbiddenError.php": "cd5e42dad31062be2ffab2a109ef6dc6c06f04453fe6fba350fd7c4114e6af61", + "vendor/danog/madelineproto/src/RPCError/ChatWriteForbiddenError.php": "4d673107bf63ba813d719d99918c0c5a71b9580d2726456714da7ac54ec6c2e2", + "vendor/danog/madelineproto/src/RPCError/DcIdInvalidError.php": "477291eb63c24ae1bb07cf095edd62b8b5eeb21eea4c89485c6ad286748db878", + "vendor/danog/madelineproto/src/RPCError/EncryptionAlreadyAcceptedError.php": "255cc26e1601ea9a391b392fec71a0998dee1e89fd2681dca42df5a5b6e82173", + "vendor/danog/madelineproto/src/RPCError/EncryptionAlreadyDeclinedError.php": "c2b33465904c971da753276f8cf7b80ff312673af1276a01a4030088e2643bac", + "vendor/danog/madelineproto/src/RPCError/EncryptionDeclinedError.php": "4e4d7f7f77cc19d927ba786586ad3b0b76cf393a7557926f26dc839a6097139d", + "vendor/danog/madelineproto/src/RPCError/FileReferenceExpiredError.php": "b3556c165e70bc787127b0c1dcf079126fe9c153359ff99a5af1deab46cc54c9", + "vendor/danog/madelineproto/src/RPCError/FileTokenInvalidError.php": "551115fd2c06f6fe04909112f434dd5967e2d793c309a1bef293e93e9f668ace", + "vendor/danog/madelineproto/src/RPCError/FloodPremiumWaitError.php": "f945acfcbab50d5b7dd0ec5f505d754b950431278c847ff33799709b0474b1a8", + "vendor/danog/madelineproto/src/RPCError/FloodWaitError.php": "ce14edba2a694e86cb2100a2fa7b5ad6a2c87f049077a188f58d0f9a6183f559", + "vendor/danog/madelineproto/src/RPCError/FromMessageBotDisabledError.php": "6f6b08aa8b9020db975a9ba1844dac8457f469b59a710d8053aba7a94e55b7df", + "vendor/danog/madelineproto/src/RPCError/ImageProcessFailedError.php": "f03ded1ab8a98a3915c7da743839d8206cee0c9e9a9437ae53a0f1496cb8d4a2", + "vendor/danog/madelineproto/src/RPCError/InputUserDeactivatedError.php": "9b610d0fb3bf3ddb94796b824f9257443c77a2c67689fda1a2bb0077ea81b16f", + "vendor/danog/madelineproto/src/RPCError/MsgIdInvalidError.php": "4bee662912cc278714f47108a36ee35e762567339073ea5ab5e3c1cd58ddf133", + "vendor/danog/madelineproto/src/RPCError/PasswordHashInvalidError.php": "c61b56fe8e35e9a754d3c4c69832b29f05250ecd8f414a0d8c90b11fc083cd2f", + "vendor/danog/madelineproto/src/RPCError/PaymentUnsupportedError.php": "e5b2a6d96ab98da08333530bb8517c57071fd386fe1a27e7e353e29bacf987ae", + "vendor/danog/madelineproto/src/RPCError/PeerIdInvalidError.php": "135e6f1cfeca5935f631d23c0ab6a7a3593e7bee640a3cd5d7128b0af2ef43d0", + "vendor/danog/madelineproto/src/RPCError/PinnedDialogsTooMuchError.php": "bdaf33ed30401373edfabbe1ff4a5288beea71ab7dde700f8c3535ead2b2fec8", + "vendor/danog/madelineproto/src/RPCError/PollOptionDuplicateError.php": "ff868ff5c9fb3717ffd9020a91db47390c99f34cc223824cd5bdc50344a88a1e", + "vendor/danog/madelineproto/src/RPCError/PremiumAccountRequiredError.php": "91dfe098a6317e6582252d553b24039cc0a21e8fc812f77633a7867fb5c194d5", + "vendor/danog/madelineproto/src/RPCError/PrivacyPremiumRequiredError.php": "7d7101b2797db629aba1fce1cc1758da3a532439e46bda22ca1807dc2fcc7b0a", + "vendor/danog/madelineproto/src/RPCError/QuickRepliesBotNotAllowedError.php": "6531a236bada9d4b7d914af25a67d388de03b522f737edff16dc7e1a4f2aef96", + "vendor/danog/madelineproto/src/RPCError/QuickRepliesTooMuchError.php": "edaea41224d77f311a974cf0574136c5072c2a194700ba04fda5241887b3670f", + "vendor/danog/madelineproto/src/RPCError/QuizCorrectAnswersTooMuchError.php": "71f24ba70728bd0683590415a30b922102c5f52855d8635e48faaa13c5d95e8b", + "vendor/danog/madelineproto/src/RPCError/RateLimitError.php": "885e2d91b2f26adc67ad63a531a86344e78f2e21cf378fffa89d649abf6fca5d", + "vendor/danog/madelineproto/src/RPCError/ReplyMessagesTooMuchError.php": "ff4cacdf3a7d4d9b3b01641c8e4454327f621f0e34c7f0ca197b19c4ebafe901", + "vendor/danog/madelineproto/src/RPCError/RequestTokenInvalidError.php": "4dc5c9d87cd4531b29e276cd50124b5c0790a0cac239d035d99c57d70ea409d7", + "vendor/danog/madelineproto/src/RPCError/ScheduleBotNotAllowedError.php": "3a7876cf57b2b9811b2a380375170dfdc4a8d301477cbe87afc7fa0da0f0fad1", + "vendor/danog/madelineproto/src/RPCError/ScheduleDateTooLateError.php": "2b31339f640f0c00e5976e21dbf3540cdd7f3551b194fbf2d8875241d90af8e1", + "vendor/danog/madelineproto/src/RPCError/ScheduleStatusPrivateError.php": "1fe1fff196aac16e17d74a631e4a6edd59d8f7d35aa6947825c4552127a03359", + "vendor/danog/madelineproto/src/RPCError/ScheduleTooMuchError.php": "fccb09ea27ee3dc09adb6ca2ba7d056c6f6f228131b2eb4f7a3cdba02480e560", + "vendor/danog/madelineproto/src/RPCError/SessionPasswordNeededError.php": "e6c2980695bf7de9e37cb98f30f6bb7b2f939c4634a2011b9110840b15ed3909", + "vendor/danog/madelineproto/src/RPCError/StoriesNeverCreatedError.php": "06a7e8f3e54caeaa361a2ba00d23c80b81824308ee0943b7957223c7625146d0", + "vendor/danog/madelineproto/src/RPCError/SubscriptionExportMissingError.php": "531694c28f22f84ee526de516267780df2d63bcf8462b9333a150b22f0d8cf0e", + "vendor/danog/madelineproto/src/RPCError/TimeoutError.php": "f16076f40c4e21060b5f5989ab424804bed7f8648e7c8ec56e57ca39344b3883", + "vendor/danog/madelineproto/src/RPCError/TodoItemDuplicateError.php": "966458c69e6963d91280cae3c42ab923a453dc58e4bf9575fcfad0b0994024fa", + "vendor/danog/madelineproto/src/RPCError/TodoItemsTooMuchError.php": "060a61aa2630a59241c837f0f410791a208211b1675c41180011794fddf2d759", + "vendor/danog/madelineproto/src/RPCError/TopicClosedError.php": "be640121bc3655b1e4bff728ba4276bc4064f88f306b12f824fa216f32b69ae3", + "vendor/danog/madelineproto/src/RPCError/TopicDeletedError.php": "46930ffb3ae8cab13199d54aa6be91542f78578e11f900ea604b480e7397ad13", + "vendor/danog/madelineproto/src/RPCError/UserBannedInChannelError.php": "ef3fcd01ee3c4773258c5f52c02ec3c95e038d488c755a6a8318c82915cf624a", + "vendor/danog/madelineproto/src/RPCError/UserBotToBotDisabledError.php": "234f8c63db042d7bc96b50bfc1e5c78cc640f354748bc7570fb1e4a126e2be40", + "vendor/danog/madelineproto/src/RPCError/UserIsBlockedError.php": "c90e12c05cbb26577fbb09a9d06469a209cb4da0e3138139222f289c8e3b9f32", + "vendor/danog/madelineproto/src/RPCError/UserIsBotError.php": "ad1fb80fb0411c61a7b129f4523c8d31e13129a03b8a18d1b94714d066752601", + "vendor/danog/madelineproto/src/RPCError/UsernameInvalidError.php": "6cba0ebc199b1d42493899abd367d3ef68e03ebaf94c2173a28089e68b78d535", + "vendor/danog/madelineproto/src/RPCError/UsernameNotOccupiedError.php": "6be96ea8d4e7ae16364e8d45524c76daadf416be9532de81871544b21bd55d75", + "vendor/danog/madelineproto/src/RPCError/VoiceMessagesForbiddenError.php": "6bf858243aec865f6981b447ca82fa4ce1ebebd85d862804fd22f77b74523689", + "vendor/danog/madelineproto/src/RPCError/WebpageCurlFailedError.php": "8c66ae141891ec1647e3faa75c497fc7f6842b018b8a5399babff9268a661779", + "vendor/danog/madelineproto/src/RPCError/WebpageNotFoundError.php": "d02d52d96f3bf639ccc3569ae38533983d3ed665a6fe864e47230df657ad85bd", + "vendor/danog/madelineproto/src/RPCError/YouBlockedUserError.php": "033f822ddd13ed601ef8642dedf584d9f75d7fd1bbef9d031a0674050256e974", + "vendor/danog/madelineproto/src/RPCErrorException.php": "ab56a9ff467a53680b556a86f0cd1dc48ebee76e5e6d5d99921227669acbea35", + "vendor/danog/madelineproto/src/RSA.php": "1f77128fd661aa57829dfb0640b141479faafa9e52f947ba1bdf51027e520c74", + "vendor/danog/madelineproto/src/Reactive/Actor.php": "3553b9a9ff52f9c965be46e2e2306bcdd7c7b23ec9663c50658ec8c979ec6a3c", + "vendor/danog/madelineproto/src/Reactive/AsyncWaiter.php": "b382f47be22219c0d6abc9425c69bb9f59e05b58623e6ae3e055dda6b302f84c", + "vendor/danog/madelineproto/src/Reactive/BaseSubscriber.php": "cdd76559ae001c02148398b9cebe8acc6d2e9ea733fee2ca52596fef4169b08a", + "vendor/danog/madelineproto/src/Reactive/EphemeralSubscriber.php": "95b889dc53895e2b5ff98776abd02f47d20073274229fd53ca6cb45f84066aa0", + "vendor/danog/madelineproto/src/Reactive/Publisher.php": "da631e2088464a12de2c5bc58730bb81cf67a34567862608ccb5792fc655e07f", + "vendor/danog/madelineproto/src/Reactive/SimpleSubscriber.php": "fbc4d48b560195a98f83f0d4e11118360ad32a8557aa3183dde4f77a935e8cf0", + "vendor/danog/madelineproto/src/Reactive/SimpleSubscriberAdaptor.php": "a92ef101b593f462b8942066d475b6619751f2af48a9a64107e668f94f9dc239", + "vendor/danog/madelineproto/src/Reactive/Subscriber.php": "f0de1eea6bc660af97693095b839fb34ed85bc40c6bb502779fa9c479761daf2", + "vendor/danog/madelineproto/src/RecordingEvent.php": "2394f8785670cea05e86f6aa90272248ecf3bc92a8d5f8acda94a0c34663ee4d", + "vendor/danog/madelineproto/src/RecordingFormat.php": "0dcd93222a7c336f4d94bd2e1d2db93b7283ed4846530d328bd48d3ea0416333", + "vendor/danog/madelineproto/src/ReferencedTimeoutCancellation.php": "5edf1215937e2120caf0bea8c343a0a0196c60f56d317c4f539271352e94ad42", + "vendor/danog/madelineproto/src/RemoteUrl.php": "cb323fa14ac0588b01d9c71d141de8fdcc9aed33c5db28c7f85e9261e6fff3da", + "vendor/danog/madelineproto/src/ResponseException.php": "0868b8db671f8cf05625a18a348c63d3585ad645bc6a2c24122e7871d15dfe85", + "vendor/danog/madelineproto/src/RestoresDeclaredProperties.php": "fec52600d712ba53228768381b8b246475680c6bc58c180b3b1d318e476d05ce", + "vendor/danog/madelineproto/src/ResumableDownloadStream.php": "93acd4a9f47422786763cb7af5a9a6375dd400e016bc268ec9b4e0cb570912b2", + "vendor/danog/madelineproto/src/ResumableStream.php": "ed6d99ce30928e9babc7c6899e0f84b3667a4c36b880adc723baed5fd2480ae2", + "vendor/danog/madelineproto/src/SecretChats/AuthKeyHandler.php": "c35c47b46a9cb6778cb9e3bf5c546e30482489d31700883d4c86d426bb7061fd", + "vendor/danog/madelineproto/src/SecretChats/RekeyState.php": "8f88a0d09d5766ba31e214ad9861207ca7f79b221ed7b22d815405cffc6abb67", + "vendor/danog/madelineproto/src/SecretChats/SecretChat.php": "6d07c912f5be6185bc0e0e16d7366046278872dc6cd768ef7cd3b794bfab98d3", + "vendor/danog/madelineproto/src/SecretChats/SecretChatController.php": "503668f1ee7a7ab27f764b65e6d84105440e96e2b1076778c4bcc3c75d6df9a6", + "vendor/danog/madelineproto/src/SecretPeerNotInDbException.php": "899ac1d649fc5093a969593ba4f619e69aae6cb0c29e2f4a2cbba92502901b1a", + "vendor/danog/madelineproto/src/SecurityException.php": "f4208a91bf6612a95271ad9573e18dbca341adf99c0aaf14b565c6751a098b6e", + "vendor/danog/madelineproto/src/Serialization.php": "3729105c5b00322f6b6e72e5bbd89410c91a96c6371c7131b1464bf70cd8d459", + "vendor/danog/madelineproto/src/SessionPaths.php": "de95d0003f1a712e46702bb84ca6b9c21b5e2ef0e399f23f63ad613ae9fa4b8d", + "vendor/danog/madelineproto/src/Settings.php": "ded5b898f0ea94cb9dbf2129fb760edc42b7dda1876c6b8f480166d2b40f56dd", + "vendor/danog/madelineproto/src/Settings/AppInfo.php": "800774745fdadbc95c36ca3c1d66145a954db8740bf9abc8a0819a048adf3334", + "vendor/danog/madelineproto/src/Settings/Auth.php": "0b56cb05ee54f7a2f870d6e49620d2cb2fc83017308af61dd547415450d04869", + "vendor/danog/madelineproto/src/Settings/Connection.php": "3e4626e44da30d5671f0f9b82ae234b45c2f345d864ec89a7318fbfed75154f7", + "vendor/danog/madelineproto/src/Settings/Database/DriverDatabaseAbstract.php": "b6aabd7529708ecdfed46f753aa17d5d5d7e70f002e69712484359401d8b8680", + "vendor/danog/madelineproto/src/Settings/Database/Memory.php": "d91132fb23996551bfd0212f7103eb86dc5747ced94e935c32d052d03376e356", + "vendor/danog/madelineproto/src/Settings/Database/Mysql.php": "38c7cafffd6ed227467aaf9ba271db68acc3fa9926f240a34f832ee5d0a7f026", + "vendor/danog/madelineproto/src/Settings/Database/Postgres.php": "e25615513418078165dd3418363a767a6fbfd637d1e0e260da3847b4cc9683cf", + "vendor/danog/madelineproto/src/Settings/Database/Redis.php": "e790ba71585be885f53fa866741491225e3edff1ea6534eca2e58e559e6dded0", + "vendor/danog/madelineproto/src/Settings/Database/SerializerType.php": "1a2a80030aaa719c1a7076d8fda433a0d1ab4b11345629bcb1625300c98d5ed2", + "vendor/danog/madelineproto/src/Settings/Database/SqlAbstract.php": "d3c9da1dc7425b0ef092d1c18df9bd6e3a69148c06daef8cb6ac9eba5e99db13", + "vendor/danog/madelineproto/src/Settings/DatabaseAbstract.php": "9139e32e7712e31e55961c3d409770bdc410d1e874c56134265b40af2205d6bb", + "vendor/danog/madelineproto/src/Settings/Files.php": "8d9cccf3a811c3dd07fc290281358ecc48443ecd519b1497127e11c42adb15ce", + "vendor/danog/madelineproto/src/Settings/Ipc.php": "16806a32d9a61147eeff827fa17ce1ea4d2dce998532ffd545c7645ae6b5ac9b", + "vendor/danog/madelineproto/src/Settings/Logger.php": "f762d3a944eececcc5cae2c40434dca2a2e5af435d0da04a4b65a4f34be4045c", + "vendor/danog/madelineproto/src/Settings/Metrics.php": "6fe485537a4b6fe35f2c40f9ff7a4cf6af5dc1bed608c7262b720771d20a8494", + "vendor/danog/madelineproto/src/Settings/Peer.php": "19f65c716ff121efdc28f6e773a47986a8ef3b802ffcb0f5f81c0aa2047c4ff3", + "vendor/danog/madelineproto/src/Settings/Pwr.php": "53ac2a764b80620fafeb0f61ed6283081ee6b0f8294790f69f6a28854ce99182", + "vendor/danog/madelineproto/src/Settings/RPC.php": "bc20e70499ff7a344c418b026ebf2352f7220cd41b3a65c509f39021a92c4c8b", + "vendor/danog/madelineproto/src/Settings/SecretChats.php": "a72e7ddb788e6a801f9e74440ccf076bcc05de636180388153d301476393dfae", + "vendor/danog/madelineproto/src/Settings/Serialization.php": "069f9726e8f187a29b16228a15f2b49d76fd3dd0fbcdd3341d8bdf1b378ddee4", + "vendor/danog/madelineproto/src/Settings/TLSchema.php": "cdd97c7bb1a3364b44d0a24f407b219091ed4c373790995ce95ae5daee06a95a", + "vendor/danog/madelineproto/src/Settings/Templates.php": "7a26ad9eff5b72e5933d201fb97439258cdbde34ffe148d3948441741048934f", + "vendor/danog/madelineproto/src/Settings/VoIP.php": "b3ffd8f9b6c164b2257d6d0a88348d67246741d6a2c7879e6ae7f6102d5e0722", + "vendor/danog/madelineproto/src/SettingsAbstract.php": "701e148c0c10f28bc723ffccb7f2bbbdfa020223de420d3e4f1629cd50a049e8", + "vendor/danog/madelineproto/src/SettingsEmpty.php": "622b1a78debd36c47d860f6d7c9b745282101da7841e096800780a4b7af909da", + "vendor/danog/madelineproto/src/SettingsGetter.php": "f07710b86ec79b69824681d6bf78a4affcda62a4484174cdab7ebae451fc3b95", + "vendor/danog/madelineproto/src/Shutdown.php": "64355d91a84d622daed963c5e3b44f21c30f94164561480d2641494ffd2e22ca", + "vendor/danog/madelineproto/src/SimpleEventHandler.php": "1b25145c677d6cde695c30eba0192c6fd456b0581b71751ddd8ab9c2ec33c2e7", + "vendor/danog/madelineproto/src/Snitch.php": "0445e57ccfe6cf6a3edaf43a2e6cec3a60bc94d433cad7bc3d2ef12d89244bdd", + "vendor/danog/madelineproto/src/StrTools.php": "6c3579e46e8a198eaa4752f2299af2ec2c80629c2c8fb0340b6120188fd5c2fb", + "vendor/danog/madelineproto/src/Stream/ADNLTransport/ADNLStream.php": "100d054c84a79e400ea9fff8f900fde744a321106fa0d4f662cb76f42a8be326", + "vendor/danog/madelineproto/src/Stream/BufferInterface.php": "0e1e8cdc1dbb9d3fa26fc79770f5551d79b1ed1f59f7b04a1c498a6a1d88a577", + "vendor/danog/madelineproto/src/Stream/BufferedProxyStreamInterface.php": "847a3622792eb5083ac60b0902eb329a9349eefbcf10c86a251373f63d05ebd1", + "vendor/danog/madelineproto/src/Stream/BufferedStreamInterface.php": "d011e6909388deb68264756304e65bceff025a1fd47c08cfd2daf7261af80b0e", + "vendor/danog/madelineproto/src/Stream/Common/BufferedRawStream.php": "798cf47aac19eecf9eb05fedbbd2cc03789ce0742c924a43562bf8b5eba535b1", + "vendor/danog/madelineproto/src/Stream/Common/CtrStream.php": "3efb05eaabaf6416ec5fc5ea9723ebf462209bde2a510c65defc990e2741a5eb", + "vendor/danog/madelineproto/src/Stream/Common/FileBufferedStream.php": "9ca28396a878f0e3c304de9c42ed1a1f4ff2b65b212d4bc7cc3d45a2cb0aa49d", + "vendor/danog/madelineproto/src/Stream/Common/HashedBufferedStream.php": "7afffeba9988e7cbf952c821907c872c65925ed59521e4ab172cf28b4b13d550", + "vendor/danog/madelineproto/src/Stream/Common/SimpleBufferedRawStream.php": "bcab7c10e0d04459bbf25be43be4b843cfa27c964467637eab83bf1524eb0561", + "vendor/danog/madelineproto/src/Stream/Common/UdpBufferedStream.php": "fc37dabee8a1658767c02eac51deaced15a9ea720605859b8b6c5c7f0679ae0a", + "vendor/danog/madelineproto/src/Stream/ConnectionContext.php": "ca13e6a0dcdbfbe3437e8006e8873caae2afe3283ff0995322c2ca4e5490fb33", + "vendor/danog/madelineproto/src/Stream/ContextIterator.php": "f8e5bd306c61791da5696baf08abea1c83865031a8a18b557229f6715c62e3c8", + "vendor/danog/madelineproto/src/Stream/MTProtoBufferInterface.php": "681fdfa4da4aeaf1f2d32fdcdca94386c5ffa5a899aa5c01cc5fde6a386b30ae", + "vendor/danog/madelineproto/src/Stream/MTProtoTransport/AbridgedStream.php": "452dfa71784f7f3f029d170076664fe988d3862d7a8f1923f8b9850cd25129b7", + "vendor/danog/madelineproto/src/Stream/MTProtoTransport/FakeTlsStream.php": "170236f14e71f3ab4e52d3a638d58a2cb3437fb69f9f54c6fe063ac7c1daaa10", + "vendor/danog/madelineproto/src/Stream/MTProtoTransport/FullStream.php": "2a383ff9bcc33c57abc1e1b6e4ee4449a8fd5e4ad9123bc9e42d7af1e098d93a", + "vendor/danog/madelineproto/src/Stream/MTProtoTransport/HttpStream.php": "a307ec6cb9790f57e56cd9ed89fe9d8dce894c0273e159c31939d3ed468fc728", + "vendor/danog/madelineproto/src/Stream/MTProtoTransport/HttpsStream.php": "7b96d6a7f9675d8be39050b7c41766f288f6c4d9bddd355d9b58100e0df4e073", + "vendor/danog/madelineproto/src/Stream/MTProtoTransport/IntermediatePaddedStream.php": "3a876b9fff6c428af5a8ae6d33be6f047587cbfa4aa15091550fd3eaadc6a988", + "vendor/danog/madelineproto/src/Stream/MTProtoTransport/IntermediateStream.php": "211890335be83b146c8342b607079588bf96edb0e978d4bd4456fc4815eae535", + "vendor/danog/madelineproto/src/Stream/MTProtoTransport/ObfuscatedStream.php": "469fa346a93e9bd567d500ed34046c040a77fc4fe314801dca0935fc401e4c82", + "vendor/danog/madelineproto/src/Stream/Proxy/HttpProxy.php": "6c771d2a5ca8143ccfad46953402c5302ca7009b598b211a225a44e410ef505f", + "vendor/danog/madelineproto/src/Stream/Proxy/SocksProxy.php": "7a34f35b50c14efc89242e1ed913749519790d4d758428bcc9a9ef360ffaf164", + "vendor/danog/madelineproto/src/Stream/ProxyStreamInterface.php": "48b61f46f11b31883d2a22a7926c3b45030d31b1f57f570741b19937ad3c8ebc", + "vendor/danog/madelineproto/src/Stream/RawProxyStreamInterface.php": "ebeab5ad3c370bae33c728867f78f0c5ed73d1fca16c18fa2ee281b8791b6fa7", + "vendor/danog/madelineproto/src/Stream/RawStreamInterface.php": "1ccbde71285b5b21d8cbcb0e02b9efb10110eec81b310a022b083b43b9d86480", + "vendor/danog/madelineproto/src/Stream/ReadBufferInterface.php": "bd27d175ca2677db4c1953930e5b4312bbe8f2e292a44187f1debef7a304e623", + "vendor/danog/madelineproto/src/Stream/StreamInterface.php": "93b6a8b02c2eab7168a36f9f4ac92620ae35684162a63108c34ea4adb7694bee", + "vendor/danog/madelineproto/src/Stream/Transport/DefaultStream.php": "7a4bbbf8fd947f1744b01a7c5c7ea3c94ea9942fce411bf870ec310de8b9e709", + "vendor/danog/madelineproto/src/Stream/Transport/PremadeStream.php": "f1b058a6294d8c950f457e63835242b6bff8628f8982120e068340f44cf7b288", + "vendor/danog/madelineproto/src/Stream/Transport/WsStream.php": "c8d4d4cd485bb1cad4d3d466b08c1278089b670646a38c869b68278e37139c0d", + "vendor/danog/madelineproto/src/Stream/Transport/WssStream.php": "4a1a2e4b309dc27fd2bbff003861a1c0f7eb7a687a7aadaaeaf6a3cb00a1c936", + "vendor/danog/madelineproto/src/Stream/WriteBufferInterface.php": "4c1d8901ddab072e6a852af2bdb353c9d27188e6c9a4d06d782a10fbc5476835", + "vendor/danog/madelineproto/src/StreamDuplicator.php": "23aca0e61ebe3f088ea9ab0fa849dcb12ea60a123d7aa31cb40b31e1c1341c74", + "vendor/danog/madelineproto/src/StreamEof.php": "1b4c3b734181de5b2a40f129db69680216de98a280b7a6e2b888ccee21c4776e", + "vendor/danog/madelineproto/src/TL/Conversion/BotAPI.php": "35cd10cab57d488cc7e656109218c39c055718cf07177c00f832ce14c51c7330", + "vendor/danog/madelineproto/src/TL/Conversion/BotAPIFiles.php": "6599f743a5d47d5ada08728c8fb04d853bb9b2171313ff0ccd3c39153e51b5d2", + "vendor/danog/madelineproto/src/TL/Conversion/Exception.php": "6b3836ce0fe4a7f1deece11770124524d532ac2fe982020c7766c827984b88e9", + "vendor/danog/madelineproto/src/TL/Conversion/Extension.php": "e3dd1b61da4fb58455be3c45b8fc081757e24419d62c4d81ae0253ab843c1184", + "vendor/danog/madelineproto/src/TL/Conversion/TD.php": "a3ea20b323588fb603beac7f3d900bd9297713f32a40dda88f2f3d1afadea04b", + "vendor/danog/madelineproto/src/TL/Exception.php": "0d105deef9460217ff46b2279bb1f4fa4589240578ac4e0da080267562e57f6d", + "vendor/danog/madelineproto/src/TL/PrettyException.php": "c16a618cc11e9ac767a2f595dcbac057f73528e467571a6858c1517224e39b94", + "vendor/danog/madelineproto/src/TL/SecretTLParser.php": "9703bf1e23d194d89be98bbab6ac77011c2ed4be5c2241decb679f6106e5e1b2", + "vendor/danog/madelineproto/src/TL/TL.php": "1dafb7e306ff62df573d72eadd0257eed61c090aaa82af5a3ff8ea625f81e80c", + "vendor/danog/madelineproto/src/TL/TLCallback.php": "d2ff81dbbbfee9b89dd613b9c90ced3d6450720a6ae30336623db64a3ab396f5", + "vendor/danog/madelineproto/src/TL/TLConstructors.php": "bec0a716cabbc16d5adaa0c43ffd1fae6e9734ba4a3a9c7c97d0392082d04c81", + "vendor/danog/madelineproto/src/TL/TLInterface.php": "a36aa31acbca3bcbaa4f0cdf455f0a6a9af57ef12c579525428a834bc1008781", + "vendor/danog/madelineproto/src/TL/TLMethods.php": "6d2c0213e1e0f4f805395121e605537a6beb07e869b297346e622b67f5e00981", + "vendor/danog/madelineproto/src/TL/TLParams.php": "39bb62eebb39e7ee7c43d75b377c89251c786d1bc036b42467188ab22136cfdb", + "vendor/danog/madelineproto/src/TL/TLParser.php": "731b431c5c7f7d8120db743d22857248499190ca2f1042307a274858c6761ea5", + "vendor/danog/madelineproto/src/TL/Types/Button.php": "2ed2905a97e1c7b2fa43c69c642068e28b418df98a0cba7ec54576ee2a5ad798", + "vendor/danog/madelineproto/src/TL/Types/Bytes.php": "8f3c8db3342200b9c7a1139340787b504082a0df0cb4110ebc6c97c5260766fe", + "vendor/danog/madelineproto/src/TL/Types/LoginQrCode.php": "fe785e60e78d0754322c74edb476219d296d8106a32ea03820a06a09d0d599e8", + "vendor/danog/madelineproto/src/TL_file_ref_map_schema.json": "7928e74428ad04f8936bfc4131f6fec4192117dfa94c04c30588fd996b4b88dc", + "vendor/danog/madelineproto/src/TL_file_ref_map_schema.tl": "805fb65042f0b776aceda2ca4c09bf4686fd145099be1ad97e9e0e734cca394a", + "vendor/danog/madelineproto/src/TL_mtproto_v1.tl": "a68bbcfb6aea699cb394aec44008b01b915f1e8b632a1d786001ddd7c7300dcd", + "vendor/danog/madelineproto/src/TL_secret.tl": "899beb4c1713a65c9f09677dd93406a1e96c52b661d46dcd30ac7c0a87b0d20c", + "vendor/danog/madelineproto/src/TL_telegram_v232.tl": "76922ce265441d3f2f5188f56b69b41e1cb11354657ea547707507f8c3b93826", + "vendor/danog/madelineproto/src/TextEntities.php": "ff249ed55e2a7f7c1e2f1789da2c4fb883a3db7b94ae354e93987a9088c790b0", + "vendor/danog/madelineproto/src/Tgcalls/Av1Bitstream.php": "c4b2bdec74e3f598da86781adc3e49051aedec6a6b55d17068c8fb09543e6681", + "vendor/danog/madelineproto/src/Tgcalls/BitReader.php": "6756ab94be936c40bdd5a707709da21ab39dd9573be20c8c1777ada845e87cc3", + "vendor/danog/madelineproto/src/Tgcalls/CallControllerInterface.php": "e259d66f94b0f91166bb5ff7afa8c9efb90b5d594f26d4a8076006c68b87583d", + "vendor/danog/madelineproto/src/Tgcalls/CallRecorder.php": "90fd6c96607b6ec35285288c05f5837220cc71f90150c2faaa0ade3f53b4ea42", + "vendor/danog/madelineproto/src/Tgcalls/CallStreamsDispatcher.php": "c6f8c36b74d7f8971b788644b2991725ca1f93d0e49c4eac6644422c770619e4", + "vendor/danog/madelineproto/src/Tgcalls/Controller.php": "83ebb125e54674a0f8812270cf0efafaa89d2a601608b9d75e02c29e63ada50c", + "vendor/danog/madelineproto/src/Tgcalls/E2E/BlockCodec.php": "891a3165609a35530dcd8e45676f78bb94a0acd98bdeb57c8258c1367308ef0c", + "vendor/danog/madelineproto/src/Tgcalls/E2E/CallPacket.php": "ef72abb3ca7842664deb43467db6e9fe2790eae1a4dcef16eaa3fa2b19fc02b4", + "vendor/danog/madelineproto/src/Tgcalls/E2E/ConferenceCall.php": "bd4adb2a9bd6823decd21a2a040a618d218f4206c6e215a1013bbecfd303664e", + "vendor/danog/madelineproto/src/Tgcalls/E2E/ConferenceChain.php": "f5c1b69b077ec43a0adf38fd722c5ffee9e503762c9a61f2909146dc5ee2fa04", + "vendor/danog/madelineproto/src/Tgcalls/E2E/Crypto.php": "9b23d52f191226ecde54c8b1cc559b2af52313122d58a077f7960112487d9356", + "vendor/danog/madelineproto/src/Tgcalls/E2E/E2EKeyProvider.php": "39705f90f28403a3ca22d9af2169f7a943cd8f3222618ad3b17c31fb7bfdbc8c", + "vendor/danog/madelineproto/src/Tgcalls/E2E/FrameCryptor.php": "ce9e7a1fcf45a7f835b6e6f906ba3ebe0de0368d53fdb129473fc014c7f0f25a", + "vendor/danog/madelineproto/src/Tgcalls/E2E/FrameCryptorState.php": "006229e479faa6bf41f25a2107af501312d8f9662994ce461d7097c25c514fae", + "vendor/danog/madelineproto/src/Tgcalls/E2E/Verification.php": "8fdabd300355e2b97b317f36820a5be8833274726c5a0ebd4bc202a2dc95688f", + "vendor/danog/madelineproto/src/Tgcalls/E2E/e2e_conference.tl": "e8a6a754e8a3e51db66d2517ba54bb14e49767dcab3d27aa2aa9dc8569da88cd", + "vendor/danog/madelineproto/src/Tgcalls/EncryptedConnection.php": "81e2108b1d6050737a130c28a44fe0944956baf9b2b96eec05a7b83898550c10", + "vendor/danog/madelineproto/src/Tgcalls/GroupConnection.php": "addbb35e798da7617339c36b76db83fda290f5ecf96840f391690c372cb9a8db", + "vendor/danog/madelineproto/src/Tgcalls/GroupConnectionOwner.php": "ef2c86f15a6837575cdb2bae59f81a782489f9840aac73093c300de59d8d19fa", + "vendor/danog/madelineproto/src/Tgcalls/GroupMediaTrait.php": "d1d708ebe28905f239b2783f4caa62dc65d69c88b2a2b6b7463ad085ae4f7808", + "vendor/danog/madelineproto/src/Tgcalls/GroupSdp.php": "c4ebef12bfa93519d5d9a696c7cfd873a5308435c56b3865c70569c00caf416b", + "vendor/danog/madelineproto/src/Tgcalls/H264Framing.php": "bf87cb92b78f019d526cc4d7e96d1a0318e29a4f2a2328f34f3d3bef2acc265e", + "vendor/danog/madelineproto/src/Tgcalls/HevcBitstream.php": "84e47784284ab4eca971fd792ae85d50a75209d33833a802dc8a3a85bc62df17", + "vendor/danog/madelineproto/src/Tgcalls/IncomingMedia.php": "869b7332ac516e8c395238d99212f54bc33ae133dd9567b9ac701cdf9f490934", + "vendor/danog/madelineproto/src/Tgcalls/IncomingMediaObserver.php": "908a769d36baec4817059d545d8ff1f1e174bc86ebcdb93716fd96f0cbc8cb66", + "vendor/danog/madelineproto/src/Tgcalls/LegacyController.php": "693ccff407640bb1b24b98e76e15388c4365af4f61a4a7e963f4adcec6815756", + "vendor/danog/madelineproto/src/Tgcalls/OpusPlaybackTrack.php": "689754d035e2922b3a053949b417867cc7fffff5061ffdeb39b610979f8a4f05", + "vendor/danog/madelineproto/src/Tgcalls/OpusRecorder.php": "942cf968cc8db500ee310c6a302557c9fcc539fd4c728c35013af873b6abe1ad", + "vendor/danog/madelineproto/src/Tgcalls/PrivateCallController.php": "33ba5324f07ee0ad5c26a45262fe4695a68885eb55b34289d538aab69ed108ad", + "vendor/danog/madelineproto/src/Tgcalls/RecordingObserver.php": "c9edba1060f26869ed9ba868ee3ee01b66c653e1285408df29f582a875c6bb23", + "vendor/danog/madelineproto/src/Tgcalls/RtcDebugLogger.php": "424bbee1a6ca9f97e03a565fca596d5322e6cf203cfe30c5781eaf8df6979089", + "vendor/danog/madelineproto/src/Tgcalls/ScreencastCodecObserver.php": "af0045562665030e6b6413693eeba3ea696fd254b7985e54d10639cc7d4bc979", + "vendor/danog/madelineproto/src/Tgcalls/SctpSignalingObserver.php": "bbe3c6c026f92044011bf3ffb2789fdf935bdb1165153a0ce8d14269fd24a8a6", + "vendor/danog/madelineproto/src/Tgcalls/SignalingIceRole.php": "c2001658bad1ab1b2120aa1edd4e34b8b13291b7d670bb6717b2edd56d86f955", + "vendor/danog/madelineproto/src/Tgcalls/SignalingSctpTransport.php": "c873668b3547e3348fd0d24cbdff1c6e71bb99bd9b924ddd574e8746f30c000f", + "vendor/danog/madelineproto/src/Tgcalls/SignalingServiceObserver.php": "8a982c9a014634b48380fbda06c8061f7375c7b3b9a534b891a36efa0ad6235d", + "vendor/danog/madelineproto/src/Tgcalls/TgcallsTools.php": "43024600a0659efbf8b49cd1eec8a5fcbd49a44579ea5fd19e8ed2df9c5bebdf", + "vendor/danog/madelineproto/src/Tgcalls/V2Sdp.php": "6be1e08cd6c699d01ec10d4d2824bbdfd4256154979b7f000b68648060973d24", + "vendor/danog/madelineproto/src/Tgcalls/VideoCodecObserver.php": "098ffb5e06f74d81d701d790df8dd00cbacb1ba477daabbf3884049180620b49", + "vendor/danog/madelineproto/src/Tgcalls/VideoPlaybackTrack.php": "49a3439e5fdda1abe1ec20882e0f88757a181f33ff51ae08f6a5bd9e9345a83b", + "vendor/danog/madelineproto/src/Tools.php": "3fe29d5df2686fbf7ba2c680cd46710130f79cc6ca6693ab4152dc373a516266", + "vendor/danog/madelineproto/src/TransportError.php": "ca8c1681243f48dcf5fde4c88d134d42d104b60da8b2114921f7b4ba9d7b8847", + "vendor/danog/madelineproto/src/UpdateHandlerType.php": "c97475bf79cb88d30d2728ce463164fcbab683872226ac04bfb48a36c55c4bc3", + "vendor/danog/madelineproto/src/UploadResumeException.php": "c70a0de04352d7263b3fe2c323a90abd9fa0f3fd6f0dd3f66f8825f5305f7ae6", + "vendor/danog/madelineproto/src/VoIP/AuthKeyHandler.php": "ee245ed5b433b1e37df82721c8d20e85d1958170c53462130323c73d711231bb", + "vendor/danog/madelineproto/src/VoIP/CallState.php": "4ce9ee3f3680c7bd48139de843f160fdd3cdd142fdd8b882c40c619f5ffacad1", + "vendor/danog/madelineproto/src/VoIP/DiscardReason.php": "e7bcb374e5e9c280bb7b38cd3341a1ce93884934863051d8fdba09b79a6fdf13", + "vendor/danog/madelineproto/src/VoIP/Endpoint.php": "ab8347d4a96806af176e6cc29f26916e9240b6ed0d78b82572f64d45a4b5b838", + "vendor/danog/madelineproto/src/VoIP/MediaState.php": "298aca97509cc4c35011177c25d9b6b3c6861eff8590e2a78f5f5f78f9a3fee6", + "vendor/danog/madelineproto/src/VoIP/MessageHandler.php": "d783d614a310d8e3b0e21eb58213fea6378718fd3569505f1292ed8aae6d7979", + "vendor/danog/madelineproto/src/VoIP/SignalingProtocolVersion.php": "4ba5e7a38a6ebb435fcdd894f0b6225f8303205d9fe5fb93c831dbd34ecd7622", + "vendor/danog/madelineproto/src/VoIP/VoIPState.php": "de6d6944f8449c9cef3ed2a8160b2952104775f8f2bf5c222fd82b3e02c1a195", + "vendor/danog/madelineproto/src/VoIPServerConfig.php": "fcc9e5e96a7f7e2b1d1a1fc11c33956babd854c0431d346530200899bd3ce53c", + "vendor/danog/madelineproto/src/WebUI/Action.php": "805d301ecd8954842c61e95f07ed79875778ce30d90bf6e1a432004669b66bf6", + "vendor/danog/madelineproto/src/WebUI/Alert.php": "9ffe652a0e64250b72a316f685b5387f35867f7a9987598598d860edf8aeba90", + "vendor/danog/madelineproto/src/WebUI/AlertLevel.php": "3986f843926132586a239e3056a4f28c3a133f1f1d3b42ffaabb4b1601e40ac3", + "vendor/danog/madelineproto/src/WebUI/Field.php": "ce61d39e921e5206292ca40a4e3e2ada26b5388abb90e236c9a18f086a840f1b", + "vendor/danog/madelineproto/src/WebUI/FieldType.php": "221ec811eefc0176532462ea5367314f67369d688afe6998ad06e0453a193287", + "vendor/danog/madelineproto/src/WebUI/Page.php": "079726ec172976f1db05fbfa6106197c063b535b8c3a2876268cadd8922fa2ae", + "vendor/danog/madelineproto/src/WebUI/SafeHtml.php": "0e10a712d7c0898143bc5222ac5467a1563f58a91ff6941f739a0b793b330de3", + "vendor/danog/madelineproto/src/WebUI/Step.php": "225a04244c77efd4745e3b13ec348eb3b564f0914e7092ebe2cd5937a14c65f5", + "vendor/danog/madelineproto/src/WebUI/Template.php": "73e8940af6077f109a3aff914209f383c846587541efb027255da832251efe9e", + "vendor/danog/madelineproto/src/WebUI/TemplateEngine.php": "b5eb91a32f5708c13d37d2b0f8e0bcb898254cb1f7ab8a00c3ed0b419890c8a2", + "vendor/danog/madelineproto/src/WebUI/WebUI.php": "d9fb95fcf018c4615992a12f83f684796c05ea06aea637d6d4e8f6d83aede2e3", + "vendor/danog/madelineproto/src/WebUI/templates/assets/madeline.css": "c602053ff5801fdd2dea8ff2dce4c0053b7de28e8ba35cf25f0f3c63050a9f8d", + "vendor/danog/madelineproto/src/WebUI/templates/assets/mark.svg": "c61cef61f2319aa562bdb5ad8577e9e69462e93b16c8bc8c9273b219f5d262d7", + "vendor/danog/madelineproto/src/WebUI/templates/assets/tweb/app.css": "fd26cf19b3029d807052641e8c6f8cea794f8042d6cd8d2d74d06a92a9c258eb", + "vendor/danog/madelineproto/src/WebUI/templates/assets/tweb/app.js": "fb7ac011af804ab3be72978da4e338e992d671e0266802fdb25758aa58e9eb7c", + "vendor/danog/madelineproto/src/WebUI/templates/assets/tweb/tgs/TwoFactorSetupMonkeyIdle.json": "cafea184f44ab7c806bfea6881c5ed628c99141e83e84dd43331d06d6186950c", + "vendor/danog/madelineproto/src/WebUI/templates/assets/tweb/tgs/TwoFactorSetupMonkeyPeek.json": "ccaaf8850d446732a1944948e5c138e33f3ab5c80f6237502fa5834760059532", + "vendor/danog/madelineproto/src/WebUI/templates/assets/tweb/tgs/TwoFactorSetupMonkeyTracking.json": "1719036af0c57d6762a1b9f31e6ce076c751fe52cf5a3f0e29109627760f7b0c", + "vendor/danog/madelineproto/src/WebUI/templates/layout.phtml": "8a344da36c68eab3ebd7ccae54d32c8a7b914eb0e72dd9ebcd4d5e6c33241346", + "vendor/danog/madelineproto/src/WebUI/templates/page.phtml": "15246f0643109d10589a72e92c5771005d1fa559cdef8d1e441af87645144f67", + "vendor/danog/madelineproto/src/WebUI/templates/partials/actions.phtml": "7efc1e31e7bcd7505e98b37801b8eb8585826060a39a2d637827bd667ec4b899", + "vendor/danog/madelineproto/src/WebUI/templates/partials/alerts.phtml": "085a5406b893c2eba50d058c90eb7d446f7705d8d8cd001a55b267ab8364cf59", + "vendor/danog/madelineproto/src/WebUI/templates/partials/brand.phtml": "a3f8a889d58bce1c74dcee9900f7702f603eb698f4a57bb1e116fb1387de337e", + "vendor/danog/madelineproto/src/WebUI/templates/partials/fields.phtml": "b6ad6c9b76c3e2aec22e978a40dcaf6009a64d80c9b0858cd5d6af84483108bc", + "vendor/danog/madelineproto/src/WebUI/templates/partials/steps.phtml": "092555896f758608f57d221e7b962a544b6d6a7a23a91570e664a721b5d341be", + "vendor/danog/madelineproto/src/WrappedFuture.php": "e50c3bc2af760f2435cf3b037a72c52bab972394602c383db0e0a999684441ef", + "vendor/danog/madelineproto/src/Wrappers/Ads.php": "b15d6f0e8c32b5d48b71192329baaab9c41024e9e61772437a0e542afb00183d", + "vendor/danog/madelineproto/src/Wrappers/Button.php": "202739736b5631d7d61a181e161bff4e0897203501785e9c65c256bc1b64734b", + "vendor/danog/madelineproto/src/Wrappers/DialogHandler.php": "81c042686d66fc06c002c6aec7063dafd0c3a6710f480a6c612c4f1b3d2a24f5", + "vendor/danog/madelineproto/src/Wrappers/Events.php": "0a64175dc6301b8fdb242c173624301a620d232e5e2474a60009adc1e2343266", + "vendor/danog/madelineproto/src/Wrappers/Login.php": "0c44ace9aa1218e3f3836b411fc18ef0f7cfdfefba9cc3138d6004a65aaeaa97", + "vendor/danog/madelineproto/src/Wrappers/Loop.php": "642c74c34bbac92670aa7398029ed01254ce8a005b07c280ecc6b5f3ff830ab1", + "vendor/danog/madelineproto/src/Wrappers/Start.php": "da46f13c47758c39b50e939f83462fc9c5556fea27e52b60e120dcc55de8dcf7", + "vendor/danog/madelineproto/src/empty.wav": "51ae0ca177e97f8412e667fefb20f1a3b45c81cc59ae96c252adb6c7cd7c32fe", + "vendor/danog/madelineproto/src/file_ref_map.dat": "d03c0c48f9035b4d16628571c3b9f5a3eae0204642ffc66a8caadf62d5a6279e", + "vendor/danog/madelineproto/src/file_ref_map.json": "6a55f3175c7bb5e01d88d7f8349cf0240fb4298af8c8519cbc27788070bf8d89", + "vendor/danog/madelineproto/src/polyfill.php": "9ed6ff9ebf7ecabbb3b423da7f061f2c94ea41c81b9207ba3ec7f2590adc1632", + "vendor/danog/madelineproto/src/polyfill_phpseclib3.php": "dbc33b99a2c481e514e2b8c7e3625012385c32a79cdd28c05c99b55b144fb872", + "vendor/danog/madelineproto/src/v3.json": "5bb2cb4f1738d38b2da1d01eeed2da4768a1b1342126ddcd3eccef39a941830f", + "vendor/danog/madelineproto/ton/lite-client.php": "9cd0e8901db27677a718e07b4daeaf2b5ff81a59fe764e8096f879f9df6cf738", + "vendor/danog/madelineproto/ton/ton-lite-client-test1.config.json": "4d754a87d953e418dbbcfd505e5aaeecee8d28ee6df0247ff024b40c0a2352a5", + "vendor/danog/madelineproto/ton/toncustom.json": "9f2b14a027fc04d2eb191670793c1c7a4e2397e1622ee470abda0305d648e799", + "vendor/danog/madelineproto/vendor-bin/check/composer.json": "5e872ec66332fd01756037d2ed2326843aabb7c259be1bb2bd8d034dd1c3cd11", + "vendor/danog/php-rtc-av/.gitattributes": "7a1d72a2ee9533d538eef6e6a193628340212bb5989d0b239503f9c37e0b2f7e", + "vendor/danog/php-rtc-av/.github/workflows/tests.yml": "593248ef7d134efce9bc4e4b43e50e23471c151b9b8a9a472460350078ae2aab", + "vendor/danog/php-rtc-av/.gitignore": "15f03d8e3c301fd8e7735e799ea1634ba3be64c0960100e0036fedbe456f88af", + "vendor/danog/php-rtc-av/LICENSE": "c855e00eed64bc882f5ff86daa56c03e76495f47e4b4b192b20bb46e924ba0f8", + "vendor/danog/php-rtc-av/composer.json": "d5ea9bbb3f9ec3ffe0a9cbd333e312479200c4f4353a85124c0c349a0d91f629", + "vendor/danog/php-rtc-av/ffmpeg/include/avcodec.h": "99b6e1f7889f0581a6f4a5ed3dc3ddfeb5670db9da7d273d5d048a0a1c24025f", + "vendor/danog/php-rtc-av/ffmpeg/include/avfilter.h": "18cd137e57638a77bd53498e1da89fd983d5b0624cff71129885805e04c9b723", + "vendor/danog/php-rtc-av/ffmpeg/include/avformat.h": "5b0717b14aae644fe8bced77165c14aa2340a1d57bb3fad295fd03a5b699d61c", + "vendor/danog/php-rtc-av/ffmpeg/include/swscale.h": "ad87c42ab6461c369b94e72d16913f49c739b33d6ea4a478ad7a15290224fa4a", + "vendor/danog/php-rtc-av/phpunit.xml": "930a1e0c0c18ca466da082df1dcfe8bf7db991cd5b1f01a1399590eee386dcad", + "vendor/danog/php-rtc-av/scripts/ffmpeg-downloader.php": "13add3723877d89e006b7ce2b2898213a79bfc2602f273d44792d24bd4929042", + "vendor/danog/php-rtc-av/src/AVCodec.php": "1c18d45f9d5491bdb98488d4111d7cc104100028069dc5f200b8fb4064013f4e", + "vendor/danog/php-rtc-av/src/AVFilter.php": "2693be4978e2c013329fe11f2e2cb8c83134f5aee36226c63a1b55b55cc7a411", + "vendor/danog/php-rtc-av/src/AVFormat.php": "defb35aafb99d3351b3853c3396bafb9e7f1c2882c1da3c1836e825fc5c1024f", + "vendor/danog/php-rtc-av/src/Audio/AudioChannel.php": "3d1cc249b78606329ddfdc3979dd40fe82304391bdf01fec712abfe56ab16161", + "vendor/danog/php-rtc-av/src/Audio/AudioLayout.php": "bf25b4bd7551dd6285f8d3f52d657086299341931f5cb80783cf0d351aad6202", + "vendor/danog/php-rtc-av/src/Audio/AudioResampler.php": "2dcb36fcaea48e151e5c1142fa9477a8a270d606612967686cb1c852a2c2aa8b", + "vendor/danog/php-rtc-av/src/Codec.php": "4b823fa77bb0fdb534becd6875710c4aa75bc0fbef931d0a676b5a4bc9d4fe9e", + "vendor/danog/php-rtc-av/src/Context/AudioContext.php": "71c2d8de6721cfd953f3e011daf0c1f655ddb09e58110a22ac3e126d00611f6d", + "vendor/danog/php-rtc-av/src/Context/Context.php": "611c0506a91c258f48de82d5837e8ede6f315f187cd2427fc15349e2dff539ef", + "vendor/danog/php-rtc-av/src/Context/ContextInterface.php": "868be9594f899cb56a9be283bcf3f4873a8aeceab0cf94844db7552279107f36", + "vendor/danog/php-rtc-av/src/Context/Dictionary.php": "f393d509323e199dfd4c5db5e8db088c1c538b7a5c36a750d5bb840f249587cd", + "vendor/danog/php-rtc-av/src/Context/VideoContext.php": "4cfd8aa01f15d8ea2142afbf7e1ceb6e226a657edf02fcb5b29db38da9fd1cf8", + "vendor/danog/php-rtc-av/src/Data/AudioPlane.php": "f74728ed52b221ebf21c90e23597a3eb23fcb7270c9d487840f7b36689c6224c", + "vendor/danog/php-rtc-av/src/Data/Buffer.php": "86a767228e8bbf806d57d673dfba1c6ac152eb7d3254319293f4ec9ac978ba4e", + "vendor/danog/php-rtc-av/src/Data/BufferInterface.php": "c68541c27b9d48447c8124cec1abed4ffcda0399c5c767c52bc8fc535c548653", + "vendor/danog/php-rtc-av/src/Data/Packet.php": "94fbb029017bc307fa8b05adc0d7ebb2cf907f3efe915311fe481eb9b1c778e3", + "vendor/danog/php-rtc-av/src/Data/VideoPlane.php": "10e6e84f4dfcec9dac019345ece339f7dff11032e70b4ffb03e57c245fd0be14", + "vendor/danog/php-rtc-av/src/Enum/ColorRange.php": "18290c9fd749ab747b5e316db1246413ff0048d5a7ee0fc4abbb4e71d6e623ea", + "vendor/danog/php-rtc-av/src/Enum/Colorspace.php": "c51dfca000dd9f90745b572cba5b1a56647d9d5c3e1611a736d09e02d88ef024", + "vendor/danog/php-rtc-av/src/Enum/Interpolation.php": "5b4b159af555b45ebe9c1a7aaf20a9c773a3ca4fc63cc381e4022b733c134298", + "vendor/danog/php-rtc-av/src/Enum/PictureType.php": "0d0e7b941d4b74f9c2144a8095fcc2451293f19cf008dd6028cd754189e611c8", + "vendor/danog/php-rtc-av/src/Exception/AvCodecException.php": "a0cf6c5332b3fcb5215e5736640623e5df9f73a8559c7fecb41f11e2daa407ec", + "vendor/danog/php-rtc-av/src/Filter/Filter.php": "c6e7cc4cb879be90ce9cf7efeff8239618bf02e672c3a70480c47bdd169a418d", + "vendor/danog/php-rtc-av/src/Filter/FilterContext.php": "e84f3bc952b096835d8e0da82f35b0c75db00d45ed59b126e4d75de477bbc6df", + "vendor/danog/php-rtc-av/src/Filter/Graph.php": "19fd0405c7f2f6277999038cdb00b18dab8cc469665687bebd18ae45bab91747", + "vendor/danog/php-rtc-av/src/Format/AudioFormat.php": "d0d536f2b98be164eb35945ca2b5800a8bd51a8d055f8262d392b8598b74231a", + "vendor/danog/php-rtc-av/src/Format/VideoFormat.php": "85fc0725ffa7774515f88d5c4d7ac3166bf260038f3cf2d71ea0b58123977335", + "vendor/danog/php-rtc-av/src/Format/VideoFormatComponent.php": "1b62936779654134fd97a163aae5c6f8f79ec8a54ef123a6c2284e09d88b32b0", + "vendor/danog/php-rtc-av/src/Frame/AudioFrame.php": "2762309315a081c871a8650a3d8ede8e95991aff876fbc7296848f92a1e04a7b", + "vendor/danog/php-rtc-av/src/Frame/Frame.php": "577b60a568bd4d2af3bb3efff994648cfa0a140bac868c09d2a673eb96658922", + "vendor/danog/php-rtc-av/src/Frame/FrameInterface.php": "a0008287996276f7fde80bdfb92219d4c74b2f04784b36ee3f16d61f263d15eb", + "vendor/danog/php-rtc-av/src/Frame/OpaqueContainer.php": "b3bac22e2646d2cc037ca5595320cf1ca117714b921d1da9e1aa3fc98a3c6991", + "vendor/danog/php-rtc-av/src/Frame/VideoFrame.php": "6a470e27d60bf31d3cf2ae6d0e780bc362a7b20df47a9e901a98dfa6cf8f2036", + "vendor/danog/php-rtc-av/src/Frame/VideoFrameReformater.php": "a6cafb9f3932ded4b58daa464aa888e755731f26bdea1a04785d2b32b1f37a07", + "vendor/danog/php-rtc-av/src/LibraryVersion.php": "a35338e79485c360938c22261d0ae0f995b66a53771a645c89df05a59c0cb22f", + "vendor/danog/php-rtc-av/src/SWScale.php": "82c0a4b543fdf5e21c40e90c780a27fc3217085c4c48105516c6782712584d00", + "vendor/danog/php-rtc-av/src/TransCoder.php": "7ce2e5d8dd8b631f27b69528e4e47af74d2616d2c6b5629051fbde966f6cfcfe", + "vendor/danog/php-rtc-av/src/TransCoderInterface.php": "f58d6ee311188875ea5460ce4b44b1b73485855fc8b93930f0ee6d4171622e80", + "vendor/danog/php-rtc-av/src/Util/Util.php": "2a5b04d978a1d68c7838eeabf3150f98978485786acd020f91607f791640c8a2", + "vendor/danog/php-rtc-av/src/libav/include/avcodec.h": "5a25691066ab6762ffc8c648845c781124ba59006f0d66e0aa4fd70d0a6013f1", + "vendor/danog/php-rtc-av/src/libav/include/avfilter.h": "18cd137e57638a77bd53498e1da89fd983d5b0624cff71129885805e04c9b723", + "vendor/danog/php-rtc-av/src/libav/include/avformat.h": "5b0717b14aae644fe8bced77165c14aa2340a1d57bb3fad295fd03a5b699d61c", + "vendor/danog/php-rtc-av/src/libav/include/swscale.h": "ad87c42ab6461c369b94e72d16913f49c739b33d6ea4a478ad7a15290224fa4a", + "vendor/danog/php-rtc-codecs/.gitattributes": "7a1d72a2ee9533d538eef6e6a193628340212bb5989d0b239503f9c37e0b2f7e", + "vendor/danog/php-rtc-codecs/.github/workflows/tests.yml": "740d98a29050ca0c315645d7aed196cfd8cd4157909aaf5c4ddcd1fd8c6b9935", + "vendor/danog/php-rtc-codecs/.gitignore": "53fa03d7ca759efae3b5421a8081f295bc26227f78ef574201d84b23db00678a", + "vendor/danog/php-rtc-codecs/LICENSE": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690", + "vendor/danog/php-rtc-codecs/composer.json": "d02b9729d4781f0e50bf082ac60414b129241f609591b3d08da0268763892e82", + "vendor/danog/php-rtc-codecs/phpunit-skiptolerant.xml": "91da7daef9ff27abf5daa7eb202d412d67f0dce8fe752cb6eaaa272176398eb8", + "vendor/danog/php-rtc-codecs/phpunit.xml": "930a1e0c0c18ca466da082df1dcfe8bf7db991cd5b1f01a1399590eee386dcad", + "vendor/danog/php-rtc-codecs/psalm.xml": "11e718187525208b33b07528a5e2db4ae94099200da04c069182f0884c1b3d31", + "vendor/danog/php-rtc-codecs/src/Audio/Opus/OpusDecoder.php": "d0d8fc646d8d116cfbe091cd7c555cde1c7a7c29800482906f6bc922817cb3eb", + "vendor/danog/php-rtc-codecs/src/Audio/Opus/OpusEncoder.php": "da1fb4deee0f61b6d5b10c0f951d0f080c893951eaa167c0ce0a2847bc89330c", + "vendor/danog/php-rtc-codecs/src/Audio/PCM/PCMDecoder.php": "335b9d667e96b537584fd5f5e0569cf73dff32b6ba267ca03b37679cdd014937", + "vendor/danog/php-rtc-codecs/src/Audio/PCM/PCMEncoder.php": "51c16d42a857fc1d50517354e77d2b4a382ca6bfe8e8434d45a00c638519c042", + "vendor/danog/php-rtc-codecs/src/Audio/PCM/PCMaDecoder.php": "cb93d45e7964bb422ced73bbad25cb88c8d7239463bd4cfe23c5f5ae6ca48a06", + "vendor/danog/php-rtc-codecs/src/Audio/PCM/PCMaEncoder.php": "5ed8234e7a391e56433f467b79df59d3d62d948fae7549224d01418fc158a974", + "vendor/danog/php-rtc-codecs/src/Audio/PCM/PCMuDecoder.php": "2fb1a8dd7235fce5f10334a29102375fb1d7ffdafdcb779148675a1fc7be1c0a", + "vendor/danog/php-rtc-codecs/src/Audio/PCM/PCMuEncoder.php": "0c5e891c2f5676a7e344d16f30c7a53f42e74f3e80bae86ac85b88054510c236", + "vendor/danog/php-rtc-codecs/src/Codec.php": "dfbf49e5d58d15c2c289083182999b7150ddf987c425ea1473f994483c885e55", + "vendor/danog/php-rtc-codecs/src/CodecUtility.php": "71d431404febd8f2fa8775f3f640b40cce9c51061553b86cfe0801deca8010c6", + "vendor/danog/php-rtc-codecs/src/DecoderInterface.php": "ce2e1e7312164dd9fe9250c7e4b98ec4e02fc6741c25ed965ceb98eff824c748", + "vendor/danog/php-rtc-codecs/src/EncodedPacket.php": "1dc193b95b075550b6f075232db99ff9f5acb85b336197640998863d33e4a72e", + "vendor/danog/php-rtc-codecs/src/Encoder.php": "1d74cc70a3a4d0572585a200cfa142f436698a68775e5d70ca6057a2a2f39e07", + "vendor/danog/php-rtc-codecs/src/EncoderInterface.php": "35b855874eb48a93ae99621e8a3384808ada63450089c210c3e7b6cbfe0bfb0b", + "vendor/danog/php-rtc-codecs/src/JitterFrameInterface.php": "42e847fe20a1267ce71c4d3f1fd2db040846adba6878001b275b0fad0f0d81c8", + "vendor/danog/php-rtc-codecs/src/PayloadDescriptorInterface.php": "8bf08a403fee43db0082ac20080f99b84a53a12b942e23c7deb9ca03f6b37d0c", + "vendor/danog/php-rtc-codecs/src/Video/Av1/Av1Encoder.php": "fe75575749136680d462ceef0f38af373b69a240a3b84f101b6b3af442d35913", + "vendor/danog/php-rtc-codecs/src/Video/Av1/Av1PayloadDescriptor.php": "b4e7e785cae440fe112f4eed0d7baad8b303099bf66256aa247ad408484c50fb", + "vendor/danog/php-rtc-codecs/src/Video/H265/H265Encoder.php": "1869fff414ed360b59d36370101188154223d6747bf33a114512342b9b74d060", + "vendor/danog/php-rtc-codecs/src/Video/H265/H265PayloadDescriptor.php": "941193732d4cb6ff641d746ed47befd53b5a535fd5cce91f6c66fd4eb9f7ea06", + "vendor/danog/php-rtc-codecs/src/Video/Vp8/Vp8Decoder.php": "e16758a751371c936177fc5416a23deeeae7ee273ca48e4319e03225c1897985", + "vendor/danog/php-rtc-codecs/src/Video/Vp8/Vp8Encoder.php": "978b1b54572fa8ea76461f8c2f2af19600d3394186bac1114c57805460cb5329", + "vendor/danog/php-rtc-codecs/src/Video/Vp8/Vp8PayloadDescriptor.php": "8e5298f5fa79d4ba476bd310c6b2f0b863f5ccb41705fcf751cfaeb100b65b51", + "vendor/danog/php-rtc-codecs/src/Video/Vp9/Vp9Decoder.php": "95af1f05c1ac1febe6af1c4d083fc8cc48a0b06f694ee1ada4b7cad631ac4f08", + "vendor/danog/php-rtc-codecs/src/Video/Vp9/Vp9Encoder.php": "8b65b7a0714d9c3b715ea8bab9f747c4e2d39979646d905c20cd872e10ad5ebd", + "vendor/danog/php-rtc-codecs/src/Video/Vp9/Vp9PayloadDescriptor.php": "0e4378c93ec634ce32f7ab12002976a10600f7fcb1e85f35b87f6bd2dd0686af", + "vendor/danog/php-rtc-codecs/src/Video/X264/H264Decoder.php": "7ff1bc65cde6270e529f71a2c3e9a884e042c3ee77c9864e6799120d18d6ffc0", + "vendor/danog/php-rtc-codecs/src/Video/X264/H264Encoder.php": "fc37a463fee0f78dd6635704705eeba6475c52ad5838de38384b00649f60b93d", + "vendor/danog/php-rtc-codecs/src/Video/X264/H264PayloadDescriptor.php": "d7ba2530d9a3adff3288b10a201fbae080c1891e931c17c4b6f4516b9239de75", + "vendor/danog/php-rtc-datachannel/.gitattributes": "7a1d72a2ee9533d538eef6e6a193628340212bb5989d0b239503f9c37e0b2f7e", + "vendor/danog/php-rtc-datachannel/.github/workflows/tests.yml": "58dadb2a5220cf5d94df09f4e1be73e2d4296c6ea5d97124e8cc0de8bfbbadd9", + "vendor/danog/php-rtc-datachannel/.gitignore": "53fa03d7ca759efae3b5421a8081f295bc26227f78ef574201d84b23db00678a", + "vendor/danog/php-rtc-datachannel/LICENSE": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690", + "vendor/danog/php-rtc-datachannel/composer.json": "0ae099a752f758d86fb2a695953d2701bf82af52e2044861e8a0ea7ed12fc836", + "vendor/danog/php-rtc-datachannel/phpunit.xml": "4981c7e8a1317a5135bc066a7f27cc519ec1226f86839ee885555a8c26fb74a3", + "vendor/danog/php-rtc-datachannel/psalm.xml": "11e718187525208b33b07528a5e2db4ae94099200da04c069182f0884c1b3d31", + "vendor/danog/php-rtc-datachannel/src/Enum/State.php": "7371d6949e31a501a09bd8347025a9f216897f380711a24426b7e53ed82ccbc0", + "vendor/danog/php-rtc-datachannel/src/Listener/DataChannelBufferedAmountLowListener.php": "a7cae8c3914b08555b7f5b52cf1fa33f5eae5a647b437e580bfb8da576361fb7", + "vendor/danog/php-rtc-datachannel/src/Listener/DataChannelCloseListener.php": "0b141cc88a88a50934e275eedef1753fc4db43400fb2f652446e0661dfb61c0f", + "vendor/danog/php-rtc-datachannel/src/Listener/DataChannelMessageListener.php": "53cb5e8af20cafdd68b7035d2f58a1414166cf3363c875137c2ed7a73262a7d3", + "vendor/danog/php-rtc-datachannel/src/Listener/DataChannelOpenListener.php": "84ccb8a1845df008f106bb43bacd8427639e6ace74314d371f6d2dab9545e405", + "vendor/danog/php-rtc-datachannel/src/RTCDataChannel.php": "149e48ae6bd22906a914bdbd80fadf12a6affa4546d8c60902e5a0eecbda0124", + "vendor/danog/php-rtc-datachannel/src/RTCDataChannelInterface.php": "84b08150d907717eab16f82a905696360aa9f9dc85f46037e8b8b2771d67020e", + "vendor/danog/php-rtc-datachannel/src/RTCDataChannelParameters.php": "3f16693822c7629917e8f572cc80a06c67321b84d2514c4c5b528718028d7f86", + "vendor/danog/php-rtc-datachannel/src/RTCSctpTransportInterface.php": "450eef0e5081fd6a3eb2777b0edfa52a3c359cc70e8466d849832f37a1cf3605", + "vendor/danog/php-rtc-dtls/.gitattributes": "7a1d72a2ee9533d538eef6e6a193628340212bb5989d0b239503f9c37e0b2f7e", + "vendor/danog/php-rtc-dtls/.github/workflows/tests.yml": "c5277a98d642d354f179597508594da032b52ec9f2a79f4c989bb000129217ec", + "vendor/danog/php-rtc-dtls/.gitignore": "2f2df33786ceda8cc4e5c81426426bd34390e59d20f608c28a52aee24e2a7a2d", + "vendor/danog/php-rtc-dtls/LICENSE": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690", + "vendor/danog/php-rtc-dtls/composer.json": "9cdb2904236cec10573ec21eb8470a28d6da3e3658965f55052b40a3cb807dc4", + "vendor/danog/php-rtc-dtls/phpunit-skiptolerant.xml": "82e8d93c0f1ce386246bd9a185e12a962e1aa303f900b8183f4ea8e6629f9769", + "vendor/danog/php-rtc-dtls/phpunit.xml": "1935de8199fee0daa7cf31c5c69c2cb3fdedc95e721722deb21813a81f704e72", + "vendor/danog/php-rtc-dtls/psalm.xml": "11e718187525208b33b07528a5e2db4ae94099200da04c069182f0884c1b3d31", + "vendor/danog/php-rtc-dtls/reference/.gitignore": "801741a196f9bcf9b2c98df681cc44f455e88c30f724a5288d8122d2a2b624aa", + "vendor/danog/php-rtc-dtls/reference/cmd/refpeer-dtls/main.go": "8651e52265c402f3d70240d3a62a9d711f477842dad0e5d266865fcf51afb358", + "vendor/danog/php-rtc-dtls/reference/go.mod": "8ac22feb93f9057afe5e736f0bc78f619e441e46e350629de5599652c38dccdb", + "vendor/danog/php-rtc-dtls/reference/go.sum": "e12e3ed7a0b5608a7cdada69c0f3ee20ffca9ef5f7a228fe5442d2a02c614dfc", + "vendor/danog/php-rtc-dtls/src/DTLS/Crypto.php": "9c0b82c608951761652631fc2646ef55dcc417e919ecaf4d6917b4bde6591cee", + "vendor/danog/php-rtc-dtls/src/DTLS/EcPrivateKey.php": "ce2b2432552a43e9b1d690c48379585fd10aeec5986112eae488941e7a08b3f1", + "vendor/danog/php-rtc-dtls/src/DTLS/Engine.php": "17c30a7a7c8c01f39c94cfcda23d1e0752ac100851fac5f81d5d46920142af0e", + "vendor/danog/php-rtc-dtls/src/DTLS/Enum/SSLHandshakeState.php": "6e8ef957fae189b10e8fbf4a3fdb3bcd11f7422525363a7ba11302e199d0e872", + "vendor/danog/php-rtc-dtls/src/DTLS/Exception/DTLSException.php": "88b68287bf1ad566e6baa3a84126b312a875686af6c5626b55a44e555a0ea2a4", + "vendor/danog/php-rtc-dtls/src/DTLS/Exception/DTLSExceptionInterface.php": "91dc64ce78cdc934ea731f63d74f1a5953d4809848c1bb610751882424fa4777", + "vendor/danog/php-rtc-dtls/src/DTLS/Exception/HandshakeException.php": "3b0f0eae4a435d5b200a361d134515791144ea26fa0cbc578f0f2e2d5993d3bb", + "vendor/danog/php-rtc-dtls/src/DTLS/Exception/RTCCertificateException.php": "d2e98cfac68bbe0447dbaa3e781f2219fbe63b87103bd49c6ce8e25db5bc05ed", + "vendor/danog/php-rtc-dtls/src/DTLS/Exception/TLSException.php": "b1c2276d5d3262976f6ed2b82d96369ca8d151325dc0ee207b578babacbaad58", + "vendor/danog/php-rtc-dtls/src/DTLS/Handshake.php": "28aedd9e610e2c35cfbb0ef86bf3a47f541b96d3779e835339e1ac98e75f675d", + "vendor/danog/php-rtc-dtls/src/DTLS/Prf.php": "75314a71a0cdc14568060dc17240611ddbd1eaaf059d813df3660b53b624e1f2", + "vendor/danog/php-rtc-dtls/src/DTLS/RTCCertificate.php": "732fcff475e46ff39a739096d4a2a5df4a7a1820debd48a6cd013a880a2759cc", + "vendor/danog/php-rtc-dtls/src/DTLS/RTCDtlsTransport.php": "646495f4a96c567aa9fdee78e2012119d6b6e10d090d4c9bb5c98a3cb9b5a430", + "vendor/danog/php-rtc-dtls/src/DTLS/Reader.php": "209d786b0acba86c7dc870e77b6ccac938a2bf53fb8615f51b29f8b952ef6a06", + "vendor/danog/php-rtc-dtls/src/DTLS/RecordLayer.php": "05bc9bceb21e9994c2eac43f8899d26cbc0729b3bf1d58d8f3c4d7027972bc06", + "vendor/danog/php-rtc-dtls/src/DTLS/Srtp.php": "08c7e74f5805ded22fedee1293ece7572917c8c7d3d2741713215cacf488e5ae", + "vendor/danog/php-rtc-dtls/src/DTLS/TLS/Handshake.php": "86538302f441c1c45f7656df98717b730d0acaa3ed3c3944c2ba31124c7870c8", + "vendor/danog/php-rtc-dtls/src/DTLS/TLS/TLS.php": "c75c7cac8cb9acf0a7f939aefed2a6d4ffba1a70f847f481371d53e048043c40", + "vendor/danog/php-rtc-dtls/src/Enum/BioMethod.php": "7032b3e0c981310241161ee01266071fc9b805ded3d339a04e094d23e28a5936", + "vendor/danog/php-rtc-dtls/src/Enum/ContextMethod.php": "1aad06008ae2666e9b9d394a4e62a6ef011c5cb552eb5f8cfc9b0b2b578b136d", + "vendor/danog/php-rtc-dtls/src/Enum/ECCurveName.php": "6aa9d6dfea96784db5c2505d8f94038d88ebae2e797572cc54356d019966e29a", + "vendor/danog/php-rtc-dtls/src/Enum/PrivateKeyType.php": "7f2979e22cef16c3a1798b8f408d309e449ae32ca0a634a73cd0d4a7afc0b144", + "vendor/danog/php-rtc-dtls/src/Enum/Verify.php": "8e64f39bfd3ae90e7211cfb40b150e49adb7c6eb556ed4d9cce7165cbe560ecd", + "vendor/danog/php-rtc-dtls/src/Exception/OpenSSLException.php": "412db31b74fca8d341f72a71783f45c7ec3d152268a44ba9c456720296d3c5f7", + "vendor/danog/php-rtc-dtls/src/Exception/SSLException.php": "71b4b43fba756c3f30a781a8e84048c83a6b049d8936ea49d9c7a8e5537b4654", + "vendor/danog/php-rtc-dtls/src/Exception/SysCallException.php": "e6676325f255cf9de9edeb18401db9dc18e450b0e7c1dfc50a8e40fbfcd15cb1", + "vendor/danog/php-rtc-dtls/src/Exception/ZeroReturnException.php": "3743aca3d71ea5fb02ad6e852b7d6440cd973302a4c969a8965f4e89ba5b1df4", + "vendor/danog/php-rtc-dtls/src/Listener/DtlsTransportStateChangeListener.php": "08b2eb0ec2971264aa2e692ee1fb0bdec69b79883150abe29b9d9c6039ecfd07", + "vendor/danog/php-rtc-dtls/src/SSL/BIO.php": "e8523a671f7c332a4435faf06a54c9355faef06408adee7d0c56160e048bd593", + "vendor/danog/php-rtc-dtls/src/SSL/BIOInterface.php": "f95525228b8efe6a9f2bc512e4d3caeab2521ab9a484cf5657d4076a03dedd98", + "vendor/danog/php-rtc-dtls/src/SSL/Context.php": "8ff84ecf4e9bd829e42c6a03e487a91ef21b8d8d1b14a30ef458e5eee7b5e65e", + "vendor/danog/php-rtc-dtls/src/SSL/SSL.php": "3726cb5fa8b81fd6244a362fe098248b1bdec1c230fe8ff0ca20022c68975fa5", + "vendor/danog/php-rtc-dtls/src/SSL/SSLInterface.php": "0f7bef82dcf5b9b4254249f76ea7d08a81ec2b4729548347962c8499aea914b0", + "vendor/danog/php-rtc-exception/.gitattributes": "7a1d72a2ee9533d538eef6e6a193628340212bb5989d0b239503f9c37e0b2f7e", + "vendor/danog/php-rtc-exception/.github/workflows/tests.yml": "19fdc1c3a5e5acf43d103b1cef17d5aa42da94c5cb58df2a3cb90604a901c7f6", + "vendor/danog/php-rtc-exception/.gitignore": "e8d069b41ace00c0e440fffb16ce4cdf1ad6809e774a22ef9a42b4705e23ec21", + "vendor/danog/php-rtc-exception/LICENSE": "c855e00eed64bc882f5ff86daa56c03e76495f47e4b4b192b20bb46e924ba0f8", + "vendor/danog/php-rtc-exception/composer.json": "22b1aaf03527a5ff7179952296383463e45a78cd43435d932b66b7dbf7e1a9cb", + "vendor/danog/php-rtc-exception/psalm.xml": "6034ac65a05595daf9a56db358ff458ca0b85cb0f05196abe847705bbd5fa004", + "vendor/danog/php-rtc-exception/src/Exception.php": "8f7dd1772358fff292e043ff497e601997497fb085acdf42723ef924a3cf556f", + "vendor/danog/php-rtc-exception/src/InvalidArgumentException.php": "8331caf9f5eecc1fb96ff44f7ea060c62162f9fbb6381a03446eb6915e4f29eb", + "vendor/danog/php-rtc-exception/src/NotImplementedException.php": "4a6507e40660dabbc62f9be7257fa1fa5cdb5fba4ce6983b150ca67376c9a699", + "vendor/danog/php-rtc-exception/src/RuntimeException.php": "380745d75acfe9185aa024339c207a8d6a155a45083bef15c004b535ec383b10", + "vendor/danog/php-rtc-exception/src/WebrtcExceptionInterface.php": "f73dd84252e8d71915bda0299215ede0ff9d03017613742e395ee4955ef33d67", + "vendor/danog/php-rtc-ice/.gitattributes": "7a1d72a2ee9533d538eef6e6a193628340212bb5989d0b239503f9c37e0b2f7e", + "vendor/danog/php-rtc-ice/.github/workflows/tests.yml": "84c0b1997a0a58325c823ed8193e8ece9ba01e3287def770cb7e7afad6fc442e", + "vendor/danog/php-rtc-ice/.gitignore": "e8d069b41ace00c0e440fffb16ce4cdf1ad6809e774a22ef9a42b4705e23ec21", + "vendor/danog/php-rtc-ice/LICENSE": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690", + "vendor/danog/php-rtc-ice/composer.json": "9c4b36fc5b59e5d7c4381e806ce32c947cac785e8d75333920662c8ceb5707b1", + "vendor/danog/php-rtc-ice/phpunit-skiptolerant.xml": "4bbbf2fffaf7921dfe248657d40999c7f02d5fa091d3238aedacfef1dff75d18", + "vendor/danog/php-rtc-ice/phpunit.xml": "930a1e0c0c18ca466da082df1dcfe8bf7db991cd5b1f01a1399590eee386dcad", + "vendor/danog/php-rtc-ice/psalm.xml": "92866e60be684416884e1a8bb10fdb24dcfdc64359a16f73fc5f9e54d09d4278", + "vendor/danog/php-rtc-ice/src/Enum/CandidateType.php": "40209965d6d070abdcc52111fac4c61a4618d7cd66afdf89c0eb33f1df8852e2", + "vendor/danog/php-rtc-ice/src/Enum/CheckListState.php": "03c097bb8f5d78c7192ec860b6f4f24a5e12413fa88141e3fa5db06149d83b15", + "vendor/danog/php-rtc-ice/src/Enum/IceGatheringState.php": "9ec8217306ea9beff53bc9958d55e172ba104f023b4115f6d4ad27f09c0d4e10", + "vendor/danog/php-rtc-ice/src/Enum/IceRole.php": "2f09f9422864070063f8ede59404a398c28901874fb7655fdcd83edbd6a2b58d", + "vendor/danog/php-rtc-ice/src/Enum/IceTransportState.php": "88f5ced39236deb20493b5b21d0a9663cb1430512cbc6efdd66408289c49efeb", + "vendor/danog/php-rtc-ice/src/Enum/RTCIceCandidatePairStats.php": "902b44e843f23be8bc0ee898a8062bc6e65d24726b968ae2aa7b8cb9628b0c65", + "vendor/danog/php-rtc-ice/src/Enum/TransportPolicyType.php": "305b3623a832c624237159243d7ab59998aaefa9395732b13e2dbea6627446cb", + "vendor/danog/php-rtc-ice/src/Enum/TransportType.php": "106cc94d2b6688214e6f41f2a34fd4bc46e28e5fa647e1f0d23f45d286d164e2", + "vendor/danog/php-rtc-ice/src/IceProtocolParser.php": "d92405cba03cf25fb40ff94204d1bad3aa083ff957c39a3001f391427b716cc5", + "vendor/danog/php-rtc-ice/src/Listener/IceConnectionClosedListener.php": "8dfc6dbe86e678b42818c65b6bc2fdc02f0764705a157af7e5a816237c1aadc0", + "vendor/danog/php-rtc-ice/src/Listener/IceConnectionDataListener.php": "cf23b707f98b483ef43bb547923b723857afec00aa8d7fc28c91992afce3b254", + "vendor/danog/php-rtc-ice/src/Listener/IceGathererStateChangeListener.php": "59f06478203fc36383301189ca8790945a64a4d182c9278cedb5132ceaa237f2", + "vendor/danog/php-rtc-ice/src/Listener/IceTransportDataListener.php": "9ebee748263c557504e2848c605f070bb207d5d46f96b7296682e93c60b67b86", + "vendor/danog/php-rtc-ice/src/Listener/IceTransportDisconnectListener.php": "d2c8efd2c20bc45a76347f733b71dd0fc5a5fcd3eb675e4723cfd961c57aec83", + "vendor/danog/php-rtc-ice/src/Listener/IceTransportStateChangeListener.php": "a53dda020cf7d2a0a869a0c0054018c081e5808b0a0299e647fa3016084d2477", + "vendor/danog/php-rtc-ice/src/RTCICESetting.php": "fdbe6c432010f06b1523d3d93dd52b6c303c385a31c2147af6bd94082d59234e", + "vendor/danog/php-rtc-ice/src/RTCIceCandidate.php": "04048c91736640f97409458198f2ef99129f64a47568d4b0948ecf625a8e5e46", + "vendor/danog/php-rtc-ice/src/RTCIceCandidatePair.php": "d9ccb0ebf7d25faf89e5d0355767acb9100adf447a5fb6b48c6a7764ad528a5c", + "vendor/danog/php-rtc-ice/src/RTCIceConnection.php": "cf12b7898d248ddbf8f2a1b6424e7baa4720e517cdef88e63505862daa63a01d", + "vendor/danog/php-rtc-ice/src/RTCIceConnectionInterface.php": "6fa1ab8f2a10d1e30276d3736b948d67f46be3a58ed953b756274b2f9353d1dd", + "vendor/danog/php-rtc-ice/src/RTCIceGatherer.php": "795d14f5169288eac45f88dc2ceb07e319b7a0149cee2626f33f663f38270bcf", + "vendor/danog/php-rtc-ice/src/RTCIceGathererInterface.php": "7f43bbcb9d7a475a3e6028135f1702f8030606d577465d5ca62b52a3f7f11654", + "vendor/danog/php-rtc-ice/src/RTCIceParameters.php": "767e890f8b8a19e94b643f425d8ed0a74035a553b6188fef1729841064134faa", + "vendor/danog/php-rtc-ice/src/RTCIceProtocolConfiguration.php": "27a61eedaf0ffe26b415b5a94f2ecca8c451423d1dc1481c3f29f89e4892a121", + "vendor/danog/php-rtc-ice/src/RTCIceProtocolConfigurationInterface.php": "53f4503e121a08d06affa27dee163f284c7e21729a8e1c6c449a03c7013b9d35", + "vendor/danog/php-rtc-ice/src/RTCIceServer.php": "d7c0d7687f6b43e55185141b1846e3f41f9091b89860e903c5b7fb7a18602031", + "vendor/danog/php-rtc-ice/src/RTCIceServerInterface.php": "a6e402605c06f4818b04e1f4817c60e2729f027f7f924c788b9b1d8f42a8366d", + "vendor/danog/php-rtc-ice/src/RTCIceTransport.php": "87eeb4d9ed7c59f439ab0b2f8734d88e27ecd7307c70e80c9468baba2239daed", + "vendor/danog/php-rtc-ice/src/RTCIceTransportInterface.php": "546a0bf3820d9496c1672e4fab2cdc09c3ab1f185d00e98424e487843ab09d73", + "vendor/danog/php-rtc-ice/src/Trait/DNS.php": "7625840dfc219808c673df64dd9210a04ecb69a5e9d808213beecc0bca7bd55c", + "vendor/danog/php-rtc-ice/src/Trait/Mdns.php": "2d1b921fc6ee45258e3f961bdba37573b4b9a2b766c75a09bd0edccc4b590afd", + "vendor/danog/php-rtc-ice/src/Trait/NetworkAdapter.php": "03636818f668b8c702e151d7b05ecd1645fa0ba4e865f220414335aff21ca6b6", + "vendor/danog/php-rtc-ice/src/Utils.php": "d43f2f7914027b6d57a8ffbbbae6c387e641e6bdee9e1e155a559937c65b9c60", + "vendor/danog/php-rtc-mdns/.gitattributes": "7a1d72a2ee9533d538eef6e6a193628340212bb5989d0b239503f9c37e0b2f7e", + "vendor/danog/php-rtc-mdns/.github/workflows/tests.yml": "25d64bc6fc052235b314c9bb120b84da2f23b28c83ece41eb9ffa243d3ae3bb9", + "vendor/danog/php-rtc-mdns/.gitignore": "e8d069b41ace00c0e440fffb16ce4cdf1ad6809e774a22ef9a42b4705e23ec21", + "vendor/danog/php-rtc-mdns/LICENSE": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690", + "vendor/danog/php-rtc-mdns/composer.json": "156dfcbf3935bf0bca5e58c38a71818294f649e69f4fa1d3c9c44a40090a2782", + "vendor/danog/php-rtc-mdns/phpunit-skiptolerant.xml": "62609830b7bb1b992d997338591d8c653eda8e6c044f0357a1b1da0756699216", + "vendor/danog/php-rtc-mdns/phpunit.xml": "4981c7e8a1317a5135bc066a7f27cc519ec1226f86839ee885555a8c26fb74a3", + "vendor/danog/php-rtc-mdns/psalm.xml": "11e718187525208b33b07528a5e2db4ae94099200da04c069182f0884c1b3d31", + "vendor/danog/php-rtc-mdns/src/Factory.php": "a7ecacab0d9b1bbc7c4ccd13de741af6aedf4aea47ed9a143b9b2b50cf45314d", + "vendor/danog/php-rtc-mdns/src/MulticastExecutor.php": "719bbcebe4a4ba77100982b65102c4c240d3507fd598eba9a918c342a012c84d", + "vendor/danog/php-rtc-mixin/.gitattributes": "7a1d72a2ee9533d538eef6e6a193628340212bb5989d0b239503f9c37e0b2f7e", + "vendor/danog/php-rtc-mixin/.github/workflows/tests.yml": "3fa589adb0ee1ba4e3bace7aa49a6099b4712eddf2fe36bbfa86f071f3e172f5", + "vendor/danog/php-rtc-mixin/.gitignore": "e8d069b41ace00c0e440fffb16ce4cdf1ad6809e774a22ef9a42b4705e23ec21", + "vendor/danog/php-rtc-mixin/.idea/.gitignore": "0a5548b173aac0ef943bbb3af850d676f7b651ddedb9f8d7f06735bc2809b3db", + "vendor/danog/php-rtc-mixin/LICENSE": "c855e00eed64bc882f5ff86daa56c03e76495f47e4b4b192b20bb46e924ba0f8", + "vendor/danog/php-rtc-mixin/composer.json": "db828069dfc38647a976a646ec1ab1b79ea0e50ff505b1dac71a3ee26a9d2b65", + "vendor/danog/php-rtc-mixin/psalm.xml": "6034ac65a05595daf9a56db358ff458ca0b85cb0f05196abe847705bbd5fa004", + "vendor/danog/php-rtc-mixin/src/DataClass.php": "ead4f3bbcc56290c7cc47dfc02b31c15687ad503605bd2c64af53c7f75a2a11e", + "vendor/danog/php-rtc-mixin/src/SerializableState.php": "b186b110bd2d976f58abec0630c6b4545e10ed078e96dd486aaa9c9f590ff7f0", + "vendor/danog/php-rtc-mixin/src/SharedLibraryInterface.php": "69cf2bdbbafc78bff91455ced99069d3d934ea7bf46c63e611a05eca83e86028", + "vendor/danog/php-rtc-ntp/.gitattributes": "7a1d72a2ee9533d538eef6e6a193628340212bb5989d0b239503f9c37e0b2f7e", + "vendor/danog/php-rtc-ntp/.github/workflows/tests.yml": "f93cdee3a9ec5f6edcb4b6f94a74ad33c74f8a3b2c0a340c4819fa0c8c31b292", + "vendor/danog/php-rtc-ntp/.gitignore": "e8d069b41ace00c0e440fffb16ce4cdf1ad6809e774a22ef9a42b4705e23ec21", + "vendor/danog/php-rtc-ntp/LICENSE": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690", + "vendor/danog/php-rtc-ntp/composer.json": "c370a72ba66f791bd6a0078ad6b7fa295b7e2552d288024958c7f480e2358cab", + "vendor/danog/php-rtc-ntp/phpunit.xml": "930a1e0c0c18ca466da082df1dcfe8bf7db991cd5b1f01a1399590eee386dcad", + "vendor/danog/php-rtc-ntp/psalm.xml": "6034ac65a05595daf9a56db358ff458ca0b85cb0f05196abe847705bbd5fa004", + "vendor/danog/php-rtc-ntp/src/NetworkTimeProtocol.php": "026095fd7a3f9789c5a3c20eaf75c09622b510829700f4159eb22e84d1b6099f", + "vendor/danog/php-rtc-rtcp/.gitattributes": "7a1d72a2ee9533d538eef6e6a193628340212bb5989d0b239503f9c37e0b2f7e", + "vendor/danog/php-rtc-rtcp/.github/workflows/tests.yml": "5517bf5082555fa5fc307c9f5449ced99f1de3198a01d2cc632f5473c70b938b", + "vendor/danog/php-rtc-rtcp/.gitignore": "4107642c6dfcbb44162525c2f2850221cfa4e7ec0ccfa4f981890870cee7fad0", + "vendor/danog/php-rtc-rtcp/LICENSE": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690", + "vendor/danog/php-rtc-rtcp/composer.json": "0b31408521b4530ae49c6ce8e577b1f7e74043e0b056d40beb8870a2a0f73487", + "vendor/danog/php-rtc-rtcp/phpunit.xml": "930a1e0c0c18ca466da082df1dcfe8bf7db991cd5b1f01a1399590eee386dcad", + "vendor/danog/php-rtc-rtcp/psalm.xml": "11e718187525208b33b07528a5e2db4ae94099200da04c069182f0884c1b3d31", + "vendor/danog/php-rtc-rtcp/src/Exception/RtcpExceptionInterface.php": "c5e0bc49dfe147a6a1279629eefdfebe803c3d7c1a0a34bc20627be7d52190c9", + "vendor/danog/php-rtc-rtcp/src/Exception/RtcpPacketException.php": "4befd1183187844536de9e480975a3958da2865b15a3495508faeb72a0be390d", + "vendor/danog/php-rtc-rtcp/src/RtcpByePacket.php": "d4ef9b0cf6eb642558f3852ef6f8f2512baed870f0807e176b76ab8781f9436c", + "vendor/danog/php-rtc-rtcp/src/RtcpConstants.php": "bef4fc8c78380eb8439b110cfd25d9fae8de2763c2f6e2a132cf65b7b8d227c9", + "vendor/danog/php-rtc-rtcp/src/RtcpPacket.php": "6af5a79590f3f3a48eac346acce4dce865299baf08da3b1734b5a210ea0eef9f", + "vendor/danog/php-rtc-rtcp/src/RtcpPacketInterface.php": "0af231730b81a7577ceaf3eb68e310db7b8bbcb84281fa4844b26002f61a0059", + "vendor/danog/php-rtc-rtcp/src/RtcpPsfbPacket.php": "ec9a634898397db6863f1f8a08696ba798b216d32fe413e8807c1bc4d979559e", + "vendor/danog/php-rtc-rtcp/src/RtcpReceiverInfo.php": "18982c32104dca3f6e6101be53afe70c61930aa066809a61ef7c2b4660a57901", + "vendor/danog/php-rtc-rtcp/src/RtcpRrPacket.php": "9cd5ad9a941674be3b0c2faa1da5dac28bce11743bd430ac4ea4973f8b259471", + "vendor/danog/php-rtc-rtcp/src/RtcpRtpfbPacket.php": "ae039aad8adb0e3369aa46100e8867778b6af6a9832aa2a179bbb2a848c15b0e", + "vendor/danog/php-rtc-rtcp/src/RtcpSdesPacket.php": "c055fe42fe21bf7eec88125fd219a408f20b0f6025adb92543d4be57912482ed", + "vendor/danog/php-rtc-rtcp/src/RtcpSenderInfo.php": "223cdef128bdf4932860ab402ca115e5b44e7f92a471b8df45a0d3041b422d0c", + "vendor/danog/php-rtc-rtcp/src/RtcpSourceInfo.php": "5d8d6a20fc6fb4ec66bdb5f1f313283d40c4e5ceada809ec2d27f8a000029cc9", + "vendor/danog/php-rtc-rtcp/src/RtcpSrPacket.php": "1c6e58dec5d2d7b6e9b2de08f0d5d0e64f1e0819a8867ed2e1fef190d3ac11b4", + "vendor/danog/php-rtc-rtcp/src/RtcpUtility.php": "ba5661858ab2575b3b5eb2db4b6abd4bcab68ad732f0d24d390c48dc5dceb791", + "vendor/danog/php-rtc-rtp-parameter/.gitattributes": "7a1d72a2ee9533d538eef6e6a193628340212bb5989d0b239503f9c37e0b2f7e", + "vendor/danog/php-rtc-rtp-parameter/.github/workflows/tests.yml": "256c64566377095188691ac3f670b1b2e5650a0470b837e7e2004c6c88510f1a", + "vendor/danog/php-rtc-rtp-parameter/.gitignore": "4107642c6dfcbb44162525c2f2850221cfa4e7ec0ccfa4f981890870cee7fad0", + "vendor/danog/php-rtc-rtp-parameter/LICENSE": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690", + "vendor/danog/php-rtc-rtp-parameter/composer.json": "d13e46480b04462b68f0624a1400ce5789eab5fec1c5e6e76df1be5ff658225e", + "vendor/danog/php-rtc-rtp-parameter/psalm.xml": "6034ac65a05595daf9a56db358ff458ca0b85cb0f05196abe847705bbd5fa004", + "vendor/danog/php-rtc-rtp-parameter/src/RTCRtcpFeedback.php": "ab4e77a8e167e45620c95c1ba226f66740f3671f134c119fed5d4d7ee2ec06cf", + "vendor/danog/php-rtc-rtp-parameter/src/RTCRtcpParameters.php": "419860694fafedd7f0b96ddd16234da8f83b025b0aaaa74d10a965de8d1e9e99", + "vendor/danog/php-rtc-rtp-parameter/src/RTCRtpCapabilities.php": "99acf35e74c763ef5f09b39b9867880dbb935b1d1481373e9c87d536b10c05de", + "vendor/danog/php-rtc-rtp-parameter/src/RTCRtpCodecCapability.php": "8faa3c8c17524f6819b3a1a19cc37efdfa0906e2e9fb78de27316e5f15ea68c8", + "vendor/danog/php-rtc-rtp-parameter/src/RTCRtpCodecParameters.php": "e21a0b2dbdcf857b4387efe70c8c224e997eff8f2b1048e8630e6194cca44951", + "vendor/danog/php-rtc-rtp-parameter/src/RTCRtpCodingParameters.php": "036c410fe1d50f1f900f6e15f9b051d02eef293cee55012e654fa4adcf6760a3", + "vendor/danog/php-rtc-rtp-parameter/src/RTCRtpContributingSource.php": "04222b55cb6557a35ec97ba2446030c6856eef33b402391f37364cf329faa516", + "vendor/danog/php-rtc-rtp-parameter/src/RTCRtpDecodingParameters.php": "9b06741df90a58a3203dab0f418b8471eaf5ee21ed940c144a6a0c04210d8576", + "vendor/danog/php-rtc-rtp-parameter/src/RTCRtpEncodingParameters.php": "874ad8954a667e2dc3f59853e59e9b0e51cbc0ca80fbdd43014437b5f7484514", + "vendor/danog/php-rtc-rtp-parameter/src/RTCRtpHeaderExtensionCapability.php": "34f049be7453db77758936468205728a95f37841b8a5cbca9706828b888a05b0", + "vendor/danog/php-rtc-rtp-parameter/src/RTCRtpHeaderExtensionParameters.php": "b5afe5ca943a0b86ec32ae940cc8d108139bb3fef51fd35036f9f6d627d1f7d8", + "vendor/danog/php-rtc-rtp-parameter/src/RTCRtpParameters.php": "aeeb4fb19737008cbdf18903f300e96e1045324d99ab417a4cca991a1e90c976", + "vendor/danog/php-rtc-rtp-parameter/src/RTCRtpReceiveParameters.php": "6ab33285aecd329f63b9dffe1ba50f687d81f28a7669a963934b075d3eee573a", + "vendor/danog/php-rtc-rtp-parameter/src/RTCRtpRtxParameters.php": "bc94c47b3d4db3dbbd983a84441dd847989ff6b9c19857be7496f1edeeefd2c1", + "vendor/danog/php-rtc-rtp-parameter/src/RTCRtpSendParameters.php": "c9b5acbc0e46df1e842e48c41a28a968fda898be8ef8e4c01ff2067ece152a12", + "vendor/danog/php-rtc-rtp-parameter/src/RTCRtpSynchronizationSource.php": "6fa5efe0f10f183bd70fcfa66b9305f108b4bd0b045ebdfc8ebf31d0aceb4ff9", + "vendor/danog/php-rtc-rtp/.gitattributes": "7a1d72a2ee9533d538eef6e6a193628340212bb5989d0b239503f9c37e0b2f7e", + "vendor/danog/php-rtc-rtp/.github/workflows/tests.yml": "e24fdeef7b085760770f6a364e73ccef6f607778e9abb82cb45ffeec11ec585d", + "vendor/danog/php-rtc-rtp/.gitignore": "4107642c6dfcbb44162525c2f2850221cfa4e7ec0ccfa4f981890870cee7fad0", + "vendor/danog/php-rtc-rtp/LICENSE": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690", + "vendor/danog/php-rtc-rtp/composer.json": "be14e73f74f1980384da22813b3ecced36539aca6d4ad8a2349286aa3cc98246", + "vendor/danog/php-rtc-rtp/phpunit-skiptolerant.xml": "82e8d93c0f1ce386246bd9a185e12a962e1aa303f900b8183f4ea8e6629f9769", + "vendor/danog/php-rtc-rtp/phpunit.xml": "1935de8199fee0daa7cf31c5c69c2cb3fdedc95e721722deb21813a81f704e72", + "vendor/danog/php-rtc-rtp/psalm.xml": "11e718187525208b33b07528a5e2db4ae94099200da04c069182f0884c1b3d31", + "vendor/danog/php-rtc-rtp/src/Crypto/FrameCryptorInterface.php": "00261cc31b3cd5a4722a24fe3a74d6443564f67b3a86b10941d8086cb5b0dd2e", + "vendor/danog/php-rtc-rtp/src/Enum/BandwidthUsage.php": "2210f8c50da007c5e7b317c35278eb7efce467c9d7b587bf8bab5562222e6272", + "vendor/danog/php-rtc-rtp/src/Enum/MediaKind.php": "229b63f61ab765d5d5c439794ea4ee956b5a4b1da92e6493047a92cd788fd933", + "vendor/danog/php-rtc-rtp/src/Enum/RateControlState.php": "ba48e80c97778cd20b317f10aa0f275dbd65308e0d613cf658e89978e31ddfc3", + "vendor/danog/php-rtc-rtp/src/Exception/MediaStreamTrackException.php": "24a8185f5dbd556d6824ddbaa40b529c64fd1f9aa3e09473ac5dbbc58bd46d8a", + "vendor/danog/php-rtc-rtp/src/Exception/RtpExceptionInterface.php": "cc00197df6da84f7ecf31a38dbdac5381a2ba7ccee08e12dfc87dd864225b291", + "vendor/danog/php-rtc-rtp/src/Exception/RtpPacketException.php": "eb5c2278acb362a97231e4fa90db1135001ff70638afbf9b3b930f6d918f9b68", + "vendor/danog/php-rtc-rtp/src/Exception/RtpSenderException.php": "a6c10a9061b8b6cb0eabbca805edc01b88b9a74d2c1d3463564747caf6042370", + "vendor/danog/php-rtc-rtp/src/HeaderExtension/HeaderExtensions.php": "c4d24400a1da65acb14fffbb755e2714105701db5e5599beff3b78edfe930f93", + "vendor/danog/php-rtc-rtp/src/HeaderExtension/HeaderExtensionsMap.php": "5292a6faaf252865ec7bd31bc922cd65fa4a77a2bf9ca284d62776d15c27a035", + "vendor/danog/php-rtc-rtp/src/Jitter/JitterBuffer.php": "f278c6ea62b6e800c053f6a2b1754a3590f83f5b756c7ff70e75a5878ea96cba", + "vendor/danog/php-rtc-rtp/src/Jitter/JitterFrame.php": "ff59816661c3ad0d9a96ad7f438e065f6c6bbc177a6d3c718611c191bc2a0071", + "vendor/danog/php-rtc-rtp/src/Listener/MediaStreamTrackEndedListener.php": "8e5d5e3393807346b71213f1b43fcc87040cc8badd6bce087b3f4fa8139a9640", + "vendor/danog/php-rtc-rtp/src/MediaStreamTrack/MediaStreamTrack.php": "05dea10d72c0df00aace911263cfc88982547af6144fda1b68fb598f22e806e0", + "vendor/danog/php-rtc-rtp/src/MediaStreamTrack/MediaStreamTrackSink.php": "1c2387204a63187317ea05670378a4b900764b8eaf7f7799feb8719b1d597269", + "vendor/danog/php-rtc-rtp/src/MediaStreamTrack/RTCTrackEvent.php": "4e700d93cfb44a617a8bde25f7639b79d8f0b91597ab76d1ed2c2ec55772223e", + "vendor/danog/php-rtc-rtp/src/MediaStreamTrack/RemoteStreamTrack.php": "8fb320364169045c4db377dac1ed907fd78a3a155e31059f7736a3d54c21f8b1", + "vendor/danog/php-rtc-rtp/src/RTCRTPDtlsTransportInterface.php": "8a942447c1391fd54b5f95b2766242df0be0cb275da85a770574a2bbf3c2d5b6", + "vendor/danog/php-rtc-rtp/src/RTCRtpTransceiver.php": "d9a4cfee1172f5ec68688b6b679c8b7296ab70a7fc36ab7a54c10933a9ae0579", + "vendor/danog/php-rtc-rtp/src/Receiver/DecoderQueue.php": "15c6a688ef061d920c24c2cf8bba460863d8397b83fd9bbbf87f24dab13c7d38", + "vendor/danog/php-rtc-rtp/src/Receiver/NackGenerator.php": "7c18bbaca2d914b3f864565500e670575fcba7d280eeb9a7b2dbcf62159a2520", + "vendor/danog/php-rtc-rtp/src/Receiver/RTCRtpReceiver.php": "a560ee1e273f33b0cf6561995978be11e0d910008446fc2a0fb7e12cca4e293c", + "vendor/danog/php-rtc-rtp/src/Receiver/Rate/AimdRateControl.php": "33224a3ab66971da902812cd45b45f40a27f3768b1e1034c59465680a509c13d", + "vendor/danog/php-rtc-rtp/src/Receiver/Rate/InterArrival.php": "61564a680b19c487b60fb64af11e5f7fb4c74b4ecc310d81a74ed3de08e88a70", + "vendor/danog/php-rtc-rtp/src/Receiver/Rate/InterArrivalDelta.php": "5b9048030666c5da3b1942928e076e29b747b1144d8fdd90cb4327d6f2ad9e2e", + "vendor/danog/php-rtc-rtp/src/Receiver/Rate/OveruseDetector.php": "9eb9e6e7debe74d44a30d4212c1e5698742e33c7a8e3da941bf3dfe75925d7c5", + "vendor/danog/php-rtc-rtp/src/Receiver/Rate/OveruseEstimator.php": "143bd83e866e1729a60cbddf0017ed1b8311dd8a031386bbdc87dace76d800bc", + "vendor/danog/php-rtc-rtp/src/Receiver/Rate/RateBucket.php": "54848ca2111107809cf70cc26f19401fc1107091609b4cf18dd04fedd36f396b", + "vendor/danog/php-rtc-rtp/src/Receiver/Rate/RateCounter.php": "5c2d99e4849fd6505bbd584d21c0f4ef53fa4379cfe364fa06e68f8ec894e0e5", + "vendor/danog/php-rtc-rtp/src/Receiver/Rate/RemoteBitrateEstimator.php": "8432fcce4d378e0fb7a638120e5e56f605a896025fee9db711b0e825a56e690f", + "vendor/danog/php-rtc-rtp/src/Receiver/Rate/TimestampGroup.php": "b3e1dfe88bf2c2977e49c64792bab808bb685921b3be4118af7ea0d0644a901d", + "vendor/danog/php-rtc-rtp/src/Receiver/RtpReceiverInterface.php": "9ac3a6de660e82a86410664fd1ccf7a488d8e58d5efcdbad9f89be22cbece29f", + "vendor/danog/php-rtc-rtp/src/Receiver/StreamStatistics.php": "9eb9dcf00d99803d4fba1ba8546bb8ec2c131bfa66af009cf1e2231b8206f129", + "vendor/danog/php-rtc-rtp/src/Receiver/TimestampMapper.php": "c63dd0e255c1f65534ae84e178887d5230f0d45b8314eb8eb884b354cc111a34", + "vendor/danog/php-rtc-rtp/src/RtpComponentLogger.php": "c8a2fedfc33c98ff8db635c85fd00f36460b61d31ceba67ce4a9a28104d054e0", + "vendor/danog/php-rtc-rtp/src/RtpConstants.php": "2fb75be9ad7aafbc037527e4e9ce616b5171ad07748a834fc324412d6d37663a", + "vendor/danog/php-rtc-rtp/src/RtpPacket.php": "99919a32c590c002b32193d9dcc9e0e59276f032afa635a85fe167566e107297", + "vendor/danog/php-rtc-rtp/src/RtpRouter.php": "9289771e01e41cb05b714b278435e47bcd4c8552149f5e02408b852d34c90dba", + "vendor/danog/php-rtc-rtp/src/RtpUtility.php": "70fc6594dc5e3448330636cce6727ec81444630f3018de33ee15d5826d4d02e0", + "vendor/danog/php-rtc-rtp/src/Sender/RTCEncodedFrame.php": "42f149e4e673c9f9608a306001006547a2b100fae0f77a013abc726d40b3a385", + "vendor/danog/php-rtc-rtp/src/Sender/RTCRtpSender.php": "38624be6e7c7323824597810b673592dcf9297ab957b72b154e3a192cad2b439", + "vendor/danog/php-rtc-rtp/src/Sender/RtpSenderInterface.php": "da57b4aafd341748fa555cb4a779437061408afe12ded21d4ef610a915cda315", + "vendor/danog/php-rtc-rtp/src/TransportSequenceNumbers.php": "eb72851510c8d059f65a50ece9b977aad44a0fd64d5db84024129da8f9129a70", + "vendor/danog/php-rtc-sctp/.gitattributes": "7a1d72a2ee9533d538eef6e6a193628340212bb5989d0b239503f9c37e0b2f7e", + "vendor/danog/php-rtc-sctp/.github/workflows/tests.yml": "8886a6594e8bdcf72da2a3e11958716dae7fcee6aacfe7799f891030419e9a53", + "vendor/danog/php-rtc-sctp/.gitignore": "4107642c6dfcbb44162525c2f2850221cfa4e7ec0ccfa4f981890870cee7fad0", + "vendor/danog/php-rtc-sctp/LICENSE": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690", + "vendor/danog/php-rtc-sctp/composer.json": "575e826e2cc99ca03d8945d9a8870e0e03ed506da0e5b8012ea4ceda3feb1cce", + "vendor/danog/php-rtc-sctp/phpunit.xml": "1935de8199fee0daa7cf31c5c69c2cb3fdedc95e721722deb21813a81f704e72", + "vendor/danog/php-rtc-sctp/psalm.xml": "11e718187525208b33b07528a5e2db4ae94099200da04c069182f0884c1b3d31", + "vendor/danog/php-rtc-sctp/src/Chunk/AbortChunk.php": "b907922b8240aad506c85ce2172fabd3f781e33b877e99c9781ac07065b7dd9a", + "vendor/danog/php-rtc-sctp/src/Chunk/AttributeChunk.php": "764c70ac5946ec8a6cc283d6b9bd5283d76f6378dc787f608ed3f8e49f9f3399", + "vendor/danog/php-rtc-sctp/src/Chunk/BaseInitChunk.php": "2b13f99f232fb50bc7ade75fd02fcebbc83d679aa9ea3dfb0534afc521399718", + "vendor/danog/php-rtc-sctp/src/Chunk/BaseParamsChunk.php": "f036eebad3b62c24bd0e5c0efc2a284e991d02958e2389bbc40ab85a1d57679f", + "vendor/danog/php-rtc-sctp/src/Chunk/Chunk.php": "a1f82a132c930cbc019119ee32e19274b2a7340e8c82612e187380103e117ceb", + "vendor/danog/php-rtc-sctp/src/Chunk/ChunkInterface.php": "1078159d096274ab44d5bc78b33fd238a6985bdff6f1c5c45d95319143df6d28", + "vendor/danog/php-rtc-sctp/src/Chunk/CookieAckChunk.php": "4698f400de78774f4ffe66c10eec5c8bb3889fb93a2628f4292f8a5c243ed05a", + "vendor/danog/php-rtc-sctp/src/Chunk/CookieEchoChunk.php": "350d87049653a8d80150ae9a021cbdaa1ba5157efdcd16d0d5f4ea9ff6d24881", + "vendor/danog/php-rtc-sctp/src/Chunk/DataChunk.php": "6eb723129f91367dba1e778e918d4b851ff7351e9ed46b3ba1abe411ad8834ab", + "vendor/danog/php-rtc-sctp/src/Chunk/ErrorChunk.php": "2eded672c522b975510883e6fe5cdda6759d68af9fd24c6250c1d1a8907c7ad9", + "vendor/danog/php-rtc-sctp/src/Chunk/ForwardTsnChunk.php": "ea94f89b794ee205b16f470ee2159fa706764edf694ecb54255db629d3c9c677", + "vendor/danog/php-rtc-sctp/src/Chunk/HeartbeatAckChunk.php": "427195b07fdd3406568ec25cd4b8a2c653717892391dac29567c70928e5cd34d", + "vendor/danog/php-rtc-sctp/src/Chunk/HeartbeatChunk.php": "33ef5be1735c80d32af161bd4c9fb03b54494e4fdf041faa195995d47775a92f", + "vendor/danog/php-rtc-sctp/src/Chunk/InitAckChunk.php": "972c0aa646e93b6560a605b7e762384cb1175cbc43775daa7c6927d28d4ba376", + "vendor/danog/php-rtc-sctp/src/Chunk/InitChunk.php": "980eacbb843c725d7336768a6e7475dfb46b1daea3abf3d0d1b95d100f264ef9", + "vendor/danog/php-rtc-sctp/src/Chunk/ReconfigChunk.php": "0e89701ce04cbbd2ed85d94fcc92cae7e2eeefaff49af000ca3c0a3aa783f894", + "vendor/danog/php-rtc-sctp/src/Chunk/SackChunk.php": "d59a7bb9ba320e24fbaf253d1564b6737a65add7bbb888d811aff3299da84d25", + "vendor/danog/php-rtc-sctp/src/Chunk/ShutdownAckChunk.php": "fa6e790cd3d47bdb9df0c958b75e69b57d2b77bc11eabd552e0b8ebb1586897b", + "vendor/danog/php-rtc-sctp/src/Chunk/ShutdownChunk.php": "28f46cb7f77e745ea2b286ab5f08b4da9999df64fa661e1d18b3afda5cd3e38a", + "vendor/danog/php-rtc-sctp/src/Chunk/ShutdownCompleteChunk.php": "6ed50a70aaf2a19de5f21d35fe7d7ed18038d0bb9b233292ba69ab494486cfa1", + "vendor/danog/php-rtc-sctp/src/Enum/State.php": "a9b60636a5b8b29e8a84c8f0fdb9ea45b501c86adb6eddf9f4caa006c038cc47", + "vendor/danog/php-rtc-sctp/src/Exception/SctpException.php": "0a70532e66d136ebb6cc8d3d9631d885698eac0485adc731270358cd876f7791", + "vendor/danog/php-rtc-sctp/src/Exception/SctpExceptionInterface.php": "ded49f3f2e04720e8f336b6a05c1c638d75ee458ffc784e6f19940d200ed1963", + "vendor/danog/php-rtc-sctp/src/InboundStream.php": "5b36e5041f8421bf8574415aed03193e152d51d99de0464c11f01f59e60b34e8", + "vendor/danog/php-rtc-sctp/src/Listener/DataChannelListener.php": "d9a8e758af871d382f3b690d97249ac5849921d3b0028707db408a5a431e5781", + "vendor/danog/php-rtc-sctp/src/Param/StreamAddOutgoingParam.php": "019feec659263dbbb3b69c840c9cc34c6465f5a5b518032e0df0d0f8acb7c73f", + "vendor/danog/php-rtc-sctp/src/Param/StreamParamInterface.php": "18c026e38b57e734ac1a071ab3a125f91cadc7f40a1a98ad6b0dc5dee89da392", + "vendor/danog/php-rtc-sctp/src/Param/StreamResetOutgoingParam.php": "b2179c503fb7ddb5e1e19d7c5f5ac4365919fc5c09cd885dc2d9d229d84dd44a", + "vendor/danog/php-rtc-sctp/src/Param/StreamResetResponseParam.php": "69046210835359622f0df46e635485ded06fa0470bcc9bd5a60d2f68cd089992", + "vendor/danog/php-rtc-sctp/src/RTCSctpDtlsTransportInterface.php": "37af66bae4e39d3b77c54d3628a85d6600c5c1739e4c6ce607e475c7a069877b", + "vendor/danog/php-rtc-sctp/src/RTCSctpTransport.php": "8db01f284f370f938afd81851cc8b86b957dd75249465931c1ad30e761f10332", + "vendor/danog/php-rtc-sctp/src/SctpConstant.php": "93b631d0f4d5886920ad4f7c0b8423643565170d6a1a7a1d347da0ba2a2d38e8", + "vendor/danog/php-rtc-sctp/src/SctpPacket.php": "7d8db24d8ee9340cdee38e052a792eabdb3097d8b0a6e21952b84b70414d0d57", + "vendor/danog/php-rtc-sctp/src/SctpTimer.php": "65f45d5020807d79c770677360fa87f92df3f1dc6844633c8c3d41bd1dafd290", + "vendor/danog/php-rtc-sctp/src/SctpUtility.php": "916db56dff7d4646e7ba54281cc43c8c4f108511fbf06808e67d8dd61b46843d", + "vendor/danog/php-rtc-sctp/src/SignalingSinkInterface.php": "ddfd5309a330172bf5329de7806cc770cfd1828cea65eee67200fb55dfcfb504", + "vendor/danog/php-rtc-sctp/src/Trait/DataChannel.php": "21fc993f94cf2a6c98b5e3065001ee3ff000445192459a6f6d1e58e3f526119d", + "vendor/danog/php-rtc-sdp/.gitattributes": "a52144130e81ccfb80fb773fb7eb860ac9e2fdf896c20fdecc41164d92059e88", + "vendor/danog/php-rtc-sdp/.github/workflows/tests.yml": "c31a7bdb2f94ef7dd2f05bb90b3a271ca1fed17b31934a90f8cf6ee5cefc06c0", + "vendor/danog/php-rtc-sdp/.gitignore": "4107642c6dfcbb44162525c2f2850221cfa4e7ec0ccfa4f981890870cee7fad0", + "vendor/danog/php-rtc-sdp/LICENSE": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690", + "vendor/danog/php-rtc-sdp/composer.json": "199734354e76231fac351a55e4ed0a97a9c27c3813f6a590c85475371c5cd5d4", + "vendor/danog/php-rtc-sdp/phpunit.xml": "4981c7e8a1317a5135bc066a7f27cc519ec1226f86839ee885555a8c26fb74a3", + "vendor/danog/php-rtc-sdp/psalm.xml": "11e718187525208b33b07528a5e2db4ae94099200da04c069182f0884c1b3d31", + "vendor/danog/php-rtc-sdp/src/BitPattern.php": "aaa6eab50fe23dbd2a880913ff15b51671434c4063970ec53009bb09baab6d3a", + "vendor/danog/php-rtc-sdp/src/DtlsParameter/RTCDtlsFingerprint.php": "5a508183e4dba746f5eef4510dbb1e7654b078804ba873867f8f36df89505e8f", + "vendor/danog/php-rtc-sdp/src/DtlsParameter/RTCDtlsParameters.php": "7393d5dad57e6ace2fd05f0ce2a7246934d63254940d6cd24b136635b2e9cbed", + "vendor/danog/php-rtc-sdp/src/Enum/DtlsRole.php": "82846b76f3cda07102799e7d0df2ab1c3bca5986bfd0748b71fea3e6b40f61d5", + "vendor/danog/php-rtc-sdp/src/Enum/H264Level.php": "01b7b06f9766e5d400e51c395cecc7ce8677a4c4d3823a1ebbca271470a21a1b", + "vendor/danog/php-rtc-sdp/src/Enum/H264Profile.php": "f62b0755de07ab5bc3f07f32d426ea7d0d3f5549fcc1c7c823caa95788eea276", + "vendor/danog/php-rtc-sdp/src/Enum/SDPDirections.php": "433a9f5ea6b4e0597eefb7c974261cbee3d2f46ff812aa1aa7baa25fb206f8ac", + "vendor/danog/php-rtc-sdp/src/Enum/SDPType.php": "853d9d44473a5dab0ba32865b792997e1301ee3a1005bed056eedc9cda913055", + "vendor/danog/php-rtc-sdp/src/GroupDescription.php": "090359f1b915c6967c9879a565ca9bede2684919e152b66a0dd3277c6d43f786", + "vendor/danog/php-rtc-sdp/src/H264Sdp.php": "8e936b6586391abbfaeb9ad2576b0934b1f421ec96bd9915025ae1c84d81b10d", + "vendor/danog/php-rtc-sdp/src/MediaDescription.php": "a62d5bdf7ca7725a7c398091c7fafd023a3ef2dd3e633783bf293dd1636d8103", + "vendor/danog/php-rtc-sdp/src/RTCSessionDescription.php": "08d2b81c0a25818e425ae280cbd604833377177a447c54e06b54eaec0d06273a", + "vendor/danog/php-rtc-sdp/src/SDPUtility.php": "f2e15f7f12c630018380a733016e81fe8b5a5110c41acd2bdc9efc6b846c199b", + "vendor/danog/php-rtc-sdp/src/SctpParameter/RTCSctpCapabilities.php": "edb178fdbfb3397a6f9b8f5f8d21af3e871c8b6ee67e956db474478d8c85f61a", + "vendor/danog/php-rtc-sdp/src/SessionDescription.php": "89b9e6ba439f41544ef43fee4cb108b33a971429bd191c16455c31577b08a9dd", + "vendor/danog/php-rtc-sdp/src/SsrcDescription.php": "02a528c8d8188e30c8a14b801628a96c93008609c97c31ba41071d90b1a97124", + "vendor/danog/php-rtc-srtp/.gitattributes": "7a1d72a2ee9533d538eef6e6a193628340212bb5989d0b239503f9c37e0b2f7e", + "vendor/danog/php-rtc-srtp/.github/workflows/tests.yml": "9a2f107e9cd373807f8c7f6679bcad40b24486042ef81782a9b2785710778c99", + "vendor/danog/php-rtc-srtp/.gitignore": "4107642c6dfcbb44162525c2f2850221cfa4e7ec0ccfa4f981890870cee7fad0", + "vendor/danog/php-rtc-srtp/LICENSE": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690", + "vendor/danog/php-rtc-srtp/composer.json": "14ca3044210f597be606522261ffa4133c85ca377ff6ee72d9942e9fe2e819d3", + "vendor/danog/php-rtc-srtp/phpunit.xml": "930a1e0c0c18ca466da082df1dcfe8bf7db991cd5b1f01a1399590eee386dcad", + "vendor/danog/php-rtc-srtp/psalm.xml": "11e718187525208b33b07528a5e2db4ae94099200da04c069182f0884c1b3d31", + "vendor/danog/php-rtc-srtp/reference/.gitignore": "801741a196f9bcf9b2c98df681cc44f455e88c30f724a5288d8122d2a2b624aa", + "vendor/danog/php-rtc-srtp/reference/cmd/refpeer-srtp/main.go": "d64435feb05ba1f63b6d4e0416f5e8b0d345af622d37b7cf496980f3e62086e9", + "vendor/danog/php-rtc-srtp/reference/go.mod": "fd802c3ae4a71c4bce05f5c2f7c175f45ce28f088569efcc9c2b97dbba591579", + "vendor/danog/php-rtc-srtp/reference/go.sum": "fd80a7413c8cd79e5d774afb6a6db2f8dd6d8c3a8131daefd01db167f69bb7f8", + "vendor/danog/php-rtc-srtp/src/Aes.php": "635dc311ddf1c7ba93f828979957e4ee118c1f33f84c4426692200f18e817d3f", + "vendor/danog/php-rtc-srtp/src/Enum/SrtpProfile.php": "76fe4cc9026bd21551ac973120861c7d751cdd03fb7eef8a049aa5f8f256f005", + "vendor/danog/php-rtc-srtp/src/Enum/SsrcType.php": "55020c3a257c1a5554a19dae8f3bc15c287183f0f9261ecc42daa99285e34761", + "vendor/danog/php-rtc-srtp/src/Exception/SrtpException.php": "a250dd2e3278d3aa10e0c0cdc3ca68ec68ad3a4f35e31d41115184e8688180be", + "vendor/danog/php-rtc-srtp/src/Exception/SrtpExceptionInterface.php": "6cd69d5d7bc09c62e1447049c1cd23187f941a63cc550cfe6d6cfdd03e0033da", + "vendor/danog/php-rtc-srtp/src/Exception/SrtpValidateException.php": "3fe3aa87e8a4b660a897434aad369a70452f6ca3322023c64b6b5cdee86b4feb", + "vendor/danog/php-rtc-srtp/src/Policy.php": "2ddfe2231a5d3c0b78554a5a99aae68ecbe9ed76021d3a1c1e00409a7f34325c", + "vendor/danog/php-rtc-srtp/src/Session.php": "4e725574ac3ee40d746baea0796097068a2f465309c2304f50ccb2255cbf2b2b", + "vendor/danog/php-rtc-stats/.gitattributes": "7a1d72a2ee9533d538eef6e6a193628340212bb5989d0b239503f9c37e0b2f7e", + "vendor/danog/php-rtc-stats/.github/workflows/tests.yml": "f89c81df9e31206eaea218862236277336e4da0b81236b0b2c00d3ffaa4676dd", + "vendor/danog/php-rtc-stats/.gitignore": "4107642c6dfcbb44162525c2f2850221cfa4e7ec0ccfa4f981890870cee7fad0", + "vendor/danog/php-rtc-stats/LICENSE": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690", + "vendor/danog/php-rtc-stats/composer.json": "ba277cfbeedd5b8fe831e6cfa094111933a71bc8bddf815d2557454ed340da8b", + "vendor/danog/php-rtc-stats/psalm.xml": "6034ac65a05595daf9a56db358ff458ca0b85cb0f05196abe847705bbd5fa004", + "vendor/danog/php-rtc-stats/src/RTCInboundRtpStreamStats.php": "7c282ad0d016cb79edd2de8855ce00abdef52fe0f28c1a48e9ed1cd1a0775f4b", + "vendor/danog/php-rtc-stats/src/RTCOutboundRtpStreamStats.php": "aee8768b5da9e818bdd46dd3478f2ce4fd40ca095e61fe1eb3edbc03fd1e9930", + "vendor/danog/php-rtc-stats/src/RTCReceivedRtpStreamStats.php": "5f698d25b353c3fd0142761ce67f81f322e5a48b6fad8a487b43a08695b86e4f", + "vendor/danog/php-rtc-stats/src/RTCRemoteInboundRtpStreamStats.php": "d317847540f3b949258de6cdb548219ba8163b57968adbea8eef3a74d94b45cd", + "vendor/danog/php-rtc-stats/src/RTCRemoteOutboundRtpStreamStats.php": "730ca27977f18a6e3613e06bb8f1b8611bf8eec5c21631d3aae202c6e8076642", + "vendor/danog/php-rtc-stats/src/RTCRtpStreamStats.php": "429ccf2035cc57444cdee6a35a1eae16e72fd0126a7b199c00eb7dc3cd65fa12", + "vendor/danog/php-rtc-stats/src/RTCSentRtpStreamStats.php": "f1fee1eeb8fda62e3f88a290ef0b186a2f03e571b9fa89bcdadd99cc04521906", + "vendor/danog/php-rtc-stats/src/RTCStats.php": "ad64706b5ad7684cd44583d7617e0780797e2e65addce2f6c8aac6e702f61c78", + "vendor/danog/php-rtc-stats/src/RTCStatsReport.php": "1f53a22c50c35ec143447c1ad783dd819078589003514a152e6477716dce48a8", + "vendor/danog/php-rtc-stats/src/RTCTransportStats.php": "366d638c5d10254652713a3f43e688e5d0ecb298c7ee9d72f9eacca5dedf48a5", + "vendor/danog/php-rtc-stats/src/enum/StatType.php": "4295db4d7cbba8d50e96ab95733b4fbd63d460618c291a7e4211248f5214754b", + "vendor/danog/php-rtc-stats/src/enum/TLSState.php": "74377e748a80f9b8e541e14cc58915fd6936c39cd8f53b94cbf3073af231c32b", + "vendor/danog/php-rtc-stun/.gitattributes": "7a1d72a2ee9533d538eef6e6a193628340212bb5989d0b239503f9c37e0b2f7e", + "vendor/danog/php-rtc-stun/.github/workflows/tests.yml": "2ecda19fee31419d6362ee2f09c6f9c1a7f26594e17ca29b1fc145c2c6fbab5b", + "vendor/danog/php-rtc-stun/.gitignore": "4107642c6dfcbb44162525c2f2850221cfa4e7ec0ccfa4f981890870cee7fad0", + "vendor/danog/php-rtc-stun/LICENSE": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690", + "vendor/danog/php-rtc-stun/composer.json": "b9faaa24313c97076515d0dd68651178cab44d28cedaaa4fb10fc0e4c5994741", + "vendor/danog/php-rtc-stun/phpunit.xml": "4b2b09cf623393e00dce4821f4f9a298ed397d50d9258284421ee5500ac87b94", + "vendor/danog/php-rtc-stun/psalm.xml": "11e718187525208b33b07528a5e2db4ae94099200da04c069182f0884c1b3d31", + "vendor/danog/php-rtc-stun/src/BaseProtocol.php": "bd6fd9e194d45e45120ff1ab8a1d0d71616eeb5175bba0732e0ba2e46ab136ae", + "vendor/danog/php-rtc-stun/src/BaseProtocolInterface.php": "bb1a29a67d3bcceb19cec486d707c36ffe6844960da24024138e1242ac6c7474", + "vendor/danog/php-rtc-stun/src/Datagram.php": "da0dbb94254beeb2049e85a7a0a6ac005018526bc2395ca7ecf48bb77eab2c19", + "vendor/danog/php-rtc-stun/src/Enum/MessageAttribute.php": "b2fe049655bbb35a37770477e7b2f5b6c7c7464fa05b19bbdc033ac96f9191f5", + "vendor/danog/php-rtc-stun/src/Enum/MessageClass.php": "ba847bc55475c6c80c2a73e0d6b64f29ad4a5af74eeec19172e7832db34be5d0", + "vendor/danog/php-rtc-stun/src/Enum/MessageMethod.php": "918cff6d42de6d7716fd1e255cf8255164b87b4c4e5a72e1647a665a8efeb6ee", + "vendor/danog/php-rtc-stun/src/Exception/TransactionException.php": "1c9efe662805d63b3f6b107e46ddb119ecbc2d24b5c4c1bbcc10089326bf1f6a", + "vendor/danog/php-rtc-stun/src/Exception/TransactionExceptionInterface.php": "d9fd6841a4e032ddb774294389f0c6ea354524e53eab9f1abdb14ffe35a846ab", + "vendor/danog/php-rtc-stun/src/Exception/TransactionFailedException.php": "07a68e0ea452c17cb66773426c42d1bb87657e558e526c7415a8df8be15637fd", + "vendor/danog/php-rtc-stun/src/Exception/TransactionTimeoutException.php": "bea60207542f44156d98c2a47a62c6898aec227a3361c0ee8adfc42e827955e7", + "vendor/danog/php-rtc-stun/src/IceCandidateInterface.php": "46fe8eba7bb3b8ac980989c99633ea38baa4396836e68264b725a14dd46428ba", + "vendor/danog/php-rtc-stun/src/IceConnectionProtocolInterface.php": "7f4bfd5b76033cc9598ae35014500df43b671b9008022005d6110d864ac6a4d0", + "vendor/danog/php-rtc-stun/src/Message/Message.php": "33a75a43d214c213e1a0cf0370133fc70887a469c268387fb5528f9b6817cbc8", + "vendor/danog/php-rtc-stun/src/Message/MessageAttributeCollection.php": "e5d0a750544c0a1df2970d00a520299bfe3d2d3fd6c886c2dbb4a0057065cff5", + "vendor/danog/php-rtc-stun/src/Message/MessageAttributeEncoder.php": "d32459d467117debfb313d77e8fe03dbd759b9a637cf27c43152d29301d1d780", + "vendor/danog/php-rtc-stun/src/Message/MessageIntegrity.php": "d5528a7db3ab9c92fdc82d330dc49d98d1d9d57f99c2bd6a6e6e6e2f8d2a0dbb", + "vendor/danog/php-rtc-stun/src/Message/MessageInterface.php": "901874a04b921d1935095bfcbd72c67cdea9c5bd67faad806da72743446b60d3", + "vendor/danog/php-rtc-stun/src/ReceiverInterface.php": "5c74234b5ca650717db5555dca7deb5998f806d5e445681916ba62457ec23e9e", + "vendor/danog/php-rtc-stun/src/RequestInterface.php": "ed88f728cfb8015c3372c660b935b5a3261c36e897192fc0372ee0efa298fe24", + "vendor/danog/php-rtc-stun/src/Stun.php": "0dbfe4e6005324908bf940fcabdd5e17689c8e2cf27a5da9d6834500237ee3c4", + "vendor/danog/php-rtc-stun/src/StunInterface.php": "ebffc07be50f25210b2cca07a7015a974fd7095564370d6c1a4e022d362894b7", + "vendor/danog/php-rtc-stun/src/Trait/CandidateSetterGetter.php": "91f3e6c51fc4d5a8bb4d83211c1eeae5e7923ac98797855356df5e11c54dcc45", + "vendor/danog/php-rtc-stun/src/Trait/Request.php": "6109ce290c209f8ae0922cf6eff8d154758dd5e8f504f93e2d38da7f16ed99bd", + "vendor/danog/php-rtc-stun/src/Transaction.php": "fca6e4cd89f851978d293003c433ac2aa6d673220c5521c6b1778d6901bf1ed2", + "vendor/danog/php-rtc-stun/src/TransactionInterface.php": "ed296927ec72fc644b8df694f8d4f6e9d3eb4559058121da8f5682b449d9dcee", + "vendor/danog/php-rtc-stun/src/Utils.php": "f14b4fa6922ca68c57385616032dc83036ac934566b02f30007d70841fe0d27b", + "vendor/danog/php-rtc-turn/.gitattributes": "7a1d72a2ee9533d538eef6e6a193628340212bb5989d0b239503f9c37e0b2f7e", + "vendor/danog/php-rtc-turn/.github/workflows/tests.yml": "7b0dc9ead822253fb63e38b11f78e123e6adee91b8b03b7bb07fc24713ed7bc7", + "vendor/danog/php-rtc-turn/.gitignore": "4107642c6dfcbb44162525c2f2850221cfa4e7ec0ccfa4f981890870cee7fad0", + "vendor/danog/php-rtc-turn/LICENSE": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690", + "vendor/danog/php-rtc-turn/composer.json": "842502adc7fd478150aefaccfea88911b2ee940ddf1b536421dc4ddca6adcd33", + "vendor/danog/php-rtc-turn/phpunit.xml": "930a1e0c0c18ca466da082df1dcfe8bf7db991cd5b1f01a1399590eee386dcad", + "vendor/danog/php-rtc-turn/psalm.xml": "11e718187525208b33b07528a5e2db4ae94099200da04c069182f0884c1b3d31", + "vendor/danog/php-rtc-turn/src/TCPConnection.php": "076f39464681e7b306048c8cb6e907b5da0ca8c2abd81082342bad94a0d00390", + "vendor/danog/php-rtc-turn/src/Trait/TurnConnection.php": "cd3fa528441a1b04e97d95e8093bb3da4e823104554da90c6cb19f23d28808de", + "vendor/danog/php-rtc-turn/src/Turn.php": "2d3d1a768afe406c2c356cd712964c8cc665874e814fb6681430110d822c90b7", + "vendor/danog/php-rtc-turn/src/TurnConfigurationInterface.php": "9bd5699f7ce022c55015546cf4840a1f7a55eca38b2e79e931d549468e86b69c", + "vendor/danog/php-rtc-turn/src/TurnConnectionInterface.php": "c300b3e75ec564a2437d88313c9f4266a1591526f4b338607fa1bd82161cb8be", + "vendor/danog/php-rtc-turn/src/TurnInterface.php": "257a5d493c37af8680068819766c190e2c85755c04b0b5ab62261edef58fc7f6", + "vendor/danog/php-rtc-turn/src/TurnTcpConnection.php": "3c48c12b330a18398488de10609dcaf2662ece82ee793803fe2edc873f6437bf", + "vendor/danog/php-rtc-turn/src/TurnUdpConnection.php": "b2c4fd22b3d0dc67182769117ad4f7ab8da77e8ac7fbf5e00092fbb2d5b2601c", + "vendor/danog/php-rtc-webrtc/.gitattributes": "7a1d72a2ee9533d538eef6e6a193628340212bb5989d0b239503f9c37e0b2f7e", + "vendor/danog/php-rtc-webrtc/.github/workflows/tests.yml": "df16c87072954c491eb613d794373212f4a9a2a6978a2f43cbad744318886614", + "vendor/danog/php-rtc-webrtc/.gitignore": "4107642c6dfcbb44162525c2f2850221cfa4e7ec0ccfa4f981890870cee7fad0", + "vendor/danog/php-rtc-webrtc/LICENSE": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690", + "vendor/danog/php-rtc-webrtc/composer.json": "32fead27fcec83bfcfba453a81af5c0346653ded3f89655b73d260c9aff07c88", + "vendor/danog/php-rtc-webrtc/phpunit-skiptolerant.xml": "91da7daef9ff27abf5daa7eb202d412d67f0dce8fe752cb6eaaa272176398eb8", + "vendor/danog/php-rtc-webrtc/phpunit.xml": "930a1e0c0c18ca466da082df1dcfe8bf7db991cd5b1f01a1399590eee386dcad", + "vendor/danog/php-rtc-webrtc/psalm.xml": "11e718187525208b33b07528a5e2db4ae94099200da04c069182f0884c1b3d31", + "vendor/danog/php-rtc-webrtc/src/Enum/ConnectionState.php": "71b234106800b63810569c649f6c7ba105623ab6bc1d31572531a90635906bd9", + "vendor/danog/php-rtc-webrtc/src/Enum/IceConnectionState.php": "ba6d2cb671f5a1fef9b1f5c9376a1b8a96e5128c062e0f7bd0e52eb077b487ec", + "vendor/danog/php-rtc-webrtc/src/Enum/SignalingState.php": "a3e22ddadf890ec0a57d6facd8c659a8485305dd56211739131ecf43ae457d35", + "vendor/danog/php-rtc-webrtc/src/Listener/PeerConnectionConnectionStateChangeListener.php": "037b1be0d32a0ab9a0cccf106a22cdf6193d4227a76b9d829d21f2b9fe73e1ed", + "vendor/danog/php-rtc-webrtc/src/Listener/PeerConnectionDataChannelListener.php": "50b86a66aecd5cdbadffac4a194018ffab646dd17e51248897e785e679e8883d", + "vendor/danog/php-rtc-webrtc/src/Listener/PeerConnectionIceConnectionStateChangeListener.php": "51f315ba798d057f47cc84e27ef61d1a85235b8e9152e1167a70b20cc5f8b3fb", + "vendor/danog/php-rtc-webrtc/src/Listener/PeerConnectionIceGatheringStateChangeListener.php": "6654b39d0c7c402f57ad7e14de047564b2a1fa7046c2f5ad23db62696debe9bf", + "vendor/danog/php-rtc-webrtc/src/Listener/PeerConnectionSignalingStateChangeListener.php": "3449d03759a4247012ba10773e44cea9f48ef929e03391c3f0734ebbea1784a7", + "vendor/danog/php-rtc-webrtc/src/Listener/PeerConnectionTrackListener.php": "e254f849acd11b285a5309e7a21c071c2de751c8602821106ba0c549c9c7db79", + "vendor/danog/php-rtc-webrtc/src/RTCConfiguration.php": "2b8cf53029492f57fa7f2c90cbe14f9d543f3ca5f658e4347cabb84d2cd3f4ab", + "vendor/danog/php-rtc-webrtc/src/RTCConfigurationInterface.php": "d1cc118a79491b1e8cf5e743053c666d26d0332723e0562e3e3d4b104b035604", + "vendor/danog/php-rtc-webrtc/src/RTCPeerConnection.php": "52fdccdeb6f0d2891a416cac4e4471b0c835ecf25200078cd0673185e7cca961", + "vendor/danog/php-rtc-webrtc/src/RTCPeerConnectionInterface.php": "3c90be444bbfcd0096bcbe8c08350bbc0ccb5b0c13af7a829298f31ccfd335e5", + "vendor/danog/primemodule/LICENSE": "57c8ff33c9c0cfc3ef00e650a1cc910d7ee479a8bc509f6c9209a7c2a11399d6", + "vendor/danog/primemodule/README.md": "3a373bbaf15261d728a33c51703baf61aabc7b4b8fdece5d883646c1c2706094", + "vendor/danog/primemodule/composer.json": "4839a05cd9716afa67a46bd5ee688e865a56cd08592a329dc649b16228a54922", + "vendor/danog/primemodule/lib/danog/PrimeModule.php": "2e45e278701b84b8507d95a6962b01edcad10ed9b278ecc35718543336f819bd", + "vendor/danog/primemodule/lib/danog/alt_prime.py": "ec63d5de8cce42908bc8bf1043626c552c7eae5318658217a1093d093b199bfc", + "vendor/danog/primemodule/lib/danog/prime.py": "5dc87da7b6dec039a55c3a494bd8aee60316ef6b102e4b0aabdc9b3bcccb0e03", + "vendor/danog/telegram-entities/.github/FUNDING.yml": "d32aff5b00bb9eae134a36c19ba9680f222d4aa62d4af8b1e349769fe98e85dd", + "vendor/danog/telegram-entities/.github/workflows/main.yml": "b9f6079cef6c2c84b08aeeedaa7dda4e593c7781c192aee5a482f6a1b514e1ba", + "vendor/danog/telegram-entities/.gitignore": "1920173c7c1839363833a34e3ba921b51b2f73933e7cc98b85ae710599201130", + "vendor/danog/telegram-entities/.php-cs-fixer.dist.php": "9b6af1b5d3d4d5f1c1bc495bd5fd0d5fe6a9bb2c3fdfc546c3c074a4bc82b717", + "vendor/danog/telegram-entities/LICENSE": "8c6db340475136df3c1201d458fa5755698eace76e510471ecc9d857d6083dac", + "vendor/danog/telegram-entities/NOTICE": "6b4a79f5f9cfaff020d4ebe1c3979f089e22f0bc6c0bffc697fe13d08dba0dc6", + "vendor/danog/telegram-entities/README.md": "adea16ef1efd796b37abde958c6690d2bd3c022443e2fc9a9ec738cb03c3764d", + "vendor/danog/telegram-entities/composer.json": "2953539aa748b3cbb12b1edb822ed59b585ef4adfbcbfeba4f642d3529635e08", + "vendor/danog/telegram-entities/docs/docs/danog/TelegramEntities/Entities.md": "7ba231eb75ffe2ab3ed93c09e6f8de043651bddd24dc348b3dc3abdf7b1127ea", + "vendor/danog/telegram-entities/docs/docs/danog/TelegramEntities/EntityTools.md": "3a9864790bd7d1ff898e55d3b37419e1c47c941d3f13a7107abe7a45fd713ca7", + "vendor/danog/telegram-entities/docs/docs/index.md": "b2fe478d2abfd324a56f7f92ff6cf629ca1b4382d6f719b0baba7a27dfd26e3b", + "vendor/danog/telegram-entities/docs/index.md": "dbcc210d7f4962499db6d4cfa18658e26d05ee700c962a811cac911f095e22fd", + "vendor/danog/telegram-entities/examples/1-all.php": "7dc031e01147d4cefe7ebd5034dc5548e2307eb19aad74d2964487dfc0ac6cd9", + "vendor/danog/telegram-entities/phpunit.xml": "c87eebd760a64038c4bc2a73ef99d102417632d6446a63b36f1292f132e00735", + "vendor/danog/telegram-entities/psalm.xml": "ff29a0c349a6866df89812b508a0a47e4c5ad6ba87f86532fad416e89d122981", + "vendor/danog/telegram-entities/src/Entities.php": "06d850e1ad044a0e432fa5223ff55b95f2c5647a7aec94e8f293104ef09e1c7e", + "vendor/danog/telegram-entities/src/EntityTools.php": "a9aeec585eb534e9b67bc4239abb6fdf496dcd1267a0e46491072d09a9a39cf8", + "vendor/danog/telegram-entities/tests/EntitiesTest.php": "87519028b3037dcc595c8316d3ab95a253ea5bc1f551613a9d2f8a5ff9e89b64", + "vendor/danog/tg-dialog-id/.github/FUNDING.yml": "d32aff5b00bb9eae134a36c19ba9680f222d4aa62d4af8b1e349769fe98e85dd", + "vendor/danog/tg-dialog-id/.github/workflows/jekyll-gh-pages.yml": "8028ba1bdddd05938c52b2ebd46a4c35e45aa595b5d4886731f053532c4cc0a9", + "vendor/danog/tg-dialog-id/.github/workflows/main.yml": "99c335301ad5cf8ba3943c840cd519988e8c2e195d9282f6bb01496b3c19f17e", + "vendor/danog/tg-dialog-id/.gitignore": "07a3dce1cb3bf20bc80f241d44d279016a2eaed2a3616e14ed58bc0659368df6", + "vendor/danog/tg-dialog-id/.php-cs-fixer.dist.php": "d9b2ec5552c8a0147b02eaa486d00b276a47593207f57b3c3bdcba762cf576f7", + "vendor/danog/tg-dialog-id/LICENSE": "8c6db340475136df3c1201d458fa5755698eace76e510471ecc9d857d6083dac", + "vendor/danog/tg-dialog-id/NOTICE": "c23abfc407dd639c3136e3a12451688d68d7f9957b43ecbcedefb2cf5757086e", + "vendor/danog/tg-dialog-id/README.md": "f1ee1bf7f23be0eec82522c3486ebcf6975abf7ba6542c6a35229ad242f6e14d", + "vendor/danog/tg-dialog-id/composer.json": "ec322bb7f597046139ebc16dfb458989ad7f5c8afcbd9d0b8d8f6c0bac362da3", + "vendor/danog/tg-dialog-id/docs/danog/DialogId/DialogId.md": "7758af005201c55ac67bcac7df60fb930995b2723380c47b807c51092597cf6c", + "vendor/danog/tg-dialog-id/docs/index.md": "48315f773331db2f96d449cdffbd1d7aa3955c066997a9b6007d2585351ce8a6", + "vendor/danog/tg-dialog-id/examples/1-type.php": "820e2583d408c8ead25788e53ea11dda1958c9997e268db5991d09ee5f4aa1b9", + "vendor/danog/tg-dialog-id/infection.json5": "3b538f5bb45bb64fe762fecc09748354037149da3f4c6170b183b07b791f7ec2", + "vendor/danog/tg-dialog-id/phpunit.xml": "6ef6a824fb67a258d1ea16a18dca3b773881095d2cc0f6da1e4c9c35c43b524a", + "vendor/danog/tg-dialog-id/psalm.xml": "1c2f56e8bc8355e3913878e2b6b51a18fb2c343851d5866cb91c9658436eb7c1", + "vendor/danog/tg-dialog-id/src/DialogId.php": "30792dc368c8861f14b11a2936cce1cbba00e0c9f478f4a7afef6682c40d0022", + "vendor/danog/tg-dialog-id/test/DialogIdTest.php": "3ed6d781401bc3c113b40bb1d643f87a80d2f781dd12c320de68452f004c7e0b", + "vendor/danog/tg-file-decoder/.github/FUNDING.yml": "d32aff5b00bb9eae134a36c19ba9680f222d4aa62d4af8b1e349769fe98e85dd", + "vendor/danog/tg-file-decoder/.github/workflows/main.yml": "ed9854087a1d93007f146a670e8c85bf3618d5f8bd66965cfa22d908a0f2b9c8", + "vendor/danog/tg-file-decoder/.gitignore": "e8af7f56969ba03e540975858d268e192458f783faf57e03f3cc9fed521e8314", + "vendor/danog/tg-file-decoder/.php-cs-fixer.dist.php": "3b188ac5a4675dc6aa321dcd0062d6ec78ee05dbbc39e3f4214896c829226cee", + "vendor/danog/tg-file-decoder/LICENSE": "57c8ff33c9c0cfc3ef00e650a1cc910d7ee479a8bc509f6c9209a7c2a11399d6", + "vendor/danog/tg-file-decoder/README.md": "59324f260fb46ec3009876bad38287497908c38a27f0d759c5b8350f2ea62b09", + "vendor/danog/tg-file-decoder/_config.yml": "91330137f6537697be5cf6f4f05651b945d920325cbea69601d95e3d06a68019", + "vendor/danog/tg-file-decoder/composer.json": "ecd6e3608728b89fc5c75762cd825516b146204777008fee72ef608133788093", + "vendor/danog/tg-file-decoder/docs/danog/Decoder/FileId.md": "f5e3ff02c7ca8af282e2ee67d204758f9d190ad9dd7fc4b503cfe8da98a4458e", + "vendor/danog/tg-file-decoder/docs/danog/Decoder/FileIdType.md": "faf0463b4805b7ea51413dcc64c8494f6aab8622bba30a6dac9012336033a11f", + "vendor/danog/tg-file-decoder/docs/danog/Decoder/PhotoSizeSource.md": "47f89aed4aaa8e4f04e85d20f87c831a0c08c87898bc7256c33cc1e083b08c49", + "vendor/danog/tg-file-decoder/docs/danog/Decoder/PhotoSizeSource/PhotoSizeSourceDialogPhoto.md": "19927c5b52cc837740a4ab1c3b4c08dc716415e69d8363b1c0b2185df8783ff4", + "vendor/danog/tg-file-decoder/docs/danog/Decoder/PhotoSizeSource/PhotoSizeSourceDialogPhotoBig.md": "a2d883c8a37bee84018393a191e640f5286fa3bc8d07e93e9f008afa9d04b0bf", + "vendor/danog/tg-file-decoder/docs/danog/Decoder/PhotoSizeSource/PhotoSizeSourceDialogPhotoSmall.md": "de69b552cdda7001a5c15af2d0858ffd8aace32b94a063b6cc0385bb840bb0be", + "vendor/danog/tg-file-decoder/docs/danog/Decoder/PhotoSizeSource/PhotoSizeSourceLegacy.md": "3e5cd8e56ae4adca4f13f70d927f53073c6915379ec3b55d1897771f45b74291", + "vendor/danog/tg-file-decoder/docs/danog/Decoder/PhotoSizeSource/PhotoSizeSourceStickersetThumbnail.md": "934175aedc10bf42292845aca51fc8a5730dd5fe4750b849dcf6c035fb57bd57", + "vendor/danog/tg-file-decoder/docs/danog/Decoder/PhotoSizeSource/PhotoSizeSourceStickersetThumbnailVersion.md": "4725de50bcd096e04e8b73573466e40a7d24d784e504cb9decf85c2daa1b0f9b", + "vendor/danog/tg-file-decoder/docs/danog/Decoder/PhotoSizeSource/PhotoSizeSourceThumbnail.md": "24df1b04a2839d00e31a517f2b03740f2ec1192470e53a892ab1a1af8668377c", + "vendor/danog/tg-file-decoder/docs/danog/Decoder/UniqueFileId.md": "b7e8f05dbe68b9f008fc436248e066e710a947731ba3af0ccf958d4084f85122", + "vendor/danog/tg-file-decoder/docs/danog/Decoder/UniqueFileIdType.md": "4c89330bd9be0f4f1968978532c82887c658c248e3e57e3f6572bf88c13b9f4b", + "vendor/danog/tg-file-decoder/docs/index.md": "7514947fa637e222f53018117208053a934d83501d30e87dfcb201edb579584c", + "vendor/danog/tg-file-decoder/phpunit.xml.dist": "e371261a973b8e60b35d89c90797953c494283a6e44124a47e01e4a34cc66f1c", + "vendor/danog/tg-file-decoder/psalm.xml": "514e73da9bbfde7c9788194d653ca785f1ae1400309235f81f8c05696ff62e6a", + "vendor/danog/tg-file-decoder/src/FileId.php": "10ffdb1f95b8c2a337775fe754d217fffe6dbe84e5c8668e226893b9e8234324", + "vendor/danog/tg-file-decoder/src/FileIdType.php": "7697b8939c3b8e8be1648a270dda03e3472c0aafa9640dff44ac89ef57c30664", + "vendor/danog/tg-file-decoder/src/PhotoSizeSource.php": "00b4039820ba3bd15c0b5caf0bed387f6aaa3d031ebd52a378fa932413f8f700", + "vendor/danog/tg-file-decoder/src/PhotoSizeSource/PhotoSizeSourceDialogPhoto.php": "8b09d9c61844bc7117df0ca5ec30300e28d4c3a6a905d9ef8474d96174bc03e6", + "vendor/danog/tg-file-decoder/src/PhotoSizeSource/PhotoSizeSourceDialogPhotoBig.php": "8d2c8960b43f5c883efd5b0dbcf6e7b1fa9b22efa9f76b652150e541e1a5ee5c", + "vendor/danog/tg-file-decoder/src/PhotoSizeSource/PhotoSizeSourceDialogPhotoSmall.php": "fab00b72e22985de261db564badeb19e298277e77063c27331c7cc67cafd5939", + "vendor/danog/tg-file-decoder/src/PhotoSizeSource/PhotoSizeSourceLegacy.php": "086676b2a8c2f23e661dbee44d522e5d227378171030fea32ab6aa067909d4a9", + "vendor/danog/tg-file-decoder/src/PhotoSizeSource/PhotoSizeSourceStickersetThumbnail.php": "7d1b6014e5d14eb2dd3b31326b03ca931001f4810aa6789bf92ff21529288e43", + "vendor/danog/tg-file-decoder/src/PhotoSizeSource/PhotoSizeSourceStickersetThumbnailVersion.php": "60db678b4ca511f6d44f1370b9be250b946a9c502e8170f1db28fd1b1a2509e1", + "vendor/danog/tg-file-decoder/src/PhotoSizeSource/PhotoSizeSourceThumbnail.php": "52f3fa6ee258bc5f08ad618f9cf3ef005bcd9240830ce3a8ee19bee71a64ff7f", + "vendor/danog/tg-file-decoder/src/PhotoSizeSourceType.php": "58990d916bfb937d4531d97d87003f3c08cda3cff5a6c641d7356e5589ea265c", + "vendor/danog/tg-file-decoder/src/Tools.php": "56531dd3ad386646a655a737cb770b0bf6501827ff78afe46c3ab352e69006a3", + "vendor/danog/tg-file-decoder/src/UniqueFileId.php": "feee846be3c07449d8266c49f5e4e298458ed4524e9f659df1787f53fb406228", + "vendor/danog/tg-file-decoder/src/UniqueFileIdType.php": "9a0528997839383b6778fb5a5f7d458f756a5105026e4b75813007429be207e9", + "vendor/danog/tg-file-decoder/tests/IntegrationTest.php": "87f3f954e9241be594dc77bf5614cf3bb59245a386cce50c16f556ddeb2be08c", + "vendor/dasprid/enum/LICENSE": "6748d0268a176f839bfa1031724f9ce0963acbdadc71e503c2c3e9b59c8fcd68", + "vendor/dasprid/enum/README.md": "1bafc44d59b9d75e95ac0d52c72ca94d9d1129dda2761bf1922f9e235b30bedd", + "vendor/dasprid/enum/composer.json": "806922540285ebc6013d9028bbefbfb3d9ab47260c1138fb0f01e38d9c1ec1df", + "vendor/dasprid/enum/src/AbstractEnum.php": "1c2d7baa5e2a9c9b9419ee6b1e49e5af35229c51ef9c77c489b087faaa6e0040", + "vendor/dasprid/enum/src/EnumMap.php": "449f605b743700e428551a7adcf50898d002a3839524982f27a52224fb456a73", + "vendor/dasprid/enum/src/Exception/CloneNotSupportedException.php": "a3c266842dcbc83fa57a7d4ba7314cd2c4e588d5f7e2734619b343b201f9a08e", + "vendor/dasprid/enum/src/Exception/ExceptionInterface.php": "990c3de69010a72dc796c37d27c9ec3df312989e46332d3344e96810255e0359", + "vendor/dasprid/enum/src/Exception/ExpectationException.php": "07874b69ba61b438a22a719d7718de7e2f17b1f7126ffbf92f56b5a5d2239d68", + "vendor/dasprid/enum/src/Exception/IllegalArgumentException.php": "f5523323e738118b46c621b04bebea3b779745fc1c4dc4318cc81d69832dbd41", + "vendor/dasprid/enum/src/Exception/MismatchException.php": "973256edaee9b540eb63a3901d82b53a4516f5eb2387062c16da29a797f03845", + "vendor/dasprid/enum/src/Exception/SerializeNotSupportedException.php": "d6072d330097ef643df673c5c40c51729a4fdbd0aa197980ba8d8d53efa11ba9", + "vendor/dasprid/enum/src/Exception/UnserializeNotSupportedException.php": "c0b225b1eab0b0cee0f11f473a7ff935697e55ad267a6eca27234585a2963c6e", + "vendor/dasprid/enum/src/NullValue.php": "c2e503fab5e76a21e5e6bf45954780a8759d0c6ae7d13ba09f0a7c3d37b0e838", + "vendor/daverandom/libdns/.gitignore": "57ebde75eecfa37c939fe59ea9128a310e5281c80063a54fabb0759cda0d10d1", + "vendor/daverandom/libdns/LICENSE": "3378b771ef8e0b6e09d1a5dd7d3daeaf5b06a41f8cf7ab43f20df3b646c18dc9", + "vendor/daverandom/libdns/README.md": "0cc13271cd4697b9ab2a6f9c163e78b565375782a696e3161894ee2583f4a26a", + "vendor/daverandom/libdns/composer.json": "82ef92de60c96b3e34000ddc55afceb979f126a55399d83bdda6945ce0a5996f", + "vendor/daverandom/libdns/examples/AQuery.php": "03bd9608d2a22ca11f99674833946941a3166e7235c0bb13c57d4bfbfe8c80c3", + "vendor/daverandom/libdns/examples/SOAQuery.php": "1bce75ba3008c3898c6136ab7f83d4349a724393fbecd1cc71c6bac3931f75d5", + "vendor/daverandom/libdns/examples/autoload.php": "8112f50a346b6ec30f5fd33a4bccb6ccf1c9df566dd67fffb46e42a23a9fe7ad", + "vendor/daverandom/libdns/src/Decoder/Decoder.php": "4d46344b6fc7ea61f5d3464ad1a82774dabc7b08421c8119a99cf29a5c0a4b1b", + "vendor/daverandom/libdns/src/Decoder/DecoderFactory.php": "c3afd98ca5b0b0ac408ac4b507b895827315832a389ffde1d33538bbb6242510", + "vendor/daverandom/libdns/src/Decoder/DecodingContext.php": "3741c1944a749847441d3bf033d04a2e34647d461e7c4370b6c7b5bdacfa0d1e", + "vendor/daverandom/libdns/src/Decoder/DecodingContextFactory.php": "7312ec160309332b586fe35862478357d09aa9faeafed5ad0f60791d11194589", + "vendor/daverandom/libdns/src/Encoder/Encoder.php": "fc77ee170272f8db0067f8de197786425a31c5c4423fc5d83faaee255ccb7394", + "vendor/daverandom/libdns/src/Encoder/EncoderFactory.php": "9213f4ffff192477cc85ad8751db12e2f2f0cb311c72f2cf367e8d835092cd9e", + "vendor/daverandom/libdns/src/Encoder/EncodingContext.php": "00f9ffe516deea706063c6745b04304af119563e827c4d24028fd1af5fcfc421", + "vendor/daverandom/libdns/src/Encoder/EncodingContextFactory.php": "b3d7541dc849cafb9fbb59f752987e0d2d0de13edebb6f2192cc3eee22043923", + "vendor/daverandom/libdns/src/Enumeration.php": "389dcb4728f8a1aa61e471e8f5eb9d84ddd8cd4edcf3c20e4649f046fe996802", + "vendor/daverandom/libdns/src/Messages/Message.php": "697185a067dd97c50ad8a5af4daadc1b2a30834a1b22c2febc79a3ba0d33fa1c", + "vendor/daverandom/libdns/src/Messages/MessageFactory.php": "b7b02a324548411eb0276365fdf0fda3990d9257bab5fef1e83c4f2005153c79", + "vendor/daverandom/libdns/src/Messages/MessageOpCodes.php": "286c9e7fe42a91583a4250d575dc605c9619aab2f6c521743b19fb1d9efdc3f4", + "vendor/daverandom/libdns/src/Messages/MessageResponseCodes.php": "1e647313ffe21456cf2739c715e1931521bbd907b61e48a6c21944871dd0a074", + "vendor/daverandom/libdns/src/Messages/MessageTypes.php": "2954cc718d458db6c5c3cf48b37aaf314e287fd133ed01e5eb3b74cef25d50c5", + "vendor/daverandom/libdns/src/Packets/LabelRegistry.php": "c5ac1c96c9b29d698f159dfc0c7b8a42ce8c89dbb96b4e78b949636f27aebd90", + "vendor/daverandom/libdns/src/Packets/Packet.php": "8452ef3239adfcb9231a5736266c7ad8d8bf646e85f3290d1a53419f014915ea", + "vendor/daverandom/libdns/src/Packets/PacketFactory.php": "bb48a32369b513d29497bac77820c7cbd98d69c44116c35a41cd03b7eedbee5d", + "vendor/daverandom/libdns/src/Records/Question.php": "2ea2a0fa4efae8a00e863061c5e953f5a6e36593f3358db8fa86c8eb16f81e77", + "vendor/daverandom/libdns/src/Records/QuestionFactory.php": "360e8196b5a44606e355928a227b4bc5b28175b612baa346eb64e2b87e0a95a3", + "vendor/daverandom/libdns/src/Records/RData.php": "acdd294023a320a08143c3a37a2efdf9d397a88654a70599203faddcee54e45a", + "vendor/daverandom/libdns/src/Records/RDataBuilder.php": "7e788ff65d304375bf16e3fca1b56b6d3436011cec0b484ddcc71602c75b0934", + "vendor/daverandom/libdns/src/Records/RDataFactory.php": "46f87970f9c92eb87f7bcf73509f34701510dcdf06e8db9ec9e2f90d89b47295", + "vendor/daverandom/libdns/src/Records/Record.php": "834df2c7470c7bbc4b88f759c204ffec969d63f6fd9b41ee66b8357672e537d7", + "vendor/daverandom/libdns/src/Records/RecordCollection.php": "8906e7b2cb8bb377451e78a51b8c341ca2c1b441fef14a6f2fd0d860affe6486", + "vendor/daverandom/libdns/src/Records/RecordCollectionFactory.php": "307fc9108a275f833bb6a8b544844d4ad8ac77a0966cb8748d79342296bf3c0d", + "vendor/daverandom/libdns/src/Records/RecordTypes.php": "b34a94173d6266337bbdb06369b59f4bb89660543116413c3825bbf18da693ae", + "vendor/daverandom/libdns/src/Records/Resource.php": "4f57b77be7b03abfb504b1818650033badcaf2cce0ae36c724a50d4b00276e72", + "vendor/daverandom/libdns/src/Records/ResourceBuilder.php": "0bee7a5851b65861f08bcd3c175b1849f7a408b11ccff5d31eda7691279674ac", + "vendor/daverandom/libdns/src/Records/ResourceBuilderFactory.php": "1422d94724bc155c765ea9fcc8649e24a78cbc52fa170ba006f92133f79f311d", + "vendor/daverandom/libdns/src/Records/ResourceClasses.php": "1c2bf2bc233e14241474bd4edcff28b0cfd255a217ae6f42674a3939f4688e0a", + "vendor/daverandom/libdns/src/Records/ResourceFactory.php": "b0cf1646b39c81c35acf4193096bd76f5047b4f179bc600eb739776e86d80c4d", + "vendor/daverandom/libdns/src/Records/ResourceQClasses.php": "030ce0b74dc2e00953deebedd797a2a307f1f85cd30a6bb59e795f0f183ecda1", + "vendor/daverandom/libdns/src/Records/ResourceQTypes.php": "31d8cf2532cb37c74a922817ff9bb81667d32e146a18e958f725e113351a04bc", + "vendor/daverandom/libdns/src/Records/ResourceTypes.php": "90c1c2256b14389ba6557babaf32cb059a6711402b6debb9c6427c2c974b87c8", + "vendor/daverandom/libdns/src/Records/TypeDefinitions/FieldDefinition.php": "f067b6fdf1a537f25d2085a1cecc88672837894a0887681c2fd565c3ed01886e", + "vendor/daverandom/libdns/src/Records/TypeDefinitions/FieldDefinitionFactory.php": "a68f05c5d6049c5c0708f678b8acbc49c88adbcd62c61ab467b34562fbd5a64b", + "vendor/daverandom/libdns/src/Records/TypeDefinitions/TypeDefinition.php": "8f282ecf1eb0483655c143ab9aa0f84488b98f52d4d786da392f16b63452424d", + "vendor/daverandom/libdns/src/Records/TypeDefinitions/TypeDefinitionFactory.php": "c2273c47a121dc21424cb47bf45d36675ed0f191f1ec5c431ace05465f002ead", + "vendor/daverandom/libdns/src/Records/TypeDefinitions/TypeDefinitionManager.php": "8fcab42e1a2ade5176af4824da5b638dc743ba39263c59d6ecebe1707a02de75", + "vendor/daverandom/libdns/src/Records/TypeDefinitions/TypeDefinitionManagerFactory.php": "12dec05bcc990d4e3741f1beba16d9ceb1ee348ff7ef5b72c831fc12597efc1a", + "vendor/daverandom/libdns/src/Records/Types/Anything.php": "437773b9be71b9a2e96827a7cd5fc0908991d3abbd1ef7269bc181d48541de8d", + "vendor/daverandom/libdns/src/Records/Types/BitMap.php": "94d8661adc24d9c0b9e80b8b82c53f06af00f2d100212ff51cca6d8e0879f0f4", + "vendor/daverandom/libdns/src/Records/Types/Char.php": "d76a6fe24157c85e5ba94f7a032495991166a560294ad1c70d01cadf2596b4ea", + "vendor/daverandom/libdns/src/Records/Types/CharacterString.php": "663cda3b5e7dae5492d2a455e04314b2d4886258348d71b292905124e989df53", + "vendor/daverandom/libdns/src/Records/Types/DomainName.php": "f760bfb8b419cd1e17b3d1aa0569c2f3ef4177610a34317a35b16f5e1e4064e1", + "vendor/daverandom/libdns/src/Records/Types/IPv4Address.php": "e9c5ea8c68aa058c047efde7c19821d1944343a6d827cb7ee3f6cd93c1fab1a5", + "vendor/daverandom/libdns/src/Records/Types/IPv6Address.php": "52e00798d9ccd0bec715659895bf7d2cb352466f1a6787a8f7959bf8ea40f476", + "vendor/daverandom/libdns/src/Records/Types/Long.php": "3ec76dde659739b9825fa3edde65d9bc1b84d89c7ae3d1214a2a653b2a1d6ed3", + "vendor/daverandom/libdns/src/Records/Types/Short.php": "c4cae9ac6c0fe3f2ce1a44c2e4ceb545fec8c0da5195755c314fdee7ccedd263", + "vendor/daverandom/libdns/src/Records/Types/Type.php": "0cbb0a3384c3f2759f1cd9c64097dd9d396bfcff3ee266c8d494d188270bdc11", + "vendor/daverandom/libdns/src/Records/Types/TypeBuilder.php": "0ac52d1a5b2ca431a1fe1a9f87523436e99b9aeb87a4d2226f514a0d59a69384", + "vendor/daverandom/libdns/src/Records/Types/TypeFactory.php": "0d4a1afa354fe4cdbd58b4e90b84cb91ed13767ce46e975cb423de59c3338716", + "vendor/daverandom/libdns/src/Records/Types/Types.php": "e48486830ab4a57e958a012f3002b89b46d7a02ebfac7e0b188223ff2bd74525", + "vendor/daverandom/libdns/src/functions.php": "9869f6d24381db2e33b7bca5e868a3c54140d5cebc6207433f2c44c974a13021", + "vendor/daverandom/libdns/tools/autoload_generator.php": "27e194cbdc366fed2a3f04c22b3fc44ee556491288f8fe97c09472b034f86c87", + "vendor/kelunik/certificate/.github/workflows/ci.yml": "e764258113fe770e68d63877030a1db448080b09d070cd55453447e233dff1c1", + "vendor/kelunik/certificate/.php-cs-fixer.dist.php": "72f324e677e5328df668fc71aa7c7e71b42f431d025f7f3e0126ae9824cc0bc0", + "vendor/kelunik/certificate/CONTRIBUTING.md": "d2581117c3986bf0c7817bd2a4952511e5ff56e903a9ab3e5205734a26735ca2", + "vendor/kelunik/certificate/LICENSE": "4da4ff63fb9bf3961df2e1210e74a654c32f5c82414997977ca58e56d9eb2fba", + "vendor/kelunik/certificate/README.md": "c6c83302e60f6a86fa1619e7ad2495bf0317ba4d5d38f136517b57365e16d129", + "vendor/kelunik/certificate/composer.json": "10cf94b38aaad2a181f2a72fa3fc9e3a58f12a8d58a18f1e35d0348607a87b15", + "vendor/kelunik/certificate/src/Certificate.php": "18d6295cbb5e0942e5d42d9360491c708acc18b3589c22cc1a1d99bd1366591d", + "vendor/kelunik/certificate/src/FieldNotSupportedException.php": "c878143e59992e1b999b47183b3604a8992cf9ba8e30ee7915273892f4ff3c32", + "vendor/kelunik/certificate/src/InvalidCertificateException.php": "d2880c17e35acc24ac351c47c219a673de5d371f3f9a36792879a0b08b2f87d7", + "vendor/kelunik/certificate/src/Profile.php": "f8c31dc938504dc2bffe08cddb8004bd1634553a74a2da9cc3596d5d4bd2047c", + "vendor/league/uri-components/Components/Authority.php": "4872677b9302f811ff0c19112785a45fb76f33325f706e1c131adc4e41e506f2", + "vendor/league/uri-components/Components/Component.php": "d71c443f13f5a2f82326cb36569186d5743d37663b84d59a79a0b20211fd4981", + "vendor/league/uri-components/Components/DataPath.php": "1088fb275a1760a4ae6ff9cfcda1c366d2b13b3633c18acc5f3aba47f6df0fdb", + "vendor/league/uri-components/Components/Domain.php": "c823f0456ed1b68257b2fa023d0d6179447acac40adb2c9e6175fc68e36d23a9", + "vendor/league/uri-components/Components/Fragment.php": "4bf6e1044813ba5cd0d7ec67d9661e59e476848071f2e20606b25834a774e410", + "vendor/league/uri-components/Components/FragmentDirectives.php": "e6c16af68e1887e57bfccccc91b10d08ddcdfacef63670359d6d21786a3a2979", + "vendor/league/uri-components/Components/FragmentDirectives/DirectiveString.php": "6e8735fee8299eb85854339d83ec2b65f815ead0eac6de15894426f8b15f07d0", + "vendor/league/uri-components/Components/FragmentDirectives/GenericDirective.php": "08f078fbe6f41b4672c4ca5ab086bbe85f2ad0a956effeaadb83b54cebfe63bf", + "vendor/league/uri-components/Components/FragmentDirectives/TextDirective.php": "821f80d4bd2a2e47e70f55db370a9cff4f56bce007063250b380661074a00b3c", + "vendor/league/uri-components/Components/HierarchicalPath.php": "ac488a5771c993f826a6e5833f0c6c05c2aad02856ed1db702db5ff5bad8753a", + "vendor/league/uri-components/Components/Host.php": "1f7bd9fe75562fc4909a0d069a46bd3228e8088257943000984d2e977698acf3", + "vendor/league/uri-components/Components/Path.php": "18f60b8b5a7281227b6771fc02b5fb85b93c0c295de3a05c3aecf644e93911b2", + "vendor/league/uri-components/Components/Port.php": "17df6310a95f83c8d2bc50d2f774c29425bee96d1559c4d41058e32b45c8d4d8", + "vendor/league/uri-components/Components/Query.php": "3ed32c1220d920dc83a798463180962bbb0bb9b059c334113813d69b9befa6f7", + "vendor/league/uri-components/Components/Scheme.php": "108e3a5318ded511824d0c6f3bceb099551f76d4cf477a7e2198a8f37c19fc77", + "vendor/league/uri-components/Components/URLSearchParams.php": "5125b68fdf7b703338703e356ca11ca146000f16483c5893440f964075e9d5a8", + "vendor/league/uri-components/Components/UserInfo.php": "d2a02a8cb4b6b584897fe94be931a75254ade694b53bfa58b71ce662bd8f8220", + "vendor/league/uri-components/IPv4Normalizer.php": "84bf8d40e72ff78567eeee2dbf539b7d8050299f0fc811baa0b709d42a0ba01a", + "vendor/league/uri-components/LICENSE": "bb7f984073bf5083be5cd56d144bf3508181409ee6a866b51538725a3dd8ce24", + "vendor/league/uri-components/Modifier.php": "a102ce3e2a02034ef90c052f737e9d5d5b5a2b31d56210ac5dc01760b85ca940", + "vendor/league/uri-components/UriModifier.php": "1482e50ce9ee4b3ef8c8824ee21da854e289b95c7f802e513861c60a79325f0c", + "vendor/league/uri-components/composer.json": "cfdef3defd68f954b85ef2d6162a6aa057954e4b2268cb09e2e037b35b3a2acb", + "vendor/league/uri-interfaces/Contracts/AuthorityInterface.php": "e65f9fbd19665237af1b16931075e8cb1475355c24ebc61c468d4ff04fa03183", + "vendor/league/uri-interfaces/Contracts/Conditionable.php": "b11c35df96f4130af1b9f768086484669643c9cab82994f6ddc4183d4bb35315", + "vendor/league/uri-interfaces/Contracts/DataPathInterface.php": "9c05da875962679d5ce26f61bd67cfb77fe38d37c49696daf7c835e7d6e6839e", + "vendor/league/uri-interfaces/Contracts/DomainHostInterface.php": "af2d08e80c38c57ebec2bab379d7eb1cc78e9b7b7fda432a08636cb09c58464b", + "vendor/league/uri-interfaces/Contracts/FragmentDirective.php": "38957a1887659c11b0e6bb6c9b808c2cc31e18b6b9608f25aa414127dd139f77", + "vendor/league/uri-interfaces/Contracts/FragmentInterface.php": "381768478e118b8d7155f67e10ae38574cd0255f759955fc51e29bf8ade637c0", + "vendor/league/uri-interfaces/Contracts/HostInterface.php": "f4d4bd484ab3d99f56a434b011e59c4c23d8983a6aaab6fa4d8a5d315ef50c06", + "vendor/league/uri-interfaces/Contracts/IpHostInterface.php": "a06aca25bd75fc313bcdafbd8cda18b2216489512fc71b2965d64b5fe483ad56", + "vendor/league/uri-interfaces/Contracts/PathInterface.php": "ae76ac457af4c7ae8e7007d0d475be1d87c1b3825f0ccb7ac7d0d2b28356572b", + "vendor/league/uri-interfaces/Contracts/PortInterface.php": "d023bbc5d9d0941671315e860ee48ce8a5089535b7417d661352104d784a5205", + "vendor/league/uri-interfaces/Contracts/QueryInterface.php": "5edd3e7a03d324dfd196643aff983063d115769559f978e4d54534e51c3fda2d", + "vendor/league/uri-interfaces/Contracts/SegmentedPathInterface.php": "3ceace4097b5f8b3a7530e6976c0e80dac54de5af435397d7c3cf8ca73b2674b", + "vendor/league/uri-interfaces/Contracts/Transformable.php": "9de439580b2a0e872b2ac503ae5406242fc9f52cd6ec4cde688af57af8163c1e", + "vendor/league/uri-interfaces/Contracts/UriAccess.php": "f04fdc010ade46c1b638b48bccad06b1bd4d019132df9884070f78494ac99444", + "vendor/league/uri-interfaces/Contracts/UriComponentInterface.php": "6ef88d4544392a80a285cb1e694d45e8f54d23c483c8a47265cd5f79dd8fb3e1", + "vendor/league/uri-interfaces/Contracts/UriException.php": "3aa12dbde56dd228d50aeb7d113d8f4a2e0940609b24007e6a749238e81e6f2d", + "vendor/league/uri-interfaces/Contracts/UriInterface.php": "afcd88226fa785f026c10fd3e7eb88571c793a85141e8e49f972f4f0621098dc", + "vendor/league/uri-interfaces/Contracts/UserInfoInterface.php": "056cddeca28847f8e86176a9ef578b6a5c1c358cd7e3c78174bc4dd34a6263fb", + "vendor/league/uri-interfaces/Encoder.php": "2c36a7b603a196bdfa91bb50cc17298301a4ef697a8957c0ce0f769398205812", + "vendor/league/uri-interfaces/Exceptions/ConversionFailed.php": "3d0a97425b66a464f0f9a97d9fcffda96afecfbe90bccf2c22a7fbed109f4a1b", + "vendor/league/uri-interfaces/Exceptions/MissingFeature.php": "014b9d2313236a829f6f1796ae3b96f548045e2ff4beb8e82ef54a967d3f01fb", + "vendor/league/uri-interfaces/Exceptions/OffsetOutOfBounds.php": "0446eda84b50871c5d2001772fe47c523873d21ffd64f63be5af2d7f46e7c355", + "vendor/league/uri-interfaces/Exceptions/SyntaxError.php": "0de905c2fc763937ebb57b5ed517590f96cb059792336227f23dab0c7110a19d", + "vendor/league/uri-interfaces/FeatureDetection.php": "fc539d58a9dccb242c34979e913d75d27b2167b708260a3a01bc293ff89cd4ac", + "vendor/league/uri-interfaces/HostFormat.php": "c82fbfce97a7d13ec9bf90ce995a4ffbe89059e549a4f2767a266bdfcfbb8649", + "vendor/league/uri-interfaces/HostRecord.php": "6990f03aa8c682eed80dde2b05d690af5bf46ea8514acf705b63854438d4a4f4", + "vendor/league/uri-interfaces/HostType.php": "2237b27e3e6b597abc65f90a047be3ce0a83ef55139be0f7fbde3250ab87d45c", + "vendor/league/uri-interfaces/IPv4/BCMathCalculator.php": "990998d22b0c44f34423bd54ad2659c2941f875cc7c5b5ac41510d5122b7edfc", + "vendor/league/uri-interfaces/IPv4/Calculator.php": "2c5372f253acc5498a58c0321cd0e508ff9a5225369ce3f34ed96018b25c3b00", + "vendor/league/uri-interfaces/IPv4/Converter.php": "97bc35b1136ba81d51585888daf8e32df324a6ddb127aca5fb0ab7528a3193e0", + "vendor/league/uri-interfaces/IPv4/GMPCalculator.php": "7c865d7d745b06034f92771d9b931e38ad594f290622d1dab72fb9c7d928b9e1", + "vendor/league/uri-interfaces/IPv4/NativeCalculator.php": "47b751f517a685fa51e5c75c11b908534d8cf6a15477156050b484457c163d4d", + "vendor/league/uri-interfaces/IPv6/Converter.php": "e6f7ef030587411d3a5c2b1c5b5cb1aec8c12039e36c3848d7592dc06b2477df", + "vendor/league/uri-interfaces/Idna/Converter.php": "7fc7475f991d9340e53effd81024f5c25842c0c54c3d26249be2d1336d533659", + "vendor/league/uri-interfaces/Idna/Error.php": "b6f77b6c2e3be1b571354f7d184b7ad91048c4cd3e536d479681e6e06a2636b2", + "vendor/league/uri-interfaces/Idna/Option.php": "eed5204b12452b67664d791704076a6b84cc39576d66f9ae7f1658f14418c728", + "vendor/league/uri-interfaces/Idna/Result.php": "2364bb79224d906cd005b214d7051ddc5f158cd72534f41a3789b0d51ead463a", + "vendor/league/uri-interfaces/KeyValuePair/Converter.php": "6342761e441f33b79023d95e437a42222b20b5da61ec9513d7d04e939f3e25d1", + "vendor/league/uri-interfaces/LICENSE": "bb7f984073bf5083be5cd56d144bf3508181409ee6a866b51538725a3dd8ce24", + "vendor/league/uri-interfaces/QueryComposeMode.php": "6f28442a9221830fbb22efcdb8597193a871d47bc9a14084593ec5eae33c179a", + "vendor/league/uri-interfaces/QueryExtractMode.php": "3578428146218ce4395d1a96cb11a43ba04692e24dde69269b9fffd351f0f7ec", + "vendor/league/uri-interfaces/QueryString.php": "5c47f0cdb8a3bfe5848feba20494f5a33f8a3ad394e3371d4d8288af77a18a7f", + "vendor/league/uri-interfaces/StringCoercionMode.php": "e19ec4bb5b3d244cc7a04052ec962a34e9202d01ed7aaa45b98a586d5c1cc366", + "vendor/league/uri-interfaces/UriComparisonMode.php": "8d1d1fc357bb577cd96330a59f52f194ddf3e7969bd1d4f3f369ca5cc38b8253", + "vendor/league/uri-interfaces/UriString.php": "634466e1f8d298052fbb28deb100d9a116738b1bb8086be729a4c8f3d5f89605", + "vendor/league/uri-interfaces/UrnComparisonMode.php": "d0bcef76e5c78c76e62d831a08eb4fdf0d3f00876ce705339d5ef716b982d4fa", + "vendor/league/uri-interfaces/composer.json": "d5c32c087eba609da61d4600c685f5a1ee936933477960c0399da46e1c09ffc1", + "vendor/league/uri/BaseUri.php": "59d6296419fb4ceb7f0801fe80959525c9b593cbb5be7788c6fc3026ef98e0e6", + "vendor/league/uri/Builder.php": "fb1a6918896493f93c3b96fdfba6275155f86410582dd0f64d532d0a0a166d44", + "vendor/league/uri/Http.php": "e403b964ae4b8dce3019c5a3bdd27c1f7acefc16b702029e6f4086b5e3c4e1f7", + "vendor/league/uri/HttpFactory.php": "cc61cea67969671bcd4e790804e22c0dca8205c4914909d4a841b728ef11ff0d", + "vendor/league/uri/LICENSE": "bb7f984073bf5083be5cd56d144bf3508181409ee6a866b51538725a3dd8ce24", + "vendor/league/uri/SchemeType.php": "f25f013d77eabcdcd5870ee3abe7e983fbc97593289b148550e1f4e62b3a61a7", + "vendor/league/uri/Uri.php": "cec9579b220c92711a410930fa3243c692119b76622b9d9841584414b5723d10", + "vendor/league/uri/UriInfo.php": "7489292a9c493e52cdd4adb603cbd525a832b03b76a1271e72c1291686621955", + "vendor/league/uri/UriResolver.php": "b7858771505e2245ff0e8cf268f1c0da821a20a11955f2678e61d18f6714abc2", + "vendor/league/uri/UriScheme.php": "060fcf8b5b667233d851d06e68ca10e3cc2245cf98c278d7a5a7de02b4197135", + "vendor/league/uri/UriTemplate.php": "8a4f39a96623f679de947c5149c053138df1e5759910c1264b85e91bce714629", + "vendor/league/uri/UriTemplate/Expression.php": "ef7ee4ffc4ddf50387efba734915987d4d8c26f26ff8225ff680ae3a34dbfaf6", + "vendor/league/uri/UriTemplate/Operator.php": "26789916e265876e5bae9713f41f9c2cb6a36578f31c7f555027083b3ea92364", + "vendor/league/uri/UriTemplate/Template.php": "59eed5a8383436559a4b66a8d8cb2cf132ee4fc9ac679f87bc343c838ab47d66", + "vendor/league/uri/UriTemplate/TemplateCanNotBeExpanded.php": "42debdc4e24cf03c7d1c3df882e655797a44e7d15d539291a08de33286b7b6cb", + "vendor/league/uri/UriTemplate/VarSpecifier.php": "d1f23c6161daf77f0efd3e453af4a6cdfab16bdd8e1bc7029b0c07b3d7776e9e", + "vendor/league/uri/UriTemplate/VariableBag.php": "856154538c18d52dd94b749e15beee449103ab44f53caf229108889b28efc88b", + "vendor/league/uri/Urn.php": "b21c5289114d0db7021312bcb5c9e2fcbb7bf91ff5b97f278cdac74997a634c4", + "vendor/league/uri/composer.json": "c7aff068a3c4c2d9a3390d5f0d78047ff5c9d983623399b77ef8b678acd176cc", + "vendor/monolog/monolog/CHANGELOG.md": "237ae9b89d48bd3a5f82448187c70857226e5c3d679c1071f3186f2a141b9559", + "vendor/monolog/monolog/LICENSE": "3a351f8f434ff941f4946afb534f7df1185523638b311c22901631d8882f70e1", + "vendor/monolog/monolog/README.md": "160482ad6b8815a29cf7e98e53ec793f377416785e5810bf33d98765f2246303", + "vendor/monolog/monolog/composer.json": "9968321c5cc6c0b6df592bedd8e4db1ae24a1f8e1f0904a3268102492f435eab", + "vendor/monolog/monolog/src/Monolog/Attribute/AsMonologProcessor.php": "30ec7ef9ef9c84f5e091a81e3f5e59c24b7a2251152f5c37408ebd670be0e84e", + "vendor/monolog/monolog/src/Monolog/Attribute/WithMonologChannel.php": "93255db2cec43d176dbb7e2ecce4f8007bcc6133f6ddb1a5236377116879846d", + "vendor/monolog/monolog/src/Monolog/DateTimeImmutable.php": "59a279e374404e8db38afca8548201d8047956c49e8ebebade6ab99d8a221414", + "vendor/monolog/monolog/src/Monolog/ErrorHandler.php": "62b3d23ce2083ba7c5d4d55df61576969f4031a96e75a0007a7b4adeae5a95ba", + "vendor/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php": "461679045cddc93856d4aa6170704fe66094e9d0aadc652eeff41d0a8dc9c340", + "vendor/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php": "58c0df26770468233d17cc0d598b0533f0024f9591f7fc0121c582923afc1187", + "vendor/monolog/monolog/src/Monolog/Formatter/ElasticsearchFormatter.php": "ee0849c88faf512c611ef0ccecdb015891cc817235b4404b1432607b0c1c679b", + "vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php": "d89cbd496e793f5b572e536dc81ab6d4dbd592e4ef0331df10098e51d04558a6", + "vendor/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php": "e5fe3b2257732c2bdd08a31cb1dbc21211600152c6ce802d14657e2df053f38b", + "vendor/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php": "c3f44f06fa6ae27011f95728d04dcf9a73671aa752693d39f25a779a94d7c3b0", + "vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php": "d6284aff193b4dec6aba7c41d7e6f6e3ad4b5481488eeb30caa28bd85532e246", + "vendor/monolog/monolog/src/Monolog/Formatter/GoogleCloudLoggingFormatter.php": "4e8fcccbe55a563976ff49040ba0f3b1332716cd5f279d178f774350421f0c8f", + "vendor/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php": "490c01b91fb71c6a2531054be96f01395295c1a2d9cfcab55e06efef170bf1b4", + "vendor/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php": "abc0553e21fdd0ec9fdacfbf4fbb50321be8111e2ac2abcff3bf7c9596d5ac1d", + "vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.php": "090d4517489f412e246a82a99135c03e944c0cbc8ed1804b93c5ff126d0bbc98", + "vendor/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php": "eb41c1b207a8096f02cfb3a8b44bf9502c5ab54ac3f6cad814256f88629cb1d7", + "vendor/monolog/monolog/src/Monolog/Formatter/LogmaticFormatter.php": "bf95b325e95ee4322a19711863628cfaa05e84170b52d611469b5f75be30de41", + "vendor/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php": "40c84cee9d935f9606e67e8e236458f16423dfb6b7cb2355f3cb4f0c4b060890", + "vendor/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php": "954476e61bec24fa1cea19031bf2cb8e14dd52fe9e6151bc66ed9d26f5a96226", + "vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php": "c1c23219f543d12eb105153859d114864feafd5f2a40f3515b028cdb1eda88f5", + "vendor/monolog/monolog/src/Monolog/Formatter/RedactingFormatter.php": "82926f715fd42e794e0943c90d5a80a583518e3e23b8e3d14a8f6a9fdfe6f77a", + "vendor/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php": "18e35896a12c177156d1ee0e8201c6390dd07bb4c445e915b5ffe26e823b1039", + "vendor/monolog/monolog/src/Monolog/Formatter/SyslogFormatter.php": "a3c891bf01ed3f0aae3a0f954361cdb9754f8d230d9ff97c7dec70fe555c1856", + "vendor/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php": "1c83c6bf597c1cae34b14557725c2bcfdd5002d5da7e13dfe146edf0e0107940", + "vendor/monolog/monolog/src/Monolog/Formatter/WrappingFormatterInterface.php": "eade8dbf5e4a071f59a3e5bf933b46a70d12a894872a93ff15ee42a43e43e889", + "vendor/monolog/monolog/src/Monolog/Handler/AbstractHandler.php": "d8a77b7a1f529ca85c6540b10cb6865effc65d0485b3164b8669ae1aa6f149fa", + "vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php": "55f6c556bae785878f4fb3abf2054d5e77bd1133ec96d0458577b3af4572ea6e", + "vendor/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.php": "1d3f69c885ba356b1ae73e1aedbea24cfda06dfde6ba1f1bc94fe951f3f1a754", + "vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php": "bd059fa7165a8f889df2a34dca91fa33a1cbf21d5ec8a46c62e93672478cc5f3", + "vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php": "4e3a314894c9a988b271a9e14c48d1534acb0c48a54d31f8870caf6f75c2ef89", + "vendor/monolog/monolog/src/Monolog/Handler/BufferHandler.php": "2f0316fd92390cf65e413af357072f3653743b3923add8243938f5e2db5a3772", + "vendor/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php": "f4c92b4b357a6b332cebc20f66e8cc0c8534c7aae9a54c10e9daf67095d50194", + "vendor/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php": "83714f3c42b91ad63ac41cdcae9490eb252b145668a366411c5e9dd22208e011", + "vendor/monolog/monolog/src/Monolog/Handler/CubeHandler.php": "4328b8ae23c51dda69e5b963c4a5b16df3a5b6fe353e52cbc5cdb0f8a8f34696", + "vendor/monolog/monolog/src/Monolog/Handler/Curl/Util.php": "48386bccc6fe95dc2fc88db9842f558f220c064b22d102a78b0c39f5c0230b40", + "vendor/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php": "14c8c21b51f868c3e8340d546d417f1959760909c823aa439c7e2dd0bd5d1d51", + "vendor/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php": "280780ffaed0977da6091fba26a023262777eddfffb1e6a02693c5a88d68a019", + "vendor/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php": "5ac2f191fcaea9560037b51990ce2317350d09d46f38be95034931100ee18947", + "vendor/monolog/monolog/src/Monolog/Handler/ElasticaHandler.php": "fe1aff1f173775877529e258485586b95a717d2e19ddfc22948f717b389d1b7d", + "vendor/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php": "5b55b3d9449bf09b30afaf1a339c74b900ef1c0224adf9758c8b1ad74a1875ef", + "vendor/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php": "3a23502dfa532642f2efc28a90339f58570213af7e5f37deafa765db4db740a9", + "vendor/monolog/monolog/src/Monolog/Handler/FallbackGroupHandler.php": "ce0cac331d87f167ffc1945b94bd2980706b7ea2dbb20297a1061d1a9767c3da", + "vendor/monolog/monolog/src/Monolog/Handler/FilterHandler.php": "ee962ad4220a46ff9916575978c4a1923be6cd09217d965112ee23d71db185bc", + "vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php": "d81cb1f7ea0e799e9eb012a86c5d9da564ca2efb25697779b444b6738328eb5e", + "vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php": "1435bb95b2721eaa4c8926117f2810fd17b4a8cbe284b86f4a32dd0ced40f62b", + "vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php": "c4472c040e816bbe3be8c2c3bd8fd2f1076f39d8d7bf157d98a32945b3242e41", + "vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php": "4ae206acb6cc4630b8a1464fcfcde7dcd4c56ce15d6e17b45912248fdcb77bce", + "vendor/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php": "bac72261b2a93855142f4dd6347766beb6b89ae35a87e1c721d0e498ed702f3b", + "vendor/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php": "ee49bc383aefd4c4ee0a09e4aa64539a1d05249f9ac8f5947285542d922fd7b1", + "vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php": "cc3d4e96c268612075ed390a23ebd09b5dd8b13e83eb8ab919a79ffc36561222", + "vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerInterface.php": "da34546947008fafb237f41c194d70b907f52c3e0ed049631f380346498bf3c4", + "vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerTrait.php": "c7278ec8ab7f72435747d4a8d64ddb6b61067edfa4a9e2d9e2324f71edbba75a", + "vendor/monolog/monolog/src/Monolog/Handler/FrankenPhpHandler.php": "af5c53c95c1abb56d953d232d8b55e801dc602b1cc8589a21906ff272afd87f7", + "vendor/monolog/monolog/src/Monolog/Handler/GelfHandler.php": "9ac603f0282e01c79518f88b2ba52245a6468fc01886f3f8815b51c4cb7ce0cc", + "vendor/monolog/monolog/src/Monolog/Handler/GroupHandler.php": "92939f1497458997a28592c1e86e94ff7b0ae50564309fa8edd89db9788a09e8", + "vendor/monolog/monolog/src/Monolog/Handler/Handler.php": "d8fed948377a07a44f11c548751fc942f2eeb9e352d98a6457750dc1d5b0a8dc", + "vendor/monolog/monolog/src/Monolog/Handler/HandlerInterface.php": "5b0f770ce764d50d871d805da2683ccfca39e64e70e56be3518648873318eeec", + "vendor/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php": "f3f570d902b5c3da0fb06b287df640764f5475e27aa5949897c7d3659c4f2e2e", + "vendor/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php": "2a0037ae9c34bf756d30812189ad3bdb84be54049cd1aee3cf8cbf1ecd4480a3", + "vendor/monolog/monolog/src/Monolog/Handler/InsightOpsHandler.php": "4e7ab6956fe6fa00b4c5adf8b973f9138ef9c1e87900030fe69577eca4573d89", + "vendor/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php": "dab2ab36249acaf1cf62a88c1b02f833310fcce5b2cbe57244949125782ec259", + "vendor/monolog/monolog/src/Monolog/Handler/LogMonsterHandler.php": "bd7f0cf2897b09bc4ed6ac463df44394c6330455d614c5c90b368c17684fffc4", + "vendor/monolog/monolog/src/Monolog/Handler/LogglyHandler.php": "18291245f82f1b37c00017d592e0ef79e8a60de11cca7ecd32182832b376ff13", + "vendor/monolog/monolog/src/Monolog/Handler/LogmaticHandler.php": "fb4cc34a644d9f6075a67236a703970abf8fcb51812aa48d5067a80e28740b91", + "vendor/monolog/monolog/src/Monolog/Handler/MailHandler.php": "175982c1551b55828fd948f501636fbce2ebf8751041c3929e3732478e6476a3", + "vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php": "49ed52af420dfd7571edcc24e654ab8ddc8fab060f67dfc10a164ec3ef9b57c7", + "vendor/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php": "6cbad21da41457d71384fab2b0491f4608515d9cd565ed40a83df5f02c1f75f4", + "vendor/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php": "b3fa4cf7bd6519cce78c718b92dfb0086e9a0d843f8eee2de6ba6c594dcf2650", + "vendor/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php": "bc3fe1dfb95e7bb9843a90a6a3c34b71046638a7dbe7addd4b151c134ee18157", + "vendor/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php": "12026d01e146b0524222d81b5bc2323e01115825bd1d5d72de8b9e77439f7f48", + "vendor/monolog/monolog/src/Monolog/Handler/NoopHandler.php": "9cac11e9a77d02c59cb9d10d98d86c37503973ddb9c1be30f89194a5d1a00a49", + "vendor/monolog/monolog/src/Monolog/Handler/NullHandler.php": "1a9a267a4a060c5001a3c6cf9d8592fc7f80be2deff753c14207fc91f91eb4f3", + "vendor/monolog/monolog/src/Monolog/Handler/OverflowHandler.php": "466117a395f43f30b89e367d126292e002867a0eda6f195235dfa34ce9a873c3", + "vendor/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php": "c3707699164e339ed70cb9c3f76bef1b08b04d7036d6b3bde073e987e646e8f9", + "vendor/monolog/monolog/src/Monolog/Handler/ProcessHandler.php": "263f832c958990f9bc9303d3e1ecfa1b07d0ad743a93fa9a77acbbb61a373e27", + "vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerInterface.php": "2f951faf55182850873e0c302277ab8b75b943db4d9b17f778b3791feb535643", + "vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerTrait.php": "7de97be3b653016783c1885af79cc790822652ce25d350e30d83f5b71ba8665c", + "vendor/monolog/monolog/src/Monolog/Handler/PsrHandler.php": "6896619e19f82e397096ed8c0de90c46958b7f17f38c5168b21e69b120059648", + "vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php": "72403bb1f4f6b412c10231b81bc0ab8a85f280ed2f3b9fd267e7a1a6ccc13a61", + "vendor/monolog/monolog/src/Monolog/Handler/RedisHandler.php": "e09b41fb5b24ad81051ce0629d0edacde130b54b82aa40621c94a28f059238b8", + "vendor/monolog/monolog/src/Monolog/Handler/RedisPubSubHandler.php": "733f109c734803ab8e6987402a13fc7e26e7fb6455d0911525ba90fd37164e9d", + "vendor/monolog/monolog/src/Monolog/Handler/RollbarHandler.php": "d5fe5a984fef52259648d9b92fd7ff055e5776dcad94758f41ca496f7f9e21e9", + "vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php": "f285cd39e25490bf9dfded34aa053e5c42ef5195c0c7d7ce97d7227cf6c5b509", + "vendor/monolog/monolog/src/Monolog/Handler/SamplingHandler.php": "cd82b9f8f391057830bbd66f79e8c915bae80d7011916f24ed884d78205051d8", + "vendor/monolog/monolog/src/Monolog/Handler/SendGridHandler.php": "04c2060ead6352648568f4a0f2e4935a6affe9dc7a12af218bba41aa1c3cbdef", + "vendor/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php": "ceb5d24d459f6f7f1aa1731893634568421dd104df947f2f5e74bec4ae475a78", + "vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php": "5e4ce5b16465f3fc3e1fb1d33519ffe09b7e9c73b881f62010fbcd7f40dcb764", + "vendor/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php": "531ef871e788c26a5315658999833069cfc10840d83166a664fc298419ec7527", + "vendor/monolog/monolog/src/Monolog/Handler/SocketHandler.php": "e725e900b051c0926ebd68cd7c07cd6d53abd2583f09db24ac23bd271ce634d1", + "vendor/monolog/monolog/src/Monolog/Handler/SqsHandler.php": "5af231e98664ef11969140212dabe7cd6657da9b67d057161fa9bb4b4c2e5d7d", + "vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php": "b51483bd03dda90695271de3fc614b98edd8b7ecaf72c7a63405e21df8dec64b", + "vendor/monolog/monolog/src/Monolog/Handler/SymfonyMailerHandler.php": "07c85f2c8f9ce8cc3dc4a6de840200a54f32736d62d23bc4a0b98f7406ae16ed", + "vendor/monolog/monolog/src/Monolog/Handler/SyslogHandler.php": "828003d23dc1f5bce273d0989d9e138728511c94631e1fbb9fc4f4dc5f3df204", + "vendor/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php": "c672bbb87142609bfa21bbd5d09bd8ff8cf3f5e9abd20cddd546212ca5d6547e", + "vendor/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php": "66af26ecdde442dca112fa8c092da7ddda2f79a3a174960c381c9394a0dfc63f", + "vendor/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php": "e527e800f632ddacf6aa859bb3abacb44570c853f2224c2d306fae8bb316e5e7", + "vendor/monolog/monolog/src/Monolog/Handler/TestHandler.php": "b47e559f28d280921f8407007a990d538aea28f12ac8ac042c0eff60164dc313", + "vendor/monolog/monolog/src/Monolog/Handler/WebRequestRecognizerTrait.php": "60ca14bb1e155764482d99bcd909d9162c9d4299b76ecd5577ece44f311ad23f", + "vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php": "74969296e046f733b0bf2cf3eed559bb898607f63ed40d43510f60e11e0ea6b7", + "vendor/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php": "2f5706754a33530a85a224b1f974e1e70801bf11675bac1865dd8313067761b9", + "vendor/monolog/monolog/src/Monolog/JsonSerializableDateTimeImmutable.php": "10ef69c94ac474e47e7910aaa668c783b7a51c46651a0c0daaa1c3dd0f264eb1", + "vendor/monolog/monolog/src/Monolog/Level.php": "a8c1b1235dae0025d18971b1b357727419aab3591e83139caa3d74eaf123928f", + "vendor/monolog/monolog/src/Monolog/LogRecord.php": "033537f4768ed1791c4eea0ef9c6c03f8346b2ea24059e50e85392a6636790e8", + "vendor/monolog/monolog/src/Monolog/Logger.php": "ccdf61fade57227720dd95f80edb1d2a21c4f10bab790d792ce586807166608e", + "vendor/monolog/monolog/src/Monolog/Processor/ClosureContextProcessor.php": "31d9ec44cc80c7be34f38e77c89f784625b8b6ab454cd852de2e2a783410f24b", + "vendor/monolog/monolog/src/Monolog/Processor/GitProcessor.php": "2d64e9ea4bbaefc3838a459080667fcd3a8c90f284fcfc996e6c103091dc1883", + "vendor/monolog/monolog/src/Monolog/Processor/HostnameProcessor.php": "f71edaa35ce1e7c48b0aa88d6c8c994ee3a80513f3c60271a7a20a40a5af1691", + "vendor/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php": "1760c07c1562c0a292a1ad767c4d211c45e24635466509d14b910028acecaff1", + "vendor/monolog/monolog/src/Monolog/Processor/LoadAverageProcessor.php": "436a0c0836430b05fef0d692da2843804e27cb60bc2ccba2cd79a8a03a0238c7", + "vendor/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php": "bde7180cabfde59aa0d9faaa9ee805dcde6d47a9e522c13097c5a4cfe27785a7", + "vendor/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php": "d0489d1bac5304439e68c5e18060dd4a6ef7ae82d4e0e1076c34ffbc883b2eb1", + "vendor/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php": "6fd512425072408b1ef59fd71204faca8118755a259ff0a54644c2f5d69d8a22", + "vendor/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php": "75c2efffcbfe7a1e07964757d854137a8a4edae480b07b78fea90fde904fb03f", + "vendor/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php": "7c8ccc3afa7d1c28442b449c9e9bbfc4b2a3cccaafcd71c338b58cca3efd70c8", + "vendor/monolog/monolog/src/Monolog/Processor/ProcessorInterface.php": "d0677f42c12ff384b545d6358473f7505ab4d3f59617f7d3a4aca1a615732f35", + "vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php": "37c76ccc6b142c1262b9812679d16a29672924e351a031aca7d9df2cf6fb72de", + "vendor/monolog/monolog/src/Monolog/Processor/TagProcessor.php": "bed8addb465d007ed403c74a148bb82e1f04416251576a494137600aaef47ae7", + "vendor/monolog/monolog/src/Monolog/Processor/UidProcessor.php": "0ea99abc6ea435c9f5082c7c097e81ab318b3aa2ae7f1669446b2918ebec6087", + "vendor/monolog/monolog/src/Monolog/Processor/WebProcessor.php": "04134cd76ce4204c92817eba73e194caa9b7f032cda1040b65464587a9ee1a44", + "vendor/monolog/monolog/src/Monolog/Registry.php": "280edfb3c7fdb30b56a91fa4597cc12c7f2c4aa6e6bd5c5f4ce6f5048bac451a", + "vendor/monolog/monolog/src/Monolog/ResettableInterface.php": "3101f006af65878ce8fd24ea6d0706e4f7c6b046690ac2f19e42b45bdc902974", + "vendor/monolog/monolog/src/Monolog/SignalHandler.php": "ed097894188b05bbb61cc7c991e451e20a1997a7129c9167ee383adbc59460c8", + "vendor/monolog/monolog/src/Monolog/Test/MonologTestCase.php": "5dd94dcf726e0221f454290d0d408caf2b124279e5a5b5f9833faa77e4d52400", + "vendor/monolog/monolog/src/Monolog/Test/TestCase.php": "ed0759bd02f989b97f5ae8880f4f3c9ada613055f92e067545874618ed4f1c93", + "vendor/monolog/monolog/src/Monolog/Utils.php": "c1b02c84945e117e0e49372f9c4c65d785a718f93f57b177d11f251004279ff9", + "vendor/nikic/php-parser/LICENSE": "dd859e107fac9f87a4413ab8c3c96f0f1611a17f596a2db562a5a4f4904c1e97", + "vendor/nikic/php-parser/README.md": "8c89ec56744b78052f9324a4ce76210cf298acbb227653b86491f685a9035105", + "vendor/nikic/php-parser/bin/php-parse": "56aa63404a22853120a32aa3f0462528f6a03fe45ede021cbcafbffce5429fc4", + "vendor/nikic/php-parser/composer.json": "16728b9e68b070dfee0de0b1311f4b6a8a90b24dd73277950f73225f1de770d3", + "vendor/nikic/php-parser/lib/PhpParser/Builder.php": "3ad88dc8184305a97fe3f79aa632e6f6c5a6b9f7c2ec91bddf25eeee6958b72d", + "vendor/nikic/php-parser/lib/PhpParser/Builder/ClassConst.php": "612f70598f3fe57c383562ac5ed6170b21a8b0ac7989c8f0280f1da5fb6fa670", + "vendor/nikic/php-parser/lib/PhpParser/Builder/Class_.php": "52ac5021c5f21687ef6b7af006e8e79f945df2579cbe49829938f5e33c9d4652", + "vendor/nikic/php-parser/lib/PhpParser/Builder/Declaration.php": "43725c0752bf56685d84ed2de0fe680e8892c7284f11c7587ff1bbe5cc58974d", + "vendor/nikic/php-parser/lib/PhpParser/Builder/EnumCase.php": "a159fd916cb323327c50dd9f6b3b32ad145e91603168a3aca7823a32394a0642", + "vendor/nikic/php-parser/lib/PhpParser/Builder/Enum_.php": "52ad3361756d52523c16548d008c95351983e3029a16294761b42ed0584a41b5", + "vendor/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php": "bff940018d197d78fcab25e57b9ec6d91bcfb6651427cbfd920afccbef2df254", + "vendor/nikic/php-parser/lib/PhpParser/Builder/Function_.php": "a8a525dee19a9be174df9bf0b19c071fa0753f3e813031b6d6e96f068d0af121", + "vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.php": "54cf145b3f7b2a1011e810ee66b5ca908036194a1a0ae7be7216d51989c1095a", + "vendor/nikic/php-parser/lib/PhpParser/Builder/Method.php": "425434befc6b8263a44bd3b7aa543e42b2acfa9ece4cabc61c72c72bf307b844", + "vendor/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php": "4411734a3b4a62a223cdbe6656fa92e9b41f6ccd324cb2bf8748e8d28f573ece", + "vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php": "fe89e9b836b02d5e96718233382793eeca0dc4a6e7aaf799c31d16e071d44ba4", + "vendor/nikic/php-parser/lib/PhpParser/Builder/Property.php": "f2942d1081065cba95dd9ed19dc90bbfbf340a8ffec4d36a2aa112a2777a3a68", + "vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php": "a3678f87a206ab69c673a3b804d4ca018c0251af0e20d3dbf8c087f8e5b3bf94", + "vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php": "f02b707ea62ec4f9aee3f46c292dee6b23b9e3f3950473728655f74b512ac5d8", + "vendor/nikic/php-parser/lib/PhpParser/Builder/Trait_.php": "5a172865ea085dedb7fd0cef4af643ee3e21c447e712977192525394a8de599e", + "vendor/nikic/php-parser/lib/PhpParser/Builder/Use_.php": "f5ea44b9eed3164e35d6f25ab1827dcfa2431f0454f0d7eb908a1714aaecd59e", + "vendor/nikic/php-parser/lib/PhpParser/BuilderFactory.php": "6ea8e388b9e43738d3f84406f5e43f189da22c5ceb3ec33030d16fc887e49869", + "vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php": "287d77dbff4ac911744f3abc03a4de13b6e9847577f36f7a892d3612e1d100a5", + "vendor/nikic/php-parser/lib/PhpParser/Comment.php": "b2d89a515ca23716768d6c179f8df87d67b149276d933ef6a4fbfddec1f61107", + "vendor/nikic/php-parser/lib/PhpParser/Comment/Doc.php": "b9255899fa97e4c44ed39dd7a175adf4e87b4487146ab966590f01ef0dca7746", + "vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluationException.php": "0b891976f6f75d763222e5e34bce2a295db33f489ac98660c5762780172b9935", + "vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php": "6151c45ec5424204f849a3527c79e1687b74adbfdbdef6a404beff36b66335b4", + "vendor/nikic/php-parser/lib/PhpParser/Error.php": "65c32d6135c2b214eee37a7f00ccf1f2c8d01430c8e65af99ebe74359dffd9a9", + "vendor/nikic/php-parser/lib/PhpParser/ErrorHandler.php": "4b25e0ec2643272ae01657d9943fbf5d896b3df0294305a5fb87b8bacab71b7b", + "vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Collecting.php": "f111088d9f324ae70ff85af766e03f8d91e13f6c98ec5f1aa524f7efd131276d", + "vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php": "1c218e36ba923384ad1fc6b7b044d92a58d01458601ad3df8a93d623e159818d", + "vendor/nikic/php-parser/lib/PhpParser/Internal/DiffElem.php": "e66978539b72c8f178ea7cc188f19712b96006abb3aee5eb8bf4d3ed890b7d8c", + "vendor/nikic/php-parser/lib/PhpParser/Internal/Differ.php": "53b40a5dc51e4c48f79860416b137d3ff7f344ea2dc4a56b6f38292a9ddf5422", + "vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php": "dcfa95be29de4811791c8c600c590c2513cb5134f366779da6018d17262c5c4b", + "vendor/nikic/php-parser/lib/PhpParser/Internal/TokenPolyfill.php": "da9e874d628ca1e8ee0f56cdaebb73ba402f12484bd0c03b07164c8538c50ed8", + "vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php": "366dbae6222c80f7d5b81f098cbf0d4f683cd6f0240ac1a22ae26900cbbd1216", + "vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php": "1b9ceb9fc6f1ba725383d5372dacd83f600c1be902feb3c9ffa2822ac6b7ac9f", + "vendor/nikic/php-parser/lib/PhpParser/Lexer.php": "d404876d2c850af1a83c4c0847a793c52fd88a745227923a3b7cbf54bb42e51b", + "vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php": "8490565fe986b1f581967863b688ec97fb46a4560720eeb4fca75df841aa0353", + "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AsymmetricVisibilityTokenEmulator.php": "12544449a30282610c2f501cdf7ec741977e0fcd6ae4c41464c195559d2aa6a6", + "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php": "2b89f64eb9660ebd3f5ce3f96e9d77391ee876cdb3176e7c1e7b2ffecc6bc033", + "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php": "88a31ab4ddd114a3ed5d4bb1311fc802d7e908c729856504fa11c76b0bcfc54d", + "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php": "fab022824353dc8074ea249d7adee03411020f4cd7cf2a641d390cae3800b8cb", + "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php": "ca400fd04de3e15f8b54388282ef209430a38dd05c2c904800f18ba440fec5d3", + "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php": "95c599bc4e1b6085f514a3d75446850b830817332a5bda5cae40f8c7b925453d", + "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php": "6f13fa6195dce2e11b35839e59074afe35f3b0b0b999495eccb1b7b5594184dd", + "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php": "262107a265db2a777447f7b86afc5f89c7cce6c6468dbd9963cd34345efcc54f", + "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/PipeOperatorEmulator.php": "ad2ab2af4e5d285eb2405d66748baa2854c7480322797a91e9a076be62210ee2", + "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/PropertyTokenEmulator.php": "695d12a66bfa9f2a5ae1a4f267ab5e6222e2bf30ebeff3128c42097cc3950e50", + "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.php": "c500d34cb258aaebccd7a504a4d96e3c4caa6a220811cbeaa689ea9f18d7636d", + "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.php": "9735b74eb5965953109579d68d44be25b5a8fb8f206300d56459cce5fc1ee708", + "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php": "c802f69a5319242aa03e3eed4656551ce8c18e535df4905299f0f2ab931aba46", + "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php": "744ba8ba60d422f07737a1438a541f843432ca7cbcdd8c57c07a89d73ba552b1", + "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/VoidCastEmulator.php": "3c5bd0b4a0a5d2f351adc32c7b9e3e56949e2c3b7364fde73e7810ff2652bc9c", + "vendor/nikic/php-parser/lib/PhpParser/Modifiers.php": "33fa68031067f532c0e4930c4a25f41ba817e8681b4b60853c75b2e12900bfd7", + "vendor/nikic/php-parser/lib/PhpParser/NameContext.php": "3343e0a931414df07484457919adc64c43d75460875588a07a898cc8228eb816", + "vendor/nikic/php-parser/lib/PhpParser/Node.php": "8661124cdfe90d86af7937f563942d59c63630da2fa994e290e7b9294442eed5", + "vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php": "030ed7dcaa6f4f151f9fff43bbcc832dc4cbc739ad07ed5571dd51dcc3408aec", + "vendor/nikic/php-parser/lib/PhpParser/Node/ArgPlaceholder.php": "b39e3892d51289caba615000825217fc47b5e23b36f89cd2f9b066278aac99f5", + "vendor/nikic/php-parser/lib/PhpParser/Node/ArrayItem.php": "e6b0eb605f056d786138aec752df541d63538b9a59d358686e5e4e6fa5d45fef", + "vendor/nikic/php-parser/lib/PhpParser/Node/Attribute.php": "27fe66c422dea0ce774bdb9cb8fb4aef1852609463349d085c30c858881a820c", + "vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php": "057986cf63df36ad270b580b8ea4a53503803bd0d0d9e894601d35b0ded0c413", + "vendor/nikic/php-parser/lib/PhpParser/Node/ClosureUse.php": "ef83ae1143215706eb696a09ec2b4379a3e6339f54a81f6eb661cb2a9758cd36", + "vendor/nikic/php-parser/lib/PhpParser/Node/ComplexType.php": "cfadc646eda7cd40d4f7875a6d79e0ba9b66db75138eb32efba9592babf27180", + "vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php": "817a307133e8115db17e35fa66ee6a8251f0eb61c7d43869a0cbe56db0c38752", + "vendor/nikic/php-parser/lib/PhpParser/Node/DeclareItem.php": "806679ee332545fa2d7cd14e7c52ab5fb299af56d4d215336229caa664fa5ba9", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php": "e351baf9a98c07e754eac85704d73095c59ee26ff3ddaf69c22080e6d65fbe9e", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php": "e111a948b8fc23242408d61928d0f15730c3d473952cac46014a519ef4562237", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php": "1c6d3b5b41a02cb1775f72ad9725419eebdaced3e543cf09742c000b555d4b2a", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php": "23b09b9ca53f91e616febe3d3f3e779aab249dd5600f6d0db28d67d67e994f57", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php": "d5232d1b61200e1b19b1441f5303a4882ca0ff81781bc65c7b3f3401f95ff059", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php": "36ba60df88de34b4021408d2976c5166a9b6930f4fe3650318bf774ed2b3a03a", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php": "e05947ed6756ca0d4c21d0f20880a625c3358aca342f0f241a134ec9e67770b5", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php": "090c7a30ac4573dfd5e686af528eab3b9727a6f6228be8b65f26fd982b138269", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.php": "ad8b684d06df61651bfa49823637a41d6a60188578411e431f2f9b952738dda5", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.php": "93e075cd13e7c95047ef83bb9c45b778746ad626a3b0003bc9d28015f609cfc3", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Coalesce.php": "8c81f170fa6f6b028d2e0eb9cf27e04cb037f492d0552ff2f1e8ac984ce8647e", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.php": "26a76e3a13a7c2dc0518033a942f601b03b6e9505c800ee1536d5b93ce5d1915", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.php": "7ef917cbd61bc155fb982ae133c1a95dcf7b6cfb9a6469967a0a2a0f5c174e78", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.php": "f602a9df74b2ee400fa1ba7b9b01373f68aa8db280a7ee5426d0edd96eea441f", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.php": "8a9934c9859626c9bd5d52abd2ecb94e5cd09e42998f3f3bd052fb2c2e8203dc", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.php": "39ae0de8479481e48fef0805254bbad09bc911f30d9fa0a8d7e7c7b739116513", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.php": "b6ef355df9fea41fcd2f7b08ee24ce7408335e84cb724d19a08e28a933435209", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.php": "14c8cb57ace582b939116aca0af9f441490d47fb2b1245d8e45234c547b67c29", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.php": "c276f95d4f57549f71d5e46220baad1647f46eb256696a76e134eb30f0d83673", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.php": "5776c7f3d35cb921c5534cceddbd966aabe50dd3657a60f6ab7896153e8973c3", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.php": "efb318cc50eca7d859113fa9424ff760e09bd055ffcf730dd713a339d1e6f94d", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php": "719f694f2a3f357fd7b998d262cab8b835507189c3879fd5e5e56d724808badb", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php": "720a6f7a706c099ab1c2a140bceaeb58581c466ba319ad0efd9f1a40b00a9be9", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php": "164eb3c0586a528109b96be8f5d56cd4bb247960420764b51cf1b4ebfb8367dd", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php": "beebe2a0fe1c60f69fbaddca9621c7b62ea9072a7041de14edc5d32a5e3d4952", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php": "c3adbbae3dad2e338e17a0e4769f023eddeb079c382149431caa7ac56314dd62", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.php": "fb4384315dc721d551e1bc7e4e50b8718521ecf174291e74f584317776361062", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.php": "d29ebd37a4fe2288352c120bbf306005c7a235c120f2315ec569afdb08090bfb", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.php": "66959caea66f97099b7ce1d6370fb1c0d4a663403da860eb3ea7af241bd7ae80", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.php": "f7b8f699d907c43e89accf6b5d1fcb95ccaee4824a6f429a44138588f8adff35", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.php": "a0e1e7ed8fb3c49ae4b653db1e4cf33f723ae7f4e58cbc76753d8484149d5945", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.php": "688cbdc563971fbd74ddcbc1519080ac2d5cb847e17bd578f3423fef66d245d7", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php": "31af8b1c279b8da9e3bbdff08e7f7917e304c67fba09c00d56cdbf51d7b36a4a", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php": "ced953f3ed73a5eaa3709a9be78be68a6b73767e7918ed031f075178ba73b36b", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php": "f68bb5e3894b18f4b2453f8745c39f86adff1005fcdded369d42b69c573d97b9", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.php": "ba4dc5a0b0aa519ad30765ed0cbf8eecda532f8d3da62471a51f0aba30da1d26", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.php": "aa1c3a605247652e5b2cc7aef6535e0cc0df286f201df9320fecd335fd50f16a", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.php": "51fd474ffb23c1e1d7e983d0915a2a7062954638eb1bfa01796c002deeccc5b9", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.php": "6fe5da966131c05b9e7e165e2f655464e1b0be9089c8ea9bf2b0b6015e6cce8c", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php": "cb19b6c2dfae0ba59bd7b952857c764be8ecfe89abff41e8f016ee5feebcd29f", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.php": "c3de29ee5fe58ead003386210023f515417587a67c5588335658cf12e1690dff", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.php": "962b81f95270bbc5d56e20060b501c12b4d25398ed137b66011e2c61aa830ace", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pipe.php": "9ed11b099658962a5a3e19c87bf691f00f212fc649f7a8edc2be1d8f7f46b187", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.php": "b5dc11c60a12a37c842a325908f83610f0c0456a0efe6189330e1b5d707d91e5", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.php": "3ec873b8bd0ddb264ab476596c00399ad7270c2c5760046c9698e28364d142b1", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php": "d89f8ddc63969133845536828847c3d471a760ae86b2ae4834ce6b5db625e056", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.php": "a3a4ed9612c746fed8cd44f8e247b477b84415c74afdc58cc3bf0b691746c735", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php": "7739d653b588a8c2f92bda7a0ed1cd0e3ba8a3fa15015fb351de5b97a817cf65", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php": "48cd7b36ee38034567ffa45de26c4141ff4757cb2430be0e2739c3b531473869", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php": "b315a0a7bdc878a755870f7e1f791f19f11a23186dac1e1ec45426ca6d7cf34d", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php": "45cf8952a85469ee478508720a9f2009cb32f173043d8246bc005a7aed5b3c74", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php": "cf5f053949845a53f41f759d3ed8d769f9475b49acc14bad3c888f5aadf76aa6", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php": "95b997c2ad9ed16da078d6daacf31377e50ab7f79a918e45939ef97eb0e74adc", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php": "ad4c2f0a8b942d7e1b54c089775e7e203582f76068bd6c137af331aa088ffd28", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php": "57abcdd5c84c9cd70a03c2a2f567fcd44aed4c978f58c8b7ec5bc6ee52228a67", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php": "fabf29bd0da462da76e4e020d0b8a0128811aa5821433fa3b7bcc4f3e0abf18b", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.php": "2922bd29ace168eb14f925d440a7b8c03937d212192b5157e5212833a8aae41c", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.php": "ccdca203aea87c6867a90f258581d67bbed4f2e0b0d599649681ccb485465a45", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.php": "ff8d9ee886082464859c2ca9ce127a2dc9482daa0dd5106a7b1f0062be51f2be", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.php": "d822df8e26baefccc81bb996392c1f3dfe60483cdc1208681de12d42bf1a9fc8", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.php": "8f9aa973ee39cb51217f8f5bdd8990039e30780e894c444095ea47b2a4fd4bee", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Void_.php": "992eecce2136f89ae50424dd88bc4762005ec3ddbde9f4e9cec689cff157b8a7", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.php": "a2dc8a0e55883f4b6c53854634320591a4ad5eb6df31ae7c43104372db87fd58", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php": "6954a28005ada5538b7c807a6eb875c5577017f42c0664c1dd8236b7510ce86f", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php": "677e18896ec4c67097131932eab22f4ab597c5e75f18158075b34bc776bc7847", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php": "e21353b82c3a3c674c8302d3420f3ef02c577076367631b72b54e04e6e1bad6e", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php": "96afd231b802755f5df33a3544f9bf69e3c678e0affd0e5a2db098f708ad92cf", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php": "74a11a97db8cf6d25387ddf95fb9070eaac4fa7e28dbc42005e389fec6e6bbfa", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php": "d60dc1724727c3d942ccb5a06431929c1f74b47e31d4890e33db63e232b8719b", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php": "6ab55d14508a51f1ea54902c863dff98dca2d1598a16d77b921438df8420d49a", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php": "c8f7e38b4f6ef5b31b75c4b12386949a02df1c8ef1906f024468c080afa327e0", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php": "32cbba07044d3f5c0a4dfc6a0b524b14d60332bed605788335dcbfdca8df9671", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php": "ec7050b1bbb2f9a9965c38cad7b224c42eebf305860c703711b437984631ba67", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php": "5ca1b094a07fbe4a107141a506a8148ccec0c6fd2b05696ae45dd904330078cd", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php": "8a45716153f75efe1f4ff493d9f0cbfaa885e3631022b2bf4d185654374f6d14", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php": "d650fb124782bb544a0acd0a1db81702f7f59908b57c4c48e80fce5bb7f8bfeb", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php": "9ec555c4e1ac143255cf6209ec8be871f914ca825671394fad4c24573ee329b3", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php": "4e453e11e3871aeffc894c14a5f066d3c216d30cc2cdcec229abf6fe9f70f301", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php": "2ac81c254dd41ed7ec20207c0ec32db9f9c07fc375d8b87bebc1578ebb9e75eb", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php": "4743ba9e1be19a7095a7d8f6b223311a6fb351e99749868255604d77d72a6e73", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php": "a4057c48e57528b8fc3c564454f217e87142f58b6f7241a414e7fbe9657a0130", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php": "a33ea0c37b4185b2aa17990dfb435608b3a14c35aa4fdf26596a9940e9f0d3ec", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php": "1eba821056df840f2523c4552df1159c35164e5cf73abddae8be3e35b1b88174", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php": "267f140d33e4cf90fd2e76f7c6e572657af681f9fff286200273456694c566da", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php": "b9dcd950129ebfa675418c5aa617e302f801fec09622e2a9bcad5746d88638f9", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php": "bfbe6c82c87f0bca6c62051f58565b5509df7deeea63d8b7d3a251f872af6550", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php": "d6df04246ec62a9e6fed0f20ebfee69e5da727f5c6166d4a56cd627ac751c255", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php": "3ca2f513625f0422dcbb2858cb736b58f4bd6874d18d0756b7fcfc79b27b5bc3", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php": "edce20bbc6bac9b4364527717b11ed58477d0b90267f94ead5d70086c1329692", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php": "df4e9650cb941988ec366efc8a903d3d86edd04113a5b31190e3b0d23b1c8ba4", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php": "486c0e74e15a445c00595a999072fc8b3dbd7ef65867e4bfbb1d68414d5fb2f5", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php": "c4303f9ccdd63cb1001a887fd64138989abc12524f54636f43afae33394b52a9", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php": "449f689a32e7508d650e1b12dba3eea097aafa733d764919b347000feaf954da", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php": "675164c34505c649ffb8bf94ece44a8047c4f4ec78b8643f279e718534a25d10", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php": "8e887df6dc9546776b9715a09b0e79ac09e3330445d9388da0a3f5b61fa0a977", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php": "68bf2e74636906d2a0e20e983869ec73ebf14df97773861a6dd72bd5e383fc26", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php": "4e334bf6b74a47b07c6d3ba3d83f402aa244434e2c27743266c366ca0905354f", + "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php": "29161abe4ecb0bac053eacbd4d9d6d0a124fef5462c61a6c954401488492283d", + "vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php": "1c0ff871b2dd43dfcff87ab151397ec9fb061e137a413f1073a12a57e9ffebff", + "vendor/nikic/php-parser/lib/PhpParser/Node/Identifier.php": "cede41b830a4915a30f215fed2f57994f190cbebda1976a65774ce1cd3927a9c", + "vendor/nikic/php-parser/lib/PhpParser/Node/InterpolatedStringPart.php": "e622c2cb6554ca1a5bdedbe41dc18dafbf842c104ab21a3a6f81aa13a4ab0c4e", + "vendor/nikic/php-parser/lib/PhpParser/Node/IntersectionType.php": "d9e71fe6ac0ef79e245fc82ed3ea02a4d981649ff2cc7658104384ba507cad75", + "vendor/nikic/php-parser/lib/PhpParser/Node/MatchArm.php": "7e481afc9a9ac55d689620bf02bd2ec040b0020948c0b45022721e0eb2e8c990", + "vendor/nikic/php-parser/lib/PhpParser/Node/Name.php": "94e48045300605d197c7edcd27fb9a72cf96d3f2e359ab67621e6c63e6e350a8", + "vendor/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php": "8c9cf335d24d4586a327f48f9b8d778c17eaa83d206e51dbe13e7563e4478375", + "vendor/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php": "9859677ea50d6af93962838ef53a9b85e37813bbb1a25d312faef984ee563251", + "vendor/nikic/php-parser/lib/PhpParser/Node/NullableType.php": "a012e2a478898f1d2e860b837a5ce338a3276f8286756f7be60daf925085754f", + "vendor/nikic/php-parser/lib/PhpParser/Node/Param.php": "374bf0a201832a45027ac381571ef66040caec87a51a816c2bcf6dc647a7b945", + "vendor/nikic/php-parser/lib/PhpParser/Node/PropertyHook.php": "9a9ed312012df7e2d11d64e84c048811071dde9242c38d318ab5f90fda05c9b9", + "vendor/nikic/php-parser/lib/PhpParser/Node/PropertyItem.php": "7ef310b30abcfbb41fc4f3df9c6994eee3e5703f61e5394bc98da996943e645f", + "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar.php": "5c408d2f5439a74451f2e059b53457c96b58960518a3f2d5a62ed2cea6748411", + "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php": "cbd6d9a260eed90c3f4ebb1b1d7c0e813e7380d88f38e5ae1ffefa99c2edb140", + "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php": "c5c399fc1f1a6552d3801e4c249a824c9048e87a8bd45fdd4ea1b745164a3517", + "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.php": "3be506c0b4ddea055123bfeaa09a5dd1c3a9173047b6162018f7ce0997a098e8", + "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Float_.php": "770cf182c04670e0aa79e26e09ab9e8912353e5e26f5e615da5f265ab040ba4b", + "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Int_.php": "72eee48f57ddb99a9b01e30887eb486097e433e387ba41def19a87a0a61bd3ba", + "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/InterpolatedString.php": "7726b755a255431acd315449bb0c1bf121aca308c4a563b4f9b2facf2d4bc212", + "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php": "a02806bc93807336bb31a6b07d69bbf6276963c979cc59ea657028d51985196e", + "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php": "8204dfa8d51f8ad09447624c58102f0ead7bd5f05f62816f2f2ccd275015a736", + "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php": "aec7f0abe2c64d292768f7383d990f911dac2914c48a67f8915ca54d9fcf25a3", + "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.php": "b93f162a956686edadff0cabc59273312c9bb05f876e416d6817bfb58987aa0c", + "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.php": "193588e4def45171d96be57e0e4aff5740208c0fe3f85c88331452c1a8795347", + "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.php": "46aef20fa6ec7d04869fe2d93ed7ae7348f779225827db1233519e7552429640", + "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.php": "c065f99ffbd51f48f2684db3d2ddee52442812001c18f9afd737ed9a1319274f", + "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.php": "8ad6e85b2cbb4a0e46287802d5a50b3e05555d8f1067309a603cc5bf2dfe6017", + "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.php": "cde131b3ab28393bdf6cea1de64579cc0e7f014536cf09d4e63622b17870da47", + "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Property.php": "62c4415867806827e52ffcd0e3affed3bd15a12d226508d5e0ece12b89e43533", + "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.php": "acc4a0f40bdc9dd91e884a9c93b1c07c3e0e9d946105ea1f898540f629f63951", + "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php": "9a0618689797c113c323ba7f0d26a5b408e69ab13fe4808fc8eea8d656bc8f62", + "vendor/nikic/php-parser/lib/PhpParser/Node/StaticVar.php": "4d613c95c4e8b05c1f10a09241f00ceeb966ac61a92986a32564397f3251d7bf", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt.php": "af62540f4e049a4d77171f7f4dc3cf05d968b10e06761478e776c83bb90a20b7", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Block.php": "a2db3e7197215887d04f8efab3ad4720ad2dae85b85a8a5f974c488967a4709d", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php": "d44e59729d1a186ce9bfb5154bf93677d9d828916fd871e89f54840b7c92e26d", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php": "7461b8e0a38b79531c395ee5c642ac406a8103f3d0d285290c90facd5411ab87", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php": "646ac0dc0b20a1f76289dcc32cc85bd137333fde7b2f4171c5be291e73e9fed2", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php": "e6238f12a18c84e5384e366192f98d15faf7083b2b198a2d1886a64f73f3694c", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php": "e717f1d5d7cf072613284cbdda37d4b6b1b38c571e5ff1f26dfabe1f4271c4b1", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php": "3e0becfcca689f858f1e8393fe9f7ccec13db847f5f2fc5b27a51541ea8dd1de", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php": "fb97e2c0b38f92bc9768c6f7dc6f6b60d68e2470f9552d87953da27218f81959", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php": "f9efd623c06c1a076b3c7fdb0d1e84357962ae7ab3addf5a37dff603b17e5f8b", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php": "cdddee39a64c32bb923af63c59a916dc32a8ee111bf71e97429380fdde9e2206", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php": "a59a746e710471ef8b93dc7bd3f3c277a35501077cbffd63cad1a058fd69c184", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php": "f3fc6e45b5c7e37db41bfb569a18f84473ae87aeffdd9b39d6b51289da39be95", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php": "0e4df9e6cbb8f685e975108f6ad829f1d49f259708ad091365e8002ba09cca67", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php": "6d6f02629b9372d002690177fe6f9977fd260cbd9a9d7b9938e56866ae79f528", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php": "9680cdcc0ae7e1e11f1ccd93eba62af1dba021fc2fc03d43673fc3cdc8205ac3", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php": "c5c9870bc6ccc7e657489ced637908b01294acef46be5d73801280c3175cf7a9", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/EnumCase.php": "a16e07d8aa4880f13f38cd889fc95fe283d211f0ff25dab9a73ffbf5c70034fa", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Enum_.php": "c29616fcc34a29facea615e1a243dd8e90902e4c1e981ac6f01b7f595d316e6d", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php": "f60d9c98244467319fe31d428604880199c863b1b9d174f563be389615db5a9d", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php": "f9a6ad6d9a6cfafd701729e83c88a8b035f514d5e0ef9f6e4fa0243a51962b03", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php": "ddc23435290bd49cdcc032cd5ab4fa2938be9a0ff730a6211bf966a2cbdc90c1", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php": "feb8b2097283c3ad1bf9887ef05f574f73fee8163c3683e6fece896a142ef87c", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php": "14185718285583d919d2276d34f750d455dfeb82c3f3b750eda9232e11468f41", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php": "9d4186831da6f9c54dfdc9648ffa65eb1f5edde30ce9bc8e9f0e1b7dcf91b315", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php": "392faa2d03c64872de06c2dab358b1629758b645fc7d296b28be5bbc244dd03f", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php": "76148a920654c853995e73bcce7fbcf94318f2a2e6f720219aad219135eaaa01", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php": "11bb40e091c24109f441bc91ae1482e15a34813322d608a37f40454e4b820335", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php": "ebaf402904b2024e952cb246913750420ca5877511eff842c0c03e876d6a2111", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php": "7499d7e6db37e2ec9f63312caa848959d153a40fb8354c15cec591870d75112d", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php": "3751f84488830fcde0e71f147608848e3af0dd516e99f62998477b66123f1b81", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php": "596174c16909c9e927f0960d65e9432055030ab6e324956cc2617c115721a4ac", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php": "3cc21128ba727be07a34d6162f0468779c2cebf85970b2c31d5a32a9c8b225d6", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php": "ef02362ba47499142f771a3a84098530b10e0d5fd54b8da91bccfe5ffa28cdab", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php": "bd4b14ce323cf849da58960b62eac02cd248f1f9ef697a56d538b9483ec7eef7", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php": "946edaaf1e7fad8d0785f0c4b6e72507c7814ec3c5fbdd085dca71efc4f07f8d", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php": "73c88eb938ce2625811f095b3e542f2561dcc4215aca08f05a3cbdfbdcaa0f3d", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php": "2a75bdb30c6b2c39735bebc21246dd63748d5f88290d15c474c408a12b2810d7", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php": "834ff72a03fb6ac625e5a9ce0d0b115adf3644fcd685ab6680940c42e7d2a6e9", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php": "982e58185b852490d5ba41f9a70adbad4c2dffcca3c07aa493ea68b345d251f2", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php": "147ab388f8439479b974d025a876907b5203078c28c8e81dd489c092cfdd8026", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php": "899f0ad5964c440c3d193b2761e112c630330eea1e7aa4c32883395be709e161", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php": "56a40c5aaac95414d22255e5537f94806ff76d7b544d11921f30d1ba8a529aee", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php": "189b04dde1ac4e47fa13234313317e75cebefe038919f0c021091c5a9fca2012", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php": "5d0493e222a965495178fe8a8b88b85b009d29c25b28db35a523b3e31582f10e", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php": "1c54e9b8053816abc5824e676d41b2efd25f42cecb831d70988c7e0cce82e3de", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php": "3082ae0bf6a7e82382a2c54a228ee377e049c585c46cce64df7761a26b43c639", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php": "cd23831251aeb23a92dff4194a79a5b7bb1f2771631ef2592fea1397e6eb9fa2", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php": "b8306106f1eb953a3e855e544aa510cb0d4da4838ee0394cb723180f1de39385", + "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php": "327130124087aae779da331846da494a95e2fa2ed1cdb07bbbb8f9bcb5edcabf", + "vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php": "5633a4821f1d92f373e76bb8b47d799bf14d91cc4e13117e09580e88ab58d045", + "vendor/nikic/php-parser/lib/PhpParser/Node/UseItem.php": "5869d3e22bd2d8fa0b8399c91ee316f74ddfc2e91a7cdf5d8071a2ce6a6a4a16", + "vendor/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php": "2031fa31e4698d611701a553ef46cff711b82a650b997cf57e6df95cee0a6b3b", + "vendor/nikic/php-parser/lib/PhpParser/Node/VariadicPlaceholder.php": "530d8cabb35f674fa12c812f1f879943e1658e944975c7a14abac3de1fd6be12", + "vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php": "b5a9bbcfb2e85eb01d566d3eaf831029b066ced2679d98adabe8c8776b3a86ae", + "vendor/nikic/php-parser/lib/PhpParser/NodeDumper.php": "ac5c06e19b3e75e192a3a701a60ccd4dc57d739b65029765b4f5944088f19cae", + "vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php": "d937e66449205c8aac94ebbb2a45b3208e052f634c85e1dff7a467160febadfd", + "vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php": "9fac77e8ea2f056fd662d9a819d7f857fece2a108af35937981c007713984736", + "vendor/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php": "26a6379d56fe546a707c92287ee15284a29d398ba4f6042af19fbae165acfb87", + "vendor/nikic/php-parser/lib/PhpParser/NodeVisitor.php": "8e851a8442287afa9ad7dbcf644d75f45dab8280efdd9fed8f346cf42578847a", + "vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php": "018df93e22741603c5558acf363b37c30b55dc27c2703e5854b84a2e3a081ffd", + "vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CommentAnnotatingVisitor.php": "3ae3c2e1939e5e10c63a42c192169a6fd46485a2aa67c045b1dac24f002d2bfd", + "vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php": "60e7a2f53a7dc2931334de50218b6431e8a646d824fd629fe415241e46106e88", + "vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php": "4df0cbf759e6822616278c2adec5afecba4771a8e6721f67a0902975105a2d4c", + "vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php": "591e6e4d62294119deeed035dd08ac5c1f3bed95de5add728f55d907ad3548d5", + "vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php": "63720759ca7f378c83636627e7db24fb11795c0dd18ff49f91b0a19cedd156af", + "vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php": "8661e95d4bdae96b7c0163fd27040e50f34232785198b6c3605a2ecd93aa517b", + "vendor/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php": "eca428fcb22637ba5cdd172eecd2ec98bdc2267b259f1cef114cddf4594d5eb7", + "vendor/nikic/php-parser/lib/PhpParser/Parser.php": "1bd7d9e6f51a9fe774e6024645df4ac14cac698f1fb3f1c97b47925a070890bb", + "vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php": "53556d5a9adb8314c52cb7d4d0d88f694f80910ae2533c699187a35a148f583b", + "vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php": "ecdc15f12020ca8ec30760b6061b5502a8c4fd30ee94dd7f86d4a29f167e7999", + "vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php": "3c7f2b9418279aa2e6303e932db918eab3ca55349dddccd2b488f88d62b783dd", + "vendor/nikic/php-parser/lib/PhpParser/ParserFactory.php": "d2b3816a6707af2bb918f553170b2b480849a76b367b48a41b39635752d135b6", + "vendor/nikic/php-parser/lib/PhpParser/PhpVersion.php": "86d2acc2619dbbab0e62149b43f264ba9e804bbc520f02a53073d9960ec1c7f9", + "vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter.php": "95627ed06bb89660934498a2890033040af8b74e70a182ef59c315d07979aa57", + "vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php": "b24d5f026e94f0f7463888dfc5e8f525ac84f0f10f7482181fac58da154b0501", + "vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php": "f483f831fe8e92c47d03abb413f9d5a8a9c08abe94005f0ead9fcf4cb56122dd", + "vendor/nikic/php-parser/lib/PhpParser/Token.php": "674df1e06ae2be80f5e60df6cbdacb34ce362035664d033cf8bfa106121d6f59", + "vendor/nikic/php-parser/lib/PhpParser/compatibility_tokens.php": "74083e705700d25d140ea74b0cf3973c2198bfbdd94a5376a38f915dd4a2d59b", + "vendor/paragonie/constant_time_encoding/LICENSE.txt": "d175ac2e6bc71c13117ea49cc2c3be95284690dc07cc7fc441c6538c280641fd", + "vendor/paragonie/constant_time_encoding/README.md": "76f804fb8b5c0d114dab5fb8047da0593822283b6023882278b9e58fc3506803", + "vendor/paragonie/constant_time_encoding/composer.json": "fdd3047e3c8fabd57bb599be2c4f9c60231036a48b930d2ef36b89ce7dbb0df8", + "vendor/paragonie/constant_time_encoding/src/Base32.php": "be5e581e7772bb2708de934af8692b7611082748478bb294bcf35eb7bd6fba7b", + "vendor/paragonie/constant_time_encoding/src/Base32Hex.php": "32efc37e4fc295fa6fd3b09500c929ced048dd008889247cda3888f69af26d35", + "vendor/paragonie/constant_time_encoding/src/Base64.php": "b701e83d1996f5e437f67506a226ba8723370c915eaca11d651bfb15ac217eb6", + "vendor/paragonie/constant_time_encoding/src/Base64DotSlash.php": "cf15dd168d943f67966de03252300f43abceed3633e79db5308d61feaa36a961", + "vendor/paragonie/constant_time_encoding/src/Base64DotSlashOrdered.php": "4dff84a34984e41c0a551e1527c9ad9d329434360c237c4076bb4aea67873261", + "vendor/paragonie/constant_time_encoding/src/Base64UrlSafe.php": "3b09f50e324d12a18e619136c430d2b718c5822c99c3985262ae6343455a7632", + "vendor/paragonie/constant_time_encoding/src/Binary.php": "5235bb3390354b6c9ed8446b98f6a8538adeb8d889c3656e11c1b6107701d52e", + "vendor/paragonie/constant_time_encoding/src/EncoderInterface.php": "b794cf66d70b24199e36d7d717583e306f3a963022396f220dbdeebacdf32a6c", + "vendor/paragonie/constant_time_encoding/src/Encoding.php": "062a91eba1850c6830bce2c371b4103a09341546d23e3a2baeb59db0132a5f64", + "vendor/paragonie/constant_time_encoding/src/Hex.php": "a71ba92f1e16cde5b3cf9593426fb7eb75416340ad7b81f83351ceeaddb1c211", + "vendor/paragonie/constant_time_encoding/src/RFC4648.php": "20c9d43c55fdfe8d3ede3cd0d72df9f81592c78dca167ef43b03f6b7db6dc1cd", + "vendor/phpseclib/phpseclib/AUTHORS": "9b0c9c79a959e72ca0ee06c96bcf68745ef28782ae394e1e495e7657c100de3f", + "vendor/phpseclib/phpseclib/BACKERS.md": "18af0d496d83b55262abc93d02b24bfcaa1433afb2be109912d5ab4b5a307b26", + "vendor/phpseclib/phpseclib/LICENSE": "fa986c1ac53f7bd83e30fe296f8dced7003ab0a05ec11945b5aea4a4ebd626dd", + "vendor/phpseclib/phpseclib/README.md": "60f01a7aa9cc3a7fc0fc71119b50a1a4edc28e097633b06206f6184e1b5ed5a6", + "vendor/phpseclib/phpseclib/SECURITY.md": "fef92576f080f3d4f20188f91e380685354cdeadb0d83a941b0d48dab55c2e12", + "vendor/phpseclib/phpseclib/VERSIONING.md": "0c79b4f04b4a3a4ad4d9a92e8f1b6cd77bb1aacf1dbdf1fc6330fcd878835efb", + "vendor/phpseclib/phpseclib/composer.json": "3e7293400bf7659d463ca675593364ccd31c4e9b943141049278b8f6d6b78e0a", + "vendor/phpseclib/phpseclib/phpseclib/Common/ConstantUtilityTrait.php": "7a287eaed0d460718effc0e5ffd805d541814e1a0a297d3366330d3a2689cacd", + "vendor/phpseclib/phpseclib/phpseclib/Common/Functions/Arrays.php": "4ea5e6d3722666f0bb1cc3eed70be98cb2bb6956b3d4ae8dfe7298fcfd0d4a49", + "vendor/phpseclib/phpseclib/phpseclib/Common/Functions/Files.php": "d6f227e7f51b4495fd58ca446cc0223ee41d9132bd30f1b64b7d5ba52e25debd", + "vendor/phpseclib/phpseclib/phpseclib/Common/Functions/Strings.php": "8f1af31d435f8ee4903cfacd74d2b0375815d39ff67331cd457220d955ef29ad", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/AES.php": "2557ba34dd7d15bc37aae975875e5fece3b2d16de423969db16f0f15d7633218", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.php": "14b30a4f654cf05172d1d4899695f2aea504f5dc2d57272f06a0e649b448c7ee", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/ChaCha20.php": "a6a2da36c69214d170fafa0ed33e9eb05b229ce25ac642a06cb4a0c057e6ac75", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/AsymmetricKey.php": "64282c6513c5366ff5e76314206f30d52f717a527290251da864a9af4f3ac14d", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/BlockCipher.php": "ca505cbbe2400d47c0e1a6605c896c2162d0b2fe17707090ea86a3cf3e0747fb", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/JWK.php": "8105b0c588770fb8d84fb820b71091f4dce62b561c2dbdd46a64694c11229f06", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/OpenSSH.php": "07b47a5397719c7f7c6b071a7b8836f021fb84035bafb28282b03db1e94fb87e", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PKCS.php": "70ff060d0ec6e525b4c470bebdfba5a5e95acfabea88853a8312946f3ac47659", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PKCS1.php": "e61cdfdeee07e9e4e3b7def7f8df88276138bd2149d5af2560766d8e2c681ff5", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PKCS8.php": "e1c5b29446db9f9c004e8e9be28e8b9e6359f1201341ef3de6b2c22aa8bf0120", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PuTTY.php": "fd031bfdc18544e4e19b906bcb1a0d77fc95de153e6b682c54781e71a65a5d83", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Signature/Raw.php": "a6d6a30c66ed7b639ba774c0331960d12943b623a2b5413c6611443e1a41dda8", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/PrivateKey.php": "52343d9fb444fd96f5a4914d7dc16b9b6a9d37586313fb231750eb0b97078c1d", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/PublicKey.php": "615920d6121bba4244853a717ac470c62e69082321e93d1f89cc65a24bf6b85a", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/StreamCipher.php": "78d0d481b682a1935db55b8e4e4f27b54e31a80b9a4260e4c2b78857af516857", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/SymmetricKey.php": "6de24dbf31d0aecf4121b77dc9c29a1dceeefb995ed0cadd0e75fc5a00d2bcbb", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Traits/ASN1AlgorithmIdentifier.php": "f4b3f353490bb5a37b38c8d31e64281d8857723838f00fa5735d88b84db48c12", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Traits/Fingerprint.php": "e382e37c0293782f4a096383c18fc0ea0ddb5f3f7a7efcc9f42604f48d444d61", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Traits/PKCS12Helper.php": "a9b44f61af2cbd6d3fe082911d25b922b3e4f7d82684be9f679cf87a526c6b7c", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Traits/PasswordProtected.php": "bd64a4f54db35f6d3d77aa114e248ca866ec9c7880bd7c09ffd3d5a15d95e511", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/DES.php": "4a67c14f192069120ba9c51f2a9dd4065b8518e4c90facadc5b741440f1d7b13", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/DH.php": "806b57ab83bd414a7b5ef64977ec4472d50c30e9e9190f3beab4d5db11ad741d", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/Formats/Keys/PKCS1.php": "3fc98138c30ae669398ef9f1c8b2af93d4986d30290aa0090d80fb738c95bb0b", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/Formats/Keys/PKCS8.php": "393def515b9e6350adb370927b6d60e41376c3a0df142c3a34677cb4ceb8167d", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/Parameters.php": "dd0b5336d4525cb91daeafe2e8e8370730591e210b6ec0d6849c21ea58fee808", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/PrivateKey.php": "5b6cd9412f00d244cb47c45c91090222d4660d57ee791d72ec25fed4c0500d21", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/PublicKey.php": "53f250c3994282f5c4cd9d74856668d73bf93e76682d5925a25133af1a43107c", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA.php": "3f962ee4e0ed8e0b9b5b486a22ca2a1549d17327b0941052c27c3af15eed8580", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/OpenSSH.php": "4e50f1f0a51adc04acd65d89fae84a0cf54155de438c9a2bff05098b4001bf48", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/PKCS1.php": "9a95110e7730dd0296e67ac3be3eb01f1f129a67e9caa8e6a86b9c64cdca8075", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/PKCS8.php": "b3739dd15b8a94c05d60778f17e37babfc3d2b5c0d118838af4b74338c5d6f6c", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/PuTTY.php": "84ae9625ad39e6c7f446bdfea119cadbd829c50b2ff72bd1a415f59cdb4dc4cb", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/Raw.php": "037ae7033350df344f7b7edaee5d916087eea952cd762d1f377a49567f9c9d47", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/XML.php": "7dc7c39d049d5bdc866e1e15edfffb0571eff13f935dff29043286e261de7179", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Signature/ASN1.php": "67026ed467dd3093b9ac5054d5e385913f2b761cbb5badb0780166ba77cd7dd3", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Signature/Raw.php": "c230b2d21b6fc25e7e11ffcd79e5daf73778fe9a3201ed0fd81e84b0a93c6d5c", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Signature/SSH2.php": "837fdb42716a1d3134a25257509fcf42d0e8673444bfeeae38abbc87c009e68b", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Parameters.php": "acbe75468cb7d756a1a5de29d3b9fbe11f7556f6852fbd883f5d30321993b703", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/PrivateKey.php": "e32b118b29f5adf2b07f17745b599e825e2dbd9c8a468b6abeca8f7e714af9ad", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/PublicKey.php": "23189d12ecbc4eeb0110cd52b140fe801a4bfefaefc39e0e7b3c3c5463723599", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC.php": "7e99c377107eb17dc9b3df5adae26ff6133bba85c919b134280584c89659ac53", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/BaseCurves/Base.php": "3202b34de5f00e49fedc08dc792760bb811a743bff8123641ca3484af2829d7d", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/BaseCurves/Binary.php": "3323bc543cc3d56443cf692ca61fe5669e0a11cb54936ba8cb80b2f7ec209915", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/BaseCurves/KoblitzPrime.php": "039307942970ffadc9b7e983d58234d91147d8455252888f55a3e7b66b2eca10", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/BaseCurves/Montgomery.php": "218e4e1f9d40750429677d880be70d7c1a7e208c2bfadc8e6a4f8773244be8e4", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/BaseCurves/Prime.php": "20c8723dcbe66900b17edc85dcc8f3e247a49b489d88bd5750c455f648114c43", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/BaseCurves/TwistedEdwards.php": "c927d17fcfa1eda8772e21f5fa6086e6facd973276b1d9c977c1d08cad7521a7", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/Curve25519.php": "2345f1617ee6f09664e21f482d6181212b4f689de5fa5722c5fc4e6463a812f8", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/Curve448.php": "e07f21debb4fc7bc461003a2c50bc95096226a18e82dd18ad17b17f8ab2dd1fd", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/Ed25519.php": "29970333e88d65a4bb395b737b2f2e42e3ffdc11a50d3a0a38faf79c62692777", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/Ed448.php": "7d7c11b44b3023e641e5ea06a0ae63bf97dae58e003487d5b515ac00c396d690", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP160r1.php": "e70c3bea16f8bdd5455aa97dc2ca2b6fe7d6ac9c22f811ed27d6c1b9965f5058", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP160t1.php": "92bd4fe6af9494d631b4b138f02017da976fe14c2d0b74850d742169033da816", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP192r1.php": "e0fabb8c5411d5b1c1fbe9e553f5a8ea543ce81ff670c55c2ca2bf458e1cdb03", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP192t1.php": "afc2fe9d5f2af6900a2bad46c57084861989e8fd3086da257a6bb8413738444d", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP224r1.php": "10bbda3dc6701ae470a2f35d73abee58d51af4ca80376f21c3382c48c73c3159", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP224t1.php": "dcd5e663fb64fb890ad89ee7accda13df722fd9a01b42921c4b820fb622f4f3a", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP256r1.php": "677046c60040a0a97ecd8e9d40d81ad0a3685e913c168c01647b1fbaafea576c", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP256t1.php": "14924f76f8f154be3b82115cdc1e50379800ef63e5cc0d54e13ace0ef55fbfac", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP320r1.php": "b215751e5a6b19f4829ce8403cbc321479d60796b2d6bdb3fe90e12884305944", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP320t1.php": "5c33bd96c3d0a115165fc7e346d06bb54f4771d59be26d730d6a08c301ac7e21", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP384r1.php": "1ef5b04fd7fee0375babd5ea526d099bee4359c1b308df788b93a52d7daa016f", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP384t1.php": "d722df3d3fbb24285fe501078e9d0c0b419bba25efe97d563b17a4bd8d116b98", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP512r1.php": "e6f94bdff838f85ab7f15fc0cd4dcf751585d52d8087ef7dc57f3add1863a4f5", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP512t1.php": "8c27606938b8ff89795d21dead1fe9568ccae0a9916889778282edf2c1f141b7", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistb233.php": "ac04aece5c16d7dd673a06a2177574b93b817dc0a40138e1d59bf32a396ae535", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistb409.php": "815e62be5c0222ed51830ee6491185e4f08625623630ddd1bec486c3955b4653", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistk163.php": "7d189ccceccf1a3c19366f3db6d97ee4ea18258c84cb3c2816d84a176bfcbe19", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistk233.php": "45c98c2b0b5ca6b90f55a6838c0b32d70bdc69315a07b5bbaf8d73860b29fac9", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistk283.php": "ec81e480fc8cf964c80fb4a1de9ee9824db55945777858861f5a0829a62d0145", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistk409.php": "1fc0f78b77a7127ae9e498c1f6b1a684e4941d4b190e2abf403a1cbcd130ad44", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp192.php": "61ab36a941a2501f97b92e7b5bc6cfd9d0170b4ccded587e1142e33b4101aa98", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp224.php": "90f377ea68ae8f4e8ac15e6779fe760cf2ae5673deef9d843dae60473101732c", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp256.php": "d3bee10a96474786d89b0a12ea4558daa8936b18415a5aa40fd1dc487419ddb8", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp384.php": "fc84f767650de9805b8c8f79399ea2bd749716bcd45b4606f9fd150a8f38d726", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp521.php": "c58a9e12b332fca9db395ed2a33a82bc50cf42d7286aeb973cb4830ef6b268e4", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistt571.php": "18ad69e0944c23b26f0f992ec3f6b2beae99d6b6a9776768dd6475191535bbf1", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime192v1.php": "014ab1beeca6334d9c515ff5e36c927a551d9eaacacd1f6f7e485b05a3c4fe8b", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime192v2.php": "481a2bbc14e0b9a2996b2d26c79c4fa27604b055e7216adeb6c4f8d832cb9440", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime192v3.php": "b030686cdea83a8fab76b094a3be8889068f93e2e033bc79cb9a4537d9c60de5", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime239v1.php": "46dd903f47c26cc2fed464ff00d1185a9b046eb84c69cbe38d77ba284a19e12e", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime239v2.php": "2c4e2565e0ddfaa3e868745f9a3358946c8aa5755a1e281f00c5a5876b17a680", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime239v3.php": "76fae0a02f5409c05a4d9816ee1177c640b01b33b6731b855dcf01b54325febd", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime256v1.php": "6062848b4d451ef6d124b41ac29f5946c2c9d2ce1430de4beff99da46e6219bf", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp112r1.php": "47e4d1cc81ec61bf16a48d76e1bcaeeefde465d4a1dfd6ab78ce1b979c0746df", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp112r2.php": "558f6b8c1748089179420fb7ac06cf14e8f2c98d6ec76d310959c51903f19fcb", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp128r1.php": "05870bfcc105d719d59882cbbca50f77af61ea6fd69dfeb5666dbfc6197be75d", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp128r2.php": "4cc88779004c99eeafdfcd51c1829ca065e8d6facc0300a46dc70abb7c01dc8d", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp160k1.php": "b697dbfda3d3ee9ccd937287e524c63682f5ae96f2fbd21d3c7731a9a8d434e0", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp160r1.php": "64666817b8d303a383c0e31f67e501e222a3dd84aec71399a1a8ba5098fd80c3", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp160r2.php": "fd2bcdba853bb5dc48488f03caec9ab429fa28861ceb1780213d445eb4c6d438", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp192k1.php": "a6eae1040bc4e2462b031609e9c72ee1de490f5196458b4fbfe13bf2cada3474", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp192r1.php": "b5a068092cb2390cc27dd91ee3e455622fb04ed798065036c3ad98f6f24c1a99", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp224k1.php": "bc9bb0a2fdba323b5a2f4ad53df7255e9ed03068a02ef2eeacee225f0b5209cc", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp224r1.php": "c6de60fd2efa9aaf3157734beb8af02fa46d8a42cde771694f2f13a316c50b44", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp256k1.php": "171cc065cda90b1e0d42c9112efee43a4d032b698a75e4efe13c5b9b1b4c0c15", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp256r1.php": "bbdfff5966f8fbb6e4636b1276dc146baf96ecbe8a4e805c8344bb18205e97df", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp384r1.php": "cf2ed56c5a9b5dce0c81018a14a5c340c34f3ac0b7c8b4f9bf19deba0717812b", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp521r1.php": "68a1926b3ae01cdffb29b73cd5476ad973caae6a2c7750437fbbc85c8eba2209", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect113r1.php": "5b954f607036a87aaa1a47c3b4e0c408325dc99be4c12ff82256e7ec06e474ac", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect113r2.php": "07c5694db78fb2bd1988d2214336a28e475bcf202571d3c378927d1a0357225e", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect131r1.php": "e34528f6fed21a550b71d292fb1477bad09560d07d98a4b76cf9cd0836890c07", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect131r2.php": "ec2c854aae9e154212d88a6be72f438c94c252d310c347f93ea7e48601f8f44f", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect163k1.php": "1694ea10fac321d8a025605e83b05c0d758675cded649f86879c00b2cf99b156", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect163r1.php": "27acc454d729f7afd3898e488a86ada7c404110c43d9adf2f3a55a8c0394f3e5", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect163r2.php": "e4f4e7d3c92924a4e67f0d587b0d734d265b15efaba24752b46119349dead4ec", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect193r1.php": "20f8a7d0d0ae9cc137040618ca7ab703b86c9a022e7440db4da495aafcae04d0", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect193r2.php": "07ebf9d99088f9526dafb5f366f0aab4f7253763ebd2d7a5ef9b981e4e83ef70", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect233k1.php": "7136409be8dd9c71f85c714de29f4a3cf3f7b947c0e7ecec90c2022f974fcbb5", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect233r1.php": "e2fbcf80ce5dcbb272ba15158f1dab83f51045fc3a7b20673933e062516d8d7a", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect239k1.php": "0a35856f5321aa6534522ba89c542d4b3f96b25f67ab6e56e3d08050a8f1569c", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect283k1.php": "5cffa93b38973f8acde4121b9df4ac95f4fc40c0ca947889eb33c29bd31c093a", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect283r1.php": "b653824973f54e8e73671fdd177d1b37bba5957596cc58a1a85b84906ad20250", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect409k1.php": "d12a1a4250cf6ffad282a8d58c3caae843ee45d4d6530426b12b027f69232a5a", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect409r1.php": "1a77e340fc50039dc7ccec833e725cd79fcface230f258fd25805f85a772548e", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect571k1.php": "be74fb07bb75d87b103708a1f3f8f4d7629f8ee4251d74944cf37996f603599a", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect571r1.php": "8f5ecf2f3bea79443bbb8a2d0dcb178a71dfc2759ad754b9baee27cef4c2ec71", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/Common.php": "4261faed8cc8abb99b690df1162f70fb2179c0375c757231ded912d14a9d73ff", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/JWK.php": "058d5bcde358be26850557ef09132a203f04d4c0e4f28a2eb70819601f152338", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/MontgomeryPrivate.php": "d4eda584ccd2c32795c9fe64e653935fe80c6e482b0b86813eda2991f82491b1", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/MontgomeryPublic.php": "c43fd098c0381b3b7a404624a30dddf1dabb0dee614203943b297d28f99b9343", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/OpenSSH.php": "ac3fd16d9a293f2e73f51ea9400453b3bc2fb899dcb73298543fb5e6dcd505f5", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/PKCS1.php": "6b355a29b5b550b45e17d55e3e7eb4c538702006011c22f38d8637f00f453f90", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/PKCS8.php": "0180d6720dd47365292975c94a1a621ed0c5a3a05e6d0e0c57f32bd91b73089e", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/PuTTY.php": "33470695b875816bd514759871546daa4b6db49ae8cb312f51c0390c7d03e451", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/XML.php": "a4f43940e160485e1686d57a9f00396c53a7c61b69197b0409a812b52b958e8b", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/libsodium.php": "9d6f1748e1918058b36e5c902fa00590b553795bfc4660b5df0413c85a84924e", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Signature/ASN1.php": "08ad75359b093e7fca4964d7a3b490e18115d7d1bad183e210edd7c99b43a9c6", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Signature/IEEE.php": "5d14ebcf1fb5a438a9e4c4dfb55333d4ea5f14617ae645c7e674e827b55f56bd", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Signature/Raw.php": "db0b181e5192a0c1c0521faa24acef0c81042cd1cf7c18769ba3d39813883826", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Signature/SSH2.php": "497a82ef867f0d22f008ba16bc902cf5f2e66ffe28bc68e52fc418e5d23769ce", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Parameters.php": "c2834578db215adc8302a0414d7c48f82a7dab07f5f60377678ddc6bac96e4cc", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/PrivateKey.php": "76af0a5bd6811c2513c10e6e10b4cbb02974a9db2f5ff03ad7ae04a390200b10", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/PublicKey.php": "5d1001afe808b7490789e3523bfdbb9948769ffabc16f4bb5d4f93fa4a555fc5", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php": "6ed8d200abb5c32a41b230c023261e1da84aa50c145bc934d0603b1a8c57b684", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/PublicKeyLoader.php": "416a38f3bbef4c02381be1b565f486780a9af332b0f56164b0437ada83cf7d68", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/RC2.php": "f0ee320e7b149cc9d35c9b2db5195688455f317e5ffe486814e0cfa5e9c3d756", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/RC4.php": "5bc52a950e84f6d789a7954884775789e78a12d1fc39e4f58713c30efbd29517", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php": "98f5c8840ebcc31abfdc872edd31b7d471dfcf4f0b3f660aaa248fa20714ada6", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/JWK.php": "caff332aa18df77b67f6b3485177016c89cce36a8025fbace824458b3cbcf846", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/MSBLOB.php": "b5ed3382252445e87d43830c859b3c375443aed2343f7b97b41a6020dca1690b", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/OpenSSH.php": "481bd1d19e104abd2b6fb922a1565dc59e43bccd9b004b7d6e7620f911355a58", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PKCS1.php": "df5ffa63b796919cc291c97e2c00616a4b1ad5ec732aee9a87db3eb142ea348b", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PKCS8.php": "8010e237da8e0affba5ceb33158034a0b0616608e4fd299de25a1255de794957", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PSS.php": "820a1a2f5ba915889e888b22b4365030c059e31c505396b3499becbf60e869cf", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PuTTY.php": "cb81457a8bd84a91be5ea76b7104080d2e9f02755e3d5cb8c4adfee61c044cc5", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/Raw.php": "510119d99e738ff3c4ea561f996a13d34a3d9dae62b55b9c1c92b044848ae7fb", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/XML.php": "471b9b5b06c6049ad152859a7e26a0eb5158e2dbc819e5792f99f3249a2a1ccf", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/PrivateKey.php": "bb6cbfd0e5857724102ba64d71f5cf370af61faa1497e6e2d67531f073483f89", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/PublicKey.php": "863a318f8221470088b4b9642b4cd30174df87d1148f444fb0584a059be1e1d3", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/Rijndael.php": "3d11ee45a1950ac841f7d32ffa85e404b9580c29440c7a3dbd836537dd064036", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/Salsa20.php": "84da6508d690443d2aa5ae8afd01ca54650dfe945fb1d7164fef3757a64d3010", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/TripleDES.php": "f7b23b99fe852f8222e48167e2d7751fb2a7bb569099da2537699e2a4e998774", + "vendor/phpseclib/phpseclib/phpseclib/Crypt/Twofish.php": "d435541bd8b36b1467998253854603b2075ac554eeb4f1760dc334c96cf54f0e", + "vendor/phpseclib/phpseclib/phpseclib/Exception/BadConfigurationException.php": "ce7deed82152bb10545a2bc9b484ffde126239a4e524d8d125b8bf434ac8bace", + "vendor/phpseclib/phpseclib/phpseclib/Exception/BadDecryptionException.php": "d715b5a4a73f85011d13299e84621f11554f29adde3f3c406497c31007bf39e5", + "vendor/phpseclib/phpseclib/phpseclib/Exception/BadMethodCallException.php": "4742eff0fcc6aace82d2a6b616fdfe1b2ee7c650505b05c15c370d48f229549f", + "vendor/phpseclib/phpseclib/phpseclib/Exception/BaseException.php": "679f0b2c8e740a17de87012776a52fa7f5c52c16d07948f08ef9aacd8b69a97b", + "vendor/phpseclib/phpseclib/phpseclib/Exception/CharacterConversionException.php": "a5d67260c02d90ebb825797f457323090ed1f31dc2dc75a7ae7137da2c2654d9", + "vendor/phpseclib/phpseclib/phpseclib/Exception/ConnectionClosedException.php": "fe1c3197c154c382055bf1d06746636dc8030f8f8bc345745d736db4ec9e7b06", + "vendor/phpseclib/phpseclib/phpseclib/Exception/EOCException.php": "b5511659a25ea08f8bb2740956896b7608dfbd1c420ac9445985b6f66483900d", + "vendor/phpseclib/phpseclib/phpseclib/Exception/EncodedDataUnavailableException.php": "5785efdae76c4d3977576b3991e98daf894425b51af51ea842a79c7d4ce83cde", + "vendor/phpseclib/phpseclib/phpseclib/Exception/ExcessivelyDeepDataException.php": "ef1a008c18583a552aaf9a76fb850a6fcb3d6f9c4b217d4715ff2b491f9f7147", + "vendor/phpseclib/phpseclib/phpseclib/Exception/FileSystemException.php": "35b73bd0a3c9b83e36cf3bd54eaacbea86a26689e9024e09de9a5f14c21696fb", + "vendor/phpseclib/phpseclib/phpseclib/Exception/InvalidArgumentException.php": "e78952142943a7394d732edb80a01fab3457d37f3c1193076edeb4ce806ff1d9", + "vendor/phpseclib/phpseclib/phpseclib/Exception/InvalidModeException.php": "bfd3acf0e5d5d31f859d553d27a26b513972aefca66ff2a299af70525261b8e9", + "vendor/phpseclib/phpseclib/phpseclib/Exception/InvalidPacketLengthException.php": "9955dcfd09079b675e3cd783cfc0ed1a2b7761432fc3e8202bb343a4411e18a2", + "vendor/phpseclib/phpseclib/phpseclib/Exception/InvalidStateException.php": "b099749d5bffb84d8c2fce51317050a4a020399d236013f19fcd41aee245b193", + "vendor/phpseclib/phpseclib/phpseclib/Exception/KeyConstraintException.php": "93beace53d9bf7de0bc72e721e145434ff8d77502d155616e794b5e645f557bc", + "vendor/phpseclib/phpseclib/phpseclib/Exception/LengthException.php": "6c0765cf5af223afc0cb3c36eecb8ba7b841d256a1d0112cfc02737baf084a3a", + "vendor/phpseclib/phpseclib/phpseclib/Exception/NoKeyLoadedException.php": "7dbfceaf81ab78d0aa8a49b6964c3b91d3cab435977ae40713c876ccfaec3dfd", + "vendor/phpseclib/phpseclib/phpseclib/Exception/NoSupportedAlgorithmsException.php": "e4e3da41e973282b7523110dcc599ab2fd5461061d767d54be4696035535e755", + "vendor/phpseclib/phpseclib/phpseclib/Exception/PasswordNeededException.php": "fc375c1a32e98a8d053ef3aacc527e6dab06df4f4a278cef4d98f9a8040d59f5", + "vendor/phpseclib/phpseclib/phpseclib/Exception/ResourceLimitException.php": "9b39958dd3c5b7c64dc8aa9ec6510b9f81f2e14f039123a3be2e48839043cd35", + "vendor/phpseclib/phpseclib/phpseclib/Exception/SSHChannelExitSignalException.php": "ec33d7c9eaa2cb68357c2430a342582c24f4e65522162f39475c588acff8d154", + "vendor/phpseclib/phpseclib/phpseclib/Exception/ServiceUnavailableException.php": "df6c190d93126548d1a43caae39a9248efb4fe22eb6e140e05731a038d6e8acc", + "vendor/phpseclib/phpseclib/phpseclib/Exception/TimeoutException.php": "021685d51616496479eff7aafc8fc7e99f882da83dbff54b53a72aa50f1a04b1", + "vendor/phpseclib/phpseclib/phpseclib/Exception/UnexpectedSFTPPacketException.php": "6bbeadf843a86fdfb193fc10ad46b10f89ec8c6ed4ef908a2a4ea1f89415b425", + "vendor/phpseclib/phpseclib/phpseclib/Exception/UnexpectedSSHMessageException.php": "2189c74d939665e770b83b220662ac9f53d10a146faf2bc5e493138c2b817cf2", + "vendor/phpseclib/phpseclib/phpseclib/Exception/UnexpectedValueException.php": "e67b3dddf1ac0ea3881823185eea851495917bda7621a3a47b1bd0656772141d", + "vendor/phpseclib/phpseclib/phpseclib/Exception/UnsupportedAlgorithmException.php": "e9bd8a220e7ea0c86e30de35ddd5623db03aafee12d652ee4cb46097c0be7663", + "vendor/phpseclib/phpseclib/phpseclib/Exception/UnsupportedCurveException.php": "561f7c58f680caed10ddd1d20a9498f0b29c712e3f5d002d79eaf14a858db72a", + "vendor/phpseclib/phpseclib/phpseclib/Exception/UnsupportedValueException.php": "f5ece6c95f12e021778fe35f42b11f83998626b845fa3ca5666952a3c4b28bd2", + "vendor/phpseclib/phpseclib/phpseclib/File/ANSI.php": "172f2bf28a902ac51937fc258fd669f6f38253f7fc136e788991c640a02117b7", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1.php": "5d092a34f43d61ae90cf987a4b2880b37ac3dd556cf5e44384d31a59f85d6977", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Constructed.php": "9948e45d94e91a80c7b197f7e47c1905e37aff9432bac88077288135654cd68c", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Element.php": "7ae7313b568526256dec73321acaf01dfc5305dd77e586c22b746e1e80322fbd", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/ExcessivelyDeepData.php": "602b5012353c94666a098a283fa5f67f294a5ad5e3d9757bc060c15ec840ebea", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/MalformedData.php": "cb0805a1f1c2b84b28a25297e8e535c8ebc5ad813c3786fdee7bad16749212de", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AccessDescription.php": "b6ad05baf50d15f835aa940902addc72f01da32fdf0d3a2d28e81032f03ae208", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Accuracy.php": "bce6ee6b66213a71115d64d771d645e92afde61a62a8a1283475b28a4c1c4c62", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AdministrationDomainName.php": "952a073f7e98410e4d74c970956b3ecebddec08913019baa1e6236a9ae847fd5", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AlgorithmIdentifier.php": "c43829d3e9810184d7ed413e61db7d50a986e833d9461be535c5ebabbe32036e", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AnotherName.php": "235f4c02a6223920feef76cd0577b224f2391d90c9d10a280d5d8d21526e16be", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AttCertIssuer.php": "35d5931cede1cd9b3ef2c5eb971bd6cf204763313dfac699bd480762835d775e", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AttCertValidityPeriod.php": "8296bbe0f4398daa9c2dee82963570dabda10181c89c9b5b0cb7a42d56941a27", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AttCertVersion.php": "948bd3ee76219a8f6ee7a6602e889d18133fdd40987bbb676adc7dd15654d844", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AttCertVersionV1.php": "88fe57bcdd2e724f15253231b156a7bb9747768be0eac380290f57cd988e465c", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Attribute.php": "6e5925ee1f8cd23b2085ab345a0d96f77c806a2b1e9004bbea41c33abe7e1893", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AttributeCertificateInfo.php": "f41401d86770ebb5967cddec1e297982a8d5d146c6311af5e52227f700708b50", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AttributeCertificateInfoV1.php": "0e64fae6f5158c65fdf52dfe2b1318de3843fa59163902f387afa089f3957552", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AttributeCertificateV1.php": "dfb4fbd192cc8ef2064e78c1eb00f10531e04236f4110394ca74ac94704bac1b", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AttributeCertificateV2.php": "22ed99c2bc80a8e02eb5ac81cf9384dfce9a8a0e548ab799e6787d5f8f384460", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AttributeType.php": "aa9ab0e93ed2551ff1c7705d7829c6b758fc444dbb29e75857ceab8700f6a517", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AttributeTypeAndValue.php": "ca26a6d86a26723269f5b130ab283d9ce5c0a38fb6f65f9633d9916b29cfe547", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AttributeValue.php": "ea12a99944849f2d4421bfcfa09115dc905e24cefc5aa85e484b1e5ac99d3bac", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Attributes.php": "35b69ffe66b7aec8099750bce9c185637c9bb641e2822378bf72607b4da337ea", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AuthAttributes.php": "16e694ac1f085d07a63f4ce79b612dd2eaf7c3086a0e17e549f7e1d488519f96", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AuthEnvelopedData.php": "db136c41b74a0a1d80bc67d7a1bf84b29956d8b414369dc4b079b0cfea0fbd63", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AuthenticatedSafe.php": "f2991a1bea12d30946ff3f08a5a7deddf286d61cd246e20aa0eeb28f1736c1ea", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AuthorityInfoAccessSyntax.php": "75484fdec11ea6b9a27b1615035ff81d9ac5fb6139190e3954edca8e21a574e8", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AuthorityKeyIdentifier.php": "cb84f896eb938af4c5d52e7a7000a23b2ecc077388d6640c12d7ae99ab8f4af3", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/BaseDistance.php": "88f6aeced7a3627fa6aa8c9033c6c4300d20436fd1b3affefe41099beac2acab", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/BasicConstraints.php": "c6cef49ad7654c1d09a911a920d33e90ecf6721f277fbaf651ad958da050e4c1", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/BuiltInDomainDefinedAttribute.php": "a70b1afb5861f5ba5a88cf15f9709b0199fc590c1f5f77fd8f299a2f893d03fb", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/BuiltInDomainDefinedAttributes.php": "c67f38cbdf27ec4bcf8985e798a85373b70efba01f4f2a6344b93ece43db0c71", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/BuiltInStandardAttributes.php": "40176e9be0771dc7df925bb8219d7745adf30f3d9fc2744038fe3f9be482daee", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CMSAlgorithmProtection.php": "11fe93284c388c6d24fb0a05a8fe7d3975ff687504093878381c1ef0a61f67dc", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CMSEncryptedData.php": "f4c46e63bedc334d969f22b8346382c3a62264ee6d3ae5d397b459bc52801a2e", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CMSVersion.php": "53389684c12d48e87410df88f4bd96eb8b7813060338e2fbb3c754ae7df3171f", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CPSuri.php": "927e43d322131c77c7fc06f601df11739a23670dc6182b69b21b92148473eca8", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CRLDistributionPoints.php": "651467a1237f1973291c2c6577e1c0250ebb939ccf72f5f2d93b71256ee689c5", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CRLNumber.php": "93dc3f385d7a64513bcd0fff0f90b87f4af55afd10fee5c4dec08bafeff64b56", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CRLReason.php": "e195ea5f8caa83042b85f98c0cb45257fa710e7d1266798d7599dc7cd170bc63", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertBag.php": "871f51059bcdaa62d3703ea39069a912b5d3bac2001af1a446275b0519b76aa6", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertPolicyId.php": "7814b625dc57efb9eca769445ae993288ebbdf338c8ba2f3774ada5d6bf8d58e", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Certificate.php": "c2a2cb7eb6474b6ee9b72fb7cecac23779138ba8693787d60b9a958af4cf8ac5", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificateChoices.php": "f38638ce1e652fd038c59a75bc1d6fce42cb9ae9d929a6aada91ebdda3203e70", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificateIssuer.php": "4838c5e16f586aceabf6f6c842a5aaea035f2127ac04d8df84ee1b8ed8439330", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificateList.php": "22b222e34c0007e71d7945a67fc6bc452544ff9d7692f31571a13a283136adf8", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificatePolicies.php": "bb54306f9ec9da0e649238a0e4a587e903cf79434374f02fa590dccdf1fd5821", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificateSerialNumber.php": "f77b2c0c8fbffbe79233fa1f5c4dc0ef3138a1d0342383c5fe09026802506162", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificateSet.php": "b34bee9b35aa66f4983321c46d7739aac39ff7bde78c58fddb9d3139815e92fa", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificationRequest.php": "82fd17b2230c6c988d0e8c491c1156a13989db3030ebf5377c63a7d6035faeea", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificationRequestInfo.php": "8ff35038da841121b613a22689a8581c42f2801565c63d38ce3d2178ec962414", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Characteristic_two.php": "4ef2f823b93e4bfb0672bb6631efdbfedca8e485b0312a9aa4122cf4c018d591", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CompressedData.php": "785b4a583142ba4d77b4aaa437c26d7c7e4a8009119fbd4055ee2961108a1b13", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CompressionAlgorithmIdentifier.php": "eca9406d46d6de76cc2cf234de7503b06f78d0f5df1e0186bf04c149b15ae89f", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CompressionAlgorithmIdentifiers.php": "2c815ec43919be53308681edd68f47c79ef0762a31bde7ef65ad73ad957d6022", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ContentEncryptionAlgorithmIdentifier.php": "aac3aa100d8de3723a8fdb6c26147a4c554031a2838310042fe0f73814c38d64", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ContentInfo.php": "1414c44c192ddbdf9733396dd5cfaf6f7b9882c293055e788be384a36866d3da", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ContentType.php": "3d2b53f6c8ef9bed150935198f99dd7b532af1e62e7b917e473d10282a050de9", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CountryName.php": "f052e43e6abb807b5aed4bb874ccbd829ef8f193424b05eaa588cd8b69b44871", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Curve.php": "6d44a54a9fa0b3e54230e93145b6ad3e4914ca5a74d9c368e20fb221e24a39fc", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DHParameter.php": "c95f93a3cb8552db4eb05ca0c7e1e7098fd89e376e899b61303737d60772798f", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DSAParams.php": "f6d9fec955aa0df01e2f6afcab59dbfb0c7b65cf73afd969992fdf241b84cf78", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DSAPrivateKey.php": "8db0c5f3d4e8ab9e17695230727fdca347346ac0a18d572efb3bf976c9ae69cd", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DSAPublicKey.php": "ce69ca33c12f10429c87b53ed5df17eb6a2dc163b89ab0c7e7d5bb501c3f315e", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Digest.php": "bb380fc1fe77980241af941ffab62b583643a1c229f05971092a992b018ed0bf", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DigestAlgorithmIdentifier.php": "9d909f5046e2ac94a129d723913ab4ca6630f1de9322535a2e788ae3926d9190", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DigestAlgorithmIdentifiers.php": "37db378eacadcd65106b1dba9eba55592a40555223d080214e5446d2a55fa18c", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DigestInfo.php": "f61668009b441b7d72d911b1f408c6045c3d642cdbd78be0e05c7c9a19b3f0d5", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DigestedData.php": "9aa236c7b1531d63f256363375a58b4a1eb8b160f2339b2d385eb49a7fa9f610", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DirectoryString.php": "0c4dbf32d305beff04d7f11f92aecf05723d16dd7261b2ad5f8ea78fb327409d", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DisplayText.php": "9978ab3bb2f253bb7beb54d389211f60cf35375781b0d6acde9c1e35754aa523", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DistributionPoint.php": "04ad41e2ef4715b840437ed25502266a13e39980bed25160b31452c9218fbc8a", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DistributionPointName.php": "d8de44b24a28baa8d2bb03f1b302093fbf7ab7bf5cfa5a07b34bde4374c1f501", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DssSigValue.php": "0529f101efd9141b19f990f3d3ffd786905d4717ad0902c42398de284aa0f8dd", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ECCCMSSharedInfo.php": "2dae5e4aa56302f229d700388c8777952da38e4d41f0401d54c7d7834c8d240f", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ECParameters.php": "04537097a3e46bd3a438f97d2e772da28e1eae8bd27532b926a87ed170c54cdd", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ECPoint.php": "382d9545d559538f8aedd51ef7c1a1ab03718d8a9288128ff3ade970aacdccb0", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ECPrivateKey.php": "69ae8c46b0757f0af7fe6eebe70af23e3d21812d9d7129502ea9cd1a1d6df417", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/EDIPartyName.php": "b8cfa7fab4e6e619ce04f3ca963feb8df45a26e019122c2e38a2a6a2003d23f2", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ESSCertID.php": "feee6f6c38876948fbe19e1a73562f378d8c86c5fea1ed39ab15c7d5104eb0d7", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ESSCertIDv2.php": "45c00c2b3b703e6fb08dff1ce6662a56efbcced2284d174a7fafdec98e79b3ca", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/EcdsaSigValue.php": "caa229d1dfd881ce29d3fd4a01dbc92f53ce547324a13b596cb0a4a057ca955d", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/EncapsulatedContentInfo.php": "dac8c4acdb1001ba6ad76e4ebcaa48fbbbb1325f6bbbc507a0b6274719277ef2", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/EncryptedContent.php": "92918521957d6dba310a71e8971564795e826a2f63051d69896a187be2398677", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/EncryptedContentInfo.php": "109ee5b64c56bb1d3aab6f1c217b98dfa8d443db403bab113185a3a4dd17c371", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/EncryptedData.php": "d777b7ea0f324434ee1b002921ad349604ad5399c8524877f913edf9cb846ca2", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/EncryptedDataCMS.php": "c808ef51230fdcb07a1f85c8e71078e7cd0a040b21f872884d9b6ca184dc89bd", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/EncryptedKey.php": "822d22643029eed1c18a2946eb55be55475038b4ed6f75b7c7744e14c8f11c9a", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/EncryptedPrivateKeyInfo.php": "8f1a80c8827e5a1d401b367720f68c7e59cb9bc75e8eb0080cb0d52a586c84f3", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/EnvelopedData.php": "5b7f106c81d1cfdc58df20799068edc09caa4c5c8a3fb12a528a17ec8a9e3d97", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ExtKeyUsageSyntax.php": "a940422a7e457d73656d31fcfbdc003cb6bb711639eaf47578aa5522b3f8d1a1", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ExtendedCertificate.php": "c3990058e7290afee503a781e8b192caa357a184e41f3a7524b60d3274f4d861", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ExtendedCertificateInfo.php": "d53f215d23224862a33747c622f41eb4abf072c6a007f365eb72cc092cb3543d", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Extension.php": "490285a870506a1e4a4c111833a9ed5bf559ff030ec2e7c2c7ab15e5a39e7818", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ExtensionAttribute.php": "8b4e2b26997f6ead061b7252ca1e487072fa393096cc79f1d2774133e45ec54f", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ExtensionAttributes.php": "b9e5999030cb732a3573ab80793263738a38e8aa14f93fc2e83e51ae4c54f80a", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Extensions.php": "ab4174bf848497efae02c732ca639aa94a31e99b5b012d05bf0195cf804e6750", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/FieldElement.php": "eaab82e88ecdbe356e0db59a89cb83e8e81db9341cbe900ea79203c75fe69b17", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/FieldID.php": "2bf2868d7c7c0b7e16ee41d70f69b865739877bb1f1b9bb1358dbd789bf176f4", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/GeneralName.php": "77b22f1b53d4a8202799f41fdb4cb3935e9d702951dd93ddfb53445b4d8bc7b6", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/GeneralNames.php": "fb0daa63c9c11ef8ef92a68d2f4bd4219096e0d962acf9aefe47a34bb07a4974", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/GeneralSubtree.php": "1e6facdaa61db277087f8690e2324b25a8bd15638e6f3c6ccb26b1bd2ef5d0a1", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/GeneralSubtrees.php": "3c6db445a40eca2a6241fd6f64f6c11741b5ec7a3492f4526667beaac0267a31", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Hash.php": "6e8e7f2e037171c2d14c7e6010ee93520e8b7c3aef73495800c6afd93d5b079d", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/HashAlgAndValue.php": "e90b67d534d6cd22e956f868740080802960ccd93041afa5a5e19537cf8dfed7", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/HashAlgorithm.php": "a0af4d46527bf753957bcbdf130c4ecdb70f4a56f943c64d0255d0bd2264448f", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/HoldInstructionCode.php": "6d09ef8b76e825d02bd08a1aef74bfcfc0baf839fb500b21989a71e02b6f233d", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Holder.php": "d990396f393a9b8b6eaef9036926caeb0994aa6e345e479f8589512783d5bbef", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/InvalidityDate.php": "00fe93ffd06ea33973f8c7eaef0ddc528ffba12b81a3dfb2792e836363b15268", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Iso4217CurrencyCode.php": "9f94cf6c3a8a053219ebac527180f88b41bd56e70ea1f81a7b1a51a9a039477f", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/IssuerAltName.php": "762da0945980b54c001527d9810aad40c81e866c4ac0bd0bbac4ec4d5ec6e9c7", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/IssuerAndSerialNumber.php": "5f167a458cf9a846797e42c1c5830a8bcf645fa1ec624d8089a2c94597093994", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/IssuerSerial.php": "6e22252189d85f45b53a8c63c41b12d93585dc1d2b10fc656edd82290b4c033a", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/IssuingDistributionPoint.php": "291467669baf82f890b7d62fc891a7a9a233ca5444f9ad297c98efd2674dc6f7", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/KEKIdentifier.php": "536798819b3b73a43d6791b6c54a45475758d6e2cadc0bf99cb016cbf99a46a1", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/KEKRecipientInfo.php": "7a939b9576933ca6be3f99536bc39d934d95c3f72d0d0f8a7e50bd0eaad7c19a", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/KeyAgreeRecipientIdentifier.php": "3f68546f1fb0a46de3b868f9b16125c295846603ae8d05e90600e45139444858", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/KeyAgreeRecipientInfo.php": "5541ff92df2c047b9cc96a016b90337370c7a08d9e5ec9b860b798ec07dae94e", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/KeyDerivationAlgorithmIdentifier.php": "1305eff9362e36a6aa0c19efa328139aed6923c3981a5cc261f2479e7ec6d1f5", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/KeyEncryptionAlgorithmIdentifier.php": "9e046ab36a597979b48e09979581c1b0f6c4ae9a8c48098ee08fb2765763acb5", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/KeyIdentifier.php": "a3025fdefe2148441cdb87efe64acaa9ab51bed0c2f80647d9e2cf5d6590ed2f", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/KeyPurposeId.php": "a93f77d97830b18106dad7fde0527e14d9592a814a033adc6d4dca074818b01b", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/KeyTransRecipientInfo.php": "d0469d7983c2f72387716bea45e316e12aa4d0199edcac31432368951d25e699", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/KeyUsage.php": "dcac54e4594abfe27b4488a109a92dbf53aa9ec83d6c33d534c6d7fedcffd8b2", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/LogotypeAudio.php": "3958ca20444e2acce822f399f4a3885d91246ac2c4a4d4b2d2eb8571869c7ceb", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/LogotypeAudioInfo.php": "fc6abbef89c585e4d0009fd9e3d245e57fa0bf503db0f3b174aa04a164ed0150", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/LogotypeData.php": "68c9900b3231df4b4d7d1a4782d3e317304dee13bcf9a5212de43485cfed5126", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/LogotypeDetails.php": "a4a5a8603ff57a57de3abc4224d00873dc8f38f8cd4befdb6fe5c6138541ea1b", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/LogotypeExtn.php": "6b4a0f80ca7f0397213703d557a6defe893743b8e33e888ad1d9c27f510d9be2", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/LogotypeImage.php": "783e75f33ec05cd343b259816aa0551aacf2fe3456e635789b3cc9e7742b3534", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/LogotypeImageInfo.php": "75731f6ca6f46e272a7160f2538a1c1f86de3a6f87dbe6ee9b474c1354e6b61b", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/LogotypeImageResolution.php": "3cdca73da485bedf725ed2e8cffb910520c8a1fb2843f9421cdd738147def786", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/LogotypeImageType.php": "66e230056ddbd2f0360d3f3db59f6a71eba002af2d4c6e36924f3a8fc522b52f", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/LogotypeInfo.php": "ec2c0bd3b63a1901c3cedc5dc7a846a9291a699456d6a883a2ec5ce9c7cdd104", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/LogotypeReference.php": "943f1b1604727d61ec8a8b71e32ed49f79a778382185332c8095c4fdbab32893", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/MQVuserKeyingMaterial.php": "c6734306e6643788ed41910392f38e3b1b17f7dfab9cbb56dddebc02fab53a4b", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/MacData.php": "c6f438d55c516c40273652dad1321eb35ad978f7a0b2cbcc0ab3c2029dfce494", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/MaskGenAlgorithm.php": "c3f7f1acb530b0894b6388233d1bc0f2dc25c9e9567366c187a242a0255d5b68", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/MessageAuthenticationCode.php": "23ad14b2b67f62c5886a2424d858ee794ee2712097bae09e9ecfe5cce0fef51d", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/MessageAuthenticationCodeAlgorithm.php": "0628178496acbf6b3d900e2aa7143bf6c54bf16bd1cb99abee2945aeb4dcf6aa", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/MessageImprint.php": "a3bc33db04cc0a6588f4e2af8a8a3aa3fcf2663f82674b67253b55be25636b34", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/MonetaryValue.php": "473247e7d3bda05477e1e9b0e560afd4f68b78d186b062a146a39d80eeb5dfa3", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Name.php": "77f9cecad7c5749ffe1d0d80559406cc9cc1f6da9a46cbdbdd08798eaabb02c5", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/NameConstraints.php": "cb89f6d73b8da0a62515a63769d6c9617c158fa94a21c83c1b2eb81d7100f5af", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/NetworkAddress.php": "df3d00690686d02780259f8a417663f6cdcfd8271172591a65532f58163b4e4d", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/NoticeReference.php": "17b3cc554e91c0f5c1b0b607b4ac6311012c95d3bd36e86373f733943438a379", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/NumericUserIdentifier.php": "df56af8aa2620709063495850677a8386ff1bdb810885f05517aadc4fd611c8f", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ORAddress.php": "4d16e0afd7fbfe108cb826885e8b360099124865d74c252b2aa8547954685eb2", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ObjectDigestInfo.php": "c5762f7a3946e0a32d9f75aaf70a77e0e169bd9a87fd3b6162af253d414f96b2", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OneAsymmetricKey.php": "5cf535733089ffb0d65bd0eb984a51b1f1f3e1a97b32e30e4c091a6fb10df758", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OrganizationName.php": "edc4ea9d99f96d36d0d146125bc48d80abfcde40651181dc5af13886a5144cbb", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OrganizationalUnitNames.php": "e8c8f7a525d86fb530e78c32764120efd6223ab76ab08bec9123840a3b7c2c49", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OriginatorIdentifierOrKey.php": "4d532fc10ce07ee34d4568169162c6c12450f914a9a09e20aaba0a997c8bb2e9", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OriginatorInfo.php": "d6cde9898909613434e0ce3b365f76d6dc610c8ba1708560df9e48605bbf3d95", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OriginatorPublicKey.php": "c8c235d4b3a37d38fb94d3f039ada5f55fc16b8bc10aeb6258b1e79903c9c32e", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OtherCertificateFormat.php": "aa47b4867ffc55629175289f757504537ceef2e9abacc376810330babf40533b", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OtherKeyAttribute.php": "ecad99576aeb6b66c611fa8d6301c9817316e5e1b2755cab85665d6616939ae9", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OtherLogotypeInfo.php": "473c2139784699bf8ec012f2dbedc94aa0fb09543e591d26b04c7c8ba2b10931", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OtherPrimeInfo.php": "54f745f50abc48c42304c1dc034313a4b5174588b31fbe18b2bae2fd29af692f", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OtherPrimeInfos.php": "bb0cf3ed06b82d1190070e998dc0d90c65a2bbf1b7d0adff6684f5b309486879", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OtherRecipientInfo.php": "191975b7cd20cce0dca26356ab962ebcea82ea309c8dc437e475fb450adf42ca", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OtherRevocationInfoFormat.php": "9a8aed1d7e96f3d2907365298ab46cb8df72929be84abc8c445a688715e88182", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PBEParameter.php": "1fb0908b89ca51d706d9daeee21a754921e2569ba82f311bd917751be6f27a58", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PBES2params.php": "173218a0e80220aca640407ef622ab47c86840d88ec7ec4ede5412ad174f9bbb", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PBKDF2params.php": "4cd3d4be5afba646b97216ec8e24af637d955322e708298d61bd7779eeb6d87e", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PBMAC1params.php": "c12c50f70b4f69a33d466fc1b640823d33fa2bc895c8c2df968c0cf45625bbfd", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PFX.php": "999a9bea71ad751e5433ef57e04b764178e35fa5d9b23d40721a947f24111b17", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PKCS8ShroudedKeyBag.php": "47e16eba2d5937d82b078d76dcea056e2a676d6d8180d1c3711198c81e8e80f7", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PKCS9String.php": "5cbdbdca6cd27da3d879e2908e5dde17b07b33d7e9d4898e5d810f071600f71a", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PSourceAlgorithm.php": "e662079bc395fb55262633a1bdcf285e2ac53e69cc98eef4ceca81f831063018", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PasswordRecipientInfo.php": "3b954543ad2491b9c8d6a0807909fbd5bd85b69d13e019bb61aa69e90aced471", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Pentanomial.php": "20ae89c33e567c0ed4272287add63a9800137429d649dc71551f2f9bc0a1f14b", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PersonalName.php": "35905cd82822328765b21b65f381ee891dd12a9a7f255f2da357ab842856ad73", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PolicyInformation.php": "44e34cfa5e5dfd45f9fdd8feb5b5779ca91c6b3047ce3670f5576503be2be818", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PolicyMappings.php": "c5c31909d0ea009a5c81a445526ed0e70edc0ba0ab605ec4ffc3324fbf66cfe8", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PolicyQualifierId.php": "6a91342ce9be9dddd2ac501eff903cb3f3b3658bec9f3cb2975fa2aaf247bd4b", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PolicyQualifierInfo.php": "23f4a8f7fcedf8221e55d66ccd1d92a1941581f328194261c384d16c330b7eda", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PostalAddress.php": "daf4b14fca856995ffff1cc928d82955781bd01d4cc639150c50b14d4c386b88", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Prime_p.php": "4fc20e087029086b8d368390b25f172405a1c0d8056c65e32e7eea07215586bb", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PrivateDomainName.php": "8063a30ab99e3359954ce739ce5dd259f13f61a75b9353494f5a1ae02f370ad1", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PrivateKey.php": "d78fbe587a3055198d5c92ac4c0638602d234dc26553d40c1b11e3d936e5fcd7", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PrivateKeyInfo.php": "2ab991dfe414ce891c2a387b62019f58444dd7da3128aa730fecee3534782966", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PrivateKeyUsagePeriod.php": "97a2fcd341ef9c648d09363170863d69ba4481621caa27b0d25e1d47d7dacc82", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PublicKey.php": "e38cecefa5942833b001301c66c633333d1f266a40df58f82d33c978127255f9", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PublicKeyAndChallenge.php": "bdd80b6adc4828e681dc20473f2b8b2bf2d7e8d5ea462040acff388803c4baa4", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PublicKeyInfo.php": "b5ac8a516ed9eab2772d64b223ca125975de28b18ec98fe98873f169ee20b16c", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/QCStatement.php": "ee8c8c6c90064d4ee1fd5c868110bb8bd64da8c1252074039a23674a801a8d7a", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/QCStatements.php": "f193052560ef739cafb4176fb3c77caf98e78dd509f3dd0ee1c39a6965ba65ac", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/QcEuLimitValue.php": "1c3c6b6ce36afd5deab0e2a407e609c88d00388070e2d4932628ce9286936580", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RC2CBCParameter.php": "b2b229cd94f1db13f647b29b25be308a150e3b7d4f0c456e9428e731e7feb53e", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RDNSequence.php": "1c08c4ba5efe9a8bf60414ad2932120b575c2c8879569743a01ce39858d1ad55", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RSAES_OAEP_params.php": "c4293cff4cc9e8baa8d0a0b25fc370b403cab1c5e2856b57861fe0f668b715bd", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RSAPrivateKey.php": "4260d96c8a2b60518a069f3eba82ba429b1408e2965dd31200f0e93960faa425", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RSAPublicKey.php": "4fad0ae88190af3eded6f0bba929d239756ff1fb7880c8ac92ac6580dce55fd8", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RSASSA_PSS_params.php": "2290166fd34777be6733f559b73a17c07b3caad2f6041413863359356799001f", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ReasonFlags.php": "a30e09f61507a8a5efcfa0c1fcb033e00467587615555f1f595c3db6bb4c6907", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RecipientEncryptedKey.php": "6999598eefa3896b463af2bc204ce122bdb041360b8451fee70c44c0a360b67b", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RecipientEncryptedKeys.php": "f746f8d05305a022cd4f0a2d10daf329d43a01a53a0c5cea3deda42d5bfae84a", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RecipientIdentifier.php": "2ea4cca6b6cd9239cb343e97f6e8380e8210a4b09ecafeffd3e0b6fa9ec9721b", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RecipientInfo.php": "125ccd870daa3478a0ee7b1a82da062fae379d3d05ecfadd1d7bcd0adbcee783", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RecipientInfos.php": "6424662f792fc64c6b105ad2dcaff9a100d60276d4e4d00179eb09529df97327", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RecipientKeyIdentifier.php": "37575ca2f21d0b3246b9ec8c650eb9906be5c1f040858b6075b5436439a65a7a", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RelativeDistinguishedName.php": "dd35c595f4ab6c634ceb5db6f9dd64a9bb36ec17634e285497f27339516ea053", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RevocationInfoChoice.php": "3a06a5e2fc694a89bcfbf31fd84ae73d643e76d537f7406a31ed4d615789700c", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RevocationInfoChoices.php": "cb62a566fdd31783625909f733b049739809dcad256d287c6e8c9ff624343940", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RevokedCertificate.php": "a5ad596fa3e6165fdc25dbadc8bda08c5e0b41f8b6549913401f15337d70c32a", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SMIMECapabilities.php": "b80441ce00d3f9470849e2ba416d804fb9333a8a13754cefc2a13bf5df8495fd", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SMIMECapability.php": "56f7a3da1d0285fb55b5805814ac856e6a84d1fa0cc4e970b03e16c7ea5967ea", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SafeBag.php": "2d4e1118ee73d041b96d89fe0f63b96ac7dc9f67ceb44cab07cdf0dbb212446f", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SafeContents.php": "c33021b899647c6a215257249a89572c9339f76a979ee93496601217ddb8f4ce", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SecretBag.php": "77c1137a42c1e217e01ec98c4016fe045339df232aa93d41b3976f76dc68bb89", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ShakeOutputLen.php": "99db4ead907f91fe167417502621fad33474d95fc1f5878b1d5c5ce4fadd917a", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SignatureAlgorithmIdentifier.php": "2d6ebbb6e4e34ffe4cb03134ed9c2da0321705e157851a6d5ee8f8b87c127eac", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SignatureValue.php": "cb1fd9d31ababaced82caa79daa2880f43ab6849161be1bd6a40768a5fea69fe", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SignedAttributes.php": "01b6d7179449ee02ae7e7a59e93dc2be493c17b327aa13eb2b9aca350be6162d", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SignedData.php": "be5146a249f7115938b0ef00c615adc9c5eb16220f92eeb867fc0eb4d7586655", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SignedPublicKeyAndChallenge.php": "152b355f5d006ec8fdbcc5f6933fefe2092b54a16c4da1e6727d313266f1cfa8", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SignerIdentifier.php": "cbf25dc9546d3386f1e06ace75ff517573e80343f6975181c23eec1816897902", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SignerInfo.php": "b709cb6aa74b1855d00c4f9c7a21d1c7d48fd53427e6ed7baa0a52435ec23b0d", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SignerInfos.php": "c396319e5366f28249978eaa5a28ceda01fbfc7fbcf5f30d87b93628c55acf63", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SigningCertificate.php": "1210a0702585790941cb997352481f5a2953ffd4742837df2a799dd37774f1ae", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SigningCertificateV2.php": "f4e5198204272d3fc6a40521b0b9fb02409fe887f5f34cc918475bb764256e96", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SpecifiedECDomain.php": "64e0b21047704437ebd5a12135c93efab6da97acef9c52d4f0d2c30fc1fbdc1d", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SubjectAltName.php": "10ae4eb703daa124583b7825a20039603e42410e178c3b565b295bb6ef64fcf5", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SubjectDirectoryAttributes.php": "279eb649723cc2185b02ab81cd3d410a61a355dc6b175e0c0d24ea95af05ccb7", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SubjectInfoAccessSyntax.php": "5afc4b862d16aeb802c640ed02ebc4fd4e2774d8c897172d3e79b97cd31dfdd9", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SubjectKeyIdentifier.php": "63c9694e9183f8416913fb1cc7fb0e3ab1c7400a67bed381fa2cbd819b9a6de5", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SubjectPublicKeyInfo.php": "883ba54520bf3b75de1ce52cfc702c08d8a2bcd471032661b47332cedbc9c1e7", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/TBSCertList.php": "89ec4c692df7d87c65bc23812b12c2bd129e7aa49ac0e953e58507015dd6e901", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/TBSCertificate.php": "9c7df5b61739cde8acb061b6f34c04cf4ac4848ebee506cffe44f1bf10481741", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/TSAPolicyId.php": "88a3c833b74bf0bfdc9c262bd0b01c16337c45cbb013a145b036def2c7faee61", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/TSTInfo.php": "78186f3c9e0b6e2da8c2df49840927c82a9e7d34f65ec6081369ba694f337858", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/TerminalIdentifier.php": "d2119b7d0b66c067ea650e3a88654827a7a08aa4195dcf68f3fc44f193a433b5", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Time.php": "ac2b30b26953ff7dcddb4afc1aba81aa7c99a04f5075f317de44bd65f5f8c70a", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/TimeStampToken.php": "f9bd908dd05e39c68ecf2523515a71af220c6a37d78921c3efb365b1fcea4788", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Trinomial.php": "008e403abdfb9dcdd793c3e57468b8eac7bd1c6e1e0157e03243226853c153c7", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/UnauthAttributes.php": "861b8992715e10ff4d9dbca33a6e9e87e35a86cc0eb646689cdd1de8c901c954", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/UniqueIdentifier.php": "6847b9c6d85ca28f2eec80dd5d493cf43a6d9e6a5b0c9ac19f61d2823eb1d5ab", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/UnprotectedAttributes.php": "9ead72cf24276e5a79e54ef333ad3bb65f377fc9fe0859f9b401d46db2212639", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/UnsignedAttributes.php": "c3d2c025c2610bb4f634717e6776e2a1edb04e9c7bbb202aacda421b3bcf297c", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/UserKeyingMaterial.php": "6711b0b2d15d72e6e3f977a0bd76421958af6f6a42c01f40c35e717a77dd624f", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/UserNotice.php": "671e93336de632f62c38b585ce1d313f795c678a8c3bd2128b0331cb9241f44b", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/V2Form.php": "fcacc7e4d8f9833b753b5126e74d5b3d2a49bd515a7b2eac88237e69cd018eb5", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Validity.php": "df3c957634c383df50c8db8edff058499882cde922539d02ad9f721f949f3d50", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/netscape_ca_policy_url.php": "43a6d74fcb078d961ebc27b69732e3bbc43a9f05a7819a956f3e27bfde7fd151", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/netscape_cert_type.php": "97dabf23f183648cb6b335499ea5a2d3e146f1987cd303bfa6a19ab7f521c56e", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/netscape_comment.php": "ac7291bfd36d8d9c25a196b1f6d58224b43273bf6db971bf11661c5779998f65", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/OIDs/CMS.php": "1650fd22ded8d5e91006a496b8396afde5c094fcf64b0fa02cda2b2d3d2d34dc", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/OIDs/Curves.php": "7d641dadacc5713e87468b0890493d2287372a49ddc35903f4262dee8bc911dc", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/OIDs/EC.php": "75c516c43246ef2b4da44c0b6b64d251c95a56cf7ceee96d445b716841ba3995", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/OIDs/Hashes.php": "aa8a0c77798e24a49ce93c02e63898d00c8450f615f53c9c8961c3ad31e2e989", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/OIDs/PFX.php": "56ce87525c618e77a23b2a8edbff96cff491a7499a85c9c2f86f0f4401239bfc", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/OIDs/PKCS8.php": "aa8c9a9b43f3abd2c379cb63ee945bd326376f9bd44458c04ccce426f9c25878", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/OIDs/X509.php": "e888cf9f72febabaf44013041c7c53d2669b7533fb0273ac42ed7db26ba42365", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Types/BMPString.php": "9300abc9e99d1c7cea0be20ddf21d4a1b48d9e3ba3d05a8588906401f1226ffd", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Types/BaseString.php": "2be3153053fc54a07a762387cbc171bf4aeddb92c9a63c355beb27e89918029d", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Types/BaseType.php": "88cf5cbd642e7004332cf862acbdbc156af87472395bcae0e769e576e3c71fe1", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Types/BitString.php": "8a0b4c86fcd357311033dc9ae1139af01107271970c0fe9edaa67e633bd13cb7", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Types/Boolean.php": "17c6066d6058e581b881d0e63e5fc4fee87adc8a9dc57529329ddf17b4a76878", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Types/Choice.php": "abc3d98f7af7b0875be61831debec155ef6ce87ed0dcc98ab0a07b9fba8dd042", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Types/Common.php": "1086ddbc4661161eb6862f98773f90005a20e1735d9471d29592edd763c3e4d7", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Types/ExplicitNull.php": "6503895f56c996231cd2234d1df3b3d8a1ee5143e9052a487b515137739ed517", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Types/GeneralString.php": "1e5d48135511afd45b41a9ba131aeae5b52f5caa60c2bd03bf777f1ffd4f5734", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Types/GeneralizedTime.php": "49641c48b0b2993cac200eca79f85da7493eb2272b490111ec9e3a74f210349b", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Types/GraphicString.php": "0236d4839dae1ddb1743e648507eafac9f022cc4a69dc51bd7bc93b09e199428", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Types/IA5String.php": "a152829c83e5aee19294f0e524b15ec25dba75763eab2a27372bb8fe3136e581", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Types/Integer.php": "cf8fd0cec8799a42ffe676ab87ea8eabd1ffa863d8a3a52574fcc5e163372f4e", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Types/NumericString.php": "d899fb582387185f6b5f977898dbf4f5f20962a43cd4e41ba86059e0d6fccc1d", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Types/OID.php": "307616dcd1132d1df8cb82e3898e83246bb86f15dec982ef1673ee43b18f5a2b", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Types/OctetString.php": "c1d3a95ee39c3aa783ff8bdaaaf22a5843b5ec81fc5e74ca8a4c302a465b95cd", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Types/PrintableString.php": "aea4d13b028d17c517acbfe1d117862cb456f1335ae8ddbc2162f455dd3ab8b4", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Types/TeletexString.php": "3afe4a99115fb21274821ad26383bc567f7ca0ecd4472579599e15287b2f8799", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Types/UTCTime.php": "63f66d4abc8b41e26cffe0367f520473e05cf0402bc6ef8c8c767f3120ca79a0", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Types/UTF8String.php": "b910a22f720eb3be3d252090aca3daad5b749d1bae2e096d2364b1a3e1bc04db", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Types/UniversalString.php": "9eb7f25077aff49e3ac0fb23fd58f09fa05390bc9122d66c24e8d009ee692f11", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Types/VideotexString.php": "9296a1895ff476d65f94888f5f204ccc6f6df0ed024eb0537cb69e4624f2c380", + "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Types/VisibleString.php": "8eb5c70b8e1e44bbf02431af572f07da4d41f778a99afa897faedbd746d5434e", + "vendor/phpseclib/phpseclib/phpseclib/File/CMS.php": "c84b54e59b2e8c2fa64b9e4d5cf0c7e0bdd62a98e8577dff8a4a1424e5e307a4", + "vendor/phpseclib/phpseclib/phpseclib/File/CMS/CompressedData.php": "a2778143a1ce68d6dcbd80c5f7f3b9eb16f54b38df5edcdde295933c328ac044", + "vendor/phpseclib/phpseclib/phpseclib/File/CMS/DigestedData.php": "2f93cb0c927b97a5e5e33e828c4372ae945461fe59815dd3e1b1ca471dff54e2", + "vendor/phpseclib/phpseclib/phpseclib/File/CMS/EncryptedData.php": "a22d64b9589fc54c66fc497cf0e72b5de2fd0e2a40abe4dee978b1690d10b80a", + "vendor/phpseclib/phpseclib/phpseclib/File/CMS/EnvelopedData/DerivableKey.php": "574b882da2ae420c3059f2ca7f6282abc3fe398b55e928c3ee189b64fc1800bc", + "vendor/phpseclib/phpseclib/phpseclib/File/CMS/EnvelopedData/KEKRecipient.php": "3790deaca195eddf6c429eda5a09cb30a2f391eeac5b28b6c06e9966ca8bbac5", + "vendor/phpseclib/phpseclib/phpseclib/File/CMS/EnvelopedData/KeyAgreeRecipient.php": "61a13ee34edabd9ee0c8438966a3fd7d8f2a32341dcf5b6548ca834847497beb", + "vendor/phpseclib/phpseclib/phpseclib/File/CMS/EnvelopedData/KeyAgreeRecipient/EncryptedKey.php": "ef3442c4e721fcae08387ddae7b948fb6e0df5d13e1ab408b846f3cd64abd69a", + "vendor/phpseclib/phpseclib/phpseclib/File/CMS/EnvelopedData/KeyTransRecipient.php": "fc831512ab6a0171c5a44f2db8590edccebdc530a1999ce79711adab1206327c", + "vendor/phpseclib/phpseclib/phpseclib/File/CMS/EnvelopedData/PasswordRecipient.php": "5531bc4baefda0609b6009172d235a69748397128bf1c0de8d59f6ae66b50cf1", + "vendor/phpseclib/phpseclib/phpseclib/File/CMS/EnvelopedData/Recipient.php": "dbf8f004a4b6989808915358e6e208e0702fc40f5e5123fe60665c59b07b23f4", + "vendor/phpseclib/phpseclib/phpseclib/File/CMS/EnvelopedData/SearchableKey.php": "692d6c83babd9c932e480e5eb51260f35fa5fbab50c47db1cd21c9104c4cf74b", + "vendor/phpseclib/phpseclib/phpseclib/File/CMS/SignedData.php": "ad0ab680b77de1857e2bf643736d46b506e30830e99e523a27537196904880a6", + "vendor/phpseclib/phpseclib/phpseclib/File/CMS/SignedData/Signer.php": "56a0c6482160e40039933603ce805f93c51c1ed7b38782a04fbd3aba273d99bc", + "vendor/phpseclib/phpseclib/phpseclib/File/CRL.php": "75d3e8ff0a9d72af88dd66e3b2a405936ba98963fc87d12f4aa454d2332fabae", + "vendor/phpseclib/phpseclib/phpseclib/File/CSR.php": "e22e99c3d572a590faced6556e985df657aebc7b18f2c6e0c5d65b97931130cd", + "vendor/phpseclib/phpseclib/phpseclib/File/Common/Signable.php": "5f6463f0b43f11d841b8bc6774e3b14a657249f3e017b71e6be12d99bf497432", + "vendor/phpseclib/phpseclib/phpseclib/File/Common/Traits/ASN1Signature.php": "d2b1e2212314e4dd4728c34bee53f0386c5d1e80c3657ede0715af2072cc3a34", + "vendor/phpseclib/phpseclib/phpseclib/File/Common/Traits/DN.php": "6ee086b3f1290fe91692a9c289be48c86dfbcfea204e6e5811ee9f19b8e826b6", + "vendor/phpseclib/phpseclib/phpseclib/File/Common/Traits/Extension.php": "7cd79406a05018033a90dadb6551115daa681285068a418fdbb328c0365af0d7", + "vendor/phpseclib/phpseclib/phpseclib/File/Common/Traits/KeyDerivation.php": "96eef2b176c427b5cd844ad7cecaa37c00f27ecbc955726d5eff14ba54cb3dbd", + "vendor/phpseclib/phpseclib/phpseclib/File/PFX.php": "26ddba696a0a016877a23082b00f8bf5f4d2b7e2ed54505077e38114bf646bc8", + "vendor/phpseclib/phpseclib/phpseclib/File/SPKAC.php": "9d9cc742c4a078bb7f8a3bb58a8601090fcd458af3e57739db71a380ead907f4", + "vendor/phpseclib/phpseclib/phpseclib/File/X509.php": "ebb42ba9b01ed59085d64ba04499291bf797b786304896553d7c6396d2978d35", + "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php": "127068df5321b805cc8255309daf5cf3f611406f3397b2d3f4fe198308c39569", + "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath.php": "7b726ab78f3ef5ab24fa5d3974ccd722d659436a0ea624239a0a8e69a7e270e5", + "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/Base.php": "423f6a0fd22f2f5f0bb5380ef91270fa3e2708dde9bc7d58d2956ac7bfb8ddac", + "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/BuiltIn.php": "e10a34ea833aa2e322ba1571c7a4b2a684ae2486a5c2b96aa95aff575a9eb6a7", + "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/DefaultEngine.php": "6e1d4fcbd78e53610342c3b8feab818a106e9b14a6eaf17beb3e1b245a56fc60", + "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/OpenSSL.php": "12b0f3d28dbd230e7ed314207a54865f4ff0d4382ee53644374cf2fef6838946", + "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/Reductions/Barrett.php": "c48618b45ea89f27251ce8546340c6da9ec3121d63b0d38da6bc6e47b6abfacb", + "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/Reductions/EvalBarrett.php": "1fb6116d5f5e9d3b44d6352ec4ba7369e1255ed4b646bd45f66c73f3157f2c82", + "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath64.php": "e1935b42467c146f3fb9d63330b2d81d35ff5f46c8e7b3b3de85f9c85825b6a8", + "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/Engine.php": "b5b83ab5dacab58268f7bbfa110dec1e5f5b61d35cae4eddcdceb05442746bfe", + "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/GMP.php": "ad1580658f9958efd10d6aea1607abe1b73d4cb4f21fd877f3103a752120ae33", + "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/GMP/DefaultEngine.php": "a226a7cde9f3f0136337ca9e2982406222cf8c190b5b971260e3c6a607267907", + "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/OpenSSL.php": "9da4d133dfc36459bb65bd4a43f904ca78a2a5af87d1f1dbeab8bd64468dfa16", + "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP.php": "411b94fe7bc5349f49c9588be8396e4dacb5e88d2bebedcab65c1c488879dbb7", + "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Base.php": "8d900e7fe8cbe973d275e1b2d94586ea06e949b5edd83ff139c05b1340be7af8", + "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/DefaultEngine.php": "e75cd278ffbd9bc2d737131d51e04b6609a2c95bcbc294f822ab7e3b1db1df8c", + "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Montgomery.php": "1b04b982490e91e8cb7295f86baf2ec97c8ea54466924aeebdcd2753d0cf5005", + "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/OpenSSL.php": "48c92a4e4742086a306690efbc0dc9c5a30895ba77fba9ec11f878e3bd08c9c6", + "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/Barrett.php": "73c879464645d6ad52c3e4943e1d489dd73f9e429069b49bb60b1932ccd2d6df", + "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/Classic.php": "b85d3dd83661b94dc6591cde63b09779e9adbaa76196ce8ba78df05e5a4b07e4", + "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/EvalBarrett.php": "33bbd03e26345dbfdf9a87175e7f61f3dfb2d7926211ef430a385ea451f569e2", + "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/Montgomery.php": "0e300d4d26b76b0554607403ff7850ab4e662eccb595a2167a0477b602e9162f", + "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/MontgomeryMult.php": "6352dcde7d892426c8898bbc3aa171f32d0c39d934fa361a3ada6d5bde3ffe59", + "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/PowerOfTwo.php": "aeb35644b2afcbe7a6bb4bcfd84dbf2e83c01c13d162124a52aafb65ff2ac33c", + "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP32.php": "3cb36e110de161d10acd5e26c029ea0cb4ea7ad07730267e554e44e35d5fa21b", + "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP64.php": "7910610bdb0c0f6de2d5294f50eaf3cca25d9fe751e5199ee0ae099a2b0793db", + "vendor/phpseclib/phpseclib/phpseclib/Math/BinaryField.php": "567529f7314437e2cf57a8462de964bc98c7af520943ab11622bd9d6e8e9615f", + "vendor/phpseclib/phpseclib/phpseclib/Math/BinaryField/Integer.php": "804c6ca9eda35f0369d6f13bf629980e329350c95d2b4d3ac6e6c84f1d2a6424", + "vendor/phpseclib/phpseclib/phpseclib/Math/Common/FiniteField.php": "8aee53d6647ca46c3652484b91276d30db47a0432f927b767ce75132e686ef42", + "vendor/phpseclib/phpseclib/phpseclib/Math/Common/FiniteField/Integer.php": "d4b9c9d642735be840ea884d2c1e371b3ebc17c8244abf2ad7052b6175656b23", + "vendor/phpseclib/phpseclib/phpseclib/Math/PrimeField.php": "e7efc5894b53de8c867905e6d105843486f3b951bc2df4999ea479f414b6f28c", + "vendor/phpseclib/phpseclib/phpseclib/Math/PrimeField/Integer.php": "e91ea0d40e29aa40a102e0d3d71d20dcc5e93cad24c92cb681b016bb01fbb27d", + "vendor/phpseclib/phpseclib/phpseclib/Net/SCP.php": "84c7228fe0b7960d40dbb43eb0e1d1a13338598b9f54bd78f540580952020f90", + "vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php": "5e61cab417ca114ae24e4fcb5a186ada433440089344acc108c27ec079c767f6", + "vendor/phpseclib/phpseclib/phpseclib/Net/SFTP/Attribute.php": "10952f6353eda71ce7324ff474d65c4dfa04db2c39aa997d6049023349d6be83", + "vendor/phpseclib/phpseclib/phpseclib/Net/SFTP/FileType.php": "47315cd9693ff836a0d42083bf612fbd1f05300da0d4ef6e24dbc2278f1cf167", + "vendor/phpseclib/phpseclib/phpseclib/Net/SFTP/OpenFlag.php": "5e4b658e9d9ac102aec53fd7ca34cffec92677b73325b934377ca4bcaad15c47", + "vendor/phpseclib/phpseclib/phpseclib/Net/SFTP/OpenFlag5.php": "01f92bea1d549a5a47020f23922ebeb9aae98b552f0465e489f0aec7bc731885", + "vendor/phpseclib/phpseclib/phpseclib/Net/SFTP/PacketType.php": "423a83a63a57bc13486618611bac6c5f859d4a1300e3c81e6c660b9457716196", + "vendor/phpseclib/phpseclib/phpseclib/Net/SFTP/StatusCode.php": "7954bf74f9bfaaf43e3a8bbd7568ba704ae57fb906b4047d2fdf77746c2c763c", + "vendor/phpseclib/phpseclib/phpseclib/Net/SFTP/Stream.php": "d12fddb8b84e203deac4bcde19e89236d5a83a954066b955ea4d49fcf47a1e65", + "vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php": "79d61f138899b1a92f4489cd69dfaebfeb84558f1ca9e4ce402943898282ac86", + "vendor/phpseclib/phpseclib/phpseclib/Net/SSH2/ChannelConnectionFailureReason.php": "50f5cc9e3a08f2a38e24eae9764bdfa69c96fb7f47813624cf9be7aa56295e4f", + "vendor/phpseclib/phpseclib/phpseclib/Net/SSH2/DisconnectReason.php": "21bac02c29cc49905f7ae3b2a528d999bf2e79366c3afa704eeff84c8dad732c", + "vendor/phpseclib/phpseclib/phpseclib/Net/SSH2/MessageType.php": "8aaa0979989f56695a70fb8d6fd8ebe806469f5ed37adcbe34670218df2ff7c9", + "vendor/phpseclib/phpseclib/phpseclib/Net/SSH2/MessageTypeExtra.php": "460dd30a04bc16a63764deeac5542daccfe48d5da010ee242446d18c6407b0fc", + "vendor/phpseclib/phpseclib/phpseclib/Net/SSH2/TerminalMode.php": "d05c752ad341500e01cf0b11194f465853f17842439d65ecba5d0a0848c50ed0", + "vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent.php": "05f1b2c5229e17bf8af94d48fc28bfb383c02f47a864b200ea16a685d1b957e2", + "vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent/Identity.php": "fb58846272508587f9c3a4113c711c025caecb807ab28138a54683e62ee9900f", + "vendor/phpseclib/phpseclib/phpseclib/System/SSH/Common/Traits/ReadBytes.php": "bf141902d3ec105abdb19d854f3e3cd67a7df94681fcfb12662fd21fec4119be", + "vendor/phpseclib/phpseclib/phpseclib/bootstrap.php": "26dc2865802fddca84bf03aa1d72f2dd205b0d44b3a133d7c806af3b706c2364", + "vendor/phpseclib/phpseclib/phpseclib/openssl.cnf": "5fc389d338ce885bf2f174798fd97925b580cd9f2a6cfc7343652ff75f103c99", + "vendor/promphp/prometheus_client_php/LICENSE": "9368976483a5d7ca12c5078170d7a199c9edac809eb76402bbe063e4ff972425", + "vendor/promphp/prometheus_client_php/README.APCng.md": "0e778ffe71354d0ddd8cc2138ce8c1ed7dd418cef3c150cf3e16579f58a89463", + "vendor/promphp/prometheus_client_php/README.md": "8485162eff4c9db016409adf78217ca5abd01298bc23d3566cd4daff530cd1e4", + "vendor/promphp/prometheus_client_php/composer.json": "49b2936c390f9462305096bdb3eb5717fa98c2337fe4e799e81009f46965136b", + "vendor/promphp/prometheus_client_php/phpstan.neon.dist": "ddbf6b56440813cd8c535d724c60217e69de96228ff63f356bb56ef1dd8abbe1", + "vendor/promphp/prometheus_client_php/src/Prometheus/Collector.php": "a3017f60b4778d458996126fc729ca5a7c906bf53a04701058523830c8fbf5a2", + "vendor/promphp/prometheus_client_php/src/Prometheus/CollectorRegistry.php": "270b94a10037b351d639238b50cbe61a714ca867acebc02ffa9544f2f6d42ce2", + "vendor/promphp/prometheus_client_php/src/Prometheus/Counter.php": "5ff9df83c8ce928361a02927c97ee4d7c4c5b78b3b538bac301b14a2064a7fdc", + "vendor/promphp/prometheus_client_php/src/Prometheus/Exception/MetricJsonException.php": "d1b535b1cada1e600b2adbf712bd8d10e09881ab59ee17edfe361f841e7f4f5e", + "vendor/promphp/prometheus_client_php/src/Prometheus/Exception/MetricNotFoundException.php": "a6de4b811506552c96ebf0eff54b603a085b532e0a585238e25d0b2f285c87ba", + "vendor/promphp/prometheus_client_php/src/Prometheus/Exception/MetricsRegistrationException.php": "950fe8226cfbaa0098da121f433bb0834616f9a92057169fcaea425a34963456", + "vendor/promphp/prometheus_client_php/src/Prometheus/Exception/StorageException.php": "9c63f04b2b4fbfc2b67938d471098394879cada3015c92a522be579d67612ef7", + "vendor/promphp/prometheus_client_php/src/Prometheus/Gauge.php": "e9c098ec3fc56abc16e020735a8f57e43360441e803897e8273b2ab23f864e54", + "vendor/promphp/prometheus_client_php/src/Prometheus/Histogram.php": "8f06b6e0f25f09119395b9dcb7e65d0eb376f8bf6e5af34d94919ece76566dda", + "vendor/promphp/prometheus_client_php/src/Prometheus/Math.php": "8cea953ad65e62b482dd33b6cfd66a5cdd8ed599883a870120d7b575e8ce6814", + "vendor/promphp/prometheus_client_php/src/Prometheus/MetricFamilySamples.php": "e595ece37287b26cf62d15749cfde837f891f35190a27c231ba3e33aa87ac32d", + "vendor/promphp/prometheus_client_php/src/Prometheus/RegistryInterface.php": "b121b1bf0f9e4d618c6cc830d46de761eef721646119bb00b1a36162fb25d067", + "vendor/promphp/prometheus_client_php/src/Prometheus/RenderTextFormat.php": "2dd99abb6da93ba1f328e986df572d4df30cbe30008e18af2846fe8ba87a372b", + "vendor/promphp/prometheus_client_php/src/Prometheus/RendererInterface.php": "7e6a6ad5d9fc519fb2c7b5f77d7af534e510e9a437b8273f56a5c4d128686802", + "vendor/promphp/prometheus_client_php/src/Prometheus/Sample.php": "57528a34a63d408f992d31e2826d0c90ea91fbba9c5caa2e170fb6fa30a3034d", + "vendor/promphp/prometheus_client_php/src/Prometheus/Storage/APC.php": "53105df3184e4537ef8a6c94a5a0f6d87299ea1fc335be52dcc52dc5235b854e", + "vendor/promphp/prometheus_client_php/src/Prometheus/Storage/APCng.php": "ea0ce8d6c6be6cba0eba8733e5782977188cd4df085d251121adc6d27ee82bdf", + "vendor/promphp/prometheus_client_php/src/Prometheus/Storage/AbstractRedis.php": "024d6f417847ece6ac8a4ffd7e8dbadeb383a6f94460d278532bc7f1c34ce7cf", + "vendor/promphp/prometheus_client_php/src/Prometheus/Storage/Adapter.php": "2f9116349776fd6206300536641ca0e9ab7dbc59f262437fcaf48ca861c2e18f", + "vendor/promphp/prometheus_client_php/src/Prometheus/Storage/InMemory.php": "c7774005081fab4870dbecb76a1bba16f94468f18e1be820a331d10d14f4ab10", + "vendor/promphp/prometheus_client_php/src/Prometheus/Storage/PDO.php": "f9e1c28edc8aa1b78d72233a823c11e16ff44b81b8d201b57441577e425e5e63", + "vendor/promphp/prometheus_client_php/src/Prometheus/Storage/Predis.php": "003667b80332615aa8df93cf4aef7d1b7132cd7aa2e79e4c41966379dd4a66a8", + "vendor/promphp/prometheus_client_php/src/Prometheus/Storage/Redis.php": "fe56e851ce3c57213c27399a1bb758aa7fe6025a643c6646fba00df4efee65aa", + "vendor/promphp/prometheus_client_php/src/Prometheus/Storage/RedisClients/PHPRedis.php": "de50a7857635c04f7b250da1c98717a3604f6dffe6c8d2c92032c0a60fe43bcb", + "vendor/promphp/prometheus_client_php/src/Prometheus/Storage/RedisClients/Predis.php": "059ce79f66541aecfade7acce8b087813363b71f2be164b5b90641b9ee4cd6d2", + "vendor/promphp/prometheus_client_php/src/Prometheus/Storage/RedisClients/RedisClient.php": "e69d15c546c2edd29da7fdf6416445deab4e747b748a15e8973d35ff54918e4b", + "vendor/promphp/prometheus_client_php/src/Prometheus/Storage/RedisClients/RedisClientException.php": "f439272272355f9cc6920c7323ecd3bd56d1102134373c67b06a6b40aa7f7056", + "vendor/promphp/prometheus_client_php/src/Prometheus/Storage/RedisNg.php": "5ee448840625e3344d395e8abcfe55b44fc5f021b1fccf42479ae720115e4fa1", + "vendor/promphp/prometheus_client_php/src/Prometheus/Summary.php": "0ef5e1758c119332bb3f7862a3be6ef3b4b07a57cb05b9dadc68aae58d3d45af", + "vendor/psr/http-factory/LICENSE": "d2e70341a9667b93ad542e4842b0b7022d302aa7c2d2a909b156b8f1e3c4cca8", + "vendor/psr/http-factory/README.md": "d80b63e2a8c4f80af830e5307683fc73718d15e71db3c5af56e15b56b2a47d63", + "vendor/psr/http-factory/composer.json": "1dedaf2d8613201a978dbcad920bd7a332cd28c95be57c0d75be7a8d6e868362", + "vendor/psr/http-factory/src/RequestFactoryInterface.php": "95bb9e09f52d05bf09630cce49abbfdb2282d396ccc3e16e77e3a9f54cd4071f", + "vendor/psr/http-factory/src/ResponseFactoryInterface.php": "fb58f39db8e472bed4109f6392443a10785305ccc0c920d11f98208f91214e02", + "vendor/psr/http-factory/src/ServerRequestFactoryInterface.php": "8584390af1bc3c624918525e725a7cfa639366c15bb7a3c7c065d04d8a20703b", + "vendor/psr/http-factory/src/StreamFactoryInterface.php": "25fe9d048ce6718141d21c122ef9b3498be45025300717ccbe912ef5bc0083ec", + "vendor/psr/http-factory/src/UploadedFileFactoryInterface.php": "712c705ac850b43dbf47458e571c8be314d1d1f01b0e470407ed014b702d9e5b", + "vendor/psr/http-factory/src/UriFactoryInterface.php": "2600f967cd969706dcdff326d3fe602e812110352c75c6b5e9773601f2d17c7d", + "vendor/psr/http-message/CHANGELOG.md": "0e0a6a6166edde635031315c05f880d4e792f2cdd493618f5bac0b09bd9a11a7", + "vendor/psr/http-message/LICENSE": "8d36e938943b04ef01994bb148793c971685b746d0ced31da03a97594a47ee62", + "vendor/psr/http-message/README.md": "4cd6339fa85e7a903f2117b081de8446cd45229b9b761539dd8f440ccd2eb288", + "vendor/psr/http-message/composer.json": "96781ea96de30367767e298f5a340a040878144b7540ce490c9089bf7e0b9b37", + "vendor/psr/http-message/docs/PSR7-Interfaces.md": "255d8acfecf55b477403a49775c907b4a9c833237ca9a856b96d8a71b545ea30", + "vendor/psr/http-message/docs/PSR7-Usage.md": "49daf54cea1064dc256357ae684b42bac35ccb6df930a2f4cb3f05fa0226e9a6", + "vendor/psr/http-message/src/MessageInterface.php": "1ef5798924509ccea3ff3e596af4c5b6b63e121f7d0441503310b29cf837b9df", + "vendor/psr/http-message/src/RequestInterface.php": "3d7531e17a3e704d7bed9f0f2bb37ffc7f1842a2cd39f789ce7e7a4023d434f9", + "vendor/psr/http-message/src/ResponseInterface.php": "1cc32dded30a668714b17688a2be8a0053effb7fabe7655bd4459ecfbc6eeb44", + "vendor/psr/http-message/src/ServerRequestInterface.php": "43c218d6c4426c7f1d354b20736ec77be924b94e7c1b11786057de6c3f3f66e8", + "vendor/psr/http-message/src/StreamInterface.php": "0a3267552ebbcac5f0cd522dd10d96ad985595fd4f90d8566b449db2e060b385", + "vendor/psr/http-message/src/UploadedFileInterface.php": "2823ae936f8f0030879fe12a507080d4eb91c6a534f57ff38e8f37561d78916c", + "vendor/psr/http-message/src/UriInterface.php": "8d96e63fb984db31eaedd858ae60549dcf6332c939d4cc940ca97f1fe6d91d1e", + "vendor/psr/log/LICENSE": "6e944907067bae93c00a9f2ad51032243820b22df34b77c77690d46cb2e98e24", + "vendor/psr/log/README.md": "4f2bc231e87cda248b1fa2aef7a930045f3e95f89ee46ff579188d2489372954", + "vendor/psr/log/composer.json": "1f8dfc72d50f452d0795681fde72b7c008eedd4fcbca482b70a35401c9fbb661", + "vendor/psr/log/src/AbstractLogger.php": "84c69c6cc60fd805eb525daa79bd04a8d0b73e52776e1a0c2a9e666b37b4512e", + "vendor/psr/log/src/InvalidArgumentException.php": "403c6def4d4199a12cb4a54e804c7d29405968871366500f72d6f3ea401bfc64", + "vendor/psr/log/src/LogLevel.php": "9f2520b22945ce1599c4fedba0a4c75985f172ca86cdf386766ebb8b2363768c", + "vendor/psr/log/src/LoggerAwareInterface.php": "076efac38ab493f4fc3e701cce9a2641135048f2bf0407b322c45712ef73813c", + "vendor/psr/log/src/LoggerAwareTrait.php": "eb114e265de2d1c8c1190b0fa9cb5f8a25e262a46d1d28d1aa02f01aaf025c64", + "vendor/psr/log/src/LoggerInterface.php": "05aecbaded98967719d76a058ea27465ffae03b7800dc36049e1ed23c825e6b3", + "vendor/psr/log/src/LoggerTrait.php": "c854406af9c4706980e93183b5f37fa9cca523df9bb1019a927f8e4713834172", + "vendor/psr/log/src/NullLogger.php": "22fbb348f7b25259ca801f595fc9aa22b9f035a44e7899687bd89bf4070d78c8", + "vendor/ramsey/collection/LICENSE": "aa1e787bd6d05172d2962fa865a592af00ec474984d6b5bcb9a0df91abe8717d", + "vendor/ramsey/collection/README.md": "debfe82cda9d315a3c883689356e83d1cd604021516d9db65547312336a7e3c4", + "vendor/ramsey/collection/SECURITY.md": "60142af3a15a168d9cba0d1d9c7873a9aff2bd1a6b3778b27de18cfa9b7c03a1", + "vendor/ramsey/collection/composer.json": "2c3dff5f874bbbd3a08cf16869c51d5f442743dff1f72c42d796567b5878fb10", + "vendor/ramsey/collection/src/AbstractArray.php": "fa7618b07b258fbc3ce99313ca782132ca8cd78ca917b0c4261f52c06c8fe42d", + "vendor/ramsey/collection/src/AbstractCollection.php": "410ae4540385483b0a3947c77d8d9f8a2fee4e7c2afd9045372b1f53921cb2dc", + "vendor/ramsey/collection/src/AbstractSet.php": "aaaf6144cdb965d21082b002d4f89808d9097e5e7c02c8c1e4516a1c67e2cec6", + "vendor/ramsey/collection/src/ArrayInterface.php": "873e7b1912b2d47ebffbd96a0f3c8400514048e9a9010be005e5d25a966e3b9d", + "vendor/ramsey/collection/src/Collection.php": "81c667ee550aabda0e1b17ad49036ed0caf41796fefc2bbe38891e2f392043dc", + "vendor/ramsey/collection/src/CollectionInterface.php": "98084700907af2c9b4d95c6a5fcf29d9dcb30d795fce23f6b2be60cc51c94a4b", + "vendor/ramsey/collection/src/DoubleEndedQueue.php": "fe4c5a6130e9b1fb7f624242341fbb8e95a5b794df27e0666318c045d7607ca3", + "vendor/ramsey/collection/src/DoubleEndedQueueInterface.php": "1bfa1e3d92341f8b89cf8a92e9824f0e38673487eb1ba51c110b568639ab9467", + "vendor/ramsey/collection/src/Exception/CollectionException.php": "ffdededea544a826856e4a6ae618ec08528e887cb1cdd4429da80df895bb32af", + "vendor/ramsey/collection/src/Exception/CollectionMismatchException.php": "b28617fb36b47a1e6575cac4b4e5f0587232caa4ba49deea31ae86827184592e", + "vendor/ramsey/collection/src/Exception/InvalidArgumentException.php": "f50126a183caf799003b2c5bc8f17eebb66c0add99e4214c62a44451b83792c4", + "vendor/ramsey/collection/src/Exception/InvalidPropertyOrMethod.php": "2c9e3a4d08a88225b758b36f9392746373b58da236d6c7dcfb57cb4361989d17", + "vendor/ramsey/collection/src/Exception/NoSuchElementException.php": "80be00ddb841b33b22d1dfc33849aa1c585ec73d303e7953c7747b8a1ed020c5", + "vendor/ramsey/collection/src/Exception/OutOfBoundsException.php": "04fa0b6f913de761d4cbf0fb28ec2b984a93f4e5caab2aeb4a45382b9850c010", + "vendor/ramsey/collection/src/Exception/UnsupportedOperationException.php": "b56f434e1fb713de6de360e6bb058648c3d35de1cfe0e83d22ef88b790e36617", + "vendor/ramsey/collection/src/GenericArray.php": "c0f3e7611e998da43e13377d515af332a1c4a73d31fa6b9f77a86d5ecda5d875", + "vendor/ramsey/collection/src/Map/AbstractMap.php": "12f6172b7ae25329490ea619632604277d637e16bdc966a20870602df4a98cad", + "vendor/ramsey/collection/src/Map/AbstractTypedMap.php": "750ec30eec039f44a68e13f63cfb9cfaea12fd8c87d7f3c64df93e65f5b4b6ab", + "vendor/ramsey/collection/src/Map/AssociativeArrayMap.php": "0775455d7b42092d982cefec53b39c9712255e8cab90b9fd4ea6a99838c6f50c", + "vendor/ramsey/collection/src/Map/MapInterface.php": "2b0ee40607147382c1b33644297c131207df0d58242f45c313a2584e75b85510", + "vendor/ramsey/collection/src/Map/NamedParameterMap.php": "b83e9b97e1299982468c61eae3939f3ee6ea5419cbf1487c89536d38295ec874", + "vendor/ramsey/collection/src/Map/TypedMap.php": "d1aa2e1025bf096e86ae437dfc62dfcf8bff7f56811f885e5233e1766efdd2d5", + "vendor/ramsey/collection/src/Map/TypedMapInterface.php": "4a92567d2cdf0c11f0681bd6087f1a8d48caaa6d05607b81a0d94235e6cf397c", + "vendor/ramsey/collection/src/Queue.php": "02ab1a88018975c905756cea2a8387b6c4b5bdf82bb3edc3fd4aef16cbff6bff", + "vendor/ramsey/collection/src/QueueInterface.php": "de708c5e63e55527fe7a39888df48b3b31d9d3b6681b6dc243d9f780b993f54f", + "vendor/ramsey/collection/src/Set.php": "dc250c2b073c18bd580228c761eea89dd1fdfe8e7ce07e7d3eeae1375faba4b3", + "vendor/ramsey/collection/src/Sort.php": "be125a8913cb53e132dfaba919050f7333c13a1b238af9a5022e98f2c6906841", + "vendor/ramsey/collection/src/Tool/TypeTrait.php": "aec07c7c4fbc60816667872f8ffe7a8b102547608506e6c6a51f0b5be04c637e", + "vendor/ramsey/collection/src/Tool/ValueExtractorTrait.php": "ec9d437381ecba0b84f249299ff039ec4446cad5367e0415e3d5354722ec2e4d", + "vendor/ramsey/collection/src/Tool/ValueToStringTrait.php": "71caeb476b89a9ddd3f5d355ca528c3d571b02e875e6ddf9fa157ce4008d8d46", + "vendor/ramsey/uuid/LICENSE": "9e8bf008e16a9ee5cc2d3bfe60701ec2351a2ddf29e9092275f71441a6d5a167", + "vendor/ramsey/uuid/README.md": "8e758851d7b6e892c2f30f0223cece5f49769b5052f5de41254d804c24787f39", + "vendor/ramsey/uuid/composer.json": "4e93e6efad4418473afbcefc66b3f4c36f785277da4f2225f60ea0b6582acbb6", + "vendor/ramsey/uuid/src/BinaryUtils.php": "e038b14268458528c4fd63586ae64e6ba3b25af3f8f99f368969f94109b238ba", + "vendor/ramsey/uuid/src/Builder/BuilderCollection.php": "c7f57d6c760850b8e001553fa2956d96ccb580f40ab3fbd120574f5a0352049b", + "vendor/ramsey/uuid/src/Builder/DefaultUuidBuilder.php": "0fd5b3c19bebde557440d544e95e19b24dfe757311adb8997a4ad067be4c234d", + "vendor/ramsey/uuid/src/Builder/DegradedUuidBuilder.php": "583876f556ed1ce1997824abc2df93a31350dac107b19f68ba9f4dc113644d94", + "vendor/ramsey/uuid/src/Builder/FallbackBuilder.php": "ee1047d11ed72d5a8f4810d387a4dd7cc8ad413c1c99abecfb1072cf2978a53c", + "vendor/ramsey/uuid/src/Builder/UuidBuilderInterface.php": "949c7378667259b5fcba56418a37ef80896a2843b36e0720d455637a40868687", + "vendor/ramsey/uuid/src/Codec/CodecInterface.php": "2139bad16fe01d1a9ed30bc6a2455e514d3c725f15e85af2798a60c6e9f226b1", + "vendor/ramsey/uuid/src/Codec/GuidStringCodec.php": "eba3aeb1b17bc56b3bf784379a119bb9c15efd9dc924076ae38b889af90d6013", + "vendor/ramsey/uuid/src/Codec/OrderedTimeCodec.php": "2cb40af1a7edea91d5e4c4b46fdfd2082900f74910aedde6a561aab3cf001044", + "vendor/ramsey/uuid/src/Codec/StringCodec.php": "8429c18e27bb5770cd3a85d2b4af9a1aa37d744ee64d98872611898895d6ab2e", + "vendor/ramsey/uuid/src/Codec/TimestampFirstCombCodec.php": "b4f8a1b3334296f6ca50cadee4fd29369bad4622fff53d8d5b983aa507c5e84f", + "vendor/ramsey/uuid/src/Codec/TimestampLastCombCodec.php": "e9506755f6ddd1bae40bb5c35003af5eb5b7c2ae1dc63d819143eea9038b960a", + "vendor/ramsey/uuid/src/Converter/Number/BigNumberConverter.php": "f8189c97c12c43356b441e97688ed7bea2aecba767a5d9faa361ec4487dd314e", + "vendor/ramsey/uuid/src/Converter/Number/DegradedNumberConverter.php": "1b3a935a84f5afb5ad047ecc513f21a80d97654f70c75ddae8495520160ea4f3", + "vendor/ramsey/uuid/src/Converter/Number/GenericNumberConverter.php": "a49a486b3893427a371f259d85d50a09f3ca3b0ef8a7666cc4beb18ea195aa16", + "vendor/ramsey/uuid/src/Converter/NumberConverterInterface.php": "4a8d78a50218f548844adafaef70abcf389e6e43adea2bbaf54b786370b8a722", + "vendor/ramsey/uuid/src/Converter/Time/BigNumberTimeConverter.php": "ec82866e4c20ebf8efaccfa85247e2aa862326d51e01c03bf35da9d9820ae14b", + "vendor/ramsey/uuid/src/Converter/Time/DegradedTimeConverter.php": "83575746765b70cfcfc0154e0c5a513984e92b5e1c05d2f946367e83cff48a83", + "vendor/ramsey/uuid/src/Converter/Time/GenericTimeConverter.php": "f2bb3d9257ea6ed970c62fcd567b20253e3f4ca0e7cbac64bb29683694cee57a", + "vendor/ramsey/uuid/src/Converter/Time/PhpTimeConverter.php": "f100670f5e9a29d4351d89f1c2efc3bffcd776969335cc4207eb3641a1abf2df", + "vendor/ramsey/uuid/src/Converter/Time/UnixTimeConverter.php": "910b4550ce8cdee401091f5d5f27fbc623ca774f6ce7980e65e27e35f1bf4fd8", + "vendor/ramsey/uuid/src/Converter/TimeConverterInterface.php": "aa88692fd729fac69694499bc6b91b5ca6d226e3006884dc049dbdcc20443ef9", + "vendor/ramsey/uuid/src/DegradedUuid.php": "d7ec4eae9e011a9ba285324a708aa382a0e4adfa68dbb08953ea667bdbb4e7b6", + "vendor/ramsey/uuid/src/DeprecatedUuidInterface.php": "908dd51e732ac52830a17d96c3379195c96be598688db829f729b6082727b36b", + "vendor/ramsey/uuid/src/DeprecatedUuidMethodsTrait.php": "dad29339f1944093e857ca6241070dfdb9db459ed3df045898378fada8d98343", + "vendor/ramsey/uuid/src/Exception/BuilderNotFoundException.php": "a497c34cd98ea494ff44cd3543e0c242c54eba890d513acc738b1dd35d60a446", + "vendor/ramsey/uuid/src/Exception/DateTimeException.php": "0362cca26cb6d95087dac39aa3b374d8c38f42de5e8cb9fcd3fc6353a226dbb4", + "vendor/ramsey/uuid/src/Exception/DceSecurityException.php": "d7770d114957379d48b7aed0ca4e22a23b58e4de0f73a887e5515d6edff518d2", + "vendor/ramsey/uuid/src/Exception/InvalidArgumentException.php": "7c28459f04f2ec2291f267a35b478d8d4581bf6d8b385d233dcaec6a1dddba17", + "vendor/ramsey/uuid/src/Exception/InvalidBytesException.php": "7e1b863439597d52a0ff5bb971718b2a33da180be938f83c84f25ccb62386502", + "vendor/ramsey/uuid/src/Exception/InvalidUuidStringException.php": "f81cfb6f874c2afcaf084f9b20a0bfde88924fd18ae9c1c647bb75b4df545ea7", + "vendor/ramsey/uuid/src/Exception/NameException.php": "ae56793dd63d160712d145d29664f46ea45c8622cbd278a7d9e827a0255d492f", + "vendor/ramsey/uuid/src/Exception/NodeException.php": "e1df6350d3ba1d764b8cb7afbc43d6589d6a6e2872f566381ef723ce58555d65", + "vendor/ramsey/uuid/src/Exception/RandomSourceException.php": "41056827ad2b094e81253d29c5a1e2a2be0fa05817d1b06bee5c2f453124779f", + "vendor/ramsey/uuid/src/Exception/TimeSourceException.php": "f5aa7bea332b9d4cbbf6774359ec0d628593580178c89b0330ffa8c0a3205487", + "vendor/ramsey/uuid/src/Exception/UnableToBuildUuidException.php": "b5fea5124a2c542c2df4db4fdf279281c748d18eb5e11997b97f3f0fb1e3b595", + "vendor/ramsey/uuid/src/Exception/UnsupportedOperationException.php": "2dd1f92beabe8b40e1be1a747cd9cfb4fee799a4181412eeb3b963a1abf060a0", + "vendor/ramsey/uuid/src/Exception/UuidExceptionInterface.php": "81536018ae4075572865877241fb10d8c7b83d9b65369ac87a88c7e2d360f8f4", + "vendor/ramsey/uuid/src/FeatureSet.php": "8805f6336d427469a925ca2e156d88b617be50cc00f007f53cf9a55bb3cb0e32", + "vendor/ramsey/uuid/src/Fields/FieldsInterface.php": "e6fae231da1ddd801bcc75bbe969427aabecec02a26398ba348ab263a512eabd", + "vendor/ramsey/uuid/src/Fields/SerializableFieldsTrait.php": "72e9afcdea0f5bdb85e564787b93a3c1b82162b54d95fec2f825d9c88bd6e156", + "vendor/ramsey/uuid/src/Generator/CombGenerator.php": "061ec4474ce825be67a2d25ad8ada33323ee7197187e60144c59c13eecf273e2", + "vendor/ramsey/uuid/src/Generator/DceSecurityGenerator.php": "7576e57b8050067ad31e4141af455fbd145244e04ac9104f7f9e1ffcf683168b", + "vendor/ramsey/uuid/src/Generator/DceSecurityGeneratorInterface.php": "33f82bee54b93d6de923c928d7cb0d63fa2d4f2aa0c8663aeedbbe667ffa180d", + "vendor/ramsey/uuid/src/Generator/DefaultNameGenerator.php": "50efbee4e09fed7fa1d233c24d3188f3126289bea9aee30181aa9beacffe9ca9", + "vendor/ramsey/uuid/src/Generator/DefaultTimeGenerator.php": "10c7d4d4d8f8d35472f785d2cce14c869e1d9418baaf82dd7f33c8ccff7aeeef", + "vendor/ramsey/uuid/src/Generator/NameGeneratorFactory.php": "d051e91db0c7bbbe109d987b3dde36cf208da9b6e0bbaf6071a44566809bd8d9", + "vendor/ramsey/uuid/src/Generator/NameGeneratorInterface.php": "c6c0e3f327ffbbee4b0948580789c0fe23c5e486a92f90c9d0365be5b27fb754", + "vendor/ramsey/uuid/src/Generator/PeclUuidNameGenerator.php": "5022ce8ce3b1f4d84bb4420130e087869ed33f0ec012ba48ca580f2bf6a30c01", + "vendor/ramsey/uuid/src/Generator/PeclUuidRandomGenerator.php": "451c651d2e8fdee7eabd0cf66ab2e523cf53a4cf98c794eb85f92f6dcf6510c8", + "vendor/ramsey/uuid/src/Generator/PeclUuidTimeGenerator.php": "2ffd75fc4909573f13debf002d5dd31d2eac81818b3b9918a18a2bd5ec590bfd", + "vendor/ramsey/uuid/src/Generator/RandomBytesGenerator.php": "387adb37667a241040fb0f06fe640ef3ef79b2219abb2400981cb33e846d90ce", + "vendor/ramsey/uuid/src/Generator/RandomGeneratorFactory.php": "4f27a60d404bce69cf9864828f68da7fe89392019139fb9e025b6f874f92fa26", + "vendor/ramsey/uuid/src/Generator/RandomGeneratorInterface.php": "e292d090a9733bc3c0a220d6cb35e031309b49161d9e7311b532d0924aa47a00", + "vendor/ramsey/uuid/src/Generator/RandomLibAdapter.php": "8a7b2dcc204d04a01330a7a2a12beced1589b6aa675187a600df3377b5d70ba4", + "vendor/ramsey/uuid/src/Generator/TimeGeneratorFactory.php": "154283bb48ae211b11a43baf98025a29a5a8f0a171821989aa7bef63e7d082a2", + "vendor/ramsey/uuid/src/Generator/TimeGeneratorInterface.php": "0b4a198fc6a6abe178aa28a268ce174309139187b3adb017b2cee513f16b8e8d", + "vendor/ramsey/uuid/src/Generator/UnixTimeGenerator.php": "fcead4c0948689f4a5a8896d9f6dbb85be576140462b06cecd9f8c97139fdb31", + "vendor/ramsey/uuid/src/Guid/Fields.php": "393e1947abef67209af1f1023ab7325877861518a1241811ab58a7fea449c120", + "vendor/ramsey/uuid/src/Guid/Guid.php": "cb0788044e02d783c2708eb9847196cce87e8246249d5fc97853b178ecd29067", + "vendor/ramsey/uuid/src/Guid/GuidBuilder.php": "66abc42e2644b56cd327201f52de1b9d05f7b70535b2d0db96d3e026bdf2c074", + "vendor/ramsey/uuid/src/Lazy/LazyUuidFromString.php": "777ffb0c61036667d0424fb049cc8b44573ac39a939e00d252d68cbf3798d129", + "vendor/ramsey/uuid/src/Math/BrickMathCalculator.php": "f588bfcbaee8a53fb96bb220b4cd9f227dfff9ff6c5ffd388d040145d37ac659", + "vendor/ramsey/uuid/src/Math/BrickMathRoundingMode.php": "7a7474300ea0baf3571535ae229d36c0059b52746f4595f726d5cedbfb1bc25b", + "vendor/ramsey/uuid/src/Math/CalculatorInterface.php": "eaef653ad1b971b7bd88ee0480cb70976af79a3a48c744b48857d73b156f3a69", + "vendor/ramsey/uuid/src/Math/RoundingMode.php": "c1d38a6d1b884bdb69d47bdb80918a8412f0700c80593a3f7fe8406dc681bfb1", + "vendor/ramsey/uuid/src/Nonstandard/Fields.php": "709f3063e75716570da9622a5aa8063a178cf6a12e2942b4b4ab2fd54bb853ad", + "vendor/ramsey/uuid/src/Nonstandard/Uuid.php": "c13bf4ac36cc81d644600965123fd25a6e00e16f435ca08841ff82a38b79d292", + "vendor/ramsey/uuid/src/Nonstandard/UuidBuilder.php": "7a6619ea410d1cd5f3262fc003cec962189d85a49074aef390a5cbee7788b2da", + "vendor/ramsey/uuid/src/Nonstandard/UuidV6.php": "6027aae387030282c9d5a7f3b4d10daf2100aa405a9f066910205e380e08390e", + "vendor/ramsey/uuid/src/Provider/Dce/SystemDceSecurityProvider.php": "d42971913ddf90c2768026fa03d224efe9b5d5f7c9dd1270dad7290dcd2363eb", + "vendor/ramsey/uuid/src/Provider/DceSecurityProviderInterface.php": "0297aba78d4f765e4f9e20130fc45e85a8149418dcb244cdfc983689eba7c68b", + "vendor/ramsey/uuid/src/Provider/Node/FallbackNodeProvider.php": "a78637a90544f58ae584afdc8c21cc2a3bba2bf3c39370ce438fa77231b76305", + "vendor/ramsey/uuid/src/Provider/Node/NodeProviderCollection.php": "3360cd10b8b2f09ef07e32681b9bfe8b5ecb3b14d7aa40d177feaa19c964d410", + "vendor/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php": "628c1a501ba92243522bcba0a016c65b4f91ba2702fbbb1fa018b2b47291a2e4", + "vendor/ramsey/uuid/src/Provider/Node/StaticNodeProvider.php": "d43f1a378fd3e41fcedd223d0b06fc0c8e42eaee23796c6fcb6ea95566d1fa12", + "vendor/ramsey/uuid/src/Provider/Node/SystemNodeProvider.php": "03164a2f89ef65f35a419920dd835e6dffd15ef1c27ca760d7372e8eb7028463", + "vendor/ramsey/uuid/src/Provider/NodeProviderInterface.php": "eae93a71ba3438d993c8281f9158ba24d6c9357ae8a9b74f0b7a4c4a10ffea3f", + "vendor/ramsey/uuid/src/Provider/Time/FixedTimeProvider.php": "33110ea1571b981efae2d9c5a728ab5e77e5900692b9107e92b337345e87d702", + "vendor/ramsey/uuid/src/Provider/Time/SystemTimeProvider.php": "bc86e811a7a4028a9b9a934bfc80a8e2813569d4b18e18326a588539060534cb", + "vendor/ramsey/uuid/src/Provider/TimeProviderInterface.php": "3431c0df2bc16f78dd4d18a1ea11ca10dd06c63bb9787b1e56ae4b160cb3103f", + "vendor/ramsey/uuid/src/Rfc4122/Fields.php": "56678f8aabf7ff8dd261e4ac857c0269a52b3334f847167528456666f3c2d06f", + "vendor/ramsey/uuid/src/Rfc4122/FieldsInterface.php": "053bfd44ac3fd4812e47b0a2a97588441769488249aa359e9206f402f5afc732", + "vendor/ramsey/uuid/src/Rfc4122/MaxTrait.php": "c85bbf39b4da1ff43b13f0dd62a6295c15f0bdaae6ecd4abb86c78fae80e74e2", + "vendor/ramsey/uuid/src/Rfc4122/MaxUuid.php": "34455d769fc02fde55afdaf5edbacf9f93cd0bf89c5eeab252a7f7b2549dbe70", + "vendor/ramsey/uuid/src/Rfc4122/NilTrait.php": "8ce1c77e2605656e9725053b65e98f95a3ae6ff70be649f9a4a955d9f6ffe759", + "vendor/ramsey/uuid/src/Rfc4122/NilUuid.php": "57b690e08078b42e93ceb6061c7f87745002964233d8d27462d2be9493f46d54", + "vendor/ramsey/uuid/src/Rfc4122/TimeTrait.php": "4658c0f0735b6d1badae86fe3799e20ce95731cc4688e77d271aa14391a2d4f6", + "vendor/ramsey/uuid/src/Rfc4122/UuidBuilder.php": "b0ef75b90e984f4a1c49924d226f7c074d76004637ab1d5b09dcccc8d759f32a", + "vendor/ramsey/uuid/src/Rfc4122/UuidInterface.php": "95e6c8045ccd4dd0da91d669da470e20d39f3f8da1e6dacea6ff7b2d8364aa6c", + "vendor/ramsey/uuid/src/Rfc4122/UuidV1.php": "68ffa1c6167c127137056e5db9d9e3ca14f382ab56e53b050bcb7b559a3507d8", + "vendor/ramsey/uuid/src/Rfc4122/UuidV2.php": "1114b9721ef57a9a5a6f5313917840881b07e584bdfb33b81ebe947dcb2e00d6", + "vendor/ramsey/uuid/src/Rfc4122/UuidV3.php": "26d1100255a216bd447439ecdfdd0e98260fb819573e565b0b0db58a095501c2", + "vendor/ramsey/uuid/src/Rfc4122/UuidV4.php": "3a54116750e664dc958f6c74000af4b84c64109abad8d756fba8f75328ecfffb", + "vendor/ramsey/uuid/src/Rfc4122/UuidV5.php": "deacfedabb203b6c2573d5fbbea5e768cc1d2dfb5549eebb6e83fdf976950993", + "vendor/ramsey/uuid/src/Rfc4122/UuidV6.php": "2fdc6a3965e843828637dec9ae4071b1d632ed84fba75bdd18ef42a1175f6359", + "vendor/ramsey/uuid/src/Rfc4122/UuidV7.php": "39158ac3171fb8859356abbbc717cfb94b835ac4d65f75fec6e53b006cb5b788", + "vendor/ramsey/uuid/src/Rfc4122/UuidV8.php": "ef98221efefd105c2cc3f19bff652a41fd66cbca92041c7206a1c1ce061f6b7f", + "vendor/ramsey/uuid/src/Rfc4122/Validator.php": "24d288614dba8cf84558f9defbe034d867f96e2696d61388ab9ad5f74a0b436b", + "vendor/ramsey/uuid/src/Rfc4122/VariantTrait.php": "b27010f9d821a29a05ed862d7a63767876ad9a1cb582fc420a74db574a11caf8", + "vendor/ramsey/uuid/src/Rfc4122/VersionTrait.php": "d9c670705c85621dc564f917178c25a7e0b353f60db715c87ad73c6f284946da", + "vendor/ramsey/uuid/src/Type/Decimal.php": "73e933b9b0ef8034800b40a71cd10435be636346a955589372821c84233a8596", + "vendor/ramsey/uuid/src/Type/Hexadecimal.php": "520ba4abc2988863b5c50b4d46f092130421e90964c9becd7fcc492cb68c99a4", + "vendor/ramsey/uuid/src/Type/Integer.php": "0d12c32c1d66659f9c2e7f1f4ccc76575e659f75a9e79aee7e7e144fd410797b", + "vendor/ramsey/uuid/src/Type/NumberInterface.php": "8b2884d6053ad08bcf804a84f16c15cb8aeb9a9b9b82dd0c97a71c750fd40313", + "vendor/ramsey/uuid/src/Type/Time.php": "81d171e1c12533fe5c0511beb6f4890a366a85cfb61c2d0cc715e3057a756cc0", + "vendor/ramsey/uuid/src/Type/TypeInterface.php": "a02f3836bda561293a4fd4fc8bb3137f24b271a67d655676345560c57030eb80", + "vendor/ramsey/uuid/src/Uuid.php": "7dff4440eb7277d89698a2c27510b03878e43b0559d7fce638f7625416cb68a0", + "vendor/ramsey/uuid/src/UuidFactory.php": "d7fffc1267c2f3a09c73184b639c6a0e7719f82ba32bf22da4b0bcb4b6b89c55", + "vendor/ramsey/uuid/src/UuidFactoryInterface.php": "73188ea4fcbb3d7a1f76ed7fe285a0d534d4635e3910d47ec41afdba9f93ba6e", + "vendor/ramsey/uuid/src/UuidInterface.php": "35ee9abfe28406490ad097f874fc12b2e1cb6e1691ce6c9afaa7b640f96b2268", + "vendor/ramsey/uuid/src/Validator/GenericValidator.php": "4ba0eb86b9d1a9c1856b96b4f37dbfede1d80413dc38e32eeb432929444dbd70", + "vendor/ramsey/uuid/src/Validator/ValidatorInterface.php": "104321e88cea66e4944add6d6ccae6a5b4cf5d18c86c2a0a3362c5139fd6d3c4", + "vendor/ramsey/uuid/src/functions.php": "ca402a0577a7b3235e22fbc2bd6d6d5282900b039debb13a9f9400390668f45e", + "vendor/revolt/event-loop/LICENSE": "54e35a998b20dce201850275dd1c66c1685489972ecee9410600b8186e630853", + "vendor/revolt/event-loop/SECURITY.md": "7d80e69dd4c54f02ac0c41784fe222398e3552f179c29b3cc811e2b79d1257b0", + "vendor/revolt/event-loop/composer.json": "f8635bd03d8930f007ebf5f0d681975dfa7f21badc8be19a12730b5c7233d7c6", + "vendor/revolt/event-loop/src/EventLoop.php": "aa7b8c8d5bc79d35ec4d3931fef54bd7e323cc188d54ba871f189b363a51307c", + "vendor/revolt/event-loop/src/EventLoop/CallbackType.php": "673db71f9aceb0fc9a767c703677cc3269b99f64fc31fafde615ae6c76064683", + "vendor/revolt/event-loop/src/EventLoop/Driver.php": "6b3b25cfc83d888794684e393011c4ab6c2450c5b9b0af6e0637b28b086dff0a", + "vendor/revolt/event-loop/src/EventLoop/Driver/EvDriver.php": "688d3a6b013e75a36aac6c9ea679d077d20878c85f227182ada85a9d9def6593", + "vendor/revolt/event-loop/src/EventLoop/Driver/EventDriver.php": "0cd4013a85ad62eebbfaab757e106d1dd9fb0adebc5982088f6a8c9f5cb133d5", + "vendor/revolt/event-loop/src/EventLoop/Driver/StreamSelectDriver.php": "880231f3bb9f4bc0a637bdc9b2a7ed31ecba8c6345ed25bbc26a1156dcda8883", + "vendor/revolt/event-loop/src/EventLoop/Driver/TracingDriver.php": "91187da90826995e7787e66f9735fc77bf9fd4287c90d6ddb71ee8bf2967eab8", + "vendor/revolt/event-loop/src/EventLoop/Driver/UvDriver.php": "2d49671eaf3a6e6a68b99f8e57d0ea0c77ecac4373cbc405bf0de02bc842bdd4", + "vendor/revolt/event-loop/src/EventLoop/DriverFactory.php": "196c22dd3646b41bd2f049038384b2ff512fa891c5b495e6d81844ba1580f533", + "vendor/revolt/event-loop/src/EventLoop/FiberLocal.php": "301cb2fd41f21349b368a7d3fc09cb0dd6e13936fde5959bbd62455505eac01d", + "vendor/revolt/event-loop/src/EventLoop/Internal/AbstractDriver.php": "fb4b4ab70490c0bc4716421d3dfeb96ba3a227c4b1f142fe7e7cce0440fd2667", + "vendor/revolt/event-loop/src/EventLoop/Internal/ClosureHelper.php": "4de60aec5ca61c9727326fabfd7d3144fbe5c688dcf6de9f9c9ceec0c7289652", + "vendor/revolt/event-loop/src/EventLoop/Internal/DeferCallback.php": "a0a886eabfb82011914ea66f428de467eeab3c8c44633affd7d08382a0c10c7f", + "vendor/revolt/event-loop/src/EventLoop/Internal/DriverCallback.php": "8f9684dc3de3da4a4d7fa4d95e349ba39d793ade3a02168e068b75d7e63b05d0", + "vendor/revolt/event-loop/src/EventLoop/Internal/DriverSuspension.php": "91ffcfca18246b4e8c85b8dff0d099c3cc8ec353ae5acbd704ff5564731a575e", + "vendor/revolt/event-loop/src/EventLoop/Internal/SignalCallback.php": "df71d46d74386dfe2e45c1193be7ed4ff58e6efa817d61ef63aee6f43c36fcff", + "vendor/revolt/event-loop/src/EventLoop/Internal/StreamCallback.php": "66f6bec931f9d28634a35bdca3dc4851fffbf2ac8a5314659105aa7d5719b343", + "vendor/revolt/event-loop/src/EventLoop/Internal/StreamReadableCallback.php": "b96ec21fe9f22a65f991a9ca3da5cf3e923df3a53173a521eb4530bcea3fd3ea", + "vendor/revolt/event-loop/src/EventLoop/Internal/StreamWritableCallback.php": "50f63a166826b0abda1c253efe6596951361e2f6239010ec38b589ce1610c3d9", + "vendor/revolt/event-loop/src/EventLoop/Internal/TimerCallback.php": "5e1b1a8b171df54062005932b36785247767ab9cf28cfa721303ba739915477f", + "vendor/revolt/event-loop/src/EventLoop/Internal/TimerQueue.php": "43ae3c33373100d7f95698605ebb2ff1e6951d2bd212983bd782ca7c12582d35", + "vendor/revolt/event-loop/src/EventLoop/InvalidCallbackError.php": "d5427bf27ff4983aeb15a85d35ab7fbe19739d47cee1f4ffafe0d53f98aaffe1", + "vendor/revolt/event-loop/src/EventLoop/Suspension.php": "4a9f600da1e3eca91d195cae535196119d188955cd8c93e7d1fdf834fdeff1ad", + "vendor/revolt/event-loop/src/EventLoop/UncaughtThrowable.php": "437d5231cd2e73c0501eea696008a2458b8ac704fd97b385164dbbc8e1871eff", + "vendor/revolt/event-loop/src/EventLoop/UnsupportedFeatureException.php": "a1c60be19aba7e46dc04fd0e541939d3f467e35e4460499401bf087705c6b639", + "vendor/symfony/polyfill-iconv/Iconv.php": "0e87807cd547622f6f54f973632a0b84762da67d839b4ef14a060177bd8abac8", + "vendor/symfony/polyfill-iconv/LICENSE": "eaa5d6e59ff1d5322ae36d3ab9124460df72d2d0c8af60a99222e8a90dcbdf31", + "vendor/symfony/polyfill-iconv/README.md": "e5dda08da8a299847725036682e218cb391a788496406be7169ce50d2d8fb8c5", + "vendor/symfony/polyfill-iconv/Resources/charset/from.big5.php": "a2e54d5b1199a4ba555ae09e44172471caedbd6ede8b159f085bac752a76c30f", + "vendor/symfony/polyfill-iconv/Resources/charset/from.cp037.php": "07c8519aa6579eabfb0b55682f91aec7c76ca46cf05e3541df75a92db3da16ac", + "vendor/symfony/polyfill-iconv/Resources/charset/from.cp1006.php": "4c9a5da01e3719b5a868826ae9aed06554ff6ecaf18fe481779572923c1e332d", + "vendor/symfony/polyfill-iconv/Resources/charset/from.cp1026.php": "03271aa387171b8cd1c62f812772f7abb79ba6a145a9c9acd5dfc8b3f661ab7a", + "vendor/symfony/polyfill-iconv/Resources/charset/from.cp424.php": "5e3f4cff634e72edde90121dcf5b12499b1771118d6377892f183db8d596a7ca", + "vendor/symfony/polyfill-iconv/Resources/charset/from.cp437.php": "99d3969c5719cddb763bf73613772482a41bf908284b11bd628c8c90990915e1", + "vendor/symfony/polyfill-iconv/Resources/charset/from.cp500.php": "3e6743bcce162898dab176f9e6c4b0498c9981548a98bc2f44ad34a80b022fba", + "vendor/symfony/polyfill-iconv/Resources/charset/from.cp737.php": "abd4075e74e3228c4e75d6be2b89a3a576c90e708cbb676ccd4d72b2047e1819", + "vendor/symfony/polyfill-iconv/Resources/charset/from.cp775.php": "ddac5f0103602282537bd66b74d117ba0192449848f470f1372ab7eb9ca0bdff", + "vendor/symfony/polyfill-iconv/Resources/charset/from.cp850.php": "75fd178d753116e2f02d1ff883ed189e4e647414dd93d7a04f8e6a5e6c319379", + "vendor/symfony/polyfill-iconv/Resources/charset/from.cp852.php": "c4159f3798ce5fe94fe171679821dc451c6d539fd2760dfe7969516111aea0e3", + "vendor/symfony/polyfill-iconv/Resources/charset/from.cp855.php": "1d654f9b00a81be96a7b5277ade1d8e91f4ff8feda5847dfeb8392c6b469ba94", + "vendor/symfony/polyfill-iconv/Resources/charset/from.cp856.php": "44b8524a6b48962953637f4faee1f7d9c13df267b9acd5354a22c6bad4462f0c", + "vendor/symfony/polyfill-iconv/Resources/charset/from.cp857.php": "c24939c148d6f338b6c9a5b1a2381d243106f704112d2ec95e31c22eecfa0599", + "vendor/symfony/polyfill-iconv/Resources/charset/from.cp860.php": "a8240150074937ab593151d4161e71297a3ee9280ef38796c427fcfa546bfb23", + "vendor/symfony/polyfill-iconv/Resources/charset/from.cp861.php": "293b764ca8c60ac0bca1c05af5d8b6e15f0bcf32d8e1e22c632fb9e08602ceda", + "vendor/symfony/polyfill-iconv/Resources/charset/from.cp862.php": "943b1c6e3663bd8948955592a5fa8e52701cf5f8e40109c07ab443b0a1dcef13", + "vendor/symfony/polyfill-iconv/Resources/charset/from.cp863.php": "b60491d8079efbe3f6e5a038c595fc5086b4674105233e2cb50bfbb428d04d98", + "vendor/symfony/polyfill-iconv/Resources/charset/from.cp864.php": "b1e7867c2a47398923abeecaaf06d28b5e332272c399e40bf6ce8d7f8c774a11", + "vendor/symfony/polyfill-iconv/Resources/charset/from.cp865.php": "8f934278fe3ba0ea5cec0fdbf8edd6660e01a5ff40e8f8b00e216f97c91f7868", + "vendor/symfony/polyfill-iconv/Resources/charset/from.cp866.php": "3c08b97af05c5d3944a7d975da138c3eba9c996eb28b0b893b064af4bbaf599d", + "vendor/symfony/polyfill-iconv/Resources/charset/from.cp869.php": "c378a7217e1ce53a5bda3bbcd128c087f5db171a37a102a8a49c82916a779bc3", + "vendor/symfony/polyfill-iconv/Resources/charset/from.cp874.php": "0d8dee582d275f8489c13eb6bfbbb07fefb99a3a429a99b1cb03cf0e0254b864", + "vendor/symfony/polyfill-iconv/Resources/charset/from.cp875.php": "d5f67cf4fa0057692b223c8298d6b2cab4bf07e65bfeb57b20a06fd7f7be4b1e", + "vendor/symfony/polyfill-iconv/Resources/charset/from.cp932.php": "880e65e55e799ed6eaaa2458580955670934967be00460aa2692517e693d8c59", + "vendor/symfony/polyfill-iconv/Resources/charset/from.cp936.php": "4879962a3ba53a9e8b4af0b1e2c0b307e33650745e174b0087bf4b7989a0e986", + "vendor/symfony/polyfill-iconv/Resources/charset/from.cp949.php": "4b3e9c56d6885960b74c24db759b8c16aabdf7c5d1a3b241c357431a4c27b0e9", + "vendor/symfony/polyfill-iconv/Resources/charset/from.cp950.php": "70b95b8f1ec045bedea1ac0f7c6d9bd86fbaedf92a9c4216e8eccb7707749205", + "vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-1.php": "1c4f44dffb2af1e6f8cae040a050cb3c22b45e5425a8e79e1ddaa4706a937d3d", + "vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-10.php": "a109549dbcc4ea58944fd08e9ec7800d34a6e7249a64d4d767db60e8f64f17d3", + "vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-11.php": "4d110f9364ca12a39113a246284a1735981ec235c50fb410a00dbff938179a1b", + "vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-13.php": "30edec9dd443eb5578e5e269f1dde92821a0765b7ff5a4bc7b64b1f59c00583a", + "vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-14.php": "502ce563928741ef4a59ccc067b33b65030ebaad5b8e7e9ccf6bd96d4695454f", + "vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-15.php": "14f5b987793be6502531a04f8efbacef8bec4e4d70d57eb7ff973e5defa63e24", + "vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-16.php": "4792714fc766847764abd2faf88c5d29d38a1fc46ecfab28e24a3460abcc1c9d", + "vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-2.php": "9d51bacfaed9f883ea37b020beea0cfcdae70cfa697a2294bc693f35dd37dc4e", + "vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-3.php": "f8478a18e8e8009c113f2762df311185807066d9e138605404dec7a0552ebac9", + "vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-4.php": "20d490ca9c89e71e06d0fa16a39b8995a719fa05e195784cf8c6e6e216a59ba0", + "vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-5.php": "302346adc98637175665bcb9bdc404390eee56317e8e89ac11b8336cb39c88bb", + "vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-6.php": "6e6ba6caedc9b2472f6ec258916fa600b80940d70c758cd89bbca48f4a902428", + "vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-7.php": "fccf17833e1537c2e4c77eec388080a361a79cca52ec380dea56d2e1a668efa8", + "vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-8.php": "c01761873f234597481edff8b989718877bc8bbd5431b3580f406f2f4f5c640a", + "vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-9.php": "17c1d08f71f657ec271258379a78d32167bed76af16fa42f6c9741ea0b28bde4", + "vendor/symfony/polyfill-iconv/Resources/charset/from.koi8-r.php": "5c701f27ed0bc4c26a3a0a7f8b1a3a8a30590061c647f33aeaeedc4ee87ad17b", + "vendor/symfony/polyfill-iconv/Resources/charset/from.koi8-u.php": "64e5e93b140caf62ba8dc2a6dc7ff1c3f5a810d4c5b2c23b8fa79037aecec149", + "vendor/symfony/polyfill-iconv/Resources/charset/from.us-ascii.php": "c735b6ccbcf3520b78172390cca8e7a174605ee76424b3afd94823d64cacba05", + "vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1250.php": "1521022f81b184fc69c2944af2aa811b93dc303aaf4b4e6b2aaf072230a34f90", + "vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1251.php": "aec8fa4bbb5d0d3e4b742eac51d76c7c0a1dce3bb224dcadfe225d842ddb6355", + "vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1252.php": "d90e22dd54c8926244b3d8d81920a7ef78b46dfa1f2d9ac4a98114bd71736090", + "vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1253.php": "d659c7a9f7924dc423124fa29da9484d6e692dc7bdaff7673f1022f572c518e7", + "vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1254.php": "c56babe54f9c9b627266cf703e23da067b713ca7b618ca4828e4b3de8abe3cc7", + "vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1255.php": "f50b318e2689412d409b680f960f7b4ff93301c3e2f3f45363f4100cd9208982", + "vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1256.php": "66d4b1f4a2a34304fd115186ad2eb9ca5d456077d807385a8a7fb0f892ec4793", + "vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1257.php": "111f7e8c22feee487326a7a875d4f579e8c53d75e4dd17298abb553bc63dace1", + "vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1258.php": "a1693c864ad036e17314a3283f1536affab89d8bc21e3b9fdd48fbb2e1ecefe3", + "vendor/symfony/polyfill-iconv/Resources/charset/translit.php": "866be895b330118132b78fc8d21b84c4a1ef48ad57619195d1bf96bc624f2e45", + "vendor/symfony/polyfill-iconv/bootstrap.php": "6c2e94b692ef55e4aa08e15c9ecf43c647055804825159b2c0ecd17e43474f7f", + "vendor/symfony/polyfill-iconv/bootstrap80.php": "22dcfcf61611d95f8f097f631f2ab56b66bf1050b3bb75ea867e653055b1810e", + "vendor/symfony/polyfill-iconv/composer.json": "bcaa2f70b1a209f0a473932f64cf5b7397661cf529a71935cb47630ffc224f91", + "vendor/symfony/polyfill-mbstring/LICENSE": "eaa5d6e59ff1d5322ae36d3ab9124460df72d2d0c8af60a99222e8a90dcbdf31", + "vendor/symfony/polyfill-mbstring/Mbstring.php": "33e1210305586da1de675ae40b5f2b54e8ee4e7c66ef5871f9a9f02ef893e136", + "vendor/symfony/polyfill-mbstring/README.md": "7686ab9250b91f0b706d6a5aac4e6bbf4b8865ec323bbb420343f19e98d91d14", + "vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php": "99cea898c03847d05e1c143cf64183c57749b93f578f5bfcd856f89d700b9b85", + "vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php": "df2b1879ae0f74d86996a4790de37b534c1b406002930550bc087885ae54f0ea", + "vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php": "4eef657adbee39f7badd695b1d60b152b047385966a98b6d8d411554573ec596", + "vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php": "4ae4778ee941291582b801bcddeaac401068e0e5dde7357ef06f9e882131b026", + "vendor/symfony/polyfill-mbstring/bootstrap.php": "0449da72338523c51270ddfe84447cd16fc110b7d4fae2bee1c2790d9f113fb0", + "vendor/symfony/polyfill-mbstring/bootstrap72.php": "8a45e926381803b688b3961032805f5ae317e953af1a980e0e0f63db5e3babfd", + "vendor/symfony/polyfill-mbstring/bootstrap80.php": "e998cba06760c8e191f47c70b7017164e7434ab93eaabbb8bdfe94943c450c6b", + "vendor/symfony/polyfill-mbstring/composer.json": "8ccd5687a056c76aa1c488e520302b441e31be3ef16482c2e35778b035fb1c09", + "vendor/symfony/polyfill-php82/LICENSE": "6439cc1bba78b7de0c1905b0643679a5a7768ba020a090370d7742030303c6b2", + "vendor/symfony/polyfill-php82/NoDynamicProperties.php": "e66b80d2383ebfe2e0cd285034e9f6b78db9df52622c39e99635ddc4b228c2db", + "vendor/symfony/polyfill-php82/Php82.php": "e82d07de5fdead31d3c39a09dcc4b580014958cf9b2044a6224d0c97e5e20872", + "vendor/symfony/polyfill-php82/README.md": "88706eac6ee9a8c79b6d7e3770b65ad2d23cd1c06728a70b1856ff4627be8934", + "vendor/symfony/polyfill-php82/Random/Engine/Secure.php": "c8efdde9b2103a1d8f2b905d67ead3330bcc549441adff010432467de49c4844", + "vendor/symfony/polyfill-php82/Resources/stubs/AllowDynamicProperties.php": "b388ddc75efe859f68d9df402775d7fd8d0580fc73ab86e65e64a287b40a5f32", + "vendor/symfony/polyfill-php82/Resources/stubs/Random/BrokenRandomEngineError.php": "e3aa73232ae59a5069a8eaa89a4bb71e047a7f67754e2bf1504bfa424d4a1e53", + "vendor/symfony/polyfill-php82/Resources/stubs/Random/CryptoSafeEngine.php": "3c02f292fe3fc4071dec60a77f8312cb8328274e9b6db43383cee30d0aca13c7", + "vendor/symfony/polyfill-php82/Resources/stubs/Random/Engine.php": "d636ca4bdee1c209005f89146d710095aa1c96fd03e9966211db2225c12c0426", + "vendor/symfony/polyfill-php82/Resources/stubs/Random/Engine/Secure.php": "16b9a4b1cc59493ed3e2102c9ac4a62c8141d0a39432730e2c79c9d43accac71", + "vendor/symfony/polyfill-php82/Resources/stubs/Random/RandomError.php": "d56b18ac7eb21b24f7a5ae53e5bcb65548b1dbbd65d2814ac58058091ca57d47", + "vendor/symfony/polyfill-php82/Resources/stubs/Random/RandomException.php": "07a8e6e6332c255119545acbe536f3a921f5bd13e5111474af9982f1876e3611", + "vendor/symfony/polyfill-php82/Resources/stubs/SensitiveParameter.php": "a297879125a3b9d2cd4520a383ef8726aea3f74b09ff008e50378ae91017acf9", + "vendor/symfony/polyfill-php82/Resources/stubs/SensitiveParameterValue.php": "ddbbb97bd76ead427bc23e9dee873309c896fb3f74c1b5086cc1128b7b93bf56", + "vendor/symfony/polyfill-php82/SensitiveParameterValue.php": "b3940d6534d46f3b5b96f3bffecbfb7098512f3585c958f26352f12f267ea3c2", + "vendor/symfony/polyfill-php82/bootstrap.php": "f4a5641764aaa41b558a156a334c49ad6aaf94b15462323dfe64ff461b89516a", + "vendor/symfony/polyfill-php82/composer.json": "66a184e065d6e5d5f42f5f285f66063806438a88892cf571a86b8318d54bcaf7", + "vendor/symfony/polyfill-php83/LICENSE": "6439cc1bba78b7de0c1905b0643679a5a7768ba020a090370d7742030303c6b2", + "vendor/symfony/polyfill-php83/Php83.php": "18aac07ebd7fd272d0488f80b489ab1b6e2dee1b75b430ea2acc28c4f72b52af", + "vendor/symfony/polyfill-php83/README.md": "f650c27b908d922ae5a7637f1d1c06eed534eef9edd2af14b669dc1c125f28c8", + "vendor/symfony/polyfill-php83/Resources/stubs/DateError.php": "72e1fffeddc492f3726fadb4bf338dea6d9d18f5f7cb64c16b292bbc14d53778", + "vendor/symfony/polyfill-php83/Resources/stubs/DateException.php": "4229e2f87de442cab70d186931ad88cd68b9027a385834aadc81bae88524a319", + "vendor/symfony/polyfill-php83/Resources/stubs/DateInvalidOperationException.php": "96ef44367f42f7feb3488d29e2ac1f3382647c04a2084d1451ad18043c6b5add", + "vendor/symfony/polyfill-php83/Resources/stubs/DateInvalidTimeZoneException.php": "519c9a52e7d657aa25e76944a408577a0ff615b88318dfde16479139c515d109", + "vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedIntervalStringException.php": "3f669907751c517d477c290e872a5ef0f4148cf76493137afe13a3af1c2486a2", + "vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedPeriodStringException.php": "8af794f98ff2ab1577ce94c4300e7b314237eb2ad0b09d49b7f71bb82d5d5cb7", + "vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedStringException.php": "a4bac703b6b7ceed48bb8b082dddd061111420eab527eb45ca9e5908b2a94e86", + "vendor/symfony/polyfill-php83/Resources/stubs/DateObjectError.php": "4f7578373b5f56a25628da4d80c58fe923ba5195f8e8d4e407a58d3613e39540", + "vendor/symfony/polyfill-php83/Resources/stubs/DateRangeError.php": "1728ade479eca502b4169314895d7423b892810ef51518b9acccc41498a807c2", + "vendor/symfony/polyfill-php83/Resources/stubs/Override.php": "57d1627659933c6d4d44c4ddfc8d7e07d2452645a414e387221d5572af9e6f05", + "vendor/symfony/polyfill-php83/Resources/stubs/SQLite3Exception.php": "b0054f6ff0ce2eab047cd5c4cfe0784f94c748e878573b8b3818283650f2137a", + "vendor/symfony/polyfill-php83/bootstrap.php": "c1a38e6aeea87046fb4d04d5e5aeea5d4287faa995b1701fc76a1f7694af5476", + "vendor/symfony/polyfill-php83/bootstrap72.php": "23e8a4f5857612665b0a40ca8a8c4b414aa8f537525f20e248091a69ce5a7d36", + "vendor/symfony/polyfill-php83/bootstrap81.php": "8f7a103ff036ce07984a6b8112a25efbe1b8504244421ab710f0436b6d95e88b", + "vendor/symfony/polyfill-php83/composer.json": "06fa868d6ffe7965e5aacec69da00cf458dfa7e0fe7667c4123db0d4b669771d", + "vendor/symfony/polyfill-php84/LICENSE": "db54a3771e71cada8e5a5dd11e5533e985117354057fc268129898ef415683b1", + "vendor/symfony/polyfill-php84/Php84.php": "bc2bf660cbaf678cb853f3be8b25479319eb0e77e371511c51a707a4a41e944c", + "vendor/symfony/polyfill-php84/README.md": "a2c2675175318d0306c59769a8e715533dac36fb2b8abac768353bc2f3ba57c6", + "vendor/symfony/polyfill-php84/Resources/Deprecated.php": "5b039a85d17aff09e861a2331067b5d324c21343973182e332fb58052ab73e3a", + "vendor/symfony/polyfill-php84/Resources/RoundingMode.php": "72cf3fe4300e2015bfa76b72c3db658ba3a86df67ef096a10a9eade6222f8117", + "vendor/symfony/polyfill-php84/Resources/stubs/Deprecated.php": "587416401de3fe7a69ffc433978de9f2accc2c6713f394f8bc1e0e663b136604", + "vendor/symfony/polyfill-php84/Resources/stubs/Pdo/Dblib.php": "91f17a381b58d24355f4345cb6744304f5859e05995076810b78b0831cb65b1b", + "vendor/symfony/polyfill-php84/Resources/stubs/Pdo/Firebird.php": "db2e2ac02fbfb842944dd161be641f75bb4fba8dd121c40c8b43b236bc3e2d60", + "vendor/symfony/polyfill-php84/Resources/stubs/Pdo/Mysql.php": "4bdccbaeda22ade3329ef5319c152e0db285bc8f5f9eb0d86664bfb26e350e21", + "vendor/symfony/polyfill-php84/Resources/stubs/Pdo/Odbc.php": "8bb85a862cee3887ea00d9a1af48a7c839b1308b6f95d305a6a3fc01192edd0f", + "vendor/symfony/polyfill-php84/Resources/stubs/Pdo/Pgsql.php": "4f6cc16d5b3c69f997c5a8af5487c8c3d402dda60490ef8712f6948d2906330c", + "vendor/symfony/polyfill-php84/Resources/stubs/Pdo/Sqlite.php": "abe9b43b18d3de78bebb4267de537c1b57f544bb7c195150565ba87d51dc63e3", + "vendor/symfony/polyfill-php84/Resources/stubs/ReflectionConstant.php": "83e99e6cd3650f4887f3631c326266c0c2cff1a808d0facda82e04d77593b9d0", + "vendor/symfony/polyfill-php84/Resources/stubs/RoundingMode.php": "9313c0b4390b2e30d0f7874a985f32159c0ca9ec7bf05c3d99172f62cbd4965d", + "vendor/symfony/polyfill-php84/bootstrap.php": "494225cfe35653d40daac39fff87b019ecbfcbb22333580e60b389363290b9c3", + "vendor/symfony/polyfill-php84/bootstrap72.php": "e3e2a9c54b5e910a2fee89d00ba15d62341d989aacc21bbbbe77b8485b5ba452", + "vendor/symfony/polyfill-php84/bootstrap82.php": "ff09c1d9b4bce4017fdd0ff8a6b3f504bd09eab5bfeb7d9d1de583f2abc3387e", + "vendor/symfony/polyfill-php84/composer.json": "d6dff099b0f483caf1e6de48756d618709f20d8872b128dd3e8840f2c5e5f5c2", + "vendor/symfony/polyfill-php85/LICENSE": "56e762e45c7d6d7873c19a5dac018ca43f5f9a881f8cd9100d1d08d0182b9544", + "vendor/symfony/polyfill-php85/Php85.php": "a11a02e4175d7c32ef649c08212fc8edcfdee7b1326ba7ccea39240a1cda7fee", + "vendor/symfony/polyfill-php85/README.md": "aa4e49a6ca9871a040cb39394c24b46d64076b3d55212bad1d277e3513835790", + "vendor/symfony/polyfill-php85/Resources/stubs/DelayedTargetValidation.php": "81f8d3a83a9c5cea88a3fbd7c3680d364c5cf9927df81d5e98dc08d75ba40e2e", + "vendor/symfony/polyfill-php85/Resources/stubs/Filter/FilterException.php": "a3f1514e71ef442fc7571b231926ee3088abce4e1cf9b5be1e562f87f326d042", + "vendor/symfony/polyfill-php85/Resources/stubs/Filter/FilterFailedException.php": "8474000cfcd8065026ee387087297c274983333790704ec79e41259fdf018605", + "vendor/symfony/polyfill-php85/Resources/stubs/NoDiscard.php": "80bef461eda96cf4f3ccab6af66d8054fd6f10f57192ee25be92445aa7d25aa4", + "vendor/symfony/polyfill-php85/bootstrap.php": "953fc79cbcd5a35b6dcdbbd7323b67aed3d9c09dc96feefd53ff2d08fe2a058c", + "vendor/symfony/polyfill-php85/bootstrap80.php": "50b672dcae90d04470cc18597e177fbb4beb218292cf47876e321cf52abf1fac", + "vendor/symfony/polyfill-php85/composer.json": "7b0c4b37943137573e77855500caa8f6e92081636affe2f571d5148853b58f24", + "vendor/symfony/polyfill-php86/LICENSE": "56e762e45c7d6d7873c19a5dac018ca43f5f9a881f8cd9100d1d08d0182b9544", + "vendor/symfony/polyfill-php86/Php86.php": "acec0863df6cf2f2b20b350bd9f2ba8ce35f89640c62550f9e43897764f8be1e", + "vendor/symfony/polyfill-php86/README.md": "a2440bdde78fb0a94b4901ae1f89ce1ee6ee214e5f558de774d069cf1bea3ebc", + "vendor/symfony/polyfill-php86/Resources/stubs/SortDirection.php": "79529892c7d89291b9f2826bcc3632cec730cdc23c66df6fc957704e27b863c0", + "vendor/symfony/polyfill-php86/bootstrap.php": "893827e84ece8bd5c4ee5d9441ce02b454baf4816210201858d2847b848a2d1f", + "vendor/symfony/polyfill-php86/bootstrap80.php": "56595fa66e0b674984ccce4be14c4c7e0d2ed7f5ec183495b7789df05847fc03", + "vendor/symfony/polyfill-php86/composer.json": "6c059da8e93408add657ac183c51e27540b8a5090ab083460de6b40ec99dd91a", + "vendor/webmozart/assert/CHANGELOG.md": "a2462f3df7c2959b0378072eddbcee7854c0a3cba7bb720394cd03f3fe6309aa", + "vendor/webmozart/assert/LICENSE": "5f82f5e664e8683e3d97d3bec6f74620b9d0a4d8669f9e617da96bce8767d4d3", + "vendor/webmozart/assert/README.md": "799f39c1bf8826592ff61701d743a933d8dcee8fdf31184e6242591b93d0ebb7", + "vendor/webmozart/assert/composer.json": "69b93cac6d140c465143f7247c17d801a286d2573eb13cf912acc9e54e1ec6d1", + "vendor/webmozart/assert/src/Assert.php": "ba5829c8dca8ed467e082e6c5d58115562232ea2fc00245beb12988bb20bfdec", + "vendor/webmozart/assert/src/HasAssert.php": "b00e76aba9a5d0e68e869a12fcd41d84d43809f32ca6c31f36ced0a62e460162", + "vendor/webmozart/assert/src/InvalidArgumentException.php": "2ee8b56149c7e107a9704145a2be1e9a44f71df17b351ebc34ade0165ec057dd", + "vendor/webmozart/assert/src/Mixin.php": "e635f74c3a46c8c0503ad8fe7abea9eabf35c252a9c1675208b096d130e0644b", + "vendor/webmozart/assert/src/PsalmPlugin.php": "ce527ce952e67c9af01d91d97845f592a29985e6999222fc0af8faabb48c2ac2", + "vendor/wizardloop/broadcastmanager/.gitattributes": "5feaddc458a55c10ef1011563b3914a7d75e1419e5d0a2757908dd6646f1d226", + "vendor/wizardloop/broadcastmanager/.github/CODE_OF_CONDUCT.md": "86b68818ee5d142a2b5c629a878404bee4ee2c572e5afe04322b01f60ee7ea17", + "vendor/wizardloop/broadcastmanager/.github/CONTRIBUTING.md": "351a6ad345d958f3640791b6c51ffd538786fdb3dd03742262857405c1134f97", + "vendor/wizardloop/broadcastmanager/.github/FUNDING.yml": "6a45402eb151c98c5284cf73b3c5f32b5428f16395c6bcf899326d399105f7bb", + "vendor/wizardloop/broadcastmanager/.github/ISSUE_TEMPLATE/bug_report.yml": "a746aee9e7797b2679719d52dd4066a44e839ca561661a16023493adfefbfa89", + "vendor/wizardloop/broadcastmanager/.github/ISSUE_TEMPLATE/feature_request.yml": "4eaaa962535c9d66f6ebf6c71943806ba6ff5c8264d72fb4805953244fc1434e", + "vendor/wizardloop/broadcastmanager/.github/ISSUE_TEMPLATE/improvement_question.yml": "71e0d18a5fbcdb109285e2049b2ef51e9ef3b10137db8971f66611c63c2c446d", + "vendor/wizardloop/broadcastmanager/.github/PULL_REQUEST_TEMPLATE.md": "baa95b98f0f2ad88f4a0411b455d1a86a09e4f92a09c565b14f6224ba8faa229", + "vendor/wizardloop/broadcastmanager/.github/SECURITY.md": "7b5a080bc870abe165b3dfbb30121b7e99381fb4244ef83f93b6b57c9c4a372a", + "vendor/wizardloop/broadcastmanager/.github/workflows/ci.yml": "9cef63528e37b40c3b5672d65d6d4f7c56b1776880b80f5c143ebf26a51e39d7", + "vendor/wizardloop/broadcastmanager/.gitignore": "6dfebda4de50e6f0d998ad3908b99f91e9796994ec816e3e9894d9880b182d29", + "vendor/wizardloop/broadcastmanager/.php-cs-fixer.dist.php": "484d7cf46d97dbdcaad2cbf6a2e5eecbae1a0f3da84800dbf4d74b938dbae71f", + "vendor/wizardloop/broadcastmanager/LICENSE": "8486a10c4393cee1c25392769ddd3b2d6c242d6ec7928e1414efff7dfb2f07ef", + "vendor/wizardloop/broadcastmanager/composer.json": "ec47a662a9e4dcb5540e7438a65e06e0e4fe1b033c784576e01fc3229c7f43c6", + "vendor/wizardloop/broadcastmanager/phpstan.neon": "8c45c4b2147f9a6e4c54cf7ab547a4e92ed5f0f64fa964155329fa4bcd860189", + "vendor/wizardloop/broadcastmanager/src/BroadcastManager.php": "d665b24009aabfb5b09e00edad1271f1501bf0ef797d5a2593129da91c8cc435" + }, + "preferred_source": { + "additional-source/amphp-windows-process-wrapper/.gitattributes": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/.gitattributes.source", + "additional-source/amphp-windows-process-wrapper/.gitignore": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/.gitignore", + "additional-source/amphp-windows-process-wrapper/LICENSE": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/LICENSE", + "additional-source/amphp-windows-process-wrapper/ProcessWrapper.sln": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/ProcessWrapper.sln", + "additional-source/amphp-windows-process-wrapper/ProcessWrapper.sln.DotSettings": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/ProcessWrapper.sln.DotSettings", + "additional-source/amphp-windows-process-wrapper/ProcessWrapper.vcxproj": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/ProcessWrapper.vcxproj", + "additional-source/amphp-windows-process-wrapper/ProcessWrapper.vcxproj.filters": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/ProcessWrapper.vcxproj.filters", + "additional-source/amphp-windows-process-wrapper/README.md": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/README.md", + "additional-source/amphp-windows-process-wrapper/resources/.gitattributes": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/resources/.gitattributes.source", + "additional-source/amphp-windows-process-wrapper/resources/Icon_amphp.ico": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/resources/Icon_amphp.ico", + "additional-source/amphp-windows-process-wrapper/resources/ProcessWrapper.rc": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/resources/ProcessWrapper.rc", + "additional-source/amphp-windows-process-wrapper/resources/resource.h": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/resources/resource.h", + "additional-source/amphp-windows-process-wrapper/src/Args.c": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/src/Args.c", + "additional-source/amphp-windows-process-wrapper/src/Args.h": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/src/Args.h", + "additional-source/amphp-windows-process-wrapper/src/Encoding.h": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/src/Encoding.h", + "additional-source/amphp-windows-process-wrapper/src/Errors.c": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/src/Errors.c", + "additional-source/amphp-windows-process-wrapper/src/Errors.h": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/src/Errors.h", + "additional-source/amphp-windows-process-wrapper/src/ProcessWrapper.c": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/src/ProcessWrapper.c", + "additional-source/madelineproto-build-inputs/.gitattributes": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/.gitattributes.source", + "additional-source/madelineproto-build-inputs/.gitmodules": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/.gitmodules", + "additional-source/madelineproto-build-inputs/LICENSE": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/LICENSE", + "additional-source/madelineproto-build-inputs/README.md": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/README.md", + "additional-source/madelineproto-build-inputs/composer.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/composer.json", + "additional-source/madelineproto-build-inputs/docs/template/disallow.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/docs/template/disallow.json", + "additional-source/madelineproto-build-inputs/extracted.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/extracted.json", + "additional-source/madelineproto-build-inputs/langs/ar.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/ar.json", + "additional-source/madelineproto-build-inputs/langs/ckb.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/ckb.json", + "additional-source/madelineproto-build-inputs/langs/de.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/de.json", + "additional-source/madelineproto-build-inputs/langs/en.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/en.json", + "additional-source/madelineproto-build-inputs/langs/es.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/es.json", + "additional-source/madelineproto-build-inputs/langs/fa.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/fa.json", + "additional-source/madelineproto-build-inputs/langs/fr.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/fr.json", + "additional-source/madelineproto-build-inputs/langs/he.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/he.json", + "additional-source/madelineproto-build-inputs/langs/hi.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/hi.json", + "additional-source/madelineproto-build-inputs/langs/id.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/id.json", + "additional-source/madelineproto-build-inputs/langs/it.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/it.json", + "additional-source/madelineproto-build-inputs/langs/ja.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/ja.json", + "additional-source/madelineproto-build-inputs/langs/ko.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/ko.json", + "additional-source/madelineproto-build-inputs/langs/pl.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/pl.json", + "additional-source/madelineproto-build-inputs/langs/pt.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/pt.json", + "additional-source/madelineproto-build-inputs/langs/ru.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/ru.json", + "additional-source/madelineproto-build-inputs/langs/tr.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/tr.json", + "additional-source/madelineproto-build-inputs/langs/uk.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/uk.json", + "additional-source/madelineproto-build-inputs/langs/uz.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/uz.json", + "additional-source/madelineproto-build-inputs/langs/vi.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/vi.json", + "additional-source/madelineproto-build-inputs/langs/zh.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/zh.json", + "additional-source/madelineproto-build-inputs/schemas/README.md": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/README.md", + "additional-source/madelineproto-build-inputs/schemas/TL_mtproto_v1.tl": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_mtproto_v1.tl", + "additional-source/madelineproto-build-inputs/schemas/TL_secret.tl": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_secret.tl", + "additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232.json", + "additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232.tl": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232.tl", + "additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232_file_ref_map.dat": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232_file_ref_map.dat", + "additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232_file_ref_map.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232_file_ref_map.json", + "additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232_file_ref_map_schema.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232_file_ref_map_schema.json", + "additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232_file_ref_map_schema.tl": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v232_file_ref_map_schema.tl", + "additional-source/madelineproto-build-inputs/schemas/list.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/list.json", + "additional-source/madelineproto-build-inputs/schemas/list_file_ref_map.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/list_file_ref_map.json", + "additional-source/madelineproto-build-inputs/tools/AnnotationsBuilder.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/AnnotationsBuilder.php", + "additional-source/madelineproto-build-inputs/tools/DocsBuilder.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/DocsBuilder.php", + "additional-source/madelineproto-build-inputs/tools/DocsBuilder/Constructors.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/DocsBuilder/Constructors.php", + "additional-source/madelineproto-build-inputs/tools/DocsBuilder/Methods.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/DocsBuilder/Methods.php", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/ActionOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/ActionOp.php", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/BuildMode.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/BuildMode.php", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/BuildMode/Ast.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/BuildMode/Ast.php", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/FieldTransformationOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/FieldTransformationOp.php", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/FileRefGenerator.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/FileRefGenerator.php", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/LiteralOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/LiteralOp.php", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/ArrayOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/ArrayOp.php", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/CallOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/CallOp.php", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/ConstructorOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/ConstructorOp.php", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/CopyMethodCallOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/CopyMethodCallOp.php", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/CopyOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/CopyOp.php", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetInputChannelOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetInputChannelOp.php", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetInputPeerOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetInputPeerOp.php", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetInputStickerSet.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetInputStickerSet.php", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetInputUserOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetInputUserOp.php", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetMessageOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetMessageOp.php", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/Noop.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/Noop.php", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/PrimitiveLiteralOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/PrimitiveLiteralOp.php", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/ThemeFormatOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/ThemeFormatOp.php", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Path.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Path.php", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/TLContext.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/TLContext.php", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/TLWrapper.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/TLWrapper.php", + "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/TypedOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/TypedOp.php", + "additional-source/madelineproto-build-inputs/tools/TL/Builder.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/TL/Builder.php", + "additional-source/madelineproto-build-inputs/tools/TL/SecretBuilder.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/TL/SecretBuilder.php", + "additional-source/madelineproto-build-inputs/tools/build_docs.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/build_docs.php", + "additional-source/madelineproto-build-inputs/tools/build_docs/layerUpgrade.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/build_docs/layerUpgrade.php", + "additional-source/madelineproto-build-inputs/tools/build_docs/merge.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/build_docs/merge.php", + "additional-source/madelineproto-build-inputs/tools/build_docs/schemas.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/build_docs/schemas.php", + "additional-source/madelineproto-build-inputs/tools/build_tl.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/build_tl.php", + "additional-source/madelineproto-build-inputs/tools/fix_docs.sh": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/fix_docs.sh", + "additional-source/madelineproto-build-inputs/tools/fuzzer.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/fuzzer.php", + "additional-source/madelineproto-build-inputs/tools/genDataset.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/genDataset.php", + "additional-source/madelineproto-build-inputs/tools/gen_filerefmap.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/gen_filerefmap.php", + "additional-source/madelineproto-build-inputs/tools/layerdiff.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/layerdiff.php", + "additional-source/madelineproto-build-inputs/tools/makephar.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/makephar.php", + "additional-source/madelineproto-build-inputs/tools/phar.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/phar.php", + "additional-source/madelineproto-build-inputs/tools/phpdoc.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/phpdoc.php", + "additional-source/madelineproto-build-inputs/tools/static.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/static.php", + "additional-source/madelineproto-build-inputs/tools/std.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/std.php", + "additional-source/madelineproto-build-inputs/tools/translator.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/translator.php", + "additional-source/php-rtc-av/README.md": "resources/release/preferred-source/additional-source/php-rtc-av/README.md" + }, + "additional_source": { + "component": "amphp/windows-process-wrapper", + "tag": "v1.2.0", + "commit": "8d5aca0c56b73cba460894d79ee83ec558b41027", + "source": "https://github.com/amphp/windows-process-wrapper/tree/8d5aca0c56b73cba460894d79ee83ec558b41027", + "license": "MIT", + "evidence": "Official amphp/process update commit 6810aacc5d7049d9db87e8161e2ef0e66caa1472 identifies v1.2.0; executable Git blobs match the locked package. No reproducible binary rebuild was performed.", + "file_count": 18 + }, + "madeline_generation_source": { + "component": "danog/madelineproto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "upstream_provenance": { + "package": "danog/madelineproto", + "version": "8.11.10", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "purpose": "Preferred source and current build inputs excluded from Composer dist; supplement runtime source without modifying installed vendor.", + "submodules": { + "schemas": { + "repository": "danog/schemas", + "reference": "1d027e48ce9196d86110f8324e23a5c78fc4ef6a" + }, + "docs": { + "repository": "danog/MadelineProtoDocs", + "reference": "10ea0769245a3d080c3e501b12603e804ad9f3af" + } + }, + "source_files": [ { - "name": "amphp/amp", - "version": "v3.1.3", - "reference": "73c38b323ff8d790abf0f76c56fcc892bda4111a", - "source": "https://github.com/amphp/amp.git", - "license": [ - "MIT" - ], - "file_count": 28 + "path": ".gitattributes", + "upstream_path": ".gitattributes", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "d6a33f62f8a7c3520cba7129cff1975db617d7b1", + "bytes": 372, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/.gitattributes", + "sha256": "e547789f2db16032af766dcd086c02cd099e67f7002bb488e110e0117c25d209", + "status": "pass" }, { - "name": "amphp/byte-stream", - "version": "v2.1.2", - "reference": "55a6bd071aec26fa2a3e002618c20c35e3df1b46", - "source": "https://github.com/amphp/byte-stream.git", - "license": [ - "MIT" - ], - "file_count": 37 + "path": ".gitmodules", + "upstream_path": ".gitmodules", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "cebef6118a776d57f58c3a4d62b587e5c8e254e6", + "bytes": 503, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/.gitmodules", + "sha256": "0be1b15bd151a137d0eda35e859e2a44dab559f77f74f6f50b628cec212044cb", + "status": "pass" }, { - "name": "amphp/cache", - "version": "v2.0.1", - "reference": "46912e387e6aa94933b61ea1ead9cf7540b7797c", - "source": "https://github.com/amphp/cache.git", - "license": [ - "MIT" - ], - "file_count": 15 + "path": "LICENSE", + "upstream_path": "LICENSE", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "dba13ed2ddf783ee8118c6a581dbf75305f816a3", + "bytes": 34520, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/LICENSE", + "sha256": "57c8ff33c9c0cfc3ef00e650a1cc910d7ee479a8bc509f6c9209a7c2a11399d6", + "status": "pass" }, { - "name": "amphp/dns", - "version": "v2.4.1", - "reference": "ec5948bfafac808f410406e18bc7b52a2d4629b7", - "source": "https://github.com/amphp/dns.git", - "license": [ - "MIT" - ], - "file_count": 28 + "path": "README.md", + "upstream_path": "README.md", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "12d32f77a82ea050ef3ec91beff6f82a871d33b2", + "bytes": 274823, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/README.md", + "sha256": "45b7b6cdb99e225b531adace51b30c754e3a7f52a4a75e32b0496c818349f7d0", + "status": "pass" }, { - "name": "amphp/file", - "version": "v3.2.0", - "reference": "28b38a805d2c235bb581d24415e78a42cd03aedc", - "source": "https://github.com/amphp/file.git", - "license": [ - "MIT" - ], - "file_count": 51 + "path": "composer.json", + "upstream_path": "composer.json", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "01cc6250f2ecc71eb8d1927c5e0d65a87339970c", + "bytes": 6418, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/composer.json", + "sha256": "579e8ab6bb58af8ec91c11fc12f18693225bc8e4d5e1b2ba4bddec61cb417fd0", + "status": "pass" }, { - "name": "amphp/hpack", - "version": "v3.2.2", - "reference": "291da27078e7e149a9bad4d08ff05bf7d81c89f4", - "source": "https://github.com/amphp/hpack.git", - "license": [ - "MIT" - ], - "file_count": 17 + "path": "docs/template/disallow.json", + "upstream_path": "template/disallow.json", + "repository": "danog/MadelineProtoDocs", + "reference": "10ea0769245a3d080c3e501b12603e804ad9f3af", + "git_blob": "6f7ab35a450912fce49a56cf0cd48b6cef63d1c2", + "bytes": 6342, + "url": "https://raw.githubusercontent.com/danog/MadelineProtoDocs/10ea0769245a3d080c3e501b12603e804ad9f3af/template/disallow.json", + "sha256": "8aab568b61b51b83619933be278db5b0c51218b16d0b991193173160ef752dd6", + "status": "pass" }, { - "name": "amphp/http", - "version": "v2.1.2", - "reference": "3680d80bd38b5d6f3c2cef2214ca6dd6cef26588", - "source": "https://github.com/amphp/http.git", - "license": [ - "MIT" - ], - "file_count": 20 + "path": "extracted.json", + "upstream_path": "extracted.json", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "885e2db4d11f9c55dd5221187a97e688cb565616", + "bytes": 1216113, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/extracted.json", + "sha256": "2b0b8ef62b64a70035a8d5d4c4b4bee60a22fa861d5b61e0b233f9f117c88534", + "status": "pass" }, { - "name": "amphp/http-client", - "version": "v5.3.6", - "reference": "ca155026acafa74a612d776a97202d53077fee86", - "source": "https://github.com/amphp/http-client.git", - "license": [ - "MIT" - ], - "file_count": 72 + "path": "langs/ar.json", + "upstream_path": "langs/ar.json", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "660f1a4eb0d3cec9910b146a5b8d40920c3ee4ff", + "bytes": 28592, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/langs/ar.json", + "sha256": "eaf5912bf1355563ef68068ff1bd469dcfa713e6a0f4513a7715368d4f3491f2", + "status": "pass" }, { - "name": "amphp/http-client-cookies", - "version": "v2.0.0", - "reference": "4124b37ffa4d15034e70d5d30e6fb9605ed6c1a7", - "source": "https://github.com/amphp/http-client-cookies.git", - "license": [ - "MIT" - ], - "file_count": 25 + "path": "langs/ckb.json", + "upstream_path": "langs/ckb.json", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "a27ac6b1ceb0c90d78eb326fc06461fe93e895ca", + "bytes": 32252, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/langs/ckb.json", + "sha256": "6f97da47cac5d0862b2cd9a0efe24bf405cad32ad4562b7d93cafaf19c75a9e3", + "status": "pass" }, { - "name": "amphp/http-server", - "version": "v3.4.7", - "reference": "aa96ca38c5f822a827236543d5417d0c2a782ef0", - "source": "https://github.com/amphp/http-server.git", - "license": [ - "MIT" - ], - "file_count": 65 + "path": "langs/de.json", + "upstream_path": "langs/de.json", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "dd206c9007eeda8ee0ed81a3a9d81d768cb23bb3", + "bytes": 24405, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/langs/de.json", + "sha256": "38927e51b5cca191f34ed13f1266a0f85683365dd1332b882874c776c3e9c6d7", + "status": "pass" }, { - "name": "amphp/log", - "version": "v2.0.0", - "reference": "bf1562b8a18a3f30efa069ed740f412ac70a8a6c", - "source": "https://github.com/amphp/log.git", - "license": [ - "MIT" - ], - "file_count": 13 + "path": "langs/en.json", + "upstream_path": "langs/en.json", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "98512655f4f71a834a8ee2f2081d98d8756b3d19", + "bytes": 22024, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/langs/en.json", + "sha256": "87701317d16f701cf4d368a9508a416d6b1a8f87578b9d6278101fe9f52607ff", + "status": "pass" }, { - "name": "amphp/mysql", - "version": "v3.1.1", - "reference": "ea3a5e07dc3dddc267669337ded2a98f02d86223", - "source": "https://github.com/amphp/mysql.git", - "license": [ - "MIT" - ], - "file_count": 51 + "path": "langs/es.json", + "upstream_path": "langs/es.json", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "6ca3ae43fa60a72b85929694406dc51933953e45", + "bytes": 24338, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/langs/es.json", + "sha256": "17b8a465119a78598eabc80dbaccac878878bd68a958579b4cabe08f6e63d2fc", + "status": "pass" }, { - "name": "amphp/parallel", - "version": "v2.4.0", - "reference": "37f5b2754fadc229c00f9416bd68fb8d04529a81", - "source": "https://github.com/amphp/parallel.git", - "license": [ - "MIT" - ], - "file_count": 62 + "path": "langs/fa.json", + "upstream_path": "langs/fa.json", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "5f2d0f1d41b6c4029f2d73bb93cc5b06ad295423", + "bytes": 30931, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/langs/fa.json", + "sha256": "f8f6b15ec10bcde2c5d03f37a90c89df81ee574225ac88efa240ca21a5f7225c", + "status": "pass" }, { - "name": "amphp/parser", - "version": "v1.1.1", - "reference": "3cf1f8b32a0171d4b1bed93d25617637a77cded7", - "source": "https://github.com/amphp/parser.git", - "license": [ - "MIT" - ], - "file_count": 9 + "path": "langs/fr.json", + "upstream_path": "langs/fr.json", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "9f640343ef91a42a255b278df3fd8eb0be249a89", + "bytes": 24891, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/langs/fr.json", + "sha256": "62094dadae08b43aed8069a4e120ef1e5429905af5a918a1da593aa4e427bd75", + "status": "pass" }, { - "name": "amphp/pipeline", - "version": "v1.2.7", - "reference": "cf2d67696c2015ea7c7fd8f6ec5f8ed7c2d17c17", - "source": "https://github.com/amphp/pipeline.git", - "license": [ - "MIT" - ], - "file_count": 23 + "path": "langs/he.json", + "upstream_path": "langs/he.json", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "574fee8f1728d75dd83b8e445a784ee71f8e23c3", + "bytes": 26531, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/langs/he.json", + "sha256": "42d989c982d10e303524df9cafba859fdec1c60a6a71200f49d1fa1a8a49b2da", + "status": "pass" }, { - "name": "amphp/postgres", - "version": "v2.2.1", - "reference": "b68c4d5929d0ec1701781dbbb0bb81dd8d0a42d7", - "source": "https://github.com/amphp/postgres.git", - "license": [ - "MIT" - ], - "file_count": 53 + "path": "langs/hi.json", + "upstream_path": "langs/hi.json", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "28520aca74224adb73d1d9f82ecdd98241e46b1b", + "bytes": 39588, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/langs/hi.json", + "sha256": "c6a97eb32ea13ad0962b4788351d254068f34dc31f45052663c4127c02790bb5", + "status": "pass" }, { - "name": "amphp/process", - "version": "v2.1.0", - "reference": "583959df17d00304ad7b0b32285373f985935643", - "source": "https://github.com/amphp/process.git", - "license": [ - "MIT" - ], - "file_count": 26 + "path": "langs/id.json", + "upstream_path": "langs/id.json", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "9a32ca161f8a230239bb83e355646516b4bfccd2", + "bytes": 22768, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/langs/id.json", + "sha256": "8168ec8bccd9686e386f431c79f4ff92fbede61b7c6df6bafb9cffa9bafc0b47", + "status": "pass" }, { - "name": "amphp/redis", - "version": "v2.0.4", - "reference": "964bcf6c2574645058371925a3668240a622bdab", - "source": "https://github.com/amphp/redis.git", - "license": [ - "MIT" - ], - "file_count": 42 + "path": "langs/it.json", + "upstream_path": "langs/it.json", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "1baffe2e3a32d04e54115b778bbd65cc7ebefbf4", + "bytes": 23939, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/langs/it.json", + "sha256": "50eee80875a93755592dabe49da63384f466d54e977871ef78a779d72851d3a1", + "status": "pass" }, { - "name": "amphp/serialization", - "version": "v1.1.0", - "reference": "fdf2834d78cebb0205fb2672676c1b1eb84371f0", - "source": "https://github.com/amphp/serialization.git", - "license": [ - "MIT" - ], - "file_count": 12 + "path": "langs/ja.json", + "upstream_path": "langs/ja.json", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "317d457625988922d9da1b4086616e7dcb7006f3", + "bytes": 28087, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/langs/ja.json", + "sha256": "76e3a50b73f2c78f94abf01d7a40d26fb4a33b0176a1ccbac86ca2d5bd5b3390", + "status": "pass" }, { - "name": "amphp/socket", - "version": "v2.4.1", - "reference": "b347be5aff6b2cc025208bb4d896607eb470c018", - "source": "https://github.com/amphp/socket.git", - "license": [ - "MIT" - ], - "file_count": 43 + "path": "langs/ko.json", + "upstream_path": "langs/ko.json", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "1c9e265264ab4edac96882dd53d838e5a48f45db", + "bytes": 25346, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/langs/ko.json", + "sha256": "e22a239196192fd92ee77f88061714b98d50a0600a6dcc7fb826a12c39c71446", + "status": "pass" }, { - "name": "amphp/sql", - "version": "v2.1.1", - "reference": "258bafe5ecf8a0491d86681f2a2af1dee2933a69", - "source": "https://github.com/amphp/sql.git", - "license": [ - "MIT" - ], - "file_count": 27 + "path": "langs/pl.json", + "upstream_path": "langs/pl.json", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "9f9f37ed41e0815ec14a61833426fd2238848a32", + "bytes": 23190, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/langs/pl.json", + "sha256": "64c8ad1edc4d3caff307ac4cf2a785e4b789d417440fa8d6749496aadfa35c61", + "status": "pass" }, { - "name": "amphp/sql-common", - "version": "v2.0.4", - "reference": "735da17ef0a66e7139c9f7584af5c3f9827f83c0", - "source": "https://github.com/amphp/sql-common.git", - "license": [ - "MIT" - ], - "file_count": 24 + "path": "langs/pt.json", + "upstream_path": "langs/pt.json", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "839241b21d3cdcde699b2ca0e882694f7a8490b8", + "bytes": 23687, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/langs/pt.json", + "sha256": "35f8d4a2dcfeae983d8503fe732dfaa3f10d43a496dae7c99a677d8a7ebdd634", + "status": "pass" }, { - "name": "amphp/sync", - "version": "v2.3.0", - "reference": "217097b785130d77cfcc58ff583cf26cd1770bf1", - "source": "https://github.com/amphp/sync.git", - "license": [ - "MIT" - ], - "file_count": 34 + "path": "langs/ru.json", + "upstream_path": "langs/ru.json", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "8e75f8fe6644493275cc7c5fb56af33504b58abb", + "bytes": 31490, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/langs/ru.json", + "sha256": "530eebdc2019ff2addc770a98c63821fc9caf034544000343320a70e14abe362", + "status": "pass" }, { - "name": "amphp/websocket", - "version": "v2.0.4", - "reference": "963904b6a883c4b62d9222d1d9749814fac96a3b", - "source": "https://github.com/amphp/websocket.git", - "license": [ - "MIT" - ], - "file_count": 39 + "path": "langs/tr.json", + "upstream_path": "langs/tr.json", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "ad933e46d7601d3511d669bbd4164a5e7911da22", + "bytes": 23919, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/langs/tr.json", + "sha256": "47f200bf28f47c911ca5eaba46f3549a18f565aa1bf6552761c270aa975dd392", + "status": "pass" }, { - "name": "amphp/websocket-client", - "version": "v2.0.2", - "reference": "dc033fdce0af56295a23f63ac4f579b34d470d6c", - "source": "https://github.com/amphp/websocket-client.git", - "license": [ - "MIT" - ], - "file_count": 19 + "path": "langs/uk.json", + "upstream_path": "langs/uk.json", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "99d9ae3e4704babfa571f76bd618234f489f74ba", + "bytes": 31577, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/langs/uk.json", + "sha256": "26e24853b813acadec71cf837275fc025cada0b277943a9ffd3da8f993f1fd22", + "status": "pass" }, { - "name": "bacon/bacon-qr-code", - "version": "v3.1.1", - "reference": "4da2233e72eeecd9be3b62e0dc2cc9ed8e2e31c2", - "source": "https://github.com/Bacon/BaconQrCode.git", - "license": [ - "BSD-2-Clause" - ], - "file_count": 65 + "path": "langs/uz.json", + "upstream_path": "langs/uz.json", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "a1c0e0a9f04545eda33f27dd706b3283442578d5", + "bytes": 24002, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/langs/uz.json", + "sha256": "b734cc8a7133eae78b6e6e5532e7b4bf7b109a6857837c9d1089d36a2a728a99", + "status": "pass" }, { - "name": "danog/async-orm", - "version": "1.1.4", - "reference": "495f335d8ddb9dae8b773025911191f31c45e9ea", - "source": "https://github.com/danog/AsyncOrm.git", - "license": [ - "Apache-2.0" - ], - "file_count": 73 + "path": "langs/vi.json", + "upstream_path": "langs/vi.json", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "004ac263d5f88f171187c9719f8a4be987785014", + "bytes": 25832, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/langs/vi.json", + "sha256": "d45519ec06fb1f22254f62df14ba7ff541664f681499f6848eb4490fd7ca5f7e", + "status": "pass" }, { - "name": "danog/better-prometheus", - "version": "0.1.1", - "reference": "74e19343be41905572290878ca9fd0ef08ba0c5e", - "source": "https://github.com/danog/better-prometheus.git", - "license": [ - "Apache-2.0" - ], - "file_count": 24 + "path": "langs/zh.json", + "upstream_path": "langs/zh.json", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "fb539a5a0811fd38bfdabd04c588f1f4a6a3e98d", + "bytes": 21051, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/langs/zh.json", + "sha256": "e6f659019f5cc925977fc41dfd7854aeabb896270e15d2f2ca65ff93e9cf17ee", + "status": "pass" }, { - "name": "danog/dns-over-https", - "version": "1.0.1", - "reference": "142b8d439e7a582d66b13d9f1119820dd3110884", - "source": "https://github.com/danog/dns-over-https.git", - "license": [ - "MIT" - ], - "file_count": 20 + "path": "schemas/README.md", + "upstream_path": "README.md", + "repository": "danog/schemas", + "reference": "1d027e48ce9196d86110f8324e23a5c78fc4ef6a", + "git_blob": "c796923b979a170a4cb148a80faf72b8ee5fc132", + "bytes": 135, + "url": "https://raw.githubusercontent.com/danog/schemas/1d027e48ce9196d86110f8324e23a5c78fc4ef6a/README.md", + "sha256": "df080ca2974e01930ef5232f2373f326477a4bd51713f8046df0d6ac2c5ea1fa", + "status": "pass" }, { - "name": "danog/ipc", - "version": "1.0.1", - "reference": "505e672b76af6ec623f7ef78efb2416f62ef8e29", - "source": "https://github.com/danog/ipc.git", - "license": [ - "MIT" - ], - "file_count": 28 + "path": "schemas/TL_mtproto_v1.tl", + "upstream_path": "TL_mtproto_v1.tl", + "repository": "danog/schemas", + "reference": "1d027e48ce9196d86110f8324e23a5c78fc4ef6a", + "git_blob": "291c24089ff6b140b43243822f95e26f673b3c3f", + "bytes": 4196, + "url": "https://raw.githubusercontent.com/danog/schemas/1d027e48ce9196d86110f8324e23a5c78fc4ef6a/TL_mtproto_v1.tl", + "sha256": "a68bbcfb6aea699cb394aec44008b01b915f1e8b632a1d786001ddd7c7300dcd", + "status": "pass" }, { - "name": "danog/libdns-json", - "version": "0.2.1", - "reference": "cd2981a386a32ff62d447a9553e203384651ba90", - "source": "https://github.com/danog/LibDNSJson.git", - "license": [ - "MIT" - ], - "file_count": 17 + "path": "schemas/TL_secret.tl", + "upstream_path": "TL_secret.tl", + "repository": "danog/schemas", + "reference": "1d027e48ce9196d86110f8324e23a5c78fc4ef6a", + "git_blob": "364fc117ec23d055fa5da3ba5206403826119902", + "bytes": 7883, + "url": "https://raw.githubusercontent.com/danog/schemas/1d027e48ce9196d86110f8324e23a5c78fc4ef6a/TL_secret.tl", + "sha256": "899beb4c1713a65c9f09677dd93406a1e96c52b661d46dcd30ac7c0a87b0d20c", + "status": "pass" }, { - "name": "danog/loop", - "version": "1.1.1", - "reference": "83c42b26c1d8d070c56bc9c03e2e8a147b45c60f", - "source": "https://github.com/danog/loop.git", - "license": [ - "MIT" - ], - "file_count": 29 + "path": "schemas/TL_telegram_v232.json", + "upstream_path": "TL_telegram_v232.json", + "repository": "danog/schemas", + "reference": "1d027e48ce9196d86110f8324e23a5c78fc4ef6a", + "git_blob": "52d484acc564277f5111a496690fd216e57608a1", + "bytes": 1426911, + "url": "https://raw.githubusercontent.com/danog/schemas/1d027e48ce9196d86110f8324e23a5c78fc4ef6a/TL_telegram_v232.json", + "sha256": "71b22961981cc76312032bbd4fc7159e6c65c2ff6d89b399cbab7e68ec7e531c", + "status": "pass" }, { - "name": "danog/madelineproto", - "version": "8.7.0", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "source": "https://github.com/danog/MadelineProto.git", - "license": [ - "AGPL-3.0-only" - ], - "file_count": 698 + "path": "schemas/TL_telegram_v232.tl", + "upstream_path": "TL_telegram_v232.tl", + "repository": "danog/schemas", + "reference": "1d027e48ce9196d86110f8324e23a5c78fc4ef6a", + "git_blob": "8319b7df634d145390c299404129fd161a5dbd2a", + "bytes": 294194, + "url": "https://raw.githubusercontent.com/danog/schemas/1d027e48ce9196d86110f8324e23a5c78fc4ef6a/TL_telegram_v232.tl", + "sha256": "76922ce265441d3f2f5188f56b69b41e1cb11354657ea547707507f8c3b93826", + "status": "pass" }, { - "name": "danog/primemodule", - "version": "1.0.13", - "reference": "e7ebfc1ea64c24186e49064cd4b76bc76c28600e", - "source": "https://github.com/danog/PrimeModule.git", - "license": [ - "AGPL-3.0-only" - ], - "file_count": 6 + "path": "schemas/TL_telegram_v232_file_ref_map.dat", + "upstream_path": "TL_telegram_v232_file_ref_map.dat", + "repository": "danog/schemas", + "reference": "1d027e48ce9196d86110f8324e23a5c78fc4ef6a", + "git_blob": "b02fbd61e407a21a99c09dda64416931475caf9d", + "bytes": 64036, + "url": "https://raw.githubusercontent.com/danog/schemas/1d027e48ce9196d86110f8324e23a5c78fc4ef6a/TL_telegram_v232_file_ref_map.dat", + "sha256": "d03c0c48f9035b4d16628571c3b9f5a3eae0204642ffc66a8caadf62d5a6279e", + "status": "pass" }, { - "name": "danog/telegram-entities", - "version": "1.0.5", - "reference": "19ab8a48bc4b9519c4493e2c62eb171fba8b58b4", - "source": "https://github.com/danog/telegram-entities.git", - "license": [ - "Apache-2.0" - ], - "file_count": 18 + "path": "schemas/TL_telegram_v232_file_ref_map.json", + "upstream_path": "TL_telegram_v232_file_ref_map.json", + "repository": "danog/schemas", + "reference": "1d027e48ce9196d86110f8324e23a5c78fc4ef6a", + "git_blob": "577215ff9d31e2f3adab20947a05ec67ee93f109", + "bytes": 152203, + "url": "https://raw.githubusercontent.com/danog/schemas/1d027e48ce9196d86110f8324e23a5c78fc4ef6a/TL_telegram_v232_file_ref_map.json", + "sha256": "6a55f3175c7bb5e01d88d7f8349cf0240fb4298af8c8519cbc27788070bf8d89", + "status": "pass" }, { - "name": "danog/tg-dialog-id", - "version": "2.0.0", - "reference": "d03c653b2dad43d739675c83a6e8fa14b3b43636", - "source": "https://github.com/danog/tg-dialog-id.git", - "license": [ - "Apache-2.0" - ], - "file_count": 17 + "path": "schemas/TL_telegram_v232_file_ref_map_schema.json", + "upstream_path": "TL_telegram_v232_file_ref_map_schema.json", + "repository": "danog/schemas", + "reference": "1d027e48ce9196d86110f8324e23a5c78fc4ef6a", + "git_blob": "fbee5db844be2e79c8f3335b2b361829b8a23c7f", + "bytes": 19111, + "url": "https://raw.githubusercontent.com/danog/schemas/1d027e48ce9196d86110f8324e23a5c78fc4ef6a/TL_telegram_v232_file_ref_map_schema.json", + "sha256": "7928e74428ad04f8936bfc4131f6fec4192117dfa94c04c30588fd996b4b88dc", + "status": "pass" }, { - "name": "danog/tg-file-decoder", - "version": "1.0.2", - "reference": "f4da78c28d47b658c4596249f1d6595956f3b796", - "source": "https://github.com/danog/tg-file-decoder.git", - "license": [ - "AGPL-3.0-only" - ], - "file_count": 38 + "path": "schemas/TL_telegram_v232_file_ref_map_schema.tl", + "upstream_path": "TL_telegram_v232_file_ref_map_schema.tl", + "repository": "danog/schemas", + "reference": "1d027e48ce9196d86110f8324e23a5c78fc4ef6a", + "git_blob": "ff5fa06dd7575e3006cd067e1e1b6ff2993ffd5f", + "bytes": 4287, + "url": "https://raw.githubusercontent.com/danog/schemas/1d027e48ce9196d86110f8324e23a5c78fc4ef6a/TL_telegram_v232_file_ref_map_schema.tl", + "sha256": "805fb65042f0b776aceda2ca4c09bf4686fd145099be1ad97e9e0e734cca394a", + "status": "pass" }, { - "name": "dasprid/enum", - "version": "1.0.7", - "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce", - "source": "https://github.com/DASPRiD/Enum.git", - "license": [ - "BSD-2-Clause" - ], - "file_count": 13 + "path": "schemas/list.json", + "upstream_path": "list.json", + "repository": "danog/schemas", + "reference": "1d027e48ce9196d86110f8324e23a5c78fc4ef6a", + "git_blob": "c2cbf6455c8b332ab3548f9cb72e94b1f037c9bb", + "bytes": 512, + "url": "https://raw.githubusercontent.com/danog/schemas/1d027e48ce9196d86110f8324e23a5c78fc4ef6a/list.json", + "sha256": "418dbb129a047243d634e122c2b8d08150968c2a3afcb5520fdcb09558929564", + "status": "pass" }, { - "name": "daverandom/libdns", - "version": "v2.1.0", - "reference": "b84c94e8fe6b7ee4aecfe121bfe3b6177d303c8a", - "source": "https://github.com/DaveRandom/LibDNS.git", - "license": [ - "MIT" - ], - "file_count": 62 + "path": "schemas/list_file_ref_map.json", + "upstream_path": "list_file_ref_map.json", + "repository": "danog/schemas", + "reference": "1d027e48ce9196d86110f8324e23a5c78fc4ef6a", + "git_blob": "ea219aeb5ccadb4d3efd4796b4e955d89b2d8bcf", + "bytes": 77, + "url": "https://raw.githubusercontent.com/danog/schemas/1d027e48ce9196d86110f8324e23a5c78fc4ef6a/list_file_ref_map.json", + "sha256": "b6ce847aab1958eac6f514134141fdfb4bb9ee4ca1fd8395ff5da67f74039f19", + "status": "pass" }, { - "name": "kelunik/certificate", - "version": "v1.1.3", - "reference": "7e00d498c264d5eb4f78c69f41c8bd6719c0199e", - "source": "https://github.com/kelunik/certificate.git", - "license": [ - "MIT" - ], - "file_count": 10 + "path": "tools/AnnotationsBuilder.php", + "upstream_path": "tools/AnnotationsBuilder.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "8f78bfb884c40ab46034ab7c23e1ebd7160a6c4c", + "bytes": 33110, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/AnnotationsBuilder.php", + "sha256": "6456068fa6c2cfdc231d22e5f892f0c71807baa9348f800a6192bef4cbdb3fbd", + "status": "pass" }, { - "name": "league/uri", - "version": "7.8.1", - "reference": "08cf38e3924d4f56238125547b5720496fac8fd4", - "source": "https://github.com/thephpleague/uri.git", - "license": [ - "MIT" - ], - "file_count": 19 + "path": "tools/DocsBuilder.php", + "upstream_path": "tools/DocsBuilder.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "3290eb515ef4504a2a2cfb0bf808a6337407e723", + "bytes": 6847, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/DocsBuilder.php", + "sha256": "b79399f20e61839c50130865fc46a961809071cfab9697a14207186d4b66c3f0", + "status": "pass" }, { - "name": "league/uri-components", - "version": "7.8.1", - "reference": "848ff9db2f0be06229d6034b7c2e33d41b4fd675", - "source": "https://github.com/thephpleague/uri-components.git", - "license": [ - "MIT" - ], - "file_count": 22 + "path": "tools/DocsBuilder/Constructors.php", + "upstream_path": "tools/DocsBuilder/Constructors.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "899f250ed8a13e4ccb96909fea1280279016a2a6", + "bytes": 14773, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/DocsBuilder/Constructors.php", + "sha256": "9799411e24b068ebf379f36bad567704e198486d707abcf6962172d84816ef41", + "status": "pass" }, { - "name": "league/uri-interfaces", - "version": "7.8.1", - "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928", - "source": "https://github.com/thephpleague/uri-interfaces.git", - "license": [ - "MIT" - ], - "file_count": 47 + "path": "tools/DocsBuilder/Methods.php", + "upstream_path": "tools/DocsBuilder/Methods.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "2cd2140afceb9a692c9fc109ea95ca8c91c90639", + "bytes": 19563, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/DocsBuilder/Methods.php", + "sha256": "75c80725b49b68650e9abe2a9971929cef3b16b0828ca9ea475f3cd1be8acf1d", + "status": "pass" }, { - "name": "monolog/monolog", - "version": "3.12.1", - "reference": "d7059e4c691d05ea1222b5124bed0f961be46e15", - "source": "https://github.com/Seldaek/monolog.git", - "license": [ - "MIT" - ], - "file_count": 129 + "path": "tools/FileRefExtractor/ActionOp.php", + "upstream_path": "tools/FileRefExtractor/ActionOp.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "2bbc4b603d4376d87610fb2d51d3ab7112a9f7fb", + "bytes": 1171, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/FileRefExtractor/ActionOp.php", + "sha256": "1499bd3053681d6aa2269839e1d55825448deb1994ba90852270ba91340087dd", + "status": "pass" }, { - "name": "nikic/php-parser", - "version": "v5.9.0", - "reference": "9e33da9553fe7786f0962b35f4e4ecf01be89def", - "source": "https://github.com/nikic/PHP-Parser.git", - "license": [ - "BSD-3-Clause" - ], - "file_count": 275 + "path": "tools/FileRefExtractor/BuildMode.php", + "upstream_path": "tools/FileRefExtractor/BuildMode.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "c15ad08baba7b0a84fb6f0d25051ec4818f9b12d", + "bytes": 1033, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/FileRefExtractor/BuildMode.php", + "sha256": "6cc7d671f6ada2959621969efc733c0e8fa2dce8297ed3592af0228e7111026a", + "status": "pass" }, { - "name": "paragonie/constant_time_encoding", - "version": "v3.1.3", - "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77", - "source": "https://github.com/paragonie/constant_time_encoding.git", - "license": [ - "MIT" - ], - "file_count": 14 + "path": "tools/FileRefExtractor/BuildMode/Ast.php", + "upstream_path": "tools/FileRefExtractor/BuildMode/Ast.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "05818ade3aa55348b309412eae60a5913a8b9ec0", + "bytes": 16064, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/FileRefExtractor/BuildMode/Ast.php", + "sha256": "f78857dc34eb5a606e7ccbcc3c0f9b2ef41d04c3d54d77aee6ccd2901b3f0524", + "status": "pass" }, { - "name": "paragonie/random_compat", - "version": "v9.99.100", - "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", - "source": "https://github.com/paragonie/random_compat.git", - "license": [ - "MIT" - ], - "file_count": 9 + "path": "tools/FileRefExtractor/FieldTransformationOp.php", + "upstream_path": "tools/FileRefExtractor/FieldTransformationOp.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "5d1b5990cc0dff74bf73359b6d2b840170868ec6", + "bytes": 1061, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/FileRefExtractor/FieldTransformationOp.php", + "sha256": "75bd3b3029b3907327fdb2bfdcb04f87eaa1582aba0bce9ed461778217fbe75a", + "status": "pass" }, { - "name": "phpseclib/phpseclib", - "version": "3.0.57", - "reference": "d17e0ddaeaf6f22f7e007cbb437d78792fe2a0e4", - "source": "https://github.com/phpseclib/phpseclib.git", - "license": [ - "MIT" - ], - "file_count": 344 + "path": "tools/FileRefExtractor/FileRefGenerator.php", + "upstream_path": "tools/FileRefExtractor/FileRefGenerator.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "8236bdfaf53fcdbd0763c8e6490a3e73c33dca94", + "bytes": 44130, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/FileRefExtractor/FileRefGenerator.php", + "sha256": "ba17803b5ed12426b7147cec1a9e8f8dec29693bf93ee276cc5afad9b9808597", + "status": "pass" }, { - "name": "promphp/prometheus_client_php", - "version": "v2.15.1", - "reference": "e153786bda5ca1d07335a2b5f477742c37195c40", - "source": "https://github.com/PromPHP/prometheus_client_php.git", - "license": [ - "Apache-2.0" - ], - "file_count": 34 + "path": "tools/FileRefExtractor/LiteralOp.php", + "upstream_path": "tools/FileRefExtractor/LiteralOp.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "68bb828c62b1cbcdcdae7a1863231b1d002263bb", + "bytes": 1049, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/FileRefExtractor/LiteralOp.php", + "sha256": "300fc3630eda3d03807e64f6017da0f35366a4397263097c49d2d3808fc5f3f6", + "status": "pass" }, { - "name": "psr/http-factory", - "version": "1.1.0", - "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", - "source": "https://github.com/php-fig/http-factory.git", - "license": [ - "MIT" - ], - "file_count": 9 + "path": "tools/FileRefExtractor/Ops/ArrayOp.php", + "upstream_path": "tools/FileRefExtractor/Ops/ArrayOp.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "fd852ce28e6ed41b32588fe13996074ca1c105e4", + "bytes": 2701, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/FileRefExtractor/Ops/ArrayOp.php", + "sha256": "3b4328ba6e38eacd076104e4533a6ff7c7083effbfc204e142fbe9a767ad8925", + "status": "pass" }, { - "name": "psr/http-message", - "version": "2.0", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", - "source": "https://github.com/php-fig/http-message.git", - "license": [ - "MIT" - ], - "file_count": 13 + "path": "tools/FileRefExtractor/Ops/CallOp.php", + "upstream_path": "tools/FileRefExtractor/Ops/CallOp.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "eb1fec67e441f4ad248674f7d35c88a738f472d8", + "bytes": 3156, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/FileRefExtractor/Ops/CallOp.php", + "sha256": "d76eb0ba098131a6a7166bd54c1a7cef00247742b9252821146bf4fc0ede34d1", + "status": "pass" }, { - "name": "psr/log", - "version": "3.0.2", - "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", - "source": "https://github.com/php-fig/log.git", - "license": [ - "MIT" - ], - "file_count": 11 + "path": "tools/FileRefExtractor/Ops/ConstructorOp.php", + "upstream_path": "tools/FileRefExtractor/Ops/ConstructorOp.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "832364e6ca44cd916403662bfda6f29cf847413b", + "bytes": 2986, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/FileRefExtractor/Ops/ConstructorOp.php", + "sha256": "a79c8e4edc295a749f905806492a87d5a3ae35f1fcaf2454d97724d9fc064f01", + "status": "pass" }, { - "name": "revolt/event-loop", - "version": "v1.0.9", - "reference": "44061cf513e53c6200372fc935ac42271566295d", - "source": "https://github.com/revoltphp/event-loop.git", - "license": [ - "MIT" - ], - "file_count": 28 + "path": "tools/FileRefExtractor/Ops/CopyMethodCallOp.php", + "upstream_path": "tools/FileRefExtractor/Ops/CopyMethodCallOp.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "4a2f591e0d60cfd6ea7ad9041c8fb5478a114740", + "bytes": 2813, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/FileRefExtractor/Ops/CopyMethodCallOp.php", + "sha256": "4b695dd32bf8674cbd65704bf3214fcbd1811fc19df9be3e5f93c7ae6f50c5aa", + "status": "pass" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.43.0", - "reference": "4d5d331bf731e0aedbc6b2f5e61135b7b7996a72", - "source": "https://github.com/symfony/polyfill-mbstring.git", - "license": [ - "MIT" - ], - "file_count": 11 + "path": "tools/FileRefExtractor/Ops/CopyOp.php", + "upstream_path": "tools/FileRefExtractor/Ops/CopyOp.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "9764de680f99a4be131d5f1bda4c10bcbb086892", + "bytes": 2321, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/FileRefExtractor/Ops/CopyOp.php", + "sha256": "0388255cac8c0eaf32267d2c214e628d0c9a7bd7f85c86d52e0ad145bcf61526", + "status": "pass" }, { - "name": "symfony/polyfill-php83", - "version": "v1.43.0", - "reference": "80ccff923a8d61f73ebe9da0aa94e25232f004ce", - "source": "https://github.com/symfony/polyfill-php83.git", - "license": [ - "MIT" - ], - "file_count": 18 + "path": "tools/FileRefExtractor/Ops/GetInputChannelOp.php", + "upstream_path": "tools/FileRefExtractor/Ops/GetInputChannelOp.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "1161ece1a6d0ef9d7a023a2a931a341579d93439", + "bytes": 3036, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/FileRefExtractor/Ops/GetInputChannelOp.php", + "sha256": "2b3c807797e2731a45d4feeee14e94994612130d3b1d3cfff8ecc8876d215558", + "status": "pass" }, { - "name": "webmozart/assert", - "version": "1.12.1", - "reference": "9be6926d8b485f55b9229203f962b51ed377ba68", - "source": "https://github.com/webmozarts/assert.git", - "license": [ - "MIT" - ], - "file_count": 8 + "path": "tools/FileRefExtractor/Ops/GetInputPeerOp.php", + "upstream_path": "tools/FileRefExtractor/Ops/GetInputPeerOp.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "44f025cccf9e475639a36bc069ff9aa0f2b6e172", + "bytes": 2670, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/FileRefExtractor/Ops/GetInputPeerOp.php", + "sha256": "a9bc4d8af81fdb9a78908038690568e7e94c02cab64e59fc52a10f002dbf3662", + "status": "pass" }, { - "name": "wizardloop/broadcastmanager", - "version": "3.2.2", - "reference": "f2792a383416b66bb68e55f09414563e540538d6", - "source": "https://github.com/WizardLoop/BroadcastManager.git", - "license": [ - "AGPL-3.0-only" - ], - "file_count": 16 - } - ], - "source_symlinks": { - "vendor/danog/async-orm/docs/index.md": { - "target": "../README.md", - "mode": "120777", - "sha256": "dbcc210d7f4962499db6d4cfa18658e26d05ee700c962a811cac911f095e22fd" + "path": "tools/FileRefExtractor/Ops/GetInputStickerSet.php", + "upstream_path": "tools/FileRefExtractor/Ops/GetInputStickerSet.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "9acfc53679831a298c92a118e51cb5d1b1e5880b", + "bytes": 2684, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/FileRefExtractor/Ops/GetInputStickerSet.php", + "sha256": "7c3b0ce0b2c6b3c0bbf7c5c4ba33e7b491a1a8547e0340667e40348c0e228779", + "status": "pass" }, - "vendor/danog/telegram-entities/docs/index.md": { - "target": "../README.md", - "mode": "120777", - "sha256": "dbcc210d7f4962499db6d4cfa18658e26d05ee700c962a811cac911f095e22fd" - } - }, - "files_sha256": { - "additional-source/amphp-windows-process-wrapper/.gitattributes": "e6518f1394b1372580e03c792bf6b1a51766e1da051815457fc881bf78476ecd", - "additional-source/amphp-windows-process-wrapper/.gitignore": "122661b5b5b483734ef04f7f291a24dcc786ffb0c9e92a1f35b2deb59ebb26fd", - "additional-source/amphp-windows-process-wrapper/LICENSE": "b41825e266bd6e700ef99630fee09db6338122a1d28c1d298c64cea6fc1c030c", - "additional-source/amphp-windows-process-wrapper/ProcessWrapper.sln": "5f26b1a717dda8d8b2573588ab8c87a585415538be92300e81c2e9524e347e6b", - "additional-source/amphp-windows-process-wrapper/ProcessWrapper.sln.DotSettings": "4db43cc7fbc6b8972f454e894b5a70a1cd9e214ba15c9649fb680e9cf430c8d7", - "additional-source/amphp-windows-process-wrapper/ProcessWrapper.vcxproj": "766e9040c299829a030bdaff7b450ec6781fac58ef123175b5b022598bf980f8", - "additional-source/amphp-windows-process-wrapper/ProcessWrapper.vcxproj.filters": "7eb705d68fce787832d0d26a945bd785802fefdd87ba1386cb19365e997b5ffc", - "additional-source/amphp-windows-process-wrapper/README.md": "22eb3f686641db618709bda289529feaa43c231aa725cd059731f1eef5dfe423", - "additional-source/amphp-windows-process-wrapper/resources/.gitattributes": "f9ff8e3d710fc3f6acbb095258e4746cc01d3e7d351c884ea6880455d82bae72", - "additional-source/amphp-windows-process-wrapper/resources/Icon_amphp.ico": "4d746cea582e3b984584fefccc2e6a90d39e75ec0b650ff43bfc893ea2e4eda2", - "additional-source/amphp-windows-process-wrapper/resources/ProcessWrapper.rc": "e08aa7682e9c823f4f68e47c237e4ee88b2b8b78616abb94a38ecada3508e993", - "additional-source/amphp-windows-process-wrapper/resources/resource.h": "58ff0eadb1c7e5c2a999f711ae95fbd765d6b0f718f48ab68558563ebf04f601", - "additional-source/amphp-windows-process-wrapper/src/Args.c": "b2d944379bd3af7a289aa500150f0ce27e618eb378d3f3eecf384f8a32a7d441", - "additional-source/amphp-windows-process-wrapper/src/Args.h": "f3203671d93c1fc7aec4dab123b1a96f2de525071e5f8e3bff73e96a19b4353c", - "additional-source/amphp-windows-process-wrapper/src/Encoding.h": "95e600fd81ce3830eaada2edaa2e560b9e060751f0d6518ec816ea57e682a5b9", - "additional-source/amphp-windows-process-wrapper/src/Errors.c": "c8021ac52ed123e4ece667f97048b1ecadbad122b993c1e43327db985a21c463", - "additional-source/amphp-windows-process-wrapper/src/Errors.h": "ec57545ed3bddf7710f23b8e14a21a0d5dda5f94613bf388b502fdd13932a34e", - "additional-source/amphp-windows-process-wrapper/src/ProcessWrapper.c": "f93286e07aea62ffa1d7ba20839a3bdc21ede954c7f8a6096796d9fdb229a389", - "additional-source/madelineproto-build-inputs/.gitattributes": "3bb98dfe72b07470c126ea3bf718cd1971c91d06f06c142c1a3f61576e8dc527", - "additional-source/madelineproto-build-inputs/LICENSE": "57c8ff33c9c0cfc3ef00e650a1cc910d7ee479a8bc509f6c9209a7c2a11399d6", - "additional-source/madelineproto-build-inputs/README.md": "d29b413ca8fab2fd2bd7e3758b5d1f054fe01e470b260eceb76717ad6a028d31", - "additional-source/madelineproto-build-inputs/composer.json": "18de335fb004ecfea1334bdf98d53dc2dc5045d6202723d19cfb3004b7293073", - "additional-source/madelineproto-build-inputs/docs/template/disallow.json": "8aab568b61b51b83619933be278db5b0c51218b16d0b991193173160ef752dd6", - "additional-source/madelineproto-build-inputs/extracted.json": "2b0b8ef62b64a70035a8d5d4c4b4bee60a22fa861d5b61e0b233f9f117c88534", - "additional-source/madelineproto-build-inputs/langs/ckb.json": "1828a99998116c24849c5a6672a5d00e8ea346cfb008ab50482dd0f1963d05dd", - "additional-source/madelineproto-build-inputs/langs/de.json": "ca3d163bab055381827226140568f3bef7eaac187cebd76878e0b63e9e442356", - "additional-source/madelineproto-build-inputs/langs/en.json": "33e7b63f83a7a79fe0aa7ac73d608894b2337920de3823a4d2588f30fca07484", - "additional-source/madelineproto-build-inputs/langs/fa.json": "636744c11f1b86a49a16f6c3c2f5f09dbcec9a5789dc5466240579155294f97e", - "additional-source/madelineproto-build-inputs/langs/fr.json": "d5beb79e1abd2a64f82c18965321cfe56c063c1bed4a92ebab393d9ceabdc30e", - "additional-source/madelineproto-build-inputs/langs/he.json": "b517525a26aec12a83c21d1df347cac40eaeda25c0007ca72e92139d152a12ab", - "additional-source/madelineproto-build-inputs/langs/it.json": "fa6d8fbbb95757b79142654e519209b9bb6b18ac9dfdd36970f2f999f701b4dc", - "additional-source/madelineproto-build-inputs/langs/pl.json": "613511a5d23d972281b0ddff9dfc781c6e971dd712e54f26f35baeed64f28210", - "additional-source/madelineproto-build-inputs/langs/pt.json": "8ec4534299dca265b4213fecec8aa32dd4d6a2b565a6b56e50b147c1e1cb3031", - "additional-source/madelineproto-build-inputs/langs/ru.json": "805799a38b240f788fab8ad843a2f15038fb5d20ee48a339b2dfebe130ed706d", - "additional-source/madelineproto-build-inputs/langs/uz.json": "f5c28b62e48835f02cab5646123cdf1441310c9bc1861bb0ce184f12d67f6121", - "additional-source/madelineproto-build-inputs/langs/zh_Hans.json": "b09ace620ac7e817e510f0238740b97fb9e41755c6ff0cb86798e2b55a7495af", - "additional-source/madelineproto-build-inputs/schemas/README.md": "df080ca2974e01930ef5232f2373f326477a4bd51713f8046df0d6ac2c5ea1fa", - "additional-source/madelineproto-build-inputs/schemas/TL_mtproto_v1.tl": "a68bbcfb6aea699cb394aec44008b01b915f1e8b632a1d786001ddd7c7300dcd", - "additional-source/madelineproto-build-inputs/schemas/TL_secret.tl": "899beb4c1713a65c9f09677dd93406a1e96c52b661d46dcd30ac7c0a87b0d20c", - "additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225.json": "7443a459ddf9f4b98de1121e16d35495bf4654d0e220ce6be3c53cb9ba3496d4", - "additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225.tl": "539272f5ad8992ee97b61bd134fcf3a28a41ce720e806d0e7dc0e2e408c581f9", - "additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225_file_ref_map.dat": "6f62c4ed620c5c6182c7e23b9373402f832cfc9400de70ee37c3a7c9752f9dbb", - "additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225_file_ref_map.json": "bbd2aa2593ccfc73638b82a7d9fe0cc116a1e97e55ce8268233ef4d13c233623", - "additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225_file_ref_map_schema.json": "118fa46b8a12dff8e4ac1545d99f39a0c261a1cd0d375ad52adb27a70072bece", - "additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225_file_ref_map_schema.tl": "1bb333123d34d3598b50cd5fca7445c9e0347bdfc78955dc71cf543262ac4dce", - "additional-source/madelineproto-build-inputs/schemas/list.json": "c7d92f848ad03729daf10d2ff25b9ec49f17c9562b754919f6ca8cfb93801827", - "additional-source/madelineproto-build-inputs/schemas/list_file_ref_map.json": "74c5c901f045e8e7cbbf199752a5ddf1e4de46c93a57a745697dc74db433edfe", - "additional-source/madelineproto-build-inputs/tools/AnnotationsBuilder.php": "06cfae503d18a4a4ce5c802469224d7d8c495b8ab71f61cfe6a67070682c63f1", - "additional-source/madelineproto-build-inputs/tools/DocsBuilder.php": "0b93a2da5e7c5fcd9f63fa4962805c36f8c7ad3fa22d24ee79af99814b21072d", - "additional-source/madelineproto-build-inputs/tools/DocsBuilder/Constructors.php": "9799411e24b068ebf379f36bad567704e198486d707abcf6962172d84816ef41", - "additional-source/madelineproto-build-inputs/tools/DocsBuilder/Methods.php": "75c80725b49b68650e9abe2a9971929cef3b16b0828ca9ea475f3cd1be8acf1d", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/ActionOp.php": "1499bd3053681d6aa2269839e1d55825448deb1994ba90852270ba91340087dd", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/BuildMode.php": "6cc7d671f6ada2959621969efc733c0e8fa2dce8297ed3592af0228e7111026a", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/BuildMode/Ast.php": "542f6899240f5d6d90e3d6dfd97e86ab68906854902f5f1cf3f61437a49243a4", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/FieldTransformationOp.php": "75bd3b3029b3907327fdb2bfdcb04f87eaa1582aba0bce9ed461778217fbe75a", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/FileRefGenerator.php": "7d9c84e5c51da29921e51b262ba8ab6af958b5abe95667e5bfbb279a941fb336", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/LiteralOp.php": "300fc3630eda3d03807e64f6017da0f35366a4397263097c49d2d3808fc5f3f6", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/ArrayOp.php": "3b4328ba6e38eacd076104e4533a6ff7c7083effbfc204e142fbe9a767ad8925", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/CallOp.php": "d76eb0ba098131a6a7166bd54c1a7cef00247742b9252821146bf4fc0ede34d1", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/ConstructorOp.php": "a79c8e4edc295a749f905806492a87d5a3ae35f1fcaf2454d97724d9fc064f01", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/CopyMethodCallOp.php": "4b695dd32bf8674cbd65704bf3214fcbd1811fc19df9be3e5f93c7ae6f50c5aa", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/CopyOp.php": "0388255cac8c0eaf32267d2c214e628d0c9a7bd7f85c86d52e0ad145bcf61526", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetInputChannelOp.php": "2b3c807797e2731a45d4feeee14e94994612130d3b1d3cfff8ecc8876d215558", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetInputPeerOp.php": "a9bc4d8af81fdb9a78908038690568e7e94c02cab64e59fc52a10f002dbf3662", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetInputStickerSet.php": "7c3b0ce0b2c6b3c0bbf7c5c4ba33e7b491a1a8547e0340667e40348c0e228779", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetInputUserOp.php": "d5bca8ffc5aa64c4cd33bede49392c21a0a800d9002bc22de0f46176a27e6a92", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetMessageOp.php": "08e7f19fb87ef29ccd001de99a3688a5d97653e5a1c274d99a7fb71fc3d6339c", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/Noop.php": "4e6c96a3014f3bddf3c39a4c0750f6237c5266ce03df7c09c2986855ff1c0c9a", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/PrimitiveLiteralOp.php": "e030b15127b2cb9407fd72e22dfd3b514327faa0a2c08c38581f9fa2ac001937", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/ThemeFormatOp.php": "e384c89147307988dbf4c2972ba1e5630f84ad2d40e067f93813d9fc03b42fae", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Path.php": "bdd3cbb15bcbb9504decec03dc1eb529f8805b5c9e73b4602eb219ebf7412b0c", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/TLContext.php": "0b975a77af7981eb7b4aa45c48adf7908be6f6d23f4016122e5548624367e9f0", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/TLWrapper.php": "88522ff62efa4e0fa690d1a7809726de2b3be1dd0fb14cbe2de4016172ce7987", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/TypedOp.php": "7604725c49ac22576f2c285fe2c56a7ebb0b87effa7422427850aaa33e753b34", - "additional-source/madelineproto-build-inputs/tools/TL/Builder.php": "1975f182dcc5490d5576e53314018cca155b11c8ed212dd60af150cba805c3f1", - "additional-source/madelineproto-build-inputs/tools/TL/SecretBuilder.php": "6d5c40cef5c8d152686cc90ade49a759c2fc2a26b01fe4d2fee66d80406404ad", - "additional-source/madelineproto-build-inputs/tools/build_docs.php": "a1fbde122f6e0fad09f40472d791a24a7bc0d3d3606bb9682ff4e57e962cf27d", - "additional-source/madelineproto-build-inputs/tools/build_docs/layerUpgrade.php": "b80237aa3f1d43d218c3e5c5aafb5866e8269580d359ca831f0e8931e0d7e082", - "additional-source/madelineproto-build-inputs/tools/build_docs/merge.php": "45c62d5c545d01934aaf86919f95f2fa46924577379d7d9ff904af6ddab0414d", - "additional-source/madelineproto-build-inputs/tools/build_docs/schemas.php": "88b3dfa2240c876838cba20d273efea2398ff35c864aee53b7759ab71203b267", - "additional-source/madelineproto-build-inputs/tools/build_tl.php": "647a38d12bf7f9624f4600ce3c9e2a52846fd6e75b01df63ee7be11f34bcda6b", - "additional-source/madelineproto-build-inputs/tools/fix_docs.sh": "4c743f26805a1d002e9f9eeb9f6df8868c099ab6c78ed03c31a17ad968e42e47", - "additional-source/madelineproto-build-inputs/tools/fuzzer.php": "e86aec0b60cec3c906ef40ef554d5a83f020f0df83fa41a0d82140570141ad4d", - "additional-source/madelineproto-build-inputs/tools/genDataset.php": "6d487fed4569c1fa863387dc90dc9af4fa9828b026aac45f11e611d72fd9fa45", - "additional-source/madelineproto-build-inputs/tools/gen_filerefmap.php": "64c04660acb12f86e75949e31e9683867ebd3ec32bf230cc129e26163ff4dd58", - "additional-source/madelineproto-build-inputs/tools/layerdiff.php": "93a6e0de4238f7e7dbe86c33e6230be2118fa8e297f6855f39736dfb75ac2f9b", - "additional-source/madelineproto-build-inputs/tools/makephar.php": "b8f014265dd8e5ba2c9d8f2deff573cecc7b1906f274094cd52d3127ac79f9de", - "additional-source/madelineproto-build-inputs/tools/phar.php": "f765c235dadc5ff6099af2cafc1fc465dbb0c5a084c060b1853b90d0b61c0019", - "additional-source/madelineproto-build-inputs/tools/phpdoc.php": "f7bebb70a0572c2746e8f16e58f9ca5e7c3b797370c66461964d966a0eb83e6c", - "additional-source/madelineproto-build-inputs/tools/static.php": "77b36fc8ad17adf4ce1b979cccfc97c88ec8d1fbcf2e88f70af06ddd1ecb244f", - "additional-source/madelineproto-build-inputs/tools/std.php": "718e35b65340083a1f4c59e49d53e73a96b210321256a92cd6622fee88305c34", - "additional-source/madelineproto-build-inputs/tools/translator.php": "566b7f50cddda5926f9a08f4432941ad8de0aa70c2957289fafec4ddf058d4e8", - "vendor/amphp/amp/LICENSE": "84904cb068b00a937d61104d0ae336bff1aa3518c0329d13dae8b71880dc2429", - "vendor/amphp/amp/composer.json": "6c95861590fa640fe7ef3c59b285b5980d362f9befe3b35891684329344a49b6", - "vendor/amphp/amp/src/Cancellation.php": "ebf61138d631d14fbafcc7372f48c371d2f9b4281b6e49145b874e5c04843f66", - "vendor/amphp/amp/src/CancelledException.php": "4045a6fe66b076eac2deecd7f185ec2242de4e1ea831bc2a67457c6256c764c3", - "vendor/amphp/amp/src/Closable.php": "0ad2b0fd45a9f6f7113b292b1fbb3fea7d488ca1a1026826fc6b248e6c5ca352", - "vendor/amphp/amp/src/CompositeCancellation.php": "7429a984776f5406715a1b36e2475dc772797066ad8421255545664f486c3231", - "vendor/amphp/amp/src/CompositeException.php": "289b56071a4882d0dc5ecd3ea90b5c1cf29f2c036e485bcaf90e1808938a8388", - "vendor/amphp/amp/src/CompositeLengthException.php": "ab18cc343df92298340be912332b91e4bc984304bc9fe8efe4eeaa73b3753791", - "vendor/amphp/amp/src/DeferredCancellation.php": "8645b7614818764f6872c536d11bdc438016b4b58a3a78f9a5997bb06966eca8", - "vendor/amphp/amp/src/DeferredFuture.php": "88652d2b81e29f8079dbe0b553e6be15aeaf111dae5c77dd9a7c8596459d0699", - "vendor/amphp/amp/src/ForbidCloning.php": "81e71e54e3368e45ef573a098d4361173ad69e315f54761baf936c8f9c242f5b", - "vendor/amphp/amp/src/ForbidSerialization.php": "a3979e28ef4303e2234bf3b400d6e35bc96db6cf41ece074dbc6ff8603ae4c52", - "vendor/amphp/amp/src/Future.php": "62404395d4558f635a7e53f45f2c5b4348ed2b767ea10ddeac50479691f183f5", - "vendor/amphp/amp/src/Future/UnhandledFutureError.php": "19cb06f102acb3521f7339792d9ca930297187734502b29a86dd155af5383dfd", - "vendor/amphp/amp/src/Future/functions.php": "514db68044f1b4ed5d37bab7cfdd811c72ea3a316b504f61e01a533ea31db35c", - "vendor/amphp/amp/src/Internal/Cancellable.php": "efa42a3c66bd550321e9490d68046ab7736beef6d9affd84720e97c5fc45c7c6", - "vendor/amphp/amp/src/Internal/FutureIterator.php": "eb0395360f1fc593db276ce49f433159cdff4fd01d0f669f92d140b8fd527fd1", - "vendor/amphp/amp/src/Internal/FutureIteratorQueue.php": "c8349f3a4434b8069b8a5c3f78563f93beebe43bc14dffd9a2f7466ad187ee3a", - "vendor/amphp/amp/src/Internal/FutureState.php": "1f9221e33da695127c599dc1daf79c8d1368a3386a6b9a0f60c7637e88c06c33", - "vendor/amphp/amp/src/Internal/WrappedCancellation.php": "3461882687da68bf31a021caa83f156b545dbecdbb57a9c85ed21bdf21d4b18f", - "vendor/amphp/amp/src/Internal/functions.php": "95f03b30a237f0d164ca111a9650f1cd1ede61a43020d93b8838b8c3b6e98ea2", - "vendor/amphp/amp/src/Interval.php": "a58f2bbdc857f519153387b67c5477c3ec1fae7f5c145b99ef91dafc5d39aa47", - "vendor/amphp/amp/src/NullCancellation.php": "6fdef4ebce044baa2eecf3113649fdbdb3dbd68df6ff989a904f0e2167994f9e", - "vendor/amphp/amp/src/SignalCancellation.php": "6af1fadba98945eb625aa786a8ed184936c3f997d0aaefd49bebcc2d022deb34", - "vendor/amphp/amp/src/SignalException.php": "d7ad4704319fa752e7cbae95e05cb8237e78b3ad81ac2031a916a1dfa0c2761a", - "vendor/amphp/amp/src/TimeoutCancellation.php": "da2860989529bbd6d30178c4a3dae9801fb6713ff46558cb2d3581604592edd0", - "vendor/amphp/amp/src/TimeoutException.php": "b7bc3aa27117fe6867040b22d6734205289e486a0dea9a29bb650df2992396ff", - "vendor/amphp/amp/src/functions.php": "17b647d5c150955668f9d998b9ada5af99c88ebd39b10fb69ad69189937a3c34", - "vendor/amphp/byte-stream/.github/workflows/ci.yml": "0078d569a4ddbc2a99769c59407802e6e2d4ecb91e6c5f35bc0583b3b568a98d", - "vendor/amphp/byte-stream/.php-cs-fixer.dist.php": "5ce44edecab0341a80260246cecaef8e48690f3a1b6be2ddbe812ad05c83851e", - "vendor/amphp/byte-stream/LICENSE": "5054607a36e0b2c287274145c01e3358ca62e79754d947159b7ace87cdd78305", - "vendor/amphp/byte-stream/composer-require-check.json": "7c052dcddc8d79aaaba0cc5cc131eeef1ac25e0406937fec5063e9e222237e68", - "vendor/amphp/byte-stream/composer.json": "986cfcf1044bb6b9ca4c36e70af51b4552cfce6bbc1eb2ada11872388961b2be", - "vendor/amphp/byte-stream/psalm.xml": "470a18311fdda9f3acd01180f14af36f4b4566358153a76430ec93607154cf66", - "vendor/amphp/byte-stream/src/AsyncWriter.php": "f717480c1a172230ea95383b7abce6e0fd6b17d3c243b87543c2d8920e72099f", - "vendor/amphp/byte-stream/src/Base64/Base64DecodingReadableStream.php": "e2db3f5226d5ee1e50d4c5b9fcc25ee1fcf5c2c1f88612d5012993a82ad0b84b", - "vendor/amphp/byte-stream/src/Base64/Base64DecodingWritableStream.php": "17658a26fcdf8cf5fd8dc6700faf8ec69d07c17a1de8d2250b16479ddf95e98b", - "vendor/amphp/byte-stream/src/Base64/Base64EncodingReadableStream.php": "2a6aca35f245409061a1d810b370208d6a73407059f607d8511097b509dc4684", - "vendor/amphp/byte-stream/src/Base64/Base64EncodingWritableStream.php": "ee7f99da7bbf0c15eccb8a2759b932a32bd94852fa5a4d197d8400f784359855", - "vendor/amphp/byte-stream/src/BufferException.php": "43dc80e36eda19b04cad50b69715c60367a9eead0aa6de560ec5c736fa5394b1", - "vendor/amphp/byte-stream/src/BufferedReader.php": "c2ac60b46765b615902ebcefc55fd5b41ca62158af61c34d60416ad8cf4e8f9b", - "vendor/amphp/byte-stream/src/ClosedException.php": "219a7bba4df3cefacb011eacdb15d8ba3c5b3ca003636f5daa1056025d8085a3", - "vendor/amphp/byte-stream/src/Compression/CompressingReadableStream.php": "8bfb0be2def1c7884c97abece12b5d823e8efee1c85c741c2aaeee4bcd8f0dd2", - "vendor/amphp/byte-stream/src/Compression/CompressingWritableStream.php": "a510920406333d81e34f9292dc0945318d2607ee1fff106537341b7f80de3245", - "vendor/amphp/byte-stream/src/Compression/DecompressingReadableStream.php": "90a2bbb209c5395b025666f357c6dbee7be67740b181240dc6f0915a6a55c2f2", - "vendor/amphp/byte-stream/src/Compression/DecompressingWritableStream.php": "1e33a31816aced792e387aed201ebb6226d41951a1720fc0d139f67c47415012", - "vendor/amphp/byte-stream/src/Internal/ChannelParser.php": "292e69e14d85ec26ac91911f239e44a0538f6ab1a8dfbec7f6982bf1889ff10d", - "vendor/amphp/byte-stream/src/Internal/functions.php": "4c8aee76eb56639121cbd04755ff7959cd18a477a3696653973c9990c1ca86c7", - "vendor/amphp/byte-stream/src/Payload.php": "a0eed51625b642ee66b6eae49885825861cdd80c321d4a2cc8a7b2080d31530e", - "vendor/amphp/byte-stream/src/PendingReadError.php": "de9a87b42ba1f066cee5cfce428e96d523bad90b50e7ced97c99e2420c6fe35f", - "vendor/amphp/byte-stream/src/Pipe.php": "a0aa04ba0a354100c79e5cf673bf1cd69c9101ef95612aa36b984351a0413972", - "vendor/amphp/byte-stream/src/ReadableBuffer.php": "e214ee17286081ae4dfc097bdf64572a52a4186562bd48701b3517c70971a4cc", - "vendor/amphp/byte-stream/src/ReadableIterableStream.php": "d45fadc7d36a23fcbcc22b1970bd8d39fba37c7a34464def65c6debbf70293ab", - "vendor/amphp/byte-stream/src/ReadableResourceStream.php": "d889460b5fdbe74604c77f5766206b748000f7e4776f829e7ee22276fa8332d8", - "vendor/amphp/byte-stream/src/ReadableStream.php": "f82bf255eea6f1ed3d093dbcae0eaf300ee6d970d83c07cd6f130ec84f759078", - "vendor/amphp/byte-stream/src/ReadableStreamChain.php": "0240a00cbfe487b25660e5fcb293fbffde3e1a19d4cbadf5fa58e707d6bdf18f", - "vendor/amphp/byte-stream/src/ReadableStreamIteratorAggregate.php": "651421877fc57b4d3c7360b373d2c4c363bef267bede3a7517738a8d062f7fa5", - "vendor/amphp/byte-stream/src/ResourceStream.php": "15a7a5f304afefa157da1465782890af7b50ba03bab264226a1c34200fdbe45b", - "vendor/amphp/byte-stream/src/StreamChannel.php": "1db3525604fbcacef129a1df7235413f6d4676d767c9f793d74bf2b339050381", - "vendor/amphp/byte-stream/src/StreamException.php": "22f706319d8bfb4337d3818cd01178270b5aaa0aeb0f049d2deff45ace02a020", - "vendor/amphp/byte-stream/src/WritableBuffer.php": "26d4160b3803445c9db8305e09355588bf57e6e8e9a66487ff7c4720aee7df36", - "vendor/amphp/byte-stream/src/WritableIterableStream.php": "e7fd0bb47e77c099d4617eea7b029a823446f3bfa3a3d7028eaa1bc7f1095615", - "vendor/amphp/byte-stream/src/WritableResourceStream.php": "3d2a9c11020de4de3b9ddb79da46840558b99fa01b43a2d3cd307d1f1cc77b7f", - "vendor/amphp/byte-stream/src/WritableStream.php": "50722ff821de631b67f9ec6f15744aa418d369a9fe80f92f1f1dc6df0624d4f4", - "vendor/amphp/byte-stream/src/functions.php": "6d26113166455a6d4f4f8d76e76b9d9160ec0b1ece22ed18b5318057e410e2c2", - "vendor/amphp/cache/.github/workflows/ci.yml": "2942ab7c0cabc36f2cc753d14cdc9e9f85cecc9cbdd5e2c4ef78218d6d682512", - "vendor/amphp/cache/.php-cs-fixer.dist.php": "3111e6ce024060615cb967c5da8c8ba4142ea53c13cf9389c4f3766f016d235d", - "vendor/amphp/cache/LICENSE": "a6d83873b76621737538da8481d4f737fa5ffa15dd3abe6e4c3a112f6f5ea1ac", - "vendor/amphp/cache/composer-require-check.json": "0a056b512ad306d1f7798449d4232fa59377c1870a77c4919fd391e54221ced7", - "vendor/amphp/cache/composer.json": "8d8b2b08f8eda5b3c8d6f87956a57deeab0b9065227430d9c5c20756e7dfb05b", - "vendor/amphp/cache/psalm.xml": "c9ae8182dc86669b279b1f873d67dcae590da9b10e43b27e79de9c1d13975217", - "vendor/amphp/cache/src/AtomicCache.php": "a2070275541df0f02a9b6df4136bf8f4cd1774b99c8deceecb21a46f37a590c3", - "vendor/amphp/cache/src/Cache.php": "047e8fdf2a8627c04226f5cd0f0e227e9245b2b1a1056bcc74722e165d211c79", - "vendor/amphp/cache/src/CacheException.php": "f8791b72ca1f43d9daa6cf151548abefcaf8508c5b8ceef29d1a9e388e048c0e", - "vendor/amphp/cache/src/LocalCache.php": "44c1815f46a1c7951021844414ef1be389b943efb3429bb67b40b85fdf2d4335", - "vendor/amphp/cache/src/NullCache.php": "26740b0e947d54af58727b49a02aeaf220c0f155db7e8f80304b80368fdfbd8e", - "vendor/amphp/cache/src/PrefixCache.php": "5eefd610752714b58414249f6c21b84c16c3fb98f527038424bc49bfe0bc52e8", - "vendor/amphp/cache/src/SerializedCache.php": "4fb5cb8b630267c5727aaf7ecf8b58211a6e01c3e276dfd6e9315530ba568639", - "vendor/amphp/cache/src/StringCache.php": "61afc450a01c56fcca98dc715e9249de22deaa6b2150ed7f72f3549a3f7c0fb7", - "vendor/amphp/cache/src/StringCacheAdapter.php": "aa727223ef87214cb6c8fa4a28f1ad87c1dcd6e0df1eef722ba819a3b0f4c067", - "vendor/amphp/dns/.github/workflows/ci.yml": "d232ea9bdc3e0c2b7a9381b5762e6f64dd7f9bb47adfd307b099951059ba3f22", - "vendor/amphp/dns/.php-cs-fixer.dist.php": "5ce44edecab0341a80260246cecaef8e48690f3a1b6be2ddbe812ad05c83851e", - "vendor/amphp/dns/CONTRIBUTING.md": "979aef790f3cd7c4a193f858996e079eaac50e4e496b092b05b0339bb2bedbfd", - "vendor/amphp/dns/LICENSE": "93dc2b2aae85651379265cbb4906d2b054020ac9cc4ee70e5040f79751e34651", - "vendor/amphp/dns/README.md": "9f26c13424ae8b1069197eabaace5d43f183b5a4f85609d42e9ef166c7472ed9", - "vendor/amphp/dns/composer-require-check.json": "00d70055d3bf2e423b34eabf91c61ebf9e8efd16af311d5eff14469ff7add9a5", - "vendor/amphp/dns/composer.json": "97433bdf58fbe0cf392d784a299697fe66347738b41d326aa2bb11e4d846fbc0", - "vendor/amphp/dns/phpunit.xml.dist": "345c60de31100b878744261dd711c4e6972212bd24e41d39548d141c1d9db796", - "vendor/amphp/dns/psalm.xml": "c01143dd7b83c6647e7fba08fe88b19c63257b6d5c88746db51fa12536deff0e", - "vendor/amphp/dns/src/BlockingFallbackDnsResolver.php": "4404de604b2d9e3a8c8ac7910adc63db83338df9ec9fd7edabdb021c7f4acf8f", - "vendor/amphp/dns/src/DnsConfig.php": "0ac27a78710ee04d75c16823431f475fb2ce611903201634e0f369be881458ca", - "vendor/amphp/dns/src/DnsConfigException.php": "2b0a21e796e602cdc7b24f759d2e05819b292fde368bca3d9f3e8a2e4143e8be", - "vendor/amphp/dns/src/DnsConfigLoader.php": "a854753faf02cdd59046b9b450c93e721de84a0871ce4c6935f558061e4cb010", - "vendor/amphp/dns/src/DnsException.php": "20a10431ffe1de7359ab906676c8eaae9bf6ba620a41441d22476d8f3758c02a", - "vendor/amphp/dns/src/DnsRecord.php": "ceeabbae9cf16ec769f38f37d0f338fbf3446b93e5be192d591a502ad581b4f0", - "vendor/amphp/dns/src/DnsResolver.php": "a6bae009efcc1b6aaa16cb6f8ff784d79102093920474151df66da85e6b5ee34", - "vendor/amphp/dns/src/DnsTimeoutException.php": "9d3ee237b310bcd9b0185fe3f1b1ea6496d8583e521c45e11018cca785b94af1", - "vendor/amphp/dns/src/HostLoader.php": "0dce1612711b2310d2b3175662f2702cebaf9dca44251c021a2171251ea61035", - "vendor/amphp/dns/src/Internal/Socket.php": "ca1129a565f769b8a20729d9499f199afd58aeefe7579ebe1e61aa6f545ec924", - "vendor/amphp/dns/src/Internal/TcpSocket.php": "b52949012c7510b5743e0b98cd63e7679e846eef9d404c5d8ff37ac029ce3939", - "vendor/amphp/dns/src/Internal/UdpSocket.php": "ac3dd8f2b6bb1e94ca3bc51fd263012b2d4a333c6ed3c0ec8194251d8311c981", - "vendor/amphp/dns/src/InvalidNameException.php": "183ad8d2ea5ab8d23989cf1f720adb8708120a0c55a4e50fdffc7a64fa96017a", - "vendor/amphp/dns/src/MissingDnsRecordException.php": "500ba6b03026b83732325619c6552fbba99ba54bacd9d1c2837e1162c63d4b57", - "vendor/amphp/dns/src/Rfc1035StubDnsResolver.php": "2c3b608e2323215751b69afbf3f484e7fa9fb4cf059fb3eb3dc2f2d42a63b4cc", - "vendor/amphp/dns/src/StaticDnsConfigLoader.php": "8205246b22b5757bdf7ab100fb1c174f68c936686f4fbd88fe42bcec00ac43e2", - "vendor/amphp/dns/src/UnixDnsConfigLoader.php": "477885d1a7245af452752dc02b8f7ad8641e721361f12e1242deaae91c2d0cb4", - "vendor/amphp/dns/src/WindowsDnsConfigLoader.php": "f103db8dc85f185e3fa5151e3d46df0578f9352bb1cd33df7b346b822ed3c7cd", - "vendor/amphp/dns/src/functions.php": "8255d8224fb36a550e4c18f260a9d4c82fa74dbc528c59ea2467b47629dff960", - "vendor/amphp/file/.github/workflows/ci.yml": "1beb65f104a33ed7566c223aaec60ff51db268c2784b82d1b44e57dc8269d3f5", - "vendor/amphp/file/LICENSE": "75ff14768ed3b0898ea24b8ff76e9615c21d1d4e6f7ba1d258cc55cb9689ca73", - "vendor/amphp/file/composer-require-check.json": "ab36b5ceb64ac09f0bb7bc569222b4f5817ff40af536eb386dd93eb7ff911ca2", - "vendor/amphp/file/composer.json": "73f832d745fa4509184f2841319a252cf2b4af8ae1e6faed33657d743924665e", - "vendor/amphp/file/phpunit.xml.dist": "85c7327041aeffa92733b7252c5f88978957fcc4db80f89d6a05aad9450f0d27", - "vendor/amphp/file/psalm.xml": "11dd3085b07900c38ecf4f2e270583becf1967b62d551ede56f9f1a10638a8ba", - "vendor/amphp/file/src/Driver/BlockingFile.php": "78b2f4acabbe46f620a286a90604a6d8e66ba340119115100cf4e1a303eb4322", - "vendor/amphp/file/src/Driver/BlockingFilesystemDriver.php": "013c3d7f2e24c11364ea1ca32d658bd9e290aa6aafefdb9c347d4a2daba45a6b", - "vendor/amphp/file/src/Driver/EioFile.php": "6637a1af69072da37a83b6b71fdeac2677d75a0a3ff9ea6ed66a8969003f2520", - "vendor/amphp/file/src/Driver/EioFilesystemDriver.php": "fa5d4d71c5b18f019864a146b21590bd2db1ed6e5205e066420081db472cbb13", - "vendor/amphp/file/src/Driver/ParallelFile.php": "ae59ef5c597e35980d7fb8b590e0977638b51897a86699a269566623df5434bb", - "vendor/amphp/file/src/Driver/ParallelFilesystemDriver.php": "d79984b3e162270e61c3044f2bb0b0c65d670e99bbe4b8a8c904286ad15e5ecf", - "vendor/amphp/file/src/Driver/StatusCachingFile.php": "a50013fd3b4678997fa6c2d48114f2d42c2ad290cd14510fd01218dcaa766de2", - "vendor/amphp/file/src/Driver/StatusCachingFilesystemDriver.php": "0399976e2907846ea8443426921038e1eb66e4f609ec851a8ec88fae3b939cbd", - "vendor/amphp/file/src/Driver/UvFile.php": "03a74f7baf754f925c26d3c54bdd9ae37e2f9dd804b30aab930edf51478d14db", - "vendor/amphp/file/src/Driver/UvFilesystemDriver.php": "6ec6031d1ccf524008e3d370ff3d71d85bd24615728dfa910fa2c8dedfb59b3d", - "vendor/amphp/file/src/File.php": "95802ba59e9fd3344472036e9155b75c16d1fcc0e88d498b839dd9e00cd963f0", - "vendor/amphp/file/src/FileCache.php": "f97317ed938130eae66e1a0ade67a2931c207c6522693d302ddf08785afa56ac", - "vendor/amphp/file/src/FileMutex.php": "cb75694b160855f5ef7e71ad794258523f53e7ca5128ea46743152905805a44e", - "vendor/amphp/file/src/Filesystem.php": "b771ef9129ec7499d44198ddc8cb5756a9a7d3be2fe19cf8e309024b2629fb96", - "vendor/amphp/file/src/FilesystemDriver.php": "ac8e6d9f2d2b2bb3326afb17aeb6ee25278aedcf3c4941f00323de8ae65c6876", - "vendor/amphp/file/src/FilesystemException.php": "ec9813de75586fbbb0f058ec7986edcc93d1207da459c0d89fe16f7df7ac53d0", - "vendor/amphp/file/src/Internal/Cache.php": "bb9806dadbfdc0559c1174677e0a627a543e61ab23572a198638d416b5652365", - "vendor/amphp/file/src/Internal/EioPoll.php": "3e9c9985a30bb0b9abb8370b5ea368a1b37aaa9bb5e1b13471bf07eda2ecf4c0", - "vendor/amphp/file/src/Internal/FileTask.php": "d4f7bb0f7b2e8fd18297a2bfd8eda931d05f40176ee02dae4a14ebfce0198f3e", - "vendor/amphp/file/src/Internal/FileWorker.php": "b05d4c3fb8ab3e306508820eab248d2e15120c277684283681f8488ef3f809db", - "vendor/amphp/file/src/Internal/QueuedWritesFile.php": "6db075c6366396a366c6cdeb775dcd141b8c299367e6dfeddca9130901bc7459", - "vendor/amphp/file/src/Internal/UvPoll.php": "d3905b98f01dfd9c12a6f628afff2a5c3f6ea3c34b5d3b782f4cf0f23087860c", - "vendor/amphp/file/src/KeyedFileMutex.php": "22fa5a027cafab1067853ca6506adca4ac3edd8807afce56d2ba70c5f816b9f6", - "vendor/amphp/file/src/PendingOperationError.php": "4bbe24c16b71edc7f7bdc0cdda844836bd3d696eb3bd54f67b34b152450f47ab", - "vendor/amphp/file/src/Whence.php": "c0a941fd362df34bc18714d859e6e80c5c3779882a71973e00f9c8ffc63e044c", - "vendor/amphp/file/src/functions.php": "1eb2e279fd5f89dbdcabbb57089b1a56e93c3350db1a4429c9019d64cba68b05", - "vendor/amphp/file/test/AsyncFileTest.php": "b7d82c70d8fb457647b009b1d603d0d8157edfecb8cd46889691ae556d8c6b16", - "vendor/amphp/file/test/Driver/BlockingFileTest.php": "4fb1887d4182bc945a08cabaa85c99b242a42b81d7c3b7fc3e2d0124f4d309cd", - "vendor/amphp/file/test/Driver/BlockingFilesystemDriverTest.php": "e9889056ad222a0ac8ce3e4dfecdc708a13e3facea0eb07e913d5cb230e6e6f2", - "vendor/amphp/file/test/Driver/EioFileTest.php": "947542cd11214a0398670ba7119eea7502ba1b45c48e6cf6e32fcc43c52eca8c", - "vendor/amphp/file/test/Driver/EioFilesystemDriverTest.php": "a285423a4a8e860fe0cf4d0f4ba0a132900b4e3983e64efa47ab88da7b037ecc", - "vendor/amphp/file/test/Driver/ParallelFileTest.php": "e9c77247ca25e150c828abbc0692ec1740b38989e82f69fdb444c952f43152d5", - "vendor/amphp/file/test/Driver/ParallelFilesystemDriverTest.php": "4e4c767f0667b5a0cb79ad67c69c76a0f60f3698417c512fc609f46ee8fba2b7", - "vendor/amphp/file/test/Driver/StatusCachingFileTest.php": "da97d2a34c9908b1f41b97cf8779dc06f3759ad5f29860ac2e08d72369623029", - "vendor/amphp/file/test/Driver/StatusCachingFilesystemDriverTest.php": "279d80f610e0eea5afca499324e2a86b1a0e7228ee20fb998d1ae62e1c65fa4c", - "vendor/amphp/file/test/Driver/UvFileTest.php": "5e3ab54267f31270730158fbf5fe298835033b2f3700e31e3588ee2c2161a0fd", - "vendor/amphp/file/test/Driver/UvFilesystemDriverTest.php": "7fa99e27a943600036c0f11e1910d7e92524327e371c5769b78d44efe244353b", - "vendor/amphp/file/test/FileCacheTest.php": "72b40f11820158479a29041b1e71f2d678a01177769443b8e168aabdb938e302", - "vendor/amphp/file/test/FileMutexTest.php": "0b279ea8ecf78e66232e5adc8b490972e3f66f841ec2daa249f3548e6d1c156f", - "vendor/amphp/file/test/FileTest.php": "6d0064ed62dd9d74dded9712af9b747e8eb88d6633f2bfd086db7f28365831e0", - "vendor/amphp/file/test/FilesystemDriverTest.php": "bf35b3bee4bdb8091e22755800cf1cbd72d82c0b5e8d8de6fdfc360d4f40e612", - "vendor/amphp/file/test/FilesystemTest.php": "5174af323c39fab5a84e6b655b2771e506745efc4e49020f00fdffb1eb0b248e", - "vendor/amphp/file/test/Fixture.php": "a11924262f9e5b989db8c90a4e050cf5c7f259b71ea55f60818f638af7934d81", - "vendor/amphp/file/test/KeyedFileMutexTest.php": "efe505b697b15e54d42882aa369d3064ba11cfe798dab4644d8ea8a7ff087308", - "vendor/amphp/file/test/phpt/issue69.phpt": "b8c3520e7f828b8f0c4ec50942880ca31374e2b9230449e8641119459bec4b41", - "vendor/amphp/hpack/.github/dependabot.yml": "1d602d1045ad62a174430bdb482a347b1ef7768bbce2402fe53ceaaea117ede6", - "vendor/amphp/hpack/.github/workflows/ci.yml": "7ce55fe242ff0a7538199b0c783d7260fd5eaa2d443a0fd200a170561c117b14", - "vendor/amphp/hpack/.php-cs-fixer.dist.php": "5ce44edecab0341a80260246cecaef8e48690f3a1b6be2ddbe812ad05c83851e", - "vendor/amphp/hpack/LICENSE": "93dc2b2aae85651379265cbb4906d2b054020ac9cc4ee70e5040f79751e34651", - "vendor/amphp/hpack/composer.json": "644f9460d5ecc66861888e48604f9009aab0f1cb1c0ce9e2a46a60cdb91fb22e", - "vendor/amphp/hpack/examples/bench.php": "3141e4bae4f1cc22f5bbde38ceaac93afb5f39c4362a2bcb889d3a6acf38ee41", - "vendor/amphp/hpack/src/HPack.php": "5c279bd82c145cce501f55b2742ec4df9f9465a613309613e4c89789910c64f9", - "vendor/amphp/hpack/src/HPackException.php": "ea994bae2a47ed62968729e3b57aa8a833c38bc6e3171289c63f6ac4ba349691", - "vendor/amphp/hpack/src/Internal/HPackNative.php": "576a240926ea0175f7cf9040f08d89216bb658e5d9c72b8458433767806fa341", - "vendor/amphp/hpack/src/Internal/HPackNghttp2.php": "bb439d875a6cd3d3f79405a3456bdcff09709f2e193b43af57ef0eaf15c4d836", - "vendor/amphp/hpack/src/Internal/amp-hpack.h": "7bc303aa3aa01fd9534aaac405c4b93d31932eb08a3a3ef1c21291ba49e89f6c", - "vendor/amphp/hpack/src/Internal/huffman-codes.php": "37db3e2675300925292f7dc9d86bbef22f66d4992099515f32a598af19da0f35", - "vendor/amphp/hpack/src/Internal/huffman-lookup.php": "2e01ff912324658a5cd5aa4bbfec36da4d6299601899a314325ab451be74deef", - "vendor/amphp/hpack/tools/compress.php": "bd42a505f81fec9d03a436bf382eb68e8c79452c2712b1ee89c684de5388b08e", - "vendor/amphp/hpack/tools/php-fuzzer/decode-crash.php": "8a5d97bdc8a1b36b9a26821a9f580213687faeed17cb26edd335b27287356597", - "vendor/amphp/hpack/tools/php-fuzzer/decode-oracle.php": "f55c456063227fdd3b97aeb9d9ba20054db766d8918b63bd73eac63e87f73909", - "vendor/amphp/hpack/tools/php-fuzzer/decode.php": "16cbf0005439780ea7cdffdc6674f249a548f91f1bc9d7fe270f9166c4c7fdc7", - "vendor/amphp/http-client-cookies/.github/workflows/ci.yml": "bd2b521ee75b17ed38f8d95b9653b662456efe48105fdb8a2f4e71ed47f55063", - "vendor/amphp/http-client-cookies/.gitignore": "496c9e4f0bce83f3e897cc64b11c8cc8416d2dc9a91dbedc76f94b5dc77232ab", - "vendor/amphp/http-client-cookies/.php-cs-fixer.dist.php": "471c989c811a3356ce22dc6212deb1161e85f043315e558cd23d30193caa53cc", - "vendor/amphp/http-client-cookies/LICENSE": "80a36409928641ee64ab2932c9a3a3876f7e2ee0f1b886dfa7c30404d7bd3767", - "vendor/amphp/http-client-cookies/README.md": "0c2068927aa518868ac9fa9007731a864a3c2a778d74c5af3ea51427701fa9ba", - "vendor/amphp/http-client-cookies/composer-require-check.json": "e6d1f771c1c69227b618129d07de6e8715933cb3357d9c7321bc2208afb14073", - "vendor/amphp/http-client-cookies/composer.json": "6d5898a130476185784f7528ea1283512bb327aa29df175607e55c71e07580d4", - "vendor/amphp/http-client-cookies/examples/.gitignore": "e80b4861a53fb52646cfa9301011c6e5eebd444e07652ba61e7a0585f068992a", - "vendor/amphp/http-client-cookies/examples/basic.php": "f9251cbe938e966855df31d831dbf1cadcc3354f9f65dbc616ce952f20987f4e", - "vendor/amphp/http-client-cookies/phpunit.xml.dist": "345c60de31100b878744261dd711c4e6972212bd24e41d39548d141c1d9db796", - "vendor/amphp/http-client-cookies/psalm.xml": "c32e7128dde79b3bca726c86d94b329d8479dfdd999fe96f5be741050bc64e1d", - "vendor/amphp/http-client-cookies/res/public_suffix_list.dat": "069cd86c0b13b0a26815c5700f7a33a37affba84dad51a1d71a2200fc748c29c", - "vendor/amphp/http-client-cookies/src/CookieInterceptor.php": "6bba4f674a43b409b969914129a5f9aa5b8572c3505a8c445d888d9427621240", - "vendor/amphp/http-client-cookies/src/CookieJar.php": "168dfa9107cc58c619a49ceb0a357fb545904b01ab60dca0fb66f1cf4346f71d", - "vendor/amphp/http-client-cookies/src/FileCookieJar.php": "763dc67edb706ffe0b858b115ccfe0eb7b8c9f1a8238c4047a8b23844aecba1a", - "vendor/amphp/http-client-cookies/src/Internal/PublicSuffixList.php": "520358e2c1278581e7aa56e196ea0d4f38d472334200c9aac885e36f66a56942", - "vendor/amphp/http-client-cookies/src/LocalCookieJar.php": "f424cae7cf5ec09f87609f04970604bedc26ca19a20a6c52b3d580281f7ce204", - "vendor/amphp/http-client-cookies/src/NullCookieJar.php": "13eae4a1ba0052f786bc33929b12a387fbfce55572f1f2c7d300a265f2e979bf", - "vendor/amphp/http-client-cookies/test/ClientCookieTest.php": "2d1324fbbb7397b3a7946958de2e4f06096a7d68421a181922729ea3f171243b", - "vendor/amphp/http-client-cookies/test/CookieJarTest.php": "135688f86ef132b967e2028dd14c60a284d4838c55fe4ea6eb50c569f58dd2b3", - "vendor/amphp/http-client-cookies/test/CookieTest.php": "46614828eb49bc130a0b56e9b4e9e897a8b4042792d11640b4a17d698b3adada", - "vendor/amphp/http-client-cookies/test/FileCookieJarTest.php": "82cec7e39f800dfd58850f2994ea80f0fdc17780a0e2eab5e88165895f5bc927", - "vendor/amphp/http-client-cookies/test/InMemoryCookieJarTest.php": "10e9e2564f9cf385678e7c67bb4b6fa8d53f23df3e6da38ee617f8c94ec92772", - "vendor/amphp/http-client-cookies/test/Internal/PublicSuffixListTest.php": "f2fd8c69c9fb9cd302e74a4da2c707daa569cd0adfa16c4c147788311f2659cf", - "vendor/amphp/http-client-cookies/test/fixture/public_suffix_list_tests.txt": "0090eed4ba1a288f7622ff40ca3e878e492e51d565935aa2c93171738d9941f9", - "vendor/amphp/http-client/.github/workflows/ci.yml": "0e55291eb41d6418a11994fbe8127818512854408464edebacb11d3af55bc79e", - "vendor/amphp/http-client/CHANGELOG.md": "2a5e604625fa6497b9847b144cd9f6292193930c4ef97b56bf451ab7a647fc5d", - "vendor/amphp/http-client/LICENSE": "5867f0443d153c8bc1510680d5dd922ad4db2bbc7445af9dd09d849a3efd7690", - "vendor/amphp/http-client/README.md": "e6e8a28d06a775da02e3c3df7cb6429265e73b55fc284e90f76632c30c6465d7", - "vendor/amphp/http-client/composer.json": "3d853c1799abdc78473e1cdc6c177c7e36c0a989aef88317a1f4425aa7458f8d", - "vendor/amphp/http-client/psalm.xml": "9d261419ff3e77acd13650135835988d13ce81fb4e000657c05efae298eec8f0", - "vendor/amphp/http-client/src/ApplicationInterceptor.php": "f96a2b7b46bef50d8dab019053489d17fea83e9619e298408dc0b6701a6e02dc", - "vendor/amphp/http-client/src/BufferedContent.php": "9be59c9d36dc745592431d9fe86e8ff0d4dff28f23f1691032396524a7738c43", - "vendor/amphp/http-client/src/Connection/Connection.php": "48366c20b22946169e40bbb26db2dc2ccd76e5060aa0c07eefe19dc554b981b2", - "vendor/amphp/http-client/src/Connection/ConnectionFactory.php": "6c947cba9548b2b668224e9ed278176929fcaab0ae60ca1a7dfd42dddcaf5362", - "vendor/amphp/http-client/src/Connection/ConnectionLimitingPool.php": "c60cd8f9b860e363eda1b037861e215e93624798a6b5a107e42b9a5be0a1059e", - "vendor/amphp/http-client/src/Connection/ConnectionPool.php": "d7932bf4519f95bc8163c267a3a5f632bbb4022f943aae30d860dc1a21c62eef", - "vendor/amphp/http-client/src/Connection/DefaultConnectionFactory.php": "5f860fc9c93a910ad65c4b71cebd29ff57ca2aef2311147c0fc987fa59439eb9", - "vendor/amphp/http-client/src/Connection/Http1Connection.php": "c60dfec5fe9cf6454494725f2a63237feb1b620972d8f600d94fa5d1d2e79c18", - "vendor/amphp/http-client/src/Connection/Http2Connection.php": "b65648a28cdc22b26b85f5818deeb1653274447b7adef36f5628a1a5cb9931a9", - "vendor/amphp/http-client/src/Connection/HttpStream.php": "844cc5d6f1b20224cc9a9c297457e2e2c665ab378e8a67796c71458ebd1ee01f", - "vendor/amphp/http-client/src/Connection/InterceptedStream.php": "028940da9cbed6c7bfc4b26d4e7aa6747e88a2c9427181b75a5d11ca78e93be3", - "vendor/amphp/http-client/src/Connection/Internal/Http1Parser.php": "79c6fdcb7c338fc08de3bc17b1c85356211b43054e08a868313f374d54fae49c", - "vendor/amphp/http-client/src/Connection/Internal/Http2ConnectionProcessor.php": "6b4be4510f1429e21ecd21bab849aa6d7d81a02262e9663405629832d4e530db", - "vendor/amphp/http-client/src/Connection/Internal/Http2Stream.php": "e7f7f31b469e4955b13f84060a6b90aa0a2e7d4dc36c6a19cce880fb148755fc", - "vendor/amphp/http-client/src/Connection/Internal/RequestNormalizer.php": "976b7cdbe02bb6dac652fed2d151e2dfacef7e8f4ccfff1ce7daf51fff17f9ef", - "vendor/amphp/http-client/src/Connection/Stream.php": "6bc530d9e0da21cdcdf91f1bd0c84686eb1f7874d114ac90ee2486c167c04881", - "vendor/amphp/http-client/src/Connection/StreamLimitingPool.php": "1ea5f15c0010fd3f81facc426f7af436cfd105f2d716a8b35b7293ed9b2aeb14", - "vendor/amphp/http-client/src/Connection/UnlimitedConnectionPool.php": "5ea90067d896d4d9533690dd3c1975af6dd2d0ed5099412dff063f4b0d92e6be", - "vendor/amphp/http-client/src/Connection/UpgradedSocket.php": "ebb4b80ae02abfef04cb99352e5621144a4f36df1c53d6315a2e3023baf85439", - "vendor/amphp/http-client/src/DelegateHttpClient.php": "2b9e275634ab651c37722e3a977dfbf029fcf5ea3a126bef4971da4df312c327", - "vendor/amphp/http-client/src/EventListener.php": "4678534bc4b4ec1f1adb8ad838de97af9a2a335d1d68df1f659db7fab0474ad7", - "vendor/amphp/http-client/src/EventListener/LogHttpArchive.php": "f8d60c9407a5144e3b4fb45284537b4b30297e318d55efbe56ec1a1b97fecc6e", - "vendor/amphp/http-client/src/Form.php": "87a03b257bdc43f01a5758a81b09b1c6b4cc28d913e79236577dde3d61f11029", - "vendor/amphp/http-client/src/HttpClient.php": "607cec846dbc7a5b1b16fdd45ce05e5f8b8d173b28564d829622d7505bcca5ae", - "vendor/amphp/http-client/src/HttpClientBuilder.php": "b1ad1ceb95cf49e20278db514c4a222b886a36ab7cab18479251a883339ec6d6", - "vendor/amphp/http-client/src/HttpContent.php": "e47609575f0e13412b3c0517b5c6629f526bf4e6c41c306d57e4b5f1ed14ba8d", - "vendor/amphp/http-client/src/HttpException.php": "ee3d3caa24e0ca1da267169d7f14d2e3b7899be5271cb7793e151ef934c9dc2c", - "vendor/amphp/http-client/src/InterceptedHttpClient.php": "cc60aa825b6b6ce0d8b2506b44fce0cc3c4965a03513e2c6d7d1f697329e4b6e", - "vendor/amphp/http-client/src/Interceptor/AddRequestHeader.php": "353d057a9a6bc6d7187ca5abf3eade79a7167a4a8c8676dad9250f50a02dae81", - "vendor/amphp/http-client/src/Interceptor/AddResponseHeader.php": "2f1345cb481baaec534e8dc5db4fa1d627a3266371680e8a39d0774707a07bdf", - "vendor/amphp/http-client/src/Interceptor/DecompressResponse.php": "a7120c369fb5edf612db36cc744578ace4f74f4cd75d464ab4e93cbf73a69576", - "vendor/amphp/http-client/src/Interceptor/FollowRedirects.php": "3970a18c5ff9fff3e3348a08fc200c951d73ce0843db5ab2ebb947d31633ffad", - "vendor/amphp/http-client/src/Interceptor/ForbidUriUserInfo.php": "4ce4612842a2de452b4ba79494236eebd5ca31f5f7893d27680ff34d0b0f6f50", - "vendor/amphp/http-client/src/Interceptor/MatchOrigin.php": "2e78ddaafbf419eed77a27ddb80d349064978dd4994aceb990b39f3d9337e800", - "vendor/amphp/http-client/src/Interceptor/ModifyRequest.php": "8b86e8aa804f9d931fdc10880dcf841ed1121ae855b15a8744fe51fe8dae3a4e", - "vendor/amphp/http-client/src/Interceptor/ModifyResponse.php": "5ee887b08172d89d7830dad42dbd10db6d9fe19570aed620f175ff957041c415", - "vendor/amphp/http-client/src/Interceptor/RemoveRequestHeader.php": "9b429aa3a50eff7226fc5ff2965b584deb87531a66f518a5996be4b0e2ec1283", - "vendor/amphp/http-client/src/Interceptor/RemoveResponseHeader.php": "3e610dd1b2da159c76f025fcc82968482f7f7e3aa90f526b6e4dcb422c37622a", - "vendor/amphp/http-client/src/Interceptor/ResolveBaseUri.php": "790201953a098285df02143d71cae3d533658b82c0fc82e5c5a38eaf16eb221d", - "vendor/amphp/http-client/src/Interceptor/RetryRequests.php": "65aaecab678d7ff27cfc5b63a61ae68edc3b4c2e2a77a4f4f7b475c4800ed74d", - "vendor/amphp/http-client/src/Interceptor/SetRequestHeader.php": "6293e2f095a71c6a8f7a700813d2d0cf11afa73b8995cf34517e9596b056e727", - "vendor/amphp/http-client/src/Interceptor/SetRequestHeaderIfUnset.php": "cf27548bca44619f5b12def7b0c0cf4945bc27db4bedcc026c94d0edce7513b8", - "vendor/amphp/http-client/src/Interceptor/SetRequestTimeout.php": "6161e0a9e0856fdcec2e4e12ac0100fd34d0cdf3b7f30f611b2c04e9020866f7", - "vendor/amphp/http-client/src/Interceptor/SetResponseHeader.php": "292b7ea3de224828aab610758a2c09c7543a4af87a769d3a1985f326a4729759", - "vendor/amphp/http-client/src/Interceptor/SetResponseHeaderIfUnset.php": "5413697bb7c920c8161fc2897fdd39944e04a2d1dc001c7a91616ab87245792d", - "vendor/amphp/http-client/src/Interceptor/TooManyRedirectsException.php": "2a70f07e0d9ed4fc4b50a1c172232269c7d705d395ddb4851fc76c8ccb04a56b", - "vendor/amphp/http-client/src/Internal/EventInvoker.php": "bcd2e2a5a5ee4431636a22ba7bd333e10f39fa542c7d78c5dfb000af5d3228f7", - "vendor/amphp/http-client/src/Internal/FormField.php": "59b5e64570148b12c1350989b0b218a4c27ee2e25ed0469ea2cd9b2dc35cbceb", - "vendor/amphp/http-client/src/Internal/HarAttributes.php": "733654dc27b93ca83c85a590ad1f370075d3544ed302e050bff58f154297db91", - "vendor/amphp/http-client/src/Internal/Phase.php": "664b1ea96223d0df4ff57d859787bb42d498678a35472cd2ddcce23c0fadde01", - "vendor/amphp/http-client/src/Internal/ResponseBodyStream.php": "bc6bc6ecfd428249beca2a0eb0d55fbb73bee28ae0a3bf74e155e689ce00fa6f", - "vendor/amphp/http-client/src/Internal/SizeLimitingReadableStream.php": "f18f2ca02c5bc72a775a4ef28a19b2c6fd1b51f291f1f4475983074e8fc3f9bf", - "vendor/amphp/http-client/src/Internal/functions.php": "def6c2623568de1a51250e28a3dfc87ebcb3d5ca48c55b82b87982e1f0f90839", - "vendor/amphp/http-client/src/InvalidRequestException.php": "764d90909d2073fd06abb74bc420794455521f16ce796cae69d3366a4808eebd", - "vendor/amphp/http-client/src/MissingAttributeError.php": "8181b67c2a85499306d69a0eb44739510c6f6e095a49fb7aa87318101dc95326", - "vendor/amphp/http-client/src/NetworkInterceptor.php": "8b353c8b8648e267f678935a99b7351a26eacda5661709085463fc36e01090ec", - "vendor/amphp/http-client/src/ParseException.php": "43f749fd40b8dd27865b7c01f84913ce0cd099e4efc2b93a19736a0756f50de2", - "vendor/amphp/http-client/src/PooledHttpClient.php": "3f784a03537e3919c0a289736997d0eaf549dbf09fdf28a93bdb645f755e42d5", - "vendor/amphp/http-client/src/Request.php": "706e4ceca44e97f24795032e89b0136280a5280aa34cfa8e30da727c3152c366", - "vendor/amphp/http-client/src/Response.php": "4c3095fb4ef080025911ccdafa65373b0fa8b07d704c2e1f387b2228d695afee", - "vendor/amphp/http-client/src/SocketException.php": "71d5dbdec09deec2c569ec40d75d29beb406b424281d4e785bbd41ac7be866aa", - "vendor/amphp/http-client/src/StreamedContent.php": "17d6a8be22b686d070b26f13de32b459fb90b00e6365ed1657447995fc4801a5", - "vendor/amphp/http-client/src/TimeoutException.php": "67158beb4ceb2e63698f20f6c6db5fc08dece1e23d04d900885f598eec9e1495", - "vendor/amphp/http-client/src/TlsException.php": "246ee4d306391d7e9ff1a3f132cb316d85c066c55c9d288203378f8aecce5576", - "vendor/amphp/http-client/src/Trailers.php": "2f26f4da4c517fb1a2de608326ed6bd6d86fbaf153cb5e192cce2d4bceeb652d", - "vendor/amphp/http-client/src/functions.php": "180c950c416116c03f9fa3ddff11f7846088820a2a12bd73c8d6b69df06f6dfc", - "vendor/amphp/http-server/.editorconfig": "671f270c30a8444d9e9925b8b1a3ae38e0550da305a70eb954328183a3572fe0", - "vendor/amphp/http-server/.github/dependabot.yml": "6e88c6b58f0687c7136021a6d2227a31e58a35bd78ae48ad5c619bf4cff2e309", - "vendor/amphp/http-server/.github/workflows/ci.yml": "fcd42ef20a2b441a04f0d6a59a6d9d938b3a0005ac67f3b1acb3621f1e3548aa", - "vendor/amphp/http-server/.php-cs-fixer.dist.php": "5ce44edecab0341a80260246cecaef8e48690f3a1b6be2ddbe812ad05c83851e", - "vendor/amphp/http-server/LICENSE": "75ff14768ed3b0898ea24b8ff76e9615c21d1d4e6f7ba1d258cc55cb9689ca73", - "vendor/amphp/http-server/composer-require-check.json": "7c20dd437581332623e2a893205e910fcc2ba50feef3b541ce9361ecff60267a", - "vendor/amphp/http-server/composer.json": "12a8a2c066d1b87c4682bfcb8e0771e0a4910adf87be3fefed11bef691048285", - "vendor/amphp/http-server/infection.json.dist": "c939360b5afb17f8a5e4d40b365cb9b4a389b4ce78a95aeeece158974a803847", - "vendor/amphp/http-server/psalm.xml": "9adce63af31e0f07b1dfa4ebaea46cbcfe5d1e82bee58b957ae7e0ae96ad6491", - "vendor/amphp/http-server/resources/error.html": "e277e98a5c5f49b6863e24a6d37368f798587428446eff3c86782a0199041445", - "vendor/amphp/http-server/resources/internal-server-error.html": "e512d4280e7e9a825198be12ebc902c9fc083a4c0b17a1e2a375d110155f0021", - "vendor/amphp/http-server/src/ClientException.php": "a5bc32337e39a4b9d118dd55803ebc671a293e267756e4a5ca204835db7fa920", - "vendor/amphp/http-server/src/DefaultErrorHandler.php": "2c3f1f0f3e99a291754264bcf0185db1e21bcc3ca2e4816f48016c7ee6e269e5", - "vendor/amphp/http-server/src/DefaultExceptionHandler.php": "44305ecea36a3671e93a54235bf5a208ec5a72fd2a165ea5ab13f6fab7f533a1", - "vendor/amphp/http-server/src/Driver/Client.php": "264adbcd2cfa880c1a8842fefac753603812a228be44a244911bea791d0389b8", - "vendor/amphp/http-server/src/Driver/ClientFactory.php": "6e51fe01cb356f24ea9e2b50c71a71003a13b8a886993ef45a9be42203eed1c9", - "vendor/amphp/http-server/src/Driver/ConnectionLimitingClientFactory.php": "33a80e030429f0f87758c97e72faea2048969958b657ac10972c0412d9fde073", - "vendor/amphp/http-server/src/Driver/ConnectionLimitingServerSocket.php": "00211aa09e54acfbd314911fcb4e23b71b19eabb110254a2969a2b338c8ae505", - "vendor/amphp/http-server/src/Driver/ConnectionLimitingServerSocketFactory.php": "79bb058e11d93a56d573ab9cfa5516951508aa23e76c5c139b335306d0bb87ca", - "vendor/amphp/http-server/src/Driver/DefaultHttpDriverFactory.php": "7c3ad83b1aa4e2dc3d8ecaf45256f377ea4818c759daabbc8187f52259dac815", - "vendor/amphp/http-server/src/Driver/Http1Driver.php": "a859f864327791deee06c937a12c0abcade24cc886640f542f7e0cb54258ebf7", - "vendor/amphp/http-server/src/Driver/Http2Driver.php": "dd9530527376cc069df7b008992df9316dba02344e18275946e4bbfcd7560498", - "vendor/amphp/http-server/src/Driver/HttpDriver.php": "be306954333718a90833ad553fa781ff5454aa522fd585c53d56582bb8f447e7", - "vendor/amphp/http-server/src/Driver/HttpDriverFactory.php": "5312b96ba43dd56aaec4d98fdab078857ee5dc20a5e1fd13e21dd677f1d23fc8", - "vendor/amphp/http-server/src/Driver/Internal/AbstractHttpDriver.php": "ef0a3b4fd7b32495472d7ecb8c5bd11ef6f3ca3db16e3a9d0d283d0f9e749e91", - "vendor/amphp/http-server/src/Driver/Internal/Http2Stream.php": "38c041ec098b709c004dab88cdacf781befd68771b85a6806ebaf8f04e1fc32b", - "vendor/amphp/http-server/src/Driver/Internal/HttpDriverErrorHandler.php": "db5391799034efe3048f67773d2d094372fd8d8146e4862f513f97a571010be2", - "vendor/amphp/http-server/src/Driver/Internal/StreamTimeoutTracker.php": "6de548d834b4b052a465572c36094c696bfb745f025fef62d10b7377bcc09fb6", - "vendor/amphp/http-server/src/Driver/Internal/TimeoutQueue.php": "4089aa60c9fae5036ce9df17242e535c4b0797c81d6182958cdd5b63feb30a26", - "vendor/amphp/http-server/src/Driver/LoggingSocketClientFactory.php": "f125aa2c2d0bbce396ede41a9ed356c4f561bf3b044cbee39b93234069f2999c", - "vendor/amphp/http-server/src/Driver/SocketClient.php": "aef7ccc9cf7d143715db67c0454834a9537ca4b5b61224c9162efceb4311c88e", - "vendor/amphp/http-server/src/Driver/SocketClientFactory.php": "1ff2ecb0736143edbf3ebd31edbbc0a68f1aaf717a135041d2350f99d05cb3bb", - "vendor/amphp/http-server/src/Driver/UpgradedSocket.php": "05cf0f6966f12498a08725a3e032465d929930be9719c5e6e5bb4f0e35d67ade", - "vendor/amphp/http-server/src/Driver/functions.php": "b56c067442ebfd41c83cc72617cbb7a18f8213532e281cd5db16c14e67cd66ac", - "vendor/amphp/http-server/src/ErrorHandler.php": "e80c7404af88840fa27aafdce26ca26d99c364a856152629cdd13af31f2cf193", - "vendor/amphp/http-server/src/ExceptionHandler.php": "f2e6343ae47d88666c17473f4639bbd0b601c63842e3844cdd5e7b620d3a66fc", - "vendor/amphp/http-server/src/HttpErrorException.php": "2284b130e224c4bc19d4d4abb6f8bc8b80c6574b66ff3313f81ea525b26315d5", - "vendor/amphp/http-server/src/HttpServer.php": "c4550bd634aa7dd3c45bbbeecbf3510e6dcbc961a2f067d9611c95113e1417d0", - "vendor/amphp/http-server/src/HttpServerStatus.php": "065572f5ab193d01da0d34eb1c715855bcced978aeddf56423db7a1eecbc8fa7", - "vendor/amphp/http-server/src/Middleware.php": "bc6ead6e859beeed0731622191010da8f7969e215858ac4347f0a7531fb5a821", - "vendor/amphp/http-server/src/Middleware/AccessLoggerMiddleware.php": "2c267fe2ca41543b30b0b063d99efc7d33fe4ec9700f46aaffdfa399b523886d", - "vendor/amphp/http-server/src/Middleware/AllowedMethodsMiddleware.php": "a93c83a2fc78834f56fdf7d4cf908e30a2157bb8685a8aaeb7749f2d43e46ee1", - "vendor/amphp/http-server/src/Middleware/ClosureMiddleware.php": "9fd2e59ab2998d0607ccb2cd882f09ab3459c4bd2087812b64c611b1dbc62e69", - "vendor/amphp/http-server/src/Middleware/CompressionMiddleware.php": "39f8a18b4deed96c025720d5622c84aa1e3da501cf0161ab23fa2d410e3ff09c", - "vendor/amphp/http-server/src/Middleware/ConcurrencyLimitingMiddleware.php": "cd5305b95503d4aef54b22f4b82fbe6cf0b7ab96c928730620ecf2b063a5f61b", - "vendor/amphp/http-server/src/Middleware/ExceptionHandlerMiddleware.php": "d4e6c9a3424ab0db3deac8443f428a04a396457238c997259e73ee26d3a59414", - "vendor/amphp/http-server/src/Middleware/Forwarded.php": "e66faad04cee480d9b6192fdd20e4274e629a58e88c86723a21d2262d47b2ba4", - "vendor/amphp/http-server/src/Middleware/ForwardedHeaderType.php": "a22cdd13ff21e3eebfe232860d401fc9bcd1e233ca95663ff31fcf7539c08763", - "vendor/amphp/http-server/src/Middleware/ForwardedMiddleware.php": "61788a3e0a26bbb6049bce6b2ec49c1118b075735edc38ca6ea07f0d7be0fc73", - "vendor/amphp/http-server/src/Middleware/Internal/MiddlewareRequestHandler.php": "2f7e94e258fdbafc982a949cda38ca9f9330a7a33943dfc2973de697c283bb48", - "vendor/amphp/http-server/src/Middleware/functions.php": "1009786de13317257038a6a9f981065c23f3508a0cc4d93e4b3c1a5833f0d6e1", - "vendor/amphp/http-server/src/MissingAttributeError.php": "5956ce8cfe604bd914377748dbb7c33797509d270787a7a341739ab3d2136882", - "vendor/amphp/http-server/src/Push.php": "97b8eb68082eb3c39c69f4564d87dff9dc63d016f4376ab4ba2cdb1b6e64b329", - "vendor/amphp/http-server/src/Request.php": "bb4e3f7368d5e57d95d3da2f5e9d77dbf1f684f9a7d68a09c364a18e2c987de4", - "vendor/amphp/http-server/src/RequestBody.php": "734ba8eb0ab7c261b10f89bc4d13adb7018325a3cae7aa5ddc1d96a97ab73e39", - "vendor/amphp/http-server/src/RequestHandler.php": "14a46e2e471aea5431adccd17aa2c41cee60ffe469bf14166e25e46f6a97a409", - "vendor/amphp/http-server/src/RequestHandler/ClosureRequestHandler.php": "a30b258ed991b26ba4021ac8f96d94a7ddbc55e86975144edd7084e5ac6150f9", - "vendor/amphp/http-server/src/Response.php": "409f3fb4786e274820468d1c14e0ab1d0338faa1d543a22a16016580d49dfa75", - "vendor/amphp/http-server/src/SocketHttpServer.php": "7d7ba166b112aef79099bfa2c12d0a1c8e7c4ecb5fa0c7449ad30c34f758405b", - "vendor/amphp/http-server/src/Trailers.php": "f46b56e1dd38537d89abf62be8fe99072dc2762c7f2d95231a0a4fce1351b658", - "vendor/amphp/http-server/src/functions.php": "f1ade9b3a1159c06088238ee39168238ef3e8b8d151a2580203c4dc8c96a963d", - "vendor/amphp/http-server/tools/h2spec.sh": "45af9225cebb6fa0096fabaecab81c46aa45e1e81a5505dbe11ac0b50fbe7e28", - "vendor/amphp/http-server/tools/tls/local.conf": "7b3a13d4b2065bb7caca908f778ad5494d122a235270153d6cdffcca2f5c0a50", - "vendor/amphp/http-server/tools/tls/localhost.cert.pem": "a348fe395065f151eac40d8b148731cebdc2fc47cb4713ca01e6d47b8fe02d1e", - "vendor/amphp/http-server/tools/tls/regenerate.sh": "b38dda15f5076a7cd582b8279cedc21c3154b710a37eb7d06396199e5358b8da", - "vendor/amphp/http/.github/workflows/ci.yml": "aaa2c49a998c8a7873869e09383831aac4e15eb6279664c5d33035d6af6d4b47", - "vendor/amphp/http/LICENSE": "95d9a352435f98f90b68c443bc8f6378701d1b708c8f5150a13509a9ceae4379", - "vendor/amphp/http/composer.json": "aceff22c6e55fc53b6c34065644415255626dce3bded532ccb19e8d003e3c9cc", - "vendor/amphp/http/psalm.xml": "a37b321ec8ac33b68c544c25bd5a43001752158f7f79f85320fa640a33c8b079", - "vendor/amphp/http/src/Cookie/CookieAttributes.php": "03912a26a1947bc20e306e75918be059435d2f64ee372e6c19cf7bb89a22d2e3", - "vendor/amphp/http/src/Cookie/InvalidCookieException.php": "7f68f2e13437eb550b87084bc64ccc5621d57f879e6873b02c8641e09cb86476", - "vendor/amphp/http/src/Cookie/RequestCookie.php": "7b7192747b2e19d6775433e900ca60b139597c0c2074364bec0e4e84e95c473e", - "vendor/amphp/http/src/Cookie/ResponseCookie.php": "7972bb12165f339bc8e011d448e42d0f2ce82a4c517f3a156f32d2e9b7cb54a0", - "vendor/amphp/http/src/Http1/Rfc7230.php": "e0ee7ade1e93787f0480fcb1cc5c1067cd53ca6ee19bde6523ba5dfda077abd3", - "vendor/amphp/http/src/Http2/Http2ConnectionException.php": "6a9632e0bb918aa0ae3916d519e9850880ae43669eac8fe763bb1ebc03edc2b7", - "vendor/amphp/http/src/Http2/Http2Parser.php": "0c74c6f85961021fc4dbff0c6bd035dfa928134ff5294022c773d5b1942dd441", - "vendor/amphp/http/src/Http2/Http2Processor.php": "ee38490c21462743dcf935a00d10306a1ec462b1becc3c1a3f737e7e370f421f", - "vendor/amphp/http/src/Http2/Http2StreamException.php": "575387649cc847357942cb653eafbbea0dff06b35ef65c12d50e8c43f543f599", - "vendor/amphp/http/src/HttpMessage.php": "cfa06785f5b02523ca36de84ff4834e2f3ffe32cea69a85639ef8c6a850af376", - "vendor/amphp/http/src/HttpRequest.php": "fe2f99f0b66c79686b1ebd4effc3c944959e87dd8ba09331bcf38ef629512e5e", - "vendor/amphp/http/src/HttpResponse.php": "c36da844f6060208a078a54b21ec592f3ba4f4012925c23c051307842347e5fb", - "vendor/amphp/http/src/HttpStatus.php": "d00a977b62b7e48666d758449b21343796d67eb716e34bbf4604f2e32a881e86", - "vendor/amphp/http/src/Internal/constants.php": "63e9578d3f63e8a06978be383779c8cfe7d674212a7f546e9475a8a506551f45", - "vendor/amphp/http/src/InvalidHeaderException.php": "b6fa9b6e91d72da5ec300b97c6512925709199510ebdacc9f788403c86acc8e4", - "vendor/amphp/http/src/functions.php": "ddc8d6e29c4225286d69c89915ab99e1c096429c34e9f6cc14d132095503dd92", - "vendor/amphp/log/.editorconfig": "671f270c30a8444d9e9925b8b1a3ae38e0550da305a70eb954328183a3572fe0", - "vendor/amphp/log/.github/workflows/ci.yml": "c522f5d107edc45cbb72979a636ed289857b4038de27b27a2c1a0186d29cb9c1", - "vendor/amphp/log/.php-cs-fixer.dist.php": "c469aab96d273faa0ed9fb763dde309b9b6c0a65146c8555a2a715e02d69fea0", - "vendor/amphp/log/LICENSE": "fc5149c45b0b34f924ad2ceee71216358599bce2e281892ef6d87fa9acd48006", - "vendor/amphp/log/README.md": "3738d25a5e5d622687057163459391639dc6eb21c755e167f5231b947b3857a7", - "vendor/amphp/log/composer-require-check.json": "99bd890a24235208affea0e3e6a81237a14136430108359bf2820e33bdc30850", - "vendor/amphp/log/composer.json": "be97fa773c66cdf15d789c17e7fa2858d3e8f106e6a4d811fe267e912fa0981f", - "vendor/amphp/log/examples/file-log.php": "ec832af21d337d9b4fdf24d88c21e1da76b12af02964c82d6d78153852938b9a", - "vendor/amphp/log/examples/hello-world.php": "3abd2c496beed65c06b213b0eb6d9ad940fcda260f1fa8249ebad32e73a32e8e", - "vendor/amphp/log/psalm.xml": "36bf514ef35f7cf8f3462a392cbcb2ef00cd34859d7f73d1ff2d649dfb160432", - "vendor/amphp/log/src/ConsoleFormatter.php": "5e49b9400f31fb625e4cfa540ea34941eeca8d0d543ce49a38863496f2ea8e2f", - "vendor/amphp/log/src/StreamHandler.php": "308240467cf97271eea57f311dcdc1eff53587dc852e4bb8927fa815d4423281", - "vendor/amphp/log/src/functions.php": "1a9b760fa59082244398709bf3bfd860d62ff4e4e5dbd44664b120843553d83a", - "vendor/amphp/mysql/.github/workflows/bootstrap.php": "d8ee330f9472a51893179dcf4b7d552fbbaef2de78c9407d86ff91a204d039bd", - "vendor/amphp/mysql/.github/workflows/ci.yml": "fd25a75af1fa06acae04ec99b16d601724b716f1865968283ce9e298862c0bc9", - "vendor/amphp/mysql/.php-cs-fixer.dist.php": "72f324e677e5328df668fc71aa7c7e71b42f431d025f7f3e0126ae9824cc0bc0", - "vendor/amphp/mysql/LICENSE": "4daf770ec2fb0eef9a9e1c2764c6cebfacafaeb13ab6cf48c1afdab27ef7a4ca", - "vendor/amphp/mysql/README.md": "1ea4718bbe3de1778f53c4e144dc5b072096cdc0444d279e975051075cbb3b82", - "vendor/amphp/mysql/benchmarks/AbstractBench.php": "e1aa0c19a6613a32ef3eae6a565bb117d1fc704fc1f804e7f24fc3b8f179fb23", - "vendor/amphp/mysql/benchmarks/QueryBench.php": "1e6ffb4d4edf9250a12f2a1090ad1ad1a16334d364f1151334e6b69e584910de", - "vendor/amphp/mysql/composer.json": "27aaa67e1ed6c96557653fafdb8ea3ed679487344ee106ca44f2f2a5d0da0588", - "vendor/amphp/mysql/examples/1-connect.php": "7325e95344baefb82c713b25f93ac8ff6d867c4847a16f369c71d550af3bd504", - "vendor/amphp/mysql/examples/2-simple-query.php": "ed9e07ca6392464ace70f70b6786e3e4dff0a8b6a8ab495d4b1e5d73c74336bc", - "vendor/amphp/mysql/examples/3-generic-with-yield.php": "23f1fecbac234411ba221f4a8bd8e959d81c90e847908a5d8cefabbe88c27770", - "vendor/amphp/mysql/examples/4-multi-rows.php": "ac5d3176560252443281c53cc9321b2f04146ccff0333ce01fb10085e3a7aadf", - "vendor/amphp/mysql/examples/5-multi-stmts.php": "fd417075ebf62a2942c2ef815c2743dc3e69b2b5322133ae6488566b9cc65374", - "vendor/amphp/mysql/examples/6-transaction.php": "7d1971805c93522b336b2d804b4e98c84e502ae3b275cb1d450b3bb5a3bf6647", - "vendor/amphp/mysql/examples/support/bootstrap.php": "cb75e989c72a9a4e6fa1d9e062802d7a5068330f5207b67bcd4e4e4143b1c026", - "vendor/amphp/mysql/examples/support/generic-table.php": "f61b67524319dd57a44d59122a93832cda2d89369d4aaad60bb5d236fbe2b669", - "vendor/amphp/mysql/phpbench.json": "df9bcb6df3547c911f1155a6a4c85b8956a8512f3d54592cdfe91f29cbce9002", - "vendor/amphp/mysql/psalm.xml": "7ab79f3012b0718a91dbfbe339016a593ada3c788c9453b33a67e0e0c0f4ac64", - "vendor/amphp/mysql/src/Internal/ConnectionProcessor.php": "e90525560a1b655042619713ed203b2ebedc6255f6e413ac00dc858cf85962da", - "vendor/amphp/mysql/src/Internal/ConnectionState.php": "fee06fbaedddb8ae294048fc59e826b1ad3c427d7bca964d945d2c49efef6ccf", - "vendor/amphp/mysql/src/Internal/MysqlCommandResult.php": "02dc71f03c80207a639148e4b411163b344c4abfbe47dee6f9015562bd57c117", - "vendor/amphp/mysql/src/Internal/MysqlConnectionMetadata.php": "5c9bf2721f8e843fbc8c72801a47d818f9a98a4ab8a479e7040484f6e1d8a277", - "vendor/amphp/mysql/src/Internal/MysqlConnectionResult.php": "cdd116c2391c2ca405288f6ead3756ecbe9852282bd0efd2ef3ad17937aad64b", - "vendor/amphp/mysql/src/Internal/MysqlConnectionStatement.php": "9aa988eb887a773ccac66739d9cdda40a6bdf7460b1b831e5a2d2c3a3ff51596", - "vendor/amphp/mysql/src/Internal/MysqlConnectionTransaction.php": "f6ffd51a292a6094182c37ff672cf666530fff6b98f9ace441399025e070cf0f", - "vendor/amphp/mysql/src/Internal/MysqlEncodedValue.php": "bfd5a7c14b4a666655102f44ae5f2e339c1d1aac2501ff433c26e8fb6b854b86", - "vendor/amphp/mysql/src/Internal/MysqlNestableExecutor.php": "349f9224b7b17e319b9bf944e2dbb26b41c222f3c3831eaab31f84c920eac9b4", - "vendor/amphp/mysql/src/Internal/MysqlNestedTransaction.php": "2a2ae0e3a4e5436ed443f68bb8ebf74c9dc8131955770d27867bf93cb4f6fb6a", - "vendor/amphp/mysql/src/Internal/MysqlPooledResult.php": "d56d801737a75ad81c83b4bb98657e79781b10491374952f39adaed899247f3c", - "vendor/amphp/mysql/src/Internal/MysqlPooledStatement.php": "0bb9590fedf71dc6bb6226709dfa2c6db1392d5afaa1e2f13560ae089fc51889", - "vendor/amphp/mysql/src/Internal/MysqlPooledTransaction.php": "19c0cf79c16537203856dbc470b3fbe6e260876e53d3305824f15375b62ace24", - "vendor/amphp/mysql/src/Internal/MysqlResultProxy.php": "1401858a73d786b97cb61a4af4e98471658c8c9a82fe83c485d3a656eb046011", - "vendor/amphp/mysql/src/Internal/MysqlResultProxyState.php": "a7953294240748ab76b4697c1dbec0f2d2fab040eba573d92187f8e05cc8de8a", - "vendor/amphp/mysql/src/Internal/MysqlStatementCreationDelegate.php": "0a969250bf8d4927da5416f56dc80f03cf1284c4cdf0d7419d82f2dce9b8e67e", - "vendor/amphp/mysql/src/Internal/MysqlStatementPool.php": "17c2b72113fee9ff44871f648973e4a78ed71a5b51916edf0bd0dc036e0d0e15", - "vendor/amphp/mysql/src/Internal/MysqlTransactionDelegate.php": "7061791453a201ce4c2caf212247d0d45c57f6d175c77ae46d38756ecfdcb8dc", - "vendor/amphp/mysql/src/Internal/PublicKeyCache.php": "adddcb2d3f4ead5c872125daf9ac2e10282d4c4e0a3886cd9127bfff462175d7", - "vendor/amphp/mysql/src/Internal/SessionStateType.php": "2a6943ffeefe9b417b9f206372e1f6e2f3f8d1b3067af61af46f171ccd6dd6e0", - "vendor/amphp/mysql/src/MysqlColumnDefinition.php": "33ee2b55c3f9cf9360b67b98548c37e30918a2930e62ef1429fc1d8e145e031f", - "vendor/amphp/mysql/src/MysqlConfig.php": "96296cb06b6c1e92789b0596cf728af38c4066abcbb44df23645d200de0e19ac", - "vendor/amphp/mysql/src/MysqlConnection.php": "b48075ccd9f1ff78ce00e77c1aadf502ea207271796a4549727088d04f17f329", - "vendor/amphp/mysql/src/MysqlConnectionPool.php": "65874da6518d99ed1840dd82e8df9b056e8758933758b22a38a9e6fcacfc9d2d", - "vendor/amphp/mysql/src/MysqlDataType.php": "17afd5e5c2ad1521652e93b86df2ac5bd47539ce458955199b492b6eaaeaf956", - "vendor/amphp/mysql/src/MysqlExecutor.php": "354c5256664d626737b3d789cf0a37f21c464bf76684a0075ee9037e08506628", - "vendor/amphp/mysql/src/MysqlLink.php": "41c025ecab9c8567fdc673f2fcd56c55ba1296e5ea01636b7c4ebddc863f8151", - "vendor/amphp/mysql/src/MysqlResult.php": "4fb2fc9a8dbb2e9e390989d987dbc34e98e889928d826361e78421c5d2d4abd4", - "vendor/amphp/mysql/src/MysqlStatement.php": "b5575c2f4490ef88b55bca8f43a4123e53e4a9a9dccc3ce44c53019b7881ffc5", - "vendor/amphp/mysql/src/MysqlTransaction.php": "5872d0834e8fde2652c7bf13b6d9e3d8cbd2097d3ada341ba770a9dc8d169d3d", - "vendor/amphp/mysql/src/SocketMysqlConnection.php": "0c5cbd239af869bf146871e68fdeb082d77562e499a718431b7067c13613ee5b", - "vendor/amphp/mysql/src/SocketMysqlConnector.php": "416f2811ce6432c2daad43b1ac76e2faa6d560572b2e0fd1cdee1c8364ffe576", - "vendor/amphp/mysql/src/functions.php": "a2edc5f74812dfda4560a171804876a548a91d5fe515fabaeac7808f0a484417", - "vendor/amphp/parallel/.php-cs-fixer.dist.php": "471c989c811a3356ce22dc6212deb1161e85f043315e558cd23d30193caa53cc", - "vendor/amphp/parallel/.valgrindrc": "ed83645aba09224d41df0665d056e98593daeef604448c84e731a413b6af6580", - "vendor/amphp/parallel/LICENSE": "93dc2b2aae85651379265cbb4906d2b054020ac9cc4ee70e5040f79751e34651", - "vendor/amphp/parallel/README.md": "cbe59ec1a4c0fb70e85cbe2cbc74018d0bd65534c4572a291e9f7537bef66b43", - "vendor/amphp/parallel/composer-require-check.json": "097dfed52774ff01100cf75af2ae408bba7d8ab42e1e5acb8cd99e2440c6fb7d", - "vendor/amphp/parallel/composer.json": "77b4a61fd842c3151bda4ca08f980d35d5866df78c7883fae611c73c7d4af81b", - "vendor/amphp/parallel/phpdoc.dist.xml": "7bf4e9fef14f72ec884712b25f0c195c7464de88f909e4206ad88d86d00c598d", - "vendor/amphp/parallel/src/Context/Context.php": "4aedf5cb3cf0ea1bc5066f44597d0198edcdf7b6a8edbd4f0d46337233e2cf85", - "vendor/amphp/parallel/src/Context/ContextException.php": "cc61fb096764771ea89083d52bafda4f7ab35535a961ecef75aa9c2a0459652f", - "vendor/amphp/parallel/src/Context/ContextFactory.php": "99da5a14e4a77d4e8c495373b585f5da73b6452e62f805d8fdc261c1871716f3", - "vendor/amphp/parallel/src/Context/ContextPanicError.php": "65afe795b3cb82de2ce9f7a53115c66c535958fe1ef776bfa8116d8e3e295d46", - "vendor/amphp/parallel/src/Context/DefaultContextFactory.php": "b23d2b0d6259d42c89857695fd3463b1d356bd80ae04df26d4f5acde5ba45e3b", - "vendor/amphp/parallel/src/Context/ForkContext.php": "872c7abd0e87e4e40c98585da5e31e2d8ccc267bf745c2b915c7ac5c53f457df", - "vendor/amphp/parallel/src/Context/ForkContextFactory.php": "57acc5db3d4ff71a774303053a4505aa987d14743595e5364fe7f4a67173000e", - "vendor/amphp/parallel/src/Context/Internal/AbstractContext.php": "20eaa1be4d020c06c3a48f1b289d14ec6bd4d49cd7519b9f66b8ca37b21d4ab1", - "vendor/amphp/parallel/src/Context/Internal/ContextChannel.php": "49f944b1e5036511011abda6cc77da0008be344e1d3106052e64772103b0ad56", - "vendor/amphp/parallel/src/Context/Internal/ContextException.php": "fd0522f80ae7ab77716914153b00f0ac1bfd79ddfd172bb591cdb47d8d4375c5", - "vendor/amphp/parallel/src/Context/Internal/ContextMessage.php": "b4a63c120b386cb14abe64fd24b79845098d888a99d57fc77492942957d9fb91", - "vendor/amphp/parallel/src/Context/Internal/ExitFailure.php": "633c314554877f39ee3d082513195bfee7a93274dd646520c765fd74691fba90", - "vendor/amphp/parallel/src/Context/Internal/ExitResult.php": "9ccf7c74972f1bae101b63463f6284cd96310b313700eb2b5522c7468bb6cf76", - "vendor/amphp/parallel/src/Context/Internal/ExitSuccess.php": "cfda5b9577c739c99bf4afbd636705b6d01a58b4441323eb7454e69615198156", - "vendor/amphp/parallel/src/Context/Internal/ParallelHub.php": "212423a2ef2f4e4186b34dfa14b4a1e558cdfd127d0cdee3d66794e825ac7e30", - "vendor/amphp/parallel/src/Context/Internal/functions.php": "abb5242f8720e8a235db5dfb01f2873bf466b82d364f33f46cba1f555d411bbb", - "vendor/amphp/parallel/src/Context/Internal/process-runner.php": "6a33eeef36b71de40deb860de9cdb3fb14fbd0d94cf7e3b7da9cfc939191854b", - "vendor/amphp/parallel/src/Context/ProcessContext.php": "aedf97731b5bd0bd725e33e7706563ce8d3c32a533a8126520edb29d954e03e9", - "vendor/amphp/parallel/src/Context/ProcessContextFactory.php": "9cbd0b17990ac24cb5383e4c95c2160cfe322bcd0fa7e34e16a9c4de966a964e", - "vendor/amphp/parallel/src/Context/StatusError.php": "e2d459dd03d98db908e9b798d3ed8e296bdbf82e7e1a72e98fb91f3176114771", - "vendor/amphp/parallel/src/Context/ThreadContext.php": "f63c8744a736e0c809da2d8db46329aa3e6e5aef8c36af8302b452d18ef80454", - "vendor/amphp/parallel/src/Context/ThreadContextFactory.php": "1479d2a990ea43bd005811147737f69b681b187b1b586c01146acf92f52faeaf", - "vendor/amphp/parallel/src/Context/functions.php": "537fcd1ad7f1bc719d31993b96bc94336e3230005a2774ea1f59fddf4f5994e0", - "vendor/amphp/parallel/src/Ipc/IpcHub.php": "ed62b8acd8e2bf4b5e171794b98da8a07928ed1e3e780c3962e725805ac5c86e", - "vendor/amphp/parallel/src/Ipc/LocalIpcHub.php": "a8262d0185fea2c533ec4caec464192902dfa63526d3ccbbd8c7c98a70d37e44", - "vendor/amphp/parallel/src/Ipc/SocketIpcHub.php": "3fdd589db431695e1ce2f2da5005fdc21763f9c36c16e6f6adf15ffb8676a39c", - "vendor/amphp/parallel/src/Ipc/functions.php": "475107b58e3109cf91935a8b993cada5279132cefaef2c1409da79e30a09c145", - "vendor/amphp/parallel/src/Worker/ContextWorkerFactory.php": "1e90cd668f2cab4bfb4806ae5b891496e650607a341ea7936a87b95b7c683875", - "vendor/amphp/parallel/src/Worker/ContextWorkerPool.php": "894c10678cada7dfbef3ee66be1f5f155729c1467422bb47eefe43e691d6b366", - "vendor/amphp/parallel/src/Worker/DelegatingWorkerPool.php": "7072a9d857c0862919531c2a98c1d2181dd46a25200cf8639b1d82867db55d87", - "vendor/amphp/parallel/src/Worker/Execution.php": "e87c057377f7cfccd9bdb2f6efb72e73bfbc3eb5f0ff6549a8d43e4a66d5464e", - "vendor/amphp/parallel/src/Worker/Internal/ContextWorker.php": "030076d8752fd0ea51e45cbf127eb557b2a429fd940f3dfe153aead49ba3c7ed", - "vendor/amphp/parallel/src/Worker/Internal/JobCancellation.php": "56ce90bed3c2ef5c387503285e7c95783444003233a0bd3c2e7a2af830aeb1f7", - "vendor/amphp/parallel/src/Worker/Internal/JobChannel.php": "34c00cadb054d819c0183aeeb2cf4006c05bdedea9944b34f2b00caa38b606d4", - "vendor/amphp/parallel/src/Worker/Internal/JobMessage.php": "c8462c6eb799929b4c428f34e30559a1f3c5b638242bc3c0c690c13f8d578390", - "vendor/amphp/parallel/src/Worker/Internal/JobPacket.php": "6c662abfd5451e5361a60ced4b81490b7b4a02bf4921345e8cbdb6b42c8cd62a", - "vendor/amphp/parallel/src/Worker/Internal/PooledWorker.php": "374d05f75eb2a35604a3b7084d4a7d204e902b2aafb36b6cbe132afc8658845c", - "vendor/amphp/parallel/src/Worker/Internal/TaskCancelled.php": "6c290bf2624df606b0894318d3de7fc5770a9c085cae7d39f6b668530e28a1cb", - "vendor/amphp/parallel/src/Worker/Internal/TaskExceptionType.php": "c4f7046a3ad981309a6f7af7be6b6476b8ac3494835c8d21443c8d88374139fc", - "vendor/amphp/parallel/src/Worker/Internal/TaskFailure.php": "4ced7439f5737f25f4a1fe078158aab980046f6d92d8f5bab1844523654831b9", - "vendor/amphp/parallel/src/Worker/Internal/TaskResult.php": "1dfef301be0d015b1e8a89991bb955ca5415419e5d8ed07f1ce0f0ffa5fe2024", - "vendor/amphp/parallel/src/Worker/Internal/TaskSubmission.php": "fdeb3bf1b0176ad1744deb0c5e326c4b6821e622d06576d1e74f7b4ced78ae25", - "vendor/amphp/parallel/src/Worker/Internal/TaskSuccess.php": "93226022202a89f2abddd005d284d37eb22d63d4e1bc40ec3c70ed707438fc99", - "vendor/amphp/parallel/src/Worker/Internal/task-runner.php": "5edcf07830bb6f19da4861b2ab6985886fd27c55936b0ca13cc5c853e8eda589", - "vendor/amphp/parallel/src/Worker/LimitedWorkerPool.php": "9c48c3bd59f869cd48df7e1572c7e010e67fcb274695d3193e6eaede3dbcb32c", - "vendor/amphp/parallel/src/Worker/Task.php": "14712c7f1386d15c8dc4b11fdc5488f6ceaaa6447c539ce4b846c4560b210634", - "vendor/amphp/parallel/src/Worker/TaskCancelledException.php": "f487cd84192e4bcbe5c357f017b09841518a318da14e7a28c120093b8789bdd1", - "vendor/amphp/parallel/src/Worker/TaskFailureError.php": "76a9cbfc05b65b7b8c20af0c3b2c9733100386488ba85f2fd05743af5a2b14d2", - "vendor/amphp/parallel/src/Worker/TaskFailureException.php": "277530a5e19a5a6f17a6b288d3329cdcfef3b2ab272c1d7bfd0cf9d0b5bffeec", - "vendor/amphp/parallel/src/Worker/TaskFailureThrowable.php": "9e2141322a65b3174154a771efeb1fc412e6715613e0f2cd21485e4a9fb6356a", - "vendor/amphp/parallel/src/Worker/Worker.php": "c9593ab565721611b0126b3ee77cf07838ae38753eaec0a589e9309db17c7dd5", - "vendor/amphp/parallel/src/Worker/WorkerException.php": "6ceadf2e6a56a39e799dad130f82b320fff19796e07902b01519001112734c56", - "vendor/amphp/parallel/src/Worker/WorkerFactory.php": "2574bcdfc7b8e34c7935e37293444ef20e074e4f8d1bd8dfcb11e4dd6ed6cb27", - "vendor/amphp/parallel/src/Worker/WorkerPool.php": "942dc616438725b756a686f89f522a94068ad8b27ffd0043f0d03b0f7afa46ab", - "vendor/amphp/parallel/src/Worker/functions.php": "29e79c38c3e56ce5d24416b5565da31f91eecd14ffb0844f48e71b7b0b1f1290", - "vendor/amphp/parser/.editorconfig": "c505dd87a78400bd38b4f457d9c5d2eb3a8d9f07ffe3c675cdcefb4ccfc98901", - "vendor/amphp/parser/.github/workflows/ci.yml": "5bb7ffdecdce395020d8d5846d17c281441b585b62ce45194029b5ae948cbee8", - "vendor/amphp/parser/.php-cs-fixer.dist.php": "5ce44edecab0341a80260246cecaef8e48690f3a1b6be2ddbe812ad05c83851e", - "vendor/amphp/parser/LICENSE": "16ac45b95d11c9e4b805ae5392d069cab777f8085779ad3869b47030ccf47734", - "vendor/amphp/parser/README.md": "5c0a07bce4fd85d7eac5f68d83bd38fcb3f3a254e302b8a8e0d45e92460affd1", - "vendor/amphp/parser/composer.json": "bad8b9dd2faefff26f36497a8470411822e5ea791925b5221e58a9d4fb746ca1", - "vendor/amphp/parser/psalm.xml": "2529e3294c0663afa1179873530156f599c02cf3c9c15fcef795d03647205d3a", - "vendor/amphp/parser/src/InvalidDelimiterError.php": "293de7140416f34652f9b19c7e437aa5a7a25b82f8517c68580fa32a318dbbe5", - "vendor/amphp/parser/src/Parser.php": "63084f6ac45d013e1271d1edbbf5bbc1942d27533386b3d83726c10c470ab386", - "vendor/amphp/pipeline/.github/dependabot.yml": "6e88c6b58f0687c7136021a6d2227a31e58a35bd78ae48ad5c619bf4cff2e309", - "vendor/amphp/pipeline/.github/workflows/ci.yml": "4804877ff9146cf97048d2a5f4293a3588f7b744f31023c676483a0852597395", - "vendor/amphp/pipeline/.php-cs-fixer.dist.php": "5ce44edecab0341a80260246cecaef8e48690f3a1b6be2ddbe812ad05c83851e", - "vendor/amphp/pipeline/LICENSE": "dd9b5da37883d21ecc6fe466ac0a4644d8caf7ea7cd5ff17f47c5f167e131091", - "vendor/amphp/pipeline/composer-require-check.json": "7e27d88847404786870ba719a60b502554589f77c922f22b9e872b2d70fcbe5e", - "vendor/amphp/pipeline/composer.json": "71ea6470e744cdab02e235e77c9ae7c41af2697b94c0d893c09aae087eb80ae9", - "vendor/amphp/pipeline/psalm.xml": "48966b84c14ab35d1b643f32918849df60b7628df7759d916fc2aed68ea88718", - "vendor/amphp/pipeline/src/ConcurrentIterator.php": "da818dbb67621e56db434a580324f540a7e95d2b34d287c50143fbf69c5fabf6", - "vendor/amphp/pipeline/src/DisposedException.php": "4c27d10d42d1db37b163a170a51ff90e4bfd026980c4556c922b6c3d58409b56", - "vendor/amphp/pipeline/src/Internal/ConcurrentArrayIterator.php": "6607bb256f0bf31d627c7fc5f5a0f7d74e937acc65c0a0507a824376bd594134", - "vendor/amphp/pipeline/src/Internal/ConcurrentChainedIterator.php": "aed315febcff2d9711a82b251da9af67a6fd7059a7b7b162e5aa66d2da723d18", - "vendor/amphp/pipeline/src/Internal/ConcurrentClosureIterator.php": "dd954fe7d6913025a995613271b29130a9ec87f7469e11043b5d1437299a5439", - "vendor/amphp/pipeline/src/Internal/ConcurrentFlatMapIterator.php": "e9c931a90cac3edcb617eaa365044041f29dfaccf4d04f4555bfdb7bf92b8163", - "vendor/amphp/pipeline/src/Internal/ConcurrentIterableIterator.php": "3dc685fae76af252067bcd67d73f60c4ec87b3d616423e39dd8e575464964d91", - "vendor/amphp/pipeline/src/Internal/ConcurrentMergedIterator.php": "0cced999ca38423aafd8083254ef2ea8c3fc53fff498dbce640cb86388af878c", - "vendor/amphp/pipeline/src/Internal/ConcurrentQueueIterator.php": "36c3b1f410de79ceb57efacfeb744c05661e3ba79fecb57366cbe56b2622ba4d", - "vendor/amphp/pipeline/src/Internal/FlatMapOperation.php": "24361078cee8ef347be0ebea645fe24901d4fbb203ffcb33c2d3019f00eadb28", - "vendor/amphp/pipeline/src/Internal/IntermediateOperation.php": "dad967605a9863d2da7817cf2c912ac93abf866514b1a55a03ec7f235d7c8750", - "vendor/amphp/pipeline/src/Internal/QueueState.php": "3a501f439ae5524768e5c8b0bc2b85a91714a47e87e5ed5f3fdf1a7092c5ce17", - "vendor/amphp/pipeline/src/Internal/Sequence.php": "26483a81d17264fe3e1dd102c3ff441cc1becee99c46ded4ec05dc68a23faf77", - "vendor/amphp/pipeline/src/Internal/SortOperation.php": "b86333ed0eda65ad5654e4d81976e4305d7d790dcb053c8054e8a761a95b020a", - "vendor/amphp/pipeline/src/Pipeline.php": "180f0ea53e6526aecf19addbce05d11f458fa2f09dc396aa0253f60ab570f99e", - "vendor/amphp/pipeline/src/Queue.php": "d6a821c709ebc403ff60d14507259068141bd09b8c16478271c7eaee068077bb", - "vendor/amphp/postgres/.github/workflows/ci.yml": "f3fc2152ed8997b0e2891726d4489c0ba963fc0a3d5c181016f80c02a449ac94", - "vendor/amphp/postgres/.php-cs-fixer.dist.php": "4e2c3fd1f0d253b43b685fdad9e5cf68eebed9d2e115ad1e096faf7b18f159c1", - "vendor/amphp/postgres/LICENSE": "4832233a325492ffa9dc1cb5c654a53e69c00adaec7f45d50a896d9d9c77a9df", - "vendor/amphp/postgres/README.md": "372217496287c9fc2818ec8f0dfe7453c55053ad1d3529418e463ed48ab9c2af", - "vendor/amphp/postgres/composer.json": "e734389b84ece88ff26bc47686cd0b782facd7adfdc3aaef0e045ca94c98752d", - "vendor/amphp/postgres/examples/1-basic.php": "32a3192a073acef256fc2da262fcaef5464483560a343e206ba2c288b8320096", - "vendor/amphp/postgres/examples/2-transaction.php": "a806a567715394703b25d79ae794ab51ad15b2149a46959807e2b16f4c872595", - "vendor/amphp/postgres/examples/3-listen.php": "ee523f665593b9fb636fc8833cc07c59e610c934e7006a0a87b6f5bccb7b5b57", - "vendor/amphp/postgres/examples/4-multi-listen.php": "ba8f0d154f0336a06170fcbea3a088105877f50353bc54fb8653f1515be024b4", - "vendor/amphp/postgres/examples/5-bytea.php": "0df9065e47cf81a68e43cff289e7752dfb15dab531a19719fdf4a4cf8ab7b918", - "vendor/amphp/postgres/psalm.xml": "f3e895e55a2dbd85c90524ea55d30c24e2faa565b5e5783db1ebfa26f826d711", - "vendor/amphp/postgres/src/DefaultPostgresConnector.php": "e4fe613146fb4936d27a49898eae41087f6152b6dfced5cce12048a313a48cf2", - "vendor/amphp/postgres/src/Internal/AbstractHandle.php": "59be029fb60d3f21494c74ec1075fbdf5c0221e7fdfe07d1899619d600afa468", - "vendor/amphp/postgres/src/Internal/ArrayParser.php": "65ee03a24245ccd1b6c163ca6bb997bd64f7aed1d357fb0528db2db987d637ff", - "vendor/amphp/postgres/src/Internal/PgSqlHandle.php": "f1f0d086bc9671d267ce079ae3d5ef3b8c188a1003603528d1437a4fdc938c99", - "vendor/amphp/postgres/src/Internal/PgSqlResultIterator.php": "350d8ff5deb0d6344eb8bc3443fecc6c22eeada6a03fa4c0c849c8816a139e9b", - "vendor/amphp/postgres/src/Internal/PgSqlResultSet.php": "8f0850091fae7246f27630bb563544c8347c83c6904ef4c89b4b73bf7da992c1", - "vendor/amphp/postgres/src/Internal/PgSqlType.php": "66efd4cd265f78ce141f379e64ad5f48e5a168bd881e43de01150136a570b259", - "vendor/amphp/postgres/src/Internal/PostgresCommandResult.php": "4ec7c389f00d848711f1de26793355a946a007e24a7a62f6593e16108d77a0a7", - "vendor/amphp/postgres/src/Internal/PostgresConnectionListener.php": "f8b7fafe6300cb83e6efbc8331dd473fbef0854b4732f9718cff5cec4ec0225f", - "vendor/amphp/postgres/src/Internal/PostgresConnectionStatement.php": "33bc8b7dba2210439f07ceef62b3b80f5c79764a7840e12edba567eaddf9e4dd", - "vendor/amphp/postgres/src/Internal/PostgresConnectionTransaction.php": "417d5f97826eda1e6e82984e18e9a9c1343bf392eae901eb6d35839ea9815f32", - "vendor/amphp/postgres/src/Internal/PostgresHandle.php": "f06b28893f8eb5b363b42a98fb6f03c78413a6c86b456c42015cf8fb31711f81", - "vendor/amphp/postgres/src/Internal/PostgresHandleConnection.php": "3490a0a5abc96493261a81ab8e73ad3063b08f36eda0b222ee453f2300a30fa6", - "vendor/amphp/postgres/src/Internal/PostgresNestedTransaction.php": "eb534091946957b0c4e444ccd9b17ee9890c815d77a28d2611d8e92e16da3b49", - "vendor/amphp/postgres/src/Internal/PostgresPooledListener.php": "cde8d76620f71bdf223e9898c54a8acf23c7311df84a7f5c6f3fdd4e2e5dd2f0", - "vendor/amphp/postgres/src/Internal/PostgresPooledResult.php": "b7efc1997dbb1f4dcaa33d7191eed257db7f698bdac636451a0d805c0db3845a", - "vendor/amphp/postgres/src/Internal/PostgresPooledStatement.php": "9ecd9855ec8d93cf12edb5394361ef6e5a704b62f13711a28c1ca9803238f349", - "vendor/amphp/postgres/src/Internal/PostgresPooledTransaction.php": "43f9413ac9850b436e530a7db925ebb6548e786820abfcd1fc97d07c16cdbf6b", - "vendor/amphp/postgres/src/Internal/PostgresStatementPool.php": "ec698527242f9cd5a5f58a08f9543037b408a95b20cb79a19b9c98e9fad7f265", - "vendor/amphp/postgres/src/Internal/PostgresTransactionDelegate.php": "50e8724a2b72ca9fba764a74a5f12ac00d093a54cd4c2b175a4277f5db85a510", - "vendor/amphp/postgres/src/Internal/PqBufferedResultSet.php": "72d5f51dc63e3a6afa3abc6e42163ed65d3bd965ae6ef9b7588879b584d35a6b", - "vendor/amphp/postgres/src/Internal/PqHandle.php": "54487c6b76249a6a3f2cd9a3b8520cfd9f5ecf36e017b7a244e965a5a1221f5a", - "vendor/amphp/postgres/src/Internal/PqUnbufferedResultSet.php": "eae425708304e0127983d6eadec1fe7046594fcd15289e7104009cddf789f1bf", - "vendor/amphp/postgres/src/Internal/StatementStorage.php": "48a2639085c11ddc268448af55caad5bb0e0e97429ed25af13d5c81d543e0aad", - "vendor/amphp/postgres/src/Internal/functions.php": "b66f478cc6bdb8138be6ef4eead7b623ebe7dc33df93902d9bb1835255b69aa8", - "vendor/amphp/postgres/src/PgSqlConnection.php": "b58f9b0a8b4e8454a882e1ab3ed06785061f4af4abefc7ec643fb5c16f7373f7", - "vendor/amphp/postgres/src/PostgresArray.php": "15f19d5fc33a5fcfbcb674c26063224c1cd8af447bce9bf776ab40bf8385f06f", - "vendor/amphp/postgres/src/PostgresByteA.php": "867f6913c0cfe2e48e4d14c19c2382dd8eb6893a7790688df7f5840a34996b64", - "vendor/amphp/postgres/src/PostgresConfig.php": "f591fb44fdec19613e51a79ceb73f7128bd081477f46d9290d73654044d95d02", - "vendor/amphp/postgres/src/PostgresConnection.php": "3164c9cbb47d91f7a2a80b7d939f6d7f7111c74d3d2a643f1d6fcb01bb3d6497", - "vendor/amphp/postgres/src/PostgresConnectionPool.php": "991ce5cbb0c57187c3c2f7ab15d10658580b71e30a2afffcd37e71e5526ac57e", - "vendor/amphp/postgres/src/PostgresExecutor.php": "10f57e1133b3f514e9fbc7eddfcae68b2cf956850d75431ed460cc0298542313", - "vendor/amphp/postgres/src/PostgresLink.php": "7a2bd8f88b7b20c5cdbfa454b243a18099c6b1587cbd12dae14779a5fa2d39cf", - "vendor/amphp/postgres/src/PostgresListener.php": "7f681691af452f445afaf617db82dcf0b2337683636f6365c9c74f84be5c8e54", - "vendor/amphp/postgres/src/PostgresNotification.php": "cae580e8585c80f14d8e25393237c4c6f7271ff3e9ba6f96e0814268d8e99609", - "vendor/amphp/postgres/src/PostgresParseException.php": "5b1acbbed6e227c902550debc1477ef8ca7a849b9676fcb14373f460f4e8a916", - "vendor/amphp/postgres/src/PostgresQueryError.php": "2ae6d3c836ef37cc960836e3022dcd27a762cd07f15512a5f2091f3d7041d566", - "vendor/amphp/postgres/src/PostgresResult.php": "b9ee20286b821c787428bb45850edb6ab63b09c929d34a8d3e3c96b36a5ae24e", - "vendor/amphp/postgres/src/PostgresStatement.php": "c00323acefd6ecc27348a9a8c077f5a0f9b54bc41bba09f2fdd131695a5e4614", - "vendor/amphp/postgres/src/PostgresTransaction.php": "851626184fd197a1f6fd1210edd311b4814ceb0891a298412bf34bb0af8d7019", - "vendor/amphp/postgres/src/PqConnection.php": "e4a03b84f0473dd5e69c5c2ff121f788e220ba12dc0838858260dd5062d65442", - "vendor/amphp/postgres/src/functions.php": "18ca8cb08024510ccd3c9e90bce3e03e19af373b4625c99850d94ac7e35b80d0", - "vendor/amphp/process/.github/dependabot.yml": "6e88c6b58f0687c7136021a6d2227a31e58a35bd78ae48ad5c619bf4cff2e309", - "vendor/amphp/process/.github/workflows/ci.yml": "3e3e9afd3256170474a8c0561217976f5cb7d64f815c8f6f9eb47f1d94c0554b", - "vendor/amphp/process/LICENSE": "5b8738686f873967502b48ff6b52d03a2065ea124146d4db7688ff469873b373", - "vendor/amphp/process/README.md": "3d141f3ac85988a5722b218fee0b9cddac24aad20cf453bd469868725c389fce", - "vendor/amphp/process/bin/windows/ProcessWrapper.exe": "5b6e66912c92e40ecfb6ac391a2595fa2a8d8e4f93a911c7ae0248aa14ec047d", - "vendor/amphp/process/bin/windows/ProcessWrapper64.exe": "1b7c6db9c3dae3073335433e1c3f913b80ac76109b869420e1332652b0c461a2", - "vendor/amphp/process/composer-require-check.json": "b061500858555c47ff47eeae35761abf6b176ac1e7598beddb99e45b21051428", - "vendor/amphp/process/composer.json": "1c888052d7e69de87034648fb56d00e4fa5a80ddbf0889bceab40e6964e4a38b", - "vendor/amphp/process/psalm.xml": "615edbcd0336788a70d1d7728c85cefaa6f1d2d9a429213baf50f749b954e915", - "vendor/amphp/process/src/Internal/Posix/PosixHandle.php": "409427c77b607c72af988970bc07bf66c6ba4f07dbe7130f65a31928c49a2da2", - "vendor/amphp/process/src/Internal/Posix/PosixRunner.php": "9fe8eda185e3cecd8e730c8c964ae89dd31c06859b835104916915d13a270ed3", - "vendor/amphp/process/src/Internal/ProcHolder.php": "7770b69a74f59747fd1566aa557e08d2cdebffc9449a4a36eada8dae5d9a784f", - "vendor/amphp/process/src/Internal/ProcessContext.php": "ab8defce5c0a9a2ceb338277bab6173b01482e2652ea9e8d0281f103c0baf993", - "vendor/amphp/process/src/Internal/ProcessHandle.php": "cd022f9106a08c15b9d07a31ce74f98962dc3c89f4a7ed16367523089b9f2079", - "vendor/amphp/process/src/Internal/ProcessRunner.php": "0a9d9ee576b05f386cf426b9045077aa763119800918533419aec9c04901cacd", - "vendor/amphp/process/src/Internal/ProcessStatus.php": "259ecbaa64a2f0dd9b68def2a4589da12792f25615fe803c67be7148ef5630a8", - "vendor/amphp/process/src/Internal/ProcessStreams.php": "b65519c35a1edd22e3bb11dadc61230aac6adf95d3d7522ab700afb2bbeadbd7", - "vendor/amphp/process/src/Internal/Windows/HandshakeException.php": "af91615b44abe0d6fd95673d3a0411f4d78c05eb5179749ba7998c98c87308f3", - "vendor/amphp/process/src/Internal/Windows/HandshakeStatus.php": "fc2f734715f298021772c50f1ced5ce74ce8291e6bc9e48a4e42d096ab2d05d9", - "vendor/amphp/process/src/Internal/Windows/SignalCode.php": "a9ae24ec0ccf8f68d78fc956c152d1c073c6fda5ebe3c203831ca6ed36221aa0", - "vendor/amphp/process/src/Internal/Windows/SocketConnector.php": "57e758aed11be151062f2df4ded6c69dd52ecb61419bcc3c9a80b125aa8d88b5", - "vendor/amphp/process/src/Internal/Windows/WindowsHandle.php": "e0af6d1b74990c48e40d514dcae66eac9398904d1964841e5d90463384903301", - "vendor/amphp/process/src/Internal/Windows/WindowsRunner.php": "16fc26529020d0d702e168a964571f6b56f0ef2a4527876cae9783c46e4cfbb6", - "vendor/amphp/process/src/Process.php": "a4271109e400e0ebc4cd512eeb4a4921c2f311c810df16df64b7f471671d602d", - "vendor/amphp/process/src/ProcessException.php": "c2e91647ce25e8c6221102fe1d045d743a6651e7816501ae34f4c870ebc77b4e", - "vendor/amphp/process/src/functions.php": "a4aaa06af5c5151e0455735d710c271a62ec98adf1ad88b30df2d2224329c0d6", - "vendor/amphp/redis/.github/workflows/ci.yml": "ce19488bd86c5662beb6e9f1488f1ee75af2affce78cee33438ca9b7d74bdfeb", - "vendor/amphp/redis/LICENSE": "93dc2b2aae85651379265cbb4906d2b054020ac9cc4ee70e5040f79751e34651", - "vendor/amphp/redis/composer-require-check.json": "3647431132a70a60064830cecda6ff51ec36dc57219f8296dde4d84f6f684758", - "vendor/amphp/redis/composer.json": "8540d1149f1911ff7f916f7331c211daf7d9bfa3d94789fb70170376d08505e1", - "vendor/amphp/redis/psalm.xml": "cb403c2ef67bb4ef66473f909c9c307f80023638588515204ef6c2144e0f8457", - "vendor/amphp/redis/src/Command/Boundary/LexBoundary.php": "bee1550612e528e0000e674b80b1304a99df94f7337a355041454566c71ecef2", - "vendor/amphp/redis/src/Command/Boundary/ScoreBoundary.php": "a9840212ba7bb0aaf2e05e05b5776e61a839c701dcf0be2bb2f560cb686d0ae4", - "vendor/amphp/redis/src/Command/Option/RangeOptions.php": "47e38b6534f1fa6c5ccfea91f95a4173e0d6df3e6207a88e498c2ea15206d397", - "vendor/amphp/redis/src/Command/Option/SetOptions.php": "6375dec982b2c8338588070474eb77275d73bbec39bdbf608d004913dd88373d", - "vendor/amphp/redis/src/Command/Option/SortOptions.php": "3a28bf3522d9f937c1ef9e7076ca71239d0156bf96bf990f4722e41765303b48", - "vendor/amphp/redis/src/Command/RedisHyperLogLog.php": "930ea381c9dcf7218a00cea05309b675c3a12a3f190d17f910f2260a4742c552", - "vendor/amphp/redis/src/Command/RedisList.php": "f0a2405c95a7909cab44fd0c1848dd5291f60561fadedee5e34b5cdf78976ce9", - "vendor/amphp/redis/src/Command/RedisMap.php": "6b3ebc7d6a2d1c4fae8d386cce34a9d4848e2f74cdaa78ee06fb655b158fb0d5", - "vendor/amphp/redis/src/Command/RedisSet.php": "db3fecbce65adc2b6624bdacacd9b213d81c0876bc901708cd966dee3c271889", - "vendor/amphp/redis/src/Command/RedisSortedSet.php": "c1f60ab96ff455861ee2f6b64364e6b2c3ccb688fed934dc3ef4b6964d81db4f", - "vendor/amphp/redis/src/Connection/Authenticator.php": "c4aff2f7a1ef7acda32e298f812fd361aa5e5baf13f1c194a45b5d15d44bbe99", - "vendor/amphp/redis/src/Connection/DatabaseSelector.php": "802413752f1275f0400c5fc7bd40a9353f021ed60b879e59f652dab77dfea61d", - "vendor/amphp/redis/src/Connection/ReconnectingRedisLink.php": "e56134f83f7a99d8f5e408c6262b7bfd1262a1643d6a253ee3ea6b76650cfc19", - "vendor/amphp/redis/src/Connection/RedisConnection.php": "341b2e217b0b1e1793f85a382414ed4e537e6118e17170fb126eb65958a02817", - "vendor/amphp/redis/src/Connection/RedisConnectionException.php": "0d4bcc78186816e4f91e8312b064320840be2033313ee50779caab078beb9e8a", - "vendor/amphp/redis/src/Connection/RedisConnector.php": "0f5d9383b7c3be1efef019ee5b038bbf1ff0c92cb068770de6283887d951cc51", - "vendor/amphp/redis/src/Connection/RedisLink.php": "cf52a4593845d4745455ca3962d27c98930c5704a4b00563ba5bc6b985b3518e", - "vendor/amphp/redis/src/Connection/SocketRedisConnection.php": "fe111c2e00da19e6d173dc05132456e26f4f42df85fb556e4b254350bb304564", - "vendor/amphp/redis/src/Connection/SocketRedisConnector.php": "921ff311ba33edd30cd8ad3589eb4fd5784c943cc1de6fcf051166ffe6ad7c8b", - "vendor/amphp/redis/src/Internal/functions.php": "55019964314610641b985aba628f5c5f433fafd815c455b323a1b8c520c7800f", - "vendor/amphp/redis/src/Protocol/ProtocolException.php": "e90c409291f92142d234da6b7d98aa4d38b5082bd99319206912fc7e3daf98b7", - "vendor/amphp/redis/src/Protocol/QueryException.php": "e7d339a02b52fa536c43b61cac4efaf9efdc29c5d93314de640a5c9a73d1dc03", - "vendor/amphp/redis/src/Protocol/RedisError.php": "12a33368941e1d4244664d1ba0af304df087db141b03a25d397580af1345a967", - "vendor/amphp/redis/src/Protocol/RedisResponse.php": "709a4a05ef6c42a619e4a7d9e2df704ba7de3d47db9960dbd7ca389dd1300233", - "vendor/amphp/redis/src/Protocol/RedisValue.php": "5aabbee18d71ab8324a3a5f3d347ceecc7bdf5de3a252b9ab8712c2fe3b0a4e9", - "vendor/amphp/redis/src/Protocol/RespParser.php": "b859ae2520eeccaa952b91c01d28da4533e3d9853728abacd6d6ba7bf1434a80", - "vendor/amphp/redis/src/RedisCache.php": "7d65095ff554e00612190ef890d13dd2792e58b9c286cddbf3cfbcc3afed29b7", - "vendor/amphp/redis/src/RedisClient.php": "3d22a15d7a5dfb82bf249ac527158b14d9b843ea647e30f23e9285affaa5122c", - "vendor/amphp/redis/src/RedisConfig.php": "b2ca3cae3e699eb18eb6b2579d89463dd2f83ab4ed250a6dc3307ccce3f2c295", - "vendor/amphp/redis/src/RedisException.php": "9ac3f87efa7077e993c2df4e66c7d9d0be6d6feac3e183af4af6a59c3f31d757", - "vendor/amphp/redis/src/RedisSubscriber.php": "3372f2367fcbfea6441dea1bc1e411aa072eff6f6d7402709300feb75127a095", - "vendor/amphp/redis/src/RedisSubscription.php": "a3baade4752621430ae23b0f9d28dad963b1344bcdd76eff9206460f23d0f7ff", - "vendor/amphp/redis/src/Sync/RedisMutex.php": "002dc05b5a96de697baaaa8d4bf42df485aea5b62d0a41b7368c71fb523f1f3d", - "vendor/amphp/redis/src/Sync/RedisMutexException.php": "0c979665387f2c431f11f44c04a4c0b1f88933e739105701a9627c12c273b2ef", - "vendor/amphp/redis/src/Sync/RedisMutexOptions.php": "fba0961b65eab7905cce3a9ac8fcc7da06eb064cf0897afb6999301506c93d4c", - "vendor/amphp/redis/src/Sync/RedisParcel.php": "61b2ad0d54ce683ffbe777db768415da8ed0bce9601c63e49f68b4c43fd0d5c9", - "vendor/amphp/redis/src/functions.php": "e89f40b167675d8cae07279ff3d2c804211afc4267fd93756d0fab57e53c231f", - "vendor/amphp/serialization/.php-cs-fixer.dist.php": "72f324e677e5328df668fc71aa7c7e71b42f431d025f7f3e0126ae9824cc0bc0", - "vendor/amphp/serialization/LICENSE": "9cbfa9126ef8d331fdada832a7f7048fbd9723870ad79844f2e38b56398c3662", - "vendor/amphp/serialization/README.md": "07437b3c7f1df6d6e7b9e3bbcff4088ce8291a54fcc140a7f19f2a889331e53c", - "vendor/amphp/serialization/composer.json": "aa451393d3225e4616ee4e43316490b162c5a056ec59258111ff3b21a60be694", - "vendor/amphp/serialization/psalm.xml": "33b0e5ab66798537d6b5941412e89683315e0de4c83d91462489e7dd2f29cedb", - "vendor/amphp/serialization/src/CompressingSerializer.php": "66b91f6806dc29ef50315dd5a039fad62ff2bdc1d4c098b6aeeac7bf5fd01e88", - "vendor/amphp/serialization/src/JsonSerializer.php": "9a986e2833b07dfee6cea80438e175fdeae178ff77f9da84df490a3d008cb614", - "vendor/amphp/serialization/src/NativeSerializer.php": "e245a0d2377b4f31ff1752d4c27209af3468d57ecfcc46ea53c467b242fac12f", - "vendor/amphp/serialization/src/PassthroughSerializer.php": "3d2df5ce4fb16b8a48bf3a51212b8b26c8af9df211ccf47c98fffc562e600872", - "vendor/amphp/serialization/src/SerializationException.php": "57a595b58387c117c23b19fae3ea66678fed21bf9eb9283ec2289f02181fd08f", - "vendor/amphp/serialization/src/Serializer.php": "3b509a046ab0c3ccc26d49476e81eaea1f459843bc10baa59329ef78cf42e99a", - "vendor/amphp/serialization/src/functions.php": "daadb074093333d4d06486a0af52126299ff6a775f070b7bf828fdb9be3ed3e8", - "vendor/amphp/socket/.github/workflows/ci.yml": "4c1a71669137877ae92e1f2d2c4e3926f7a70754878334bb57052ede4bc899b8", - "vendor/amphp/socket/.php-cs-fixer.dist.php": "471c989c811a3356ce22dc6212deb1161e85f043315e558cd23d30193caa53cc", - "vendor/amphp/socket/LICENSE": "75ff14768ed3b0898ea24b8ff76e9615c21d1d4e6f7ba1d258cc55cb9689ca73", - "vendor/amphp/socket/README.md": "76a11e81ca26e65da08b27b512cdc0e6e4776dbb163e5b5b469a503db62ed819", - "vendor/amphp/socket/composer-require-check.json": "1490118df06a0394fae8c7cf92698fbecc67d7629b77973b8cf8c6d14c6175d0", - "vendor/amphp/socket/composer.json": "e6346cb7e5528674d6a11e47a216d879f6dba5404498384636ee68492c996a77", - "vendor/amphp/socket/psalm.xml": "0e7922c2bf8907d460f4f8ef2c43ec0ae936a3b5b4db761ebf0124231df568c2", - "vendor/amphp/socket/src/BindContext.php": "df950b39c46a0930509694d39ef825dde1b2fec47ee9efa80d3ef1ce900ed0d6", - "vendor/amphp/socket/src/Certificate.php": "ba8135e687abf0513c5282c17cd366a0843366399e18ff25e94a2177cca7e5a2", - "vendor/amphp/socket/src/CidrMatcher.php": "42d79cea9d12e31805a5bb85764aad890b176bc9d5915afda947d8dd555c5abc", - "vendor/amphp/socket/src/ClientTlsContext.php": "8d7b60d726b81e8bd1f179750e2b75ce3f4321d79daf7f357b2663928972062f", - "vendor/amphp/socket/src/ConnectContext.php": "ad4319b9e3869e9a46b39908b2a4544e28ce6d060641bf6d43416478f46e4130", - "vendor/amphp/socket/src/ConnectException.php": "ba7e9359d5c05c04c7043033f07bd59d353db91eea3fa86afc43b747a393fa8c", - "vendor/amphp/socket/src/DnsSocketConnector.php": "8ce5b47d40ba846d48be976b8d6dcadf423536abb36fdf2739d10bdcddaaff7d", - "vendor/amphp/socket/src/Internal/functions.php": "c93698787a8fbafa5839860448d9a366fb850272b252636bd3745e01c3c777c0", - "vendor/amphp/socket/src/InternetAddress.php": "ef707bfc51cee0c1a3ebccd35495a25ade578b204cb78a709029b7be4cb7a472", - "vendor/amphp/socket/src/InternetAddressVersion.php": "9cea26b649156490bbba7d366caa5d820b45e511137c66ae8bfa6dfec87f315c", - "vendor/amphp/socket/src/PendingAcceptError.php": "91de35f68f361a684a7536687baa3f0ef94061fdce6e57ffb781c1d545ae85ae", - "vendor/amphp/socket/src/PendingReceiveError.php": "2515c51e75f5414e352660ab1fa58781f060ee129ccd29e037a1da56cd14c708", - "vendor/amphp/socket/src/ResourceServerSocket.php": "0978c8163b5a0a62c0021de1ebe18fbf7e947cc13f34d2a25c237f337030bcdd", - "vendor/amphp/socket/src/ResourceServerSocketFactory.php": "755ec24484ee5c21b5d345545e2285b5a04692df46b3f5b77706205efe78719c", - "vendor/amphp/socket/src/ResourceSocket.php": "d1ee2731f707181b4c55e66958070ff534e39b57b12a3f74c0de671f82331dbd", - "vendor/amphp/socket/src/ResourceUdpSocket.php": "bd520a6a05162448a9b9ea6cf492b8af3e603223e2810780f53c74e707b97ff9", - "vendor/amphp/socket/src/RetrySocketConnector.php": "7f713ec8a5b197a42972b31403264407732e5801d04369fb06771d2068974aeb", - "vendor/amphp/socket/src/ServerSocket.php": "8b15503dcdbc080df155621c2573678b0cd87373af6d6a2e157501c951383715", - "vendor/amphp/socket/src/ServerSocketFactory.php": "82930c4f88bbd2005e0426f58e821cd75dd70ec5a98e90c8890a6d0395e40ef7", - "vendor/amphp/socket/src/ServerTlsContext.php": "85b7303f9ccd2b6ab4e39ee469f5f9086d43edeaabd016a9b129a04118ec1ecc", - "vendor/amphp/socket/src/Socket.php": "3f0370fc8fd1a1f545ccee7a40b5d3f95c4efe3a092da95d5a20dd1edb093ce7", - "vendor/amphp/socket/src/SocketAddress.php": "6874e8a0b7acd95dc581c61b184f665b4276510490b31701abfc9d83db4e26ca", - "vendor/amphp/socket/src/SocketAddress/functions.php": "d091a920f76ab1e55e06bf1a677f38baf011d89fe8f954ed899bde60c592e626", - "vendor/amphp/socket/src/SocketAddressType.php": "6bfd97ceb2f238310626b1544bc0ad22a5ac492fe4c80df3be767ea76573669d", - "vendor/amphp/socket/src/SocketConnector.php": "0d66ed410fec7aae9740fe8eb75cad01e025dc5bd108cf46e1ae7b9f6aebf746", - "vendor/amphp/socket/src/SocketException.php": "0775f935deacf83aeccc22e1608a564c6fee31c81cf882f7d78951062e8b2db7", - "vendor/amphp/socket/src/SocketPool.php": "d2191670571ec9ce0080cc46717fee5935acf644de3fb6474f768a77f0958093", - "vendor/amphp/socket/src/Socks5SocketConnector.php": "f6ecf99b094351a847c6241c35ea678a6d48975544650eb37a96352d6b3d97c9", - "vendor/amphp/socket/src/StaticSocketConnector.php": "6e4a510b2a84ed06af0c98ee71c93a67e0e554f66fc1494433947a187bd312be", - "vendor/amphp/socket/src/TlsException.php": "533c68b17bd6b178d0c6726e24c46d90777ab8306ec0f476914a6f51e860a07b", - "vendor/amphp/socket/src/TlsInfo.php": "50acdb11bb6e83fdd52ccb39d9ae90ea8ba79a5bcbf8fc353632490be63b0839", - "vendor/amphp/socket/src/TlsState.php": "573bd8350ab1645655f676b0821027fb4adc76995b4f731c17ec34a34100072f", - "vendor/amphp/socket/src/UdpSocket.php": "7d85269d7b7ca58f1f2d5443edd58e957f43698115350f0b95a51abacc2af9e4", - "vendor/amphp/socket/src/UnixAddress.php": "42375396cc10a1b5869229fc846607d71260e2f3548bbf75ed83f27f2035e5bd", - "vendor/amphp/socket/src/UnlimitedSocketPool.php": "39825227eac72080df4af094c56948c8c6a4ca2927e0c049d9ba1bff30479b8a", - "vendor/amphp/socket/src/functions.php": "774e76f324fe0d4528f1bf89e1a39505aa313f47684cfb7c9d28b2f8b1e6b838", - "vendor/amphp/sql-common/.github/workflows/ci.yml": "14b97bc8bba10a22219deec4045713d35b3c663da00d8978da5ccb1b40efbda3", - "vendor/amphp/sql-common/.gitignore": "1609afa08b8d342c7fd86b92cb8e715ef0accb8ca88265701b4a7435c578f1a1", - "vendor/amphp/sql-common/.php-cs-fixer.dist.php": "72f324e677e5328df668fc71aa7c7e71b42f431d025f7f3e0126ae9824cc0bc0", - "vendor/amphp/sql-common/LICENSE": "d1224ddb6b3741731e97eb3a734cd157a6da4b050e2a3d700ad68a9bf2407e16", - "vendor/amphp/sql-common/README.md": "b2e3097f45f26591f827a5bb123ea50cbe142447cb504deb3afc80601c677651", - "vendor/amphp/sql-common/composer.json": "857b55e2467f8eae8c4e15f69579d3e9cbc3a192e4961875718266bce2a63ca0", - "vendor/amphp/sql-common/phpunit.xml.dist": "4060dbd83908ad35b20ef761ed9c604277e2145f637ef02585fc6311475fb604", - "vendor/amphp/sql-common/psalm.xml": "57e227983fcd1d809aa66e2c86a7d7e37d6bd51edef1308db9d53670aa0bca46", - "vendor/amphp/sql-common/src/RetrySqlConnector.php": "6f91bcc1bdb38a7bf69384adb0c9001d8d449ed4c998d4edbd9a45b154af3521", - "vendor/amphp/sql-common/src/SqlCommandResult.php": "6194a317c6439eddabc491be80e1e2d7318179260a2edd3cf590abac32f0c930", - "vendor/amphp/sql-common/src/SqlCommonConnectionPool.php": "1e36f58d6cc6256c642ce5b7b4432b366131dbe193ed6331e001fc9901f11fff", - "vendor/amphp/sql-common/src/SqlConnectionTransaction.php": "c9bee46ff824036cff73f21912ff7535ae5e6d79307b0eb6196e18545d59829a", - "vendor/amphp/sql-common/src/SqlNestableTransactionExecutor.php": "02314176147494c75951dfd34c22d036f8bbb7ede183a1acb2a8fc6cbe9fbf7f", - "vendor/amphp/sql-common/src/SqlNestedTransaction.php": "20bfb9eedcac6e747ca0f02bd4aedad9c01a8182a10fe911214c8eb9f0c28f3b", - "vendor/amphp/sql-common/src/SqlPooledResult.php": "5ccce98bcbe3a32f38e8be4ae53de7c2593045cce359c58da69f05ac8f7de19e", - "vendor/amphp/sql-common/src/SqlPooledStatement.php": "7ddb4cc2e23496a5addc9a423c207f150940928a0bcda8bd352e05ace6b94e69", - "vendor/amphp/sql-common/src/SqlPooledTransaction.php": "69aea4462678da7a6fec8248a5b5ba33a28061b4837daed0ff7bcca8b0fafd72", - "vendor/amphp/sql-common/src/SqlStatementPool.php": "65ebaed5387dad18ada3047ccd3f0e78273f0395670209bc526f3b2bd72d14a8", - "vendor/amphp/sql-common/test/RetrySqlConnectorTest.php": "5692c12c8bb10c706cdf84534a7741fd9bec08acdeaa0e88fb753361c171b48a", - "vendor/amphp/sql-common/test/SqlCommonConnectionPoolTest.php": "bdde704cd3aa9ee155a8b0e4999787bdee06f4a21bb2ce93e18ef539a08b4abe", - "vendor/amphp/sql-common/test/SqlPooledResultTest.php": "d2b54ce7b7157913b1a3b11769aadfa2707a42de04cb8b175dfa517691df328c", - "vendor/amphp/sql-common/test/SqlStatementPoolTest.php": "6fbac30a5eb41aba569f01a140085bb4f5c48a4b40cb04a770128b9d1d7f9381", - "vendor/amphp/sql-common/test/Stub/StubSqlPooledResult.php": "acd9c0455470066b927e4b7bd79e23779bb37c38b0617dd265a5307e80801ab4", - "vendor/amphp/sql-common/test/Stub/StubSqlResult.php": "ba1becc59b8d9af5609aec851d3578c8450b2e8caad0444970e32f8c4bb14122", - "vendor/amphp/sql/.github/workflows/ci.yml": "85f1e6d4f07463ce8dc56692f3256e48379edd00024dc51719d43ecd6f5badef", - "vendor/amphp/sql/.gitignore": "ef2b80a00f4cdf8ca35424aa058ff5d835ca106dcc7fd12de4738db9e10ad8bc", - "vendor/amphp/sql/.php-cs-fixer.dist.php": "72f324e677e5328df668fc71aa7c7e71b42f431d025f7f3e0126ae9824cc0bc0", - "vendor/amphp/sql/.php_cs": "ffc00778467991d3476ca0773768891f77d47d5ea8d34d93aac7776611680a27", - "vendor/amphp/sql/LICENSE": "d1224ddb6b3741731e97eb3a734cd157a6da4b050e2a3d700ad68a9bf2407e16", - "vendor/amphp/sql/README.md": "dba8f0cf0a9fa92730b60d4d59b6d1a1c7c8df56764c6b16a2ec5b28d2d579b5", - "vendor/amphp/sql/composer.json": "c0a73ba7b2764a0cfd90459e957b594c6e8fa62e3e2f38087691f614a6683d8f", - "vendor/amphp/sql/phpunit.xml.dist": "ec303239253b9fde72cebac20581df41b13bf592f1438b9448a2ec8355474afb", - "vendor/amphp/sql/psalm.xml": "fbf701740a4e50c9bddeff31429bb73d924fa3deb6d28e5c53050e856d7d2995", - "vendor/amphp/sql/src/SqlConfig.php": "df0391bd9b1fa21a165862c46a62f8e62fb8fdb132958d9b0d600010b8702325", - "vendor/amphp/sql/src/SqlConnection.php": "e5737fc31f8827e68ecb14ad1d947cdc9986e8556c5228a3c4b99e1e7d4af851", - "vendor/amphp/sql/src/SqlConnectionException.php": "2bd8f8476ac68d7e8052501c47eccefb7d9e5ee2b735af9971ca058273638867", - "vendor/amphp/sql/src/SqlConnectionPool.php": "0ad8a7386b74f574c49ebc5bee906d2368191753f8403cc0cbb5f460fce524fa", - "vendor/amphp/sql/src/SqlConnector.php": "0cb934694c570e60932b0b18e2f88c68e2e0c3aa4ad4cc25d80680dcab2ede2e", - "vendor/amphp/sql/src/SqlException.php": "0c35e214f4787968b8c0d02501e699ee356009243140a323e2de2634d5c4da2c", - "vendor/amphp/sql/src/SqlExecutor.php": "83831eabdb0607c772cea3c9572e5e856857bdc56f151cfe28a89aaa847ef7ce", - "vendor/amphp/sql/src/SqlLink.php": "83f0ba973c909d225aa9a367a2d86ed62aced6cce853e8c8988e28174a30dc1b", - "vendor/amphp/sql/src/SqlQueryError.php": "213700f91ebd9e8c37370a55575e0d1e52830ade0e86c09fea5685d48def36cd", - "vendor/amphp/sql/src/SqlResult.php": "e6cdeb992ca6c6180c467eb0aab55a9cffa237e6b508095c72aca9790d5ddda6", - "vendor/amphp/sql/src/SqlStatement.php": "e38d683720b99c98e3b39feeedd7105bca7230a73fe8de2674be25c96778435e", - "vendor/amphp/sql/src/SqlTransaction.php": "8c2b6176565464bf737d9265aa4ab50dc61b34e793a844402e4eacf34c6d501d", - "vendor/amphp/sql/src/SqlTransactionError.php": "35ee0c47d10af1c8d05dddfc6a33bf2efdd72155d2a3b030e67fe8f117a84e39", - "vendor/amphp/sql/src/SqlTransactionIsolation.php": "87d9fa68c0a9f8ab8cd6cf253f348e760503f97d0b7cd1b3c359585e86b31de3", - "vendor/amphp/sql/src/SqlTransactionIsolationLevel.php": "aa2f2491e1eb5155d7f4c537a71a76cc4bcda7bc6d5c7b28a300106cb936fe14", - "vendor/amphp/sql/src/SqlTransientResource.php": "426eaf78b9979f5223953919878977e55dc1ebc15793cc4d5a8956918c15597d", - "vendor/amphp/sql/test/SqlConfigTest.php": "670061090f364788ecafa896f6d25552d9f4c33238852afe4b6de61e9d139fb7", - "vendor/amphp/sql/test/SqlQueryErrorTest.php": "692af6ec0276e3589c93e2cc208edd1f61a546776238c245430d9a8c95915399", - "vendor/amphp/sync/.github/workflows/ci.yml": "f073bbdf8eced52251e084b25584ff129dfa26ecc60042d9f0efa70f52e9eb70", - "vendor/amphp/sync/.php-cs-fixer.dist.php": "4e2c3fd1f0d253b43b685fdad9e5cf68eebed9d2e115ad1e096faf7b18f159c1", - "vendor/amphp/sync/LICENSE": "0e4919a5d6d70ae53b3291c932d055d1734172a539db060bd8c8f392a13ff0f1", - "vendor/amphp/sync/README.md": "19e1624d7a3b976ff24620881bb59b30b67301e8ad065774f4da2acd145b2724", - "vendor/amphp/sync/composer-require-check.json": "786b675a4ccc2c48721806f6414893f1ae8d244e0fe0f0d0061f8e1b80279690", - "vendor/amphp/sync/composer.json": "93630de86fc737553b6c21322a2c90beae64d1492da06097327033da41d00bbb", - "vendor/amphp/sync/psalm.xml": "db55695e1e36ad2e4474f0beca9fd7e55a11e04c62f99e8f3c6d0367f066c2be", - "vendor/amphp/sync/src/Barrier.php": "8027603c451cc8f9535661a0557c0b5a2fab775325e1899fd4c5cc46624298a3", - "vendor/amphp/sync/src/Channel.php": "b83a4c5390faec971f8b0ca5a3b089b619f632317c50791a072914d3b83098bb", - "vendor/amphp/sync/src/ChannelException.php": "6f9342be068c764be30f87f283cd916bb7093731ffab223a6ac5f1f7a68ba707", - "vendor/amphp/sync/src/Internal/ConcurrentIteratorChannel.php": "69b8d45d8de9bbd6e14792b753e17ea67ff4cda21bf7f8016da0811d103be9a5", - "vendor/amphp/sync/src/KeyedMutex.php": "13a7347b92afbb6b92bdf1af7e1b253f93a7373f3f8b91042bcb342c65006e6e", - "vendor/amphp/sync/src/KeyedSemaphore.php": "ca2e1b53b18d5ca2575c233aea1e0f624f692aaf674bf6a4f359fb3e06f9ba98", - "vendor/amphp/sync/src/LocalKeyedMutex.php": "e83e9f01c246613f4cd02bc83bb3f983edb994be6444cd0cb287a4e6752a654f", - "vendor/amphp/sync/src/LocalKeyedSemaphore.php": "7c3f51f8bb3f09aa682fce6205a66f8b7ed09cb4a5a3c62cb13456bf56f198bc", - "vendor/amphp/sync/src/LocalMutex.php": "390b1aba4a85eede0559633b289a18984c802fc40f007b5af8fcada88e5c0e5e", - "vendor/amphp/sync/src/LocalParcel.php": "5c6bc02fbd0f039e2a621202a1d6d46b7b2fd2130544fda9a83ced5e4597bf3c", - "vendor/amphp/sync/src/LocalSemaphore.php": "1767930143bc1b021d15fe441fbd43bce6aff4abc46ee6bc249801dc9f623a41", - "vendor/amphp/sync/src/Lock.php": "aaa57f62212944780d3e159b54c9a5d8f959b2eebfc62c4c0f8304adbbe1f902", - "vendor/amphp/sync/src/Mutex.php": "e71e5a270c7f6bd84c3b634de70ffe8e2bfa17def7ab4b1b808af923cf6b0111", - "vendor/amphp/sync/src/Parcel.php": "15aea63af1167dfdd9713da6e5743a3b64a4b83d4b71f403dfdd9b97bbcb1195", - "vendor/amphp/sync/src/ParcelException.php": "264ba163bb97b31f204c4d8096a919777ae2144b48539ea06c7dc31f1d4058fc", - "vendor/amphp/sync/src/PosixSemaphore.php": "96ebbdc29a337440c0624d361779f5338181c5325cf196015db940a4c4b6a7a2", - "vendor/amphp/sync/src/PrefixedKeyedMutex.php": "b07fa9f4bf48617c0bc1da93d65a91c7a980f64ca28c5bc1173643729589b7d5", - "vendor/amphp/sync/src/PrefixedKeyedSemaphore.php": "d64f23a1f2d1176468ed475c2d29a6440d953697ab51663c7898bdae1dd52ff5", - "vendor/amphp/sync/src/PriorityQueue.php": "d39e41a24c5f2fd4da5636f0c5f8e2bc8e8c619c8e1566dc943b4d16f76b7774", - "vendor/amphp/sync/src/RateLimitingSemaphore.php": "9c9d39d208a48605ca801a53675cba8ab3f282ad9f3d84a0f3400baf285d7765", - "vendor/amphp/sync/src/Semaphore.php": "1f7102de2f187532dcc70a3a6cf829a3128190eccd81d4f4a2bd6091b3201d5e", - "vendor/amphp/sync/src/SemaphoreMutex.php": "e13be6ce205c6201e53bb870b32d91bbe55c1c49d4453f7f5300afd0f3f92572", - "vendor/amphp/sync/src/SharedMemoryParcel.php": "d91f6133947448f455fdfe48c3fb4c6ec1adf3caf08a80bd56f66a73c60f7c84", - "vendor/amphp/sync/src/StaticKeyMutex.php": "ea41a04108da4d53be1dab9537c00bafa7a1637a406b7acda3b2f2e093c48a46", - "vendor/amphp/sync/src/StaticKeySemaphore.php": "8d75ae7499e83eb28573fa32ff6b3bd9e7c4b552f1eeb0a15ef7629bc1204e08", - "vendor/amphp/sync/src/SyncException.php": "3ff2d8661d6db22fcb4e537fec84f9358a599fa21980d4406a8c140e4043285b", - "vendor/amphp/sync/src/functions.php": "f5f44253cf1710637e4e383eba6677e0a4395bcbd4ddb9bc8802b231b8edc1c4", - "vendor/amphp/websocket-client/.github/workflows/ci.yml": "aaa9586b07c3b621f0ef9b3ed5efcb43877e2defa861026bf80687ac4242d177", - "vendor/amphp/websocket-client/CONTRIBUTING.md": "874c604631ebbb98eac17e9e937519c024eb5d6ca67b4c707947e5dc727a47d0", - "vendor/amphp/websocket-client/LICENSE": "0e4919a5d6d70ae53b3291c932d055d1734172a539db060bd8c8f392a13ff0f1", - "vendor/amphp/websocket-client/README.md": "5dc6d52e390c21bf536a20e4e921ab2f29630eba997f1cf129e7255dd9790b29", - "vendor/amphp/websocket-client/composer-require-check.json": "c17a664da4bf74cb18fffaf081e113d0b525d7eb925cc26f72523eefafd97c24", - "vendor/amphp/websocket-client/composer.json": "bcf167f2883ec57cd5162a6ed71b9a645d62b572379f4c67b8e057e5c37e5653", - "vendor/amphp/websocket-client/phpunit.xml.dist": "92343b2b2eb05c960e0d20ebcc845e7fec07854f8b421bd77f33a7fd9f0d3597", - "vendor/amphp/websocket-client/psalm.xml": "fb2f1588a528703a92ea583cc7fcd693a34be2615a1cc281d209d3c7b7a40f25", - "vendor/amphp/websocket-client/src/Rfc6455Connection.php": "835fb1be69f7d6aaf7b49edc2f3e2df9823425465157820816fcff4aebd35dac", - "vendor/amphp/websocket-client/src/Rfc6455ConnectionFactory.php": "6b0361f63d447d5afce71c90412ce75796710beb90db34ed3be2c5d2c95c5362", - "vendor/amphp/websocket-client/src/Rfc6455Connector.php": "885786d523313fcf0a410ae2c5cead48eae49b7b94e6f1601e2bf322f4b4702d", - "vendor/amphp/websocket-client/src/WebsocketConnectException.php": "6dc1bf7aad37027f2b4a18ac4854048a425f8c5701ffb13a9bd8853b17a1ec89", - "vendor/amphp/websocket-client/src/WebsocketConnection.php": "dd3db91a7de72b59f7bbca7026de2c007d8c605cdedfee0917fa7833dc59e0a1", - "vendor/amphp/websocket-client/src/WebsocketConnectionFactory.php": "fff28bae804e4014dfa9073ef1888d797572ebf5a1e6e63a45afefdc5b07f82b", - "vendor/amphp/websocket-client/src/WebsocketConnector.php": "859704c59a7baa6dd4d308b2873a63aa8c8a45ea59698aa75f66c8d2da8748f5", - "vendor/amphp/websocket-client/src/WebsocketHandshake.php": "ab8a0719323903c899613eb05c199bbbbdc3dd9cd71d51b80664954ac08c4a89", - "vendor/amphp/websocket-client/src/functions.php": "28091299e7e10dbe5479a79df16f8d445969ee09fbc74b546a7f80e714376efe", - "vendor/amphp/websocket-client/test-autobahn/config/fuzzingserver.json": "47af83ed79586f243c16b478c83e14306d13d5cabb018776694e6f24552ae828", - "vendor/amphp/websocket-client/test-autobahn/runner.php": "9e4a8cc4bfd4304a2b62d28af7685e1d040f20cafe5b47f85517ba10d3cebdde", - "vendor/amphp/websocket/.github/workflows/ci.yml": "a475ceb7c033f3ec52050885be54bdc14ba68d4a3ed2efe5f959b024052073a0", - "vendor/amphp/websocket/.php-cs-fixer.dist.php": "72f324e677e5328df668fc71aa7c7e71b42f431d025f7f3e0126ae9824cc0bc0", - "vendor/amphp/websocket/CONTRIBUTING.md": "979aef790f3cd7c4a193f858996e079eaac50e4e496b092b05b0339bb2bedbfd", - "vendor/amphp/websocket/LICENSE": "93dc2b2aae85651379265cbb4906d2b054020ac9cc4ee70e5040f79751e34651", - "vendor/amphp/websocket/README.md": "e4835d8a3c27f31a1e121067a25c1a6f69dabd7b8c49b1de0293e892f258ebc1", - "vendor/amphp/websocket/composer-require-check.json": "1155fb0cd3f1c5be47203df55ae47b433bc86eba620d3b6774d456fbde62ab38", - "vendor/amphp/websocket/composer.json": "9b8a42c2e8d1d6e47cdbdb62f5a1d13d5edcb387bb0cce28fc61299dc2f58dea", - "vendor/amphp/websocket/psalm.xml": "2433c73bea9c4349227c217cbe41241a648170fab1d67f8878b3c95927a3c328", - "vendor/amphp/websocket/src/Compression/Rfc7692Compression.php": "4433aed65c3a3d8b7da11ddc2bf529051aed4c20ac2758a847eb60b21c5da36b", - "vendor/amphp/websocket/src/Compression/Rfc7692CompressionFactory.php": "361dfa108a927890c31adcccd68200ee99d49415d2b1c88b90fc1926b44bca17", - "vendor/amphp/websocket/src/Compression/WebsocketCompressionContext.php": "b0a95b7ebf395cdeed0f7f8798a4e864b1ef192689eedd70e7991c630e0ea605", - "vendor/amphp/websocket/src/Compression/WebsocketCompressionContextFactory.php": "eeeed28c35044061dfebb0f20fc64b9d22feb12e61073efc3718c9ca4e9a1f04", - "vendor/amphp/websocket/src/ConstantRateLimit.php": "ec583aa5a00ccfa150bfcacb2ffac5ee8353ff9a4cd5a2ea652f35bb5653ed54", - "vendor/amphp/websocket/src/Internal/Rfc6455FrameHandler.php": "34aefda3b77e5c4ff58157d24141061ff96bd15a44f5f5bbe1880e035fef4711", - "vendor/amphp/websocket/src/Internal/WebsocketClientMetadata.php": "593f648a57e6778a0bb121b38f607c0d6027b6f51a22172f42a08620aad6aaee", - "vendor/amphp/websocket/src/Parser/Rfc6455FrameCompiler.php": "911181546b396cf4e7c00e9a6c678dae19350d81b6f6f4073f889a33da802f3e", - "vendor/amphp/websocket/src/Parser/Rfc6455FrameCompilerFactory.php": "78b0890285710e796a50d626562e446964b6772814ad070aac99c977b8fa3ea5", - "vendor/amphp/websocket/src/Parser/Rfc6455Parser.php": "bb96f8c93cac412b2d66c2bdefc38cddbf364455f01be3b8c8a9efb0d88ba327", - "vendor/amphp/websocket/src/Parser/Rfc6455ParserFactory.php": "a96d7047a1f68e212836ae3af5892fd2c16c764012a0859eb19c188b296d28dc", - "vendor/amphp/websocket/src/Parser/WebsocketFrameCompiler.php": "44886f159c3a8633580eaa430f4c971064b04cec7d8143143be24ace0b06da65", - "vendor/amphp/websocket/src/Parser/WebsocketFrameCompilerFactory.php": "60cb612d62709efcca5cdb3288d3de6cc56b6685a8584a79144f4273d35d958e", - "vendor/amphp/websocket/src/Parser/WebsocketFrameHandler.php": "63099d2b3ae2b11233b535884fd198291c2e3e39a4a1d185919b7b4203599e46", - "vendor/amphp/websocket/src/Parser/WebsocketFrameType.php": "cebffdcd37c74ce7c0e02def339cd5a578e7ad713eef1c538a1761dea2c6c7a4", - "vendor/amphp/websocket/src/Parser/WebsocketParser.php": "e5410e27c12564e02cf1bf70f41634effbc9f2fb56aac52cef119ff1ea44a7b8", - "vendor/amphp/websocket/src/Parser/WebsocketParserException.php": "d0920f8057d27953073b1fe31c3cb03d14c38a6b036bd1d4d0bbf4040fd37fba", - "vendor/amphp/websocket/src/Parser/WebsocketParserFactory.php": "17e2adbf7c5b3c7ea682f73739a3f5de33d2573f89d939227bf5234798c9ea29", - "vendor/amphp/websocket/src/PeriodicHeartbeatQueue.php": "5d6353f22b3a0a48da46fa59c10a4fd9389de91f25cc71ba6cc98ecd5edb30ed", - "vendor/amphp/websocket/src/Rfc6455Client.php": "a75a0188ed6b91af272fc0be011f67a7d348d5cdfd27c0be47f153f000fa3779", - "vendor/amphp/websocket/src/WebsocketClient.php": "8d9ce079610c9d6c12145fcff71e3eb34be2e4eec0dc79b6275b901f8560d8da", - "vendor/amphp/websocket/src/WebsocketCloseCode.php": "282aafaf23d85384483081f4be4a316ac6f76629a95335559f84e66d55073a6e", - "vendor/amphp/websocket/src/WebsocketCloseInfo.php": "228d9831817cdcc9e877d2f6e32ab97962185ac1edfcfbe0b098dbb39562464a", - "vendor/amphp/websocket/src/WebsocketClosedException.php": "1a0f6087e490a4ca6892890798eb13568fd3bb2133340adfcfddd098c0591b3b", - "vendor/amphp/websocket/src/WebsocketCount.php": "b2522f3a59e8fe849f3b030655ee75b91716a71de30a81f9b2c90e40b560781a", - "vendor/amphp/websocket/src/WebsocketException.php": "0d29573ba5c7ae6ebcebdc09ad85241ada095bc39123c5d23888856d5aac6716", - "vendor/amphp/websocket/src/WebsocketHeartbeatQueue.php": "f743a22066f12029fc1d26691b418701dd07c6712966a69bd7748244a1bfa125", - "vendor/amphp/websocket/src/WebsocketMessage.php": "0f425ab4b786a7febcf343c437842ea386e143a543e070a2b623ddcc0c53b8c9", - "vendor/amphp/websocket/src/WebsocketRateLimit.php": "e2d18d3a6c0bf235920ac586cb34f079d446436f2d51c266aada110dba33fe2a", - "vendor/amphp/websocket/src/WebsocketTimestamp.php": "bed51c8e21058ee81b1028e60f20799963d9f255433b6973f2f809963e958af3", - "vendor/amphp/websocket/src/functions.php": "9383f805a44b1bdfc81761c09b31b89989163668a2ec441b023c8c448d3a49db", - "vendor/bacon/bacon-qr-code/LICENSE": "973af1db913b076a85e09732c75df802a6b8a61a63701c38f2ce6d471c213260", - "vendor/bacon/bacon-qr-code/README.md": "7ce81554c3d49e416960376ddc223d1198f66961aa8323972f3528024f357682", - "vendor/bacon/bacon-qr-code/composer.json": "9717ae6d82f298b024fb15fc5e7088245b8f94712cec088ee50922c7b9ca7462", - "vendor/bacon/bacon-qr-code/src/Common/BitArray.php": "b9a71976ddad1bd685220362baaadfd4c082619eddc09e9b5235dad908a3eaf9", - "vendor/bacon/bacon-qr-code/src/Common/BitMatrix.php": "aa3b36d931d6da6ed452b657f8d598b8cc1e4796c685ad1c1d2b989f0d0db6ec", - "vendor/bacon/bacon-qr-code/src/Common/BitUtils.php": "a461d2b3eb45e14b54cba362fb7fbb910bc624d4ae332340a6a5a9644267a354", - "vendor/bacon/bacon-qr-code/src/Common/CharacterSetEci.php": "fd9465a40872699c7fc8ac4dd0ebb40a5a9bd1b7b7618794755cf485b06d9ce4", - "vendor/bacon/bacon-qr-code/src/Common/EcBlock.php": "4aad2525cbf8329d9d5029b0d5c57c4edeba44e50b0c5a7d5b7705ae1cad7a4d", - "vendor/bacon/bacon-qr-code/src/Common/EcBlocks.php": "b6c802eb6360b6f97dcd2c5d90036a673678ae9751d28fe6246a7c29a1902bac", - "vendor/bacon/bacon-qr-code/src/Common/ErrorCorrectionLevel.php": "b2d5665585f00612801f02726a8e62575b3c4bd8a6058ef08e71cce123cdddb2", - "vendor/bacon/bacon-qr-code/src/Common/FormatInformation.php": "8104bbcee9af16bc3e786b40c8f9d70f24efbeeee7090e9fa55ea3c73a4c8a1f", - "vendor/bacon/bacon-qr-code/src/Common/Mode.php": "92f161ed7dacf352f7dda6ed3cc3d43a30cd92879e727b8b0753978904a83a9a", - "vendor/bacon/bacon-qr-code/src/Common/ReedSolomonCodec.php": "779785ad583b98b81700b48b95730143a0e6773b14177b826f9eb625e8e67837", - "vendor/bacon/bacon-qr-code/src/Common/Version.php": "a3c97701f474a454c7186f45b9bd3dc1a161efc73ab340aa42b9e8fd94ea0d51", - "vendor/bacon/bacon-qr-code/src/Encoder/BlockPair.php": "c2c03a4e2cf405de61555712c2d6ff039d4b8929783ab2b6dff0a522e81bb333", - "vendor/bacon/bacon-qr-code/src/Encoder/ByteMatrix.php": "3565cb4e23da44e769a888d67ca3d5f92abbf6866be5c0d2d1af82e9fd47dcf4", - "vendor/bacon/bacon-qr-code/src/Encoder/Encoder.php": "89bb2beba25474ebe196fc0b2d81b8dadeaea4ce008c678a48d8e6e668f74d58", - "vendor/bacon/bacon-qr-code/src/Encoder/MaskUtil.php": "23bb47d8120aee32dffbd4854a1d63309baf64ad74c5112759f3c9a9ca9b8851", - "vendor/bacon/bacon-qr-code/src/Encoder/MatrixUtil.php": "c5764dd1f44a57b918646e0039a2a82cedb80959ff23bc536e866e56356cf5da", - "vendor/bacon/bacon-qr-code/src/Encoder/QrCode.php": "347fe94c75b0cccc86a38c371cc939072ad30bcc2b8f02872b357670ad75283f", - "vendor/bacon/bacon-qr-code/src/Exception/ExceptionInterface.php": "c834a85c399d71e0a24f3f917f6bbc587d79aed093523ab61d7dab88d14c1fbd", - "vendor/bacon/bacon-qr-code/src/Exception/InvalidArgumentException.php": "ff8d83eee797fecd35bc1735cf1c4484ca3aaaf3504e929834f2f7d9749b55e6", - "vendor/bacon/bacon-qr-code/src/Exception/OutOfBoundsException.php": "c0eeb51ad8b504ce7cac32554ce234d9757335e41fd913d65eca391088de3b91", - "vendor/bacon/bacon-qr-code/src/Exception/RuntimeException.php": "8eeb51e804157983990fdfe1e131a17876c56bb3474f8e72b97afae40bcfcb01", - "vendor/bacon/bacon-qr-code/src/Exception/UnexpectedValueException.php": "e8e1c50b55259a6f2080480d045084949b1b8a3638f584a4d83d4a5161bfa15b", - "vendor/bacon/bacon-qr-code/src/Exception/WriterException.php": "76f2109c2cbaa518c40f04c4379247391aa277048e7a715a6cd2d982ddeea32a", - "vendor/bacon/bacon-qr-code/src/Renderer/Color/Alpha.php": "33bd0ebfaa060b4991f5582f4b006a607719a9339dab61f492fb6b120a1786a9", - "vendor/bacon/bacon-qr-code/src/Renderer/Color/Cmyk.php": "6a60d03366eaefb3ee68b6d19a0e31a12d8c89ef3352e5d8f8f25190993f9376", - "vendor/bacon/bacon-qr-code/src/Renderer/Color/ColorInterface.php": "6e61824b404db2cd01bf6e0f9e89b9871ec7253d40576ae7159ea637aaaba04d", - "vendor/bacon/bacon-qr-code/src/Renderer/Color/Gray.php": "cf8af193141742cb9fde98361269a9b3c06a0280a88af331bad24cc20279df9b", - "vendor/bacon/bacon-qr-code/src/Renderer/Color/Rgb.php": "7f35a334184109c9c173904df68b20efa7988f2578675dbc78a1bc026ec1dc7f", - "vendor/bacon/bacon-qr-code/src/Renderer/Eye/CompositeEye.php": "5c88e9a6d2db31a0cb91182cbcb22f824e4be60139ef834bcf5d58191d01935c", - "vendor/bacon/bacon-qr-code/src/Renderer/Eye/EyeInterface.php": "acb3b17678c4f99b9de6c1ce8632431bd773554a4c6ade86c29a52bddf783fa2", - "vendor/bacon/bacon-qr-code/src/Renderer/Eye/ModuleEye.php": "44436985af9b5fb3c6f6b57eef60383f22bea2233ad6baac21ea826bbf64ec15", - "vendor/bacon/bacon-qr-code/src/Renderer/Eye/PointyEye.php": "3e8a735e0fa473a1a5ac386c9d5866e244c1bcfeeb10f812345173590959c3c4", - "vendor/bacon/bacon-qr-code/src/Renderer/Eye/SimpleCircleEye.php": "5eaca1de9a0c3a6642768490a134dd9870702107b01d8a623c8c9cf9cc4aaaca", - "vendor/bacon/bacon-qr-code/src/Renderer/Eye/SquareEye.php": "b4a9d7f48ada373bff0137717dd34524bc82907c6c56ee9501d2709c1e3c4450", - "vendor/bacon/bacon-qr-code/src/Renderer/GDLibRenderer.php": "98969481235e2df682491c3c3413c31376453aa01f5fc0acf89f41932dd8a6b5", - "vendor/bacon/bacon-qr-code/src/Renderer/Image/EpsImageBackEnd.php": "40ce9982f506daddd6bce63fd16b07a8ca0b4a8d2f2b5e9c60bf07f97fda3fbe", - "vendor/bacon/bacon-qr-code/src/Renderer/Image/ImageBackEndInterface.php": "c9b026d3498ae283fd3f6c255f350835f2c017a6bacd0211b2142893dfd210fa", - "vendor/bacon/bacon-qr-code/src/Renderer/Image/ImagickImageBackEnd.php": "6fccfe219064bafe1e91da34c0344bca30bfb93526e45914e6478359a0b3f43a", - "vendor/bacon/bacon-qr-code/src/Renderer/Image/SvgImageBackEnd.php": "defe57ed85c6a8bc6227ab49fcca098428f0420955b1f52efb8de58c75209cd0", - "vendor/bacon/bacon-qr-code/src/Renderer/Image/TransformationMatrix.php": "521e20fcaa6c8ce9550705e894205754c2ec76ee0c3329c3df4ca27779019524", - "vendor/bacon/bacon-qr-code/src/Renderer/ImageRenderer.php": "d5badf3f1688171b9d89eb896016a18d5d16e8a073153cf4cfeab56cad9d0766", - "vendor/bacon/bacon-qr-code/src/Renderer/Module/DotsModule.php": "f9b85b0f3f5391c12bc4f93a65e864bec222b3bbb687632a1c2e66d9989a1a69", - "vendor/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/Edge.php": "f546451adb0671d2c781957c4fe9c47e150fa7d8f0d8d80d0559633cd830c29a", - "vendor/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/EdgeIterator.php": "b04654ecc48e0eb2c0da1a4e57e7098129906cef74cd715a98e59ca8e08840a0", - "vendor/bacon/bacon-qr-code/src/Renderer/Module/ModuleInterface.php": "c643acaf6b2e5ce50194cacf61cff18a3b5d37513ed06e4816074ef989053eb3", - "vendor/bacon/bacon-qr-code/src/Renderer/Module/RoundnessModule.php": "84ef74b3e06c025bc144010ab2208d8986de74c683752138b9a6fe151fad50a6", - "vendor/bacon/bacon-qr-code/src/Renderer/Module/SquareModule.php": "f52f335872d741c1adf19c0b1c826a37342dd7739c06ee1a277a6fec883d39a8", - "vendor/bacon/bacon-qr-code/src/Renderer/Path/Close.php": "71cc07b11a3567f28e288d49ff75237b8cf72e854b842cd847154802e15075f9", - "vendor/bacon/bacon-qr-code/src/Renderer/Path/Curve.php": "7bae782b56b9fb3493484861d10dfa895d4dd89ab40f06872d7c23a89b2d99ef", - "vendor/bacon/bacon-qr-code/src/Renderer/Path/EllipticArc.php": "15ced4eaef0219617821f47ea880cf2f08fb51afca9eed7106effa478d4568e7", - "vendor/bacon/bacon-qr-code/src/Renderer/Path/Line.php": "db77e473da6827822d4f914d34218210ca031c50238911d606d58ae426a29910", - "vendor/bacon/bacon-qr-code/src/Renderer/Path/Move.php": "e424dcde680170c40f622b011ba2c6b17585c11007e9ea25f41ba6c2ed51af44", - "vendor/bacon/bacon-qr-code/src/Renderer/Path/OperationInterface.php": "0b41de0dadc8d189b3419f357503947f37f6a6951963272fba714dddca204c42", - "vendor/bacon/bacon-qr-code/src/Renderer/Path/Path.php": "785d89f9cce10def715e7743fdf8342339538d0b155cdf19dd7739da91361b41", - "vendor/bacon/bacon-qr-code/src/Renderer/PlainTextRenderer.php": "89b62d1ad13592f664bec50085cefa4a9980e8caf3c6641545cbab3f69c32944", - "vendor/bacon/bacon-qr-code/src/Renderer/RendererInterface.php": "4452c80c1c07d8c0a04e24f9144439d994ea939c8060fb05b723cf590c4406b0", - "vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/EyeFill.php": "ad2cf08557f5525d6ecb34de99ecc55ec8d89ebeb2a5387c20af157ba8e07552", - "vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/Fill.php": "46d12cf210f4f9921a0542b96895b44e17398e8f3f8e239fbafa6a0ad177ffb1", - "vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/Gradient.php": "2fa4d25ed8cc2be381744858dec1db04c076da72003451577c7cd9cf4df5a43b", - "vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/GradientType.php": "144a098f4f5e2a30b667b337788ad0b1c66bdcb44f5f973d736089bb6e9588d0", - "vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/RendererStyle.php": "76884084da186d5f318f67f7eaf902bd594c2b2f6afaa752c78f46010a480369", - "vendor/bacon/bacon-qr-code/src/Writer.php": "b3f968284dafcb6b010287028eacca7f4e39a7c0d2e7852309596fa9121fbeb0", - "vendor/danog/async-orm/.gitattributes": "36480fff15b5a6cd4ebf6538b1dda9cecef8bc65ec65782fcc2ea78c032b0038", - "vendor/danog/async-orm/.github/FUNDING.yml": "d32aff5b00bb9eae134a36c19ba9680f222d4aa62d4af8b1e349769fe98e85dd", - "vendor/danog/async-orm/.github/workflows/main.yml": "028942fd2573b1f032fb9b343c2133d3ab6f7f940d25c4b85117dcbbe1cbaacf", - "vendor/danog/async-orm/.gitignore": "1920173c7c1839363833a34e3ba921b51b2f73933e7cc98b85ae710599201130", - "vendor/danog/async-orm/.php-cs-fixer.dist.php": "9b6af1b5d3d4d5f1c1bc495bd5fd0d5fe6a9bb2c3fdfc546c3c074a4bc82b717", - "vendor/danog/async-orm/LICENSE": "8c6db340475136df3c1201d458fa5755698eace76e510471ecc9d857d6083dac", - "vendor/danog/async-orm/NOTICE": "3dfd6d3468a650d538cdfc3f94d42200a3517c72864c9224a78a6e86900d6fc6", - "vendor/danog/async-orm/README.md": "31e9c0779d84de5b6fb38cd4b0744655faa1392f72833b9a0f44b93853413ac0", - "vendor/danog/async-orm/composer.json": "4738ca2c0a25d4c02c51bd38617e823d52a03dfc7801d1c675eea2f0b9f5c9ed", - "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Annotations/OrmMappedArray.md": "85f306d72732c8696045ffba1763e1fa46b4d179fcb4b3374821aa83cefc73c8", - "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/DbArray.md": "3206e68d18686144e6f8e3c9d8247fd8e9bc742ea2c8d7815aa41b6df4434fe8", - "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/DbArrayBuilder.md": "fe43a31501c8f8dcf8f1ea3d9ceae1ec6121fc8280585b546e3f416a679312de", - "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/DbAutoProperties.md": "970a4c54e892a0eef933e0f86ddd456d48c64a93da450d804a16e89a3b7a5711", - "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/DbObject.md": "469a9900c4070460ad6ec05a7cd3948aa63e014ea2ab0eb0e73124444656f6db", - "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Driver/DriverArray.md": "9282a1383ea89d2c82bba4df2b6287f518f5a02955981dfa64d9b63e7d64a15c", - "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Driver/MemoryArray.md": "29938c6d18ddb0f721323be513b5bdba2e30ecde964f6b922e6b92fa26703faa", - "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Driver/SqlArray.md": "daf48a68701ca552473aa37bfa7122319be03a9c13fbad3fdaa7832b87fd72a8", - "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/KeyType.md": "b07fb86e977d1497a06e99156bbd90ad18985ded45b507bf881fb484594159a3", - "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Serializer.md": "8ec4dc3500bb6ac42ce6e0e38882d95c4e6b967ce410dd6ee9beab1eff0e5d09", - "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Serializer/Igbinary.md": "8ec77b2685f68649457e8f6366aa317d28d92279c82d998b937ab41812948555", - "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Serializer/Json.md": "48c27c6fdaf87e328f1620f50dfccd0dda51c0401402402b0f9539a5d72fc635", - "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Serializer/Native.md": "32567292dbe6415ab48a029ed81d069a9b69cbca7cd38ec930b45928cf35e5bf", - "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Settings.md": "fb4e6ada7510b6e394b51b25f2f48e2c3899bd62843ee8ee54e197f47c83bbcb", - "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Settings/DriverSettings.md": "cd01e8499f689d5e041742c37ee47da0a2d16915b6b6b98a415db4a50ecd9af2", - "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Settings/MemorySettings.md": "0ddb9234bb2eb08cba8c15c21c47c6435bf06a1b9eef3ad4bda96d208e72e407", - "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Settings/MysqlSettings.md": "8ae78a9fe732aa083258c3234722532e6c5feef850841b8964e7722468c5d79d", - "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Settings/PostgresSettings.md": "158d5fed5eb643f8ba73558ff6b1562099425e34c9ce7a05c2f901dfa926ae88", - "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Settings/RedisSettings.md": "b67b3f02f62410c48e49dd6140d92facd292ba6a60da4558e8db11c251b8eb7f", - "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/Settings/SqlSettings.md": "ef979909026d63875c482b2a6d0810ef64f9a5c4e8d9f0841911915ff7e0d4ce", - "vendor/danog/async-orm/docs/docs/danog/AsyncOrm/ValueType.md": "f6de7c432ff5aa449f13628db4834d3a7c1bc9eb9d13edb26bdc1413423779bf", - "vendor/danog/async-orm/docs/docs/index.md": "164b8c57ebf7a814db515a15a31b4abbad18506c042a27c8022f45ada06cb0f8", - "vendor/danog/async-orm/docs/index.md": "dbcc210d7f4962499db6d4cfa18658e26d05ee700c962a811cac911f095e22fd", - "vendor/danog/async-orm/examples/1-automatic.php": "ca260596e6e13015dff1ff85c759579c8490d455d5a7cd2c37b67bf614d4dc45", - "vendor/danog/async-orm/examples/2-manual.php": "102ed5c5623f7edb7a5d503e38507f94650a82f6bacabf1504193626aff49da9", - "vendor/danog/async-orm/infection.json5": "1f325b4ae72ceb42a53b94e19ecb4c5504e9cd1e52afc29e7141010c79f705f8", - "vendor/danog/async-orm/phpunit.xml": "463c51e87c2ceb095955ef7cefd61d1bc4f4bda98e50ec4dc114ac69edd406c8", - "vendor/danog/async-orm/psalm-baseline.xml": "78e83bbe5a4a263a78cd120fc82d3d390bb20594b912e2a12416c7bf3c6c6d21", - "vendor/danog/async-orm/psalm.xml": "3ee85cafe74c637a426f63d8e468658d2f4a12231686459205bd4976ea0e347a", - "vendor/danog/async-orm/src/Annotations/OrmMappedArray.php": "14ac7b0f9fd1adf0677817b84dfa4750f3668dc55908bb4376e9804328b1d107", - "vendor/danog/async-orm/src/DbArray.php": "316127081f5bafe1b6be1659d8cd7b4827e893aaefb599023e7daf5fab8a678f", - "vendor/danog/async-orm/src/DbArrayBuilder.php": "5b6c007c55379cba0d1618ec79d0fa8dac45e009557080d827914f1bc064b46b", - "vendor/danog/async-orm/src/DbAutoProperties.php": "8669140fab335a4fafa308bc6dd288c4f24e61489990b8d1b99dc716733ec90d", - "vendor/danog/async-orm/src/DbObject.php": "ef7980695a461ee88eddff3b6f6ef3ece908ee185f2fcd15b9b6f4e7525dcaeb", - "vendor/danog/async-orm/src/Driver/DriverArray.php": "a1cd0f23d1a51065faa64913fcba25b8310a2c06d18e543e8c13c390469c0b48", - "vendor/danog/async-orm/src/Driver/MemoryArray.php": "c357ba9a3eaa96b3a173fb2ead0a84b88b06465c9427824d6cff5d46b8316b88", - "vendor/danog/async-orm/src/Driver/SqlArray.php": "41c34876a16063f26c20485d5ba4c290d3789d1549f40d16ca06709c663557e2", - "vendor/danog/async-orm/src/Internal/Containers/CacheContainer.php": "fa631df5918d32a55b6289ec76e63b0acc4da56b478125b7834cc5dce57cae85", - "vendor/danog/async-orm/src/Internal/Containers/ObjectContainer.php": "a3216ce9bd8d2313be8c85c74e7a598fc16af079273c4db5c38f90de5694cd8e", - "vendor/danog/async-orm/src/Internal/Containers/ObjectReference.php": "5726e63e7f8981538bb73a8d06afc6fd86e7016ac400ba005509d47838d58a84", - "vendor/danog/async-orm/src/Internal/Driver/CachedArray.php": "55ff9e532a11fc4b98632eb54786e1bb1c75b68c76f86d8b877dbb5ed8fdd1fb", - "vendor/danog/async-orm/src/Internal/Driver/MysqlArray.php": "5b79fdaa23feedf62f42c453523830e89cf3780a600e7d5cf852bb7ab2a41d79", - "vendor/danog/async-orm/src/Internal/Driver/ObjectArray.php": "1e8c3a8d9d2a3b8849194b0fd5b69170e38a32f21576be8052b72c48f2c02a0b", - "vendor/danog/async-orm/src/Internal/Driver/PostgresArray.php": "97bbbc6cf1c2a72cd6ff58a64367ac783d4a2faa2be256c67319a426697be0ca", - "vendor/danog/async-orm/src/Internal/Driver/RedisArray.php": "1a68e32dfee490be4ad82655d341a977358431dc16c495f4346626c3582de12c", - "vendor/danog/async-orm/src/Internal/Serializer/BoolInt.php": "4251a6dac0b5adb32ee8ee941c01827bade100e92522c5d528677e8c333c3e7c", - "vendor/danog/async-orm/src/Internal/Serializer/BoolString.php": "c325880e05cef7bd22d01e2686cda4ddb00a4f14f3304898b275eabfd6dc5c7b", - "vendor/danog/async-orm/src/Internal/Serializer/ByteaSerializer.php": "695d985e2ef35252bc0e231e79e2ec9d0cabe3366124edc541d2ffaf63b0b2fe", - "vendor/danog/async-orm/src/Internal/Serializer/FloatString.php": "2f0d35099bb60e400c068ab0ffbbf8002df238b744467ee6fb4f7f560981d156", - "vendor/danog/async-orm/src/Internal/Serializer/IntString.php": "ece4aef51d17034359ca018fe77eb4653c75662fff5719f4afd3bd0e87c06143", - "vendor/danog/async-orm/src/Internal/Serializer/Passthrough.php": "c0da0646e9a86161b26c4ad8671a5b1d1bce343aa7b52de02a3f6a1df8b9ed5d", - "vendor/danog/async-orm/src/KeyType.php": "41d6890fc09635ee58e3a5b25a201d6338691742b0b0c2d45143f1b632337fa7", - "vendor/danog/async-orm/src/Serializer.php": "4acd42ca101b3940854e5de98c9fd20c27f7a99a3ecff2faa99f2002f5a5ffb2", - "vendor/danog/async-orm/src/Serializer/Igbinary.php": "5d884fd67e43fb25746465eef5b025641a2602dd8c909db54692864bb84b2e73", - "vendor/danog/async-orm/src/Serializer/Json.php": "1ab5754cc1f5029255674de535a86299fdbe885343761d48404029bf900cae07", - "vendor/danog/async-orm/src/Serializer/Native.php": "c864389307969ad51ee6e20c7c17726d2b46e2b68fe0a7873f663b1c772655cd", - "vendor/danog/async-orm/src/Settings.php": "e3cfd8242d03025b8211ab7f92f4bb94e638e0528c326896f5d8f35d4770beaa", - "vendor/danog/async-orm/src/Settings/DriverSettings.php": "b219d78c1d520eeae71de907668056756806d2decc0b7e18bedf7361b2505ce8", - "vendor/danog/async-orm/src/Settings/MemorySettings.php": "7f9026ee03f437bd4ccb9607e468a5d53598fcc7c281f64e2dc949f7b5864d4a", - "vendor/danog/async-orm/src/Settings/MysqlSettings.php": "f2478804fd4e6db35b74449c17a30a0f9cb777fbd66df570d5048aed6e80287b", - "vendor/danog/async-orm/src/Settings/PostgresSettings.php": "c4b8869c932124b03bcea92e1d95b6c892b52ed3ea659e5aa93cea39af426cd0", - "vendor/danog/async-orm/src/Settings/RedisSettings.php": "ee19eb08d3f343437fe3131615a63e7b116f0b51242f2888ac129bc17f487594", - "vendor/danog/async-orm/src/Settings/SqlSettings.php": "b0021e7de99cfb879f4f43fd827f08d868ec1eefb15a5ce8e7bc390dbdb12098", - "vendor/danog/async-orm/src/ValueType.php": "19b0d07851b64a9d2ea0eb4bb6376a4ebef76d3c0a906998ac4cc258de4a07c2", - "vendor/danog/better-prometheus/.github/FUNDING.yml": "d32aff5b00bb9eae134a36c19ba9680f222d4aa62d4af8b1e349769fe98e85dd", - "vendor/danog/better-prometheus/.github/workflows/jekyll-gh-pages.yml": "8028ba1bdddd05938c52b2ebd46a4c35e45aa595b5d4886731f053532c4cc0a9", - "vendor/danog/better-prometheus/.github/workflows/main.yml": "9d6e3dde9d5556c69c30aae948b9afb238787ccb8c14b0c311d911575807b10c", - "vendor/danog/better-prometheus/.gitignore": "7aaf4fcebed10e30dba385418de0e8d039fd425d784b96605b1c21f2a17aeb7e", - "vendor/danog/better-prometheus/.php-cs-fixer.dist.php": "24070f9bb5fcbf44e553dfdbe33d960f33e3016cc61e1ef8bc723843b141235e", - "vendor/danog/better-prometheus/LICENSE": "8c6db340475136df3c1201d458fa5755698eace76e510471ecc9d857d6083dac", - "vendor/danog/better-prometheus/NOTICE": "7ee673a8f098e3569a5af6f61f722bc735d340d92414a72a2dd4e35e38619eac", - "vendor/danog/better-prometheus/README.md": "c384729fbf4cbc0af29e8e1f12482d601574ea137394cb7a34bcf14d3c59605d", - "vendor/danog/better-prometheus/composer.json": "c1364655242e8957bd11c1f0ed08b3992150626f44ef2d42df647531f7f45a2e", - "vendor/danog/better-prometheus/docs/danog/BetterPrometheus/BetterCollector.md": "9a4e92aa5c17aeb27274347eb619f6c4bee5676bfb1412d7b680df50b32b8902", - "vendor/danog/better-prometheus/docs/danog/BetterPrometheus/BetterCollectorRegistry.md": "47ce1382ca3a173cca6e8f529ac978b17cc6d941d00bde96a0e8c0039506ce5e", - "vendor/danog/better-prometheus/docs/danog/BetterPrometheus/BetterCounter.md": "81ba08894b786ad48f81a9523d6eeb1ab0d8e5c772bae9b7d720c8308ce1b0a3", - "vendor/danog/better-prometheus/docs/danog/BetterPrometheus/BetterGauge.md": "8853df18d0fb31fe37d15833e8e46b3ceef6e1ef65f6c76b6ad8cfdfa63f7f9a", - "vendor/danog/better-prometheus/docs/danog/BetterPrometheus/BetterHistogram.md": "8c3d2001ee70b46f61406cda08444f780cb35837adff14bc23b54f35da066fab", - "vendor/danog/better-prometheus/docs/danog/BetterPrometheus/BetterSummary.md": "5adc577fd6be64a31cb208ef237df72587d7a5b3273f50509433206e4b159f07", - "vendor/danog/better-prometheus/docs/index.md": "3fce57f406112a3a4fd8952aea101306cb6e8b666dda18f9adf2d22dfc337bfd", - "vendor/danog/better-prometheus/examples/1-all.php": "1b66ea79dde41e1b9b56fb31a84660a543eaa003ed9201c4bbc8993df71bbbb3", - "vendor/danog/better-prometheus/lib/BetterCollector.php": "d7c08e0408d880f4b3e80f8ee728abbe436549253a51a2a61c84d0014ca6223b", - "vendor/danog/better-prometheus/lib/BetterCollectorRegistry.php": "83a35c6d769b56e310687bb184187edd95b4b47317b98a7c74bc3b0647e292da", - "vendor/danog/better-prometheus/lib/BetterCounter.php": "4060806a88a7aac67fdf14005b3f90c668d4d59ade0d32c8244564d3b4460a42", - "vendor/danog/better-prometheus/lib/BetterGauge.php": "d6b2649771b9c581e21d08657c60c6cf7b5f746a71e0e1d61bcdb336a07f5b67", - "vendor/danog/better-prometheus/lib/BetterHistogram.php": "d870cf92d8ecfaf8b3db62610ce3364e0f97046891e836ccbd9e34758b22b0e1", - "vendor/danog/better-prometheus/lib/BetterSummary.php": "64c667d9089dbb7526d4aa24d91382094510e67014b2d2460e200e36e1531cdb", - "vendor/danog/better-prometheus/psalm.xml": "5ebaa2b01fd79a7997839bdc13530effa4b760110e50a6f8d24d41d174d59314", - "vendor/danog/dns-over-https/.github/workflows/ci.yml": "91e40d9c09ec8200cde1bf237b22c7baf385d92c1ba41a4248da3b0452822385", - "vendor/danog/dns-over-https/.gitmodules": "7b14e4f1520d38491060b47535c5446448ca8324a323debb2349a102e75664c9", - "vendor/danog/dns-over-https/.php-cs-fixer.dist.php": "7dcd2b6be8dbfa9b371804e983e87ec9b7db7a17d0973e61a63d5a29dee36dd0", - "vendor/danog/dns-over-https/CONTRIBUTING.md": "979aef790f3cd7c4a193f858996e079eaac50e4e496b092b05b0339bb2bedbfd", - "vendor/danog/dns-over-https/LICENSE": "eff216d768cf4549198f24abbdb80f55fec10afb5876920291993d8d59c3aa47", - "vendor/danog/dns-over-https/Makefile": "98497c8a5babea50f6bb304a75b2cf2ad7d421b3a96dc385bb10e8500c7b72f3", - "vendor/danog/dns-over-https/README.md": "d433f048948ce8ea413efe1f3128a36dba730475580351a052f21b0fd59ad8f7", - "vendor/danog/dns-over-https/composer.json": "0d0c2d82977b42892636de71d048c4cd30b4efecfeb76a95fd436646fbef5231", - "vendor/danog/dns-over-https/docs/.gitignore": "5c29af322ccb837ab59ea245806b205294e4d61a2076b69c7fa5428e64b856d0", - "vendor/danog/dns-over-https/docs/Gemfile": "5ac3c69df09d777ef1650ea9ce7d56c714cb0a87b6dbccff2979d982345ea7c3", - "vendor/danog/dns-over-https/docs/_config.yml": "06d54826f9e65a5ba0edb1ab88d28fe11da838f591f21497d732b15078bdd40b", - "vendor/danog/dns-over-https/docs/index.md": "b2116ad1af827a26d9d479fc1c3a4d84b51cdb2168735973d2f3bda4005bdf84", - "vendor/danog/dns-over-https/lib/DoHConfig.php": "ede6d59a39ed70174086f528ba95db72f82e00382759f807d2222e7f27a29ee3", - "vendor/danog/dns-over-https/lib/DoHException.php": "9a0375347318b67758551f8bd2adab31dbe906d11650c9681a9961c942363149", - "vendor/danog/dns-over-https/lib/DoHNameserver.php": "479e819cbd925c1daec965dea8879cb7410660e56fdd3326ef11c4a10debdb6a", - "vendor/danog/dns-over-https/lib/DoHNameserverType.php": "31f0069d005c7ad5d5e9d52be2c92e8b8edcd39476f5c42d7f0b446a0dfcadd6", - "vendor/danog/dns-over-https/lib/Rfc8484StubDoHResolver.php": "be7cbb28e6f7f5d7d3f52954501da5790f85e37b81c48c47a78c8961096fb354", - "vendor/danog/dns-over-https/phpunit.xml.dist": "6cb69d48760426a3023e385aa5b87bd8f6bd4e3071c37bee8341a2e4deb28f24", - "vendor/danog/dns-over-https/psalm-baseline.xml": "5334fde90357cb8a419ad2bdccff589aa0730332eca9a9b4eea09854a511df79", - "vendor/danog/dns-over-https/psalm.xml": "1d941b70a8e9cd8335c31ce073fb83868b3f6c4044d58c64c75942914b0b5024", - "vendor/danog/ipc/.github/dependabot.yml": "380150216e6a0509993d20e2769fa4ca6800ab6c65536add10efcc88624b41ad", - "vendor/danog/ipc/.github/workflows/ci.yml": "3c02d5302f0dee3f3519022d224562b5a26fee330989e67b5395abc0387b32c4", - "vendor/danog/ipc/.gitignore": "d592d2ec4051a3912f9db5c93049475759837d419032c1b3a545727502743a5a", - "vendor/danog/ipc/.php-cs-fixer.dist.php": "7dcd2b6be8dbfa9b371804e983e87ec9b7db7a17d0973e61a63d5a29dee36dd0", - "vendor/danog/ipc/CONTRIBUTING.md": "eed3a7ac5df070d50d9d665fb7cff7680b9f1be4ef2aaa6c9bffabe52d7ccd66", - "vendor/danog/ipc/LICENSE": "21aa06129a162cf89ab5bad3bd16cb7366ccd1fd6858a294be3092f336c1a227", - "vendor/danog/ipc/README.md": "c861dcf0fdb0d8d60fda3f1011eb4ed55832733fef7eb494fb38646ce1f276b2", - "vendor/danog/ipc/composer.json": "eb648b84581cff620abfea80023297e3e427f50522d6ad41228e1f85884d1e6b", - "vendor/danog/ipc/examples/client.php": "c150fe2a1702240f059d1a8076fe42e00cb8cd61d4f42468bca70d91473ca4fc", - "vendor/danog/ipc/examples/server.php": "9348084c9e953b6dc4baea33aa32c931aa4a7b25285ed28a2f73138315bbca39", - "vendor/danog/ipc/lib/IpcServer.php": "417b1cb962bac27d105a64e417a31c1fa15850337166edd5185ed1b6f3b8cb93", - "vendor/danog/ipc/lib/IpcServerException.php": "d53adf935b4bc70a07800dec34a0a091e26d838dfe00d8b0d7399548c8890b40", - "vendor/danog/ipc/lib/PendingAcceptError.php": "e70c15b3114de37785164da67bf3331d8e00c87c386a5664755cdc787c972073", - "vendor/danog/ipc/lib/Sync/Channel.php": "0e62f12fb430702d0d7ba1c9ea951afe10f28b79c1f0067013dc0c4c59027bf9", - "vendor/danog/ipc/lib/Sync/ChannelCloseReq.php": "f9520aee209091c3471a974ba1a8db37cb5c6abf5fbdcbe96da033781a55ad35", - "vendor/danog/ipc/lib/Sync/ChannelException.php": "9281667c36fe89869dcd3d19093cd0d071f409f8a089e3aeedf27bb38c27cc52", - "vendor/danog/ipc/lib/Sync/ChannelInitAck.php": "51b4a7f7e6bb06570652f0e640756ed6b91c583c285c5087dfbf93adf7bc6d83", - "vendor/danog/ipc/lib/Sync/ChannelParser.php": "4025825d5599a96b1fc5ab67d559c62915621981366c54fb31ca7917ed456435", - "vendor/danog/ipc/lib/Sync/ChannelledSocket.php": "377badcf40f453664c885893f80bfbc2aee75ef974fa5f5072ff34c6567aafe4", - "vendor/danog/ipc/lib/Sync/PanicError.php": "e96e071026a81d12f7e5ddca66156af385455fe383718acd45fd8d251a174dd1", - "vendor/danog/ipc/lib/Sync/SerializationException.php": "18a8899fbf5fd54b3c00c8ef9954a0f1cbababb962b7c2db67f8cd9f9ddc1216", - "vendor/danog/ipc/lib/Sync/SynchronizationError.php": "f40f7f8054f108b721932887f62f6ede068c3cf07ab1da4e9a65870b49cdacb4", - "vendor/danog/ipc/lib/functions.php": "fae5820071f2a003ac6287feb7f9014e2da469fed8548c264d292b5932c0d6e9", - "vendor/danog/ipc/phpunit.xml.dist": "640f97fd6308b0cfa26bdea3b305e314d9916948ad6bbb3e69c52a6a81174349", - "vendor/danog/ipc/psalm.xml": "4961799da3607fb7698317e10f950b39856e16c02ae479ffd5b28d31bf236f81", - "vendor/danog/ipc/test/Fixtures/echoServer.php": "08df91ec3191e6a65ee55cbdd0354337b01588cc623455aad2bf463799b5e177", - "vendor/danog/ipc/test/Fixtures/server.php": "520282f145971165b56565c225d52689a4e0f626ea041122da73765db6660268", - "vendor/danog/ipc/test/IpcTest.php": "c37735cc3fa25cd51f26850e51599a94dae751ec27ea6e5814dfe3db2a55708f", - "vendor/danog/libdns-json/.gitignore": "f0bfde2d9320509f1764870e061de56c1f0bd7a45281d82ae17832a0a8957951", - "vendor/danog/libdns-json/.php-cs-fixer.dist.php": "ed3405fa9e2eec9738384e65de13a8652fe39be09f7af2e8b317fc365b6b9213", - "vendor/danog/libdns-json/.travis.yml": "21280015a3000b9ab387386a9630e9b10ce6775ecc27514c0e008527101b5e86", - "vendor/danog/libdns-json/LICENSE": "eff216d768cf4549198f24abbdb80f55fec10afb5876920291993d8d59c3aa47", - "vendor/danog/libdns-json/README.md": "ebf7397249cd162821ce770ff28377be20349c478416c7ba16d2f4ec193046c6", - "vendor/danog/libdns-json/composer.json": "d06afda1f7b7dc8c3209ebd46fab935986f75f70414208311c66b6cc6580411f", - "vendor/danog/libdns-json/examples/.gitkeep": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "vendor/danog/libdns-json/lib/JsonDecoder.php": "54d75600f8b7ae4fec1c1863c0de73e79d53980aa1c895bd6156da633698fd99", - "vendor/danog/libdns-json/lib/JsonDecoderFactory.php": "8b4f3625d613ce8758ef474064a0c7a9bb6ff81c046e762f1d823c70ce2b2731", - "vendor/danog/libdns-json/lib/QueryEncoder.php": "e53efa0e5334eb209e80474056d9c4d105db14fcedf39967e5a8c080c54539fd", - "vendor/danog/libdns-json/lib/QueryEncoderFactory.php": "3ba84da1229e2e278581ee5faaebf2e77fd28c8c19220a9b2ed690c4b046468d", - "vendor/danog/libdns-json/phpunit.xml.dist": "6cb69d48760426a3023e385aa5b87bd8f6bd4e3071c37bee8341a2e4deb28f24", - "vendor/danog/libdns-json/psalm.xml": "4961799da3607fb7698317e10f950b39856e16c02ae479ffd5b28d31bf236f81", - "vendor/danog/libdns-json/test/JsonDecoderFactoryTest.php": "cd942ba54ecc4943a7968b0fd39572fa3ffee3f45a4d5845661c3bf15e3eb9ab", - "vendor/danog/libdns-json/test/JsonDecoderTest.php": "89a9350401dc605d49e1cb8e64d73a294b12cd509ea233ac0109fc84360227bc", - "vendor/danog/libdns-json/test/QueryEncoderFactoryTest.php": "6e6971edfc5d6f3a32bb3400d7b4a40066f2cd3d6ef342dfa3cadd80ef48973f", - "vendor/danog/libdns-json/test/QueryEncoderTest.php": "fd8538accecc7381d1670eeeb4a3588e26a14ce5e7f273509564aa37a6e85a9c", - "vendor/danog/loop/.github/FUNDING.yml": "d32aff5b00bb9eae134a36c19ba9680f222d4aa62d4af8b1e349769fe98e85dd", - "vendor/danog/loop/.github/workflows/main.yml": "454c61f954a3b3f3910bcbcc52878249efcfa9f25c1a0aeff0d6251df9d75691", - "vendor/danog/loop/.gitignore": "7aaf4fcebed10e30dba385418de0e8d039fd425d784b96605b1c21f2a17aeb7e", - "vendor/danog/loop/.php-cs-fixer.dist.php": "579e3f266e1b2e456343d181cb5c54e40bb6e77dad88bfb2efcd0b7dfc0f5a48", - "vendor/danog/loop/LICENSE": "30f46fa760c0c1f5d98504008487928f496c61043c304a3fe1624e15b3a7fb77", - "vendor/danog/loop/README.md": "47059cbba7664d2d091d470015c86bc448bb2c329ab6c736e6d6af10eca9dce4", - "vendor/danog/loop/composer.json": "1e55c4a5bcf86a146f6850e162869e166082e8f8639a07e4404ef699147cedee", - "vendor/danog/loop/examples/GenericLoop.php": "fa2572c2885e8efa059639d8286d2449df792809d4e23f7cf01fc2b5e3efd13e", - "vendor/danog/loop/examples/Loop.php": "69ded3ca8ddba3ad9c5fe6981330cbb76fa05c547e585db90b54d36b9315f0c2", - "vendor/danog/loop/examples/PeriodicLoop.php": "adfbfcff8a53f030959afbb762a8934ee775f468cc709686180bcf54899cac16", - "vendor/danog/loop/infection.json5": "819676233f92c8095236063d0af7b625dd95caa027e2805ae544b3bd3af58985", - "vendor/danog/loop/lib/GenericLoop.php": "a1452b0ec5c89a04448a60acb7d39a5b8e3aafcf659fedce88d053e7a064b359", - "vendor/danog/loop/lib/Loop.php": "397ebbb77587b95a36d64e73b3cfba3a614259e978f3638ace86e1aed1f0ba3e", - "vendor/danog/loop/lib/PeriodicLoop.php": "aa96e010d9075138e8c8dbc27cc9629f7a93a446fc483888a53fbc8863b34f43", - "vendor/danog/loop/phpunit.xml.dist": "a441a63283bda2e7379129be3ea96ce93d5f91880b190b2ad9d0ba2a74b48aa8", - "vendor/danog/loop/psalm-baseline.xml": "c4a5384a824b29519780c9e8408a2b699fb5906c72ea5f60a9f2454de86586ad", - "vendor/danog/loop/psalm.xml": "ba02d0f19ab58876346aa553b34fc02636e13ba4f962ec1272ada5675d8e0db5", - "vendor/danog/loop/test/Fixtures.php": "cae6a189844181c5d433467ecef2d3bf166ddbc97466da23d37fdbc525b9fe2a", - "vendor/danog/loop/test/GenericTest.php": "d52281a3b81fc45f5c858e983a2652b01646402e7f1b02d741dd251f866276b1", - "vendor/danog/loop/test/Interfaces/BasicInterface.php": "4e97dd218da2fb9b8391dbb2b4251725894cfaacfb25f96d274c7654dcee366d", - "vendor/danog/loop/test/Interfaces/IntervalInterface.php": "84dfd4c37982cb97af9e2a3783cd98109b4d2bc6ac5c42834f7d17e09884ed77", - "vendor/danog/loop/test/Interfaces/LoggingInterface.php": "e830216823258d98651d42238ed96bbc5e3e26c4f9aa46cc7c79abf915c3012c", - "vendor/danog/loop/test/Interfaces/LoggingPauseInterface.php": "7e9435182e06b198fe7b9e6c7fe95974c31128cdb7070b3478728e7567faab1a", - "vendor/danog/loop/test/LoopTest.php": "b3dc028124755095a853bfef89547dd4031a3db5894de7184ec1ff84690239c3", - "vendor/danog/loop/test/PeriodicTest.php": "7678d3c30e81ae27f137a77ebaaf99d8e48f45436380f9d3ca928c7161dba105", - "vendor/danog/loop/test/Traits/Basic.php": "a142d1944f8f2c9e318bd18b1a846202ae271139945cc1b4fe9a152a17ff321a", - "vendor/danog/loop/test/Traits/BasicException.php": "755a1e1dc7a4f9cc7e00022cba4225974c11d2b8b9fc3b51821b93fa12def6f2", - "vendor/danog/loop/test/Traits/Logging.php": "217d614489ca869e57d13164fd28f97530373236755f724cd081706c9962f2c9", - "vendor/danog/loop/test/Traits/LoggingPause.php": "b4c61ca0bf08f42e466361560b1bf9050299342649a6007cc036da4cf77c185e", - "vendor/danog/madelineproto/.env.example": "1faa2a097db34870da700695fd27c91aafc253ef614204423c87dd2a9e7b3852", - "vendor/danog/madelineproto/.gitattributes": "3bb98dfe72b07470c126ea3bf718cd1971c91d06f06c142c1a3f61576e8dc527", - "vendor/danog/madelineproto/.github/FUNDING.yml": "d32aff5b00bb9eae134a36c19ba9680f222d4aa62d4af8b1e349769fe98e85dd", - "vendor/danog/madelineproto/.github/dependabot.yml": "35b5680e83f80194487d51ad721de08391ce8199bbdf8e453824f901a944d837", - "vendor/danog/madelineproto/.github/workflows/build-docker.yml": "9405fcb8d8df3e05c4b11f86f94254a090a00c1b42cb2aca98834ee6db2c23b4", - "vendor/danog/madelineproto/.gitignore": "8347e9181a68a2bd6cfdacb6d5d5566ea7b90263a3d3a9b242262d8dd2c7a89b", - "vendor/danog/madelineproto/.gitmodules": "0be1b15bd151a137d0eda35e859e2a44dab559f77f74f6f50b628cec212044cb", - "vendor/danog/madelineproto/.php-cs-fixer.dist.php": "e6f8a73f396da6de3ea5893d180620067666e118767d468f05756886f493809c", - "vendor/danog/madelineproto/.woodpecker/.build.yml": "eb913148d05384b111ee26730e9e1c37cfe7f0e333e8e5d892a49350afbf0d33", - "vendor/danog/madelineproto/.woodpecker/.cs.yml": "aa115de698758c205b898596a9d0cc8d3cf158653314d4bed3c571270f57a117", - "vendor/danog/madelineproto/.woodpecker/.test.yml": "de1c35389071868173af77951a4286e813e1bfcb77170e81bc65ae466c38dcfa", - "vendor/danog/madelineproto/CONTRIBUTING.md": "4b4213767922e7b3f8e7e12d4a771494309d3bce9867cbbb81a64bb737d59851", - "vendor/danog/madelineproto/LICENSE": "57c8ff33c9c0cfc3ef00e650a1cc910d7ee479a8bc509f6c9209a7c2a11399d6", - "vendor/danog/madelineproto/SECURITY.md": "0c6710a81610c0fbca17d32d52373950dbf24f83a1d5e84020486f69cbaec694", - "vendor/danog/madelineproto/composer.json": "18de335fb004ecfea1334bdf98d53dc2dc5045d6202723d19cfb3004b7293073", - "vendor/danog/madelineproto/examples/PluginBase.php": "b164638114bbb205fd87104f09aa11447e293d75b2fb493a9dd9e50150003cff", - "vendor/danog/madelineproto/examples/bot.php": "9616e412c389e07ad2a6624dfb50df71634d05f5250f3d7e9de1eb6bb39b5dad", - "vendor/danog/madelineproto/examples/combinedBot.php": "bd3b3152e0df0482d233deee69a6cc58cbc4acb75f562d6c4344cd74d312f668", - "vendor/danog/madelineproto/examples/libtgvoipbot.php": "60017993a9db0011fc67abbb42a205465dc3a3bf8b7bc5258a4f043463f65a11", - "vendor/danog/madelineproto/examples/plugins/Danogentili/OnlinePlugin.php": "9b0fa9b521334ab18f5890cf102189fc63a1a1266ed1f92c11ea2393937a3218", - "vendor/danog/madelineproto/examples/plugins/Danogentili/PingPlugin.php": "275e86e24331d00d361ef4a8948d91870aeba7d0696a63c086f8f4c921e17a61", - "vendor/danog/madelineproto/examples/secret_bot.php": "fcd1a91de925b231eb6816e75c820e5f1b91ceb1c1cd24172d00a17312ab5c98", - "vendor/danog/madelineproto/examples/simpleBot.php": "4d34e4e020e86469e71712b55aec639afe6bf231d97b4bf7ffbfcd3307b34b63", - "vendor/danog/madelineproto/examples/tgstories_dl_bot.php": "d0731578d9ecbf22b219a87ed6a4e36baf12bcc1a8c1d21d157d231e10b2f9f5", - "vendor/danog/madelineproto/phpcs.xml": "e3e8b89077a156aeab302dd2f56efc25602f2e8177c18adb485cd6bab97fd285", - "vendor/danog/madelineproto/phpunit-light.xml": "d5ac89bfa9da06f48231b7639eb91487e6bedaebc159763a8b35df17323ef63d", - "vendor/danog/madelineproto/phpunit.xml": "adca612f09807422cee08d73a0c9d3e21d3ace9f6c91b3eb75da336cb8a8584b", - "vendor/danog/madelineproto/psalm.xml": "c39941e28f120979462a033eb5306a019d1807c6b390981453cc94c54a7cdbe4", - "vendor/danog/madelineproto/src/API.php": "edc2bbd89dbb5c514345d3c7a7aae0779572ece2fefbd43bf4e9465b660d496b", - "vendor/danog/madelineproto/src/APIWrapper.php": "b5520c14bcb705c28e3e19ee1deda3707495c3f6c2d1a5fab132669f61e90d89", - "vendor/danog/madelineproto/src/AbstractAPI.php": "2ab51b33778ddfb5e72acaa548bd21077a6509d3c0b0b50bb56dfe11d6717c99", - "vendor/danog/madelineproto/src/ApiWrappers/Start.php": "a093991c5e66efe5e0f5d68ea6f1f8c85dbd9750a04f20b2acce645de2ef124d", - "vendor/danog/madelineproto/src/AsyncTools.php": "948a3d5b480afa0268bbe2f19100c2a44972442df4c86bb1b4e729e5219533fc", - "vendor/danog/madelineproto/src/BotApiFileId.php": "e3e19ce51052bf066609ef98891a33644d60475e09a865606d5a625e7a6bdca3", - "vendor/danog/madelineproto/src/Broadcast/Action.php": "61d7f9464290b43bd34e3a5bfb25a44187fdee6e74e73824335e44693644bc34", - "vendor/danog/madelineproto/src/Broadcast/Action/ActionForward.php": "2294c6633a3b748e77c96c6cb0c7cfefd947f46e5baa9c8703701974f52f5f0a", - "vendor/danog/madelineproto/src/Broadcast/Action/ActionSend.php": "e46b3db1337eec80c623d8cfddb726d2833b42facc1f201d3f054328f64f13af", - "vendor/danog/madelineproto/src/Broadcast/Broadcast.php": "e6ac6111643dc908a311a50a708036d96c581133447754848e74b169b9412ef1", - "vendor/danog/madelineproto/src/Broadcast/BroadcastCancelledException.php": "6a40a374fc83a554a58c7d04f90039d288fa91dc430bf17755f80f407bf32af5", - "vendor/danog/madelineproto/src/Broadcast/Filter.php": "a2a31eeaba56dd96aa167803005b47aeaa74c003357e691b8890ac56f6595dca", - "vendor/danog/madelineproto/src/Broadcast/InternalState.php": "a48bf1cc86352fb71eb5d419c279dfc7593b15c68c94a19830d2dc6925746699", - "vendor/danog/madelineproto/src/Broadcast/Progress.php": "f3fede2915b617d2561c20ecec71c6af781cfe78431d34883826f193379e1627", - "vendor/danog/madelineproto/src/Broadcast/Status.php": "55920995551c7dbedff78bce8df7f02302991c9e4aa803d7f7c91a6dd1cdbd6b", - "vendor/danog/madelineproto/src/Broadcast/StatusInternal.php": "d4dca162da0a7cf50952c70d609b417f17026199f1378625cc6187a49ebb9df2", - "vendor/danog/madelineproto/src/Connection.php": "bc63a62941275a5236308b78f8a313e7d124d028f9f0c70589f17f457ba926a5", - "vendor/danog/madelineproto/src/ContextConnector.php": "56c77c5965c80a7e49ad4c6e04de16e292cde52c81646ba12567f1db94c25fb1", - "vendor/danog/madelineproto/src/Conversion.php": "63ad902c3b212f8556cb54ddc3cc4be4a382717688f58f8dfdac9d2960d4733e", - "vendor/danog/madelineproto/src/DataCenter.php": "d349ac30c2f46e8f21b881eebf40db8f83b06c4f089c12730f60332059dbe602", - "vendor/danog/madelineproto/src/DataCenterConnection.php": "69b07dcb90934085dcb91a116a41b526427b71c758bb3a58f14837f04650f3de", - "vendor/danog/madelineproto/src/Db/CachedArray.php": "6fd61c3f5d0f66a8384c2141384077372a41a5b62d523d38b693e41315c70490", - "vendor/danog/madelineproto/src/Db/MemoryArray.php": "419a742b83f6312411184138b95bd0b085d944f1b956626662edea7108d9c31a", - "vendor/danog/madelineproto/src/DoHConnector.php": "3e5609af5511ddd74bc04e386f6ba923d48d3d89920da3a41285f3668d205462", - "vendor/danog/madelineproto/src/DoHWrapper.php": "9089fa53a8449d0257fc60233dcf95333517275e346814858e8722fc47f16bf5", - "vendor/danog/madelineproto/src/EventHandler.php": "6fce62b2f1d29da258f0786a988b035e5242a121b3decaf251b488820163d2a2", - "vendor/danog/madelineproto/src/EventHandler/AbstractMessage.php": "e5b1a098ee2c1d3ddcee5188b687462d1e1c52f63aaf0245a6d573b511e1f98a", - "vendor/danog/madelineproto/src/EventHandler/AbstractPoll.php": "24513c563351e26868306a0555289c4fa3b46df14ed8e80de0d5375262c4a30a", - "vendor/danog/madelineproto/src/EventHandler/AbstractPrivateMessage.php": "fffdf42d2f4bbe74edb834a8f1f03deda0791deb738566001c9dd22afc4545a3", - "vendor/danog/madelineproto/src/EventHandler/AbstractStory.php": "e2ebcc6d32c83f93ba7c15fc8416c46e21d2bface74104c332767eb2a5a584fd", - "vendor/danog/madelineproto/src/EventHandler/Action.php": "f3ee57b3a400075a3060dc063547d0c88df6ac64b127e73f28927cd672586f76", - "vendor/danog/madelineproto/src/EventHandler/Action/Cancel.php": "9ec7ac3ae6cd90a513426fb7bbfedd296a0cce6dfd2df75409345e3c3d7ba0f0", - "vendor/danog/madelineproto/src/EventHandler/Action/ChooseContact.php": "808091cce619742cfda4ed688cb018a3ff9611805e321fa896bff4208ee115c5", - "vendor/danog/madelineproto/src/EventHandler/Action/ChooseSticker.php": "afaaed7ba9e50cc2794ed9029f3876af7512a6b17b930682142388f33b5376b8", - "vendor/danog/madelineproto/src/EventHandler/Action/EmojiSeen.php": "8457f8bb2a8b0f49ac86d0e056573d98d24d294ab78c40b71236913aca6b358a", - "vendor/danog/madelineproto/src/EventHandler/Action/EmojiTap.php": "ccfca8e249694011ab7d489bec2d60f8c88362d51a14115d34143a34d3ae88eb", - "vendor/danog/madelineproto/src/EventHandler/Action/GamePlay.php": "6ca989939c22fcf9c8b051eb151c72c7831c62fcbb14882c36fb883a7624efa9", - "vendor/danog/madelineproto/src/EventHandler/Action/GeoLocation.php": "fe598b8edcb81f5758101b3971463d2ab4d10e5eeb98e3c7ea1bbc8af6b1c1eb", - "vendor/danog/madelineproto/src/EventHandler/Action/GroupCallSpeaking.php": "d24cedd73d8e5c46bb3ea6f2c9545b99bdba11a3ffeb904cf3e9a3178c5bf40d", - "vendor/danog/madelineproto/src/EventHandler/Action/HistoryImport.php": "fee3d4bb5a36849847404cb4feca29e12d8f65557217fde69da4a683d95a0c64", - "vendor/danog/madelineproto/src/EventHandler/Action/RecordAudio.php": "e57a5781190d682f4fa33dab8a112fc579b170bb9bf5e4268977aa556bbdc119", - "vendor/danog/madelineproto/src/EventHandler/Action/RecordRound.php": "37cfecbef5f50f9dbdb3c3e059c81e31849398588be05e753ec79c31dba80664", - "vendor/danog/madelineproto/src/EventHandler/Action/RecordVideo.php": "ce929a7122d470256a46688a4e128787b9539d56d9ba8b4fc0ac99d5289ded72", - "vendor/danog/madelineproto/src/EventHandler/Action/Typing.php": "65bdf4708c08a30f8ef7b961d51730e7e75ae4762b1794bcc68ecd29e99ccdb0", - "vendor/danog/madelineproto/src/EventHandler/Action/UploadAudio.php": "5e422a1cd029298c4e5456bf4c4f1c87a49740e306db624c45a1c72c8c637a21", - "vendor/danog/madelineproto/src/EventHandler/Action/UploadDocument.php": "f4d902a6aad87c4fed526fdeac46eda7eb7c43125e30ec8efa78b7614b764acb", - "vendor/danog/madelineproto/src/EventHandler/Action/UploadPhoto.php": "df86c3fd226cba984dae192d561c6c519fc7fa8ee2eedc64b59737aee477a866", - "vendor/danog/madelineproto/src/EventHandler/Action/UploadRound.php": "52ea2f19b5edd2310cdd2e589d48c19ca95a816eb200d43bdcb59ffe4ceb5a56", - "vendor/danog/madelineproto/src/EventHandler/Action/UploadVideo.php": "ab4fea1813ff4d1d2c3e2eee60bd12fc6e9ae7c5b1684283026a52cb3b0279e4", - "vendor/danog/madelineproto/src/EventHandler/Attributes/Cron.php": "8a77dad295208705c7c3997fb1973a2639f11fc45f3aa0bc0794b1eb8cb584e9", - "vendor/danog/madelineproto/src/EventHandler/Attributes/Handler.php": "337e3b172edbc198e7ac01a7b0d5ce33286d8a1d4c12eb968ff0d26ee44e261e", - "vendor/danog/madelineproto/src/EventHandler/BotApp.php": "c5d62f54dbf69993a06ec97f6e3d7cfe79768363cb179e30c804dcce3f5a4e48", - "vendor/danog/madelineproto/src/EventHandler/BotCommands.php": "08844e59367e3f572dd34cadbf0fca95b94941d9c97420d7d8aea29ba567e198", - "vendor/danog/madelineproto/src/EventHandler/CallbackQuery.php": "f2dfc34bd8358f2c139a27ed315a9ef06cf8cdaa91e016448dc339e1ec973eff", - "vendor/danog/madelineproto/src/EventHandler/Channel/ChannelParticipant.php": "1f021e48f89451976383a86004f8455de578edbfc8190e9dcfc1adab00ed5d31", - "vendor/danog/madelineproto/src/EventHandler/Channel/MessageForwards.php": "ece71e4a0ad255ef86b837b10d4a9054e58e9f8ede4cf3cdfa7e71203327c34a", - "vendor/danog/madelineproto/src/EventHandler/Channel/MessageViewsChanged.php": "a759accb35432eb7b5db76de8ac73fd9fdace2b7ce5d1d7f1ebc7420c0b9c2fd", - "vendor/danog/madelineproto/src/EventHandler/Channel/UpdateChannel.php": "20bac6c6badd00c56ec3f6108a94e4dab262c799d35c9e9d1013c92b000e0a8b", - "vendor/danog/madelineproto/src/EventHandler/ChatInvite.php": "ce6a4853525a4603ce283cb53528d41bfbefd5ca054246e8b636e6549018ea90", - "vendor/danog/madelineproto/src/EventHandler/ChatInvite/ChatInviteExported.php": "22a1566c73e9d8152f4397cc402f450c41de77751bb73722a22911e9b6e9a829", - "vendor/danog/madelineproto/src/EventHandler/ChatInvite/ChatInvitePublicJoin.php": "fc1d33fc182e5d4c23b2d54b867a3eecd22bbc7c35a3ea4c8621215977906bb3", - "vendor/danog/madelineproto/src/EventHandler/ChatInviteRequester.php": "cdb327286abca16d7b580a9f2b8995aebc968a13071efcfdde95a3dcf9331a5f", - "vendor/danog/madelineproto/src/EventHandler/ChatInviteRequester/BotChatInviteRequest.php": "5ffa87496c3f62b7d798f694bcb06f96a01487b7ae9a3748d55633673b068e16", - "vendor/danog/madelineproto/src/EventHandler/ChatInviteRequester/PendingJoinRequests.php": "913a0d3b7f6df0092bcb63e3603e9326a4d0cb02a1c9fe6fbb6dccb42085922c", - "vendor/danog/madelineproto/src/EventHandler/Command.php": "6f46d8c4a02e79169c57024b1f7337e234e88c30c5ef451f778202ba141b784c", - "vendor/danog/madelineproto/src/EventHandler/CommandType.php": "99d688b8834c1346ceca3de25d4d6b0edb210562efaffcacc15f61165a2fc45c", - "vendor/danog/madelineproto/src/EventHandler/Delete.php": "a11804a6c8a465013172968e3a029438a69138814e3e8b4a24c9b0d00f4cb68f", - "vendor/danog/madelineproto/src/EventHandler/Delete/DeleteChannelMessages.php": "937905b2a2f5d87ffe333223b6cc22eba98faefdffb7c2a178a3085dbb0ecd88", - "vendor/danog/madelineproto/src/EventHandler/Delete/DeleteMessages.php": "6c559ab99bc5009fbfcb1b8d21b6681f009f02969ead170a146394307f25101d", - "vendor/danog/madelineproto/src/EventHandler/Delete/DeleteScheduledMessages.php": "54ab9111401a0bee5d71cbb88ae7fa6e8cffa5c2e4a69b08a030203d868aeb39", - "vendor/danog/madelineproto/src/EventHandler/Filter/AbstractFilterFromSender.php": "e1a419702d9cec9970ca162f20b2898e993f60f8ba1007e88f40aec7870904ab", - "vendor/danog/madelineproto/src/EventHandler/Filter/AbstractFilterFromSenders.php": "dd8eec7e3819ad0ad6790aca38c2677c7808d75749495364baf482985a542a1e", - "vendor/danog/madelineproto/src/EventHandler/Filter/Combinator/FilterNot.php": "06bf6dd9ee01611a8a14e32cfb7cace5bf1e93e55823e27573ff5bc767aa3444", - "vendor/danog/madelineproto/src/EventHandler/Filter/Combinator/FiltersAnd.php": "ff6cfd23806637e91566d9993119b1937ae04100a9da67ba8264417d5bb218d5", - "vendor/danog/madelineproto/src/EventHandler/Filter/Combinator/FiltersOr.php": "4eecc428e55f213ee97acaf9c501aa0af69c8cc1ccf6c68f2d58376484fcfd72", - "vendor/danog/madelineproto/src/EventHandler/Filter/Filter.php": "9d6f83064104aa5b4e4f6bc46be08dd0a09d35f376150a87f2c14b7496a0396c", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterAllowAll.php": "82a60c5b930110400d6f0c065dc563fd119f36aa50acc10765eee8ab7e0749f6", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterBotCommand.php": "4f512cc09aa88d1a094ca772eb6d8f22eb0db223587296f56f358f201bd74eeb", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterButtonQueryData.php": "6e31efd4b4146f61a6b62596eebfae38c9b7e3e40f99c5af16ee8db07ca0db08", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterChannel.php": "7220d2132f569767f9a63edda73197cec482989888ceab7e75319f668e335197", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterCommand.php": "1ce3089af9e506dea68497884964631a84529ca6a7432f6015cbfbcbaa9d3b49", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterCommandCaseInsensitive.php": "b4d5272b007a5186e7f5be0699547df0fd800bff21e24f048affbe09bb9770bc", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterCommentReply.php": "ece9a5b6e5af15396c9576a3db42b4e120b1eace029bcd83e0c382c24a225e27", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterEdited.php": "be544553ca77b2aff47eac909a22221fa3d247bcfc13f377dc6c9cc21b747b5e", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterEnded.php": "33101ac08d4e37c7362b58eaad7b4e3cf797a87526b431cc78411986b5469992", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterForwarded.php": "ab2d2b563ad9c7f10322f96287b3efaecc456e1136fb78f203ac4eb3a9df7a30", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterForwardedFrom.php": "1d40cbe6ba8e2195b88dd7f536780cc0162136d7bd9ce5d6635f4da99f470a99", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterFromAdmin.php": "35d724024b506aef6e2217adc9d343ce460944ef59a5cff98edbd1851c953c89", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterFromBot.php": "f44906022b8fed9a291df9fdcbce7a2115e800269bc0f1db3eb0f94f17d6e71f", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterFromSender.php": "e9cbb315ae3f7116dcafc3ebb1aec1d8a1eb45b7595253c4fe93f824e4c6f28c", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterFromSenders.php": "65b4e0ed59e47704fa5019050c554af57ee31236ddc360077e321ae1ca0f46b2", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterGroup.php": "9790a77d5ea3a28a486d4521a637add733d8ce23a3f106f02e455c42ded81296", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterIncoming.php": "773ed7ce644115ead5f3a636b8caa05fe520bbf4c7d358400994c1980e183acb", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterMedia.php": "f144a7924d648183dcdf7b9f1ecb7289b812ef96a6cb410dc2abceed177fc819", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterMessage.php": "0af7721c4bac711b9df01ec219d31ded81de6839fd14ef1d2660374e0351a170", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterNoMedia.php": "416f70e74f3fe6fffb7545aab26520c8fe9df3e0b728d2b23e788cb6b778f6ba", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterNotEdited.php": "b48c3dbf70d10f10f06a7d814bb58f6ae6b0a8b57a7df2bfc594d9764f82a576", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterOutgoing.php": "a8aaa37001905dc49827aeeb71a072a4d04ba10368d7bbc3cf623a609b210b89", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterPeer.php": "4509a9b114fe93aeaa98ba5d9d4d44534030fcf7e2e482125282369c23db6ae2", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterPoll.php": "15da719c162a9231644def6c0bab659d350bc023182469cc8aeabcf4bbdeb053", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterPrivate.php": "7b67bb888f3a3233c9111c2a83d2842ee12d13a24828d0d3a9a4bb4c46dd3cd8", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterRegex.php": "5b0321a1f41f2586aa12960f0aee376336f0bc205ab02031127d5530023924a6", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterRegexMatchAll.php": "1302a13aec411a6de071a4769d1330d76c61a468ba85c093bec18e7a34dc98b0", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterReply.php": "8add2c4ad8d1ea61dfcabbd081e9a45c47711fdecbf5c4ac1bf5360b306dfa52", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterReplyToSelf.php": "9b3b6058cc26b703181063feffffe246538c10b7850e5859c533f9273616b702", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterRunning.php": "5524053c262489887562418d4eb2cd0e00c76cd431e0a5363e820ddd845f8ec7", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterSecret.php": "2faea566ad1803567acc08ac198577f19a51118a780a4ad768f4189ebe4987ca", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterSender.php": "53c3054df7aa708707b686a2cac7a5ffcf4c5827e2f388e1df05f9049a6d5900", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterSenders.php": "74a41ab0d199b4be7ce230debe58af35c8203f66c278a3d855f8ae45b92b94cd", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterService.php": "a19f1c3dad0433e7eb7e508ac2e9e516f15fdb6ea9ffab977d660d345be5334c", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterText.php": "067b6c7d00434e500928dde84061de2c7eb65191432fe785a4681fae73314e0e", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterTextCaseInsensitive.php": "1f15856e48dba38a21220a5503ee4b8683305fb7c1d1d108011daae272a65f4b", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterTextContains.php": "0a3f67117097a951894ce568d6fa5d616f6cc51488b866f5702754d78c104396", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterTextContainsCaseInsensitive.php": "351703466b333ad905b1b7e6ad61a50c244de8791eb9df19f0c025c0ad01b1ea", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterTextEnds.php": "d960ca5fd042557d6366862e97237962f006e8e97655f5a04395abc0e4f0abed", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterTextEndsCaseInsensitive.php": "da42675287056ed626c4e2d7a68b47d35e461f0519b8767f18b320c8a5a82945", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterTextStarts.php": "e559817a313d3bcb7b7343700e4f4dc341f7be8f7b51c92de2759abd24d3b2b6", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterTextStartsCaseInsensitive.php": "a778ccb27b87829c29669d7f0696a86dae9df3b1329d6c348a581f1801256990", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterTopic.php": "2a80dd2bb608018665400e627d593c7cdfd347ab939e1ea8ab41b0bd2babd09c", - "vendor/danog/madelineproto/src/EventHandler/Filter/FilterTopicId.php": "09b1e2096fbbee7fd65d11ad8aff43ab1a5a4895959eb55435ec8a9613d9c52e", - "vendor/danog/madelineproto/src/EventHandler/Filter/Media/FilterAudio.php": "acd2d1e66bf90acb033760c3370d1d7308a4528d9951a171dba3b5b0d9300353", - "vendor/danog/madelineproto/src/EventHandler/Filter/Media/FilterDocument.php": "79fa91420da5c32b13e0ff1db5effaae1cdd82c5aad8a0da9681e432fd4651c2", - "vendor/danog/madelineproto/src/EventHandler/Filter/Media/FilterDocumentPhoto.php": "594a844769d4537ed9987443d8ae1f709f63cc9079428bb8b00404eca166f855", - "vendor/danog/madelineproto/src/EventHandler/Filter/Media/FilterGif.php": "4e5323e77ccfa0d5ed7ee28fc53bc3876552f2b7ed8e0ad8b593fcd68a89f1fa", - "vendor/danog/madelineproto/src/EventHandler/Filter/Media/FilterPhoto.php": "ec28ab020d24e900240c5b74f82aeb94dcc1f4c4194da689699a532fe990805b", - "vendor/danog/madelineproto/src/EventHandler/Filter/Media/FilterRoundVideo.php": "2686282e80b583c931d736e388ba2838b3cd22ed5091d7207e4bb3a7b5fefe82", - "vendor/danog/madelineproto/src/EventHandler/Filter/Media/FilterSticker.php": "a0913c19c9f37d86b091ad113b45ab5db9281f305b34e1646805bfa8b6958987", - "vendor/danog/madelineproto/src/EventHandler/Filter/Media/FilterVideo.php": "e7cd3ed8b9ef7d446e599051f207398fba9d8967f608570a106d5fd323e4d115", - "vendor/danog/madelineproto/src/EventHandler/Filter/Media/FilterVoice.php": "6c6b4905482ba30644aeb5a042b56ada62275097b14af6f555ba381eaf2bb3e1", - "vendor/danog/madelineproto/src/EventHandler/Filter/Poll/FilterMultiplePoll.php": "899282c090f10e673b1f7c323fc4a310d302a129f91470fd43e6f64c92559c9f", - "vendor/danog/madelineproto/src/EventHandler/Filter/Poll/FilterQuizPoll.php": "649662ea9f1b9b0721b17a7e8aff4543b0c7c2bf85befc8734cc414979a54338", - "vendor/danog/madelineproto/src/EventHandler/Filter/Poll/FilterSinglePoll.php": "bc5bce30780e3a4b160a65bb4482578d94d50e43ecabef1488631ce254b1676d", - "vendor/danog/madelineproto/src/EventHandler/ForwardedInfo.php": "ba39c0cea58b65b65f94b720301974711c0182923937246b583c921cd09b7baf", - "vendor/danog/madelineproto/src/EventHandler/InlineQuery.php": "c983c951f2e6d3b3c0e02609279eec8f83ad07301ca624043ef3e53a81a2331c", - "vendor/danog/madelineproto/src/EventHandler/InlineQueryPeerType.php": "fa56d38851c7281621e189fde66cf6bac71f4568a462838ff888b94682651fdb", - "vendor/danog/madelineproto/src/EventHandler/Keyboard.php": "18e9a86f253c6397b1e455f9d679c3b0f8477164455c292299cb1af21ff4c89f", - "vendor/danog/madelineproto/src/EventHandler/Keyboard/InlineKeyboard.php": "413ddf481facae27c8a89cf9bfbb0eed22cccddc1a3111f3dd8203fe236842d9", - "vendor/danog/madelineproto/src/EventHandler/Keyboard/ReplyKeyboard.php": "15adecd69c87772bc5cf32cc64226930bfa8d243639cc95245635b8c2f9129fa", - "vendor/danog/madelineproto/src/EventHandler/Media.php": "572c8b3ddf6364c171a9a3df3792234bb352919f9560b40c67d087fa7c67104e", - "vendor/danog/madelineproto/src/EventHandler/Media/AbstractAudio.php": "c0c45e83810f92f9d868af81b4e06a759dd938c21382c4538eefdf6d627c9794", - "vendor/danog/madelineproto/src/EventHandler/Media/AbstractSticker.php": "b603cfa8287764506e2e9342b82829131087cbbb0e3bebd5b5cd831df382879f", - "vendor/danog/madelineproto/src/EventHandler/Media/AbstractVideo.php": "8e615c13e0e0337b543d2177c92034c7f909423754fde25319a6ae9de9509f48", - "vendor/danog/madelineproto/src/EventHandler/Media/AnimatedSticker.php": "8de8133ae615548375db2f499a2b6ea2023f2438d5f1072f0d818dc87a306134", - "vendor/danog/madelineproto/src/EventHandler/Media/Audio.php": "36c49c35b8ebdb37a276123728faa1bcfc8254d0cca9a0866fdc9b7e8e39e5c9", - "vendor/danog/madelineproto/src/EventHandler/Media/CustomEmoji.php": "f59137897770703554e944395cea96a189755f0ab68975a3a939f9f7399bb97c", - "vendor/danog/madelineproto/src/EventHandler/Media/Document.php": "b05128a1260ac59675b2bf43ce59f3fb9cffd3d4cac707baa58e1200347e1420", - "vendor/danog/madelineproto/src/EventHandler/Media/DocumentPhoto.php": "d487506d892b2f4dd2e79e60625510c058b706a5df434277a42e12e942b46b46", - "vendor/danog/madelineproto/src/EventHandler/Media/GeoPoint.php": "5633cc441e541e5e919dfa8156192587a68e578e49a496acac91172be5f2549d", - "vendor/danog/madelineproto/src/EventHandler/Media/Gif.php": "a9bfead03942681c0938897925357625d9e84b7601ed3509e08f5d17d5f934ae", - "vendor/danog/madelineproto/src/EventHandler/Media/MaskPosition.php": "1e0d27747ce30d8451c771f595b263de55fe2e03a9afaebcbb6e17cbea2b2dc5", - "vendor/danog/madelineproto/src/EventHandler/Media/MaskSticker.php": "d272228f60586e0242c1f1e88cd7f92c405ec88721a6d3ba5c7dfc532a028edc", - "vendor/danog/madelineproto/src/EventHandler/Media/MediaStory.php": "61cd2a01ea8c893ce107917482fedb7cad4d17526fd8bcb3e20b5985c0e8aa64", - "vendor/danog/madelineproto/src/EventHandler/Media/Photo.php": "b4a16b3d4f42ef872ccbe53fbb2f3b58f45c9657b2abad714803ef35b9410dc6", - "vendor/danog/madelineproto/src/EventHandler/Media/RoundVideo.php": "bd0bb9eee6542d539b15a0fadb82dd638db8f29a8c5f1255302267d6aa88b652", - "vendor/danog/madelineproto/src/EventHandler/Media/StaticSticker.php": "920dbc4307b7b8a64e2ff7bdcb80c1afd6458360828520bfa11703e94b70a53a", - "vendor/danog/madelineproto/src/EventHandler/Media/Sticker.php": "3ed473a4cd6d50cdaa3d6d0c13086f3174bfbfee8d0f42927c449b9fbc23c02d", - "vendor/danog/madelineproto/src/EventHandler/Media/Video.php": "da9d42ec8371a722f5ad98c94f0202fd804f1cb7d645319a0a1913b64937e2ba", - "vendor/danog/madelineproto/src/EventHandler/Media/VideoSticker.php": "d016bf1b1e472ed1b23c24a0a480fa75c7a616a61f7494aeb5e90eecf682262e", - "vendor/danog/madelineproto/src/EventHandler/Media/Voice.php": "afa6951a74f05d3b3368f5597685b7be60e807c20768f50cfa5169959ccb2be3", - "vendor/danog/madelineproto/src/EventHandler/Message.php": "82721091fd2f24202189cfcea68beaa44e82e19add53c910730a747c76029892", - "vendor/danog/madelineproto/src/EventHandler/Message/ChannelMessage.php": "33c804443bced8799c2c99e9aa76101bed37c4be78139b3df8854e4db311745a", - "vendor/danog/madelineproto/src/EventHandler/Message/CommentReply.php": "08877ad31f6a5df44969e7665c2cfb62d91a080f2103f74d3a91022b1952e33b", - "vendor/danog/madelineproto/src/EventHandler/Message/Entities/BankCard.php": "c93f54121f39e4412d1f7ccfcb12dd3bca9a97fac0c31b2d9f280ec527fbc308", - "vendor/danog/madelineproto/src/EventHandler/Message/Entities/Blockquote.php": "1c0be700302ecbb17981bd04ae6da75d406cc55ac7d3bd71bedcceae2dc37719", - "vendor/danog/madelineproto/src/EventHandler/Message/Entities/Bold.php": "5e6994096a1d9b74bbbdcfc47712bd1e19264455a14fd01a0898c4d09617261a", - "vendor/danog/madelineproto/src/EventHandler/Message/Entities/BotCommand.php": "e8e7226abd47b05b68f86dfd694f934b2fcefd7fcadb99ea9e63dd1826f08a6d", - "vendor/danog/madelineproto/src/EventHandler/Message/Entities/Cashtag.php": "11776efda0057478f17eb452c089d4b37994cef88b6b2027dc84af1d2375f012", - "vendor/danog/madelineproto/src/EventHandler/Message/Entities/Code.php": "bb8bb1a0df6694b1d309dc4812ea4b9d9081eecdd54a1c184a8df90ac7cf70fb", - "vendor/danog/madelineproto/src/EventHandler/Message/Entities/CustomEmoji.php": "62fafd02dab4171a51ab0f6523bd232a32ed00a78dc41a935975ffbb8f9219b9", - "vendor/danog/madelineproto/src/EventHandler/Message/Entities/Email.php": "f5037eaa2246623b5a72fe9665d04e5c9e0568250cb51b33ac7561153b666202", - "vendor/danog/madelineproto/src/EventHandler/Message/Entities/FormattedDate.php": "ffe03d0d78215bc42968cd836c25b1f8a602f161fb55eba189b4102d9b99d5e5", - "vendor/danog/madelineproto/src/EventHandler/Message/Entities/Hashtag.php": "866d83025c2419f6268c3091c043a06ad70c5a5a6779df6d662b67c44effc412", - "vendor/danog/madelineproto/src/EventHandler/Message/Entities/InputMentionName.php": "20f1508fedf9b33a9404ba86f4e74dcc894b86687f67a8e75513ab4ecb05a4f1", - "vendor/danog/madelineproto/src/EventHandler/Message/Entities/Italic.php": "f94164c2b9bac248c1a734236704c1614cb6142200718c255132cfe6b425cc3f", - "vendor/danog/madelineproto/src/EventHandler/Message/Entities/Mention.php": "251461e1f072f74677ef26afffde05b9b822975080099b58660f05872e9f3669", - "vendor/danog/madelineproto/src/EventHandler/Message/Entities/MentionName.php": "ee961c228d93192f5ec7efc75f22e2cfc89101816c32511b0d39ee345c7fd36c", - "vendor/danog/madelineproto/src/EventHandler/Message/Entities/MessageEntity.php": "b265ed707326e1d71c7a8bdf8291f0b8c94a153b98a2c4c45c776fec3b374005", - "vendor/danog/madelineproto/src/EventHandler/Message/Entities/Phone.php": "b497f2acd0e71c0601e358b6a1b6870932c9a437444e140aeb4298b5995aca91", - "vendor/danog/madelineproto/src/EventHandler/Message/Entities/Pre.php": "e2cc627cb92b25245c19a51f5a4e4e10a30acee467c935daf086fdd3a941d120", - "vendor/danog/madelineproto/src/EventHandler/Message/Entities/Spoiler.php": "b67d0c7d2a671e12914e6a2a4360dde8be4cb61c52603d2ec19899aceee1b66f", - "vendor/danog/madelineproto/src/EventHandler/Message/Entities/Strike.php": "f67fda78a6db5c41b821ae381482c4ae5f9c9f8e618e305c7d54d243985ba627", - "vendor/danog/madelineproto/src/EventHandler/Message/Entities/TextUrl.php": "c46d0932a20a2497975004f3d33072052c9d09f40f003d64648b583d22dde407", - "vendor/danog/madelineproto/src/EventHandler/Message/Entities/TextWithEntities.php": "a26901f4778d333552f6bf619b72204f3dcc7d8510f9a9504a518d34a542b77d", - "vendor/danog/madelineproto/src/EventHandler/Message/Entities/Underline.php": "996af0f8fa1e46ba8c7a43299ccb6b4cf9eaed8a32b7d2e0c0cefff099036648", - "vendor/danog/madelineproto/src/EventHandler/Message/Entities/Url.php": "3f5ac586502da29d34f9826c9506d570007504dbd47ddf3e5a7605f75d0f2870", - "vendor/danog/madelineproto/src/EventHandler/Message/GroupMessage.php": "a1b562b9fc6c0b2cc50255324128673dcd9f8ec2ea1c2fc8c44691a309e32f7c", - "vendor/danog/madelineproto/src/EventHandler/Message/PrivateMessage.php": "abccbee2e30b6684d4e258194b8bd6426dc9d5e3ba358f5fe9b98ed667ce6359", - "vendor/danog/madelineproto/src/EventHandler/Message/ReportReason.php": "5e93e74ec812284db1fd2046a10853a48217e465460b943fa74259a18914ac11", - "vendor/danog/madelineproto/src/EventHandler/Message/SecretMessage.php": "4d984a933e91786babd8234af8306dd5ac9bdf3ac28ca42455f8eafa25ff17b4", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogBotAllowed.php": "14dc96f42cb5577c1378f19888848e7a8ded34751ee0a49fcfd2d7bf3709e966", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogChannelCreated.php": "11353915336616d46b52f575f13a720209c5c26d3ff411fa4d0608b41f3f459c", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogChannelMigrateFrom.php": "3426b67cc626feb9902149a70e7acc060030b520f97981645c2d83f08704d7e1", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogChatJoinedByLink.php": "4c0f8bc1b5cca029d469a9af12da6610d1f473547b27af173292ff96704bfb2b", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogChatMigrateTo.php": "0f4f38948ccb68ad9e1e9d3fa19ec5406db1e09040517700ebc27971c767d208", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogContactSignUp.php": "725bfd42be96514458dad7f4cc8a896740e24d69cc9fa5765585e3a2a1446478", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogCreated.php": "5068ba611a253590b1b547353d39988c8e801c8fdfbba423eba1576302065603", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogDeleteMessages.php": "137ade12969daa05efb30598cb2e666ccc5a12a0e6da28641b39b2ec5c8e8f07", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogGameScore.php": "14b7f555e01c231e80096381458ffe0e1f6c0e983c607d6ccba2037c40b812aa", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogGeoProximityReached.php": "34764271b4820898748bbbb372cd9d9e3f858c60a19da901f9496c12c69fbf76", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogGiftPremium.php": "6cd1475dca61ad50da59dc9f87392e0fbb70ade3b6f4d905530e8b211c699c75", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogGiftStars.php": "12a8444bbd4294c72da9fbe0b1806f6829ffdae9f346ee75c1c37322239418da", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogGroupCall.php": "e476e148e1c8c68dcc537cf8a8252eaa49f93381b2c2359e9ab444d32988e399", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogGroupCall/GroupCall.php": "ced8fd9fb4a6ea50ad804101cee1983a90f06c8813f921cce9c608c679f5acf6", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogGroupCall/GroupCallInvited.php": "0fbe56022b4868c091a51f6660d7d7f5a169fe722748afa5484b794c04bef5fa", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogGroupCall/GroupCallScheduled.php": "af3c6a8e770cd70fb281db24b516abb3bfb7b2c3673830fe813fcd4234fd78a7", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogHistoryCleared.php": "712dc2e068cafab029d39043fe9154264c8ab298093b7b2b13d41fbf06f3376e", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogMemberJoinedByRequest.php": "48438023244fc6104f041cf9c527299571f5026292382377138e4738951e749e", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogMemberLeft.php": "121cc1fbc74c762f6204a79e56d7b49f46fb0ac2524acdf0e1d95094d55f8ec9", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogMembersJoined.php": "ac11d492b35a476cf898001352d7929d96669a6da6239e8b0fc99b11b4058692", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogMessagePinned.php": "8022872090d60a2904bafffebd5bec413ce3c4c8ea87baa9ea23bd4ec5e847bd", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogNoForwardRequest.php": "ef2f052c6e328f11749f88f8c9cc4570730bd0eeaa3faa41213d037fe48480aa", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogNoForwardToggle.php": "6886f947a7a4790bf4f86f90e79b333b74cd02ebdd2966341ac2103d168662b4", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogPaymentSent.php": "3e9cd6042840304b93169b71b1afc281b2dc2f48c4317f63da108b9ec7c756af", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogPaymentSentMe.php": "4ef0f56de82db27cbae0371a437339450d339d6688c554ea862008e4d40839a9", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogPeerRequested.php": "a9513102345febcd4f9d1704800431ac796b2785e7643349aebd538c4cdff127", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogPhoneCall.php": "b9f52ad760592b86d3657a0d7cc950985e403ae5b48838fb96024c5dd52ad33e", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogPhotoChanged.php": "5e39ab5bb3a2e9b565caaeff880b538e46b49d47092dd7b7e1299d83bf800773", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogReadMessages.php": "10fa943108b506e90563d6d638ca36418ff12d1a4c4b6673dd83cc2a3e9c711b", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogScreenshotTaken.php": "83684d7ff89fa8788a528ccdc5de9ca837d8195d337ba568f9904f40d7b863c9", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogSetChatTheme.php": "14450f40b3abbbcbe1444b4d922550641381319d7bfb89cd64f082627fe03fe6", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogSetChatWallPaper.php": "536d46ba10a5f15b0e40d274a17445cb1cecf4700f986543916ed6f6493f56b0", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogSetTTL.php": "447685f4431cb5a2b7e12a062e85b6bcb184809456e417ba6e7eafcfa049e8a8", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogStarGift.php": "263889ef7a761102bf5b54d5e8cc9d705b2c112cdf125ec31e015fe7fe658f78", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogSuggestProfilePhoto.php": "b6751def82a03d9ef779a7d6903c4fee7b782270867a9a18ce57aa4d97aeb091", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogTitleChanged.php": "f8c68899db2ae4e1cf8ee7c5ad1515826939e0c8eb4753a7ed34b868660e4182", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogTopicCreated.php": "96c957516a9a151fea7b38cfde74e7a306ff20be531bebaac4297eddbb26b588", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogTopicEdited.php": "ee856c443fcac7e657dfac1425c5e7e083f45717c94056a189e42bf33822e883", - "vendor/danog/madelineproto/src/EventHandler/Message/Service/DialogWebView.php": "10e73e369e11faeb1ba5a9dad71b92a414022757ea61b414200681580fdc2e72", - "vendor/danog/madelineproto/src/EventHandler/Message/ServiceMessage.php": "becc5168a5642cfc43d9db973503f4cffd5f8c529e8c406fa324a016738ae66b", - "vendor/danog/madelineproto/src/EventHandler/Participant.php": "e7c5ddbe5e2b6c029c47c674b97c54f5342f6114dcccc7cac3609c9c0bb29c72", - "vendor/danog/madelineproto/src/EventHandler/Participant/Admin.php": "bc7c82fdfd82abe800d39cf6a69548714915749d10a1ed5586dc23081f0f823f", - "vendor/danog/madelineproto/src/EventHandler/Participant/Banned.php": "b4a20b67d5383f061544ba4aa6b8807f7ed7d7f6765e639187ac8628389619f8", - "vendor/danog/madelineproto/src/EventHandler/Participant/Creator.php": "6d7657b46d8913b7d00723e92bb10d8ef5914ad61c1a62469c23d088b7be943a", - "vendor/danog/madelineproto/src/EventHandler/Participant/Left.php": "842fd7b2f9788d0f978400c8d288632ba36f39cf365531c288bd4543a4dc3a23", - "vendor/danog/madelineproto/src/EventHandler/Participant/Member.php": "80fbc76ff090a87581aa3ccd24dd09bb55881d3cbb648cbe1d4a7693bede29a0", - "vendor/danog/madelineproto/src/EventHandler/Participant/MySelf.php": "97262988e3d72155f1dfac3062bd45a7a6111aa9010e7ccb83226931dc3d806a", - "vendor/danog/madelineproto/src/EventHandler/Participant/Rights.php": "ca2d81dd7569b2b8b85b10aabc2b7eae52e0d39b4e2a58968578bb60e80d79e7", - "vendor/danog/madelineproto/src/EventHandler/Participant/Rights/Admin.php": "74137748084ce1fcda88e7e6e99bc4c5ac3f75ceb1908b988655ec54f179122a", - "vendor/danog/madelineproto/src/EventHandler/Participant/Rights/Banned.php": "08679b400e6caf30c65c70258f543857bfe1371264bfbea0acfad0bd3dc1dd74", - "vendor/danog/madelineproto/src/EventHandler/Payments/Payment.php": "efca967c9d1661c951276a4390925ebef6af056848a6c79ba673c64a564b1d7a", - "vendor/danog/madelineproto/src/EventHandler/Payments/PaymentCharge.php": "2b571920a37ecc0023e7461a9bbb09856ac4cb6a77f84b567a5d0f17c99e2332", - "vendor/danog/madelineproto/src/EventHandler/Payments/PaymentRequestedInfo.php": "aaf68321abf42ed4a08b419bfb2cbe087775f9dba7df82eef399423a2738d58a", - "vendor/danog/madelineproto/src/EventHandler/Payments/StarGift.php": "329b48a40d2077bd1cd4d3eae624acbd698dd2782e92a3787ac0266cc7923af5", - "vendor/danog/madelineproto/src/EventHandler/Pinned.php": "465439c7c776bcb4d0db39c21eaeec90fd3f9459553f2c3342945eabbfb741d4", - "vendor/danog/madelineproto/src/EventHandler/Pinned/PinnedChannelMessages.php": "f9a13834a1fef1397574540e8d0a941fe1755c8428f1d0ebaabd9ffb479d931e", - "vendor/danog/madelineproto/src/EventHandler/Pinned/PinnedGroupMessages.php": "68da033eacf3ee4a6193c878529590f49185a00a0d5a208877a5a8f0019ecf27", - "vendor/danog/madelineproto/src/EventHandler/Pinned/PinnedPrivateMessages.php": "9a269d8fcd872184b4ef314bfbe8dfb80f1063830df70ceb967c343f424e9e48", - "vendor/danog/madelineproto/src/EventHandler/Plugin/RestartPlugin.php": "1eb1e97008011f51511cc781f477dd9460b3a4c913d17dfdeb5976d16d79bd54", - "vendor/danog/madelineproto/src/EventHandler/Poll/MultiplePoll.php": "bdd84eb7a9a1f1c11487819d09876ba159d139ff42ee85248fde297073822144", - "vendor/danog/madelineproto/src/EventHandler/Poll/PollAnswer.php": "ea779965046d5b45ce8c16220d4171f8fe33357224c7dd47a3a3977f34ad84bb", - "vendor/danog/madelineproto/src/EventHandler/Poll/QuizPoll.php": "7c8e360ed85934f36d86c5b27d61283d1233f90ce75239b66450714223eb4366", - "vendor/danog/madelineproto/src/EventHandler/Poll/SinglePoll.php": "70678587dcc9f6489e0df4ee06361b66d41a8edcdc83d3988ea1b6e286bca3cd", - "vendor/danog/madelineproto/src/EventHandler/Privacy.php": "a6e04d403e21db0bc8e0eba162cee24b705f08bba0eb3d2ba6bfd4f6fd79a2c1", - "vendor/danog/madelineproto/src/EventHandler/Privacy/Rule.php": "badf96efcbc2ca0d825aeb491e8c4e309173695b7b4e2bf19dd554b9edb2071b", - "vendor/danog/madelineproto/src/EventHandler/Privacy/RuleDestination.php": "6acdd350d6f7373926afce614e23d1723f6c850acad338b613f42bd562d02085", - "vendor/danog/madelineproto/src/EventHandler/Privacy/RuleDestination/AllowAll.php": "1b93d5343640b561d9ff9b5e960589667f0e1967411003ab3d3f8bc6076e3126", - "vendor/danog/madelineproto/src/EventHandler/Privacy/RuleDestination/AllowChatParticipants.php": "602eaeba177f950967c83eefc34a7d07bb6b69846b59da1e595408d9a881f75d", - "vendor/danog/madelineproto/src/EventHandler/Privacy/RuleDestination/AllowCloseFriends.php": "4be9c6a618ba5d3212c219e4b5449c9d91e2257d198fd18c2cce43da1f914451", - "vendor/danog/madelineproto/src/EventHandler/Privacy/RuleDestination/AllowContacts.php": "7ca7bc931e9abc5d9bfd53ebe55926c192dfa89344e65dad42574c845c238c1f", - "vendor/danog/madelineproto/src/EventHandler/Privacy/RuleDestination/AllowUsers.php": "4466d6372076dfbb23035185b4451dba6ca99179b11348ec6c560e9d209d0d1e", - "vendor/danog/madelineproto/src/EventHandler/Privacy/RuleDestination/DisallowAll.php": "125d24bc07b0ffef9323afe0226e622f8a2e59d4a58573bde3999a0918170ee0", - "vendor/danog/madelineproto/src/EventHandler/Privacy/RuleDestination/DisallowChatParticipants.php": "33a998f1d4ef266a3b379d7f789526423686d7232e2b5e39fe8f65ae21d3badb", - "vendor/danog/madelineproto/src/EventHandler/Privacy/RuleDestination/DisallowContacts.php": "625b06bf77c4c9b0c8ceb19a3991a60f11e82746a1941b27cf49785be515924f", - "vendor/danog/madelineproto/src/EventHandler/Privacy/RuleDestination/DisallowUsers.php": "2185cd548090b88fb5f096c6f41df8f9a96f026d912feafde7ccae90e85a02d6", - "vendor/danog/madelineproto/src/EventHandler/Query/ButtonQuery.php": "e019ce684ba3641ad3f988ab3746811ef7e05c8d98be174a73e37c2a7709c6bd", - "vendor/danog/madelineproto/src/EventHandler/Query/ChatButtonQuery.php": "dd523a64280e4a5c5e08133880d7ac3247c62b3c0c284f0c549d4181dabd6ba2", - "vendor/danog/madelineproto/src/EventHandler/Query/ChatGameQuery.php": "94e28cd15d2555f774a78f85bbeb0e80e6f1d64a5a0552edca03bb8346dbb855", - "vendor/danog/madelineproto/src/EventHandler/Query/ChatTrait.php": "af060a6047bc6da5318917b14ada92b56f39471d8eeefa8191def3c3e29dcfbd", - "vendor/danog/madelineproto/src/EventHandler/Query/GameQuery.php": "ede81ad595b83981c10f4c6d171b1de0a2463c990634e7d5fdee9b0bc7ba9e17", - "vendor/danog/madelineproto/src/EventHandler/Query/InlineButtonQuery.php": "e6494a785e8d6a5c08b360fd432cb7873bca899c019d61326b5b0527dcf62969", - "vendor/danog/madelineproto/src/EventHandler/Query/InlineGameQuery.php": "c2f700018983848186937ff2025411e1be43b4f6f9a35b0cc9e6134fc837bf82", - "vendor/danog/madelineproto/src/EventHandler/Query/InlineTrait.php": "9241f5ad772e6209c9ebd4acc52b3d720d375f30603e8693a8b827a86ec637de", - "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/Ended.php": "d07a6ac0de41f64337ebaec512d805952b7023ba6c4e636d02a91766892afa81", - "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/FromAdmin.php": "0b8d793c889e8c074167ca35fa2f9991f3f9718b966533dd22f5d65dfce12548", - "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/FromAdminOrOutgoing.php": "39806aabd7832edcdd9ce71fe0ebff729a59ab21c92cdf25dc5c1010bbbbe51c", - "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasAudio.php": "93d7aebc2bd49d62c8d4d441d7553687ce274edc661b42e955012ce090a62ccf", - "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasDocument.php": "65bf88cf8e8481babb1ccf35be6c53e7da5c6296b4231107b2d88160f06d058a", - "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasDocumentPhoto.php": "e8e6cbbfc5e81bc575833f0c56b5ae8db7b60879f188983934a3cc5fe7a7d9f2", - "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasGif.php": "fecb79c4ec8a0be81702e6124c04b29f526dfcd1784cb0702d1a16cb79ce6a5f", - "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasMedia.php": "08e0d1373ac443adb0b3b440a0e7882670fd4c936f3d3c8bc2c946829220d4db", - "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasMultiplePoll.php": "51ff65f4e048ba37538cf4926b6478cd3730f2907938f822dd84928147e8c77e", - "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasNoMedia.php": "e6482de714d0491efe0e5e31ae650a0e8078551d3141186abb7e8a9e91aedbf2", - "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasPhoto.php": "eaedfb749e22222b855a56e8417851e7a6906b4dcc31185d91063f1ab2d8b2d2", - "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasPoll.php": "db2226532d1c964c5544fc7cca982472b15bdf45adf33546942286e89cf4b965", - "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasQuizPoll.php": "f75d09584d56f98624dd23bec52fd7588fe9f2bbfb11859b9212fe4897bf2106", - "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasRoundVideo.php": "c827dfabb81d4af5f709019c749f40b42dc0bc984ff7dc59209ff4bdf004bb23", - "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasSinglePoll.php": "f59feeb8c176b5d7d60ada34dede9daa6568421ba95fd0c42678cbd447e54b60", - "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasSticker.php": "b17ed98aad23ca43fec08b3d5eacab3a764295e480bd8e90a498a8198b467aaf", - "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasTopic.php": "b0c7498d45b3be72997a17e04119dd0e5fb739af8849efb14e77da2e22fd2800", - "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasVideo.php": "676ae4196799a4b7591d1000cdb52301bcc1f2f505473bbb1f1f7f5088293dd4", - "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/HasVoice.php": "287c7744f90ab0c9a83ab3fd4f7e59c9df4c111f7415518362220203a6f772c7", - "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/Incoming.php": "edf7d998c2d16c87c6a5c9547b807893715377aefbd2283ecab3aa442717b95a", - "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/IsEdited.php": "ea08815dd76aae89b88ebfd1ff82cd9a9e271d7efac191b660122054e88b9521", - "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/IsForwarded.php": "b57877b836e329fb2fe678c28a5344047fed697840bc207199c7f65e45b4455a", - "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/IsNotEdited.php": "9ea96b0c2a03188e672c5e9f0b6ab85714736a49fc06c2c9a9383c28d18beecb", - "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/IsReply.php": "d523980766a6e013650d7e6e96498b218f5c7c925eab6faa19b1711af6afcd2d", - "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/IsReplyToSelf.php": "1a0eb3c8449ec90f782bb588eedffa5abcb8b6c01e1d24b702908db16ae831db", - "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/Outgoing.php": "5fc83fd4afb4fd8c779565c19fab47cde35a73652c75594c741fc0133fea2b83", - "vendor/danog/madelineproto/src/EventHandler/SimpleFilter/Running.php": "85d7a18e4845d3646660bbe64e3020d9f3c76dd12fc8ff0a4e3a5f96fcc9133c", - "vendor/danog/madelineproto/src/EventHandler/SimpleFilters.php": "aa4d15bcce5eb85a0dd8bcc321391ebc3c8a4f6abac1d70ab8939560b1904839", - "vendor/danog/madelineproto/src/EventHandler/Story/Story.php": "159b8eb141b8d72b4de7ece000f6f877b0218617bf2f72181dad0115f9e2b728", - "vendor/danog/madelineproto/src/EventHandler/Story/StoryDeleted.php": "b3ed39b6c46348588828a497af6520cc2be19e6e25662177421fd57eb02e2a11", - "vendor/danog/madelineproto/src/EventHandler/Story/StoryReaction.php": "82c02608a6701925fa9cb34d867067b723e46f2c95713ef50db0b39ffc8616e2", - "vendor/danog/madelineproto/src/EventHandler/Topic/IconColor.php": "4d0fad8a45ba163bd209720e6ce744d62e8c58901ebc72eacab9be5864a83ca9", - "vendor/danog/madelineproto/src/EventHandler/Typing.php": "8659f7f1c77a6a2b681b83d197ae999adf878d994cf7def3a66f455dfc17157f", - "vendor/danog/madelineproto/src/EventHandler/Typing/ChatUserTyping.php": "3a85e506ce867e68d462434ee40337b829a9b9dadcc0011fcd1adc2cb743c771", - "vendor/danog/madelineproto/src/EventHandler/Typing/SecretUserTyping.php": "5be8fba82cada149f68a31ae87292376c68568da841c5a4dfabfb6a780e220f0", - "vendor/danog/madelineproto/src/EventHandler/Typing/SupergroupUserTyping.php": "e9523f390ef45436bbfc9ff423ea4ae191fd206c12ad14c97d2ee3db01a2bce5", - "vendor/danog/madelineproto/src/EventHandler/Typing/UserTyping.php": "d8d4c72ba4f3bbbabebeb52576667994195c7f64f0e46097cd482ce53d70c5dd", - "vendor/danog/madelineproto/src/EventHandler/Update.php": "c6c9bd4fb881d748c47c8773a45b434234e4443d063976f59caab9d87ac45531", - "vendor/danog/madelineproto/src/EventHandler/User/Blocked.php": "4a956683f63356b383386af9debe3b375a81598cf086162d3cd5b09f5e105580", - "vendor/danog/madelineproto/src/EventHandler/User/BotStopped.php": "b3123ec601d6f79f4c47bc9b94c3b3c94b3c172bed67ede9fe64b9a1dcc9f03e", - "vendor/danog/madelineproto/src/EventHandler/User/Phone.php": "cb1de562022923dc389427fe896c1d021c6d5853f8bef1dc372a98b78604a543", - "vendor/danog/madelineproto/src/EventHandler/User/Status.php": "b011bc6f459664c357023d6fa332799d974185e355ac62f9df4e6c378fd7a7b5", - "vendor/danog/madelineproto/src/EventHandler/User/Status/Emoji.php": "f59b400eb90bc2a460beadeb7eaabae7adec74e817bf237e411ce34ac9561fa6", - "vendor/danog/madelineproto/src/EventHandler/User/Status/EmptyStatus.php": "6b6487d6196cf77b4ec01efb4539e14600e42d1898b8ac93b40e7a2516aac6bd", - "vendor/danog/madelineproto/src/EventHandler/User/Status/LastMonth.php": "0e48e833de0e8c2ff2b1cee905793320148d312924dd036b870fe48775cb04c4", - "vendor/danog/madelineproto/src/EventHandler/User/Status/LastWeek.php": "8abe36573041dc0a95246460c78e4f22d2bf023f6294ec459f6a0027eafc992e", - "vendor/danog/madelineproto/src/EventHandler/User/Status/Offline.php": "445fa725cc0a8beb05e01cd50decc7d87915bc69d04747d5a8e00d9aaad53962", - "vendor/danog/madelineproto/src/EventHandler/User/Status/Online.php": "48822d7ea5469230c5df61d22062fa03ee575079b15d9b38658c631ce8d9562c", - "vendor/danog/madelineproto/src/EventHandler/User/Status/Recently.php": "b8870f82ab61882a2fc76e7eba6a3bfd360bf7173728a81bcc62a85e3cb0c311", - "vendor/danog/madelineproto/src/EventHandler/User/Username.php": "b051b717ca3fb7616360a24ef407d9e8d0f0dcec6b2afacf750f7f1cfec791c4", - "vendor/danog/madelineproto/src/EventHandler/User/UsernameInfo.php": "b2d36d5e031935890e29783aaba11034a3bc44f9d4e587867785d412cd1f2b88", - "vendor/danog/madelineproto/src/EventHandler/Wallpaper.php": "e4f735db493ccc92b94c4b4e18024df714bbd63afb1bbc9e4ab70c572eefe772", - "vendor/danog/madelineproto/src/EventHandler/Wallpaper/WallpaperSettings.php": "001fab76c9188661e412a74722ad3578621c578f359e82553bc1824d2b6e9c2a", - "vendor/danog/madelineproto/src/EventHandlerIssue.php": "ef8fda186e4e78642c243dd9ba7ff08e43f435adb384ed4a44bee955fa546bf8", - "vendor/danog/madelineproto/src/Exception.php": "74f7101d13e5ae4b6ae1937e86ed22f23590667a85f7402e504e886602abc0bd", - "vendor/danog/madelineproto/src/FileCallback.php": "94a98c50a97d7a30887851635d7bc65e2a250424ab0f4b1d816f0b10e89d52ed", - "vendor/danog/madelineproto/src/FileCallbackInterface.php": "275af4901e4c4e664e732eeeafc686bfc0a1da3b1b31c48ae2a97fc17c85d65a", - "vendor/danog/madelineproto/src/FileRedirect.php": "438a38c28840753d4a18607344a07fbb3764c21b733b0cd1310b9d5b9e7641f3", - "vendor/danog/madelineproto/src/GarbageCollector.php": "cb8c2d04e313f592730dc569ddf3c09fe70e8eeb2d82a601dca9f664aeb7250b", - "vendor/danog/madelineproto/src/InternalDoc.php": "f59e0c2e3c08cdc44fb3bfc5c6bd18fd7eaa4997f44213550fc5f016aaac9ee0", - "vendor/danog/madelineproto/src/Ipc/AbstractServer.php": "d0db5a56efa9420be7c6f63a1facf1965dc831b5a4878d984ee9f1d377e4100f", - "vendor/danog/madelineproto/src/Ipc/Client.php": "82b960bc6b406ac8db9f64640f28dac4f53d60856a988c549db5ee37b78f6411", - "vendor/danog/madelineproto/src/Ipc/ClientAbstract.php": "bf48579d45ae221f9b22997dcbb64ce357de5fd3eed73dc95d7fe6324e7a8af7", - "vendor/danog/madelineproto/src/Ipc/EventHandlerProxy.php": "082877c6f456df644e8390dad9524c7c9243303d940c7ad3e72fc1d169110cb5", - "vendor/danog/madelineproto/src/Ipc/ExitFailure.php": "93d996252d4569cca46cd39f2129e62775458ec4a9d72601243340afefb03201", - "vendor/danog/madelineproto/src/Ipc/IpcCapable.php": "327222907ff5d2f3ad0fcf33554e914a66924968874bdd2bd3b6fc315576aa48", - "vendor/danog/madelineproto/src/Ipc/IpcState.php": "4fe9cd55af338d74b08bb8e4c69adcc342d5bdef62cc4acde714b27825ce73fc", - "vendor/danog/madelineproto/src/Ipc/Runner/ProcessRunner.php": "dc1ecd16054d9883afda9b2cfc8223f7f836781b57fa2b7eb9f329f0b28b7531", - "vendor/danog/madelineproto/src/Ipc/Runner/RunnerAbstract.php": "962f0e219997b63a878b29f2562a0ef6c83cc89b888fbd8059a67ddb35df856b", - "vendor/danog/madelineproto/src/Ipc/Runner/WebRunner.php": "ad19cacecbb6b1521bbf91130acf2b636eb4c7cb3e03fdcb9ec3d5510bef23d1", - "vendor/danog/madelineproto/src/Ipc/Runner/entry.php": "66f60e1e640e4af1c984e4a531b04391a571819d759e6cf4210cf1852f9d6898", - "vendor/danog/madelineproto/src/Ipc/Server.php": "97a5bec28abf8e47acfea4aaa01aee67143f29b08b87a455ebd091e4c8124120", - "vendor/danog/madelineproto/src/Ipc/ServerCallback.php": "8e4d1f0bdcdf58ce8c41531449cc4d5d236b07dd2612a13e56d7df5f46cc2fd8", - "vendor/danog/madelineproto/src/Ipc/Wrapper.php": "132832ca3e76d018db53560cc82c7686ebc395dd2e5e9567c71b23f048715c9d", - "vendor/danog/madelineproto/src/Ipc/Wrapper/Cancellation.php": "103f1e7abf8da1b22ca37737878ab20c1b905a42bf8f87d31237af702692d7b0", - "vendor/danog/madelineproto/src/Ipc/Wrapper/CancellationInner.php": "64ce91b3139af05b793435f821c7f7362028aec55a748b539e758dd156d1eb4a", - "vendor/danog/madelineproto/src/Ipc/Wrapper/ClosableTrait.php": "c29e65d1a89afcce2f544e4c6f8db942c464e305e9202e67fe6d648560945113", - "vendor/danog/madelineproto/src/Ipc/Wrapper/FileCallback.php": "aea2afdd373e6fa2a403b5e7c45fdf13ae832e016787215fc0d907de70724418", - "vendor/danog/madelineproto/src/Ipc/Wrapper/Obj.php": "3e982c0a22fe4c158de95003e410cf39654eb12868b1b6f6a3d58e589cc4cdcb", - "vendor/danog/madelineproto/src/Ipc/Wrapper/ReadableStream.php": "3a915cd42f2ddadd501d6e1422d1068351f97c98fd45b5876d6c0ac38aa46779", - "vendor/danog/madelineproto/src/Ipc/Wrapper/SeekableReadableStream.php": "c7907c2dcb617a88a3cfbbba42d6b4c7cce414867355f583bc6cd17a92c5bf50", - "vendor/danog/madelineproto/src/Ipc/Wrapper/SeekableTrait.php": "79c6e4e172532d80c4977a82e91af68affd266583e1248d49ed397dc76898451", - "vendor/danog/madelineproto/src/Ipc/Wrapper/SeekableWritableStream.php": "4c4a772c96286af4e7b5a1708e2d8eb68dfc2b9f7e5b6c9872a99a0883313f2c", - "vendor/danog/madelineproto/src/Ipc/Wrapper/WrapMethodTrait.php": "2737a280ffa4cbaedb3787c4deed96629ff5b0b5c3ca3573ae097e37efa4416b", - "vendor/danog/madelineproto/src/Ipc/Wrapper/WrappedCancellation.php": "023927ae71442ccfca600d11f78246e9816c1fa740b21ee8e8990b4275348682", - "vendor/danog/madelineproto/src/Ipc/Wrapper/WritableStream.php": "a8cb66e498b03df697c629601b4d8006911c3e742861c1bd07082ed40d2ec502", - "vendor/danog/madelineproto/src/Lang.php": "b96dc25a22e527c14e57f29e3f644513692240d8cf13a7dd1bb29f1ab0df5fed", - "vendor/danog/madelineproto/src/LegacyMigrator.php": "3e317635c40fdeb46c58097f3b1e876ec491be9e3dc45a375442cbaa23e27aea", - "vendor/danog/madelineproto/src/LightState.php": "879da8958633851ba123220ab0f17292fd7cad86e911f7c655cff0fdb322c739", - "vendor/danog/madelineproto/src/LocalFile.php": "cb92b88005a789d3923f617a776c6c1c43c090d684155fb26171809d0a21c18b", - "vendor/danog/madelineproto/src/Logger.php": "a090bb4e7e5e20c70dc64f9a4fe72d005d65f624da66e554bc91419b21822f46", - "vendor/danog/madelineproto/src/LoggerGetter.php": "8705777a1a56e2fe297a41c63464b5510cbf2a5a8a5a2b847ce37dac83d89d7e", - "vendor/danog/madelineproto/src/Loop/APILoop.php": "3d74d1ddd11b762e95043425f46ba566d2a41f42f863b2a5aa6ab3876854d94f", - "vendor/danog/madelineproto/src/Loop/Connection/CleanupLoop.php": "37aa67dcf47a77b737c4ecbb229d4e254ff400b5a04442e9ae2fbf3782d2c3ae", - "vendor/danog/madelineproto/src/Loop/Connection/Common.php": "756e2c2a7bf65af82a42639c195a967923e5dd7f91449a1b03e4850ff2be6d1f", - "vendor/danog/madelineproto/src/Loop/Connection/PingLoop.php": "02afaeb6db5c697e43d5c87474d1969c9a2d768c68aa500684db320fe9c4d8e1", - "vendor/danog/madelineproto/src/Loop/Connection/ReadLoop.php": "bf25c628d14354ad00234e6a2238f604f8da4aa80a99ff22d0f50f35a77dee81", - "vendor/danog/madelineproto/src/Loop/Connection/WriteLoop.php": "ba93ed108e41249c2e80dea621c842f4f57817291a286f6f00037e20ec30dca7", - "vendor/danog/madelineproto/src/Loop/Generic/PeriodicLoopInternal.php": "3f452ba7e088e03f2c98d50bfe817f16b2b515caebaebdc9ac3d4818e5b42f89", - "vendor/danog/madelineproto/src/Loop/InternalLoop.php": "1ca7f36d24851ead0c18a374ee07b4ee79537a11249cca0915e516e26866a6a8", - "vendor/danog/madelineproto/src/Loop/LoggerLoop.php": "0166b7844c9611cb37745d9069cc5dc3218b704e2b390113d2c14ab617bdb0b9", - "vendor/danog/madelineproto/src/Loop/Secret/SecretFeedLoop.php": "39442379af5699bbf75efa943c91bfeb1eea24a5e48cd11208e1e78b1e005f05", - "vendor/danog/madelineproto/src/Loop/Update/FeedLoop.php": "77106256dc35a53eaca919db9e963821291a3761cdf8fc9afab03a6900cb0622", - "vendor/danog/madelineproto/src/Loop/Update/SeqLoop.php": "c5e39d801b16ad19e4339c16205df1b3458332e310db0c00d2eaa528786f6f89", - "vendor/danog/madelineproto/src/Loop/Update/UpdateLoop.php": "8f6cb1a483c879024bddea289e90d4bf2d71dd15716102bc83a1f34a243782e4", - "vendor/danog/madelineproto/src/Loop/VoIP/DjLoop.php": "5de40dfd90ff6df761c4c61e780d893e349d856aec20c7a910fc4d74171b321a", - "vendor/danog/madelineproto/src/Loop/VoIPLoop.php": "8bcfb5fc9e35fb7c37bd80d302e52382262bdfa943c4e451ad48b35f83e85c13", - "vendor/danog/madelineproto/src/MTProto.php": "4538b6e4683d2035e9e21f061a0535976799cd3a557e3bc0e7a869ad63bd62bc", - "vendor/danog/madelineproto/src/MTProto/AuthKey.php": "cdf652428537a163c96fff2e4ba2cfdf818f56f8ac937d89473dbf8bda350916", - "vendor/danog/madelineproto/src/MTProto/ConnectionState.php": "7c6299cb3daa1f91cebb3f90c89b9d17c79e3a31cdab7756575d61c04ead9cc4", - "vendor/danog/madelineproto/src/MTProto/Container.php": "155c49a5622c92b6f9c1f31432b9963046d0a045debcb2dd337b681e0f0f1171", - "vendor/danog/madelineproto/src/MTProto/LinkedList.php": "270d5d43bc8ff6b771c5cf321e0c8ffbb8e9515e1aa952bd21cf472607b7e1ba", - "vendor/danog/madelineproto/src/MTProto/LoginState.php": "892ccbcafa6871b34e3672e353c251ab6072bdbfb619075b8bab6979a4b20d91", - "vendor/danog/madelineproto/src/MTProto/MTProtoIncomingMessage.php": "3c6ab4e4809ea189bb98b6f1822f81ff9cb674a158e26e6567bcf3fb0e72b7d6", - "vendor/danog/madelineproto/src/MTProto/MTProtoMessage.php": "90e9f8f04971ddc8956c45bf43ff235bb906ccfdbceda6a5b820e7a58d359e8c", - "vendor/danog/madelineproto/src/MTProto/MTProtoOutgoingMessage.php": "5c58d37d3e1c1ecbc513da5343aafbf21da9989d222f87fab4aa5598586b14a2", - "vendor/danog/madelineproto/src/MTProto/NewAuthKey.php": "9a142067e8e52d26d101d02e443b44e7679b727701ed6ae6616aad4a5673394b", - "vendor/danog/madelineproto/src/MTProto/PermAuthKey.php": "f8fa0ff2bb98c057820ccc02a368472a904ebd23a4cfc19829b5a5c447ce4d19", - "vendor/danog/madelineproto/src/MTProto/SpecialMethodType.php": "3b65d05d72dd107d11cd2dbf314a924aa5f472287633ece8e8ee0184301ec340", - "vendor/danog/madelineproto/src/MTProto/TempAuthKey.php": "9872f9a5f93f58a4cd6f54d6b8f089441d4f551f6280a6763be0e30b6bd8469d", - "vendor/danog/madelineproto/src/MTProtoSession/AuthKeyHandler.php": "273d744aaa89f45c1ed33622fe92a881cb5bf9a3aea03082095d56f80c09aab0", - "vendor/danog/madelineproto/src/MTProtoSession/CallHandler.php": "b40689d8245005c433d97e5edf3869291259599460ddcb2d8eefd2688dca8dd0", - "vendor/danog/madelineproto/src/MTProtoSession/MsgIdHandler.php": "1c42f9dbe8db2d4165b3334e67d6fe79196911858785e74ceb80c798add6d0fc", - "vendor/danog/madelineproto/src/MTProtoSession/Reliable.php": "890420d017436f022220538298c9934548e41f04968bed800483c042022585fe", - "vendor/danog/madelineproto/src/MTProtoSession/ResponseHandler.php": "693bf07d81e677f2903e0238fd87849ac3406a49bfedccddc8df95d3ee7119be", - "vendor/danog/madelineproto/src/MTProtoSession/SeqNoHandler.php": "c786d76fd695963064f192adb4d9b45e958d4f51ba286161f43419f7d2f9d35a", - "vendor/danog/madelineproto/src/MTProtoSession/Session.php": "32227a5ed18d5066db105439274a3d311e08cb0e06184c8a082fe149046c0e83", - "vendor/danog/madelineproto/src/MTProtoTools/AuthKeyHandler.php": "f9c05dd42237d2da10a14fffed0ca9e047a0ab2a310d6ca49b9cf96f71fbef8c", - "vendor/danog/madelineproto/src/MTProtoTools/CallHandler.php": "c734488b7c47cdc7c6d8401f47412a189ff82e582afa21eb9fe38973e6b51b7b", - "vendor/danog/madelineproto/src/MTProtoTools/CombinedUpdatesState.php": "1469e2c957e10f317849cfa2c0f5b36253f01b393c234c17b5e9a9816840ee09", - "vendor/danog/madelineproto/src/MTProtoTools/Crypt.php": "f58b3d20f0e1ce0a2868406b32ecbb13e843351692fa1488976de2f1ac4b0b72", - "vendor/danog/madelineproto/src/MTProtoTools/Crypt/IGE.php": "b3862278d3300cc940f34f088b88aadd5021f77dfbb30057b7570242601dca82", - "vendor/danog/madelineproto/src/MTProtoTools/Crypt/IGEOpenssl.php": "adc0a6ac65a44485522d4b3811a23cdd3cb05371cd14fd61f6d822efd8341a65", - "vendor/danog/madelineproto/src/MTProtoTools/Crypt/IGEPhpseclib.php": "bcb35d5c9ccc835173591217976c179753065e6abc80768b80a3c15181147196", - "vendor/danog/madelineproto/src/MTProtoTools/DialogId.php": "4356a26fd081dda2cbcbfd8fab1c44ff96d7e3d7486ac3b36d54af97d67ee187", - "vendor/danog/madelineproto/src/MTProtoTools/FileServer.php": "7ad3bcf3f8530ab585c834254a11bcc52c4e8b77d60698c48275addadd2953e9", - "vendor/danog/madelineproto/src/MTProtoTools/Files.php": "02213ee08d4504a180a5cf938248d0d3b29c262a1366c51e3c612ee79cad3dc5", - "vendor/danog/madelineproto/src/MTProtoTools/FilesAbstraction.php": "58039a41839bd29743b3b02e985cfb8040aed100da990433a39ad77bf05739f7", - "vendor/danog/madelineproto/src/MTProtoTools/FilesLogic.php": "b6eac2f0aa25d68c5361c4d97a85fa39458f5a22ad27fe8d975ef0b2214dfd94", - "vendor/danog/madelineproto/src/MTProtoTools/MinDatabase.php": "bd9d538d1e1c451f5fed387b4db08c9742bca382d57055c3cfbfdf86d284ddf0", - "vendor/danog/madelineproto/src/MTProtoTools/PasswordCalculator.php": "a13a5fe8e7451c0628d201e0f58414f0249be37b066d237040d1cf92406a39c1", - "vendor/danog/madelineproto/src/MTProtoTools/PeerDatabase.php": "26680a32407ab039381dac28885f1b3c44b6cbb74fdf770ccec4f334ef1ae0a1", - "vendor/danog/madelineproto/src/MTProtoTools/PeerHandler.php": "8188777fc376f2b3cca39963d79f85239fc84141f978128ea2bb591f03891928", - "vendor/danog/madelineproto/src/MTProtoTools/ReferenceDatabase.php": "e65359581891e8992e15bea005a73fd95dc448fd686767da9f9d1f302dc3386d", - "vendor/danog/madelineproto/src/MTProtoTools/ResponseInfo.php": "cb5abea720ba648fddb9d793e06daa48be82f5952de2d3e05079cf559206e4b6", - "vendor/danog/madelineproto/src/MTProtoTools/UpdateHandler.php": "d31eb65c71323b169249ba2d7b5b3841db962c31ff98bfd0d831a7d23f24c984", - "vendor/danog/madelineproto/src/MTProtoTools/UpdatesState.php": "1fce590549d17c1345a7f59e63f5899427f39e59111b8ca4e9cae1c1c5900a93", - "vendor/danog/madelineproto/src/Magic.php": "c34e930b80eb563661e69d4f892bbb256f2d63c221140fd4aa0bc2b15e8f0be7", - "vendor/danog/madelineproto/src/MyTelegramOrgWrapper.php": "0e755b9dcd49cbc6ca993e05c7b826eea513409a38c0173c5fdb25b247601885", - "vendor/danog/madelineproto/src/Namespace/AbstractAPI.php": "00b85f80e2df773ba99ad94c1f0d13011b71c85a822e71c92b85607ab0c4df8e", - "vendor/danog/madelineproto/src/Namespace/Account.php": "6201a4e32548be7c2233f427232b7b45764de94ae371af63ffe1d2a4f73fcd49", - "vendor/danog/madelineproto/src/Namespace/Aicompose.php": "9515c8c48a473e11892658717e89069d6839aae065d50f20f6074b9ede619149", - "vendor/danog/madelineproto/src/Namespace/Auth.php": "25aa7b74193448d37c3064b5f40f5b95aad7ceef24a246609828dd6b091a637f", - "vendor/danog/madelineproto/src/Namespace/Blacklist.php": "a7e61276df0834ea48878115c65e6bf7f237ae83a3d5a8f7d8084f386adc6d49", - "vendor/danog/madelineproto/src/Namespace/Bots.php": "64a00b544f1ec5527ff4a6122f60cc84beda25abbf9ec0dd0c3fba62ca6c3ae6", - "vendor/danog/madelineproto/src/Namespace/Channels.php": "64b4f05b87ccf7a6b0a38b36c51ba23891439ad272bfe58f511f0b9d0f7bac97", - "vendor/danog/madelineproto/src/Namespace/Chatlists.php": "3643e81996742a8f7285d6670190b386077aeeff407aaa295c42a6168ea84642", - "vendor/danog/madelineproto/src/Namespace/Contacts.php": "39c1b3223248038914983108bcf96d7f524b793955fc4271b35e25a97f363902", - "vendor/danog/madelineproto/src/Namespace/Folders.php": "382c630c252ba4deca5f89336f21b6721bfd7d3f2d66c822367cab2081efc8d7", - "vendor/danog/madelineproto/src/Namespace/Fragment.php": "f17de103e1667a305bacad4e737f35510b280e61ed44128832debe0015886f1b", - "vendor/danog/madelineproto/src/Namespace/Help.php": "fbee01ac7212485bab74909d36f2512bb3a42c0d1378f979ffa265655706caa7", - "vendor/danog/madelineproto/src/Namespace/Langpack.php": "621c4fe7897ee26ea3215d4b1d4fb4aaabaa52c6ecc0a5f0c46386f5b7e70bf3", - "vendor/danog/madelineproto/src/Namespace/Messages.php": "434f8d2b9d334561c7bf6c421ce0b6506b227dae15a47c3b4769ab510be5b838", - "vendor/danog/madelineproto/src/Namespace/Payments.php": "151f4dbd216d51dafc96ab6c36f031b19e2246bd1f3ec3072dd1bce6d5e66754", - "vendor/danog/madelineproto/src/Namespace/Phone.php": "257406a0bb07534d8d3d0cea8358c06dabab1559b38a1408504558ba0c449e9f", - "vendor/danog/madelineproto/src/Namespace/Photos.php": "232cf0fd0ad95757a893b2780e6b2133db43ee861ce58b87b5126cb56ccd458a", - "vendor/danog/madelineproto/src/Namespace/Premium.php": "62891af5c6cd2cfcb11b0862aa1437ff8cd7738be692f38cd154aeaecbed6542", - "vendor/danog/madelineproto/src/Namespace/Smsjobs.php": "e366cf1945f8583796d6914a826af397703346d23bd8c4e441f158d8d8b0ec55", - "vendor/danog/madelineproto/src/Namespace/Stats.php": "e0bfabe80ada950fe9bd4d2d14fb8b0427d2f60307cf87822d1f0daee59a0c52", - "vendor/danog/madelineproto/src/Namespace/Stickers.php": "696c3a0d22868eadf5450e47a1f39a37b23da840d0761caf570e7f9b572da741", - "vendor/danog/madelineproto/src/Namespace/Stories.php": "9f1cf8e168279a71d1424f423748c3c49e29bae476c2c2132bdc742907580206", - "vendor/danog/madelineproto/src/Namespace/Updates.php": "ae0389c0b4815dc5165987b977007a31e18e263fb8e0ea147cfa4c08b24b3e86", - "vendor/danog/madelineproto/src/Namespace/Upload.php": "878f9548c5b8d9ae3bee94a44c3e34903b1f871d984136886c36d8d12d56dbc2", - "vendor/danog/madelineproto/src/Namespace/Users.php": "d5aa730132bd24715b34f948c84455810b1eb15942c460882585d7148a9dfa87", - "vendor/danog/madelineproto/src/NothingInTheSocketException.php": "48b317474f34f82c45b35225d965c39f6eaeeba8ea617ac9520ffb8fd6281b33", - "vendor/danog/madelineproto/src/Ogg.php": "909d6b5f41fef95c9a930f671ae635721ec5647c0d514e0b352de1da96358abd", - "vendor/danog/madelineproto/src/OggWriter.php": "7578f9b60ee6f0e6450f35f2434ec1bffd91ae6ab123fc9bf434aa7943183648", - "vendor/danog/madelineproto/src/PTSException.php": "873023e1823c53bc200bdcfb229bf036d22d77871f88df51031c90c9b22fdc52", - "vendor/danog/madelineproto/src/ParseMode.php": "778ba1b78c86bd463e91ab5d3fbc536115a434d2952ec8dd8f89b8d3b4d32d8e", - "vendor/danog/madelineproto/src/PeerNotInDbException.php": "46e4a0be5ae63fd0f234fb0c5ad8eb61ab7f9c6aa901449f2ba633d63bfdd23e", - "vendor/danog/madelineproto/src/PluginEventHandler.php": "8bcd138a8af739d9c5c8b05d37f5ed5cfefef0cb6bc6656ab438e7a5da3d6e6d", - "vendor/danog/madelineproto/src/PsrLogger.php": "94dc2f449a526b63a7768c68066900cb97519931f0096254a6e7b79453e81a94", - "vendor/danog/madelineproto/src/RPCError/AllowPaymentRequiredError.php": "a2027dea005fd6af95e52a95780766f625c3dc5f5e2d98e52c37e1af8a1e7bd2", - "vendor/danog/madelineproto/src/RPCError/BalanceTooLowError.php": "bd087bf4bb8cadc24bbf9ae6eb99f23612f63de753b4deca2ed22fd83f4123f6", - "vendor/danog/madelineproto/src/RPCError/BotGamesDisabledError.php": "1d8db79e265e7803ea030199fa60fc644f05cc6e32ab7ea5b183c4645fe37f48", - "vendor/danog/madelineproto/src/RPCError/BotPaymentsDisabledError.php": "97db9ba3be4bb0751515310bcd70c8e32c6df8a71832322cdcedfe62e10e968e", - "vendor/danog/madelineproto/src/RPCError/BroadcastPublicVotersForbiddenError.php": "d58925a6bf8d6f618b1f81f2b35bfadf60a865dc25a26873f9cbc4089d8dcbc3", - "vendor/danog/madelineproto/src/RPCError/BusinessConnectionNotAllowedError.php": "31f9e546d4d1a2ff612d88e626892dbfaff17da333f2b2d2b21970789e9472b4", - "vendor/danog/madelineproto/src/RPCError/BusinessPeerUsageMissingError.php": "dd03eeaa4697ed16cfbc218ba75586d4bf626a20f21ea77e55c9f8730612880c", - "vendor/danog/madelineproto/src/RPCError/ButtonUserPrivacyRestrictedError.php": "c791370625c33aaa4ec89815887556a0277759c3edf8a306da7e2256e49d8d2b", - "vendor/danog/madelineproto/src/RPCError/CallAlreadyAcceptedError.php": "d06c44aa66f52b8bc2fc8272affd590d00b8009592b16c705d36a3dc8ea11b24", - "vendor/danog/madelineproto/src/RPCError/CallAlreadyDeclinedError.php": "4ae674aabb8c3d364a6a833cf28433e26ad3c05ae652903abda2686c6b6b67e6", - "vendor/danog/madelineproto/src/RPCError/ChannelInvalidError.php": "46b24b657ad4a98162ff06d30ce9648be02d1ed157fdc0471dec733f5031b17f", - "vendor/danog/madelineproto/src/RPCError/ChannelMonoforumUnsupportedError.php": "2b2fbc6fde6d18f4adee145d7c6af6421714273ba0fbac96a6ff97b4ebc2e926", - "vendor/danog/madelineproto/src/RPCError/ChannelPrivateError.php": "527aabbbe977b6f6422244c91fb2acc093daa57047bcf50867e0237a7f871dd2", - "vendor/danog/madelineproto/src/RPCError/ChatAdminRequiredError.php": "ba58c8684be3e282d34a55ac1588f035608977a5c5f9cafa8b498015e3dea87d", - "vendor/danog/madelineproto/src/RPCError/ChatForbiddenError.php": "65188b42804d44a76fe01f94b2e089784471c14cd1872ab647d9c1071ef8f1e2", - "vendor/danog/madelineproto/src/RPCError/ChatForwardsRestrictedError.php": "1c8dedba29bdbb6ad123fae203223c8a4d00ccc2ee8b52006fe28356ff6c8aef", - "vendor/danog/madelineproto/src/RPCError/ChatGuestSendForbiddenError.php": "e2b27699cbea52603cfa75d58a756b6a3fab8d5bbe54164d2ffeba26bd4bf4bb", - "vendor/danog/madelineproto/src/RPCError/ChatRestrictedError.php": "9c4a4b475477614ce7b82389b2c742fb655d9ad09722398b5b013da9b17719df", - "vendor/danog/madelineproto/src/RPCError/ChatSendAudiosForbiddenError.php": "357d152fb3da84b44340be9acf68c831eb3943015773f255fd52c574b9fefdaa", - "vendor/danog/madelineproto/src/RPCError/ChatSendDocsForbiddenError.php": "8a279ea58a6588284d772d2c3f724935331e157043064a19dab87d26f42dfdec", - "vendor/danog/madelineproto/src/RPCError/ChatSendGifsForbiddenError.php": "61805905bfb31a2c5a984a06cf2bdf76b02aa2e0e35d83ae5c2041079259b26a", - "vendor/danog/madelineproto/src/RPCError/ChatSendMediaForbiddenError.php": "1f25dc4f6716fb3323363566b0c8dbda99674fe88b37352baf753cf40b4581fb", - "vendor/danog/madelineproto/src/RPCError/ChatSendPhotosForbiddenError.php": "a92d49d0ed0544b0f0ec0f223f252b4a00730d3fe727578f4b4bdaff16d693f9", - "vendor/danog/madelineproto/src/RPCError/ChatSendPlainForbiddenError.php": "63b338bc1234f591521b9e117c7fbf51e696d31f234e7f1ec6f180586a21bc11", - "vendor/danog/madelineproto/src/RPCError/ChatSendPollForbiddenError.php": "28bf608d1a676d8151c37b47be93fcd0d0d305b6fe10313386ae92f7fc190fba", - "vendor/danog/madelineproto/src/RPCError/ChatSendRoundvideosForbiddenError.php": "5f39c95c4eb6271fdd3a5d1c0bc0aca5fc0314984b9e5d02b7cc511cf2ec16e8", - "vendor/danog/madelineproto/src/RPCError/ChatSendStickersForbiddenError.php": "1e28f17ace31206b6abf3c26204b846e2e36737002b304bdf42084d05116d291", - "vendor/danog/madelineproto/src/RPCError/ChatSendVideosForbiddenError.php": "655fe6392abca7ca44e309cb77d94643661bd367d31757b21f7e5665d7f1ebeb", - "vendor/danog/madelineproto/src/RPCError/ChatSendVoicesForbiddenError.php": "f15b0f421420e9fb7cfce505368cb74cc6a912767f9bfa35dbd568bc4d443f7f", - "vendor/danog/madelineproto/src/RPCError/ChatWriteForbiddenError.php": "6311794e483ed57be718121626d79931eceea97544b514e58c81aa5b2c69a0f0", - "vendor/danog/madelineproto/src/RPCError/DcIdInvalidError.php": "73dc875a7ea6742f8379eafa84739023f09ab636a2c870ef535565e102d49b8d", - "vendor/danog/madelineproto/src/RPCError/EncryptionAlreadyAcceptedError.php": "093346557991036d5ae1d19e8df079b0a42ca3911e517ee860abbcd1dc54bfd7", - "vendor/danog/madelineproto/src/RPCError/EncryptionAlreadyDeclinedError.php": "beb0ec94dcd3da9e849d3752fe9d39c4c9522879292fd7447127de8f195939e1", - "vendor/danog/madelineproto/src/RPCError/EncryptionDeclinedError.php": "e4d114b6ac8c7c8797089b2a0ad09a8d2bd9ab7f8bf57df0a55f117552fbb751", - "vendor/danog/madelineproto/src/RPCError/FileReferenceExpiredError.php": "e9a0c84ac1137bdf2a0224287d0c5a2811a6b87558afa3a62e476624d792f839", - "vendor/danog/madelineproto/src/RPCError/FileTokenInvalidError.php": "93951fd0007c6e6e26241e4cfbf9b27b45f698fc2fa572aa53ba951fd34186c0", - "vendor/danog/madelineproto/src/RPCError/FloodPremiumWaitError.php": "c4ceaaae24a3d714190d7266ae805cf168e0d9c6eb97c45495e8bc9ad88695da", - "vendor/danog/madelineproto/src/RPCError/FloodWaitError.php": "b598cbc96f87461d001de438ae0482d493ab085040e0b6a854cf922b734bb06d", - "vendor/danog/madelineproto/src/RPCError/FromMessageBotDisabledError.php": "91687216672f9e844feb3acfb373899a71457208a0373d47a7597800f042f267", - "vendor/danog/madelineproto/src/RPCError/ImageProcessFailedError.php": "5e10edded27553fe9cfb106928687352f23aa263745660be6b2b38e40fe45e32", - "vendor/danog/madelineproto/src/RPCError/InputUserDeactivatedError.php": "1d027677ca26a40be438afd8a9875de721d4a124fb7d7b8735c89e6f436f5bc6", - "vendor/danog/madelineproto/src/RPCError/MsgIdInvalidError.php": "f34b7544e8c1e6963232ddbf658fbd7b3eb1c1dbfc0a5105228eb31f1362932f", - "vendor/danog/madelineproto/src/RPCError/PasswordHashInvalidError.php": "e09b30d163955d0c449e0ece25d4405d98e4d8ede8bb7012722ec0454a92c62c", - "vendor/danog/madelineproto/src/RPCError/PaymentUnsupportedError.php": "a526b7c350d36ed907f5f4c11ce01efa91dd15598069427a91ccc12bb213a35c", - "vendor/danog/madelineproto/src/RPCError/PeerIdInvalidError.php": "e34fe32c4c020cf9f4d9f146577516e3de7bf90b7921a74b72195acebb3a03ff", - "vendor/danog/madelineproto/src/RPCError/PinnedDialogsTooMuchError.php": "62fa919934e5713e6affeaffa78cbdc1996a4bef07be7b0c59ec05ed5b82e3ae", - "vendor/danog/madelineproto/src/RPCError/PollOptionDuplicateError.php": "bf24da52f0430968b9798e114da915eef4e4b42db72df0f07f4043f71076f157", - "vendor/danog/madelineproto/src/RPCError/PremiumAccountRequiredError.php": "ef0c402fed98a40a65908507415037df7e5c8338c95219f749daa987eb6bde81", - "vendor/danog/madelineproto/src/RPCError/PrivacyPremiumRequiredError.php": "bdf2f8f81a4c6870768029e582ec48f5969e3e944bf654969f017669ab4f8235", - "vendor/danog/madelineproto/src/RPCError/QuickRepliesBotNotAllowedError.php": "103604f857d73fc668f5963c0af6f62d5ee42fd8afdf918f9d9a6e9e4807766f", - "vendor/danog/madelineproto/src/RPCError/QuickRepliesTooMuchError.php": "fda32425b7939e46da2d38600bb61e3b8dfed45e1203fe8e7e7314932555fc3b", - "vendor/danog/madelineproto/src/RPCError/QuizCorrectAnswersTooMuchError.php": "260bc603fc0019e287ddfed1128fc7068d9d41853b33c86988f317ad4d343dd4", - "vendor/danog/madelineproto/src/RPCError/RateLimitError.php": "9a0dd5c5221e70657c6ca0aef54779c49e5c298e32eadb5d66d10959185601b7", - "vendor/danog/madelineproto/src/RPCError/ReplyMessagesTooMuchError.php": "9ec609ebc1ced8aaa90ab2d6b21fa5602b9b8fe8aaf5a6d36fda07518fea1bd3", - "vendor/danog/madelineproto/src/RPCError/RequestTokenInvalidError.php": "bd85ac34db8926e2ccf4499d32c0b208542036734f7a7a7aa39201d51f4b981e", - "vendor/danog/madelineproto/src/RPCError/ScheduleBotNotAllowedError.php": "2e2a32cb4d20c6f8f08e8683f75d92dc0ede1f284ebb56e8ea1784a15586d524", - "vendor/danog/madelineproto/src/RPCError/ScheduleDateTooLateError.php": "56e5f2763646c9c1e3b15526f1480feda5baa1c3e28d3c7d8058b0f4c0a12a51", - "vendor/danog/madelineproto/src/RPCError/ScheduleStatusPrivateError.php": "eeabb14e951293ccb3b30dac7bd0d5f7dfac65b4d1dd642d5a97c2a69bed3501", - "vendor/danog/madelineproto/src/RPCError/ScheduleTooMuchError.php": "d8a78b7c418d494eddf48351fe60eee7ba5ae4e0f33dc8839398fbe8f0f76fe2", - "vendor/danog/madelineproto/src/RPCError/SessionPasswordNeededError.php": "02844073bab77bb89375a78377572901534907d5b1f541afc61add9d20e8ac89", - "vendor/danog/madelineproto/src/RPCError/StoriesNeverCreatedError.php": "e9583e7bfe8ff3ffef83c97917bcd66b90d5f208c3f0a90ea11cb8298b625b31", - "vendor/danog/madelineproto/src/RPCError/SubscriptionExportMissingError.php": "d9f2250daa6f6789c6e31aca995ede2301d1ac1414f256edb44ac1c22b145615", - "vendor/danog/madelineproto/src/RPCError/TimeoutError.php": "27a843e6b9a5523a6d522534ee44e9b893129e16ae957e4de6ef1f9914bab9a9", - "vendor/danog/madelineproto/src/RPCError/TodoItemDuplicateError.php": "76d6e1205da1b8279109468bfcb5262726da670fcd97c7d7a373736b2f5ca483", - "vendor/danog/madelineproto/src/RPCError/TopicClosedError.php": "96ef2e691cf4dfbf032127be641f2b9c4c541357e0e736eaf9502c57b30d5c05", - "vendor/danog/madelineproto/src/RPCError/TopicDeletedError.php": "0c0b29de938f36718df59ca94a0d9f7d0f75ee9b28e14b48a2b23d6ff54645a3", - "vendor/danog/madelineproto/src/RPCError/UserBannedInChannelError.php": "9268992e0160ab91a9a0c225368bf408eec40438a9d2dc678470f12cdf254fe9", - "vendor/danog/madelineproto/src/RPCError/UserIsBlockedError.php": "86b82d82f6241d8f681d6929d674ec279d2ab149e9544dce9056df302a43396a", - "vendor/danog/madelineproto/src/RPCError/UserIsBotError.php": "85467e0d49d263d23b339cbf298c4719158d41a12251050494c8789ae35b7144", - "vendor/danog/madelineproto/src/RPCError/UsernameInvalidError.php": "51077174fb7df936b2660a630603a6f60a09e8c921d0c971840a2ca8f4ce98ad", - "vendor/danog/madelineproto/src/RPCError/UsernameNotOccupiedError.php": "3b92fa983aedf4f5e9d3f8c748843ebf10918230443bcefc7a0080d63437ec2e", - "vendor/danog/madelineproto/src/RPCError/VoiceMessagesForbiddenError.php": "2b69422c9a4722272c3a42a20825354927505f4cbc1e73caeb58acea90dd260b", - "vendor/danog/madelineproto/src/RPCError/WebpageCurlFailedError.php": "ea767dd422a09f790b04bd47b1655ac3c0aaa52e612df4edcec3baa7d2e3ebea", - "vendor/danog/madelineproto/src/RPCError/WebpageNotFoundError.php": "84e80ce55744c0d7a277db8ab1f30a0083f738e1d94197f4ed45fd32338ced48", - "vendor/danog/madelineproto/src/RPCError/YouBlockedUserError.php": "332a20bad385c5fe7bd93a121bd9d407bc265968b8373958069f40f43890eb27", - "vendor/danog/madelineproto/src/RPCErrorException.php": "f3c5d09d4ad2dad75d59fa249cb356a750da07a59ff3e95f2306c8f36d51ab4c", - "vendor/danog/madelineproto/src/RSA.php": "2bb0b4a21f865ad7d8fd7ab607a25684a6c6c35cb286e180252324186adaaab2", - "vendor/danog/madelineproto/src/Reactive/Actor.php": "e728795e055582e19239b1a69ffadba89b083dfb51f1713240210434c5152843", - "vendor/danog/madelineproto/src/Reactive/AsyncWaiter.php": "6ee85b026c20fbeeebf70a42c8e60413a48833eabd9378651f75ba08e3f1567e", - "vendor/danog/madelineproto/src/Reactive/BaseSubscriber.php": "62ca46a6a576309e07084715965cd9934e923b70b886570214e621507d6e23af", - "vendor/danog/madelineproto/src/Reactive/EphemeralSubscriber.php": "f15c49320bf2c153e16eb36b2f1fd5da7a2750d59bc67a75afae9a0cf406c951", - "vendor/danog/madelineproto/src/Reactive/Publisher.php": "ed68804d1d66ca9f736975653b085dd912f4e7f9eb2fdb20c333d74e4830bf0b", - "vendor/danog/madelineproto/src/Reactive/SimpleSubscriber.php": "84cce2b8c60c2248f306e4833a989f50147eca8568a951787f2e8cbd175956a5", - "vendor/danog/madelineproto/src/Reactive/SimpleSubscriberAdaptor.php": "b27329d049c9e17ca067f73852ded6c12b3349472a59308a348884321d9a986f", - "vendor/danog/madelineproto/src/Reactive/Subscriber.php": "82cb4b641eb8b81753aa8a442f283ba30115cd0f03ce32cad42074ac0f249893", - "vendor/danog/madelineproto/src/RemoteUrl.php": "b3540302c46df8e1ba09641a8e24291b7ecf2f38fbef058df380cbad90bc2c80", - "vendor/danog/madelineproto/src/ResponseException.php": "0868b8db671f8cf05625a18a348c63d3585ad645bc6a2c24122e7871d15dfe85", - "vendor/danog/madelineproto/src/SecretChats/AuthKeyHandler.php": "756d1694e6610042c5037759a837866de8f7b33482e2a41b3eec7b75021ef30a", - "vendor/danog/madelineproto/src/SecretChats/RekeyState.php": "8f88a0d09d5766ba31e214ad9861207ca7f79b221ed7b22d815405cffc6abb67", - "vendor/danog/madelineproto/src/SecretChats/SecretChat.php": "6d07c912f5be6185bc0e0e16d7366046278872dc6cd768ef7cd3b794bfab98d3", - "vendor/danog/madelineproto/src/SecretChats/SecretChatController.php": "c3abfcf400e7bb670355d5636618e45f9a0d0241892d0d160ceea199782fe109", - "vendor/danog/madelineproto/src/SecretPeerNotInDbException.php": "899ac1d649fc5093a969593ba4f619e69aae6cb0c29e2f4a2cbba92502901b1a", - "vendor/danog/madelineproto/src/SecurityException.php": "f4208a91bf6612a95271ad9573e18dbca341adf99c0aaf14b565c6751a098b6e", - "vendor/danog/madelineproto/src/Serialization.php": "62e8b4d02fb0a8f2b44fd2dc6d161b9bc47869e2907a9cb063e3722c5487cf9c", - "vendor/danog/madelineproto/src/SessionPaths.php": "83ffcfee4920ccebbc523d3595312abe1d0c998380e906063472f17245fdc1a1", - "vendor/danog/madelineproto/src/Settings.php": "e513f917db2d298fcf0aa8156dc85a132174e1795bdfc93fe5e28402009d3cd6", - "vendor/danog/madelineproto/src/Settings/AppInfo.php": "3c771e48fa256141f9923851c675bffc9344dd5af3d69dfbb41466d095fe7de2", - "vendor/danog/madelineproto/src/Settings/Auth.php": "7c0a4495f979c5a957ced7de700f660738d0f42a9bab43f8519108b733d580d5", - "vendor/danog/madelineproto/src/Settings/Connection.php": "d36e1c223a841745c0908099f0625404085dbb33fb05f39eaf49b00789b06473", - "vendor/danog/madelineproto/src/Settings/Database/DriverDatabaseAbstract.php": "81e3f7ad2148cd44f6e5c84dd07c167fe4ce406fd5a2bca2a31bf45fdc41103e", - "vendor/danog/madelineproto/src/Settings/Database/Memory.php": "e4e971fd5b3508180b04b9ad38b9ff01cdac984d4c0f7bdcff088a3041f9328b", - "vendor/danog/madelineproto/src/Settings/Database/Mysql.php": "c0af4d328a1b6071df40a3e8ccf12abf9db66596e78f3e89290260263bb04bc1", - "vendor/danog/madelineproto/src/Settings/Database/Postgres.php": "e25615513418078165dd3418363a767a6fbfd637d1e0e260da3847b4cc9683cf", - "vendor/danog/madelineproto/src/Settings/Database/Redis.php": "b77405aa00a37394099a6424c77ffae19dfbd7c40ad5d45f00a444b69973d0d5", - "vendor/danog/madelineproto/src/Settings/Database/SerializerType.php": "1a2a80030aaa719c1a7076d8fda433a0d1ab4b11345629bcb1625300c98d5ed2", - "vendor/danog/madelineproto/src/Settings/Database/SqlAbstract.php": "fd42f2c1e160af334f7b6de3681690913e4af2c5c513a5c5966908a5fb973b91", - "vendor/danog/madelineproto/src/Settings/DatabaseAbstract.php": "f86be5e6bcf2b5c366e21de960d34d36898995aacc6b08f6d49c3b8b26a668ab", - "vendor/danog/madelineproto/src/Settings/Files.php": "41459c1bfb782f892b3748891b5214490369d7a4ef095418da2a78b555e0195f", - "vendor/danog/madelineproto/src/Settings/Ipc.php": "137f4cd805ea1418383d8057bde6ed939f0fea0a08e6c57c67caa5dc85d71f56", - "vendor/danog/madelineproto/src/Settings/Logger.php": "153cb4353cd91f69ac080c3ccecbc71295602069446d8b02c21ca30be0b7b60c", - "vendor/danog/madelineproto/src/Settings/Metrics.php": "4f4b8955457b190d0bc37d94ef736dcbd236fd8512a2d57397fe09b1b02ad6a6", - "vendor/danog/madelineproto/src/Settings/Peer.php": "00413947aeda1a0a8dbda813feeaffa4f34f0a9f5142496759a83c94a94b16e9", - "vendor/danog/madelineproto/src/Settings/Pwr.php": "53fb76c3eb9da7bfc68b2bc7827dc703ba0f0517b54f9130622512474442c0c3", - "vendor/danog/madelineproto/src/Settings/RPC.php": "f13ad417e0ff02fdaf7d2865654e0c76122b1fc5f2b161f3c4b034bca210145d", - "vendor/danog/madelineproto/src/Settings/SecretChats.php": "606e8ecae982bd70eab9cb2ad29bc53d1f352c43f95d42576168440d14898f7e", - "vendor/danog/madelineproto/src/Settings/Serialization.php": "2a3b90a4639ea80726e9410d829b9f890d9d1b108f0dd4dd655c8a0b3ca4e322", - "vendor/danog/madelineproto/src/Settings/TLSchema.php": "09099fc5245bb60c273ba6526ff67187f2503fbd6c36071c212cde1099e98ece", - "vendor/danog/madelineproto/src/Settings/Templates.php": "ffdc0b5b9c7e156715435fb35e5234c1ab70ecac10b8b8c36755b9b2e4b7e9ff", - "vendor/danog/madelineproto/src/Settings/VoIP.php": "e2c94cb9f26472411594f6dee63f7cccb713ee466512efd256cff6f7747211cd", - "vendor/danog/madelineproto/src/SettingsAbstract.php": "17f534dcfeeadaeb5c1bc79b150ee53cd0c95a57b0a3c4d96318e3943a20fb52", - "vendor/danog/madelineproto/src/SettingsEmpty.php": "e916c8e45cb707b75ef39cd6f6b25ddf949c281661f21a3ccdbee50632a77e13", - "vendor/danog/madelineproto/src/SettingsGetter.php": "8d0335727ddc3d1e05d7faafc4445599564ae60fede619ec654314745142f7fe", - "vendor/danog/madelineproto/src/Shutdown.php": "f192d030c5e9106b7568445c74d9031cf702818836ac425e31c7984dcbe0b273", - "vendor/danog/madelineproto/src/SimpleEventHandler.php": "1b25145c677d6cde695c30eba0192c6fd456b0581b71751ddd8ab9c2ec33c2e7", - "vendor/danog/madelineproto/src/Snitch.php": "54dbc7a308bb85dfee8f460ff7773c0fc0e5bb6f316a1afe7fa2982323c3bd84", - "vendor/danog/madelineproto/src/StrTools.php": "c38221e336aa4b6c266cffd8b37bda1d73ce052ee14c3d2feda7b5107002c2b3", - "vendor/danog/madelineproto/src/Stream/ADNLTransport/ADNLStream.php": "ddda14c8ec9e9d2b29b53f87535674c8e4afb470a1e29b685df66daa0bfec42d", - "vendor/danog/madelineproto/src/Stream/BufferInterface.php": "0d731e9d1add72723ad0f83bb8fbe7ff99943de2018802e14ab190f03f89a7ee", - "vendor/danog/madelineproto/src/Stream/BufferedProxyStreamInterface.php": "6d1490c00b4324d9ebfdd511f9b65662b4225040c2a67bdc29eec823bf228b29", - "vendor/danog/madelineproto/src/Stream/BufferedStreamInterface.php": "4f5a7bde866f435430917f2f1a7ae2d56c05a94d6ebfce99590cc952a6c694f0", - "vendor/danog/madelineproto/src/Stream/Common/BufferedRawStream.php": "d9ce4bd9d8521f0d2999c85b9f9f6e5eaba1ab25826d5d0e268bdf89d308bc97", - "vendor/danog/madelineproto/src/Stream/Common/CtrStream.php": "99c5885c70c71a0c04517426724fc34296ca15104cec628c1b55df976be5d119", - "vendor/danog/madelineproto/src/Stream/Common/FileBufferedStream.php": "279ae32c7857c3bec36097642c2d3897916d2b189bf53e24f721660e8bb7fd3f", - "vendor/danog/madelineproto/src/Stream/Common/HashedBufferedStream.php": "400ea99b5be44c2743b602d31ddaac2a892913accbccbff3d9478ed7a16da88e", - "vendor/danog/madelineproto/src/Stream/Common/SimpleBufferedRawStream.php": "bff341a584248efc2b2ff3366c8476e5927f9b9e0e1ad12fc9796a73ebef9470", - "vendor/danog/madelineproto/src/Stream/Common/UdpBufferedStream.php": "59fca4d8548b56856f7f2ef216688e3f481de493d15498e51a9201923ecb5ad4", - "vendor/danog/madelineproto/src/Stream/ConnectionContext.php": "63a91951112add2b2596fb71004ce12333e04ffc24a3c3efc87b69dc10b624de", - "vendor/danog/madelineproto/src/Stream/ContextIterator.php": "e2240e9d5d6c51ce3c40fd41bfecc04122dc933f64ae22ef5d7f639d576f56e5", - "vendor/danog/madelineproto/src/Stream/MTProtoBufferInterface.php": "c28d167e56678a5df854a40eecd05d62c2a6274d722a1612934d9b2bf375ca29", - "vendor/danog/madelineproto/src/Stream/MTProtoTransport/AbridgedStream.php": "7149590c867adac769a9f9b0b53aab7d5969f52eb4d9eaef0fea65fa397eb541", - "vendor/danog/madelineproto/src/Stream/MTProtoTransport/FullStream.php": "ecfed578700c3b3e6d2fab9c7a3174f1903a7702542d06b4c4e71698dc76358f", - "vendor/danog/madelineproto/src/Stream/MTProtoTransport/HttpStream.php": "f212ae1d43ed639f1655590c616d3fec483b5f311d2ab42c149b3c9320ba3f6e", - "vendor/danog/madelineproto/src/Stream/MTProtoTransport/HttpsStream.php": "aa40eab78cf7594915428e827d94e0ac390906a77ec1dbee6359966e2b3c53cc", - "vendor/danog/madelineproto/src/Stream/MTProtoTransport/IntermediatePaddedStream.php": "c7cfba6d48a48d586b2b2557384bbad4a606f8a5fec20ac8f510910449445d39", - "vendor/danog/madelineproto/src/Stream/MTProtoTransport/IntermediateStream.php": "5645a22e7a0dfe132a1db2e6d476e99d4905906bc3635f555d2d9d9799dffc09", - "vendor/danog/madelineproto/src/Stream/MTProtoTransport/ObfuscatedStream.php": "a049e2bac885397e95b98223d9ad46d495e3010e0a1df333b98565ffa2566afa", - "vendor/danog/madelineproto/src/Stream/Proxy/HttpProxy.php": "d2ffcf3e167ce8c57db0a9f0445730d16ef3f870cf0e658989ec287ee5479230", - "vendor/danog/madelineproto/src/Stream/Proxy/SocksProxy.php": "0fdd91794ef4b6a07c2afac1ac22bc875042f432b98a3d515fd749fa744b112a", - "vendor/danog/madelineproto/src/Stream/ProxyStreamInterface.php": "617bbdeac5d52563aabf07486cd32ea2df5394b6e7c2d16f097d7b79a59ec090", - "vendor/danog/madelineproto/src/Stream/RawProxyStreamInterface.php": "216bdb48706e25b9c534a77ac06638128c6d659d662167107bde974dcf44679f", - "vendor/danog/madelineproto/src/Stream/RawStreamInterface.php": "3ccaf626ee8de87d3f0ae60b3a00dba2e49d65545a2693a7cd7fd0ef65687997", - "vendor/danog/madelineproto/src/Stream/ReadBufferInterface.php": "b2b7b2dce7b13ace284d982cd95750ef7833141e516cca4137cb109d478cf61d", - "vendor/danog/madelineproto/src/Stream/StreamInterface.php": "c947c20e3b60a90fd3ff2990c565c44ef74b0296978b741f0a6de1399ab5edf1", - "vendor/danog/madelineproto/src/Stream/Transport/DefaultStream.php": "778be4d17ff38714403e6c7e544733bedb300181cc84966bc8018d31fe803bf7", - "vendor/danog/madelineproto/src/Stream/Transport/PremadeStream.php": "88a750f8ba28a63e39eebb8f0f51cfe85602517fc2f66fc54dd7be367b6ca9de", - "vendor/danog/madelineproto/src/Stream/Transport/WsStream.php": "b92b86952ca9955162a2e8cb66194fa1611e3325aef5cf79f323306d45bede87", - "vendor/danog/madelineproto/src/Stream/Transport/WssStream.php": "ea40b03648b4035348dc72208c1dac0b916267d42a74bc6f7a0ddf82e5e50ec6", - "vendor/danog/madelineproto/src/Stream/WriteBufferInterface.php": "6edea78696bb36e8aded4538ec27fc2ab105656aba32f9497bd68bc4df78b72c", - "vendor/danog/madelineproto/src/StreamDuplicator.php": "422c03509a5a6925a433f7fef7cc9e9e506e80d6a48537341349bbe3eba6c724", - "vendor/danog/madelineproto/src/StreamEof.php": "1b4c3b734181de5b2a40f129db69680216de98a280b7a6e2b888ccee21c4776e", - "vendor/danog/madelineproto/src/TL/Conversion/BotAPI.php": "ae3f544958e7c88410a73071aba4356c42e2d9550ec20dbf7b3eae9fdfbea0f6", - "vendor/danog/madelineproto/src/TL/Conversion/BotAPIFiles.php": "2bab2995ac7855587b111e7b88fb2501dcc809f0eeaf57d943c698d122cc4077", - "vendor/danog/madelineproto/src/TL/Conversion/Exception.php": "521a4b9b04af18b57aeed929875f3145811c0ae4e4e6ec614a6c3e58e7c477f7", - "vendor/danog/madelineproto/src/TL/Conversion/Extension.php": "91992422a233782eb9c98a87b843505aee8cec19889b8963340d9d7bd98fa1e0", - "vendor/danog/madelineproto/src/TL/Conversion/TD.php": "1ab2ed9ea1de1602263f7d138cc0986811b31c984bc8b8b8d939893e9c0354d5", - "vendor/danog/madelineproto/src/TL/Exception.php": "ffae9e9eb3dbc6caf376fb356f53f3db8268b8cb3812d7c369c35609afebd895", - "vendor/danog/madelineproto/src/TL/PrettyException.php": "c16a618cc11e9ac767a2f595dcbac057f73528e467571a6858c1517224e39b94", - "vendor/danog/madelineproto/src/TL/SecretTLParser.php": "4aa9a21aec5434ea74aa36c3b31ca9365179b32bf9f6e24805705dd43c30d8d9", - "vendor/danog/madelineproto/src/TL/TL.php": "8bbbadf526c007d43f6ad489270f56859f1dded86006b17b6903d5c103a25745", - "vendor/danog/madelineproto/src/TL/TLCallback.php": "bf8982aeaef4683f4f98ce2d5c49f578ef74dc856c86761a99ff2dd88e1bae93", - "vendor/danog/madelineproto/src/TL/TLConstructors.php": "590b747bc3e86c844ea558f70745c3361311a82d080c1d0a9a3527ee1f522cad", - "vendor/danog/madelineproto/src/TL/TLInterface.php": "4d6f71ce549ef91c6f64238111463bfe99d5b9e4addc4554446c53666a5718ad", - "vendor/danog/madelineproto/src/TL/TLMethods.php": "e5536caadd1ac04dad6b6a092266a5e588f090bc3f02ba55b6d09487a53f9054", - "vendor/danog/madelineproto/src/TL/TLParams.php": "39bb62eebb39e7ee7c43d75b377c89251c786d1bc036b42467188ab22136cfdb", - "vendor/danog/madelineproto/src/TL/TLParser.php": "98c0c7d454e76cd8c144f08accfd8f67a1ced14baacff2732d4a108a5ea1ea86", - "vendor/danog/madelineproto/src/TL/Types/Button.php": "cc7a805fc06f97db614924c6a629ea9636b40c8bda9eb9dc96fb2758697883ea", - "vendor/danog/madelineproto/src/TL/Types/Bytes.php": "0ba962f893026bc03c94173d88c65765542c8f73f155e8ef79e9de15a3498e70", - "vendor/danog/madelineproto/src/TL/Types/LoginQrCode.php": "1be027a9918666a19b8988a13e131fb8606d0e39394d665ae8ef4a7ec4a4c8f7", - "vendor/danog/madelineproto/src/TL_file_ref_map_schema.json": "118fa46b8a12dff8e4ac1545d99f39a0c261a1cd0d375ad52adb27a70072bece", - "vendor/danog/madelineproto/src/TL_file_ref_map_schema.tl": "1bb333123d34d3598b50cd5fca7445c9e0347bdfc78955dc71cf543262ac4dce", - "vendor/danog/madelineproto/src/TL_mtproto_v1.tl": "a68bbcfb6aea699cb394aec44008b01b915f1e8b632a1d786001ddd7c7300dcd", - "vendor/danog/madelineproto/src/TL_secret.tl": "899beb4c1713a65c9f09677dd93406a1e96c52b661d46dcd30ac7c0a87b0d20c", - "vendor/danog/madelineproto/src/TL_telegram_v225.tl": "539272f5ad8992ee97b61bd134fcf3a28a41ce720e806d0e7dc0e2e408c581f9", - "vendor/danog/madelineproto/src/TextEntities.php": "1b2f89fb1280db4670c548ae605ea1d65f330636cfba73b356d404b5e2e8a78a", - "vendor/danog/madelineproto/src/Tgcalls/Controller.php": "5e9288bac2473f3e747091af5f830a3d5c2406fbcae9810eb27c6ae6fbfae4dd", - "vendor/danog/madelineproto/src/Tgcalls/TgcallsTools.php": "80af031de6254582b4acb5ecab77c9c409a05487006fe43e3baa864e9017963a", - "vendor/danog/madelineproto/src/Tools.php": "5f0e873fa1fcc39b056f6a0a828590036b79c8a6941816bc8809eb7df8ff5b26", - "vendor/danog/madelineproto/src/TransportError.php": "ca8c1681243f48dcf5fde4c88d134d42d104b60da8b2114921f7b4ba9d7b8847", - "vendor/danog/madelineproto/src/UpdateHandlerType.php": "c97475bf79cb88d30d2728ce463164fcbab683872226ac04bfb48a36c55c4bc3", - "vendor/danog/madelineproto/src/VoIP.php": "63ac4ee2579875ebcb3eeedae8b5f7089239a9e4a94bd67761f60688654c9217", - "vendor/danog/madelineproto/src/VoIP/AuthKeyHandler.php": "d23fef2974eae29abf4a042ec11c581cb78f27f40a756990d7c6298cc8d868d8", - "vendor/danog/madelineproto/src/VoIP/CallState.php": "4ce9ee3f3680c7bd48139de843f160fdd3cdd142fdd8b882c40c619f5ffacad1", - "vendor/danog/madelineproto/src/VoIP/DiscardReason.php": "c488208e8ff11d2bc2f70b822007090cb4fd21342df5a6f931af70492d961e1c", - "vendor/danog/madelineproto/src/VoIP/Endpoint.php": "bd075cac19121e12eb25c25c19d14bcb6d2d5187ad89ffac034034cda530833e", - "vendor/danog/madelineproto/src/VoIP/MessageHandler.php": "ebb4ab66100cc45b249d174a7fc016adf29ee3b4f1e53830a25f952e474d7d7e", - "vendor/danog/madelineproto/src/VoIP/SignalingProtocolVersion.php": "f368d9775f1ef6c8de764a43d92dbd1f4ad241e0a840d581f7c42000dc27754e", - "vendor/danog/madelineproto/src/VoIP/VoIPState.php": "de6d6944f8449c9cef3ed2a8160b2952104775f8f2bf5c222fd82b3e02c1a195", - "vendor/danog/madelineproto/src/VoIPController.php": "279bec3afe27a9612ca24b470347aca5d170a0c6f367ea25ad6d1a6c5296045b", - "vendor/danog/madelineproto/src/VoIPServerConfig.php": "1bc779959016c16bacee0771a3f76ee0789ba38c14b6120706afab32bd7f0d9f", - "vendor/danog/madelineproto/src/WrappedFuture.php": "dffd8749f990bd8baf8e3c3f750bae1b7e60526a8a2af3d49ccd00401c3da0c8", - "vendor/danog/madelineproto/src/Wrappers/Ads.php": "b15d6f0e8c32b5d48b71192329baaab9c41024e9e61772437a0e542afb00183d", - "vendor/danog/madelineproto/src/Wrappers/Button.php": "202739736b5631d7d61a181e161bff4e0897203501785e9c65c256bc1b64734b", - "vendor/danog/madelineproto/src/Wrappers/DialogHandler.php": "81c042686d66fc06c002c6aec7063dafd0c3a6710f480a6c612c4f1b3d2a24f5", - "vendor/danog/madelineproto/src/Wrappers/Events.php": "47492034150331939108f0f7ccda3c4f1eff87d7a2a149517a8f55e20e72697a", - "vendor/danog/madelineproto/src/Wrappers/Login.php": "e500f51603db0a981bb6c658b2e7912bf504f41803ac0f77d10dfbfa9fa20cd5", - "vendor/danog/madelineproto/src/Wrappers/Loop.php": "642c74c34bbac92670aa7398029ed01254ce8a005b07c280ecc6b5f3ff830ab1", - "vendor/danog/madelineproto/src/Wrappers/Start.php": "339df607ade1781bf01128e9847b456da3c90c8b05d589b4a3fc0a6a7bc02c65", - "vendor/danog/madelineproto/src/empty.wav": "51ae0ca177e97f8412e667fefb20f1a3b45c81cc59ae96c252adb6c7cd7c32fe", - "vendor/danog/madelineproto/src/file_ref_map.dat": "6f62c4ed620c5c6182c7e23b9373402f832cfc9400de70ee37c3a7c9752f9dbb", - "vendor/danog/madelineproto/src/file_ref_map.json": "bbd2aa2593ccfc73638b82a7d9fe0cc116a1e97e55ce8268233ef4d13c233623", - "vendor/danog/madelineproto/src/polyfill.php": "d6682a66d28c1ffaa7703a111248e372e06f41a3fb2f599e89ad356bc2305daa", - "vendor/danog/madelineproto/src/v3.json": "d09f26354bb9f284ebb7dc7a573375aec1ffd8720b4d4d1ede84d990fdd40a25", - "vendor/danog/madelineproto/ton/lite-client.php": "9cd0e8901db27677a718e07b4daeaf2b5ff81a59fe764e8096f879f9df6cf738", - "vendor/danog/madelineproto/ton/ton-lite-client-test1.config.json": "4d754a87d953e418dbbcfd505e5aaeecee8d28ee6df0247ff024b40c0a2352a5", - "vendor/danog/madelineproto/ton/toncustom.json": "9f2b14a027fc04d2eb191670793c1c7a4e2397e1622ee470abda0305d648e799", - "vendor/danog/madelineproto/vendor-bin/check/composer.json": "c3fdb4aa6c34b4d503d7f7c86ab764f611abaf3d947e3b8011544947b95c6bc6", - "vendor/danog/primemodule/LICENSE": "57c8ff33c9c0cfc3ef00e650a1cc910d7ee479a8bc509f6c9209a7c2a11399d6", - "vendor/danog/primemodule/README.md": "3a373bbaf15261d728a33c51703baf61aabc7b4b8fdece5d883646c1c2706094", - "vendor/danog/primemodule/composer.json": "4839a05cd9716afa67a46bd5ee688e865a56cd08592a329dc649b16228a54922", - "vendor/danog/primemodule/lib/danog/PrimeModule.php": "2e45e278701b84b8507d95a6962b01edcad10ed9b278ecc35718543336f819bd", - "vendor/danog/primemodule/lib/danog/alt_prime.py": "ec63d5de8cce42908bc8bf1043626c552c7eae5318658217a1093d093b199bfc", - "vendor/danog/primemodule/lib/danog/prime.py": "5dc87da7b6dec039a55c3a494bd8aee60316ef6b102e4b0aabdc9b3bcccb0e03", - "vendor/danog/telegram-entities/.github/FUNDING.yml": "d32aff5b00bb9eae134a36c19ba9680f222d4aa62d4af8b1e349769fe98e85dd", - "vendor/danog/telegram-entities/.github/workflows/main.yml": "6010467e3b630254e291d8757b96af7a0c92b17b8460860bc4fd2405068eaf0d", - "vendor/danog/telegram-entities/.gitignore": "1920173c7c1839363833a34e3ba921b51b2f73933e7cc98b85ae710599201130", - "vendor/danog/telegram-entities/.php-cs-fixer.dist.php": "9b6af1b5d3d4d5f1c1bc495bd5fd0d5fe6a9bb2c3fdfc546c3c074a4bc82b717", - "vendor/danog/telegram-entities/LICENSE": "8c6db340475136df3c1201d458fa5755698eace76e510471ecc9d857d6083dac", - "vendor/danog/telegram-entities/NOTICE": "6b4a79f5f9cfaff020d4ebe1c3979f089e22f0bc6c0bffc697fe13d08dba0dc6", - "vendor/danog/telegram-entities/README.md": "24fa4ee0df49395fc81f073d04768f31ca4f7da8255c84d5a958152ef8503933", - "vendor/danog/telegram-entities/composer.json": "343466d498053a1c2dbf808e0424f35ae39b7bb54744d58dd2fa808514e554c7", - "vendor/danog/telegram-entities/docs/docs/danog/TelegramEntities/Entities.md": "7ba231eb75ffe2ab3ed93c09e6f8de043651bddd24dc348b3dc3abdf7b1127ea", - "vendor/danog/telegram-entities/docs/docs/danog/TelegramEntities/EntityTools.md": "3a9864790bd7d1ff898e55d3b37419e1c47c941d3f13a7107abe7a45fd713ca7", - "vendor/danog/telegram-entities/docs/docs/index.md": "b2fe478d2abfd324a56f7f92ff6cf629ca1b4382d6f719b0baba7a27dfd26e3b", - "vendor/danog/telegram-entities/docs/index.md": "dbcc210d7f4962499db6d4cfa18658e26d05ee700c962a811cac911f095e22fd", - "vendor/danog/telegram-entities/examples/1-all.php": "7dc031e01147d4cefe7ebd5034dc5548e2307eb19aad74d2964487dfc0ac6cd9", - "vendor/danog/telegram-entities/phpunit.xml": "c87eebd760a64038c4bc2a73ef99d102417632d6446a63b36f1292f132e00735", - "vendor/danog/telegram-entities/psalm.xml": "ff29a0c349a6866df89812b508a0a47e4c5ad6ba87f86532fad416e89d122981", - "vendor/danog/telegram-entities/src/Entities.php": "60cdc08246f1618e395a34f8abf0ae15faac9f117d3a7b8dfaf7f8c68aaaa504", - "vendor/danog/telegram-entities/src/EntityTools.php": "ca43d18fcdaa0f70f78b089f389b69b091b45bdc2df5dc203bb9b85bb3ee8057", - "vendor/danog/telegram-entities/tests/EntitiesTest.php": "008159f03ae3c894def8ad04ccc175f7072c17bd3f607bfb835acda4bc90db94", - "vendor/danog/tg-dialog-id/.github/FUNDING.yml": "d32aff5b00bb9eae134a36c19ba9680f222d4aa62d4af8b1e349769fe98e85dd", - "vendor/danog/tg-dialog-id/.github/workflows/jekyll-gh-pages.yml": "8028ba1bdddd05938c52b2ebd46a4c35e45aa595b5d4886731f053532c4cc0a9", - "vendor/danog/tg-dialog-id/.github/workflows/main.yml": "99c335301ad5cf8ba3943c840cd519988e8c2e195d9282f6bb01496b3c19f17e", - "vendor/danog/tg-dialog-id/.gitignore": "07a3dce1cb3bf20bc80f241d44d279016a2eaed2a3616e14ed58bc0659368df6", - "vendor/danog/tg-dialog-id/.php-cs-fixer.dist.php": "d9b2ec5552c8a0147b02eaa486d00b276a47593207f57b3c3bdcba762cf576f7", - "vendor/danog/tg-dialog-id/LICENSE": "8c6db340475136df3c1201d458fa5755698eace76e510471ecc9d857d6083dac", - "vendor/danog/tg-dialog-id/NOTICE": "c23abfc407dd639c3136e3a12451688d68d7f9957b43ecbcedefb2cf5757086e", - "vendor/danog/tg-dialog-id/README.md": "f1ee1bf7f23be0eec82522c3486ebcf6975abf7ba6542c6a35229ad242f6e14d", - "vendor/danog/tg-dialog-id/composer.json": "ec322bb7f597046139ebc16dfb458989ad7f5c8afcbd9d0b8d8f6c0bac362da3", - "vendor/danog/tg-dialog-id/docs/danog/DialogId/DialogId.md": "7758af005201c55ac67bcac7df60fb930995b2723380c47b807c51092597cf6c", - "vendor/danog/tg-dialog-id/docs/index.md": "48315f773331db2f96d449cdffbd1d7aa3955c066997a9b6007d2585351ce8a6", - "vendor/danog/tg-dialog-id/examples/1-type.php": "820e2583d408c8ead25788e53ea11dda1958c9997e268db5991d09ee5f4aa1b9", - "vendor/danog/tg-dialog-id/infection.json5": "3b538f5bb45bb64fe762fecc09748354037149da3f4c6170b183b07b791f7ec2", - "vendor/danog/tg-dialog-id/phpunit.xml": "6ef6a824fb67a258d1ea16a18dca3b773881095d2cc0f6da1e4c9c35c43b524a", - "vendor/danog/tg-dialog-id/psalm.xml": "1c2f56e8bc8355e3913878e2b6b51a18fb2c343851d5866cb91c9658436eb7c1", - "vendor/danog/tg-dialog-id/src/DialogId.php": "30792dc368c8861f14b11a2936cce1cbba00e0c9f478f4a7afef6682c40d0022", - "vendor/danog/tg-dialog-id/test/DialogIdTest.php": "3ed6d781401bc3c113b40bb1d643f87a80d2f781dd12c320de68452f004c7e0b", - "vendor/danog/tg-file-decoder/.github/FUNDING.yml": "d32aff5b00bb9eae134a36c19ba9680f222d4aa62d4af8b1e349769fe98e85dd", - "vendor/danog/tg-file-decoder/.github/workflows/main.yml": "ed9854087a1d93007f146a670e8c85bf3618d5f8bd66965cfa22d908a0f2b9c8", - "vendor/danog/tg-file-decoder/.gitignore": "e8af7f56969ba03e540975858d268e192458f783faf57e03f3cc9fed521e8314", - "vendor/danog/tg-file-decoder/.php-cs-fixer.dist.php": "3b188ac5a4675dc6aa321dcd0062d6ec78ee05dbbc39e3f4214896c829226cee", - "vendor/danog/tg-file-decoder/LICENSE": "57c8ff33c9c0cfc3ef00e650a1cc910d7ee479a8bc509f6c9209a7c2a11399d6", - "vendor/danog/tg-file-decoder/README.md": "59324f260fb46ec3009876bad38287497908c38a27f0d759c5b8350f2ea62b09", - "vendor/danog/tg-file-decoder/_config.yml": "91330137f6537697be5cf6f4f05651b945d920325cbea69601d95e3d06a68019", - "vendor/danog/tg-file-decoder/composer.json": "ecd6e3608728b89fc5c75762cd825516b146204777008fee72ef608133788093", - "vendor/danog/tg-file-decoder/docs/danog/Decoder/FileId.md": "f5e3ff02c7ca8af282e2ee67d204758f9d190ad9dd7fc4b503cfe8da98a4458e", - "vendor/danog/tg-file-decoder/docs/danog/Decoder/FileIdType.md": "faf0463b4805b7ea51413dcc64c8494f6aab8622bba30a6dac9012336033a11f", - "vendor/danog/tg-file-decoder/docs/danog/Decoder/PhotoSizeSource.md": "47f89aed4aaa8e4f04e85d20f87c831a0c08c87898bc7256c33cc1e083b08c49", - "vendor/danog/tg-file-decoder/docs/danog/Decoder/PhotoSizeSource/PhotoSizeSourceDialogPhoto.md": "19927c5b52cc837740a4ab1c3b4c08dc716415e69d8363b1c0b2185df8783ff4", - "vendor/danog/tg-file-decoder/docs/danog/Decoder/PhotoSizeSource/PhotoSizeSourceDialogPhotoBig.md": "a2d883c8a37bee84018393a191e640f5286fa3bc8d07e93e9f008afa9d04b0bf", - "vendor/danog/tg-file-decoder/docs/danog/Decoder/PhotoSizeSource/PhotoSizeSourceDialogPhotoSmall.md": "de69b552cdda7001a5c15af2d0858ffd8aace32b94a063b6cc0385bb840bb0be", - "vendor/danog/tg-file-decoder/docs/danog/Decoder/PhotoSizeSource/PhotoSizeSourceLegacy.md": "3e5cd8e56ae4adca4f13f70d927f53073c6915379ec3b55d1897771f45b74291", - "vendor/danog/tg-file-decoder/docs/danog/Decoder/PhotoSizeSource/PhotoSizeSourceStickersetThumbnail.md": "934175aedc10bf42292845aca51fc8a5730dd5fe4750b849dcf6c035fb57bd57", - "vendor/danog/tg-file-decoder/docs/danog/Decoder/PhotoSizeSource/PhotoSizeSourceStickersetThumbnailVersion.md": "4725de50bcd096e04e8b73573466e40a7d24d784e504cb9decf85c2daa1b0f9b", - "vendor/danog/tg-file-decoder/docs/danog/Decoder/PhotoSizeSource/PhotoSizeSourceThumbnail.md": "24df1b04a2839d00e31a517f2b03740f2ec1192470e53a892ab1a1af8668377c", - "vendor/danog/tg-file-decoder/docs/danog/Decoder/UniqueFileId.md": "b7e8f05dbe68b9f008fc436248e066e710a947731ba3af0ccf958d4084f85122", - "vendor/danog/tg-file-decoder/docs/danog/Decoder/UniqueFileIdType.md": "4c89330bd9be0f4f1968978532c82887c658c248e3e57e3f6572bf88c13b9f4b", - "vendor/danog/tg-file-decoder/docs/index.md": "7514947fa637e222f53018117208053a934d83501d30e87dfcb201edb579584c", - "vendor/danog/tg-file-decoder/phpunit.xml.dist": "e371261a973b8e60b35d89c90797953c494283a6e44124a47e01e4a34cc66f1c", - "vendor/danog/tg-file-decoder/psalm.xml": "514e73da9bbfde7c9788194d653ca785f1ae1400309235f81f8c05696ff62e6a", - "vendor/danog/tg-file-decoder/src/FileId.php": "10ffdb1f95b8c2a337775fe754d217fffe6dbe84e5c8668e226893b9e8234324", - "vendor/danog/tg-file-decoder/src/FileIdType.php": "7697b8939c3b8e8be1648a270dda03e3472c0aafa9640dff44ac89ef57c30664", - "vendor/danog/tg-file-decoder/src/PhotoSizeSource.php": "00b4039820ba3bd15c0b5caf0bed387f6aaa3d031ebd52a378fa932413f8f700", - "vendor/danog/tg-file-decoder/src/PhotoSizeSource/PhotoSizeSourceDialogPhoto.php": "8b09d9c61844bc7117df0ca5ec30300e28d4c3a6a905d9ef8474d96174bc03e6", - "vendor/danog/tg-file-decoder/src/PhotoSizeSource/PhotoSizeSourceDialogPhotoBig.php": "8d2c8960b43f5c883efd5b0dbcf6e7b1fa9b22efa9f76b652150e541e1a5ee5c", - "vendor/danog/tg-file-decoder/src/PhotoSizeSource/PhotoSizeSourceDialogPhotoSmall.php": "fab00b72e22985de261db564badeb19e298277e77063c27331c7cc67cafd5939", - "vendor/danog/tg-file-decoder/src/PhotoSizeSource/PhotoSizeSourceLegacy.php": "086676b2a8c2f23e661dbee44d522e5d227378171030fea32ab6aa067909d4a9", - "vendor/danog/tg-file-decoder/src/PhotoSizeSource/PhotoSizeSourceStickersetThumbnail.php": "7d1b6014e5d14eb2dd3b31326b03ca931001f4810aa6789bf92ff21529288e43", - "vendor/danog/tg-file-decoder/src/PhotoSizeSource/PhotoSizeSourceStickersetThumbnailVersion.php": "60db678b4ca511f6d44f1370b9be250b946a9c502e8170f1db28fd1b1a2509e1", - "vendor/danog/tg-file-decoder/src/PhotoSizeSource/PhotoSizeSourceThumbnail.php": "52f3fa6ee258bc5f08ad618f9cf3ef005bcd9240830ce3a8ee19bee71a64ff7f", - "vendor/danog/tg-file-decoder/src/PhotoSizeSourceType.php": "58990d916bfb937d4531d97d87003f3c08cda3cff5a6c641d7356e5589ea265c", - "vendor/danog/tg-file-decoder/src/Tools.php": "56531dd3ad386646a655a737cb770b0bf6501827ff78afe46c3ab352e69006a3", - "vendor/danog/tg-file-decoder/src/UniqueFileId.php": "feee846be3c07449d8266c49f5e4e298458ed4524e9f659df1787f53fb406228", - "vendor/danog/tg-file-decoder/src/UniqueFileIdType.php": "9a0528997839383b6778fb5a5f7d458f756a5105026e4b75813007429be207e9", - "vendor/danog/tg-file-decoder/tests/IntegrationTest.php": "87f3f954e9241be594dc77bf5614cf3bb59245a386cce50c16f556ddeb2be08c", - "vendor/dasprid/enum/LICENSE": "6748d0268a176f839bfa1031724f9ce0963acbdadc71e503c2c3e9b59c8fcd68", - "vendor/dasprid/enum/README.md": "1bafc44d59b9d75e95ac0d52c72ca94d9d1129dda2761bf1922f9e235b30bedd", - "vendor/dasprid/enum/composer.json": "806922540285ebc6013d9028bbefbfb3d9ab47260c1138fb0f01e38d9c1ec1df", - "vendor/dasprid/enum/src/AbstractEnum.php": "1c2d7baa5e2a9c9b9419ee6b1e49e5af35229c51ef9c77c489b087faaa6e0040", - "vendor/dasprid/enum/src/EnumMap.php": "449f605b743700e428551a7adcf50898d002a3839524982f27a52224fb456a73", - "vendor/dasprid/enum/src/Exception/CloneNotSupportedException.php": "a3c266842dcbc83fa57a7d4ba7314cd2c4e588d5f7e2734619b343b201f9a08e", - "vendor/dasprid/enum/src/Exception/ExceptionInterface.php": "990c3de69010a72dc796c37d27c9ec3df312989e46332d3344e96810255e0359", - "vendor/dasprid/enum/src/Exception/ExpectationException.php": "07874b69ba61b438a22a719d7718de7e2f17b1f7126ffbf92f56b5a5d2239d68", - "vendor/dasprid/enum/src/Exception/IllegalArgumentException.php": "f5523323e738118b46c621b04bebea3b779745fc1c4dc4318cc81d69832dbd41", - "vendor/dasprid/enum/src/Exception/MismatchException.php": "973256edaee9b540eb63a3901d82b53a4516f5eb2387062c16da29a797f03845", - "vendor/dasprid/enum/src/Exception/SerializeNotSupportedException.php": "d6072d330097ef643df673c5c40c51729a4fdbd0aa197980ba8d8d53efa11ba9", - "vendor/dasprid/enum/src/Exception/UnserializeNotSupportedException.php": "c0b225b1eab0b0cee0f11f473a7ff935697e55ad267a6eca27234585a2963c6e", - "vendor/dasprid/enum/src/NullValue.php": "c2e503fab5e76a21e5e6bf45954780a8759d0c6ae7d13ba09f0a7c3d37b0e838", - "vendor/daverandom/libdns/.gitignore": "57ebde75eecfa37c939fe59ea9128a310e5281c80063a54fabb0759cda0d10d1", - "vendor/daverandom/libdns/LICENSE": "3378b771ef8e0b6e09d1a5dd7d3daeaf5b06a41f8cf7ab43f20df3b646c18dc9", - "vendor/daverandom/libdns/README.md": "0cc13271cd4697b9ab2a6f9c163e78b565375782a696e3161894ee2583f4a26a", - "vendor/daverandom/libdns/composer.json": "82ef92de60c96b3e34000ddc55afceb979f126a55399d83bdda6945ce0a5996f", - "vendor/daverandom/libdns/examples/AQuery.php": "03bd9608d2a22ca11f99674833946941a3166e7235c0bb13c57d4bfbfe8c80c3", - "vendor/daverandom/libdns/examples/SOAQuery.php": "1bce75ba3008c3898c6136ab7f83d4349a724393fbecd1cc71c6bac3931f75d5", - "vendor/daverandom/libdns/examples/autoload.php": "8112f50a346b6ec30f5fd33a4bccb6ccf1c9df566dd67fffb46e42a23a9fe7ad", - "vendor/daverandom/libdns/src/Decoder/Decoder.php": "4d46344b6fc7ea61f5d3464ad1a82774dabc7b08421c8119a99cf29a5c0a4b1b", - "vendor/daverandom/libdns/src/Decoder/DecoderFactory.php": "c3afd98ca5b0b0ac408ac4b507b895827315832a389ffde1d33538bbb6242510", - "vendor/daverandom/libdns/src/Decoder/DecodingContext.php": "3741c1944a749847441d3bf033d04a2e34647d461e7c4370b6c7b5bdacfa0d1e", - "vendor/daverandom/libdns/src/Decoder/DecodingContextFactory.php": "7312ec160309332b586fe35862478357d09aa9faeafed5ad0f60791d11194589", - "vendor/daverandom/libdns/src/Encoder/Encoder.php": "fc77ee170272f8db0067f8de197786425a31c5c4423fc5d83faaee255ccb7394", - "vendor/daverandom/libdns/src/Encoder/EncoderFactory.php": "9213f4ffff192477cc85ad8751db12e2f2f0cb311c72f2cf367e8d835092cd9e", - "vendor/daverandom/libdns/src/Encoder/EncodingContext.php": "00f9ffe516deea706063c6745b04304af119563e827c4d24028fd1af5fcfc421", - "vendor/daverandom/libdns/src/Encoder/EncodingContextFactory.php": "b3d7541dc849cafb9fbb59f752987e0d2d0de13edebb6f2192cc3eee22043923", - "vendor/daverandom/libdns/src/Enumeration.php": "389dcb4728f8a1aa61e471e8f5eb9d84ddd8cd4edcf3c20e4649f046fe996802", - "vendor/daverandom/libdns/src/Messages/Message.php": "697185a067dd97c50ad8a5af4daadc1b2a30834a1b22c2febc79a3ba0d33fa1c", - "vendor/daverandom/libdns/src/Messages/MessageFactory.php": "b7b02a324548411eb0276365fdf0fda3990d9257bab5fef1e83c4f2005153c79", - "vendor/daverandom/libdns/src/Messages/MessageOpCodes.php": "286c9e7fe42a91583a4250d575dc605c9619aab2f6c521743b19fb1d9efdc3f4", - "vendor/daverandom/libdns/src/Messages/MessageResponseCodes.php": "1e647313ffe21456cf2739c715e1931521bbd907b61e48a6c21944871dd0a074", - "vendor/daverandom/libdns/src/Messages/MessageTypes.php": "2954cc718d458db6c5c3cf48b37aaf314e287fd133ed01e5eb3b74cef25d50c5", - "vendor/daverandom/libdns/src/Packets/LabelRegistry.php": "c5ac1c96c9b29d698f159dfc0c7b8a42ce8c89dbb96b4e78b949636f27aebd90", - "vendor/daverandom/libdns/src/Packets/Packet.php": "8452ef3239adfcb9231a5736266c7ad8d8bf646e85f3290d1a53419f014915ea", - "vendor/daverandom/libdns/src/Packets/PacketFactory.php": "bb48a32369b513d29497bac77820c7cbd98d69c44116c35a41cd03b7eedbee5d", - "vendor/daverandom/libdns/src/Records/Question.php": "2ea2a0fa4efae8a00e863061c5e953f5a6e36593f3358db8fa86c8eb16f81e77", - "vendor/daverandom/libdns/src/Records/QuestionFactory.php": "360e8196b5a44606e355928a227b4bc5b28175b612baa346eb64e2b87e0a95a3", - "vendor/daverandom/libdns/src/Records/RData.php": "acdd294023a320a08143c3a37a2efdf9d397a88654a70599203faddcee54e45a", - "vendor/daverandom/libdns/src/Records/RDataBuilder.php": "7e788ff65d304375bf16e3fca1b56b6d3436011cec0b484ddcc71602c75b0934", - "vendor/daverandom/libdns/src/Records/RDataFactory.php": "46f87970f9c92eb87f7bcf73509f34701510dcdf06e8db9ec9e2f90d89b47295", - "vendor/daverandom/libdns/src/Records/Record.php": "834df2c7470c7bbc4b88f759c204ffec969d63f6fd9b41ee66b8357672e537d7", - "vendor/daverandom/libdns/src/Records/RecordCollection.php": "8906e7b2cb8bb377451e78a51b8c341ca2c1b441fef14a6f2fd0d860affe6486", - "vendor/daverandom/libdns/src/Records/RecordCollectionFactory.php": "307fc9108a275f833bb6a8b544844d4ad8ac77a0966cb8748d79342296bf3c0d", - "vendor/daverandom/libdns/src/Records/RecordTypes.php": "b34a94173d6266337bbdb06369b59f4bb89660543116413c3825bbf18da693ae", - "vendor/daverandom/libdns/src/Records/Resource.php": "4f57b77be7b03abfb504b1818650033badcaf2cce0ae36c724a50d4b00276e72", - "vendor/daverandom/libdns/src/Records/ResourceBuilder.php": "0bee7a5851b65861f08bcd3c175b1849f7a408b11ccff5d31eda7691279674ac", - "vendor/daverandom/libdns/src/Records/ResourceBuilderFactory.php": "1422d94724bc155c765ea9fcc8649e24a78cbc52fa170ba006f92133f79f311d", - "vendor/daverandom/libdns/src/Records/ResourceClasses.php": "1c2bf2bc233e14241474bd4edcff28b0cfd255a217ae6f42674a3939f4688e0a", - "vendor/daverandom/libdns/src/Records/ResourceFactory.php": "b0cf1646b39c81c35acf4193096bd76f5047b4f179bc600eb739776e86d80c4d", - "vendor/daverandom/libdns/src/Records/ResourceQClasses.php": "030ce0b74dc2e00953deebedd797a2a307f1f85cd30a6bb59e795f0f183ecda1", - "vendor/daverandom/libdns/src/Records/ResourceQTypes.php": "31d8cf2532cb37c74a922817ff9bb81667d32e146a18e958f725e113351a04bc", - "vendor/daverandom/libdns/src/Records/ResourceTypes.php": "90c1c2256b14389ba6557babaf32cb059a6711402b6debb9c6427c2c974b87c8", - "vendor/daverandom/libdns/src/Records/TypeDefinitions/FieldDefinition.php": "f067b6fdf1a537f25d2085a1cecc88672837894a0887681c2fd565c3ed01886e", - "vendor/daverandom/libdns/src/Records/TypeDefinitions/FieldDefinitionFactory.php": "a68f05c5d6049c5c0708f678b8acbc49c88adbcd62c61ab467b34562fbd5a64b", - "vendor/daverandom/libdns/src/Records/TypeDefinitions/TypeDefinition.php": "8f282ecf1eb0483655c143ab9aa0f84488b98f52d4d786da392f16b63452424d", - "vendor/daverandom/libdns/src/Records/TypeDefinitions/TypeDefinitionFactory.php": "c2273c47a121dc21424cb47bf45d36675ed0f191f1ec5c431ace05465f002ead", - "vendor/daverandom/libdns/src/Records/TypeDefinitions/TypeDefinitionManager.php": "8fcab42e1a2ade5176af4824da5b638dc743ba39263c59d6ecebe1707a02de75", - "vendor/daverandom/libdns/src/Records/TypeDefinitions/TypeDefinitionManagerFactory.php": "12dec05bcc990d4e3741f1beba16d9ceb1ee348ff7ef5b72c831fc12597efc1a", - "vendor/daverandom/libdns/src/Records/Types/Anything.php": "437773b9be71b9a2e96827a7cd5fc0908991d3abbd1ef7269bc181d48541de8d", - "vendor/daverandom/libdns/src/Records/Types/BitMap.php": "94d8661adc24d9c0b9e80b8b82c53f06af00f2d100212ff51cca6d8e0879f0f4", - "vendor/daverandom/libdns/src/Records/Types/Char.php": "d76a6fe24157c85e5ba94f7a032495991166a560294ad1c70d01cadf2596b4ea", - "vendor/daverandom/libdns/src/Records/Types/CharacterString.php": "663cda3b5e7dae5492d2a455e04314b2d4886258348d71b292905124e989df53", - "vendor/daverandom/libdns/src/Records/Types/DomainName.php": "f760bfb8b419cd1e17b3d1aa0569c2f3ef4177610a34317a35b16f5e1e4064e1", - "vendor/daverandom/libdns/src/Records/Types/IPv4Address.php": "e9c5ea8c68aa058c047efde7c19821d1944343a6d827cb7ee3f6cd93c1fab1a5", - "vendor/daverandom/libdns/src/Records/Types/IPv6Address.php": "52e00798d9ccd0bec715659895bf7d2cb352466f1a6787a8f7959bf8ea40f476", - "vendor/daverandom/libdns/src/Records/Types/Long.php": "3ec76dde659739b9825fa3edde65d9bc1b84d89c7ae3d1214a2a653b2a1d6ed3", - "vendor/daverandom/libdns/src/Records/Types/Short.php": "c4cae9ac6c0fe3f2ce1a44c2e4ceb545fec8c0da5195755c314fdee7ccedd263", - "vendor/daverandom/libdns/src/Records/Types/Type.php": "0cbb0a3384c3f2759f1cd9c64097dd9d396bfcff3ee266c8d494d188270bdc11", - "vendor/daverandom/libdns/src/Records/Types/TypeBuilder.php": "0ac52d1a5b2ca431a1fe1a9f87523436e99b9aeb87a4d2226f514a0d59a69384", - "vendor/daverandom/libdns/src/Records/Types/TypeFactory.php": "0d4a1afa354fe4cdbd58b4e90b84cb91ed13767ce46e975cb423de59c3338716", - "vendor/daverandom/libdns/src/Records/Types/Types.php": "e48486830ab4a57e958a012f3002b89b46d7a02ebfac7e0b188223ff2bd74525", - "vendor/daverandom/libdns/src/functions.php": "9869f6d24381db2e33b7bca5e868a3c54140d5cebc6207433f2c44c974a13021", - "vendor/daverandom/libdns/tools/autoload_generator.php": "27e194cbdc366fed2a3f04c22b3fc44ee556491288f8fe97c09472b034f86c87", - "vendor/kelunik/certificate/.github/workflows/ci.yml": "e764258113fe770e68d63877030a1db448080b09d070cd55453447e233dff1c1", - "vendor/kelunik/certificate/.php-cs-fixer.dist.php": "72f324e677e5328df668fc71aa7c7e71b42f431d025f7f3e0126ae9824cc0bc0", - "vendor/kelunik/certificate/CONTRIBUTING.md": "d2581117c3986bf0c7817bd2a4952511e5ff56e903a9ab3e5205734a26735ca2", - "vendor/kelunik/certificate/LICENSE": "4da4ff63fb9bf3961df2e1210e74a654c32f5c82414997977ca58e56d9eb2fba", - "vendor/kelunik/certificate/README.md": "c6c83302e60f6a86fa1619e7ad2495bf0317ba4d5d38f136517b57365e16d129", - "vendor/kelunik/certificate/composer.json": "10cf94b38aaad2a181f2a72fa3fc9e3a58f12a8d58a18f1e35d0348607a87b15", - "vendor/kelunik/certificate/src/Certificate.php": "18d6295cbb5e0942e5d42d9360491c708acc18b3589c22cc1a1d99bd1366591d", - "vendor/kelunik/certificate/src/FieldNotSupportedException.php": "c878143e59992e1b999b47183b3604a8992cf9ba8e30ee7915273892f4ff3c32", - "vendor/kelunik/certificate/src/InvalidCertificateException.php": "d2880c17e35acc24ac351c47c219a673de5d371f3f9a36792879a0b08b2f87d7", - "vendor/kelunik/certificate/src/Profile.php": "f8c31dc938504dc2bffe08cddb8004bd1634553a74a2da9cc3596d5d4bd2047c", - "vendor/league/uri-components/Components/Authority.php": "4872677b9302f811ff0c19112785a45fb76f33325f706e1c131adc4e41e506f2", - "vendor/league/uri-components/Components/Component.php": "d71c443f13f5a2f82326cb36569186d5743d37663b84d59a79a0b20211fd4981", - "vendor/league/uri-components/Components/DataPath.php": "1088fb275a1760a4ae6ff9cfcda1c366d2b13b3633c18acc5f3aba47f6df0fdb", - "vendor/league/uri-components/Components/Domain.php": "c823f0456ed1b68257b2fa023d0d6179447acac40adb2c9e6175fc68e36d23a9", - "vendor/league/uri-components/Components/Fragment.php": "4bf6e1044813ba5cd0d7ec67d9661e59e476848071f2e20606b25834a774e410", - "vendor/league/uri-components/Components/FragmentDirectives.php": "e6c16af68e1887e57bfccccc91b10d08ddcdfacef63670359d6d21786a3a2979", - "vendor/league/uri-components/Components/FragmentDirectives/DirectiveString.php": "6e8735fee8299eb85854339d83ec2b65f815ead0eac6de15894426f8b15f07d0", - "vendor/league/uri-components/Components/FragmentDirectives/GenericDirective.php": "08f078fbe6f41b4672c4ca5ab086bbe85f2ad0a956effeaadb83b54cebfe63bf", - "vendor/league/uri-components/Components/FragmentDirectives/TextDirective.php": "821f80d4bd2a2e47e70f55db370a9cff4f56bce007063250b380661074a00b3c", - "vendor/league/uri-components/Components/HierarchicalPath.php": "ac488a5771c993f826a6e5833f0c6c05c2aad02856ed1db702db5ff5bad8753a", - "vendor/league/uri-components/Components/Host.php": "1f7bd9fe75562fc4909a0d069a46bd3228e8088257943000984d2e977698acf3", - "vendor/league/uri-components/Components/Path.php": "18f60b8b5a7281227b6771fc02b5fb85b93c0c295de3a05c3aecf644e93911b2", - "vendor/league/uri-components/Components/Port.php": "17df6310a95f83c8d2bc50d2f774c29425bee96d1559c4d41058e32b45c8d4d8", - "vendor/league/uri-components/Components/Query.php": "3ed32c1220d920dc83a798463180962bbb0bb9b059c334113813d69b9befa6f7", - "vendor/league/uri-components/Components/Scheme.php": "108e3a5318ded511824d0c6f3bceb099551f76d4cf477a7e2198a8f37c19fc77", - "vendor/league/uri-components/Components/URLSearchParams.php": "5125b68fdf7b703338703e356ca11ca146000f16483c5893440f964075e9d5a8", - "vendor/league/uri-components/Components/UserInfo.php": "d2a02a8cb4b6b584897fe94be931a75254ade694b53bfa58b71ce662bd8f8220", - "vendor/league/uri-components/IPv4Normalizer.php": "84bf8d40e72ff78567eeee2dbf539b7d8050299f0fc811baa0b709d42a0ba01a", - "vendor/league/uri-components/LICENSE": "bb7f984073bf5083be5cd56d144bf3508181409ee6a866b51538725a3dd8ce24", - "vendor/league/uri-components/Modifier.php": "a102ce3e2a02034ef90c052f737e9d5d5b5a2b31d56210ac5dc01760b85ca940", - "vendor/league/uri-components/UriModifier.php": "1482e50ce9ee4b3ef8c8824ee21da854e289b95c7f802e513861c60a79325f0c", - "vendor/league/uri-components/composer.json": "cfdef3defd68f954b85ef2d6162a6aa057954e4b2268cb09e2e037b35b3a2acb", - "vendor/league/uri-interfaces/Contracts/AuthorityInterface.php": "e65f9fbd19665237af1b16931075e8cb1475355c24ebc61c468d4ff04fa03183", - "vendor/league/uri-interfaces/Contracts/Conditionable.php": "b11c35df96f4130af1b9f768086484669643c9cab82994f6ddc4183d4bb35315", - "vendor/league/uri-interfaces/Contracts/DataPathInterface.php": "9c05da875962679d5ce26f61bd67cfb77fe38d37c49696daf7c835e7d6e6839e", - "vendor/league/uri-interfaces/Contracts/DomainHostInterface.php": "af2d08e80c38c57ebec2bab379d7eb1cc78e9b7b7fda432a08636cb09c58464b", - "vendor/league/uri-interfaces/Contracts/FragmentDirective.php": "38957a1887659c11b0e6bb6c9b808c2cc31e18b6b9608f25aa414127dd139f77", - "vendor/league/uri-interfaces/Contracts/FragmentInterface.php": "381768478e118b8d7155f67e10ae38574cd0255f759955fc51e29bf8ade637c0", - "vendor/league/uri-interfaces/Contracts/HostInterface.php": "f4d4bd484ab3d99f56a434b011e59c4c23d8983a6aaab6fa4d8a5d315ef50c06", - "vendor/league/uri-interfaces/Contracts/IpHostInterface.php": "a06aca25bd75fc313bcdafbd8cda18b2216489512fc71b2965d64b5fe483ad56", - "vendor/league/uri-interfaces/Contracts/PathInterface.php": "ae76ac457af4c7ae8e7007d0d475be1d87c1b3825f0ccb7ac7d0d2b28356572b", - "vendor/league/uri-interfaces/Contracts/PortInterface.php": "d023bbc5d9d0941671315e860ee48ce8a5089535b7417d661352104d784a5205", - "vendor/league/uri-interfaces/Contracts/QueryInterface.php": "5edd3e7a03d324dfd196643aff983063d115769559f978e4d54534e51c3fda2d", - "vendor/league/uri-interfaces/Contracts/SegmentedPathInterface.php": "3ceace4097b5f8b3a7530e6976c0e80dac54de5af435397d7c3cf8ca73b2674b", - "vendor/league/uri-interfaces/Contracts/Transformable.php": "9de439580b2a0e872b2ac503ae5406242fc9f52cd6ec4cde688af57af8163c1e", - "vendor/league/uri-interfaces/Contracts/UriAccess.php": "f04fdc010ade46c1b638b48bccad06b1bd4d019132df9884070f78494ac99444", - "vendor/league/uri-interfaces/Contracts/UriComponentInterface.php": "6ef88d4544392a80a285cb1e694d45e8f54d23c483c8a47265cd5f79dd8fb3e1", - "vendor/league/uri-interfaces/Contracts/UriException.php": "3aa12dbde56dd228d50aeb7d113d8f4a2e0940609b24007e6a749238e81e6f2d", - "vendor/league/uri-interfaces/Contracts/UriInterface.php": "afcd88226fa785f026c10fd3e7eb88571c793a85141e8e49f972f4f0621098dc", - "vendor/league/uri-interfaces/Contracts/UserInfoInterface.php": "056cddeca28847f8e86176a9ef578b6a5c1c358cd7e3c78174bc4dd34a6263fb", - "vendor/league/uri-interfaces/Encoder.php": "2c36a7b603a196bdfa91bb50cc17298301a4ef697a8957c0ce0f769398205812", - "vendor/league/uri-interfaces/Exceptions/ConversionFailed.php": "3d0a97425b66a464f0f9a97d9fcffda96afecfbe90bccf2c22a7fbed109f4a1b", - "vendor/league/uri-interfaces/Exceptions/MissingFeature.php": "014b9d2313236a829f6f1796ae3b96f548045e2ff4beb8e82ef54a967d3f01fb", - "vendor/league/uri-interfaces/Exceptions/OffsetOutOfBounds.php": "0446eda84b50871c5d2001772fe47c523873d21ffd64f63be5af2d7f46e7c355", - "vendor/league/uri-interfaces/Exceptions/SyntaxError.php": "0de905c2fc763937ebb57b5ed517590f96cb059792336227f23dab0c7110a19d", - "vendor/league/uri-interfaces/FeatureDetection.php": "fc539d58a9dccb242c34979e913d75d27b2167b708260a3a01bc293ff89cd4ac", - "vendor/league/uri-interfaces/HostFormat.php": "c82fbfce97a7d13ec9bf90ce995a4ffbe89059e549a4f2767a266bdfcfbb8649", - "vendor/league/uri-interfaces/HostRecord.php": "6990f03aa8c682eed80dde2b05d690af5bf46ea8514acf705b63854438d4a4f4", - "vendor/league/uri-interfaces/HostType.php": "2237b27e3e6b597abc65f90a047be3ce0a83ef55139be0f7fbde3250ab87d45c", - "vendor/league/uri-interfaces/IPv4/BCMathCalculator.php": "990998d22b0c44f34423bd54ad2659c2941f875cc7c5b5ac41510d5122b7edfc", - "vendor/league/uri-interfaces/IPv4/Calculator.php": "2c5372f253acc5498a58c0321cd0e508ff9a5225369ce3f34ed96018b25c3b00", - "vendor/league/uri-interfaces/IPv4/Converter.php": "97bc35b1136ba81d51585888daf8e32df324a6ddb127aca5fb0ab7528a3193e0", - "vendor/league/uri-interfaces/IPv4/GMPCalculator.php": "7c865d7d745b06034f92771d9b931e38ad594f290622d1dab72fb9c7d928b9e1", - "vendor/league/uri-interfaces/IPv4/NativeCalculator.php": "47b751f517a685fa51e5c75c11b908534d8cf6a15477156050b484457c163d4d", - "vendor/league/uri-interfaces/IPv6/Converter.php": "e6f7ef030587411d3a5c2b1c5b5cb1aec8c12039e36c3848d7592dc06b2477df", - "vendor/league/uri-interfaces/Idna/Converter.php": "7fc7475f991d9340e53effd81024f5c25842c0c54c3d26249be2d1336d533659", - "vendor/league/uri-interfaces/Idna/Error.php": "b6f77b6c2e3be1b571354f7d184b7ad91048c4cd3e536d479681e6e06a2636b2", - "vendor/league/uri-interfaces/Idna/Option.php": "eed5204b12452b67664d791704076a6b84cc39576d66f9ae7f1658f14418c728", - "vendor/league/uri-interfaces/Idna/Result.php": "2364bb79224d906cd005b214d7051ddc5f158cd72534f41a3789b0d51ead463a", - "vendor/league/uri-interfaces/KeyValuePair/Converter.php": "6342761e441f33b79023d95e437a42222b20b5da61ec9513d7d04e939f3e25d1", - "vendor/league/uri-interfaces/LICENSE": "bb7f984073bf5083be5cd56d144bf3508181409ee6a866b51538725a3dd8ce24", - "vendor/league/uri-interfaces/QueryComposeMode.php": "6f28442a9221830fbb22efcdb8597193a871d47bc9a14084593ec5eae33c179a", - "vendor/league/uri-interfaces/QueryExtractMode.php": "3578428146218ce4395d1a96cb11a43ba04692e24dde69269b9fffd351f0f7ec", - "vendor/league/uri-interfaces/QueryString.php": "5c47f0cdb8a3bfe5848feba20494f5a33f8a3ad394e3371d4d8288af77a18a7f", - "vendor/league/uri-interfaces/StringCoercionMode.php": "e19ec4bb5b3d244cc7a04052ec962a34e9202d01ed7aaa45b98a586d5c1cc366", - "vendor/league/uri-interfaces/UriComparisonMode.php": "8d1d1fc357bb577cd96330a59f52f194ddf3e7969bd1d4f3f369ca5cc38b8253", - "vendor/league/uri-interfaces/UriString.php": "634466e1f8d298052fbb28deb100d9a116738b1bb8086be729a4c8f3d5f89605", - "vendor/league/uri-interfaces/UrnComparisonMode.php": "d0bcef76e5c78c76e62d831a08eb4fdf0d3f00876ce705339d5ef716b982d4fa", - "vendor/league/uri-interfaces/composer.json": "d5c32c087eba609da61d4600c685f5a1ee936933477960c0399da46e1c09ffc1", - "vendor/league/uri/BaseUri.php": "59d6296419fb4ceb7f0801fe80959525c9b593cbb5be7788c6fc3026ef98e0e6", - "vendor/league/uri/Builder.php": "fb1a6918896493f93c3b96fdfba6275155f86410582dd0f64d532d0a0a166d44", - "vendor/league/uri/Http.php": "e403b964ae4b8dce3019c5a3bdd27c1f7acefc16b702029e6f4086b5e3c4e1f7", - "vendor/league/uri/HttpFactory.php": "cc61cea67969671bcd4e790804e22c0dca8205c4914909d4a841b728ef11ff0d", - "vendor/league/uri/LICENSE": "bb7f984073bf5083be5cd56d144bf3508181409ee6a866b51538725a3dd8ce24", - "vendor/league/uri/SchemeType.php": "f25f013d77eabcdcd5870ee3abe7e983fbc97593289b148550e1f4e62b3a61a7", - "vendor/league/uri/Uri.php": "cec9579b220c92711a410930fa3243c692119b76622b9d9841584414b5723d10", - "vendor/league/uri/UriInfo.php": "7489292a9c493e52cdd4adb603cbd525a832b03b76a1271e72c1291686621955", - "vendor/league/uri/UriResolver.php": "b7858771505e2245ff0e8cf268f1c0da821a20a11955f2678e61d18f6714abc2", - "vendor/league/uri/UriScheme.php": "060fcf8b5b667233d851d06e68ca10e3cc2245cf98c278d7a5a7de02b4197135", - "vendor/league/uri/UriTemplate.php": "8a4f39a96623f679de947c5149c053138df1e5759910c1264b85e91bce714629", - "vendor/league/uri/UriTemplate/Expression.php": "ef7ee4ffc4ddf50387efba734915987d4d8c26f26ff8225ff680ae3a34dbfaf6", - "vendor/league/uri/UriTemplate/Operator.php": "26789916e265876e5bae9713f41f9c2cb6a36578f31c7f555027083b3ea92364", - "vendor/league/uri/UriTemplate/Template.php": "59eed5a8383436559a4b66a8d8cb2cf132ee4fc9ac679f87bc343c838ab47d66", - "vendor/league/uri/UriTemplate/TemplateCanNotBeExpanded.php": "42debdc4e24cf03c7d1c3df882e655797a44e7d15d539291a08de33286b7b6cb", - "vendor/league/uri/UriTemplate/VarSpecifier.php": "d1f23c6161daf77f0efd3e453af4a6cdfab16bdd8e1bc7029b0c07b3d7776e9e", - "vendor/league/uri/UriTemplate/VariableBag.php": "856154538c18d52dd94b749e15beee449103ab44f53caf229108889b28efc88b", - "vendor/league/uri/Urn.php": "b21c5289114d0db7021312bcb5c9e2fcbb7bf91ff5b97f278cdac74997a634c4", - "vendor/league/uri/composer.json": "c7aff068a3c4c2d9a3390d5f0d78047ff5c9d983623399b77ef8b678acd176cc", - "vendor/monolog/monolog/CHANGELOG.md": "237ae9b89d48bd3a5f82448187c70857226e5c3d679c1071f3186f2a141b9559", - "vendor/monolog/monolog/LICENSE": "3a351f8f434ff941f4946afb534f7df1185523638b311c22901631d8882f70e1", - "vendor/monolog/monolog/README.md": "160482ad6b8815a29cf7e98e53ec793f377416785e5810bf33d98765f2246303", - "vendor/monolog/monolog/composer.json": "9968321c5cc6c0b6df592bedd8e4db1ae24a1f8e1f0904a3268102492f435eab", - "vendor/monolog/monolog/src/Monolog/Attribute/AsMonologProcessor.php": "30ec7ef9ef9c84f5e091a81e3f5e59c24b7a2251152f5c37408ebd670be0e84e", - "vendor/monolog/monolog/src/Monolog/Attribute/WithMonologChannel.php": "93255db2cec43d176dbb7e2ecce4f8007bcc6133f6ddb1a5236377116879846d", - "vendor/monolog/monolog/src/Monolog/DateTimeImmutable.php": "59a279e374404e8db38afca8548201d8047956c49e8ebebade6ab99d8a221414", - "vendor/monolog/monolog/src/Monolog/ErrorHandler.php": "62b3d23ce2083ba7c5d4d55df61576969f4031a96e75a0007a7b4adeae5a95ba", - "vendor/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php": "461679045cddc93856d4aa6170704fe66094e9d0aadc652eeff41d0a8dc9c340", - "vendor/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php": "58c0df26770468233d17cc0d598b0533f0024f9591f7fc0121c582923afc1187", - "vendor/monolog/monolog/src/Monolog/Formatter/ElasticsearchFormatter.php": "ee0849c88faf512c611ef0ccecdb015891cc817235b4404b1432607b0c1c679b", - "vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php": "d89cbd496e793f5b572e536dc81ab6d4dbd592e4ef0331df10098e51d04558a6", - "vendor/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php": "e5fe3b2257732c2bdd08a31cb1dbc21211600152c6ce802d14657e2df053f38b", - "vendor/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php": "c3f44f06fa6ae27011f95728d04dcf9a73671aa752693d39f25a779a94d7c3b0", - "vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php": "d6284aff193b4dec6aba7c41d7e6f6e3ad4b5481488eeb30caa28bd85532e246", - "vendor/monolog/monolog/src/Monolog/Formatter/GoogleCloudLoggingFormatter.php": "4e8fcccbe55a563976ff49040ba0f3b1332716cd5f279d178f774350421f0c8f", - "vendor/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php": "490c01b91fb71c6a2531054be96f01395295c1a2d9cfcab55e06efef170bf1b4", - "vendor/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php": "abc0553e21fdd0ec9fdacfbf4fbb50321be8111e2ac2abcff3bf7c9596d5ac1d", - "vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.php": "090d4517489f412e246a82a99135c03e944c0cbc8ed1804b93c5ff126d0bbc98", - "vendor/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php": "eb41c1b207a8096f02cfb3a8b44bf9502c5ab54ac3f6cad814256f88629cb1d7", - "vendor/monolog/monolog/src/Monolog/Formatter/LogmaticFormatter.php": "bf95b325e95ee4322a19711863628cfaa05e84170b52d611469b5f75be30de41", - "vendor/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php": "40c84cee9d935f9606e67e8e236458f16423dfb6b7cb2355f3cb4f0c4b060890", - "vendor/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php": "954476e61bec24fa1cea19031bf2cb8e14dd52fe9e6151bc66ed9d26f5a96226", - "vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php": "c1c23219f543d12eb105153859d114864feafd5f2a40f3515b028cdb1eda88f5", - "vendor/monolog/monolog/src/Monolog/Formatter/RedactingFormatter.php": "82926f715fd42e794e0943c90d5a80a583518e3e23b8e3d14a8f6a9fdfe6f77a", - "vendor/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php": "18e35896a12c177156d1ee0e8201c6390dd07bb4c445e915b5ffe26e823b1039", - "vendor/monolog/monolog/src/Monolog/Formatter/SyslogFormatter.php": "a3c891bf01ed3f0aae3a0f954361cdb9754f8d230d9ff97c7dec70fe555c1856", - "vendor/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php": "1c83c6bf597c1cae34b14557725c2bcfdd5002d5da7e13dfe146edf0e0107940", - "vendor/monolog/monolog/src/Monolog/Formatter/WrappingFormatterInterface.php": "eade8dbf5e4a071f59a3e5bf933b46a70d12a894872a93ff15ee42a43e43e889", - "vendor/monolog/monolog/src/Monolog/Handler/AbstractHandler.php": "d8a77b7a1f529ca85c6540b10cb6865effc65d0485b3164b8669ae1aa6f149fa", - "vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php": "55f6c556bae785878f4fb3abf2054d5e77bd1133ec96d0458577b3af4572ea6e", - "vendor/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.php": "1d3f69c885ba356b1ae73e1aedbea24cfda06dfde6ba1f1bc94fe951f3f1a754", - "vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php": "bd059fa7165a8f889df2a34dca91fa33a1cbf21d5ec8a46c62e93672478cc5f3", - "vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php": "4e3a314894c9a988b271a9e14c48d1534acb0c48a54d31f8870caf6f75c2ef89", - "vendor/monolog/monolog/src/Monolog/Handler/BufferHandler.php": "2f0316fd92390cf65e413af357072f3653743b3923add8243938f5e2db5a3772", - "vendor/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php": "f4c92b4b357a6b332cebc20f66e8cc0c8534c7aae9a54c10e9daf67095d50194", - "vendor/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php": "83714f3c42b91ad63ac41cdcae9490eb252b145668a366411c5e9dd22208e011", - "vendor/monolog/monolog/src/Monolog/Handler/CubeHandler.php": "4328b8ae23c51dda69e5b963c4a5b16df3a5b6fe353e52cbc5cdb0f8a8f34696", - "vendor/monolog/monolog/src/Monolog/Handler/Curl/Util.php": "48386bccc6fe95dc2fc88db9842f558f220c064b22d102a78b0c39f5c0230b40", - "vendor/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php": "14c8c21b51f868c3e8340d546d417f1959760909c823aa439c7e2dd0bd5d1d51", - "vendor/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php": "280780ffaed0977da6091fba26a023262777eddfffb1e6a02693c5a88d68a019", - "vendor/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php": "5ac2f191fcaea9560037b51990ce2317350d09d46f38be95034931100ee18947", - "vendor/monolog/monolog/src/Monolog/Handler/ElasticaHandler.php": "fe1aff1f173775877529e258485586b95a717d2e19ddfc22948f717b389d1b7d", - "vendor/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php": "5b55b3d9449bf09b30afaf1a339c74b900ef1c0224adf9758c8b1ad74a1875ef", - "vendor/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php": "3a23502dfa532642f2efc28a90339f58570213af7e5f37deafa765db4db740a9", - "vendor/monolog/monolog/src/Monolog/Handler/FallbackGroupHandler.php": "ce0cac331d87f167ffc1945b94bd2980706b7ea2dbb20297a1061d1a9767c3da", - "vendor/monolog/monolog/src/Monolog/Handler/FilterHandler.php": "ee962ad4220a46ff9916575978c4a1923be6cd09217d965112ee23d71db185bc", - "vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php": "d81cb1f7ea0e799e9eb012a86c5d9da564ca2efb25697779b444b6738328eb5e", - "vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php": "1435bb95b2721eaa4c8926117f2810fd17b4a8cbe284b86f4a32dd0ced40f62b", - "vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php": "c4472c040e816bbe3be8c2c3bd8fd2f1076f39d8d7bf157d98a32945b3242e41", - "vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php": "4ae206acb6cc4630b8a1464fcfcde7dcd4c56ce15d6e17b45912248fdcb77bce", - "vendor/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php": "bac72261b2a93855142f4dd6347766beb6b89ae35a87e1c721d0e498ed702f3b", - "vendor/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php": "ee49bc383aefd4c4ee0a09e4aa64539a1d05249f9ac8f5947285542d922fd7b1", - "vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php": "cc3d4e96c268612075ed390a23ebd09b5dd8b13e83eb8ab919a79ffc36561222", - "vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerInterface.php": "da34546947008fafb237f41c194d70b907f52c3e0ed049631f380346498bf3c4", - "vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerTrait.php": "c7278ec8ab7f72435747d4a8d64ddb6b61067edfa4a9e2d9e2324f71edbba75a", - "vendor/monolog/monolog/src/Monolog/Handler/FrankenPhpHandler.php": "af5c53c95c1abb56d953d232d8b55e801dc602b1cc8589a21906ff272afd87f7", - "vendor/monolog/monolog/src/Monolog/Handler/GelfHandler.php": "9ac603f0282e01c79518f88b2ba52245a6468fc01886f3f8815b51c4cb7ce0cc", - "vendor/monolog/monolog/src/Monolog/Handler/GroupHandler.php": "92939f1497458997a28592c1e86e94ff7b0ae50564309fa8edd89db9788a09e8", - "vendor/monolog/monolog/src/Monolog/Handler/Handler.php": "d8fed948377a07a44f11c548751fc942f2eeb9e352d98a6457750dc1d5b0a8dc", - "vendor/monolog/monolog/src/Monolog/Handler/HandlerInterface.php": "5b0f770ce764d50d871d805da2683ccfca39e64e70e56be3518648873318eeec", - "vendor/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php": "f3f570d902b5c3da0fb06b287df640764f5475e27aa5949897c7d3659c4f2e2e", - "vendor/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php": "2a0037ae9c34bf756d30812189ad3bdb84be54049cd1aee3cf8cbf1ecd4480a3", - "vendor/monolog/monolog/src/Monolog/Handler/InsightOpsHandler.php": "4e7ab6956fe6fa00b4c5adf8b973f9138ef9c1e87900030fe69577eca4573d89", - "vendor/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php": "dab2ab36249acaf1cf62a88c1b02f833310fcce5b2cbe57244949125782ec259", - "vendor/monolog/monolog/src/Monolog/Handler/LogMonsterHandler.php": "bd7f0cf2897b09bc4ed6ac463df44394c6330455d614c5c90b368c17684fffc4", - "vendor/monolog/monolog/src/Monolog/Handler/LogglyHandler.php": "18291245f82f1b37c00017d592e0ef79e8a60de11cca7ecd32182832b376ff13", - "vendor/monolog/monolog/src/Monolog/Handler/LogmaticHandler.php": "fb4cc34a644d9f6075a67236a703970abf8fcb51812aa48d5067a80e28740b91", - "vendor/monolog/monolog/src/Monolog/Handler/MailHandler.php": "175982c1551b55828fd948f501636fbce2ebf8751041c3929e3732478e6476a3", - "vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php": "49ed52af420dfd7571edcc24e654ab8ddc8fab060f67dfc10a164ec3ef9b57c7", - "vendor/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php": "6cbad21da41457d71384fab2b0491f4608515d9cd565ed40a83df5f02c1f75f4", - "vendor/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php": "b3fa4cf7bd6519cce78c718b92dfb0086e9a0d843f8eee2de6ba6c594dcf2650", - "vendor/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php": "bc3fe1dfb95e7bb9843a90a6a3c34b71046638a7dbe7addd4b151c134ee18157", - "vendor/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php": "12026d01e146b0524222d81b5bc2323e01115825bd1d5d72de8b9e77439f7f48", - "vendor/monolog/monolog/src/Monolog/Handler/NoopHandler.php": "9cac11e9a77d02c59cb9d10d98d86c37503973ddb9c1be30f89194a5d1a00a49", - "vendor/monolog/monolog/src/Monolog/Handler/NullHandler.php": "1a9a267a4a060c5001a3c6cf9d8592fc7f80be2deff753c14207fc91f91eb4f3", - "vendor/monolog/monolog/src/Monolog/Handler/OverflowHandler.php": "466117a395f43f30b89e367d126292e002867a0eda6f195235dfa34ce9a873c3", - "vendor/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php": "c3707699164e339ed70cb9c3f76bef1b08b04d7036d6b3bde073e987e646e8f9", - "vendor/monolog/monolog/src/Monolog/Handler/ProcessHandler.php": "263f832c958990f9bc9303d3e1ecfa1b07d0ad743a93fa9a77acbbb61a373e27", - "vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerInterface.php": "2f951faf55182850873e0c302277ab8b75b943db4d9b17f778b3791feb535643", - "vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerTrait.php": "7de97be3b653016783c1885af79cc790822652ce25d350e30d83f5b71ba8665c", - "vendor/monolog/monolog/src/Monolog/Handler/PsrHandler.php": "6896619e19f82e397096ed8c0de90c46958b7f17f38c5168b21e69b120059648", - "vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php": "72403bb1f4f6b412c10231b81bc0ab8a85f280ed2f3b9fd267e7a1a6ccc13a61", - "vendor/monolog/monolog/src/Monolog/Handler/RedisHandler.php": "e09b41fb5b24ad81051ce0629d0edacde130b54b82aa40621c94a28f059238b8", - "vendor/monolog/monolog/src/Monolog/Handler/RedisPubSubHandler.php": "733f109c734803ab8e6987402a13fc7e26e7fb6455d0911525ba90fd37164e9d", - "vendor/monolog/monolog/src/Monolog/Handler/RollbarHandler.php": "d5fe5a984fef52259648d9b92fd7ff055e5776dcad94758f41ca496f7f9e21e9", - "vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php": "f285cd39e25490bf9dfded34aa053e5c42ef5195c0c7d7ce97d7227cf6c5b509", - "vendor/monolog/monolog/src/Monolog/Handler/SamplingHandler.php": "cd82b9f8f391057830bbd66f79e8c915bae80d7011916f24ed884d78205051d8", - "vendor/monolog/monolog/src/Monolog/Handler/SendGridHandler.php": "04c2060ead6352648568f4a0f2e4935a6affe9dc7a12af218bba41aa1c3cbdef", - "vendor/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php": "ceb5d24d459f6f7f1aa1731893634568421dd104df947f2f5e74bec4ae475a78", - "vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php": "5e4ce5b16465f3fc3e1fb1d33519ffe09b7e9c73b881f62010fbcd7f40dcb764", - "vendor/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php": "531ef871e788c26a5315658999833069cfc10840d83166a664fc298419ec7527", - "vendor/monolog/monolog/src/Monolog/Handler/SocketHandler.php": "e725e900b051c0926ebd68cd7c07cd6d53abd2583f09db24ac23bd271ce634d1", - "vendor/monolog/monolog/src/Monolog/Handler/SqsHandler.php": "5af231e98664ef11969140212dabe7cd6657da9b67d057161fa9bb4b4c2e5d7d", - "vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php": "b51483bd03dda90695271de3fc614b98edd8b7ecaf72c7a63405e21df8dec64b", - "vendor/monolog/monolog/src/Monolog/Handler/SymfonyMailerHandler.php": "07c85f2c8f9ce8cc3dc4a6de840200a54f32736d62d23bc4a0b98f7406ae16ed", - "vendor/monolog/monolog/src/Monolog/Handler/SyslogHandler.php": "828003d23dc1f5bce273d0989d9e138728511c94631e1fbb9fc4f4dc5f3df204", - "vendor/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php": "c672bbb87142609bfa21bbd5d09bd8ff8cf3f5e9abd20cddd546212ca5d6547e", - "vendor/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php": "66af26ecdde442dca112fa8c092da7ddda2f79a3a174960c381c9394a0dfc63f", - "vendor/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php": "e527e800f632ddacf6aa859bb3abacb44570c853f2224c2d306fae8bb316e5e7", - "vendor/monolog/monolog/src/Monolog/Handler/TestHandler.php": "b47e559f28d280921f8407007a990d538aea28f12ac8ac042c0eff60164dc313", - "vendor/monolog/monolog/src/Monolog/Handler/WebRequestRecognizerTrait.php": "60ca14bb1e155764482d99bcd909d9162c9d4299b76ecd5577ece44f311ad23f", - "vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php": "74969296e046f733b0bf2cf3eed559bb898607f63ed40d43510f60e11e0ea6b7", - "vendor/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php": "2f5706754a33530a85a224b1f974e1e70801bf11675bac1865dd8313067761b9", - "vendor/monolog/monolog/src/Monolog/JsonSerializableDateTimeImmutable.php": "10ef69c94ac474e47e7910aaa668c783b7a51c46651a0c0daaa1c3dd0f264eb1", - "vendor/monolog/monolog/src/Monolog/Level.php": "a8c1b1235dae0025d18971b1b357727419aab3591e83139caa3d74eaf123928f", - "vendor/monolog/monolog/src/Monolog/LogRecord.php": "033537f4768ed1791c4eea0ef9c6c03f8346b2ea24059e50e85392a6636790e8", - "vendor/monolog/monolog/src/Monolog/Logger.php": "ccdf61fade57227720dd95f80edb1d2a21c4f10bab790d792ce586807166608e", - "vendor/monolog/monolog/src/Monolog/Processor/ClosureContextProcessor.php": "31d9ec44cc80c7be34f38e77c89f784625b8b6ab454cd852de2e2a783410f24b", - "vendor/monolog/monolog/src/Monolog/Processor/GitProcessor.php": "2d64e9ea4bbaefc3838a459080667fcd3a8c90f284fcfc996e6c103091dc1883", - "vendor/monolog/monolog/src/Monolog/Processor/HostnameProcessor.php": "f71edaa35ce1e7c48b0aa88d6c8c994ee3a80513f3c60271a7a20a40a5af1691", - "vendor/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php": "1760c07c1562c0a292a1ad767c4d211c45e24635466509d14b910028acecaff1", - "vendor/monolog/monolog/src/Monolog/Processor/LoadAverageProcessor.php": "436a0c0836430b05fef0d692da2843804e27cb60bc2ccba2cd79a8a03a0238c7", - "vendor/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php": "bde7180cabfde59aa0d9faaa9ee805dcde6d47a9e522c13097c5a4cfe27785a7", - "vendor/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php": "d0489d1bac5304439e68c5e18060dd4a6ef7ae82d4e0e1076c34ffbc883b2eb1", - "vendor/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php": "6fd512425072408b1ef59fd71204faca8118755a259ff0a54644c2f5d69d8a22", - "vendor/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php": "75c2efffcbfe7a1e07964757d854137a8a4edae480b07b78fea90fde904fb03f", - "vendor/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php": "7c8ccc3afa7d1c28442b449c9e9bbfc4b2a3cccaafcd71c338b58cca3efd70c8", - "vendor/monolog/monolog/src/Monolog/Processor/ProcessorInterface.php": "d0677f42c12ff384b545d6358473f7505ab4d3f59617f7d3a4aca1a615732f35", - "vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php": "37c76ccc6b142c1262b9812679d16a29672924e351a031aca7d9df2cf6fb72de", - "vendor/monolog/monolog/src/Monolog/Processor/TagProcessor.php": "bed8addb465d007ed403c74a148bb82e1f04416251576a494137600aaef47ae7", - "vendor/monolog/monolog/src/Monolog/Processor/UidProcessor.php": "0ea99abc6ea435c9f5082c7c097e81ab318b3aa2ae7f1669446b2918ebec6087", - "vendor/monolog/monolog/src/Monolog/Processor/WebProcessor.php": "04134cd76ce4204c92817eba73e194caa9b7f032cda1040b65464587a9ee1a44", - "vendor/monolog/monolog/src/Monolog/Registry.php": "280edfb3c7fdb30b56a91fa4597cc12c7f2c4aa6e6bd5c5f4ce6f5048bac451a", - "vendor/monolog/monolog/src/Monolog/ResettableInterface.php": "3101f006af65878ce8fd24ea6d0706e4f7c6b046690ac2f19e42b45bdc902974", - "vendor/monolog/monolog/src/Monolog/SignalHandler.php": "ed097894188b05bbb61cc7c991e451e20a1997a7129c9167ee383adbc59460c8", - "vendor/monolog/monolog/src/Monolog/Test/MonologTestCase.php": "5dd94dcf726e0221f454290d0d408caf2b124279e5a5b5f9833faa77e4d52400", - "vendor/monolog/monolog/src/Monolog/Test/TestCase.php": "ed0759bd02f989b97f5ae8880f4f3c9ada613055f92e067545874618ed4f1c93", - "vendor/monolog/monolog/src/Monolog/Utils.php": "c1b02c84945e117e0e49372f9c4c65d785a718f93f57b177d11f251004279ff9", - "vendor/nikic/php-parser/LICENSE": "dd859e107fac9f87a4413ab8c3c96f0f1611a17f596a2db562a5a4f4904c1e97", - "vendor/nikic/php-parser/README.md": "8c89ec56744b78052f9324a4ce76210cf298acbb227653b86491f685a9035105", - "vendor/nikic/php-parser/bin/php-parse": "56aa63404a22853120a32aa3f0462528f6a03fe45ede021cbcafbffce5429fc4", - "vendor/nikic/php-parser/composer.json": "16728b9e68b070dfee0de0b1311f4b6a8a90b24dd73277950f73225f1de770d3", - "vendor/nikic/php-parser/lib/PhpParser/Builder.php": "3ad88dc8184305a97fe3f79aa632e6f6c5a6b9f7c2ec91bddf25eeee6958b72d", - "vendor/nikic/php-parser/lib/PhpParser/Builder/ClassConst.php": "612f70598f3fe57c383562ac5ed6170b21a8b0ac7989c8f0280f1da5fb6fa670", - "vendor/nikic/php-parser/lib/PhpParser/Builder/Class_.php": "52ac5021c5f21687ef6b7af006e8e79f945df2579cbe49829938f5e33c9d4652", - "vendor/nikic/php-parser/lib/PhpParser/Builder/Declaration.php": "43725c0752bf56685d84ed2de0fe680e8892c7284f11c7587ff1bbe5cc58974d", - "vendor/nikic/php-parser/lib/PhpParser/Builder/EnumCase.php": "a159fd916cb323327c50dd9f6b3b32ad145e91603168a3aca7823a32394a0642", - "vendor/nikic/php-parser/lib/PhpParser/Builder/Enum_.php": "52ad3361756d52523c16548d008c95351983e3029a16294761b42ed0584a41b5", - "vendor/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php": "bff940018d197d78fcab25e57b9ec6d91bcfb6651427cbfd920afccbef2df254", - "vendor/nikic/php-parser/lib/PhpParser/Builder/Function_.php": "a8a525dee19a9be174df9bf0b19c071fa0753f3e813031b6d6e96f068d0af121", - "vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.php": "54cf145b3f7b2a1011e810ee66b5ca908036194a1a0ae7be7216d51989c1095a", - "vendor/nikic/php-parser/lib/PhpParser/Builder/Method.php": "425434befc6b8263a44bd3b7aa543e42b2acfa9ece4cabc61c72c72bf307b844", - "vendor/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php": "4411734a3b4a62a223cdbe6656fa92e9b41f6ccd324cb2bf8748e8d28f573ece", - "vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php": "fe89e9b836b02d5e96718233382793eeca0dc4a6e7aaf799c31d16e071d44ba4", - "vendor/nikic/php-parser/lib/PhpParser/Builder/Property.php": "f2942d1081065cba95dd9ed19dc90bbfbf340a8ffec4d36a2aa112a2777a3a68", - "vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php": "a3678f87a206ab69c673a3b804d4ca018c0251af0e20d3dbf8c087f8e5b3bf94", - "vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php": "f02b707ea62ec4f9aee3f46c292dee6b23b9e3f3950473728655f74b512ac5d8", - "vendor/nikic/php-parser/lib/PhpParser/Builder/Trait_.php": "5a172865ea085dedb7fd0cef4af643ee3e21c447e712977192525394a8de599e", - "vendor/nikic/php-parser/lib/PhpParser/Builder/Use_.php": "f5ea44b9eed3164e35d6f25ab1827dcfa2431f0454f0d7eb908a1714aaecd59e", - "vendor/nikic/php-parser/lib/PhpParser/BuilderFactory.php": "6ea8e388b9e43738d3f84406f5e43f189da22c5ceb3ec33030d16fc887e49869", - "vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php": "287d77dbff4ac911744f3abc03a4de13b6e9847577f36f7a892d3612e1d100a5", - "vendor/nikic/php-parser/lib/PhpParser/Comment.php": "b2d89a515ca23716768d6c179f8df87d67b149276d933ef6a4fbfddec1f61107", - "vendor/nikic/php-parser/lib/PhpParser/Comment/Doc.php": "b9255899fa97e4c44ed39dd7a175adf4e87b4487146ab966590f01ef0dca7746", - "vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluationException.php": "0b891976f6f75d763222e5e34bce2a295db33f489ac98660c5762780172b9935", - "vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php": "6151c45ec5424204f849a3527c79e1687b74adbfdbdef6a404beff36b66335b4", - "vendor/nikic/php-parser/lib/PhpParser/Error.php": "65c32d6135c2b214eee37a7f00ccf1f2c8d01430c8e65af99ebe74359dffd9a9", - "vendor/nikic/php-parser/lib/PhpParser/ErrorHandler.php": "4b25e0ec2643272ae01657d9943fbf5d896b3df0294305a5fb87b8bacab71b7b", - "vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Collecting.php": "f111088d9f324ae70ff85af766e03f8d91e13f6c98ec5f1aa524f7efd131276d", - "vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php": "1c218e36ba923384ad1fc6b7b044d92a58d01458601ad3df8a93d623e159818d", - "vendor/nikic/php-parser/lib/PhpParser/Internal/DiffElem.php": "e66978539b72c8f178ea7cc188f19712b96006abb3aee5eb8bf4d3ed890b7d8c", - "vendor/nikic/php-parser/lib/PhpParser/Internal/Differ.php": "53b40a5dc51e4c48f79860416b137d3ff7f344ea2dc4a56b6f38292a9ddf5422", - "vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php": "dcfa95be29de4811791c8c600c590c2513cb5134f366779da6018d17262c5c4b", - "vendor/nikic/php-parser/lib/PhpParser/Internal/TokenPolyfill.php": "da9e874d628ca1e8ee0f56cdaebb73ba402f12484bd0c03b07164c8538c50ed8", - "vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php": "366dbae6222c80f7d5b81f098cbf0d4f683cd6f0240ac1a22ae26900cbbd1216", - "vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php": "1b9ceb9fc6f1ba725383d5372dacd83f600c1be902feb3c9ffa2822ac6b7ac9f", - "vendor/nikic/php-parser/lib/PhpParser/Lexer.php": "d404876d2c850af1a83c4c0847a793c52fd88a745227923a3b7cbf54bb42e51b", - "vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php": "8490565fe986b1f581967863b688ec97fb46a4560720eeb4fca75df841aa0353", - "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AsymmetricVisibilityTokenEmulator.php": "12544449a30282610c2f501cdf7ec741977e0fcd6ae4c41464c195559d2aa6a6", - "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php": "2b89f64eb9660ebd3f5ce3f96e9d77391ee876cdb3176e7c1e7b2ffecc6bc033", - "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php": "88a31ab4ddd114a3ed5d4bb1311fc802d7e908c729856504fa11c76b0bcfc54d", - "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php": "fab022824353dc8074ea249d7adee03411020f4cd7cf2a641d390cae3800b8cb", - "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php": "ca400fd04de3e15f8b54388282ef209430a38dd05c2c904800f18ba440fec5d3", - "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php": "95c599bc4e1b6085f514a3d75446850b830817332a5bda5cae40f8c7b925453d", - "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php": "6f13fa6195dce2e11b35839e59074afe35f3b0b0b999495eccb1b7b5594184dd", - "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php": "262107a265db2a777447f7b86afc5f89c7cce6c6468dbd9963cd34345efcc54f", - "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/PipeOperatorEmulator.php": "ad2ab2af4e5d285eb2405d66748baa2854c7480322797a91e9a076be62210ee2", - "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/PropertyTokenEmulator.php": "695d12a66bfa9f2a5ae1a4f267ab5e6222e2bf30ebeff3128c42097cc3950e50", - "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.php": "c500d34cb258aaebccd7a504a4d96e3c4caa6a220811cbeaa689ea9f18d7636d", - "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.php": "9735b74eb5965953109579d68d44be25b5a8fb8f206300d56459cce5fc1ee708", - "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php": "c802f69a5319242aa03e3eed4656551ce8c18e535df4905299f0f2ab931aba46", - "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php": "744ba8ba60d422f07737a1438a541f843432ca7cbcdd8c57c07a89d73ba552b1", - "vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/VoidCastEmulator.php": "3c5bd0b4a0a5d2f351adc32c7b9e3e56949e2c3b7364fde73e7810ff2652bc9c", - "vendor/nikic/php-parser/lib/PhpParser/Modifiers.php": "33fa68031067f532c0e4930c4a25f41ba817e8681b4b60853c75b2e12900bfd7", - "vendor/nikic/php-parser/lib/PhpParser/NameContext.php": "3343e0a931414df07484457919adc64c43d75460875588a07a898cc8228eb816", - "vendor/nikic/php-parser/lib/PhpParser/Node.php": "8661124cdfe90d86af7937f563942d59c63630da2fa994e290e7b9294442eed5", - "vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php": "030ed7dcaa6f4f151f9fff43bbcc832dc4cbc739ad07ed5571dd51dcc3408aec", - "vendor/nikic/php-parser/lib/PhpParser/Node/ArgPlaceholder.php": "b39e3892d51289caba615000825217fc47b5e23b36f89cd2f9b066278aac99f5", - "vendor/nikic/php-parser/lib/PhpParser/Node/ArrayItem.php": "e6b0eb605f056d786138aec752df541d63538b9a59d358686e5e4e6fa5d45fef", - "vendor/nikic/php-parser/lib/PhpParser/Node/Attribute.php": "27fe66c422dea0ce774bdb9cb8fb4aef1852609463349d085c30c858881a820c", - "vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php": "057986cf63df36ad270b580b8ea4a53503803bd0d0d9e894601d35b0ded0c413", - "vendor/nikic/php-parser/lib/PhpParser/Node/ClosureUse.php": "ef83ae1143215706eb696a09ec2b4379a3e6339f54a81f6eb661cb2a9758cd36", - "vendor/nikic/php-parser/lib/PhpParser/Node/ComplexType.php": "cfadc646eda7cd40d4f7875a6d79e0ba9b66db75138eb32efba9592babf27180", - "vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php": "817a307133e8115db17e35fa66ee6a8251f0eb61c7d43869a0cbe56db0c38752", - "vendor/nikic/php-parser/lib/PhpParser/Node/DeclareItem.php": "806679ee332545fa2d7cd14e7c52ab5fb299af56d4d215336229caa664fa5ba9", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php": "e351baf9a98c07e754eac85704d73095c59ee26ff3ddaf69c22080e6d65fbe9e", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php": "e111a948b8fc23242408d61928d0f15730c3d473952cac46014a519ef4562237", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php": "1c6d3b5b41a02cb1775f72ad9725419eebdaced3e543cf09742c000b555d4b2a", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php": "23b09b9ca53f91e616febe3d3f3e779aab249dd5600f6d0db28d67d67e994f57", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php": "d5232d1b61200e1b19b1441f5303a4882ca0ff81781bc65c7b3f3401f95ff059", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php": "36ba60df88de34b4021408d2976c5166a9b6930f4fe3650318bf774ed2b3a03a", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php": "e05947ed6756ca0d4c21d0f20880a625c3358aca342f0f241a134ec9e67770b5", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php": "090c7a30ac4573dfd5e686af528eab3b9727a6f6228be8b65f26fd982b138269", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.php": "ad8b684d06df61651bfa49823637a41d6a60188578411e431f2f9b952738dda5", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.php": "93e075cd13e7c95047ef83bb9c45b778746ad626a3b0003bc9d28015f609cfc3", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Coalesce.php": "8c81f170fa6f6b028d2e0eb9cf27e04cb037f492d0552ff2f1e8ac984ce8647e", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.php": "26a76e3a13a7c2dc0518033a942f601b03b6e9505c800ee1536d5b93ce5d1915", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.php": "7ef917cbd61bc155fb982ae133c1a95dcf7b6cfb9a6469967a0a2a0f5c174e78", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.php": "f602a9df74b2ee400fa1ba7b9b01373f68aa8db280a7ee5426d0edd96eea441f", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.php": "8a9934c9859626c9bd5d52abd2ecb94e5cd09e42998f3f3bd052fb2c2e8203dc", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.php": "39ae0de8479481e48fef0805254bbad09bc911f30d9fa0a8d7e7c7b739116513", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.php": "b6ef355df9fea41fcd2f7b08ee24ce7408335e84cb724d19a08e28a933435209", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.php": "14c8cb57ace582b939116aca0af9f441490d47fb2b1245d8e45234c547b67c29", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.php": "c276f95d4f57549f71d5e46220baad1647f46eb256696a76e134eb30f0d83673", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.php": "5776c7f3d35cb921c5534cceddbd966aabe50dd3657a60f6ab7896153e8973c3", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.php": "efb318cc50eca7d859113fa9424ff760e09bd055ffcf730dd713a339d1e6f94d", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php": "719f694f2a3f357fd7b998d262cab8b835507189c3879fd5e5e56d724808badb", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php": "720a6f7a706c099ab1c2a140bceaeb58581c466ba319ad0efd9f1a40b00a9be9", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php": "164eb3c0586a528109b96be8f5d56cd4bb247960420764b51cf1b4ebfb8367dd", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php": "beebe2a0fe1c60f69fbaddca9621c7b62ea9072a7041de14edc5d32a5e3d4952", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php": "c3adbbae3dad2e338e17a0e4769f023eddeb079c382149431caa7ac56314dd62", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.php": "fb4384315dc721d551e1bc7e4e50b8718521ecf174291e74f584317776361062", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.php": "d29ebd37a4fe2288352c120bbf306005c7a235c120f2315ec569afdb08090bfb", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.php": "66959caea66f97099b7ce1d6370fb1c0d4a663403da860eb3ea7af241bd7ae80", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.php": "f7b8f699d907c43e89accf6b5d1fcb95ccaee4824a6f429a44138588f8adff35", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.php": "a0e1e7ed8fb3c49ae4b653db1e4cf33f723ae7f4e58cbc76753d8484149d5945", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.php": "688cbdc563971fbd74ddcbc1519080ac2d5cb847e17bd578f3423fef66d245d7", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php": "31af8b1c279b8da9e3bbdff08e7f7917e304c67fba09c00d56cdbf51d7b36a4a", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php": "ced953f3ed73a5eaa3709a9be78be68a6b73767e7918ed031f075178ba73b36b", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php": "f68bb5e3894b18f4b2453f8745c39f86adff1005fcdded369d42b69c573d97b9", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.php": "ba4dc5a0b0aa519ad30765ed0cbf8eecda532f8d3da62471a51f0aba30da1d26", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.php": "aa1c3a605247652e5b2cc7aef6535e0cc0df286f201df9320fecd335fd50f16a", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.php": "51fd474ffb23c1e1d7e983d0915a2a7062954638eb1bfa01796c002deeccc5b9", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.php": "6fe5da966131c05b9e7e165e2f655464e1b0be9089c8ea9bf2b0b6015e6cce8c", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php": "cb19b6c2dfae0ba59bd7b952857c764be8ecfe89abff41e8f016ee5feebcd29f", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.php": "c3de29ee5fe58ead003386210023f515417587a67c5588335658cf12e1690dff", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.php": "962b81f95270bbc5d56e20060b501c12b4d25398ed137b66011e2c61aa830ace", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pipe.php": "9ed11b099658962a5a3e19c87bf691f00f212fc649f7a8edc2be1d8f7f46b187", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.php": "b5dc11c60a12a37c842a325908f83610f0c0456a0efe6189330e1b5d707d91e5", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.php": "3ec873b8bd0ddb264ab476596c00399ad7270c2c5760046c9698e28364d142b1", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php": "d89f8ddc63969133845536828847c3d471a760ae86b2ae4834ce6b5db625e056", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.php": "a3a4ed9612c746fed8cd44f8e247b477b84415c74afdc58cc3bf0b691746c735", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php": "7739d653b588a8c2f92bda7a0ed1cd0e3ba8a3fa15015fb351de5b97a817cf65", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php": "48cd7b36ee38034567ffa45de26c4141ff4757cb2430be0e2739c3b531473869", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php": "b315a0a7bdc878a755870f7e1f791f19f11a23186dac1e1ec45426ca6d7cf34d", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php": "45cf8952a85469ee478508720a9f2009cb32f173043d8246bc005a7aed5b3c74", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php": "cf5f053949845a53f41f759d3ed8d769f9475b49acc14bad3c888f5aadf76aa6", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php": "95b997c2ad9ed16da078d6daacf31377e50ab7f79a918e45939ef97eb0e74adc", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php": "ad4c2f0a8b942d7e1b54c089775e7e203582f76068bd6c137af331aa088ffd28", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php": "57abcdd5c84c9cd70a03c2a2f567fcd44aed4c978f58c8b7ec5bc6ee52228a67", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php": "fabf29bd0da462da76e4e020d0b8a0128811aa5821433fa3b7bcc4f3e0abf18b", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.php": "2922bd29ace168eb14f925d440a7b8c03937d212192b5157e5212833a8aae41c", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.php": "ccdca203aea87c6867a90f258581d67bbed4f2e0b0d599649681ccb485465a45", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.php": "ff8d9ee886082464859c2ca9ce127a2dc9482daa0dd5106a7b1f0062be51f2be", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.php": "d822df8e26baefccc81bb996392c1f3dfe60483cdc1208681de12d42bf1a9fc8", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.php": "8f9aa973ee39cb51217f8f5bdd8990039e30780e894c444095ea47b2a4fd4bee", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Void_.php": "992eecce2136f89ae50424dd88bc4762005ec3ddbde9f4e9cec689cff157b8a7", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.php": "a2dc8a0e55883f4b6c53854634320591a4ad5eb6df31ae7c43104372db87fd58", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php": "6954a28005ada5538b7c807a6eb875c5577017f42c0664c1dd8236b7510ce86f", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php": "677e18896ec4c67097131932eab22f4ab597c5e75f18158075b34bc776bc7847", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php": "e21353b82c3a3c674c8302d3420f3ef02c577076367631b72b54e04e6e1bad6e", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php": "96afd231b802755f5df33a3544f9bf69e3c678e0affd0e5a2db098f708ad92cf", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php": "74a11a97db8cf6d25387ddf95fb9070eaac4fa7e28dbc42005e389fec6e6bbfa", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php": "d60dc1724727c3d942ccb5a06431929c1f74b47e31d4890e33db63e232b8719b", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php": "6ab55d14508a51f1ea54902c863dff98dca2d1598a16d77b921438df8420d49a", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php": "c8f7e38b4f6ef5b31b75c4b12386949a02df1c8ef1906f024468c080afa327e0", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php": "32cbba07044d3f5c0a4dfc6a0b524b14d60332bed605788335dcbfdca8df9671", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php": "ec7050b1bbb2f9a9965c38cad7b224c42eebf305860c703711b437984631ba67", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php": "5ca1b094a07fbe4a107141a506a8148ccec0c6fd2b05696ae45dd904330078cd", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php": "8a45716153f75efe1f4ff493d9f0cbfaa885e3631022b2bf4d185654374f6d14", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php": "d650fb124782bb544a0acd0a1db81702f7f59908b57c4c48e80fce5bb7f8bfeb", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php": "9ec555c4e1ac143255cf6209ec8be871f914ca825671394fad4c24573ee329b3", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php": "4e453e11e3871aeffc894c14a5f066d3c216d30cc2cdcec229abf6fe9f70f301", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php": "2ac81c254dd41ed7ec20207c0ec32db9f9c07fc375d8b87bebc1578ebb9e75eb", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php": "4743ba9e1be19a7095a7d8f6b223311a6fb351e99749868255604d77d72a6e73", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php": "a4057c48e57528b8fc3c564454f217e87142f58b6f7241a414e7fbe9657a0130", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php": "a33ea0c37b4185b2aa17990dfb435608b3a14c35aa4fdf26596a9940e9f0d3ec", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php": "1eba821056df840f2523c4552df1159c35164e5cf73abddae8be3e35b1b88174", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php": "267f140d33e4cf90fd2e76f7c6e572657af681f9fff286200273456694c566da", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php": "b9dcd950129ebfa675418c5aa617e302f801fec09622e2a9bcad5746d88638f9", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php": "bfbe6c82c87f0bca6c62051f58565b5509df7deeea63d8b7d3a251f872af6550", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php": "d6df04246ec62a9e6fed0f20ebfee69e5da727f5c6166d4a56cd627ac751c255", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php": "3ca2f513625f0422dcbb2858cb736b58f4bd6874d18d0756b7fcfc79b27b5bc3", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php": "edce20bbc6bac9b4364527717b11ed58477d0b90267f94ead5d70086c1329692", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php": "df4e9650cb941988ec366efc8a903d3d86edd04113a5b31190e3b0d23b1c8ba4", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php": "486c0e74e15a445c00595a999072fc8b3dbd7ef65867e4bfbb1d68414d5fb2f5", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php": "c4303f9ccdd63cb1001a887fd64138989abc12524f54636f43afae33394b52a9", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php": "449f689a32e7508d650e1b12dba3eea097aafa733d764919b347000feaf954da", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php": "675164c34505c649ffb8bf94ece44a8047c4f4ec78b8643f279e718534a25d10", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php": "8e887df6dc9546776b9715a09b0e79ac09e3330445d9388da0a3f5b61fa0a977", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php": "68bf2e74636906d2a0e20e983869ec73ebf14df97773861a6dd72bd5e383fc26", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php": "4e334bf6b74a47b07c6d3ba3d83f402aa244434e2c27743266c366ca0905354f", - "vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php": "29161abe4ecb0bac053eacbd4d9d6d0a124fef5462c61a6c954401488492283d", - "vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php": "1c0ff871b2dd43dfcff87ab151397ec9fb061e137a413f1073a12a57e9ffebff", - "vendor/nikic/php-parser/lib/PhpParser/Node/Identifier.php": "cede41b830a4915a30f215fed2f57994f190cbebda1976a65774ce1cd3927a9c", - "vendor/nikic/php-parser/lib/PhpParser/Node/InterpolatedStringPart.php": "e622c2cb6554ca1a5bdedbe41dc18dafbf842c104ab21a3a6f81aa13a4ab0c4e", - "vendor/nikic/php-parser/lib/PhpParser/Node/IntersectionType.php": "d9e71fe6ac0ef79e245fc82ed3ea02a4d981649ff2cc7658104384ba507cad75", - "vendor/nikic/php-parser/lib/PhpParser/Node/MatchArm.php": "7e481afc9a9ac55d689620bf02bd2ec040b0020948c0b45022721e0eb2e8c990", - "vendor/nikic/php-parser/lib/PhpParser/Node/Name.php": "94e48045300605d197c7edcd27fb9a72cf96d3f2e359ab67621e6c63e6e350a8", - "vendor/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php": "8c9cf335d24d4586a327f48f9b8d778c17eaa83d206e51dbe13e7563e4478375", - "vendor/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php": "9859677ea50d6af93962838ef53a9b85e37813bbb1a25d312faef984ee563251", - "vendor/nikic/php-parser/lib/PhpParser/Node/NullableType.php": "a012e2a478898f1d2e860b837a5ce338a3276f8286756f7be60daf925085754f", - "vendor/nikic/php-parser/lib/PhpParser/Node/Param.php": "374bf0a201832a45027ac381571ef66040caec87a51a816c2bcf6dc647a7b945", - "vendor/nikic/php-parser/lib/PhpParser/Node/PropertyHook.php": "9a9ed312012df7e2d11d64e84c048811071dde9242c38d318ab5f90fda05c9b9", - "vendor/nikic/php-parser/lib/PhpParser/Node/PropertyItem.php": "7ef310b30abcfbb41fc4f3df9c6994eee3e5703f61e5394bc98da996943e645f", - "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar.php": "5c408d2f5439a74451f2e059b53457c96b58960518a3f2d5a62ed2cea6748411", - "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php": "cbd6d9a260eed90c3f4ebb1b1d7c0e813e7380d88f38e5ae1ffefa99c2edb140", - "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php": "c5c399fc1f1a6552d3801e4c249a824c9048e87a8bd45fdd4ea1b745164a3517", - "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.php": "3be506c0b4ddea055123bfeaa09a5dd1c3a9173047b6162018f7ce0997a098e8", - "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Float_.php": "770cf182c04670e0aa79e26e09ab9e8912353e5e26f5e615da5f265ab040ba4b", - "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Int_.php": "72eee48f57ddb99a9b01e30887eb486097e433e387ba41def19a87a0a61bd3ba", - "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/InterpolatedString.php": "7726b755a255431acd315449bb0c1bf121aca308c4a563b4f9b2facf2d4bc212", - "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php": "a02806bc93807336bb31a6b07d69bbf6276963c979cc59ea657028d51985196e", - "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php": "8204dfa8d51f8ad09447624c58102f0ead7bd5f05f62816f2f2ccd275015a736", - "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php": "aec7f0abe2c64d292768f7383d990f911dac2914c48a67f8915ca54d9fcf25a3", - "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.php": "b93f162a956686edadff0cabc59273312c9bb05f876e416d6817bfb58987aa0c", - "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.php": "193588e4def45171d96be57e0e4aff5740208c0fe3f85c88331452c1a8795347", - "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.php": "46aef20fa6ec7d04869fe2d93ed7ae7348f779225827db1233519e7552429640", - "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.php": "c065f99ffbd51f48f2684db3d2ddee52442812001c18f9afd737ed9a1319274f", - "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.php": "8ad6e85b2cbb4a0e46287802d5a50b3e05555d8f1067309a603cc5bf2dfe6017", - "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.php": "cde131b3ab28393bdf6cea1de64579cc0e7f014536cf09d4e63622b17870da47", - "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Property.php": "62c4415867806827e52ffcd0e3affed3bd15a12d226508d5e0ece12b89e43533", - "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.php": "acc4a0f40bdc9dd91e884a9c93b1c07c3e0e9d946105ea1f898540f629f63951", - "vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php": "9a0618689797c113c323ba7f0d26a5b408e69ab13fe4808fc8eea8d656bc8f62", - "vendor/nikic/php-parser/lib/PhpParser/Node/StaticVar.php": "4d613c95c4e8b05c1f10a09241f00ceeb966ac61a92986a32564397f3251d7bf", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt.php": "af62540f4e049a4d77171f7f4dc3cf05d968b10e06761478e776c83bb90a20b7", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Block.php": "a2db3e7197215887d04f8efab3ad4720ad2dae85b85a8a5f974c488967a4709d", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php": "d44e59729d1a186ce9bfb5154bf93677d9d828916fd871e89f54840b7c92e26d", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php": "7461b8e0a38b79531c395ee5c642ac406a8103f3d0d285290c90facd5411ab87", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php": "646ac0dc0b20a1f76289dcc32cc85bd137333fde7b2f4171c5be291e73e9fed2", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php": "e6238f12a18c84e5384e366192f98d15faf7083b2b198a2d1886a64f73f3694c", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php": "e717f1d5d7cf072613284cbdda37d4b6b1b38c571e5ff1f26dfabe1f4271c4b1", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php": "3e0becfcca689f858f1e8393fe9f7ccec13db847f5f2fc5b27a51541ea8dd1de", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php": "fb97e2c0b38f92bc9768c6f7dc6f6b60d68e2470f9552d87953da27218f81959", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php": "f9efd623c06c1a076b3c7fdb0d1e84357962ae7ab3addf5a37dff603b17e5f8b", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php": "cdddee39a64c32bb923af63c59a916dc32a8ee111bf71e97429380fdde9e2206", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php": "a59a746e710471ef8b93dc7bd3f3c277a35501077cbffd63cad1a058fd69c184", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php": "f3fc6e45b5c7e37db41bfb569a18f84473ae87aeffdd9b39d6b51289da39be95", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php": "0e4df9e6cbb8f685e975108f6ad829f1d49f259708ad091365e8002ba09cca67", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php": "6d6f02629b9372d002690177fe6f9977fd260cbd9a9d7b9938e56866ae79f528", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php": "9680cdcc0ae7e1e11f1ccd93eba62af1dba021fc2fc03d43673fc3cdc8205ac3", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php": "c5c9870bc6ccc7e657489ced637908b01294acef46be5d73801280c3175cf7a9", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/EnumCase.php": "a16e07d8aa4880f13f38cd889fc95fe283d211f0ff25dab9a73ffbf5c70034fa", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Enum_.php": "c29616fcc34a29facea615e1a243dd8e90902e4c1e981ac6f01b7f595d316e6d", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php": "f60d9c98244467319fe31d428604880199c863b1b9d174f563be389615db5a9d", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php": "f9a6ad6d9a6cfafd701729e83c88a8b035f514d5e0ef9f6e4fa0243a51962b03", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php": "ddc23435290bd49cdcc032cd5ab4fa2938be9a0ff730a6211bf966a2cbdc90c1", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php": "feb8b2097283c3ad1bf9887ef05f574f73fee8163c3683e6fece896a142ef87c", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php": "14185718285583d919d2276d34f750d455dfeb82c3f3b750eda9232e11468f41", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php": "9d4186831da6f9c54dfdc9648ffa65eb1f5edde30ce9bc8e9f0e1b7dcf91b315", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php": "392faa2d03c64872de06c2dab358b1629758b645fc7d296b28be5bbc244dd03f", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php": "76148a920654c853995e73bcce7fbcf94318f2a2e6f720219aad219135eaaa01", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php": "11bb40e091c24109f441bc91ae1482e15a34813322d608a37f40454e4b820335", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php": "ebaf402904b2024e952cb246913750420ca5877511eff842c0c03e876d6a2111", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php": "7499d7e6db37e2ec9f63312caa848959d153a40fb8354c15cec591870d75112d", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php": "3751f84488830fcde0e71f147608848e3af0dd516e99f62998477b66123f1b81", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php": "596174c16909c9e927f0960d65e9432055030ab6e324956cc2617c115721a4ac", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php": "3cc21128ba727be07a34d6162f0468779c2cebf85970b2c31d5a32a9c8b225d6", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php": "ef02362ba47499142f771a3a84098530b10e0d5fd54b8da91bccfe5ffa28cdab", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php": "bd4b14ce323cf849da58960b62eac02cd248f1f9ef697a56d538b9483ec7eef7", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php": "946edaaf1e7fad8d0785f0c4b6e72507c7814ec3c5fbdd085dca71efc4f07f8d", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php": "73c88eb938ce2625811f095b3e542f2561dcc4215aca08f05a3cbdfbdcaa0f3d", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php": "2a75bdb30c6b2c39735bebc21246dd63748d5f88290d15c474c408a12b2810d7", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php": "834ff72a03fb6ac625e5a9ce0d0b115adf3644fcd685ab6680940c42e7d2a6e9", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php": "982e58185b852490d5ba41f9a70adbad4c2dffcca3c07aa493ea68b345d251f2", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php": "147ab388f8439479b974d025a876907b5203078c28c8e81dd489c092cfdd8026", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php": "899f0ad5964c440c3d193b2761e112c630330eea1e7aa4c32883395be709e161", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php": "56a40c5aaac95414d22255e5537f94806ff76d7b544d11921f30d1ba8a529aee", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php": "189b04dde1ac4e47fa13234313317e75cebefe038919f0c021091c5a9fca2012", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php": "5d0493e222a965495178fe8a8b88b85b009d29c25b28db35a523b3e31582f10e", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php": "1c54e9b8053816abc5824e676d41b2efd25f42cecb831d70988c7e0cce82e3de", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php": "3082ae0bf6a7e82382a2c54a228ee377e049c585c46cce64df7761a26b43c639", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php": "cd23831251aeb23a92dff4194a79a5b7bb1f2771631ef2592fea1397e6eb9fa2", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php": "b8306106f1eb953a3e855e544aa510cb0d4da4838ee0394cb723180f1de39385", - "vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php": "327130124087aae779da331846da494a95e2fa2ed1cdb07bbbb8f9bcb5edcabf", - "vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php": "5633a4821f1d92f373e76bb8b47d799bf14d91cc4e13117e09580e88ab58d045", - "vendor/nikic/php-parser/lib/PhpParser/Node/UseItem.php": "5869d3e22bd2d8fa0b8399c91ee316f74ddfc2e91a7cdf5d8071a2ce6a6a4a16", - "vendor/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php": "2031fa31e4698d611701a553ef46cff711b82a650b997cf57e6df95cee0a6b3b", - "vendor/nikic/php-parser/lib/PhpParser/Node/VariadicPlaceholder.php": "530d8cabb35f674fa12c812f1f879943e1658e944975c7a14abac3de1fd6be12", - "vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php": "b5a9bbcfb2e85eb01d566d3eaf831029b066ced2679d98adabe8c8776b3a86ae", - "vendor/nikic/php-parser/lib/PhpParser/NodeDumper.php": "ac5c06e19b3e75e192a3a701a60ccd4dc57d739b65029765b4f5944088f19cae", - "vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php": "d937e66449205c8aac94ebbb2a45b3208e052f634c85e1dff7a467160febadfd", - "vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php": "9fac77e8ea2f056fd662d9a819d7f857fece2a108af35937981c007713984736", - "vendor/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php": "26a6379d56fe546a707c92287ee15284a29d398ba4f6042af19fbae165acfb87", - "vendor/nikic/php-parser/lib/PhpParser/NodeVisitor.php": "8e851a8442287afa9ad7dbcf644d75f45dab8280efdd9fed8f346cf42578847a", - "vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php": "018df93e22741603c5558acf363b37c30b55dc27c2703e5854b84a2e3a081ffd", - "vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CommentAnnotatingVisitor.php": "3ae3c2e1939e5e10c63a42c192169a6fd46485a2aa67c045b1dac24f002d2bfd", - "vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php": "60e7a2f53a7dc2931334de50218b6431e8a646d824fd629fe415241e46106e88", - "vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php": "4df0cbf759e6822616278c2adec5afecba4771a8e6721f67a0902975105a2d4c", - "vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php": "591e6e4d62294119deeed035dd08ac5c1f3bed95de5add728f55d907ad3548d5", - "vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php": "63720759ca7f378c83636627e7db24fb11795c0dd18ff49f91b0a19cedd156af", - "vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php": "8661e95d4bdae96b7c0163fd27040e50f34232785198b6c3605a2ecd93aa517b", - "vendor/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php": "eca428fcb22637ba5cdd172eecd2ec98bdc2267b259f1cef114cddf4594d5eb7", - "vendor/nikic/php-parser/lib/PhpParser/Parser.php": "1bd7d9e6f51a9fe774e6024645df4ac14cac698f1fb3f1c97b47925a070890bb", - "vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php": "53556d5a9adb8314c52cb7d4d0d88f694f80910ae2533c699187a35a148f583b", - "vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php": "ecdc15f12020ca8ec30760b6061b5502a8c4fd30ee94dd7f86d4a29f167e7999", - "vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php": "3c7f2b9418279aa2e6303e932db918eab3ca55349dddccd2b488f88d62b783dd", - "vendor/nikic/php-parser/lib/PhpParser/ParserFactory.php": "d2b3816a6707af2bb918f553170b2b480849a76b367b48a41b39635752d135b6", - "vendor/nikic/php-parser/lib/PhpParser/PhpVersion.php": "86d2acc2619dbbab0e62149b43f264ba9e804bbc520f02a53073d9960ec1c7f9", - "vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter.php": "95627ed06bb89660934498a2890033040af8b74e70a182ef59c315d07979aa57", - "vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php": "b24d5f026e94f0f7463888dfc5e8f525ac84f0f10f7482181fac58da154b0501", - "vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php": "f483f831fe8e92c47d03abb413f9d5a8a9c08abe94005f0ead9fcf4cb56122dd", - "vendor/nikic/php-parser/lib/PhpParser/Token.php": "674df1e06ae2be80f5e60df6cbdacb34ce362035664d033cf8bfa106121d6f59", - "vendor/nikic/php-parser/lib/PhpParser/compatibility_tokens.php": "74083e705700d25d140ea74b0cf3973c2198bfbdd94a5376a38f915dd4a2d59b", - "vendor/paragonie/constant_time_encoding/LICENSE.txt": "d175ac2e6bc71c13117ea49cc2c3be95284690dc07cc7fc441c6538c280641fd", - "vendor/paragonie/constant_time_encoding/README.md": "76f804fb8b5c0d114dab5fb8047da0593822283b6023882278b9e58fc3506803", - "vendor/paragonie/constant_time_encoding/composer.json": "fdd3047e3c8fabd57bb599be2c4f9c60231036a48b930d2ef36b89ce7dbb0df8", - "vendor/paragonie/constant_time_encoding/src/Base32.php": "be5e581e7772bb2708de934af8692b7611082748478bb294bcf35eb7bd6fba7b", - "vendor/paragonie/constant_time_encoding/src/Base32Hex.php": "32efc37e4fc295fa6fd3b09500c929ced048dd008889247cda3888f69af26d35", - "vendor/paragonie/constant_time_encoding/src/Base64.php": "b701e83d1996f5e437f67506a226ba8723370c915eaca11d651bfb15ac217eb6", - "vendor/paragonie/constant_time_encoding/src/Base64DotSlash.php": "cf15dd168d943f67966de03252300f43abceed3633e79db5308d61feaa36a961", - "vendor/paragonie/constant_time_encoding/src/Base64DotSlashOrdered.php": "4dff84a34984e41c0a551e1527c9ad9d329434360c237c4076bb4aea67873261", - "vendor/paragonie/constant_time_encoding/src/Base64UrlSafe.php": "3b09f50e324d12a18e619136c430d2b718c5822c99c3985262ae6343455a7632", - "vendor/paragonie/constant_time_encoding/src/Binary.php": "5235bb3390354b6c9ed8446b98f6a8538adeb8d889c3656e11c1b6107701d52e", - "vendor/paragonie/constant_time_encoding/src/EncoderInterface.php": "b794cf66d70b24199e36d7d717583e306f3a963022396f220dbdeebacdf32a6c", - "vendor/paragonie/constant_time_encoding/src/Encoding.php": "062a91eba1850c6830bce2c371b4103a09341546d23e3a2baeb59db0132a5f64", - "vendor/paragonie/constant_time_encoding/src/Hex.php": "a71ba92f1e16cde5b3cf9593426fb7eb75416340ad7b81f83351ceeaddb1c211", - "vendor/paragonie/constant_time_encoding/src/RFC4648.php": "20c9d43c55fdfe8d3ede3cd0d72df9f81592c78dca167ef43b03f6b7db6dc1cd", - "vendor/paragonie/random_compat/LICENSE": "e79a4c7d03c72850c60b2d5c41c2f92d33448ed2b243bd4686cfa7674e15e3ba", - "vendor/paragonie/random_compat/build-phar.sh": "c32f3ec40fbc05c1b301e6fd4de5c067ba31c70f4ad4b3f6f4798743235edc28", - "vendor/paragonie/random_compat/composer.json": "dca88fe15257253068dc22f07563b5b3aba76fe5f71ab43678f91d4f6a5e0e3b", - "vendor/paragonie/random_compat/dist/random_compat.phar.pubkey": "8a02cf9db52b09b0afe04f3e812785c2a9854951bec0c31568a13b82d4870005", - "vendor/paragonie/random_compat/dist/random_compat.phar.pubkey.asc": "3c55e651398d15479bcb279fba8e30d8c43155834cfdb5fecb62e61c9fd79f33", - "vendor/paragonie/random_compat/lib/random.php": "a978e3aa758976cd607e0e865a3ca93b03dfcefb457e8e6c8077ab5460a888a9", - "vendor/paragonie/random_compat/other/build_phar.php": "c7bd99692001ec4acbb5d9a6d9ac2792e926879ae5ef70ecb127baa0cef1d10d", - "vendor/paragonie/random_compat/psalm-autoload.php": "5cd0ad215f5b753db165e4b1eb638ced0ddadca0c78d966fe61f87acd58262f2", - "vendor/paragonie/random_compat/psalm.xml": "e4095e243d790a5001df8f469382c2d97ae069943bd42dee0f5e613dd958cd4e", - "vendor/phpseclib/phpseclib/AUTHORS": "a6a91aed5d5925a7f9ee7cd89ebb882ca47f171e1d81c41263a1683999163bfc", - "vendor/phpseclib/phpseclib/BACKERS.md": "18af0d496d83b55262abc93d02b24bfcaa1433afb2be109912d5ab4b5a307b26", - "vendor/phpseclib/phpseclib/LICENSE": "fa986c1ac53f7bd83e30fe296f8dced7003ab0a05ec11945b5aea4a4ebd626dd", - "vendor/phpseclib/phpseclib/README.md": "f9acb62917d6ef2507967bfe520fbea9c2747f0212b8149aaab1b993fece6851", - "vendor/phpseclib/phpseclib/SECURITY.md": "f00bd0f3d5d30753819ebbf2c0b7ade27cedf2f798c77a525bb101d46d721c9c", - "vendor/phpseclib/phpseclib/composer.json": "dcefbd1d246868583ae9be618724be7df44207d1b3fb1d6300eed05d4556fe82", - "vendor/phpseclib/phpseclib/phpseclib/Common/Functions/Strings.php": "d6b79e709877c17fbfa8fe06c2da5998ec4a7b3c132d592c2cd6c9087c555931", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/AES.php": "692a5952460697debe93f3199de5e2bda9a2fbf0adee532e96b19d2a1b73a81d", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.php": "b9bd532aff5664fcc6a0d8c85420d44c4707c337e3f5bd44a62494c655f9aeff", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/ChaCha20.php": "e7f2b4a9b91b72dd8d8535406ad58ced441c176e437ad06c2f6947df86d9ff30", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/AsymmetricKey.php": "6caae52753f2e744e636277a08d4e4d30ba117b4969725b73ceaea45a952349a", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/BlockCipher.php": "cc58c469b932b632b438901859f8da0b78ec8224b44d4827011059d1a43034e4", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/JWK.php": "914e69b3d2c7d480b4459232a91bca4c5b28eb76e291f7247c243c4c6e1549ae", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/OpenSSH.php": "57c221a46b7fd1e7c54032c5372018c4583c7512eebae7c1d841cd38c1a85f82", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PKCS.php": "22b276ead56c9b672d04392a9319bfe30b96e900ebc999e5ec1b21960ae93dfa", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PKCS1.php": "7e280d875e96b61012c61c3fa91f447eb41afd31da308fb04393f5b5dd5c94f5", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PKCS8.php": "d31a12a77f95b2197c9750b43785fd4711277992b6d0af43736b3152d0e793e4", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PuTTY.php": "3a066b7cb044bd05b043c9bb9e5bb82d7c95dbc717a183977059186f03328bf5", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Signature/Raw.php": "8cb27ab3c8519f82369de11ac8bce591cf7ddb10a951e5e9bf1d9b165647eda9", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/PrivateKey.php": "16de9483ab0dc23747fe15a4105a60e14664b402e02b38826d17b4aa96548915", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/PublicKey.php": "ffc3c1fdcbc8305016c222dcf621912450a09df9e10f9782d64ecc1780ee1dbd", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/StreamCipher.php": "e27b9ac0ffba2ea0999436c4467e3ba9906c2eb3ebbc4d99d421b33edd7e009f", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/SymmetricKey.php": "fe7740d4552d0444476c2bc3d3ce08bc21dad7b765c4134dd629eb7b691c2db0", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Traits/Fingerprint.php": "adb68239d7e2d00ad836c3d11798473d0c558b0eee67089598ff99bcdfcf6544", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Traits/PasswordProtected.php": "7f6f2604e9110905c7883f07f75d9d88702d515f1bd533910955c83d482fcd12", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/DES.php": "6686fc56fa33826584c1b220ae1dd556d12bd865cc6959a6a59fa0786702ba06", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/DH.php": "e0ea8ccf184200b281150dc348f64b9266f99abdcb28f8b44e779ff23ca5736e", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/Formats/Keys/PKCS1.php": "3d30831d96f5c59bb8368d5bca4fd66f18a11638d6bb36f9d606a5e49f5e4c74", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/Formats/Keys/PKCS8.php": "fd85c5151b3482d394aad15e2ce1ac6da86c2757bef9d8c9c2d1c8d9f555a3ef", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/Parameters.php": "6cf07f8ae0b7fe07254d56953d3cc04ac104e8edfdda72b4bc1314a72e75eee5", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/PrivateKey.php": "7b4df447f262f681f25f779f1ec77ac2479c6aeac0c00aa665b73bb059825cbf", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/PublicKey.php": "8f67d8ea45b859beed9af50c2fd03f9a40e27d735d0bb81c15eba5dac81c3b7a", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA.php": "f166e317f0b2879fee17849ead840a5749c267d065e18c093b28c4a9ca7e44b3", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/OpenSSH.php": "c5a91a642c2172934d894b35baf541fb3ff0e898a52b2a33a2edb5fdd280ac37", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/PKCS1.php": "85975a6831ff0b1529fccddc93125528be06017e7a00e130a6db05fd90c843ae", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/PKCS8.php": "5bdc5407ecc03d46dcbf5cdc44d669487357b2f41705f551fab0c5b178cee9b7", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/PuTTY.php": "37e4e0e4ecd835c19678c32bc9cf0dd9a61ce45f6760b60a688f3c5616fcee5c", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/Raw.php": "54b523332291c940328d003c018c3a330d4118a7cbac773528b4718492643c14", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/XML.php": "e339b07ef30dcd534237210923f72225c577eb3346b9bbd8bbc65ef1bc5fc5f9", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Signature/ASN1.php": "3b509f4799ea14ccd49d31dbd8a57697940fefa1d71b781562f3d9326df06a5d", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Signature/Raw.php": "e970d0755fdac9c4e4c07244031ebe3e3a6dee3c15db28f9bca242cfe26ce952", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Signature/SSH2.php": "9f714ac9c4f6e22cdc0486137d86b30cb4b30d91d9a07f50eea1d80713b00b50", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Parameters.php": "82203ee71f541bed2704ce45441e22a62d5c257cabeef6030a8758758e6060ea", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/PrivateKey.php": "1157073b489dee95c1eab5ec36e0c0a4f599acb0feb3371410a7983b098dc276", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/PublicKey.php": "8ebef8d83dc70bb0df4966d39cdaca5dbc53ef9684bfb87beeb0c36f242695a5", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC.php": "62be80e6e6e0e4ea82496fcf33d0c33674be6aa4f954f2645289ab7a94e0ba45", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/BaseCurves/Base.php": "993bab71b1e4205b77be6a3f6314ae427a11af1aa62803a666d1568ed4634099", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/BaseCurves/Binary.php": "ff25d67bcdb67ea0545c751ebf87e1574bd35f16dc31d7ac6141a949583ee1ba", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/BaseCurves/KoblitzPrime.php": "d5fa06bb56a30fc68abff0b9b5b600c65443eb1c82a34dfe9e01aa6b3070fd12", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/BaseCurves/Montgomery.php": "988b9fcc0d2bc9df3db8ec336df60b306e951f4836f62e6a3731957335dcabf7", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/BaseCurves/Prime.php": "a822a0c954097f84a978214d4e39a3a38ef63f6c5fee00b2fed8a94c05e8c768", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/BaseCurves/TwistedEdwards.php": "2f7b5e84ee8282f3eb53fba80956a78bfd89d8857f6bde3af6ab94b4cc7610a2", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/Curve25519.php": "66aea6351428280f09b431749f1252a265bbd3790a2923bffcf05d1b477c4cb7", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/Curve448.php": "052c1a0e6fc62e6ef54dd7e402d678647c33e5cd0138f5f493422f2469008917", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/Ed25519.php": "2e6f6c4caa794610464e1bd2da64d25e8f881fca413a57f6c70332550285109c", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/Ed448.php": "5708a5202578ac69cd1112e31abbd3afc10cab5afa47fc8b5425dc3175357069", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP160r1.php": "deb62c121f838e9cda37d003f497686007f8a39a9f09176bf62ef8f4b7759be8", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP160t1.php": "09eaa2c9efdea72a207dd7c5144a8088701d032dfd9375a005a1047650ddb7ec", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP192r1.php": "f18e3a45760b1e3b81e682f94e94b5c1dbcda744ba255d59b7c9b2f627052289", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP192t1.php": "de27d624f56943fa38696ba85a2c2d1978ba2bec9b673631dbbf3165e23f450a", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP224r1.php": "db0183501dc9c6639cf9c7b8c347164f67c3dddd5fc071d8c89ecb9e222178a2", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP224t1.php": "cc6b1202e1339afa64ca1e67fe8d31020dc282a11d84a08e884ca213a4a003c5", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP256r1.php": "3c68c00151a944a3c15bc01aea71261d940227a1166715b3be5668301a0f1e75", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP256t1.php": "f9216e935933e78f7d7fa2f7b62c996c6a69eeeefeccadb66a0815348b261990", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP320r1.php": "64f7ea3286c7ce5e7c60f2e659eb65d5ce81e1db2f744f5c56479f8f8f445297", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP320t1.php": "41eb6b0ee51d1bbebd9a62b2ac19e77bfe313d383e4981d82a8bf3aee8171424", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP384r1.php": "557a7cbd3da206577ceae6321355bbbad2abe383307eb70708da6abf42c1cb67", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP384t1.php": "2fa97b4fd32cfc035edeb6d9551273288ec00dad1765a2656f27f90cff389b81", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP512r1.php": "5d68e308d315bf211f9fa1dddce3dfc107f78f0e43b6896edfec8a4d9d463bbe", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP512t1.php": "bcc3e23986a6c8bf8235f3a14893204199630006d9392b210c09ac86b8649a11", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistb233.php": "601b1a83d293028b8e4ed17fb4a3bcc25184d0e49182e359308fed94fb32de95", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistb409.php": "31ac91d439b73ed3614431935a250135e9e54ee6e8a1048b0ea2f48e23b0ddd8", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistk163.php": "a48b0530f3a4c9af4c3b1ac6703fb55f5edfe526d40093d78a7a43bda0df5969", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistk233.php": "9534812df61acdd9cf5ce10daca24db377585491b81505e09def2b2f068fef5c", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistk283.php": "a9aded4400f549fb9c57c4f402900a6d8141be3817a27c915786ef0eebaf6d18", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistk409.php": "e4ded06f6fb75b64dc3ded56f1a2a2aea4e381bf2e249975a85a60cae14e9b60", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp192.php": "2de9dd468a87c7639d83ad49356d1860a1953a7688ffc8bcd1b3a0e46e49837e", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp224.php": "0c2e38edf0da740f6b1f6be4f20779e6b5ebec4f917857f7abf0ca5b0696095f", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp256.php": "30f9ed39b57bcdacd15c8c0622362c3c7af170f76953f84736b92b7ee0dac457", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp384.php": "38888a4454bb31b4b9b422ba1d7497fb074dd7504179ea3268dce73cc73d7f61", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp521.php": "841bdcbadbe1c616c6b7adc92f8e94f263fc40c386bdbbc10967944494c30cda", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistt571.php": "f529bdcda437d677129cebaa179df0e080fc73ba46602d6da68a84e45fb25bff", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime192v1.php": "34a11208a433f60b42c9dc40eacbc614f2f2d2026a592b2942f68c1358ad8798", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime192v2.php": "714ef2262c1ef75d725de46b8570a320de6835bcc4222018aff1e534ca168645", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime192v3.php": "9811bf08b26f28447060249316d126783369c3bdb6fa4d3818e1bb46fd5fa420", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime239v1.php": "5568e8a03e05c4606f61862eb46af7ddddb155d163d707f15f3090eb0eb7f405", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime239v2.php": "10e631338812b69e805c7406f6d218544f65d59c3a491ef102c9e54290c37164", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime239v3.php": "bce52bf0f3090d3ebd3cef0f6a638c027b4cec9980258681db2d7e0026c6e0ca", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime256v1.php": "edb3478957437b8dc012faebb67ded74a919efa35239d178a963521520b1b98e", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp112r1.php": "0a8d20bab7dd92e39d254e127926bdde98a3b0d512cecd360682149cda31b8a1", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp112r2.php": "3be7da395e3b14326e69aa7ab76d2dd6973d352302dd9c03751188f14f81d006", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp128r1.php": "2a392a1e64450779a4017292e686e23585e7ff2244aa00676ceb9f090e58a8c4", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp128r2.php": "f669bc5bb69bc08be1516e8670e372d9227d9075fbfccdeaf0da2391651a6cd2", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp160k1.php": "e92b92ecbc07e800be6938a47190a27e975836b5e9d2a3afeee7de4803f925f6", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp160r1.php": "3ad0275b14a4af9fc37bcf00b00539b05fb509c493b54e236fa75f362849a147", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp160r2.php": "8f72af2eb8456f28df8dbc7ef4fc2d5c5d1204effa2206d398c48a6f2ee23aaf", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp192k1.php": "5411a81549e805a9f55b871e098b5838bf563068b5325b9782c2f515f4be3851", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp192r1.php": "7bdd1d5c4c72647e65f92164bf9a5f80355d8b03fc8aa27e2e1592fc0e42347c", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp224k1.php": "15197b14153575b8d9865d58d017ca1a989f9f464b8869c316246afd718b6f82", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp224r1.php": "0aa2d5e2f1cffe1237b47fae5ac75fdd8c25c0edff5d6be9cd2593a15e6ebbea", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp256k1.php": "ecd5080c4ed165ac396f4cab6098b9681a8145ff1f79eb31c307affc48c7fb4a", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp256r1.php": "c242d1b289c8635d32dccf65b47994964d1f0030b738b36cd4432d5bd796ab8f", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp384r1.php": "30f3ed0ad3f70755a81e6abb6cda1435df8eac239273d81b1f898f7235b759b1", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp521r1.php": "0649a3203e0d2d09c3a29abfb7fc679a1453b6ecb3781995bd7dfe9c4b08d42a", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect113r1.php": "0e36f476ce7000cbf950baf4c38a9ed125667e2d8f073afa451a465ae071beae", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect113r2.php": "483a68703c99b53f2c3e5006df66002a9addd676607f6d27172f1abe15fa3cc7", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect131r1.php": "506af4cebc3c6b7cbb6348c19924ba5abf81a461aa34e476fea5cc46147ab064", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect131r2.php": "e1ef1da5f6b069b17d89ee7f9cb811c0b840c0242ae7dbf1367cea95723b0824", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect163k1.php": "acbb8882e53b249536e5d970d90065dfc5b2c968956ca79e281c0794b812e567", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect163r1.php": "2be92eaccc410eb0808e10d1fb532e5908dd1bea55ae1c344413972144367a9c", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect163r2.php": "71a5e03300130cb43f0598e4e1b164c950c7f72b17d2caab989a3e0a3d35020a", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect193r1.php": "2a3abdd2bae6d79459630e2bb698aa6f3f7cb3631f52d88ac51a3753f8865f60", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect193r2.php": "02767dd11ca7ef4f85655d125ca1c4783d695066bbc97f4a9dc426da45369a6f", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect233k1.php": "d34d3c028be6fdc5d687836932a76ae5a63f31ce6fd8dd5340736ad7a0a1ebc5", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect233r1.php": "8c431a9434ad1b5788030c4107d4428e5fc1a6116e944a20abd5b2691a54ddca", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect239k1.php": "db410efe3db1e17f09a6d521e1f22efd66e05f0d36779c5dd3437c598cafef0d", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect283k1.php": "81567b11405bfa6f9d22dff320d3300f2d63bffb715b80ff4964c71544608231", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect283r1.php": "c2f0bba615103994ba9b7de709b24be6ed3d05f171a1a6b0a9ad23308945770e", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect409k1.php": "6cdc2976948148175ee2e5a56dce94ad80f21913ec0484999d2d2b3fb4183237", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect409r1.php": "bc20f0877c474b5c3dc58171f70b205be95438b4a171a95101a3a9bdd42da5ea", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect571k1.php": "f9ee4109aba29f623f0bdc262f547dedf0e8e1b8ed103acce1f01f4273eafb8b", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect571r1.php": "3a1810284928196fc4799eef40edf3b212741c394c7ff661c0714faaa7262965", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/Common.php": "9f01f4ece97d1f50b8dae1c6921105adb3a51f4b277f02115feb8d9b1b417e8c", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/JWK.php": "9bb542e0e7a4bd33a7918976dae2c0e429a25765f6671bdb5cf40e7f574b3769", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/MontgomeryPrivate.php": "46f2af92fb03b9d31dfc07eb3ca342b8d6933c4b0568e1d556eb6575eee250f3", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/MontgomeryPublic.php": "2c201da17f1f9c3abcc79afcefc1f8d84c32d5add483e92f7d54182740786bae", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/OpenSSH.php": "6490b2098cd75693cfe33f966be1cb3bd005a61f003f56071931638bc5fbe91e", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/PKCS1.php": "a93596ab555c2a194058a6add514785a0b02456ae2ce45733f87d218c8b66114", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/PKCS8.php": "ce522c16e75b2f929ceeed162c0f9d2211eaa3293197c983e74c105ea5420c3c", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/PuTTY.php": "c1ac9e5da48b82bda3be321c9ec02c050def9eaf80545f08a89725a0c450d627", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/XML.php": "9d5b122b8f30be39243fe4b6efeb542958200476842a6ff906737e8461fd51ee", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/libsodium.php": "f581311513e0475ff0ca1530fceac46105f1debe249143aca238593c52e4cb32", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Signature/ASN1.php": "4aba2ae809c8a0ec001eab776e9aa39f0290319e91d9c90e84655092b810fcee", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Signature/IEEE.php": "a80052c395cc66ad94b462f0ec3aba6b7a3c29263c5cda4d38aa7de9978eae57", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Signature/Raw.php": "097ce05334f703c848fc6656beed32594a45beb1f55b9061d11e04f918798d7f", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Signature/SSH2.php": "d2690a48c8a2ea24d2417ff35eaa8ea24481ba2f41c931cb60e5fc1cf7d373b0", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Parameters.php": "36a44329fec27be044bcdbbefaa606d132cfde583d823abf70a72e9f17b3f0f6", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/PrivateKey.php": "94ddefa798fec9b0a66e425d8c30723e9c747bcae9cb4ef70363ba1b0f418dfe", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/PublicKey.php": "925d35c181dd682d27eee34e33e23603700947f9bcca50eb3e3cabc5ef6437a7", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php": "4c6e607b49465d9685b962086418347281445c4cfe07e445fde324f427888064", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/PublicKeyLoader.php": "cebe354686e80f58253b0c8e5d1529b98bf0e5a5165cdd7c6cd84be01f19290e", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/RC2.php": "e219a20aef79cbe2585da29dd6f110dc7bbffff2d1f0ce4cb75640961518e7d1", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/RC4.php": "d94c92f67181e9f95a0697e9a026d90c0158e4efc9d25cc2b28b74b5f07b7810", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php": "dcf9234a567288e28a2c9ae94dfe9f0309be8d48d67fb2591d284bf2416bb38f", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/JWK.php": "84ed293a957836f55909bf05100087a5c8c3147e1830f2a5433cf9d2715cf410", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/MSBLOB.php": "c5260cf2e0cce87de39e6188ba228131b0946478a8f0187fb06d657dad8043af", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/OpenSSH.php": "31354121da901f378b345a61beaf0c7034b1613daf96531566ad5834850955fd", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PKCS1.php": "6f196c3c447668da50d5f337c6c089a9ec2d6b3831345223a8725be4d22c1435", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PKCS8.php": "a9f7794147d17f24f0278db2b7a1d66f3c2ab2e75ee45c8be09d106a467f869b", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PSS.php": "8471a53341642aa603bfd1faf45e649b64ba032237c6d67eafea207b62c2ea10", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PuTTY.php": "af48b1412302461f88d99f501c2ca7586dff713460c8d7b491f6be4b03e7758e", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/Raw.php": "fb1ff0b6244b55bf59b80b0f5f2a2dc6fa6239f8c70d58233a97dfe045337d1f", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/XML.php": "f01a5797e7fd733c1e6c3c1f420a89470574e6c13bc2e7147e88a30875767cee", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/PrivateKey.php": "03f6f1cfc9e4d2c24dafb7873ebd0e3d7334401cc2eac78d2dbf8b308aad9e82", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/PublicKey.php": "901b207b03df193bc772e68afb806bf846a18ad1dd92209262eba262cd17fe0d", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/Random.php": "8ef896c67f8a3aeebe58c3709a86c323c6e5bcddaf942caeff65a7a2103942c6", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/Rijndael.php": "609fa9e6e51b4de45ad159877bb60086f446c15deeb1bb24a79dc03eba5a06fa", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/Salsa20.php": "b495eed427a738727dd8087e6e6e16585cc54a31df7ea212e9590f7879edb2af", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/TripleDES.php": "162f8edf1185bcf7c6d0fb12959ffa35aad2d3e41035bd320d24841132e3137f", - "vendor/phpseclib/phpseclib/phpseclib/Crypt/Twofish.php": "8dd8a69814915f930252d1ea1714b4db34a8571e6f59e5a1b7d4f74b493b3bbd", - "vendor/phpseclib/phpseclib/phpseclib/Exception/BadConfigurationException.php": "729516fe62664fcf3b0b09420f80949837be1bf72cf595b0a008940d6eb71f42", - "vendor/phpseclib/phpseclib/phpseclib/Exception/BadDecryptionException.php": "fdfdc9dac446335e935bbe21c13c6dedf531fefa603f9431cbdd5380264fd528", - "vendor/phpseclib/phpseclib/phpseclib/Exception/BadModeException.php": "5c6c7b789ce3504b433036e51701f8f95365c2ac0506105ad80f318b77b25d73", - "vendor/phpseclib/phpseclib/phpseclib/Exception/ConnectionClosedException.php": "004705647bc710bfcb7368dbc9e44849b272afed9c4b77d1b6bd64dfe23f5eba", - "vendor/phpseclib/phpseclib/phpseclib/Exception/FileNotFoundException.php": "d6a1fc03161dfe2a9350de1c0b93c8726ecef9a7c8911304a044859aa796dfb1", - "vendor/phpseclib/phpseclib/phpseclib/Exception/InconsistentSetupException.php": "576a8f0df4fe51fedd7a07691ff45c1111606720756b25c4eefc4809bf51fb01", - "vendor/phpseclib/phpseclib/phpseclib/Exception/InsufficientSetupException.php": "c183d1a6bb330fb72f4a9d3ee9333f0f9ad46c9de939117b19ae9cebda4b27ce", - "vendor/phpseclib/phpseclib/phpseclib/Exception/InvalidPacketLengthException.php": "79e6b1d631af7b1d78f7a04c91d97a82bb0fcda062280cfa8ecbe327d3a5275d", - "vendor/phpseclib/phpseclib/phpseclib/Exception/NoKeyLoadedException.php": "dd37e03e6ebe7403003414779a4412be15421ad8f6e9e6557b194e1b355f5cc9", - "vendor/phpseclib/phpseclib/phpseclib/Exception/NoSupportedAlgorithmsException.php": "4da491b657c0da4106a172226d7bfa9da8f647ba3fbed429c8a0bcceea68f524", - "vendor/phpseclib/phpseclib/phpseclib/Exception/TimeoutException.php": "cada47d9e0d020169e41b5b9a30b297668add43cc3178b7a8b233ffe04963b40", - "vendor/phpseclib/phpseclib/phpseclib/Exception/UnableToConnectException.php": "17b8ce804d837174e8a8e038d35999203ab0eac8db25df83913c903f6b399d58", - "vendor/phpseclib/phpseclib/phpseclib/Exception/UnsupportedAlgorithmException.php": "277f631842051cdd276469dae2a184516b85d1e410b9d736173a8a179a24d8f7", - "vendor/phpseclib/phpseclib/phpseclib/Exception/UnsupportedCurveException.php": "de2b767cbf30f01ba6d721f3888bad5b0b0c2acdc5b8fe3253b67dcf1e1425e4", - "vendor/phpseclib/phpseclib/phpseclib/Exception/UnsupportedFormatException.php": "eccd55f057b40c116a3e6ed1fa086574e329633ab6676748e23fb77f276b7f0b", - "vendor/phpseclib/phpseclib/phpseclib/Exception/UnsupportedOperationException.php": "6ef188582d103662f86995dd8e9b18e2d2993ceba24e237584b785e67d32d1a4", - "vendor/phpseclib/phpseclib/phpseclib/File/ANSI.php": "4223280585b6658852b5256df21ce47a5d84d3dab9eade5e259788a1bd1f3389", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1.php": "f69cc4614d9819c779383d7472fa34f27376b2627f2cad9fca515c2b6eb2d91e", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Element.php": "7d8bc5229bec57535f6e3f427d47f7efddb6d65c2de0a0f8d83f8966d9ebdd97", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AccessDescription.php": "98a992842d009956bd337f924244060c86e84fbcdf1a98e59a4f08a1fa28c01b", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AdministrationDomainName.php": "3d7fbdc2336ee07f9d323d0f7754c2a05dbd666926197c175eca60094992ee7a", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AlgorithmIdentifier.php": "0572cf3c018f7c2281166fd794ef45888c1e07d6cb641d303f196ec8499ae057", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AnotherName.php": "d2887b4fde3db274dd444aad7115d3901728b08d5f0c9adde68f550716dc3efc", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Attribute.php": "1f00fe37f28aa512350f86cae77a7fe08a156e8dda2157d9c61f4158cbd93c01", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AttributeType.php": "6dedfe483f742a6a32502b727029d72826bcbc933143798dd67aa574020fa873", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AttributeTypeAndValue.php": "ed9c7d9ed14f951ded3e782a5340dd7f8f4122952e2be1cb97af5c6612bec337", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AttributeValue.php": "b536e91ced774add8512e6c114f6af1ce12259880b0a75bed03ca28718675b98", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Attributes.php": "03738a056612d04876deb6ef98775c76c060083ebc34c30ecf999a3f44b6a364", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AuthorityInfoAccessSyntax.php": "1515c953ff77d15e37b9ca168a2d75bfc06135a8229dc0ec412a02a8e16a92d3", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AuthorityKeyIdentifier.php": "4ca9a12255d94314870587e9ea0be559bf07f58ca640ba7906d5ddd11bd92eab", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/BaseDistance.php": "3d72ec36102a3cfd21cf6c4776435b5ea21f70ed79dc5246afe7aaa2443ba971", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/BasicConstraints.php": "dc5acc749985a58289ce8f53a190b1b6336020d9209bbdc76aa75c9b02cf3450", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/BuiltInDomainDefinedAttribute.php": "ccccc1c92ec2b60b7a6d3b9ed3f48d6d558336c130ff4e60cc1c675a4af51dd7", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/BuiltInDomainDefinedAttributes.php": "8cd73d883f2346aa92330ddd8e36868995c6725df8c07ef5a0f8e6229abb2b4a", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/BuiltInStandardAttributes.php": "c9e048575e79fbe1935954052ea00db9ba2a1ef358997f49a8318798d7075a6d", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CPSuri.php": "af8c1e6f3db615c7fb859018641dbc7b5daa9075d8f1d3df839f2bbbf3e50418", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CRLDistributionPoints.php": "91b90fe3fa30258d7d7bb86fa61bca35c0119c05dba850601026e43e8c4c3564", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CRLNumber.php": "5b8921bbc4ba9fdcdb2357d1c4d0d053203af6ed786caf0cec1fc3eaed63d68c", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CRLReason.php": "c96967be8e7e190d0846ce8176aabf280a82b8c0aa79a4d3566c95d977a0b4d6", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertPolicyId.php": "36192710babc58663151a770acecbb2a3732d51d30d2a06e4aa2735270898941", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Certificate.php": "b267393794e3fc3c3b828648ec48f438abe7b28368e399fa18117c1b1c394bff", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificateIssuer.php": "7ba749c4a79d6d451fa770df5ccfbdf936f42fc8bdfb420012d7e4e1318d0e02", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificateList.php": "852bcf312645bf6cf3c8dc7fed283d7161a1e99e63b9b7d5be7d54367838ea4f", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificatePolicies.php": "e30b62e4c4eac15c209f1a30d8e946f7f60523f03387d326e34b60db571795c4", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificateSerialNumber.php": "bff3ad5177bb75ae7e21da941d264c6fce3a45913c4f6f427b60bf5f0d47a77e", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificationRequest.php": "b1d986bbcd912e8789fced1e4d830365b99c789b2724f96014adeb5f62ae6e80", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificationRequestInfo.php": "0ce471a8c1b9955f5be061452169f16139894ad6dd3417bf3590f1ea5de57158", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Characteristic_two.php": "34b4e0bc53ded06a18a29d35f88a59cad1ef8a87c3ee2aec18e693ae133864a4", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CountryName.php": "565e0450e765e4a3c675d7cadfede4e90bad758ad3a4f6af37d06e0eed2ed035", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Curve.php": "92d38342eed1a5071f93e8b987013aa11e4f04c8832f75b5dd57b3000029b340", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DHParameter.php": "cec74a2872bca947d841ae6cdf8deac64605a633f553d689d5ecae47f5d38268", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DSAParams.php": "86c9f1c525250c784ea5b4d3f42fe61d0e113362fbd27026102791b69f66b0d5", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DSAPrivateKey.php": "026e2dc0f35514f7554b72335430b54c22f5bfb7696c290140955acafa72748c", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DSAPublicKey.php": "4a4047949aed76c5775a9b27c3d02d654cfbc3f67691b9b6d263005306b5109d", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DigestInfo.php": "e8309b206e3e7b2469fcfc52c3fb3946398697fc403ea09e1d879ddef75fa72d", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DirectoryString.php": "4eff97734b9349e6bcf16fe9193ff6db303f0930e41a33761ffd53ea44455ca7", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DisplayText.php": "435a2ad0fccd0c6a2333ec1ec2f49e189b2745e08bddf8a7e60aa41af644f513", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DistributionPoint.php": "4110442d92b8ebf6643168d4783f1f2730bb4d782cc76ed9bb1e9d7fd5c1d6b3", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DistributionPointName.php": "419906f904bc3ee79ae96cfcbe3b58db4adfe71755d07656c01d6c3eff3f834f", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DssSigValue.php": "92f4e5c2c6e39ff8e330da66a3a972d5c34bc803fded51a789a602aa86a3b8ab", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ECParameters.php": "6f548e628f3a977d2436c48e1b09000c51dfd23a7a8a8ac1e00482917c2c5572", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ECPoint.php": "a341f986c57e538ee4243591b0f867e63163bab2debd864baa2fc46ad65c22ce", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ECPrivateKey.php": "a6828a4195d1e4edc4a8994dcc90248201e7e1abe9120c0358d0c0f0bf3cf084", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/EDIPartyName.php": "1067a61ca70116d71487e1404ef68c59913caf2a8563745c2eb1c2f8d59ae88c", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/EcdsaSigValue.php": "eede66801a02ea8690c2e0cec6aaaad65a2a40dbcd5fd0cb946f9b818e999835", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/EncryptedData.php": "50d6e377466a6583a53594295bddedee7c9e6b6ffce21f1552ec7f81aac158b7", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/EncryptedPrivateKeyInfo.php": "d0dbc2098d49223e1e9cef71c90ee5295c0289d77ee52ba5552c1ae62c93c17c", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ExtKeyUsageSyntax.php": "4fbd62e6dbe9331bc18088f8c1aad35b2cb3abba896650dcb45647f1a7ac24ac", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Extension.php": "fd6608b3c1c1e347f2f1c3f456aa6d449a196840f2f0e867a9eb3bdec7b31c22", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ExtensionAttribute.php": "aa7eed5d873c10cdd5cacadfd36f1413b5c7dfa177de42f210be380d6c98095d", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ExtensionAttributes.php": "7f87cfdf9f6e3beb8a44eedda594f780122e1889ad3dea209806b480c012362e", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Extensions.php": "7f4951e40ff1c06d9211213a7f615ab433dd2481b9756535dd8377297558e87a", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/FieldElement.php": "a61ea066b9334c7a62ff9bfd08007b102f7904dbd2035e7397f76020ec825622", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/FieldID.php": "5c91e025ff18ee8a18258784ab236ad5c0036a7541ae32d9b35599892805723d", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/GeneralName.php": "aaf6a58483a5232d48f95cac7507f4712a60b738d4249fed43ac9d9dad2f60b2", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/GeneralNames.php": "d9ec4d76a5c700a935f1eedb974aa4e31d39e353f19689950f158d9943cbc26e", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/GeneralSubtree.php": "c6bef323cff9d887575839065f996c771112257b18dd08896831d079d49c180a", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/GeneralSubtrees.php": "b360cf060cb17e7cdfcb886ed00b7c9e342b6dc25156801fa0c47cfd5f57ec65", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/HashAlgorithm.php": "42105cc1d79a64776613120a5bb1bc49d6e05f9d49df5c2d204db33c49042a53", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/HoldInstructionCode.php": "c8405c51ad033f74e4d96124c0dc4d62e07e1352a1ac9bbe3e34108c11ee48af", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/InvalidityDate.php": "a5158d812bfbfb55b65b2820c3568044a55360fde7ebde9a700ae476ed90115a", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/IssuerAltName.php": "ba96680f336221a4f0f60249db392da4be75bebfd500dbbdc8dd87fa4d8878eb", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/IssuingDistributionPoint.php": "2d06e34285af0cdea0390901b7615974cdaa2cd89ce3ec9d4504597d65523ff1", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/KeyIdentifier.php": "cf44b6e25e4e404e04041164f550c7477881d55652f6631ccc8ac71477c5981b", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/KeyPurposeId.php": "68b1d541108322a107564daba990dddf72f9221cc0650b24f53521a10f6d8e44", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/KeyUsage.php": "8e8204c068a8f1061165a2feb54bd5f07941c3e18248cdf07a2eea24b997459a", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/MaskGenAlgorithm.php": "03ce6a80473750c8dd92a7d696275b07da004c3bae9fb76121fd37a5a0c6c097", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Name.php": "b95749f42658e39996f6d13ca9c4e447447128dbaf48c679172ecdfa5626ad0f", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/NameConstraints.php": "f6ed2e0489b1b4482176069f2e4673ccc0f462eb4bbd3c32b726bbbebb7b6c63", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/NetworkAddress.php": "8902868cf5db26e6a9ffe24552f8ab3353c961665f73dd705731bd74e77df3fe", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/NoticeReference.php": "4a74612ffe3668984ffd3c0282bb0be3381a63324a1e9ad8f61a403faf96b0f9", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/NumericUserIdentifier.php": "9f3b576d43c841e9ccfb0cde754bc7a9021af301417422d281c0205abf789ddd", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ORAddress.php": "d97db0cbeb5193763bec62d3b5a2ea678bfbe66420c341e0d791909079f4fc1d", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OneAsymmetricKey.php": "8d2bf645b04bbde3c7dc87c38371ca5e2d51cec03d81555f620f51478fbb5e44", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OrganizationName.php": "6f7dddb690a425a8e24be54748627d8c9be6a081b6c607a3a24cbe54236a74fd", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OrganizationalUnitNames.php": "7c112c9fc22a0c10bd82ff96a06b163ea5c73cd292ce5a19a4b4ed8806f5523a", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OtherPrimeInfo.php": "1eceeebe0ae00631e5d1600715a71477757369a3cb49642fdc6656a15ad9651e", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OtherPrimeInfos.php": "05049be3a9a0183c1b71ec37fcba088ccf7378a6f8eb915e9701ab3cfdd980fb", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PBEParameter.php": "b18f3a7e90b1de3a47d425175d0000064de029893b981e47152a2aababd40a64", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PBES2params.php": "cf822618e6b04faaf211e76f4715bb24eeb46be4052d2d52a83664db88446b2e", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PBKDF2params.php": "1fb1ced3d947fd6d04c580f289fd0888d2eb5e3f74c4d2e1164431270d67ccd1", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PBMAC1params.php": "21257902b7e12d083d65397e187e7c650d9f7bf1a95c95143ebf73eff74c3cb4", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PKCS9String.php": "14b72937c1d192be7a2527e6b22790781d9e8d71a8729cdd4937f3efa14fb643", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Pentanomial.php": "134c9a38bb9b9eedfd4cc4316f30cde66dcabb24ca41b3174e72f94a65de06f3", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PersonalName.php": "83b0902bd5181b1b7c2a80acc5a10754016ad3e7b449edfaacd54f6a2b8a738b", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PolicyInformation.php": "170856123af50c5ed053bc3026e276f370de9231a995a17a92b7c2bac8b4de22", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PolicyMappings.php": "150ed86f4199101a75b4948492b7bd94330157d1b6239a00acf3c5e28b57f5b7", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PolicyQualifierId.php": "2dd6d6ca32de75e6874065acc901e0c6046dc82e9a34f9b962a857151d8fb607", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PolicyQualifierInfo.php": "d5924bb1ea961994d98783a3551e352e4a004bec90bef25b4a3a6a4492df2033", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PostalAddress.php": "bb54565902570e1c3c2fdca6a03833d5b3a140c9579b38602b95177a3fb9b7b0", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Prime_p.php": "356ec1d24e2bdb4fa14305c6e5621108bbc9e860dd906b3f6380a5dab0eb26ba", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PrivateDomainName.php": "9752ec6c827c214a13be9dc53b453d775a95c9577e92ef0dce0238ecbee6082e", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PrivateKey.php": "cf6bd38cf8e0b42aa12a96704ba6a88e596bf1ad8d40038d9e2f2590e2e659c1", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PrivateKeyInfo.php": "5bbf79c562ee447c8d03b9ccaeb7e4896c32c3534528ae02ff47c7be2d06c6a7", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PrivateKeyUsagePeriod.php": "15f19e87008d48a7f6a8370cfb2de70d44ce9fd5c7aca28b719467d77a25af88", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PublicKey.php": "4828e35744a3dfe5d5ef300053d6b1fd07982253ff995bc36ba55f4196439516", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PublicKeyAndChallenge.php": "c9be9da988134103899bf6d04ce914f750a0c48081698b250e7b2622b201e454", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PublicKeyInfo.php": "5dd19d0e6bda097ab5d28678262821de217e407aeb9379015be8bd95681d662c", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RC2CBCParameter.php": "775712ffbbb69fc36569a6f306cef91e32e8b368130b491849fa779ceac2ff06", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RDNSequence.php": "e92f6c5793290d9e8bbdaa3dc5d012e3245652c63fde74d5e486974a61fcdb77", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RSAPrivateKey.php": "bd966c6310ac7ad6adb6c77633f1a6c68af65b83885cd8c957e2e27b4d0dbf5d", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RSAPublicKey.php": "b20a133710ae3b494084bdbea171f3f9d8155e9188027575db3aab8e2ee06bbf", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RSASSA_PSS_params.php": "aff72739de9f4612df8bc54f2b0bd7a6df0c18351da870b6764e9d765be17693", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ReasonFlags.php": "e007e74c17a70db556bbd0775a7927a94d81c6a604bf4fbdf5ccd93000daa05a", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RelativeDistinguishedName.php": "bf5f9566fa9a27a15b64916f6160e33095c741f20592668f0720cce0c0983eee", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RevokedCertificate.php": "2f88df151d6ce5e7675077754bcf07216fd5faa7339bc0a3ace528bd54a6a67d", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SignedPublicKeyAndChallenge.php": "c9a33f11c303dc14034684e603821e5e21556cedb843e806271715bf1369e40f", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SpecifiedECDomain.php": "8463e187cb0572f4b21ef95cfadca58b3fd906d298f78b3c9358d773311c6d94", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SubjectAltName.php": "fa1ed38e57c8729d02f2c1c4c960b57ea711c6f523437838c265dccacc9d1203", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SubjectDirectoryAttributes.php": "fa788987893dafe6d22606af2d2e491cfb7c2c9e1211e00052d3270559e94534", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SubjectInfoAccessSyntax.php": "957c7c70b76474261c01f5b5e6bfe61c1da9984eec9a468d732411644c150b7a", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SubjectPublicKeyInfo.php": "d046a9c9da54f78cb258362bcda8c95d2eff17e0fc43a1f52ad6000925940b7c", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/TBSCertList.php": "5da5686dc38e9fef5f432b9f494ea66a418ece8928841882341b8492bb7f1583", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/TBSCertificate.php": "81e166d02eaadcfce3c05d903047607726ddb1cd6c3013630ab663d02170ec01", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/TerminalIdentifier.php": "9e2080bd084e2a7f77a077c933c3dca9ffebaa7f8062d719999b59af853aff4f", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Time.php": "644cadcd588cfd208353957a57132d01cf19143363607b088a8f369309fa1c4a", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Trinomial.php": "8c9896584bf552e1082bc26d1f1c9a955fd8e09bd9a28e30eb14bd92e956a484", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/UniqueIdentifier.php": "015dc65b2cd05daea1f6253c3aaa26c650946983e8f0689456d4b1477160c60d", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/UserNotice.php": "d7d7e0238f86da1fd7b7ec228e70721f17070846ab0591be1b2fe76026acdb03", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Validity.php": "4f5a9d1585094742fea6254edb847123badf7e0fc2a69c0234a7ac2798220946", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/netscape_ca_policy_url.php": "b77a13b5e85255572184314f431a15422aa366acdf8d8548131a1e9baed8b94a", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/netscape_cert_type.php": "4b1da37e2ee837249d0580002106720c9a85e229c67674f5fb838e8e43b69c82", - "vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/netscape_comment.php": "c5546ae3837433db068289a0bb5049cfb38cef9dbc85c6da55de91826efe4597", - "vendor/phpseclib/phpseclib/phpseclib/File/X509.php": "1dc04e576eaf9d1d2f1cc0dca792ce71b36ff3d59fb795461def5a771c0b2f36", - "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php": "a449a3332d28e81d1cd1ed1e5b7d30803d26f83c3d1f227654fa787e700c23e2", - "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath.php": "fd7ab15b60cc5629f201d61d3058b6bf32d1790d96de6073ae457aec6e772321", - "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/Base.php": "6bbcba50543d8cc5c936e00b636bf8c9bed92c96deb7f7e6338b97ee651dfcc6", - "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/BuiltIn.php": "2549d002c14beaaf127d8ea559f7f134891d2e7207ce2bc6df963825b2ffd08c", - "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/DefaultEngine.php": "685f2526ffa61b1d56e0f634c9a4bc78adf9ecefaff07f13b53a4b9bb5f63d7a", - "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/OpenSSL.php": "f6a669580c6a5f352274eaa94d5ac22e10f26e65f5c513655a7441ada180cda6", - "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/Reductions/Barrett.php": "ca7b4fc37d4c187640300b777a9e4eb7f123aa36e30865d71bac971f06cbf761", - "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/Reductions/EvalBarrett.php": "80542a2a82bffce6dc316c0a434d75412d52fbd6234e3b54607de913500b531a", - "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/Engine.php": "aedffb7ff6a0d8db2717221df7b8c50ce75b56afbb1ef94fe4ef28df3ce87c3b", - "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/GMP.php": "a1227b2ac6ec6deaf853437e7c2063fce62e3fd4ff485213493d3b363ed7a576", - "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/GMP/DefaultEngine.php": "2bb314313ecb6faea11bfae4a0ec69b35c5bb813c459060e939dbde4080966c5", - "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/OpenSSL.php": "5f5b01018764a0011646c7e81e62dbb560f09bbdb5b1a512a6289aa1c5d6fd83", - "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP.php": "ff426c2ee2afd4c147e00087965c5698d4ec19e716501f733d8576fb7610739a", - "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Base.php": "b8a3a755aa988cddaf177da90caf964612bc649e228d6d97811b224e67741796", - "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/DefaultEngine.php": "efacca0e8c8bd469da16cbe6eee4fd2715070ba3fd39097ed2c08b9c75f5cf84", - "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Montgomery.php": "72f0d4f2942bd3d224a3d025efea1421d64c1a24dc47f6be56fe0f541055260f", - "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/OpenSSL.php": "ad26f53b691eec4986fef366c0f355bf3b5cf5c0ac2ff82a75940124426515e6", - "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/Barrett.php": "b8139c1a099546b9ef838080ce468e75e92e9ec583ed450b884ec077c55c93a9", - "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/Classic.php": "81e7b2b58e3ba163832144e7bb10cc8d073c580eed65270e8cbfd5e7a3de2c79", - "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/EvalBarrett.php": "d3327fba23ad1f2a41134bd7085004875bfc6941ba8e4c93498d506012738681", - "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/Montgomery.php": "2c2c8dc9bc2aca9bfae6b49fa6c62c327cc2a216094cdb057683b140b445a1bd", - "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/MontgomeryMult.php": "5c8c50cdb528f3d4979c946a517068c060473ad70891dbba52e0618ccaadb83b", - "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/PowerOfTwo.php": "28bde5f8d79a4491a6709e16459ff3b2785be33a6c79000131333a6b06926e6d", - "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP32.php": "20475fdcfdd910789e0c0d256bb1ab26ff92e134111b6656d276f904f275da61", - "vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP64.php": "a9a3fd02cc026be8c399c228b646a0d564c1243b728ade97a0358d7d42f6ec31", - "vendor/phpseclib/phpseclib/phpseclib/Math/BinaryField.php": "935057fee23e93d0649fd54443eeeb24649fba83dac5e0bb60164075bbc1e69d", - "vendor/phpseclib/phpseclib/phpseclib/Math/BinaryField/Integer.php": "c17d4eb2bddfc6b548fc0c517f21ec6deb8aa81e2914d98104d4dcde0c5c1341", - "vendor/phpseclib/phpseclib/phpseclib/Math/Common/FiniteField.php": "ae112fdff79f97b2c37887c389d8985ca5091ca44db40dd5ccb0c556e510f841", - "vendor/phpseclib/phpseclib/phpseclib/Math/Common/FiniteField/Integer.php": "8b3342645cfed8a2beb7b61fecd6425be6f9275db2ff447164bc87e39a2d3c6d", - "vendor/phpseclib/phpseclib/phpseclib/Math/PrimeField.php": "5b39928ec1e12399ead7d5690733c9a0c1b23add32466a009f948ddac225c98e", - "vendor/phpseclib/phpseclib/phpseclib/Math/PrimeField/Integer.php": "c5e5f74cd1449024c73a7042dfc7204766a7af1adf18f39404b48e576e7d5e62", - "vendor/phpseclib/phpseclib/phpseclib/Net/SCP.php": "506a53b1d65c51344eaa372b6d8fca796b8df802caafb83fd80b8f1bed02d5f4", - "vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php": "0c46014ef9b5756c45db295ff91a8bb5bc7e16dd40687e05f929bde198c23a3e", - "vendor/phpseclib/phpseclib/phpseclib/Net/SFTP/Stream.php": "de2e62776eabacd32e026b8c81e1fc775779d14636ac2b67d7f68c6fbbe97e49", - "vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php": "48f36d11d38ed0929665b2e7c0910edcd5b5707490394a508e28f54762ad0229", - "vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent.php": "a78d624f3f7f9fa9fc8810ee4f9fa4d48605e63efeaeceb9d9f2d717a6f46997", - "vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent/Identity.php": "20b02062f5f467cb8c7da954f3b8781a8eafedcdc9892642d1fe533921181f9e", - "vendor/phpseclib/phpseclib/phpseclib/System/SSH/Common/Traits/ReadBytes.php": "86b1da1f0485e3c0197bd45bfff548120490e535f5f8b511d087c4798dec0c96", - "vendor/phpseclib/phpseclib/phpseclib/bootstrap.php": "1675799e193c5c71d2f0215098993a228a20ef5a2a8ac0192f7dfd0f21c85060", - "vendor/phpseclib/phpseclib/phpseclib/openssl.cnf": "5fc389d338ce885bf2f174798fd97925b580cd9f2a6cfc7343652ff75f103c99", - "vendor/promphp/prometheus_client_php/LICENSE": "9368976483a5d7ca12c5078170d7a199c9edac809eb76402bbe063e4ff972425", - "vendor/promphp/prometheus_client_php/README.APCng.md": "0e778ffe71354d0ddd8cc2138ce8c1ed7dd418cef3c150cf3e16579f58a89463", - "vendor/promphp/prometheus_client_php/README.md": "8485162eff4c9db016409adf78217ca5abd01298bc23d3566cd4daff530cd1e4", - "vendor/promphp/prometheus_client_php/composer.json": "49b2936c390f9462305096bdb3eb5717fa98c2337fe4e799e81009f46965136b", - "vendor/promphp/prometheus_client_php/phpstan.neon.dist": "ddbf6b56440813cd8c535d724c60217e69de96228ff63f356bb56ef1dd8abbe1", - "vendor/promphp/prometheus_client_php/src/Prometheus/Collector.php": "a3017f60b4778d458996126fc729ca5a7c906bf53a04701058523830c8fbf5a2", - "vendor/promphp/prometheus_client_php/src/Prometheus/CollectorRegistry.php": "270b94a10037b351d639238b50cbe61a714ca867acebc02ffa9544f2f6d42ce2", - "vendor/promphp/prometheus_client_php/src/Prometheus/Counter.php": "5ff9df83c8ce928361a02927c97ee4d7c4c5b78b3b538bac301b14a2064a7fdc", - "vendor/promphp/prometheus_client_php/src/Prometheus/Exception/MetricJsonException.php": "d1b535b1cada1e600b2adbf712bd8d10e09881ab59ee17edfe361f841e7f4f5e", - "vendor/promphp/prometheus_client_php/src/Prometheus/Exception/MetricNotFoundException.php": "a6de4b811506552c96ebf0eff54b603a085b532e0a585238e25d0b2f285c87ba", - "vendor/promphp/prometheus_client_php/src/Prometheus/Exception/MetricsRegistrationException.php": "950fe8226cfbaa0098da121f433bb0834616f9a92057169fcaea425a34963456", - "vendor/promphp/prometheus_client_php/src/Prometheus/Exception/StorageException.php": "9c63f04b2b4fbfc2b67938d471098394879cada3015c92a522be579d67612ef7", - "vendor/promphp/prometheus_client_php/src/Prometheus/Gauge.php": "e9c098ec3fc56abc16e020735a8f57e43360441e803897e8273b2ab23f864e54", - "vendor/promphp/prometheus_client_php/src/Prometheus/Histogram.php": "8f06b6e0f25f09119395b9dcb7e65d0eb376f8bf6e5af34d94919ece76566dda", - "vendor/promphp/prometheus_client_php/src/Prometheus/Math.php": "8cea953ad65e62b482dd33b6cfd66a5cdd8ed599883a870120d7b575e8ce6814", - "vendor/promphp/prometheus_client_php/src/Prometheus/MetricFamilySamples.php": "e595ece37287b26cf62d15749cfde837f891f35190a27c231ba3e33aa87ac32d", - "vendor/promphp/prometheus_client_php/src/Prometheus/RegistryInterface.php": "b121b1bf0f9e4d618c6cc830d46de761eef721646119bb00b1a36162fb25d067", - "vendor/promphp/prometheus_client_php/src/Prometheus/RenderTextFormat.php": "2dd99abb6da93ba1f328e986df572d4df30cbe30008e18af2846fe8ba87a372b", - "vendor/promphp/prometheus_client_php/src/Prometheus/RendererInterface.php": "7e6a6ad5d9fc519fb2c7b5f77d7af534e510e9a437b8273f56a5c4d128686802", - "vendor/promphp/prometheus_client_php/src/Prometheus/Sample.php": "57528a34a63d408f992d31e2826d0c90ea91fbba9c5caa2e170fb6fa30a3034d", - "vendor/promphp/prometheus_client_php/src/Prometheus/Storage/APC.php": "53105df3184e4537ef8a6c94a5a0f6d87299ea1fc335be52dcc52dc5235b854e", - "vendor/promphp/prometheus_client_php/src/Prometheus/Storage/APCng.php": "ea0ce8d6c6be6cba0eba8733e5782977188cd4df085d251121adc6d27ee82bdf", - "vendor/promphp/prometheus_client_php/src/Prometheus/Storage/AbstractRedis.php": "024d6f417847ece6ac8a4ffd7e8dbadeb383a6f94460d278532bc7f1c34ce7cf", - "vendor/promphp/prometheus_client_php/src/Prometheus/Storage/Adapter.php": "2f9116349776fd6206300536641ca0e9ab7dbc59f262437fcaf48ca861c2e18f", - "vendor/promphp/prometheus_client_php/src/Prometheus/Storage/InMemory.php": "c7774005081fab4870dbecb76a1bba16f94468f18e1be820a331d10d14f4ab10", - "vendor/promphp/prometheus_client_php/src/Prometheus/Storage/PDO.php": "f9e1c28edc8aa1b78d72233a823c11e16ff44b81b8d201b57441577e425e5e63", - "vendor/promphp/prometheus_client_php/src/Prometheus/Storage/Predis.php": "003667b80332615aa8df93cf4aef7d1b7132cd7aa2e79e4c41966379dd4a66a8", - "vendor/promphp/prometheus_client_php/src/Prometheus/Storage/Redis.php": "fe56e851ce3c57213c27399a1bb758aa7fe6025a643c6646fba00df4efee65aa", - "vendor/promphp/prometheus_client_php/src/Prometheus/Storage/RedisClients/PHPRedis.php": "de50a7857635c04f7b250da1c98717a3604f6dffe6c8d2c92032c0a60fe43bcb", - "vendor/promphp/prometheus_client_php/src/Prometheus/Storage/RedisClients/Predis.php": "059ce79f66541aecfade7acce8b087813363b71f2be164b5b90641b9ee4cd6d2", - "vendor/promphp/prometheus_client_php/src/Prometheus/Storage/RedisClients/RedisClient.php": "e69d15c546c2edd29da7fdf6416445deab4e747b748a15e8973d35ff54918e4b", - "vendor/promphp/prometheus_client_php/src/Prometheus/Storage/RedisClients/RedisClientException.php": "f439272272355f9cc6920c7323ecd3bd56d1102134373c67b06a6b40aa7f7056", - "vendor/promphp/prometheus_client_php/src/Prometheus/Storage/RedisNg.php": "5ee448840625e3344d395e8abcfe55b44fc5f021b1fccf42479ae720115e4fa1", - "vendor/promphp/prometheus_client_php/src/Prometheus/Summary.php": "0ef5e1758c119332bb3f7862a3be6ef3b4b07a57cb05b9dadc68aae58d3d45af", - "vendor/psr/http-factory/LICENSE": "d2e70341a9667b93ad542e4842b0b7022d302aa7c2d2a909b156b8f1e3c4cca8", - "vendor/psr/http-factory/README.md": "d80b63e2a8c4f80af830e5307683fc73718d15e71db3c5af56e15b56b2a47d63", - "vendor/psr/http-factory/composer.json": "1dedaf2d8613201a978dbcad920bd7a332cd28c95be57c0d75be7a8d6e868362", - "vendor/psr/http-factory/src/RequestFactoryInterface.php": "95bb9e09f52d05bf09630cce49abbfdb2282d396ccc3e16e77e3a9f54cd4071f", - "vendor/psr/http-factory/src/ResponseFactoryInterface.php": "fb58f39db8e472bed4109f6392443a10785305ccc0c920d11f98208f91214e02", - "vendor/psr/http-factory/src/ServerRequestFactoryInterface.php": "8584390af1bc3c624918525e725a7cfa639366c15bb7a3c7c065d04d8a20703b", - "vendor/psr/http-factory/src/StreamFactoryInterface.php": "25fe9d048ce6718141d21c122ef9b3498be45025300717ccbe912ef5bc0083ec", - "vendor/psr/http-factory/src/UploadedFileFactoryInterface.php": "712c705ac850b43dbf47458e571c8be314d1d1f01b0e470407ed014b702d9e5b", - "vendor/psr/http-factory/src/UriFactoryInterface.php": "2600f967cd969706dcdff326d3fe602e812110352c75c6b5e9773601f2d17c7d", - "vendor/psr/http-message/CHANGELOG.md": "0e0a6a6166edde635031315c05f880d4e792f2cdd493618f5bac0b09bd9a11a7", - "vendor/psr/http-message/LICENSE": "8d36e938943b04ef01994bb148793c971685b746d0ced31da03a97594a47ee62", - "vendor/psr/http-message/README.md": "4cd6339fa85e7a903f2117b081de8446cd45229b9b761539dd8f440ccd2eb288", - "vendor/psr/http-message/composer.json": "96781ea96de30367767e298f5a340a040878144b7540ce490c9089bf7e0b9b37", - "vendor/psr/http-message/docs/PSR7-Interfaces.md": "255d8acfecf55b477403a49775c907b4a9c833237ca9a856b96d8a71b545ea30", - "vendor/psr/http-message/docs/PSR7-Usage.md": "49daf54cea1064dc256357ae684b42bac35ccb6df930a2f4cb3f05fa0226e9a6", - "vendor/psr/http-message/src/MessageInterface.php": "1ef5798924509ccea3ff3e596af4c5b6b63e121f7d0441503310b29cf837b9df", - "vendor/psr/http-message/src/RequestInterface.php": "3d7531e17a3e704d7bed9f0f2bb37ffc7f1842a2cd39f789ce7e7a4023d434f9", - "vendor/psr/http-message/src/ResponseInterface.php": "1cc32dded30a668714b17688a2be8a0053effb7fabe7655bd4459ecfbc6eeb44", - "vendor/psr/http-message/src/ServerRequestInterface.php": "43c218d6c4426c7f1d354b20736ec77be924b94e7c1b11786057de6c3f3f66e8", - "vendor/psr/http-message/src/StreamInterface.php": "0a3267552ebbcac5f0cd522dd10d96ad985595fd4f90d8566b449db2e060b385", - "vendor/psr/http-message/src/UploadedFileInterface.php": "2823ae936f8f0030879fe12a507080d4eb91c6a534f57ff38e8f37561d78916c", - "vendor/psr/http-message/src/UriInterface.php": "8d96e63fb984db31eaedd858ae60549dcf6332c939d4cc940ca97f1fe6d91d1e", - "vendor/psr/log/LICENSE": "6e944907067bae93c00a9f2ad51032243820b22df34b77c77690d46cb2e98e24", - "vendor/psr/log/README.md": "4f2bc231e87cda248b1fa2aef7a930045f3e95f89ee46ff579188d2489372954", - "vendor/psr/log/composer.json": "1f8dfc72d50f452d0795681fde72b7c008eedd4fcbca482b70a35401c9fbb661", - "vendor/psr/log/src/AbstractLogger.php": "84c69c6cc60fd805eb525daa79bd04a8d0b73e52776e1a0c2a9e666b37b4512e", - "vendor/psr/log/src/InvalidArgumentException.php": "403c6def4d4199a12cb4a54e804c7d29405968871366500f72d6f3ea401bfc64", - "vendor/psr/log/src/LogLevel.php": "9f2520b22945ce1599c4fedba0a4c75985f172ca86cdf386766ebb8b2363768c", - "vendor/psr/log/src/LoggerAwareInterface.php": "076efac38ab493f4fc3e701cce9a2641135048f2bf0407b322c45712ef73813c", - "vendor/psr/log/src/LoggerAwareTrait.php": "eb114e265de2d1c8c1190b0fa9cb5f8a25e262a46d1d28d1aa02f01aaf025c64", - "vendor/psr/log/src/LoggerInterface.php": "05aecbaded98967719d76a058ea27465ffae03b7800dc36049e1ed23c825e6b3", - "vendor/psr/log/src/LoggerTrait.php": "c854406af9c4706980e93183b5f37fa9cca523df9bb1019a927f8e4713834172", - "vendor/psr/log/src/NullLogger.php": "22fbb348f7b25259ca801f595fc9aa22b9f035a44e7899687bd89bf4070d78c8", - "vendor/revolt/event-loop/LICENSE": "54e35a998b20dce201850275dd1c66c1685489972ecee9410600b8186e630853", - "vendor/revolt/event-loop/SECURITY.md": "7d80e69dd4c54f02ac0c41784fe222398e3552f179c29b3cc811e2b79d1257b0", - "vendor/revolt/event-loop/composer.json": "f8635bd03d8930f007ebf5f0d681975dfa7f21badc8be19a12730b5c7233d7c6", - "vendor/revolt/event-loop/src/EventLoop.php": "aa7b8c8d5bc79d35ec4d3931fef54bd7e323cc188d54ba871f189b363a51307c", - "vendor/revolt/event-loop/src/EventLoop/CallbackType.php": "673db71f9aceb0fc9a767c703677cc3269b99f64fc31fafde615ae6c76064683", - "vendor/revolt/event-loop/src/EventLoop/Driver.php": "6b3b25cfc83d888794684e393011c4ab6c2450c5b9b0af6e0637b28b086dff0a", - "vendor/revolt/event-loop/src/EventLoop/Driver/EvDriver.php": "688d3a6b013e75a36aac6c9ea679d077d20878c85f227182ada85a9d9def6593", - "vendor/revolt/event-loop/src/EventLoop/Driver/EventDriver.php": "0cd4013a85ad62eebbfaab757e106d1dd9fb0adebc5982088f6a8c9f5cb133d5", - "vendor/revolt/event-loop/src/EventLoop/Driver/StreamSelectDriver.php": "880231f3bb9f4bc0a637bdc9b2a7ed31ecba8c6345ed25bbc26a1156dcda8883", - "vendor/revolt/event-loop/src/EventLoop/Driver/TracingDriver.php": "91187da90826995e7787e66f9735fc77bf9fd4287c90d6ddb71ee8bf2967eab8", - "vendor/revolt/event-loop/src/EventLoop/Driver/UvDriver.php": "2d49671eaf3a6e6a68b99f8e57d0ea0c77ecac4373cbc405bf0de02bc842bdd4", - "vendor/revolt/event-loop/src/EventLoop/DriverFactory.php": "196c22dd3646b41bd2f049038384b2ff512fa891c5b495e6d81844ba1580f533", - "vendor/revolt/event-loop/src/EventLoop/FiberLocal.php": "301cb2fd41f21349b368a7d3fc09cb0dd6e13936fde5959bbd62455505eac01d", - "vendor/revolt/event-loop/src/EventLoop/Internal/AbstractDriver.php": "fb4b4ab70490c0bc4716421d3dfeb96ba3a227c4b1f142fe7e7cce0440fd2667", - "vendor/revolt/event-loop/src/EventLoop/Internal/ClosureHelper.php": "4de60aec5ca61c9727326fabfd7d3144fbe5c688dcf6de9f9c9ceec0c7289652", - "vendor/revolt/event-loop/src/EventLoop/Internal/DeferCallback.php": "a0a886eabfb82011914ea66f428de467eeab3c8c44633affd7d08382a0c10c7f", - "vendor/revolt/event-loop/src/EventLoop/Internal/DriverCallback.php": "8f9684dc3de3da4a4d7fa4d95e349ba39d793ade3a02168e068b75d7e63b05d0", - "vendor/revolt/event-loop/src/EventLoop/Internal/DriverSuspension.php": "91ffcfca18246b4e8c85b8dff0d099c3cc8ec353ae5acbd704ff5564731a575e", - "vendor/revolt/event-loop/src/EventLoop/Internal/SignalCallback.php": "df71d46d74386dfe2e45c1193be7ed4ff58e6efa817d61ef63aee6f43c36fcff", - "vendor/revolt/event-loop/src/EventLoop/Internal/StreamCallback.php": "66f6bec931f9d28634a35bdca3dc4851fffbf2ac8a5314659105aa7d5719b343", - "vendor/revolt/event-loop/src/EventLoop/Internal/StreamReadableCallback.php": "b96ec21fe9f22a65f991a9ca3da5cf3e923df3a53173a521eb4530bcea3fd3ea", - "vendor/revolt/event-loop/src/EventLoop/Internal/StreamWritableCallback.php": "50f63a166826b0abda1c253efe6596951361e2f6239010ec38b589ce1610c3d9", - "vendor/revolt/event-loop/src/EventLoop/Internal/TimerCallback.php": "5e1b1a8b171df54062005932b36785247767ab9cf28cfa721303ba739915477f", - "vendor/revolt/event-loop/src/EventLoop/Internal/TimerQueue.php": "43ae3c33373100d7f95698605ebb2ff1e6951d2bd212983bd782ca7c12582d35", - "vendor/revolt/event-loop/src/EventLoop/InvalidCallbackError.php": "d5427bf27ff4983aeb15a85d35ab7fbe19739d47cee1f4ffafe0d53f98aaffe1", - "vendor/revolt/event-loop/src/EventLoop/Suspension.php": "4a9f600da1e3eca91d195cae535196119d188955cd8c93e7d1fdf834fdeff1ad", - "vendor/revolt/event-loop/src/EventLoop/UncaughtThrowable.php": "437d5231cd2e73c0501eea696008a2458b8ac704fd97b385164dbbc8e1871eff", - "vendor/revolt/event-loop/src/EventLoop/UnsupportedFeatureException.php": "a1c60be19aba7e46dc04fd0e541939d3f467e35e4460499401bf087705c6b639", - "vendor/symfony/polyfill-mbstring/LICENSE": "eaa5d6e59ff1d5322ae36d3ab9124460df72d2d0c8af60a99222e8a90dcbdf31", - "vendor/symfony/polyfill-mbstring/Mbstring.php": "33e1210305586da1de675ae40b5f2b54e8ee4e7c66ef5871f9a9f02ef893e136", - "vendor/symfony/polyfill-mbstring/README.md": "7686ab9250b91f0b706d6a5aac4e6bbf4b8865ec323bbb420343f19e98d91d14", - "vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php": "99cea898c03847d05e1c143cf64183c57749b93f578f5bfcd856f89d700b9b85", - "vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php": "df2b1879ae0f74d86996a4790de37b534c1b406002930550bc087885ae54f0ea", - "vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php": "4eef657adbee39f7badd695b1d60b152b047385966a98b6d8d411554573ec596", - "vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php": "4ae4778ee941291582b801bcddeaac401068e0e5dde7357ef06f9e882131b026", - "vendor/symfony/polyfill-mbstring/bootstrap.php": "0449da72338523c51270ddfe84447cd16fc110b7d4fae2bee1c2790d9f113fb0", - "vendor/symfony/polyfill-mbstring/bootstrap72.php": "8a45e926381803b688b3961032805f5ae317e953af1a980e0e0f63db5e3babfd", - "vendor/symfony/polyfill-mbstring/bootstrap80.php": "e998cba06760c8e191f47c70b7017164e7434ab93eaabbb8bdfe94943c450c6b", - "vendor/symfony/polyfill-mbstring/composer.json": "8ccd5687a056c76aa1c488e520302b441e31be3ef16482c2e35778b035fb1c09", - "vendor/symfony/polyfill-php83/LICENSE": "6439cc1bba78b7de0c1905b0643679a5a7768ba020a090370d7742030303c6b2", - "vendor/symfony/polyfill-php83/Php83.php": "18aac07ebd7fd272d0488f80b489ab1b6e2dee1b75b430ea2acc28c4f72b52af", - "vendor/symfony/polyfill-php83/README.md": "f650c27b908d922ae5a7637f1d1c06eed534eef9edd2af14b669dc1c125f28c8", - "vendor/symfony/polyfill-php83/Resources/stubs/DateError.php": "72e1fffeddc492f3726fadb4bf338dea6d9d18f5f7cb64c16b292bbc14d53778", - "vendor/symfony/polyfill-php83/Resources/stubs/DateException.php": "4229e2f87de442cab70d186931ad88cd68b9027a385834aadc81bae88524a319", - "vendor/symfony/polyfill-php83/Resources/stubs/DateInvalidOperationException.php": "96ef44367f42f7feb3488d29e2ac1f3382647c04a2084d1451ad18043c6b5add", - "vendor/symfony/polyfill-php83/Resources/stubs/DateInvalidTimeZoneException.php": "519c9a52e7d657aa25e76944a408577a0ff615b88318dfde16479139c515d109", - "vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedIntervalStringException.php": "3f669907751c517d477c290e872a5ef0f4148cf76493137afe13a3af1c2486a2", - "vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedPeriodStringException.php": "8af794f98ff2ab1577ce94c4300e7b314237eb2ad0b09d49b7f71bb82d5d5cb7", - "vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedStringException.php": "a4bac703b6b7ceed48bb8b082dddd061111420eab527eb45ca9e5908b2a94e86", - "vendor/symfony/polyfill-php83/Resources/stubs/DateObjectError.php": "4f7578373b5f56a25628da4d80c58fe923ba5195f8e8d4e407a58d3613e39540", - "vendor/symfony/polyfill-php83/Resources/stubs/DateRangeError.php": "1728ade479eca502b4169314895d7423b892810ef51518b9acccc41498a807c2", - "vendor/symfony/polyfill-php83/Resources/stubs/Override.php": "57d1627659933c6d4d44c4ddfc8d7e07d2452645a414e387221d5572af9e6f05", - "vendor/symfony/polyfill-php83/Resources/stubs/SQLite3Exception.php": "b0054f6ff0ce2eab047cd5c4cfe0784f94c748e878573b8b3818283650f2137a", - "vendor/symfony/polyfill-php83/bootstrap.php": "c1a38e6aeea87046fb4d04d5e5aeea5d4287faa995b1701fc76a1f7694af5476", - "vendor/symfony/polyfill-php83/bootstrap72.php": "23e8a4f5857612665b0a40ca8a8c4b414aa8f537525f20e248091a69ce5a7d36", - "vendor/symfony/polyfill-php83/bootstrap81.php": "8f7a103ff036ce07984a6b8112a25efbe1b8504244421ab710f0436b6d95e88b", - "vendor/symfony/polyfill-php83/composer.json": "06fa868d6ffe7965e5aacec69da00cf458dfa7e0fe7667c4123db0d4b669771d", - "vendor/webmozart/assert/.php-cs-fixer.php": "b570c3543f7759e31892100ac09c69ec7fbda5efc62665a35a0fe9850d0c199e", - "vendor/webmozart/assert/CHANGELOG.md": "a7cc82862e2f51c822d7747a19cf4d70ccc0220ca42f4012fc85c9249ae2c7ce", - "vendor/webmozart/assert/LICENSE": "5f82f5e664e8683e3d97d3bec6f74620b9d0a4d8669f9e617da96bce8767d4d3", - "vendor/webmozart/assert/README.md": "16ce8ca2c110e8114276903d83c06c26ff4a9347dd36179e849b7d8eb4d31fa3", - "vendor/webmozart/assert/composer.json": "503018d47d9762460313ed2b07c72957639a170fd548ca0aa3d83ee05c0f71b0", - "vendor/webmozart/assert/src/Assert.php": "029b87bb41f7170ba6cb347a837bc93507786a2dad2e50961290a500f1fc8672", - "vendor/webmozart/assert/src/InvalidArgumentException.php": "f30118497c3b37f29325c75c385a1179012e1190dacc1c3059c701324d39b776", - "vendor/webmozart/assert/src/Mixin.php": "864395b680a20acf09b22b23bba207f71dc34350846830926f504a61d6caacc7", - "vendor/wizardloop/broadcastmanager/.gitattributes": "5feaddc458a55c10ef1011563b3914a7d75e1419e5d0a2757908dd6646f1d226", - "vendor/wizardloop/broadcastmanager/.github/CODE_OF_CONDUCT.md": "86b68818ee5d142a2b5c629a878404bee4ee2c572e5afe04322b01f60ee7ea17", - "vendor/wizardloop/broadcastmanager/.github/CONTRIBUTING.md": "351a6ad345d958f3640791b6c51ffd538786fdb3dd03742262857405c1134f97", - "vendor/wizardloop/broadcastmanager/.github/FUNDING.yml": "6a45402eb151c98c5284cf73b3c5f32b5428f16395c6bcf899326d399105f7bb", - "vendor/wizardloop/broadcastmanager/.github/ISSUE_TEMPLATE/bug_report.yml": "a746aee9e7797b2679719d52dd4066a44e839ca561661a16023493adfefbfa89", - "vendor/wizardloop/broadcastmanager/.github/ISSUE_TEMPLATE/feature_request.yml": "4eaaa962535c9d66f6ebf6c71943806ba6ff5c8264d72fb4805953244fc1434e", - "vendor/wizardloop/broadcastmanager/.github/ISSUE_TEMPLATE/improvement_question.yml": "71e0d18a5fbcdb109285e2049b2ef51e9ef3b10137db8971f66611c63c2c446d", - "vendor/wizardloop/broadcastmanager/.github/PULL_REQUEST_TEMPLATE.md": "baa95b98f0f2ad88f4a0411b455d1a86a09e4f92a09c565b14f6224ba8faa229", - "vendor/wizardloop/broadcastmanager/.github/SECURITY.md": "7b5a080bc870abe165b3dfbb30121b7e99381fb4244ef83f93b6b57c9c4a372a", - "vendor/wizardloop/broadcastmanager/.github/workflows/ci.yml": "9cef63528e37b40c3b5672d65d6d4f7c56b1776880b80f5c143ebf26a51e39d7", - "vendor/wizardloop/broadcastmanager/.gitignore": "6dfebda4de50e6f0d998ad3908b99f91e9796994ec816e3e9894d9880b182d29", - "vendor/wizardloop/broadcastmanager/.php-cs-fixer.dist.php": "484d7cf46d97dbdcaad2cbf6a2e5eecbae1a0f3da84800dbf4d74b938dbae71f", - "vendor/wizardloop/broadcastmanager/LICENSE": "8486a10c4393cee1c25392769ddd3b2d6c242d6ec7928e1414efff7dfb2f07ef", - "vendor/wizardloop/broadcastmanager/composer.json": "ec47a662a9e4dcb5540e7438a65e06e0e4fe1b033c784576e01fc3229c7f43c6", - "vendor/wizardloop/broadcastmanager/phpstan.neon": "8c45c4b2147f9a6e4c54cf7ab547a4e92ed5f0f64fa964155329fa4bcd860189", - "vendor/wizardloop/broadcastmanager/src/BroadcastManager.php": "d665b24009aabfb5b09e00edad1271f1501bf0ef797d5a2593129da91c8cc435" - }, - "preferred_source": { - "additional-source/amphp-windows-process-wrapper/.gitattributes": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/.gitattributes.source", - "additional-source/amphp-windows-process-wrapper/.gitignore": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/.gitignore", - "additional-source/amphp-windows-process-wrapper/LICENSE": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/LICENSE", - "additional-source/amphp-windows-process-wrapper/ProcessWrapper.sln": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/ProcessWrapper.sln", - "additional-source/amphp-windows-process-wrapper/ProcessWrapper.sln.DotSettings": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/ProcessWrapper.sln.DotSettings", - "additional-source/amphp-windows-process-wrapper/ProcessWrapper.vcxproj": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/ProcessWrapper.vcxproj", - "additional-source/amphp-windows-process-wrapper/ProcessWrapper.vcxproj.filters": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/ProcessWrapper.vcxproj.filters", - "additional-source/amphp-windows-process-wrapper/README.md": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/README.md", - "additional-source/amphp-windows-process-wrapper/resources/.gitattributes": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/resources/.gitattributes.source", - "additional-source/amphp-windows-process-wrapper/resources/Icon_amphp.ico": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/resources/Icon_amphp.ico", - "additional-source/amphp-windows-process-wrapper/resources/ProcessWrapper.rc": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/resources/ProcessWrapper.rc", - "additional-source/amphp-windows-process-wrapper/resources/resource.h": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/resources/resource.h", - "additional-source/amphp-windows-process-wrapper/src/Args.c": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/src/Args.c", - "additional-source/amphp-windows-process-wrapper/src/Args.h": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/src/Args.h", - "additional-source/amphp-windows-process-wrapper/src/Encoding.h": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/src/Encoding.h", - "additional-source/amphp-windows-process-wrapper/src/Errors.c": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/src/Errors.c", - "additional-source/amphp-windows-process-wrapper/src/Errors.h": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/src/Errors.h", - "additional-source/amphp-windows-process-wrapper/src/ProcessWrapper.c": "resources/release/preferred-source/additional-source/amphp-windows-process-wrapper/src/ProcessWrapper.c", - "additional-source/madelineproto-build-inputs/.gitattributes": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/.gitattributes.source", - "additional-source/madelineproto-build-inputs/LICENSE": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/LICENSE", - "additional-source/madelineproto-build-inputs/README.md": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/README.md", - "additional-source/madelineproto-build-inputs/composer.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/composer.json", - "additional-source/madelineproto-build-inputs/docs/template/disallow.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/docs/template/disallow.json", - "additional-source/madelineproto-build-inputs/extracted.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/extracted.json", - "additional-source/madelineproto-build-inputs/langs/ckb.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/ckb.json", - "additional-source/madelineproto-build-inputs/langs/de.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/de.json", - "additional-source/madelineproto-build-inputs/langs/en.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/en.json", - "additional-source/madelineproto-build-inputs/langs/fa.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/fa.json", - "additional-source/madelineproto-build-inputs/langs/fr.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/fr.json", - "additional-source/madelineproto-build-inputs/langs/he.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/he.json", - "additional-source/madelineproto-build-inputs/langs/it.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/it.json", - "additional-source/madelineproto-build-inputs/langs/pl.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/pl.json", - "additional-source/madelineproto-build-inputs/langs/pt.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/pt.json", - "additional-source/madelineproto-build-inputs/langs/ru.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/ru.json", - "additional-source/madelineproto-build-inputs/langs/uz.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/uz.json", - "additional-source/madelineproto-build-inputs/langs/zh_Hans.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/langs/zh_Hans.json", - "additional-source/madelineproto-build-inputs/schemas/README.md": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/README.md", - "additional-source/madelineproto-build-inputs/schemas/TL_mtproto_v1.tl": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_mtproto_v1.tl", - "additional-source/madelineproto-build-inputs/schemas/TL_secret.tl": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_secret.tl", - "additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225.json", - "additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225.tl": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225.tl", - "additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225_file_ref_map.dat": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225_file_ref_map.dat", - "additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225_file_ref_map.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225_file_ref_map.json", - "additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225_file_ref_map_schema.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225_file_ref_map_schema.json", - "additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225_file_ref_map_schema.tl": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/TL_telegram_v225_file_ref_map_schema.tl", - "additional-source/madelineproto-build-inputs/schemas/list.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/list.json", - "additional-source/madelineproto-build-inputs/schemas/list_file_ref_map.json": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/schemas/list_file_ref_map.json", - "additional-source/madelineproto-build-inputs/tools/AnnotationsBuilder.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/AnnotationsBuilder.php", - "additional-source/madelineproto-build-inputs/tools/DocsBuilder.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/DocsBuilder.php", - "additional-source/madelineproto-build-inputs/tools/DocsBuilder/Constructors.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/DocsBuilder/Constructors.php", - "additional-source/madelineproto-build-inputs/tools/DocsBuilder/Methods.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/DocsBuilder/Methods.php", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/ActionOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/ActionOp.php", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/BuildMode.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/BuildMode.php", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/BuildMode/Ast.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/BuildMode/Ast.php", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/FieldTransformationOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/FieldTransformationOp.php", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/FileRefGenerator.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/FileRefGenerator.php", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/LiteralOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/LiteralOp.php", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/ArrayOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/ArrayOp.php", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/CallOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/CallOp.php", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/ConstructorOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/ConstructorOp.php", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/CopyMethodCallOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/CopyMethodCallOp.php", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/CopyOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/CopyOp.php", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetInputChannelOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetInputChannelOp.php", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetInputPeerOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetInputPeerOp.php", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetInputStickerSet.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetInputStickerSet.php", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetInputUserOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetInputUserOp.php", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetMessageOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/GetMessageOp.php", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/Noop.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/Noop.php", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/PrimitiveLiteralOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/PrimitiveLiteralOp.php", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/ThemeFormatOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Ops/ThemeFormatOp.php", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Path.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/Path.php", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/TLContext.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/TLContext.php", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/TLWrapper.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/TLWrapper.php", - "additional-source/madelineproto-build-inputs/tools/FileRefExtractor/TypedOp.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/FileRefExtractor/TypedOp.php", - "additional-source/madelineproto-build-inputs/tools/TL/Builder.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/TL/Builder.php", - "additional-source/madelineproto-build-inputs/tools/TL/SecretBuilder.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/TL/SecretBuilder.php", - "additional-source/madelineproto-build-inputs/tools/build_docs.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/build_docs.php", - "additional-source/madelineproto-build-inputs/tools/build_docs/layerUpgrade.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/build_docs/layerUpgrade.php", - "additional-source/madelineproto-build-inputs/tools/build_docs/merge.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/build_docs/merge.php", - "additional-source/madelineproto-build-inputs/tools/build_docs/schemas.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/build_docs/schemas.php", - "additional-source/madelineproto-build-inputs/tools/build_tl.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/build_tl.php", - "additional-source/madelineproto-build-inputs/tools/fix_docs.sh": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/fix_docs.sh", - "additional-source/madelineproto-build-inputs/tools/fuzzer.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/fuzzer.php", - "additional-source/madelineproto-build-inputs/tools/genDataset.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/genDataset.php", - "additional-source/madelineproto-build-inputs/tools/gen_filerefmap.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/gen_filerefmap.php", - "additional-source/madelineproto-build-inputs/tools/layerdiff.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/layerdiff.php", - "additional-source/madelineproto-build-inputs/tools/makephar.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/makephar.php", - "additional-source/madelineproto-build-inputs/tools/phar.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/phar.php", - "additional-source/madelineproto-build-inputs/tools/phpdoc.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/phpdoc.php", - "additional-source/madelineproto-build-inputs/tools/static.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/static.php", - "additional-source/madelineproto-build-inputs/tools/std.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/std.php", - "additional-source/madelineproto-build-inputs/tools/translator.php": "resources/release/preferred-source/additional-source/madelineproto-build-inputs/tools/translator.php" - }, - "additional_source": { - "component": "amphp/windows-process-wrapper", - "tag": "v1.2.0", - "commit": "8d5aca0c56b73cba460894d79ee83ec558b41027", - "source": "https://github.com/amphp/windows-process-wrapper/tree/8d5aca0c56b73cba460894d79ee83ec558b41027", - "license": "MIT", - "evidence": "Official amphp/process update commit 6810aacc5d7049d9db87e8161e2ef0e66caa1472 identifies v1.2.0; executable Git blobs match the locked package. No reproducible binary rebuild was performed.", - "file_count": 18 - }, - "madeline_generation_source": { - "component": "danog/MadelineProto build inputs", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "upstream_provenance": { - "package": "danog/madelineproto", - "version": "8.7.0", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "purpose": "Preferred source and build inputs excluded from Composer dist; supplement runtime vendor tree without changing it.", - "source_files": [ - { - "path": ".gitattributes", - "upstream_path": ".gitattributes", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "700a7ff8ffa52877fb452e1b67be99c3af549f17", - "bytes": 177, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/.gitattributes", - "sha256": "3bb98dfe72b07470c126ea3bf718cd1971c91d06f06c142c1a3f61576e8dc527", - "status": "pass" - }, - { - "path": "composer.json", - "upstream_path": "composer.json", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "799799bca8602fd668d4aa425157bb66e4d6be64", - "bytes": 5055, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/composer.json", - "sha256": "18de335fb004ecfea1334bdf98d53dc2dc5045d6202723d19cfb3004b7293073", - "status": "pass" - }, - { - "path": "docs/template/disallow.json", - "upstream_path": "template/disallow.json", - "repository": "danog/MadelineProtoDocs", - "reference": "5280ae3d71a5b01878a5d04ed9494c3579f8d71b", - "git_blob": "6f7ab35a450912fce49a56cf0cd48b6cef63d1c2", - "bytes": 6342, - "url": "https://raw.githubusercontent.com/danog/MadelineProtoDocs/5280ae3d71a5b01878a5d04ed9494c3579f8d71b/template/disallow.json", - "sha256": "8aab568b61b51b83619933be278db5b0c51218b16d0b991193173160ef752dd6", - "status": "pass" - }, - { - "path": "extracted.json", - "upstream_path": "extracted.json", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "885e2db4d11f9c55dd5221187a97e688cb565616", - "bytes": 1216113, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/extracted.json", - "sha256": "2b0b8ef62b64a70035a8d5d4c4b4bee60a22fa861d5b61e0b233f9f117c88534", - "status": "pass" - }, - { - "path": "langs/ckb.json", - "upstream_path": "langs/ckb.json", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "ecfa03613425175fd034145e8983768a06b7dd66", - "bytes": 11450, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/langs/ckb.json", - "sha256": "1828a99998116c24849c5a6672a5d00e8ea346cfb008ab50482dd0f1963d05dd", - "status": "pass" - }, - { - "path": "langs/de.json", - "upstream_path": "langs/de.json", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "0967ef424bce6791893e9a57bb952f80fd536e93", - "bytes": 3, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/langs/de.json", - "sha256": "ca3d163bab055381827226140568f3bef7eaac187cebd76878e0b63e9e442356", - "status": "pass" - }, - { - "path": "langs/en.json", - "upstream_path": "langs/en.json", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "1a524af04c434c1f5f3b3a8ac34cb958934e1881", - "bytes": 14499, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/langs/en.json", - "sha256": "33e7b63f83a7a79fe0aa7ac73d608894b2337920de3823a4d2588f30fca07484", - "status": "pass" - }, - { - "path": "langs/fa.json", - "upstream_path": "langs/fa.json", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "ae67208d349cf6a2d54887d188a1f91cbb830b80", - "bytes": 21316, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/langs/fa.json", - "sha256": "636744c11f1b86a49a16f6c3c2f5f09dbcec9a5789dc5466240579155294f97e", - "status": "pass" - }, - { - "path": "langs/fr.json", - "upstream_path": "langs/fr.json", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "c49e3c200589e60af9d92c387245468066726fae", - "bytes": 3919, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/langs/fr.json", - "sha256": "d5beb79e1abd2a64f82c18965321cfe56c063c1bed4a92ebab393d9ceabdc30e", - "status": "pass" - }, - { - "path": "langs/he.json", - "upstream_path": "langs/he.json", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "f10635a76beaaa86625af5d29ca48c31b9773b75", - "bytes": 17972, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/langs/he.json", - "sha256": "b517525a26aec12a83c21d1df347cac40eaeda25c0007ca72e92139d152a12ab", - "status": "pass" - }, - { - "path": "langs/it.json", - "upstream_path": "langs/it.json", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "8da2889b4e1d370e6ac261ed60c92bc988e48ac7", - "bytes": 16312, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/langs/it.json", - "sha256": "fa6d8fbbb95757b79142654e519209b9bb6b18ac9dfdd36970f2f999f701b4dc", - "status": "pass" - }, - { - "path": "langs/pl.json", - "upstream_path": "langs/pl.json", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "aafea4b3818e9da8f7c0dcc5a20c3c3005d57a4d", - "bytes": 337, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/langs/pl.json", - "sha256": "613511a5d23d972281b0ddff9dfc781c6e971dd712e54f26f35baeed64f28210", - "status": "pass" - }, - { - "path": "langs/pt.json", - "upstream_path": "langs/pt.json", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "58b8bff943c087af2b0fffb6c981765505cc13b6", - "bytes": 10328, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/langs/pt.json", - "sha256": "8ec4534299dca265b4213fecec8aa32dd4d6a2b565a6b56e50b147c1e1cb3031", - "status": "pass" - }, - { - "path": "langs/ru.json", - "upstream_path": "langs/ru.json", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "9170a902d102d109f62dab410a7cb7de2cabdc1f", - "bytes": 13163, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/langs/ru.json", - "sha256": "805799a38b240f788fab8ad843a2f15038fb5d20ee48a339b2dfebe130ed706d", - "status": "pass" - }, - { - "path": "langs/uz.json", - "upstream_path": "langs/uz.json", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "422150aef3738aefc05d0b540079e9fa08c764f5", - "bytes": 16320, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/langs/uz.json", - "sha256": "f5c28b62e48835f02cab5646123cdf1441310c9bc1861bb0ce184f12d67f6121", - "status": "pass" - }, - { - "path": "langs/zh_Hans.json", - "upstream_path": "langs/zh_Hans.json", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "1781bdb2480f590967becd485e1619d33009c307", - "bytes": 13731, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/langs/zh_Hans.json", - "sha256": "b09ace620ac7e817e510f0238740b97fb9e41755c6ff0cb86798e2b55a7495af", - "status": "pass" - }, - { - "path": "LICENSE", - "upstream_path": "LICENSE", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "dba13ed2ddf783ee8118c6a581dbf75305f816a3", - "bytes": 34520, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/LICENSE", - "sha256": "57c8ff33c9c0cfc3ef00e650a1cc910d7ee479a8bc509f6c9209a7c2a11399d6", - "status": "pass" - }, - { - "path": "README.md", - "upstream_path": "README.md", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "a2f818f8cb4b33015b3ea345e805463081359bd0", - "bytes": 247365, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/README.md", - "sha256": "d29b413ca8fab2fd2bd7e3758b5d1f054fe01e470b260eceb76717ad6a028d31", - "status": "pass" - }, - { - "path": "schemas/list_file_ref_map.json", - "upstream_path": "list_file_ref_map.json", - "repository": "danog/schemas", - "reference": "0549d9e911338a01673b656f41eeea8cac51d5e2", - "git_blob": "8fdb225a760f8e7de735f79024838ed34f69bb32", - "bytes": 49, - "url": "https://raw.githubusercontent.com/danog/schemas/0549d9e911338a01673b656f41eeea8cac51d5e2/list_file_ref_map.json", - "sha256": "74c5c901f045e8e7cbbf199752a5ddf1e4de46c93a57a745697dc74db433edfe", - "status": "pass" - }, - { - "path": "schemas/list.json", - "upstream_path": "list.json", - "repository": "danog/schemas", - "reference": "0549d9e911338a01673b656f41eeea8cac51d5e2", - "git_blob": "0a7724ae2df94636f324aaee7a81bffedb3d7326", - "bytes": 484, - "url": "https://raw.githubusercontent.com/danog/schemas/0549d9e911338a01673b656f41eeea8cac51d5e2/list.json", - "sha256": "c7d92f848ad03729daf10d2ff25b9ec49f17c9562b754919f6ca8cfb93801827", - "status": "pass" - }, - { - "path": "schemas/README.md", - "upstream_path": "README.md", - "repository": "danog/schemas", - "reference": "0549d9e911338a01673b656f41eeea8cac51d5e2", - "git_blob": "c796923b979a170a4cb148a80faf72b8ee5fc132", - "bytes": 135, - "url": "https://raw.githubusercontent.com/danog/schemas/0549d9e911338a01673b656f41eeea8cac51d5e2/README.md", - "sha256": "df080ca2974e01930ef5232f2373f326477a4bd51713f8046df0d6ac2c5ea1fa", - "status": "pass" - }, - { - "path": "schemas/TL_mtproto_v1.tl", - "upstream_path": "TL_mtproto_v1.tl", - "repository": "danog/schemas", - "reference": "0549d9e911338a01673b656f41eeea8cac51d5e2", - "git_blob": "291c24089ff6b140b43243822f95e26f673b3c3f", - "bytes": 4196, - "url": "https://raw.githubusercontent.com/danog/schemas/0549d9e911338a01673b656f41eeea8cac51d5e2/TL_mtproto_v1.tl", - "sha256": "a68bbcfb6aea699cb394aec44008b01b915f1e8b632a1d786001ddd7c7300dcd", - "status": "pass" - }, - { - "path": "schemas/TL_secret.tl", - "upstream_path": "TL_secret.tl", - "repository": "danog/schemas", - "reference": "0549d9e911338a01673b656f41eeea8cac51d5e2", - "git_blob": "364fc117ec23d055fa5da3ba5206403826119902", - "bytes": 7883, - "url": "https://raw.githubusercontent.com/danog/schemas/0549d9e911338a01673b656f41eeea8cac51d5e2/TL_secret.tl", - "sha256": "899beb4c1713a65c9f09677dd93406a1e96c52b661d46dcd30ac7c0a87b0d20c", - "status": "pass" - }, - { - "path": "schemas/TL_telegram_v225_file_ref_map_schema.json", - "upstream_path": "TL_telegram_v225_file_ref_map_schema.json", - "repository": "danog/schemas", - "reference": "0549d9e911338a01673b656f41eeea8cac51d5e2", - "git_blob": "7b700b58b3e75cce6e9df72105e19d60a1b3160e", - "bytes": 19184, - "url": "https://raw.githubusercontent.com/danog/schemas/0549d9e911338a01673b656f41eeea8cac51d5e2/TL_telegram_v225_file_ref_map_schema.json", - "sha256": "118fa46b8a12dff8e4ac1545d99f39a0c261a1cd0d375ad52adb27a70072bece", - "status": "pass" - }, - { - "path": "schemas/TL_telegram_v225_file_ref_map_schema.tl", - "upstream_path": "TL_telegram_v225_file_ref_map_schema.tl", - "repository": "danog/schemas", - "reference": "0549d9e911338a01673b656f41eeea8cac51d5e2", - "git_blob": "9da973147bdc16965625c9a65e366651431e39d5", - "bytes": 4257, - "url": "https://raw.githubusercontent.com/danog/schemas/0549d9e911338a01673b656f41eeea8cac51d5e2/TL_telegram_v225_file_ref_map_schema.tl", - "sha256": "1bb333123d34d3598b50cd5fca7445c9e0347bdfc78955dc71cf543262ac4dce", - "status": "pass" - }, - { - "path": "schemas/TL_telegram_v225_file_ref_map.dat", - "upstream_path": "TL_telegram_v225_file_ref_map.dat", - "repository": "danog/schemas", - "reference": "0549d9e911338a01673b656f41eeea8cac51d5e2", - "git_blob": "0c66c61322f049c568577bece2391bb8e6fa765f", - "bytes": 54304, - "url": "https://raw.githubusercontent.com/danog/schemas/0549d9e911338a01673b656f41eeea8cac51d5e2/TL_telegram_v225_file_ref_map.dat", - "sha256": "6f62c4ed620c5c6182c7e23b9373402f832cfc9400de70ee37c3a7c9752f9dbb", - "status": "pass" - }, - { - "path": "schemas/TL_telegram_v225_file_ref_map.json", - "upstream_path": "TL_telegram_v225_file_ref_map.json", - "repository": "danog/schemas", - "reference": "0549d9e911338a01673b656f41eeea8cac51d5e2", - "git_blob": "f5a71fc2517fd85947b074e2b39b5c98e229a5f8", - "bytes": 129272, - "url": "https://raw.githubusercontent.com/danog/schemas/0549d9e911338a01673b656f41eeea8cac51d5e2/TL_telegram_v225_file_ref_map.json", - "sha256": "bbd2aa2593ccfc73638b82a7d9fe0cc116a1e97e55ce8268233ef4d13c233623", - "status": "pass" - }, - { - "path": "schemas/TL_telegram_v225.json", - "upstream_path": "TL_telegram_v225.json", - "repository": "danog/schemas", - "reference": "0549d9e911338a01673b656f41eeea8cac51d5e2", - "git_blob": "be33e4b20e26f211e19a9eb4d79640129aa9b7dd", - "bytes": 1299962, - "url": "https://raw.githubusercontent.com/danog/schemas/0549d9e911338a01673b656f41eeea8cac51d5e2/TL_telegram_v225.json", - "sha256": "7443a459ddf9f4b98de1121e16d35495bf4654d0e220ce6be3c53cb9ba3496d4", - "status": "pass" - }, - { - "path": "schemas/TL_telegram_v225.tl", - "upstream_path": "TL_telegram_v225.tl", - "repository": "danog/schemas", - "reference": "0549d9e911338a01673b656f41eeea8cac51d5e2", - "git_blob": "2ad8d9c0dc2e7f9b54d342cdef35a004ad8727a2", - "bytes": 267928, - "url": "https://raw.githubusercontent.com/danog/schemas/0549d9e911338a01673b656f41eeea8cac51d5e2/TL_telegram_v225.tl", - "sha256": "539272f5ad8992ee97b61bd134fcf3a28a41ce720e806d0e7dc0e2e408c581f9", - "status": "pass" - }, - { - "path": "tools/AnnotationsBuilder.php", - "upstream_path": "tools/AnnotationsBuilder.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "9da1b7c1436eb54b082a812d0563d9642f6fcb9d", - "bytes": 31838, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/AnnotationsBuilder.php", - "sha256": "06cfae503d18a4a4ce5c802469224d7d8c495b8ab71f61cfe6a67070682c63f1", - "status": "pass" - }, - { - "path": "tools/build_docs.php", - "upstream_path": "tools/build_docs.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "d880c8111a2216bc32ccbdd0fd53532e27748559", - "bytes": 19785, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/build_docs.php", - "sha256": "a1fbde122f6e0fad09f40472d791a24a7bc0d3d3606bb9682ff4e57e962cf27d", - "status": "pass" - }, - { - "path": "tools/build_docs/layerUpgrade.php", - "upstream_path": "tools/build_docs/layerUpgrade.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "58d3decbaeb2157460b219e3c4d48e3c2680becb", - "bytes": 1262, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/build_docs/layerUpgrade.php", - "sha256": "b80237aa3f1d43d218c3e5c5aafb5866e8269580d359ca831f0e8931e0d7e082", - "status": "pass" - }, - { - "path": "tools/build_docs/merge.php", - "upstream_path": "tools/build_docs/merge.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "9be18e1c5c212db47f8e5f473f1d0bd1cb3090ec", - "bytes": 1103, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/build_docs/merge.php", - "sha256": "45c62d5c545d01934aaf86919f95f2fa46924577379d7d9ff904af6ddab0414d", - "status": "pass" - }, - { - "path": "tools/build_docs/schemas.php", - "upstream_path": "tools/build_docs/schemas.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "84bfdcaf29eaedb8238f283a17327d134aa49fe1", - "bytes": 2209, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/build_docs/schemas.php", - "sha256": "88b3dfa2240c876838cba20d273efea2398ff35c864aee53b7759ab71203b267", - "status": "pass" - }, - { - "path": "tools/build_tl.php", - "upstream_path": "tools/build_tl.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "ef16c20fe8314caab60db353320d7b500d3b2c04", - "bytes": 493, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/build_tl.php", - "sha256": "647a38d12bf7f9624f4600ce3c9e2a52846fd6e75b01df63ee7be11f34bcda6b", - "status": "pass" - }, - { - "path": "tools/DocsBuilder.php", - "upstream_path": "tools/DocsBuilder.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "e31a9e860770b4b24889a6808a7266422b46bd26", - "bytes": 6845, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/DocsBuilder.php", - "sha256": "0b93a2da5e7c5fcd9f63fa4962805c36f8c7ad3fa22d24ee79af99814b21072d", - "status": "pass" - }, - { - "path": "tools/DocsBuilder/Constructors.php", - "upstream_path": "tools/DocsBuilder/Constructors.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "899f250ed8a13e4ccb96909fea1280279016a2a6", - "bytes": 14773, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/DocsBuilder/Constructors.php", - "sha256": "9799411e24b068ebf379f36bad567704e198486d707abcf6962172d84816ef41", - "status": "pass" - }, - { - "path": "tools/DocsBuilder/Methods.php", - "upstream_path": "tools/DocsBuilder/Methods.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "2cd2140afceb9a692c9fc109ea95ca8c91c90639", - "bytes": 19563, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/DocsBuilder/Methods.php", - "sha256": "75c80725b49b68650e9abe2a9971929cef3b16b0828ca9ea475f3cd1be8acf1d", - "status": "pass" - }, - { - "path": "tools/FileRefExtractor/ActionOp.php", - "upstream_path": "tools/FileRefExtractor/ActionOp.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "2bbc4b603d4376d87610fb2d51d3ab7112a9f7fb", - "bytes": 1171, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/FileRefExtractor/ActionOp.php", - "sha256": "1499bd3053681d6aa2269839e1d55825448deb1994ba90852270ba91340087dd", - "status": "pass" - }, - { - "path": "tools/FileRefExtractor/BuildMode.php", - "upstream_path": "tools/FileRefExtractor/BuildMode.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "c15ad08baba7b0a84fb6f0d25051ec4818f9b12d", - "bytes": 1033, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/FileRefExtractor/BuildMode.php", - "sha256": "6cc7d671f6ada2959621969efc733c0e8fa2dce8297ed3592af0228e7111026a", - "status": "pass" - }, - { - "path": "tools/FileRefExtractor/BuildMode/Ast.php", - "upstream_path": "tools/FileRefExtractor/BuildMode/Ast.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "597bea1a00c2eca7f2b2311151e9690f5d854e20", - "bytes": 15211, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/FileRefExtractor/BuildMode/Ast.php", - "sha256": "542f6899240f5d6d90e3d6dfd97e86ab68906854902f5f1cf3f61437a49243a4", - "status": "pass" - }, - { - "path": "tools/FileRefExtractor/FieldTransformationOp.php", - "upstream_path": "tools/FileRefExtractor/FieldTransformationOp.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "5d1b5990cc0dff74bf73359b6d2b840170868ec6", - "bytes": 1061, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/FileRefExtractor/FieldTransformationOp.php", - "sha256": "75bd3b3029b3907327fdb2bfdcb04f87eaa1582aba0bce9ed461778217fbe75a", - "status": "pass" - }, - { - "path": "tools/FileRefExtractor/FileRefGenerator.php", - "upstream_path": "tools/FileRefExtractor/FileRefGenerator.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "d2a4202aa5ff87f5c8c149d36c9b2fb8410a1852", - "bytes": 42046, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/FileRefExtractor/FileRefGenerator.php", - "sha256": "7d9c84e5c51da29921e51b262ba8ab6af958b5abe95667e5bfbb279a941fb336", - "status": "pass" - }, - { - "path": "tools/FileRefExtractor/LiteralOp.php", - "upstream_path": "tools/FileRefExtractor/LiteralOp.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "68bb828c62b1cbcdcdae7a1863231b1d002263bb", - "bytes": 1049, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/FileRefExtractor/LiteralOp.php", - "sha256": "300fc3630eda3d03807e64f6017da0f35366a4397263097c49d2d3808fc5f3f6", - "status": "pass" - }, - { - "path": "tools/FileRefExtractor/Ops/ArrayOp.php", - "upstream_path": "tools/FileRefExtractor/Ops/ArrayOp.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "fd852ce28e6ed41b32588fe13996074ca1c105e4", - "bytes": 2701, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/FileRefExtractor/Ops/ArrayOp.php", - "sha256": "3b4328ba6e38eacd076104e4533a6ff7c7083effbfc204e142fbe9a767ad8925", - "status": "pass" - }, - { - "path": "tools/FileRefExtractor/Ops/CallOp.php", - "upstream_path": "tools/FileRefExtractor/Ops/CallOp.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "eb1fec67e441f4ad248674f7d35c88a738f472d8", - "bytes": 3156, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/FileRefExtractor/Ops/CallOp.php", - "sha256": "d76eb0ba098131a6a7166bd54c1a7cef00247742b9252821146bf4fc0ede34d1", - "status": "pass" - }, - { - "path": "tools/FileRefExtractor/Ops/ConstructorOp.php", - "upstream_path": "tools/FileRefExtractor/Ops/ConstructorOp.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "832364e6ca44cd916403662bfda6f29cf847413b", - "bytes": 2986, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/FileRefExtractor/Ops/ConstructorOp.php", - "sha256": "a79c8e4edc295a749f905806492a87d5a3ae35f1fcaf2454d97724d9fc064f01", - "status": "pass" - }, - { - "path": "tools/FileRefExtractor/Ops/CopyMethodCallOp.php", - "upstream_path": "tools/FileRefExtractor/Ops/CopyMethodCallOp.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "4a2f591e0d60cfd6ea7ad9041c8fb5478a114740", - "bytes": 2813, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/FileRefExtractor/Ops/CopyMethodCallOp.php", - "sha256": "4b695dd32bf8674cbd65704bf3214fcbd1811fc19df9be3e5f93c7ae6f50c5aa", - "status": "pass" - }, - { - "path": "tools/FileRefExtractor/Ops/CopyOp.php", - "upstream_path": "tools/FileRefExtractor/Ops/CopyOp.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "9764de680f99a4be131d5f1bda4c10bcbb086892", - "bytes": 2321, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/FileRefExtractor/Ops/CopyOp.php", - "sha256": "0388255cac8c0eaf32267d2c214e628d0c9a7bd7f85c86d52e0ad145bcf61526", - "status": "pass" - }, - { - "path": "tools/FileRefExtractor/Ops/GetInputChannelOp.php", - "upstream_path": "tools/FileRefExtractor/Ops/GetInputChannelOp.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "1161ece1a6d0ef9d7a023a2a931a341579d93439", - "bytes": 3036, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/FileRefExtractor/Ops/GetInputChannelOp.php", - "sha256": "2b3c807797e2731a45d4feeee14e94994612130d3b1d3cfff8ecc8876d215558", - "status": "pass" - }, - { - "path": "tools/FileRefExtractor/Ops/GetInputPeerOp.php", - "upstream_path": "tools/FileRefExtractor/Ops/GetInputPeerOp.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "44f025cccf9e475639a36bc069ff9aa0f2b6e172", - "bytes": 2670, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/FileRefExtractor/Ops/GetInputPeerOp.php", - "sha256": "a9bc4d8af81fdb9a78908038690568e7e94c02cab64e59fc52a10f002dbf3662", - "status": "pass" - }, - { - "path": "tools/FileRefExtractor/Ops/GetInputStickerSet.php", - "upstream_path": "tools/FileRefExtractor/Ops/GetInputStickerSet.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "9acfc53679831a298c92a118e51cb5d1b1e5880b", - "bytes": 2684, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/FileRefExtractor/Ops/GetInputStickerSet.php", - "sha256": "7c3b0ce0b2c6b3c0bbf7c5c4ba33e7b491a1a8547e0340667e40348c0e228779", - "status": "pass" - }, - { - "path": "tools/FileRefExtractor/Ops/GetInputUserOp.php", - "upstream_path": "tools/FileRefExtractor/Ops/GetInputUserOp.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "8d8c4764aec87f654ac5567fd43d12b3776fa964", - "bytes": 3000, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/FileRefExtractor/Ops/GetInputUserOp.php", - "sha256": "d5bca8ffc5aa64c4cd33bede49392c21a0a800d9002bc22de0f46176a27e6a92", - "status": "pass" - }, - { - "path": "tools/FileRefExtractor/Ops/GetMessageOp.php", - "upstream_path": "tools/FileRefExtractor/Ops/GetMessageOp.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "d2620149db31f3608d14fcd6a203eefbe3069c7e", - "bytes": 3776, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/FileRefExtractor/Ops/GetMessageOp.php", - "sha256": "08e7f19fb87ef29ccd001de99a3688a5d97653e5a1c274d99a7fb71fc3d6339c", - "status": "pass" - }, - { - "path": "tools/FileRefExtractor/Ops/Noop.php", - "upstream_path": "tools/FileRefExtractor/Ops/Noop.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "766a746414dfe96abe7a8835fb008002785fc412", - "bytes": 1516, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/FileRefExtractor/Ops/Noop.php", - "sha256": "4e6c96a3014f3bddf3c39a4c0750f6237c5266ce03df7c09c2986855ff1c0c9a", - "status": "pass" - }, - { - "path": "tools/FileRefExtractor/Ops/PrimitiveLiteralOp.php", - "upstream_path": "tools/FileRefExtractor/Ops/PrimitiveLiteralOp.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "106c2a98c5c22f0e08fbdc0efddb5b29e5767863", - "bytes": 2288, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/FileRefExtractor/Ops/PrimitiveLiteralOp.php", - "sha256": "e030b15127b2cb9407fd72e22dfd3b514327faa0a2c08c38581f9fa2ac001937", - "status": "pass" - }, - { - "path": "tools/FileRefExtractor/Ops/ThemeFormatOp.php", - "upstream_path": "tools/FileRefExtractor/Ops/ThemeFormatOp.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "b225922bcb467932c7eef2bb08991da8b9bd7523", - "bytes": 1709, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/FileRefExtractor/Ops/ThemeFormatOp.php", - "sha256": "e384c89147307988dbf4c2972ba1e5630f84ad2d40e067f93813d9fc03b42fae", - "status": "pass" - }, - { - "path": "tools/FileRefExtractor/Path.php", - "upstream_path": "tools/FileRefExtractor/Path.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "dab149bc0a6414b1c85e0cdc33a3901f2c439a68", - "bytes": 13711, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/FileRefExtractor/Path.php", - "sha256": "bdd3cbb15bcbb9504decec03dc1eb529f8805b5c9e73b4602eb219ebf7412b0c", - "status": "pass" - }, - { - "path": "tools/FileRefExtractor/TLContext.php", - "upstream_path": "tools/FileRefExtractor/TLContext.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "d9bd7d93d1e5b9f88a693607ef540dc71083c55c", - "bytes": 3085, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/FileRefExtractor/TLContext.php", - "sha256": "0b975a77af7981eb7b4aa45c48adf7908be6f6d23f4016122e5548624367e9f0", - "status": "pass" - }, - { - "path": "tools/FileRefExtractor/TLWrapper.php", - "upstream_path": "tools/FileRefExtractor/TLWrapper.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "5ecb4bdbb87c3965b6bb2612447e4488d976e63e", - "bytes": 3445, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/FileRefExtractor/TLWrapper.php", - "sha256": "88522ff62efa4e0fa690d1a7809726de2b3be1dd0fb14cbe2de4016172ce7987", - "status": "pass" - }, - { - "path": "tools/FileRefExtractor/TypedOp.php", - "upstream_path": "tools/FileRefExtractor/TypedOp.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "d11dfa87f26ec8652fd95df05ac7c9dc2a001e04", - "bytes": 1307, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/FileRefExtractor/TypedOp.php", - "sha256": "7604725c49ac22576f2c285fe2c56a7ebb0b87effa7422427850aaa33e753b34", - "status": "pass" - }, - { - "path": "tools/fix_docs.sh", - "upstream_path": "tools/fix_docs.sh", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "a4d53cfdbfaaef07d5347b88c5c7e69cfbf6567d", - "bytes": 262, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/fix_docs.sh", - "sha256": "4c743f26805a1d002e9f9eeb9f6df8868c099ab6c78ed03c31a17ad968e42e47", - "status": "pass" - }, - { - "path": "tools/fuzzer.php", - "upstream_path": "tools/fuzzer.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "efdd59c59983b7cc696c0f63d6ee43242a9f515c", - "bytes": 10851, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/fuzzer.php", - "sha256": "e86aec0b60cec3c906ef40ef554d5a83f020f0df83fa41a0d82140570141ad4d", - "status": "pass" - }, - { - "path": "tools/gen_filerefmap.php", - "upstream_path": "tools/gen_filerefmap.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "6237fcba52000f12ffaff7b99da3a5c4d897ca21", - "bytes": 2842, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/gen_filerefmap.php", - "sha256": "64c04660acb12f86e75949e31e9683867ebd3ec32bf230cc129e26163ff4dd58", - "status": "pass" - }, - { - "path": "tools/genDataset.php", - "upstream_path": "tools/genDataset.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "ddf4911e234065f692dc5eef8434286e9496fea1", - "bytes": 1414, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/genDataset.php", - "sha256": "6d487fed4569c1fa863387dc90dc9af4fa9828b026aac45f11e611d72fd9fa45", - "status": "pass" - }, - { - "path": "tools/layerdiff.php", - "upstream_path": "tools/layerdiff.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "84afbdf45d3ae80d8148e111d721e604a5a635a0", - "bytes": 4277, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/layerdiff.php", - "sha256": "93a6e0de4238f7e7dbe86c33e6230be2118fa8e297f6855f39736dfb75ac2f9b", - "status": "pass" - }, - { - "path": "tools/makephar.php", - "upstream_path": "tools/makephar.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "ada587d80c373928fa1b5b4ceeda0ff3878db626", - "bytes": 3184, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/makephar.php", - "sha256": "b8f014265dd8e5ba2c9d8f2deff573cecc7b1906f274094cd52d3127ac79f9de", - "status": "pass" - }, - { - "path": "tools/phar.php", - "upstream_path": "tools/phar.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "bb83a5bad41f32d021de5586c33dd6bd3b7bece2", - "bytes": 8506, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/phar.php", - "sha256": "f765c235dadc5ff6099af2cafc1fc465dbb0c5a084c060b1853b90d0b61c0019", - "status": "pass" - }, - { - "path": "tools/phpdoc.php", - "upstream_path": "tools/phpdoc.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "10f4a4d00ad80c6a3dcda1272bc4675f20cfe80b", - "bytes": 4227, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/phpdoc.php", - "sha256": "f7bebb70a0572c2746e8f16e58f9ca5e7c3b797370c66461964d966a0eb83e6c", - "status": "pass" - }, - { - "path": "tools/static.php", - "upstream_path": "tools/static.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "f080c94ddaf71ea589c0da57f47dff794dcfe15b", - "bytes": 1731, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/static.php", - "sha256": "77b36fc8ad17adf4ce1b979cccfc97c88ec8d1fbcf2e88f70af06ddd1ecb244f", - "status": "pass" - }, - { - "path": "tools/std.php", - "upstream_path": "tools/std.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "85dee77d402b0b4dc08320a1a74e839fd69f51fa", - "bytes": 3155, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/std.php", - "sha256": "718e35b65340083a1f4c59e49d53e73a96b210321256a92cd6622fee88305c34", - "status": "pass" - }, - { - "path": "tools/TL/Builder.php", - "upstream_path": "tools/TL/Builder.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "6d96cf1250ff564810f4acf93647a0ddba259f3b", - "bytes": 21738, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/TL/Builder.php", - "sha256": "1975f182dcc5490d5576e53314018cca155b11c8ed212dd60af150cba805c3f1", - "status": "pass" - }, - { - "path": "tools/TL/SecretBuilder.php", - "upstream_path": "tools/TL/SecretBuilder.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "52ddddc3ac0280b1d5c0e287684b42a5cc32c6d9", - "bytes": 1515, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/TL/SecretBuilder.php", - "sha256": "6d5c40cef5c8d152686cc90ade49a759c2fc2a26b01fe4d2fee66d80406404ad", - "status": "pass" - }, - { - "path": "tools/translator.php", - "upstream_path": "tools/translator.php", - "repository": "danog/MadelineProto", - "reference": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "git_blob": "bb90c8796fbc241b11f606ce1744e30bc5bd0dd8", - "bytes": 2284, - "url": "https://raw.githubusercontent.com/danog/MadelineProto/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/tools/translator.php", - "sha256": "566b7f50cddda5926f9a08f4432941ad8de0aa70c2957289fafec4ddf058d4e8", - "status": "pass" - } - ], - "limitations": [ - "Runtime TL225 inputs included; historical schemas and generated upstream documentation not bundled.", - "Upstream generator scripts refer to changing RPC/Weblate endpoints and a separate PHPDoc development toolchain. Exact historical remote responses and reproducible full-upstream regeneration have not been established.", - "No generator was executed; source headers and licenses remain upstream originals." - ] + { + "path": "tools/FileRefExtractor/Ops/GetInputUserOp.php", + "upstream_path": "tools/FileRefExtractor/Ops/GetInputUserOp.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "8d8c4764aec87f654ac5567fd43d12b3776fa964", + "bytes": 3000, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/FileRefExtractor/Ops/GetInputUserOp.php", + "sha256": "d5bca8ffc5aa64c4cd33bede49392c21a0a800d9002bc22de0f46176a27e6a92", + "status": "pass" + }, + { + "path": "tools/FileRefExtractor/Ops/GetMessageOp.php", + "upstream_path": "tools/FileRefExtractor/Ops/GetMessageOp.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "a426aab038e4f57a66803177126925a42a9eba86", + "bytes": 3201, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/FileRefExtractor/Ops/GetMessageOp.php", + "sha256": "112c0f0480e46146f8ebd0dff00d365a0b6d0a5162134d5b6910680ed00a4a10", + "status": "pass" + }, + { + "path": "tools/FileRefExtractor/Ops/Noop.php", + "upstream_path": "tools/FileRefExtractor/Ops/Noop.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "766a746414dfe96abe7a8835fb008002785fc412", + "bytes": 1516, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/FileRefExtractor/Ops/Noop.php", + "sha256": "4e6c96a3014f3bddf3c39a4c0750f6237c5266ce03df7c09c2986855ff1c0c9a", + "status": "pass" + }, + { + "path": "tools/FileRefExtractor/Ops/PrimitiveLiteralOp.php", + "upstream_path": "tools/FileRefExtractor/Ops/PrimitiveLiteralOp.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "106c2a98c5c22f0e08fbdc0efddb5b29e5767863", + "bytes": 2288, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/FileRefExtractor/Ops/PrimitiveLiteralOp.php", + "sha256": "e030b15127b2cb9407fd72e22dfd3b514327faa0a2c08c38581f9fa2ac001937", + "status": "pass" + }, + { + "path": "tools/FileRefExtractor/Ops/ThemeFormatOp.php", + "upstream_path": "tools/FileRefExtractor/Ops/ThemeFormatOp.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "b225922bcb467932c7eef2bb08991da8b9bd7523", + "bytes": 1709, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/FileRefExtractor/Ops/ThemeFormatOp.php", + "sha256": "e384c89147307988dbf4c2972ba1e5630f84ad2d40e067f93813d9fc03b42fae", + "status": "pass" + }, + { + "path": "tools/FileRefExtractor/Path.php", + "upstream_path": "tools/FileRefExtractor/Path.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "dab149bc0a6414b1c85e0cdc33a3901f2c439a68", + "bytes": 13711, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/FileRefExtractor/Path.php", + "sha256": "bdd3cbb15bcbb9504decec03dc1eb529f8805b5c9e73b4602eb219ebf7412b0c", + "status": "pass" + }, + { + "path": "tools/FileRefExtractor/TLContext.php", + "upstream_path": "tools/FileRefExtractor/TLContext.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "d9bd7d93d1e5b9f88a693607ef540dc71083c55c", + "bytes": 3085, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/FileRefExtractor/TLContext.php", + "sha256": "0b975a77af7981eb7b4aa45c48adf7908be6f6d23f4016122e5548624367e9f0", + "status": "pass" + }, + { + "path": "tools/FileRefExtractor/TLWrapper.php", + "upstream_path": "tools/FileRefExtractor/TLWrapper.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "5ecb4bdbb87c3965b6bb2612447e4488d976e63e", + "bytes": 3445, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/FileRefExtractor/TLWrapper.php", + "sha256": "88522ff62efa4e0fa690d1a7809726de2b3be1dd0fb14cbe2de4016172ce7987", + "status": "pass" + }, + { + "path": "tools/FileRefExtractor/TypedOp.php", + "upstream_path": "tools/FileRefExtractor/TypedOp.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "d11dfa87f26ec8652fd95df05ac7c9dc2a001e04", + "bytes": 1307, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/FileRefExtractor/TypedOp.php", + "sha256": "7604725c49ac22576f2c285fe2c56a7ebb0b87effa7422427850aaa33e753b34", + "status": "pass" + }, + { + "path": "tools/TL/Builder.php", + "upstream_path": "tools/TL/Builder.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "102b8ccb5f600613f4b5c6e783e19b7ade2ece49", + "bytes": 21766, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/TL/Builder.php", + "sha256": "0a27bd880c6dca139f5148bc6ee84413a24910d5afab96be982a30c0ee1e294a", + "status": "pass" + }, + { + "path": "tools/TL/SecretBuilder.php", + "upstream_path": "tools/TL/SecretBuilder.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "52ddddc3ac0280b1d5c0e287684b42a5cc32c6d9", + "bytes": 1515, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/TL/SecretBuilder.php", + "sha256": "6d5c40cef5c8d152686cc90ade49a759c2fc2a26b01fe4d2fee66d80406404ad", + "status": "pass" + }, + { + "path": "tools/build_docs.php", + "upstream_path": "tools/build_docs.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "86c2bda1e028b8e8cea9907d9e87d83941e4b514", + "bytes": 19910, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/build_docs.php", + "sha256": "8b15e2a296f2bbbc1ffbcb1c87a052deb556d0e166b81753fafd77aa63cd5f20", + "status": "pass" + }, + { + "path": "tools/build_docs/layerUpgrade.php", + "upstream_path": "tools/build_docs/layerUpgrade.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "58d3decbaeb2157460b219e3c4d48e3c2680becb", + "bytes": 1262, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/build_docs/layerUpgrade.php", + "sha256": "b80237aa3f1d43d218c3e5c5aafb5866e8269580d359ca831f0e8931e0d7e082", + "status": "pass" + }, + { + "path": "tools/build_docs/merge.php", + "upstream_path": "tools/build_docs/merge.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "9be18e1c5c212db47f8e5f473f1d0bd1cb3090ec", + "bytes": 1103, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/build_docs/merge.php", + "sha256": "45c62d5c545d01934aaf86919f95f2fa46924577379d7d9ff904af6ddab0414d", + "status": "pass" + }, + { + "path": "tools/build_docs/schemas.php", + "upstream_path": "tools/build_docs/schemas.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "13249306c39c0f205f38afa250496e0c9f12d5b6", + "bytes": 3225, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/build_docs/schemas.php", + "sha256": "78db962cb623c63c3b3b98a1f77f3ccfa82482e232a5f2db1186f21ec97b643c", + "status": "pass" + }, + { + "path": "tools/build_tl.php", + "upstream_path": "tools/build_tl.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "ef16c20fe8314caab60db353320d7b500d3b2c04", + "bytes": 493, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/build_tl.php", + "sha256": "647a38d12bf7f9624f4600ce3c9e2a52846fd6e75b01df63ee7be11f34bcda6b", + "status": "pass" + }, + { + "path": "tools/fix_docs.sh", + "upstream_path": "tools/fix_docs.sh", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "87500373e6f9d119186b97c4c44e09951d9308f1", + "bytes": 290, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/fix_docs.sh", + "sha256": "f8f69e4175a2b639459f9fe8bbc260db0354add33c90aa6a139b84d82714b3b8", + "status": "pass" + }, + { + "path": "tools/fuzzer.php", + "upstream_path": "tools/fuzzer.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "382adc294144925ec33019881dbf95ab5309e4ee", + "bytes": 12448, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/fuzzer.php", + "sha256": "306be2401bd3b3ba7a36aa140044b8f9d1d6974b33a329f868a82e36f28b3b08", + "status": "pass" + }, + { + "path": "tools/genDataset.php", + "upstream_path": "tools/genDataset.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "ddf4911e234065f692dc5eef8434286e9496fea1", + "bytes": 1414, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/genDataset.php", + "sha256": "6d487fed4569c1fa863387dc90dc9af4fa9828b026aac45f11e611d72fd9fa45", + "status": "pass" + }, + { + "path": "tools/gen_filerefmap.php", + "upstream_path": "tools/gen_filerefmap.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "6237fcba52000f12ffaff7b99da3a5c4d897ca21", + "bytes": 2842, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/gen_filerefmap.php", + "sha256": "64c04660acb12f86e75949e31e9683867ebd3ec32bf230cc129e26163ff4dd58", + "status": "pass" }, - "limits": [ - "Runtime TL225 inputs included; historical schemas and generated upstream documentation not bundled.", - "Upstream generator scripts refer to changing RPC/Weblate endpoints and a separate PHPDoc development toolchain. Exact historical remote responses and reproducible full-upstream regeneration have not been established.", - "No generator was executed; source headers and licenses remain upstream originals." - ], - "file_count": 74 - }, - "wrapper_upstream_provenance": { - "upstream": "https://github.com/amphp/windows-process-wrapper", - "tag": "v1.2.0", - "tag_object": "97d6c7cbe716c01e1cce10e0c7ba2922f3530a19", - "commit": "8d5aca0c56b73cba460894d79ee83ec558b41027", - "source_url": "https://codeload.github.com/amphp/windows-process-wrapper/zip/8d5aca0c56b73cba460894d79ee83ec558b41027", - "lock_package": "amphp/process", - "lock_reference": "583959df17d00304ad7b0b32285373f985935643", - "binary_update_commit": "6810aacc5d7049d9db87e8161e2ef0e66caa1472", - "binary_update_message": "Update Windows binaries to v1.2.0 (#34)", - "evidence_urls": [ - "https://github.com/amphp/process/commit/6810aacc5d7049d9db87e8161e2ef0e66caa1472", - "https://api.github.com/repos/amphp/process/contents/bin/windows?ref=583959df17d00304ad7b0b32285373f985935643", - "https://api.github.com/repos/amphp/windows-process-wrapper/git/tags/97d6c7cbe716c01e1cce10e0c7ba2922f3530a19", - "https://github.com/amphp/windows-process-wrapper/releases/tag/v1.2.0" - ], - "upstream_tree": [ - { - "path": ".gitattributes", - "mode": "100644", - "type": "blob", - "sha": "fc03f042f17481aff1971886ada64f1a57670f80", - "size": 92, - "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/fc03f042f17481aff1971886ada64f1a57670f80" - }, - { - "path": ".gitignore", - "mode": "100644", - "type": "blob", - "sha": "94420dc1ce23b623d17047946883ff7017112cb8", - "size": 3742, - "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/94420dc1ce23b623d17047946883ff7017112cb8" - }, - { - "path": "LICENSE", - "mode": "100644", - "type": "blob", - "sha": "dec2dd8fe0b0ab43911c62f8937684c1e51d5049", - "size": 1072, - "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/dec2dd8fe0b0ab43911c62f8937684c1e51d5049" - }, - { - "path": "ProcessWrapper.sln", - "mode": "100644", - "type": "blob", - "sha": "c9126392cf4aca227b40c2c0335839ad16bf1b76", - "size": 1281, - "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/c9126392cf4aca227b40c2c0335839ad16bf1b76" - }, - { - "path": "ProcessWrapper.sln.DotSettings", - "mode": "100644", - "type": "blob", - "sha": "deb29915534fa656092548190f146671ffe4f478", - "size": 2124, - "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/deb29915534fa656092548190f146671ffe4f478" - }, - { - "path": "ProcessWrapper.vcxproj", - "mode": "100644", - "type": "blob", - "sha": "fa81b64f0cd5194dc4897fac61e2d40098c69f79", - "size": 7946, - "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/fa81b64f0cd5194dc4897fac61e2d40098c69f79" - }, - { - "path": "ProcessWrapper.vcxproj.filters", - "mode": "100644", - "type": "blob", - "sha": "46eda2ee80bdf99d23b50f86bda80c6e0e4b41a8", - "size": 1713, - "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/46eda2ee80bdf99d23b50f86bda80c6e0e4b41a8" - }, - { - "path": "README.md", - "mode": "100644", - "type": "blob", - "sha": "b178aacad4a053935e0cf78c5d466e528926eb69", - "size": 1008, - "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/b178aacad4a053935e0cf78c5d466e528926eb69" - }, - { - "path": "resources", - "mode": "040000", - "type": "tree", - "sha": "57e835dd53896b9026f95a7e1fad9d2368a9776e", - "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/trees/57e835dd53896b9026f95a7e1fad9d2368a9776e" - }, - { - "path": "resources/.gitattributes", - "mode": "100644", - "type": "blob", - "sha": "3950084c679810b0c0d4eccf91f7e32410d3c081", - "size": 58, - "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/3950084c679810b0c0d4eccf91f7e32410d3c081" - }, - { - "path": "resources/Icon_amphp.ico", - "mode": "100644", - "type": "blob", - "sha": "9d219eb756111d7fa85757b98a326a7f82a0efb2", - "size": 54800, - "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/9d219eb756111d7fa85757b98a326a7f82a0efb2" - }, - { - "path": "resources/ProcessWrapper.rc", - "mode": "100644", - "type": "blob", - "sha": "13f1382062bb6e6cf244ec79ef5a7bbc8f6f1d02", - "size": 5280, - "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/13f1382062bb6e6cf244ec79ef5a7bbc8f6f1d02" - }, - { - "path": "resources/resource.h", - "mode": "100644", - "type": "blob", - "sha": "5ecd01e057f77f8bdcde5bcd5bac41ce58a8ea67", - "size": 916, - "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/5ecd01e057f77f8bdcde5bcd5bac41ce58a8ea67" - }, - { - "path": "src", - "mode": "040000", - "type": "tree", - "sha": "4171201cdf4cd893c4867f919cf2492322297e30", - "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/trees/4171201cdf4cd893c4867f919cf2492322297e30" - }, - { - "path": "src/Args.c", - "mode": "100644", - "type": "blob", - "sha": "a1555b49b86b850700dbc59246be2c8ffe724e3b", - "size": 7737, - "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/a1555b49b86b850700dbc59246be2c8ffe724e3b" - }, - { - "path": "src/Args.h", - "mode": "100644", - "type": "blob", - "sha": "63ba2b4effce504060fd9e06098886aa95f2faa8", - "size": 372, - "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/63ba2b4effce504060fd9e06098886aa95f2faa8" - }, - { - "path": "src/Encoding.h", - "mode": "100644", - "type": "blob", - "sha": "f1e987a6b8b20c64bca6ae645f1c87a9aaaeed46", - "size": 372, - "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/f1e987a6b8b20c64bca6ae645f1c87a9aaaeed46" - }, - { - "path": "src/Errors.c", - "mode": "100644", - "type": "blob", - "sha": "2cd9ffc6cdb976ee5e6a97598acfd23c2839af09", - "size": 3931, - "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/2cd9ffc6cdb976ee5e6a97598acfd23c2839af09" - }, - { - "path": "src/Errors.h", - "mode": "100644", - "type": "blob", - "sha": "9c229c96884013a4a9498f5019db338425d7a966", - "size": 277, - "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/9c229c96884013a4a9498f5019db338425d7a966" - }, - { - "path": "src/ProcessWrapper.c", - "mode": "100644", - "type": "blob", - "sha": "c74f5d7d03c8a8705c0edde40c606f24d8cf66dc", - "size": 24578, - "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/c74f5d7d03c8a8705c0edde40c606f24d8cf66dc" - } - ], - "source_archive_sha256": "fa4b2e5cda2ba0839f34c27dd8829326b8a343b081404df3d43fb827407b472c", - "release_archive_sha256": "84d4b1379a5d36c432965b4e7ecedfbc0913debd73e57eee2e66ad2859951f52", - "source_files": [ - { - "path": ".gitattributes", - "bytes": 92, - "git_blob": "fc03f042f17481aff1971886ada64f1a57670f80", - "archive_conversion": "GitHub archive CRLF preserved; LF canonical bytes matched exact upstream Git blob during verification", - "sha256": "e6518f1394b1372580e03c792bf6b1a51766e1da051815457fc881bf78476ecd", - "canonical_git_bytes_sha256": "0ed19d71699161c69aac3c0ecab8d46887b1ebc7017c8e129aa556917252ccf3", - "archive_bytes": 94 - }, - { - "path": ".gitignore", - "bytes": 3742, - "git_blob": "94420dc1ce23b623d17047946883ff7017112cb8", - "archive_conversion": "GitHub archive CRLF preserved; LF canonical bytes matched exact upstream Git blob during verification", - "sha256": "122661b5b5b483734ef04f7f291a24dcc786ffb0c9e92a1f35b2deb59ebb26fd", - "canonical_git_bytes_sha256": "c84452b0c95cc7732dc0301d0418df40672b75966c53eb2535a8a18335a37ac8", - "archive_bytes": 3978 - }, - { - "path": "LICENSE", - "bytes": 1072, - "git_blob": "dec2dd8fe0b0ab43911c62f8937684c1e51d5049", - "archive_conversion": "GitHub archive CRLF preserved; LF canonical bytes matched exact upstream Git blob during verification", - "sha256": "b41825e266bd6e700ef99630fee09db6338122a1d28c1d298c64cea6fc1c030c", - "canonical_git_bytes_sha256": "5f0e546c0337306a39705db9c8460fa3cd84ed9b1a9d871856058d60d2289291", - "archive_bytes": 1093 - }, - { - "path": "ProcessWrapper.sln", - "bytes": 1281, - "git_blob": "c9126392cf4aca227b40c2c0335839ad16bf1b76", - "archive_conversion": "GitHub archive CRLF preserved; LF canonical bytes matched exact upstream Git blob during verification", - "sha256": "5f26b1a717dda8d8b2573588ab8c87a585415538be92300e81c2e9524e347e6b", - "canonical_git_bytes_sha256": "ab9959b47c48f948ec910345fc6455b5dd0789bbf15eab6cb0760646418bd851", - "archive_bytes": 1309 - }, - { - "path": "ProcessWrapper.sln.DotSettings", - "bytes": 2124, - "git_blob": "deb29915534fa656092548190f146671ffe4f478", - "archive_conversion": "GitHub archive CRLF preserved; LF canonical bytes matched exact upstream Git blob during verification", - "sha256": "4db43cc7fbc6b8972f454e894b5a70a1cd9e214ba15c9649fb680e9cf430c8d7", - "canonical_git_bytes_sha256": "66d0cb78a87dc2143cfc34d0f2f172113acec4631244bff725167f62cea35577", - "archive_bytes": 2144 - }, - { - "path": "ProcessWrapper.vcxproj", - "bytes": 7946, - "git_blob": "fa81b64f0cd5194dc4897fac61e2d40098c69f79", - "archive_conversion": "GitHub archive CRLF preserved; LF canonical bytes matched exact upstream Git blob during verification", - "sha256": "766e9040c299829a030bdaff7b450ec6781fac58ef123175b5b022598bf980f8", - "canonical_git_bytes_sha256": "860f46822566c4d7f809263983195e11500f9bce1d928f7a1e48b51ec7a9f2e2", - "archive_bytes": 8117 - }, - { - "path": "ProcessWrapper.vcxproj.filters", - "bytes": 1713, - "git_blob": "46eda2ee80bdf99d23b50f86bda80c6e0e4b41a8", - "archive_conversion": "GitHub archive CRLF preserved; LF canonical bytes matched exact upstream Git blob during verification", - "sha256": "7eb705d68fce787832d0d26a945bd785802fefdd87ba1386cb19365e997b5ffc", - "canonical_git_bytes_sha256": "cc93ee269827000f1ea972a5aba07a8dfc2c6a6450cf28d1e8e5a6195b767aa3", - "archive_bytes": 1765 - }, - { - "path": "README.md", - "bytes": 1008, - "git_blob": "b178aacad4a053935e0cf78c5d466e528926eb69", - "archive_conversion": "GitHub archive CRLF preserved; LF canonical bytes matched exact upstream Git blob during verification", - "sha256": "22eb3f686641db618709bda289529feaa43c231aa725cd059731f1eef5dfe423", - "canonical_git_bytes_sha256": "861b3446721a28abeee4f94d22d1de97600e610f03cb2825441cc7b5cec4b636", - "archive_bytes": 1032 - }, - { - "path": "resources/.gitattributes", - "bytes": 58, - "git_blob": "3950084c679810b0c0d4eccf91f7e32410d3c081", - "archive_conversion": "none", - "sha256": "f9ff8e3d710fc3f6acbb095258e4746cc01d3e7d351c884ea6880455d82bae72", - "canonical_git_bytes_sha256": "f9ff8e3d710fc3f6acbb095258e4746cc01d3e7d351c884ea6880455d82bae72", - "archive_bytes": 58 - }, - { - "path": "resources/Icon_amphp.ico", - "bytes": 54800, - "git_blob": "9d219eb756111d7fa85757b98a326a7f82a0efb2", - "archive_conversion": "none", - "sha256": "4d746cea582e3b984584fefccc2e6a90d39e75ec0b650ff43bfc893ea2e4eda2", - "canonical_git_bytes_sha256": "4d746cea582e3b984584fefccc2e6a90d39e75ec0b650ff43bfc893ea2e4eda2", - "archive_bytes": 54800 - }, - { - "path": "resources/ProcessWrapper.rc", - "bytes": 5280, - "git_blob": "13f1382062bb6e6cf244ec79ef5a7bbc8f6f1d02", - "archive_conversion": "none", - "sha256": "e08aa7682e9c823f4f68e47c237e4ee88b2b8b78616abb94a38ecada3508e993", - "canonical_git_bytes_sha256": "e08aa7682e9c823f4f68e47c237e4ee88b2b8b78616abb94a38ecada3508e993", - "archive_bytes": 5280 - }, - { - "path": "resources/resource.h", - "bytes": 916, - "git_blob": "5ecd01e057f77f8bdcde5bcd5bac41ce58a8ea67", - "archive_conversion": "none", - "sha256": "58ff0eadb1c7e5c2a999f711ae95fbd765d6b0f718f48ab68558563ebf04f601", - "canonical_git_bytes_sha256": "58ff0eadb1c7e5c2a999f711ae95fbd765d6b0f718f48ab68558563ebf04f601", - "archive_bytes": 916 - }, - { - "path": "src/Args.c", - "bytes": 7737, - "git_blob": "a1555b49b86b850700dbc59246be2c8ffe724e3b", - "archive_conversion": "GitHub archive CRLF preserved; LF canonical bytes matched exact upstream Git blob during verification", - "sha256": "b2d944379bd3af7a289aa500150f0ce27e618eb378d3f3eecf384f8a32a7d441", - "canonical_git_bytes_sha256": "d2937a737e59355c374e294ba01ac4784f7e70033669102f307c466a69ce922a", - "archive_bytes": 7983 - }, - { - "path": "src/Args.h", - "bytes": 372, - "git_blob": "63ba2b4effce504060fd9e06098886aa95f2faa8", - "archive_conversion": "GitHub archive CRLF preserved; LF canonical bytes matched exact upstream Git blob during verification", - "sha256": "f3203671d93c1fc7aec4dab123b1a96f2de525071e5f8e3bff73e96a19b4353c", - "canonical_git_bytes_sha256": "9998d57f1ecde7ceb4ce648b985b7a751a53e9bbd54574e46d07fa5e5b5259ea", - "archive_bytes": 388 - }, - { - "path": "src/Encoding.h", - "bytes": 372, - "git_blob": "f1e987a6b8b20c64bca6ae645f1c87a9aaaeed46", - "archive_conversion": "GitHub archive CRLF preserved; LF canonical bytes matched exact upstream Git blob during verification", - "sha256": "95e600fd81ce3830eaada2edaa2e560b9e060751f0d6518ec816ea57e682a5b9", - "canonical_git_bytes_sha256": "1bc1da7c169c74ec8e98b64521fa6b9fcf972479e8a174aebe7e2d66dd177013", - "archive_bytes": 379 - }, - { - "path": "src/Errors.c", - "bytes": 3931, - "git_blob": "2cd9ffc6cdb976ee5e6a97598acfd23c2839af09", - "archive_conversion": "GitHub archive CRLF preserved; LF canonical bytes matched exact upstream Git blob during verification", - "sha256": "c8021ac52ed123e4ece667f97048b1ecadbad122b993c1e43327db985a21c463", - "canonical_git_bytes_sha256": "66e699615cf1d8339fcb1a746a3a36fe9c6c492debbe50544951c24feae28f4c", - "archive_bytes": 4130 - }, - { - "path": "src/Errors.h", - "bytes": 277, - "git_blob": "9c229c96884013a4a9498f5019db338425d7a966", - "archive_conversion": "GitHub archive CRLF preserved; LF canonical bytes matched exact upstream Git blob during verification", - "sha256": "ec57545ed3bddf7710f23b8e14a21a0d5dda5f94613bf388b502fdd13932a34e", - "canonical_git_bytes_sha256": "9ba27703e81726fdb3247467d892c17d3a4dfb9c39dde5f975be19d1afe1e744", - "archive_bytes": 290 - }, - { - "path": "src/ProcessWrapper.c", - "bytes": 24578, - "git_blob": "c74f5d7d03c8a8705c0edde40c606f24d8cf66dc", - "archive_conversion": "GitHub archive CRLF preserved; LF canonical bytes matched exact upstream Git blob during verification", - "sha256": "f93286e07aea62ffa1d7ba20839a3bdc21ede954c7f8a6096796d9fdb229a389", - "canonical_git_bytes_sha256": "62a8583ed212ede6ff4cfcb6485b10b818dd830b97c66624a191cc2e5a7d0b39", - "archive_bytes": 25368 - } - ], - "release_executables": [ - { - "path": "ProcessWrapper.exe", - "bytes": 78848, - "sha256": "5b6e66912c92e40ecfb6ac391a2595fa2a8d8e4f93a911c7ae0248aa14ec047d" - }, - { - "path": "ProcessWrapper64.exe", - "bytes": 83968, - "sha256": "1b7c6db9c3dae3073335433e1c3f913b80ac76109b869420e1332652b0c461a2" - } - ], - "limitations": [ - "Upstream history and exact binary hashes verified; no local reproducible build was performed.", - "Compiler, Windows SDK and OS libraries are external build/runtime prerequisites, not bundled application dependencies." - ], - "delivered_source_policy": "Preserve bytes from pinned GitHub source archive, including upstream-requested CRLF. Git blob verification also checked the canonical LF form where needed; no semantic source changes." - }, - "omitted_public_example_keys": [ { - "file": "vendor/amphp/http-server/tools/tls/localhost.key.pem", - "sha256": "1e11dc00c61adae8180d95a8e1774d2910cab3459c4744b2f6567f061e094eb0", - "source": "https://github.com/amphp/http-server/tree/aa96ca38c5f822a827236543d5417d0c2a782ef0", - "reason": "Public upstream development TLS example private key; unused by the bot." + "path": "tools/layerdiff.php", + "upstream_path": "tools/layerdiff.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "dfc02897fba9ab29ba1b829b9fbfffb1ecb44107", + "bytes": 5072, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/layerdiff.php", + "sha256": "15f9716541f87d813f5d1faeee2ece5664a1c94ae6ed6635178265f19f1cdc50", + "status": "pass" }, { - "file": "vendor/amphp/http-server/tools/tls/localhost.pem", - "sha256": "7a2aa6d828415a02c060a2e9377e5402fa6039f4e3392d0c1a308221962b357d", - "source": "https://github.com/amphp/http-server/tree/aa96ca38c5f822a827236543d5417d0c2a782ef0", - "reason": "Public upstream development TLS example private key; unused by the bot." + "path": "tools/makephar.php", + "upstream_path": "tools/makephar.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "ebef2501ba9be94525cb1f64cd966203a9ce1a9a", + "bytes": 3430, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/makephar.php", + "sha256": "06cee80ffd3f64c4b34318fdda009b9b07166697ff812af9f5a495c24482a2cd", + "status": "pass" + }, + { + "path": "tools/phar.php", + "upstream_path": "tools/phar.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "97e76229e73cf4354620eeb247e9d93d4da7d7cf", + "bytes": 8837, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/phar.php", + "sha256": "2cb09ef89f3bf87f148bc6a9c1d5df08d2d492d6aaa3270156b7a7bb9d65fa84", + "status": "pass" + }, + { + "path": "tools/phpdoc.php", + "upstream_path": "tools/phpdoc.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "9f405a8fee6659b46e02aea89c2e37448c4ec6e9", + "bytes": 4290, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/phpdoc.php", + "sha256": "0d7a4af3abc78265cdd6a75436f26691a3780214cd7c783a9cf80b54ee47b2c5", + "status": "pass" + }, + { + "path": "tools/static.php", + "upstream_path": "tools/static.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "f080c94ddaf71ea589c0da57f47dff794dcfe15b", + "bytes": 1731, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/static.php", + "sha256": "77b36fc8ad17adf4ce1b979cccfc97c88ec8d1fbcf2e88f70af06ddd1ecb244f", + "status": "pass" + }, + { + "path": "tools/std.php", + "upstream_path": "tools/std.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "85dee77d402b0b4dc08320a1a74e839fd69f51fa", + "bytes": 3155, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/std.php", + "sha256": "718e35b65340083a1f4c59e49d53e73a96b210321256a92cd6622fee88305c34", + "status": "pass" + }, + { + "path": "tools/translator.php", + "upstream_path": "tools/translator.php", + "repository": "danog/MadelineProto", + "reference": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "git_blob": "e63975804ece71643de5c5ccccd0a9d151145da2", + "bytes": 3198, + "url": "https://raw.githubusercontent.com/danog/MadelineProto/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1/tools/translator.php", + "sha256": "a55b87ddf3a09c03365143e736ae6444cb47f36cae78f970a7b553883ca3e054", + "status": "pass" } + ], + "limitations": [ + "TL232, MTProto, secret-chat, current file-reference-map and all language-generator inputs are included with their generator sources; historical schema sets and complete generated documentation are outside this collection.", + "Upstream full documentation/RPC error-generation workflows use mutable remote RPC/schema services and a separate development toolchain. Exact historical remote responses and full upstream reproduction are not established; the supplied current TL/language generators were not executed.", + "No separate LICENSE/COPYING/NOTICE file was found in the pinned schemas or documentation submodule trees. Original bytes and parent-project notices are retained; no new license is assigned to those upstream inputs." + ] + }, + "limits": [ + "TL232, MTProto, secret-chat, current file-reference-map and all language-generator inputs are included with their generator sources; historical schema sets and complete generated documentation are outside this collection.", + "Upstream full documentation/RPC error-generation workflows use mutable remote RPC/schema services and a separate development toolchain. Exact historical remote responses and full upstream reproduction are not established; the supplied current TL/language generators were not executed.", + "No separate LICENSE/COPYING/NOTICE file was found in the pinned schemas or documentation submodule trees. Original bytes and parent-project notices are retained; no new license is assigned to those upstream inputs." ], - "excluded": [ - "Installed development-tool trees (26 locked packages, including PHPStan PHAR)", - "Composer-generated vendor/composer metadata, autoloaders and vendor/bin proxies", - "PHP, SQLite and operating-system / Docker-base-image source", - "Git metadata, live .env, credentials, sessions, databases, WAL/SHM, backups, logs, caches, coverage and prior archives" + "file_count": 84 + }, + "wrapper_upstream_provenance": { + "upstream": "https://github.com/amphp/windows-process-wrapper", + "tag": "v1.2.0", + "tag_object": "97d6c7cbe716c01e1cce10e0c7ba2922f3530a19", + "commit": "8d5aca0c56b73cba460894d79ee83ec558b41027", + "source_url": "https://codeload.github.com/amphp/windows-process-wrapper/zip/8d5aca0c56b73cba460894d79ee83ec558b41027", + "lock_package": "amphp/process", + "lock_reference": "583959df17d00304ad7b0b32285373f985935643", + "binary_update_commit": "6810aacc5d7049d9db87e8161e2ef0e66caa1472", + "binary_update_message": "Update Windows binaries to v1.2.0 (#34)", + "evidence_urls": [ + "https://github.com/amphp/process/commit/6810aacc5d7049d9db87e8161e2ef0e66caa1472", + "https://api.github.com/repos/amphp/process/contents/bin/windows?ref=583959df17d00304ad7b0b32285373f985935643", + "https://api.github.com/repos/amphp/windows-process-wrapper/git/tags/97d6c7cbe716c01e1cce10e0c7ba2922f3530a19", + "https://github.com/amphp/windows-process-wrapper/releases/tag/v1.2.0" ], - "installation": "This is a source collection, not an installed runnable vendor tree. Install the committed Composer lock and verify patches before startup.", - "limits": [ - "Not the full source of a Linux container or every optional development tool.", - "Retained upstream Windows helper binaries have associated preferred source included, but their rebuild is unverified.", - "Historical provenance and dependency-license metadata/header differences remain documented. The historical UpdateLoop helper has the maintainer authorship/distribution attestation dated 2026-10-16; separate formatted-date exports remain excluded." + "upstream_tree": [ + { + "path": ".gitattributes", + "mode": "100644", + "type": "blob", + "sha": "fc03f042f17481aff1971886ada64f1a57670f80", + "size": 92, + "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/fc03f042f17481aff1971886ada64f1a57670f80" + }, + { + "path": ".gitignore", + "mode": "100644", + "type": "blob", + "sha": "94420dc1ce23b623d17047946883ff7017112cb8", + "size": 3742, + "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/94420dc1ce23b623d17047946883ff7017112cb8" + }, + { + "path": "LICENSE", + "mode": "100644", + "type": "blob", + "sha": "dec2dd8fe0b0ab43911c62f8937684c1e51d5049", + "size": 1072, + "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/dec2dd8fe0b0ab43911c62f8937684c1e51d5049" + }, + { + "path": "ProcessWrapper.sln", + "mode": "100644", + "type": "blob", + "sha": "c9126392cf4aca227b40c2c0335839ad16bf1b76", + "size": 1281, + "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/c9126392cf4aca227b40c2c0335839ad16bf1b76" + }, + { + "path": "ProcessWrapper.sln.DotSettings", + "mode": "100644", + "type": "blob", + "sha": "deb29915534fa656092548190f146671ffe4f478", + "size": 2124, + "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/deb29915534fa656092548190f146671ffe4f478" + }, + { + "path": "ProcessWrapper.vcxproj", + "mode": "100644", + "type": "blob", + "sha": "fa81b64f0cd5194dc4897fac61e2d40098c69f79", + "size": 7946, + "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/fa81b64f0cd5194dc4897fac61e2d40098c69f79" + }, + { + "path": "ProcessWrapper.vcxproj.filters", + "mode": "100644", + "type": "blob", + "sha": "46eda2ee80bdf99d23b50f86bda80c6e0e4b41a8", + "size": 1713, + "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/46eda2ee80bdf99d23b50f86bda80c6e0e4b41a8" + }, + { + "path": "README.md", + "mode": "100644", + "type": "blob", + "sha": "b178aacad4a053935e0cf78c5d466e528926eb69", + "size": 1008, + "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/b178aacad4a053935e0cf78c5d466e528926eb69" + }, + { + "path": "resources", + "mode": "040000", + "type": "tree", + "sha": "57e835dd53896b9026f95a7e1fad9d2368a9776e", + "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/trees/57e835dd53896b9026f95a7e1fad9d2368a9776e" + }, + { + "path": "resources/.gitattributes", + "mode": "100644", + "type": "blob", + "sha": "3950084c679810b0c0d4eccf91f7e32410d3c081", + "size": 58, + "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/3950084c679810b0c0d4eccf91f7e32410d3c081" + }, + { + "path": "resources/Icon_amphp.ico", + "mode": "100644", + "type": "blob", + "sha": "9d219eb756111d7fa85757b98a326a7f82a0efb2", + "size": 54800, + "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/9d219eb756111d7fa85757b98a326a7f82a0efb2" + }, + { + "path": "resources/ProcessWrapper.rc", + "mode": "100644", + "type": "blob", + "sha": "13f1382062bb6e6cf244ec79ef5a7bbc8f6f1d02", + "size": 5280, + "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/13f1382062bb6e6cf244ec79ef5a7bbc8f6f1d02" + }, + { + "path": "resources/resource.h", + "mode": "100644", + "type": "blob", + "sha": "5ecd01e057f77f8bdcde5bcd5bac41ce58a8ea67", + "size": 916, + "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/5ecd01e057f77f8bdcde5bcd5bac41ce58a8ea67" + }, + { + "path": "src", + "mode": "040000", + "type": "tree", + "sha": "4171201cdf4cd893c4867f919cf2492322297e30", + "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/trees/4171201cdf4cd893c4867f919cf2492322297e30" + }, + { + "path": "src/Args.c", + "mode": "100644", + "type": "blob", + "sha": "a1555b49b86b850700dbc59246be2c8ffe724e3b", + "size": 7737, + "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/a1555b49b86b850700dbc59246be2c8ffe724e3b" + }, + { + "path": "src/Args.h", + "mode": "100644", + "type": "blob", + "sha": "63ba2b4effce504060fd9e06098886aa95f2faa8", + "size": 372, + "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/63ba2b4effce504060fd9e06098886aa95f2faa8" + }, + { + "path": "src/Encoding.h", + "mode": "100644", + "type": "blob", + "sha": "f1e987a6b8b20c64bca6ae645f1c87a9aaaeed46", + "size": 372, + "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/f1e987a6b8b20c64bca6ae645f1c87a9aaaeed46" + }, + { + "path": "src/Errors.c", + "mode": "100644", + "type": "blob", + "sha": "2cd9ffc6cdb976ee5e6a97598acfd23c2839af09", + "size": 3931, + "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/2cd9ffc6cdb976ee5e6a97598acfd23c2839af09" + }, + { + "path": "src/Errors.h", + "mode": "100644", + "type": "blob", + "sha": "9c229c96884013a4a9498f5019db338425d7a966", + "size": 277, + "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/9c229c96884013a4a9498f5019db338425d7a966" + }, + { + "path": "src/ProcessWrapper.c", + "mode": "100644", + "type": "blob", + "sha": "c74f5d7d03c8a8705c0edde40c606f24d8cf66dc", + "size": 24578, + "url": "https://api.github.com/repos/amphp/windows-process-wrapper/git/blobs/c74f5d7d03c8a8705c0edde40c606f24d8cf66dc" + } + ], + "source_archive_sha256": "fa4b2e5cda2ba0839f34c27dd8829326b8a343b081404df3d43fb827407b472c", + "release_archive_sha256": "84d4b1379a5d36c432965b4e7ecedfbc0913debd73e57eee2e66ad2859951f52", + "source_files": [ + { + "path": ".gitattributes", + "bytes": 92, + "git_blob": "fc03f042f17481aff1971886ada64f1a57670f80", + "archive_conversion": "GitHub archive CRLF preserved; LF canonical bytes matched exact upstream Git blob during verification", + "sha256": "e6518f1394b1372580e03c792bf6b1a51766e1da051815457fc881bf78476ecd", + "canonical_git_bytes_sha256": "0ed19d71699161c69aac3c0ecab8d46887b1ebc7017c8e129aa556917252ccf3", + "archive_bytes": 94 + }, + { + "path": ".gitignore", + "bytes": 3742, + "git_blob": "94420dc1ce23b623d17047946883ff7017112cb8", + "archive_conversion": "GitHub archive CRLF preserved; LF canonical bytes matched exact upstream Git blob during verification", + "sha256": "122661b5b5b483734ef04f7f291a24dcc786ffb0c9e92a1f35b2deb59ebb26fd", + "canonical_git_bytes_sha256": "c84452b0c95cc7732dc0301d0418df40672b75966c53eb2535a8a18335a37ac8", + "archive_bytes": 3978 + }, + { + "path": "LICENSE", + "bytes": 1072, + "git_blob": "dec2dd8fe0b0ab43911c62f8937684c1e51d5049", + "archive_conversion": "GitHub archive CRLF preserved; LF canonical bytes matched exact upstream Git blob during verification", + "sha256": "b41825e266bd6e700ef99630fee09db6338122a1d28c1d298c64cea6fc1c030c", + "canonical_git_bytes_sha256": "5f0e546c0337306a39705db9c8460fa3cd84ed9b1a9d871856058d60d2289291", + "archive_bytes": 1093 + }, + { + "path": "ProcessWrapper.sln", + "bytes": 1281, + "git_blob": "c9126392cf4aca227b40c2c0335839ad16bf1b76", + "archive_conversion": "GitHub archive CRLF preserved; LF canonical bytes matched exact upstream Git blob during verification", + "sha256": "5f26b1a717dda8d8b2573588ab8c87a585415538be92300e81c2e9524e347e6b", + "canonical_git_bytes_sha256": "ab9959b47c48f948ec910345fc6455b5dd0789bbf15eab6cb0760646418bd851", + "archive_bytes": 1309 + }, + { + "path": "ProcessWrapper.sln.DotSettings", + "bytes": 2124, + "git_blob": "deb29915534fa656092548190f146671ffe4f478", + "archive_conversion": "GitHub archive CRLF preserved; LF canonical bytes matched exact upstream Git blob during verification", + "sha256": "4db43cc7fbc6b8972f454e894b5a70a1cd9e214ba15c9649fb680e9cf430c8d7", + "canonical_git_bytes_sha256": "66d0cb78a87dc2143cfc34d0f2f172113acec4631244bff725167f62cea35577", + "archive_bytes": 2144 + }, + { + "path": "ProcessWrapper.vcxproj", + "bytes": 7946, + "git_blob": "fa81b64f0cd5194dc4897fac61e2d40098c69f79", + "archive_conversion": "GitHub archive CRLF preserved; LF canonical bytes matched exact upstream Git blob during verification", + "sha256": "766e9040c299829a030bdaff7b450ec6781fac58ef123175b5b022598bf980f8", + "canonical_git_bytes_sha256": "860f46822566c4d7f809263983195e11500f9bce1d928f7a1e48b51ec7a9f2e2", + "archive_bytes": 8117 + }, + { + "path": "ProcessWrapper.vcxproj.filters", + "bytes": 1713, + "git_blob": "46eda2ee80bdf99d23b50f86bda80c6e0e4b41a8", + "archive_conversion": "GitHub archive CRLF preserved; LF canonical bytes matched exact upstream Git blob during verification", + "sha256": "7eb705d68fce787832d0d26a945bd785802fefdd87ba1386cb19365e997b5ffc", + "canonical_git_bytes_sha256": "cc93ee269827000f1ea972a5aba07a8dfc2c6a6450cf28d1e8e5a6195b767aa3", + "archive_bytes": 1765 + }, + { + "path": "README.md", + "bytes": 1008, + "git_blob": "b178aacad4a053935e0cf78c5d466e528926eb69", + "archive_conversion": "GitHub archive CRLF preserved; LF canonical bytes matched exact upstream Git blob during verification", + "sha256": "22eb3f686641db618709bda289529feaa43c231aa725cd059731f1eef5dfe423", + "canonical_git_bytes_sha256": "861b3446721a28abeee4f94d22d1de97600e610f03cb2825441cc7b5cec4b636", + "archive_bytes": 1032 + }, + { + "path": "resources/.gitattributes", + "bytes": 58, + "git_blob": "3950084c679810b0c0d4eccf91f7e32410d3c081", + "archive_conversion": "none", + "sha256": "f9ff8e3d710fc3f6acbb095258e4746cc01d3e7d351c884ea6880455d82bae72", + "canonical_git_bytes_sha256": "f9ff8e3d710fc3f6acbb095258e4746cc01d3e7d351c884ea6880455d82bae72", + "archive_bytes": 58 + }, + { + "path": "resources/Icon_amphp.ico", + "bytes": 54800, + "git_blob": "9d219eb756111d7fa85757b98a326a7f82a0efb2", + "archive_conversion": "none", + "sha256": "4d746cea582e3b984584fefccc2e6a90d39e75ec0b650ff43bfc893ea2e4eda2", + "canonical_git_bytes_sha256": "4d746cea582e3b984584fefccc2e6a90d39e75ec0b650ff43bfc893ea2e4eda2", + "archive_bytes": 54800 + }, + { + "path": "resources/ProcessWrapper.rc", + "bytes": 5280, + "git_blob": "13f1382062bb6e6cf244ec79ef5a7bbc8f6f1d02", + "archive_conversion": "none", + "sha256": "e08aa7682e9c823f4f68e47c237e4ee88b2b8b78616abb94a38ecada3508e993", + "canonical_git_bytes_sha256": "e08aa7682e9c823f4f68e47c237e4ee88b2b8b78616abb94a38ecada3508e993", + "archive_bytes": 5280 + }, + { + "path": "resources/resource.h", + "bytes": 916, + "git_blob": "5ecd01e057f77f8bdcde5bcd5bac41ce58a8ea67", + "archive_conversion": "none", + "sha256": "58ff0eadb1c7e5c2a999f711ae95fbd765d6b0f718f48ab68558563ebf04f601", + "canonical_git_bytes_sha256": "58ff0eadb1c7e5c2a999f711ae95fbd765d6b0f718f48ab68558563ebf04f601", + "archive_bytes": 916 + }, + { + "path": "src/Args.c", + "bytes": 7737, + "git_blob": "a1555b49b86b850700dbc59246be2c8ffe724e3b", + "archive_conversion": "GitHub archive CRLF preserved; LF canonical bytes matched exact upstream Git blob during verification", + "sha256": "b2d944379bd3af7a289aa500150f0ce27e618eb378d3f3eecf384f8a32a7d441", + "canonical_git_bytes_sha256": "d2937a737e59355c374e294ba01ac4784f7e70033669102f307c466a69ce922a", + "archive_bytes": 7983 + }, + { + "path": "src/Args.h", + "bytes": 372, + "git_blob": "63ba2b4effce504060fd9e06098886aa95f2faa8", + "archive_conversion": "GitHub archive CRLF preserved; LF canonical bytes matched exact upstream Git blob during verification", + "sha256": "f3203671d93c1fc7aec4dab123b1a96f2de525071e5f8e3bff73e96a19b4353c", + "canonical_git_bytes_sha256": "9998d57f1ecde7ceb4ce648b985b7a751a53e9bbd54574e46d07fa5e5b5259ea", + "archive_bytes": 388 + }, + { + "path": "src/Encoding.h", + "bytes": 372, + "git_blob": "f1e987a6b8b20c64bca6ae645f1c87a9aaaeed46", + "archive_conversion": "GitHub archive CRLF preserved; LF canonical bytes matched exact upstream Git blob during verification", + "sha256": "95e600fd81ce3830eaada2edaa2e560b9e060751f0d6518ec816ea57e682a5b9", + "canonical_git_bytes_sha256": "1bc1da7c169c74ec8e98b64521fa6b9fcf972479e8a174aebe7e2d66dd177013", + "archive_bytes": 379 + }, + { + "path": "src/Errors.c", + "bytes": 3931, + "git_blob": "2cd9ffc6cdb976ee5e6a97598acfd23c2839af09", + "archive_conversion": "GitHub archive CRLF preserved; LF canonical bytes matched exact upstream Git blob during verification", + "sha256": "c8021ac52ed123e4ece667f97048b1ecadbad122b993c1e43327db985a21c463", + "canonical_git_bytes_sha256": "66e699615cf1d8339fcb1a746a3a36fe9c6c492debbe50544951c24feae28f4c", + "archive_bytes": 4130 + }, + { + "path": "src/Errors.h", + "bytes": 277, + "git_blob": "9c229c96884013a4a9498f5019db338425d7a966", + "archive_conversion": "GitHub archive CRLF preserved; LF canonical bytes matched exact upstream Git blob during verification", + "sha256": "ec57545ed3bddf7710f23b8e14a21a0d5dda5f94613bf388b502fdd13932a34e", + "canonical_git_bytes_sha256": "9ba27703e81726fdb3247467d892c17d3a4dfb9c39dde5f975be19d1afe1e744", + "archive_bytes": 290 + }, + { + "path": "src/ProcessWrapper.c", + "bytes": 24578, + "git_blob": "c74f5d7d03c8a8705c0edde40c606f24d8cf66dc", + "archive_conversion": "GitHub archive CRLF preserved; LF canonical bytes matched exact upstream Git blob during verification", + "sha256": "f93286e07aea62ffa1d7ba20839a3bdc21ede954c7f8a6096796d9fdb229a389", + "canonical_git_bytes_sha256": "62a8583ed212ede6ff4cfcb6485b10b818dd830b97c66624a191cc2e5a7d0b39", + "archive_bytes": 25368 + } + ], + "release_executables": [ + { + "path": "ProcessWrapper.exe", + "bytes": 78848, + "sha256": "5b6e66912c92e40ecfb6ac391a2595fa2a8d8e4f93a911c7ae0248aa14ec047d" + }, + { + "path": "ProcessWrapper64.exe", + "bytes": 83968, + "sha256": "1b7c6db9c3dae3073335433e1c3f913b80ac76109b869420e1332652b0c461a2" + } + ], + "limitations": [ + "Upstream history and exact binary hashes verified; no local reproducible build was performed.", + "Compiler, Windows SDK and OS libraries are external build/runtime prerequisites, not bundled application dependencies." + ], + "delivered_source_policy": "Preserve bytes from pinned GitHub source archive, including upstream-requested CRLF. Git blob verification also checked the canonical LF form where needed; no semantic source changes." + }, + "omitted_public_example_keys": [ + { + "file": "vendor/amphp/http-server/tools/tls/localhost.key.pem", + "sha256": "1e11dc00c61adae8180d95a8e1774d2910cab3459c4744b2f6567f061e094eb0", + "source": "https://github.com/amphp/http-server/tree/aa96ca38c5f822a827236543d5417d0c2a782ef0", + "reason": "Public upstream development TLS example private key; unused by the bot." + }, + { + "file": "vendor/amphp/http-server/tools/tls/localhost.pem", + "sha256": "7a2aa6d828415a02c060a2e9377e5402fa6039f4e3392d0c1a308221962b357d", + "source": "https://github.com/amphp/http-server/tree/aa96ca38c5f822a827236543d5417d0c2a782ef0", + "reason": "Public upstream development TLS example private key; unused by the bot." + } + ], + "excluded": [ + "Installed development-tool trees (26 locked packages, including PHPStan PHAR)", + "Composer-generated vendor/composer metadata, autoloaders and vendor/bin proxies", + "PHP, SQLite, optional FFmpeg/native codecs and operating-system / Docker-base-image source", + "Git metadata, live .env, credentials, sessions, databases, WAL/SHM, backups, logs, caches, coverage and prior archives" + ], + "installation": "Install exact composer.lock, apply and verify the two active local patches, then verify every runtime file and preferred-source input before packaging. No generated Composer autoload/bin metadata is included.", + "limits": [ + "Not the full source of a Linux container, external native multimedia libraries or optional development tools.", + "Retained upstream Windows helper binaries have associated preferred source included, but their rebuild is unverified.", + "MadelineProto and php-rtc-av metadata/license-header differences are documented without rewriting upstream grants. Retired local UpdateLoop, GeoPoint and formatted-date patches are absent; no claim that every official SDK shutdown behavior is resolved." + ], + "rtc_source_provenance": { + "package": "danog/php-rtc-av", + "version": "1.1.11", + "reference": "f328e6b5682d7e885dcfab425839921312162008", + "source_files": [ + { + "path": "additional-source/php-rtc-av/README.md", + "upstream_path": "README.md", + "reference": "f328e6b5682d7e885dcfab425839921312162008", + "url": "https://raw.githubusercontent.com/danog/php-rtc-av/f328e6b5682d7e885dcfab425839921312162008/README.md", + "git_blob": "60ca064c9bf88e35d01177160f582bd37cd915fa", + "sha256": "811f02bddfc3c0fb6954f0f418d58215e78219c5f479cac60fbe2fbc398e9ae4", + "bytes": 1869 + } + ], + "findings": [ + "Composer metadata declares MIT while the retained LICENSE, PHP headers and pinned README state BSD-3-Clause. Preserve all original texts without silently reconciling the metadata.", + "All eight checked-in C declaration headers are included verbatim. No separate header generator or extraction recipe exists in the complete pinned AV tree; whether these are directly maintained preferred source or derived output is unestablished. No specific FFmpeg source revision is asserted as their origin.", + "No FFmpeg, libopus or libvpx native binary is distributed in these RTC packages. The optional FFmpeg downloader was not executed; its PHP-WebRTC/ffmpeg-builder v9.0.1 public repository/tag/release returned 404 during review. External native binary/build scope is not claimed." ] + } } diff --git a/scripts/apply-patches.php b/scripts/apply-patches.php index cfef89f..1e3f56d 100644 --- a/scripts/apply-patches.php +++ b/scripts/apply-patches.php @@ -5,7 +5,6 @@ // SPDX-License-Identifier: AGPL-3.0-only require_once dirname(__DIR__) . '/src/Runtime/RuntimePaths.php'; require_once dirname(__DIR__) . '/src/Runtime/SingleInstance.php'; -require_once dirname(__DIR__) . '/src/Runtime/AddedFilePatchManager.php'; require_once dirname(__DIR__) . '/src/Runtime/PatchManager.php'; require_once dirname(__DIR__) . '/src/Runtime/PatchSet.php'; diff --git a/scripts/dependencies.php b/scripts/dependencies.php index e0766fe..acd8ef5 100644 --- a/scripts/dependencies.php +++ b/scripts/dependencies.php @@ -54,7 +54,7 @@ ]; } $report['local_patches'] = []; -foreach (['madelineproto', 'madelineproto-geopoint', 'madelineproto-formatted-date', 'madelineproto-fresh-peer', 'broadcastmanager'] as $library) { +foreach (['madelineproto-fresh-peer', 'broadcastmanager'] as $library) { $relative = 'patches/' . $library . '/manifest.json'; if (!is_file($root . '/' . $relative)) { throw new RuntimeException('Missing required local patch manifest: ' . $relative); @@ -105,6 +105,9 @@ if (!$verified) { $findings[] = 'NOT VERIFIED: declared SPDX not confirmed against a distributed root license text; release review required.'; } + if ($name === 'danog/php-rtc-av') { + $findings[] = 'Metadata declares MIT, but distributed LICENSE and PHP source headers state BSD-3-Clause. Preserve both upstream texts; the MIT declaration is not confirmed by the distributed license.'; + } if ($name === 'danog/madelineproto') { $findings[] = 'Metadata says AGPL-3.0-only; source headers grant version 3 or later. Preserve upstream grant and report mismatch; application license remains AGPL-3.0-only.'; } diff --git a/scripts/package-development.php b/scripts/package-development.php index 5d2c73f..e5687ed 100644 --- a/scripts/package-development.php +++ b/scripts/package-development.php @@ -82,7 +82,7 @@ foreach ($sourceFiles as $path => $absolute) { $hashes[$path] = hash_file('sha256', $absolute); } -$manifest = ['version' => $version, 'commit' => Shabbat\Runtime\Version::commit($root), 'application_source_sha256' => hash('sha256', json_encode(array_intersect_key($hashes, $files), JSON_THROW_ON_ERROR)), 'review_status' => 'local development bundle, not the scoped corresponding-source release offer', 'source_files' => $hashes, 'omitted_public_example_keys' => $omissionEvidence, 'excludes' => ['production data', 'secrets', 'sessions', '.git'], 'patches' => ['madelineproto' => json_decode((string) file_get_contents($root . '/patches/madelineproto/manifest.json'), true, flags: JSON_THROW_ON_ERROR), 'madelineproto-geopoint' => json_decode((string) file_get_contents($root . '/patches/madelineproto-geopoint/manifest.json'), true, flags: JSON_THROW_ON_ERROR), 'madelineproto-formatted-date' => json_decode((string) file_get_contents($root . '/patches/madelineproto-formatted-date/manifest.json'), true, flags: JSON_THROW_ON_ERROR), 'madelineproto-fresh-peer' => json_decode((string) file_get_contents($root . '/patches/madelineproto-fresh-peer/manifest.json'), true, flags: JSON_THROW_ON_ERROR), 'broadcastmanager' => json_decode((string) file_get_contents($root . '/patches/broadcastmanager/manifest.json'), true, flags: JSON_THROW_ON_ERROR)]]; +$manifest = ['version' => $version, 'commit' => Shabbat\Runtime\Version::commit($root), 'application_source_sha256' => hash('sha256', json_encode(array_intersect_key($hashes, $files), JSON_THROW_ON_ERROR)), 'review_status' => 'local development bundle, not the scoped corresponding-source release offer', 'source_files' => $hashes, 'omitted_public_example_keys' => $omissionEvidence, 'excludes' => ['production data', 'secrets', 'sessions', '.git'], 'patches' => ['madelineproto-fresh-peer' => json_decode((string) file_get_contents($root . '/patches/madelineproto-fresh-peer/manifest.json'), true, flags: JSON_THROW_ON_ERROR), 'broadcastmanager' => json_decode((string) file_get_contents($root . '/patches/broadcastmanager/manifest.json'), true, flags: JSON_THROW_ON_ERROR)]]; if (!is_dir($root . '/dist/development')) { mkdir($root . '/dist/development', 0700, true); } diff --git a/src/Content/DateEntity.php b/src/Content/DateEntity.php new file mode 100644 index 0000000..d80d64b --- /dev/null +++ b/src/Content/DateEntity.php @@ -0,0 +1,44 @@ + 2147483647) { + throw new \InvalidArgumentException('Invalid date entity integer: ' . $field); + } + } + if ($type === 'messageEntityFormattedDate') { + foreach (['relative', 'short_time', 'long_time', 'short_date', 'long_date', 'day_of_week'] as $flag) { + if (array_key_exists($flag, $entity) && !is_bool($entity[$flag])) { + throw new \InvalidArgumentException('Invalid date entity flag: ' . $flag); + } + } + // Official semantics: relative takes precedence; otherwise long formats win. + return $entity; + } + if (array_key_exists('date_time_format', $entity) && !is_string($entity['date_time_format'])) { + throw new \InvalidArgumentException('Invalid date entity format.'); + } + try { + return MessageEntity::fromRawEntity($entity)->toMTProto(); + } catch (\AssertionError $error) { + throw new \InvalidArgumentException('Invalid date entity format.', previous: $error); + } + } +} diff --git a/src/Content/TemplateEditor.php b/src/Content/TemplateEditor.php index f1c3c14..d4a26ac 100644 --- a/src/Content/TemplateEditor.php +++ b/src/Content/TemplateEditor.php @@ -292,7 +292,7 @@ public function message(array $message): bool $current['buttons_mode'] = 'custom'; } elseif ($m[1] === 'buttons') { try { - $current['buttons'] = json_decode($m[3], true, 32, JSON_THROW_ON_ERROR); + $current['buttons'] = \Shabbat\Storage\TemplateRepository::buttonRows(json_decode($m[3], true, 32, JSON_THROW_ON_ERROR)); } catch (\JsonException) { $current['buttons'] = $this->app->parseCustomButtons($m[3]); } diff --git a/src/Content/TemplateRenderer.php b/src/Content/TemplateRenderer.php index 77df020..8e75d00 100644 --- a/src/Content/TemplateRenderer.php +++ b/src/Content/TemplateRenderer.php @@ -89,6 +89,7 @@ public function renderPayload(array $payload, array $values): array ) { throw new \InvalidArgumentException('Entity lies outside template text.'); } + $entity = DateEntity::normalize($entity); $start = self::mapPosition($entity['offset'], $replacements, false); $end = self::mapPosition($entity['offset'] + $entity['length'], $replacements, true); if ($end > $start) { @@ -164,39 +165,8 @@ public static function validateButtons(array $rows): void if (!array_is_list($rows) || count($rows) > 20) { throw new \InvalidArgumentException('Invalid keyboard rows.'); } - $total = 0; - foreach ($rows as $row) { - if (!is_array($row) || !array_is_list($row) || count($row) > 8) { - throw new \InvalidArgumentException('Invalid keyboard row.'); - } - foreach ($row as $button) { - if (++$total > 100 || !is_array($button) || !is_string($button['text'] ?? null) || trim($button['text']) === '' || mb_strlen($button['text']) > 128) { - throw new \InvalidArgumentException('Invalid button.'); - } - $actions = 0; - foreach (['url','callback_data','data','copy_text','switch_inline_query','switch_inline_query_current_chat','query'] as $action) { - if (array_key_exists($action, $button)) { - $actions++; - } - } - if ($actions !== 1) { - throw new \InvalidArgumentException('A button needs exactly one supported action.'); - } - if ( - isset($button['url']) && (!is_string($button['url']) || !in_array(parse_url($button['url'], PHP_URL_SCHEME), ['https','tg'], true) - || preg_match('/[\r\n\x00]/', $button['url'])) - ) { - throw new \InvalidArgumentException('Invalid button URL.'); - } - foreach (['callback_data','data'] as $field) { - if (isset($button[$field]) && (!is_string($button[$field]) || strlen($button[$field]) < 1 || strlen($button[$field]) > 64)) { - throw new \InvalidArgumentException('Callback must be 1..64 bytes.'); - } - } - if (isset($button['style'])) { - self::nativeStyle($button['style']); - } - } - } + // Validation uses the same action/context contract as the native transport. + // The caller retains its exact persisted representation and rich metadata. + \Shabbat\Telegram\KeyboardMarkup::normalize(['inline_keyboard' => $rows]); } } diff --git a/src/Runtime/AddedFilePatchManager.php b/src/Runtime/AddedFilePatchManager.php deleted file mode 100644 index cb747a8..0000000 --- a/src/Runtime/AddedFilePatchManager.php +++ /dev/null @@ -1,267 +0,0 @@ -prepare(); - $state = $this->state($prepared); - if ($state === 'patched') { - return 'already-patched'; - } - if (!$apply) { - throw new RuntimeException('Required library patch set is absent. Run php scripts/apply-patches.php before startup.'); - } - $writer = SingleInstance::acquire($this->writerLockPath); - try { - if ($this->state($prepared) !== 'pristine') { - throw new RuntimeException('Library patch set changed while acquiring the installer lock.'); - } - $this->install($prepared); - if ($this->state($prepared) !== 'patched') { - throw new RuntimeException('Installed library patch set failed final verification.'); - } - return 'patched'; - } finally { - $writer->release(); - } - } - - private function prepare(): array - { - if (!is_array($this->entry['added_files']) || $this->entry['added_files'] === []) { - throw new RuntimeException('An added-file patch must declare its complete reviewed file set.'); - } - foreach ($this->entry['license_files'] ?? [] as $license) { - $this->artifact($license['file'], $license['sha256']); - } - $baseline = $this->artifact($this->entry['baseline'], $this->entry['original_sha256']); - $patch = $this->artifact($this->entry['patch'], $this->entry['patch_sha256']); - $sections = self::sections($patch); - if (!isset($sections[$this->target]) || $sections[$this->target]['old'] !== $this->target) { - throw new RuntimeException('Existing-file diff header differs from the approved target.'); - } - $prepared = [$this->target => ['original' => $baseline, - 'output' => PatchManager::applyDiff($baseline, $sections[$this->target]['diff'])]]; - self::output($prepared[$this->target]['output'], $this->entry['patched_sha256']); - if ( - isset($this->entry['reviewed_output']) - && $prepared[$this->target]['output'] !== $this->artifact($this->entry['reviewed_output'], $this->entry['patched_sha256']) - ) { - throw new RuntimeException('Existing-file diff differs from its reviewed output.'); - } - foreach ($this->entry['added_files'] as $file) { - if (($file['original_state'] ?? '') !== 'absent') { - throw new RuntimeException('Unreviewed original added-file state.'); - } - $target = self::relative($file['target']); - if (isset($prepared[$target]) || !isset($sections[$target]) || $sections[$target]['old'] !== null) { - throw new RuntimeException('Added-file diff header is missing, duplicated or not an addition.'); - } - $output = PatchManager::applyDiff('', $sections[$target]['diff']); - self::output($output, $file['patched_sha256']); - if ($output !== $this->artifact($file['reviewed_output'], $file['patched_sha256'])) { - throw new RuntimeException('Added-file diff differs from its reviewed output.'); - } - $prepared[$target] = ['original' => null, 'output' => $output]; - } - $actual = array_keys($sections); - $expected = array_keys($prepared); - sort($actual); - sort($expected); - if ($actual !== $expected) { - throw new RuntimeException('Unified diff contains an undeclared library target.'); - } - $this->prerequisites(); - return $prepared; - } - - private function prerequisites(): void - { - if (!isset($this->entry['prerequisites']) || !is_array($this->entry['prerequisites']) || $this->entry['prerequisites'] === []) { - throw new RuntimeException('Added-file patch requires exact reviewed source/schema prerequisites.'); - } - foreach ($this->entry['prerequisites'] as $prerequisite) { - if (isset($prerequisite['baseline'])) { - $this->artifact($prerequisite['baseline'], $prerequisite['sha256']); - } - $path = $this->path(self::relative($prerequisite['target'])); - if (!is_file($path) || !hash_equals($prerequisite['sha256'], hash('sha256', self::read($path)))) { - throw new RuntimeException('Library schema/source prerequisite differs from the approved source.'); - } - } - } - - private function state(array $prepared): string - { - $this->prerequisites(); - $states = []; - foreach ($prepared as $target => $file) { - $path = $this->path($target); - if (!file_exists($path)) { - if ($file['original'] !== null) { - throw new RuntimeException('Approved original library file is absent.'); - } - $states[] = 'pristine'; - continue; - } - if (!is_file($path)) { - throw new RuntimeException('Library target is not a regular source file.'); - } - $contents = self::read($path); - if ($contents === $file['output']) { - $states[] = 'patched'; - } elseif ($file['original'] !== null && $contents === $file['original']) { - $states[] = 'pristine'; - } else { - throw new RuntimeException('Unknown or modified library patch-set source; refusing to continue.'); - } - } - if (count(array_unique($states)) !== 1) { - throw new RuntimeException('Partial library patch set; refusing repair or silent continuation.'); - } - return $states[0]; - } - - private function install(array $prepared): void - { - $temporary = []; - try { - foreach ($prepared as $target => $file) { - $path = $this->path($target); - $temp = $path . '.shabbat-' . bin2hex(random_bytes(6)) . '.tmp'; - $temporary[$target] = $temp; - if (file_put_contents($temp, $file['output'], LOCK_EX) !== strlen($file['output'])) { - throw new RuntimeException('Unable to stage a complete library patch-set file.'); - } - } - // Install additions before dispatch. A crash leaves a detectable partial set. - foreach ($prepared as $target => $file) { - if ($file['original'] !== null) { - continue; - } - $path = $this->path($target); - if (!@link($temporary[$target], $path)) { - throw new RuntimeException('Unable to exclusively install the reviewed added library file.'); - } - unlink($temporary[$target]); - unset($temporary[$target]); - } - $path = $this->path($this->target); - if (!rename($temporary[$this->target], $path)) { - throw new RuntimeException('Unable to atomically install reviewed library dispatch.'); - } - unset($temporary[$this->target]); - } finally { - foreach ($temporary as $temp) { - if (is_file($temp)) { - unlink($temp); - } - } - } - } - - private function path(string $relative): string - { - $relative = self::relative($relative); - $path = $this->packageRoot . '/' . $relative; - $root = realpath($this->packageRoot); - $parent = realpath(dirname($path)); - if ( - $root === false || $parent === false || is_link($this->packageRoot) || is_link($path) - || ($parent !== $root && !str_starts_with($parent, $root . DIRECTORY_SEPARATOR)) - ) { - throw new RuntimeException('Library patch-set target escaped its regular package directory.'); - } - return $path; - } - - private function artifact(string $relative, string $sha256): string - { - $path = $this->patchDirectory . '/' . self::relative($relative); - if (is_link($path)) { - throw new RuntimeException('Reviewed patch artifacts must be regular contained files.'); - } - $contents = self::read($path); - if (!hash_equals($sha256, hash('sha256', $contents))) { - throw new RuntimeException('Reviewed patch artifact or baseline hash mismatch.'); - } - return $contents; - } - - private static function output(string $contents, string $sha256): void - { - if (!hash_equals($sha256, hash('sha256', $contents))) { - throw new RuntimeException('Unified diff output differs from its approved SHA256.'); - } - $tokens = token_get_all($contents, TOKEN_PARSE); - if ($tokens === [] || !is_array($tokens[0]) || $tokens[0][0] !== T_OPEN_TAG) { - throw new RuntimeException('Patch-set output must be a complete PHP source file.'); - } - } - - private static function sections(string $patch): array - { - $lines = explode("\n", $patch); - $starts = []; - foreach ($lines as $index => $line) { - if (str_starts_with($line, '--- ')) { - $starts[] = $index; - } - } - $sections = []; - foreach ($starts as $position => $start) { - $old = substr($lines[$start], 4); - $new = $lines[$start + 1] ?? ''; - if (!str_starts_with($new, '+++ b/') || ($old !== '/dev/null' && !str_starts_with($old, 'a/'))) { - throw new RuntimeException('Invalid reviewed unified-diff file headers.'); - } - $target = self::relative(substr($new, 6)); - $oldTarget = $old === '/dev/null' ? null : self::relative(substr($old, 2)); - if (($oldTarget !== null && $oldTarget !== $target) || isset($sections[$target])) { - throw new RuntimeException('Renamed or duplicate patch-set target.'); - } - $end = $starts[$position + 1] ?? count($lines); - $sections[$target] = ['old' => $oldTarget, 'diff' => implode("\n", array_slice($lines, $start, $end - $start))]; - } - return $sections; - } - - private static function relative(string $path): string - { - if ( - $path === '' || str_contains($path, "\0") || str_contains($path, '\\') || str_contains($path, ':') - || str_starts_with($path, '/') || str_contains($path, '//') || preg_match('~(?:^|/)\.\.?(?:/|$)~', $path) - ) { - throw new RuntimeException('Patch-set paths must be contained relative paths.'); - } - return $path; - } - - private static function read(string $path): string - { - $contents = is_file($path) ? file_get_contents($path) : false; - if ($contents === false) { - throw new RuntimeException('Missing or unreadable patch-set prerequisite: ' . $path); - } - return $contents; - } -} diff --git a/src/Runtime/Application.php b/src/Runtime/Application.php index ce23cc4..114f34e 100644 --- a/src/Runtime/Application.php +++ b/src/Runtime/Application.php @@ -119,7 +119,8 @@ public function parseCustomButtons(string $input): array } elseif (isset($button['copy_text'])) { $normalized['copy_text'] = $button['copy_text']; } else { - throw new \InvalidArgumentException('Unsupported custom button.'); + // Current typed and other recognized native actions retain all fields. + $normalized = $button; } if (isset($button['style'])) { $normalized['style'] = $button['style']; diff --git a/src/Runtime/MadelineGateway.php b/src/Runtime/MadelineGateway.php index c7b7b91..dbabe6d 100644 --- a/src/Runtime/MadelineGateway.php +++ b/src/Runtime/MadelineGateway.php @@ -31,6 +31,7 @@ private function call(string $method, array $parameters, ?callable $dispatchGuar if (Runner::isStopping() && in_array($method, ['messages.sendMessage','messages.sendMedia','messages.sendMultiMedia','messages.editMessage','messages.setInlineBotResults'], true)) { throw new CancelledException(new \RuntimeException('Shutdown has stopped new Telegram message operations.')); } + $parameters = \Shabbat\Telegram\KeyboardMarkup::parameters($parameters, $this->customEmojiEnabled); $plainParameters = self::stripPresentationMetadata(self::plainEmojiParameters($parameters)); $parameters = self::stripPresentationMetadata($parameters); try { @@ -358,83 +359,9 @@ private function sendPrepared(string $peer, array $payload, string $randomId, ?c public static function normalizeMarkup(array $markup, bool $customEmojiEnabled = true): array { - if ($markup === []) { - return []; - } - if (($markup['_'] ?? '') === 'replyInlineMarkup') { - foreach ($markup['rows'] ?? [] as $rowIndex => $row) { - foreach ($row['buttons'] ?? [] as $buttonIndex => $button) { - $button = Presentation::button($button, $customEmojiEnabled, null, true); - $markup['rows'][$rowIndex]['buttons'][$buttonIndex] = $button; - if (isset($button['style'])) { - $markup['rows'][$rowIndex]['buttons'][$buttonIndex]['style'] = self::normalizeStyle($button['style']); - } - } - } - return $markup; - } - if (!isset($markup['inline_keyboard']) || !is_array($markup['inline_keyboard'])) { - throw new \InvalidArgumentException('Unsupported message keyboard.'); - } - $rows = []; - foreach ($markup['inline_keyboard'] as $row) { - if (!is_array($row)) { - throw new \InvalidArgumentException('Invalid keyboard row.'); - } - $buttons = []; - foreach ($row as $button) { - if (!is_array($button) || !is_string($button['text'] ?? null) || $button['text'] === '') { - throw new \InvalidArgumentException('Keyboard button needs text.'); - } - $button = Presentation::button($button, $customEmojiEnabled, null, true); - $native = $button; // Preserve existing button metadata/style. - if (isset($button['style'])) { - $native['style'] = self::normalizeStyle($button['style']); - } - if (isset($button['callback_data'])) { - if (!is_string($button['callback_data']) || strlen($button['callback_data']) > 64) { - throw new \InvalidArgumentException('Invalid callback data.'); - } - $native['_'] = 'keyboardButtonCallback'; - $native['data'] = $button['callback_data']; - unset($native['callback_data']); - } elseif (isset($button['url'])) { - if (!is_string($button['url']) || !preg_match('~^(?:https://|tg://)~i', $button['url'])) { - throw new \InvalidArgumentException('Button URL must use HTTPS or Telegram.'); - } - $native['_'] = 'keyboardButtonUrl'; - } elseif (isset($button['switch_inline_query_current_chat']) || isset($button['switch_inline_query'])) { - $native['_'] = 'keyboardButtonSwitchInline'; - $native['same_peer'] = isset($button['switch_inline_query_current_chat']); - $native['query'] = $button['switch_inline_query_current_chat'] ?? $button['switch_inline_query']; - unset($native['switch_inline_query_current_chat'], $native['switch_inline_query']); - } elseif (isset($button['copy_text'])) { - $copy = is_array($button['copy_text']) ? ($button['copy_text']['text'] ?? null) : $button['copy_text']; - if (!is_string($copy) || $copy === '' || mb_strlen($copy) > 256) { - throw new \InvalidArgumentException('Invalid copy-text button.'); - } - $native['_'] = 'keyboardButtonCopy'; - $native['copy_text'] = $copy; - } elseif (!str_starts_with((string) ($button['_'] ?? ''), 'keyboardButton')) { - throw new \InvalidArgumentException('Unsupported keyboard button action.'); - } - $buttons[] = $native; - } - $rows[] = ['_' => 'keyboardButtonRow', 'buttons' => $buttons]; - } - return ['_' => 'replyInlineMarkup', 'rows' => $rows]; - } - - private static function normalizeStyle(mixed $style): array - { - $native = \Shabbat\Content\TemplateRenderer::nativeStyle($style); - if (isset($native['icon'])) { - $native['icon'] = TelegramInt64::fromDecimal($native['icon']); - } - return $native; + return \Shabbat\Telegram\KeyboardMarkup::normalize($markup, $customEmojiEnabled); } - /** Acknowledged identity binds all subsequent diagnostic input to this exact panel. */ public function sendDiagnosticPanel(string $user, string $text, array $markup): int { if (!preg_match('/^[1-9][0-9]{0,19}$/D', $user)) { diff --git a/src/Runtime/PatchManager.php b/src/Runtime/PatchManager.php index 3acb5f5..28002f6 100644 --- a/src/Runtime/PatchManager.php +++ b/src/Runtime/PatchManager.php @@ -22,14 +22,14 @@ final class PatchManager public function __construct(private string $root, private ?string $vendor = null, ?string $manifestFile = null, private ?string $writerLockPath = null) { $this->vendor ??= $root . '/vendor'; - $manifestFile ??= $root . '/patches/madelineproto/manifest.json'; + $manifestFile ??= $root . '/patches/madelineproto-fresh-peer/manifest.json'; $this->patchDirectory = dirname($manifestFile); $this->manifest = json_decode(self::read($manifestFile), true, flags: JSON_THROW_ON_ERROR); $this->packageName = $this->manifest['package'] ?? 'danog/madelineproto'; if (!preg_match('~^[a-z0-9_.-]+/[a-z0-9_.-]+$~D', $this->packageName)) { throw new RuntimeException('Invalid patch package identity.'); } - $this->target = self::relativePath($this->manifest['target'] ?? 'src/Loop/Update/UpdateLoop.php'); + $this->target = self::relativePath($this->manifest['target'] ?? 'src/MTProtoTools/PeerHandler.php'); } public function process(bool $apply): string @@ -58,16 +58,7 @@ public function process(bool $apply): string throw new RuntimeException('Unapproved ' . $this->packageName . ' version/commit: ' . $version . ' ' . $reference); } if (array_key_exists('added_files', $entry)) { - if ($entry['mode'] !== 'patch') { - throw new RuntimeException('Added-file review schema requires patch mode and complete file verification.'); - } - return (new AddedFilePatchManager( - $this->vendor . '/' . $this->packageName, - $this->target, - $this->patchDirectory, - $entry, - $this->writerLockPath ?? $this->defaultWriterLockPath() - ))->process($apply); + throw new RuntimeException('Obsolete added-file patch schema is not supported.'); } $path = $this->vendor . '/' . $this->packageName . '/' . $this->target; if (is_link($path)) { diff --git a/src/Runtime/PatchSet.php b/src/Runtime/PatchSet.php index 9997646..2f8c5e6 100644 --- a/src/Runtime/PatchSet.php +++ b/src/Runtime/PatchSet.php @@ -8,7 +8,7 @@ final class PatchSet { - private const LIBRARIES = ['madelineproto', 'madelineproto-geopoint', 'madelineproto-formatted-date', 'madelineproto-fresh-peer', 'broadcastmanager']; + private const LIBRARIES = ['madelineproto-fresh-peer', 'broadcastmanager']; /** @return array */ public static function process(string $root, bool $apply, ?string $vendor = null): array diff --git a/src/Runtime/ReleaseInputs.php b/src/Runtime/ReleaseInputs.php index f69d5c1..2de9674 100644 --- a/src/Runtime/ReleaseInputs.php +++ b/src/Runtime/ReleaseInputs.php @@ -13,7 +13,7 @@ final class ReleaseInputs { - public const REQUIRED = ['bot.php', 'bin/runtime-permissions.php', 'bin/check-calendar.php', 'resources/php/99-shabbat-runtime.ini', 'composer.json', 'composer.lock', 'LICENSE', 'VERSION', 'docs/RELEASE_NOTES.md', 'LICENSES/CC-BY-4.0.txt', 'LICENSES/CC-BY-SA-4.0.txt', 'resources/templates/omer-counts.json', 'resources/templates/omer-counts-localized.json', 'resources/templates/omer-liturgy.json', 'migrations/001_initial.sql', 'migrations/002_admin_state.sql', 'migrations/003_manual_payments.sql', 'migrations/004_expand_languages.sql', 'migrations/005_known_broadcast_peers.sql', 'migrations/006_permission_retry.sql', 'migrations/007_delivery_deferrals.sql', 'migrations/008_group_moderation.sql', 'migrations/009_admin_roles_links.sql', 'migrations/010_subscriber_directory.sql', 'migrations/011_custom_star_amounts.sql', 'migrations/012_tefillin_acknowledgements.sql', 'src/Scheduling/TefillinAcknowledgements.php', 'src/Content/GroupMessageButtons.php', 'src/UI/Presentation.php', 'docs/ADMIN_PANEL.md', 'docs/DEV5_TEST_FEEDBACK.md', 'docs/DEV6_TEST_FEEDBACK.md', 'docs/PERMISSION_RECOVERY.md', 'docs/DIAGNOSTICS.md', 'migrations/013_permission_recovery.sql', 'migrations/014_diagnostic_panels.sql', 'src/Scheduling/PermissionRecovery.php', 'src/UI/PermissionRecoveryController.php', 'src/UI/DiagnosticsController.php', 'src/UI/DiagnosticsGateway.php', 'src/Runtime/DiagnosticReport.php', 'src/Storage/DiagnosticsRepository.php', 'docs/CALENDAR_PRESENTATION.md', 'src/UI/StatisticsController.php', 'src/Runtime/RuntimeClientPool.php', 'docs/TEFILLIN_ACKNOWLEDGEMENTS.md', 'docs/SERVER_TEST_DEPLOYMENT.md', 'resources/locales/he.json', 'resources/locales/en.json', 'resources/locales/ru.json', 'resources/locales/fr.json', 'resources/locales/es.json', 'resources/locales/pt-br.json', 'patches/madelineproto/manifest.json', 'patches/madelineproto-geopoint/manifest.json', 'patches/madelineproto-formatted-date/manifest.json', 'docs/MADELINE_FORMATTED_DATE.md', 'patches/broadcastmanager/manifest.json', 'patches/madelineproto-fresh-peer/manifest.json', 'migrations/015_permission_snapshot_provenance.sql', 'src/Scheduling/PermissionRecoveryProvenance.php', 'docs/DEV8_PERMISSIONS.md', 'migrations/016_delivery_safety.sql', 'src/Scheduling/DeliverySafety.php', 'src/Scheduling/QuietHours.php', 'src/Http/ProviderCircuitClient.php', 'src/Telegram/GuardedTelegramGateway.php', 'docs/DEV9_DELIVERY_SAFETY.md', '.github/workflows/ci.yml']; + public const REQUIRED = ['bot.php', 'bin/runtime-permissions.php', 'bin/check-calendar.php', 'resources/php/99-shabbat-runtime.ini', 'composer.json', 'composer.lock', 'LICENSE', 'VERSION', 'docs/RELEASE_NOTES.md', 'LICENSES/CC-BY-4.0.txt', 'LICENSES/CC-BY-SA-4.0.txt', 'resources/templates/omer-counts.json', 'resources/templates/omer-counts-localized.json', 'resources/templates/omer-liturgy.json', 'migrations/001_initial.sql', 'migrations/002_admin_state.sql', 'migrations/003_manual_payments.sql', 'migrations/004_expand_languages.sql', 'migrations/005_known_broadcast_peers.sql', 'migrations/006_permission_retry.sql', 'migrations/007_delivery_deferrals.sql', 'migrations/008_group_moderation.sql', 'migrations/009_admin_roles_links.sql', 'migrations/010_subscriber_directory.sql', 'migrations/011_custom_star_amounts.sql', 'migrations/012_tefillin_acknowledgements.sql', 'src/Scheduling/TefillinAcknowledgements.php', 'src/Content/GroupMessageButtons.php', 'src/UI/Presentation.php', 'docs/ADMIN_PANEL.md', 'docs/PERMISSION_RECOVERY.md', 'docs/DIAGNOSTICS.md', 'migrations/013_permission_recovery.sql', 'migrations/014_diagnostic_panels.sql', 'src/Scheduling/PermissionRecovery.php', 'src/UI/PermissionRecoveryController.php', 'src/UI/DiagnosticsController.php', 'src/UI/DiagnosticsGateway.php', 'src/Runtime/DiagnosticReport.php', 'src/Storage/DiagnosticsRepository.php', 'docs/CALENDAR_PRESENTATION.md', 'src/UI/StatisticsController.php', 'src/Runtime/RuntimeClientPool.php', 'docs/TEFILLIN_ACKNOWLEDGEMENTS.md', 'docs/SERVER_TEST_DEPLOYMENT.md', 'resources/locales/he.json', 'resources/locales/en.json', 'resources/locales/ru.json', 'resources/locales/fr.json', 'resources/locales/es.json', 'resources/locales/pt-br.json', 'patches/broadcastmanager/manifest.json', 'patches/madelineproto-fresh-peer/manifest.json', 'migrations/015_permission_snapshot_provenance.sql', 'src/Scheduling/PermissionRecoveryProvenance.php', 'migrations/016_delivery_safety.sql', 'src/Scheduling/DeliverySafety.php', 'src/Scheduling/QuietHours.php', 'src/Http/ProviderCircuitClient.php', 'src/Telegram/GuardedTelegramGateway.php', 'docs/DELIVERY_SAFETY.md', '.github/workflows/ci.yml']; public static function application(string $root): array { diff --git a/src/Runtime/Runner.php b/src/Runtime/Runner.php index c3b4daa..f20c964 100644 --- a/src/Runtime/Runner.php +++ b/src/Runtime/Runner.php @@ -229,7 +229,7 @@ public static function run(string $handlerClass, ?string $root = null): int self::$handler = null; self::$quiesce = null; try { - // Public @internal SDK method: pinned 8.7.0 contract is tested. + // Public @internal SDK method: locked 8.11.10 contract is tested. self::finalizeSession($lock, \danog\MadelineProto\API::finalize(...)); } catch (\Throwable $error) { fwrite(STDERR, 'Session finalization failed: ' . get_class($error) . "\n"); diff --git a/src/Scheduling/Permissions.php b/src/Scheduling/Permissions.php index 5c5c942..72d7fe5 100644 --- a/src/Scheduling/Permissions.php +++ b/src/Scheduling/Permissions.php @@ -9,12 +9,13 @@ final class Permissions { /** All boolean fields of chatBannedRights in the locked Telegram layer. */ public const FLAGS = ['view_messages','send_messages','send_media','send_stickers','send_gifs','send_games','send_inline','embed_links','send_polls', - 'change_info','invite_users','pin_messages','manage_topics','send_photos','send_videos','send_roundvideos','send_audios','send_voices','send_docs','send_plain','edit_rank','send_reactions']; + 'change_info','invite_users','pin_messages','manage_topics','send_photos','send_videos','send_roundvideos','send_audios','send_voices','send_docs','send_plain','edit_rank','send_reactions','manage_linked_peers']; public const DEFAULT_BLOCK_FLAGS = ['send_messages','send_media','send_stickers','send_gifs','send_games','send_inline','embed_links','send_polls', 'change_info','invite_users','pin_messages','manage_topics','send_photos','send_videos','send_roundvideos','send_audios','send_voices','send_docs','send_plain','edit_rank','send_reactions']; public const BLOCK = self::DEFAULT_BLOCK_FLAGS; /** Telegram rejects view_messages for global default permissions. */ - public const BLOCK_FLAGS = self::DEFAULT_BLOCK_FLAGS; + // New layer capabilities are opt-in; existing/default masks retain their exact meaning. + public const BLOCK_FLAGS = [...self::DEFAULT_BLOCK_FLAGS, 'manage_linked_peers']; /** Legacy aggregate bits are redundant only when every granular bit is explicit. */ private const MEDIA_FLAGS = ['send_photos','send_videos','send_roundvideos','send_audios','send_voices','send_docs']; private const MESSAGE_FLAGS = [...self::MEDIA_FLAGS,'send_plain','send_stickers','send_gifs','send_games','send_inline','embed_links','send_polls']; diff --git a/src/Storage/LegacyImporter.php b/src/Storage/LegacyImporter.php index a40b22a..6466f08 100644 --- a/src/Storage/LegacyImporter.php +++ b/src/Storage/LegacyImporter.php @@ -11,6 +11,11 @@ final class LegacyImporter { private readonly SettingsRepository $settings; + private array $fileExists = []; + private array $fileContents = []; + private array $directoryEntries = []; + private array $verificationTargets = []; + private string $sourceBase = ''; public function __construct(private readonly Database $db, private readonly Clock $clock) { $this->settings = new SettingsRepository($db, $clock); @@ -18,7 +23,8 @@ public function __construct(private readonly Database $db, private readonly Cloc /** Startup bridge: only add missing list members; never rewrite preferences or migrate schema. */ public function importGroupListAutomatically(string $legacyRoot): array { - [$data] = $this->paths($legacyRoot); + $this->resetReadState(); + [$data,$this->sourceBase] = $this->paths($legacyRoot); $report = ['added' => [],'existing' => [],'warnings' => []]; foreach ($this->groupIds($data, $report['warnings']) as $id) { if ($this->settings->getGroup($id) !== null) { @@ -32,16 +38,60 @@ public function importGroupListAutomatically(string $legacyRoot): array return $report; } /** Reads only whitelisted legacy names. Does not delete legacy data or invoke Telegram. */ - public function run(string $legacyRoot, bool $dryRun = true): array + public function run(string $legacyRoot, bool $dryRun = true, ?array $expectedReport = null): array + { + $this->resetReadState(); + [, $this->sourceBase] = $this->paths($legacyRoot); + // Complete every normalization and source read before the first application write. + $report = $this->import($legacyRoot, true); + $report['report_version'] = 1; + $report['source_sha256'] = $this->sourceFingerprint(); + $report['destination_sha256'] = $this->destinationFingerprint(); + $report['plan_sha256'] = hash('sha256', Database::encode($report)); + if ($expectedReport !== null) { + foreach (['source_sha256','destination_sha256','plan_sha256'] as $key) { + if ( + ($expectedReport['report_version'] ?? null) !== 1 || ($expectedReport['dry_run'] ?? null) !== true + || !is_string($expectedReport[$key] ?? null) || !hash_equals($report[$key], $expectedReport[$key]) + ) { + throw new \RuntimeException('Reviewed legacy report no longer matches source or destination; run and review --dry-run again.'); + } + } + } + if ($dryRun) { + $report['verification'] = ['status' => 'not_applied','checked_records' => 0]; + return $report; + } + // Reuse the reviewed in-memory source snapshot. No Telegram work or source writes occur. + $this->import($legacyRoot, false); + $report['dry_run'] = false; + $report['verification'] = $this->verifyTargets(); + return $report; + } + private function import(string $legacyRoot, bool $dryRun): array { [$data,$base] = $this->paths($legacyRoot); $report = ['dry_run' => $dryRun,'groups' => [],'users' => [],'templates' => [],'recovery' => [],'warnings' => [], - 'admin_state' => [],'known_peers' => [],'counts' => ['groups' => 0,'users' => 0,'templates' => 0,'snapshots' => 0,'admin_state' => 0,'known_peers' => 0]]; - $groups = $this->groupIds($data, $report['warnings']); + 'admin_state' => [],'known_peers' => [],'duplicates' => [],'orphan_group_directories' => [], + 'counts' => ['groups' => 0,'users' => 0,'templates' => 0,'snapshots' => 0,'admin_state' => 0,'known_peers' => 0]]; + $groups = $this->groupIds($data, $report['warnings'], $report['duplicates']); + $report['group_list_present'] = $this->hasFile($data . '/DBgroups.txt'); + if (!$report['group_list_present']) { + $report['warnings'][] = 'DBgroups.txt is missing; no group subscriptions will be inferred from directories.'; + } + foreach ($this->directories($data) as $dir) { + $id = basename($dir); + if (str_starts_with($id, '-') && $this->validPeerId($id) && !in_array($id, $groups, true)) { + $report['orphan_group_directories'][] = $id; + } + } + if ($report['orphan_group_directories'] !== []) { + $report['warnings'][] = 'Group directories absent from DBgroups.txt are retained for review and are not subscribed automatically.'; + } $globalStates = []; foreach (['state_open.txt','close_lock.txt','open_lock.txt','alert_lock.txt','close_lock2.txt','open_lock2.txt'] as $name) { foreach (array_unique([$base . '/' . $name,$data . '/' . $name]) as $path) { - if (is_file($path)) { + if ($this->hasFile($path)) { $globalStates[$name] = $this->read($path); if (!$dryRun) { $this->recordSource($path, ['kind' => 'legacy_global_state','requires_review' => true]); @@ -55,7 +105,17 @@ public function run(string $legacyRoot, bool $dryRun = true): array $report['warnings'][] = 'Legacy Jerusalem requested b=18 but Hebcal city rules use forty minutes; imported candle_minutes=null preserves city behavior. Closure remains ten minutes before candles. Old opening checks omitted the ten-minute closure offset.'; foreach ($groups as $id) { $existing = $this->settings->getGroup($id); - $report['groups'][] = ['group_id' => $id,'action' => $existing === null ? 'insert' : 'preserve_existing','settings_revision' => $existing['revision'] ?? 1]; + $defaults = $this->legacyDefaults($data, $id); + $differences = []; + foreach ($defaults as $key => $value) { + if ($existing !== null && $existing[$key] !== $value) { + $differences[] = $key; + } + } + $report['groups'][] = ['group_id' => $id,'action' => $existing === null ? 'insert' : 'preserve_existing', + 'settings_revision' => $existing['revision'] ?? 1,'source_settings' => $defaults,'different_settings' => $differences]; + $this->trackTarget('groups', ['group_id' => $id], ['group_id' => $id]); + $this->trackTarget('group_settings', ['group_id' => $id], ['group_id' => $id] + $defaults); $report['counts']['groups']++; if (!$dryRun && $existing === null) { $this->settings->ensureGroup($id, '', $this->legacyDefaults($data, $id)); @@ -66,10 +126,14 @@ public function run(string $legacyRoot, bool $dryRun = true): array if ($template === null) { continue; } - $query = $this->db->pdo()->prepare('SELECT template_id FROM message_templates WHERE group_id=? AND kind=?'); + $values = $this->templateValues($template); + $this->trackTarget('message_templates', ['group_id' => $id,'kind' => $kind], $values); + $query = $this->db->pdo()->prepare('SELECT * FROM message_templates WHERE group_id=? AND kind=?'); $query->execute([$id,$kind]); - $exists = $query->fetchColumn() !== false; - $report['templates'][] = ['group_id' => $id,'kind' => $kind,'action' => $exists ? 'preserve_existing' : 'insert']; + $stored = $query->fetch(); + $exists = $stored !== false; + $report['templates'][] = ['group_id' => $id,'kind' => $kind,'action' => $exists ? 'preserve_existing' : 'insert'] + + $this->valueComparison($values, $stored); $report['counts']['templates']++; if (!$dryRun && !$exists) { $this->db->pdo()->prepare('INSERT INTO message_templates(group_id,kind,text,entities_json,media_json,buttons_json,updated_at,imported_at,buttons_mode) VALUES(?,?,?,?,?,?,?,?,?)') @@ -77,7 +141,7 @@ public function run(string $legacyRoot, bool $dryRun = true): array } } $snapshotFile = $data . '/' . $id . '/chatb1.json'; - if (is_file($snapshotFile)) { + if ($this->hasFile($snapshotFile)) { $report['counts']['snapshots']++; $error = null; $snapshot = null; @@ -93,8 +157,11 @@ public function run(string $legacyRoot, bool $dryRun = true): array $report['warnings'][] = $id . ': malformed original permissions: ' . $error; } $report['recovery'][] = ['group_id' => $id,'snapshot_valid' => $error === null,'action' => 'requires_current_permission_and_calendar_check']; + $serialized = $snapshot === null ? null : Database::encode($snapshot); + $this->trackTarget('group_lock_state', ['group_id' => $id], ['status' => 'recovery_required', + 'snapshot_json' => $serialized,'snapshot_provenance' => 'legacy_unverified']); + $this->read($snapshotFile); if (!$dryRun) { - $serialized = $snapshot === null ? null : Database::encode($snapshot); $applied = $snapshot === null ? null : Permissions::locked($snapshot); // The old source also set these flags. Retain them in the expected legacy lock. if ($applied !== null) { @@ -107,15 +174,18 @@ public function run(string $legacyRoot, bool $dryRun = true): array } } elseif ($globalStates !== []) { $report['recovery'][] = ['group_id' => $id,'snapshot_valid' => false,'action' => 'manual_review_without_permission_guesses']; + $this->trackTarget('group_lock_state', ['group_id' => $id], ['status' => 'recovery_required', + 'snapshot_provenance' => 'legacy_unverified']); if (!$dryRun) { $this->db->pdo()->prepare("INSERT OR IGNORE INTO group_lock_state(group_id,event_key,status,prepared_at,last_error) VALUES(?,'legacy:missing-snapshot','recovery_required',?,'Global legacy state exists without original permissions; administrator review required')") ->execute([$id,$this->clock->now()->getTimestamp()]); } } - if (!$dryRun) { - foreach (['alertshabat.txt','alertshabat2.txt','msgclosermotan.txt','msgclosermotan2.txt','MsgOpener.txt','MsgOpener2.txt','MsgOpenerMedia.txt','MsgOpenerButtons.txt','MsgCloser.txt','MsgCloser2.txt','MsgCloserMedia.txt','MsgCloserButtons.txt'] as $name) { - $path = $data . '/' . $id . '/' . $name; - if (is_file($path)) { + foreach (['alertshabat.txt','alertshabat2.txt','msgclosermotan.txt','msgclosermotan2.txt','MsgOpener.txt','MsgOpener2.txt','MsgOpenerMedia.txt','MsgOpenerButtons.txt','MsgCloser.txt','MsgCloser2.txt','MsgCloserMedia.txt','MsgCloserButtons.txt'] as $name) { + $path = $data . '/' . $id . '/' . $name; + if ($this->hasFile($path)) { + $this->read($path); + if (!$dryRun) { $this->recordSource($path, ['group_id' => $id]); } } @@ -123,7 +193,7 @@ public function run(string $legacyRoot, bool $dryRun = true): array } $knownUsers = []; $idsFile = $base . '/ids.txt'; - if (is_file($idsFile)) { + if ($this->hasFile($idsFile)) { $knownPeers = []; foreach (preg_split('/\R/', $this->read($idsFile)) ?: [] as $line) { $peer = trim($line); @@ -134,6 +204,9 @@ public function run(string $legacyRoot, bool $dryRun = true): array $report['warnings'][] = 'Skipped unsupported dialog identifier in ids.txt.'; continue; } + if (isset($knownPeers[$peer])) { + $report['duplicates'][] = ['source' => 'ids.txt','identifier' => $peer,'action' => 'deduplicated']; + } $knownPeers[$peer] = true; if ($this->validUserId($peer)) { $knownUsers[$peer] = true; @@ -141,6 +214,7 @@ public function run(string $legacyRoot, bool $dryRun = true): array } foreach (array_keys($knownPeers) as $peer) { $peer = (string)$peer; + $this->trackTarget('known_broadcast_peers', ['peer_id' => $peer], ['peer_id' => $peer,'peer_type' => 'unknown']); $query = $this->db->pdo()->prepare('SELECT 1 FROM known_broadcast_peers WHERE peer_id=?'); $query->execute([$peer]); $report['known_peers'][] = ['peer_id' => $peer,'action' => $query->fetchColumn() === false ? 'insert_unknown' : 'preserve_existing','authority' => 'none']; @@ -152,7 +226,8 @@ public function run(string $legacyRoot, bool $dryRun = true): array } foreach (array_keys($knownUsers) as $user) { $user = (string)$user; - $report['users'][] = ['user_id' => $user,'action' => 'insert_known_user_without_admin_authority']; + $userExists = $this->trackUser($user); + $report['users'][] = ['user_id' => $user,'action' => $userExists ? 'preserve_existing' : 'insert_known_user_without_admin_authority','authority' => 'none']; $report['counts']['users']++; if (!$dryRun) { $this->settings->getUser($user); @@ -166,42 +241,53 @@ public function run(string $legacyRoot, bool $dryRun = true): array $this->importAdminState($data . '/' . $name, '0', $name, $dryRun, $report); } // Numeric directories outside the subscribed group list contain personal/private drafts. - foreach (glob($data . '/*', GLOB_ONLYDIR) ?: [] as $dir) { + foreach ($this->directories($data) as $dir) { $user = basename($dir); if (!$this->validUserId($user) || in_array($user, $groups, true)) { continue; } $selectedFile = $dir . '/groupid.txt'; - $hasDraft = is_file($selectedFile); + $hasDraft = $this->hasFile($selectedFile); foreach (['grs1.txt','messagetodelete.txt','txt.txt','ent.txt','media.txt','BUTTONS.txt','broadcastsend.txt','pinmessage.txt','page_var.txt'] as $name) { - $hasDraft = $hasDraft || is_file($dir . '/' . $name); + $hasDraft = $hasDraft || $this->hasFile($dir . '/' . $name); } if (!$hasDraft) { continue; } if (!isset($knownUsers[$user])) { - $report['users'][] = ['user_id' => $user,'action' => 'preserve_personal_drafts_without_admin_authority']; + $this->trackUser($user); + $report['users'][] = ['user_id' => $user,'action' => 'preserve_personal_drafts_without_admin_authority','authority' => 'none']; $report['counts']['users']++; $knownUsers[$user] = true; } foreach (['grs1.txt','messagetodelete.txt','txt.txt','ent.txt','media.txt','BUTTONS.txt','broadcastsend.txt','pinmessage.txt','page_var.txt'] as $name) { $this->importAdminState($dir . '/' . $name, $user, $name, $dryRun, $report); } + $draft = $this->userDraft($dir, $report['warnings']); + if ($draft !== null) { + $values = $this->templateValues($draft); + $stored = $this->trackTarget('message_templates', ['user_id' => $user,'kind' => 'broadcast'], $values); + $report['templates'][] = ['user_id' => $user,'kind' => 'broadcast','action' => $stored === false ? 'insert' : 'preserve_existing'] + + $this->valueComparison($values, $stored); + $report['counts']['templates']++; + } if (!$dryRun) { $this->settings->getUser($user); - $draft = $this->userDraft($dir, $report['warnings']); if ($draft !== null) { $this->db->pdo()->prepare("INSERT OR IGNORE INTO message_templates(user_id,kind,text,entities_json,media_json,buttons_json,updated_at,imported_at,buttons_mode) VALUES(?,'broadcast',?,?,?,?,?,?,?)") ->execute([$user,$draft['text'],Database::encode($draft['entities']),$draft['media'] === null ? null : Database::encode($draft['media']),Database::encode($draft['buttons']),$this->clock->now()->getTimestamp(),$this->clock->now()->getTimestamp(),$draft['buttons'] === [] ? 'inherit' : 'custom']); } - foreach (['groupid.txt','grs1.txt','VAR-MENU','txt.txt','ent.txt','media.txt'] as $name) { - if (is_file($dir . '/' . $name)) { + } + foreach (['groupid.txt','grs1.txt','VAR-MENU','txt.txt','ent.txt','media.txt'] as $name) { + if ($this->hasFile($dir . '/' . $name)) { + $this->read($dir . '/' . $name); + if (!$dryRun) { $this->recordSource($dir . '/' . $name, ['user_id' => $user,'authority' => 'none','requires_new_authenticated_flow' => true]); } } } } - if (!$dryRun && is_file($data . '/DBgroups.txt')) { + if (!$dryRun && $this->hasFile($data . '/DBgroups.txt')) { $this->recordSource($data . '/DBgroups.txt', ['groups' => $groups]); } return $report; @@ -226,7 +312,7 @@ private function validUserId(string $id): bool } private function importAdminState(string $path, string $user, string $key, bool $dryRun, array &$report): void { - if (!is_file($path)) { + if (!$this->hasFile($path)) { return; } $contents = $this->read($path); @@ -234,10 +320,13 @@ private function importAdminState(string $path, string $user, string $key, bool $report['warnings'][] = $key . ': exceeds SQLite draft limit; retained in legacy source for explicit review.'; return; } + $this->trackTarget('admin_directories', ['user_id' => $user], ['user_id' => $user]); + $stored = $this->trackTarget('admin_state', ['user_id' => $user,'state_key' => $key], ['value_text' => $contents]); $query = $this->db->pdo()->prepare('SELECT 1 FROM admin_state WHERE user_id=? AND state_key=?'); $query->execute([$user,$key]); $exists = $query->fetchColumn() !== false; - $report['admin_state'][] = ['user_id' => $user,'key' => $key,'action' => $exists ? 'preserve_existing' : 'insert']; + $report['admin_state'][] = ['user_id' => $user,'key' => $key,'action' => $exists ? 'preserve_existing' : 'insert'] + + $this->valueComparison(['value_text' => $contents], $stored); $report['counts']['admin_state']++; if ($dryRun) { return; @@ -254,12 +343,12 @@ private function importAdminState(string $path, string $user, string $key, bool } private function legacyDefaults(string $data, string $id): array { - $messages = is_file($data . '/' . $id . '/alertshabat2.txt'); + $messages = $this->hasFile($data . '/' . $id . '/alertshabat2.txt'); return ['location_name' => 'Jerusalem','country' => 'IL','geoname_id' => 281184,'latitude' => 31.76904,'longitude' => 35.21633, 'timezone_id' => 'Asia/Jerusalem','location_source' => 'legacy','israel' => true,'language' => 'he','candle_minutes' => null, 'havdalah_method' => 'degrees','havdalah_value' => 8.5,'close_before_candles_minutes' => 10,'open_after_havdalah_minutes' => 0, 'mode' => $messages ? 'lock_messages' : 'lock','shabbat_enabled' => true,'holidays_enabled' => true, - 'times_alert_enabled' => is_file($data . '/' . $id . '/alertshabat.txt'),'times_alert_time' => '13:30', + 'times_alert_enabled' => $this->hasFile($data . '/' . $id . '/alertshabat.txt'),'times_alert_time' => '13:30', 'close_message_enabled' => $messages,'open_message_enabled' => $messages,'zmanim_enabled' => false,'daf_enabled' => false,'tefillin_enabled' => false,'omer_enabled' => false]; } private function paths(string $root): array @@ -272,10 +361,10 @@ private function paths(string $root): array $base = basename($data) === 'data' ? dirname($data) : $resolved; return [$data,$base]; } - private function groupIds(string $data, array &$warnings): array + private function groupIds(string $data, array &$warnings, array &$duplicates = []): array { $file = $data . '/DBgroups.txt'; - if (!is_file($file)) { + if (!$this->hasFile($file)) { return []; } $ids = []; @@ -284,10 +373,13 @@ private function groupIds(string $data, array &$warnings): array if ($id === '') { continue; } - if (!preg_match('/^-?[0-9]{1,20}$/D', $id)) { + if (!$this->validPeerId($id)) { $warnings[] = 'Skipped invalid group identifier in DBgroups.txt: ' . substr($id, 0, 40); continue; } + if (isset($ids[$id])) { + $duplicates[] = ['source' => 'DBgroups.txt','identifier' => $id,'action' => 'deduplicated']; + } $ids[$id] = $id; } return array_values($ids); @@ -298,25 +390,25 @@ private function template(string $dir, string $prefix, array &$warnings): ?array $entityFile = $dir . '/' . $prefix . '2.txt'; $mediaFile = $dir . '/' . $prefix . 'Media.txt'; $buttonFile = $dir . '/' . $prefix . 'Buttons.txt'; - if (!is_file($textFile) && !is_file($mediaFile) && !is_file($buttonFile)) { + if (!$this->hasFile($textFile) && !$this->hasFile($mediaFile) && !$this->hasFile($buttonFile)) { return null; } - return ['text' => is_file($textFile) ? $this->read($textFile) : '','entities' => $this->jsonArray($entityFile, $warnings), - 'media' => is_file($mediaFile) ? ['bot_api_file_id' => trim($this->read($mediaFile))] : null, - 'buttons' => is_file($buttonFile) ? $this->buttons($this->read($buttonFile), $warnings) : []]; + return ['text' => $this->hasFile($textFile) ? $this->read($textFile) : '','entities' => $this->jsonArray($entityFile, $warnings), + 'media' => $this->hasFile($mediaFile) ? ['bot_api_file_id' => trim($this->read($mediaFile))] : null, + 'buttons' => $this->hasFile($buttonFile) ? $this->buttons($this->read($buttonFile), $warnings) : []]; } private function userDraft(string $dir, array &$warnings): ?array { - if (!is_file($dir . '/txt.txt') && !is_file($dir . '/media.txt')) { + if (!$this->hasFile($dir . '/txt.txt') && !$this->hasFile($dir . '/media.txt')) { return null; } - $buttons = is_file($dir . '/BUTTONS.txt') ? $dir . '/BUTTONS.txt' : dirname($dir) . '/BUTTONS.txt'; - return ['text' => is_file($dir . '/txt.txt') ? $this->read($dir . '/txt.txt') : '','entities' => $this->jsonArray($dir . '/ent.txt', $warnings), - 'media' => is_file($dir . '/media.txt') ? ['bot_api_file_id' => trim($this->read($dir . '/media.txt'))] : null,'buttons' => TemplateRepository::buttonRows($this->jsonArray($buttons, $warnings))]; + $buttons = $this->hasFile($dir . '/BUTTONS.txt') ? $dir . '/BUTTONS.txt' : dirname($dir) . '/BUTTONS.txt'; + return ['text' => $this->hasFile($dir . '/txt.txt') ? $this->read($dir . '/txt.txt') : '','entities' => $this->jsonArray($dir . '/ent.txt', $warnings), + 'media' => $this->hasFile($dir . '/media.txt') ? ['bot_api_file_id' => trim($this->read($dir . '/media.txt'))] : null,'buttons' => TemplateRepository::buttonRows($this->jsonArray($buttons, $warnings))]; } private function jsonArray(string $path, array &$warnings): array { - if (!is_file($path)) { + if (!$this->hasFile($path)) { return []; } try { @@ -386,9 +478,18 @@ private function buttons(string $text, array &$warnings): array } private function read(string $path): string { + if (isset($this->fileContents[$path])) { + return $this->fileContents[$path]; + } + for ($entry = $path; $entry !== $this->sourceBase && strlen($entry) > strlen($this->sourceBase); $entry = dirname($entry)) { + if (is_link($entry)) { + throw new \RuntimeException('Symlinked legacy sources require explicit operator review.'); + } + } if (is_link($path)) { throw new \RuntimeException('Symlinked legacy sources require explicit operator review.'); } + clearstatcache(true, $path); $size = filesize($path); if ($size === false || $size > 2 * 1024 * 1024) { throw new \RuntimeException('Legacy file is too large or unreadable: ' . basename($path)); @@ -397,6 +498,10 @@ private function read(string $path): string if ($text === false) { throw new \RuntimeException('Cannot read legacy file: ' . basename($path)); } + if (strlen($text) > 2 * 1024 * 1024) { + throw new \RuntimeException('Legacy file is too large or unreadable: ' . basename($path)); + } + $this->fileContents[$path] = $text; return $text; } private function recordSource(string $path, array $details): void @@ -404,4 +509,115 @@ private function recordSource(string $path, array $details): void $query = $this->db->pdo()->prepare('INSERT OR IGNORE INTO legacy_imports(source_path,sha256,imported_at,details_json) VALUES(?,?,?,?)'); $query->execute([$path,hash('sha256', $this->read($path)),$this->clock->now()->getTimestamp(),Database::encode($details)]); } + private function resetReadState(): void + { + $this->fileExists = []; + $this->fileContents = []; + $this->directoryEntries = []; + $this->verificationTargets = []; + } + private function hasFile(string $path): bool + { + return $this->fileExists[$path] ??= is_file($path); + } + private function directories(string $data): array + { + return $this->directoryEntries[$data] ??= glob($data . '/*', GLOB_ONLYDIR) ?: []; + } + private function sourceFingerprint(): string + { + $files = []; + foreach ($this->fileExists as $path => $exists) { + $relative = str_replace('\\', '/', substr($path, strlen($this->sourceBase) + 1)); + $files[$relative] = ['exists' => $exists,'sha256' => isset($this->fileContents[$path]) ? hash('sha256', $this->fileContents[$path]) : null]; + } + foreach ($this->fileContents as $path => $contents) { + $relative = str_replace('\\', '/', substr($path, strlen($this->sourceBase) + 1)); + $files[$relative] = ['exists' => true,'sha256' => hash('sha256', $contents)]; + } + ksort($files, SORT_STRING); + return hash('sha256', Database::encode($files)); + } + private function templateValues(array $template): array + { + return ['text' => $template['text'],'entities_json' => Database::encode($template['entities']), + 'media_json' => $template['media'] === null ? null : Database::encode($template['media']), + 'buttons_json' => Database::encode($template['buttons']),'buttons_mode' => $template['buttons'] === [] ? 'inherit' : 'custom']; + } + private function valueComparison(array $values, array|false $stored): array + { + $sourceHash = hash('sha256', Database::encode($values)); + $storedHash = null; + // Normalize column order before comparing JSON hashes. + if ($stored !== false) { + $ordered = []; + foreach ($values as $key => $value) { + $ordered[$key] = $stored[$key]; + } + $storedHash = hash('sha256', Database::encode($ordered)); + } + return ['source_value_sha256' => $sourceHash,'destination_value_sha256' => $storedHash, + 'matches_source' => $storedHash === null ? null : hash_equals($sourceHash, $storedHash)]; + } + private function targetRow(string $table, array $where): array|false + { + $query = $this->db->pdo()->prepare('SELECT * FROM ' . $table . ' WHERE ' . implode(' AND ', array_map(static fn(string $key): string => $key . '=?', array_keys($where)))); + $query->execute(array_values($where)); + return $query->fetch(); + } + private function trackTarget(string $table, array $where, array $expected): array|false + { + $key = $table . ':' . Database::encode($where); + if (!isset($this->verificationTargets[$key])) { + $this->verificationTargets[$key] = ['table' => $table,'where' => $where,'expected' => $expected,'before' => $this->targetRow($table, $where)]; + } + return $this->verificationTargets[$key]['before']; + } + private function trackUser(string $id): bool + { + $before = $this->trackTarget('users', ['user_id' => $id], ['user_id' => $id]); + $this->trackTarget('user_preferences', ['user_id' => $id], ['user_id' => $id]); + return $before !== false; + } + private function destinationFingerprint(): string + { + $records = []; + foreach ($this->verificationTargets as $key => $target) { + $records[$key] = $target['before']; + } + ksort($records, SORT_STRING); + return hash('sha256', Database::encode($records)); + } + private function verifyTargets(): array + { + $preserved = 0; + $inserted = 0; + foreach ($this->verificationTargets as $target) { + $after = $this->targetRow($target['table'], $target['where']); + if ($after === false) { + throw new \RuntimeException('Legacy import verification failed: missing record in ' . $target['table'] . '. Keep the bot stopped and review the pre-import backup.'); + } + if ($target['before'] !== false) { + if ($after !== $target['before']) { + throw new \RuntimeException('Legacy import verification failed: an existing record changed in ' . $target['table'] . '. Keep the bot stopped and review the pre-import backup.'); + } + $preserved++; + continue; + } + foreach ($target['expected'] as $key => $value) { + $actual = $after[$key] ?? null; + $matches = $value === null ? $actual === null : $actual !== null && (string)$actual === (string)(is_bool($value) ? (int)$value : $value); + if (!$matches) { + throw new \RuntimeException('Legacy import verification failed: inserted value differs in ' . $target['table'] . '.' . $key . '. Keep the bot stopped and review the pre-import backup.'); + } + } + $inserted++; + } + $integrity = $this->db->integrity(); + if ($integrity['integrity_check'] !== ['ok'] || $integrity['foreign_key_check'] !== []) { + throw new \RuntimeException('Legacy import database integrity verification failed. Keep the bot stopped and review the pre-import backup.'); + } + return ['status' => 'passed','checked_records' => count($this->verificationTargets), + 'inserted_records' => $inserted,'preserved_records' => $preserved,'integrity_check' => 'ok','foreign_key_check' => []]; + } } diff --git a/src/Telegram/AdminRights.php b/src/Telegram/AdminRights.php index d271180..15c91f1 100644 --- a/src/Telegram/AdminRights.php +++ b/src/Telegram/AdminRights.php @@ -6,14 +6,14 @@ namespace Shabbat\Telegram; -/** Read-only diagnostic catalog from the locked Telegram layer 225 constructor. */ +/** Read-only diagnostic catalog from the locked Telegram layer 232 constructor. */ final class AdminRights { public const FLAGS = [ 'change_info', 'post_messages', 'edit_messages', 'delete_messages', 'ban_users', 'invite_users', 'pin_messages', 'add_admins', 'anonymous', 'manage_call', 'other', 'manage_topics', 'post_stories', 'edit_stories', - 'delete_stories', 'manage_direct_messages', 'manage_ranks', + 'delete_stories', 'manage_direct_messages', 'manage_ranks', 'manage_linked_peers', 'manage_welcome_messages', ]; public static function normalize(?array $rights): array diff --git a/src/Telegram/KeyboardMarkup.php b/src/Telegram/KeyboardMarkup.php new file mode 100644 index 0000000..0777627 --- /dev/null +++ b/src/Telegram/KeyboardMarkup.php @@ -0,0 +1,359 @@ + 'inlineButtonTypeUrl', + 'keyboardButtonUrlAuth' => 'inlineButtonTypeUrlAuth', + 'inputKeyboardButtonUrlAuth' => 'inputInlineButtonTypeUrlAuth', + 'keyboardButtonWebView' => 'inlineButtonTypeWebView', + 'keyboardButtonSimpleWebView' => 'inlineButtonTypeWebView', + 'keyboardButtonCallback' => 'inlineButtonTypeCallback', + 'keyboardButtonGame' => 'inlineButtonTypeGame', + 'keyboardButtonBuy' => 'inlineButtonTypeBuy', + 'keyboardButtonSwitchInline' => 'inlineButtonTypeSwitchInline', + 'keyboardButtonUserProfile' => 'inlineButtonTypeUserProfile', + 'inputKeyboardButtonUserProfile' => 'inputInlineButtonTypeUserProfile', + 'keyboardButtonCopy' => 'inlineButtonTypeCopy', + ]; + private const REPLY = [ + 'keyboardButton' => 'buttonTypeDefault', + 'keyboardButtonRequestPhone' => 'buttonTypeRequestPhone', + 'keyboardButtonRequestGeoLocation' => 'buttonTypeRequestGeoLocation', + 'keyboardButtonRequestPoll' => 'buttonTypeRequestPoll', + 'keyboardButtonRequestPeer' => 'buttonTypeRequestPeer', + 'inputKeyboardButtonRequestPeer' => 'inputButtonTypeRequestPeer', + 'keyboardButtonSimpleWebView' => 'buttonTypeSimpleWebView', + ]; + + public static function normalize(array $markup, bool $customEmojiEnabled = true): array + { + if ($markup === []) { + return []; + } + $constructor = $markup['_'] ?? null; + if ($constructor !== null && !in_array($constructor, ['replyInlineMarkup', 'replyKeyboardMarkup', 'replyKeyboardHide', 'replyKeyboardForceReply'], true)) { + throw new InvalidArgumentException('Unknown keyboard markup constructor.'); + } + $selectors = array_intersect(['inline_keyboard', 'keyboard', 'remove_keyboard'], array_keys($markup)); + if (count($selectors) > 1 || ($constructor !== null && $selectors !== [])) { + throw new InvalidArgumentException('Mixed inline and reply keyboard formats.'); + } + if (isset($markup['inline_keyboard']) || $constructor === 'replyInlineMarkup') { + $rows = $markup['inline_keyboard'] ?? $markup['rows'] ?? null; + $native = ['_' => 'replyInlineMarkup', 'rows' => self::rows($rows, true, $customEmojiEnabled)]; + if (array_key_exists('force_reply', $markup)) { + $native['force_reply'] = self::boolean($markup['force_reply']); + } + return $native; + } + if (isset($markup['keyboard']) || $constructor === 'replyKeyboardMarkup') { + $native = ['_' => 'replyKeyboardMarkup', 'rows' => self::rows($markup['keyboard'] ?? $markup['rows'] ?? null, false, $customEmojiEnabled)]; + foreach (['resize' => 'resize_keyboard', 'single_use' => 'one_time_keyboard', 'persistent' => 'is_persistent', 'selective' => 'selective', 'force_reply' => 'force_reply'] as $field => $alias) { + if (array_key_exists($field, $markup) || array_key_exists($alias, $markup)) { + $native[$field] = self::boolean($markup[$field] ?? $markup[$alias]); + } + } + if (isset($markup['placeholder']) || isset($markup['input_field_placeholder'])) { + $native['placeholder'] = self::string($markup['placeholder'] ?? $markup['input_field_placeholder'], 64, false); + } + return $native; + } + if ($constructor === 'replyKeyboardHide' || ($markup['remove_keyboard'] ?? false) === true) { + return ['_' => 'replyKeyboardHide'] + (isset($markup['selective']) ? ['selective' => self::boolean($markup['selective'])] : []); + } + if ($constructor === 'replyKeyboardForceReply' || ($markup['force_reply'] ?? false) === true) { + $native = ['_' => 'replyKeyboardForceReply']; + foreach (['selective', 'single_use'] as $flag) { + if (isset($markup[$flag])) { + $native[$flag] = self::boolean($markup[$flag]); + } + } + if (isset($markup['placeholder']) || isset($markup['input_field_placeholder'])) { + $native['placeholder'] = self::string($markup['placeholder'] ?? $markup['input_field_placeholder'], 64, false); + } + return $native; + } + throw new InvalidArgumentException('Unsupported message keyboard.'); + } + + /** Shared boundary for regular messages, albums and inline result messages. */ + public static function parameters(array $parameters, bool $customEmojiEnabled = true): array + { + if (isset($parameters['reply_markup'])) { + if (!is_array($parameters['reply_markup'])) { + throw new InvalidArgumentException('Reply markup must be an object.'); + } + $parameters['reply_markup'] = self::normalize($parameters['reply_markup'], $customEmojiEnabled); + } + foreach ($parameters['multi_media'] ?? [] as $index => $single) { + if (is_array($single)) { + $parameters['multi_media'][$index] = self::parameters($single, $customEmojiEnabled); + } + } + foreach ($parameters['results'] ?? [] as $index => $result) { + if (is_array($result['send_message'] ?? null)) { + $parameters['results'][$index]['send_message'] = self::parameters($result['send_message'], $customEmojiEnabled); + } + } + return $parameters; + } + private static function rows(mixed $rows, bool $inline, bool $custom): array + { + if (!is_array($rows) || !array_is_list($rows) || count($rows) > 100) { + throw new InvalidArgumentException('Invalid keyboard rows.'); + } + $result = []; + $total = 0; + foreach ($rows as $row) { + if (!is_array($row)) { + throw new InvalidArgumentException('Invalid keyboard row.'); + } + if (isset($row['_'])) { + if (!in_array($row['_'], $inline ? ['keyboardButtonRow', 'keyboardInlineButtonRow'] : ['keyboardButtonRow'], true)) { + throw new InvalidArgumentException('Inline and reply rows cannot be interchanged.'); + } + $row = $row['buttons'] ?? null; + } + if (!is_array($row) || !array_is_list($row) || count($row) > 8 || $row === []) { + throw new InvalidArgumentException('Invalid keyboard button row.'); + } + $buttons = []; + foreach ($row as $button) { + if (++$total > 100) { + throw new InvalidArgumentException('Too many keyboard buttons.'); + } + if (is_string($button) && !$inline) { + $button = ['text' => $button]; + } + if (!is_array($button)) { + throw new InvalidArgumentException('Invalid keyboard button.'); + } + self::string($button['text'] ?? null, 128); + $button = Presentation::button($button, $custom, null, true); + $action = self::action($button, $inline); + $native = ['_' => $inline ? 'keyboardInlineButton' : 'keyboardButton', 'text' => $button['text'], 'type' => self::validateAction($action, $inline, in_array($button['_'] ?? null, ['keyboardButtonUrl', 'keyboardInlineButton'], true))]; + if (isset($button['style'])) { + $native['style'] = TemplateRenderer::nativeStyle($button['style']); + if (isset($native['style']['icon'])) { + $native['style']['icon'] = TelegramInt64::fromDecimal($native['style']['icon']); + } + } + foreach (['_presentation_fallback_text', '_presentation_auto_icon'] as $field) { + if (array_key_exists($field, $button)) { + $native[$field] = $button[$field]; + } + } + $buttons[] = $native; + } + $result[] = ['_' => $inline ? 'keyboardInlineButtonRow' : 'keyboardButtonRow', 'buttons' => $buttons]; + } + return $result; + } + + private static function action(array $button, bool $inline): array + { + $constructor = $button['_'] ?? null; + if (isset($button['type'])) { + if ($constructor !== ($inline ? 'keyboardInlineButton' : 'keyboardButton') || !is_array($button['type'])) { + throw new InvalidArgumentException('Wrong typed keyboard button context.'); + } + if (array_intersect(['url', 'callback_data', 'data', 'copy_text', 'switch_inline_query', 'switch_inline_query_current_chat', 'switch_inline_query_chosen_chat', 'query', 'web_app', 'login_url', 'pay', 'callback_game', 'request_contact', 'request_location', 'request_poll'], array_keys($button)) !== []) { + throw new InvalidArgumentException('Typed and flat button actions cannot be combined.'); + } + return $button['type']; + } + $mapping = $inline ? self::INLINE : self::REPLY; + if ($constructor !== null) { + if (!isset($mapping[$constructor])) { + throw new InvalidArgumentException('Unsupported keyboard button constructor for this context.'); + } + $action = $button; + unset($action['text'], $action['style'], $action['_presentation_fallback_text'], $action['_presentation_auto_icon'], $action['icon_custom_emoji_id']); + $action['_'] = $mapping[$constructor]; + return $action; + } + $keys = $inline + ? ['url', 'callback_data', 'data', 'copy_text', 'switch_inline_query', 'switch_inline_query_current_chat', 'switch_inline_query_chosen_chat', 'query', 'web_app', 'login_url', 'pay', 'callback_game'] + : ['request_contact', 'request_location', 'request_poll', 'web_app']; + $actions = array_values(array_filter($keys, static fn(string $key): bool => array_key_exists($key, $button))); + if (count($actions) > 1 || ($inline && $actions === [])) { + throw new InvalidArgumentException('A button needs exactly one action in its keyboard context.'); + } + if (!$inline && array_intersect(['url', 'callback_data', 'data', 'copy_text', 'switch_inline_query', 'switch_inline_query_current_chat', 'switch_inline_query_chosen_chat', 'query', 'login_url', 'pay', 'callback_game'], array_keys($button)) !== []) { + throw new InvalidArgumentException('An inline action cannot be used in a reply keyboard.'); + } + $key = $actions[0] ?? ''; + return match ($key) { + 'url' => ['_' => 'inlineButtonTypeUrl', 'url' => $button['url']], + 'callback_data', 'data' => ['_' => 'inlineButtonTypeCallback', 'data' => $button[$key]], + 'copy_text' => ['_' => 'inlineButtonTypeCopy', 'copy_text' => is_array($button[$key]) ? ($button[$key]['text'] ?? null) : $button[$key]], + 'switch_inline_query', 'switch_inline_query_current_chat', 'query' => ['_' => 'inlineButtonTypeSwitchInline', 'query' => $button[$key], 'same_peer' => $key === 'switch_inline_query_current_chat' || ($key === 'query' && ($button['same_peer'] ?? false))], + 'switch_inline_query_chosen_chat' => self::chosenChat($button[$key]), + 'web_app' => ['_' => $inline ? 'inlineButtonTypeWebView' : 'buttonTypeSimpleWebView', 'url' => is_array($button[$key]) ? ($button[$key]['url'] ?? null) : null], + 'login_url' => self::login($button[$key]), + 'pay' => self::boolean($button[$key]) ? ['_' => 'inlineButtonTypeBuy'] : throw new InvalidArgumentException('Payment button must be enabled.'), + 'callback_game' => is_array($button[$key]) ? ['_' => 'inlineButtonTypeGame'] : throw new InvalidArgumentException('Invalid game button.'), + 'request_contact' => self::boolean($button[$key]) ? ['_' => 'buttonTypeRequestPhone'] : throw new InvalidArgumentException('Contact request must be enabled.'), + 'request_location' => self::boolean($button[$key]) ? ['_' => 'buttonTypeRequestGeoLocation'] : throw new InvalidArgumentException('Location request must be enabled.'), + 'request_poll' => self::poll($button[$key]), + default => ['_' => 'buttonTypeDefault'], + }; + } + + private static function validateAction(array $action, bool $inline, bool $nativeUrl = false): array + { + $name = $action['_'] ?? ''; + $fields = match ($name) { + 'inlineButtonTypeUrl' => ['url'], + 'inlineButtonTypeUrlAuth' => ['url', 'button_id', 'fwd_text'], + 'inputInlineButtonTypeUrlAuth' => ['url', 'bot', 'fwd_text', 'request_write_access'], + 'inlineButtonTypeWebView', 'buttonTypeSimpleWebView' => ['url'], + 'inlineButtonTypeCallback' => ['data', 'requires_password'], + 'inlineButtonTypeSwitchInline' => ['query', 'same_peer', 'peer_types'], + 'inlineButtonTypeUserProfile', 'inputInlineButtonTypeUserProfile' => ['user_id'], + 'inlineButtonTypeCopy' => ['copy_text'], + 'buttonTypeRequestPoll' => ['quiz'], + 'buttonTypeRequestPeer' => ['button_id', 'peer_type', 'max_quantity'], + 'inputButtonTypeRequestPeer' => ['button_id', 'peer_type', 'max_quantity', 'name_requested', 'username_requested', 'photo_requested'], + 'inlineButtonTypeGame', 'inlineButtonTypeBuy', 'inlineButtonTypeDisabled', 'buttonTypeDefault', 'buttonTypeRequestPhone', 'buttonTypeRequestGeoLocation' => [], + default => throw new InvalidArgumentException('Unknown keyboard action.'), + }; + if ($inline !== (str_starts_with($name, 'inlineButtonType') || str_starts_with($name, 'inputInlineButtonType'))) { + throw new InvalidArgumentException('Inline and reply button actions cannot be interchanged.'); + } + foreach (array_keys($action) as $field) { + if ($field !== '_' && !in_array($field, $fields, true)) { + throw new InvalidArgumentException('Unsupported keyboard action field.'); + } + } + if (in_array('url', $fields, true)) { + $url = self::string($action['url'] ?? null, 4096); + $schemes = in_array($name, ['inlineButtonTypeWebView', 'buttonTypeSimpleWebView', 'inlineButtonTypeUrlAuth', 'inputInlineButtonTypeUrlAuth'], true) ? ['https'] : ($nativeUrl ? ['https', 'http', 'tg'] : ['https', 'tg']); + if ( + !in_array(strtolower((string)parse_url($url, PHP_URL_SCHEME)), $schemes, true) + || !preg_match('~^(?:' . implode('|', $schemes) . ')://~i', $url) || preg_match('/[\r\n\x00]/', $url) + ) { + throw new InvalidArgumentException('Button URL must use an allowed secure scheme.'); + } + } + if ($name === 'inlineButtonTypeCallback') { + $data = $action['data'] ?? null; + if ($data instanceof \Stringable) { + $data = (string)$data; + } + if (!is_string($data) || strlen($data) < 1 || strlen($data) > 64) { + throw new InvalidArgumentException('Callback data must be 1..64 bytes.'); + } + $action['data'] = $data; + } + if ($name === 'inlineButtonTypeCopy') { + self::string($action['copy_text'] ?? null, 256); + } + if ($name === 'inlineButtonTypeSwitchInline') { + self::string($action['query'] ?? null, 256, false); + if (isset($action['peer_types']) && (!is_array($action['peer_types']) || !array_is_list($action['peer_types']))) { + throw new InvalidArgumentException('Invalid inline peer selectors.'); + } + foreach ($action['peer_types'] ?? [] as $peer) { + if (!is_array($peer) || !in_array($peer['_'] ?? '', ['inlineQueryPeerTypeSameBotPM', 'inlineQueryPeerTypePM', 'inlineQueryPeerTypeChat', 'inlineQueryPeerTypeMegagroup', 'inlineQueryPeerTypeBroadcast', 'inlineQueryPeerTypeBotPM'], true)) { + throw new InvalidArgumentException('Invalid inline peer selector.'); + } + } + } + if ($name === 'inlineButtonTypeUserProfile') { + $action['user_id'] = TelegramInt64::fromDecimal($action['user_id'] ?? ''); + if ($action['user_id'] < 1) { + throw new InvalidArgumentException('Invalid profile user.'); + } + } + if ($name === 'inputInlineButtonTypeUserProfile' && !isset($action['user_id'])) { + throw new InvalidArgumentException('Missing input profile user.'); + } + foreach (['same_peer', 'requires_password', 'request_write_access', 'quiz', 'name_requested', 'username_requested', 'photo_requested'] as $flag) { + if (array_key_exists($flag, $action)) { + $action[$flag] = self::boolean($action[$flag]); + } + } + if (isset($action['fwd_text'])) { + self::string($action['fwd_text'], 128); + } + if (in_array('button_id', $fields, true) && (!is_int($action['button_id'] ?? null) || $action['button_id'] < -2147483648 || $action['button_id'] > 2147483647)) { + throw new InvalidArgumentException('Invalid request button identifier.'); + } + if (in_array('peer_type', $fields, true) && (!is_array($action['peer_type'] ?? null) || !in_array($action['peer_type']['_'] ?? '', ['requestPeerTypeUser', 'requestPeerTypeChat', 'requestPeerTypeBroadcast', 'requestPeerTypeCreateBot'], true))) { + throw new InvalidArgumentException('Invalid request peer type.'); + } + if (in_array('max_quantity', $fields, true) && (!is_int($action['max_quantity'] ?? null) || $action['max_quantity'] < 1 || $action['max_quantity'] > 10)) { + throw new InvalidArgumentException('Invalid peer request quantity.'); + } + return $action; + } + + private static function chosenChat(mixed $choice): array + { + if (!is_array($choice)) { + throw new InvalidArgumentException('Invalid chosen-chat switch.'); + } + $action = ['_' => 'inlineButtonTypeSwitchInline', 'query' => $choice['query'] ?? '', 'same_peer' => false]; + $types = []; + foreach (['allow_user_chats' => ['inlineQueryPeerTypePM'], 'allow_bot_chats' => ['inlineQueryPeerTypeBotPM'], 'allow_group_chats' => ['inlineQueryPeerTypeChat', 'inlineQueryPeerTypeMegagroup'], 'allow_channel_chats' => ['inlineQueryPeerTypeBroadcast']] as $flag => $constructors) { + if (array_key_exists($flag, $choice) && self::boolean($choice[$flag])) { + foreach ($constructors as $constructor) { + $types[] = ['_' => $constructor]; + } + } + } + if ($types !== []) { + $action['peer_types'] = $types; + } + return $action; + } + + private static function login(mixed $login): array + { + if (!is_array($login)) { + throw new InvalidArgumentException('Invalid login URL button.'); + } + $action = ['_' => 'inputInlineButtonTypeUrlAuth', 'url' => $login['url'] ?? null]; + foreach (['forward_text' => 'fwd_text', 'bot_username' => 'bot', 'request_write_access' => 'request_write_access'] as $from => $to) { + if (array_key_exists($from, $login)) { + $action[$to] = $login[$from]; + } + } + return $action; + } + + private static function poll(mixed $poll): array + { + if (!is_array($poll) || (isset($poll['type']) && !in_array($poll['type'], ['quiz', 'regular'], true))) { + throw new InvalidArgumentException('Invalid poll request.'); + } + return ['_' => 'buttonTypeRequestPoll'] + (isset($poll['type']) ? ['quiz' => $poll['type'] === 'quiz'] : []); + } + + private static function boolean(mixed $value): bool + { + return is_bool($value) ? $value : throw new InvalidArgumentException('Keyboard flags must be booleans.'); + } + + private static function string(mixed $value, int $maximum, bool $nonempty = true): string + { + if (!is_string($value) || !mb_check_encoding($value, 'UTF-8') || ($nonempty && trim($value) === '') || mb_strlen($value) > $maximum) { + throw new InvalidArgumentException('Invalid keyboard text.'); + } + return $value; + } +} diff --git a/tests/AdminRightsTest.php b/tests/AdminRightsTest.php index c750087..e262658 100644 --- a/tests/AdminRightsTest.php +++ b/tests/AdminRightsTest.php @@ -13,14 +13,14 @@ final class AdminRightsTest extends TestCase { public function testDiagnosticCatalogExactlyMatchesTheLockedNativeConstructor(): void { - $schema = file_get_contents(dirname(__DIR__) . '/vendor/danog/madelineproto/src/TL_telegram_v225.tl'); + $schema = file_get_contents((new \danog\MadelineProto\Settings\TLSchema())->getAPISchema()); self::assertSame(1, preg_match('/^chatAdminRights#[^\r\n]+/m', $schema, $match)); preg_match_all('/\b([a-z_]+):flags\.\d+\?true/', $match[0], $flags); self::assertSame($flags[1], AdminRights::FLAGS); foreach (AdminRights::FLAGS as $flag) { $normalized = AdminRights::normalize(['_' => 'chatAdminRights', $flag => true]); self::assertTrue($normalized[$flag]); - self::assertCount(17, $normalized); + self::assertCount(19, $normalized); } } diff --git a/tests/CustomEmojiFallbackTest.php b/tests/CustomEmojiFallbackTest.php index 7406078..c53a55e 100644 --- a/tests/CustomEmojiFallbackTest.php +++ b/tests/CustomEmojiFallbackTest.php @@ -89,7 +89,7 @@ public function testEntitlementRejectionRetriesOnceWithIdenticalTargetAndLatches $button = $secondBody['reply_markup']['rows'][0]['buttons'][0]; self::assertArrayNotHasKey('icon', $button['style']); self::assertTrue($button['style']['bg_primary']); - self::assertSame('https://example.org', $button['url']); + self::assertSame('https://example.org', $button['type']['url']); self::assertSame($original['text'], $payload['text']); self::assertSame($original['entities'], $payload['entities']); $this->operation($gateway, $kind); diff --git a/tests/DiagnosticsTransportTest.php b/tests/DiagnosticsTransportTest.php index 2b45941..9fd2c2d 100644 --- a/tests/DiagnosticsTransportTest.php +++ b/tests/DiagnosticsTransportTest.php @@ -39,7 +39,8 @@ public function testAcknowledgedPanelIdentityUsesNativeSendResponse(): void $transport->responses['messages.sendMessage'] = ['_' => 'updateShortSentMessage', 'id' => 500]; $gateway = new MadelineGateway($transport, false); self::assertSame(500, $gateway->sendDiagnosticPanel('2', 'Test', ['inline_keyboard' => [[['text' => 'Next', 'callback_data' => 'dz:012345678901234567890123:next']]]])); - self::assertSame('keyboardButtonCallback', $transport->calls[0][1]['reply_markup']['rows'][0]['buttons'][0]['_']); + self::assertSame('keyboardInlineButton', $transport->calls[0][1]['reply_markup']['rows'][0]['buttons'][0]['_']); + self::assertSame('inlineButtonTypeCallback', $transport->calls[0][1]['reply_markup']['rows'][0]['buttons'][0]['type']['_']); $transport->responses['messages.sendMessage'] = ['_' => 'updates', 'updates' => []]; $this->expectException(\RuntimeException::class); $gateway->sendDiagnosticPanel('2', 'Test', []); diff --git a/tests/Fixtures/PatchLoop/MTProto.php b/tests/Fixtures/PatchLoop/MTProto.php index 4cebde5..3a59fcc 100644 --- a/tests/Fixtures/PatchLoop/MTProto.php +++ b/tests/Fixtures/PatchLoop/MTProto.php @@ -11,6 +11,8 @@ class MTProto public object $loginState; public int $calls = 0; public int $reports = 0; + public bool $stopped = false; + public int $callsAfterStop = 0; public ?\Closure $onCall = null; public function __construct(public string $scenario) { @@ -59,9 +61,15 @@ public function report(string $message): void } public function methodCallAsyncRead(string $method, array $args, ?int $dc = null): array { + if ($this->stopped) { + $this->callsAfterStop++; + } $this->calls++; if ($this->calls === 1) { $this->onCall?->__invoke(); + if (str_ends_with($this->scenario, 'server-timeout')) { + throw (new \ReflectionClass(\danog\MadelineProto\RPCError\TimeoutError::class))->newInstanceWithoutConstructor(); + } if ($this->scenario === 'direct' || $this->scenario === 'shutdown-direct') { throw new \Amp\TimeoutException('fixture direct timeout'); } diff --git a/tests/FormattedDateEntityTest.php b/tests/FormattedDateEntityTest.php index a650384..a24a19d 100644 --- a/tests/FormattedDateEntityTest.php +++ b/tests/FormattedDateEntityTest.php @@ -15,6 +15,7 @@ use PHPUnit\Framework\TestCase; use Shabbat\Calendar\CalendarService; use Shabbat\Calendar\HebcalProvider; +use Shabbat\Content\DateEntity; use Shabbat\Content\TemplateEditor; use Shabbat\Content\TemplateRenderer; use Shabbat\Runtime\Application; @@ -77,10 +78,10 @@ public function testAllNineteenNativeFlagsBotApiAndLockedDecoderRoundTrip(int $m $raw = self::raw($mask); $entity = MessageEntity::fromRawEntity($raw); self::assertInstanceOf(FormattedDate::class, $entity); - self::assertSame($raw, $entity->toMTProto()); + self::assertEquals($raw, $entity->toMTProto()); self::assertSame(['type' => 'date_time', 'offset' => 2, 'length' => 8, 'unix_time' => 1792000000, 'date_time_format' => $format], $entity->toBotAPI()); - self::assertSame($raw, MessageEntity::fromRawEntity($entity->toBotAPI())->toMTProto()); + self::assertEquals($raw, MessageEntity::fromRawEntity($entity->toBotAPI())->toMTProto()); // Genuine locked decoder; schema-assembled wire uses native primitive int encoding. // TL::serializeParams needs a real API adapter and is deliberately not claimed here. $descriptor = self::$tl->getConstructors()->findByPredicate('messageEntityFormattedDate'); @@ -92,7 +93,7 @@ public function testAllNineteenNativeFlagsBotApiAndLockedDecoderRoundTrip(int $m foreach ($raw as $field => $value) { self::assertSame($value, $decoded[$field]); } - self::assertSame($raw, MessageEntity::fromRawEntity($decoded)->toMTProto()); + self::assertEquals($raw, MessageEntity::fromRawEntity($decoded)->toMTProto()); } public static function invalidMasks(): array @@ -108,10 +109,15 @@ public static function invalidMasks(): array } #[DataProvider('invalidMasks')] - public function testEveryContradictoryNativeFlagCombinationIsRejected(int $mask): void + public function testOfficialNativeFlagPrecedenceIsPreserved(int $mask): void { - $this->expectException(\InvalidArgumentException::class); - MessageEntity::fromRawEntity(self::raw($mask)); + $raw = DateEntity::normalize(self::raw($mask)); + $entity = MessageEntity::fromRawEntity($raw); + self::assertEquals($raw, $entity->toMTProto()); + $format = ($mask & 1) !== 0 ? 'r' : (($mask & 32) !== 0 ? 'w' : '') + . (($mask & 16) !== 0 ? 'D' : (($mask & 8) !== 0 ? 'd' : '')) + . (($mask & 4) !== 0 ? 'T' : (($mask & 2) !== 0 ? 't' : '')); + self::assertSame($format, $entity->toBotAPI()['date_time_format']); } public static function invalidNativeFields(): array @@ -127,14 +133,13 @@ public function testNativeFieldsAreNotSilentlyCoerced(string $field, mixed $valu $raw = self::raw(0); $raw[$field] = $value; $this->expectException(\InvalidArgumentException::class); - MessageEntity::fromRawEntity($raw); + (new TemplateRenderer())->renderPayload(['text' => '😀12345678', 'entities' => [$raw]], []); } public static function invalidBotApiFields(): array { return [['unix_time', '1792000000'], ['unix_time', 1792000000.5], ['offset', '2'], ['length', false], - ['date_time_format', 'rw'], ['date_time_format', 'td'], ['date_time_format', 'dD'], - ['date_time_format', 'tT'], ['date_time_format', 'W'], ['date_time_format', null], ['date_time_format', []]]; + ['date_time_format', 'rw'], ['date_time_format', 'x'], ['date_time_format', null], ['date_time_format', []]]; } #[DataProvider('invalidBotApiFields')] @@ -143,17 +148,27 @@ public function testBotApiFieldsAndFormatGrammarAreStrict(string $field, mixed $ $raw = ['type' => 'date_time', 'offset' => 2, 'length' => 8, 'unix_time' => 1792000000, 'date_time_format' => '']; $raw[$field] = $value; $this->expectException(\InvalidArgumentException::class); - MessageEntity::fromRawEntity($raw); + (new TemplateRenderer())->renderPayload(['text' => '😀12345678', 'entities' => [$raw]], []); + } + + public function testOfficialBotApiDateAliasesNormalizeAtTemplateBoundary(): void + { + foreach (['R' => 'r', 'W' => 'w', 'td' => 'dt', 'dD' => 'D', 'tT' => 'T'] as $format => $canonical) { + $entity = DateEntity::normalize(['type' => 'date_time', 'offset' => 0, 'length' => 4, + 'unix_time' => 1792000000, 'date_time_format' => $format]); + self::assertSame('messageEntityFormattedDate', $entity['_']); + self::assertSame($canonical, MessageEntity::fromRawEntity($entity)->toBotAPI()['date_time_format']); + } } public function testOmittedFlagsEmptyFormatEpochAndReadonlyUtf16Fields(): void { $raw = ['_' => 'messageEntityFormattedDate', 'offset' => 2, 'length' => 4, 'date' => 0]; $entity = MessageEntity::fromRawEntity($raw); - self::assertSame(self::raw(0, 2, 4, 0), $entity->toMTProto()); + self::assertEquals(self::raw(0, 2, 4, 0), $entity->toMTProto()); self::assertSame('', $entity->toBotAPI()['date_time_format']); $bot = ['type' => 'date_time', 'offset' => 2, 'length' => 4, 'unix_time' => 0]; - self::assertSame(self::raw(0, 2, 4, 0), MessageEntity::fromRawEntity($bot)->toMTProto()); + self::assertEquals(self::raw(0, 2, 4, 0), MessageEntity::fromRawEntity($bot)->toMTProto()); $reflection = new \ReflectionObject($entity); foreach (['offset', 'length', 'date', 'relative', 'shortTime', 'longTime', 'shortDate', 'longDate', 'dayOfWeek'] as $field) { self::assertTrue($reflection->getProperty($field)->isReadOnly()); @@ -161,21 +176,20 @@ public function testOmittedFlagsEmptyFormatEpochAndReadonlyUtf16Fields(): void self::assertSame(2, $entity->offset); } - public function testActualStrToolsPreservesTextWithoutInventingDateHtmlTags(): void + public function testActualStrToolsPreservesOfficialDateHtmlAndText(): void { foreach ([false, true] as $allowTags) { - self::assertSame('😀date<>', StrTools::entitiesToHtml('😀date<>', [self::raw(50, 2, 4)], $allowTags)); - self::assertSame('😀date<>', StrTools::entitiesToHtml('😀date<>', [ + self::assertSame($allowTags ? '😀date<>' : '😀date<>', StrTools::entitiesToHtml('😀date<>', [self::raw(50, 2, 4)], $allowTags)); + self::assertSame($allowTags ? '😀date<>' : '😀date<>', StrTools::entitiesToHtml('😀date<>', [ self::raw(50, 2, 4), ['_' => 'messageEntityBold', 'offset' => 2, 'length' => 4], ], $allowTags)); } } - public function testUnknownNativeEntityStillFailsAtTheOfficialFactory(): void + public function testOfficialUnknownNativeEntityPreservesForwardCompatiblePayload(): void { - $this->expectException(\AssertionError::class); - $this->expectExceptionMessage('Unknown entity type: messageEntityDeliberatelyUnknown'); - MessageEntity::fromRawEntity(['_' => 'messageEntityDeliberatelyUnknown', 'offset' => 0, 'length' => 1]); + $raw = ['_' => 'messageEntityDeliberatelyUnknown', 'offset' => 0, 'length' => 1]; + self::assertSame($raw, MessageEntity::fromRawEntity($raw)->toMTProto()); } public function testActualTemplateCaptureStorageUtf16ExpansionAndNativeSendRetainDateFields(): void @@ -192,11 +206,11 @@ public function testActualTemplateCaptureStorageUtf16ExpansionAndNativeSendRetai $editor = new TemplateEditor($app); self::assertTrue($editor->callback(['user_id' => '1', 'private' => true, 'query_id' => '42', 'message_id' => 900, 'data' => 'v3:templates:-1001'])); $messages = array_values(array_filter($transport->calls, static fn (array $call): bool => $call[0] === 'messages.editMessage' - && isset($call[1]['reply_markup']['rows'][0]['buttons'][0]['data']))); + && isset($call[1]['reply_markup']['rows'][0]['buttons'][0]['type']['data']))); self::assertNotEmpty($messages); self::assertSame('1', $messages[array_key_last($messages)][1]['peer']); self::assertSame(900, $messages[array_key_last($messages)][1]['id']); - $token = substr($messages[array_key_last($messages)][1]['reply_markup']['rows'][0]['buttons'][0]['data'], 9); + $token = substr($messages[array_key_last($messages)][1]['reply_markup']['rows'][0]['buttons'][0]['type']['data'], 9); $prefix = '/template ' . $token . "\n"; $prefixLength = intdiv(strlen(mb_convert_encoding($prefix, 'UTF-16LE', 'UTF-8')), 2); $captured = MessageEntity::fromRawEntity(self::raw(50, $prefixLength + 2)); @@ -204,23 +218,23 @@ public function testActualTemplateCaptureStorageUtf16ExpansionAndNativeSendRetai 'text' => $prefix . '😀{{date}}', 'entities' => [$captured->toMTProto()]])); $stored = $app->templates->get('-1001', 'close'); self::assertNotNull($stored); - self::assertSame([self::raw(50)], $stored['entities']); + self::assertEquals([self::raw(50)], $stored['entities']); $rendered = (new TemplateRenderer())->renderPayload($stored, ['date' => '2026-10-14']); self::assertSame('😀2026-10-14', $rendered['text']); - self::assertSame([self::raw(50, 2, 10)], $rendered['entities']); + self::assertEquals([self::raw(50, 2, 10)], $rendered['entities']); $before = count($transport->calls); $gateway->send('-1001', $rendered, '78901234'); self::assertCount($before + 1, $transport->calls); $sent = $transport->calls[array_key_last($transport->calls)]; self::assertSame('messages.sendMessage', $sent[0]); - self::assertSame([self::raw(50, 2, 10)], $sent[1]['entities']); + self::assertEquals([self::raw(50, 2, 10)], $sent[1]['entities']); self::assertArrayNotHasKey('parse_mode', $sent[1]); self::assertSame(78901234, $sent[1]['random_id']); // Reopen the saved template and preview by editing the same private bot panel. self::assertTrue($editor->callback(['user_id' => '1', 'private' => true, 'query_id' => '43', 'message_id' => 900, 'data' => 'v3:templates:-1001:close'])); $panels = array_values(array_filter($transport->calls, static fn(array $call): bool => $call[0] === 'messages.editMessage' - && isset($call[1]['reply_markup']['rows'][0]['buttons'][0]['data']))); - $previewToken = substr($panels[array_key_last($panels)][1]['reply_markup']['rows'][0]['buttons'][0]['data'], 9); + && isset($call[1]['reply_markup']['rows'][0]['buttons'][0]['type']['data']))); + $previewToken = substr($panels[array_key_last($panels)][1]['reply_markup']['rows'][0]['buttons'][0]['type']['data'], 9); $newSendsBefore = count(array_filter($transport->calls, static fn(array $call): bool => in_array($call[0], ['messages.sendMessage', 'messages.sendMedia'], true))); self::assertTrue($editor->callback(['user_id' => '1', 'private' => true, 'query_id' => '44', 'message_id' => 900, 'data' => 'tpl:preview:' . $previewToken])); $edits = array_values(array_filter($transport->calls, static fn(array $call): bool => $call[0] === 'messages.editMessage')); @@ -228,7 +242,7 @@ public function testActualTemplateCaptureStorageUtf16ExpansionAndNativeSendRetai self::assertSame('1', $preview['peer']); self::assertSame(900, $preview['id']); self::assertSame('😀2026-10-14', $preview['message']); - self::assertSame([self::raw(50, 2, 10)], $preview['entities']); + self::assertEquals([self::raw(50, 2, 10)], $preview['entities']); self::assertArrayNotHasKey('parse_mode', $preview); self::assertArrayNotHasKey('random_id', $preview); self::assertSame($newSendsBefore, count(array_filter($transport->calls, static fn(array $call): bool => in_array($call[0], ['messages.sendMessage', 'messages.sendMedia'], true)))); diff --git a/tests/FormattedDatePatchTest.php b/tests/FormattedDatePatchTest.php deleted file mode 100644 index 9d76e24..0000000 --- a/tests/FormattedDatePatchTest.php +++ /dev/null @@ -1,242 +0,0 @@ -fixture = sys_get_temp_dir() . '/shabbat-date-patch-' . bin2hex(random_bytes(8)); - $this->vendor = $this->fixture . '/vendor'; - $this->patches = $this->fixture . '/patches'; - $this->manifest = json_decode((string) file_get_contents($root . '/patches/madelineproto-formatted-date/manifest.json'), true, flags: JSON_THROW_ON_ERROR); - $this->factory = $this->vendor . '/danog/madelineproto/' . $this->manifest['target']; - $this->class = dirname($this->factory) . '/FormattedDate.php'; - mkdir(dirname($this->factory), 0700, true); - mkdir($this->vendor . '/composer', 0700); - mkdir($this->patches, 0700); - foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($root . '/patches/madelineproto-formatted-date', FilesystemIterator::SKIP_DOTS)) as $file) { - if (!$file->isFile()) { - continue; - } - $relative = substr($file->getPathname(), strlen($root . '/patches/madelineproto-formatted-date') + 1); - $target = $this->patches . '/' . $relative; - if (!is_dir(dirname($target))) { - mkdir(dirname($target), 0700, true); - } - copy($file->getPathname(), $target); - } - copy($this->patches . '/baseline/MessageEntity.php', $this->factory); - copy($this->patches . '/baseline/TL_telegram_v225.tl', $this->vendor . '/danog/madelineproto/src/TL_telegram_v225.tl'); - $this->installed(); - } - - protected function tearDown(): void - { - $resolved = realpath($this->fixture); - if ($resolved === false || !str_starts_with($resolved, realpath(sys_get_temp_dir()) . DIRECTORY_SEPARATOR . 'shabbat-date-patch-')) { - throw new RuntimeException('Date patch fixture cleanup escaped its private directory.'); - } - foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($resolved, FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST) as $file) { - $file->isLink() || !$file->isDir() ? unlink($file->getPathname()) : rmdir($file->getPathname()); - } - rmdir($resolved); - } - - private function installed(string $version = '8.7.0', string $commit = '7b99dd0f2d964a492c377912ffce9f5ce61aa9ed'): void - { - file_put_contents($this->vendor . '/composer/installed.json', json_encode(['packages' => [[ - 'name' => 'danog/madelineproto', 'version' => $version, 'source' => ['reference' => $commit], - ]]], JSON_THROW_ON_ERROR)); - } - - private function manager(): PatchManager - { - return new PatchManager(dirname(__DIR__), $this->vendor, $this->patches . '/manifest.json', $this->fixture . '/writer.lock'); - } - - private function refusal(): RuntimeException - { - $error = null; - try { - $this->manager()->process(true); - } catch (RuntimeException $caught) { - $error = $caught; - } - self::assertInstanceOf(RuntimeException::class, $error); - self::assertNotSame('', $error->getMessage()); - return $error; - } - - public function testPristineInstallRepeatAndVerificationCoverTheWholeSet(): void - { - self::assertSame('patched', $this->manager()->process(true)); - self::assertSame($this->manifest['approved'][0]['patched_sha256'], hash_file('sha256', $this->factory)); - self::assertSame($this->manifest['approved'][0]['added_files'][0]['patched_sha256'], hash_file('sha256', $this->class)); - $factory = file_get_contents($this->factory); - $class = file_get_contents($this->class); - self::assertSame('already-patched', $this->manager()->process(true)); - self::assertSame('already-patched', $this->manager()->process(false)); - self::assertSame($factory, file_get_contents($this->factory)); - self::assertSame($class, file_get_contents($this->class)); - } - - public function testVerificationRejectsTheEntirePristineSetWithoutMutation(): void - { - $before = file_get_contents($this->factory); - $error = null; - try { - $this->manager()->process(false); - } catch (RuntimeException $caught) { - $error = $caught; - } - self::assertInstanceOf(RuntimeException::class, $error); - self::assertSame($before, file_get_contents($this->factory)); - self::assertFileDoesNotExist($this->class); - } - - public function testUnknownVersionAndCommitNeverWrite(): void - { - foreach ([['8.6.5', '7b99dd0f2d964a492c377912ffce9f5ce61aa9ed'], ['8.7.0', str_repeat('0', 40)]] as [$version, $commit]) { - $this->installed($version, $commit); - self::assertStringContainsString('Unapproved', $this->refusal()->getMessage()); - self::assertSame(file_get_contents($this->patches . '/baseline/MessageEntity.php'), file_get_contents($this->factory)); - self::assertFileDoesNotExist($this->class); - } - } - - public function testClassOnlyAndFactoryOnlyStatesAreNotRepaired(): void - { - copy($this->patches . '/reviewed/FormattedDate.php', $this->class); - self::assertStringContainsString('Partial', $this->refusal()->getMessage()); - self::assertSame(file_get_contents($this->patches . '/baseline/MessageEntity.php'), file_get_contents($this->factory)); - unlink($this->class); - copy($this->patches . '/reviewed/MessageEntity.php', $this->factory); - self::assertStringContainsString('Partial', $this->refusal()->getMessage()); - self::assertFileDoesNotExist($this->class); - } - - public function testUnknownClassCannotBecomeUpstreamSupported(): void - { - copy($this->patches . '/reviewed/MessageEntity.php', $this->factory); - file_put_contents($this->class, "refusal()->getMessage()); - } - - public function testUnknownFactoryAndSchemaPreventAddedFileCreation(): void - { - file_put_contents($this->factory, "\n", FILE_APPEND); - self::assertStringContainsString('Unknown', $this->refusal()->getMessage()); - self::assertFileDoesNotExist($this->class); - copy($this->patches . '/baseline/MessageEntity.php', $this->factory); - file_put_contents($this->vendor . '/danog/madelineproto/src/TL_telegram_v225.tl', "\n", FILE_APPEND); - self::assertStringContainsString('prerequisite', $this->refusal()->getMessage()); - self::assertFileDoesNotExist($this->class); - } - - public static function artifacts(): array - { - return [['baseline/MessageEntity.php'], ['baseline/TL_telegram_v225.tl'], ['reviewed/MessageEntity.php'], ['reviewed/FormattedDate.php'], ['formatted-date-entity.patch'], ['upstream-LICENSE']]; - } - - #[DataProvider('artifacts')] - public function testEveryCorrespondingArtifactIsVerifiedEvenWhenAlreadyPatched(string $artifact): void - { - $this->manager()->process(true); - file_put_contents($this->patches . '/' . $artifact, "\n", FILE_APPEND); - self::assertStringContainsString('hash mismatch', $this->refusal()->getMessage()); - } - - public function testActiveWriterPreventsBothFileMutations(): void - { - $writer = SingleInstance::acquire($this->fixture . '/writer.lock'); - try { - self::assertStringContainsString('Another bot or maintenance', $this->refusal()->getMessage()); - self::assertFileDoesNotExist($this->class); - self::assertSame(file_get_contents($this->patches . '/baseline/MessageEntity.php'), file_get_contents($this->factory)); - } finally { - $writer->release(); - } - } - - public function testCompleteReadOnlyVerificationDoesNotRequireMutatingWriter(): void - { - $this->manager()->process(true); - $writer = SingleInstance::acquire($this->fixture . '/writer.lock'); - try { - self::assertSame('already-patched', $this->manager()->process(false)); - self::assertSame('already-patched', $this->manager()->process(true)); - } finally { - $writer->release(); - } - } - - public function testAddedDirectoryIsRefused(): void - { - mkdir($this->class); - self::assertStringContainsString('regular source file', $this->refusal()->getMessage()); - } - - private function createSymlink(string $target, string $link): bool - { - // A fresh PHP child has no SDK error handler; unsupported host privileges - // return an explicit skip status instead of changing global error handlers. - $process = proc_open( - [PHP_BINARY, '-r', 'exit(@symlink($argv[1], $argv[2]) ? 0 : 77);', '--', $target, $link], - [0 => ['pipe', 'r'], 1 => ['pipe', 'w'], 2 => ['pipe', 'w']], - $pipes - ); - if (!is_resource($process)) { - throw new RuntimeException('Unable to start the isolated symlink capability fixture.'); - } - fclose($pipes[0]); - stream_get_contents($pipes[1]); - $errors = stream_get_contents($pipes[2]); - fclose($pipes[1]); - fclose($pipes[2]); - $status = proc_close($process); - if (!in_array($status, [0, 77], true)) { - throw new RuntimeException('Symlink capability fixture failed: ' . $errors); - } - return $status === 0; - } - public function testExistingAndAddedSymlinksCannotBeVerifiedAsInstalledSources(): void - { - $outside = $this->fixture . '/outside.php'; - copy($this->patches . '/baseline/MessageEntity.php', $outside); - unlink($this->factory); - if (!$this->createSymlink($outside, $this->factory)) { - copy($outside, $this->factory); - self::markTestSkipped('This host does not permit creation of file symlink fixtures.'); - } - self::assertStringContainsString('regular package directory', $this->refusal()->getMessage()); - unlink($this->factory); - copy($this->patches . '/reviewed/MessageEntity.php', $this->factory); - copy($this->patches . '/reviewed/FormattedDate.php', $outside); - self::assertTrue($this->createSymlink($outside, $this->class)); - self::assertStringContainsString('regular package directory', $this->refusal()->getMessage()); - } -} diff --git a/tests/FreshPeerPatchTest.php b/tests/FreshPeerPatchTest.php index fe6e09b..7721c18 100644 --- a/tests/FreshPeerPatchTest.php +++ b/tests/FreshPeerPatchTest.php @@ -13,7 +13,7 @@ final class FreshPeerPatchTest extends TestCase { - private const COMMIT = '7b99dd0f2d964a492c377912ffce9f5ce61aa9ed'; + private const COMMIT = '49d3d8460257c7bfb1a7e12708e1bfdd59e898c1'; private string $root; private string $vendor; private string $target; @@ -35,7 +35,7 @@ protected function setUp(): void copy($source . $file, dirname($this->manifest) . '/' . $file); } copy($source . 'baseline/PeerHandler.php', $this->target); - $this->installed('8.7.0', self::COMMIT); + $this->installed('8.11.10', self::COMMIT); } protected function tearDown(): void @@ -98,7 +98,7 @@ public function testCleanRepeatedAndVerifyOnlyInstallationMatchReviewedSource(): public function testUnapprovedVersionOrCommitDoNotMutateSource(): void { $before = file_get_contents($this->target); - foreach ([['8.6.5', self::COMMIT], ['8.7.0', str_repeat('0', 40)]] as [$version, $commit]) { + foreach ([['8.6.5', self::COMMIT], ['8.11.10', str_repeat('0', 40)]] as [$version, $commit]) { $this->installed($version, $commit); $this->rejected(fn (): string => $this->installer()->process(true)); self::assertSame($before, file_get_contents($this->target)); diff --git a/tests/FreshPeerReaderTest.php b/tests/FreshPeerReaderTest.php index e564b35..dcbc976 100644 --- a/tests/FreshPeerReaderTest.php +++ b/tests/FreshPeerReaderTest.php @@ -33,18 +33,20 @@ public function testOnlyTheRawImmediateReplyIsUsedEvenWhenBothCacheRecordsAreSta self::assertArrayNotHasKey('send_photos', $harness->cached['default_banned_rights']); } - public function testActualPinnedGetInfoCanReturnMinAfterItAlreadyRefreshedItsCache(): void + public function testOfficialMinPeerRefreshIsFixedButRawFullReplyStillRequired(): void { $harness = new NativePeerReadHarness(); $harness->cached['min'] = true; unset($harness->cached['default_banned_rights']); - $oldResult = $harness->getInfo($harness->peer); - self::assertTrue($oldResult['Chat']['min']); - self::assertArrayNotHasKey('default_banned_rights', $oldResult['Chat']); - self::assertTrue($harness->cached['default_banned_rights']['invite_users']); + $result = $harness->getInfo($harness->peer); + self::assertFalse($result['Chat']['min'] ?? false); + self::assertTrue($result['Chat']['default_banned_rights']['invite_users']); self::assertSame(['channels.getChannels'], $harness->calls); - // Restart at the same minimal state, now exercise the production reader. - $harness->cached = $oldResult['Chat']; + self::assertArrayNotHasKey(FreshPeerReader::EVIDENCE_KEY, $result); + // getInfo now re-reads its min-peer cache. getFullInfo still needs the + // immediate full RPC reply to prove the origin of saved permissions. + $harness->cached['min'] = true; + unset($harness->cached['default_banned_rights']); $fresh = FreshPeerReader::read($harness->peer, Runner::settings(), $harness->getFullInfo(...)); self::assertFalse($fresh['Chat']['min'] ?? false); self::assertTrue($fresh['Chat']['default_banned_rights']['invite_users']); diff --git a/tests/GeoPointCompatibilityTest.php b/tests/GeoPointCompatibilityTest.php new file mode 100644 index 0000000..d775953 --- /dev/null +++ b/tests/GeoPointCompatibilityTest.php @@ -0,0 +1,34 @@ +getType()); + self::assertSame('float', (string)(new ReflectionProperty(GeoPoint::class, 'lat'))->getType()); + foreach ([[31.778, 35.235], [-33.8688, -151.2093], [0.0, 0.0], [90.0, -180.0], [0, 0]] as [$latitude, $longitude]) { + $geo = new GeoPoint(['long' => $longitude, 'lat' => $latitude, 'access_hash' => 123, 'accuracy_radius' => 7]); + self::assertSame((float)$latitude, $geo->lat); + self::assertSame((float)$longitude, $geo->long); + self::assertTrue(is_finite($geo->lat) && is_finite($geo->long)); + self::assertSame(123, $geo->accessHash); + self::assertSame(7, $geo->accuracyRadius); + $json = json_decode(json_encode($geo, JSON_THROW_ON_ERROR | JSON_PRESERVE_ZERO_FRACTION), true, 32, JSON_THROW_ON_ERROR); + self::assertSame((float)$latitude, $json['lat']); + self::assertSame((float)$longitude, $json['long']); + $roundtrip = new GeoPoint(['long' => $json['long'], 'lat' => $json['lat'], 'access_hash' => $json['accessHash'], 'accuracy_radius' => $json['accuracyRadius']]); + self::assertSame($geo->jsonSerialize(), $roundtrip->jsonSerialize()); + } + self::assertNull((new GeoPoint(['long' => 0, 'lat' => 0, 'access_hash' => 0]))->accuracyRadius); + } +} diff --git a/tests/GeoPointPatchTest.php b/tests/GeoPointPatchTest.php deleted file mode 100644 index 06d6888..0000000 --- a/tests/GeoPointPatchTest.php +++ /dev/null @@ -1,194 +0,0 @@ -root = sys_get_temp_dir() . '/shabbat-geopoint-patch-' . bin2hex(random_bytes(8)); - $this->vendor = $this->root . '/vendor'; - $this->target = $this->vendor . '/danog/madelineproto/src/EventHandler/Media/GeoPoint.php'; - $this->manifest = $this->root . '/patches/madelineproto-geopoint/manifest.json'; - $this->writer = $this->root . '/application.writer.lock'; - mkdir(dirname($this->target), 0700, true); - mkdir($this->vendor . '/composer', 0700, true); - mkdir(dirname($this->manifest) . '/baseline', 0700, true); - $source = dirname(__DIR__) . '/patches/madelineproto-geopoint/'; - foreach (['manifest.json', 'geopoint-double-coordinates.patch', 'baseline/GeoPoint.php'] as $file) { - copy($source . $file, dirname($this->manifest) . '/' . $file); - } - copy($source . 'baseline/GeoPoint.php', $this->target); - $this->installed('8.7.0', self::COMMIT); - } - - protected function tearDown(): void - { - $this->removeDirectory($this->root); - } - - private function removeDirectory(string $path): void - { - foreach (scandir($path) ?: [] as $entry) { - if ($entry === '.' || $entry === '..') { - continue; - } - $child = $path . '/' . $entry; - if (is_dir($child) && !is_link($child)) { - $this->removeDirectory($child); - } else { - unlink($child); - } - } - rmdir($path); - } - - private function installed(string $version, string $commit): void - { - file_put_contents($this->vendor . '/composer/installed.json', json_encode(['packages' => [ - ['name' => 'danog/madelineproto', 'version' => $version, 'source' => ['reference' => $commit]], - ]], JSON_THROW_ON_ERROR)); - } - - private function installer(): PatchManager - { - return new PatchManager($this->root, $this->vendor, $this->manifest, $this->writer); - } - - private function rejected(callable $operation): void - { - $error = null; - try { - $operation(); - } catch (RuntimeException $caught) { - $error = $caught; - } - self::assertInstanceOf(RuntimeException::class, $error); - } - - public function testCleanRepeatedAndVerifyOnlyInstallationMatchReviewedSource(): void - { - $this->rejected(fn (): string => $this->installer()->process(false)); - self::assertSame('patched', $this->installer()->process(true)); - $approved = json_decode(file_get_contents($this->manifest), true, 64, JSON_THROW_ON_ERROR)['approved'][0]; - self::assertSame($approved['patched_sha256'], hash_file('sha256', $this->target)); - self::assertSame(file_get_contents(dirname(__DIR__) . '/patches/madelineproto-geopoint/reviewed/GeoPoint.php'), file_get_contents($this->target)); - $before = file_get_contents($this->target); - self::assertSame('already-patched', $this->installer()->process(true)); - self::assertSame('already-patched', $this->installer()->process(false)); - self::assertSame($before, file_get_contents($this->target)); - } - - public function testUnapprovedVersionOrCommitDoNotMutateSource(): void - { - $before = file_get_contents($this->target); - foreach ([['8.6.5', self::COMMIT], ['8.7.0', str_repeat('0', 40)]] as [$version, $commit]) { - $this->installed($version, $commit); - $this->rejected(fn (): string => $this->installer()->process(true)); - self::assertSame($before, file_get_contents($this->target)); - } - } - - public function testUnknownAndPartiallyCorrectedSourceFailClosed(): void - { - $baseline = file_get_contents($this->target); - $partial = str_replace('public readonly int $long;', 'public readonly float $long;', $baseline); - foreach ([$baseline . "\n// unreviewed bytes\n", $partial] as $changed) { - file_put_contents($this->target, $changed); - $this->rejected(fn (): string => $this->installer()->process(true)); - $this->rejected(fn (): string => $this->installer()->process(false)); - self::assertSame($changed, file_get_contents($this->target)); - } - } - - public function testBaselineAndDiffHashesAreRequiredEvenForAlreadyPatchedTarget(): void - { - self::assertSame('patched', $this->installer()->process(true)); - $before = file_get_contents($this->target); - foreach (['baseline/GeoPoint.php', 'geopoint-double-coordinates.patch'] as $artifact) { - $path = dirname($this->manifest) . '/' . $artifact; - $original = file_get_contents($path); - file_put_contents($path, $original . "\n"); - $this->rejected(fn (): string => $this->installer()->process(false)); - $this->rejected(fn (): string => $this->installer()->process(true)); - self::assertSame($before, file_get_contents($this->target)); - file_put_contents($path, $original); - } - } - - public function testActiveWriterPreventsSourceMutation(): void - { - $before = file_get_contents($this->target); - $writer = SingleInstance::acquire($this->writer); - try { - $this->rejected(fn (): string => $this->installer()->process(true)); - self::assertSame($before, file_get_contents($this->target)); - } finally { - $writer->release(); - } - self::assertSame('patched', $this->installer()->process(true)); - } - - public function testPristineConstructorReproducesFractionalCoordinateTypeError(): void - { - $code = <<<'PHP' -require $argv[1]; -try { - new \danog\MadelineProto\EventHandler\Media\GeoPoint(['long' => 35.235, 'lat' => 31.778, 'access_hash' => 0]); -} catch (\TypeError $error) { - echo 'confirmed-type-error'; - exit(0); -} -exit(1); -PHP; - $process = proc_open([PHP_BINARY, '-r', $code, dirname($this->manifest) . '/baseline/GeoPoint.php'], [ - 0 => ['pipe', 'r'], 1 => ['pipe', 'w'], 2 => ['pipe', 'w'], - ], $pipes); - self::assertIsResource($process); - fclose($pipes[0]); - $output = stream_get_contents($pipes[1]); - $error = stream_get_contents($pipes[2]); - fclose($pipes[1]); - fclose($pipes[2]); - self::assertSame(0, proc_close($process), $error); - self::assertSame('confirmed-type-error', $output); - } - - public function testActualPatchedConstructorPreservesFiniteCoordinatesAndJsonRoundtrip(): void - { - self::assertSame('float', (string)(new ReflectionProperty(GeoPoint::class, 'long'))->getType()); - self::assertSame('float', (string)(new ReflectionProperty(GeoPoint::class, 'lat'))->getType()); - foreach ([[31.778, 35.235], [-33.8688, -151.2093], [0.0, 0.0], [90.0, -180.0], [0, 0]] as [$latitude, $longitude]) { - $geo = new GeoPoint(['long' => $longitude, 'lat' => $latitude, 'access_hash' => 123, 'accuracy_radius' => 7]); - self::assertSame((float)$latitude, $geo->lat); - self::assertSame((float)$longitude, $geo->long); - self::assertTrue(is_finite($geo->lat) && is_finite($geo->long)); - self::assertSame(123, $geo->accessHash); - self::assertSame(7, $geo->accuracyRadius); - $json = json_decode(json_encode($geo, JSON_THROW_ON_ERROR | JSON_PRESERVE_ZERO_FRACTION), true, 32, JSON_THROW_ON_ERROR); - self::assertSame((float)$latitude, $json['lat']); - self::assertSame((float)$longitude, $json['long']); - $roundtrip = new GeoPoint(['long' => $json['long'], 'lat' => $json['lat'], 'access_hash' => $json['accessHash'], 'accuracy_radius' => $json['accuracyRadius']]); - self::assertSame($geo->jsonSerialize(), $roundtrip->jsonSerialize()); - } - self::assertNull((new GeoPoint(['long' => 0, 'lat' => 0, 'access_hash' => 0]))->accuracyRadius); - } -} diff --git a/tests/GroupModerationStorageTest.php b/tests/GroupModerationStorageTest.php index d31e235..ee6854c 100644 --- a/tests/GroupModerationStorageTest.php +++ b/tests/GroupModerationStorageTest.php @@ -36,11 +36,11 @@ protected function setUp(): void } public function testRestrictionCatalogExactlyMatchesLockedNativeSchema(): void { - $tl = file_get_contents(dirname(__DIR__) . '/vendor/danog/madelineproto/src/TL_telegram_v225.tl'); + $tl = file_get_contents((new \danog\MadelineProto\Settings\TLSchema())->getAPISchema()); self::assertSame(1, preg_match('/^chatBannedRights#[^\n]+/m', $tl, $line)); preg_match_all('/([a-z_]+):flags\.\d+\?true/', $line[0], $matches); self::assertSame($matches[1], Permissions::FLAGS); - self::assertCount(22, Permissions::FLAGS); + self::assertCount(23, Permissions::FLAGS); self::assertCount(21, Permissions::DEFAULT_BLOCK_FLAGS); self::assertNotContains('view_messages', Permissions::DEFAULT_BLOCK_FLAGS); self::assertSame(Permissions::DEFAULT_BLOCK_FLAGS, $this->settings->getGroup('-1')['lock_block_flags']); diff --git a/tests/InlineSerializationTest.php b/tests/InlineSerializationTest.php index 0ec26e0..6d9ef94 100644 --- a/tests/InlineSerializationTest.php +++ b/tests/InlineSerializationTest.php @@ -116,9 +116,9 @@ public function get(string $url, array $query = [], ?Cancellation $cancellation $ensure(($markup['_'] ?? '') === 'replyInlineMarkup' && ($markup['rows'] ?? []) !== [], 'Bound message has no nonempty inline markup.'); $buttons = array_merge(...array_column($markup['rows'], 'buttons')); $ensure(count($buttons) === 2, 'Expected exactly a selection callback and private deep link.'); - $ensure($buttons[0]['_'] === 'keyboardButtonCallback', 'Wrong native selection button.'); - $ensure(str_starts_with((string)$buttons[0]['data'], 'sb:lp:'), 'Selection flow identity changed.'); - $ensure($buttons[1]['_'] === 'keyboardButtonUrl' && str_starts_with($buttons[1]['url'], 'https://t.me/FixtureShabbatBot?start=loc_'), 'Wrong native confirmation link.'); + $ensure($buttons[0]['_'] === 'keyboardInlineButton' && $buttons[0]['type']['_'] === 'inlineButtonTypeCallback', 'Wrong native selection button.'); + $ensure(str_starts_with((string)$buttons[0]['type']['data'], 'sb:lp:'), 'Selection flow identity changed.'); + $ensure($buttons[1]['_'] === 'keyboardInlineButton' && $buttons[1]['type']['_'] === 'inlineButtonTypeUrl' && str_starts_with($buttons[1]['type']['url'], 'https://t.me/FixtureShabbatBot?start=loc_'), 'Wrong native confirmation link.'); } $cases[$case] = ['results' => count($decoded['results']), 'wire_bytes' => $bytes, 'wire_sha256' => $sha, 'reply_markup_present' => true, 'buttons_per_result' => 2]; } diff --git a/tests/KeyboardCompatibilityTest.php b/tests/KeyboardCompatibilityTest.php new file mode 100644 index 0000000..ae203df --- /dev/null +++ b/tests/KeyboardCompatibilityTest.php @@ -0,0 +1,272 @@ + ['url' => 'https://example.org/a'], + 'keyboardButtonCallback' => ['data' => "binding:\0\xFF", 'requires_password' => true], + 'keyboardButtonSwitchInline' => ['query' => '', 'same_peer' => true, 'peer_types' => [['_' => 'inlineQueryPeerTypePM']]], + 'keyboardButtonCopy' => ['copy_text' => 'Copy me'], + 'keyboardButtonWebView' => ['url' => 'https://example.org/app'], + 'keyboardButtonBuy' => [], + 'keyboardButtonGame' => [], + 'keyboardButtonUrlAuth' => ['url' => 'https://example.org/login', 'button_id' => 7, 'fwd_text' => 'Forward'], + 'inputKeyboardButtonUrlAuth' => ['url' => 'https://example.org/login', 'bot' => ['_' => 'inputUserSelf'], 'request_write_access' => true], + 'keyboardButtonUserProfile' => ['user_id' => 12345678], + 'inputKeyboardButtonUserProfile' => ['user_id' => ['_' => 'inputUserSelf']], + ]; + $types = ['Url', 'Callback', 'SwitchInline', 'Copy', 'WebView', 'Buy', 'Game', 'UrlAuth', 'UrlAuth', 'UserProfile', 'UserProfile']; + foreach ($legacy as $constructor => $fields) { + $type = (str_starts_with($constructor, 'input') ? 'inputInlineButtonType' : 'inlineButtonType') . array_shift($types); + yield $constructor => [['_' => $constructor, 'text' => 'Fixture'] + $fields, $type]; + } + foreach ( + [ + 'url' => ['url' => 'https://example.org/a'], + 'callback' => ['callback_data' => 'sb:help:calendar'], + 'copy' => ['copy_text' => ['text' => 'Copy me']], + 'copy-legacy-string' => ['copy_text' => 'Copy me'], + 'switch-empty' => ['switch_inline_query' => ''], + 'switch-current' => ['switch_inline_query_current_chat' => 'loc '], + 'chosen-chat' => ['switch_inline_query_chosen_chat' => ['query' => 'Search','allow_user_chats' => true,'allow_group_chats' => true]], + 'web-app' => ['web_app' => ['url' => 'https://example.org/app']], + 'login-url' => ['login_url' => ['url' => 'https://example.org/login','bot_username' => ['_' => 'inputUserSelf'],'forward_text' => 'Forward','request_write_access' => true]], + 'payment' => ['pay' => true], + 'game' => ['callback_game' => []], + ] as $name => $fields + ) { + $expected = match ($name) { + 'url'=>'Url', 'callback'=>'Callback', 'copy','copy-legacy-string'=>'Copy', + 'switch-empty','switch-current','chosen-chat'=>'SwitchInline', + 'web-app'=>'WebView', 'login-url'=>'UrlAuth', 'payment'=>'Buy', default=>'Game', + }; + yield $name => [['text' => 'Fixture'] + $fields, ($name === 'login-url' ? 'inputInlineButtonType' : 'inlineButtonType') . $expected]; + } + yield 'legacy-native-http' => [['_' => 'keyboardButtonUrl', 'text' => 'Legacy HTTP', 'url' => 'http://example.org/retained'], 'inlineButtonTypeUrl']; + yield 'current-native-http' => [['_' => 'keyboardInlineButton', 'text' => 'Current HTTP', 'type' => ['_' => 'inlineButtonTypeUrl', 'url' => 'http://example.org/retained']], 'inlineButtonTypeUrl']; + yield 'login-without-bot' => [['text' => 'Current bot login', 'login_url' => ['url' => 'https://example.org/login']], 'inputInlineButtonTypeUrlAuth']; + yield 'current-disabled' => [['_' => 'keyboardInlineButton','text' => 'Disabled','type' => ['_' => 'inlineButtonTypeDisabled']], 'inlineButtonTypeDisabled']; + } + + #[DataProvider('inlineFormats')] + public function testLegacyAndBotApiActionsRoundTripThroughOfficialLockedLayer(array $button, string $expected): void + { + $button['style'] = ['_' => 'keyboardButtonStyle','bg_success' => true,'icon' => '5944970388252402183']; + $source = ['_' => 'replyInlineMarkup','rows' => [['_' => 'keyboardButtonRow','buttons' => [$button]]]]; + $before = $source; + $native = KeyboardMarkup::normalize($source); + self::assertSame($before, $source, 'Conversion must not mutate retained templates.'); + self::assertSame('keyboardInlineButtonRow', $native['rows'][0]['_']); + self::assertSame('keyboardInlineButton', $native['rows'][0]['buttons'][0]['_']); + self::assertSame($expected, $native['rows'][0]['buttons'][0]['type']['_']); + self::assertSame($native, KeyboardMarkup::normalize($native)); + $decoded = $this->wire($native); + $actual = $decoded['rows'][0]['buttons'][0]; + self::assertSame($expected, $actual['type']['_']); + self::assertTrue($actual['style']['bg_success']); + self::assertSame(5944970388252402183, $actual['style']['icon']); + if (isset($button['login_url']) && !array_key_exists('bot_username', $button['login_url'])) { + self::assertArrayNotHasKey('bot', $native['rows'][0]['buttons'][0]['type']); + self::assertArrayNotHasKey('bot', $actual['type'], 'The optional bot field must follow the official current-bot default.'); + } + if (isset($button['url']) && str_starts_with($button['url'], 'http://')) { + self::assertSame($button['url'], $actual['type']['url']); + } + if ($expected === 'inlineButtonTypeCallback') { + self::assertSame($button['data'] ?? $button['callback_data'], (string)$actual['type']['data']); + } + } + + public static function replyFormats(): iterable + { + yield 'text' => [['text' => 'Text'], 'buttonTypeDefault']; + yield 'contact' => [['text' => 'Contact','request_contact' => true], 'buttonTypeRequestPhone']; + yield 'gps' => [['text' => 'GPS','request_location' => true], 'buttonTypeRequestGeoLocation']; + yield 'poll' => [['text' => 'Poll','request_poll' => ['type' => 'quiz']], 'buttonTypeRequestPoll']; + yield 'webapp' => [['text' => 'App','web_app' => ['url' => 'https://example.org/app']], 'buttonTypeSimpleWebView']; + yield 'legacy-gps' => [['_' => 'keyboardButtonRequestGeoLocation','text' => 'GPS'], 'buttonTypeRequestGeoLocation']; + yield 'legacy-peer' => [['_' => 'inputKeyboardButtonRequestPeer','text' => 'Choose','button_id' => 17,'max_quantity' => 3,'peer_type' => ['_' => 'requestPeerTypeUser','bot' => false],'name_requested' => true], 'inputButtonTypeRequestPeer']; + yield 'current' => [['_' => 'keyboardButton','text' => 'GPS','type' => ['_' => 'buttonTypeRequestGeoLocation']], 'buttonTypeRequestGeoLocation']; + } + + #[DataProvider('replyFormats')] + public function testReplyKeyboardsStayReplyKeyboards(array $button, string $type): void + { + $native = KeyboardMarkup::normalize(['keyboard' => [[$button]],'resize_keyboard' => true,'one_time_keyboard' => true,'is_persistent' => false,'input_field_placeholder' => 'Search']); + self::assertSame('replyKeyboardMarkup', $native['_']); + self::assertSame('keyboardButtonRow', $native['rows'][0]['_']); + self::assertTrue($native['resize']); + self::assertTrue($native['single_use']); + $decoded = $this->wire($native); + self::assertSame('keyboardButton', $decoded['rows'][0]['buttons'][0]['_']); + self::assertSame($type, $decoded['rows'][0]['buttons'][0]['type']['_']); + self::assertSame('Search', $decoded['placeholder']); + } + + public function testHideForceReplyAndEmptyInlineRemainDistinct(): void + { + self::assertSame('replyKeyboardHide', $this->wire(KeyboardMarkup::normalize(['remove_keyboard' => true,'selective' => true]))['_']); + self::assertSame('replyKeyboardForceReply', $this->wire(KeyboardMarkup::normalize(['force_reply' => true,'input_field_placeholder' => 'Reply']))['_']); + self::assertSame(['_' => 'replyInlineMarkup','rows' => []], KeyboardMarkup::normalize(['inline_keyboard' => []])); + self::assertSame([], KeyboardMarkup::normalize([])); + } + + public static function invalid(): iterable + { + yield 'unknown-markup' => [['_' => 'inventedMarkup','force_reply' => true]]; + yield 'mixed-typed-action' => [['inline_keyboard' => [[['_' => 'keyboardInlineButton','text' => 'Bad','type' => ['_' => 'inlineButtonTypeBuy'],'url' => 'https://example.org']]]]]; + yield 'mixed-keyboards' => [['inline_keyboard' => [],'keyboard' => []]]; + yield 'reply-in-inline' => [['inline_keyboard' => [[['text' => 'GPS','request_location' => true]]]]]; + yield 'inline-in-reply' => [['keyboard' => [[['text' => 'Link','url' => 'https://example.org']]]]]; + yield 'reply-type-in-inline' => [['_' => 'replyInlineMarkup','rows' => [['_' => 'keyboardInlineButtonRow','buttons' => [['_' => 'keyboardInlineButton','text' => 'Bad','type' => ['_' => 'buttonTypeRequestPhone']]]]]]]; + yield 'inline-row-in-reply' => [['_' => 'replyKeyboardMarkup','rows' => [['_' => 'keyboardInlineButtonRow','buttons' => [['text' => 'Bad']]]]]]; + yield 'ambiguous' => [['inline_keyboard' => [[['text' => 'Bad','url' => 'https://example.org','callback_data' => 'x']]]]]; + yield 'overlong-callback' => [['inline_keyboard' => [[['text' => 'Bad','callback_data' => str_repeat('x', 65)]]]]]; + yield 'empty-callback' => [['inline_keyboard' => [[['text' => 'Bad','callback_data' => '']]]]]; + yield 'unknown-constructor' => [['inline_keyboard' => [[['_' => 'keyboardButtonInvented','text' => 'Bad']]]]]; + yield 'flat-http-policy' => [['inline_keyboard' => [[['text' => 'New flat HTTP', 'url' => 'http://example.org/']]]]]; + yield 'missing-url-authority-prefix' => [['inline_keyboard' => [[['text' => 'Malformed URL', 'url' => 'https:example.org']]]]]; + yield 'unsafe-url' => [['inline_keyboard' => [[['text' => 'Bad','url' => 'javascript:alert(1)']]]]]; + yield 'conflicting-colors' => [['inline_keyboard' => [[['text' => 'Bad','callback_data' => 'x','style' => ['bg_primary' => true,'bg_danger' => true]]]]]]; + yield 'unknown-action' => [['inline_keyboard' => [[['_' => 'keyboardInlineButton','text' => 'Bad','type' => ['_' => 'inlineButtonTypeInvented']]]]]]; + } + + #[DataProvider('invalid')] + public function testMalformedAndCrossContextMarkupFailsClosed(array $markup): void + { + $this->expectException(\InvalidArgumentException::class); + KeyboardMarkup::normalize($markup); + } + + public function testStoredOldAndCurrentTemplateJsonIsReadWithoutRewriting(): void + { + $db = Database::open(':memory:'); + $db->migrate(); + $clock = new FrozenClock(new \DateTimeImmutable('2026-10-21T12:00:00Z')); + $settings = new SettingsRepository($db, $clock); + $settings->ensureGroup('-1001', 'Group'); + $templates = new TemplateRepository($db, $clock); + $old = ['_' => 'replyInlineMarkup','rows' => [['_' => 'keyboardButtonRow','buttons' => [['_' => 'keyboardButtonCopy','text' => 'Copy','copy_text' => 'Legacy','style' => ['bg_primary' => true]]]]]]; + foreach ([$old,KeyboardMarkup::normalize($old)] as $index => $buttons) { + $kind = $index === 0 ? 'close' : 'open'; + $templates->save('-1001', $kind, ['text' => 'Text','buttons' => $buttons], '1'); + $before = $db->pdo()->query("SELECT buttons_json FROM message_templates WHERE kind='" . $kind . "'")->fetchColumn(); + $loaded = $templates->get('-1001', $kind); + TemplateRenderer::validateButtons($loaded['buttons']); + self::assertSame('inlineButtonTypeCopy', KeyboardMarkup::normalize(['inline_keyboard' => $loaded['buttons']])['rows'][0]['buttons'][0]['type']['_']); + self::assertSame($before, $db->pdo()->query("SELECT buttons_json FROM message_templates WHERE kind='" . $kind . "'")->fetchColumn()); + } + } + + public function testStartAndNavigationEmitValidTypedKeyboardsAndEditTheSamePanel(): void + { + $db = Database::open(':memory:'); + $db->migrate(); + $clock = new FrozenClock(new \DateTimeImmutable('2026-10-21T12:00:00Z')); + $settings = new SettingsRepository($db, $clock); + $flows = new FlowTokenRepository($db, $clock); + $http = new class implements JsonClient { + public function get(string $url, array $query = [], ?Cancellation $cancellation = null): array + { + throw new \RuntimeException('Network forbidden in keyboard test.'); + } + }; + $transport = new GatewayFixtureTransport(); + $gateway = new MadelineGateway($transport, false); + $ui = new BotController($settings, $flows, new CalendarService(new HebcalProvider($http), $clock), $gateway, new GeoNames($http, $clock, ''), $clock); + $ui->handleMessage(['user_id' => '1','private' => true,'text' => '/start']); + $sent = array_values(array_filter($transport->calls, static fn(array $call): bool=>$call[0] === 'messages.sendMessage')); + self::assertCount(1, $sent); + self::assertSame('1', $sent[0][1]['peer']); + $markup = $this->wire($sent[0][1]['reply_markup']); + $actions = array_merge(...array_column($markup['rows'], 'buttons')); + self::assertContains('sb:help', array_map(static fn(array $b): string=>(string)($b['type']['data'] ?? ''), $actions)); + self::assertContains('inlineButtonTypeUrl', array_column(array_column($actions, 'type'), '_')); + foreach (['sb:help','sb:help:calendar','sb:start','sb:personal'] as $index => $data) { + self::assertTrue($ui->handleCallback(['user_id' => '1','chat_id' => '1','private' => true,'message_id' => 707,'query_id' => (string)(900 + $index),'data' => $data])); + } + $edits = array_values(array_filter($transport->calls, static fn(array $call): bool=>$call[0] === 'messages.editMessage')); + self::assertCount(4, $edits); + foreach ($edits as $edit) { + self::assertSame(707, $edit[1]['id']); + self::assertSame('1', $edit[1]['peer']); + self::assertNotEmpty($this->wire($edit[1]['reply_markup'])['rows']); + } + self::assertCount(1, array_filter($transport->calls, static fn(array $call): bool=>$call[0] === 'messages.sendMessage')); + } + + public function testNestedInlineResultsAndBroadcastMediaUseTheSameBoundary(): void + { + $markup = ['inline_keyboard' => [[['text' => 'Copy','copy_text' => ['text' => 'Snapshot'],'style' => 'success']]]]; + $parameters = ['message' => 'Body','random_id' => 123,'entities' => [['_' => 'messageEntityBold','offset' => 0,'length' => 4]],'reply_markup' => $markup, + 'multi_media' => [['message' => 'Caption','random_id' => 456,'reply_markup' => $markup]], + 'results' => [['id' => 'identity','send_message' => ['message' => 'Inline','reply_markup' => $markup]]]]; + $normalized = KeyboardMarkup::parameters($parameters); + foreach ([$normalized,$normalized['multi_media'][0],$normalized['results'][0]['send_message']] as $body) { + self::assertSame('inlineButtonTypeCopy', $this->wire($body['reply_markup'])['rows'][0]['buttons'][0]['type']['_']); + } + self::assertSame(123, $normalized['random_id']); + self::assertSame(456, $normalized['multi_media'][0]['random_id']); + self::assertSame($parameters['entities'], $normalized['entities']); + self::assertSame('identity', $normalized['results'][0]['id']); + } + private function wire(array $markup): array + { + $previous = Logger::$default; + try { + $api = (new \ReflectionClass(MTProto::class))->newInstanceWithoutConstructor(); + $api->settings = new \danog\MadelineProto\Settings(); + $api->logger = new Logger((new \danog\MadelineProto\Settings\Logger())->setType(Logger::CALLABLE_LOGGER)->setExtra(static function (): void { + })); + $tl = new TL($api); + $tl->init(new TLSchema()); + $wire = $tl->serializeObject(['type' => 'ReplyMarkup'], $markup, 'reply_markup'); + $stream = fopen('php://memory', 'w+b'); + fwrite($stream, $wire); + rewind($stream); + $decoded = $tl->deserialize($stream, ['type' => 'ReplyMarkup','connection' => null,'encrypted' => false]); + self::assertSame(strlen($wire), ftell($stream)); + fclose($stream); + return $decoded; + } finally { + $tl = null; + $api = null; + Logger::$default = $previous; + } + } +} diff --git a/tests/LegacyImportVerificationTest.php b/tests/LegacyImportVerificationTest.php new file mode 100644 index 0000000..495c130 --- /dev/null +++ b/tests/LegacyImportVerificationTest.php @@ -0,0 +1,245 @@ +root = sys_get_temp_dir() . '/shabbat-import-review-' . bin2hex(random_bytes(8)); + mkdir($this->root . '/data/-1001', 0700, true); + mkdir($this->root . '/data/17', 0700); + file_put_contents($this->root . '/data/DBgroups.txt', "-1001\n"); + file_put_contents($this->root . '/data/-1001/MsgCloser.txt', "Group text\r\n"); + file_put_contents($this->root . '/data/-1001/alertshabat.txt', '1'); + file_put_contents($this->root . '/data/-1001/alertshabat2.txt', '1'); + file_put_contents($this->root . '/data/17/txt.txt', "Private draft\r\n"); + file_put_contents($this->root . '/data/17/ent.txt', '{malformed'); + file_put_contents($this->root . '/data/17/groupid.txt', '-1001'); + file_put_contents($this->root . '/ids.txt', "17\n17\n-1001\n"); + $this->db = Database::open(':memory:'); + $this->db->migrate(); + $this->clock = new FrozenClock(new DateTimeImmutable('2026-10-21T09:00:00Z')); + } + + protected function tearDown(): void + { + $resolved = realpath($this->root); + $prefix = realpath(sys_get_temp_dir()) . DIRECTORY_SEPARATOR . 'shabbat-import-review-'; + if ($resolved === false || !str_starts_with($resolved, $prefix)) { + throw new \RuntimeException('Fixture cleanup escaped its temporary directory.'); + } + $this->removeTree($resolved); + } + + private function removeTree(string $path): void + { + foreach (scandir($path) ?: [] as $name) { + if ($name === '.' || $name === '..') { + continue; + } + $child = $path . '/' . $name; + if (is_dir($child) && !is_link($child)) { + $this->removeTree($child); + } else { + unlink($child); + } + } + rmdir($path); + } + + public function testPreviewAndApplyIncludeIdenticalPrivateTemplateWarningsAndVerifyValues(): void + { + $importer = new LegacyImporter($this->db, $this->clock); + $preview = $importer->run($this->root); + self::assertSame(2, $preview['counts']['templates']); + self::assertSame('not_applied', $preview['verification']['status']); + self::assertStringContainsString('malformed JSON', implode("\n", $preview['warnings'])); + self::assertSame(0, (int)$this->db->pdo()->query('SELECT COUNT(*) FROM groups')->fetchColumn()); + $applied = $importer->run($this->root, false, $preview); + self::assertSame($preview['templates'], $applied['templates']); + self::assertSame($preview['warnings'], $applied['warnings']); + self::assertSame($preview['plan_sha256'], $applied['plan_sha256']); + self::assertSame('passed', $applied['verification']['status']); + self::assertGreaterThan(0, $applied['verification']['inserted_records']); + self::assertSame("Private draft\r\n", $this->db->pdo()->query("SELECT text FROM message_templates WHERE user_id='17'")->fetchColumn()); + self::assertSame('{malformed', $this->db->pdo()->query("SELECT value_text FROM admin_state WHERE user_id='17' AND state_key='ent.txt'")->fetchColumn()); + self::assertSame(0, (int)$this->db->pdo()->query('SELECT COUNT(*) FROM conversation_states')->fetchColumn()); + } + + public function testChangedLegacySourceAfterPreviewIsRejectedBeforeApplicationWrites(): void + { + $importer = new LegacyImporter($this->db, $this->clock); + $preview = $importer->run($this->root); + file_put_contents($this->root . '/data/17/txt.txt', 'Changed after operator review'); + try { + $importer->run($this->root, false, $preview); + self::fail('Changed source was accepted.'); + } catch (\RuntimeException $error) { + self::assertStringContainsString('no longer matches', $error->getMessage()); + } + foreach (['groups','users','message_templates','admin_state','legacy_imports'] as $table) { + self::assertSame(0, (int)$this->db->pdo()->query('SELECT COUNT(*) FROM ' . $table)->fetchColumn()); + } + } + + public function testChangedDestinationAfterPreviewIsRejectedAndEditedPreferencesSurvive(): void + { + $settings = new SettingsRepository($this->db, $this->clock); + $settings->ensureGroup('-1001'); + $importer = new LegacyImporter($this->db, $this->clock); + $preview = $importer->run($this->root); + $settings->updateGroup('-1001', 1, ['language' => 'en','mode' => 'messages'], '17'); + try { + $importer->run($this->root, false, $preview); + self::fail('Changed destination was accepted.'); + } catch (\RuntimeException $error) { + self::assertStringContainsString('no longer matches', $error->getMessage()); + } + self::assertSame('en', $settings->getGroup('-1001')['language']); + self::assertSame(0, (int)$this->db->pdo()->query('SELECT COUNT(*) FROM message_templates')->fetchColumn()); + $reviewed = $importer->run($this->root); + self::assertContains('language', $reviewed['groups'][0]['different_settings']); + $applied = $importer->run($this->root, false, $reviewed); + self::assertSame('passed', $applied['verification']['status']); + self::assertSame('messages', $settings->getGroup('-1001')['mode']); + } + + public function testDuplicatesInvalidIdentifiersAndOrphanDirectoriesAreExplicit(): void + { + file_put_contents($this->root . '/data/DBgroups.txt', "-1001\n-1001\n0\n-0\n001\n-01001\n9223372036854775808\n-9223372036854775809\n"); + mkdir($this->root . '/data/-1002', 0700); + file_put_contents($this->root . '/data/-1002/MsgCloser.txt', 'Old removed subscription'); + $report = (new LegacyImporter($this->db, $this->clock))->run($this->root, false); + self::assertSame(['-1001'], array_column($report['groups'], 'group_id')); + self::assertSame(['-1002'], $report['orphan_group_directories']); + self::assertSame([ + ['source' => 'DBgroups.txt','identifier' => '-1001','action' => 'deduplicated'], + ['source' => 'ids.txt','identifier' => '17','action' => 'deduplicated'], + ], $report['duplicates']); + self::assertSame(['-1001'], $this->db->pdo()->query('SELECT group_id FROM groups')->fetchAll(\PDO::FETCH_COLUMN)); + self::assertFileExists($this->root . '/data/-1002/MsgCloser.txt'); + self::assertSame(6, count(array_filter($report['warnings'], static fn(string $warning): bool => str_starts_with($warning, 'Skipped invalid group identifier')))); + } + + public function testRepeatImportPreservesEditedTemplatesDraftsAndPreferences(): void + { + $importer = new LegacyImporter($this->db, $this->clock); + $importer->run($this->root, false); + $this->db->pdo()->exec("UPDATE message_templates SET text='Edited live template' WHERE group_id='-1001'"); + $this->db->pdo()->exec("UPDATE admin_state SET value_text='Edited live draft' WHERE user_id='17' AND state_key='txt.txt'"); + $before = $this->db->pdo()->query('SELECT * FROM message_templates ORDER BY template_id')->fetchAll(); + $preview = $importer->run($this->root); + self::assertFalse($preview['templates'][0]['matches_source']); + $report = $importer->run($this->root, false, $preview); + self::assertSame(0, $report['verification']['inserted_records']); + self::assertGreaterThan(0, $report['verification']['preserved_records']); + self::assertSame($before, $this->db->pdo()->query('SELECT * FROM message_templates ORDER BY template_id')->fetchAll()); + self::assertSame('Edited live draft', $this->db->pdo()->query("SELECT value_text FROM admin_state WHERE user_id='17' AND state_key='txt.txt'")->fetchColumn()); + } + + public function testLateUnreadableInputFailsPreflightBeforeAnyApplicationRecord(): void + { + file_put_contents($this->root . '/data/17/txt.txt', str_repeat('x', 2 * 1024 * 1024 + 1)); + try { + (new LegacyImporter($this->db, $this->clock))->run($this->root, false); + self::fail('Oversized input was accepted.'); + } catch (\RuntimeException $error) { + self::assertStringContainsString('too large', $error->getMessage()); + } + self::assertSame(0, (int)$this->db->pdo()->query('SELECT COUNT(*) FROM groups')->fetchColumn()); + self::assertSame(0, (int)$this->db->pdo()->query('SELECT COUNT(*) FROM legacy_imports')->fetchColumn()); + } + + public function testImportedPermissionSnapshotRemainsUntrustedAndRecoveryRequired(): void + { + file_put_contents($this->root . '/data/-1001/chatb1.json', '{"_":"chatBannedRights","until_date":0,"send_messages":false}'); + $report = (new LegacyImporter($this->db, $this->clock))->run($this->root, false); + $row = $this->db->pdo()->query("SELECT * FROM group_lock_state WHERE group_id='-1001'")->fetch(); + self::assertSame('recovery_required', $row['status']); + self::assertSame('legacy_unverified', $row['snapshot_provenance']); + self::assertNull($row['snapshot_evidence_json']); + self::assertSame('requires_current_permission_and_calendar_check', $report['recovery'][0]['action']); + self::assertSame('none', $report['users'][0]['authority']); + self::assertSame(0, (int)$this->db->pdo()->query('SELECT COUNT(*) FROM conversation_states')->fetchColumn()); + } + + public function testPostImportVerificationRejectsAnUnexpectedWriteToPreservedRecords(): void + { + (new SettingsRepository($this->db, $this->clock))->ensureGroup('-1001', 'Original'); + $this->db->pdo()->exec("CREATE TRIGGER import_write_fault AFTER INSERT ON message_templates BEGIN UPDATE groups SET title='Unexpected write' WHERE group_id='-1001'; END"); + $this->expectException(\RuntimeException::class); + $this->expectExceptionMessage('existing record changed'); + (new LegacyImporter($this->db, $this->clock))->run($this->root, false); + } + public function testCliBindsReviewedPreviewAndReportsVerifiedBackup(): void + { + $database = $this->root . '/destination.sqlite'; + $destination = Database::open($database); + $destination->migrate(); + unset($destination); + mkdir($this->root . '/backups', 0700); + [$exit, $output, $errors] = $this->command(['--db=' . $database,'--legacy=' . $this->root,'--dry-run']); + self::assertSame(0, $exit, $errors); + $preview = $this->jsonOutput($output); + file_put_contents($this->root . '/preview.json', Database::encode($preview)); + $arguments = ['--db=' . $database,'--legacy=' . $this->root,'--apply','--writers-stopped', + '--backup-dir=' . $this->root . '/backups','--expect-report=' . $this->root . '/preview.json']; + [$exit, $output, $errors] = $this->command($arguments); + self::assertSame(0, $exit, $errors); + $applied = $this->jsonOutput($output); + self::assertSame('passed', $applied['verification']['status']); + self::assertSame('ok', $applied['pre_import_backup']['integrity']); + self::assertSame($applied['pre_import_backup']['sha256'], hash_file('sha256', $applied['pre_import_backup']['path'])); + self::assertFileExists($applied['pre_import_backup']['path'] . '.manifest.json'); + [$exit, , $errors] = $this->command($arguments); + self::assertSame(1, $exit); + self::assertStringContainsString('no longer matches', $errors); + $destination = Database::open($database); + self::assertSame(1, (int)$destination->pdo()->query('SELECT COUNT(*) FROM groups')->fetchColumn()); + unset($destination); + } + + private function command(array $arguments): array + { + $process = proc_open( + [PHP_BINARY, '-d', 'opcache.enable_cli=0', dirname(__DIR__) . '/bin/import-legacy.php', ...$arguments], + [0 => ['pipe','r'],1 => ['pipe','w'],2 => ['pipe','w']], + $pipes, + dirname(__DIR__) + ); + if (!is_resource($process)) { + throw new \RuntimeException('Cannot launch isolated import CLI.'); + } + fclose($pipes[0]); + $output = stream_get_contents($pipes[1]); + $errors = stream_get_contents($pipes[2]); + fclose($pipes[1]); + fclose($pipes[2]); + return [proc_close($process), $output, $errors]; + } + + private function jsonOutput(string $output): array + { + foreach (explode("\n", $output) as $line) { + if (str_starts_with($line, '{')) { + return json_decode($line, true, 64, JSON_THROW_ON_ERROR); + } + } + throw new \RuntimeException('Import CLI did not return its JSON report.'); + } +} diff --git a/tests/NativeRpcContractTest.php b/tests/NativeRpcContractTest.php index 08d1ae1..a9dff74 100644 --- a/tests/NativeRpcContractTest.php +++ b/tests/NativeRpcContractTest.php @@ -99,7 +99,7 @@ public function testInvoiceAndMenuConstructorsExistInTheNativeSchema(): void private static function schemaEntry(string $name): string { - $schema = file_get_contents(dirname(__DIR__) . '/vendor/danog/madelineproto/src/TL_telegram_v225.tl'); + $schema = file_get_contents((new \danog\MadelineProto\Settings\TLSchema())->getAPISchema()); self::assertIsString($schema); self::assertSame(1, preg_match('/^' . preg_quote($name, '/') . '#[^\r\n]+/m', $schema, $match), 'Missing native TL entry: ' . $name); return $match[0]; diff --git a/tests/PatchBehaviorTest.php b/tests/PatchBehaviorTest.php deleted file mode 100644 index e2e1c76..0000000 --- a/tests/PatchBehaviorTest.php +++ /dev/null @@ -1,61 +0,0 @@ - [$branch, $scenario]; - } - } - } - - #[DataProvider('cases')] - public function testRealUpdateLoopBehavior(string $branch, string $scenario): void - { - $pipes = []; - $process = proc_open([PHP_BINARY, __DIR__ . '/PatchLoopHarness.php', $scenario, $branch], [0 => ['pipe', 'r'], 1 => ['pipe', 'w'], 2 => ['pipe', 'w']], $pipes); - self::assertIsResource($process); - fclose($pipes[0]); - $out = stream_get_contents($pipes[1]); - $error = stream_get_contents($pipes[2]); - fclose($pipes[1]); - fclose($pipes[2]); - self::assertSame(0, proc_close($process), $error . $out); - $data = json_decode($out, true, flags: JSON_THROW_ON_ERROR); - if ($scenario === 'intentional') { - self::assertSame(Amp\CancelledException::class, $data['exception']); - self::assertSame(1, $data['calls']); - self::assertSame(0, $data['reports']); - } elseif (str_starts_with($scenario, 'shutdown-')) { - self::assertSame(danog\Loop\Loop::STOP, (float) $data['first']); - self::assertSame(1, $data['calls']); - self::assertSame(0, $data['reports']); - } else { - self::assertArrayHasKey('first', $data, 'The timeout harness failed: ' . json_encode($data, JSON_THROW_ON_ERROR)); - self::assertSame(10, $data['first']); - self::assertSame(10, $data['second']); - self::assertSame(1, $data['calls_after_first'], 'Must return to parent loop rather than retry immediately.'); - self::assertSame(2, $data['calls'], 'Next cycle must recover.'); - self::assertSame(1, $data['reports']); - } - } -} diff --git a/tests/PatchGitBytesTest.php b/tests/PatchGitBytesTest.php index e6cb0c7..6f0aaa5 100644 --- a/tests/PatchGitBytesTest.php +++ b/tests/PatchGitBytesTest.php @@ -64,7 +64,7 @@ public function testAutocrlfCannotAlterReviewedPatchOrPublisherLicenseBytes(): v { $root = dirname(__DIR__); $files = ['LICENSES/CC-BY-4.0.txt', 'LICENSES/CC-BY-SA-4.0.txt']; - foreach (['madelineproto', 'madelineproto-geopoint', 'madelineproto-formatted-date', 'madelineproto-fresh-peer', 'broadcastmanager'] as $library) { + foreach (['madelineproto-fresh-peer', 'broadcastmanager'] as $library) { $manifest = json_decode((string) file_get_contents($root . '/patches/' . $library . '/manifest.json'), true, flags: JSON_THROW_ON_ERROR); $entry = $manifest['approved'][0]; foreach (['baseline' => 'original_sha256', 'patch' => 'patch_sha256'] as $kind => $hashField) { @@ -73,23 +73,6 @@ public function testAutocrlfCannotAlterReviewedPatchOrPublisherLicenseBytes(): v $files[] = $relative; } } - $date = json_decode((string) file_get_contents($root . '/patches/madelineproto-formatted-date/manifest.json'), true, flags: JSON_THROW_ON_ERROR)['approved'][0]; - $additional = [[$date['reviewed_output'], $date['patched_sha256']]]; - foreach ($date['added_files'] as $file) { - $additional[] = [$file['reviewed_output'], $file['patched_sha256']]; - } - foreach ($date['prerequisites'] as $file) { - $additional[] = [$file['baseline'], $file['sha256']]; - } - foreach ($date['license_files'] as $file) { - $additional[] = [$file['file'], $file['sha256']]; - } - foreach ($additional as [$file, $sha256]) { - $relative = 'patches/madelineproto-formatted-date/' . $file; - self::assertSame($sha256, hash_file('sha256', $root . '/' . $relative)); - $files[] = $relative; - } - $broadcast = json_decode((string) file_get_contents($root . '/patches/broadcastmanager/manifest.json'), true, flags: JSON_THROW_ON_ERROR)['approved'][0]; $broadcastSources = [[$broadcast['reviewed_output'], $broadcast['patched_sha256']]]; foreach ($broadcast['intermediates'] ?? [] as $intermediate) { diff --git a/tests/PatchInstallTest.php b/tests/PatchInstallTest.php index da4af60..510d75f 100644 --- a/tests/PatchInstallTest.php +++ b/tests/PatchInstallTest.php @@ -28,16 +28,16 @@ protected function setUp(): void { $this->root = dirname(__DIR__); $this->fixture = sys_get_temp_dir() . '/shabbat-patch-' . bin2hex(random_bytes(8)); - $this->target = $this->fixture . '/danog/madelineproto/src/Loop/Update/UpdateLoop.php'; + $this->target = $this->fixture . '/danog/madelineproto/src/MTProtoTools/PeerHandler.php'; mkdir(dirname($this->target), 0700, true); mkdir($this->fixture . '/composer'); - copy($this->root . '/patches/madelineproto/baseline/UpdateLoop.php', $this->target); - $this->installed('8.7.0'); + copy($this->root . '/patches/madelineproto-fresh-peer/baseline/PeerHandler.php', $this->target); + $this->installed('8.11.10'); } private function installed(string $version): void { - file_put_contents($this->fixture . '/composer/installed.json', json_encode(['packages' => [['name' => 'danog/madelineproto', 'version' => $version, 'source' => ['reference' => '7b99dd0f2d964a492c377912ffce9f5ce61aa9ed']]]], JSON_THROW_ON_ERROR)); + file_put_contents($this->fixture . '/composer/installed.json', json_encode(['packages' => [['name' => 'danog/madelineproto', 'version' => $version, 'source' => ['reference' => '49d3d8460257c7bfb1a7e12708e1bfdd59e898c1']]]], JSON_THROW_ON_ERROR)); } protected function tearDown(): void @@ -59,7 +59,7 @@ public function testManifestTargetCannotEscapeVendor(): void public function testUnknownManifestModeIsRejected(): void { - $data = json_decode((string) file_get_contents($this->root . '/patches/madelineproto/manifest.json'), true, flags: JSON_THROW_ON_ERROR); + $data = json_decode((string) file_get_contents($this->root . '/patches/madelineproto-fresh-peer/manifest.json'), true, flags: JSON_THROW_ON_ERROR); $data['approved'][0]['mode'] = 'unreviewed-mode'; $manifest = $this->fixture . '/test-manifest.json'; file_put_contents($manifest, json_encode($data, JSON_THROW_ON_ERROR)); @@ -70,9 +70,9 @@ public function testUnknownManifestModeIsRejected(): void public function testTamperedCorrespondingSourceBaselinePreventsVendorMutation(): void { - $data = json_decode((string) file_get_contents($this->root . '/patches/madelineproto/manifest.json'), true, flags: JSON_THROW_ON_ERROR); + $data = json_decode((string) file_get_contents($this->root . '/patches/madelineproto-fresh-peer/manifest.json'), true, flags: JSON_THROW_ON_ERROR); mkdir($this->fixture . '/baseline'); - file_put_contents($this->fixture . '/baseline/UpdateLoop.php', (string) file_get_contents($this->target) . "\n"); + file_put_contents($this->fixture . '/baseline/PeerHandler.php', (string) file_get_contents($this->target) . "\n"); $manifest = $this->fixture . '/test-manifest.json'; file_put_contents($manifest, json_encode($data, JSON_THROW_ON_ERROR)); $before = file_get_contents($this->target); @@ -126,7 +126,7 @@ public function testPartialPatchIsRejected(): void { $manager = $this->manager(); $manager->process(true); - file_put_contents($this->target, str_replace('use Amp\\CancelledException;' . "\n", '', (string) file_get_contents($this->target))); + file_put_contents($this->target, str_replace('_shabbat_fresh_full_peer_v1', '_partial', (string) file_get_contents($this->target))); $this->expectException(RuntimeException::class); $manager->process(true); } @@ -173,10 +173,10 @@ public function testReadOnlyVerificationCanRunWithActiveWriter(): void public function testReviewedOfficialModeIsNoOp(): void { $manifest = $this->fixture . '/test-manifest.json'; - file_put_contents($manifest, json_encode(['approved' => [['version' => '8.7.0', 'commit' => '7b99dd0f2d964a492c377912ffce9f5ce61aa9ed', 'mode' => 'official', 'sha256' => hash_file('sha256', $this->target)]]], JSON_THROW_ON_ERROR)); + file_put_contents($manifest, json_encode(['approved' => [['version' => '8.11.10', 'commit' => '49d3d8460257c7bfb1a7e12708e1bfdd59e898c1', 'mode' => 'official', 'sha256' => hash_file('sha256', $this->target)]]], JSON_THROW_ON_ERROR)); $before = file_get_contents($this->target); self::assertSame('official-verified', ($this->manager($manifest))->process(true)); self::assertSame($before, file_get_contents($this->target)); - // Fixture exercises the future manifest path. Current release is not official-fixed. + // Fixture exercises the future manifest path. Active fresh-peer compatibility still requires the reviewed patch. } } diff --git a/tests/PatchLoopHarness.php b/tests/PatchLoopHarness.php deleted file mode 100644 index 68469f5..0000000 --- a/tests/PatchLoopHarness.php +++ /dev/null @@ -1,37 +0,0 @@ -setValue($loop, true); -$authorized = new \ReflectionProperty($loop, 'authorizedDc'); -$authorized->setValue($loop, 1); -if (str_starts_with($scenario, 'shutdown-')) { - $api->onCall = static fn() => $loop->stop(); -} -try { - $first = $loop->loop(); - \Revolt\EventLoop::run(); - $callsAfterFirst = $api->calls; - $second = null; - if (!str_starts_with($scenario, 'shutdown-')) { - $second = $loop->loop(); - } - echo json_encode(['first' => $first, 'second' => $second, 'calls_after_first' => $callsAfterFirst, 'calls' => $api->calls, 'reports' => $api->reports], JSON_THROW_ON_ERROR); -} catch (\Throwable $error) { - echo json_encode(['exception' => get_class($error), 'calls' => $api->calls, 'reports' => $api->reports], JSON_THROW_ON_ERROR); -} diff --git a/tests/PermissionLayerCompatibilityTest.php b/tests/PermissionLayerCompatibilityTest.php new file mode 100644 index 0000000..cc7bc3f --- /dev/null +++ b/tests/PermissionLayerCompatibilityTest.php @@ -0,0 +1,198 @@ + [$original, $selected]; + } + } + } + + #[DataProvider('linkedMasks')] + public function testFreshNativeRightsCloseAndRestoreEveryNewBitWithoutRewritingSnapshot(bool $originalLinked, bool $selected): void + { + $db = Database::open(':memory:'); + $db->migrate(); + $clock = new FrozenClock(new \DateTimeImmutable('2026-10-21T12:00:00Z')); + $settings = new SettingsRepository($db, $clock); + $group = $settings->ensureGroup('-1001', 'Layer 231'); + $mask = ['send_plain']; + if ($selected) { + $mask[] = 'manage_linked_peers'; + } + $settings->updateGroup('-1001', $group['revision'], ['lock_block_flags' => $mask], '42'); + $original = ['_' => 'chatBannedRights', 'until_date' => 2000000000, 'send_messages' => false, 'send_media' => false, + 'send_plain' => false, 'send_polls' => true, 'manage_linked_peers' => $originalLinked]; + $transport = new CanonicalPermissionsTransport(); + $transport->rights = $original; + $gateway = new MadelineGateway($transport, false); + $verified = FreshPeerReader::verified('-1001', FreshPeerFixture::info('-1001', $original)); + self::assertSame($original, $verified['Chat']['default_banned_rights']); + $locks = new LockCoordinator($db, $clock, $gateway); + self::assertSame('locked', $locks->reconcile('-1001', 'layer-231', true)['status']); + $snapshot = $locks->state('-1001')['snapshot_json']; + self::assertSame(Database::encode($original), $snapshot); + self::assertSame($originalLinked || $selected, $transport->rights['manage_linked_peers']); + self::assertTrue($transport->rights['send_polls']); + $wire = $this->wire('ChatBannedRights', $transport->writes[0]); + self::assertSame($originalLinked || $selected, $wire['manage_linked_peers']); + self::assertSame('restored', $locks->reconcile('-1001', 'layer-231', false)['status']); + self::assertSame($original, $transport->writes[1], 'Restore must send the complete original native snapshot.'); + self::assertTrue(Permissions::equal($original, $transport->rights)); + self::assertSame($snapshot, $locks->state('-1001')['snapshot_json']); + self::assertSame($originalLinked, $this->wire('ChatBannedRights', $transport->writes[1])['manage_linked_peers']); + } + + public function testNewRestrictionIsExplicitAndExistingDefaultMasksNeverGainItOnRead(): void + { + self::assertContains('manage_linked_peers', Permissions::FLAGS); + self::assertContains('manage_linked_peers', Permissions::BLOCK_FLAGS); + self::assertNotContains('manage_linked_peers', Permissions::DEFAULT_BLOCK_FLAGS); + self::assertCount(21, Permissions::DEFAULT_BLOCK_FLAGS); + $db = Database::open(':memory:'); + $db->migrate(); + $clock = new FrozenClock(new \DateTimeImmutable('2026-10-21T12:00:00Z')); + $settings = new SettingsRepository($db, $clock); + $group = $settings->ensureGroup('-1001'); + $before = $db->pdo()->query("SELECT lock_block_flags,revision FROM group_settings WHERE group_id='-1001'")->fetch(); + $settings->ensureGroup('-1001'); + self::assertSame($before, $db->pdo()->query("SELECT lock_block_flags,revision FROM group_settings WHERE group_id='-1001'")->fetch()); + self::assertSame(Permissions::DEFAULT_BLOCK_FLAGS, $group['lock_block_flags']); + $changed = $settings->updateGroup('-1001', 1, ['lock_block_flags' => ['manage_linked_peers']], '42'); + self::assertSame(['manage_linked_peers'], $changed['lock_block_flags']); + self::assertTrue(Permissions::locked(['until_date' => 0], $changed['lock_block_flags'])['manage_linked_peers']); + } + + public function testNewAdministratorRightsAreAcceptedOnlyAsVerifiedBooleansAndSerialize(): void + { + $rights = ['_' => 'chatAdminRights', 'delete_messages' => true, 'manage_ranks' => true, 'manage_linked_peers' => true, 'manage_welcome_messages' => true]; + $normalized = AdminRights::normalize($rights); + self::assertCount(19, $normalized); + $decoded = $this->wire('ChatAdminRights', $rights); + foreach (['manage_ranks', 'manage_linked_peers', 'manage_welcome_messages'] as $flag) { + self::assertTrue($normalized[$flag]); + self::assertTrue($decoded[$flag]); + } + self::assertFalse(AdminRights::normalize(null)['manage_linked_peers']); + $this->expectException(\RuntimeException::class); + AdminRights::normalize(['_' => 'chatAdminRights', 'manage_welcome_messages' => 'true']); + } + + public function testEveryNewPermissionHasAnAccurateLocalizedPanelLabel(): void + { + $lang = new Lang(); + foreach (Lang::CODES as $language) { + foreach (['permission_manage_linked_peers', 'admin_right_manage_linked_peers', 'admin_right_manage_welcome_messages'] as $key) { + $label = $lang->text($language, $key); + self::assertNotSame($key, $label); + self::assertNotSame('', trim($label)); + self::assertTrue(mb_check_encoding($label, 'UTF-8')); + } + } + } + + public function testHistoricalSnapshotMissingNewBitRestoresAfterRestartAndExplicitFalseReadback(): void + { + $path = tempnam(sys_get_temp_dir(), 'shabbat-historical-rights-'); + self::assertIsString($path); + try { + $db = Database::open($path); + $db->migrate(); + $clock = new FrozenClock(new \DateTimeImmutable('2026-10-21T12:00:00Z')); + $settings = new SettingsRepository($db, $clock); + $settings->ensureGroup('-1001', 'Historical permissions'); + $transport = new CanonicalPermissionsTransport(); + $original = $transport->rights; + self::assertArrayNotHasKey('manage_linked_peers', $original); + $gateway = new MadelineGateway($transport, false); + $locks = new LockCoordinator($db, $clock, $gateway); + self::assertSame('locked', $locks->reconcile('-1001', 'historic-owned-lock', true)['status']); + $before = $locks->state('-1001'); + self::assertArrayNotHasKey('manage_linked_peers', json_decode($before['snapshot_json'], true, flags: JSON_THROW_ON_ERROR)); + self::assertArrayNotHasKey('manage_linked_peers', json_decode($before['applied_json'], true, flags: JSON_THROW_ON_ERROR)); + + // A current SDK decodes absent flag bits as explicit false. The old + // persisted ownership evidence must remain usable without being rewritten. + $transport->rights = $this->wire('ChatBannedRights', $transport->rights); + self::assertArrayHasKey('manage_linked_peers', $transport->rights); + self::assertFalse($transport->rights['manage_linked_peers']); + $transport->afterWrite = static function (CanonicalPermissionsTransport $backend): void { + $backend->rights['manage_linked_peers'] = false; + }; + $reopened = Database::open($path); + $restarted = new LockCoordinator($reopened, $clock, $gateway); + self::assertSame('restored', $restarted->reconcile('-1001', 'historic-owned-lock', false)['status']); + self::assertCount(2, $transport->writes); + self::assertSame($original, $transport->writes[1], 'Send the exact historical native snapshot, without inventing a new field.'); + self::assertArrayNotHasKey('manage_linked_peers', $transport->writes[1]); + self::assertTrue(Permissions::equal($original, $gateway->getPermissions('-1001'))); + self::assertFalse($transport->rights['manage_linked_peers']); + $after = $restarted->state('-1001'); + self::assertSame($before['snapshot_json'], $after['snapshot_json']); + self::assertSame($before['snapshot_sha256'], $after['snapshot_sha256']); + } finally { + unset($locks, $restarted, $reopened, $settings, $db); + gc_collect_cycles(); + foreach ([$path, $path . '-wal', $path . '-shm'] as $file) { + if (is_file($file)) { + unlink($file); + } + } + } + } + private function wire(string $type, array $value): array + { + $previous = Logger::$default; + try { + $api = (new \ReflectionClass(MTProto::class))->newInstanceWithoutConstructor(); + $api->settings = new \danog\MadelineProto\Settings(); + $api->logger = new Logger((new \danog\MadelineProto\Settings\Logger())->setType(Logger::CALLABLE_LOGGER)->setExtra(static function (): void { + })); + $tl = new TL($api); + $tl->init(new TLSchema()); + $wire = $tl->serializeObject(['type' => $type], $value, 'rights'); + $stream = fopen('php://memory', 'w+b'); + fwrite($stream, $wire); + rewind($stream); + $decoded = $tl->deserialize($stream, ['type' => $type, 'connection' => null, 'encrypted' => false]); + self::assertSame(strlen($wire), ftell($stream)); + fclose($stream); + return $decoded; + } finally { + $tl = null; + $api = null; + Logger::$default = $previous; + } + } +} diff --git a/tests/PresentationTest.php b/tests/PresentationTest.php index 5269850..b9c9b90 100644 --- a/tests/PresentationTest.php +++ b/tests/PresentationTest.php @@ -83,15 +83,16 @@ public function testBotApiIconNormalizesWithoutLosingColorsAndGlobalOptOutKeepsA $markup = ['inline_keyboard' => [[['text' => 'Other', 'url' => 'https://example.org', 'icon_custom_emoji_id' => Presentation::ICONS['support'], 'style' => 'danger']]]]; $native = MadelineGateway::normalizeMarkup($markup); $button = $native['rows'][0]['buttons'][0]; - self::assertSame('keyboardButtonUrl', $button['_']); - self::assertSame('https://example.org', $button['url']); + self::assertSame('keyboardInlineButton', $button['_']); + self::assertSame('inlineButtonTypeUrl', $button['type']['_']); + self::assertSame('https://example.org', $button['type']['url']); self::assertTrue($button['style']['bg_danger']); self::assertSame(5945186253308699040, $button['style']['icon']); self::assertArrayNotHasKey('icon_custom_emoji_id', $button); $plain = MadelineGateway::normalizeMarkup($native, false)['rows'][0]['buttons'][0]; self::assertArrayNotHasKey('icon', $plain['style']); self::assertSame('Other', $plain['text']); - self::assertSame($button['url'], $plain['url']); + self::assertSame($button['type']['url'], $plain['type']['url']); self::assertTrue($plain['style']['bg_danger']); } diff --git a/tests/RuntimeGatewayTest.php b/tests/RuntimeGatewayTest.php index ed1dcd8..4db8d00 100644 --- a/tests/RuntimeGatewayTest.php +++ b/tests/RuntimeGatewayTest.php @@ -85,9 +85,10 @@ public function testMediaEntitiesMarkupAndStableRandomIdArePreserved(): void public function testInlineSwitchUsesMtprotoSamePeer(): void { $markup = MadelineGateway::normalizeMarkup(['inline_keyboard' => [[['text' => 'Search','switch_inline_query_current_chat' => 'loc fixturetoken ']]]]); - self::assertSame('keyboardButtonSwitchInline', $markup['rows'][0]['buttons'][0]['_']); - self::assertTrue($markup['rows'][0]['buttons'][0]['same_peer']); - self::assertSame('loc fixturetoken ', $markup['rows'][0]['buttons'][0]['query']); + self::assertSame('keyboardInlineButton', $markup['rows'][0]['buttons'][0]['_']); + self::assertSame('inlineButtonTypeSwitchInline', $markup['rows'][0]['buttons'][0]['type']['_']); + self::assertTrue($markup['rows'][0]['buttons'][0]['type']['same_peer']); + self::assertSame('loc fixturetoken ', $markup['rows'][0]['buttons'][0]['type']['query']); } public function testClosedTopicNeverFallsBackToGeneral(): void diff --git a/tests/SdkShutdownBarrierTest.php b/tests/SdkShutdownBarrierTest.php new file mode 100644 index 0000000..c3998b5 --- /dev/null +++ b/tests/SdkShutdownBarrierTest.php @@ -0,0 +1,136 @@ +getValue(); + $path = tempnam(sys_get_temp_dir(), 'shabbat-sdk-stop-'); + self::assertIsString($path); + $lock = SingleInstance::acquire($path); + $events = []; + $api = (new \ReflectionClass(MTProto::class))->newInstanceWithoutConstructor(); + $api->logger = new Logger((new \danog\MadelineProto\Settings\Logger()) + ->setType(Logger::CALLABLE_LOGGER)->setExtra(static function (): void { + })); + $shared = (new \ReflectionClass(DataCenterConnection::class))->newInstanceWithoutConstructor(); + (new \ReflectionProperty($shared, 'API'))->setValue($shared, $api); + (new \ReflectionProperty($shared, 'datacenter'))->setValue($shared, 1); + (new \ReflectionProperty($shared, 'ctx'))->setValue($shared, new ContextIterator([new ConnectionContext()])); + $socket = (new \ReflectionClass(Connection::class))->newInstanceWithoutConstructor(); + $socket->API = $api; + (new \ReflectionProperty($socket, 'shared'))->setValue($socket, $shared); + $transport = new class ($events) implements MTProtoBufferInterface { + public int $disconnects = 0; + public int $writes = 0; + public function __construct(public array &$events) + { + } + public function disconnect(): void + { + $this->disconnects++; + $this->events[] = 'transport_disconnected'; + } + public function write(string $bytes): void + { + $this->writes++; + } + }; + $socket->stream = $transport; + (new \ReflectionProperty($shared, 'connections'))->setValue($shared, [$socket]); + (new \ReflectionProperty($shared, 'availableConnections'))->setValue($shared, [100]); + $datacenter = (new \ReflectionClass(DataCenter::class))->newInstanceWithoutConstructor(); + (new \ReflectionProperty($datacenter, 'list'))->setValue($datacenter, [$shared]); + $api->datacenter = $datacenter; + try { + self::assertSame($socket, $shared->waitGetConnection()); + $events[] = 'shutdown_requested'; + $future = \Amp\async(static function () use ($api, $path, &$events): void { + $api->unreference(); + $events[] = 'unreferenced'; + // Model a delayed session flush while exercising the real SDK finalizer. + \Amp\delay(0.005); + try { + SingleInstance::acquire($path); + self::fail('Writer ownership escaped before SDK flush completion.'); + } catch (\RuntimeException) { + $events[] = 'writer_still_owned'; + } + $events[] = 'flush_completed'; + }); + $destructors->setValue(null, [314160 => $future]); + Runner::finalizeSession($lock, static function () use (&$events): void { + API::finalize(); + $events[] = 'finalize_completed'; + }); + $nextWriter = SingleInstance::acquire($path); + $events[] = 'next_writer_acquired'; + $nextWriter->release(); + self::assertSame(['shutdown_requested', 'transport_disconnected', 'unreferenced', + 'writer_still_owned', 'flush_completed', 'finalize_completed', 'next_writer_acquired'], $events); + self::assertSame(1, $transport->disconnects); + self::assertNull($socket->stream); + self::assertSame(0, $shared->hasConnection()); + $late = \Amp\async(static function () use ($shared): void { + $connection = $shared->waitGetConnection(); + $connection->stream->write('late fixture request'); + }); + $keepAlive = \Revolt\EventLoop::repeat(1.0, static function (): void { + }); + try { + $late->await(new TimeoutCancellation(0.01)); + self::fail('A disconnected datacenter supplied a stale socket.'); + } catch (CancelledException) { + self::assertSame(0, $transport->writes); + self::assertFalse($late->isComplete()); + } finally { + \Revolt\EventLoop::cancel($keepAlive); + // Settle the fixture's pending wait without opening any connection. + $pending = (new \ReflectionProperty($shared, 'connectionsDeferred'))->getValue($shared); + $pending->error(new CancelledException()); + try { + $late->await(); + } catch (CancelledException) { + self::assertTrue($late->isComplete()); + } + } + self::assertSame(0, $transport->writes); + self::assertSame(1, $transport->disconnects); + } finally { + $destructors->setValue(null, $previousDestructors); + $lock->release(); + unlink($path); + $api->unreference(); + Logger::$default = $previousLogger; + } + } +} diff --git a/tests/SdkWorkerIsolationTest.php b/tests/SdkWorkerIsolationTest.php new file mode 100644 index 0000000..456b096 --- /dev/null +++ b/tests/SdkWorkerIsolationTest.php @@ -0,0 +1,75 @@ + $specification) { + self::assertGreaterThan(2, $number); + self::assertSame(['null'], $specification); + } + } + + public function testWorkerCannotRetainParentLockOrListeningSocketAfterParentClosesThem(): void + { + if (PHP_OS_FAMILY === 'Windows' || !is_dir('/dev/fd')) { + self::markTestSkipped('Requires POSIX descriptor inheritance; mandatory Linux CI exercises this path.'); + } + $path = tempnam(sys_get_temp_dir(), 'shabbat-worker-fd-'); + self::assertIsString($path); + $file = fopen($path, 'r+'); + self::assertIsResource($file); + self::assertTrue(flock($file, LOCK_EX | LOCK_NB)); + $listener = stream_socket_server('tcp://127.0.0.1:0', $errno, $error); + self::assertIsResource($listener, $error); + $address = stream_socket_get_name($listener, false); + $pipes = []; + $process = null; + $replacement = null; + $nextFile = null; + try { + $process = proc_open( + [PHP_BINARY, '-n', '-r', 'echo "ready\n"; fgets(STDIN);'], + ProcessRunner::getWorkerDescriptors(), + $pipes + ); + self::assertIsResource($process); + stream_set_timeout($pipes[1], 5); + self::assertSame("ready\n", fgets($pipes[1])); + // Close without LOCK_UN: an inherited duplicate would keep the flock alive. + fclose($file); + $file = null; + fclose($listener); + $listener = null; + self::assertTrue(proc_get_status($process)['running']); + $nextFile = fopen($path, 'r+'); + self::assertIsResource($nextFile); + self::assertTrue(flock($nextFile, LOCK_EX | LOCK_NB), 'A worker retained the parent writer lock.'); + $replacement = stream_socket_server('tcp://' . $address, $errno, $error); + self::assertIsResource($replacement, 'A worker retained the parent listening socket: ' . $error); + fwrite($pipes[0], "stop\n"); + } finally { + foreach ([$file, $listener, $nextFile, $replacement, ...$pipes] as $resource) { + if (is_resource($resource)) { + fclose($resource); + } + } + if (is_resource($process)) { + proc_close($process); + } + unlink($path); + } + } +} diff --git a/tests/SourceInputsTest.php b/tests/SourceInputsTest.php index 7b794c2..2e8899e 100644 --- a/tests/SourceInputsTest.php +++ b/tests/SourceInputsTest.php @@ -121,28 +121,64 @@ public function testPreferredSourceFilesAndOriginalLicensesMatchApprovedBytes(): sort($expected); sort($actual); self::assertSame($expected, $actual); - self::assertCount(92, $actual); + self::assertCount(103, $actual); self::assertArrayHasKey('additional-source/amphp-windows-process-wrapper/LICENSE', $manifest['preferred_source']); self::assertArrayHasKey('additional-source/madelineproto-build-inputs/LICENSE', $manifest['preferred_source']); self::assertSame('MIT', $manifest['additional_source']['license']); + self::assertSame('f328e6b5682d7e885dcfab425839921312162008', $manifest['rtc_source_provenance']['reference']); + $rtc = $manifest['rtc_source_provenance']['source_files'][0]; + $bytes = (string) file_get_contents($root . '/' . $manifest['preferred_source'][$rtc['path']]); + self::assertSame('811f02bddfc3c0fb6954f0f418d58215e78219c5f479cac60fbe2fbc398e9ae4', hash('sha256', $bytes)); + self::assertSame($rtc['git_blob'], sha1('blob ' . strlen($bytes) . "\0" . $bytes)); } - public function testMaintainerAttestationAppliesToTheUnmodifiedHistoricalHelperOnly(): void + public function testPreferredGeneratorInputsBindToTheLockedSdkAndOriginalGitBlobs(): void { $root = dirname(__DIR__); - $manifest = json_decode((string) file_get_contents($root . '/patches/madelineproto/manifest.json'), true, flags: JSON_THROW_ON_ERROR); - $reference = $manifest['original_reference']; - $attestation = $reference['maintainer_attestation']; - self::assertSame('2026-10-16', $attestation['date']); - self::assertSame('AGPL-3.0-only', $attestation['license']); - self::assertSame('patches/madelineproto/original-reference.php', $attestation['scope']); - self::assertSame('1ec2691498e878d28ca8e9cde94b00c803d9ccba789096ffc8471156dfb429e9', $reference['sha256']); - self::assertSame($reference['sha256'], $attestation['sha256']); - self::assertSame($attestation['sha256'], hash_file('sha256', $root . '/' . $attestation['scope'])); - self::assertStringContainsString('authored', $attestation['authorship']); - self::assertStringContainsString('authorizes distribution', $attestation['distribution_authorization']); - self::assertStringContainsString('not an independent', $attestation['limits']); + $manifest = $this->manifest(); + self::assertSame(83, $manifest['runtime_package_count']); + self::assertSame(4095, array_sum(array_column($manifest['runtime_packages'], 'file_count'))); + $source = $manifest['madeline_generation_source']; + self::assertSame('49d3d8460257c7bfb1a7e12708e1bfdd59e898c1', $source['reference']); + self::assertSame('8.11.10', $source['upstream_provenance']['version']); + self::assertSame(84, $source['file_count']); + self::assertCount(84, $source['upstream_provenance']['source_files']); + $paths = []; + foreach ($source['upstream_provenance']['source_files'] as $file) { + $archive = 'additional-source/madelineproto-build-inputs/' . $file['path']; + self::assertArrayNotHasKey($file['path'], $paths); + $paths[$file['path']] = true; + $bytes = (string) file_get_contents($root . '/' . $manifest['preferred_source'][$archive]); + self::assertSame($file['sha256'], hash('sha256', $bytes)); + self::assertSame($file['git_blob'], sha1('blob ' . strlen($bytes) . "\0" . $bytes)); + self::assertSame($file['bytes'], strlen($bytes)); + self::assertStringContainsString('/' . $file['reference'] . '/', $file['url']); + } + foreach ( + ['tools/build_tl.php', 'tools/TL/Builder.php', 'tools/TL/SecretBuilder.php', + 'tools/gen_filerefmap.php', 'tools/FileRefExtractor/FileRefGenerator.php', + 'tools/translator.php', 'langs/en.json', 'schemas/TL_telegram_v232.tl', + 'schemas/TL_mtproto_v1.tl', 'schemas/TL_secret.tl', 'docs/template/disallow.json', 'LICENSE'] as $required + ) { + self::assertArrayHasKey($required, $paths); + } + } + + public function testOnlyActivePatchOutputsArePinnedAndRetiredSourceIsAbsent(): void + { + $root = dirname(__DIR__); + $manifest = $this->manifest(); + $actual = array_map('basename', glob($root . '/patches/*', GLOB_ONLYDIR)); + sort($actual); + self::assertSame(['broadcastmanager', 'madelineproto-fresh-peer'], $actual); + foreach ($actual as $name) { + $patch = json_decode((string) file_get_contents($root . '/patches/' . $name . '/manifest.json'), true, flags: JSON_THROW_ON_ERROR); + $approved = $patch['approved'][0]; + $path = 'vendor/' . $patch['package'] . '/' . $patch['target']; + self::assertSame($approved['patched_sha256'], $manifest['files_sha256'][$path]); + self::assertSame($approved['original_sha256'], hash_file('sha256', $root . '/patches/' . $name . '/' . $approved['baseline'])); + self::assertSame($approved['patched_sha256'], hash_file('sha256', $root . '/patches/' . $name . '/' . $approved['reviewed_output'])); + } self::assertSame('57c8ff33c9c0cfc3ef00e650a1cc910d7ee479a8bc509f6c9209a7c2a11399d6', hash_file('sha256', $root . '/LICENSE')); - self::assertSame(hash_file('sha256', $root . '/LICENSE'), hash_file('sha256', $root . '/patches/madelineproto-formatted-date/upstream-LICENSE')); } } diff --git a/tests/TefillinAckGatewayTest.php b/tests/TefillinAckGatewayTest.php index 2aa8f48..cf2a73a 100644 --- a/tests/TefillinAckGatewayTest.php +++ b/tests/TefillinAckGatewayTest.php @@ -76,7 +76,7 @@ public function testActualGatewayFallbackAndLockedNativeMarkupKeepCurrentCountAn self::assertArrayNotHasKey('icon', $second['style']); self::assertTrue($first['style']['bg_primary']); self::assertTrue($second['style']['bg_primary']); - self::assertSame($first['data'], $second['data']); + self::assertSame($first['type']['data'], $second['type']['data']); $previousLogger = Logger::$default; try { @@ -96,8 +96,8 @@ public function testActualGatewayFallbackAndLockedNativeMarkupKeepCurrentCountAn fclose($stream); $button = $decoded['rows'][0]['buttons'][0]; self::assertSame(($index === 0 ? '' : '🔔 ') . $label . ' (3)', $button['text']); - self::assertInstanceOf(\danog\MadelineProto\TL\Types\Bytes::class, $button['data']); - self::assertSame($first['data'], (string)$button['data']); + self::assertInstanceOf(\danog\MadelineProto\TL\Types\Bytes::class, $button['type']['data']); + self::assertSame($first['type']['data'], (string)$button['type']['data']); self::assertTrue($button['style']['bg_primary']); if ($index === 0) { self::assertSame(5944970388252402183, $button['style']['icon']); diff --git a/tests/UITemplateTest.php b/tests/UITemplateTest.php index 79fb1f4..cfb0ebd 100644 --- a/tests/UITemplateTest.php +++ b/tests/UITemplateTest.php @@ -209,11 +209,11 @@ public function testDefaultTefillinPreviewAndTestShowAnInertCounterWithoutVotes( $this->click('tpl:preview:' . $token); $payload = end($this->gateway->payloads)['payload']; $buttons = array_merge(...array_column($payload['reply_markup']['rows'], 'buttons')); - $counter = array_values(array_filter($buttons, static fn(array $b): bool=>str_starts_with($b['data'] ?? '', 'tpl:ack_preview:'))); + $counter = array_values(array_filter($buttons, static fn(array $b): bool=>str_starts_with($b['type']['data'] ?? $b['data'] ?? '', 'tpl:ack_preview:'))); self::assertCount(1, $counter); self::assertSame('הנחתי (0)', $counter[0]['text']); self::assertTrue($counter[0]['style']['bg_primary']); - $this->click($counter[0]['data'], '2', false); + $this->click($counter[0]['type']['data'] ?? $counter[0]['data'], '2', false); self::assertSame(0, (int)$this->app->db->pdo()->query('SELECT COUNT(*) FROM tefillin_ack_votes')->fetchColumn()); $this->click('tpl:test:' . $token); $this->click($this->last()['markup']['rows'][0]['buttons'][0]['data']); diff --git a/tests/UITest.php b/tests/UITest.php index d2ea8e7..1ce5283 100644 --- a/tests/UITest.php +++ b/tests/UITest.php @@ -476,8 +476,8 @@ public function testModerationScreenHasSupportedGlobalFlagsAndRequiresOneUseConf } } } - self::assertCount(21, $flagButtons); - self::assertCount(22, \Shabbat\Scheduling\Permissions::FLAGS, 'All native fields remain available for exact snapshots.'); + self::assertCount(22, $flagButtons); + self::assertCount(23, \Shabbat\Scheduling\Permissions::FLAGS, 'All native fields remain available for exact snapshots.'); self::assertSame(\Shabbat\Scheduling\Permissions::DEFAULT_BLOCK_FLAGS, $this->settings->getGroup('-1001')['lock_block_flags']); $reaction = null; foreach ($flagButtons as $button) { @@ -793,7 +793,7 @@ public function testBoundInlineCityAndTimezoneResultsKeepNonEmptyNativeMarkup(): } public function testInlineArticlesUseInputConstructorsFromThePinnedTelegramSchema(): void { - $schema = file_get_contents(dirname(__DIR__) . '/vendor/danog/madelineproto/src/TL_telegram_v225.tl'); + $schema = file_get_contents((new \danog\MadelineProto\Settings\TLSchema())->getAPISchema()); self::assertIsString($schema); foreach (Lang::CODES as $language) { $user = $this->settings->getUser('1'); diff --git a/tests/UpdateLoopCompatibilityTest.php b/tests/UpdateLoopCompatibilityTest.php new file mode 100644 index 0000000..30e6400 --- /dev/null +++ b/tests/UpdateLoopCompatibilityTest.php @@ -0,0 +1,94 @@ + [$branch, $scenario]; + } + } + } + + #[DataProvider('cases')] + public function testOfficialRecoveryCancellationAndParentLoopStop(string $branch, string $scenario): void + { + $output = tempnam(sys_get_temp_dir(), 'shabbat-loop-out-'); + $errors = tempnam(sys_get_temp_dir(), 'shabbat-loop-err-'); + self::assertIsString($output); + self::assertIsString($errors); + $process = null; + try { + $pipes = []; + $process = proc_open([PHP_BINARY, '-d', 'opcache.enable_cli=0', __DIR__ . '/UpdateLoopHarness.php', + $scenario, $branch], [0 => ['pipe', 'r'], 1 => ['file', $output, 'w'], + 2 => ['file', $errors, 'w']], $pipes); + self::assertIsResource($process); + fclose($pipes[0]); + $deadline = microtime(true) + 15; + do { + $status = proc_get_status($process); + if (!$status['running']) { + break; + } + usleep(10_000); + } while (microtime(true) < $deadline); + self::assertFalse($status['running'], 'Official updater exceeded the independent process deadline.'); + $out = (string) file_get_contents($output); + $error = (string) file_get_contents($errors); + self::assertSame(0, $status['exitcode'], $error . $out); + } finally { + if (is_resource($process)) { + if (proc_get_status($process)['running']) { + proc_terminate($process, 9); + } + proc_close($process); + } + unlink($output); + unlink($errors); + } + $data = json_decode($out, true, flags: JSON_THROW_ON_ERROR); + self::assertFalse($data['timed_out'], 'Parent loop did not settle within the fixture deadline.'); + self::assertFalse($data['running']); + self::assertTrue($data['paused']); + if (str_ends_with($scenario, 'intentional') || str_ends_with($scenario, 'direct')) { + $exception = str_ends_with($scenario, 'intentional') ? CancelledException::class : TimeoutException::class; + self::assertSame([$exception], $data['errors'], 'Non-retry exceptions must remain visible.'); + self::assertSame(1, $data['calls']); + self::assertSame(0, $data['reports']); + } else { + self::assertSame([], $data['errors']); + if (!str_starts_with($scenario, 'shutdown-')) { + self::assertSame(2, $data['calls'], 'A genuine RPC/timeout cancellation must recover.'); + self::assertSame($scenario === 'wrapped' ? 1 : 0, $data['reports']); + if ($branch === 'channel' || $scenario === 'server-timeout') { + self::assertGreaterThanOrEqual(0.9, $data['elapsed'], 'Official delayed recovery must not spin.'); + } + } + } + if (str_starts_with($scenario, 'shutdown-')) { + // Loop::stop ends scheduling; it does not cancel an in-flight loop() body. + // A single internal recovery is permitted before the real parent settles. + // Transport disconnection and writer ownership are tested independently. + self::assertLessThanOrEqual(1, $data['calls_after_stop']); + self::assertLessThanOrEqual(2, $data['calls']); + self::assertLessThanOrEqual(1, $data['reports']); + } + } +} diff --git a/tests/UpdateLoopHarness.php b/tests/UpdateLoopHarness.php new file mode 100644 index 0000000..8751364 --- /dev/null +++ b/tests/UpdateLoopHarness.php @@ -0,0 +1,53 @@ +updaters[$channel] = $loop; +(new \ReflectionProperty($loop, 'authorizedDc'))->setValue($loop, 1); +$shutdown = str_starts_with($scenario, 'shutdown-'); +if ($shutdown) { + $api->onCall = static function () use ($api, $loop): void { + $api->stopped = true; + $loop->stop(); + }; +} +$errors = []; +\Revolt\EventLoop::setErrorHandler(static function (\Throwable $error) use (&$errors): void { + $errors[] = get_class($error); +}); +$timedOut = false; +$monitor = null; +$deadline = \Revolt\EventLoop::delay(3.0, static function () use (&$timedOut, &$monitor, $loop): void { + $timedOut = true; + $loop->stop(); + if ($monitor !== null) { + \Revolt\EventLoop::cancel($monitor); + } +}); +$monitor = \Revolt\EventLoop::repeat(0.005, static function () use ($api, $loop, $deadline, &$monitor): void { + if ($api->calls > 0 && $loop->isPaused()) { + $loop->stop(); + \Revolt\EventLoop::cancel($deadline); + \Revolt\EventLoop::cancel($monitor); + } +}); +$started = hrtime(true); +$loop->start(); +\Revolt\EventLoop::run(); +echo json_encode(['calls' => $api->calls, 'calls_after_stop' => $api->callsAfterStop, + 'reports' => $api->reports, 'errors' => $errors, 'timed_out' => $timedOut, + 'running' => $loop->isRunning(), 'paused' => $loop->isPaused(), + 'elapsed' => (hrtime(true) - $started) / 1e9], JSON_THROW_ON_ERROR); From f19e281a7057f15782c57f60646f4bec4a2aab1d Mon Sep 17 00:00:00 2001 From: WizardLoop Date: Thu, 22 Oct 2026 22:20:28 +0300 Subject: [PATCH 2/4] Prepare bilingual 3.1.0 deployment, migration and corresponding-source documentation --- .github/CONTRIBUTING.md | 2 +- .github/SECURITY.md | 21 +- CHANGELOG.md | 15 +- README.md | 501 +---- docs/ADMIN_PANEL.md | 2 +- docs/ARCHITECTURE.md | 2 +- docs/COMMANDS.md | 64 + docs/CONFIGURATION.md | 4 +- docs/DATABASE.md | 2 +- ..._DELIVERY_SAFETY.md => DELIVERY_SAFETY.md} | 10 +- docs/DEPENDENCIES.md | 79 +- docs/DEV5_TEST_FEEDBACK.md | 35 - docs/DEV6_TEST_FEEDBACK.md | 32 - docs/DEV8_PERMISSIONS.md | 38 - docs/DIAGNOSTICS.md | 2 +- docs/FEATURE_PARITY.md | 219 --- docs/FUNCTIONAL_COMPARISON.md | 50 - docs/GROUP_SETTINGS.md | 15 +- docs/IMPLEMENTATION_STATUS.md | 14 +- docs/INSTALLATION.md | 5 +- docs/KEYBOARD_COMPATIBILITY.md | 45 + docs/LICENSING.md | 40 +- docs/MADELINE_FORMATTED_DATE.md | 46 - docs/MIGRATION.md | 36 +- docs/OPERATIONS.md | 47 +- docs/PATCHES.md | 140 +- docs/PERMISSION_RECOVERY.md | 18 +- docs/PRODUCTION_UPGRADE.md | 553 +++--- docs/PRODUCTION_UPGRADE_HE.md | 431 ++++ docs/PUBLICATION_STATUS.md | 101 +- docs/RELEASE.md | 10 +- docs/RELEASE_NOTES.md | 62 +- docs/SERVER_TEST_DEPLOYMENT.md | 20 +- docs/THIRD_PARTY_DETAILS.md | 55 +- docs/ZMANIM_METHODS.md | 4 +- docs/composer-audit.json | 6 +- docs/composer-licenses.json | 1168 ++++++----- docs/composer-show.json | 1734 ++++++++++------- docs/dependencies.json | 725 +++++-- readme-he.md | 551 +----- 40 files changed, 3542 insertions(+), 3362 deletions(-) create mode 100644 docs/COMMANDS.md rename docs/{DEV9_DELIVERY_SAFETY.md => DELIVERY_SAFETY.md} (86%) delete mode 100644 docs/DEV5_TEST_FEEDBACK.md delete mode 100644 docs/DEV6_TEST_FEEDBACK.md delete mode 100644 docs/DEV8_PERMISSIONS.md delete mode 100644 docs/FEATURE_PARITY.md delete mode 100644 docs/FUNCTIONAL_COMPARISON.md create mode 100644 docs/KEYBOARD_COMPATIBILITY.md delete mode 100644 docs/MADELINE_FORMATTED_DATE.md create mode 100644 docs/PRODUCTION_UPGRADE_HE.md diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index cf693c6..ba94d46 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -12,4 +12,4 @@ Follow [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md). Explain the problem, resulting Existing project contact: [@WizardLoop on Telegram](https://t.me/WizardLoop). -Composer validation uses --strict --no-check-all because MadelineProto is intentionally pinned to the exact reviewed source version. This retains schema and lock validation; only generic version-range recommendations are omitted. +MadelineProto uses a stable compatible range in composer.json. Deployment always uses composer.lock; dependency upgrades require fresh source review and patch manifests for the exact locked release. Never run composer update as a routine server upgrade. Composer validation retains strict schema and lock checks; --no-check-all suppresses generic version-range advice for reviewed dependency policies. diff --git a/.github/SECURITY.md b/.github/SECURITY.md index 33fac37..d9e3b52 100644 --- a/.github/SECURITY.md +++ b/.github/SECURITY.md @@ -1,13 +1,14 @@ -# Security Policy - -## Reporting a Vulnerability - -If you find a security issue, **do not open an issue on GitHub**. -Please report privately to [@WizardLoop on Telegram](https://t.me/WizardLoop) or via email: contact@wizardloop.com - ---- - -We will address all reports promptly and responsibly. +# Security Policy + +## Reporting a Vulnerability + +If you find a security issue, **do not open an issue on GitHub**. + +Please report privately to [@WizardLoop on Telegram](https://t.me/WizardLoop) or via email: contact@wizardloop.com + +--- + +We will address all reports promptly and responsibly. ## Safe reproduction information diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d1d516..600fe14 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ PHP 8.3 compatibility: module-delivery bookkeeping now uses the database-owned `BEGIN IMMEDIATE` transaction state and exact connection identity; native callback/message fixtures initialize inherited readonly properties from their declaring class. Regression tests cover rejected foreign/outside transactions, rollback and state reset. +## 3.1.0 + +- Upgrade the official MadelineProto dependency to the reviewed stable 8.11.10 / TL layer 232 line, with reproducible Composer locking and a stable compatible version range. +- Retire the upstreamed UpdateLoop/cancellation, GeoPoint and formatted-date patch sets. Re-review the Fresh Peer and BroadcastManager patches against the updated dependency source. +- Update the central keyboard compatibility boundary for the new native inline constructors while preserving saved templates, callback identifiers, styles and reply-keyboard separation. +- Make legacy import reviewable with equivalent preview/apply parsing, duplicate and directory-only group reporting, bound comparison reports and post-import verification. Existing settings and unverified permission snapshots remain protected. +- Shorten the parallel English/Hebrew READMEs, consolidate historical development reports into current references, and provide a Hebrew staged upgrade/import/rollback guide that verifies the actual production path. +- Required clean-install, regression, static-analysis, Docker and archive checks must pass before a stable tag/release. Earlier 3.0.0 live acceptance is not new 3.1.0 acceptance. No production deployment is performed by this upgrade work. + ## 3.0.0 - stable - Promote the reviewed dev.9 implementation to stable 3.0.0 while retaining MadelineProto 8.7.0, SQLite, the Composer lock, all five approved patch sets and migrations 001–016. No new runtime feature or migration is introduced by this promotion. @@ -50,7 +59,7 @@ PHP 8.3 compatibility: module-delivery bookkeeping now uses the database-owned ` ## 3.0.0-dev.6 - permission equivalence and callback integration - Correct the public statistics callback allowlist at the actual SDK update-handler boundary, including callbacks emitted by the home menu and statistics tabs. Unavailable original panels return a localized callback response without new-message flooding. -- Compare reviewed Telegram-equivalent default permission representations consistently for manual and automatic transitions, retaining original snapshots and genuine-conflict protection. See the dev.6 feedback report for evidence and limits. +- Compare reviewed Telegram-equivalent default permission representations consistently for manual and automatic transitions, retaining original snapshots and genuine-conflict protection. Historical evidence and limits are preserved in the 3.0.0 Git history. - Shabbat messages across public, inline and scheduled defaults show the nearest Shabbat-containing period and current/upcoming holidays, including verified entrance/final-exit times for weekday Yom Tov before Shabbat, without later Shabbat summaries, numeric UTC suffixes or visible source/update footers. Actual configured methods and validated source provenance remain intact. - Recognize both captured provider spellings of Chol Hamoed for reminder policy, while retaining its non-Yom-Tov classification. Keep a verified active festival visible when its final exit is after civil midnight. - Direct test-folder upload is documented; deployment ZIP/checksum files are excluded from Docker context. No dependency, patch or migration update is required. @@ -68,7 +77,7 @@ PHP 8.3 compatibility: module-delivery bookkeeping now uses the database-owned ` - `source` combines repository, license and build identity. Legacy `license`/`version` commands remain aliases; the project repository is always linked separately from the deployment's exact source offer. - Expanded help and all changes are translated into Hebrew, English, Russian, French, Spanish and Brazilian Portuguese. -Migrations 001-012, Composer lock and all four library patch sets are unchanged from dev.4. No new schema migration is needed for dev.5, but the stopped-writer backup/migrate command remains part of the update procedure. See [the 11-item verification map](docs/DEV5_TEST_FEEDBACK.md) and [Docker test deployment](docs/SERVER_TEST_DEPLOYMENT.md). The supplied log proves repeated auxiliary IPC churn, not a completed reproduction of a live Telegram restart hang or the original permission error. No Docker or real Telegram acceptance is claimed. +Migrations 001-012, Composer lock and all four library patch sets are unchanged from dev.4. No new schema migration is needed for dev.5, but the stopped-writer backup/migrate command remains part of the update procedure. See [Docker test deployment](docs/SERVER_TEST_DEPLOYMENT.md). The supplied log proves repeated auxiliary IPC churn, not a completed reproduction of a live Telegram restart hang or the original permission error. No Docker or real Telegram acceptance is claimed. ## 3.0.0-dev.4 - unpublished local development snapshot @@ -157,7 +166,7 @@ Dependencies, four reviewed library patches and eight migration files remain unc * Exact 8.5-degree nightfall and explicit minute choices are retained without integer truncation or arbitrary minute adjustments. * Native integer peer IDs are handled in private GPS and payment updates; bot-owned GPS reply tokens remain scoped to their user/group. * A separate exact-source MadelineProto GeoPoint correction preserves fractional coordinates before inline dispatch. -* A new reviewed formatted-date correction completes the locked entity factory and adds a typed native/Bot API wrapper. It preserves timestamps, UTF-16 offsets and valid flags, with strict two-file/schema guards; historical reference code with unresolved grants is not redistributed. See [review](docs/MADELINE_FORMATTED_DATE.md). +* A new reviewed formatted-date correction completes the locked entity factory and adds a typed native/Bot API wrapper. It preserves timestamps, UTF-16 offsets and valid flags, with strict two-file/schema guards; historical reference code with unresolved grants is not redistributed. See [historical source and license findings](docs/THIRD_PARTY_DETAILS.md). * Permission FLOOD_WAIT deadlines survive restart, stale/expired owners cannot confirm mutations, and desired state is refreshed before RPCs. * Content waits for bot-owned permission recovery; Omer waits its configured gap after the actual restore. Eligibility deferrals do not exhaust transport retries. * Explicit group rejoining preserves settings, while startup list import cannot reactivate removed groups. Startup schema validation rejects missing or changed migrations without writing. diff --git a/README.md b/README.md index dbcd611..b791386 100644 --- a/README.md +++ b/README.md @@ -1,97 +1,98 @@ -# 🕯️ WizardLoop Shabbat Bot +# 🕯️ Shabbat Bot -A Telegram bot built with PHP, MadelineProto and SQLite for Shabbat and festival group quiet periods, Jewish calendar views and opt-in reminders. +A Telegram bot for Shabbat and festival group quiet periods, Jewish calendar information and optional reminders. Built with PHP, MadelineProto and SQLite. [English](README.md) | [עברית](readme-he.md) [![License: AGPL-3.0-only](https://img.shields.io/badge/license-AGPL--3.0--only-blue)](LICENSE) [![PHP 8.3–8.5](https://img.shields.io/badge/PHP-8.3%E2%80%938.5-777BB4)](composer.json) -[![MadelineProto 8.7.0](https://img.shields.io/badge/MadelineProto-8.7.0-2CA5E0)](composer.lock) -[![Stable 3.0.0](https://img.shields.io/badge/status-3.0.0%20stable-green)](VERSION) +[![MadelineProto 8.11.10](https://img.shields.io/badge/MadelineProto-8.11.10-2CA5E0)](composer.lock) -**Current version: 3.0.0, stable.** Use the matching [release assets](https://github.com/WizardLoop/shabbat/releases/tag/v3.0.0) or tagged checkout and retain its build metadata. The owner confirmed dev.9 live group locking, unlocking, original-permission restoration and restart. This does not establish holy-day timing, load capacity or a long-running soak; automated and host-specific acceptance remain separate. For an existing bot, follow the [production upgrade and rollback guide](docs/PRODUCTION_UPGRADE.md) before replacing files or starting a second instance. See [publication status](docs/PUBLICATION_STATUS.md), [changes](CHANGELOG.md) and [delivery safety](docs/DEV9_DELIVERY_SAFETY.md). Badges describe source configuration, not production acceptance. +**Version 3.1.0.** Release requirements and acceptance limits are described in [implementation status](docs/IMPLEMENTATION_STATUS.md). For an existing installation, start with the [upgrade guide](docs/PRODUCTION_UPGRADE.md) ([עברית](docs/PRODUCTION_UPGRADE_HE.md)); the commands below create a new database. -## Contents - -[Features](#features) · [Requirements](#requirements) · [Docker installation](#docker-installation) · [Manual installation](#manual-installation) · [Configuration](#configuration) · [Telegram setup](#telegram-setup) · [Group setup](#group-setup) · [Location and languages](#location-and-languages) · [Calendar modules](#calendar-modules) · [Bot commands](#bot-commands) · [Operations](#operations) · [Upgrade and legacy import](#upgrade-and-legacy-import) · [Backup and rollback](#backup-and-rollback) · [Troubleshooting](#troubleshooting) · [Project and development](#project-and-development) · [License and credits](#license-and-credits) +[Features](#features) · [Requirements](#requirements) · [Install](#install) · [Configure](#configure) · [First use](#first-use) · [Operate and update](#operate) · [Documentation](#documentation) · [License](#license) -## Features - -| Area | Implemented behavior | -|---|---| -| Shabbat/festivals | Per-group location, Israel/diaspora calendar, candle/havdalah methods, operational offsets and continuous adjacent holy-day closures. | -| Modes | Off, messages only, lock only, or lock and messages; Shabbat and festivals are selected separately. | -| Permission recovery | Original 22-flag snapshots, verified fresh reads, durable restoration state, conflicts and an authorized recovery panel. The default lock mask has 21 selectable member restrictions; administrator powers are separate. | -| Private controls | Known groups, guided settings, independent personal preferences, preview and confirmation. | -| Calendar/reminders | Daily zmanim, Daf Yomi, tefillin and seasonal Omer with explicit group opt-in and separate settings. | -| Message design | Text, Telegram entities, reusable media and default/custom/no keyboards; separate close/open/announcement/module templates. Optional cleanup defaults off. | -| Administration | Full/limited/view-only managers, subscriber directory, broadcasts, statistics, diagnostics, system links and tracking links. | -| Storage/operation | SQLite migrations/backups, durable delivery jobs, independent scheduler heartbeats, one application writer and explicit maintenance tools. | -| Donations/source | Optional Telegram Stars, including whole custom amounts 1–10000; version, license and an operator-supplied exact source URL. | - -3.0.0 retains dev.9 delivery-time eligibility checks, bounded reminder backlogs, actual spacing/quiet-window checks and independent permission, notification and broadcast work. MadelineProto remains 8.7.0 and the dependency lock is retained. Missing solar values are reported; no polar fallback is invented. Times and ritual texts are informational, with method choices made by the administrator. +## What it does - -## Requirements +- Close and reopen groups for Shabbat and festivals, with verified original permissions and guarded recovery. +- Choose each group's location, timezone, Israel/diaspora calendar, candle lighting and havdalah settings. +- Show daily zmanim and Daf Yomi; optionally schedule zmanim, Daf, tefillin and Omer reminders. +- Manage groups through private panels; customize messages, media and buttons. +- Provide delegated bot administration, broadcasts, statistics and optional Telegram Stars donations. -| Component | Requirement | -|---|---| -| Recommended deployment | Linux, Docker Engine and Compose v2, outbound HTTPS/Telegram access, persistent storage. | -| Manual runtime | 64-bit PHP 8.3/8.4/8.5 and Composer 2. Docker pins PHP 8.4.26 and Composer 2.10.3. | -| Extensions | PDO/PDO SQLite, mbstring, XML, DOM, fileinfo, zlib; ZIP for the optional development packager. Verify all locked requirements with `composer check-platform-reqs`. Docker also builds pcntl and sockets. | -| SQLite | Application minimum 3.35. Release gate accepts 3.51.3+, or reviewed 3.44.6 / 3.50.7. Check PHP's loaded library. Docker builds checksum-verified 3.51.3. | -| Telegram | Your application API ID/hash, BotFather token and configured operator user IDs or resolvable usernames. | -| GeoNames | Your webservice-enabled account for city search/automatic timezone lookup. Known cities and explicit coordinates remain available without it. | -| Filesystem | Persistent application data and separate MadelineProto session. The runtime also needs a writable working directory for its library worker log and PrimeModule copies. | +Six interface catalogs are supplied: Hebrew, English, Russian, French, Spanish and Brazilian Portuguese. External content and Hebrew ritual text can remain in their original language. See [group settings](docs/GROUP_SETTINGS.md) for details. -Offline tests use fake Telegram gateways and provider fixtures without bot credentials. Recheck permission restoration and restart on the deployment target; test topics, client rendering, inline/GPS, Stars and command menus where used. See the precise [acceptance record](docs/IMPLEMENTATION_STATUS.md). + +## Before you begin - -## Docker installation +You need a Linux server with persistent storage, internet access, **Docker Engine and the Docker Compose plugin**, plus: -Shell examples use a Linux/POSIX terminal. Run Docker commands **on the host, from the extracted project root**, with Docker-daemon access. The image runs as `shabbat`, UID/GID `10001`. There is no separate Composer service. +| Item | Where to obtain it | +|---|---| +| Telegram API ID and API hash | [Telegram application management](https://my.telegram.org/apps) | +| Bot token | Create/select your bot with [BotFather](https://t.me/BotFather) | +| Administrator ID | Your trusted Telegram user ID; multiple IDs are comma-separated | +| GeoNames username | [GeoNames account](https://www.geonames.org/login) with web services enabled, for city/automatic timezone search | -1. Obtain the reviewed source. For the release deployment archive: +Install [Docker Engine for your Linux distribution](https://docs.docker.com/engine/install/) and [the Compose plugin](https://docs.docker.com/compose/install/linux/), then check: ~~~sh -unzip shabbat-3.0.0.zip -d shabbat -cd shabbat -unset BUILD_COMMIT +docker --version +docker compose version ~~~ -It contains source and `composer.lock`, without installed `vendor/`. Docker installs locked production dependencies. **Retain archive `build-info.json`.** The release archive records its exact reviewed commit, `local_changes=false` and the application-source fingerprint. Leave `BUILD_COMMIT` absent from `.env`; the archive example clears an inherited value so it cannot override this identity. For a reviewed Git checkout instead, supply its actual commit before building: +Docker supplies PHP, Composer, SQLite and the locked dependencies. A supported [manual installation](docs/INSTALLATION.md#manual-installation) is also documented. -~~~sh -export BUILD_COMMIT="$(git rev-parse HEAD)" -~~~ + +## 1. Extract a fresh installation -Use an unchanged release archive or a clean matching Git checkout. Do not substitute an unrelated commit or retain archive metadata after editing its source. - -2. Create private configuration once in this new installation: +Download `shabbat-3.1.0.zip` and `SHA256SUMS` from the matching [GitHub release](https://github.com/WizardLoop/shabbat/releases). Run in **Bash on the server**, in the upload directory, with Docker access. The checksum must report `OK`. ~~~sh +set -euo pipefail +umask 077 +awk '$2 == "shabbat-3.1.0.zip" { + if (NF != 2 || length($1) != 64 || $1 ~ /[^0-9a-f]/) exit 1 + print; n++ +} END { if (n != 1) exit 1 }' SHA256SUMS > deployment.sha256 +sha256sum --check deployment.sha256 +test ! -e shabbat-3.1.0 +unzip -q shabbat-3.1.0.zip -d shabbat-3.1.0 +cd shabbat-3.1.0 cp .env.example .env chmod 600 .env +unset BUILD_COMMIT ~~~ -Edit `.env`: replace Telegram examples, set `ADMIN`, your GeoNames account when needed, and `SOURCE_URL=https://github.com/WizardLoop/shabbat/releases/tag/v3.0.0` for this unchanged release, whose corresponding-source asset must be available. For modified deployments, provide their exact matching source instead. Keep simple `KEY=value` syntax compatible with PHP raw INI and Compose. Exclude the configured file from uploads. +Keep the supplied `build-info.json`. Do not add `BUILD_COMMIT` to `.env` for an unchanged release archive. Never extract an upgrade over a running installation. -3. Build and check the image. These steps install/patch dependencies and write image metadata without starting the bot: + +## 2. Configure the bot -~~~sh -docker compose build -docker compose run --rm --no-deps shabbat php bin/self-check.php --release -docker compose run --rm --no-deps shabbat php bin/runtime-permissions.php --require-non-root +Edit `.env` privately. Replace the example credentials and administrator ID: + +~~~dotenv +API_ID=123456 +API_HASH=replace_with_your_32_character_api_hash +BOT_TOKEN=replace_with_your_bot_token +ADMIN=123456789 +GEONAMES_USERNAME=your_geonames_username +SOURCE_URL=https://github.com/WizardLoop/shabbat/releases/tag/v3.1.0 ~~~ -4. Initialize a **new empty database**, with the service stopped. Existing databases require the upgrade/backup procedure. +Keep the other values from `.env.example` unless an advanced setting is needed. Never publish this file or use test credentials in production. The source URL must offer the exact deployed source, including the corresponding-source archive. See [all configuration variables](docs/CONFIGURATION.md). + +From the extracted project root, build and check the image, then initialize the **new empty database**. These commands do not start the bot: ~~~sh +docker compose build shabbat +docker compose run --rm --no-deps shabbat php bin/self-check.php --release +docker compose run --rm --no-deps shabbat php bin/runtime-permissions.php --require-non-root docker compose run --rm --no-deps shabbat php bin/migrate.php --writers-stopped --db /app/data/shabbat.sqlite ~~~ -5. Start when ready for real Telegram connections and operations on registered groups: +Start when ready to connect to Telegram: ~~~sh docker compose up -d shabbat @@ -100,368 +101,54 @@ docker compose logs --tail=100 shabbat docker compose exec shabbat php bin/health.php ~~~ -Service: `shabbat`. Named volumes: `bot-data` → `/app/data`, `madeline-session` → `/app/runtime`; actual names include the Compose project name. Preserve the project identity and volumes during upgrades. Compose forces `DATA_DIR=/app/data` and `SESSION_PATH=/app/runtime/bot.shabbat`. Initial health waits for both scheduler loops; the configured start period is 90 seconds. - -[Installation details](docs/INSTALLATION.md) · [Staging guide](docs/SERVER_TEST_DEPLOYMENT.md) - - -## Manual installation - -Use separate source and a non-root service account that can write the working/data/session directories. Run **from that project root** after copying/configuring `.env` as above: - -~~~sh -composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader -composer check-platform-reqs --no-dev -mkdir -p data/session -php bin/self-check.php --release -php bin/runtime-permissions.php --require-non-root -php bin/migrate.php --writers-stopped --db data/shabbat.sqlite -php bot.php -~~~ - -The last command starts the bot in the foreground and connects to Telegram. Stop with Ctrl+C and wait for exit; repeat `php bot.php` to start again. Manual process supervision is the operator's responsibility; no systemd unit is supplied. Windows can run many offline checks; the POSIX non-root probe and Linux deployment acceptance require the appropriate host. - -Composer normally applies/verifies local patches on install. If scripts were disabled, run these **in the stopped installation**: - -~~~sh -composer install --no-dev --no-scripts --no-interaction --prefer-dist -php scripts/apply-patches.php -php scripts/verify-patches.php -~~~ - -Unknown/partially modified dependency bytes fail verification. Reapplication is idempotent. Never patch an installed library while its bot is running. - - -## Configuration - -The bot reads project-root `.env` as raw INI. Nonempty process environment values take precedence for credential/path lookup; avoid duplicate empty overrides. Maintenance path resolution also reads `.env`; explicit `--db` selects the target database. Relative paths are rooted at the project. - -| Variable | Default / requirement | Purpose | -|---|---|---| -| `API_ID` | Required positive integer | Telegram application identifier. | -| `API_HASH` | Required 32 hexadecimal characters | Telegram application secret. | -| `BOT_TOKEN` | Required | This installation's BotFather token. | -| `ADMIN` | Configure for operator access | Comma-separated IDs/resolvable usernames; numeric IDs avoid ambiguity. Configured owners retain recovery/restart access. | -| `DATA_DIR` | Project `data` | Application and BroadcastManager state; Compose overrides to `/app/data`. | -| `APP_DB_PATH` | `DATA_DIR/shabbat.sqlite` | Application database; example explicitly uses `data/shabbat.sqlite`. | -| `SESSION_PATH` | Project `bot.shabbat` | MadelineProto session; example uses `data/session/bot.shabbat`, Compose uses `/app/runtime/bot.shabbat`. | -| `HEARTBEAT_PATH` | `DATA_DIR/scheduler-heartbeat.json` | Permission/notification heartbeat file. | -| `LEGACY_DATA_PATH` | Project root | Read-only legacy root containing `data/DBgroups.txt`; startup only adds missing registrations. | -| `GEONAMES_USERNAME` | Empty | Your webservice account; demo is unsupported. | -| `GEONAMES_ENDPOINT` | `https://secure.geonames.org` | Verified HTTPS endpoint, no HTTP fallback. | -| `CUSTOM_EMOJI_ENABLED` | `1` | `0` selects basic emoji; definite eligibility failures also trigger guarded fallback. | -| `SOURCE_URL` | Empty; set before deployment | HTTPS exact corresponding source URL. Missing configuration is reported, not blocked at startup. | -| `BUILD_COMMIT` | Archive metadata or 40-hex commit | Build/runtime identity and Compose build argument. Preserve fingerprints for local changes. | - -[Configuration details](docs/CONFIGURATION.md) · [Privacy](docs/PRIVACY.md) - - -## Telegram setup - -1. Obtain API credentials through [Telegram application management](https://my.telegram.org/apps). -2. Create/select the bot with [BotFather](https://t.me/BotFather), obtain its token and allow group additions. -3. Open the bot privately with `/start`. Add it to the intended group with rights to restrict members/change default permissions. Optional deletion/pinning needs the relevant Telegram rights. -4. Enable BotFather `/setinline` for inline search/sharing. Suggested placeholder: `shabbat · zmanim · daf · omer · loc city`. City-name search requires neither `/setinlinegeo` nor `/setinlinefeedback`; GPS sharing is explicit. -5. With command-menu mutation access, send `/setcommands all all preview` privately to inspect the menu count; `/setcommands all all` updates Telegram. Group administration alone does not grant that access. - -Optional cleanup only processes updates Telegram delivers. General messages from other bots require the receiving bot's **Bot-to-Bot Communication Mode** enabled through BotFather, group administrator status and **Group Privacy Mode** disabled, as described in [Telegram's bot-to-bot documentation](https://core.telegram.org/api/bots/bot-to-bot). Deletion still needs the relevant rights; this is not a guarantee of receiving every message. - - -## Group setup - -1. Send `/add` **as a group administrator in the group**. New groups added this way start **off** and open private setup. -2. Confirm the named group, location, IANA zone and Israel/diaspora calendar. Jerusalem defaults must be reviewed; they are not inferred location. -3. Select mode and Shabbat/festival policy, then candle/havdalah methods and operational offsets. -4. Explicitly enable desired zmanim/Daf/tefillin/Omer modules. Preview privately; a group TEST needs separate confirmation and is rate limited. -5. Return through private `/groups` or group `/settings`. Personal and group settings remain separate. - -**Current registration caveat:** `/settings` can register a previously unknown group after verifying its administrator, and that path inherits the database's **lock** default. Use `/add` for the explicit off-first flow and review mode/location immediately. `/settings` does not reactivate a removed group; `/add` can. This behavior is documented as implemented, not silently changed during publication preparation. - -Panels show current values, upcoming work and recovery status. Changes require current authority and a user/group/revision-bound confirmation. A missing/closed forum topic produces an error, not redirection. Restoration uses saved original rights; missing/unverified/conflicting snapshots need authorized resolution. Optional cleanup of member/bot messages starts disabled. Group removal is blocked by unresolved restoration debt. - -[Settings](docs/GROUP_SETTINGS.md) · [Guided interface](docs/USER_EXPERIENCE.md) · [Permission recovery](docs/PERMISSION_RECOVERY.md) - - -## Location and languages - -Six locale catalogs are supplied: Hebrew `he`, English `en`, Russian `ru`, French `fr`, Spanish `es`, Brazilian Portuguese `pt-br`. Their keys/placeholders are checked; this is not a promise that every third-party error or inherited interface is translated. Hebrew ritual wording remains Hebrew, with supplied explanatory text. Telegram menus use `pt`; client menu language and the saved bot preference are separate. - -Use private `/preferences` or `/language`; group `/language` requires its administrator. For city search, create a [GeoNames account](https://www.geonames.org/login), activate free webservices and set `GEONAMES_USERNAME`. - -In the appropriate panel: **location/timezone → inline city search → city/country/region → inspect coordinates/timezone → confirm the named target**. Private search, known cities, coordinates, IANA zone search and prompted GPS replies are available. Choices expire, belong to one user and are consumed once. Changing timezone does not move coordinates. - -Public `loc city` and a bare city name support location search/sharing. Public timezone queries include `tz Jerusalem` or `Asia/Jerusalem`; they do not update settings. Setup queries `location CITY` and `timezone QUERY` require the active private location/timezone prompt and lead to confirmation. Other modes: `shabat`, `shabbat`, `שבת`, `zmanim`, `daf`, `omer`. Check the result's displayed location: personal sharing and an authorized group-context preview may differ. Quota/account failures remain visible errors. - -[Inline/GeoNames guide](docs/INLINE_GEONAMES.md) - - -## Calendar modules - -| Module | Implemented settings / limits | -|---|---| -| Shabbat/festivals | City candle custom or exact 10/15/18/20/22/30/40/custom minutes. Jerusalem city default is 40; explicit 18 remains 18. Havdalah: 8.5° or fixed 42/50/72/custom minutes. Fixed 72 does not represent every Rabbeinu Tam method. | -| Group timing | Close-before-candles/open-after-havdalah offsets are separate. Adjacent holy days stay closed continuously. Israel/diaspora is explicit. Announcements have independent timing/design, Hebrew dates and Torah-portion metadata. | -| Zmanim | Civil date/IANA zone; dawn, misheyakir, sunrise, Gra/MGA Shema/prayer, midday, mincha, plag, sunset, nightfall and midnight where available. Missing values remain unavailable. | -| Daf Yomi | Civil-date calculation and provider study link; skipping sends never pauses the cycle. | -| Tefillin | Fixed/interval/sunset-relative schedules, deduplication, limits, spacing, quiet windows/pause. Start uses 11.5° `misheyakir`; the stricter provider field is not selectable. No Shabbat/Yom Tov sends; explicit Chol HaMoed/observed Tisha B'Av policies. Cutoff rechecked at dispatch. Optional unique-user acknowledgement toggles participation. | -| Omer | 49-day seasonal count advances across unsent days/years. Night sends wait for selected nightfall and group quiet-period end; optional day completion omits blessing. `ashkenaz` and documented `sephard` sequence, not every community variant. Full form includes selected preparation/traditional additions. | - -Blessing guidance concerns individual eligibility; delivery history is not a person's counting history. See [method definitions](docs/ZMANIM_METHODS.md), [calendar presentation](docs/CALENDAR_PRESENTATION.md) and [text provenance](THIRD_PARTY_NOTICES.md). - - -## Bot commands - -Send these **in Telegram**. Menus are shortcuts, not a full permission contract. `[...]` means optional. - -### Users - -| Command | Where / permission | Effect | -|---|---|---| -| `/start`, `/help` | Private; any user | Home menu/help. | -| `/preferences` | Private; own settings | Personal location/calendar/methods. | -| `/language`, `/lang` | Private; own settings | Personal language; group usage needs group admin. | -| `/groups [search]` | Private; fresh group-admin checks | List/search manageable known groups. | -| `/shabat [YYYY-MM-DD]`, `/shabbat [YYYY-MM-DD]` | Private or registered group; any user | Shabbat/festival times for that context. | -| `/zmanim [YYYY-MM-DD]` | Private or registered group; any user | Daily times. | -| `/daf [YYYY-MM-DD]` | Private or registered group; any user | Daf Yomi. | -| `/omer [YYYY-MM-DD]` | Private or registered group; any user | Count/season for the selected date. | -| `/stats` | Private or group; any user | Public aggregates, without subscriber identities. | -| `/donate` | Private; any user | Optional Stars offers; payment needs Telegram checkout. | -| `/source`, `/license`, `/version` | Private or group; any user | Source offer, licensing/build identity. | - -### Group administrators - -| Command | Where / permission | Effect | -|---|---|---| -| `/add` | Group; current group admin | Register/reactivate and open setup. | -| `/remove` | Group; current group admin | Deactivate; restoration debt blocks removal. | -| `/settings` | Group; current group admin | Private group settings; see registration caveat above. | -| `/settings [GROUP_ID]` | Private; current target-group admin | Open target or list groups without ID. | -| `/language`, `/lang` | Group; current group admin | Private selection of group language. | - -Advanced **private** forms require the panel's exact token, its owner/scope/revision and current group authority for group targets. Prefer the guided buttons. +Health can take the initial 90-second startup period to become ready. The service is `shabbat`. Named volumes `bot-data` and `madeline-session` preserve application and session data; their full names include the Compose project name. -| Form | Effect | -|---|---| -| `/city TOKEN QUERY` | Search pending location. | -| `/coordinates TOKEN LATITUDE LONGITUDE IANA_ZONE [NAME]` | Preview explicit coordinates/zone. | -| `/location TOKEN IANA_ZONE` or `/location TOKEN auto` | Prompt for GPS reply; auto requires GeoNames. | -| `/timezone TOKEN QUERY` | Search IANA zones. | -| `/configure TOKEN FORM` | Preview the panel's supported settings form. | -| `/viewdate TOKEN YYYY-MM-DD` | Selected calendar date. | -| `/template TOKEN` + newline + content | Review a group template candidate. | -| `/buttons TOKEN` + newline + keyboard content | Review JSON/legacy keyboard content. | - -### Bot managers + +## 3. Set up Telegram and your first group -All below run **in private**. Bot-manager roles are separate from group administration; view-only roles cannot mutate. - -| Command | Required access | Effect | -|---|---|---| -| `/admin` | Bot manager | Administration panel. | -| `/adminstats` | Statistics | Administrative aggregates. | -| `/testzmanim [GROUP_ID]` | Statistics | Paged diagnostics/filter/search and optional private JSON export. | -| `/subscribers` | Subscribers | Known peer/profile directory. | -| `/broadcast` | Broadcast | Drafts/jobs; sending/editing/deleting needs mutation rights and relevant confirmation. | -| `/managers` | Manage managers | Delegated roles within actor's authority. | -| `/systemlinks` | System links | Navigation links, which confer no permissions. | -| `/trackinglinks` | Tracking links | Activation counters/management; changes need mutation access. | -| `/setcommands [LANGUAGE] [SCOPE] [preview]` | Command-menu mutation, even preview | Inspect or update Telegram menus. | -| `/closegroups`, `/opengroups` | Group-operations mutation | Immediately apply a one-hour override to active registered groups; preserve prelocks/report conflicts. Real permission operations. | -| `/restart` | Configured `ADMIN` owner only | Orderly runtime restart. | +1. In BotFather, allow group additions. Enable `/setinline` for inline location/calendar search. +2. Send `/start` privately. Check the home buttons, `/preferences` and your language. +3. Add the bot as a group administrator with permission to restrict members. Optional deletion/pinning requires the corresponding rights. +4. As a group administrator, send `/add` **in the group**. This creates a new group in **off** mode and opens setup. +5. Review location, timezone, calendar, mode and candle/havdalah methods. Enable only the reminders you want. Return through `/groups` privately or `/settings` in the group. -Menu languages: `all|he|en|ru|fr|es|pt-br`; scopes: `all|private|operators|groups|group_admins`; defaults: `all all`. Example: `/setcommands ru group_admins preview`. Group menus currently list `/settings`; other supported commands can be typed. +Use `/add` for first setup: direct `/settings` registration currently inherits lock mode. Review the defaults before enabling a real group. Bot administrators and group administrators have separate permissions. -[Administration](docs/ADMIN_PANEL.md) · [Diagnostics](docs/DIAGNOSTICS.md) +[All bot commands](docs/COMMANDS.md) · [Group settings](docs/GROUP_SETTINGS.md) · [Location and inline search](docs/INLINE_GEONAMES.md) - -## Operations + +## Everyday operation and updates -Docker commands run **on the host at the same project root/project identity**, with daemon access. PHP commands run **inside the image at /app**, or at the manual root as its service user. Operational output can contain group IDs/state; keep it private. +Run **on the host, from the installed project root**, with Docker access and the same Compose project identity: -| Task | Command | Effect / condition | +| Action | Command | Effect | |---|---|---| -| Build | `docker compose build` | Build from source/lock. | -| Start | `docker compose up -d shabbat` | Start/recreate and connect to Telegram. | -| Stop | `docker compose stop shabbat` | Graceful stop, 60-second grace; retain volumes. | -| Restart | `docker compose restart shabbat` | Restart same service; does not rebuild image. | -| Status | `docker compose ps` | Container/service state. | -| Logs | `docker compose logs --tail=100 shabbat` | Read logs; add `--follow` to stream, Ctrl+C exits viewer. | -| Health | `docker compose exec shabbat php bin/health.php` | Schema/connection, both heartbeats and queue/lock metrics. | -| Deep health | `docker compose exec shabbat php bin/health.php --deep` | Also integrity/foreign-key checks; more expensive. | -| Release gate | `docker compose run --rm --no-deps shabbat php bin/self-check.php --release` | Offline platform/patch checks. | -| Write probe | `docker compose run --rm --no-deps shabbat php bin/runtime-permissions.php --require-non-root` | Offline temporary-file probe; may append to existing worker log. | - -Both heartbeats must be no older than 180 seconds. Offline/restored DBs can pass structural checks yet return `healthy=false` / exit 1 without schedulers. Never manufacture heartbeat files. - -Run direct maintenance below **at project root as service user**. In Docker, prefix PHP commands with `docker compose run --rm --no-deps shabbat` and use container paths. `--writers-stopped` is an attestation, not a stop command. - -| Task | Command | Effect / requirement | -|---|---|---| -| Migrate | `php bin/migrate.php --writers-stopped --db data/shabbat.sqlite --backup-dir backups` | All writers stopped, existing backup directory. Back up existing DB/apply migrations; omit backup only for new DB. | -| Backup | `php bin/backup.php --db data/shabbat.sqlite --directory backups --keep 7` | Consistent SQLite copy/manifest; retain seven tool-named backups. Online maintenance allowed. | -| Restore | `php bin/restore.php --backup backups/CHOSEN.sqlite --db data/shabbat.sqlite --writers-stopped` | Verified chosen backup, stopped writers; previous destination retained. | -| Inspect legacy | `php bin/import-legacy.php --db data/shabbat.sqlite --legacy /path/to/legacy-copy --dry-run` | Inspect/report, no imported-record writes or Telegram actions. | -| Import legacy | `php bin/import-legacy.php --db data/shabbat.sqlite --legacy /path/to/legacy-copy --apply --writers-stopped --backup-dir backups` | Existing migrated DB/backup directory, stopped writers; additive import. | -| Calendar diagnostic | `php bin/check-calendar.php --date=2026-10-15` | Public HTTPS only; no DB, .env or session. `--help` lists coordinates/zone/calendar/language options. | -| Verify patches | `php scripts/verify-patches.php` | Inspect approved installed bytes. | -| Apply patches | `composer patches` | Apply/verify; stopped installation only. | -| Build identity | `php bin/build-metadata.php --commit=YOUR_40_HEX_COMMIT` | Replace placeholder with verified provenance; writes metadata/rejects stale fingerprint. | - - -## Upgrade and legacy import - -Preserve private configuration, data/session and Compose project identity. Use reviewed source/lock; stop every writer before schema or installed dependency changes. Routine upgrades use `composer install`, not `composer update`. - -For an existing Compose DB, from the prepared project connected to the **same volumes**: - -~~~sh -docker compose build -docker compose stop shabbat -docker compose run --rm --no-deps shabbat mkdir -p /app/data/backups -docker compose run --rm --no-deps shabbat php bin/backup.php --db /app/data/shabbat.sqlite --directory /app/data/backups --keep 7 -~~~ - -Complete the stopped session/BroadcastManager backup and restore rehearsal below **before proceeding**. Then apply the schema and release checks: - -~~~sh -docker compose run --rm --no-deps shabbat php bin/migrate.php --writers-stopped --db /app/data/shabbat.sqlite --backup-dir /app/data/backups -docker compose run --rm --no-deps shabbat php bin/self-check.php --release -~~~ +| Start | `docker compose up -d shabbat` | Start/connect the bot | +| Stop | `docker compose stop shabbat` | Stop the bot; retain volumes | +| Restart | `docker compose restart shabbat` | Restart the current image | +| Status | `docker compose ps` | Display service state | +| Logs | `docker compose logs --tail=100 -f shabbat` | Follow logs; Ctrl+C stops the log view | +| Health | `docker compose exec shabbat php bin/health.php --deep` | Check the running scheduler/database | -`docker compose up -d shabbat` then activates the reviewed image; inspect logs/health. Manual installations follow stop/backup/install-from-lock/migrate/check/start. +**Updating requires a stopped-writer backup and migration check.** Follow the [upgrade guide](docs/PRODUCTION_UPGRADE.md) ([עברית](docs/PRODUCTION_UPGRADE_HE.md)) for verified paths, staging, import or SQLite upgrade, session preservation and rollback. Rebuilding alone does not migrate a database; `restart` alone does not install a new image. Do not run `composer update` for an ordinary deployment or remove data volumes. -3.0.0 adds no migration beyond dev.9. dev.8 → dev.9 added `016_delivery_safety.sql`. dev.6 also needs 013–015; earlier versions apply all missing migrations automatically. Do not edit applied SQL. Uncertain past delivery attempts are handled conservatively; older unverified permission snapshots still require administrator review. + +## More help -For the old file-based bot: preserve a protected legacy copy; stop old writers for final import/cutover; initialize a new DB; run dry-run, compare counts/templates/rights/warnings, then apply with stopped writers and backup directory. The exact commands appear above. For Docker mount only the protected copy read-only: - -~~~sh -docker compose run --rm --no-deps --volume /absolute/path/legacy-copy:/legacy:ro shabbat php bin/import-legacy.php --db /app/data/shabbat.sqlite --legacy /legacy --dry-run -~~~ - -Explicit import preserves applicable groups, templates/entities/media/buttons, drafts, known peers and permission evidence without Telegram calls. New reminder modules remain off; malformed/missing snapshots remain review items. The startup `DBgroups.txt` bridge only adds registrations and does not replace full import. Never substitute a test bot's DB/session for production state. - -[Migration](docs/MIGRATION.md) · [Schema](docs/DATABASE.md) · [Older snapshots](docs/DEV8_PERMISSIONS.md) - - -## Backup and rollback - -SQLite backup uses `VACUUM INTO`, validates integrity/foreign keys/schema history and writes SHA-256 metadata. Copying only a live main file can omit committed WAL. Retention only removes this tool's strictly named backups in the chosen directory; choose `--keep` deliberately. - -SQLite does **not** include the session or all BroadcastManager files. Stop their writers and keep these separate paths, private configuration and matching code/lock alongside the DB backup. Docker example **after stopping the service**, on the host project root. Use a new empty snapshot directory for each backup (replace `../shabbat-private-backup` consistently): - -~~~sh -mkdir -p ../shabbat-private-backup -chmod 700 ../shabbat-private-backup -docker compose cp shabbat:/app/data ../shabbat-private-backup/data -docker compose cp shabbat:/app/runtime ../shabbat-private-backup/runtime -cp .env ../shabbat-private-backup/config.env -chmod 600 ../shabbat-private-backup/config.env -~~~ - -This copies complete stopped durable directories to a sibling outside the Docker build context. Keep them private, outside publication material. For manual installation copy the actual resolved data/session paths with writers stopped. Verify all backups before replacement. - -Create a separate rehearsal directory and restore a chosen verified SQLite backup there: - -~~~sh -mkdir -p ../shabbat-rehearsal -php bin/restore.php --backup backups/CHOSEN.sqlite --db ../shabbat-rehearsal/restored.sqlite --writers-stopped -php bin/health.php --db ../shabbat-rehearsal/restored.sqlite --deep -~~~ - -Replace `CHOSEN.sqlite` with the real filename. Inspect structural fields, schema and sampled records; overall health may exit 1 without live heartbeats. - -Rollback: stop writers; retain a current recovery backup; resolve/record outstanding Telegram permission obligations; restore older compatible DB/code/lock/session/BroadcastManager state; start one matching instance and review fresh remote reconciliation. DB restoration cannot reverse already accepted Telegram changes. Restore validates the input/manifest, obtains the writer lock and retains `*.before-restore-*`. Busy writers or incompatible schema require investigation, not deleting locks/volumes. - -[Backup/restore details](docs/BACKUP_RESTORE.md) - - -## Troubleshooting - -| Symptom | Action | +| Topic | Guide | |---|---| -| Missing commit/changed source at build | Retain verified archive metadata or supply actual reviewed checkout identity. Regenerate archive metadata after source changes. | -| SQLite release gate fails | Use the pinned image/accepted fixed runtime; development warnings are not production acceptance. | -| Schema missing/stale | Stop writers, back up and migrate explicit paths. Startup does not migrate. | -| Patch failure | Check lock/manifests; reinstall in a clean stopped copy. Do not weaken verification. | -| New group sends nothing | Review mode, location, module opt-in and schedule; `/add` starts off. | -| Settings inaccessible/expired | Open private chat and fresh `/settings` as current group administrator. | -| City search fails | Check GeoNames activation/account/quota/HTTPS; use known cities/coordinates if needed. | -| Unhealthy status | Inspect both heartbeat ages, schema, queue and logs; stopped schedulers have no fresh heartbeat. | -| Group not reopening | Use recovery/diagnostics for missing/unverified/conflicting snapshots; preserve original restrictions. | -| Missing/late reminder | Check timezone/date, quiet hours, holiday/cutoff policy, module and topic. Dispatch rechecks eligibility. | -| Custom emoji rejection | Set `CUSTOM_EMOJI_ENABLED=0`; definite eligibility failures also trigger fallback. | -| Permission-denied files | Check image UID/GID 10001 and working/data/session paths; run write probe. Avoid world-writable permissions. | - -[More troubleshooting](docs/TROUBLESHOOTING.md) · [Privacy](docs/PRIVACY.md) · [Security reporting](.github/SECURITY.md) - - -## Project and development - -| Path | Contents | -|---|---| -| `bot.php`, `src/` | Entry point; calendar/UI/scheduling/storage/Telegram/runtime services. | -| `bin/`, `migrations/` | Maintenance tools and immutable numbered schema changes. | -| `resources/` | Six locales, attributed Omer resources and PHP configuration. | -| `patches/` | Reviewed bases/replacements/diffs, provenance and SHA-256 manifests. | -| `tests/` | Offline tests and required JSON/TXT/PHP fixtures. | -| `scripts/` | Patches, quality, dependencies and local packaging. | -| `docs/`, `LICENSES/` | Guides, provenance and license texts. | -| `.github/` | CI/release workflows and contribution/security templates. | - -Run **in a separate development copy at its root as developer**, without production state/credentials. Install includes test tools; tests use isolated temporary state. - -~~~sh -composer install --no-interaction --prefer-dist -composer validate --strict --no-check-all -composer check-platform-reqs -php scripts/verify-patches.php -composer test -composer lint -composer style -composer analyse -composer check-locales -composer check-docs -composer self-check -~~~ - -`--no-check-all` omits generic version-range advice for the deliberate exact MadelineProto pin; strict schema/lock checks remain. `lint` checks syntax/quality; `style` enforces PHPCS errors; `analyse` runs PHPStan. `composer style-review` includes the broader style report; `composer style-fix` **rewrites files**, for reviewed development copies only. - -At the same development root: - -~~~sh -composer show --locked --format=json -composer licenses --format=json -composer audit --locked --format=json -composer dependencies -~~~ - -These report locked packages, installed licenses and current advisories; audit contacts advisory services. `dependencies` writes evidence under `docs/`; review/sanitize it before inclusion. Do not replace the lock to silence a check. - -Developer-only patch regeneration, from the development root: - -~~~sh -php patches/madelineproto/generate-artifacts.php -php patches/broadcastmanager/generate-artifacts.php -~~~ - -These commands rewrite patch artifacts/manifests from bundled reviewed sources. They are for an intentional patch review, not routine installation. Review the changed hashes/diffs and run the full patch checks afterward. The apply/verify PHP scripts also accept an optional first positional vendor directory; leave it unset for the normal `vendor/` path. - -For release packaging from a clean committed checkout, with Git, Python 3.9+ and the locked development installation available: - -~~~sh -php scripts/package.php -~~~ - -This writes `shabbat-3.0.0.zip`, `shabbat-3.0.0-corresponding-source.zip`, `RELEASE_MANIFEST.json` and `SHA256SUMS` to `dist/`, without publishing. The source bundle includes locked runtime sources, reviewed patches and pinned preferred-source supplements. The legacy three-archive tool is available only through `php scripts/package.php --development` for local development, with default output `dist/development/`; its installed tool distributions do not constitute a release corresponding-source offer. See [release preparation](docs/RELEASE.md) for prerequisites, source scope and artifact checks. - -[Architecture](docs/ARCHITECTURE.md) · [Dependencies](docs/DEPENDENCIES.md) · [Patches](docs/PATCHES.md) · [Release preparation](docs/RELEASE.md) · [Contributing](.github/CONTRIBUTING.md) · [Code of conduct](.github/CODE_OF_CONDUCT.md) - - +| Detailed installation and manual PHP setup | [Installation](docs/INSTALLATION.md) | +| Environment variables and preferences | [Configuration](docs/CONFIGURATION.md) | +| Commands and administration | [Commands](docs/COMMANDS.md), [operations](docs/OPERATIONS.md), [admin panel](docs/ADMIN_PANEL.md) | +| Upgrade, import and recovery | [English](docs/PRODUCTION_UPGRADE.md), [עברית](docs/PRODUCTION_UPGRADE_HE.md), [import mapping](docs/MIGRATION.md), [backup/restore](docs/BACKUP_RESTORE.md) | +| Permissions, timing and reminders | [Permission recovery](docs/PERMISSION_RECOVERY.md), [calendar methods](docs/ZMANIM_METHODS.md), [delivery safety](docs/DELIVERY_SAFETY.md) | +| Problems and diagnostics | [Troubleshooting](docs/TROUBLESHOOTING.md), [diagnostics](docs/DIAGNOSTICS.md) | +| Development and validation | [Contributing](.github/CONTRIBUTING.md), [architecture](docs/ARCHITECTURE.md), [acceptance status](docs/IMPLEMENTATION_STATUS.md) | +| Releases and source packaging | [Changelog](CHANGELOG.md), [release notes](docs/RELEASE_NOTES.md), [release process](docs/RELEASE.md) | + + ## License and credits -The integrated application is **AGPL-3.0-only**: [LICENSE](LICENSE), [licensing policy](docs/LICENSING.md). Historical MIT notices/prior grants remain. Dependency, data and transcription licenses are separate; their headers/notices are preserved. - -Credit to [WizardLoop](https://github.com/WizardLoop), [MadelineProto](https://github.com/danog/MadelineProto), [BroadcastManager](https://github.com/WizardLoop/BroadcastManager), [Hebcal](https://www.hebcal.com/), [GeoNames](https://www.geonames.org/) and attributed Hebrew Wikisource liturgy sources. Components, licenses, immutable revisions, modifications and attribution are recorded in [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md), dependency manifests and resource provenance. +The application is **AGPL-3.0-only**. Preserve its [license](LICENSE), historical copyright notices and [third-party notices](THIRD_PARTY_NOTICES.md). Dependency licenses remain separate. MadelineProto, BroadcastManager, Hebcal, GeoNames and bundled resource sources are credited there. -Operators/forks must make the **exact deployed corresponding source** available, including local application/dependency changes and necessary build material, and set `SOURCE_URL`. A different public `main` is insufficient. Publication material excludes private configuration, live DB/WAL/SHM, sessions, backups, logs and caches, while retaining required source, tests/fixtures, patch baselines and license texts. +Operators must offer the exact corresponding source of deployed modifications. The separate corresponding-source ZIP includes the application and documented runtime sources, with no claim to the whole operating system or every development tool. See [licensing](docs/LICENSING.md). diff --git a/docs/ADMIN_PANEL.md b/docs/ADMIN_PANEL.md index 1b14f2a..cf4b127 100644 --- a/docs/ADMIN_PANEL.md +++ b/docs/ADMIN_PANEL.md @@ -74,7 +74,7 @@ Broadcast drafts show their content, recipient audience, pin, scheduled time, au Public /stats provides only aggregate group/reminder information. Administrative statistics use audience, activity, group and delivery sections, each with refresh and return controls. A statistics-only manager can read those sections without access to subscriber identities. -The auxiliary MadelineProto broadcast client is shared per event handler. Owner-only /restart has a bounded acknowledgement, stops application work and completes the pinned SDK loop. Docker's restart policy starts the process again. The integration also waits for the pinned SDK's pending API finalizers while the application writer lock remains held; this uses an internal public method of exact version8.7.0 and must be reviewed before any dependency upgrade. It is covered offline and still requires the separate test bot's server acceptance. +The auxiliary MadelineProto broadcast client is shared per event handler. Owner-only /restart acknowledges the request and stops new application work before the reviewed SDK restart path. Shutdown preserves the writer lock while managed work and SDK finalizers drain. This lifecycle must be revalidated when upgrading MadelineProto; offline regression does not replace a restart test with the separate staging bot. ## Paged calendar diagnostics diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index fc1add6..4915ce5 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -1,4 +1,4 @@ -Current dev.9 runtime and migration changes: [delivery safety, independent scheduling, queue retention and verification limits](DEV9_DELIVERY_SAFETY.md). Historical release-specific numbers below apply to their named versions. +Current runtime and migration rules: [delivery safety, independent scheduling, queue retention and verification limits](DELIVERY_SAFETY.md). Historical release-specific numbers below apply to their named versions. # Architecture diff --git a/docs/COMMANDS.md b/docs/COMMANDS.md new file mode 100644 index 0000000..de5324e --- /dev/null +++ b/docs/COMMANDS.md @@ -0,0 +1,64 @@ +# Bot commands + +Send these **in Telegram**. Menus are shortcuts, not a full permission contract. `[...]` means optional. + +## Users + +| Command | Where / permission | Effect | +|---|---|---| +| `/start`, `/help` | Private; any user | Home menu/help. | +| `/preferences` | Private; own settings | Personal location/calendar/methods. | +| `/language`, `/lang` | Private; own settings | Personal language; group usage needs group admin. | +| `/groups [search]` | Private; fresh group-admin checks | List/search manageable known groups. | +| `/shabat [YYYY-MM-DD]`, `/shabbat [YYYY-MM-DD]` | Private or registered group; any user | Shabbat/festival times for that context. | +| `/zmanim [YYYY-MM-DD]` | Private or registered group; any user | Daily times. | +| `/daf [YYYY-MM-DD]` | Private or registered group; any user | Daf Yomi. | +| `/omer [YYYY-MM-DD]` | Private or registered group; any user | Count/season for the selected date. | +| `/stats` | Private or group; any user | Public aggregates, without subscriber identities. | +| `/donate` | Private; any user | Optional Stars offers; payment needs Telegram checkout. | +| `/source`, `/license`, `/version` | Private or group; any user | Source offer, licensing/build identity. | + +## Group administrators + +| Command | Where / permission | Effect | +|---|---|---| +| `/add` | Group; current group admin | Register/reactivate and open setup. | +| `/remove` | Group; current group admin | Deactivate; restoration debt blocks removal. | +| `/settings` | Group; current group admin | Private group settings; see the registration caveat in [group settings](GROUP_SETTINGS.md). | +| `/settings [GROUP_ID]` | Private; current target-group admin | Open target or list groups without ID. | +| `/language`, `/lang` | Group; current group admin | Private selection of group language. | + +Advanced **private** forms require the panel's exact token, its owner/scope/revision and current group authority for group targets. Prefer the guided buttons. + +| Form | Effect | +|---|---| +| `/city TOKEN QUERY` | Search pending location. | +| `/coordinates TOKEN LATITUDE LONGITUDE IANA_ZONE [NAME]` | Preview explicit coordinates/zone. | +| `/location TOKEN IANA_ZONE` or `/location TOKEN auto` | Prompt for GPS reply; auto requires GeoNames. | +| `/timezone TOKEN QUERY` | Search IANA zones. | +| `/configure TOKEN FORM` | Preview the panel's supported settings form. | +| `/viewdate TOKEN YYYY-MM-DD` | Selected calendar date. | +| `/template TOKEN` + newline + content | Review a group template candidate. | +| `/buttons TOKEN` + newline + keyboard content | Review JSON/legacy keyboard content. | + +## Bot managers + +All below run **in private**. Bot-manager roles are separate from group administration; view-only roles cannot mutate. + +| Command | Required access | Effect | +|---|---|---| +| `/admin` | Bot manager | Administration panel. | +| `/adminstats` | Statistics | Administrative aggregates. | +| `/testzmanim [GROUP_ID]` | Statistics | Paged diagnostics/filter/search and optional private JSON export. | +| `/subscribers` | Subscribers | Known peer/profile directory. | +| `/broadcast` | Broadcast | Drafts/jobs; sending/editing/deleting needs mutation rights and relevant confirmation. | +| `/managers` | Manage managers | Delegated roles within actor's authority. | +| `/systemlinks` | System links | Navigation links, which confer no permissions. | +| `/trackinglinks` | Tracking links | Activation counters/management; changes need mutation access. | +| `/setcommands [LANGUAGE] [SCOPE] [preview]` | Command-menu mutation, even preview | Inspect or update Telegram menus. | +| `/closegroups`, `/opengroups` | Group-operations mutation | Immediately apply a one-hour override to active registered groups; preserve prelocks/report conflicts. Real permission operations. | +| `/restart` | Configured `ADMIN` owner only | Orderly runtime restart. | + +Menu languages: `all|he|en|ru|fr|es|pt-br`; scopes: `all|private|operators|groups|group_admins`; defaults: `all all`. Example: `/setcommands ru group_admins preview`. Group menus currently list `/settings`; other supported commands can be typed. + +[Administration](ADMIN_PANEL.md) · [Diagnostics](DIAGNOSTICS.md) diff --git a/docs/CONFIGURATION.md b/docs/CONFIGURATION.md index 7dc7824..8111c45 100644 --- a/docs/CONFIGURATION.md +++ b/docs/CONFIGURATION.md @@ -18,7 +18,7 @@ The bot reads the private project-root `.env` as raw INI; nonempty process envir | `GEONAMES_USERNAME` | Optional; required for remote city/ID/GPS timezone lookup | Operator-owned account with web services enabled. Manual coordinates plus an explicit IANA zone remain available without it. | | `GEONAMES_ENDPOINT` | `https://secure.geonames.org` | Validated HTTPS provider endpoint. Account/quota errors are provider failures, not empty city lists. | | `CUSTOM_EMOJI_ENABLED` | `1`; set `0` for basic emoji | Enables supplied custom icons. Definite eligibility errors also trigger the guarded basic-emoji fallback. Client/account acceptance still needs a live test. | -| `SOURCE_URL` | Empty in unpublished example; required by deployment/source policy | HTTPS URL to the exact corresponding source of the deployed build. Missing/invalid values produce the source-offer warning; startup does not enforce this policy automatically. | +| `SOURCE_URL` | Matching release URL in the public example; required by deployment/source policy | HTTPS URL to the exact corresponding source of the deployed build. Missing/invalid values produce the source-offer warning; startup does not enforce this policy automatically. | | `BUILD_COMMIT` | Optional process/Compose build metadata | Actual matching 40-hex commit for build identity. Not a bot credential and not a replacement for the source fingerprint of local modifications. | `BUILD_COMMIT` is intentionally not filled in `.env.example`. Do not enter the old repository commit as if it described new unpublished files. Compose's `environment` section overrides the data/session values from its `env_file`. Keep the same Compose project name on upgrades so named volumes remain attached. @@ -29,7 +29,7 @@ Private preferences and authorized group settings are separate contexts. Each co The six catalogs are `he`, `en`, `ru`, `fr`, `es` and `pt-br`. Catalog completeness and placeholder parity are checked automatically; this is not a claim of independent native-speaker review or complete translation of provider scripture/liturgy. Hebrew source text and external provider strings may remain in their source language. -`/language` and `/lang` open the authorized language selector. `/setcommands all all preview` is an operator-only private preview; omitting `preview` writes command menus to Telegram. The menu language for Brazilian Portuguese is Telegram's `pt`, while application preferences use `pt-br`. Group administrator menus expose `/settings`. See the complete command tables in the READMEs and [operator guide](OPERATIONS.md). +`/language` and `/lang` open the authorized language selector. `/setcommands all all preview` is an operator-only private preview; omitting `preview` writes command menus to Telegram. The menu language for Brazilian Portuguese is Telegram's `pt`, while application preferences use `pt-br`. Group administrator menus expose `/settings`. See the complete [command reference](COMMANDS.md) and [operator guide](OPERATIONS.md). New daily-zmanim/daf, tefillin and Omer scheduling modules are opt-in. Group locking, closing/opening notices and other content settings are independently configurable; imported legacy alerts use reviewed legacy settings. See [group settings](GROUP_SETTINGS.md), [methods](ZMANIM_METHODS.md) and [migration](MIGRATION.md). diff --git a/docs/DATABASE.md b/docs/DATABASE.md index c81667f..e538db6 100644 --- a/docs/DATABASE.md +++ b/docs/DATABASE.md @@ -1,4 +1,4 @@ -Current dev.9 runtime and migration changes: [delivery safety, independent scheduling, queue retention and verification limits](DEV9_DELIVERY_SAFETY.md). Historical release-specific numbers below apply to their named versions. +Current runtime and migration rules: [delivery safety, independent scheduling, queue retention and verification limits](DELIVERY_SAFETY.md). Historical release-specific numbers below apply to their named versions. # Application database diff --git a/docs/DEV9_DELIVERY_SAFETY.md b/docs/DELIVERY_SAFETY.md similarity index 86% rename from docs/DEV9_DELIVERY_SAFETY.md rename to docs/DELIVERY_SAFETY.md index 9ef7e1a..41cae60 100644 --- a/docs/DEV9_DELIVERY_SAFETY.md +++ b/docs/DELIVERY_SAFETY.md @@ -1,6 +1,6 @@ -# dev.9 delivery and scheduler safety +# Delivery and scheduler safety -This is an unpublished test build. It fixes the timing, backlog and scheduler isolation defects reproduced in the dev.8 read-only audit. MadelineProto remains exactly 8.7.0 at `7b99dd0f2d964a492c377912ffce9f5ce61aa9ed`; the Composer lock is unchanged. Migration 016 is additive; migrations 001-015 and all four MadelineProto patch sets retain their bytes. The separate BroadcastManager patch gains reviewed lifecycle hooks; its previous approved source is preserved. +Current runtime rules for scheduled notifications, permission reconciliation and broadcasts. For executed checks and their limits, see [implementation status](IMPLEMENTATION_STATUS.md). ## Delivery rules and exceptions @@ -18,7 +18,7 @@ Persisted due Tefillin reminders that were never dispatched are coalesced to the Quiet hours are rechecked at delivery time for ordinary modules, including Omer, not only when planning. A delayed job may defer until quiet hours end if still valid. Overnight hours and both occurrences of repeated DST times are supported; missing wall-clock times are not guessed. Tefillin also checks current weekday, pause date, Chol Hamoed/Tisha B'Av policy, daylight window and sunset safety. Omer checks the actual restoration gap again at the final send fence. -Migration 016 conservatively marks old attempt/delivery evidence. An unknown old attempt is not silently treated as never dispatched. This can intentionally suppress or defer an uncertain reminder; it cannot infer whether Telegram accepted an old request. The unchanged permission-provenance rules from dev.8 still apply to unresolved older group snapshots. +Migration 016 conservatively marks old attempt/delivery evidence. An unknown old attempt is not silently treated as never dispatched. This can intentionally suppress or defer an uncertain reminder; it cannot infer whether Telegram accepted an old request. The permission-provenance rules still apply to unresolved older group snapshots. ## Independent scheduling and failure isolation @@ -42,6 +42,4 @@ At most once per minute, bounded maintenance selects up to 200 eligible terminal Regression tests cover slow provider/topic/emoji/media work crossing entry, direct and fallback sends, actual quiet hours, Omer restoration changes, persisted backlog, daily caps/spacing, uncertainty across restart, migration, fair traversal, bounded concurrency and shutdown. Queue tests simulate 1,000 groups with 3,000 due reminders and 180 virtual days with 7,200 deliveries. Application and broadcast load tests use isolated databases, controlled clocks and fake transports; they do not send messages or measure real Telegram capacity. -The original dev.9 validation is historical development evidence. Exact results for this publication copy are recorded separately in the delivered checks report; see [publication status](PUBLICATION_STATUS.md). These simulations are not months of wall-clock soak or proof of unlimited group count. Docker is unavailable on the local Windows host; the pinned Linux image and live disposable-group acceptance must still pass on the test server. The local older SQLite must continue to fail the release-platform gate rather than bypass it. - -See [test deployment](SERVER_TEST_DEPLOYMENT.md), [permission recovery](PERMISSION_RECOVERY.md), [database](DATABASE.md), and [BroadcastManager patch provenance](../patches/broadcastmanager/README.md). \ No newline at end of file +These simulations do not establish real Telegram capacity, holy-day acceptance or a wall-clock soak. Keep target-host acceptance separate from offline regression results. diff --git a/docs/DEPENDENCIES.md b/docs/DEPENDENCIES.md index 2dcb19e..aad2a53 100644 --- a/docs/DEPENDENCIES.md +++ b/docs/DEPENDENCIES.md @@ -1,24 +1,12 @@ # Dependency evidence -[Machine-readable inventory](dependencies.json) is generated from composer.lock -and installed license files with php scripts/dependencies.php. Each package has -version, commit permalink, direct/indirect runtime/dev scope, SPDX metadata, -license paths/SHA256 and unresolved findings. LICENSE_TEXT_PRESENT is evidence -of a matching distributed text, not a complete legal compatibility certification. +[dependencies.json](dependencies.json) is generated from the exact Composer lock and installed license files by php scripts/dependencies.php. It records 83 runtime and 26 development packages, versions, commits, runtime/dev scope, metadata, original license hashes and unresolved findings. LICENSE_TEXT_PRESENT is text evidence, not an authorship or legal-compatibility certificate. -MadelineProto has the exact Composer constraint `8.7.0`, resolved to commit -`7b99dd0f2d964a492c377912ffce9f5ce61aa9ed`, for reviewed patch/source semantics. -The [official release](https://github.com/danog/MadelineProto/releases/tag/8.7.0) -is marked pre-release, not stable. On 2026-10-14 the checked official v8 head -`b1a4c5efee60a87cdbe7bc2b1eb542166ec7e2e3` still lacked the formatted-date wrapper; -no tested official replacement was selected. See the -[formatted-date review](MADELINE_FORMATTED_DATE.md) for the exact source comparison. -BroadcastManager uses ~3.2.2, resolved to 3.2.2, allowing maintenance fixes without -the previous unrestricted * or an unreviewed 3.3 API change. Lock is real Composer -output. Direct use of Amp, Amp File, Amp HTTP Client and Revolt is explicit. -PHP 8.3/8.4/8.5, PDO SQLite and mbstring are required. Composer plugins are disabled. +MadelineProto is constrained by ^8.11.10 and locked at **8.11.10**, commit **49d3d8460257c7bfb1a7e12708e1bfdd59e898c1**, with TL layer 232. BroadcastManager ~3.2.2 resolves to **3.2.2**, commit f2792a383416b66bb68e55f09414563e540538d6. Install from composer.lock; a normal upgrade does not run composer update. [PATCHES](PATCHES.md) describes the two active reviewed modifications. -Reproduce: +## Reproduce the evidence + +Run in an isolated repository root with the locked dependencies installed, using the documented PHP requirements and Composer 2.10.3: composer validate --strict --no-check-all composer show --locked --format=json @@ -27,59 +15,20 @@ Reproduce: composer check-platform-reqs php scripts/dependencies.php -`--no-check-all` omits Composer's advice against intentionally exact constraints; -`--strict` and the normal lock/schema checks remain enabled. It does not disable -lock consistency validation. The 2026-10-14 pin used the supported metadata-only -`composer update --lock --no-install --no-scripts --no-plugins --no-audit --no-interaction --no-progress`. -All 83 package versions and source/dist references stayed unchanged, and a byte -comparison showed only Composer's `content-hash` changed in `composer.lock`. -No installation or dependency lifecycle scripts ran for this metadata refresh. +The first five commands inspect configuration, inventory, advisories or platform support. The final command rewrites docs/dependencies.json; no bot or Telegram session is started. Composer plugins are disabled. The --no-check-all validation option suppresses constraint-style advice while lock/schema checks and --strict remain enabled. -Security audit is separate from license review. [Patch provenance](PATCHES.md) -and [third-party notices](../THIRD_PARTY_NOTICES.md) describe preserved notices. -MadelineProto package metadata says AGPL-3.0-only while source grants version 3 -or later: retained and reported. NOT VERIFIED entries require release review. +[composer-show.json](composer-show.json) is the locked inventory; [composer-licenses.json](composer-licenses.json) records the exact installed package metadata using the supported licenses command. Neither substitutes for reading original license files. The project version in Composer metadata may be the checkout branch, while release identity comes from VERSION and the reviewed release commit. Security audit results are separate from license evidence; rerun the audit for the release commit. -Hebcal/GeoNames data, texts and graphics have independent terms in third-party -notices; application AGPL does not relicense them. -Composer 2.8.8 does not implement licenses --locked. The attempted invocation -failed; composer-licenses.json records the supported licenses --format=json -command against the installation made from composer.lock. composer-show.json -and composer-audit.json record the locked inventory and advisory check. +## Licensing and source scope -## SQLite runtime evidence +MadelineProto metadata says AGPL-3.0-only while source headers allow version 3 or later; both remain unchanged. The new php-rtc-av metadata says MIT but its distributed LICENSE/PHP headers state BSD-3-Clause. The inventory leaves the declared MIT grant NOT VERIFIED. Checked-in AV FFI declarations are included verbatim; no native FFmpeg binary or generator output is inferred from that metadata, and external derivation provenance is not established. -The Windows test host loads SQLite 3.45.2 through PHP PDO, not a separate CLI. -Its version is older than the [official WAL-reset fix](https://sqlite.org/wal.html). -This blocks release-platform approval even though isolated single-writer tests pass. -The fix is present in 3.51.3+ (specific backports 3.44.6 and 3.50.7 are recognized). -Docker builds 3.51.3 from a fixed publisher archive and verifies SHA256 -81f5be397049b0cae1b167f2225af7646fc0f82e4a9b3c48c9ea3a533e21d77a before -compilation, then tests the PHP-loaded version with self-check --release. -The image build is not locally tested because Docker is unavailable on this host. -Runtime source is public-domain SQLite; keep its source/terms separate from AGPL. +The corresponding-source collection contains all 83 locked runtime package trees, with two exact public Amp TLS example-key omissions, approved local patch outputs, original notices and 103 preferred-source supplements. It excludes the 26 development packages and generated Composer autoload/bin metadata. PHPStan's PHAR is not called preferred source. External PHP, SQLite, optional FFmpeg and operating-system/container source are outside this collection. See [LICENSING](LICENSING.md), [THIRD_PARTY_DETAILS](THIRD_PARTY_DETAILS.md) and the [source manifest](../resources/release/source-manifest.json). -## Quality tooling and scope +The omitted Amp HTTP Server tools/tls/localhost.pem and tools/tls/localhost.key.pem are public development examples unused by the bot; exact paths and SHA-256 remain recorded. This packaging omission does not change installed vendor. All other unknown runtime files and credential patterns fail source packaging. -The locked development tools include PHPUnit, PHPStan, and PHP_CodeSniffer -4.0.4 (BSD-3-Clause). The inventory includes their transitive dependencies and -distributed license texts. `composer style` enforces PSR-12 errors in new `src`, -`bin`, `scripts`, and `tests` PHP files. The reviewed immutable patch baseline and -synthetic fixtures are excluded. `composer style-review` additionally reports -advisory PSR-12 line-length warnings. No error baseline is applied. -The preserved legacy `bot.php` is syntax checked, while integration fixtures, -authorization tests, and manual review cover its changed boundaries. +## SQLite and local validation limits -The publication corresponding-source archive contains the application and the -57 locked runtime Composer dependency source trees, with their distributed -licenses and local patch bases/diffs. The 26 development-tool packages are not -included; in particular, a PHPStan PHAR is not represented as preferred source. -PHP, SQLite, and operating-system base-image source are outside this collection; -the Dockerfile retains the pinned upstream build inputs. See -[publication scope](PUBLICATION_STATUS.md) and the archive manifest. +The current Windows test PHP loads SQLite 3.45.2. This local runtime predates the [official WAL-reset fix](https://sqlite.org/wal.html), so local tests do not approve it as the release runtime. Docker builds pinned SQLite 3.51.3, verifies its publisher SHA-256 and checks the PHP-loaded version with self-check --release. The source hash is 81f5be397049b0cae1b167f2225af7646fc0f82e4a9b3c48c9ea3a533e21d77a. Docker is unavailable locally; exact release-platform evidence must come from the actual hosted build/checks. SQLite retains its public-domain terms. -Amp HTTP Server's public development TLS example keys `tools/tls/localhost.pem` -and `tools/tls/localhost.key.pem` are omitted by exact reviewed path and SHA-256. -They are unused by this bot. Their provenance and hashes are retained in the -archive manifest. Other private-key material or Telegram token patterns fail -the archive scan. This omission never changes the installed vendor directory. +Locked development tools include PHPUnit, PHPStan and PHP_CodeSniffer. Style checks apply to application PHP, scripts and tests; original dependency baselines and deliberately synthetic fixtures retain their existing exclusions. [Publication status](PUBLICATION_STATUS.md) identifies release evidence and live-acceptance limits. diff --git a/docs/DEV5_TEST_FEEDBACK.md b/docs/DEV5_TEST_FEEDBACK.md deleted file mode 100644 index eedbd02..0000000 --- a/docs/DEV5_TEST_FEEDBACK.md +++ /dev/null @@ -1,35 +0,0 @@ -> Historical implementation record. Referenced `dist/VALIDATION-*` reports belong to earlier private development deliveries and are not bundled here. Current publication checks and limits are described in [publication status](PUBLICATION_STATUS.md). - -# dev.5 - requested test feedback - -| Request | Implementation | Verification | -|---|---|---| -| 1. Manual close/open failure | Valid explicit override no longer depends on a provider fetch; bounded per-group diagnostics distinguish confirmed, pending, protected pre-lock and failures | Offline override/provider failure, permission restoration/races, error formatter and batch isolation tests | -| 2. Group commands | Only settings for both all-groups and group-admin scopes, in six languages | Command scope and localized publishing tests; no commands published to Telegram here | -| 3. Single Shabbat overview | No paging controls; actual candle-eve weekday, Hebrew/civil dates, parsha/Mevarchim, continuous exit, nearby observances and next three Shabbat summaries | Recorded complete Hebcal replies, holy-sequence fixtures, bounded UTF-16 rendering | -| 4. Logic and help | Fresh authorization, verified times and role-appropriate expanded help | Full regression suite and six-language help/navigation tests | -| 5. Statistics | Public aggregate overview/reminders; admin audience/activity/groups/delivery tabs | No identity leakage; statistics-only role can navigate tabs without subscriber-directory access | -| 6. Group settings | Four-mode chooser, subcategories, current effective candle setting and contextual return after save/cancel; paired rich-message editor | All six languages, custom input/page return, stale-flow and permissions tests | -| 7. Source | Correct project URL plus license/version/commit card and optional exact build source link | Group/private language tests; existing version/license aliases preserved | -| 8. Broadcast | Guided link buttons, preserved designed keyboard after text edits, resumable draft, explicit detailed final confirmation | URL rejection, actor isolation, expiry, cancellation, stale confirmation, rich entity retention | -| 9. Telegram group support | Basic groups and supergroups supported; bot must have administrative restriction rights | Pinned SDK/native permission regressions and official docs | -| 10. Languages | Hebrew, English, Russian, French, Spanish, Brazilian Portuguese | Identical locale keys/placeholders and localized output tests | -| 11. Restart/load | Shared auxiliary IPC client and owner-only orderly restart lifecycle; permission work remains prioritized | Offline lifecycle/IPC reuse, concurrent/large group batches, shutdown and recovery tests | - -## What the supplied log establishes - -The 918-line supplied extract has one update-loop start and 44 auxiliary IPC connection/destruction cycles. It contains no permission RPC exception and no explicit restart failure trace. The repeated connection cycle matches the previous minute-by-minute broadcast-manager construction. This was corrected in application code. The exact Telegram error behind the reported manual 0-success/1-failure result cannot be established from that extract alone; the new diagnostic message makes the next result actionable without exposing arbitrary exception payloads. - -An explicit manual override is deliberately independent of provider availability until its expiry, while fresh group settings/activation, shutdown state and durable original-rights safeguards remain enforced. Expired overrides return control to verified calendar logic. - -## Sources and calendar boundaries - -Telegram documents [messages.editChatDefaultBannedRights](https://core.telegram.org/method/messages.editChatDefaultBannedRights) for groups and supergroups and explicitly rejects view_messages as a default restriction. [Bot API setChatPermissions](https://core.telegram.org/bots/api#setchatpermissions) likewise permits group and supergroup default permissions and requires restrict_members. - -Holiday categorization uses [Hebcal JSON yomtov](https://www.hebcal.com/home/195/jewish-calendar-rest-api), not holiday-name guesses. The verified calendar horizon remains the selected month minus 8 days through its last day plus 40 days. Unavailable distant holiday timings are not invented. Hanukkah observances do not create festival locking intervals. See [calendar presentation](CALENDAR_PRESENTATION.md). - -## Acceptance boundaries - -Final evidence and archive identity are in the versioned dist/VALIDATION-3.0.0-dev.5.json report. Local tests do not establish Telegram throughput, client appearance, actual server restart, command installation, or Docker image operation. Docker is unavailable on this development host. The loaded local SQLite version intentionally fails the release-platform gate; the pinned Docker SQLite must pass that gate on the isolated test server. - -No production data, active bot, real group, commit, tag, pull request or publication was changed. All earlier dev.4 features and the pinned MadelineProto 8.7.0 patches remain included. diff --git a/docs/DEV6_TEST_FEEDBACK.md b/docs/DEV6_TEST_FEEDBACK.md deleted file mode 100644 index aa290db..0000000 --- a/docs/DEV6_TEST_FEEDBACK.md +++ /dev/null @@ -1,32 +0,0 @@ -> Historical implementation record. Referenced `dist/VALIDATION-*` reports belong to earlier private development deliveries and are not bundled here. Current publication checks and limits are described in [publication status](PUBLICATION_STATUS.md). - -# Dev.6 - permission conflicts, Shabbat messages and statistics - -## 1. Manual and automatic close/open - -The reported conflict message is produced by the bot's saved-state comparison, not by a Telegram RPC error proving that an administrator changed permissions. A concrete representation mismatch was reproduced: requests use until_date=0 for permanent default restrictions while Telegram's official TDLib describes the returned permanent default restrictions with INT32_MAX (2147483647). TDLib also serializes granular send restrictions with the legacy send_messages/send_media aggregate flags cleared. Raw comparison could therefore reject a successful close and retain that debt as a later conflict. - -The fix uses a reviewed, conservative equivalence for both close and restoration in the shared coordinator. Only the two permanent sentinels are equal; finite expiries remain distinct. Aggregate flags can be redundant only when their corresponding granular restrictions are all explicitly present. Individual differences, reactions/member-tag differences, unknown flags, missing/corrupt snapshots and real administrator changes remain protected. Original snapshot JSON and its checksum are retained byte-for-byte. Compatible persisted dev.5 conflicts can recover on reconciliation without deleting records or guessing the original permissions. - -The supplied message alone does not contain current/saved permission values. It establishes the conflict branch, but cannot prove which representation differs on that particular live group. Safe differing-field diagnostics and updated wording distinguish a mismatch from a proven external actor. The same coordinator serves manual and automatic transitions. - -Evidence: [Telegram rights](https://core.telegram.org/api/rights), [native constructor](https://core.telegram.org/constructor/chatBannedRights), and the immutable [official TDLib implementation](https://github.com/tdlib/td/blob/ad2178896533ff92831accdf56ea7edd8393f2ca/td/telegram/DialogParticipant.cpp). - -## 2. One consistent Shabbat/holiday presentation - -Default command, menu, inline and group announcement output shows the nearest verified Shabbat-containing period in the main section. The holiday list starts at the current local date, so a separate Yom Tov before Shabbat remains visible with its verified entrance and final exit. Only strict Yom Tov events receive festival entrance/exit times; continuous Shabbat/festival periods retain one final exit. Later Shabbat summaries, scripture-reference rows, visible source/update footers and numeric timezone offsets are omitted. Times use the selected IANA timezone and Y-m-d H:i. The configured candle offset and havdalah policy are shown; a fixed 50-minute sample does not overwrite existing preferences or the default 8.5-degree policy. - -Actual Yom Tov boundaries and every required intermediate candle remain subject to verified data and continuous-period rules. Hanukkah is an observance, not a Yom Tov locking interval. Source attribution remains in the relevant information/license documentation, and internal provenance/freshness validation is unchanged. Custom templates remain administrator-owned; the update does not rewrite their saved text. - -Calendar day classification accepts both documented fixture forms of the original Chol Hamoed marker, (CH'M) and (CH''M). This keeps reminder policy aligned with the configured Chol Hamoed setting without promoting those dates to Yom Tov or adding lock periods. An active Yom Tov whose verified final exit falls after civil midnight remains visible until that exit, even when its calendar date is yesterday. -## 3. Statistics callbacks - -Home and statistics screens emitted ps:overview / ps:modules, but the production upgradedCallbacks prefix allowlist omitted ps. Existing controller tests bypassed that adapter boundary and therefore did not detect the missing route. The allowlist is corrected. New regressions use native pinned SDK query wrappers and the actual update-handler method with callbacks read from generated markup, including non-manager private users, navigation, denied contexts and cancellation. - -Edits target the original private panel. A missing/deleted panel produces a localized callback response without new-message flooding. Group and inline callbacks cannot edit a private user's statistics panel. - -## 4. Release and verification - -All previous cumulative features remain included. No dependency or schema update is required. The direct /root/shabbat-test upload instructions exclude uploaded ZIP/checksum files from Docker context. Exact tests, fingerprints, archive contents and platform limits belong to dist/VALIDATION-3.0.0-dev.6.json. - -No production data, active bot, real Telegram group, commit, tag, push or publication was changed. Docker and Telegram acceptance were not executed locally. The host's older SQLite intentionally fails the release-platform gate; the Docker-pinned reviewed version must pass on the test server before startup. Automated tests establish the covered behavior, not a guarantee of indefinite uptime. diff --git a/docs/DEV8_PERMISSIONS.md b/docs/DEV8_PERMISSIONS.md deleted file mode 100644 index 1c64baf..0000000 --- a/docs/DEV8_PERMISSIONS.md +++ /dev/null @@ -1,38 +0,0 @@ -> Historical implementation record. Referenced `dist/VALIDATION-*` reports belong to earlier private development deliveries and are not bundled here. Current publication checks and limits are described in [publication status](PUBLICATION_STATUS.md). - -# Dev.8 permission reading and existing snapshots - -## Evidence and limits - -The supplied dev.6 database row was in `conflict`. Its original snapshot allowed all listed actions except editing a member's own tag; its checksum matched. The saved mask therefore explains why restoring it would allow media, invitations and pins even though the administrator reported earlier restrictions. A checksum establishes consistency of saved bytes, not whether the initial Telegram read was accurate. The literal missing-rights fallback cannot by itself produce that row's explicit `edit_rank=true` and `until_date=2147483647`. The exact server-side cause of this older snapshot has not been established. - -Independent offline investigation found a real read-integrity defect in the pinned SDK/helper path: `getFullInfo` combines a refreshed full object with earlier peer data, and `getInfo` can return its earlier minimal record after refreshing the peer cache. Re-reading that cache did not establish that permissions came from the just-completed request. An absent optional restriction object in verified complete data can legitimately mean no default restrictions; absence in incomplete or unverified data is not proof of that state. - -The separate `manage_topics` discrepancy does not justify ignoring this restriction for non-forum groups. No server normalization rule was established. Actual readback remains subject to comparison and unresolved evidence is retained. - -## Implemented protection - -MadelineProto remains exactly **8.7.0** at source commit `7b99dd0f2d964a492c377912ffce9f5ce61aa9ed`, with the existing Composer lock. A fifth, separately guarded local patch exposes the fresh raw full-peer response through the existing supported `getFullInfo` helper when caching is disabled. It does not call blacklisted namespace methods, change the public helper signature, or run patches while the bot is active. Its immutable source, diff, reviewed output, manifest and tests accompany the corresponding source. - -The permission reader validates matching requested peer, full-peer type/ID and complete non-minimal Chat from that response. It rejects malformed, absent, duplicate, forbidden or mismatched records. It does not substitute cached rights. Both manual and scheduled operations use this reader for capture and verification, and restore the original restriction object rather than constructing a general open mask. Cancellation and Telegram retry deadlines still propagate. - -Migration 015 records snapshot provenance. Existing unresolved snapshots from older versions remain intact and are treated as unverified; automatic or explicit restoration of those snapshots is blocked. A new week, restart or matching checksum does not make an older snapshot trustworthy. Completed cycles may take a new verified baseline at the next closure. Fresh captures preserve their original bytes, checksum and capture evidence through the cycle. - -The group recovery panel explains the legacy state in all six languages. Restore remains available for verified snapshots. A legacy snapshot requires the administrator to set the intended normal rights in Telegram, refresh the panel and explicitly confirm adoption, outside a protected period. The old snapshot remains as evidence. The diagnostics panel/export reports snapshot provenance without dumping JSON into messages. - -## Existing affected test group - -1. Deploy dev.8 with the same isolated test bot, `.env` and named volumes, after stopping writers and taking the migration backup. -2. Outside Shabbat/Yom Tov and any active lock, use Telegram's group permissions to set the actual intended normal state. Do not copy the broadly permissive older snapshot. -3. Open the bot's group settings, **Resolve permission problem**, then **Refresh**. Check the named group and the current permissions, then choose **Use current permissions** and confirm. -4. Test a new manual close/open cycle in a disposable group with media, invitations and pinning deliberately restricted beforehand. Verify those exact restrictions after reopening and after a restart. Also check the automatic path at a controlled test boundary. - -Do not delete lock rows or adopt a currently locked mask as the normal state. An active close override, religious period, unavailable calendar or uncertain read prevents recovery. A readback conflict after an update can mean Telegram already changed permissions; it is not evidence that nothing happened. - -## Validation and live acceptance - -The versioned `dist/VALIDATION-3.0.0-dev.8.json` identifies the frozen source, full suite, quality gates, migration tests and extracted archive checks. Native SDK tests use the installed pinned trait with controlled RPC responses; they do not contact Telegram. Patch tests include clean apply, repeat, mismatch and partial installation. Database upgrade tests preserve older snapshots and prove that they cannot trigger unverified restoration. - -Docker is unavailable on the Windows development host. Its older local SQLite is intentionally rejected by the release platform gate; the pinned Docker runtime must pass that gate on the server. Live Telegram permissions, Telegram client rendering and actual group behavior still need isolated acceptance. No production data, bot sessions or real groups were used for development tests. No commit, tag, pull request or publication is part of this update. - -See [recovery](PERMISSION_RECOVERY.md), [deployment](SERVER_TEST_DEPLOYMENT.md), [patches](PATCHES.md) and the official [restriction flags](https://core.telegram.org/constructor/chatBannedRights), [default-rights method](https://core.telegram.org/method/messages.editChatDefaultBannedRights) and [MadelineProto helper requirement](https://docs.madelineproto.xyz/API_docs/methods/channels.getFullChannel.html). diff --git a/docs/DIAGNOSTICS.md b/docs/DIAGNOSTICS.md index a6151a2..772e2ad 100644 --- a/docs/DIAGNOSTICS.md +++ b/docs/DIAGNOSTICS.md @@ -14,4 +14,4 @@ Dev.7 adds migration 014 for expiring diagnostic snapshots and interaction/expor Transport uses the locked MadelineProto implementation of [messages.sendMedia](https://docs.madelineproto.xyz/API_docs/methods/messages.sendMedia.html) with an in-memory JSON upload. Offline tests verify native payload construction and actual callback/message routes; they do not claim a real Telegram upload or flood-limit acceptance test. -Dev.8 adds snapshot-verification status to the selected group's permissions section and JSON export. The indicator checks the original bytes and capture provenance; a legacy snapshot or checksum failure is not displayed as verified. See [the affected-group procedure](DEV8_PERMISSIONS.md). +Dev.8 adds snapshot-verification status to the selected group's permissions section and JSON export. The indicator checks the original bytes and capture provenance; a legacy snapshot or checksum failure is not displayed as verified. See [the affected-group procedure](PERMISSION_RECOVERY.md). diff --git a/docs/FEATURE_PARITY.md b/docs/FEATURE_PARITY.md deleted file mode 100644 index a887d17..0000000 --- a/docs/FEATURE_PARITY.md +++ /dev/null @@ -1,219 +0,0 @@ -# Feature parity and source audit - -The interface reference is [WizardLoop/JewishPulse](https://github.com/WizardLoop/JewishPulse/tree/d7b06eb1acb206543dcff35a7c14ebce4760b4e5), reviewed on 2026-10-13. Shabbat retains its package name, bot identity, MTProto session, Stars donations, operator tools and BroadcastManager integration. Reference ideas were reimplemented; the unsafe reference location parser, implicit extra candle minute, truncated 8.5 angle and mutable global timezone were not imported. - -`UI` below means `src/UI/BotController.php`. Its panel labels use the administrator's personal language; calendar content uses the selected scope's language. Every settings write requires an unexpired user-bound flow and revision, current Telegram administrator permission for a group, and a one-use server-side confirmation. A public inline query never grants group authority. - -| Reference source and function | Existing behavior | Implemented equivalent | Scope | Automated evidence | -|---|---|---|---|---| -| `src/Handlers/Handlers.php::starthandle` | Private welcome and navigation | `UI::start` / `/start` | Personal | `UITest::testMenusAreBilingualWithStableCallbacksAndNativeColors` | -| `Handlers.php::BackStart` | Return to welcome | `sb:start` → `UI::start` | Personal | Menu callback inventory in `UITest` | -| `Handlers.php::SettingsMenu` | Four personal settings | `UI::panel` (personal and group) | Personal / group admin | Personal/group isolation and language tests | -| `Handlers.php::SettingsLanguage` | Language selector | `UI::screen(language)`, `/language`, `/lang` | Personal / group admin | `testLanguageCommandAndGroupLanguageAreIndependent` | -| `src/JewishPulse.php::handleSetLanguage` | Save personal language file | `sb:s:token:l:he/en/ru/fr/es/pt-br` + one-use confirmation | Personal / group admin | `testLanguageCommandAndGroupLanguageAreIndependent` | -| `src/Locales/Lang.php::getUserLang`, `setUserLang` | Personal `lang.txt` | `SettingsRepository::getUser/updateUser`; group language separate | Personal / group | Isolation tests | -| `Lang.php::loadTranslations` | HE fallback | `src/UI/Lang::text/validate` | Display | `testTranslationKeysPlaceholdersEscapingAndFallback` | -| `Lang.php::getAvailableLanguages`, `getLanguageButtons` | Files scanned for two choices | Explicit he/en/ru/fr/es/pt-br registry; six real catalogs and stable identifiers | Display | Menu language test | -| `Handlers.php::SettingsLocation` | `keyboardButtonSwitchInline`, same peer | `UI::locationScreen`, `GeoNames::search` with token | Personal / group admin | `testTwoGroupLocationFlowsSelectedInReverseOrder` | -| `JewishPulse.php::onUpdateBotInlineQuery` city branch | Search every non-Shabbat string; IDs `geo_0` | Explicit `loc`, UTF-8 normalization, stable query-bound IDs, paging | Public read / authorized selection | `LocationTest`, two-flow UI test | -| `JewishPulse.php::handleSaveLocationFromMessage` | Parse forgeable localized text and save | Replaced with `location_choice` → private preview → one-use `save` | Personal / group admin | Forged text, wrong user, replay, expiry and admin-loss tests | -| `Storage/UserLocation.php::getGeonameId/setGeonameId` | Per-user JSON with implicit Jerusalem | SQLite scope settings + complete coordinates and IANA zone | Personal / group | Personal/group isolation, timezone tests | -| `UserLocation.php::searchGeoNames` | Unencrypted HTTP, errors returned as no results | `src/Location/GeoNames`, verified HTTPS, typed errors, selected-place validation | Provider | All `LocationTest` cases | -| `Handlers.php::SettingsCandles` | Display 10/15/18/20/22/30/40, save one more | Seven exact values including 40; city custom and validated form | Personal / group admin | `testAllSevenCandleOptionsAreStoredExactly` | -| `JewishPulse.php::handleSetCandles`; `UserLocation::getCandleSetting/setCandleSetting` | Personal JSON with default 41 | Typed `candle_minutes`; no hidden adjustment | Personal / group | Exact seven-value test | -| `Handlers.php::SettingsHavdalah` | 8.5°, 42, 72 | Separate method/value; 8.5°, 42, 50, 72 and custom minutes | Personal / group admin | `testDegreesRemainFloatAndFiftyMinutesAreAvailable` | -| `JewishPulse.php::handleSetHavdalah`; `UserLocation::getHavdalahSetting/setHavdalahSetting` | Float saved, later cast to integer | Float preserved end to end | Personal / group | Exact methods test; `CalendarTest` | -| `Handlers.php::ShabbatTimes` | Private upcoming times | `UI::renderView(shabbat)` from one common calendar | Personal / group preview | Rendering, calendar tests | -| `Handlers.php::Shabbat_Times`; `JewishPulse.php::shabatCommand` | `/shabat` and share button | `/shabat`, `/shabbat`; group settings on group display | Personal / group | Calendar/UI tests; real Telegram routing requires staging | -| `Handlers/ShabatTimes.php::parseShabatData` | `/shabbat` current-week response formatting | `CalendarService::snapshot` explicit coverage/current/next event | Calendar | `CalendarTest` before/during/after, Sunday, adjacent holidays | -| `ShabatTimes.php::getNextShabbatDates` | Date calculation changes global timezone | UTC instants, explicit per-group IANA zones | Calendar | DST and concurrent-zone tests | -| `JewishPulse.php::onUpdateBotInlineQuery` times branch | Share personal Shabbat times | Reserved aliases plus zmanim/daf/omer; authorized group share snapshot | Read-only | `testGroupShareUsesAuthorizedSnapshotInsteadOfPersonalLocation` | -| `Handlers.php::DailyPage`; `ShabatTimes.php::getDailyPage` | Today's Daf from Hebcal; mostly hardcoded Hebrew | `/daf` with explicit today/tomorrow/date and trusted provider link | Personal / group | Fixture calendar checks; no real Telegram test | -| `Handlers.php::AllCommands` | Help categories | `UI` help menu and actual command list | All users | Help translations/key validation | -| `Handlers.php::BasicRules` | `/`, `!`, `.` prefixes | `UI::handleMessage` supports these prefixes | All users | Parser exercised by UI tests | -| `Handlers.php::SettingsInfo` | Explain four personal options | Actual personal/group screens and `GROUP_SETTINGS.md` | All users / group admin | Screens and form tests | -| `Handlers.php::CommandsAllUsers` | Commands and inline help | Localized implemented help commands | All users | Locale validation | -| `Handlers.php::CloseMsgCommand` | Delete private menu message | Existing Shabbat close handler retained; back/cancel in new screens | Personal | Live deletion not tested | -| `Handlers.php::StatsGroups`; `JewishPulse.php::StatsGroups` | Dialog scan/count | Known-group SQLite stats plus retained operator statistics | Public / system admin | Storage tests; live dialogs not tested | -| `Handlers/AdminPanel.php::handle`, `admin_back` | Operator admin panel | Localized OperatorController + guarded legacy routing | System admin only | UIOperatorTest six-language frames and fresh role checks; no live operation | -| `AdminPanel.php::statUsers` | Dialog statistics | SQLite group counts + known-peer type statistics | System admin only | Six-language statistics frames tested; live peer metadata not tested | -| `AdminPanel.php::admin_broadcast`, `broadcast_back`, `handle_broadcast`, `back_broadcast` | Compose text/media broadcast | OperatorDraft rich scoped SQLite editor + retained BroadcastManager sending | System admin only | Atomic draft/digest/token/media/style tests; no live broadcast | -| `AdminPanel.php::type_users`, `typemode1/2/3/4` | Users/channels/groups/all filters | Scoped users/channels/groups/all audience and pin controls | System admin only | Independent operator options and stable callbacks tested; no live broadcast | -| `JewishPulse.php::handleAdminButtons`, `send_broadcast`, `handleBroadcastProgress` | Dispatch, broadcast and progress | Fresh-role private callbacks + one-use send + verified status formatter patch | System admin only | UIOperatorTest and library patch regression tests; no live broadcast | -| `Payments/Payments.php::sendDonationOptions`, `handlePreCheckout`, `sendMessageToAdmins`; `JewishPulse.php::Payments`, `onupdateBotPrecheckoutQuery` | Stars support and payment reporting | Validated Stars intents/payment handlers, localized offers and duplicate-safe private operator notices | Personal / system admin report | DonationsTest offline; no real payment was submitted | - -## New capability evidence - -| New capability | Implementation | Evidence and practical limit | -|---|---|---| -| Group language, location, timezone, Israel/diaspora | UI scopes, SettingsRepository and FlowTokenRepository | All six locales, different groups, reversed selection, personal separation, stale/replayed flow tests | -| Native colored buttons | MTProto `keyboardButtonStyle` in `UI::keyboard` | Installed `TL_telegram_v225.tl` constructors validated; primary/success/danger tested; rendering depends on Telegram client | -| Full/short zmanim, today/tomorrow/date | `UI::view/renderView`, `CalendarService::zmanim` | Explicit date and missing values tested; polar calculations refuse guesses | -| Tefillin times preview | `UI::renderView(tefillin)`, `ReminderPlanner` | Calculated jobs without enabling/sending; cutoff, dedup and holiday fixtures in calendar tests | -| Omer, all 49 deterministic counts | `CalendarService::omer`, `Content/OmerText`, ReminderPlanner | Bundled 49-count and calendar fixtures; actual prayer recitation remains an individual responsibility | -| Module enable/edit/reset/pause | Scoped UI forms and one-use confirms | Form validation, exact settings, replay/admin loss tests | -| Rich group message editing and test send | `Content/TemplateEditor`, `TemplateRepository`, `TemplateRenderer` | Separate explicit test confirmation and five-minute rate limit; no production Telegram send | -| UTC scheduling, recovery, snapshots, outbox | `Scheduling/`, `Runtime/Application` | Fake-gateway storage/scheduler tests; no claim of absolute exactly-once delivery | -| Legacy membership carried forward | `LegacyImporter::importGroupListAutomatically` | Additive startup group registration; `/settings` opens a known group's panel without re-adding | - -## Six-language and operator verification - -The canonical locale registry is he, en, ru, fr, es and pt-br. All six catalogs have the same keys, nonempty translations and placeholder multisets. Telegram command language codes use pt for Brazilian Portuguese while application storage retains pt-br. UI tests exercise all six private menus and group saves without changing coordinates, stable callback IDs after language changes, and group content language independent from the administrator panel language. - -OperatorController and OperatorDraft replace active Hebrew-only operator frames while preserving the original guarded operation handlers. Subscribers use known database audiences, including separately imported broadcast peers; an explicitly removed Shabbat group is excluded. The original pure custom-button parser is bound through Application, preserving native colors/icons/copy/alerts. See GROUP_SETTINGS.md for confirmed broadcasts, per-operator state and the separate BroadcastManager delivery backend. - -## Source and infrastructure findings - -JewishPulse's inspected tree declares AGPL-3.0-only. Its README claims GitHub Actions CI, but no workflow files exist in that commit. Its `.github/ISSUE_TEMPLATE ` directory has a trailing space and cannot be checked out normally on Windows. Its Dockerfile uses an unpinned MadelineProto image and copies the complete checkout; these practices were not imported. Its graphic assets and external thumbnail were not reused because this upgrade needs no new graphic asset and their independent provenance was not established. - -The original Shabbat runtime was a single 7,195-line `bot.php`, MIT metadata, `danog/madelineproto:^8.6`, unrestricted BroadcastManager `*`, and no lock or automated tests. New documentation does not assert a live feature test where only source was reviewed. Retained donation/operator/broadcast features require an opt-in staging account; no actual Telegram group, active session or production data was changed. - -## Original Shabbat function inventory - -Each original function is listed below, including helpers. This is an inventory of source and its replacement/retained responsibility, not a statement that Telegram-side behavior was tested. - -| Original source function (`bot.php`) | Equivalent responsibility | Scope | Verification | -|---|---|---|---| -| `getTestShabbatLockTimes` | CalendarService + Runtime/Application diagnostics | calendar / operator | CalendarTest; live diagnostics not run | -| `getAlertTestTime` | CalendarService + Runtime/Application diagnostics | calendar / operator | CalendarTest; live diagnostics not run | -| `getZmanimForCities` | CalendarService + Runtime/Application diagnostics | calendar / operator | CalendarTest; live diagnostics not run | -| `getShabbatLockTimes` | CalendarService + Runtime/Application diagnostics | calendar / operator | CalendarTest; live diagnostics not run | -| `getShabbatCheckLock` | CalendarService + Runtime/Application diagnostics | calendar / operator | CalendarTest; live diagnostics not run | -| `isShabbatOrHolidayNow` | CalendarService + Runtime/Application diagnostics | calendar / operator | CalendarTest; live diagnostics not run | -| `getReportPeers` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `onStart` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `ChannelsLeave` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `StartCommand` | UI::start/handleMessage/handleCallback/handleInline/renderView | personal / group read | UITest + CalendarTest | -| `BackCommand` | UI::start/handleMessage/handleCallback/handleInline/renderView | personal / group read | UITest + CalendarTest | -| `ShabbatTimes` | UI::start/handleMessage/handleCallback/handleInline/renderView | personal / group read | UITest + CalendarTest | -| `AllCommands` | UI::start/handleMessage/handleCallback/handleInline/renderView | personal / group read | UITest + CalendarTest | -| `Rules` | UI::start/handleMessage/handleCallback/handleInline/renderView | personal / group read | UITest + CalendarTest | -| `CommandForAdmins` | UI::start/handleMessage/handleCallback/handleInline/renderView | personal / group read | UITest + CalendarTest | -| `CommandForAll` | UI::start/handleMessage/handleCallback/handleInline/renderView | personal / group read | UITest + CalendarTest | -| `shabatCommand` | UI::start/handleMessage/handleCallback/handleInline/renderView | personal / group read | UITest + CalendarTest | -| `onUpdateBotInlineQuery` | UI::start/handleMessage/handleCallback/handleInline/renderView | personal / group read | UITest + CalendarTest | -| `closecommand` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `addgroupCommand` | SQLite membership + UI::panel/screen/changes/moduleDefaults | group admin | UITest + StorageTest; live Telegram not run | -| `removegroupCommand` | SQLite membership + UI::panel/screen/changes/moduleDefaults | group admin | UITest + StorageTest; live Telegram not run | -| `grupsettingsCommand` | SQLite membership + UI::panel/screen/changes/moduleDefaults | group admin | UITest + StorageTest; live Telegram not run | -| `ifNotCommands` | Content/TemplateEditor + TemplateRepository + TemplateRenderer | group admin | Fake Telegram template tests; live not run | -| `backtosettings` | SQLite membership + UI::panel/screen/changes/moduleDefaults | group admin | UITest + StorageTest; live Telegram not run | -| `defaultset` | SQLite membership + UI::panel/screen/changes/moduleDefaults | group admin | UITest + StorageTest; live Telegram not run | -| `defaultset1` | SQLite membership + UI::panel/screen/changes/moduleDefaults | group admin | UITest + StorageTest; live Telegram not run | -| `infotimes` | SQLite membership + UI::panel/screen/changes/moduleDefaults | group admin | UITest + StorageTest; live Telegram not run | -| `infomessages` | SQLite membership + UI::panel/screen/changes/moduleDefaults | group admin | UITest + StorageTest; live Telegram not run | -| `TimesON` | SQLite membership + UI::panel/screen/changes/moduleDefaults | group admin | UITest + StorageTest; live Telegram not run | -| `TimesOFF` | SQLite membership + UI::panel/screen/changes/moduleDefaults | group admin | UITest + StorageTest; live Telegram not run | -| `MessagesON` | SQLite membership + UI::panel/screen/changes/moduleDefaults | group admin | UITest + StorageTest; live Telegram not run | -| `MessagesOFF` | SQLite membership + UI::panel/screen/changes/moduleDefaults | group admin | UITest + StorageTest; live Telegram not run | -| `parseButtonsold` | Content/TemplateEditor + TemplateRepository + TemplateRenderer | group admin | Fake Telegram template tests; live not run | -| `parseButtons` | Content/TemplateEditor + TemplateRepository + TemplateRenderer | group admin | Fake Telegram template tests; live not run | -| `buttonCallbacks` | Content/TemplateEditor + TemplateRepository + TemplateRenderer | group admin | Fake Telegram template tests; live not run | -| `validateButtonsInput` | Content/TemplateEditor + TemplateRepository + TemplateRenderer | group admin | Fake Telegram template tests; live not run | -| `openMessageGroup` | Content/TemplateEditor + TemplateRepository + TemplateRenderer | group admin | Fake Telegram template tests; live not run | -| `closeGroupMessage` | Content/TemplateEditor + TemplateRepository + TemplateRenderer | group admin | Fake Telegram template tests; live not run | -| `backGroupMessage` | Content/TemplateEditor + TemplateRepository + TemplateRenderer | group admin | Fake Telegram template tests; live not run | -| `GroupTextSet1` | Content/TemplateEditor + TemplateRepository + TemplateRenderer | group admin | Fake Telegram template tests; live not run | -| `RemoveText1` | Content/TemplateEditor + TemplateRepository + TemplateRenderer | group admin | Fake Telegram template tests; live not run | -| `RemoveText1_1` | Content/TemplateEditor + TemplateRepository + TemplateRenderer | group admin | Fake Telegram template tests; live not run | -| `GroupTextView1` | Content/TemplateEditor + TemplateRepository + TemplateRenderer | group admin | Fake Telegram template tests; live not run | -| `GroupMsgMedia1` | Content/TemplateEditor + TemplateRepository + TemplateRenderer | group admin | Fake Telegram template tests; live not run | -| `GroupMsgMediaView1` | Content/TemplateEditor + TemplateRepository + TemplateRenderer | group admin | Fake Telegram template tests; live not run | -| `RemoveMedia1` | Content/TemplateEditor + TemplateRepository + TemplateRenderer | group admin | Fake Telegram template tests; live not run | -| `RemoveMedia1_1` | Content/TemplateEditor + TemplateRepository + TemplateRenderer | group admin | Fake Telegram template tests; live not run | -| `buttonsmanageviewgroup1` | Content/TemplateEditor + TemplateRepository + TemplateRenderer | group admin | Fake Telegram template tests; live not run | -| `GroupMsgButtonSet1` | Content/TemplateEditor + TemplateRepository + TemplateRenderer | group admin | Fake Telegram template tests; live not run | -| `RemoveButtons1` | Content/TemplateEditor + TemplateRepository + TemplateRenderer | group admin | Fake Telegram template tests; live not run | -| `RemoveButtons1_1` | Content/TemplateEditor + TemplateRepository + TemplateRenderer | group admin | Fake Telegram template tests; live not run | -| `HandleGroupMsgSet1` | Content/TemplateEditor + TemplateRepository + TemplateRenderer | group admin | Fake Telegram template tests; live not run | -| `view_welcomeMessage_full` | Content/TemplateEditor + TemplateRepository + TemplateRenderer | group admin | Fake Telegram template tests; live not run | -| `StatsGroups` | SQLite group/service/lock statistics | read-only | Storage fixture assertions | -| `shabatCronClose` | Runtime/Application::tick and Scheduling lock/outbox state | runtime | CalendarTest + SchedulingTest | -| `shabatCronOpen` | Runtime/Application::tick and Scheduling lock/outbox state | runtime | CalendarTest + SchedulingTest | -| `shabatCronAlert` | Runtime/Application::tick and Scheduling lock/outbox state | runtime | CalendarTest + SchedulingTest | -| `Payments` | Retained Stars donation and payment update handlers | personal / system admin | Source reviewed; real payment not run | -| `onupdateBotPrecheckoutQuery` | Retained Stars donation and payment update handlers | personal / system admin | Source reviewed; real payment not run | -| `onUpdateNewMessage` | Retained Stars donation and payment update handlers | personal / system admin | Source reviewed; real payment not run | -| `closeGroupManually` | Authorized manual permission reconciliation with durable snapshots | system admin | Fake-gateway permission tests; live not run | -| `openGroupManually` | Authorized manual permission reconciliation with durable snapshots | system admin | Fake-gateway permission tests; live not run | -| `testzmanim` | CalendarService + Runtime/Application diagnostics | calendar / operator | CalendarTest; live diagnostics not run | -| `setcommands` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `getAdminKeyboard` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `admincommand` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `addsohe1hazor` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `addsohe1hazor2` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `getPlugins` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `getPluginPaths` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `reshimamishtamshim` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `reshimamishtamshim2` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `reshimamishtamshim3` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `var_cat_command` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `adnimhandle` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `StatsUsers` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `closeBroadcastMsg` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `broadcastCommand` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `deleteLastBroadcast` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `deleteAllBroadcast` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `cancelPinned` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `LastBrodDATA` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `setBroadcast` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `handlebroadcast1` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `hazarashidur` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `addsoheshidur1forneitza1` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `addsoheshidur1forneitza2` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `broadsetsenders` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `broadsetsenders1` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `broadsetsenders2` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `broadsetsenders3` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `broadsetsenders4` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `hosafkaf` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `handlebuttons` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `parseButtons` | Content/TemplateEditor + TemplateRepository + TemplateRenderer | group admin | Fake Telegram template tests; live not run | -| `buttonsmanageview` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `loadButtons` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `buttonsmanageview2` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `loadButtons` | Retained bot/operator integration | system admin / runtime | Live Telegram not run | -| `comingsoon` | Legacy placeholder omitted from new navigation | none | No new inactive menu button | -| `RunBot` | Runtime/Runner + configured error event handler and graceful stop | runtime | Runner/patch tests; no live bot startup | - -## Additional automated integration evidence - -`UITemplateTest` verifies private-only previews; a distinct named-group TEST confirmation; five-minute test-send rate limiting; user and administrator rechecks; replay and forwarded callback rejection; UTF-16 formatting entity clipping including emoji; media and buttons preservation; removal of one message component without resetting the rest; independent English/Hebrew editor menus; and rollback of both token consumption and settings revision on template CAS/SQLite write failure. Its gateway deliberately rejects permission RPCs and live HTTP. - -`UITest` additionally verifies reply-bound GPS selection for two groups completed in reverse order, wrong-user/unreplied/non-bot prompt rejection, private-panel language versus group-content language, full/short daily views, clearly missing solar values and tefillin jobs calculated in a private preview while the module stays disabled. These fixtures do not establish live Telegram behavior. -## dev.4 cumulative interface and administration additions - -These are functional adaptations of the named local reference projects, with the current bot's authorization and storage boundaries. Visual identity is Shabbat; this table does not claim byte-identical output or live-client acceptance. - -| Request/reference | Current implementation | Automated evidence | -| --- | --- | --- | -| Exact opening, categorized help, original edit-based navigation | BotController, Lang, Presentation, CallbackUiGateway | PresentationTest, UiNavigationTest, AdminCrossFlowNavigationTest | -| Twelve supplied custom emoji IDs and native colored buttons, owner-eligibility fallback | Presentation and MadelineGateway including BroadcastManager transport | CustomEmojiSerializationTest, CustomEmojiFallbackTest, PresentationTest, TefillinAckGatewayTest | -| Simple group settings including all tefillin fields | SettingsWizard and BotController guided picker/input/confirmation | SettingsWizardTest, GuidedSettingsTest | -| Upcoming complete holy sequences and holiday metadata | ShabbatTimesFormatter plus UI period navigation | ShabbatOverviewTest and existing calendar/formatter tests | -| Custom Stars amount 1-10000 and old payment preservation | Donations, DonationController, migration 011 | DonationCustomAmountTest, CustomStarsMigrationTest, DonationsTest | -| Delegated managers and immutable configured recovery owners (newsearch-v2 style) | AdminAccessRepository, AdminController, OperatorController | AdminRolesLinksTest and native bridge navigation tests | -| Full known subscriber profile, user/group/channel/all filters, search/paging (psy-new style) | SubscriberDirectory, SubscriberController, AdminDirectoryText | SubscriberDirectoryTest, AdminCrossFlowNavigationTest | -| Expanded rich broadcast drafts, audiences, pin, edit-last, timing, self-destruct and confirmations | BroadcastController, OperatorDraft, AdminIntegration, BroadcastJobs | BroadcastAdvancedTest, BroadcastJobsTest, UIOperatorTest, BroadcastPatchTest | -| System deep links and tracking-link counters | SystemLinks, TrackingLinkRepository, AdminController | AdminRolesLinksTest | -| Six-language role-scoped command menus | CommandMenus and current per-target capability filter | CommandMenusTest | -| Native rich custom messages and independent button modes | TemplateEditor, TemplateRepository, TemplateRenderer, Application | GuidedTemplateTest, UITemplateTest, GroupMessageButtonsIntegrationTest | -| Default delivered-group share actions | GroupMessageButtons: original shabat/zmanim/daf inline shortcuts | GroupMessageButtonsIntegrationTest; public results use the sharer's preferences | -| Default blue tefillin count and unique reversible user votes | TefillinAcknowledgements, group callback/cron hooks and migration 012 | TefillinAcknowledgementsTest, TefillinAckGatewayTest, GroupMessageButtonsIntegrationTest | -| Legacy full keyboard wrapper compatibility | Recognized read-time normalization in TemplateRepository, LegacyImporter and OperatorDraft | LegacyAdminImportTest, BroadcastAdvancedTest, TefillinAcknowledgementsTest | - -Private group-view sharing remains a distinct authorized read-only group snapshot. Default public announcement sharing keeps the original personal inline-query semantics. Preview acknowledgement buttons are inert; only verified delivered reminders create countable message bindings. - -All rows have offline implementation tests; real Telegram administration, appearance, payments, sending and Docker execution remain separate isolated acceptance work. Current aggregate results are in the version-matching validation report. - -## dev.5 test feedback - -The [eleven-item report](DEV5_TEST_FEEDBACK.md) maps the latest corrections to code behavior and tests. It supersedes dev.4's period-pagination description: the Shabbat/holiday screen is now a single overview. Group command scopes contain only settings. The fully preserved native rights snapshot has22flags, while Telegram-compatible group-wide selection has21 and excludes view_messages. Detailed manual-operation diagnosis, restart/IPC lifecycle, contextual settings return, grouped statistics and guided broadcast editing are implemented without changing migrations, locked dependencies or patch files. - -## dev.6 follow-up corrections - -The current [feedback report](DEV6_TEST_FEEDBACK.md) records conservative native-permission equivalence, recovery of compatible saved conflicts, actual SDK callback routing for public statistics, and a consistent nearest-period Shabbat message for public/inline/scheduled defaults. The previous next-three-Shabbat display is superseded by one nearest Shabbat-containing period plus a current/upcoming holiday list; separate weekday Yom Tov before Shabbat retains its verified entrance and final exit. Existing calendar policy, rich custom templates, library patches and all twelve migrations remain intact. New boundary tests exercise the actual handler, not only controller helpers. - -## Dev.7 recovery and diagnostics - -The [permission recovery flow](PERMISSION_RECOVERY.md) adds conservative automatic recovery and the two explicitly requested administrator choices without discarding original snapshots. The private [testzmanim panel](DIAGNOSTICS.md) replaces JSON message flooding with editable navigation, search, filters, quick page entry and JSON-file export. Both features include all six languages and additive migrations 013-014. Prior calendar, group settings, statistics, custom messages and pinned-library behavior remain covered by the complete regression suite. diff --git a/docs/FUNCTIONAL_COMPARISON.md b/docs/FUNCTIONAL_COMPARISON.md deleted file mode 100644 index 9ee5f22..0000000 --- a/docs/FUNCTIONAL_COMPARISON.md +++ /dev/null @@ -1,50 +0,0 @@ -# השוואה פונקציונלית ובקרות הקבוצה — 3.0.0-dev - -המימוש החדש משפר את התאוששות הסגירה והפתיחה ואת הטיפול ברצפי שבת וחג. הוא נבדק עם שעון מוזרק, נתוני ספק מבוקרים וגבולות ה־SDK הנעול. עדיין אין אישור לנכונות תפעולית מול Telegram אמיתי, ואין התחייבות לפעולה בשנייה המדויקת. - -| תחום | ההתנהגות הישנה | המימוש הנוכחי | -|---|---|---| -| סגירה ופתיחה | חלון פעולה קצר וסימוני הצלחה משותפים | מצב רצוי לכל קבוצה, צילום הרשאות לפני בקשה ואימות התוצאה; התאוששות גם אחרי הפעלה מאוחרת | -| שבת וחג רצופים | תלות בצימוד האירועים מהתשובה ובמצב הלולאה | רצף קדושה מאוחד; הקבוצה נשארת סגורה עד סוף הרצף המופעל; זמני הדלקה ביניים מוצגים בנפרד | -| שיקום הרשאות | נתוני קבצים והרשאות קיימות | שחזור מדויק מהצילום המקורי; שינוי ידני או צילום חסר עוצרים שחזור אוטומטי | -| דגלי חסימה | רשימת דגלים קבועה | כל 22 הדגלים של chatBannedRights בשכבה הנעולה ניתנים לבחירה; ברירת המחדל כוללת 21, ובכללם send_reactions ו־edit_rank; view_messages נשמר כפי שהיה | -| שינוי דגלים בזמן סגירה | ללא פאנל מלא | החלפה מהצילום המקורי, שמירה של המסכה הקודמת בזמן בקשה ושחזור גם אחרי כשל; אין הודעת סגירה חדשה רק עקב החלפת מסכה | -| מחיקת הודעות בתקופת קדושה | ללא הבקרות החדשות | מתגים נפרדים לחברים ולבוטים אחרים, כבויים כברירת מחדל; תור מחיקה נפרד עם ניכוי כפילויות וניסיון חוזר מוגבל | -| תפילין | היכולות הקודמות נשמרות במודול המורחב | תבנית עשירה, מדיה, כפתורים וצבעים; מחיקת הקודמת רק לאחר משלוח חדש מאומת, עם מזהים שנשמרים בין הפעלות | -| הודעת הזמנים | פלואו מרובה אזורים ושעה ישנה | מיקום ואזור הזמן של הקבוצה בלבד; 10:00,11:00,12:00,12:30,13:00,13:30,14:00 או שעה מותאמת | -| תוכן הודעת הזמנים | תוכן מוגבל לפי הפלואו | תאריכים אזרחיים ועבריים, כניסה ויציאה, סגירה ופתיחה, חג/שבת רצופים וזמני ביניים, פרשה ומברכים ונתוני JSON משמעותיים כשסופקו | -| שפות | הממשק המקורי | עברית, אנגלית, רוסית, צרפתית, ספרדית ופורטוגזית ברזילאית; שפת קבוצה נפרדת מהעדפות המשתמש | -| תאריך מעוצב בהודעה | התמיכה חסרה במעטפת ההודעות של MadelineProto הנבחרת | מעטפת טיפוסית ושימור ישות התאריך בקבלה ובשליחה; אין שינוי בחישוב זמני שבת וחג | - -## משמעות שתי ההרשאות - -בדגלי chatBannedRights הערך true פירושו חסימה. send_reactions מונע מחבר לשלוח תגובת אימוג׳י להודעה. edit_rank מונע מחבר לערוך את התג האישי שלו בקבוצה. הסרת דגל מרשימת החסימה שומרת את ערכו בצילום המקורי; היא אינה מעניקה אוטומטית הרשאה שנחסמה מלכתחילה. - -הרשאות מנהלים הן מנגנון Telegram נפרד. manage_ranks מאפשר שינוי תגים של אחרים; חסימת edit_rank לחברים אינה מסירה הרשאת מנהל זו. גם תגובות או הודעות של מנהלים אינן מובטחות להיחסם באמצעות הרשאות ברירת המחדל של החברים. אבחון הבוט מציג את כל 17 דגלי chatAdminRights, בלי קידום, הורדה או שינוי תפקידים אוטומטי. בחירה של כל הדגלים אינה מבטיחה שכל סוג קבוצה יקבל כל שילוב: אישור Telegram ואימות הקריאה החוזרת נשארים תנאי להצלחה. - -מקור ההגדרות: [הרשאות חסימה](https://core.telegram.org/constructor/chatBannedRights), [הרשאות מנהל](https://core.telegram.org/constructor/chatAdminRights). - -## מדיניות מחיקה בפועל - -המחיקה מטפלת בעדכונים רגילים שהבוט קיבל בקבוצות רשומות ופעילות, אחרי כניסת הקדושה ובתוך אותו רצף פעיל. סגירה מוקדמת לפני כניסת הקדושה אינה מפעילה מחיקה של הודעות מוקדמות. נבדקים מתג הסוג, תאריך השליחה המקורי, מצב קבוצה סגור בקריאה טרייה והרשאת delete_messages. פתיחה ידנית, מצב כבוי, כיבוי המתג או שינוי הגדרות, יציאה מהרצף, פקיעת בעלות או shutdown מונעים בקשת מחיקה חדשה. - -הודעות עצמיות של הבוט, הודעות שירות, הודעות ערוכות שמקורן לפני הכניסה, שולחים אנונימיים או בלתי מזוהים ותאריכים בלתי תקינים אינם נחשבים מועמדים. אין סריקת היסטוריה. הרשאה חסרה, הגבלת קצב או כשל תחבורה נשמרים בתור נפרד, עם השהיה ומספר ניסיונות מוגבל. ייתכן שהודעה לא תימחק אם אין הרשאה, אין עדכון, או שהתקופה הסתיימה לפני הניסיון הבא. - -למחיקת הודעות כלליות של בוטים אחרים נדרשת מסירת העדכונים מ־Telegram: מצב Bot-to-Bot Communication בבוט המקבל, הרשאת מנהל וכיבוי Group Privacy ב־BotFather. הפעלת המתג בפאנל אינה משנה את BotFather. ראו [התיעוד הרשמי](https://core.telegram.org/api/bots/bot-to-bot). - -בתפילין נשמרת ההודעה האחרונה שנשלחה בהצלחה. לאחר הודעה חדשה נשמרים מזהיה ורק המזהים הקודמים נכנסים למחיקה. כשל במחיקה או בשמירת נתוני הניקוי אינו מחזיר הודעה מאומתת לתור השליחה; נתוני ניקוי חסרים משוחזרים מהתגובה המתועדת. תגובה ללא מזהים מאומתים משאירה את ההודעה הקודמת ולא מנחשת מה למחוק. כיבוי המודול או אפשרות הניקוי מבטל ניקוי ממתין. ההודעה החדשה מוגנת ממחיקה. - -## נעילת MadelineProto ותאריך מעוצב - -MadelineProto נעולה ל־8.7.0 גם בדרישה המדויקת וגם בקובץ נעילת התלויות. התקנה משתמשת בגרסאות הנעולות; שינוי יזום של הגרסה מחייב סקירת מקור, חתימות ובדיקות תיקונים מחדש. אצל הספק זו גרסת קדם־שחרור, והמיזם נשאר גרסת פיתוח. הנעילה אינה התחייבות לתאימות לשינוי עתידי לא ידוע ב־Telegram או ב־PHP. - -תיקון התאריך מוסיף את המחלקה שחסרה במעטפת ההודעות, למרות שהישות כבר קיימת בסכמת Telegram הנעולה. המקור הלא מתוקן זרק AssertionError לפני הפעלת מטפל ההודעות. התיקון משמר את חותמת הזמן, מיקומי UTF-16 ודגלי העיצוב ומאמת יחד את המחלקה ואת מפעל הישויות. זהו תיקון חדש שנבדק מול המקור המדויק; המקורות המקומיים שנמצאו תועדו ולא הופצו עם טענת רישוי שלא אומתה. תצוגת HTML יכולה להציג את הטקסט בלי תג תאריך דינמי; תצוגה בלקוח Telegram אמיתי טרם נבדקה. ראו [דוח בדיקת התאריך והרישוי](MADELINE_FORMATTED_DATE.md). -## מגבלות הבדיקה והפריסה - -המתזמן פועל במחזור של כ־60 שניות, ועבודה מרוחקת עשויה להוסיף השהיה. כשל בספק הזמנים עשוי לעכב פתיחה; הקוד שומר את חוב השחזור. מרווח מצומצם עדיין קיים בין שינוי הרשאות מאומת לבין שמירת הודעת המעבר. הבדיקות אינן טוענות שכל מקרה לוח בכל שנה נבדק מול ספק חי. - -כל שמונת קובצי המיגרציה והחתימות נבדקים לפני התחלת הבוט. 008 מוסיפה בקרות מחיקה, נתוני ניקוי ותבנית עצמאית להודעת הזמנים, ושומרת תוכן משותף קיים בעותק נפרד. שבע המיגרציות הקודמות לא שונו. - -השרת הנקי חייב לעבור את בדיקת דרישות PHP וה־SQLite הטעון. SQLite 3.45.2 במחשב הפיתוח אינו עובר את שער השחרור; Docker עם SQLite 3.51.3 הוכן אך טרם הורץ. פרטי בדיקות וארכיונים נמצאים ב[דוח המימוש](IMPLEMENTATION_STATUS.md), ושלבי בדיקה בשרת נמצאים ב[מדריך הפריסה לבדיקה](SERVER_TEST_DEPLOYMENT.md). - -לא שונו production או קונטיינר פעיל; לא נשלחו או נמחקו הודעות אמיתיות; לא נוצרו commit או tag במשימה ולא פורסמו שינויים. diff --git a/docs/GROUP_SETTINGS.md b/docs/GROUP_SETTINGS.md index cb374c5..3eddf79 100644 --- a/docs/GROUP_SETTINGS.md +++ b/docs/GROUP_SETTINGS.md @@ -40,6 +40,8 @@ Daily times and Daf expose today, tomorrow, selected date and sharing. Share fro ## Permissions, stale actions and recovery +The current Telegram layer supports the `manage_linked_peers` restriction to the selectable mask. It is opt-in through its individual control or an explicit **All** selection; the existing 21-field default and saved masks are unchanged. Administrator-rights diagnostics recognize all 19 current fields, including `manage_linked_peers` and `manage_welcome_messages`, without granting those rights. + The bot rechecks current administrator permission for every sensitive callback and final save. Flow tokens carry settings revision; an older panel, expired token, other user, replay or forwarded button cannot change settings. Concurrent editors do not overwrite a newer revision. State is scoped to user/group/action; no shared mutable `groupid` is used for new settings. Permission snapshots are saved durably before restriction, preserved while bot-owned restriction remains active, and restored exactly. A missing/corrupt snapshot or conflicting manual permission edit is a visible issue. Routine notification replanning never deletes an unresolved permission-restoration job. The scheduler reconciles desired state on restart, including an opening missed by more than the former six-minute window. @@ -70,7 +72,7 @@ Next action: [calculated local datetime] 🛠 Status and issues ``` -This is a simulation, not a production chat capture. Automated fixture evidence is linked from [FEATURE_PARITY.md](FEATURE_PARITY.md). Telegram administration checks, inline client behavior, permission RPCs, topics, actual payments and broadcasts still require opt-in staging validation. +This is a simulation, not a production chat capture. Automated fixture evidence is linked from [implementation status](IMPLEMENTATION_STATUS.md). Telegram administration checks, inline client behavior, permission RPCs, topics, actual payments and broadcasts still require opt-in staging validation. ## Original button input compatibility Open **Messages and design**, choose the message, then **Buttons**. The simple link-button path asks for a label and URL separately. Advanced input includes concrete examples for the existing plaintext parser and JSON rows. Type the body directly into the active private question. Candidate content is previewed before explicit save, and cancellation preserves the stored design. @@ -93,7 +95,7 @@ Offline evidence is in `UIOperatorTest`: all six frames and stable callbacks, se ## Group restrictions and message cleanup -The **Group restrictions and cleanup** screen is group-only. A checked restriction means that action is blocked while the bot owns an active closure. The 21 global restriction fields from the locked Telegram layer are selectable. The full 22-field native snapshot is retained for validation and restoration. Telegram explicitly forbids `view_messages` in global default permissions ([official rights documentation](https://core.telegram.org/api/rights)); it is therefore excluded from selection and rejected before any RPC: +The **Group restrictions and cleanup** screen is group-only. A checked restriction means that action is blocked while the bot owns an active closure. The 22 global restriction fields from the locked Telegram layer are selectable. The full 23-field native snapshot is retained for validation and restoration. Telegram explicitly forbids `view_messages` in global default permissions ([official rights documentation](https://core.telegram.org/api/rights)); it is therefore excluded from selection and rejected before any RPC: | Native field | Member action | |---|---| @@ -118,12 +120,13 @@ The **Group restrictions and cleanup** screen is group-only. A checked restricti | send_plain | Send plain text | | edit_rank | Edit the member's own custom tag (rank) | | send_reactions | Send reactions | +| manage_linked_peers | Manage linked chats; opt-in restriction | -Default selection blocks all 21 actions except viewing messages. **All**, **None** and **Default** create previews requiring final one-use confirmation. All and Default both exclude the unsupported `view_messages` flag. An older stored mask containing that flag must be reset using Default, All or None before it can be applied; it is never silently discarded. A selection never clears an existing manual restriction or replaces the original restoration snapshot. Changes and resets are isolated to the current group. The Shabbat module reset restores the default mask and switches both holy-period cleanup options off. +**Default** retains the original 21-action mask. The additional `manage_linked_peers` restriction is selected individually or through **All**, which selects all 22 supported actions. **All**, **None** and **Default** create previews requiring final one-use confirmation. All and Default both exclude the unsupported `view_messages` flag. An older stored mask containing that flag must be reset using Default, All or None before it can be applied; it is never silently discarded. A selection never clears an existing manual restriction or replaces the original restoration snapshot. Changes and resets are isolated to the current group. The Shabbat module reset restores the default mask and switches both holy-period cleanup options off. Default permission readback is compared by meaning within narrow, verified rules: `until_date=0` and `2147483647` both mean permanent restrictions; arbitrary finite expiries stay distinct. Legacy `send_media` and `send_messages` aggregate bits are redundant only when every corresponding granular send restriction is explicitly blocked on both sides. An individual flag change, including `send_reactions` or `edit_rank`, is still a conflict. Selecting an aggregate for a new lock explicitly includes its granular restrictions. Original native snapshots and their checksums are never rewritten by this comparison. -These rules follow the [official TDLib permanent-default-rights reader](https://github.com/tdlib/td/blob/ad2178896533ff92831accdf56ea7edd8393f2ca/td/telegram/DialogParticipant.cpp#L220-L228) and [granular-rights serializer](https://github.com/tdlib/td/blob/ad2178896533ff92831accdf56ea7edd8393f2ca/td/telegram/DialogParticipant.cpp#L306-L314). The pinned MadelineProto 8.7.0 adapter refreshes full peer information with a zero cache lifetime and reads the updated peer again after the response. Both basic-group and supergroup refresh paths have offline tests using the actual pinned SDK method. +These rules follow the [official TDLib permanent-default-rights reader](https://github.com/tdlib/td/blob/ad2178896533ff92831accdf56ea7edd8393f2ca/td/telegram/DialogParticipant.cpp#L220-L228) and [granular-rights serializer](https://github.com/tdlib/td/blob/ad2178896533ff92831accdf56ea7edd8393f2ca/td/telegram/DialogParticipant.cpp#L306-L314). The version-matched MadelineProto adapter validates permissions from the exact matching full-peer response returned by the reviewed Fresh Peer helper. Cached, minimal, mismatched or incomplete data cannot authorize capture or readback. Both basic-group and supergroup paths need regression coverage against the installed locked SDK. After upgrading from dev.5, a retained prepared/error/conflict/restoring state can recover on the next manual operation or scheduled reconciliation only if fresh current rights match the original snapshot or a known bot-owned mask under those narrow rules. No database reset or new snapshot is needed for that case. Missing/corrupt snapshots, unmatched finite expiries, unknown restrictions and meaningful administrator changes remain protected. A genuine mismatch stops automatic changes and shows a bounded list of differing permission names; it does not establish who changed them. Normalization does not authorize the bot to overwrite that mismatch. A legacy aggregate-only snapshot without explicit granular rights stays strict because its equivalence cannot be proved. @@ -175,3 +178,7 @@ The main group panel and Shabbat/permission categories include **Resolve permiss Automatic recovery preserves only verified known results, proven never-dispatched first attempts and additional restrictions on known fields untouched by the bot. Original snapshot bytes remain available. Ambiguous bot-controlled, relaxed, unknown or expiry differences retain administrator review; a new week alone cannot reset them. Current default Shabbat/holiday output uses local `Y-m-d H:i` without a numeric UTC suffix or source/update footer, as described in [calendar presentation](CALENDAR_PRESENTATION.md). This supersedes older presentation notes above; internal timezone/freshness metadata remains available in diagnostics. + +## Keyboard format compatibility + +Saved Bot API and earlier native keyboards are normalized by the central current-layer compatibility boundary. Inline and reply keyboards stay distinct; old stored templates are not rewritten solely for this upgrade. See [keyboard compatibility](KEYBOARD_COMPATIBILITY.md) for supported actions, styles, icon fallback and verification limits. diff --git a/docs/IMPLEMENTATION_STATUS.md b/docs/IMPLEMENTATION_STATUS.md index 58f8935..1ecd7f9 100644 --- a/docs/IMPLEMENTATION_STATUS.md +++ b/docs/IMPLEMENTATION_STATUS.md @@ -1,6 +1,8 @@ # Implementation and acceptance status -Version: **3.0.0**, stable. This document distinguishes implemented behavior from the evidence actually available. The application remains MadelineProto 8.7.0, PHP and SQLite. The stable release retains the dev.9 runtime behavior, approved patches, dependency lock and 16 migrations. It updates release identity, source packaging and deployment documentation. +**Release policy: publication requires successful mandatory checks on the exact final commit. Use the matching GitHub Actions run and release manifest to verify the tested source and artifacts.** + +Version: **3.1.0**, targeting the locked official MadelineProto 8.11.10 / TL layer 232 release. Existing PHP/SQLite bot capabilities and migration bytes are retained. This page distinguishes implemented behavior, previous acceptance and checks still required on the final new tree. ## Implemented paths and limits @@ -26,11 +28,13 @@ Version: **3.0.0**, stable. This document distinguishes implemented behavior fro On 2026-10-16 the project owner reported successful live dev.9 tests of group locking, unlocking, restoration of the original permissions and restart. This is operator-reported evidence for those paths. It does not establish a real Shabbat/Yom Tov transition, a full holiday sequence, sustained load capacity, a long wall-clock soak, every client/language, payment flow or the legacy production migration. -The stable version does not add a runtime feature or schema migration to dev.9. Keep the above acceptance tied to its actual tested behavior; the stable release's exact source, package checks and CI results are recorded separately. +That confirmation belongs to the earlier implementation. It is not live acceptance of MadelineProto 8.11.10, the new keyboard boundary or the 3.1.0 import procedure. No new 3.1.0 Telegram acceptance is claimed. ## Automated verification and host limits -The suites exercise fake transports, provider fixtures, controlled clocks, isolated databases, migration/restore, patch lifecycle and simulated load. Run them against the final reviewed stable commit and its locked installation. The dev.9 merged baseline passed its hosted checks, but that result is not a replacement for the stable commit's own checks. Release manifests, SHA-256 sums and the matching Actions run identify the tested source/artifacts. Local checks directories are external evidence, not runtime source. +Shutdown coverage exercises official SDK loop recovery/stop behavior and real disconnect/finalize methods with an in-memory transport and modeled delayed flush. The lock barrier must retain writer ownership until finalization completes. Loop `stop()` prevents rescheduling after the current body returns; it does not promise immediate cancellation of that body. These fixtures do not serialize a real session or exercise Telegram, an IPC daemon or Linux signals. Platform-specific worker checks must be evaluated on the relevant operating system. + +The suites exercise fake transports, provider fixtures, controlled clocks, isolated databases, migration/restore, patch lifecycle and simulated load. Run them against the final reviewed 3.1.0 commit and locked installation. Earlier 3.0.0 hosted results do not replace this version's mandatory clean-install, regression, analysis, image and artifact checks. Publication requires those gates to pass on the exact final commit. Release manifests, SHA-256 sums and the matching GitHub Actions run identify the tested source/artifacts. Local checks directories are external evidence, not runtime source. Local Windows limitations include unavailable Docker and POSIX-only/symlink-dependent coverage. The local PHP-loaded SQLite 3.45.2 is deliberately rejected by the release gate; the Docker target pins SQLite 3.51.3 and must pass that gate. Do not describe an unexecuted image build, CI run or Telegram operation as successful. See [publication status](PUBLICATION_STATUS.md) for source scope and [release preparation](RELEASE.md) for gates. @@ -38,8 +42,8 @@ Local Windows limitations include unavailable Docker and POSIX-only/symlink-depe On a separate bot and disposable groups, verify the feature paths your installation uses: conflicts/recovery, automatic protected-period transitions, interrupted work/shutdown, inline/GPS/client rendering, source offer, command menus, rich messages and payment flow where enabled. Exercise forum and non-forum groups if used. Observe a real scheduled close/open cycle and monitor queue/heartbeat behavior under your traffic; synthetic load is not a Telegram capacity guarantee. -The `/root/shabat` legacy import still needs a stopped full backup, exact group-ID/settings comparison, permission review, restore rehearsal and monitored cutover. Test-bot data is never substituted for production data. Follow [the production upgrade guide](PRODUCTION_UPGRADE.md). Publishing the source/tag/release does not perform these server actions or restart the active bot. +The actual production path must first be verified: /root/shabbat is requested, while older instructions named /root/shabat. Legacy import needs a stopped full backup, exact group-ID/settings comparison, permission review, restore rehearsal and monitored cutover. Test-bot data is never substituted for production data. Follow [the production upgrade guide](PRODUCTION_UPGRADE.md). Publishing the source/tag/release does not perform these server actions or restart the active bot. ## Documentation map -[English README](../README.md) · [עברית](../readme-he.md) · [Installation](INSTALLATION.md) · [Configuration](CONFIGURATION.md) · [Group settings](GROUP_SETTINGS.md) · [Calendar methods](ZMANIM_METHODS.md) · [User experience](USER_EXPERIENCE.md) · [Administration](ADMIN_PANEL.md) · [Migration](MIGRATION.md) · [Backup/restore](BACKUP_RESTORE.md) · [Delivery safety](DEV9_DELIVERY_SAFETY.md) · [Permission recovery](PERMISSION_RECOVERY.md) · [Diagnostics](DIAGNOSTICS.md) · [Licensing](LICENSING.md) · [Release preparation](RELEASE.md) +[English README](../README.md) · [עברית](../readme-he.md) · [Installation](INSTALLATION.md) · [Configuration](CONFIGURATION.md) · [Group settings](GROUP_SETTINGS.md) · [Calendar methods](ZMANIM_METHODS.md) · [User experience](USER_EXPERIENCE.md) · [Administration](ADMIN_PANEL.md) · [Migration](MIGRATION.md) · [Backup/restore](BACKUP_RESTORE.md) · [Delivery safety](DELIVERY_SAFETY.md) · [Permission recovery](PERMISSION_RECOVERY.md) · [Diagnostics](DIAGNOSTICS.md) · [Licensing](LICENSING.md) · [Release preparation](RELEASE.md) diff --git a/docs/INSTALLATION.md b/docs/INSTALLATION.md index f030119..dd9f8c0 100644 --- a/docs/INSTALLATION.md +++ b/docs/INSTALLATION.md @@ -2,13 +2,13 @@ [English overview](../README.md) | [עברית](../readme-he.md) | [Configuration](CONFIGURATION.md) | [Migration](MIGRATION.md) -This documents stable `3.0.0`. Install the matching release deployment ZIP or exact tagged checkout. The owner confirmed dev.9 live locking, unlocking, original-permission restoration and restart; acceptance on your host and remaining feature-specific tests are separate. See [publication status](PUBLICATION_STATUS.md). +This documents version 3.1.0; check [acceptance status](IMPLEMENTATION_STATUS.md) before deployment. Install the matching release deployment ZIP or exact tagged checkout. The owner confirmed dev.9 live locking, unlocking, original-permission restoration and restart; acceptance on your host and remaining feature-specific tests are separate. See [publication status](PUBLICATION_STATUS.md). ## Requirements and command context Run the following commands in the unpacked project root on Linux. Docker commands require access to the Docker daemon and Compose v2; that access is privileged. PHP maintenance commands run as the image's non-root user. The only Compose service is `shabbat`; there is no `composer` service. -The Dockerfile pins PHP 8.4.19 and Composer 2.10.3 images by digest and builds checksum-verified SQLite 3.51.3. It installs dependencies from `composer.lock`, applies and verifies the five local patch sets before startup, and runs without root as UID/GID 10001. Image building uses network access but no bot credentials. CI uses the same Composer version, including the upstream [GitHub Actions token-validation and disclosure fix](https://github.com/composer/composer/security/advisories/GHSA-f9f8-rm49-7jv2); authentication and all validation gates remain enabled. Runtime requires a separate configured bot, Telegram access and calendar provider access. +The Dockerfile pins PHP 8.4.26 and Composer 2.10.3 images by digest and builds checksum-verified SQLite 3.51.3. It installs dependencies from `composer.lock`, applies and verifies the two active local patch sets before startup, and runs without root as UID/GID 10001. Image building uses network access but no bot credentials. CI uses the same Composer version, including the upstream [GitHub Actions token-validation and disclosure fix](https://github.com/composer/composer/security/advisories/GHSA-f9f8-rm49-7jv2); authentication and all validation gates remain enabled. Runtime requires a separate configured bot, Telegram access and calendar provider access. Manual installation requires 64-bit PHP 8.3, 8.4 or 8.5, Composer 2, the extensions required by `composer check-platform-reqs`, and a patched PHP-loaded SQLite version accepted by `php bin/self-check.php --release`. That gate accepts SQLite >=3.51.3 or the explicitly reviewed 3.44.6/3.50.7 backports. A newer standalone `sqlite3` executable does not change the library loaded by PHP PDO. The image is the documented deployment baseline; native process supervision is operator-managed. @@ -71,6 +71,7 @@ docker compose -p shabbat-test up -d --force-recreate shabbat Migration verifies a backup before changing an existing database and rejects modified migration checksums. Startup validates the schema; it never silently migrates it. Keep independent private backups of the session and third-party runtime state as described in [backup and restore](BACKUP_RESTORE.md). Never remove named volumes as an upgrade step. + ## Manual installation and no-scripts mode Run as an unprivileged application owner in a separate checkout with writable private data/session directories. Use the supported PHP runtime, not a running bot's dependency tree. diff --git a/docs/KEYBOARD_COMPATIBILITY.md b/docs/KEYBOARD_COMPATIBILITY.md new file mode 100644 index 0000000..907df18 --- /dev/null +++ b/docs/KEYBOARD_COMPATIBILITY.md @@ -0,0 +1,45 @@ +# Keyboard compatibility + +Shabbat 3.1.0 converts keyboards immediately before transport through +`Shabbat\Telegram\KeyboardMarkup`. MadelineProto 8.11.10 uses Telegram Layer 232: +inline keyboards contain `keyboardInlineButtonRow`, `keyboardInlineButton` +and a nested `InlineButtonType`. Reply keyboards use `keyboardButtonRow`, +`keyboardButton` and `ButtonType`. + +## Existing settings and templates + +Existing Bot API arrays, native keyboards from MadelineProto 8.7 and current +typed native keyboards are accepted. Stored JSON is read without rewriting it. +The adapter preserves callback bytes, URLs, copy text, switch-inline queries, +peer selection, login/WebApp actions, game/payment actions, background colors +and custom emoji IDs. Unknown or mixed action/context formats fail before a +message is sent. Existing native HTTP URL buttons remain supported; new flat +Bot API URL buttons retain the HTTPS/Telegram URL policy. WebApp and login URLs +require HTTPS. Login buttons can omit the optional bot field, using Telegram's +current-bot default just as the official SDK converter does. + +Template buttons accept row arrays or recognized `inline_keyboard` / +`replyInlineMarkup` wrappers. Template validation uses the same action rules +as transport. Existing `inherit`, `custom` and `none` modes keep their meaning. + +## Transport and navigation + +Initial messages, media messages, edits, group acknowledgement counters, +inline search results and BroadcastManager messages use the same adapter. +Reply keyboards, keyboard removal and forced replies remain separate from +inline keyboards. A callback continues editing its recorded message rather than +sending a new menu. + +Colors remain `primary`, `danger`, `success` or the equivalent native +`keyboardButtonStyle` flags. Explicit custom icons remain signed-int64 IDs. +The custom-emoji fallback removes only unsupported animation and keeps the +button action, color, count, callback binding and edit/message identity. + +## Offline verification + +`KeyboardCompatibilityTest` uses the installed official TL serializer and decoder +without creating a Telegram session or calling Telegram. It covers old/current +formats, supported actions, reply-keyboard separation, persisted templates, +`/start` and callback navigation. Other gateway, emoji and template tests cover +media/inline delivery and fallback behavior. A live Telegram smoke test is still +required after deployment to a separate test bot. diff --git a/docs/LICENSING.md b/docs/LICENSING.md index fb05670..181814b 100644 --- a/docs/LICENSING.md +++ b/docs/LICENSING.md @@ -1,38 +1,38 @@ # Licensing and corresponding source -WizardLoop Shabbat uses **AGPL-3.0-only** for the current combined application, as declared by `composer.json` and original application SPDX headers. [LICENSE](../LICENSE) is the complete, unchanged GNU AGPL version 3 text. [The historical MIT grant](../LICENSES/SHABBAT-LEGACY-MIT.txt) retains the original WizardLoop copyright and permission notice; the current policy does not revoke earlier grants or offer the whole new application under an alternative MIT license. +WizardLoop Shabbat uses **AGPL-3.0-only** for the combined application, as declared in composer.json and original application SPDX headers. [LICENSE](../LICENSE) retains the complete GNU AGPL version 3 text. The [historical MIT grant](../LICENSES/SHABBAT-LEGACY-MIT.txt) remains effective for its original scope. -## Preserve component grants +## Preserve original grants -Dependencies, imported fragments and patch baselines keep their original copyright and license notices. MadelineProto's package metadata declares `AGPL-3.0-only`; its source headers and the added formatted-date wrapper permit version 3 or later. These texts are retained unchanged and their common version 3 grant is used by the combined application. The difference is recorded, not silently rewritten. +Dependency sources, patch baselines and upstream supplements retain original notices. MadelineProto metadata declares AGPL-3.0-only, while its source headers permit version 3 or later; the common version 3 grant is used without rewriting either text. The RTC AV package declares MIT in metadata but distributes a BSD-3-Clause license and BSD headers. This unresolved metadata difference is recorded, not silently repaired. -Hebcal output, GeoNames place data and the Omer count resources retain **CC-BY-4.0**. The Wikisource Omer transcription/editorial resource retains **CC-BY-SA-4.0**, its contributor attribution, pinned revisions and modification notes. The complete Creative Commons legal texts are in [LICENSES](../LICENSES/README.md). API account terms and quotas are separate from these data grants. See [third-party notices](../THIRD_PARTY_NOTICES.md) and [technical provenance](THIRD_PARTY_DETAILS.md). +Hebcal output, GeoNames data and Omer count resources retain CC-BY-4.0; the Wikisource Omer transcription/editorial resource retains CC-BY-SA-4.0. Preserve their attribution, pinned provenance and modification notes. Complete texts are in [LICENSES](../LICENSES/README.md). API access terms and quotas are separate from data grants. -## Exact source offer +## Exact deployed source offer -`/source`, with `/license` and `/version` aliases, shows the application identity and source information. `SOURCE_URL` must identify the exact deployed corresponding source, including local application changes and all active patches. A moving upstream branch or the Composer lock alone cannot identify a modified deployment. `BUILD_COMMIT` is build metadata; a fabricated commit does not turn an unpublished working tree into published source. +/source, /license and /version display application/source identity. SOURCE_URL must identify the exact deployed source, including application changes and active patches. A moving branch, lock file alone or fabricated BUILD_COMMIT cannot identify an unpublished modified deployment. -When conveying a modified covered program, retain notices and the license, identify modifications and provide the required corresponding source. For remote interaction with the modified network program, GNU AGPL section 13 requires the applicable source offer. The complete conditions are in [LICENSE](../LICENSE), including sections 4–6 and 13, and the [official GNU text](https://www.gnu.org/licenses/agpl-3.0.html). This document records the project's release practice and evidence, not a certification of unrelated contributions or deployments. +When conveying a modified covered program, retain notices, identify modifications and provide the required corresponding source. GNU AGPL section 13 governs the applicable source offer for remote interaction with a modified network program. Read [the complete license](../LICENSE), especially sections 4–6 and 13, and [the official GNU text](https://www.gnu.org/licenses/agpl-3.0.html). This document records release evidence and practice; it does not certify unrelated contributions or deployments. -## Publication archive scope +## 3.1.0 archive scope -The `v3.0.0` release provides two separate artifacts: - -| Artifact | Scope | +| Artifact | Contents | |---|---| -| `shabbat-3.0.0.zip` | Clean repository source: application, resources, migrations, tests, scripts, Composer manifest/lock, public configuration, Docker files, documentation, licenses and required GitHub files. No installed `vendor` tree. | -| `shabbat-3.0.0-corresponding-source.zip` | Application material plus the 57 locked Composer runtime packages, their source/license notices and the applied reviewed patches. Exact contents, exclusions and hashes are recorded in its manifest. | +| shabbat-3.1.0.zip | Clean application source, resources, migrations, tests, scripts, exact Composer lock, public configuration, Docker, documentation, licenses and GitHub workflows. No installed vendor tree. | +| shabbat-3.1.0-corresponding-source.zip | The application plus 83 locked Composer runtime packages with their original source/notices, the two reviewed patch outputs and pinned preferred-source supplements. Its manifest states exact hashes and exclusions. | + +The checked-in [source manifest](../resources/release/source-manifest.json) pins **4,095 runtime dependency files and 103 supplementary source files**: 18 Windows helper source files, 84 MadelineProto build/schema/language inputs and the pinned RTC AV README. It verifies exact lock and runtime source bytes; generated Composer autoload/bin metadata and all 26 development packages are excluded. PHPStan's distributed PHAR is not described as its preferred source. -The corresponding-source artifact is scoped to the application and its Composer runtime dependencies. Development tools are reproducible from `composer.lock` and are inventoried, but are not bundled in that runtime source artifact; PHPStan's distributed PHAR must not be called its preferred source. The archive is not a complete Docker-image or operating-system source distribution. PHP, SQLite, Composer and base-image/system components are external to that scope; Docker pins and source references describe the build inputs. Any unresolved or omitted preferred-source component must be listed in the publication report before the artifact can be described as complete within its stated scope. +The two reviewed public Amp HTTP Server TLS example private keys are omitted by exact recorded hash; neither is used by the bot. Real credentials, sessions, databases, backups and private work material must never enter source archives. -Keep the application source, all five patch sets, immutable bases/intermediates, added files, exact diffs, manifests and notices available together. The two reviewed public Amp HTTP Server TLS example private keys may be omitted from a distribution only with the exact omission records preserved; they are not used by this bot. Other private keys and real runtime credentials do not belong in source archives. +Keep the two active patch sets, original bases/intermediates, reviewed outputs, diffs, manifests and notices together. Former local UpdateLoop, GeoPoint and formatted-date patches are retired; historical attribution findings are summarized in [technical provenance](THIRD_PARTY_DETAILS.md). -Release packaging uses the checked-in [source-input manifest](../resources/release/source-manifest.json) and [preferred-source supplements](../resources/release/README.md). The manifest pins all 2,960 included runtime dependency files and 92 supplementary source files. Packaging verifies a locked, patched runtime installation against those hashes and adds the exact reviewed application tree; it excludes installed development tools and generated Composer autoload metadata. Original component notices and the two approved example-key omission records remain attached to that scope. +## Explicit limits and review findings -## Evidence and remaining review +This is an application/Composer-runtime source collection, **not** the complete source of a Docker image, PHP, SQLite, external native multimedia libraries or every development tool. No reproducible native binary rebuild or all-platform source completeness is claimed. The retained Windows helper binaries have pinned associated preferred source, but their rebuild was not verified. -The [dependency inventory](dependencies.json) distinguishes 57 runtime packages and 26 development packages, exact versions, metadata, distributed license files and findings. `LICENSE_TEXT_PRESENT` means a recognized license text was found; it is not an authorship or compatibility certificate. Regenerate it with `php scripts/dependencies.php` from the isolated locked installation. Composer security advisories are a separate check. +Current TL232 and language-generator inputs are supplied; full historical schemas, complete upstream documentation, its toolchain and historical mutable RPC data are not. No generator or optional FFmpeg downloader was executed. The AV FFI declarations retain upstream bytes; whether they are directly maintained preferred source or generated derivatives is unestablished. No separate generator exists in the pinned package tree; external derivation provenance remains a review finding rather than an assumed MIT grant. -On **2026-10-16**, the WizardLoop project maintainer stated that they authored the historical UpdateLoop helper retained at [original-reference.php](../patches/madelineproto/original-reference.php) and explicitly authorized its distribution under **AGPL-3.0-only**. The [manifest](../patches/madelineproto/manifest.json) binds this attestation to SHA-256 `1ec2691498e878d28ca8e9cde94b00c803d9ccba789096ffc8471156dfb429e9`. The exact headerless helper bytes are preserved; the dated statement supplies the maintainer's authorization without rewriting historical source or dependency licenses. It is not an independent authorship or legal certification. +The [dependency inventory](dependencies.json) records 83 runtime and 26 development packages. LICENSE_TEXT_PRESENT means a recognized distributed license text was found; it is not an authorship or compatibility certificate. The AV metadata mismatch remains NOT VERIFIED. Regenerate with php scripts/dependencies.php in an isolated exact-lock installation. Composer advisories are a separate check. -The historical formatted-date exports still have unresolved standalone grants and are not redistributed. Their finding is separate from the UpdateLoop attestation. Preserve any remaining contributor or deployment-only provenance findings. [Publication status](PUBLICATION_STATUS.md), release manifests and the recorded checks identify the evidence available for the actual release. +Any unresolved source or licensing finding must remain in [publication status](PUBLICATION_STATUS.md) and the release report; do not label this a universally complete source distribution. diff --git a/docs/MADELINE_FORMATTED_DATE.md b/docs/MADELINE_FORMATTED_DATE.md deleted file mode 100644 index 4ed42b0..0000000 --- a/docs/MADELINE_FORMATTED_DATE.md +++ /dev/null @@ -1,46 +0,0 @@ -# MadelineProto formatted-date compatibility and version policy - -Reviewed 2026-10-14. The selected package is danog/madelineproto 8.7.0, immutable commit 7b99dd0f2d964a492c377912ffce9f5ce61aa9ed. Both composer.json's exact constraint and composer.lock preserve this version; composer install uses the full 83-package lock. At the 2026-10-14 review, GitHub marked 8.7.0 as a pre-release and 8.6.5 as Latest; these are historical observations, not a current release lookup. This project remains a 3.0.0 development snapshot and does not describe the selected dependency as an upstream stable release. - -## The concrete error - -The package's layer 225 TL schema declares messageEntityFormattedDate#904ac7c7 with UTF-16 offset/length, a Unix timestamp and six boolean flags. The original EventHandler/Message/Entities/MessageEntity.php factory lacks both a FormattedDate wrapper and its dispatch branch. Valid received entities raise AssertionError: Unknown entity type: messageEntityFormattedDate at the original factory line 60. Message::__construct calls that factory before typed event-handler dispatch, so catching an error only inside a bot handler does not repair the missing wrapper. - -This is message-formatting metadata. It does not replace the group's IANA timezone, change calendar calculations, reinterpret Hebcal JSON dates or convert the operational Shabbat/festival boundaries. - -Before changing vendor, eight valid inputs reproduced the exact failure without creating an API, a session or a Telegram connection. A separate probe assembled explicitly labeled schema wire with the native integer encoder and used the actual locked TL decoder for all 19 valid flag combinations. It was not represented as a complete TL(null) serializer integration. Historical raw investigation output is not included in the publication source. Reproducible regression tests and the source artifacts remain included; the current publication report records fresh checks. - -## Available history and reference - -The local shabbat repository has 98 reachable commits across all references and reflogs. Searches of file paths, commit messages and content changes found no previous FormattedDate/messageEntityFormattedDate correction or dedicated test. This is the accessible local history; deleted/unavailable remote history is not claimed. - -Two local exports contain byte-identical implementations. The labels below are logical local-reference project/file identifiers, not public download URLs: - -- local-reference/newsearch-v2/docker/patch-madeline-formatted-date.php -- local-reference/psy new/release-r21-work/docker/patch-madeline-formatted-date.php - -Their script SHA256 is c3091f61a401d8022b8ef1d228cf8c5f31a1094982de69a0be108e21885cb967. Their docker/madeline-formatted-date/FormattedDate.php wrapper SHA256 is a9e3146e49a88bec469e67e53f5e27cffb1b5127cde547590f2e385ef02dd264. The corresponding test is tests/madeline_formatted_date_compatibility_test.php. - -These directories have no usable Git history. Their filesystem modification timestamp is 2026-09-03T23:06:59Z; that is not asserted to be a commit or authorship date. The export package declarations conflict (MIT versus proprietary) and no standalone grant/header was found for those reference files. Their behavior and hashes were reviewed, but the original script/wrapper is not redistributed as an audited upstream artifact. - -A fresh implementation is based on the official protocol and the locked SDK's entity conventions. Its applied unified diff is a new reviewed correction, not described as the original unchanged historical patch. Native/BotAPI conversion retains the timestamp and UTF-16 offsets; the protocol's unknown-entity rejection remains in place. It does not add a broad catch-and-ignore fallback. - -## Official source check and protocol contract - -The official v8 head checked on 2026-10-14 was b1a4c5efee60a87cdbe7bc2b1eb542166ec7e2e3 (commit date2026-10-07); its entity factory still lacked this support. No newer compatible official correction was approved during this review. The exact tested 8.7.0 source is retained instead of silently selecting a moving branch. - -The supported BotAPI date_time format is r|w?[dD]?[tT]?. Empty formatting is valid. Relative formatting cannot be mixed with other flags; short/long variants of time or date cannot coexist. Telegram controls the actual client rendering. Generated HTML previews may preserve the underlying text without a dynamic date tag, while native entity capture/resend retains the date metadata; neither is claimed as a live client test. - -See the [official constructor](https://core.telegram.org/constructor/messageEntityFormattedDate), [date-time formatting](https://core.telegram.org/bots/api#date-time-entity-formatting), [selected release](https://github.com/danog/MadelineProto/releases/tag/8.7.0) and [checked official source](https://github.com/danog/MadelineProto/blob/b1a4c5efee60a87cdbe7bc2b1eb542166ec7e2e3/src/EventHandler/Message/Entities/MessageEntity.php). - -## Installation, licensing and future updates - -Use the shared [patch workflow](PATCHES.md): install from the lock, apply and verify approved patches before startup, and use the explicit route after --no-scripts. Startup only verifies; never change an active Composer tree or running container. The new class and factory are an approved set: partial, unknown, mismatched or incompatible source must stop the build. A matching already-patched set is a no-op. Corresponding-source archives retain the exact SDK baseline, new class, diff, manifest, rights notices and license. - -The supplied Docker layout mounts /app/data and /app/runtime only. It does not mount /app or /app/vendor, so an old named vendor volume cannot hide dependencies in that layout. Patching occurs during image construction. The other project's /opt/theisraelis copy workaround is specific to its broader runtime mounts and is not silently transplanted here. - -AGPLv3 allows conveying modified source and the modifications that produce it, subject to its conditions: retain notices/license, identify changes and dates, license the covered combined work appropriately, provide corresponding source with distributed object code, and offer the modified program's source to remote network users where section 13 applies. MadelineProto package metadata says AGPL-3.0-only; existing v3-or-later headers remain untouched, using their common version 3 grant. This supports including the reviewed diffs in the AGPL Shabbat repository; it is not a blanket certification of every contributor, asset or deployment practice. See [third-party notices](../THIRD_PARTY_NOTICES.md) and the [GNU license text](https://www.gnu.org/licenses/agpl-3.0-body.html). - -An exact lock prevents accidental version selection; it cannot guarantee an unseen future Telegram/PHP version will stay compatible. A future upgrade requires an explicit constraint/lock change, reviewed version/commit/schema/file signatures, all behavioral tests, a clean install and an isolated target rehearsal. Unknown versions fail closed. Dependency update proposals and CI do not constitute automatic approval to publish or deploy. - -No active bot/container, production data or real Telegram message was changed during the investigation. The final applied state and exact complete-suite/archive results are recorded in [implementation status](IMPLEMENTATION_STATUS.md) and the external checks/PUBLICATION_REPORT.md for this preparation. Historical private validation outputs are not bundled. No task commit, local tag or publication is claimed. diff --git a/docs/MIGRATION.md b/docs/MIGRATION.md index fe8ed55..99f2710 100644 --- a/docs/MIGRATION.md +++ b/docs/MIGRATION.md @@ -1,12 +1,8 @@ -For the running legacy installation at `/root/shabat`, follow the complete [production upgrade procedure](PRODUCTION_UPGRADE.md), including stopped backups, exact group verification and permission recovery. - -# Dev.8 to dev.9 +# Database upgrade and legacy import -Stop all writers and use the verified backup/migrate sequence in [test deployment](SERVER_TEST_DEPLOYMENT.md). Migration 016 adds dispatch timestamps and indexes without changing prior migration files, permission snapshots or job payload/random IDs. Existing attempts that might have reached Telegram are conservatively marked uncertain. This can suppress additional Tefillin messages on the upgrade day rather than duplicate an unknown old delivery. Existing older unverified permission snapshots retain the dev.8 administrator-review requirement. +Use the [production runbook](PRODUCTION_UPGRADE.md) ([עברית](PRODUCTION_UPGRADE_HE.md)) to verify whether the real installation is at /root/shabbat or /root/shabat, back up stopped state and preserve the session. Existing 3.0 SQLite deployments keep their data and run the migration/schema gate; they do not run legacy import again. Version 3.1.0 adds no SQL migration and retains migrations 001–016 unchanged. -Rebuild the image for the reviewed BroadcastManager lifecycle patch. Do not modify a live vendor tree or remove data/session volumes. See [runtime changes and retention](DEV9_DELIVERY_SAFETY.md). Historical migration notes follow. - -# Migration from the file-based bot +## File-based legacy import Keep the old bot stopped during explicit import and cutover. Do not run old and new writers together or delete the old MadelineProto session. These commands are operator instructions; development tests use isolated fixtures only. @@ -14,8 +10,22 @@ Keep the old bot stopped during explicit import and cutover. Do not run old and 2. Initialize a new application database: `php bin/migrate.php --db=/path/to/shabbat.sqlite --writers-stopped`. For an existing application DB supply an existing `--backup-dir=/path/to/backups`; it is backed up and verified before any migration. 3. Inspect: `php bin/import-legacy.php --db=/path/to/shabbat.sqlite --legacy=/path/to/old-bot --dry-run`. The source can be the bot root or its `data` directory. With no destination DB, dry-run uses an in-memory database and does not create application records. 4. Compare report counts, templates, original rights, invalid JSON and recovery warnings with sampled legacy records. -5. Apply: `php bin/import-legacy.php --db=/path/to/shabbat.sqlite --legacy=/path/to/old-bot --apply --writers-stopped --backup-dir=/path/to/backups`. -6. Run health checks, test backup/restore on a separate path and verify a staging group before starting the new bot. +5. Save and review the private dry-run JSON, then apply with `php bin/import-legacy.php --db=/path/to/shabbat.sqlite --legacy=/path/to/old-bot --apply --writers-stopped --backup-dir=/path/to/backups --expect-report=/private/path/import-preview.json`. +6. Check schema/integrity, compare the import result and rehearse restore on a separate path before startup. Live health additionally requires recent scheduler heartbeats; run it after authorized startup. + + +## Preview, comparison and repeatability + +Dry-run and apply parse the same group and personal templates. Reports are private: they contain group/user identifiers and source-derived preferences. + +- `report_version: 1` identifies the schema; a reviewed preview has `dry_run: true`. +- `source_sha256`, `destination_sha256` and `plan_sha256` bind the source, affected destination records and planned import. `--expect-report=PATH` refuses a changed source/target/plan before application records are written. +- `duplicates` records canonical group/audience duplicates. `orphan_group_directories` lists directories not present in the subscription list; they are reported for review, never silently re-subscribed. `group_list_present` distinguishes a missing subscription list. +- Group comparisons include `source_settings` and `different_settings`. Template/draft comparisons include source/destination value hashes and `matches_source`. Existing destination rows are preserved even when they differ. +- Successful apply returns `verification.status = passed`, checked/inserted/preserved record counts, integrity and foreign-key results. The CLI also reports the verified `pre_import_backup` path, SHA-256 and integrity. +- The import is additive but not one all-or-nothing transaction. On failure keep every writer stopped, retain the report and state, inspect or restore the verified pre-import backup, then create a fresh preview before retrying. + +To include a genuinely active directory-only group, reconcile it against the operator's subscription evidence in a separate reviewed import copy. Preserve the original snapshot and regenerate the preview; appending every old directory would also reactivate stale groups. Unsupported/malformed files and local extensions require explicit review. The startup compatibility bridge reads only `data/DBgroups.txt` from `LEGACY_DATA_PATH` and adds missing subscribed group records. Existing groups therefore use `/settings` without re-registering using `/add`. It does not migrate schema, overwrite edited preferences, remove groups or restore permissions. Explicit maintenance import is still required to review templates, drafts, snapshots and old lock state. @@ -41,10 +51,8 @@ Migration 005 creates `known_broadcast_peers` independently of Shabbat subscript Run the numbered migration only during stopped-writer maintenance. It adds group-only lock_block_flags (default21, including send_reactions/edit_rank), two holy-message cleanup switches and tefillin_delete_previous, all cleanup switches defaultfalse. It preserves original lock snapshots while keeping an in-flight previous applied mask, and adds durable deletion work plus confirmed tefillin message pointers. Existing group zmanim rich designs are copied once into independent times_alert templates while their original rows/IDs remain. Sent reminders receive separate replayable bookkeeping; no previously sent job is returned to pending to trigger deletion. The earlier seven migration checksums remain immutable. SQLite backups include these tables; restore the full schema/data together. -## Dev.6 to dev.7 - -Stop every writer and run the documented verified backup/migration command before starting dev.7. It adds **013_permission_recovery.sql** and **014_diagnostic_panels.sql** while preserving the exact checksums of migrations 001-012, group settings, original permission snapshots, pending conflicts and Telegram session data. The migration does not itself change Telegram permissions or resolve a conflict. Recovery happens only through the reviewed runtime rules or an authorized group-admin confirmation. See [test deployment](SERVER_TEST_DEPLOYMENT.md) and [permission recovery](PERMISSION_RECOVERY.md). +## Older database and permission state -## Dev.6/dev.7 to dev.8 +Migrations 013–015 add recovery evidence, diagnostics and snapshot provenance without changing the earlier migration bytes. Older unresolved snapshots remain unverified and require the [administrator recovery procedure](PERMISSION_RECOVERY.md); a matching checksum alone cannot authorize restoration. -Dev.8 adds migration 015 for snapshot provenance. The first 14 migration files remain unchanged; upgrading dev.6 applies 013-015, while dev.7 applies 015. Stop all writers, preserve the same database/session volumes and run the verified backup/migration command before startup. Migration does not send Telegram requests or alter saved rights. An unresolved older snapshot requires explicit administrator resolution and cannot be automatically restored, even if its checksum is correct. Completed cycles can capture a fresh verified baseline. See the [affected-group procedure](DEV8_PERMISSIONS.md) and [current deployment commands](SERVER_TEST_DEPLOYMENT.md). +Migration 016 adds dispatch timestamps/indexes and conservatively marks older delivery attempts that might have reached Telegram as uncertain. This can suppress an additional reminder rather than duplicate an unknown old delivery. The independent scheduler and retention behavior are described in [delivery safety](DELIVERY_SAFETY.md). Never delete unresolved recovery or delivery evidence to bypass an upgrade check. diff --git a/docs/OPERATIONS.md b/docs/OPERATIONS.md index c46b9d3..47ba7f7 100644 --- a/docs/OPERATIONS.md +++ b/docs/OPERATIONS.md @@ -1,4 +1,41 @@ -# Operator commands and Stars donations +# Operations + +[Bot commands](COMMANDS.md) · [Backup and restore](BACKUP_RESTORE.md) · [Production upgrade](PRODUCTION_UPGRADE.md) + +## Operations + +Docker commands run **on the host at the same project root/project identity**, with daemon access. PHP commands run **inside the image at /app**, or at the manual root as its service user. Operational output can contain group IDs/state; keep it private. + +| Task | Command | Effect / condition | +|---|---|---| +| Build | `docker compose build` | Build from source/lock. | +| Start | `docker compose up -d shabbat` | Start/recreate and connect to Telegram. | +| Stop | `docker compose stop shabbat` | Graceful stop, 60-second grace; retain volumes. | +| Restart | `docker compose restart shabbat` | Restart same service; does not rebuild image. | +| Status | `docker compose ps` | Container/service state. | +| Logs | `docker compose logs --tail=100 shabbat` | Read logs; add `--follow` to stream, Ctrl+C exits viewer. | +| Health | `docker compose exec shabbat php bin/health.php` | Schema/connection, both heartbeats and queue/lock metrics. | +| Deep health | `docker compose exec shabbat php bin/health.php --deep` | Also integrity/foreign-key checks; more expensive. | +| Release gate | `docker compose run --rm --no-deps shabbat php bin/self-check.php --release` | Offline platform/patch checks. | +| Write probe | `docker compose run --rm --no-deps shabbat php bin/runtime-permissions.php --require-non-root` | Offline temporary-file probe; may append to existing worker log. | + +Both heartbeats must be no older than 180 seconds. Offline/restored DBs can pass structural checks yet return `healthy=false` / exit 1 without schedulers. Never manufacture heartbeat files. + +Run direct maintenance below **at project root as service user**. In Docker, prefix PHP commands with `docker compose run --rm --no-deps shabbat` and use container paths. `--writers-stopped` is an attestation, not a stop command. + +| Task | Command | Effect / requirement | +|---|---|---| +| Migrate | `php bin/migrate.php --writers-stopped --db data/shabbat.sqlite --backup-dir backups` | All writers stopped, existing backup directory. Back up existing DB/apply migrations; omit backup only for new DB. | +| Backup | `php bin/backup.php --db data/shabbat.sqlite --directory backups --keep 7` | Consistent SQLite copy/manifest; retain seven tool-named backups. Online maintenance allowed. | +| Restore | `php bin/restore.php --backup backups/CHOSEN.sqlite --db data/shabbat.sqlite --writers-stopped` | Verified chosen backup, stopped writers; previous destination retained. | +| Inspect legacy | `php bin/import-legacy.php --db data/shabbat.sqlite --legacy /path/to/legacy-copy --dry-run` | Inspect/report, no imported-record writes or Telegram actions. | +| Import legacy | `php bin/import-legacy.php --db data/shabbat.sqlite --legacy /path/to/legacy-copy --apply --writers-stopped --backup-dir backups` | Existing migrated DB/backup directory, stopped writers; additive import. | +| Calendar diagnostic | `php bin/check-calendar.php --date=2026-10-15` | Public HTTPS only; no DB, .env or session. `--help` lists coordinates/zone/calendar/language options. | +| Verify patches | `php scripts/verify-patches.php` | Inspect approved installed bytes. | +| Apply patches | `composer patches` | Apply/verify; stopped installation only. | +| Build identity | `php bin/build-metadata.php --commit=YOUR_40_HEX_COMMIT` | Replace placeholder with verified provenance; writes metadata/rejects stale fingerprint. | + +## Operator services and Stars donations The configured operator authorization callback is mandatory for `ManualGroups`. It is a separate bot-operator permission, not a cached group administrator role. Bind it to the project's existing trusted operator IDs and authenticated Telegram sender. Do not expose the service through an ordinary unprotected callback. @@ -18,12 +55,12 @@ Old three-part `donate|user|amount` payloads had no durable nonce/approved inten Private database records include payer ID, amount/currency, approved query ID, charge UID and optional service message ID. Charge identifiers and invoice payloads are not returned in the success report or placed in audit/error logs; email and expanded Telegram payment-request information are ignored. Keep the application database and backups private. The `stats` API returns aggregate donation count and Stars only. Define record retention with the operator's accounting needs; this document does not assert legal compliance. -Implementation was checked against the locked MadelineProto TL schema v225: `inputMediaInvoice` requires DataJSON, `payments.exportInvoice` exports the URL, and `messages.setBotPrecheckoutResults` answers precheckout. Presets/native invoice shape come from the preserved WizardLoop implementation; the project retains its historic MIT copyright/permission notice. New service code is AGPL-3.0-only. +Implementation was checked against the locked MadelineProto TL schema: `inputMediaInvoice` requires DataJSON, `payments.exportInvoice` exports the URL, and `messages.setBotPrecheckoutResults` answers precheckout. Presets/native invoice shape come from the preserved WizardLoop implementation; the project retains its historic MIT copyright/permission notice. New service code is AGPL-3.0-only. -Tests use isolated SQLite databases and fake RPC/permission gateways. They cover authorization, snapshot restoration, override expiry, partial failures/cancellation, invoice binding/expiry, replay/conflicting charges, ledger rollback and restart. No Stars charge, real invoice or production Telegram group was used. +Tests use isolated SQLite databases and fake RPC/permission gateways. They cover authorization, snapshot restoration, override expiry, partial failures/cancellation, invoice binding/expiry, replay/conflicting charges, ledger rollback and restart. No Stars charge, real invoice or production Telegram group was used. -Invoice titles, descriptions, prompts and recoverable errors use the same six-locale resources as the rest of the private UI. Migration 004 expands the SQL language constraints without rewriting an existing approved intent or ledger record. Test invoice exports remain fake; no live Telegram invoice or Stars payment was made during development. +Invoice titles, descriptions, prompts and recoverable errors use the same six-locale resources as the rest of the private UI. Migration 004 expands the SQL language constraints without rewriting an existing approved intent or ledger record. Test invoice exports remain fake; no live Telegram invoice or Stars payment was made during development. Live BroadcastManager status uses the bundled reviewed presentation hook and the six-language `BroadcastStatusFormatter`. Each operator's manager receives its localized initial caption, progress counters/status, and native colored controls with unchanged `bm` operation IDs. The formatter does not send, filter or mutate delivery state. The application verifies operator authorization before control actions. A legacy text-only library summary receives an explicit localized recovery notice rather than being guessed or retranslated; its original file is retained, and structured application progress/audit results remain the current status view. See [patch provenance and installation](../patches/broadcastmanager/README.md). -Composer/Docker/startup patch verification now covers both the MadelineProto cancellation patch and this separate BroadcastManager presentation patch. With `--no-scripts`, run `php scripts/apply-patches.php` then `php scripts/verify-patches.php` before startup. Installation refuses an active writer or unknown/partially patched source. Reflection tests invoke the actual reviewed library formatting methods without constructing a Telegram API; live status editing/colors still require staging verification. +Composer/Docker/startup patch verification now covers the active Fresh Peer and BroadcastManager patch sets. With `--no-scripts`, run `php scripts/apply-patches.php` then `php scripts/verify-patches.php` before startup. Installation refuses an active writer or unknown/partially patched source. Reflection tests invoke the actual reviewed library formatting methods without constructing a Telegram API; live status editing/colors still require staging verification. diff --git a/docs/PATCHES.md b/docs/PATCHES.md index 40d4b61..dc71ec6 100644 --- a/docs/PATCHES.md +++ b/docs/PATCHES.md @@ -1,84 +1,60 @@ # Offline patch installation -[Review provenance and behavior](../patches/madelineproto/README.md). -Composer lifecycle scripts and Docker install offline, verify exact hashes, -and fail on unknown source. Startup verifies only. - -With scripts disabled: - - composer install --no-dev --no-scripts --prefer-dist - php scripts/apply-patches.php - php scripts/verify-patches.php - php bin/self-check.php - -Do not bypass manifest failures or edit a live container. Review upgrades on an -isolated installation and prefer a tested official correction when available. - -Reference runBot implementations were inspected in importchatsbot/src/bot.php -and SwiftTool/bot.php. Runner reproduces Revolt error-handler installation, -credentials/Settings setup and startAndLoopBot. The typed error callback is rebound on handler attachment, after the SDK installs its own startup callback. It uses narrow typed checks for -completed-operation and ReferenceDatabase errors. It does not swallow every error -whose text says "The operation was cancelled": the explicit cancellation/shutdown -requirements forbid that behavior. Unexpected errors exit 1; shutdown flags stop -new application work. SingleInstance protects the shared runtime directory. - -Offline loop tests do not prove behavior against Telegram, real network failure, -or signal delivery in every container runtime. Verify those using an isolated -staging bot and test groups before production deployment. -Mutation also acquires the same APP_DB_PATH + .writer.lock used by Runner and -SQLite maintenance. An active writer makes application fail before a file is -changed; read-only verification and an already-patched no-op remain available. -Stop the isolated bot before applying a required patch. The installer only -creates a lock file on its configured working data path, never starts Telegram. - -The same installer requires the reviewed -[BroadcastManager status-localization patch](../patches/broadcastmanager/README.md), -[GeoPoint double-coordinate correction](../patches/madelineproto-geopoint/README.md) -[formatted-date entity correction](../patches/madelineproto-formatted-date/README.md) -and [fresh full-peer response correction](../patches/madelineproto-fresh-peer/README.md). -Each manifest identifies its locked package/commit, target, baseline, diff and -final hashes. All five patch sets are applied before runtime and verified by -Runner/self-check; missing required evidence or unknown source fails the build. -Baseline hashes remain checked when installed vendor source is already patched. - -The formatted-date set changes the entity factory and adds one independently -written class; both must match the approved set. Its pinned TL schema and original -AGPL license are also checked. A partial factory/class installation fails closed. -The located reference script is not redistributed: its exports lack usable Git -history and a consistent standalone license grant. This is a new reviewed -implementation, documented in [the formatted-date review](MADELINE_FORMATTED_DATE.md). - -The [GNU AGPLv3](https://www.gnu.org/licenses/agpl-3.0-body.html) permits conveying -covered modifications, including diffs, with retained notices, identified changes, -AGPL licensing and applicable source offers. Exact grants and reference limitations -are recorded in [third-party notices](../THIRD_PARTY_NOTICES.md). Preparing these -artifacts does not publish them or authorize deployment. - -RuntimePaths resolves DATA_DIR, APP_DB_PATH, SESSION_PATH and HEARTBEAT_PATH once -before startup and exports them for the preserved legacy handlers. Maintenance -commands use that same DB default and retain explicit --db overrides. - -## Native SDK boundaries - -The runtime rebinds the typed Revolt error handler in onStart after MadelineProto -installs its own callback. The gateway uses the declared messages.getForumTopicsByID -method with peer/topics. Offline tests check reachable gateway, invoice, and menu -methods against the locked SDK declarations, effective blacklist, and TL schema. - -Fresh permissions use the supported getFullInfo helper with fullInfoCacheTime=0 -and the reviewed per-call raw response field. The reader requires complete matching -Chat/ChatFull evidence; it never substitutes a second cached getInfo result. Direct -channels.getFullChannel/messages.getFullChat namespace calls are blacklisted and -are not used. A nonzero cache policy fails closed. Public full-info helper calls -have the official RPC setting's five-second minimum automatic flood wait; longer -waits propagate as typed scheduler retries. Direct namespace calls use the -per-call floodWaitLimit=0. Permission leases and desired state are fenced again -after awaited reads. - -Decimal random_id, query_id and keyboard style.icon values are validated within -signed int64 and converted to native integers at the outbound boundary. The -locked TL serializer interprets eight-byte strings as packed binary; real -serializer regressions cover eight-digit decimals and signed limits. Stored -identifiers remain decimal strings, preserving database identity. - -Fresh permissions use the supported getFullInfo path with full-info caching disabled and verified per-call raw response evidence. See the fresh-peer patch README and dev.8 investigation for the reproduced stale-cache limitation of the earlier two-helper path. Direct full-info namespace calls are blacklisted in the locked SDK. Public full-info helpers use the official five-second minimum flood-wait setting; longer RateLimitError-family waits become typed retries. Ordinary namespace RPCs retain the verified per-call zero-wait option. Native decimal int64 query/random/icon IDs are validated and converted at the outbound boundary; persisted IDs remain decimal strings. +Only two patch sets are active in 3.1.0: + +| Package | Local change | Reviewed source | +|---|---|---| +| MadelineProto 8.11.10 | Fresh full-peer response evidence for safe group permission snapshots | [Provenance and tests](../patches/madelineproto-fresh-peer/README.md) | +| BroadcastManager 3.2.2 | Application delivery hooks and localized status | [Provenance and tests](../patches/broadcastmanager/README.md) | + +Composer lifecycle scripts and Docker builds apply local immutable diffs and +verify exact source/target hashes. Startup verifies only. Unknown versions, +partial patches or changed artifacts fail closed; an already patched approved +file succeeds without mutation. Baselines remain verified after application. + +With Composer scripts disabled, run from the stopped installation root: + +```bash +composer install --no-dev --no-scripts --prefer-dist +php scripts/apply-patches.php +php scripts/verify-patches.php +php bin/self-check.php +``` + +Patch mutation acquires the same `APP_DB_PATH + .writer.lock` as Runner and +SQLite maintenance. An active writer prevents changes. Read-only verification +and an already patched no-op remain available. Do not modify an active container, +ignore a verification error, download a floating patch, or use `composer update` +as a routine deployment command. + +## Official compatibility in 8.11.10 + +The old local UpdateLoop, GeoPoint and FormattedDate patch trees were removed. +Official date entities and fractional coordinates now have direct compatibility +tests. Date payload validation stays at the application template boundary. +The native update loop recognizes timeout cancellation, but that alone does not +prove safe shutdown. `UpdateLoopCompatibilityTest` executes the official loop +and its real parent with controlled RPC boundaries, checking recovery, +intentional cancellation and a stop concurrent with timeout. These tests exercise one failure followed by recovery; they do not establish +a global retry/log-rate bound. Parent stop prevents rescheduling but does not cancel +an in-flight loop body. A separate SDK disconnect/finalize fixture keeps writer +ownership through a modeled session flush and rejects stale socket reuse. +`SdkWorkerIsolationTest` exercises the official IPC worker descriptors with a local +PHP child: Linux checks that it cannot retain the parent lock or listening socket. + +`Runner` keeps typed cancellation handling, quiesces application work, and retains +the process writer lock during SDK session finalization. It does not swallow every +exception containing the word cancellation. SDK-level retry and shutdown behavior +is checked separately from application drain and single-writer tests. + +Offline tests do not authenticate to Telegram or establish real network, IPC, +signal or production-load acceptance. Use a separate staging bot after all gates +pass. Retired patch history remains available in the 3.0.0 Git tag/source release. + +## Licensing and corresponding source + +Each active manifest binds package version, commit, baseline, reviewed output, +diff and hashes. The source offer includes these artifacts and modified runtime +sources with original rights notices. Local modifications are identified without +changing upstream grants; see [third-party notices](../THIRD_PARTY_NOTICES.md) +and [licensing](LICENSING.md). Installed vendor is excluded from Git. diff --git a/docs/PERMISSION_RECOVERY.md b/docs/PERMISSION_RECOVERY.md index a8933d6..c107360 100644 --- a/docs/PERMISSION_RECOVERY.md +++ b/docs/PERMISSION_RECOVERY.md @@ -2,9 +2,9 @@ The group settings panel provides **Resolve permission problem**. Open it from the group's main settings or its Shabbat/permissions category. The private panel names the group, shows the saved state and a bounded comparison of current versus original restrictions, and offers a reviewed confirmation for either **Use current permissions as normal** or **Restore permissions saved before the problem**. Navigation edits the same message. -## Fresh reads and older snapshots (dev.8) +## Fresh reads and older snapshots -All permission reads use the exact matching full-peer response from the supported helper, with a separate immutable patch to pinned MadelineProto 8.7.0. Cached or minimal records cannot authorize capture or readback. Migration 015 preserves older snapshots but labels them unverified. Any unresolved older cycle requires administrator resolution: automatic opening and the restore button cannot use that snapshot. The six-language panel explains how to configure the intended normal permissions in Telegram, refresh and explicitly adopt them outside protected periods. Do not delete the saved row or automatically accept an already opened group. Completed cycles may capture a fresh baseline at the next lock. See [the investigation and recovery steps](DEV8_PERMISSIONS.md). +All permission reads use the exact matching full-peer response from the supported helper, with the version-matched, hash-verified [Fresh Peer patch](PATCHES.md). Cached or minimal records cannot authorize capture or readback. Migration 015 preserves older snapshots but labels them unverified. Any unresolved older cycle requires administrator resolution: automatic opening and the restore button cannot use that snapshot. The six-language panel explains how to configure the intended normal permissions in Telegram, refresh and explicitly adopt them outside protected periods. Do not delete the saved row or automatically accept an already opened group. Completed cycles may capture a fresh baseline at the next lock. ## Automatic recovery @@ -26,14 +26,24 @@ A verified calendar deadline also fences the final remote read synchronously, wi ## Upgrade and acceptance -Dev.7 adds migration 013 for recovery state and evidence. Existing migrations 001-012 and the MadelineProto 8.7.0 dependency/patch lock remain unchanged. Stop all writers and take the verified migration backup before upgrading. See [test deployment](SERVER_TEST_DEPLOYMENT.md). +Migrations 013 and 015 preserve recovery evidence and snapshot provenance. Stop all writers and take a verified backup before migration. See [production upgrade](PRODUCTION_UPGRADE.md). Offline tests cover safe automatic recovery, preserved original snapshots, repeated cycles, administrator changes, stale/forged confirmations, role loss, cancellation, timing boundaries and migration preservation. Actual Telegram readback and both recovery choices must also be checked in the isolated test bot. See the versioned validation report for the exact checks that ran. Native restrictions follow Telegram's [chatBannedRights constructor](https://core.telegram.org/constructor/chatBannedRights) and [default group-rights method](https://core.telegram.org/method/messages.editChatDefaultBannedRights). Individual true flags represent restrictions, so the UI translates them to permitted/blocked rather than showing raw booleans. -Dev.8 adds migration 015 and a fifth fresh-peer patchset. The first 14 migrations, Composer lock and earlier four patchsets remain unchanged. Follow the current deployment instructions rather than historical version-specific notes. ## Final permission-write checks Ordinary manual and scheduled changes re-read current permissions after any asynchronous desired-state/calendar evaluation. An administrator change during that wait prevents the write and retains evidence. A synchronous final check verifies the same settings, manual-override expiry, next operational time boundary and shutdown state before dispatch. This reduces stale writes; Telegram still has no compare-and-swap API, so a change after the final read or during the request is not atomic. Readback is required and post-write mismatches are explicitly reported as unverified changes, even when the confirmed-change counter is zero. + +## Review an older unverified snapshot + +A matching checksum proves saved bytes are consistent, not that the original Telegram read was accurate. An investigated older conflict contained an unexpectedly permissive snapshot, but its exact server-side cause was not established. Never treat that record as authorization to reopen a group. + +1. Outside Shabbat/Yom Tov, operational closure and active manual locks, set the intended normal group permissions directly in Telegram. +2. Open the named group's **Resolve permission problem** panel, then **Refresh**. +3. Check the current permissions, choose **Use current permissions as normal**, and explicitly confirm. +4. In a disposable group, test a new close/open cycle with media, invitations and pinning restricted beforehand. Verify those exact restrictions after reopening and restart. + +Do not delete recovery rows or adopt a currently locked mask as normal. Missing calendar data, an uncertain read or an active closure prevents adoption. A failed readback after a write can mean Telegram already changed permissions; it does not prove that nothing happened. diff --git a/docs/PRODUCTION_UPGRADE.md b/docs/PRODUCTION_UPGRADE.md index 540de0b..f481d73 100644 --- a/docs/PRODUCTION_UPGRADE.md +++ b/docs/PRODUCTION_UPGRADE.md @@ -1,163 +1,126 @@ -# Production upgrade from the legacy file-based bot +# Production upgrade to 3.1.0 -[English overview](../README.md) | [עברית](../readme-he.md) | [Import mapping](MIGRATION.md) | [Backup and restore](BACKUP_RESTORE.md) | [Permission recovery](PERMISSION_RECOVERY.md) +[עברית](PRODUCTION_UPGRADE_HE.md) · [README](../README.md) · [Import mapping](MIGRATION.md) · [Permission recovery](PERMISSION_RECOVERY.md) -This procedure is for the existing Docker Compose installation at **`/root/shabat`** (one `b`), upgrading the file-based implementation at historical baseline `2976ab8339f489d933c7246e0cb27f3b0e4aa697` to **`3.0.0`**. The final source directory remains `/root/shabat`. `/root/shabbat-test` is a separate test installation and is not a migration source or destination. +This is a manual runbook, not an executed deployment. Use the released, verified 3.1.0 assets after required checks pass. The requested path is **/root/shabbat**; older instructions used **/root/shabat**. Verify the real container and directory before changing either. Never use the test bot's data. -**לשרת הקיים `/root/shabat`: בונים את הגרסה החדשה בנפרד, עוצרים את הבוט הישן, מגבים את כל התיקייה, מייבאים ובודקים, ורק אז מחליפים את תיקיית המקור ומפעילים מופע יחיד. הרשאות ישנות עשויות לדרוש אישור ידני של מנהל קבוצה; ייבוא תקין אינו מבטיח שחזור אוטומטי שלהן.** +Commands cover the legacy whole-project bind mount or standard 3.0 Docker data/session volumes. The 3.0 path probe only reads configuration; it opens no API/session. A custom session name or lock-only remnants stop this procedure. Custom mounts, external storage, symlinks to private data or another writer need a tailored backup first. Run server blocks in one **root Bash session** with Docker/Compose, unzip, GNU coreutils and sufficient storage. Keep backups outside source/build directories. Only the final start connects the new bot to Telegram. -This targets the stable 3.0.0 release. On dev.9, the owner confirmed live locking, unlocking, original-permission restoration and restart. That confirmation does not cover automatic holy-day transitions, load capacity, a long-running soak or this production import. Complete the remaining checks relevant to your deployment with a separate test bot, and schedule the monitored production window deliberately. These are operator instructions; writing this document does not execute a deployment. The commands below are for **Bash on the Linux server as root**, with Docker daemon access, Compose v2, `curl`, `unzip`, `tar`, `sha256sum` and sufficient free storage. Every `run ... php ...` maintenance command explicitly replaces the image's normal bot command; it does not log in to Telegram. Only the final `up` starts the new bot. +## 1. Upload from your computer -## 1. Understand what moves and what requires review +Download the deployment ZIP and SHA256SUMS from the matching GitHub release. In the computer's terminal, replace SERVER with your SSH hostname/IP. SFTP can upload the same files to the same protected destination. -The historical Compose service is named `shabbat` and bind-mounts the entire project directory as `/app`. The old bot reads `.env`, stores group settings below `data/`, starts MadelineProto at `bot.shabbat`, and points BroadcastManager at `data/`. Root files such as `ids.txt`, `state_open.txt` and `*_lock*.txt` also matter. A copy of `data/DBgroups.txt` alone is not a backup. +~~~sh +ssh root@SERVER "install -d -m 700 /root/shabbat-upload-3.1.0" +scp shabbat-3.1.0.zip SHA256SUMS root@SERVER:/root/shabbat-upload-3.1.0/ +~~~ -The new Compose service is also `shabbat`, but source/vendor are built into the image. Its separate named volumes hold `/app/data` and `/app/runtime`; the session prefix is `/app/runtime/bot.shabbat`. This procedure uses a distinct production Compose project, so its volumes cannot reuse test or old project state accidentally. All future commands must keep that project name. +## 2. Verify production and set protected paths -| Legacy material | Treatment | -| --- | --- | -| Entire old folder, including `.env`, vendor, session files/directories, data and root state | Preserved in a private stopped snapshot and a retained old source directory. | -| `data/DBgroups.txt` | Unique valid entries become registered groups. Existing new-database settings are preserved on re-import. | -| Alert flags, opening/closing text, entities, media file IDs and buttons | Imported according to the exact whitelist in [migration](MIGRATION.md); malformed/unsupported records produce warnings. | -| Root `ids.txt`, operator drafts and supported global draft files | Imported without granting administrator authority. Configure trusted owners through `ADMIN`. | -| MadelineProto session prefix `bot.shabbat*` | Copied intact to the new session volume while all old writers are stopped. It is not interpreted by the importer. | -| Entire legacy `data/` | Also copied to the new data volume to retain BroadcastManager history and separate library state. | -| `chatb1.json` and old global lock/date files | Retained as recovery evidence, never accepted as proof of current Telegram permissions or today's calendar state. | +On the server, list containers and inspect the selected production container. Replace the ID placeholder and change ORIGINAL_DIR to /root/shabat **only if that is the verified real path**. Assertions reject a different path/layout. Review the displayed mounts; no environment secrets are printed. -Imported groups keep the legacy Jerusalem/Asia-Jerusalem policy: city-default candle lighting, closure ten minutes before candles, havdalah at 8.5 degrees without an additional opening delay, Hebrew, and existing alert/message flags. They are **active** (`lock` or `lock_messages`); importing is not an automatic switch to off. Daily zmanim, daf, tefillin and Omer remain off for imported groups. Review these defaults if the server contains local modifications to the old implementation. - -**Permission acceptance is a separate gate.** Any imported `chatb1.json` is `legacy_unverified`. Even an otherwise open group without a snapshot receives `recovery_required` when a global old state file exists, including a leftover `open_lock.txt`. Such groups require an authorized group administrator to set/check the intended normal permissions in Telegram, refresh **Resolve permission problem**, and explicitly adopt current permissions outside Shabbat/Yom Tov and all active closure windows. The bot will not infer that a checksum makes an old snapshot safe. Do not delete recovery records or global state files to bypass this review. - -The old Composer specification used `^8.6` for MadelineProto and `*` for BroadcastManager, without a committed lock. Therefore the historical Git commit does not identify the server's actual installed dependency versions. Preserve its vendor and image; session compatibility must be checked during controlled startup. Keep original session bytes for rollback. Do not delete a session or create a second production-connected session as a troubleshooting shortcut. - -Review any pending broadcasts before the window. Copied `scheduled-broadcasts.json` and `self-destruct-jobs.json`, when present, are library state, not SQLite import records. Old schedules lack the new creator audit binding: future unattributed schedules block processing, and due unattributed schedules are cancelled rather than replayed as authorized new work. Due self-destruction jobs can act after startup. Preserve this state and review it privately; do not promise that interrupted broadcasts resume or that first startup has no external effects. - -## 2. Set paths and identify the actual production container - -Run the blocks in the same root Bash session. The timestamp creates new backup/staging destinations. Do not reuse a partially completed attempt without inspecting its state. - -```sh +~~~sh set -euo pipefail umask 077 -ORIGINAL_DIR=/root/shabat -TEST_DIR=/root/shabbat-test -VERSION=3.0.0 -NEW_PROJECT=shabbat-production -ARCHIVE="shabbat-${VERSION}.zip" -test "$VERSION" = 3.0.0 -test "$NEW_PROJECT" = shabbat-production -STAMP="$(date -u +%Y%m%dT%H%M%SZ)" -UPLOAD_DIR=/root/shabbat-release-upload -RELEASE_DIR="/root/shabbat-releases/$VERSION-$STAMP" -BACKUP_DIR="/root/shabbat-backups/$STAMP" -RETIRED_DIR="/root/shabat-retired-$STAMP" -test "$(readlink -f -- "$ORIGINAL_DIR")" = /root/shabat -test "$ORIGINAL_DIR" != "$TEST_DIR" -test -f "$ORIGINAL_DIR/docker-compose.yml" -test -f "$ORIGINAL_DIR/bot.php" -test -f "$ORIGINAL_DIR/.env" -test -f "$ORIGINAL_DIR/data/DBgroups.txt" -test ! -e "$RELEASE_DIR" -test ! -e "$BACKUP_DIR" -test ! -e "$RETIRED_DIR" -df -h /root -du -sh "$ORIGINAL_DIR" -docker compose version docker ps -a --filter label=com.docker.compose.service=shabbat \ --format '{{.ID}} {{.Names}} {{.Status}}' -``` - -Choose the existing production container from this list; never choose the test container. The next placeholder must be replaced with its actual ID. The inspection prints only mount paths and Compose labels, not resolved environment secrets. - -```sh -OLD_CONTAINER_ID='REPLACE_WITH_VERIFIED_PRODUCTION_CONTAINER_ID' +ORIGINAL_DIR=/root/shabbat +OLD_CONTAINER_ID=REPLACE_WITH_VERIFIED_PRODUCTION_CONTAINER_ID docker inspect --format '{{range .Mounts}}{{println .Type .Source "->" .Destination}}{{end}}' "$OLD_CONTAINER_ID" -docker inspect --format '{{index .Config.Labels "com.docker.compose.project"}} / {{index .Config.Labels "com.docker.compose.service"}}' "$OLD_CONTAINER_ID" +docker inspect --format '{{index .Config.Labels "com.docker.compose.project.working_dir"}}' "$OLD_CONTAINER_ID" +case "$ORIGINAL_DIR" in /root/shabbat|/root/shabat) ;; *) exit 1 ;; esac +test "$(readlink -f -- "$ORIGINAL_DIR")" = "$ORIGINAL_DIR" +test "$(docker inspect --format '{{index .Config.Labels "com.docker.compose.project.working_dir"}}' "$OLD_CONTAINER_ID")" = "$ORIGINAL_DIR" test "$(docker inspect --format '{{index .Config.Labels "com.docker.compose.service"}}' "$OLD_CONTAINER_ID")" = shabbat -test "$(docker inspect --format '{{range .Mounts}}{{if eq .Destination "/app"}}{{.Type}}:{{.Source}}{{end}}{{end}}' "$OLD_CONTAINER_ID")" = "bind:$ORIGINAL_DIR" +test -f "$ORIGINAL_DIR/.env" +test -f "$ORIGINAL_DIR/docker-compose.yml" OLD_PROJECT="$(docker inspect --format '{{index .Config.Labels "com.docker.compose.project"}}' "$OLD_CONTAINER_ID")" OLD_IMAGE_ID="$(docker inspect --format '{{.Image}}' "$OLD_CONTAINER_ID")" OLD_RESTART_POLICY="$(docker inspect --format '{{.HostConfig.RestartPolicy.Name}}' "$OLD_CONTAINER_ID")" +case "$OLD_RESTART_POLICY" in always|unless-stopped|no) ;; *) echo 'Review nonstandard restart policy first.' >&2; exit 1 ;; esac +APP_MOUNT="$(docker inspect --format '{{range .Mounts}}{{if eq .Destination "/app"}}{{.Type}}:{{.Source}}{{end}}{{end}}' "$OLD_CONTAINER_ID")" +MOUNT_DESTINATIONS="$(docker inspect --format '{{range .Mounts}}{{println .Destination}}{{end}}' "$OLD_CONTAINER_ID" | sed '/^$/d' | sort)" +if [ "$APP_MOUNT" = "bind:$ORIGINAL_DIR" ] && [ "$MOUNT_DESTINATIONS" = /app ]; then + LAYOUT=legacy + test -s "$ORIGINAL_DIR/data/DBgroups.txt" + test ! -e "$ORIGINAL_DIR/data/shabbat.sqlite" +elif [ -z "$APP_MOUNT" ] && [ "$MOUNT_DESTINATIONS" = "$(printf '/app/data\n/app/runtime')" ]; then + LAYOUT=sqlite + test "$(docker inspect --format '{{range .Mounts}}{{if eq .Destination "/app/data"}}{{.Type}}{{end}}{{end}}' "$OLD_CONTAINER_ID")" = volume + test "$(docker inspect --format '{{range .Mounts}}{{if eq .Destination "/app/runtime"}}{{.Type}}{{end}}{{end}}' "$OLD_CONTAINER_ID")" = volume + test "$(cat "$ORIGINAL_DIR/VERSION")" = 3.0.0 + docker exec "$OLD_CONTAINER_ID" php -r ' + require "/app/vendor/autoload.php"; + $paths=Shabbat\Runtime\RuntimePaths::resolve("/app"); + if($paths->dataDirectory!=="/app/data" + || $paths->databasePath!=="/app/data/shabbat.sqlite" + || $paths->sessionPath!=="/app/runtime/bot.shabbat") { + throw new RuntimeException("Custom active data/session paths need a reviewed adaptation."); + } + ' +else + echo 'STOP: custom storage layout needs a reviewed backup/cutover.' >&2 + exit 1 +fi +VERSION=3.1.0 +NEW_PROJECT=shabbat-production-310 +STAMP="$(date -u +%Y%m%dT%H%M%SZ)" +UPLOAD_DIR=/root/shabbat-upload-3.1.0 +RELEASE_DIR="/root/shabbat-stage-$VERSION-$STAMP" +BACKUP_DIR="/root/shabbat-backups/$VERSION-$STAMP" +RETIRED_DIR="$ORIGINAL_DIR.before-$VERSION-$STAMP" test -n "$OLD_PROJECT" test "$OLD_PROJECT" != "$NEW_PROJECT" -test "$OLD_RESTART_POLICY" = always -install -d -m 700 "$UPLOAD_DIR" "$BACKUP_DIR" -``` +test ! -e "$RELEASE_DIR" +test ! -e "$BACKUP_DIR" +test ! -e "$RETIRED_DIR" +df -h /root +docker system df +install -d -m 700 "$BACKUP_DIR" "$RELEASE_DIR" +printf '%s\n' "$ORIGINAL_DIR" "$OLD_CONTAINER_ID" "$OLD_PROJECT" "$OLD_IMAGE_ID" "$OLD_RESTART_POLICY" "$LAYOUT" > "$BACKUP_DIR/old-installation.txt" +~~~ -Verify that the production container's `/app` mount is a **bind mount from `/root/shabat`**. The baseline uses restart policy `always`; if the final assertion fails, record/review the actual policy instead of blindly changing it. Any extra mounts, external session/database services, symlinks to private storage, a local SQLite database, custom Compose overrides, or additional production writers require a tailored backup before proceeding. This guide covers the inspected file-based layout. Inventory other services/supervisors that could restart the old bot and suspend them for the window. Do not alter the test installation. +## 3. Verify, configure and build in staging -Record the old runtime versions while it is still running; this PHP command only reads Composer metadata: +The checksum must pass. Keep archive build-info.json. Edit the new .env privately: copy the same production API_ID/API_HASH/BOT_TOKEN and trusted ADMIN values; preserve relevant custom application settings and configure GeoNames deliberately; container paths are set below. Never print credentials or copy installed vendor. Keep BUILD_COMMIT absent from .env. -```sh -docker exec "$OLD_CONTAINER_ID" php -r ' -require "/app/vendor/autoload.php"; -echo "PHP ", PHP_VERSION, PHP_EOL; -foreach (["danog/madelineproto", "wizardloop/broadcastmanager"] as $name) { - echo $name, " ", Composer\InstalledVersions::getPrettyVersion($name), " ", - Composer\InstalledVersions::getReference($name), PHP_EOL; -}' > "$BACKUP_DIR/old-runtime-versions.txt" -printf '%s\n' "$OLD_CONTAINER_ID" > "$BACKUP_DIR/old-container-id.txt" -printf '%s\n' "$OLD_PROJECT" > "$BACKUP_DIR/old-compose-project.txt" -printf '%s\n' "$OLD_IMAGE_ID" > "$BACKUP_DIR/old-image-id.txt" -printf '%s\n' "$OLD_RESTART_POLICY" > "$BACKUP_DIR/old-restart-policy.txt" -``` - -Ensure storage can hold the complete old folder twice, its saved image, the new image and new data/session volumes. Keep these backup files private and outside every Docker build context. - -## 3. Download, verify and build the reviewed release beside production - -The deployment asset is `shabbat-3.0.0.zip`, with files directly at its root and no installed vendor. The separate corresponding-source ZIP is for source inspection; it is not the deployment archive. Use the assets attached to the stable `v3.0.0` release. The checksum block requires exactly one valid SHA-256 record for the expected deployment filename; missing or duplicate records stop the procedure. - -```sh -RELEASE_URL="https://github.com/WizardLoop/shabbat/releases/download/v${VERSION}" -curl --fail --location --proto '=https' --tlsv1.2 \ - "$RELEASE_URL/$ARCHIVE" -o "$UPLOAD_DIR/$ARCHIVE" -curl --fail --location --proto '=https' --tlsv1.2 \ - "$RELEASE_URL/SHA256SUMS" -o "$UPLOAD_DIR/SHA256SUMS" +~~~sh ( cd "$UPLOAD_DIR" - awk -v asset="$ARCHIVE" ' - $2 == asset { - if (NF != 2 || length($1) != 64 || $1 ~ /[^0-9a-f]/) exit 1 - print $1 " " asset - count++ - } - END { if (count != 1) exit 1 } - ' SHA256SUMS > deployment.sha256 + awk '$2 == "shabbat-3.1.0.zip" { + if (NF != 2 || length($1) != 64 || $1 ~ /[^0-9a-f]/) exit 1 + print; n++ + } END { if (n != 1) exit 1 }' SHA256SUMS > deployment.sha256 sha256sum --check deployment.sha256 ) -install -d -m 700 "$RELEASE_DIR" -unzip -q "$UPLOAD_DIR/$ARCHIVE" -d "$RELEASE_DIR" +unzip -q "$UPLOAD_DIR/shabbat-3.1.0.zip" -d "$RELEASE_DIR" test "$(cat "$RELEASE_DIR/VERSION")" = "$VERSION" -test -f "$RELEASE_DIR/composer.lock" test -f "$RELEASE_DIR/build-info.json" cp "$RELEASE_DIR/.env.example" "$RELEASE_DIR/.env" chmod 600 "$RELEASE_DIR/.env" -``` +~~~ -If uploading manually, upload the same two release assets to `UPLOAD_DIR` and begin with the checksum block. Do not unpack over the running old folder or copy the old installed vendor into the new source. Retain the supplied `build-info.json`; it records the release build's actual source identity. Do not substitute the historical baseline SHA or the test build's metadata. Leave `BUILD_COMMIT` absent from the new `.env`; the build block also unsets an inherited shell value so a stale test commit cannot override the archive identity. +Use these public container paths in the new .env alongside private credentials: -Edit the **new** `.env` privately. Copy the existing production `API_ID`, `API_HASH`, `BOT_TOKEN` and trusted `ADMIN` values from the old private file without printing them or putting them in shell history. Retain the same bot identity. Add the GeoNames account and current configuration deliberately; [configuration](CONFIGURATION.md) documents every field. Use plain `KEY=value` syntax supported by both Compose and the PHP reader. Set these public/container paths exactly: - -```dotenv +~~~dotenv APP_DB_PATH=/app/data/shabbat.sqlite DATA_DIR=/app/data SESSION_PATH=/app/runtime/bot.shabbat HEARTBEAT_PATH=/app/data/scheduler-heartbeat.json LEGACY_DATA_PATH=. -SOURCE_URL=https://github.com/WizardLoop/shabbat/releases/tag/v3.0.0 -``` +SOURCE_URL=https://github.com/WizardLoop/shabbat/releases/tag/v3.1.0 +~~~ -Compose explicitly fixes `DATA_DIR` and `SESSION_PATH`; the other paths above avoid a stale host/test path in `.env`. The release page must expose the matching corresponding-source asset before production service. Do not use test bot credentials. Never share `docker compose config` output without `--quiet`. +After editing, build and run offline checks. The new project must have no existing volumes; inspect an earlier attempt instead of deleting them. These commands do not start the bot. Ensure space for the entire old folder, data/session snapshots, old image and new image. -```sh +~~~sh new_compose() { - docker compose --project-name "$NEW_PROJECT" \ - --project-directory "$RELEASE_DIR" --file "$RELEASE_DIR/docker-compose.yml" "$@" + docker compose --project-name "$NEW_PROJECT" --project-directory "$RELEASE_DIR" \ + --file "$RELEASE_DIR/docker-compose.yml" "$@" } -if docker volume inspect "${NEW_PROJECT}_bot-data" >/dev/null 2>&1 \ - || docker volume inspect "${NEW_PROJECT}_madeline-session" >/dev/null 2>&1; then - printf '%s\n' 'STOP: this production project already has volumes; inspect the earlier attempt.' >&2 +if docker volume inspect "$NEW_PROJECT"_bot-data >/dev/null 2>&1 \ + || docker volume inspect "$NEW_PROJECT"_madeline-session >/dev/null 2>&1; then + echo 'STOP: destination volumes already exist.' >&2 exit 1 fi unset BUILD_COMMIT @@ -166,248 +129,215 @@ new_compose build shabbat new_compose run --rm --no-deps shabbat php scripts/verify-patches.php new_compose run --rm --no-deps shabbat php bin/self-check.php --release new_compose run --rm --no-deps shabbat php bin/runtime-permissions.php --require-non-root -new_compose run --rm --no-deps shabbat php bin/check-calendar.php -``` - -These checks use the new image/volumes and leave the old bot running. The calendar check contacts public providers, not Telegram. Stop on any failure; no production cutover has happened yet. Do not run `up`, `php bot.php`, or a session diagnostic against the production credentials during this stage. +~~~ -## 4. Stop the single production writer and preserve the entire old installation +## 4. Stop the old writer, then back up everything -Choose a weekday maintenance window outside religious/operational closure periods and pending broadcasts, with a group administrator available for recovery. Complete or review old in-flight work first. From this step until the explicit new startup, production is offline. +Choose a weekday window outside closure periods with a group administrator available. Review pending broadcasts/self-destruction jobs and stop external supervisors/other writers. From here production is offline. Preserve the old container, image and volumes. A forced/OOM termination requires investigation before continuing. -```sh -test "$(readlink -f -- "$ORIGINAL_DIR")" = /root/shabat -test ! -e "$ORIGINAL_DIR/data/shabbat.sqlite" +~~~sh docker update --restart=no "$OLD_CONTAINER_ID" docker stop --time 120 "$OLD_CONTAINER_ID" test "$(docker inspect --format '{{.State.Running}}' "$OLD_CONTAINER_ID")" = false test "$(docker inspect --format '{{.State.Restarting}}' "$OLD_CONTAINER_ID")" = false -docker inspect --format 'exit={{.State.ExitCode}} oom={{.State.OOMKilled}}' "$OLD_CONTAINER_ID" -install -d -m 700 "$BACKUP_DIR/legacy" -cp -a -- "$ORIGINAL_DIR/." "$BACKUP_DIR/legacy/" +test "$(docker inspect --format '{{.State.OOMKilled}}' "$OLD_CONTAINER_ID")" = false +test "$(docker inspect --format '{{.State.ExitCode}}' "$OLD_CONTAINER_ID")" != 137 +install -d -m 700 "$BACKUP_DIR/source" "$BACKUP_DIR/data" "$BACKUP_DIR/session" +cp -a -- "$ORIGINAL_DIR/." "$BACKUP_DIR/source/" ( cd "$ORIGINAL_DIR" find . -type f -print0 | sort -z | xargs -0 sha256sum -) > "$BACKUP_DIR/legacy-files.sha256" -( - cd "$BACKUP_DIR/legacy" - sha256sum --check "$BACKUP_DIR/legacy-files.sha256" -) > "$BACKUP_DIR/legacy-copy-verification.txt" +) > "$BACKUP_DIR/source.sha256" +(cd "$BACKUP_DIR/source"; sha256sum --check "$BACKUP_DIR/source.sha256") > "$BACKUP_DIR/source-check.txt" +docker cp "$OLD_CONTAINER_ID:/app/data/." "$BACKUP_DIR/data/" +if [ "$LAYOUT" = legacy ]; then + set -- "$BACKUP_DIR/source"/bot.shabbat* + test -e "$1" + cp -a -- "$@" "$BACKUP_DIR/session/" +else + docker cp "$OLD_CONTAINER_ID:/app/runtime/." "$BACKUP_DIR/session/" + test -s "$BACKUP_DIR/data/shabbat.sqlite" +fi +if [ -d "$BACKUP_DIR/session/bot.shabbat" ]; then + test -s "$BACKUP_DIR/session/bot.shabbat/safe.php" +elif [ -f "$BACKUP_DIR/session/bot.shabbat" ]; then + test -s "$BACKUP_DIR/session/bot.shabbat.safe.php" +else + echo 'STOP: canonical session payload is missing; do not create a new session.' >&2 + exit 1 +fi +for part in data session; do + (cd "$BACKUP_DIR/$part"; find . -type f -print0 | sort -z | xargs -0 sha256sum) > "$BACKUP_DIR/$part.sha256" +done docker image save --output "$BACKUP_DIR/old-image.tar" "$OLD_IMAGE_ID" sha256sum "$BACKUP_DIR/old-image.tar" > "$BACKUP_DIR/old-image.tar.sha256" -``` - -The restart-policy change prevents the old `restart: always` container from returning after a Docker daemon restart during cutover. It does not stop an external supervisor; verify every other writer is stopped too. An OOM/forced termination or a failed snapshot/hash check requires investigation before continuing. The SQLite-absence check deliberately stops this file-based procedure if an application database already exists. +~~~ -Keep the old stopped container and image. Do not run `down`, remove volumes, prune images, or replace the original folder yet. Back up the protected directory off-server using your private backup mechanism. Its credentials, session, IDs, drafts and permission snapshots must never become release assets or public issue attachments. +The snapshot includes .env, configuration, installed dependencies, data, database/WAL/SHM, session, root state and BroadcastManager files. Keep a protected off-server copy too. SQLite alone or DBgroups.txt alone is insufficient. No new bot/session has started. -## 5. Copy stopped state into separate new volumes, then preview the import +## 5. Copy into fresh volumes and prepare the database -The root user below is used only for controlled offline copying/import, because the protected legacy snapshot may not be readable by UID 10001. The old snapshot is mounted read-only. Nothing is copied into the new image/build context. The normal bot will run as UID/GID 10001 after ownership is set explicitly. +The snapshot is mounted read-only. Root is used only for offline copying/maintenance; the bot will run as UID/GID 10001. SHA256 verifies copied data/session before migration. -```sh +~~~sh new_compose run --rm --no-deps --user 0:0 \ - --volume "$BACKUP_DIR/legacy:/legacy:ro" shabbat sh -ec ' + --volume "$BACKUP_DIR:/review:ro" shabbat sh -ec ' test -z "$(find /app/data -mindepth 1 -maxdepth 1 -print -quit)" test -z "$(find /app/runtime -mindepth 1 -maxdepth 1 -print -quit)" - test ! -e /legacy/data/shabbat.sqlite - test ! -e /legacy/data/upgrade-backups - cp -a /legacy/data/. /app/data/ - set -- /legacy/bot.shabbat* - test -e "$1" - cp -a "$@" /app/runtime/ - mkdir -m 700 /app/data/upgrade-backups -' + cp -a /review/data/. /app/data/ + cp -a /review/session/. /app/runtime/ + (cd /app/data; sha256sum --check /review/data.sha256) + (cd /app/runtime; sha256sum --check /review/session.sha256) + test ! -e /app/data/upgrade-3.1.0 + mkdir -m 700 /app/data/upgrade-3.1.0 +' > "$BACKUP_DIR/copied-state-check.txt" +inventory() { + new_compose run --rm --no-deps --user 0:0 shabbat php -r ' + require "/app/vendor/autoload.php"; + $db=Shabbat\Storage\Database::open("/app/data/shabbat.sqlite"); + $result=[]; + $tables=$db->pdo()->prepare("SELECT name FROM sqlite_master WHERE type=? ORDER BY name"); + $tables->execute(["table"]); + foreach($tables->fetchAll(PDO::FETCH_COLUMN) as $name) { + if($name==="schema_migrations" || str_starts_with($name,"sqlite_")) continue; + if(!preg_match("/^[a-z_][a-z0-9_]*$/D",$name)) throw new RuntimeException("Unexpected table name"); + $columns=$db->pdo()->query("PRAGMA table_info(\"".$name."\")")->fetchAll(PDO::FETCH_ASSOC); + $order=implode(",",array_map(fn($c)=>"\"".str_replace("\"","\"\"",$c["name"])."\"",$columns)); + $rows=$db->pdo()->query("SELECT * FROM \"".$name."\" ORDER BY ".$order); + $hash=hash_init("sha256"); $count=0; + while($row=$rows->fetch(PDO::FETCH_ASSOC)) { + hash_update($hash,json_encode($row,JSON_THROW_ON_ERROR)."\n"); $count++; + } + $result[$name]=["rows"=>$count,"sha256"=>hash_final($hash)]; + } + echo json_encode($result,JSON_PRETTY_PRINT|JSON_THROW_ON_ERROR),PHP_EOL; + ' +} +if [ "$LAYOUT" = sqlite ]; then + inventory > "$BACKUP_DIR/database-before.json" +fi new_compose run --rm --no-deps --user 0:0 shabbat \ php bin/migrate.php --writers-stopped --db /app/data/shabbat.sqlite \ - > "$BACKUP_DIR/migrate.json" -new_compose run --rm --no-deps --user 0:0 \ - --volume "$BACKUP_DIR/legacy:/legacy:ro" shabbat \ - php bin/import-legacy.php --db /app/data/shabbat.sqlite --legacy /legacy --dry-run \ - > "$BACKUP_DIR/import-preview.json" -``` + --backup-dir /app/data/upgrade-3.1.0 > "$BACKUP_DIR/migrate.json" +if [ "$LAYOUT" = sqlite ]; then + inventory > "$BACKUP_DIR/database-after.json" + cmp "$BACKUP_DIR/database-before.json" "$BACKUP_DIR/database-after.json" +fi +~~~ -A missing session prefix, non-empty destination volume, unexpected database, unreadable file or importer error is a stop condition. Do not replace these assertions with deletion commands. Inspect the earlier attempt or custom server layout. No real session has been opened by these maintenance commands. +For 3.0 SQLite, row hashes must match and no legacy import is needed; continue at step 7. For legacy, continue below. No SQL schema change is introduced in 3.1.0; investigate any unexpected difference before startup. -Read the private JSON preview. Compare its unique group IDs and count with the old subscription list, and sample opening/closing messages, buttons, media IDs, alert flags and private drafts against the snapshot. Inspect **every warning and recovery entry**, not only the count. Invalid IDs, malformed JSON, unsupported buttons, oversized drafts and missing originals must be accounted for. A preview can report the expected fixed Jerusalem timing warning; that does not resolve unrelated warnings. The importer covers the whitelist documented in [migration](MIGRATION.md), not arbitrary local additions to the old bot. +## 6. Legacy only: review and bind the import -Dry-run is supported and does not apply application records. It is not a full transaction rehearsal: some normalized private-draft handling occurs only during apply. The apply operation makes a verified pre-import SQLite backup but the complete legacy import is not one all-or-nothing transaction. If apply fails, keep the new bot stopped, preserve its report/state, and review or restore the verified pre-import database before retrying. Re-import preserves existing records; it does not repair a malformed record by overwriting an existing preference. +Preview every registered group, setting, template, message, alert, draft and permission warning. Duplicates are reported/deduplicated. Directory-only groups are reported, not automatically subscribed: they may be stale. If necessary, reconcile them in a separate reviewed import copy, preserve the original snapshot and generate a fresh preview. The whitelist is documented in [migration](MIGRATION.md); arbitrary local extensions need review. -## 6. Apply and verify every registered group before starting the bot +~~~sh +test "$LAYOUT" = legacy +new_compose run --rm --no-deps --user 0:0 \ + --volume "$BACKUP_DIR:/review:ro" shabbat \ + php bin/import-legacy.php --db /app/data/shabbat.sqlite \ + --legacy /review/source --dry-run > "$BACKUP_DIR/import-preview.json" +~~~ + +Read the private JSON and accept every source/target difference before the next block. --expect-report rejects changed source or affected target records. Existing settings/templates are preserved. Imported groups are active, with documented Jerusalem/legacy timing and alert defaults; new daily/reminder modules stay off. Review location/mode before normal service. -After accepting the preview and planning any required permission review: +Apply is not one all-or-nothing transaction. On failure keep the bot stopped, preserve evidence and restore/review the verified pre-import backup before retrying. Do not weaken report matching. -```sh +~~~sh new_compose run --rm --no-deps --user 0:0 \ - --volume "$BACKUP_DIR/legacy:/legacy:ro" shabbat \ - php bin/import-legacy.php --db /app/data/shabbat.sqlite --legacy /legacy \ - --apply --writers-stopped --backup-dir /app/data/upgrade-backups \ - > "$BACKUP_DIR/import-apply.json" -``` - -The next snippet uses the project's real database API to check schema checksums, integrity, foreign keys, exact group-ID equality and one settings row per group. It prints a private inventory for human review and fails on invalid IDs, missing groups, unexpected groups or an empty source list. It does not call Telegram or invent a new application CLI option. - -```sh -new_compose run --rm --no-deps -T --user 0:0 \ - --volume "$BACKUP_DIR:/review:ro" shabbat php \ - > "$BACKUP_DIR/import-verification.json" <<'PHP' -assertCurrentSchema(); -$checks = $db->integrity(); -if ($checks['integrity_check'] !== ['ok'] || $checks['foreign_key_check'] !== []) { - throw new RuntimeException('Database integrity or foreign-key check failed.'); -} -$expected = []; -foreach (preg_split('/\R/', file_get_contents('/review/legacy/data/DBgroups.txt')) as $line) { - $id = trim($line); - if ($id === '') { continue; } - if (!preg_match('/^-?[0-9]{1,20}$/D', $id)) { - throw new RuntimeException('Invalid legacy group identifier requires review.'); - } - $expected[$id] = $id; -} -$expected = array_values($expected); -sort($expected, SORT_STRING); -$actual = $db->pdo()->query('SELECT group_id FROM groups')->fetchAll(PDO::FETCH_COLUMN); -sort($actual, SORT_STRING); -if ($expected === [] || $actual !== $expected) { - throw new RuntimeException('Imported group IDs do not exactly match the non-empty legacy list.'); -} -$settings = $db->pdo()->query('SELECT group_id,mode,language,location_name,timezone_id,candle_minutes,havdalah_method,havdalah_value,close_before_candles_minutes,open_after_havdalah_minutes,times_alert_enabled,close_message_enabled,open_message_enabled,zmanim_enabled,daf_enabled,tefillin_enabled,omer_enabled FROM group_settings ORDER BY group_id')->fetchAll(); -if (count($settings) !== count($expected)) { - throw new RuntimeException('Missing group settings.'); -} -$counts = []; -foreach (['groups','group_settings','users','message_templates','admin_state','known_broadcast_peers','legacy_imports'] as $table) { - $counts[$table] = (int) $db->pdo()->query('SELECT COUNT(*) FROM '.$table)->fetchColumn(); -} -$recovery = $db->pdo()->query('SELECT group_id,status,snapshot_provenance,last_error FROM group_lock_state ORDER BY group_id')->fetchAll(); -echo Database::encode(['checks'=>$checks,'counts'=>$counts,'group_settings'=>$settings,'permission_review'=>$recovery]), PHP_EOL; -PHP -``` + --volume "$BACKUP_DIR:/review:ro" shabbat \ + php bin/import-legacy.php --db /app/data/shabbat.sqlite --legacy /review/source \ + --apply --writers-stopped --backup-dir /app/data/upgrade-3.1.0 \ + --expect-report /review/import-preview.json > "$BACKUP_DIR/import-apply.json" +new_compose run --rm --no-deps --user 0:0 \ + --volume "$BACKUP_DIR:/review:ro" shabbat php -r ' + $r=json_decode(file_get_contents("/review/import-apply.json"),true,512,JSON_THROW_ON_ERROR); + if(($r["verification"]["status"]??null)!=="passed") throw new RuntimeException("Import verification failed"); + echo "Import comparison passed.",PHP_EOL; +' +~~~ -Review the settings against the source flags and inspect normalized templates through the backed-up database/private reports. Template totals include both group templates and personal drafts, so they need not equal the number of groups or the preview's group-template count. Legacy-selected groups and saved drafts confer no administrator authority. Keep the original files as evidence even after a successful import. +Old chatb1.json snapshots/global lock files are evidence, not verified current permissions. Administrator review may be required even if the group appears open. Never delete recovery state or automatically restore a permissive old snapshot. See [permission recovery](PERMISSION_RECOVERY.md). -Preserve a verified post-import SQLite backup without any retention deletion. This snippet calls the existing `BackupService::backup` directly to a new filename; it does not invoke the pruning helper. It also copies the migration/import backups out of the volume and sets ownership on the **new** data/session volumes only. +## 7. Verify, back up and rehearse restore -```sh +These maintenance commands check schema/integrity, make a new SQLite backup without pruning old backups, export it privately and restore to a disposable path. They never open the Telegram session. Offline health needs live heartbeats; use structural checks here and real health after startup. + +~~~sh new_compose run --rm --no-deps --user 0:0 shabbat php -r ' require "/app/vendor/autoload.php"; -$db = Shabbat\Storage\Database::open("/app/data/shabbat.sqlite"); -$result = (new Shabbat\Storage\BackupService())->backup($db, "/app/data/upgrade-backups/post-import.sqlite"); -echo Shabbat\Storage\Database::encode($result), PHP_EOL; -' > "$BACKUP_DIR/post-import-backup.json" +$db=Shabbat\Storage\Database::open("/app/data/shabbat.sqlite"); +$db->assertCurrentSchema(); +$checks=$db->integrity(); +if($checks["integrity_check"]!==["ok"] || $checks["foreign_key_check"]!==[]) throw new RuntimeException("Database check failed"); +$result=(new Shabbat\Storage\BackupService())->backup($db,"/app/data/upgrade-3.1.0/ready.sqlite"); +echo Shabbat\Storage\Database::encode($result),PHP_EOL; +' > "$BACKUP_DIR/ready-backup.json" install -d -m 700 "$BACKUP_DIR/sqlite" new_compose run --rm --no-deps --user 0:0 \ --volume "$BACKUP_DIR/sqlite:/export" shabbat sh -ec ' - cp -a /app/data/upgrade-backups/. /export/ + cp -a /app/data/upgrade-3.1.0/. /export/ chown -R 10001:10001 /app/data /app/runtime ' -new_compose run --rm --no-deps shabbat php bin/runtime-permissions.php --require-non-root +new_compose run --rm --no-deps shabbat php bin/restore.php \ + --backup /app/data/upgrade-3.1.0/ready.sqlite \ + --db /tmp/restore-rehearsal.sqlite --writers-stopped > "$BACKUP_DIR/restore-rehearsal.json" new_compose run --rm --no-deps shabbat php scripts/verify-patches.php new_compose run --rm --no-deps shabbat php bin/self-check.php --release -``` - -Rehearse the actual restore into a new disposable destination in a maintenance container. It validates the backup and creates an isolated SQLite copy; it does not replace `/app/data/shabbat.sqlite` or open the bot session. - -```sh -new_compose run --rm --no-deps shabbat php bin/restore.php \ - --backup /app/data/upgrade-backups/post-import.sqlite \ - --db /tmp/shabbat-restore-rehearsal.sqlite --writers-stopped \ - > "$BACKUP_DIR/restore-rehearsal.json" -``` - -Accept the restore output and the complete source/private-state backup before proceeding. `health.php`, even with `--deep`, also needs recent live scheduler heartbeats; an offline restore cannot satisfy that live-health gate. Use the structural checks above before startup, then the real live probe afterwards. +new_compose run --rm --no-deps shabbat php bin/runtime-permissions.php --require-non-root +~~~ -## 7. Put the reviewed source at `/root/shabat` +## 8. Swap the source and start exactly one bot -Proceed only after all offline checks and backups pass, every import warning is understood, and the administrator has a plan for each recovery entry. The old bot remains stopped. The two renames preserve the complete original directory and move the already-built source into the requested final path; they do not overlay old vendor or data with new files. +Proceed after accepting reports, backup/restore and recovery plans. The old directory is renamed intact, never overlaid. If the second rename fails, stop and restore the retained directory only after verifying ORIGINAL_DIR is absent. Keep the old container stopped while its original bind path holds new source. -```sh +~~~sh test "$(docker inspect --format '{{.State.Running}}' "$OLD_CONTAINER_ID")" = false test "$(docker inspect --format '{{.HostConfig.RestartPolicy.Name}}' "$OLD_CONTAINER_ID")" = no -test "$(readlink -f -- "$ORIGINAL_DIR")" = /root/shabat -case "$(readlink -f -- "$RELEASE_DIR")" in - /root/shabbat-releases/*) ;; - *) printf '%s\n' 'Unexpected staging path; stop.' >&2; exit 1 ;; -esac -case "$RETIRED_DIR" in - /root/shabat-retired-*) ;; - *) printf '%s\n' 'Unexpected retained-source path; stop.' >&2; exit 1 ;; -esac +case "$ORIGINAL_DIR" in /root/shabbat|/root/shabat) ;; *) exit 1 ;; esac +test "$(readlink -f -- "$ORIGINAL_DIR")" = "$ORIGINAL_DIR" +test "$RELEASE_DIR" = "/root/shabbat-stage-$VERSION-$STAMP" +test "$RETIRED_DIR" = "$ORIGINAL_DIR.before-$VERSION-$STAMP" test ! -e "$RETIRED_DIR" mv -T -- "$ORIGINAL_DIR" "$RETIRED_DIR" mv -T -- "$RELEASE_DIR" "$ORIGINAL_DIR" RELEASE_DIR="$ORIGINAL_DIR" cd "$ORIGINAL_DIR" new_compose config --quiet -printf '%s\n' "$RETIRED_DIR" > "$BACKUP_DIR/retired-source-path.txt" -printf '%s\n' "$NEW_PROJECT" > "$BACKUP_DIR/new-compose-project.txt" -``` - -If the second rename fails, stop and inspect both paths. The original is preserved at `RETIRED_DIR`; return it to `/root/shabat` only after verifying that the destination is absent. Do not merge directory contents or use an overwrite operation to conceal a partial cutover. - -**The stopped old container still has a bind mount whose source is `/root/shabat`. It must not be started while that path contains the new source.** Its old image/vendor assumptions do not match the new layout. The rollback section restores the old directory before restarting that container. - -## 8. Start exactly one production instance and accept it - -This step connects to Telegram, sends the existing administrator startup notification, and enables all imported active group behavior. It is not a harmless smoke test. Confirm the bot identity, the reviewed source URL, the maintenance window and the intended permissions once more. - -```sh -test "$(docker inspect --format '{{.State.Running}}' "$OLD_CONTAINER_ID")" = false +printf '%s\n' "$RETIRED_DIR" "$NEW_PROJECT" > "$BACKUP_DIR/new-installation.txt" new_compose up -d --no-build shabbat new_compose ps new_compose logs --tail=120 shabbat -``` +~~~ -Keep logs private. Wait for completed permission and notification scheduler passes, then run: +Starting can act on active groups, send a startup notification and process library work. Old unattributed broadcast schedules may be blocked/cancelled; copied self-destruction work can run. Review preserved BroadcastManager state; never assume an interrupted broadcast is safe to replay. -```sh +After startup, check health. In Telegram check /start, home/settings transitions, callbacks, /source identity, group counts, location/timezone, templates and alert preferences. In a disposable group with known pre-existing restrictions, test close/open and restart; do not use bulk /closegroups or /opengroups as a smoke test. + +~~~sh new_compose exec -T shabbat php bin/health.php --deep new_compose ps -``` - -Both heartbeat ages must be current; allow initial startup/provider work to complete and investigate repeated failure. A green health probe establishes the checks it reports, not that every group has resolved its imported permission debt. Do not start a second process to investigate session/authentication errors. Stop the new service and inspect the preserved versions/session state first; rollback remains available. - -As the configured bot owner, use `/version` or `/source` privately to verify release identity, `/admin` and its diagnostics to inspect registered groups, then `/settings` for a representative group and every group marked for recovery. Existing imported groups need no `/add`. Confirm group count, local time/location, original notification flags and custom message previews without sending a mass broadcast or using `/closegroups` / `/opengroups` as a test. - -For **each** unresolved legacy permission record, a current group administrator must follow [permission recovery](PERMISSION_RECOVERY.md): outside protected periods, configure the actual intended normal group permissions in Telegram; refresh the bot's **Resolve permission problem** panel; review the named group; and explicitly choose **Use current permissions as normal**. A legacy/unverified snapshot cannot be used by the restore button. Adoption does not itself send a restriction update. Re-check diagnostics; leave unexplained mismatches unresolved rather than treating generally open permissions as the intended baseline. - -Review copied broadcast history and any cancelled/blocked schedule. Do not recreate an interrupted broadcast without checking which messages Telegram already accepted. Monitor both heartbeats, pending permission recovery, queue age, delivery delay and private logs through startup and the first real scheduled close/open cycle. Investigate missing work, repeated retries, provider failures or growing queues before considering the cutover accepted. Retain the old source/session/private backup until that cycle and recovery behavior have been accepted; the earlier dev.9 manual/live confirmation does not substitute for this observation. +~~~ -The permanent production commands are now run **from `/root/shabat`, with the recorded project name**: +A group administrator must resolve every unverified snapshot outside protected periods: set intended normal rights in Telegram, refresh the named recovery panel and explicitly adopt current permissions. Generally open rights are not necessarily the intended baseline. Monitor both heartbeats, queues, permissions and reminders through the first real Shabbat/festival close/open sequence. Earlier 3.0 live checks do not certify 3.1.0, holiday timing or a long soak. Retain rollback material until acceptance. -```sh -cd /root/shabat -docker compose --project-name shabbat-production ps -docker compose --project-name shabbat-production logs --tail=120 shabbat -docker compose --project-name shabbat-production exec -T shabbat php bin/health.php --deep -``` +Future commands run from the verified ORIGINAL_DIR with **--project-name shabbat-production-310**. Keep that project identity and both volumes. Back up matching source, .env, database, session and BroadcastManager state. -For an intentional later stop, use `docker compose --project-name shabbat-production stop shabbat`; for an approved restart, use `docker compose --project-name shabbat-production restart shabbat`. The new persistent volumes are `shabbat-production_bot-data` and `shabbat-production_madeline-session`. Keep both, the private `.env`, matching source/lock/patches and corresponding-source identity in the normal backup policy. A later SQLite-version upgrade follows the stopped-writer backup/migration instructions, not this legacy import again. +## 9. Rollback -## 9. Roll back without mixing old and new state +**Before either rename/start:** old source/state remain unchanged. If no new service is running and RETIRED_DIR does not exist, restore the recorded restart policy and start the old container: -Before any new startup, rollback can return the preserved old directory/container directly. **After the new bot has contacted Telegram, rollback also requires a remote-state review:** restoring files does not undo sent messages, updated permissions, broadcast actions or Telegram session changes. Settle any new bot-owned permission changes and stop new activity before restoring older state. Do not copy the new SQLite database or newly written session over the old file-based installation. - -If the maintenance attempt stopped **before either rename in step 7**, the original folder is still in place. Verify that no new production service is running and that no retained-source directory was created, then restore the old restart policy and start its existing container: - -```sh +~~~sh test ! -e "$RETIRED_DIR" -test "$(readlink -f -- "$ORIGINAL_DIR")" = /root/shabat +test "$(readlink -f -- "$ORIGINAL_DIR")" = "$ORIGINAL_DIR" test -z "$(docker ps --filter label=com.docker.compose.project="$NEW_PROJECT" --filter label=com.docker.compose.service=shabbat --quiet)" docker update --restart="$OLD_RESTART_POLICY" "$OLD_CONTAINER_ID" docker start "$OLD_CONTAINER_ID" -``` - -For this pre-swap rollback, stop here. The remaining rollback blocks apply after step 7 replaced the directory. +~~~ -If the new service was started, stop it and disable automatic restart before touching directories. These commands run in the same session, with `RELEASE_DIR=/root/shabat` after the swap: +Stop here for pre-swap rollback. **After a completed swap/start**, first review remote effects: files cannot undo Telegram permissions/messages/broadcasts. Resolve new bot-owned permission debt before decommissioning, then stop and preserve new state: -```sh +~~~sh NEW_CONTAINER_ID="$(new_compose ps -a -q shabbat)" if [ -n "$NEW_CONTAINER_ID" ]; then docker update --restart=no "$NEW_CONTAINER_ID" @@ -417,44 +347,25 @@ if [ -n "$NEW_CONTAINER_ID" ]; then test "$(docker inspect --format '{{.State.Running}}' "$NEW_CONTAINER_ID")" = false fi test "$(docker inspect --format '{{.State.Running}}' "$OLD_CONTAINER_ID")" = false -``` - -Preserve the stopped new volumes for diagnosis. The helper command only reads the volumes and writes private tar files outside the source tree; it does not launch the bot. Use a new destination if this rollback capture has already been taken. - -```sh test ! -e "$BACKUP_DIR/failed-new-state" install -d -m 700 "$BACKUP_DIR/failed-new-state" new_compose run --rm --no-deps --user 0:0 \ --volume "$BACKUP_DIR/failed-new-state:/export" shabbat sh -ec ' - tar -cpf /export/new-data.tar -C /app/data . - tar -cpf /export/new-session.tar -C /app/runtime . + tar -cpf /export/data.tar -C /app/data . + tar -cpf /export/session.tar -C /app/runtime . ' -sha256sum "$BACKUP_DIR/failed-new-state/"*.tar \ - > "$BACKUP_DIR/failed-new-state/SHA256SUMS" -``` - -After reviewing any remote effects, return the preserved old folder to its original path. This block applies only after the completed step-7 swap; use the separate pre-swap branch above if no rename occurred. - -```sh -FAILED_SOURCE_DIR="/root/shabat-failed-$STAMP" -test "$(readlink -f -- "$ORIGINAL_DIR")" = /root/shabat +sha256sum "$BACKUP_DIR/failed-new-state/"*.tar > "$BACKUP_DIR/failed-new-state/SHA256SUMS" +FAILED_DIR="$ORIGINAL_DIR.failed-$VERSION-$STAMP" +test "$RETIRED_DIR" = "$ORIGINAL_DIR.before-$VERSION-$STAMP" test -d "$RETIRED_DIR" -case "$RETIRED_DIR" in /root/shabat-retired-*) ;; *) exit 1 ;; esac -case "$FAILED_SOURCE_DIR" in /root/shabat-failed-*) ;; *) exit 1 ;; esac -test ! -e "$FAILED_SOURCE_DIR" -mv -T -- "$ORIGINAL_DIR" "$FAILED_SOURCE_DIR" +test ! -e "$FAILED_DIR" +case "$ORIGINAL_DIR" in /root/shabbat|/root/shabat) ;; *) exit 1 ;; esac +mv -T -- "$ORIGINAL_DIR" "$FAILED_DIR" mv -T -- "$RETIRED_DIR" "$ORIGINAL_DIR" test -f "$ORIGINAL_DIR/.env" -test -f "$ORIGINAL_DIR/data/DBgroups.txt" docker update --restart="$OLD_RESTART_POLICY" "$OLD_CONTAINER_ID" docker start "$OLD_CONTAINER_ID" -docker logs --tail=120 "$OLD_CONTAINER_ID" -``` - -This restarts the exact retained old container/image against its original code, vendor, `.env`, data and pre-cutover session. Do not use `compose up --build` or pull the old mutable image for rollback. If the old image/container or retained directory is missing, stop and restore from the private full-folder/image backup with a separately reviewed recovery procedure; do not improvise a partial rollback. - -Keep the failed new source, both new volumes and all reports. A new attempt must start with an inspected state and a fresh stopped snapshot; the existing-destination guards are intentional. If authentication or permissions changed on Telegram during the new run, the old runtime still needs explicit review even though its local bytes were preserved. - -## Acceptance record +docker logs --tail=100 "$OLD_CONTAINER_ID" +~~~ -Record the verified release checksum/commit, the old runtime versions/container/image, backup paths and hashes, import counts/warnings, exact group-ID comparison, schema/integrity/restore results, final Compose project/volume names, live health, and each group's permission-review outcome. Record unresolved limitations honestly. Keep identifiers, session material, private logs, credentials and backup contents outside GitHub and public release assets. \ No newline at end of file +The old folder is restored before its bind-mounted container restarts; original volumes/image/session were retained. Never overwrite the old snapshot with the new database/session. Session compatibility and remote Telegram state still require observation. Do not remove either state set, volumes or retained images during this procedure. diff --git a/docs/PRODUCTION_UPGRADE_HE.md b/docs/PRODUCTION_UPGRADE_HE.md new file mode 100644 index 0000000..b6744cf --- /dev/null +++ b/docs/PRODUCTION_UPGRADE_HE.md @@ -0,0 +1,431 @@ +
+ +# שדרוג בטוח ל־3.1.0 + +[English](PRODUCTION_UPGRADE.md) · [README בעברית](../readme-he.md) · [מיפוי הייבוא](MIGRATION.md) · [התאוששות הרשאות](PERMISSION_RECOVERY.md) + +זהו מדריך לביצוע ידני; לא בוצעה פריסה. השתמשו בקובצי 3.1.0 שפורסמו ואומתו לאחר שבדיקות החובה עברו. הנתיב המבוקש הוא **/root/shabbat**; בתיעוד קודם הופיע **/root/shabat**. חובה לאמת את הקונטיינר והתיקייה האמיתיים לפני שינוי. אין להשתמש בנתוני בוט הבדיקה. + +הפקודות תומכות בהתקנת legacy שמחברת את כל הפרויקט ובאמצעי האחסון הרגילים של 3.0. בדיקת הנתיבים ב־3.0 קוראת תצורה בלבד; היא אינה פותחת API או סשן. שם סשן מותאם או שרידי נעילה ללא תוכן סשן עוצרים את ההליך. חיבורים מותאמים, אחסון חיצוני, קישורים לנתונים פרטיים או כותב נוסף מחייבים גיבוי מותאם מראש. הריצו את בלוקי השרת באותו **חלון Bash כ־root**, עם Docker/Compose,‏ unzip, כלי GNU ומקום פנוי מספיק. הגיבויים נשמרים מחוץ לקוד ולבנייה. רק ההפעלה בסוף מחברת את הבוט החדש ל־Telegram. + +## 1. העלאה מהמחשב + +הורידו את ארכיון הפריסה ואת SHA256SUMS משחרור GitHub המתאים. במסוף במחשב החליפו SERVER בשם השרת או בכתובת ה־IP. אפשר להעלות את אותם קבצים גם ב־SFTP לאותו יעד פרטי. + +
+ +~~~sh +ssh root@SERVER "install -d -m 700 /root/shabbat-upload-3.1.0" +scp shabbat-3.1.0.zip SHA256SUMS root@SERVER:/root/shabbat-upload-3.1.0/ +~~~ + +
+ +## 2. אימות ההתקנה והנתיבים + +בשרת הציגו את הקונטיינרים ובחרו את קונטיינר הייצור. החליפו את מזהה הדוגמה ושנו את ORIGINAL_DIR ל־/root/shabat **רק אם זה הנתיב האמיתי שאומת**. הבדיקות עוצרות בנתיב או במבנה אחר. בדקו את החיבורים המוצגים; סודות מהסביבה אינם מודפסים. + +
+ +~~~sh +set -euo pipefail +umask 077 +docker ps -a --filter label=com.docker.compose.service=shabbat \ + --format '{{.ID}} {{.Names}} {{.Status}}' +ORIGINAL_DIR=/root/shabbat +OLD_CONTAINER_ID=REPLACE_WITH_VERIFIED_PRODUCTION_CONTAINER_ID +docker inspect --format '{{range .Mounts}}{{println .Type .Source "->" .Destination}}{{end}}' "$OLD_CONTAINER_ID" +docker inspect --format '{{index .Config.Labels "com.docker.compose.project.working_dir"}}' "$OLD_CONTAINER_ID" +case "$ORIGINAL_DIR" in /root/shabbat|/root/shabat) ;; *) exit 1 ;; esac +test "$(readlink -f -- "$ORIGINAL_DIR")" = "$ORIGINAL_DIR" +test "$(docker inspect --format '{{index .Config.Labels "com.docker.compose.project.working_dir"}}' "$OLD_CONTAINER_ID")" = "$ORIGINAL_DIR" +test "$(docker inspect --format '{{index .Config.Labels "com.docker.compose.service"}}' "$OLD_CONTAINER_ID")" = shabbat +test -f "$ORIGINAL_DIR/.env" +test -f "$ORIGINAL_DIR/docker-compose.yml" +OLD_PROJECT="$(docker inspect --format '{{index .Config.Labels "com.docker.compose.project"}}' "$OLD_CONTAINER_ID")" +OLD_IMAGE_ID="$(docker inspect --format '{{.Image}}' "$OLD_CONTAINER_ID")" +OLD_RESTART_POLICY="$(docker inspect --format '{{.HostConfig.RestartPolicy.Name}}' "$OLD_CONTAINER_ID")" +case "$OLD_RESTART_POLICY" in always|unless-stopped|no) ;; *) echo 'Review nonstandard restart policy first.' >&2; exit 1 ;; esac +APP_MOUNT="$(docker inspect --format '{{range .Mounts}}{{if eq .Destination "/app"}}{{.Type}}:{{.Source}}{{end}}{{end}}' "$OLD_CONTAINER_ID")" +MOUNT_DESTINATIONS="$(docker inspect --format '{{range .Mounts}}{{println .Destination}}{{end}}' "$OLD_CONTAINER_ID" | sed '/^$/d' | sort)" +if [ "$APP_MOUNT" = "bind:$ORIGINAL_DIR" ] && [ "$MOUNT_DESTINATIONS" = /app ]; then + LAYOUT=legacy + test -s "$ORIGINAL_DIR/data/DBgroups.txt" + test ! -e "$ORIGINAL_DIR/data/shabbat.sqlite" +elif [ -z "$APP_MOUNT" ] && [ "$MOUNT_DESTINATIONS" = "$(printf '/app/data\n/app/runtime')" ]; then + LAYOUT=sqlite + test "$(docker inspect --format '{{range .Mounts}}{{if eq .Destination "/app/data"}}{{.Type}}{{end}}{{end}}' "$OLD_CONTAINER_ID")" = volume + test "$(docker inspect --format '{{range .Mounts}}{{if eq .Destination "/app/runtime"}}{{.Type}}{{end}}{{end}}' "$OLD_CONTAINER_ID")" = volume + test "$(cat "$ORIGINAL_DIR/VERSION")" = 3.0.0 + docker exec "$OLD_CONTAINER_ID" php -r ' + require "/app/vendor/autoload.php"; + $paths=Shabbat\Runtime\RuntimePaths::resolve("/app"); + if($paths->dataDirectory!=="/app/data" + || $paths->databasePath!=="/app/data/shabbat.sqlite" + || $paths->sessionPath!=="/app/runtime/bot.shabbat") { + throw new RuntimeException("Custom active data/session paths need a reviewed adaptation."); + } + ' +else + echo 'STOP: custom storage layout needs a reviewed backup/cutover.' >&2 + exit 1 +fi +VERSION=3.1.0 +NEW_PROJECT=shabbat-production-310 +STAMP="$(date -u +%Y%m%dT%H%M%SZ)" +UPLOAD_DIR=/root/shabbat-upload-3.1.0 +RELEASE_DIR="/root/shabbat-stage-$VERSION-$STAMP" +BACKUP_DIR="/root/shabbat-backups/$VERSION-$STAMP" +RETIRED_DIR="$ORIGINAL_DIR.before-$VERSION-$STAMP" +test -n "$OLD_PROJECT" +test "$OLD_PROJECT" != "$NEW_PROJECT" +test ! -e "$RELEASE_DIR" +test ! -e "$BACKUP_DIR" +test ! -e "$RETIRED_DIR" +df -h /root +docker system df +install -d -m 700 "$BACKUP_DIR" "$RELEASE_DIR" +printf '%s\n' "$ORIGINAL_DIR" "$OLD_CONTAINER_ID" "$OLD_PROJECT" "$OLD_IMAGE_ID" "$OLD_RESTART_POLICY" "$LAYOUT" > "$BACKUP_DIR/old-installation.txt" +~~~ + +
+ +## 3. אימות, הגדרה ובנייה ב־staging + +אימות הקובץ חייב לעבור. שמרו את build-info.json שבארכיון. ערכו את .env החדש בפרטיות: העתיקו את API_ID/API_HASH/BOT_TOKEN של אותו בוט ייצור ואת המנהלים המהימנים; שמרו הגדרות יישום מותאמות רלוונטיות והגדירו GeoNames לפי הצורך; נתיבי הקונטיינר נקבעים בהמשך. אין להדפיס סודות או להעתיק vendor מותקן. השאירו את BUILD_COMMIT מחוץ ל־.env. + +
+ +~~~sh +( + cd "$UPLOAD_DIR" + awk '$2 == "shabbat-3.1.0.zip" { + if (NF != 2 || length($1) != 64 || $1 ~ /[^0-9a-f]/) exit 1 + print; n++ + } END { if (n != 1) exit 1 }' SHA256SUMS > deployment.sha256 + sha256sum --check deployment.sha256 +) +unzip -q "$UPLOAD_DIR/shabbat-3.1.0.zip" -d "$RELEASE_DIR" +test "$(cat "$RELEASE_DIR/VERSION")" = "$VERSION" +test -f "$RELEASE_DIR/build-info.json" +cp "$RELEASE_DIR/.env.example" "$RELEASE_DIR/.env" +chmod 600 "$RELEASE_DIR/.env" +~~~ + +
+ +הגדירו ב־.env החדש את נתיבי הקונטיינר הציבוריים האלה לצד פרטי ההתחברות הפרטיים: + +
+ +~~~dotenv +APP_DB_PATH=/app/data/shabbat.sqlite +DATA_DIR=/app/data +SESSION_PATH=/app/runtime/bot.shabbat +HEARTBEAT_PATH=/app/data/scheduler-heartbeat.json +LEGACY_DATA_PATH=. +SOURCE_URL=https://github.com/WizardLoop/shabbat/releases/tag/v3.1.0 +~~~ + +
+ +לאחר העריכה בנו ובצעו בדיקות לא מקוונות. לפרויקט החדש אסור שיהיו אמצעי אחסון קיימים; אם נמצא ניסיון קודם, בדקו אותו במקום למחוק. הפקודות אינן מפעילות את הבוט. ודאו מקום לתיקייה הישנה, לנתונים ולסשן, לתמונה הישנה ולתמונה החדשה. + +
+ +~~~sh +new_compose() { + docker compose --project-name "$NEW_PROJECT" --project-directory "$RELEASE_DIR" \ + --file "$RELEASE_DIR/docker-compose.yml" "$@" +} +if docker volume inspect "$NEW_PROJECT"_bot-data >/dev/null 2>&1 \ + || docker volume inspect "$NEW_PROJECT"_madeline-session >/dev/null 2>&1; then + echo 'STOP: destination volumes already exist.' >&2 + exit 1 +fi +unset BUILD_COMMIT +new_compose config --quiet +new_compose build shabbat +new_compose run --rm --no-deps shabbat php scripts/verify-patches.php +new_compose run --rm --no-deps shabbat php bin/self-check.php --release +new_compose run --rm --no-deps shabbat php bin/runtime-permissions.php --require-non-root +~~~ + +
+ +## 4. עצירת הכותב הישן וגיבוי מלא + +בחרו חלון תחזוקה ביום חול, מחוץ לזמני הסגירה, עם מנהל קבוצה זמין. בדקו שידורים ומחיקות מתוזמנים ועצרו מנהלי תהליכים וכותבים נוספים. מכאן הייצור מושבת. שמרו את הקונטיינר, התמונה ואמצעי האחסון הישנים. עצירה כפויה או OOM מחייבות בירור לפני המשך. + +
+ +~~~sh +docker update --restart=no "$OLD_CONTAINER_ID" +docker stop --time 120 "$OLD_CONTAINER_ID" +test "$(docker inspect --format '{{.State.Running}}' "$OLD_CONTAINER_ID")" = false +test "$(docker inspect --format '{{.State.Restarting}}' "$OLD_CONTAINER_ID")" = false +test "$(docker inspect --format '{{.State.OOMKilled}}' "$OLD_CONTAINER_ID")" = false +test "$(docker inspect --format '{{.State.ExitCode}}' "$OLD_CONTAINER_ID")" != 137 +install -d -m 700 "$BACKUP_DIR/source" "$BACKUP_DIR/data" "$BACKUP_DIR/session" +cp -a -- "$ORIGINAL_DIR/." "$BACKUP_DIR/source/" +( + cd "$ORIGINAL_DIR" + find . -type f -print0 | sort -z | xargs -0 sha256sum +) > "$BACKUP_DIR/source.sha256" +(cd "$BACKUP_DIR/source"; sha256sum --check "$BACKUP_DIR/source.sha256") > "$BACKUP_DIR/source-check.txt" +docker cp "$OLD_CONTAINER_ID:/app/data/." "$BACKUP_DIR/data/" +if [ "$LAYOUT" = legacy ]; then + set -- "$BACKUP_DIR/source"/bot.shabbat* + test -e "$1" + cp -a -- "$@" "$BACKUP_DIR/session/" +else + docker cp "$OLD_CONTAINER_ID:/app/runtime/." "$BACKUP_DIR/session/" + test -s "$BACKUP_DIR/data/shabbat.sqlite" +fi +if [ -d "$BACKUP_DIR/session/bot.shabbat" ]; then + test -s "$BACKUP_DIR/session/bot.shabbat/safe.php" +elif [ -f "$BACKUP_DIR/session/bot.shabbat" ]; then + test -s "$BACKUP_DIR/session/bot.shabbat.safe.php" +else + echo 'STOP: canonical session payload is missing; do not create a new session.' >&2 + exit 1 +fi +for part in data session; do + (cd "$BACKUP_DIR/$part"; find . -type f -print0 | sort -z | xargs -0 sha256sum) > "$BACKUP_DIR/$part.sha256" +done +docker image save --output "$BACKUP_DIR/old-image.tar" "$OLD_IMAGE_ID" +sha256sum "$BACKUP_DIR/old-image.tar" > "$BACKUP_DIR/old-image.tar.sha256" +~~~ + +
+ +הגיבוי כולל .env, תצורה, תלויות מותקנות, data, מסד ו־WAL/SHM, סשן, קובצי מצב בשורש ונתוני BroadcastManager. שמרו גם עותק פרטי מחוץ לשרת. גיבוי SQLite או DBgroups.txt לבדם אינו מספיק. הבוט והסשן החדשים עדיין לא הופעלו. + +## 5. העתקה לאחסון חדש והכנת המסד + +הגיבוי מחובר לקריאה בלבד. root משמש רק להעתקה ולתחזוקה לא מקוונת; הבוט ירוץ כ־UID/GID 10001. אימות SHA256 בודק את העתקת הנתונים והסשן לפני מיגרציה. + +
+ +~~~sh +new_compose run --rm --no-deps --user 0:0 \ + --volume "$BACKUP_DIR:/review:ro" shabbat sh -ec ' + test -z "$(find /app/data -mindepth 1 -maxdepth 1 -print -quit)" + test -z "$(find /app/runtime -mindepth 1 -maxdepth 1 -print -quit)" + cp -a /review/data/. /app/data/ + cp -a /review/session/. /app/runtime/ + (cd /app/data; sha256sum --check /review/data.sha256) + (cd /app/runtime; sha256sum --check /review/session.sha256) + test ! -e /app/data/upgrade-3.1.0 + mkdir -m 700 /app/data/upgrade-3.1.0 +' > "$BACKUP_DIR/copied-state-check.txt" +inventory() { + new_compose run --rm --no-deps --user 0:0 shabbat php -r ' + require "/app/vendor/autoload.php"; + $db=Shabbat\Storage\Database::open("/app/data/shabbat.sqlite"); + $result=[]; + $tables=$db->pdo()->prepare("SELECT name FROM sqlite_master WHERE type=? ORDER BY name"); + $tables->execute(["table"]); + foreach($tables->fetchAll(PDO::FETCH_COLUMN) as $name) { + if($name==="schema_migrations" || str_starts_with($name,"sqlite_")) continue; + if(!preg_match("/^[a-z_][a-z0-9_]*$/D",$name)) throw new RuntimeException("Unexpected table name"); + $columns=$db->pdo()->query("PRAGMA table_info(\"".$name."\")")->fetchAll(PDO::FETCH_ASSOC); + $order=implode(",",array_map(fn($c)=>"\"".str_replace("\"","\"\"",$c["name"])."\"",$columns)); + $rows=$db->pdo()->query("SELECT * FROM \"".$name."\" ORDER BY ".$order); + $hash=hash_init("sha256"); $count=0; + while($row=$rows->fetch(PDO::FETCH_ASSOC)) { + hash_update($hash,json_encode($row,JSON_THROW_ON_ERROR)."\n"); $count++; + } + $result[$name]=["rows"=>$count,"sha256"=>hash_final($hash)]; + } + echo json_encode($result,JSON_PRETTY_PRINT|JSON_THROW_ON_ERROR),PHP_EOL; + ' +} +if [ "$LAYOUT" = sqlite ]; then + inventory > "$BACKUP_DIR/database-before.json" +fi +new_compose run --rm --no-deps --user 0:0 shabbat \ + php bin/migrate.php --writers-stopped --db /app/data/shabbat.sqlite \ + --backup-dir /app/data/upgrade-3.1.0 > "$BACKUP_DIR/migrate.json" +if [ "$LAYOUT" = sqlite ]; then + inventory > "$BACKUP_DIR/database-after.json" + cmp "$BACKUP_DIR/database-before.json" "$BACKUP_DIR/database-after.json" +fi +~~~ + +
+ +בשדרוג SQLite מ־3.0, השוואת שורות המסד חייבת להתאים ואין לבצע ייבוא legacy; המשיכו לשלב 7. במערכת legacy המשיכו לשלב הבא. ב־3.1.0 אין שינוי בסכמת SQL; כל הבדל בלתי צפוי מחייב בירור לפני הפעלה. + +## 6. רק ל־legacy: בדיקה וייבוא תואם לדוח + +בדקו כל קבוצה רשומה, הגדרה, תבנית, הודעה, התראה, טיוטה ואזהרת הרשאות. כפילויות מדווחות ומנוכות. תיקיות קבוצה שאינן ברשימה מדווחות ואינן נרשמות אוטומטית, כי ייתכן שאינן פעילות. אם צריך לייבאן, התאימו עותק ייבוא נפרד לאחר בירור, שמרו את הגיבוי המקורי והפיקו דוח חדש. הייבוא מכסה את [השדות המתועדים](MIGRATION.md); הרחבות מקומיות מחייבות בדיקה. + +
+ +~~~sh +test "$LAYOUT" = legacy +new_compose run --rm --no-deps --user 0:0 \ + --volume "$BACKUP_DIR:/review:ro" shabbat \ + php bin/import-legacy.php --db /app/data/shabbat.sqlite \ + --legacy /review/source --dry-run > "$BACKUP_DIR/import-preview.json" +~~~ + +
+ +קראו את דוח JSON הפרטי ואשרו כל הבדל בין המקור ליעד לפני הבלוק הבא. האפשרות --expect-report עוצרת אם המקור או רשומות היעד הרלוונטיות השתנו. הגדרות ותבניות קיימות נשמרות. קבוצות מיובאות פעילות, עם ברירות המחדל המתועדות של ירושלים, הזמנים וההתראות הישנים; מודולי התזכורות החדשים נשארים כבויים. בדקו מיקום ומצב לפני עבודה רגילה. + +הייבוא אינו טרנזקציה אחת כוללת. בכשל משאירים את הבוט כבוי, שומרים ראיות ובודקים או משחזרים את הגיבוי המאומת שנוצר לפני הייבוא לפני ניסיון נוסף. אין לעקוף את התאמת הדוח. + +
+ +~~~sh +new_compose run --rm --no-deps --user 0:0 \ + --volume "$BACKUP_DIR:/review:ro" shabbat \ + php bin/import-legacy.php --db /app/data/shabbat.sqlite --legacy /review/source \ + --apply --writers-stopped --backup-dir /app/data/upgrade-3.1.0 \ + --expect-report /review/import-preview.json > "$BACKUP_DIR/import-apply.json" +new_compose run --rm --no-deps --user 0:0 \ + --volume "$BACKUP_DIR:/review:ro" shabbat php -r ' + $r=json_decode(file_get_contents("/review/import-apply.json"),true,512,JSON_THROW_ON_ERROR); + if(($r["verification"]["status"]??null)!=="passed") throw new RuntimeException("Import verification failed"); + echo "Import comparison passed.",PHP_EOL; +' +~~~ + +
+ +צילומי chatb1.json וקובצי נעילה ישנים הם ראיות, ולא הרשאות נוכחיות מאומתות. ייתכן שנדרשת בדיקת מנהל גם אם הקבוצה נראית פתוחה. אין למחוק מצב התאוששות או לשחזר אוטומטית צילום ישן ומתירני. ראו [התאוששות הרשאות](PERMISSION_RECOVERY.md). + +## 7. בדיקה, גיבוי ותרגול שחזור + +פקודות התחזוקה בודקות סכמה ושלמות, יוצרות גיבוי SQLite חדש בלי למחוק גיבויים ישנים, מייצאות אותו בפרטיות ומשחזרות לנתיב זמני נפרד. הן אינן פותחות סשן Telegram. בריאות דורשת פעימות של בוט פועל; כאן משתמשים בבדיקות מבנה ואחרי ההפעלה בבדיקת בריאות אמיתית. + +
+ +~~~sh +new_compose run --rm --no-deps --user 0:0 shabbat php -r ' +require "/app/vendor/autoload.php"; +$db=Shabbat\Storage\Database::open("/app/data/shabbat.sqlite"); +$db->assertCurrentSchema(); +$checks=$db->integrity(); +if($checks["integrity_check"]!==["ok"] || $checks["foreign_key_check"]!==[]) throw new RuntimeException("Database check failed"); +$result=(new Shabbat\Storage\BackupService())->backup($db,"/app/data/upgrade-3.1.0/ready.sqlite"); +echo Shabbat\Storage\Database::encode($result),PHP_EOL; +' > "$BACKUP_DIR/ready-backup.json" +install -d -m 700 "$BACKUP_DIR/sqlite" +new_compose run --rm --no-deps --user 0:0 \ + --volume "$BACKUP_DIR/sqlite:/export" shabbat sh -ec ' + cp -a /app/data/upgrade-3.1.0/. /export/ + chown -R 10001:10001 /app/data /app/runtime +' +new_compose run --rm --no-deps shabbat php bin/restore.php \ + --backup /app/data/upgrade-3.1.0/ready.sqlite \ + --db /tmp/restore-rehearsal.sqlite --writers-stopped > "$BACKUP_DIR/restore-rehearsal.json" +new_compose run --rm --no-deps shabbat php scripts/verify-patches.php +new_compose run --rm --no-deps shabbat php bin/self-check.php --release +new_compose run --rm --no-deps shabbat php bin/runtime-permissions.php --require-non-root +~~~ + +
+ +## 8. החלפת הקוד והפעלת מופע יחיד + +המשיכו לאחר קבלת הדוחות, הגיבוי והשחזור ותוכנית ההרשאות. התיקייה הישנה נשמרת בשלמותה בשם אחר, ללא דריסה. אם שינוי השם השני נכשל, עצרו והחזירו את התיקייה השמורה רק אחרי בדיקה ש־ORIGINAL_DIR חסר. הקונטיינר הישן נשאר כבוי כשנתיב הקוד המקורי מכיל את הגרסה החדשה. + +
+ +~~~sh +test "$(docker inspect --format '{{.State.Running}}' "$OLD_CONTAINER_ID")" = false +test "$(docker inspect --format '{{.HostConfig.RestartPolicy.Name}}' "$OLD_CONTAINER_ID")" = no +case "$ORIGINAL_DIR" in /root/shabbat|/root/shabat) ;; *) exit 1 ;; esac +test "$(readlink -f -- "$ORIGINAL_DIR")" = "$ORIGINAL_DIR" +test "$RELEASE_DIR" = "/root/shabbat-stage-$VERSION-$STAMP" +test "$RETIRED_DIR" = "$ORIGINAL_DIR.before-$VERSION-$STAMP" +test ! -e "$RETIRED_DIR" +mv -T -- "$ORIGINAL_DIR" "$RETIRED_DIR" +mv -T -- "$RELEASE_DIR" "$ORIGINAL_DIR" +RELEASE_DIR="$ORIGINAL_DIR" +cd "$ORIGINAL_DIR" +new_compose config --quiet +printf '%s\n' "$RETIRED_DIR" "$NEW_PROJECT" > "$BACKUP_DIR/new-installation.txt" +new_compose up -d --no-build shabbat +new_compose ps +new_compose logs --tail=120 shabbat +~~~ + +
+ +ההפעלה עשויה לפעול בקבוצות פעילות, לשלוח הודעת אתחול ולעבד משימות ספרייה. שידורים ישנים ללא שיוך מנהל עלולים להיחסם או להתבטל; משימות מחיקה מועתקות עלולות להתבצע. בדקו את מצב BroadcastManager השמור; אין להניח ששידור שנקטע בטוח לשליחה מחדש. + +לאחר האתחול בדקו בריאות. ב־Telegram בדקו /start, מעברי הבית וההגדרות, callbacks, זהות /source, מספר קבוצות, מיקום ואזור זמן, תבניות ודגלי התראות. בקבוצת ניסוי עם מגבלות ידועות בדקו סגירה, פתיחה ו־restart; אין להשתמש ב־/closegroups או /opengroups ההמוניות כבדיקת עשן. + +
+ +~~~sh +new_compose exec -T shabbat php bin/health.php --deep +new_compose ps +~~~ + +
+ +מנהל קבוצה צריך לטפל בכל צילום לא מאומת מחוץ לזמנים מוגנים: לקבוע ב־Telegram הרשאות רגילות רצויות, לרענן את פאנל ההתאוששות של הקבוצה ולאשר במפורש את אימוץ ההרשאות הנוכחיות. פתיחה כללית אינה בהכרח ברירת המחדל הרצויה. עקבו אחר שתי הפעימות, התורים, ההרשאות והתזכורות לאורך מחזור שבת/חג אמיתי ראשון. בדיקות 3.0 אינן אישור ל־3.1.0, לתזמון בחג או להרצה ממושכת. שמרו חומרי חזרה לאחור עד לקבלת התוצאה. + +פקודות עתידיות מריצים מ־ORIGINAL_DIR המאומת עם **--project-name shabbat-production-310**. שומרים את שם הפרויקט ואת שני אמצעי האחסון. מגבים יחד קוד תואם, .env, מסד, סשן ומצב BroadcastManager. + +## 9. חזרה לאחור + +**לפני שינויי השם וההפעלה:** הקוד והמצב הישנים לא השתנו. אם השירות החדש אינו פועל ו־RETIRED_DIR לא קיים, החזירו את מדיניות האתחול השמורה והפעילו את הקונטיינר הישן: + +
+ +~~~sh +test ! -e "$RETIRED_DIR" +test "$(readlink -f -- "$ORIGINAL_DIR")" = "$ORIGINAL_DIR" +test -z "$(docker ps --filter label=com.docker.compose.project="$NEW_PROJECT" --filter label=com.docker.compose.service=shabbat --quiet)" +docker update --restart="$OLD_RESTART_POLICY" "$OLD_CONTAINER_ID" +docker start "$OLD_CONTAINER_ID" +~~~ + +
+ +במסלול זה עצרו כאן. **אחרי החלפה והפעלה**, בדקו קודם השפעות ב־Telegram: קבצים אינם מבטלים הרשאות, הודעות ושידורים. טפלו בחובות הרשאות שיצר הבוט החדש לפני הוצאתו משימוש, ואז עצרו ושמרו את מצבו: + +
+ +~~~sh +NEW_CONTAINER_ID="$(new_compose ps -a -q shabbat)" +if [ -n "$NEW_CONTAINER_ID" ]; then + docker update --restart=no "$NEW_CONTAINER_ID" +fi +new_compose stop --timeout 120 shabbat +if [ -n "$NEW_CONTAINER_ID" ]; then + test "$(docker inspect --format '{{.State.Running}}' "$NEW_CONTAINER_ID")" = false +fi +test "$(docker inspect --format '{{.State.Running}}' "$OLD_CONTAINER_ID")" = false +test ! -e "$BACKUP_DIR/failed-new-state" +install -d -m 700 "$BACKUP_DIR/failed-new-state" +new_compose run --rm --no-deps --user 0:0 \ + --volume "$BACKUP_DIR/failed-new-state:/export" shabbat sh -ec ' + tar -cpf /export/data.tar -C /app/data . + tar -cpf /export/session.tar -C /app/runtime . +' +sha256sum "$BACKUP_DIR/failed-new-state/"*.tar > "$BACKUP_DIR/failed-new-state/SHA256SUMS" +FAILED_DIR="$ORIGINAL_DIR.failed-$VERSION-$STAMP" +test "$RETIRED_DIR" = "$ORIGINAL_DIR.before-$VERSION-$STAMP" +test -d "$RETIRED_DIR" +test ! -e "$FAILED_DIR" +case "$ORIGINAL_DIR" in /root/shabbat|/root/shabat) ;; *) exit 1 ;; esac +mv -T -- "$ORIGINAL_DIR" "$FAILED_DIR" +mv -T -- "$RETIRED_DIR" "$ORIGINAL_DIR" +test -f "$ORIGINAL_DIR/.env" +docker update --restart="$OLD_RESTART_POLICY" "$OLD_CONTAINER_ID" +docker start "$OLD_CONTAINER_ID" +docker logs --tail=100 "$OLD_CONTAINER_ID" +~~~ + +
+ +התיקייה הישנה מוחזרת לפני הפעלת הקונטיינר שמחובר לנתיב המקורי; אמצעי האחסון, התמונה והסשן הישנים נשמרו. אין לדרוס את הגיבוי הישן במסד או בסשן החדשים. גם אחרי חזרה לאחור בודקים תאימות סשן ומצב ב־Telegram. אין למחוק מצבי נתונים, אמצעי אחסון או תמונות שמורות בתהליך. + +
diff --git a/docs/PUBLICATION_STATUS.md b/docs/PUBLICATION_STATUS.md index ebd9cb4..473b3e9 100644 --- a/docs/PUBLICATION_STATUS.md +++ b/docs/PUBLICATION_STATUS.md @@ -1,59 +1,46 @@ # Publication and release status -## Stable release 3.0.0 - -The owner-authorized `v3.0.0` stable release uses the exact reviewed merge commit. Its deployment asset is `shabbat-3.0.0.zip`; `shabbat-3.0.0-corresponding-source.zip` adds the 57 locked runtime package trees and preferred-source supplements below. `SHA256SUMS` and `RELEASE_MANIFEST.json` identify the archives, source fingerprint and scope; the matching Actions run supplies CI evidence. Archive `build-info.json` records the actual commit and `local_changes=false` after exact source equality. See [release notes](RELEASE_NOTES.md) and [production cutover](PRODUCTION_UPGRADE.md). - -Stable packaging is now repository tooling: `composer package` / `php scripts/package.php` reads a clean committed Git tree and verifies the locked runtime sources and committed supplement inventory before writing the two ZIPs and metadata to `dist/`. Git and Python 3.9+ are packaging prerequisites. The old three-archive installed-tool path is explicitly `--development` and is not a release source offer. [Release preparation](RELEASE.md) documents the checks and prerequisites. - -The owner reported successful dev.9 live locking, unlocking, restoration of original group permissions and restart on 2026-10-16. The stable promotion preserves that runtime behavior; it does not convert those tests into holy-day, load, soak, all-client or production-migration acceptance. The Docker PHP 8.4 base moves to security-patched 8.4.26; Composer stays 2.10.3. Application lock, approved patch bytes and SQL migration bytes remain preserved. Publishing the GitHub release does not deploy or restart the bot. - -## Historical local preparation - -The earlier local documentation/public-source preparation of **3.0.0-dev.9** preserved runtime behavior and locked dependencies. That preparation itself created no commit, tag, GitHub release or production deployment. Its historical artifact names and metadata are recorded below; use the current release assets above for deployment. - -## Historical local delivery layout - -| Path in the local delivery | Contents | -|---|---| -| `repo/` | Clean files intended for the repository root; no `.git`, installed `vendor`, actual `.env`, databases, sessions, logs, private backups or generated test caches | -| `artifacts/shabbat-3.0.0-dev.9-publication.zip` | The clean repository source, including dotfiles, tests, resources, immutable migration sources and reviewed patch baselines, plus public archive-only `build-info.json` required for no-Git Docker builds | -| `artifacts/shabbat-3.0.0-dev.9-corresponding-source.zip` | Application source plus the 57 locked runtime Composer dependency source trees, their notices and approved local modifications; see the archive's source-scope/index | -| `artifacts/SHA256SUMS` | SHA-256 hashes for the delivered ZIPs | -| `checks/` | Sanitized implementation inventory, original-source preservation evidence, executed-check reports, archive manifests and documented blockers | - -The archive-only `build-info.json` records the verified original baseline commit, `local_changes=true` and the exact publication-source fingerprint. It is excluded from `repo/` and Git; it neither creates nor claims a new commit. Extract the publication ZIP into a new directory, retain that metadata unchanged, and follow the README. It is a source distribution requiring `composer install` or a Docker build, not a preconfigured bot. At that time `scripts/package.php` was a separate three-archive developer packager. Stable 3.0.0 replaces its default with the reviewed two-archive release workflow and retains the old behavior only under `--development`; historical archive names and scope do not describe current release assets. - -## Corresponding-source scope - -The separate source archive preserves application resources, migration/build/install/test scripts, `composer.lock`, licenses, the five active patch sets, exact upstream baselines and patched runtime dependency sources. Runtime dependency versions/references and files are indexed in its manifest. - -The locked `amphp/process` package also distributes two Windows helper executables. -Their MIT-licensed preferred source is included separately under -`additional-source/amphp-windows-process-wrapper/` at the immutable -[v1.2.0 source commit](https://github.com/amphp/windows-process-wrapper/tree/8d5aca0c56b73cba460894d79ee83ec558b41027). -The version association is supported by official package history and matching -executable Git blobs. A reproducible rebuild of those binaries was not performed. - -The source collection also supplements Composer's MadelineProto distribution with -pinned upstream TL generator/build inputs, current schema/language inputs and a -required documentation-template input. Original paths, commits and Git-blob/file -hashes are indexed in the archive. Generators were not executed; upstream -documentation/translation workflows that query mutable RPC/Weblate data are not -claimed to be reproducible offline. Historical schema archives and generated -upstream documentation are outside this collection. - - -Development tool installations are excluded from this source archive. In particular, a distributed PHPStan PHAR is not labeled as preferred source. Development tools remain reproducible through the committed lock, and their license inventory is retained. PHP, SQLite, operating-system packages and Docker base images are external runtime/build dependencies, not bundled source or a distributed image in this delivery. Dockerfile digests, download checksums and upstream references document those external inputs. No claim is made that this ZIP contains the full source of an entire Linux container or every optional development tool. - -See [licensing](LICENSING.md), [third-party notices](../THIRD_PARTY_NOTICES.md), [dependency inventory](DEPENDENCIES.md) and the source archive's scope manifest for exact inclusions, omissions and outstanding provenance findings. - -## Review boundaries - -- The public README pair is `README.md` and `readme-he.md`; there is no competing `README.he.md`. -- Original application code, the Composer lock, SQL migration bytes, dependency licenses and approved patch/base bytes are preserved. The release inventory and documentation checker use the requested Hebrew filename; provenance metadata uses portable project-relative identifiers. -- The public `.env.example` keeps the same key/value placeholders and uses comment-free syntax shared by Compose and PHP INI parsing. Explanations are in the configuration guide. -- Current acceptance and feature gaps are documented in [implementation status](IMPLEMENTATION_STATUS.md); they are not silently fixed or marketed as complete. -- Exact test results belong to the final separate checks report. Previously recorded dev.9 results do not replace a clean-install check of this copy. - -When publishing manually, use the exact reviewed source and preserve its corresponding-source offer. Do not upload private environment/session/data files. The historical local preparation performed no remote publication or production action; the current authorized stable release is described at the top of this document. +## 3.1.0 source and release requirements + +The upgrade targets MadelineProto 8.11.10 at the exact commit in `composer.lock`. +Only the rebased Fresh Peer patch and the reviewed BroadcastManager patch remain +active. Date/location compatibility now uses official SDK implementations; +inline keyboards are normalized at the transport boundary for TL Layer 232. + +Publication requires mandatory PHP, static-analysis, source-inventory, packaging, +Docker and shutdown compatibility checks to pass on the exact final commit. +The matching GitHub Actions run and release manifest identify the tested source +and artifacts. Historical results from another version do not replace those +checks; a stable tag or release must not bypass a failed mandatory gate. + +Shutdown coverage combines the official loop contract with application-owned +writer exclusion through SDK disconnect/finalization. Loop `stop()` prevents +rescheduling after the current body returns. Offline fixtures use an in-memory +transport and modeled flush; they do not establish real session serialization, +Telegram traffic, IPC-daemon shutdown or Linux-signal acceptance. + +## Archives and source scope + +The release packager reads a clean committed Git tree and verifies exact locked +runtime sources plus preferred-source supplements before producing +`shabbat-3.1.0.zip`, `shabbat-3.1.0-corresponding-source.zip`, `SHA256SUMS` +and `RELEASE_MANIFEST.json`. Archive `build-info.json` records the exact commit +and source fingerprint. No real configuration, session, database or log belongs +in an archive. Unpublished archives are for review and isolated testing; release +assets must correspond to the final commit whose mandatory gates passed. + +The source archive contains application source, active patch baselines/diffs, +locked runtime dependency sources and their original licenses, plus the pinned +supplements listed in `resources/release/source-manifest.json`. Development +binary tools and full operating-system/container source trees are outside its +scope. See [licensing](LICENSING.md), [third-party notices](../THIRD_PARTY_NOTICES.md) +and the source manifest for exact inclusions, exclusions and provenance limits. + +## Deployment boundary + +Publication does not deploy or restart a bot. No live Telegram acceptance or +production migration is performed by CI. The maintainer must first test the new +release with a separate bot, then verify the actual production path before +using the [Hebrew cutover guide](PRODUCTION_UPGRADE_HE.md) or +[English cutover guide](PRODUCTION_UPGRADE.md). Historical 3.0.0 source and its +retired patch provenance remain in that version's Git history and release. diff --git a/docs/RELEASE.md b/docs/RELEASE.md index 6016a6f..ff883cb 100644 --- a/docs/RELEASE.md +++ b/docs/RELEASE.md @@ -1,12 +1,12 @@ # Release preparation and publication -The version in [VERSION](../VERSION) is **3.0.0**, stable. The owner confirmed dev.9 live locking, unlocking, original-permission restoration and restart. Broader holy-day, load, soak and feature-specific acceptance remain separate. See [release notes](RELEASE_NOTES.md), [implementation status](IMPLEMENTATION_STATUS.md) and [licensing/source scope](LICENSING.md). +The version in [VERSION](../VERSION) is **3.1.0**. Publication requires the exact-commit release gates below. The owner confirmed dev.9 live locking, unlocking, original-permission restoration and restart. Broader holy-day, load, soak and feature-specific acceptance remain separate. See [release notes](RELEASE_NOTES.md), [implementation status](IMPLEMENTATION_STATUS.md) and [licensing/source scope](LICENSING.md). ## Review and publication sequence -Work in an isolated checkout without production credentials or state. Require green checks on the reviewed PR, merge it, and verify the exact resulting commit before creating `v3.0.0` and a stable GitHub release. Release artifacts must identify that actual commit and fingerprint with `local_changes=false`. Tagging and publishing require the owner's authorization; none of the commands below publishes or deploys. +Work in an isolated checkout without production credentials or state. Require green checks on the reviewed PR, merge it, and verify the exact resulting commit before creating `v3.1.0` and a stable GitHub release. Release artifacts must identify that actual commit and fingerprint with `local_changes=false`. Tagging and publishing require the owner's authorization; none of the commands below publishes or deploys. -The release provides `shabbat-3.0.0.zip`, `shabbat-3.0.0-corresponding-source.zip`, `RELEASE_MANIFEST.json` and `SHA256SUMS`. The deployment ZIP contains clean repository source plus build identity, without installed vendor. The corresponding-source ZIP adds the locked runtime sources, licenses, reviewed patches and pinned preferred-source supplements. The manifest states the scope and exclusions; no claim covers the complete Docker operating system or all development-tool source. +The release provides `shabbat-3.1.0.zip`, `shabbat-3.1.0-corresponding-source.zip`, `RELEASE_MANIFEST.json` and `SHA256SUMS`. The deployment ZIP contains clean repository source plus build identity, without installed vendor. The corresponding-source ZIP adds the locked runtime sources, licenses, reviewed patches and pinned preferred-source supplements. The manifest states the scope and exclusions; no claim covers the complete Docker operating system or all development-tool source. ## Reproduce quality checks @@ -27,7 +27,7 @@ php bin/self-check.php php bin/self-check.php --release ``` -`--no-check-all` omits generic version-range advice for the deliberate MadelineProto pin while retaining strict manifest/lock validation. Installation/upgrades use `composer install` with the existing lock; dependency changes require separate review. The release self-check enforces the loaded SQLite/target runtime gate. Do not bypass it on an older host runtime. +The validation command retains strict manifest/lock checking. MadelineProto now uses a reviewed stable version range, while composer.lock pins the exact installed source. Installation/upgrades use `composer install` with the existing lock; dependency changes require separate review. The release self-check enforces the loaded SQLite/target runtime gate. Do not bypass it on an older host runtime. Record the locked inventory and current advisory evidence from that same installation: @@ -79,7 +79,7 @@ Exclude `.git`, actual `.env`, sessions, application/runtime databases and WAL/S ## Production remains a separate action -Use [the complete `/root/shabat` legacy cutover guide](PRODUCTION_UPGRADE.md) for the old file-based production bot. Existing SQLite deployments use [migration](MIGRATION.md) and [backup/restore](BACKUP_RESTORE.md) instead of importing legacy data again. Stable 3.0.0 adds no migration after dev.9; all 16 sources remain required. +Use the [production upgrade guide](PRODUCTION_UPGRADE.md) ([עברית](PRODUCTION_UPGRADE_HE.md)) to verify the actual /root/shabbat or /root/shabat installation and select its legacy or SQLite path. Existing SQLite deployments must not import legacy data again. Version 3.1.0 retains all 16 immutable migration sources. Stop all writers before migration, retain matching source/database/session/BroadcastManager state, verify import/settings and restore, and monitor the first real production close/open cycle. Review old permission snapshots through the provenance-aware recovery panel. Keep the exact corresponding source available and set `SOURCE_URL` before public operation. Publication itself does not execute a server command or restart a bot. diff --git a/docs/RELEASE_NOTES.md b/docs/RELEASE_NOTES.md index 110c33a..793d3d6 100644 --- a/docs/RELEASE_NOTES.md +++ b/docs/RELEASE_NOTES.md @@ -1,51 +1,43 @@ -# WizardLoop Shabbat 3.0.0 +# Shabbat 3.1.0 -**Stable release `v3.0.0`.** This release retains the dev.9 bot implementation, MadelineProto 8.7.0, SQLite, the locked application dependencies, all five approved patch sets and all 16 migrations. It promotes the reviewed implementation and updates release packaging, identity and deployment documentation. See [CHANGELOG](../CHANGELOG.md), [implementation status](IMPLEMENTATION_STATUS.md) and [production upgrade](PRODUCTION_UPGRADE.md). +**Release policy: publication requires successful mandatory checks on the exact final commit. Use the matching GitHub Actions run and release manifest to verify the tested source and artifacts.** -## Acceptance and changes +Automated release checks and deployment acceptance have separate scopes. See [release requirements](RELEASE.md) and [implementation status](IMPLEMENTATION_STATUS.md). -On 2026-10-16 the owner confirmed successful live dev.9 group locking, unlocking, original-permission restoration and restart. These results support those paths; they do not establish real Shabbat/Yom Tov timing, a full holiday sequence, Telegram capacity under load, a long-running soak, every client or actual Stars payments. The production import and cutover remain operator actions with their own checks. +## Changes -The stable packaging path is now part of the repository: `composer package` or `php scripts/package.php` builds the deployment and scoped corresponding-source archives from an exact clean Git commit. The dependency and preferred-source inventory is pinned, with patch and per-file verification. The former installed-tool packaging path remains explicit `--development` tooling and is not the release source offer. The image retains the PHP 8.4 branch with its security-patched 8.4.26 base; Composer remains pinned to 2.10.3. +- Update MadelineProto to official stable 8.11.10 / TL layer 232 with a compatible stable Composer range and exact lock. +- Retire upstreamed UpdateLoop/cancellation, GeoPoint and formatted-date patches; retain the reviewed version-matched Fresh Peer and BroadcastManager changes where still required. +- Update the keyboard compatibility boundary for new inline constructors while preserving saved templates, callback IDs, styles/icons and distinct reply keyboards. +- Recognize the current Telegram permission fields. The new `manage_linked_peers` restriction is opt-in, including explicit **All** selection; the existing 21-field default and saved masks are unchanged. Administrator-rights diagnostics cover all 19 current fields. +- Add comparable dry-run/apply import plans, duplicate/directory-only group reporting, optional reviewed-report binding and post-import verification. Existing destination settings and unverified permission evidence remain protected. +- Shorten the English/Hebrew README pair and consolidate obsolete development reports into current references. Provide parallel guarded production instructions, including a Hebrew guide. -The dev.9 publication corrections remain included: PHP 8.3-compatible transaction bookkeeping and native fixtures, immutable migration/resource/fixture bytes across Git line-ending settings, Composer tooling fixes, and reviewed deployment documentation. No existing migration or patch is rewritten. +Existing group/calendar modules, languages, rich templates, administration, Stars donations, SQLite data, session handling and all 16 immutable migrations remain part of the application. See [keyboard compatibility](KEYBOARD_COMPATIBILITY.md), [implementation status](IMPLEMENTATION_STATUS.md), [changes](../CHANGELOG.md) and [patch documentation](PATCHES.md) for actual boundaries. -## Included functionality +## Upgrade manually -Location-aware Shabbat/Yom Tov closures preserve verified original group permissions. Private/group settings, six interface catalogs, inline/GPS location flows, rich templates, delegated administration, broadcasts, statistics, optional Stars donations and group opt-in zmanim/Daf/Tefillin/Omer modules remain available with the boundaries in [implementation status](IMPLEMENTATION_STATUS.md). +Follow the [English production guide](PRODUCTION_UPGRADE.md) or [מדריך השדרוג בעברית](PRODUCTION_UPGRADE_HE.md). Verify /root/shabbat versus /root/shabat from the actual production container, stage the image separately, stop the old writer and preserve its whole folder, data, session, configuration, BroadcastManager state and image before cutover. -Dev.9 delivery safety remains in place: eligibility is rechecked near dispatch; Tefillin spacing/daily caps and Omer restoration gaps use actual delivery evidence; never-dispatched backlogs are bounded; uncertain outcomes remain conservative. Permission, notification and scheduled-broadcast callbacks are independent, with bounded work and separate heartbeats. Configured closing notices remain an intentional quiet-period exception, and a request already accepted by Telegram cannot be recalled by a local check. See [delivery safety](DEV9_DELIVERY_SAFETY.md). +File-based installations preview/apply the bound import and review each warning. Existing 3.0 SQLite installations keep their data and compare it around the migration/schema check; they do not run legacy import. Old permission snapshots never become trusted solely because they have a valid checksum. Rollback retains old local state but cannot undo Telegram actions already accepted. -## Dependencies and schema - -- MadelineProto: exactly `8.7.0`, commit `7b99dd0f2d964a492c377912ffce9f5ce61aa9ed`. -- BroadcastManager: locked `3.2.2`, commit `f2792a383416b66bb68e55f09414563e540538d6`, with the reviewed local derivative. -- Five active patch sets: four MadelineProto compatibility patches and one BroadcastManager set, with original baselines, reviewed outputs, diffs and manifests. -- Migrations 001–016 remain required and checksum-protected. **No new migration is added after dev.9.** Startup validates schema; maintenance applies migrations explicitly. - -[Dependency evidence](DEPENDENCIES.md) · [Patch workflow](PATCHES.md) · [Licensing and source scope](LICENSING.md) - -## Production upgrade and rollback - -The complete [production guide](PRODUCTION_UPGRADE.md) targets the existing file-based bot at `/root/shabat` (one `b`). Build the reviewed source beside production, stop the single old writer, retain the whole private directory and image, copy stopped state into distinct new volumes, preview/apply the explicit legacy import, compare exact group IDs/settings, rehearse restore, then move the reviewed source into `/root/shabat` and start one instance under `shabbat-production`. - -Legacy permission snapshots remain unverified until an authorized administrator reviews the intended normal Telegram rights. The guide explains recovery, monitoring and a rollback that restores the original bind path before restarting the retained old container. A file restore does not undo Telegram actions already accepted. Test-bot databases and sessions never replace production state. - -Existing SQLite dev.9 deployments need the usual stopped-writer backup and migration/schema check, but no legacy import or new SQL migration. Preserve matching source, database, MadelineProto session and BroadcastManager state. See [backup and restore](BACKUP_RESTORE.md). - -## Release artifacts and identity +## Assets and exact source | Asset | Purpose | |---|---| -| `shabbat-3.0.0.zip` | Clean deployment source and `composer.lock`, plus exact release `build-info.json`; no installed vendor or private runtime state. Docker installs locked runtime dependencies. | -| `shabbat-3.0.0-corresponding-source.zip` | Application plus 57 locked runtime package trees, licenses, reviewed patches and pinned preferred-source supplements, with exact scope/index. | -| `RELEASE_MANIFEST.json` | Release commit, version, source fingerprint, package scope and artifact hashes. | -| `SHA256SUMS` | SHA-256 records for both ZIPs and the release manifest. | +| `shabbat-3.1.0.zip` | Deployment source, lock and exact release build identity; Docker installs dependencies. No installed vendor or private state. | +| `shabbat-3.1.0-corresponding-source.zip` | Application, documented locked runtime sources, licenses, active patches and required preferred-source supplements. | +| `RELEASE_MANIFEST.json` | Actual commit, version, fingerprint, scope and artifact hashes. | +| `SHA256SUMS` | Checksums for both ZIPs and the manifest. | + +Keep archive build-info.json unchanged and leave BUILD_COMMIT out of the private .env when using an unchanged release ZIP. Set SOURCE_URL to https://github.com/WizardLoop/shabbat/releases/tag/v3.1.0 once its corresponding-source asset is available. Modified deployments need their exact source offer. + +The source scope excludes the complete operating system/container and optional development-tool source; consult [licensing](LICENSING.md), [third-party notices](../THIRD_PARTY_NOTICES.md) and the source manifest. -Keep archive build metadata unchanged. It identifies the actual release commit with `local_changes=false`, not the historical legacy baseline. Set `SOURCE_URL=https://github.com/WizardLoop/shabbat/releases/tag/v3.0.0` for this unchanged release after its corresponding-source asset is available. Modified deployments need their own exact source offer. +## Acceptance limits -The source collection does not claim to include all operating-system/container or development-tool sources, or a reproducible rebuild of upstream binaries. Existing provenance/license findings remain visible in [third-party notices](../THIRD_PARTY_NOTICES.md) and [publication status](PUBLICATION_STATUS.md). No production `.env`, database/WAL/SHM, session, backup, private log or cache is a release asset. +Shutdown tests use the official SDK loop and disconnect/finalize paths with an in-memory transport and modeled flush. The loop `stop()` contract prevents rescheduling after the current body returns; safe application shutdown also requires finalization before releasing writer ownership. These fixtures do not establish real session serialization, Telegram delivery, IPC-daemon shutdown or Linux-signal acceptance. -## Verification boundaries +The owner reported dev.9 locking, unlocking, original-permission restoration and restart on 2026-10-16. Those are historical results, not new 3.1.0 acceptance. Tests with fake transports cannot establish real client rendering, actual /start and callback delivery, complete holy-day timing, paid operations, sustained load or a long soak. Record final automated/image/archive checks separately and complete relevant isolated live checks before production use. -The stable release is gated on its own reviewed commit, hosted checks, image validation and final artifact/source comparisons. Exact results belong to the matching Actions run and release evidence; prior test counts are not reused as a result for a different tree. Local Windows PHP's SQLite 3.45.2 remains below the release gate; the Docker target pins SQLite 3.51.3. Publication creates the authorized source/tag/release only. It does not migrate the server, change group permissions or restart the active bot. +Publishing GitHub assets does not deploy to the server, migrate production, change group permissions or restart the active bot. diff --git a/docs/SERVER_TEST_DEPLOYMENT.md b/docs/SERVER_TEST_DEPLOYMENT.md index f607d70..8b6096b 100644 --- a/docs/SERVER_TEST_DEPLOYMENT.md +++ b/docs/SERVER_TEST_DEPLOYMENT.md @@ -1,8 +1,8 @@ -# Test stable 3.0.0 with a separate bot +# Test 3.1.0 with a separate bot -Use a **new test bot identity and disposable groups**. The fresh-install procedure below uses `/root/shabbat-test-3.0.0` and Compose project `shabbat-staging-300`; it preserves both the existing `/root/shabbat-test` installation and production `/root/shabat`. These are instructions, not an executed deployment. Never run two clients against one bot/session/database. +Use a **new test bot identity and disposable groups**. The fresh-install procedure below uses `/root/shabbat-test-3.1.0` and Compose project `shabbat-staging-310`; it preserves both the existing `/root/shabbat-test` installation and production at its verified `/root/shabbat` or `/root/shabat` path. These are instructions, not an executed deployment. Never run two clients against one bot/session/database. -An existing SQLite test deployment should follow the [stopped-writer upgrade](../README.md#upgrade-and-legacy-import) and [complete backup/restore procedure](BACKUP_RESTORE.md), preserving its existing project/volumes. Do not unpack this release over its old files or apply the fresh-volume instructions below to its state. The file-based production bot has its own [full cutover guide](PRODUCTION_UPGRADE.md). +An existing SQLite test deployment should follow the [stopped-writer upgrade](INSTALLATION.md#updating-an-existing-sqlite-deployment) and [complete backup/restore procedure](BACKUP_RESTORE.md), preserving its existing project/volumes. Do not unpack this release over its old files or apply the fresh-volume instructions below to its state. Production has a separate [guarded cutover guide](PRODUCTION_UPGRADE.md) ([עברית](PRODUCTION_UPGRADE_HE.md)). Check current release/acceptance status before using published assets; a test guide is not a claim that the tests have already run. ## Prepare a fresh isolated source directory @@ -11,12 +11,12 @@ Run on the Linux test host in the same Bash session, with root/Docker access, Co ```sh set -euo pipefail umask 077 -VERSION=3.0.0 +VERSION=3.1.0 ARCHIVE="shabbat-${VERSION}.zip" -TEST_SOURCE=/root/shabbat-test-3.0.0 -TEST_PROJECT=shabbat-staging-300 +TEST_SOURCE=/root/shabbat-test-3.1.0 +TEST_PROJECT=shabbat-staging-310 UPLOAD_DIR=/root/shabbat-test-release-upload -test "$TEST_SOURCE" = /root/shabbat-test-3.0.0 +test "$TEST_SOURCE" = /root/shabbat-test-3.1.0 test ! -e "$TEST_SOURCE" if docker volume inspect "${TEST_PROJECT}_bot-data" >/dev/null 2>&1 \ || docker volume inspect "${TEST_PROJECT}_madeline-session" >/dev/null 2>&1; then @@ -52,7 +52,7 @@ chmod 600 .env For manual upload, transfer the deployment ZIP and `SHA256SUMS` to `UPLOAD_DIR` and use the same exact checksum check before extracting. The separate corresponding-source archive is the source-offer artifact; it is not the deployment ZIP. Retain release `build-info.json` unchanged; it records the actual release commit and fingerprint with `local_changes=false`. -Edit the new `.env` privately with the new test bot's Telegram credentials, trusted `ADMIN`, GeoNames account and container paths from [configuration](CONFIGURATION.md). Never copy production credentials/data/session. Set `SOURCE_URL=https://github.com/WizardLoop/shabbat/releases/tag/v3.0.0` for this unchanged release and leave `BUILD_COMMIT` absent. +Edit the new `.env` privately with the new test bot's Telegram credentials, trusted `ADMIN`, GeoNames account and container paths from [configuration](CONFIGURATION.md). Never copy production credentials/data/session. Set `SOURCE_URL=https://github.com/WizardLoop/shabbat/releases/tag/v3.1.0` for this unchanged release and leave `BUILD_COMMIT` absent. ## Build, initialize and start deliberately @@ -90,7 +90,7 @@ test_compose exec -T shabbat php bin/health.php --deep test_compose ps ``` -Verify `/source` reports 3.0.0 and the exact release commit/source URL. Health requires recent permission and notification heartbeats; an offline database cannot satisfy it. Stop the test bot when the planned test is finished using `test_compose stop shabbat`. Preserve its project/volumes for diagnosis and later tests. +Verify `/source` reports 3.1.0 and the exact release commit/source URL. Health requires recent permission and notification heartbeats; an offline database cannot satisfy it. Stop the test bot when the planned test is finished using `test_compose stop shabbat`. Preserve its project/volumes for diagnosis and later tests. ## Permission recovery and acceptance @@ -102,4 +102,4 @@ The owner already reported successful dev.9 live locking, unlocking, original-pe 4. Inspect `/testzmanim GROUP_ID` and its private export when needed. Do not delete lock-state records or repeatedly force restoration to hide a conflict. 5. Observe both heartbeat ages, oldest due jobs, delivery delay and retry behavior under representative traffic, including a real wall-clock soak. Record what ran and what remains untested. -Do not use `down -v`, transfer test state into production or run old/new instances on one session. [Rollback](BACKUP_RESTORE.md) needs matching source, database and library/session state; it cannot undo Telegram actions already accepted. See [delivery safety](DEV9_DELIVERY_SAFETY.md), [implementation status](IMPLEMENTATION_STATUS.md) and [publication status](PUBLICATION_STATUS.md). +Do not use `down -v`, transfer test state into production or run old/new instances on one session. [Rollback](BACKUP_RESTORE.md) needs matching source, database and library/session state; it cannot undo Telegram actions already accepted. See [delivery safety](DELIVERY_SAFETY.md), [implementation status](IMPLEMENTATION_STATUS.md) and [publication status](PUBLICATION_STATUS.md). diff --git a/docs/THIRD_PARTY_DETAILS.md b/docs/THIRD_PARTY_DETAILS.md index 55c64e8..d747860 100644 --- a/docs/THIRD_PARTY_DETAILS.md +++ b/docs/THIRD_PARTY_DETAILS.md @@ -1,58 +1,47 @@ # Third-party technical provenance -This companion to [THIRD_PARTY_NOTICES](../THIRD_PARTY_NOTICES.md) retains technical identities, modification history and open findings. The five checked-in patch manifests are authoritative for exact source, output, prerequisite and diff SHA-256 values. Historical hashes below identify earlier reviewed artifacts, not the current output unless stated. +This companion to [THIRD_PARTY_NOTICES](../THIRD_PARTY_NOTICES.md) records component identity, modifications and open findings. The two active patch manifests are authoritative for exact baseline, approved output, diff and intermediate hashes. ## Original project and reference -The historical WizardLoop Shabbat baseline is commit `2976ab8339f489d933c7246e0cb27f3b0e4aa697`, Copyright (c) 2024 WizardLoop, originally MIT. Its [complete original grant](../LICENSES/SHABBAT-LEGACY-MIT.txt) remains unchanged. The current application uses AGPL-3.0-only without altering historical grants. +The original WizardLoop Shabbat baseline is commit 2976ab8339f489d933c7246e0cb27f3b0e4aa697, Copyright (c) 2024 WizardLoop, originally MIT. Its [grant](../LICENSES/SHABBAT-LEGACY-MIT.txt) remains unchanged. The combined application uses AGPL-3.0-only without revoking earlier grants. -The JewishPulse interface comparison used commit `d7b06eb1acb206543dcff35a7c14ebce4760b4e5` under AGPL-3.0-only. [FEATURE_PARITY](FEATURE_PARITY.md) records that relationship. No JewishPulse graphic branding or hardcoded bot links are imported. - -Local reference path labels in the patch provenance identify historical project exports, not files required at installation and not public download URLs. Publication preparation removes the workstation's absolute home/Desktop prefix while retaining project/file identity, hashes and all license findings. Baselines, reviewed PHP, diffs, historical source and approved target hashes are unchanged. +The JewishPulse comparison used commit d7b06eb1acb206543dcff35a7c14ebce4760b4e5, AGPL-3.0-only. Graphic branding and hardcoded bot links were not imported. ## Active patch identity -All four MadelineProto patch sets target version **8.7.0**, commit `7b99dd0f2d964a492c377912ffce9f5ce61aa9ed`. The BroadcastManager set targets **3.2.2**, commit `f2792a383416b66bb68e55f09414563e540538d6`. - -| Set | Upstream baseline SHA-256 | Current approved output SHA-256 | -|---|---|---| -| [UpdateLoop](../patches/madelineproto/manifest.json) | `2fbcbb73822258102837f53f4a231b87526d66809be7acd6339156ea778a8c2f` | `8f6cb1a483c879024bddea289e90d4bf2d71dd15716102bc83a1f34a243782e4` | -| [GeoPoint](../patches/madelineproto-geopoint/manifest.json) | `9ed8054caade6abc96420b0f5b120bec029ee2bc7b7b6aacca56fb7ddc61a27b` | `5633cc441e541e5e919dfa8156192587a68e578e49a496acac91172be5f2549d` | -| [MessageEntity factory](../patches/madelineproto-formatted-date/manifest.json) | `06a9d438cc198f56cfb745a2a3808932269033671146cf82f84ae88e8d6eae60` | `b265ed707326e1d71c7a8bdf8291f0b8c94a153b98a2c4c45c776fec3b374005` | -| [PeerHandler](../patches/madelineproto-fresh-peer/manifest.json) | `3e1af3624f2256f53264fe4256475d0a5f353af8761cc9716133b7f0412538d2` | `8188777fc376f2b3cca39963d79f85239fc84141f978128ea2bb591f03891928` | -| [BroadcastManager](../patches/broadcastmanager/manifest.json) | `2a9a42dc6e3f6d7b51c178e7d9db962a5b5ac424046af18afcfcdb12d41dc6e8` | `d665b24009aabfb5b09e00edad1271f1501bf0ef797d5a2593129da91c8cc435` | - -### UpdateLoop cancellation and recovery +| Set | Locked base | Baseline SHA-256 | Approved output SHA-256 | +|---|---|---|---| +| [Fresh full-peer evidence](../patches/madelineproto-fresh-peer/manifest.json) | MadelineProto 8.11.10, 49d3d8460257c7bfb1a7e12708e1bfdd59e898c1 | 6caa058975e7122eeb84409542a7c8241a2da5c63ca4c63e1ec2392c7b3f7314 | 78187d7216c069d47d1c05d8128834603b958b55bc8478576850bce9e86489df | +| [BroadcastManager](../patches/broadcastmanager/manifest.json) | 3.2.2, f2792a383416b66bb68e55f09414563e540538d6 | 2a9a42dc6e3f6d7b51c178e7d9db962a5b5ac424046af18afcfcdb12d41dc6e8 | d665b24009aabfb5b09e00edad1271f1501bf0ef797d5a2593129da91c8cc435 | -[The patch review](../patches/madelineproto/README.md) identifies a retained historical PHP patch script and a reproduced reference diff. The script's SHA-256 is `1ec2691498e878d28ca8e9cde94b00c803d9ccba789096ffc8471156dfb429e9`; identical copies were found in local project exports `newsearch-v2` and `psy new/release-r21-work`. The reference diff is reproduced from that script, not claimed to be a historical Git diff. +The PeerHandler derivative preserves the upstream public signature and 8.11.10 community/invalid-peer handling, while exposing raw per-call response evidence when full-info caching is disabled. This supports permission validation without treating a stale combined cache record as current RPC evidence. It is a local correction, not an upstream attribution. -The applied derivative adds shutdown/authorization guards and delayed recovery to the reference cancellation checks. Direct timeouts and timeout-derived cancellation can recover; unrelated cancellation is rethrown and a stopped loop stops. The immutable baseline, script, reference diff, applied diff and manifest remain bundled. The historical standalone script has no license header; its bytes are preserved unchanged. On **2026-10-16**, the WizardLoop project maintainer explicitly stated that they authored this exact helper and authorized its distribution under **AGPL-3.0-only**. The hash-scoped attestation in the patch manifest records that direct maintainer statement. It resolves the previously missing maintainer authorization for this retained helper; it is not an independent authorship/legal certification and does not change upstream MadelineProto grants or the separate formatted-date export findings. +BroadcastManager retains original source, dev.3 presentation source (3d9425f7911b12c69faae5e87954db134dc3fb7c2f7d654a72f972ebeb84e424), dev.8 transport source (08db35c271f671041257ebe79d1010cdd7c33c4d5868e4553c78612f9e8bf0f3) and guarded transition diffs. The approved derivative includes lifecycle admission/cancellation guards, tracked worker/progress draining and bounded flood handling. These are behavior changes, not merely presentation. Unknown source bytes fail verification. -### Fractional coordinates +## Retired patches and historical findings -The [GeoPoint correction](../patches/madelineproto-geopoint/README.md) changes the two longitude/latitude property types and annotations from integer to float, matching Telegram double coordinates. Access hashes, accuracy radius and surrounding serialization remain unchanged. It is separate from the historical UpdateLoop work; the pinned original file, reviewed output, diff and manifest are retained. +3.1.0 uses official SDK UpdateLoop, GeoPoint and FormattedDate source. Their former local patch directories, helper and wrapper are absent from this release tree. Retirement does not claim that every upstream shutdown behavior is resolved; [publication status](PUBLICATION_STATUS.md) and actual regression evidence govern that conclusion. -### Formatted-date entities +For historical identification only: -The [factory/class correction](../patches/madelineproto-formatted-date/README.md) adds the native/Bot API factory branches and a new independently authored `FormattedDate` wrapper. Native timestamps, UTF-16 offsets/lengths and flags remain represented; the locked schema and complete upstream license accompany the baseline and diff. The new class SHA-256 is `ffe03d0d78215bc42968cd836c25b1f8a602f161fb55eba189b4102d9b99d5e5`; its copyright is WizardLoop 2026 and its grant is AGPL-3.0-or-later. The unmodified upstream license SHA-256 is `57c8ff33c9c0cfc3ef00e650a1cc910d7ee479a8bc509f6c9209a7c2a11399d6`, identical to the root AGPL text. +- The earlier standalone UpdateLoop helper SHA-256 was 1ec2691498e878d28ca8e9cde94b00c803d9ccba789096ffc8471156dfb429e9. On 2026-10-16 the maintainer stated authorship and authorized distribution of those exact bytes under AGPL-3.0-only. Prior release provenance retains that scoped statement; it is not an independent legal certification. +- Historical formatted-date exports had script SHA-256 c3091f61a401d8022b8ef1d228cf8c5f31a1094982de69a0be108e21885cb967 and wrapper SHA-256 a9e3146e49a88bec469e67e53f5e27cffb1b5127cde547590f2e385ef02dd264. Their MIT/proprietary project declarations conflicted and no standalone grant or recovered Git history was found. Those exports were not redistributed. +- The separately authored wrapper shipped in earlier releases had SHA-256 ffe03d0d78215bc42968cd836c25b1f8a602f161fb55eba189b4102d9b99d5e5, Copyright WizardLoop 2026, AGPL-3.0-or-later. It is no longer an active source input. -Two historical exports share script SHA-256 `c3091f61a401d8022b8ef1d228cf8c5f31a1094982de69a0be108e21885cb967` and wrapper SHA-256 `a9e3146e49a88bec469e67e53f5e27cffb1b5127cde547590f2e385ef02dd264`. Their project declarations conflict: MIT in `wizardloop/theisraelis`, proprietary in `psychedelize/psy-bot-suite`. No standalone grant or recoverable Git history was found. Those original exports are not redistributed; [the investigation](MADELINE_FORMATTED_DATE.md) preserves the finding and explains the new implementation's source basis. +## Current SDK preferred source -### Fresh full-peer response evidence +The [source manifest](../resources/release/source-manifest.json) binds 4,095 files from 83 exact runtime distributions, with only the two approved patched outputs differing from upstream. Two public Amp TLS example private keys are omitted by exact hash. All other runtime files, resources and notices remain inventoried; no extension-based source filtering is used. -The [PeerHandler correction](../patches/madelineproto-fresh-peer/README.md), reviewed 2026-10-16, preserves the public `getFullInfo` signature and exposes per-call raw response evidence when full-info caching is disabled. This supports current permission validation without trusting a stale combined chat/cache record. It is a new local correction, not attributed to a recovered historical patch or an upstream fix. Its baseline was recorded as matching the pinned remote and installed source; original AGPL/copyright headers remain intact. +The MadelineProto supplement has **84 files** at SDK commit 49d3d8460257c7bfb1a7e12708e1bfdd59e898c1, schema submodule 1d027e48ce9196d86110f8324e23a5c78fc4ef6a and documentation submodule 10ea0769245a3d080c3e501b12603e804ad9f3af. Original Git blobs and SHA-256 values accompany each file. It includes TL/secret parser builders, file-reference-map generators, current TL232/MTProto/secret schemas, all language inputs and the local language generator. The runtime package supplies their referenced parser/runtime classes. No generator was executed. -### BroadcastManager history and current lifecycle changes +Full historical schema regeneration, complete generated upstream documentation, its development toolchain and historical mutable RPC responses are outside this collection. No separate license file was present in the pinned schema/documentation submodule trees; their bytes and the parent MadelineProto notices are preserved without inventing a new grant. -The [BroadcastManager review](../patches/broadcastmanager/README.md) records three stages: +## RTC source findings -| Stage | Reviewed-source SHA-256 | Scope | -|---|---|---| -| dev.3 | `3d9425f7911b12c69faae5e87954db134dc3fb7c2f7d654a72f972ebeb84e424` | Per-instance status/counter/control presentation. | -| dev.4 through dev.8 | `08db35c271f671041257ebe79d1010cdd7c33c4d5868e4553c78612f9e8bf0f3` | Optional message-transport hook at native text/media/album/edit/status sites. | -| dev.9, current | `d665b24009aabfb5b09e00edad1271f1501bf0ef797d5a2593129da91c8cc435` | Runtime authorization/cancellation/admission hooks, cancellation-aware waits, worker/progress joining, cancelled queue persistence and bounded completed progress history. | +The new RTC PHP packages are locked and included with their original source, notices and Go reference-source files where distributed. danog/php-rtc-av metadata declares MIT while its distributed LICENSE and PHP source headers state BSD-3-Clause; the dependency report preserves the mismatch as **NOT VERIFIED** for the declared MIT grant. -The older statement that the patch did not change delivery lifecycle applies to the historical presentation stage only. The current derivative includes lifecycle behavior. The native library retains separate persistent state; null optional hooks preserve native call paths, while current future joining is part of the reviewed implementation. The application requests native flood-wait errors for manager-controlled retry. Exact original source, both prior approved sources and all guarded transition diffs remain in the manifest. Unknown intermediate bytes fail verification. +The AV package contains FFI declaration headers and an optional FFmpeg downloader, not FFmpeg native binaries. The downloader was not run. Native libraries, their optional installation and platform-specific builds are outside the Composer source collection. The eight editable C declaration files match the pinned upstream Git blobs. No separate generator or extraction recipe exists in that tree; whether they are directly maintained preferred source or generated derivatives is unestablished. Their external provenance and any additional notice requirements remain review findings, not a proven missing generator. The pinned AV README is retained as a supplement because Composer dist excludes it; it explicitly states BSD-3-Clause and FFmpeg 9 ABI. The optional downloader repository/tag/release returned HTTP 404 during review, and no native build provenance is claimed. ## Data provenance diff --git a/docs/ZMANIM_METHODS.md b/docs/ZMANIM_METHODS.md index b2be932..f398ab3 100644 --- a/docs/ZMANIM_METHODS.md +++ b/docs/ZMANIM_METHODS.md @@ -13,7 +13,7 @@ The calendar is fetched separately with explicit `i=on/off`, avoiding a location Civil dates select Daf Yomi. Omer evening uses the next civil date's structured Omer event; after midnight the current date continues that night. Counting progresses through non-send days. Night messages wait until chosen nightfall and quiet/lock end; daytime completion is separate, disabled by default and omits the blessing. Sources: [Hebcal calendar](https://www.hebcal.com/home/195/jewish-calendar-rest-api), [zmanim](https://www.hebcal.com/home/1663/zmanim-halachic-times-api), [candle/havdalah](https://www.hebcal.com/home/4463/candle-lighting-havdalah-fast-times). - + Current `is_shabbat` and `is_yom_tov` flags are calculated from active individual day segments. A merged festival/Shabbat sequence keeps one final opening time; its union of event metadata does not imply that every day in the sequence is both Shabbat and Yom Tov. `quiet_now` includes the configured early operational closure, even before the religious interval begins. Omer phase is explicit: day, twilight or night. At sunset the next civil date's structured Omer event becomes the display count, but nighttime delivery waits for the chosen nightfall. After midnight the current civil date still identifies that counting night until verified dawn. Fixed times before noon are anchored on the following civil morning of the night being planned; a time beyond dawn does not create a night reminder. Optional daytime completion is a separate no-blessing behavior and is suppressed during the group's religious/operational quiet period. Night retry expiry never passes dawn. @@ -30,7 +30,7 @@ Full night form additionally includes the traditional blessing with localized el The current tefillin reminder start method is explicitly Hebcal `misheyakir`, 11.5 degrees below the morning horizon. The provider also returns `misheyakirMachmir` (10.2 degrees), but the current reminder form does not offer a selector for that second method. A missing/null selected misheyakir blocks scheduling; the code does not substitute dawn/sunrise or a guessed value. See the [provider method definitions](https://www.hebcal.com/home/1663/zmanim-halachic-times-api). -Internal language codes are `he`, `en`, `ru`, `fr`, `es`, `pt-br`. Calendar-provider requests map English to Hebcal `s` and Brazilian Portuguese to `pt`; the other four map directly. The [official language documentation](https://www.hebcal.com/home/4534/jewish-calendar-event-language-support) lists the Hebrew/English/Russian/French/Spanish options; the [official calendar form](https://www.hebcal.com/ical/) and a public `lg=pt` API request on 2026-10-13 confirmed Portuguese titles. `title_orig` retains the original event name used for fast/day classification, with original English `title` fallback when the provider omits a redundant original field. A display language change cannot change event restrictions. +Internal language codes are `he`, `en`, `ru`, `fr`, `es`, `pt-br`. Calendar-provider requests map English to Hebcal `s` and Brazilian Portuguese to `pt`; the other four map directly. The [official language documentation](https://www.hebcal.com/home/4534/jewish-calendar-event-language-support) lists the Hebrew/English/Russian/French/Spanish options; the [official calendar form](https://www.hebcal.com/ical/) and a public `lg=pt` API request on 2026-10-13 confirmed Portuguese titles. `title_orig` retains the original event name used for fast/day classification, with original English `title` fallback when the provider omits a redundant original field. A display language change cannot change event restrictions. ## Complete solar response contract (dev.3) diff --git a/docs/composer-audit.json b/docs/composer-audit.json index 22fecbe..2b14cf8 100644 --- a/docs/composer-audit.json +++ b/docs/composer-audit.json @@ -1,4 +1,4 @@ -{ - "advisories": [], - "abandoned": [] +{ + "advisories": [], + "abandoned": [] } diff --git a/docs/composer-licenses.json b/docs/composer-licenses.json index 49353f9..6b2a547 100644 --- a/docs/composer-licenses.json +++ b/docs/composer-licenses.json @@ -1,507 +1,663 @@ -{ - "name": "wizardloop/shabbat", - "version": "dev-main", - "license": [ - "AGPL-3.0-only" - ], - "dependencies": { - "amphp/amp": { - "version": "v3.1.3", - "license": [ - "MIT" - ] - }, - "amphp/byte-stream": { - "version": "v2.1.2", - "license": [ - "MIT" - ] - }, - "amphp/cache": { - "version": "v2.0.1", - "license": [ - "MIT" - ] - }, - "amphp/dns": { - "version": "v2.4.1", - "license": [ - "MIT" - ] - }, - "amphp/file": { - "version": "v3.2.0", - "license": [ - "MIT" - ] - }, - "amphp/hpack": { - "version": "v3.2.2", - "license": [ - "MIT" - ] - }, - "amphp/http": { - "version": "v2.1.2", - "license": [ - "MIT" - ] - }, - "amphp/http-client": { - "version": "v5.3.6", - "license": [ - "MIT" - ] - }, - "amphp/http-client-cookies": { - "version": "v2.0.0", - "license": [ - "MIT" - ] - }, - "amphp/http-server": { - "version": "v3.4.7", - "license": [ - "MIT" - ] - }, - "amphp/log": { - "version": "v2.0.0", - "license": [ - "MIT" - ] - }, - "amphp/mysql": { - "version": "v3.1.1", - "license": [ - "MIT" - ] - }, - "amphp/parallel": { - "version": "v2.4.0", - "license": [ - "MIT" - ] - }, - "amphp/parser": { - "version": "v1.1.1", - "license": [ - "MIT" - ] - }, - "amphp/pipeline": { - "version": "v1.2.7", - "license": [ - "MIT" - ] - }, - "amphp/postgres": { - "version": "v2.2.1", - "license": [ - "MIT" - ] - }, - "amphp/process": { - "version": "v2.1.0", - "license": [ - "MIT" - ] - }, - "amphp/redis": { - "version": "v2.0.4", - "license": [ - "MIT" - ] - }, - "amphp/serialization": { - "version": "v1.1.0", - "license": [ - "MIT" - ] - }, - "amphp/socket": { - "version": "v2.4.1", - "license": [ - "MIT" - ] - }, - "amphp/sql": { - "version": "v2.1.1", - "license": [ - "MIT" - ] - }, - "amphp/sql-common": { - "version": "v2.0.4", - "license": [ - "MIT" - ] - }, - "amphp/sync": { - "version": "v2.3.0", - "license": [ - "MIT" - ] - }, - "amphp/websocket": { - "version": "v2.0.4", - "license": [ - "MIT" - ] - }, - "amphp/websocket-client": { - "version": "v2.0.2", - "license": [ - "MIT" - ] - }, - "bacon/bacon-qr-code": { - "version": "v3.1.1", - "license": [ - "BSD-2-Clause" - ] - }, - "danog/async-orm": { - "version": "1.1.4", - "license": [ - "Apache-2.0" - ] - }, - "danog/better-prometheus": { - "version": "0.1.1", - "license": [ - "Apache-2.0" - ] - }, - "danog/dns-over-https": { - "version": "1.0.1", - "license": [ - "MIT" - ] - }, - "danog/ipc": { - "version": "1.0.1", - "license": [ - "MIT" - ] - }, - "danog/libdns-json": { - "version": "0.2.1", - "license": [ - "MIT" - ] - }, - "danog/loop": { - "version": "1.1.1", - "license": [ - "MIT" - ] - }, - "danog/madelineproto": { - "version": "8.7.0", - "license": [ - "AGPL-3.0-only" - ] - }, - "danog/primemodule": { - "version": "1.0.13", - "license": [ - "AGPL-3.0-only" - ] - }, - "danog/telegram-entities": { - "version": "1.0.5", - "license": [ - "Apache-2.0" - ] - }, - "danog/tg-dialog-id": { - "version": "2.0.0", - "license": [ - "Apache-2.0" - ] - }, - "danog/tg-file-decoder": { - "version": "1.0.2", - "license": [ - "AGPL-3.0-only" - ] - }, - "dasprid/enum": { - "version": "1.0.7", - "license": [ - "BSD-2-Clause" - ] - }, - "daverandom/libdns": { - "version": "v2.1.0", - "license": [ - "MIT" - ] - }, - "kelunik/certificate": { - "version": "v1.1.3", - "license": [ - "MIT" - ] - }, - "league/uri": { - "version": "7.8.1", - "license": [ - "MIT" - ] - }, - "league/uri-components": { - "version": "7.8.1", - "license": [ - "MIT" - ] - }, - "league/uri-interfaces": { - "version": "7.8.1", - "license": [ - "MIT" - ] - }, - "monolog/monolog": { - "version": "3.12.1", - "license": [ - "MIT" - ] - }, - "myclabs/deep-copy": { - "version": "1.14.0", - "license": [ - "MIT" - ] - }, - "nikic/php-parser": { - "version": "v5.9.0", - "license": [ - "BSD-3-Clause" - ] - }, - "paragonie/constant_time_encoding": { - "version": "v3.1.3", - "license": [ - "MIT" - ] - }, - "paragonie/random_compat": { - "version": "v9.99.100", - "license": [ - "MIT" - ] - }, - "phar-io/manifest": { - "version": "2.0.4", - "license": [ - "BSD-3-Clause" - ] - }, - "phar-io/version": { - "version": "3.2.1", - "license": [ - "BSD-3-Clause" - ] - }, - "phpseclib/phpseclib": { - "version": "3.0.57", - "license": [ - "MIT" - ] - }, - "phpstan/phpstan": { - "version": "2.3.1", - "license": [ - "MIT" - ] - }, - "phpunit/php-code-coverage": { - "version": "12.5.8", - "license": [ - "BSD-3-Clause" - ] - }, - "phpunit/php-file-iterator": { - "version": "6.0.2", - "license": [ - "BSD-3-Clause" - ] - }, - "phpunit/php-invoker": { - "version": "6.0.0", - "license": [ - "BSD-3-Clause" - ] - }, - "phpunit/php-text-template": { - "version": "5.0.1", - "license": [ - "BSD-3-Clause" - ] - }, - "phpunit/php-timer": { - "version": "8.0.0", - "license": [ - "BSD-3-Clause" - ] - }, - "phpunit/phpunit": { - "version": "12.5.39", - "license": [ - "BSD-3-Clause" - ] - }, - "promphp/prometheus_client_php": { - "version": "v2.15.1", - "license": [ - "Apache-2.0" - ] - }, - "psr/http-factory": { - "version": "1.1.0", - "license": [ - "MIT" - ] - }, - "psr/http-message": { - "version": "2.0", - "license": [ - "MIT" - ] - }, - "psr/log": { - "version": "3.0.2", - "license": [ - "MIT" - ] - }, - "revolt/event-loop": { - "version": "v1.0.9", - "license": [ - "MIT" - ] - }, - "sebastian/cli-parser": { - "version": "4.2.1", - "license": [ - "BSD-3-Clause" - ] - }, - "sebastian/comparator": { - "version": "7.1.8", - "license": [ - "BSD-3-Clause" - ] - }, - "sebastian/complexity": { - "version": "5.0.0", - "license": [ - "BSD-3-Clause" - ] - }, - "sebastian/diff": { - "version": "7.0.1", - "license": [ - "BSD-3-Clause" - ] - }, - "sebastian/environment": { - "version": "8.1.2", - "license": [ - "BSD-3-Clause" - ] - }, - "sebastian/exporter": { - "version": "7.0.3", - "license": [ - "BSD-3-Clause" - ] - }, - "sebastian/global-state": { - "version": "8.0.3", - "license": [ - "BSD-3-Clause" - ] - }, - "sebastian/lines-of-code": { - "version": "4.0.1", - "license": [ - "BSD-3-Clause" - ] - }, - "sebastian/object-enumerator": { - "version": "7.0.0", - "license": [ - "BSD-3-Clause" - ] - }, - "sebastian/object-reflector": { - "version": "5.0.0", - "license": [ - "BSD-3-Clause" - ] - }, - "sebastian/recursion-context": { - "version": "7.0.1", - "license": [ - "BSD-3-Clause" - ] - }, - "sebastian/type": { - "version": "6.0.4", - "license": [ - "BSD-3-Clause" - ] - }, - "sebastian/version": { - "version": "6.0.1", - "license": [ - "BSD-3-Clause" - ] - }, - "squizlabs/php_codesniffer": { - "version": "4.0.4", - "license": [ - "BSD-3-Clause" - ] - }, - "staabm/side-effects-detector": { - "version": "1.0.5", - "license": [ - "MIT" - ] - }, - "symfony/polyfill-mbstring": { - "version": "v1.43.0", - "license": [ - "MIT" - ] - }, - "symfony/polyfill-php83": { - "version": "v1.43.0", - "license": [ - "MIT" - ] - }, - "theseer/tokenizer": { - "version": "2.0.1", - "license": [ - "BSD-3-Clause" - ] - }, - "webmozart/assert": { - "version": "1.12.1", - "license": [ - "MIT" - ] - }, - "wizardloop/broadcastmanager": { - "version": "3.2.2", - "license": [ - "AGPL-3.0-only" - ] - } - } +{ + "name": "wizardloop/shabbat", + "version": "dev-main 2604d1e", + "license": [ + "AGPL-3.0-only" + ], + "dependencies": { + "amphp/amp": { + "version": "v3.1.3", + "license": [ + "MIT" + ] + }, + "amphp/byte-stream": { + "version": "v2.1.2", + "license": [ + "MIT" + ] + }, + "amphp/cache": { + "version": "v2.0.1", + "license": [ + "MIT" + ] + }, + "amphp/dns": { + "version": "v2.4.1", + "license": [ + "MIT" + ] + }, + "amphp/file": { + "version": "v3.2.0", + "license": [ + "MIT" + ] + }, + "amphp/hpack": { + "version": "v3.2.2", + "license": [ + "MIT" + ] + }, + "amphp/http": { + "version": "v2.1.2", + "license": [ + "MIT" + ] + }, + "amphp/http-client": { + "version": "v5.3.6", + "license": [ + "MIT" + ] + }, + "amphp/http-client-cookies": { + "version": "v2.0.0", + "license": [ + "MIT" + ] + }, + "amphp/http-server": { + "version": "v3.4.7", + "license": [ + "MIT" + ] + }, + "amphp/log": { + "version": "v2.0.0", + "license": [ + "MIT" + ] + }, + "amphp/mysql": { + "version": "v3.1.1", + "license": [ + "MIT" + ] + }, + "amphp/parallel": { + "version": "v2.4.0", + "license": [ + "MIT" + ] + }, + "amphp/parser": { + "version": "v1.1.1", + "license": [ + "MIT" + ] + }, + "amphp/pipeline": { + "version": "v1.2.7", + "license": [ + "MIT" + ] + }, + "amphp/postgres": { + "version": "v2.2.1", + "license": [ + "MIT" + ] + }, + "amphp/process": { + "version": "v2.1.0", + "license": [ + "MIT" + ] + }, + "amphp/redis": { + "version": "v2.0.4", + "license": [ + "MIT" + ] + }, + "amphp/serialization": { + "version": "v1.1.0", + "license": [ + "MIT" + ] + }, + "amphp/socket": { + "version": "v2.4.1", + "license": [ + "MIT" + ] + }, + "amphp/sql": { + "version": "v2.1.1", + "license": [ + "MIT" + ] + }, + "amphp/sql-common": { + "version": "v2.0.4", + "license": [ + "MIT" + ] + }, + "amphp/sync": { + "version": "v2.3.0", + "license": [ + "MIT" + ] + }, + "amphp/websocket": { + "version": "v2.0.4", + "license": [ + "MIT" + ] + }, + "amphp/websocket-client": { + "version": "v2.0.2", + "license": [ + "MIT" + ] + }, + "bacon/bacon-qr-code": { + "version": "v3.1.1", + "license": [ + "BSD-2-Clause" + ] + }, + "brick/math": { + "version": "1.0.0", + "license": [ + "MIT" + ] + }, + "danog/async-orm": { + "version": "1.1.6", + "license": [ + "Apache-2.0" + ] + }, + "danog/better-prometheus": { + "version": "0.1.1", + "license": [ + "Apache-2.0" + ] + }, + "danog/dns-over-https": { + "version": "1.0.1", + "license": [ + "MIT" + ] + }, + "danog/ipc": { + "version": "1.1.0", + "license": [ + "MIT" + ] + }, + "danog/libdns-json": { + "version": "0.2.1", + "license": [ + "MIT" + ] + }, + "danog/loop": { + "version": "1.1.1", + "license": [ + "MIT" + ] + }, + "danog/madelineproto": { + "version": "8.11.10", + "license": [ + "AGPL-3.0-only" + ] + }, + "danog/php-rtc-av": { + "version": "1.1.11", + "license": [ + "MIT" + ] + }, + "danog/php-rtc-codecs": { + "version": "1.1.19", + "license": [ + "BSD-3-Clause" + ] + }, + "danog/php-rtc-datachannel": { + "version": "1.1.10", + "license": [ + "BSD-3-Clause" + ] + }, + "danog/php-rtc-dtls": { + "version": "2.0.20", + "license": [ + "BSD-3-Clause" + ] + }, + "danog/php-rtc-exception": { + "version": "1.1.10", + "license": [ + "BSD-3-Clause" + ] + }, + "danog/php-rtc-ice": { + "version": "2.0.18", + "license": [ + "BSD-3-Clause" + ] + }, + "danog/php-rtc-mdns": { + "version": "1.1.12", + "license": [ + "BSD-3-Clause" + ] + }, + "danog/php-rtc-mixin": { + "version": "2.0.9", + "license": [ + "BSD-3-Clause" + ] + }, + "danog/php-rtc-ntp": { + "version": "1.1.15", + "license": [ + "BSD-3-Clause" + ] + }, + "danog/php-rtc-rtcp": { + "version": "1.1.11", + "license": [ + "BSD-3-Clause" + ] + }, + "danog/php-rtc-rtp": { + "version": "2.0.23", + "license": [ + "BSD-3-Clause" + ] + }, + "danog/php-rtc-rtp-parameter": { + "version": "1.1.8", + "license": [ + "BSD-3-Clause" + ] + }, + "danog/php-rtc-sctp": { + "version": "2.0.14", + "license": [ + "BSD-3-Clause" + ] + }, + "danog/php-rtc-sdp": { + "version": "1.1.12", + "license": [ + "BSD-3-Clause" + ] + }, + "danog/php-rtc-srtp": { + "version": "1.1.16", + "license": [ + "BSD-3-Clause" + ] + }, + "danog/php-rtc-stats": { + "version": "1.1.7", + "license": [ + "BSD-3-Clause" + ] + }, + "danog/php-rtc-stun": { + "version": "2.0.18", + "license": [ + "BSD-3-Clause" + ] + }, + "danog/php-rtc-turn": { + "version": "2.0.9", + "license": [ + "BSD-3-Clause" + ] + }, + "danog/php-rtc-webrtc": { + "version": "2.0.20", + "license": [ + "BSD-3-Clause" + ] + }, + "danog/primemodule": { + "version": "1.0.13", + "license": [ + "AGPL-3.0-only" + ] + }, + "danog/telegram-entities": { + "version": "1.1.0", + "license": [ + "Apache-2.0" + ] + }, + "danog/tg-dialog-id": { + "version": "2.0.0", + "license": [ + "Apache-2.0" + ] + }, + "danog/tg-file-decoder": { + "version": "1.0.2", + "license": [ + "AGPL-3.0-only" + ] + }, + "dasprid/enum": { + "version": "1.0.7", + "license": [ + "BSD-2-Clause" + ] + }, + "daverandom/libdns": { + "version": "v2.1.0", + "license": [ + "MIT" + ] + }, + "kelunik/certificate": { + "version": "v1.1.3", + "license": [ + "MIT" + ] + }, + "league/uri": { + "version": "7.8.1", + "license": [ + "MIT" + ] + }, + "league/uri-components": { + "version": "7.8.1", + "license": [ + "MIT" + ] + }, + "league/uri-interfaces": { + "version": "7.8.1", + "license": [ + "MIT" + ] + }, + "monolog/monolog": { + "version": "3.12.1", + "license": [ + "MIT" + ] + }, + "myclabs/deep-copy": { + "version": "1.14.0", + "license": [ + "MIT" + ] + }, + "nikic/php-parser": { + "version": "v5.9.0", + "license": [ + "BSD-3-Clause" + ] + }, + "paragonie/constant_time_encoding": { + "version": "v3.1.3", + "license": [ + "MIT" + ] + }, + "phar-io/manifest": { + "version": "2.0.4", + "license": [ + "BSD-3-Clause" + ] + }, + "phar-io/version": { + "version": "3.2.1", + "license": [ + "BSD-3-Clause" + ] + }, + "phpseclib/phpseclib": { + "version": "4.0.2", + "license": [ + "MIT" + ] + }, + "phpstan/phpstan": { + "version": "2.3.1", + "license": [ + "MIT" + ] + }, + "phpunit/php-code-coverage": { + "version": "12.5.8", + "license": [ + "BSD-3-Clause" + ] + }, + "phpunit/php-file-iterator": { + "version": "6.0.2", + "license": [ + "BSD-3-Clause" + ] + }, + "phpunit/php-invoker": { + "version": "6.0.0", + "license": [ + "BSD-3-Clause" + ] + }, + "phpunit/php-text-template": { + "version": "5.0.1", + "license": [ + "BSD-3-Clause" + ] + }, + "phpunit/php-timer": { + "version": "8.0.0", + "license": [ + "BSD-3-Clause" + ] + }, + "phpunit/phpunit": { + "version": "12.5.39", + "license": [ + "BSD-3-Clause" + ] + }, + "promphp/prometheus_client_php": { + "version": "v2.15.1", + "license": [ + "Apache-2.0" + ] + }, + "psr/http-factory": { + "version": "1.1.0", + "license": [ + "MIT" + ] + }, + "psr/http-message": { + "version": "2.0", + "license": [ + "MIT" + ] + }, + "psr/log": { + "version": "3.0.2", + "license": [ + "MIT" + ] + }, + "ramsey/collection": { + "version": "2.1.1", + "license": [ + "MIT" + ] + }, + "ramsey/uuid": { + "version": "4.9.4", + "license": [ + "MIT" + ] + }, + "revolt/event-loop": { + "version": "v1.0.9", + "license": [ + "MIT" + ] + }, + "sebastian/cli-parser": { + "version": "4.2.1", + "license": [ + "BSD-3-Clause" + ] + }, + "sebastian/comparator": { + "version": "7.1.8", + "license": [ + "BSD-3-Clause" + ] + }, + "sebastian/complexity": { + "version": "5.0.0", + "license": [ + "BSD-3-Clause" + ] + }, + "sebastian/diff": { + "version": "7.0.1", + "license": [ + "BSD-3-Clause" + ] + }, + "sebastian/environment": { + "version": "8.1.2", + "license": [ + "BSD-3-Clause" + ] + }, + "sebastian/exporter": { + "version": "7.0.3", + "license": [ + "BSD-3-Clause" + ] + }, + "sebastian/global-state": { + "version": "8.0.3", + "license": [ + "BSD-3-Clause" + ] + }, + "sebastian/lines-of-code": { + "version": "4.0.1", + "license": [ + "BSD-3-Clause" + ] + }, + "sebastian/object-enumerator": { + "version": "7.0.0", + "license": [ + "BSD-3-Clause" + ] + }, + "sebastian/object-reflector": { + "version": "5.0.0", + "license": [ + "BSD-3-Clause" + ] + }, + "sebastian/recursion-context": { + "version": "7.0.1", + "license": [ + "BSD-3-Clause" + ] + }, + "sebastian/type": { + "version": "6.0.4", + "license": [ + "BSD-3-Clause" + ] + }, + "sebastian/version": { + "version": "6.0.1", + "license": [ + "BSD-3-Clause" + ] + }, + "squizlabs/php_codesniffer": { + "version": "4.0.4", + "license": [ + "BSD-3-Clause" + ] + }, + "staabm/side-effects-detector": { + "version": "1.0.5", + "license": [ + "MIT" + ] + }, + "symfony/polyfill-iconv": { + "version": "v1.43.0", + "license": [ + "MIT" + ] + }, + "symfony/polyfill-mbstring": { + "version": "v1.43.0", + "license": [ + "MIT" + ] + }, + "symfony/polyfill-php82": { + "version": "v1.43.0", + "license": [ + "MIT" + ] + }, + "symfony/polyfill-php83": { + "version": "v1.43.0", + "license": [ + "MIT" + ] + }, + "symfony/polyfill-php84": { + "version": "v1.43.0", + "license": [ + "MIT" + ] + }, + "symfony/polyfill-php85": { + "version": "v1.43.0", + "license": [ + "MIT" + ] + }, + "symfony/polyfill-php86": { + "version": "v1.43.0", + "license": [ + "MIT" + ] + }, + "theseer/tokenizer": { + "version": "2.0.1", + "license": [ + "BSD-3-Clause" + ] + }, + "webmozart/assert": { + "version": "2.5.0", + "license": [ + "MIT" + ] + }, + "wizardloop/broadcastmanager": { + "version": "3.2.2", + "license": [ + "AGPL-3.0-only" + ] + } + } } diff --git a/docs/composer-show.json b/docs/composer-show.json index 3ff3f31..f61f3b8 100644 --- a/docs/composer-show.json +++ b/docs/composer-show.json @@ -1,751 +1,985 @@ -{ - "locked": [ - { - "name": "amphp/amp", - "direct-dependency": true, - "homepage": "https://amphp.org/amp", - "source": "https://github.com/amphp/amp/tree/v3.1.3", - "version": "v3.1.3", - "description": "A non-blocking concurrency framework for PHP applications.", - "abandoned": false - }, - { - "name": "amphp/byte-stream", - "direct-dependency": false, - "homepage": "https://amphp.org/byte-stream", - "source": "https://github.com/amphp/byte-stream/tree/v2.1.2", - "version": "v2.1.2", - "description": "A stream abstraction to make working with non-blocking I/O simple.", - "abandoned": false - }, - { - "name": "amphp/cache", - "direct-dependency": false, - "homepage": "https://amphp.org/cache", - "source": "https://github.com/amphp/cache/tree/v2.0.1", - "version": "v2.0.1", - "description": "A fiber-aware cache API based on Amp and Revolt.", - "abandoned": false - }, - { - "name": "amphp/dns", - "direct-dependency": false, - "homepage": "https://github.com/amphp/dns", - "source": "https://github.com/amphp/dns/tree/v2.4.1", - "version": "v2.4.1", - "description": "Async DNS resolution for Amp.", - "abandoned": false - }, - { - "name": "amphp/file", - "direct-dependency": true, - "homepage": "https://github.com/amphp/file", - "source": "https://github.com/amphp/file/tree/v3.2.0", - "version": "v3.2.0", - "description": "Non-blocking access to the filesystem based on Amp and Revolt.", - "abandoned": false - }, - { - "name": "amphp/hpack", - "direct-dependency": false, - "homepage": "https://github.com/amphp/hpack", - "source": "https://github.com/amphp/hpack/tree/v3.2.2", - "version": "v3.2.2", - "description": "HTTP/2 HPack implementation.", - "abandoned": false - }, - { - "name": "amphp/http", - "direct-dependency": false, - "homepage": null, - "source": "https://github.com/amphp/http/tree/v2.1.2", - "version": "v2.1.2", - "description": "Basic HTTP primitives which can be shared by servers and clients.", - "abandoned": false - }, - { - "name": "amphp/http-client", - "direct-dependency": true, - "homepage": "https://amphp.org/http-client", - "source": "https://github.com/amphp/http-client/tree/v5.3.6", - "version": "v5.3.6", - "description": "An advanced async HTTP client library for PHP, enabling efficient, non-blocking, and concurrent requests and responses.", - "abandoned": false - }, - { - "name": "amphp/http-client-cookies", - "direct-dependency": false, - "homepage": "https://github.com/amphp/http-client-cookies", - "source": "https://github.com/amphp/http-client-cookies/tree/v2.0.0", - "version": "v2.0.0", - "description": "Automatic cookie handling for Amp's HTTP client.", - "abandoned": false - }, - { - "name": "amphp/http-server", - "direct-dependency": false, - "homepage": "https://github.com/amphp/http-server", - "source": "https://github.com/amphp/http-server/tree/v3.4.7", - "version": "v3.4.7", - "description": "A non-blocking HTTP application server for PHP based on Amp.", - "abandoned": false - }, - { - "name": "amphp/log", - "direct-dependency": false, - "homepage": "https://github.com/amphp/log", - "source": "https://github.com/amphp/log/tree/v2.0.0", - "version": "v2.0.0", - "description": "Non-blocking logging for PHP based on Amp, Revolt, and Monolog.", - "abandoned": false - }, - { - "name": "amphp/mysql", - "direct-dependency": false, - "homepage": null, - "source": "https://github.com/amphp/mysql/tree/v3.1.1", - "version": "v3.1.1", - "description": "Asynchronous MySQL client for PHP based on Amp.", - "abandoned": false - }, - { - "name": "amphp/parallel", - "direct-dependency": false, - "homepage": "https://github.com/amphp/parallel", - "source": "https://github.com/amphp/parallel/tree/v2.4.0", - "version": "v2.4.0", - "description": "Parallel processing component for Amp.", - "abandoned": false - }, - { - "name": "amphp/parser", - "direct-dependency": false, - "homepage": "https://github.com/amphp/parser", - "source": "https://github.com/amphp/parser/tree/v1.1.1", - "version": "v1.1.1", - "description": "A generator parser to make streaming parsers simple.", - "abandoned": false - }, - { - "name": "amphp/pipeline", - "direct-dependency": false, - "homepage": "https://amphp.org/pipeline", - "source": "https://github.com/amphp/pipeline/tree/v1.2.7", - "version": "v1.2.7", - "description": "Asynchronous iterators and operators.", - "abandoned": false - }, - { - "name": "amphp/postgres", - "direct-dependency": false, - "homepage": "https://amphp.org", - "source": "https://github.com/amphp/postgres/tree/v2.2.1", - "version": "v2.2.1", - "description": "Asynchronous PostgreSQL client for Amp.", - "abandoned": false - }, - { - "name": "amphp/process", - "direct-dependency": false, - "homepage": "https://amphp.org/process", - "source": "https://github.com/amphp/process/tree/v2.1.0", - "version": "v2.1.0", - "description": "A fiber-aware process manager based on Amp and Revolt.", - "abandoned": false - }, - { - "name": "amphp/redis", - "direct-dependency": false, - "homepage": "https://amphp.org/redis", - "source": "https://github.com/amphp/redis/tree/v2.0.4", - "version": "v2.0.4", - "description": "Efficient asynchronous communication with Redis servers, enabling scalable and responsive data storage and retrieval.", - "abandoned": false - }, - { - "name": "amphp/serialization", - "direct-dependency": false, - "homepage": "https://github.com/amphp/serialization", - "source": "https://github.com/amphp/serialization/tree/v1.1.0", - "version": "v1.1.0", - "description": "Serialization tools for IPC and data storage in PHP.", - "abandoned": false - }, - { - "name": "amphp/socket", - "direct-dependency": false, - "homepage": "https://github.com/amphp/socket", - "source": "https://github.com/amphp/socket/tree/v2.4.1", - "version": "v2.4.1", - "description": "Non-blocking socket connection / server implementations based on Amp and Revolt.", - "abandoned": false - }, - { - "name": "amphp/sql", - "direct-dependency": false, - "homepage": "https://amphp.org", - "source": "https://github.com/amphp/sql/tree/v2.1.1", - "version": "v2.1.1", - "description": "Asynchronous SQL client for Amp.", - "abandoned": false - }, - { - "name": "amphp/sql-common", - "direct-dependency": false, - "homepage": "https://amphp.org", - "source": "https://github.com/amphp/sql-common/tree/v2.0.4", - "version": "v2.0.4", - "description": "Common classes for non-blocking SQL implementations.", - "abandoned": false - }, - { - "name": "amphp/sync", - "direct-dependency": false, - "homepage": "https://github.com/amphp/sync", - "source": "https://github.com/amphp/sync/tree/v2.3.0", - "version": "v2.3.0", - "description": "Non-blocking synchronization primitives for PHP based on Amp and Revolt.", - "abandoned": false - }, - { - "name": "amphp/websocket", - "direct-dependency": false, - "homepage": "https://github.com/amphp/websocket", - "source": "https://github.com/amphp/websocket/tree/v2.0.4", - "version": "v2.0.4", - "description": "Shared code for websocket servers and clients.", - "abandoned": false - }, - { - "name": "amphp/websocket-client", - "direct-dependency": false, - "homepage": null, - "source": "https://github.com/amphp/websocket-client/tree/v2.0.2", - "version": "v2.0.2", - "description": "Async WebSocket client for PHP based on Amp.", - "abandoned": false - }, - { - "name": "bacon/bacon-qr-code", - "direct-dependency": false, - "homepage": "https://github.com/Bacon/BaconQrCode", - "source": "https://github.com/Bacon/BaconQrCode/tree/v3.1.1", - "version": "v3.1.1", - "description": "BaconQrCode is a QR code generator for PHP.", - "abandoned": false - }, - { - "name": "danog/async-orm", - "direct-dependency": false, - "homepage": null, - "source": "https://github.com/danog/AsyncOrm/tree/1.1.4", - "version": "1.1.4", - "description": "Async ORM based on AMPHP v3 and fibers.", - "abandoned": false - }, - { - "name": "danog/better-prometheus", - "direct-dependency": false, - "homepage": null, - "source": "https://github.com/danog/better-prometheus/tree/0.1.1", - "version": "0.1.1", - "description": "A better Prometheus library for PHP applications", - "abandoned": false - }, - { - "name": "danog/dns-over-https", - "direct-dependency": false, - "homepage": "https://github.com/danog/dns-over-https", - "source": "https://github.com/danog/dns-over-https/tree/1.0.1", - "version": "1.0.1", - "description": "Async DNS-over-HTTPS resolution for Amp.", - "abandoned": false - }, - { - "name": "danog/ipc", - "direct-dependency": false, - "homepage": "https://github.com/danog/ipc", - "source": "https://github.com/danog/ipc/tree/1.0.1", - "version": "1.0.1", - "description": "IPC component for Amp.", - "abandoned": false - }, - { - "name": "danog/libdns-json", - "direct-dependency": false, - "homepage": "https://github.com/danog/libdns-json", - "source": "https://github.com/danog/LibDNSJson/tree/0.2.1", - "version": "0.2.1", - "description": "Encoder/decoder for google's JSON DNS message format based on libdns", - "abandoned": false - }, - { - "name": "danog/loop", - "direct-dependency": false, - "homepage": "https://github.com/danog/loop", - "source": "https://github.com/danog/loop/tree/1.1.1", - "version": "1.1.1", - "description": "Loop abstraction for AMPHP.", - "abandoned": false - }, - { - "name": "danog/madelineproto", - "direct-dependency": true, - "homepage": "https://docs.madelineproto.xyz", - "source": "https://github.com/danog/MadelineProto/tree/8.7.0", - "version": "8.7.0", - "description": "Async PHP client API for the telegram MTProto protocol.", - "abandoned": false - }, - { - "name": "danog/primemodule", - "direct-dependency": false, - "homepage": null, - "source": "https://github.com/danog/PrimeModule/tree/1.0.13", - "version": "1.0.13", - "description": "Prime module capable of doing prime factorization of huge numbers very quickly.\"", - "abandoned": false - }, - { - "name": "danog/telegram-entities", - "direct-dependency": false, - "homepage": null, - "source": "https://github.com/danog/telegram-entities/tree/1.0.5", - "version": "1.0.5", - "description": "A library to work with Telegram UTF-16 styled text entities.", - "abandoned": false - }, - { - "name": "danog/tg-dialog-id", - "direct-dependency": false, - "homepage": null, - "source": "https://github.com/danog/tg-dialog-id/tree/2.0.0", - "version": "2.0.0", - "description": "A library to work with Telegram bot API dialog IDs", - "abandoned": false - }, - { - "name": "danog/tg-file-decoder", - "direct-dependency": false, - "homepage": null, - "source": "https://github.com/danog/tg-file-decoder/tree/1.0.2", - "version": "1.0.2", - "description": "Decode Telegram bot API file IDs", - "abandoned": false - }, - { - "name": "dasprid/enum", - "direct-dependency": false, - "homepage": null, - "source": "https://github.com/DASPRiD/Enum/tree/1.0.7", - "version": "1.0.7", - "description": "PHP 7.1 enum implementation", - "abandoned": false - }, - { - "name": "daverandom/libdns", - "direct-dependency": false, - "homepage": null, - "source": "https://github.com/DaveRandom/LibDNS/tree/v2.1.0", - "version": "v2.1.0", - "description": "DNS protocol implementation written in pure PHP", - "abandoned": false - }, - { - "name": "kelunik/certificate", - "direct-dependency": false, - "homepage": null, - "source": "https://github.com/kelunik/certificate/tree/v1.1.3", - "version": "v1.1.3", - "description": "Access certificate details and transform between different formats.", - "abandoned": false - }, - { - "name": "league/uri", - "direct-dependency": false, - "homepage": "https://uri.thephpleague.com", - "source": "https://github.com/thephpleague/uri/tree/7.8.1", - "version": "7.8.1", - "description": "URI manipulation library", - "abandoned": false - }, - { - "name": "league/uri-components", - "direct-dependency": false, - "homepage": "http://uri.thephpleague.com", - "source": "https://github.com/thephpleague/uri-components/tree/7.8.1", - "version": "7.8.1", - "description": "URI components manipulation library", - "abandoned": false - }, - { - "name": "league/uri-interfaces", - "direct-dependency": false, - "homepage": "https://uri.thephpleague.com", - "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.1", - "version": "7.8.1", - "description": "Common tools for parsing and resolving RFC3987/RFC3986 URI", - "abandoned": false - }, - { - "name": "monolog/monolog", - "direct-dependency": false, - "homepage": "https://github.com/Seldaek/monolog", - "source": "https://github.com/Seldaek/monolog/tree/3.12.1", - "version": "3.12.1", - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "abandoned": false - }, - { - "name": "myclabs/deep-copy", - "direct-dependency": false, - "homepage": null, - "source": "https://github.com/myclabs/DeepCopy/tree/1.14.0", - "version": "1.14.0", - "description": "Create deep copies (clones) of your objects", - "abandoned": false - }, - { - "name": "nikic/php-parser", - "direct-dependency": false, - "homepage": null, - "source": "https://github.com/nikic/PHP-Parser/tree/v5.9.0", - "version": "v5.9.0", - "description": "A PHP parser written in PHP", - "abandoned": false - }, - { - "name": "paragonie/constant_time_encoding", - "direct-dependency": false, - "homepage": null, - "source": "https://github.com/paragonie/constant_time_encoding", - "version": "v3.1.3", - "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", - "abandoned": false - }, - { - "name": "paragonie/random_compat", - "direct-dependency": false, - "homepage": null, - "source": "https://github.com/paragonie/random_compat", - "version": "v9.99.100", - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "abandoned": false - }, - { - "name": "phar-io/manifest", - "direct-dependency": false, - "homepage": null, - "source": "https://github.com/phar-io/manifest/tree/2.0.4", - "version": "2.0.4", - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "abandoned": false - }, - { - "name": "phar-io/version", - "direct-dependency": false, - "homepage": null, - "source": "https://github.com/phar-io/version/tree/3.2.1", - "version": "3.2.1", - "description": "Library for handling version information and constraints", - "abandoned": false - }, - { - "name": "phpseclib/phpseclib", - "direct-dependency": false, - "homepage": "http://phpseclib.sourceforge.net", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.57", - "version": "3.0.57", - "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", - "abandoned": false - }, - { - "name": "phpstan/phpstan", - "direct-dependency": true, - "homepage": null, - "source": "https://github.com/phpstan/phpstan-src", - "version": "2.3.1", - "description": "PHPStan - PHP Static Analysis Tool", - "abandoned": false - }, - { - "name": "phpunit/php-code-coverage", - "direct-dependency": false, - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.5.8", - "version": "12.5.8", - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "abandoned": false - }, - { - "name": "phpunit/php-file-iterator", - "direct-dependency": false, - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/6.0.2", - "version": "6.0.2", - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "abandoned": false - }, - { - "name": "phpunit/php-invoker", - "direct-dependency": false, - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/6.0.0", - "version": "6.0.0", - "description": "Invoke callables with a timeout", - "abandoned": false - }, - { - "name": "phpunit/php-text-template", - "direct-dependency": false, - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/5.0.1", - "version": "5.0.1", - "description": "Simple template engine.", - "abandoned": false - }, - { - "name": "phpunit/php-timer", - "direct-dependency": false, - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "source": "https://github.com/sebastianbergmann/php-timer/tree/8.0.0", - "version": "8.0.0", - "description": "Utility class for timing", - "abandoned": false - }, - { - "name": "phpunit/phpunit", - "direct-dependency": true, - "homepage": "https://phpunit.de/", - "source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.39", - "version": "12.5.39", - "description": "The PHP Unit Testing framework.", - "abandoned": false - }, - { - "name": "promphp/prometheus_client_php", - "direct-dependency": false, - "homepage": null, - "source": "https://github.com/PromPHP/prometheus_client_php/tree/v2.15.1", - "version": "v2.15.1", - "description": "Prometheus instrumentation library for PHP applications.", - "abandoned": false - }, - { - "name": "psr/http-factory", - "direct-dependency": false, - "homepage": null, - "source": "https://github.com/php-fig/http-factory", - "version": "1.1.0", - "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", - "abandoned": false - }, - { - "name": "psr/http-message", - "direct-dependency": false, - "homepage": "https://github.com/php-fig/http-message", - "source": "https://github.com/php-fig/http-message/tree/2.0", - "version": "2.0", - "description": "Common interface for HTTP messages", - "abandoned": false - }, - { - "name": "psr/log", - "direct-dependency": false, - "homepage": "https://github.com/php-fig/log", - "source": "https://github.com/php-fig/log/tree/3.0.2", - "version": "3.0.2", - "description": "Common interface for logging libraries", - "abandoned": false - }, - { - "name": "revolt/event-loop", - "direct-dependency": true, - "homepage": null, - "source": "https://github.com/revoltphp/event-loop/tree/v1.0.9", - "version": "v1.0.9", - "description": "Rock-solid event loop for concurrent PHP applications.", - "abandoned": false - }, - { - "name": "sebastian/cli-parser", - "direct-dependency": false, - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/4.2.1", - "version": "4.2.1", - "description": "Library for parsing CLI options", - "abandoned": false - }, - { - "name": "sebastian/comparator", - "direct-dependency": false, - "homepage": "https://github.com/sebastianbergmann/comparator", - "source": "https://github.com/sebastianbergmann/comparator/tree/7.1.8", - "version": "7.1.8", - "description": "Provides the functionality to compare PHP values for equality", - "abandoned": false - }, - { - "name": "sebastian/complexity", - "direct-dependency": false, - "homepage": "https://github.com/sebastianbergmann/complexity", - "source": "https://github.com/sebastianbergmann/complexity/tree/5.0.0", - "version": "5.0.0", - "description": "Library for calculating the complexity of PHP code units", - "abandoned": false - }, - { - "name": "sebastian/diff", - "direct-dependency": false, - "homepage": "https://github.com/sebastianbergmann/diff", - "source": "https://github.com/sebastianbergmann/diff/tree/7.0.1", - "version": "7.0.1", - "description": "Diff implementation", - "abandoned": false - }, - { - "name": "sebastian/environment", - "direct-dependency": false, - "homepage": "https://github.com/sebastianbergmann/environment", - "source": "https://github.com/sebastianbergmann/environment/tree/8.1.2", - "version": "8.1.2", - "description": "Provides functionality to handle HHVM/PHP environments", - "abandoned": false - }, - { - "name": "sebastian/exporter", - "direct-dependency": false, - "homepage": "https://www.github.com/sebastianbergmann/exporter", - "source": "https://github.com/sebastianbergmann/exporter/tree/7.0.3", - "version": "7.0.3", - "description": "Provides the functionality to export PHP variables for visualization", - "abandoned": false - }, - { - "name": "sebastian/global-state", - "direct-dependency": false, - "homepage": "https://www.github.com/sebastianbergmann/global-state", - "source": "https://github.com/sebastianbergmann/global-state/tree/8.0.3", - "version": "8.0.3", - "description": "Snapshotting of global state", - "abandoned": false - }, - { - "name": "sebastian/lines-of-code", - "direct-dependency": false, - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/4.0.1", - "version": "4.0.1", - "description": "Library for counting the lines of code in PHP source code", - "abandoned": false - }, - { - "name": "sebastian/object-enumerator", - "direct-dependency": false, - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/7.0.0", - "version": "7.0.0", - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "abandoned": false - }, - { - "name": "sebastian/object-reflector", - "direct-dependency": false, - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/5.0.0", - "version": "5.0.0", - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "abandoned": false - }, - { - "name": "sebastian/recursion-context", - "direct-dependency": false, - "homepage": "https://github.com/sebastianbergmann/recursion-context", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/7.0.1", - "version": "7.0.1", - "description": "Provides functionality to recursively process PHP variables", - "abandoned": false - }, - { - "name": "sebastian/type", - "direct-dependency": false, - "homepage": "https://github.com/sebastianbergmann/type", - "source": "https://github.com/sebastianbergmann/type/tree/6.0.4", - "version": "6.0.4", - "description": "Collection of value objects that represent the types of the PHP type system", - "abandoned": false - }, - { - "name": "sebastian/version", - "direct-dependency": false, - "homepage": "https://github.com/sebastianbergmann/version", - "source": "https://github.com/sebastianbergmann/version/tree/6.0.1", - "version": "6.0.1", - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "abandoned": false - }, - { - "name": "squizlabs/php_codesniffer", - "direct-dependency": true, - "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", - "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", - "version": "4.0.4", - "description": "PHP_CodeSniffer tokenizes PHP files and detects violations of a defined set of coding standards.", - "abandoned": false - }, - { - "name": "staabm/side-effects-detector", - "direct-dependency": false, - "homepage": null, - "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5", - "version": "1.0.5", - "description": "A static analysis tool to detect side effects in PHP code", - "abandoned": false - }, - { - "name": "symfony/polyfill-mbstring", - "direct-dependency": false, - "homepage": "https://symfony.com", - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.43.0", - "version": "v1.43.0", - "description": "Symfony polyfill for the Mbstring extension", - "abandoned": false - }, - { - "name": "symfony/polyfill-php83", - "direct-dependency": false, - "homepage": "https://symfony.com", - "source": "https://github.com/symfony/polyfill-php83/tree/v1.43.0", - "version": "v1.43.0", - "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", - "abandoned": false - }, - { - "name": "theseer/tokenizer", - "direct-dependency": false, - "homepage": null, - "source": "https://github.com/theseer/tokenizer/tree/2.0.1", - "version": "2.0.1", - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "abandoned": false - }, - { - "name": "webmozart/assert", - "direct-dependency": false, - "homepage": null, - "source": "https://github.com/webmozarts/assert/tree/1.12.1", - "version": "1.12.1", - "description": "Assertions to validate method input/output with nice error messages.", - "abandoned": false - }, - { - "name": "wizardloop/broadcastmanager", - "direct-dependency": true, - "homepage": "https://github.com/WizardLoop/BroadcastManager", - "source": "https://github.com/WizardLoop/BroadcastManager", - "version": "3.2.2", - "description": "High-performance Telegram broadcast manager for MadelineProto", - "abandoned": false - } - ] +{ + "locked": [ + { + "name": "amphp/amp", + "direct-dependency": true, + "homepage": "https://amphp.org/amp", + "source": "https://github.com/amphp/amp/tree/v3.1.3", + "version": "v3.1.3", + "description": "A non-blocking concurrency framework for PHP applications.", + "abandoned": false + }, + { + "name": "amphp/byte-stream", + "direct-dependency": false, + "homepage": "https://amphp.org/byte-stream", + "source": "https://github.com/amphp/byte-stream/tree/v2.1.2", + "version": "v2.1.2", + "description": "A stream abstraction to make working with non-blocking I/O simple.", + "abandoned": false + }, + { + "name": "amphp/cache", + "direct-dependency": false, + "homepage": "https://amphp.org/cache", + "source": "https://github.com/amphp/cache/tree/v2.0.1", + "version": "v2.0.1", + "description": "A fiber-aware cache API based on Amp and Revolt.", + "abandoned": false + }, + { + "name": "amphp/dns", + "direct-dependency": false, + "homepage": "https://github.com/amphp/dns", + "source": "https://github.com/amphp/dns/tree/v2.4.1", + "version": "v2.4.1", + "description": "Async DNS resolution for Amp.", + "abandoned": false + }, + { + "name": "amphp/file", + "direct-dependency": true, + "homepage": "https://github.com/amphp/file", + "source": "https://github.com/amphp/file/tree/v3.2.0", + "version": "v3.2.0", + "description": "Non-blocking access to the filesystem based on Amp and Revolt.", + "abandoned": false + }, + { + "name": "amphp/hpack", + "direct-dependency": false, + "homepage": "https://github.com/amphp/hpack", + "source": "https://github.com/amphp/hpack/tree/v3.2.2", + "version": "v3.2.2", + "description": "HTTP/2 HPack implementation.", + "abandoned": false + }, + { + "name": "amphp/http", + "direct-dependency": false, + "homepage": null, + "source": "https://github.com/amphp/http/tree/v2.1.2", + "version": "v2.1.2", + "description": "Basic HTTP primitives which can be shared by servers and clients.", + "abandoned": false + }, + { + "name": "amphp/http-client", + "direct-dependency": true, + "homepage": "https://amphp.org/http-client", + "source": "https://github.com/amphp/http-client/tree/v5.3.6", + "version": "v5.3.6", + "description": "An advanced async HTTP client library for PHP, enabling efficient, non-blocking, and concurrent requests and responses.", + "abandoned": false + }, + { + "name": "amphp/http-client-cookies", + "direct-dependency": false, + "homepage": "https://github.com/amphp/http-client-cookies", + "source": "https://github.com/amphp/http-client-cookies/tree/v2.0.0", + "version": "v2.0.0", + "description": "Automatic cookie handling for Amp's HTTP client.", + "abandoned": false + }, + { + "name": "amphp/http-server", + "direct-dependency": false, + "homepage": "https://github.com/amphp/http-server", + "source": "https://github.com/amphp/http-server/tree/v3.4.7", + "version": "v3.4.7", + "description": "A non-blocking HTTP application server for PHP based on Amp.", + "abandoned": false + }, + { + "name": "amphp/log", + "direct-dependency": false, + "homepage": "https://github.com/amphp/log", + "source": "https://github.com/amphp/log/tree/v2.0.0", + "version": "v2.0.0", + "description": "Non-blocking logging for PHP based on Amp, Revolt, and Monolog.", + "abandoned": false + }, + { + "name": "amphp/mysql", + "direct-dependency": false, + "homepage": null, + "source": "https://github.com/amphp/mysql/tree/v3.1.1", + "version": "v3.1.1", + "description": "Asynchronous MySQL client for PHP based on Amp.", + "abandoned": false + }, + { + "name": "amphp/parallel", + "direct-dependency": false, + "homepage": "https://github.com/amphp/parallel", + "source": "https://github.com/amphp/parallel/tree/v2.4.0", + "version": "v2.4.0", + "description": "Parallel processing component for Amp.", + "abandoned": false + }, + { + "name": "amphp/parser", + "direct-dependency": false, + "homepage": "https://github.com/amphp/parser", + "source": "https://github.com/amphp/parser/tree/v1.1.1", + "version": "v1.1.1", + "description": "A generator parser to make streaming parsers simple.", + "abandoned": false + }, + { + "name": "amphp/pipeline", + "direct-dependency": false, + "homepage": "https://amphp.org/pipeline", + "source": "https://github.com/amphp/pipeline/tree/v1.2.7", + "version": "v1.2.7", + "description": "Asynchronous iterators and operators.", + "abandoned": false + }, + { + "name": "amphp/postgres", + "direct-dependency": false, + "homepage": "https://amphp.org", + "source": "https://github.com/amphp/postgres/tree/v2.2.1", + "version": "v2.2.1", + "description": "Asynchronous PostgreSQL client for Amp.", + "abandoned": false + }, + { + "name": "amphp/process", + "direct-dependency": false, + "homepage": "https://amphp.org/process", + "source": "https://github.com/amphp/process/tree/v2.1.0", + "version": "v2.1.0", + "description": "A fiber-aware process manager based on Amp and Revolt.", + "abandoned": false + }, + { + "name": "amphp/redis", + "direct-dependency": false, + "homepage": "https://amphp.org/redis", + "source": "https://github.com/amphp/redis/tree/v2.0.4", + "version": "v2.0.4", + "description": "Efficient asynchronous communication with Redis servers, enabling scalable and responsive data storage and retrieval.", + "abandoned": false + }, + { + "name": "amphp/serialization", + "direct-dependency": false, + "homepage": "https://github.com/amphp/serialization", + "source": "https://github.com/amphp/serialization/tree/v1.1.0", + "version": "v1.1.0", + "description": "Serialization tools for IPC and data storage in PHP.", + "abandoned": false + }, + { + "name": "amphp/socket", + "direct-dependency": false, + "homepage": "https://github.com/amphp/socket", + "source": "https://github.com/amphp/socket/tree/v2.4.1", + "version": "v2.4.1", + "description": "Non-blocking socket connection / server implementations based on Amp and Revolt.", + "abandoned": false + }, + { + "name": "amphp/sql", + "direct-dependency": false, + "homepage": "https://amphp.org", + "source": "https://github.com/amphp/sql/tree/v2.1.1", + "version": "v2.1.1", + "description": "Asynchronous SQL client for Amp.", + "abandoned": false + }, + { + "name": "amphp/sql-common", + "direct-dependency": false, + "homepage": "https://amphp.org", + "source": "https://github.com/amphp/sql-common/tree/v2.0.4", + "version": "v2.0.4", + "description": "Common classes for non-blocking SQL implementations.", + "abandoned": false + }, + { + "name": "amphp/sync", + "direct-dependency": false, + "homepage": "https://github.com/amphp/sync", + "source": "https://github.com/amphp/sync/tree/v2.3.0", + "version": "v2.3.0", + "description": "Non-blocking synchronization primitives for PHP based on Amp and Revolt.", + "abandoned": false + }, + { + "name": "amphp/websocket", + "direct-dependency": false, + "homepage": "https://github.com/amphp/websocket", + "source": "https://github.com/amphp/websocket/tree/v2.0.4", + "version": "v2.0.4", + "description": "Shared code for websocket servers and clients.", + "abandoned": false + }, + { + "name": "amphp/websocket-client", + "direct-dependency": false, + "homepage": null, + "source": "https://github.com/amphp/websocket-client/tree/v2.0.2", + "version": "v2.0.2", + "description": "Async WebSocket client for PHP based on Amp.", + "abandoned": false + }, + { + "name": "bacon/bacon-qr-code", + "direct-dependency": false, + "homepage": "https://github.com/Bacon/BaconQrCode", + "source": "https://github.com/Bacon/BaconQrCode/tree/v3.1.1", + "version": "v3.1.1", + "description": "BaconQrCode is a QR code generator for PHP.", + "abandoned": false + }, + { + "name": "brick/math", + "direct-dependency": false, + "homepage": null, + "source": "https://github.com/brick/math/tree/1.0.0", + "version": "1.0.0", + "description": "Arbitrary-precision arithmetic library", + "abandoned": false + }, + { + "name": "danog/async-orm", + "direct-dependency": false, + "homepage": null, + "source": "https://github.com/danog/AsyncOrm/tree/1.1.6", + "version": "1.1.6", + "description": "Async ORM based on AMPHP v3 and fibers.", + "abandoned": false + }, + { + "name": "danog/better-prometheus", + "direct-dependency": false, + "homepage": null, + "source": "https://github.com/danog/better-prometheus/tree/0.1.1", + "version": "0.1.1", + "description": "A better Prometheus library for PHP applications", + "abandoned": false + }, + { + "name": "danog/dns-over-https", + "direct-dependency": false, + "homepage": "https://github.com/danog/dns-over-https", + "source": "https://github.com/danog/dns-over-https/tree/1.0.1", + "version": "1.0.1", + "description": "Async DNS-over-HTTPS resolution for Amp.", + "abandoned": false + }, + { + "name": "danog/ipc", + "direct-dependency": false, + "homepage": "https://github.com/danog/ipc", + "source": "https://github.com/danog/ipc/tree/1.1.0", + "version": "1.1.0", + "description": "IPC component for Amp.", + "abandoned": false + }, + { + "name": "danog/libdns-json", + "direct-dependency": false, + "homepage": "https://github.com/danog/libdns-json", + "source": "https://github.com/danog/LibDNSJson/tree/0.2.1", + "version": "0.2.1", + "description": "Encoder/decoder for google's JSON DNS message format based on libdns", + "abandoned": false + }, + { + "name": "danog/loop", + "direct-dependency": false, + "homepage": "https://github.com/danog/loop", + "source": "https://github.com/danog/loop/tree/1.1.1", + "version": "1.1.1", + "description": "Loop abstraction for AMPHP.", + "abandoned": false + }, + { + "name": "danog/madelineproto", + "direct-dependency": true, + "homepage": "https://docs.madelineproto.xyz", + "source": "https://github.com/danog/MadelineProto/tree/8.11.10", + "version": "8.11.10", + "description": "Async PHP client API for the telegram MTProto protocol.", + "abandoned": false + }, + { + "name": "danog/php-rtc-av", + "direct-dependency": false, + "homepage": "https://github.com/danog/php-rtc-av", + "source": "https://github.com/danog/php-rtc-av/tree/1.1.11", + "version": "1.1.11", + "description": "FFmpeg/libav FFI bindings for PHP media processing. MadelineProto's PHP 8.2+ fork uses lazy, optional FFI, strict ABI checks, and the modular danog/php-rtc stack.", + "abandoned": false + }, + { + "name": "danog/php-rtc-codecs", + "direct-dependency": false, + "homepage": "https://github.com/danog/php-rtc-codecs", + "source": "https://github.com/danog/php-rtc-codecs/tree/1.1.19", + "version": "1.1.19", + "description": "WebRTC audio/video codec and RTP packetization utilities. MadelineProto's PHP 8.2+ fork adds optional transcoding FFI, VP9 packetization, and the modular danog/php-rtc stack.", + "abandoned": false + }, + { + "name": "danog/php-rtc-datachannel", + "direct-dependency": false, + "homepage": "https://github.com/danog/php-rtc-datachannel", + "source": "https://github.com/danog/php-rtc-datachannel/tree/1.1.10", + "version": "1.1.10", + "description": "A PHP implementation of WebRTC's RTCDataChannel interface. MadelineProto's PHP 8.2+ fork is a Composer-compatible component of the modular danog/php-rtc stack.", + "abandoned": false + }, + { + "name": "danog/php-rtc-dtls", + "direct-dependency": false, + "homepage": "https://github.com/danog/php-rtc-dtls", + "source": "https://github.com/danog/php-rtc-dtls/tree/2.0.20", + "version": "2.0.20", + "description": "Pure-PHP DTLS 1.2 for WebRTC, powered by phpseclib and Amp v3.", + "abandoned": false + }, + { + "name": "danog/php-rtc-exception", + "direct-dependency": false, + "homepage": "https://github.com/danog/php-rtc-exception", + "source": "https://github.com/danog/php-rtc-exception/tree/1.1.10", + "version": "1.1.10", + "description": "Lightweight exceptions shared by the WebRTC components. MadelineProto's PHP 8.2+ fork is a Composer-compatible foundation of the modular danog/php-rtc stack.", + "abandoned": false + }, + { + "name": "danog/php-rtc-ice", + "direct-dependency": false, + "homepage": "https://github.com/danog/php-rtc-ice", + "source": "https://github.com/danog/php-rtc-ice/tree/2.0.18", + "version": "2.0.18", + "description": "WebRTC ICE connectivity in PHP, ported to Amp v3 fibers and sockets. MadelineProto's PHP 8.2+ fork integrates the modular danog/php-rtc STUN, TURN, and mDNS stack.", + "abandoned": false + }, + { + "name": "danog/php-rtc-mdns", + "direct-dependency": false, + "homepage": "https://github.com/danog/php-rtc-mdns", + "source": "https://github.com/danog/php-rtc-mdns/tree/1.1.12", + "version": "1.1.12", + "description": "An Amp v3 Multicast DNS resolver for WebRTC. MadelineProto's PHP 8.2+ fork is a Composer-compatible component of the modular danog/php-rtc stack.", + "abandoned": false + }, + { + "name": "danog/php-rtc-mixin", + "direct-dependency": false, + "homepage": "https://github.com/danog/php-rtc-mixin", + "source": "https://github.com/danog/php-rtc-mixin/tree/2.0.9", + "version": "2.0.9", + "description": "Common PHP classes and traits for WebRTC components. MadelineProto's PHP 8.2+ fork is a Composer-compatible foundation of the modular danog/php-rtc stack.", + "abandoned": false + }, + { + "name": "danog/php-rtc-ntp", + "direct-dependency": false, + "homepage": "https://github.com/danog/php-rtc-ntp", + "source": "https://github.com/danog/php-rtc-ntp/tree/1.1.15", + "version": "1.1.15", + "description": "Pure-PHP NTP timestamp conversion for WebRTC. MadelineProto's PHP 8.2+ fork fixes unsigned 64-bit handling and integrates with the modular danog/php-rtc stack.", + "abandoned": false + }, + { + "name": "danog/php-rtc-rtcp", + "direct-dependency": false, + "homepage": "https://github.com/danog/php-rtc-rtcp", + "source": "https://github.com/danog/php-rtc-rtcp/tree/1.1.11", + "version": "1.1.11", + "description": "Pure-PHP RTCP packet parsing and generation. MadelineProto's PHP 8.2+ fork fixes unsigned NTP handling and integrates with the modular danog/php-rtc stack.", + "abandoned": false + }, + { + "name": "danog/php-rtc-rtp", + "direct-dependency": false, + "homepage": "https://github.com/danog/php-rtc-rtp", + "source": "https://github.com/danog/php-rtc-rtp/tree/2.0.23", + "version": "2.0.23", + "description": "RTP packet and media transport handling for PHP, ported to Amp v3. MadelineProto's PHP 8.2+ fork supports optional media FFI in the modular danog/php-rtc stack.", + "abandoned": false + }, + { + "name": "danog/php-rtc-rtp-parameter", + "direct-dependency": false, + "homepage": "https://github.com/danog/php-rtc-rtp-parameter", + "source": "https://github.com/danog/php-rtc-rtp-parameter/tree/1.1.8", + "version": "1.1.8", + "description": "RTP codec, payload, SSRC, header-extension, and RTCP parameter objects. MadelineProto's PHP 8.2+ fork supports the modular danog/php-rtc stack.", + "abandoned": false + }, + { + "name": "danog/php-rtc-sctp", + "direct-dependency": false, + "homepage": "https://github.com/danog/php-rtc-sctp", + "source": "https://github.com/danog/php-rtc-sctp/tree/2.0.14", + "version": "2.0.14", + "description": "SCTP for PHP WebRTC data channels, ported to Amp v3 fibers and timers. MadelineProto's PHP 8.2+ fork is part of the modular danog/php-rtc stack.", + "abandoned": false + }, + { + "name": "danog/php-rtc-sdp", + "direct-dependency": false, + "homepage": "https://github.com/danog/php-rtc-sdp", + "source": "https://github.com/danog/php-rtc-sdp/tree/1.1.12", + "version": "1.1.12", + "description": "SDP parsing and generation for PHP WebRTC. MadelineProto's PHP 8.2+ fork is a Composer-compatible component of the modular danog/php-rtc stack.", + "abandoned": false + }, + { + "name": "danog/php-rtc-srtp", + "direct-dependency": false, + "homepage": "https://github.com/danog/php-rtc-srtp", + "source": "https://github.com/danog/php-rtc-srtp/tree/1.1.16", + "version": "1.1.16", + "description": "Pure-PHP SRTP and SRTCP encryption using phpseclib, with AES-CM and AES-GCM profiles. MadelineProto's PHP 8.2+ fork removes the libsrtp/FFI dependency.", + "abandoned": false + }, + { + "name": "danog/php-rtc-stats", + "direct-dependency": false, + "homepage": "https://github.com/danog/php-rtc-stats", + "source": "https://github.com/danog/php-rtc-stats/tree/1.1.7", + "version": "1.1.7", + "description": "WebRTC statistics objects for RTP, DTLS, ICE, and media metrics. MadelineProto's PHP 8.2+ fork supports the modular danog/php-rtc stack.", + "abandoned": false + }, + { + "name": "danog/php-rtc-stun", + "direct-dependency": false, + "homepage": "https://github.com/danog/php-rtc-stun", + "source": "https://github.com/danog/php-rtc-stun/tree/2.0.18", + "version": "2.0.18", + "description": "STUN transactions and NAT discovery for PHP, ported to Amp v3 sockets and fibers. MadelineProto's PHP 8.2+ fork supports the modular danog/php-rtc stack.", + "abandoned": false + }, + { + "name": "danog/php-rtc-turn", + "direct-dependency": false, + "homepage": "https://github.com/danog/php-rtc-turn", + "source": "https://github.com/danog/php-rtc-turn/tree/2.0.9", + "version": "2.0.9", + "description": "TURN relay transport for PHP WebRTC, ported to Amp v3 TCP, UDP, and fibers. MadelineProto's PHP 8.2+ fork supports the modular danog/php-rtc stack.", + "abandoned": false + }, + { + "name": "danog/php-rtc-webrtc", + "direct-dependency": false, + "homepage": "https://github.com/danog/php-rtc-webrtc", + "source": "https://github.com/danog/php-rtc-webrtc/tree/2.0.20", + "version": "2.0.20", + "description": "A modular PHP WebRTC stack for PHP 8.2+, ported to Amp v3 with pure-PHP DTLS/SRTP and optional media FFI. Maintained by danog for MadelineProto.", + "abandoned": false + }, + { + "name": "danog/primemodule", + "direct-dependency": false, + "homepage": null, + "source": "https://github.com/danog/PrimeModule/tree/1.0.13", + "version": "1.0.13", + "description": "Prime module capable of doing prime factorization of huge numbers very quickly.\"", + "abandoned": false + }, + { + "name": "danog/telegram-entities", + "direct-dependency": false, + "homepage": null, + "source": "https://github.com/danog/telegram-entities/tree/1.1.0", + "version": "1.1.0", + "description": "A library to work with Telegram UTF-16 styled text entities.", + "abandoned": false + }, + { + "name": "danog/tg-dialog-id", + "direct-dependency": false, + "homepage": null, + "source": "https://github.com/danog/tg-dialog-id/tree/2.0.0", + "version": "2.0.0", + "description": "A library to work with Telegram bot API dialog IDs", + "abandoned": false + }, + { + "name": "danog/tg-file-decoder", + "direct-dependency": false, + "homepage": null, + "source": "https://github.com/danog/tg-file-decoder/tree/1.0.2", + "version": "1.0.2", + "description": "Decode Telegram bot API file IDs", + "abandoned": false + }, + { + "name": "dasprid/enum", + "direct-dependency": false, + "homepage": null, + "source": "https://github.com/DASPRiD/Enum/tree/1.0.7", + "version": "1.0.7", + "description": "PHP 7.1 enum implementation", + "abandoned": false + }, + { + "name": "daverandom/libdns", + "direct-dependency": false, + "homepage": null, + "source": "https://github.com/DaveRandom/LibDNS/tree/v2.1.0", + "version": "v2.1.0", + "description": "DNS protocol implementation written in pure PHP", + "abandoned": false + }, + { + "name": "kelunik/certificate", + "direct-dependency": false, + "homepage": null, + "source": "https://github.com/kelunik/certificate/tree/v1.1.3", + "version": "v1.1.3", + "description": "Access certificate details and transform between different formats.", + "abandoned": false + }, + { + "name": "league/uri", + "direct-dependency": false, + "homepage": "https://uri.thephpleague.com", + "source": "https://github.com/thephpleague/uri/tree/7.8.1", + "version": "7.8.1", + "description": "URI manipulation library", + "abandoned": false + }, + { + "name": "league/uri-components", + "direct-dependency": false, + "homepage": "http://uri.thephpleague.com", + "source": "https://github.com/thephpleague/uri-components/tree/7.8.1", + "version": "7.8.1", + "description": "URI components manipulation library", + "abandoned": false + }, + { + "name": "league/uri-interfaces", + "direct-dependency": false, + "homepage": "https://uri.thephpleague.com", + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.1", + "version": "7.8.1", + "description": "Common tools for parsing and resolving RFC3987/RFC3986 URI", + "abandoned": false + }, + { + "name": "monolog/monolog", + "direct-dependency": false, + "homepage": "https://github.com/Seldaek/monolog", + "source": "https://github.com/Seldaek/monolog/tree/3.12.1", + "version": "3.12.1", + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "abandoned": false + }, + { + "name": "myclabs/deep-copy", + "direct-dependency": false, + "homepage": null, + "source": "https://github.com/myclabs/DeepCopy/tree/1.14.0", + "version": "1.14.0", + "description": "Create deep copies (clones) of your objects", + "abandoned": false + }, + { + "name": "nikic/php-parser", + "direct-dependency": false, + "homepage": null, + "source": "https://github.com/nikic/PHP-Parser/tree/v5.9.0", + "version": "v5.9.0", + "description": "A PHP parser written in PHP", + "abandoned": false + }, + { + "name": "paragonie/constant_time_encoding", + "direct-dependency": false, + "homepage": null, + "source": "https://github.com/paragonie/constant_time_encoding", + "version": "v3.1.3", + "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", + "abandoned": false + }, + { + "name": "phar-io/manifest", + "direct-dependency": false, + "homepage": null, + "source": "https://github.com/phar-io/manifest/tree/2.0.4", + "version": "2.0.4", + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "abandoned": false + }, + { + "name": "phar-io/version", + "direct-dependency": false, + "homepage": null, + "source": "https://github.com/phar-io/version/tree/3.2.1", + "version": "3.2.1", + "description": "Library for handling version information and constraints", + "abandoned": false + }, + { + "name": "phpseclib/phpseclib", + "direct-dependency": false, + "homepage": "https://phpseclib.com/", + "source": "https://github.com/phpseclib/phpseclib/tree/4.0.2", + "version": "4.0.2", + "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", + "abandoned": false + }, + { + "name": "phpstan/phpstan", + "direct-dependency": true, + "homepage": null, + "source": "https://github.com/phpstan/phpstan-src", + "version": "2.3.1", + "description": "PHPStan - PHP Static Analysis Tool", + "abandoned": false + }, + { + "name": "phpunit/php-code-coverage", + "direct-dependency": false, + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.5.8", + "version": "12.5.8", + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "abandoned": false + }, + { + "name": "phpunit/php-file-iterator", + "direct-dependency": false, + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/6.0.2", + "version": "6.0.2", + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "abandoned": false + }, + { + "name": "phpunit/php-invoker", + "direct-dependency": false, + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/6.0.0", + "version": "6.0.0", + "description": "Invoke callables with a timeout", + "abandoned": false + }, + { + "name": "phpunit/php-text-template", + "direct-dependency": false, + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/5.0.1", + "version": "5.0.1", + "description": "Simple template engine.", + "abandoned": false + }, + { + "name": "phpunit/php-timer", + "direct-dependency": false, + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "source": "https://github.com/sebastianbergmann/php-timer/tree/8.0.0", + "version": "8.0.0", + "description": "Utility class for timing", + "abandoned": false + }, + { + "name": "phpunit/phpunit", + "direct-dependency": true, + "homepage": "https://phpunit.de/", + "source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.39", + "version": "12.5.39", + "description": "The PHP Unit Testing framework.", + "abandoned": false + }, + { + "name": "promphp/prometheus_client_php", + "direct-dependency": false, + "homepage": null, + "source": "https://github.com/PromPHP/prometheus_client_php/tree/v2.15.1", + "version": "v2.15.1", + "description": "Prometheus instrumentation library for PHP applications.", + "abandoned": false + }, + { + "name": "psr/http-factory", + "direct-dependency": false, + "homepage": null, + "source": "https://github.com/php-fig/http-factory", + "version": "1.1.0", + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "abandoned": false + }, + { + "name": "psr/http-message", + "direct-dependency": false, + "homepage": "https://github.com/php-fig/http-message", + "source": "https://github.com/php-fig/http-message/tree/2.0", + "version": "2.0", + "description": "Common interface for HTTP messages", + "abandoned": false + }, + { + "name": "psr/log", + "direct-dependency": false, + "homepage": "https://github.com/php-fig/log", + "source": "https://github.com/php-fig/log/tree/3.0.2", + "version": "3.0.2", + "description": "Common interface for logging libraries", + "abandoned": false + }, + { + "name": "ramsey/collection", + "direct-dependency": false, + "homepage": null, + "source": "https://github.com/ramsey/collection/tree/2.1.1", + "version": "2.1.1", + "description": "A PHP library for representing and manipulating collections.", + "abandoned": false + }, + { + "name": "ramsey/uuid", + "direct-dependency": false, + "homepage": null, + "source": "https://github.com/ramsey/uuid/tree/4.9.4", + "version": "4.9.4", + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "abandoned": false + }, + { + "name": "revolt/event-loop", + "direct-dependency": true, + "homepage": null, + "source": "https://github.com/revoltphp/event-loop/tree/v1.0.9", + "version": "v1.0.9", + "description": "Rock-solid event loop for concurrent PHP applications.", + "abandoned": false + }, + { + "name": "sebastian/cli-parser", + "direct-dependency": false, + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/4.2.1", + "version": "4.2.1", + "description": "Library for parsing CLI options", + "abandoned": false + }, + { + "name": "sebastian/comparator", + "direct-dependency": false, + "homepage": "https://github.com/sebastianbergmann/comparator", + "source": "https://github.com/sebastianbergmann/comparator/tree/7.1.8", + "version": "7.1.8", + "description": "Provides the functionality to compare PHP values for equality", + "abandoned": false + }, + { + "name": "sebastian/complexity", + "direct-dependency": false, + "homepage": "https://github.com/sebastianbergmann/complexity", + "source": "https://github.com/sebastianbergmann/complexity/tree/5.0.0", + "version": "5.0.0", + "description": "Library for calculating the complexity of PHP code units", + "abandoned": false + }, + { + "name": "sebastian/diff", + "direct-dependency": false, + "homepage": "https://github.com/sebastianbergmann/diff", + "source": "https://github.com/sebastianbergmann/diff/tree/7.0.1", + "version": "7.0.1", + "description": "Diff implementation", + "abandoned": false + }, + { + "name": "sebastian/environment", + "direct-dependency": false, + "homepage": "https://github.com/sebastianbergmann/environment", + "source": "https://github.com/sebastianbergmann/environment/tree/8.1.2", + "version": "8.1.2", + "description": "Provides functionality to handle HHVM/PHP environments", + "abandoned": false + }, + { + "name": "sebastian/exporter", + "direct-dependency": false, + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "source": "https://github.com/sebastianbergmann/exporter/tree/7.0.3", + "version": "7.0.3", + "description": "Provides the functionality to export PHP variables for visualization", + "abandoned": false + }, + { + "name": "sebastian/global-state", + "direct-dependency": false, + "homepage": "https://www.github.com/sebastianbergmann/global-state", + "source": "https://github.com/sebastianbergmann/global-state/tree/8.0.3", + "version": "8.0.3", + "description": "Snapshotting of global state", + "abandoned": false + }, + { + "name": "sebastian/lines-of-code", + "direct-dependency": false, + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/4.0.1", + "version": "4.0.1", + "description": "Library for counting the lines of code in PHP source code", + "abandoned": false + }, + { + "name": "sebastian/object-enumerator", + "direct-dependency": false, + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/7.0.0", + "version": "7.0.0", + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "abandoned": false + }, + { + "name": "sebastian/object-reflector", + "direct-dependency": false, + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/5.0.0", + "version": "5.0.0", + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "abandoned": false + }, + { + "name": "sebastian/recursion-context", + "direct-dependency": false, + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/7.0.1", + "version": "7.0.1", + "description": "Provides functionality to recursively process PHP variables", + "abandoned": false + }, + { + "name": "sebastian/type", + "direct-dependency": false, + "homepage": "https://github.com/sebastianbergmann/type", + "source": "https://github.com/sebastianbergmann/type/tree/6.0.4", + "version": "6.0.4", + "description": "Collection of value objects that represent the types of the PHP type system", + "abandoned": false + }, + { + "name": "sebastian/version", + "direct-dependency": false, + "homepage": "https://github.com/sebastianbergmann/version", + "source": "https://github.com/sebastianbergmann/version/tree/6.0.1", + "version": "6.0.1", + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "abandoned": false + }, + { + "name": "squizlabs/php_codesniffer", + "direct-dependency": true, + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "version": "4.0.4", + "description": "PHP_CodeSniffer tokenizes PHP files and detects violations of a defined set of coding standards.", + "abandoned": false + }, + { + "name": "staabm/side-effects-detector", + "direct-dependency": false, + "homepage": null, + "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5", + "version": "1.0.5", + "description": "A static analysis tool to detect side effects in PHP code", + "abandoned": false + }, + { + "name": "symfony/polyfill-iconv", + "direct-dependency": false, + "homepage": "https://symfony.com", + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.43.0", + "version": "v1.43.0", + "description": "Symfony polyfill for the Iconv extension", + "abandoned": false + }, + { + "name": "symfony/polyfill-mbstring", + "direct-dependency": false, + "homepage": "https://symfony.com", + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.43.0", + "version": "v1.43.0", + "description": "Symfony polyfill for the Mbstring extension", + "abandoned": false + }, + { + "name": "symfony/polyfill-php82", + "direct-dependency": false, + "homepage": "https://symfony.com", + "source": "https://github.com/symfony/polyfill-php82/tree/v1.43.0", + "version": "v1.43.0", + "description": "Symfony polyfill backporting some PHP 8.2+ features to lower PHP versions", + "abandoned": false + }, + { + "name": "symfony/polyfill-php83", + "direct-dependency": false, + "homepage": "https://symfony.com", + "source": "https://github.com/symfony/polyfill-php83/tree/v1.43.0", + "version": "v1.43.0", + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "abandoned": false + }, + { + "name": "symfony/polyfill-php84", + "direct-dependency": false, + "homepage": "https://symfony.com", + "source": "https://github.com/symfony/polyfill-php84/tree/v1.43.0", + "version": "v1.43.0", + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", + "abandoned": false + }, + { + "name": "symfony/polyfill-php85", + "direct-dependency": false, + "homepage": "https://symfony.com", + "source": "https://github.com/symfony/polyfill-php85/tree/v1.43.0", + "version": "v1.43.0", + "description": "Symfony polyfill backporting some PHP 8.5+ features to lower PHP versions", + "abandoned": false + }, + { + "name": "symfony/polyfill-php86", + "direct-dependency": false, + "homepage": "https://symfony.com", + "source": "https://github.com/symfony/polyfill-php86/tree/v1.43.0", + "version": "v1.43.0", + "description": "Symfony polyfill backporting some PHP 8.6+ features to lower PHP versions", + "abandoned": false + }, + { + "name": "theseer/tokenizer", + "direct-dependency": false, + "homepage": null, + "source": "https://github.com/theseer/tokenizer/tree/2.0.1", + "version": "2.0.1", + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "abandoned": false + }, + { + "name": "webmozart/assert", + "direct-dependency": false, + "homepage": null, + "source": "https://github.com/webmozarts/assert/tree/2.5.0", + "version": "2.5.0", + "description": "Assertions to validate method input/output with nice error messages.", + "abandoned": false + }, + { + "name": "wizardloop/broadcastmanager", + "direct-dependency": true, + "homepage": "https://github.com/WizardLoop/BroadcastManager", + "source": "https://github.com/WizardLoop/BroadcastManager", + "version": "3.2.2", + "description": "High-performance Telegram broadcast manager for MadelineProto", + "abandoned": false + } + ] } diff --git a/docs/dependencies.json b/docs/dependencies.json index 90f9e57..cd94790 100644 --- a/docs/dependencies.json +++ b/docs/dependencies.json @@ -1,6 +1,6 @@ { "schema_version": 1, - "lock_sha256": "a6a66ad9af4ccd6ef0fa7e62f7a7e28a1ae73cf07e8545552710bc9b8477e9bf", + "lock_sha256": "c86f54854a177e458a01cc3943eb6d9eeeb06e29bd670a66a02d9b12bd4ca288", "packages": [ { "name": "amphp/amp", @@ -548,17 +548,38 @@ "status": "LICENSE_TEXT_PRESENT", "findings": [] }, + { + "name": "brick/math", + "version": "1.0.0", + "direct": false, + "scope": "runtime", + "spdx": [ + "MIT" + ], + "source_url": "https://github.com/brick/math.git", + "source_commit": "2effe05d2177c451b86c6a073196a4034c02f211", + "source_permalink": "https://github.com/brick/math/tree/2effe05d2177c451b86c6a073196a4034c02f211", + "license_files": [ + { + "file": "vendor/brick/math/LICENSE", + "sha256": "d2625cc652e6ffa9f16827f1dba2d83ac12b050dc8150a38720420dbb810cae3" + } + ], + "attribution": "Preserve distributed license and copyright notices; additional source obligations depend on the declared license.", + "status": "LICENSE_TEXT_PRESENT", + "findings": [] + }, { "name": "danog/async-orm", - "version": "1.1.4", + "version": "1.1.6", "direct": false, "scope": "runtime", "spdx": [ "Apache-2.0" ], "source_url": "https://github.com/danog/AsyncOrm.git", - "source_commit": "495f335d8ddb9dae8b773025911191f31c45e9ea", - "source_permalink": "https://github.com/danog/AsyncOrm/tree/495f335d8ddb9dae8b773025911191f31c45e9ea", + "source_commit": "4a2a7a54c5002bef6cdf80b338085e9e131bf719", + "source_permalink": "https://github.com/danog/AsyncOrm/tree/4a2a7a54c5002bef6cdf80b338085e9e131bf719", "license_files": [ { "file": "vendor/danog/async-orm/LICENSE", @@ -621,15 +642,15 @@ }, { "name": "danog/ipc", - "version": "1.0.1", + "version": "1.1.0", "direct": false, "scope": "runtime", "spdx": [ "MIT" ], "source_url": "https://github.com/danog/ipc.git", - "source_commit": "505e672b76af6ec623f7ef78efb2416f62ef8e29", - "source_permalink": "https://github.com/danog/ipc/tree/505e672b76af6ec623f7ef78efb2416f62ef8e29", + "source_commit": "eea6de6a57273f32a4f90a652ae1409786be18a0", + "source_permalink": "https://github.com/danog/ipc/tree/eea6de6a57273f32a4f90a652ae1409786be18a0", "license_files": [ { "file": "vendor/danog/ipc/LICENSE", @@ -684,15 +705,15 @@ }, { "name": "danog/madelineproto", - "version": "8.7.0", + "version": "8.11.10", "direct": true, "scope": "runtime", "spdx": [ "AGPL-3.0-only" ], "source_url": "https://github.com/danog/MadelineProto.git", - "source_commit": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "source_permalink": "https://github.com/danog/MadelineProto/tree/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", + "source_commit": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", + "source_permalink": "https://github.com/danog/MadelineProto/tree/49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", "license_files": [ { "file": "vendor/danog/madelineproto/LICENSE", @@ -705,6 +726,408 @@ "Metadata says AGPL-3.0-only; source headers grant version 3 or later. Preserve upstream grant and report mismatch; application license remains AGPL-3.0-only." ] }, + { + "name": "danog/php-rtc-av", + "version": "1.1.11", + "direct": false, + "scope": "runtime", + "spdx": [ + "MIT" + ], + "source_url": "https://github.com/danog/php-rtc-av.git", + "source_commit": "f328e6b5682d7e885dcfab425839921312162008", + "source_permalink": "https://github.com/danog/php-rtc-av/tree/f328e6b5682d7e885dcfab425839921312162008", + "license_files": [ + { + "file": "vendor/danog/php-rtc-av/LICENSE", + "sha256": "c855e00eed64bc882f5ff86daa56c03e76495f47e4b4b192b20bb46e924ba0f8" + } + ], + "attribution": "Preserve distributed license and copyright notices; additional source obligations depend on the declared license.", + "status": "NOT VERIFIED", + "findings": [ + "NOT VERIFIED: declared SPDX not confirmed against a distributed root license text; release review required.", + "Metadata declares MIT, but distributed LICENSE and PHP source headers state BSD-3-Clause. Preserve both upstream texts; the MIT declaration is not confirmed by the distributed license." + ] + }, + { + "name": "danog/php-rtc-codecs", + "version": "1.1.19", + "direct": false, + "scope": "runtime", + "spdx": [ + "BSD-3-Clause" + ], + "source_url": "https://github.com/danog/php-rtc-codecs.git", + "source_commit": "00836382276949099077e19659ff6648b823284f", + "source_permalink": "https://github.com/danog/php-rtc-codecs/tree/00836382276949099077e19659ff6648b823284f", + "license_files": [ + { + "file": "vendor/danog/php-rtc-codecs/LICENSE", + "sha256": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690" + } + ], + "attribution": "Preserve distributed license and copyright notices; additional source obligations depend on the declared license.", + "status": "LICENSE_TEXT_PRESENT", + "findings": [] + }, + { + "name": "danog/php-rtc-datachannel", + "version": "1.1.10", + "direct": false, + "scope": "runtime", + "spdx": [ + "BSD-3-Clause" + ], + "source_url": "https://github.com/danog/php-rtc-datachannel.git", + "source_commit": "3a5ad6f76326514f41a9e1847b41d503e157c459", + "source_permalink": "https://github.com/danog/php-rtc-datachannel/tree/3a5ad6f76326514f41a9e1847b41d503e157c459", + "license_files": [ + { + "file": "vendor/danog/php-rtc-datachannel/LICENSE", + "sha256": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690" + } + ], + "attribution": "Preserve distributed license and copyright notices; additional source obligations depend on the declared license.", + "status": "LICENSE_TEXT_PRESENT", + "findings": [] + }, + { + "name": "danog/php-rtc-dtls", + "version": "2.0.20", + "direct": false, + "scope": "runtime", + "spdx": [ + "BSD-3-Clause" + ], + "source_url": "https://github.com/danog/php-rtc-dtls.git", + "source_commit": "794180b0c3cf54842df44b7bcb44f8fb50f199c8", + "source_permalink": "https://github.com/danog/php-rtc-dtls/tree/794180b0c3cf54842df44b7bcb44f8fb50f199c8", + "license_files": [ + { + "file": "vendor/danog/php-rtc-dtls/LICENSE", + "sha256": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690" + } + ], + "attribution": "Preserve distributed license and copyright notices; additional source obligations depend on the declared license.", + "status": "LICENSE_TEXT_PRESENT", + "findings": [] + }, + { + "name": "danog/php-rtc-exception", + "version": "1.1.10", + "direct": false, + "scope": "runtime", + "spdx": [ + "BSD-3-Clause" + ], + "source_url": "https://github.com/danog/php-rtc-exception.git", + "source_commit": "f9347a5376bb6b7b2fb008e06a8fd9fb6d9febd7", + "source_permalink": "https://github.com/danog/php-rtc-exception/tree/f9347a5376bb6b7b2fb008e06a8fd9fb6d9febd7", + "license_files": [ + { + "file": "vendor/danog/php-rtc-exception/LICENSE", + "sha256": "c855e00eed64bc882f5ff86daa56c03e76495f47e4b4b192b20bb46e924ba0f8" + } + ], + "attribution": "Preserve distributed license and copyright notices; additional source obligations depend on the declared license.", + "status": "LICENSE_TEXT_PRESENT", + "findings": [] + }, + { + "name": "danog/php-rtc-ice", + "version": "2.0.18", + "direct": false, + "scope": "runtime", + "spdx": [ + "BSD-3-Clause" + ], + "source_url": "https://github.com/danog/php-rtc-ice.git", + "source_commit": "91c53e982f334cf3bfe64a9e298d874bba51a3f1", + "source_permalink": "https://github.com/danog/php-rtc-ice/tree/91c53e982f334cf3bfe64a9e298d874bba51a3f1", + "license_files": [ + { + "file": "vendor/danog/php-rtc-ice/LICENSE", + "sha256": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690" + } + ], + "attribution": "Preserve distributed license and copyright notices; additional source obligations depend on the declared license.", + "status": "LICENSE_TEXT_PRESENT", + "findings": [] + }, + { + "name": "danog/php-rtc-mdns", + "version": "1.1.12", + "direct": false, + "scope": "runtime", + "spdx": [ + "BSD-3-Clause" + ], + "source_url": "https://github.com/danog/php-rtc-mdns.git", + "source_commit": "ff3f4315339ddcdd4d71bd4e02156903261ef57a", + "source_permalink": "https://github.com/danog/php-rtc-mdns/tree/ff3f4315339ddcdd4d71bd4e02156903261ef57a", + "license_files": [ + { + "file": "vendor/danog/php-rtc-mdns/LICENSE", + "sha256": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690" + } + ], + "attribution": "Preserve distributed license and copyright notices; additional source obligations depend on the declared license.", + "status": "LICENSE_TEXT_PRESENT", + "findings": [] + }, + { + "name": "danog/php-rtc-mixin", + "version": "2.0.9", + "direct": false, + "scope": "runtime", + "spdx": [ + "BSD-3-Clause" + ], + "source_url": "https://github.com/danog/php-rtc-mixin.git", + "source_commit": "e7a086a7fe01875f52e1f08301195db05e7ff9a5", + "source_permalink": "https://github.com/danog/php-rtc-mixin/tree/e7a086a7fe01875f52e1f08301195db05e7ff9a5", + "license_files": [ + { + "file": "vendor/danog/php-rtc-mixin/LICENSE", + "sha256": "c855e00eed64bc882f5ff86daa56c03e76495f47e4b4b192b20bb46e924ba0f8" + } + ], + "attribution": "Preserve distributed license and copyright notices; additional source obligations depend on the declared license.", + "status": "LICENSE_TEXT_PRESENT", + "findings": [] + }, + { + "name": "danog/php-rtc-ntp", + "version": "1.1.15", + "direct": false, + "scope": "runtime", + "spdx": [ + "BSD-3-Clause" + ], + "source_url": "https://github.com/danog/php-rtc-ntp.git", + "source_commit": "d70dc01410dba146cb808b9c2bf3c28ed1199d20", + "source_permalink": "https://github.com/danog/php-rtc-ntp/tree/d70dc01410dba146cb808b9c2bf3c28ed1199d20", + "license_files": [ + { + "file": "vendor/danog/php-rtc-ntp/LICENSE", + "sha256": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690" + } + ], + "attribution": "Preserve distributed license and copyright notices; additional source obligations depend on the declared license.", + "status": "LICENSE_TEXT_PRESENT", + "findings": [] + }, + { + "name": "danog/php-rtc-rtcp", + "version": "1.1.11", + "direct": false, + "scope": "runtime", + "spdx": [ + "BSD-3-Clause" + ], + "source_url": "https://github.com/danog/php-rtc-rtcp.git", + "source_commit": "f2e7c76d040fb0c4b2e4b62a611d13c6352af145", + "source_permalink": "https://github.com/danog/php-rtc-rtcp/tree/f2e7c76d040fb0c4b2e4b62a611d13c6352af145", + "license_files": [ + { + "file": "vendor/danog/php-rtc-rtcp/LICENSE", + "sha256": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690" + } + ], + "attribution": "Preserve distributed license and copyright notices; additional source obligations depend on the declared license.", + "status": "LICENSE_TEXT_PRESENT", + "findings": [] + }, + { + "name": "danog/php-rtc-rtp", + "version": "2.0.23", + "direct": false, + "scope": "runtime", + "spdx": [ + "BSD-3-Clause" + ], + "source_url": "https://github.com/danog/php-rtc-rtp.git", + "source_commit": "e9bee7a5aae91f6abec1fe9a599eefbce219d967", + "source_permalink": "https://github.com/danog/php-rtc-rtp/tree/e9bee7a5aae91f6abec1fe9a599eefbce219d967", + "license_files": [ + { + "file": "vendor/danog/php-rtc-rtp/LICENSE", + "sha256": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690" + } + ], + "attribution": "Preserve distributed license and copyright notices; additional source obligations depend on the declared license.", + "status": "LICENSE_TEXT_PRESENT", + "findings": [] + }, + { + "name": "danog/php-rtc-rtp-parameter", + "version": "1.1.8", + "direct": false, + "scope": "runtime", + "spdx": [ + "BSD-3-Clause" + ], + "source_url": "https://github.com/danog/php-rtc-rtp-parameter.git", + "source_commit": "cd1e34df768ddae43fc50c1306c2332cf99f07eb", + "source_permalink": "https://github.com/danog/php-rtc-rtp-parameter/tree/cd1e34df768ddae43fc50c1306c2332cf99f07eb", + "license_files": [ + { + "file": "vendor/danog/php-rtc-rtp-parameter/LICENSE", + "sha256": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690" + } + ], + "attribution": "Preserve distributed license and copyright notices; additional source obligations depend on the declared license.", + "status": "LICENSE_TEXT_PRESENT", + "findings": [] + }, + { + "name": "danog/php-rtc-sctp", + "version": "2.0.14", + "direct": false, + "scope": "runtime", + "spdx": [ + "BSD-3-Clause" + ], + "source_url": "https://github.com/danog/php-rtc-sctp.git", + "source_commit": "741697e355abd7eb8e8134b115fab775bb5ccd06", + "source_permalink": "https://github.com/danog/php-rtc-sctp/tree/741697e355abd7eb8e8134b115fab775bb5ccd06", + "license_files": [ + { + "file": "vendor/danog/php-rtc-sctp/LICENSE", + "sha256": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690" + } + ], + "attribution": "Preserve distributed license and copyright notices; additional source obligations depend on the declared license.", + "status": "LICENSE_TEXT_PRESENT", + "findings": [] + }, + { + "name": "danog/php-rtc-sdp", + "version": "1.1.12", + "direct": false, + "scope": "runtime", + "spdx": [ + "BSD-3-Clause" + ], + "source_url": "https://github.com/danog/php-rtc-sdp.git", + "source_commit": "315b9cbaff71625351864c292de0b6ac3b3a39fc", + "source_permalink": "https://github.com/danog/php-rtc-sdp/tree/315b9cbaff71625351864c292de0b6ac3b3a39fc", + "license_files": [ + { + "file": "vendor/danog/php-rtc-sdp/LICENSE", + "sha256": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690" + } + ], + "attribution": "Preserve distributed license and copyright notices; additional source obligations depend on the declared license.", + "status": "LICENSE_TEXT_PRESENT", + "findings": [] + }, + { + "name": "danog/php-rtc-srtp", + "version": "1.1.16", + "direct": false, + "scope": "runtime", + "spdx": [ + "BSD-3-Clause" + ], + "source_url": "https://github.com/danog/php-rtc-srtp.git", + "source_commit": "b19959292663d8933a0a48cd1fda05788fb5c542", + "source_permalink": "https://github.com/danog/php-rtc-srtp/tree/b19959292663d8933a0a48cd1fda05788fb5c542", + "license_files": [ + { + "file": "vendor/danog/php-rtc-srtp/LICENSE", + "sha256": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690" + } + ], + "attribution": "Preserve distributed license and copyright notices; additional source obligations depend on the declared license.", + "status": "LICENSE_TEXT_PRESENT", + "findings": [] + }, + { + "name": "danog/php-rtc-stats", + "version": "1.1.7", + "direct": false, + "scope": "runtime", + "spdx": [ + "BSD-3-Clause" + ], + "source_url": "https://github.com/danog/php-rtc-stats.git", + "source_commit": "137934d7d57e97184d5b6b2fb58e571e0d3f9fbd", + "source_permalink": "https://github.com/danog/php-rtc-stats/tree/137934d7d57e97184d5b6b2fb58e571e0d3f9fbd", + "license_files": [ + { + "file": "vendor/danog/php-rtc-stats/LICENSE", + "sha256": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690" + } + ], + "attribution": "Preserve distributed license and copyright notices; additional source obligations depend on the declared license.", + "status": "LICENSE_TEXT_PRESENT", + "findings": [] + }, + { + "name": "danog/php-rtc-stun", + "version": "2.0.18", + "direct": false, + "scope": "runtime", + "spdx": [ + "BSD-3-Clause" + ], + "source_url": "https://github.com/danog/php-rtc-stun.git", + "source_commit": "7f1b48a736e6d7a9ad174e7dc58b794168befed4", + "source_permalink": "https://github.com/danog/php-rtc-stun/tree/7f1b48a736e6d7a9ad174e7dc58b794168befed4", + "license_files": [ + { + "file": "vendor/danog/php-rtc-stun/LICENSE", + "sha256": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690" + } + ], + "attribution": "Preserve distributed license and copyright notices; additional source obligations depend on the declared license.", + "status": "LICENSE_TEXT_PRESENT", + "findings": [] + }, + { + "name": "danog/php-rtc-turn", + "version": "2.0.9", + "direct": false, + "scope": "runtime", + "spdx": [ + "BSD-3-Clause" + ], + "source_url": "https://github.com/danog/php-rtc-turn.git", + "source_commit": "5789c0d4b23c6097c72812fa8f9e9930ac288bc6", + "source_permalink": "https://github.com/danog/php-rtc-turn/tree/5789c0d4b23c6097c72812fa8f9e9930ac288bc6", + "license_files": [ + { + "file": "vendor/danog/php-rtc-turn/LICENSE", + "sha256": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690" + } + ], + "attribution": "Preserve distributed license and copyright notices; additional source obligations depend on the declared license.", + "status": "LICENSE_TEXT_PRESENT", + "findings": [] + }, + { + "name": "danog/php-rtc-webrtc", + "version": "2.0.20", + "direct": false, + "scope": "runtime", + "spdx": [ + "BSD-3-Clause" + ], + "source_url": "https://github.com/danog/php-rtc-webrtc.git", + "source_commit": "58f8a24180cd1e137127214f9bfba3b0a7eff97b", + "source_permalink": "https://github.com/danog/php-rtc-webrtc/tree/58f8a24180cd1e137127214f9bfba3b0a7eff97b", + "license_files": [ + { + "file": "vendor/danog/php-rtc-webrtc/LICENSE", + "sha256": "6e8861d416353fe52e937995140b8d09ff1fa6d8d700b0a1bbcde145dc478690" + } + ], + "attribution": "Preserve distributed license and copyright notices; additional source obligations depend on the declared license.", + "status": "LICENSE_TEXT_PRESENT", + "findings": [] + }, { "name": "danog/primemodule", "version": "1.0.13", @@ -728,15 +1151,15 @@ }, { "name": "danog/telegram-entities", - "version": "1.0.5", + "version": "1.1.0", "direct": false, "scope": "runtime", "spdx": [ "Apache-2.0" ], "source_url": "https://github.com/danog/telegram-entities.git", - "source_commit": "19ab8a48bc4b9519c4493e2c62eb171fba8b58b4", - "source_permalink": "https://github.com/danog/telegram-entities/tree/19ab8a48bc4b9519c4493e2c62eb171fba8b58b4", + "source_commit": "92ca7621594b7a6c4a820c3b557e66ee1d439273", + "source_permalink": "https://github.com/danog/telegram-entities/tree/92ca7621594b7a6c4a820c3b557e66ee1d439273", "license_files": [ { "file": "vendor/danog/telegram-entities/LICENSE", @@ -986,38 +1409,17 @@ "status": "LICENSE_TEXT_PRESENT", "findings": [] }, - { - "name": "paragonie/random_compat", - "version": "v9.99.100", - "direct": false, - "scope": "runtime", - "spdx": [ - "MIT" - ], - "source_url": "https://github.com/paragonie/random_compat.git", - "source_commit": "996434e5492cb4c3edcb9168db6fbb1359ef965a", - "source_permalink": "https://github.com/paragonie/random_compat/tree/996434e5492cb4c3edcb9168db6fbb1359ef965a", - "license_files": [ - { - "file": "vendor/paragonie/random_compat/LICENSE", - "sha256": "e79a4c7d03c72850c60b2d5c41c2f92d33448ed2b243bd4686cfa7674e15e3ba" - } - ], - "attribution": "Preserve distributed license and copyright notices; additional source obligations depend on the declared license.", - "status": "LICENSE_TEXT_PRESENT", - "findings": [] - }, { "name": "phpseclib/phpseclib", - "version": "3.0.57", + "version": "4.0.2", "direct": false, "scope": "runtime", "spdx": [ "MIT" ], "source_url": "https://github.com/phpseclib/phpseclib.git", - "source_commit": "d17e0ddaeaf6f22f7e007cbb437d78792fe2a0e4", - "source_permalink": "https://github.com/phpseclib/phpseclib/tree/d17e0ddaeaf6f22f7e007cbb437d78792fe2a0e4", + "source_commit": "1fe20b9acb08ce810cec24d8a9d02e7c13426e4c", + "source_permalink": "https://github.com/phpseclib/phpseclib/tree/1fe20b9acb08ce810cec24d8a9d02e7c13426e4c", "license_files": [ { "file": "vendor/phpseclib/phpseclib/LICENSE", @@ -1112,6 +1514,48 @@ "status": "LICENSE_TEXT_PRESENT", "findings": [] }, + { + "name": "ramsey/collection", + "version": "2.1.1", + "direct": false, + "scope": "runtime", + "spdx": [ + "MIT" + ], + "source_url": "https://github.com/ramsey/collection.git", + "source_commit": "344572933ad0181accbf4ba763e85a0306a8c5e2", + "source_permalink": "https://github.com/ramsey/collection/tree/344572933ad0181accbf4ba763e85a0306a8c5e2", + "license_files": [ + { + "file": "vendor/ramsey/collection/LICENSE", + "sha256": "aa1e787bd6d05172d2962fa865a592af00ec474984d6b5bcb9a0df91abe8717d" + } + ], + "attribution": "Preserve distributed license and copyright notices; additional source obligations depend on the declared license.", + "status": "LICENSE_TEXT_PRESENT", + "findings": [] + }, + { + "name": "ramsey/uuid", + "version": "4.9.4", + "direct": false, + "scope": "runtime", + "spdx": [ + "MIT" + ], + "source_url": "https://github.com/ramsey/uuid.git", + "source_commit": "75d73f48d02797c2c285a7e9f348fadc0102ffe2", + "source_permalink": "https://github.com/ramsey/uuid/tree/75d73f48d02797c2c285a7e9f348fadc0102ffe2", + "license_files": [ + { + "file": "vendor/ramsey/uuid/LICENSE", + "sha256": "9e8bf008e16a9ee5cc2d3bfe60701ec2351a2ddf29e9092275f71441a6d5a167" + } + ], + "attribution": "Preserve distributed license and copyright notices; additional source obligations depend on the declared license.", + "status": "LICENSE_TEXT_PRESENT", + "findings": [] + }, { "name": "revolt/event-loop", "version": "v1.0.9", @@ -1133,6 +1577,27 @@ "status": "LICENSE_TEXT_PRESENT", "findings": [] }, + { + "name": "symfony/polyfill-iconv", + "version": "v1.43.0", + "direct": false, + "scope": "runtime", + "spdx": [ + "MIT" + ], + "source_url": "https://github.com/symfony/polyfill-iconv.git", + "source_commit": "254724d95fe01b679cd97d88786e9623ee00bfb7", + "source_permalink": "https://github.com/symfony/polyfill-iconv/tree/254724d95fe01b679cd97d88786e9623ee00bfb7", + "license_files": [ + { + "file": "vendor/symfony/polyfill-iconv/LICENSE", + "sha256": "eaa5d6e59ff1d5322ae36d3ab9124460df72d2d0c8af60a99222e8a90dcbdf31" + } + ], + "attribution": "Preserve distributed license and copyright notices; additional source obligations depend on the declared license.", + "status": "LICENSE_TEXT_PRESENT", + "findings": [] + }, { "name": "symfony/polyfill-mbstring", "version": "v1.43.0", @@ -1154,6 +1619,27 @@ "status": "LICENSE_TEXT_PRESENT", "findings": [] }, + { + "name": "symfony/polyfill-php82", + "version": "v1.43.0", + "direct": false, + "scope": "runtime", + "spdx": [ + "MIT" + ], + "source_url": "https://github.com/symfony/polyfill-php82.git", + "source_commit": "843bbe8b2a7934307b749751eede0f111f5d1cfc", + "source_permalink": "https://github.com/symfony/polyfill-php82/tree/843bbe8b2a7934307b749751eede0f111f5d1cfc", + "license_files": [ + { + "file": "vendor/symfony/polyfill-php82/LICENSE", + "sha256": "6439cc1bba78b7de0c1905b0643679a5a7768ba020a090370d7742030303c6b2" + } + ], + "attribution": "Preserve distributed license and copyright notices; additional source obligations depend on the declared license.", + "status": "LICENSE_TEXT_PRESENT", + "findings": [] + }, { "name": "symfony/polyfill-php83", "version": "v1.43.0", @@ -1175,17 +1661,80 @@ "status": "LICENSE_TEXT_PRESENT", "findings": [] }, + { + "name": "symfony/polyfill-php84", + "version": "v1.43.0", + "direct": false, + "scope": "runtime", + "spdx": [ + "MIT" + ], + "source_url": "https://github.com/symfony/polyfill-php84.git", + "source_commit": "22c6548499cbe5c5bb072fc0c42312dff062a015", + "source_permalink": "https://github.com/symfony/polyfill-php84/tree/22c6548499cbe5c5bb072fc0c42312dff062a015", + "license_files": [ + { + "file": "vendor/symfony/polyfill-php84/LICENSE", + "sha256": "db54a3771e71cada8e5a5dd11e5533e985117354057fc268129898ef415683b1" + } + ], + "attribution": "Preserve distributed license and copyright notices; additional source obligations depend on the declared license.", + "status": "LICENSE_TEXT_PRESENT", + "findings": [] + }, + { + "name": "symfony/polyfill-php85", + "version": "v1.43.0", + "direct": false, + "scope": "runtime", + "spdx": [ + "MIT" + ], + "source_url": "https://github.com/symfony/polyfill-php85.git", + "source_commit": "86a42cbcc07adc331481a5ab310a4024bfc227f6", + "source_permalink": "https://github.com/symfony/polyfill-php85/tree/86a42cbcc07adc331481a5ab310a4024bfc227f6", + "license_files": [ + { + "file": "vendor/symfony/polyfill-php85/LICENSE", + "sha256": "56e762e45c7d6d7873c19a5dac018ca43f5f9a881f8cd9100d1d08d0182b9544" + } + ], + "attribution": "Preserve distributed license and copyright notices; additional source obligations depend on the declared license.", + "status": "LICENSE_TEXT_PRESENT", + "findings": [] + }, + { + "name": "symfony/polyfill-php86", + "version": "v1.43.0", + "direct": false, + "scope": "runtime", + "spdx": [ + "MIT" + ], + "source_url": "https://github.com/symfony/polyfill-php86.git", + "source_commit": "8840df45b24f33a49dc419fa18dc0057231ae1d8", + "source_permalink": "https://github.com/symfony/polyfill-php86/tree/8840df45b24f33a49dc419fa18dc0057231ae1d8", + "license_files": [ + { + "file": "vendor/symfony/polyfill-php86/LICENSE", + "sha256": "56e762e45c7d6d7873c19a5dac018ca43f5f9a881f8cd9100d1d08d0182b9544" + } + ], + "attribution": "Preserve distributed license and copyright notices; additional source obligations depend on the declared license.", + "status": "LICENSE_TEXT_PRESENT", + "findings": [] + }, { "name": "webmozart/assert", - "version": "1.12.1", + "version": "2.5.0", "direct": false, "scope": "runtime", "spdx": [ "MIT" ], "source_url": "https://github.com/webmozarts/assert.git", - "source_commit": "9be6926d8b485f55b9229203f962b51ed377ba68", - "source_permalink": "https://github.com/webmozarts/assert/tree/9be6926d8b485f55b9229203f962b51ed377ba68", + "source_commit": "8a163706bbcac613733dba03f51e13b5eb1bb819", + "source_permalink": "https://github.com/webmozarts/assert/tree/8a163706bbcac613733dba03f51e13b5eb1bb819", "license_files": [ { "file": "vendor/webmozart/assert/LICENSE", @@ -1854,106 +2403,22 @@ } ], "local_patches": [ - { - "manifest": "patches/madelineproto/manifest.json", - "sha256": "a2dc6507d5f7dc8d80ec2dd0b5cfdb267ae71d83d3a7131b1023898c626274fd", - "package": "danog/madelineproto", - "target": "src/Loop/Update/UpdateLoop.php", - "approved": [ - { - "version": "8.7.0", - "commit": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "mode": "patch", - "baseline": "baseline/UpdateLoop.php", - "source_url": "https://github.com/danog/MadelineProto/blob/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/src/Loop/Update/UpdateLoop.php", - "original_sha256": "2fbcbb73822258102837f53f4a231b87526d66809be7acd6339156ea778a8c2f", - "patched_sha256": "8f6cb1a483c879024bddea289e90d4bf2d71dd15716102bc83a1f34a243782e4", - "patch": "update-loop-timeout-cancellation.patch", - "patch_sha256": "2f5c34d5e2749d3575ef9de1ec80bff60a9ced1240ca61ef8727583ee939f592" - } - ], - "notes": "Locally modified library source and its immutable baseline/diff ship in the corresponding-source archive; preserve upstream notices." - }, - { - "manifest": "patches/madelineproto-geopoint/manifest.json", - "sha256": "30b517d219f0cf7156b59c4e34cd9f0be262fc57bbb5cedb5108e62953900d48", - "package": "danog/madelineproto", - "target": "src/EventHandler/Media/GeoPoint.php", - "approved": [ - { - "version": "8.7.0", - "commit": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "mode": "patch", - "baseline": "baseline/GeoPoint.php", - "reviewed_output": "reviewed/GeoPoint.php", - "original_sha256": "9ed8054caade6abc96420b0f5b120bec029ee2bc7b7b6aacca56fb7ddc61a27b", - "patched_sha256": "5633cc441e541e5e919dfa8156192587a68e578e49a496acac91172be5f2549d", - "patch": "geopoint-double-coordinates.patch", - "patch_sha256": "b1b830953dce74978ddc64198a958d0ac13d5205d8929daa58a31e86c0541556" - } - ], - "notes": "Locally modified library source and its immutable baseline/diff ship in the corresponding-source archive; preserve upstream notices." - }, - { - "manifest": "patches/madelineproto-formatted-date/manifest.json", - "sha256": "77376a8eef3743583f481d1bd83cb1b1e5384ccf7ce004b5922a3e792a41f807", - "package": "danog/madelineproto", - "target": "src/EventHandler/Message/Entities/MessageEntity.php", - "approved": [ - { - "version": "8.7.0", - "commit": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", - "mode": "patch", - "baseline": "baseline/MessageEntity.php", - "original_sha256": "06a9d438cc198f56cfb745a2a3808932269033671146cf82f84ae88e8d6eae60", - "reviewed_output": "reviewed/MessageEntity.php", - "patched_sha256": "b265ed707326e1d71c7a8bdf8291f0b8c94a153b98a2c4c45c776fec3b374005", - "patch": "formatted-date-entity.patch", - "patch_sha256": "5c726acbc73ef6b4994d1c970f74952af007c2eee3c92773cf593e73e834b3d3", - "source_url": "https://github.com/danog/MadelineProto/blob/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/src/EventHandler/Message/Entities/MessageEntity.php", - "license_files": [ - { - "file": "upstream-LICENSE", - "sha256": "57c8ff33c9c0cfc3ef00e650a1cc910d7ee479a8bc509f6c9209a7c2a11399d6" - } - ], - "added_files": [ - { - "target": "src/EventHandler/Message/Entities/FormattedDate.php", - "original_state": "absent", - "reviewed_output": "reviewed/FormattedDate.php", - "patched_sha256": "ffe03d0d78215bc42968cd836c25b1f8a602f161fb55eba189b4102d9b99d5e5", - "license": "AGPL-3.0-or-later" - } - ], - "prerequisites": [ - { - "target": "src/TL_telegram_v225.tl", - "baseline": "baseline/TL_telegram_v225.tl", - "sha256": "539272f5ad8992ee97b61bd134fcf3a28a41ce720e806d0e7dc0e2e408c581f9", - "source_url": "https://github.com/danog/MadelineProto/blob/7b99dd0f2d964a492c377912ffce9f5ce61aa9ed/src/TL_telegram_v225.tl" - } - ] - } - ], - "notes": "Locally modified library source and its immutable baseline/diff ship in the corresponding-source archive; preserve upstream notices." - }, { "manifest": "patches/madelineproto-fresh-peer/manifest.json", - "sha256": "40d39192dfcb91c64de98daf2eac5910c76e2203a306c656fc4b5b3bc8a5fd3e", + "sha256": "e274407689d5d6cad6638fca6edff5429540a99624265882aa7bc374de181119", "package": "danog/madelineproto", "target": "src/MTProtoTools/PeerHandler.php", "approved": [ { - "version": "8.7.0", - "commit": "7b99dd0f2d964a492c377912ffce9f5ce61aa9ed", + "version": "8.11.10", + "commit": "49d3d8460257c7bfb1a7e12708e1bfdd59e898c1", "mode": "patch", "baseline": "baseline/PeerHandler.php", "reviewed_output": "reviewed/PeerHandler.php", - "original_sha256": "3e1af3624f2256f53264fe4256475d0a5f353af8761cc9716133b7f0412538d2", - "patched_sha256": "8188777fc376f2b3cca39963d79f85239fc84141f978128ea2bb591f03891928", + "original_sha256": "6caa058975e7122eeb84409142a7c8241a2da5c63ca4c63e1ec2392c7b3f7314", + "patched_sha256": "78187d7216c069d47d1c05d8128834603b958b55bc8478576850bce9e86489df", "patch": "fresh-full-peer-response.patch", - "patch_sha256": "db3099e7bf83550b7a4a4f54da451bc45a1078b8bd9bffc57f26bf52ab2d82e3" + "patch_sha256": "0b7c828c49de1e56cf93169560a5d4ba23ec8a1749f676569b6a83592577ed4d" } ], "notes": "Locally modified library source and its immutable baseline/diff ship in the corresponding-source archive; preserve upstream notices." diff --git a/readme-he.md b/readme-he.md index f8bf0b2..fbdcf7c 100644 --- a/readme-he.md +++ b/readme-he.md @@ -1,119 +1,116 @@
-# 🕯️ בוט השבת של WizardLoop +# 🕯️ בוט שבת -בוט Telegram המבוסס על PHP, ‏MadelineProto ו־SQLite לניהול זמני שקט בקבוצות בשבתות ובחגים, להצגת הלוח היהודי ולתזכורות בהפעלה מפורשת. +בוט Telegram לניהול שקט בקבוצות בשבתות ובחגים, להצגת מידע מהלוח היהודי ולתזכורות לבחירה. מבוסס על PHP,‏ MadelineProto ו־SQLite. [English](README.md) | [עברית](readme-he.md) -[![רישיון AGPL-3.0-only](https://img.shields.io/badge/license-AGPL--3.0--only-blue)](LICENSE) +[![License: AGPL-3.0-only](https://img.shields.io/badge/license-AGPL--3.0--only-blue)](LICENSE) [![PHP 8.3–8.5](https://img.shields.io/badge/PHP-8.3%E2%80%938.5-777BB4)](composer.json) -[![MadelineProto 8.7.0](https://img.shields.io/badge/MadelineProto-8.7.0-2CA5E0)](composer.lock) -[![גרסה יציבה 3.0.0](https://img.shields.io/badge/status-3.0.0%20stable-green)](VERSION) +[![MadelineProto 8.11.10](https://img.shields.io/badge/MadelineProto-8.11.10-2CA5E0)](composer.lock) -**הגרסה הנוכחית: 3.0.0, גרסה יציבה.** השתמשו ב[קובצי השחרור המתאימים](https://github.com/WizardLoop/shabbat/releases/tag/v3.0.0) או בעותק מהתג ושמרו את נתוני הזיהוי שלו. בעל הפרויקט אישר שב־dev.9 עברו בדיקות חיות של נעילה, פתיחה, שחזור ההרשאות המקוריות והפעלה מחדש. אישור זה אינו מכסה תזמון בחג, קיבולת בעומס או הרצה ממושכת; בדיקות אוטומטיות ובדיקות בסביבת היעד נשארות נפרדות. במעבר מבוט קיים פעלו לפי [מדריך השדרוג והחזרה לגרסה קודמת](docs/PRODUCTION_UPGRADE.md) לפני החלפת קבצים או הפעלת מופע נוסף. ראו [מצב הפרסום](docs/PUBLICATION_STATUS.md), [שינויים](CHANGELOG.md) ו[בטיחות מסירה](docs/DEV9_DELIVERY_SAFETY.md). התגים מתארים את תצורת המקור ואינם אישור לתקינות בסביבת production. +**גרסה 3.1.0.** דרישות השחרור ומגבלות האימות מתוארות ב[מצב המימוש](docs/IMPLEMENTATION_STATUS.md). להתקנה קיימת התחילו ב[מדריך השדרוג בעברית](docs/PRODUCTION_UPGRADE_HE.md) ([English](docs/PRODUCTION_UPGRADE.md)); הפקודות שבהמשך יוצרות מסד נתונים חדש. -## תוכן עניינים - -[יכולות](#features) · [דרישות](#requirements) · [התקנת Docker](#docker-installation) · [התקנה ידנית](#manual-installation) · [תצורה](#configuration) · [הכנת Telegram](#telegram-setup) · [הוספת קבוצה](#group-setup) · [מיקום ושפות](#location-and-languages) · [מודולי הלוח](#calendar-modules) · [פקודות הבוט](#bot-commands) · [תפעול](#operations) · [שדרוג וייבוא](#upgrade-and-legacy-import) · [גיבוי וחזרה לגרסה קודמת](#backup-and-rollback) · [פתרון תקלות](#troubleshooting) · [מבנה ופיתוח](#project-and-development) · [רישוי וקרדיטים](#license-and-credits) +[יכולות](#features) · [דרישות](#requirements) · [התקנה](#install) · [הגדרה](#configure) · [שימוש ראשון](#first-use) · [תפעול ועדכון](#operate) · [תיעוד](#documentation) · [רישיון](#license) -## יכולות - -| תחום | ההתנהגות הממומשת | -|---|---| -| שבת וחגים | מיקום לכל קבוצה, לוח ישראל/חו״ל, שיטות נרות והבדלה, היסטים תפעוליים וסגירה רצופה בימים קדושים סמוכים. | -| מצבים | כבוי, הודעות בלבד, נעילה בלבד או נעילה והודעות; שבת וחגים נבחרים בנפרד. | -| שחזור הרשאות | צילום מקורי של 22 דגלים, קריאה טרייה מאומתת, מצב שחזור שמור ופאנל לטיפול מורשה בהתנגשויות. מסכת הנעילה הרגילה כוללת 21 הגבלות חברים לבחירה; סמכויות מנהלים נפרדות. | -| שליטה בפרטי | קבוצות מוכרות, הגדרות מודרכות, העדפות אישיות נפרדות, תצוגה מקדימה ואישור. | -| לוח ותזכורות | זמני היום, דף יומי, תפילין ועומר עונתי בהפעלה מפורשת ובהגדרות נפרדות לכל קבוצה. | -| עיצוב הודעות | טקסט, ישויות Telegram, מדיה לשימוש חוזר וכפתורי ברירת מחדל/מותאמים/ללא כפתורים; תבניות נפרדות לסגירה, פתיחה, הודעת זמנים ומודולים. ניקוי הודעות כבוי כברירת מחדל. | -| ניהול | מנהלים מלאים/מוגבלים/לצפייה בלבד, ספריית מנויים, שידורים, סטטיסטיקות, אבחון, קישורי מערכת ומעקב. | -| אחסון ותפעול | מיגרציות וגיבויי SQLite, משימות מסירה שמורות, פעימות מתזמן נפרדות, כותב יישום יחיד וכלי תחזוקה מפורשים. | -| תרומות ומקור | תרומות Telegram Stars לבחירה, לרבות סכום שלם מותאם 1–10000; גרסה, רישיון וקישור מפעיל למקור המדויק. | - -גרסה 3.0.0 שומרת על השיפורים שנוספו ב־dev.9: בדיקת זכאות בזמן המסירה, הגבלת תזכורות שהצטברו, אכיפת מרווחים ושעות שקט בפועל והפרדה בין עבודת הרשאות, הודעות ושידורים. MadelineProto נשאר ב־8.7.0 ונשמר קובץ התלויות הנעול. ערך שמש חסר מדווח כחסר, ללא המצאת חלופה לאזורי קוטב. הזמנים והנוסחים נועדו למידע, והמנהל בוחר את שיטות החישוב. +## מה הבוט עושה - -## דרישות +- סוגר ופותח קבוצות בשבתות ובחגים, תוך שמירת הרשאות מקור מאומתות והתאוששות מבוקרת. +- מאפשר לבחור לכל קבוצה מיקום, אזור זמן, לוח ישראל/חו״ל ושיטות לנרות ולהבדלה. +- מציג זמני היום ודף יומי; מאפשר לתזמן תזכורות לזמנים, לדף יומי, לתפילין ולעומר. +- מנהל קבוצות דרך פאנל פרטי, עם התאמת הודעות, מדיה וכפתורים. +- כולל מנהלי בוט עם הרשאות נפרדות, שידורים, סטטיסטיקה ותרומות אופציונליות בכוכבי Telegram. -| רכיב | דרישה | -|---|---| -| פריסה מומלצת | Linux, ‏Docker Engine ו־Compose v2, גישה יוצאת ל־HTTPS ול־Telegram ואחסון מתמשך. | -| הרצה ידנית | PHP ‏8.3/8.4/8.5 ב־64 ביט ו־Composer 2. ב־Docker נעולים PHP 8.4.26 ו־Composer 2.10.3. | -| הרחבות | PDO/PDO SQLite, ‏mbstring, ‏XML, ‏DOM, ‏fileinfo ו־zlib; ‏ZIP לכלי האריזה האופציונלי לפיתוח. בדקו את כל דרישות ה־lock באמצעות `composer check-platform-reqs`. ב־Docker נבנות גם pcntl ו־sockets. | -| SQLite | מינימום יישום 3.35. בדיקת שחרור מקבלת 3.51.3 ומעלה או 3.44.6 / 3.50.7 שנבדקו. חשוב לבדוק את הספרייה ש־PHP טוען. Docker בונה 3.51.3 עם אימות SHA-256. | -| Telegram | פרטי יישום API ID/hash, טוקן BotFather ומזהי משתמש או שמות משתמש ניתנים לפענוח עבור המפעילים. | -| GeoNames | חשבון שלכם עם webservices פעילים לחיפוש עיר ואזור זמן אוטומטי. ערים מוכרות וקואורדינטות מפורשות זמינות גם בלעדיו. | -| מערכת קבצים | נתוני יישום מתמשכים וסשן MadelineProto נפרד. נדרשת גם כתיבה בתיקיית העבודה ללוג תהליך הספרייה ולקובצי PrimeModule. | +כלולים קטלוגי ממשק בעברית, באנגלית, ברוסית, בצרפתית, בספרדית ובפורטוגזית ברזילאית. תוכן חיצוני וטקסטים ליטורגיים בעברית עשויים להישאר בשפת המקור. לפרטים ראו [הגדרות קבוצה](docs/GROUP_SETTINGS.md). -הבדיקות האוטומטיות משתמשות בתחליפי Telegram ובנתוני בדיקה של ספקים, ללא פרטי התחברות. בדקו שוב שחזור הרשאות והפעלה מחדש בסביבת היעד, וכן נושאים, תצוגת לקוחות, אינליין/GPS, כוכבים ותפריטי פקודות לפי השימוש. ראו את [רישום הבדיקות המדויק](docs/IMPLEMENTATION_STATUS.md). + +## לפני שמתחילים - -## התקנת Docker +נדרש שרת Linux עם אחסון קבוע, גישה לאינטרנט, **Docker Engine ותוסף Docker Compose**, וכן: -דוגמאות המעטפת מיועדות למסוף Linux/POSIX. פקודות Docker מריצים **במחשב המארח, בשורש הפרויקט שחולץ**, עם הרשאה לשירות Docker. התהליך בתמונה רץ כ־`shabbat`, עם UID/GID ‏`10001`. אין שירות Composer נפרד. +| פריט | מאיפה מקבלים | +|---|---| +| API ID ו־API Hash של Telegram | [ניהול אפליקציות Telegram](https://my.telegram.org/apps) | +| טוקן הבוט | יצירה או בחירה של בוט דרך [BotFather](https://t.me/BotFather) | +| מזהה המנהל | מזהה משתמש Telegram מהימן; מספר מזהים מופרדים בפסיקים | +| שם משתמש GeoNames | [חשבון GeoNames](https://www.geonames.org/login) עם Web Services פעילים, לחיפוש ערים ואזור זמן אוטומטי | -1. קבלו את המקור שנבדק. עבור ארכיון השחרור להתקנה: +התקינו [Docker Engine לפי הפצת Linux](https://docs.docker.com/engine/install/) ואת [תוסף Compose](https://docs.docker.com/compose/install/linux/), ובדקו:
~~~sh -unzip shabbat-3.0.0.zip -d shabbat -cd shabbat -unset BUILD_COMMIT +docker --version +docker compose version ~~~
-הארכיון מכיל מקור ו־`composer.lock`, ללא `vendor/` מותקן. Docker מתקין את תלויות ההרצה הנעולות. **שמרו את `build-info.json` שבארכיון.** ארכיון השחרור מתעד את ה־commit המדויק שנבדק, `local_changes=false` וטביעת מקור היישום. אל תוסיפו `BUILD_COMMIT` ל־`.env`; הדוגמה לארכיון מנקה ערך שהתקבל מהמעטפת כדי שלא יחליף את הזיהוי. אם משתמשים בעותק Git שנבדק, מסרו לפני הבנייה את ה־commit האמיתי שלו: - -
- -~~~sh -export BUILD_COMMIT="$(git rev-parse HEAD)" -~~~ - -
+Docker מספק את PHP,‏ Composer,‏ SQLite והתלויות הנעולות. קיימות גם הוראות ל[התקנה ידנית](docs/INSTALLATION.md#manual-installation). -השתמשו בארכיון שחרור שלא שונה או בעותק Git נקי ותואם. אין להחליף את ה־commit בערך לא קשור או לשמור נתוני ארכיון לאחר שינוי המקור שלו. + +## 1. חילוץ התקנה חדשה -2. צרו פעם אחת תצורה פרטית בהתקנה החדשה: +הורידו את `shabbat-3.1.0.zip` ואת `SHA256SUMS` מ[שחרור GitHub המתאים](https://github.com/WizardLoop/shabbat/releases). הריצו ב־**Bash בשרת**, מתיקיית ההעלאה ועם גישה ל־Docker. אימות הקובץ חייב להחזיר `OK`.
~~~sh +set -euo pipefail +umask 077 +awk '$2 == "shabbat-3.1.0.zip" { + if (NF != 2 || length($1) != 64 || $1 ~ /[^0-9a-f]/) exit 1 + print; n++ +} END { if (n != 1) exit 1 }' SHA256SUMS > deployment.sha256 +sha256sum --check deployment.sha256 +test ! -e shabbat-3.1.0 +unzip -q shabbat-3.1.0.zip -d shabbat-3.1.0 +cd shabbat-3.1.0 cp .env.example .env chmod 600 .env +unset BUILD_COMMIT ~~~
-ערכו את `.env`: החליפו את דוגמאות Telegram, הגדירו `ADMIN`, חשבון GeoNames לפי הצורך ו־`SOURCE_URL=https://github.com/WizardLoop/shabbat/releases/tag/v3.0.0` לשחרור הזה ללא שינויים, שקובץ המקור התואם שלו חייב להיות זמין. לפריסה ששונתה יש לספק את המקור המדויק שלה. שמרו על תחביר פשוט של `KEY=value`, המתאים ל־PHP raw INI ול־Compose. הקובץ המוגדר אינו מיועד להעלאה למאגר. +שמרו את `build-info.json` המצורף. בארכיון שחרור שלא שונה אין להוסיף `BUILD_COMMIT` לקובץ `.env`. אין לחלץ עדכון על התקנה פועלת. + + +## 2. הגדרת הבוט -3. בנו ובדקו את התמונה. השלבים מתקינים ומתקנים תלויות וכותבים נתוני זיהוי בתוך התמונה, בלי להפעיל את הבוט: +ערכו את `.env` באופן פרטי. החליפו את פרטי הדוגמה ואת מזהה המנהל:
-~~~sh -docker compose build -docker compose run --rm --no-deps shabbat php bin/self-check.php --release -docker compose run --rm --no-deps shabbat php bin/runtime-permissions.php --require-non-root +~~~dotenv +API_ID=123456 +API_HASH=replace_with_your_32_character_api_hash +BOT_TOKEN=replace_with_your_bot_token +ADMIN=123456789 +GEONAMES_USERNAME=your_geonames_username +SOURCE_URL=https://github.com/WizardLoop/shabbat/releases/tag/v3.1.0 ~~~
-4. אתחלו **מסד חדש וריק**, כשהשירות עצור. למסד קיים נדרש נוהל שדרוג וגיבוי. +שמרו את שאר ערכי `.env.example` אלא אם נדרשת הגדרה מתקדמת. אין לפרסם את הקובץ או להשתמש בפרטי בוט בדיקה ב־production. קישור המקור חייב להציע את המקור המדויק של ההתקנה, כולל ארכיון Corresponding Source. ראו [כל משתני התצורה](docs/CONFIGURATION.md). + +משורש התיקייה שחולצה, בנו ובדקו את התמונה ואתחלו **מסד נתונים חדש וריק**. הפקודות האלה אינן מפעילות את הבוט:
~~~sh +docker compose build shabbat +docker compose run --rm --no-deps shabbat php bin/self-check.php --release +docker compose run --rm --no-deps shabbat php bin/runtime-permissions.php --require-non-root docker compose run --rm --no-deps shabbat php bin/migrate.php --writers-stopped --db /app/data/shabbat.sqlite ~~~
-5. הפעילו כשמוכנים לחיבור אמיתי ל־Telegram ולפעילות בקבוצות הרשומות: +כשתהיו מוכנים לחיבור ל־Telegram, הפעילו:
@@ -126,414 +123,56 @@ docker compose exec shabbat php bin/health.php
-שם השירות: `shabbat`. כרכים: `bot-data` ב־`/app/data`, ו־`madeline-session` ב־`/app/runtime`; השמות בפועל כוללים את שם פרויקט Compose. שמרו את זהות הפרויקט והכרכים בשדרוג. Compose כופה `DATA_DIR=/app/data` ו־`SESSION_PATH=/app/runtime/bot.shabbat`. בדיקת הבריאות הראשונית ממתינה לשני המתזמנים; תקופת ההתחלה המוגדרת היא 90 שניות. - -[התקנה מפורטת](docs/INSTALLATION.md) · [סביבת בדיקה נפרדת](docs/SERVER_TEST_DEPLOYMENT.md) +בדיקת הבריאות עשויה להזדקק לתקופת האתחול הראשונית, שאורכה 90 שניות. שם השירות הוא `shabbat`. אמצעי האחסון `bot-data` ו־`madeline-session` שומרים את נתוני היישום והסשן; שמם המלא כולל את שם פרויקט Compose. - -## התקנה ידנית + +## 3. Telegram והקבוצה הראשונה -השתמשו במקור נפרד ובחשבון שירות שאינו root ושיכול לכתוב לתיקיות העבודה, הנתונים והסשן. הריצו **משורש הפרויקט הזה**, לאחר העתקת והגדרת `.env` כמתואר: +1. ב־BotFather אפשרו הצטרפות לקבוצות. הפעילו `/setinline` לחיפוש מיקום ולוח באינליין. +2. שלחו `/start` בפרטי. בדקו את כפתורי הבית, `/preferences` ואת השפה. +3. הוסיפו את הבוט כמנהל בקבוצה עם הרשאה להגביל חברים. מחיקה ונעיצה דורשות את ההרשאות המתאימות. +4. כמנהל קבוצה, שלחו `/add` **בתוך הקבוצה**. קבוצה חדשה נוצרת במצב **כבוי**, וההגדרה נפתחת בפרטי. +5. בדקו מיקום, אזור זמן, לוח, מצב ושיטות נרות והבדלה. הפעילו רק תזכורות רצויות. חוזרים דרך `/groups` בפרטי או `/settings` בקבוצה. -
+להקמה ראשונה השתמשו ב־`/add`: רישום ישיר דרך `/settings` מקבל כיום ברירת מחדל של נעילה. בדקו את הערכים לפני הפעלת קבוצה אמיתית. הרשאות מנהל הבוט ומנהל הקבוצה נפרדות. -~~~sh -composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader -composer check-platform-reqs --no-dev -mkdir -p data/session -php bin/self-check.php --release -php bin/runtime-permissions.php --require-non-root -php bin/migrate.php --writers-stopped --db data/shabbat.sqlite -php bot.php -~~~ +[כל פקודות הבוט](docs/COMMANDS.md) · [הגדרות קבוצה](docs/GROUP_SETTINGS.md) · [מיקום וחיפוש אינליין](docs/INLINE_GEONAMES.md) -
+ +## תפעול שוטף ועדכון -הפקודה האחרונה מפעילה את הבוט בחזית ומתחברת ל־Telegram. עצרו באמצעות Ctrl+C והמתינו לסיום; הפעלה חוזרת נעשית ב־`php bot.php`. ניהול תהליך ידני באחריות המפעיל; אין בפרויקט יחידת systemd מוכנה. Windows מתאים לרבות מהבדיקות הלא־מקוונות, אך בדיקת POSIX של משתמש שאינו root ובדיקת פריסת Linux דורשות מארח מתאים. +הריצו **בשרת, משורש ההתקנה**, עם גישה ל־Docker ובאותו שם פרויקט Compose: -Composer מחיל ומאמת את התיקונים המקומיים בהתקנה רגילה. אם הסקריפטים בוטלו, הריצו **בהתקנה העצורה**: - -
- -~~~sh -composer install --no-dev --no-scripts --no-interaction --prefer-dist -php scripts/apply-patches.php -php scripts/verify-patches.php -~~~ - -
- -תוכן תלות לא מוכר או תיקון חלקי גורמים לכישלון אימות. החלה חוזרת אינה משנה מקור שכבר תוקן כראוי. אין לתקן ספרייה מותקנת בזמן שהבוט משתמש בה. - - -## תצורה - -הבוט קורא את `.env` שבשורש כ־raw INI. ערכי סביבה לא ריקים קודמים לקובץ בחיפוש פרטי התחברות ונתיבים; הימנעו מהגדרות כפולות וריקות. גם כלי התחזוקה קוראים את `.env` לפתרון נתיבים; `--db` מפורש בוחר את מסד היעד. נתיבים יחסיים מתחילים בשורש הפרויקט. - -| משתנה | ברירת מחדל / דרישה | תפקיד | +| פעולה | פקודה | השפעה | |---|---|---| -| `API_ID` | מספר שלם חיובי, חובה | מזהה יישום Telegram. | -| `API_HASH` | 32 תווים הקסדצימליים, חובה | סוד יישום Telegram. | -| `BOT_TOKEN` | חובה | טוקן BotFather של ההתקנה. | -| `ADMIN` | יש להגדיר לגישת מפעילים | מזהים/שמות ניתנים לפענוח, מופרדים בפסיק; מזהים מספריים מונעים עמימות. הבעלים המוגדרים שומרים גישת התאוששות והפעלה מחדש. | -| `DATA_DIR` | `data` בפרויקט | נתוני היישום ו־BroadcastManager; ב־Compose מוחלף ב־`/app/data`. | -| `APP_DB_PATH` | `DATA_DIR/shabbat.sqlite` | מסד היישום; בדוגמה מוגדר במפורש `data/shabbat.sqlite`. | -| `SESSION_PATH` | `bot.shabbat` בפרויקט | סשן MadelineProto; בדוגמה `data/session/bot.shabbat`, וב־Compose ‏`/app/runtime/bot.shabbat`. | -| `HEARTBEAT_PATH` | `DATA_DIR/scheduler-heartbeat.json` | קובץ פעימות מתזמני ההרשאות וההודעות. | -| `LEGACY_DATA_PATH` | שורש הפרויקט | שורש מקור ישן לקריאה בלבד עם `data/DBgroups.txt`; בעת עלייה נוספים רק רישומי קבוצות חסרים. | -| `GEONAMES_USERNAME` | ריק | חשבון webservices שלכם; demo אינו נתמך. | -| `GEONAMES_ENDPOINT` | `https://secure.geonames.org` | נקודת HTTPS מאומתת, ללא מעבר ל־HTTP. | -| `CUSTOM_EMOJI_ENABLED` | `1` | `0` בוחר אימוג׳ים בסיסיים; גם דחיית זכאות ודאית מפעילה חלופה מבוקרת. | -| `SOURCE_URL` | ריק; יש להגדיר לפני פריסה | URL ב־HTTPS למקור המדויק. חוסר בהגדרה מדווח, אך אינו חוסם עלייה. | -| `BUILD_COMMIT` | נתוני הארכיון או commit בן 40 תווי hex | זהות בנייה/ריצה ופרמטר בניית Compose. שומרים גם טביעות מקור לשינויים מקומיים. | - -[תצורה מפורטת](docs/CONFIGURATION.md) · [פרטיות](docs/PRIVACY.md) - - -## הכנת Telegram - -1. קבלו פרטי API דרך [ניהול יישומי Telegram](https://my.telegram.org/apps). -2. צרו או בחרו את הבוט ב־[BotFather](https://t.me/BotFather), קבלו טוקן ואפשרו הוספה לקבוצות. -3. פתחו את הבוט בפרטי באמצעות `/start`. הוסיפו אותו לקבוצה עם הרשאות להגבלת חברים ולשינוי הרשאות ברירת מחדל. מחיקה ונעיצה אופציונליות דורשות את הרשאות Telegram המתאימות. -4. הפעילו `/setinline` ב־BotFather לחיפוש ושיתוף באינליין. טקסט מוצע: `shabbat · zmanim · daf · omer · loc city`. חיפוש בשם עיר אינו דורש `/setinlinegeo` או `/setinlinefeedback`; שיתוף GPS מפורש. -5. עם הרשאת שינוי תפריטים, שלחו בפרטי `/setcommands all all preview` לצפייה בכמות התפריטים; `/setcommands all all` מעדכן אותם ב־Telegram. מנהל קבוצה אינו מקבל מכך הרשאה זו. - -ניקוי אופציונלי מטפל רק בעדכונים ש־Telegram מוסר לבוט. לקבלת הודעות כלליות מבוטים אחרים, הבוט המקבל צריך **Bot-to-Bot Communication Mode** פעיל דרך BotFather, הרשאת מנהל בקבוצה ו־**Group Privacy Mode** כבוי, כמפורט ב[תיעוד Telegram לתקשורת בין בוטים](https://core.telegram.org/api/bots/bot-to-bot). המחיקה עדיין דורשת הרשאה מתאימה; אין בכך הבטחה לקבלת כל הודעה. +| הפעלה | `docker compose up -d shabbat` | הפעלה וחיבור הבוט | +| עצירה | `docker compose stop shabbat` | עצירת הבוט ושמירת אמצעי האחסון | +| הפעלה מחדש | `docker compose restart shabbat` | הפעלה מחדש של התמונה הנוכחית | +| מצב | `docker compose ps` | הצגת מצב השירות | +| לוגים | `docker compose logs --tail=100 -f shabbat` | מעקב אחר לוגים; Ctrl+C סוגר את התצוגה | +| בריאות | `docker compose exec shabbat php bin/health.php --deep` | בדיקת התזמון ומסד הנתונים של הבוט הפועל | - -## הוספת קבוצה +**עדכון מחייב גיבוי לאחר עצירת הכותבים ובדיקת מיגרציות.** פעלו לפי [מדריך השדרוג](docs/PRODUCTION_UPGRADE_HE.md) ([English](docs/PRODUCTION_UPGRADE.md)) לאימות הנתיבים, הכנת staging, ייבוא או עדכון SQLite, שמירת הסשן וחזרה לאחור. בנייה בלבד אינה מבצעת מיגרציה; `restart` בלבד אינו מתקין תמונה חדשה. אין להריץ `composer update` בעדכון שגרתי או להסיר אמצעי אחסון. -1. שלחו `/add` **בקבוצה, כמנהלי הקבוצה**. קבוצה חדשה שמתווספת כך מתחילה **כבויה**, וההגדרות נפתחות בפרטי. -2. אשרו את שם הקבוצה, המיקום, אזור IANA ולוח ישראל/חו״ל. יש לבדוק את ערכי ברירת המחדל של ירושלים; הם אינם מיקום שנקבע אוטומטית. -3. בחרו מצב ומדיניות שבת/חג, ואחר כך שיטות נרות/הבדלה והיסטים תפעוליים. -4. הפעילו במפורש את מודולי היום/דף/תפילין/עומר הרצויים. צפו בתצוגה מקדימה בפרטי; בדיקה בקבוצה דורשת אישור נפרד ומוגבלת בקצב. -5. חזרו דרך `/groups` בפרטי או `/settings` בקבוצה. הגדרות אישיות וקבוצתיות נפרדות. + +## מידע נוסף -**הסתייגות במימוש הרישום הנוכחי:** גם `/settings` יכול לרשום קבוצה לא מוכרת אחרי אימות המנהל, ונתיב זה יורש מהמסד מצב **נעילה**. השתמשו ב־`/add` למסלול המתחיל במצב כבוי ובדקו מיד מיקום ומצב. `/settings` אינו מפעיל מחדש קבוצה שהוסרה; `/add` יכול. זו ההתנהגות הקיימת, והיא לא שונתה בסתר במסגרת הכנת הפרסום. - -הפאנלים מציגים ערכים קיימים, עבודה קרובה ומצב התאוששות. שינוי דורש הרשאה עדכנית ואישור הקשור למשתמש, לקבוצה ולגרסת ההגדרות. נושא פורום חסר או סגור יוצר שגיאה, ולא הפניה לנושא אחר. השחזור משתמש בהרשאות המקוריות; צילום חסר, לא מאומת או מתנגש דורש פתרון מורשה. ניקוי הודעות חברים ובוטים מתחיל כבוי. חוב שחזור לא פתור חוסם הסרת קבוצה. - -[הגדרות](docs/GROUP_SETTINGS.md) · [ממשק מודרך](docs/USER_EXPERIENCE.md) · [שחזור הרשאות](docs/PERMISSION_RECOVERY.md) - - -## מיקום ושפות - -קיימים שישה קטלוגי שפה: עברית `he`, אנגלית `en`, רוסית `ru`, צרפתית `fr`, ספרדית `es` ופורטוגזית ברזילאית `pt-br`. נבדקים מפתחות ומצייני ערכים; אין בכך הבטחה לתרגום כל שגיאת צד שלישי או ממשק ישן. נוסח התפילה העברי נשאר עברי, לצד טקסט הסבר כאשר הוא מסופק. תפריטי Telegram משתמשים ב־`pt`; שפת התפריט לפי הלקוח ושפת הבוט השמורה הן הגדרות נפרדות. - -השתמשו ב־`/preferences` או `/language` בפרטי; `/language` בקבוצה מחייב ניהול קבוצה. לחיפוש עיר, פתחו [חשבון GeoNames](https://www.geonames.org/login), הפעילו free webservices והגדירו `GEONAMES_USERNAME`. - -בפאנל המתאים: **מיקום ואזור זמן → חיפוש עיר באינליין → עיר/מדינה/אזור → בדיקת קואורדינטות ואזור זמן → אישור היעד ששמו מוצג**. קיימים גם חיפוש פרטי, ערים מוכרות, קואורדינטות, חיפוש אזור IANA ותשובת GPS לפי בקשה. הבחירה זמנית, שייכת למשתמש אחד וחד־פעמית. שינוי אזור זמן אינו מזיז קואורדינטות. - -חיפוש אינליין ציבורי `loc city` או שם עיר בלבד מאפשר חיפוש ושיתוף מיקום. חיפוש אזור זמן ציבורי אפשרי באמצעות `tz Jerusalem` או `Asia/Jerusalem`, ללא שינוי הגדרות. שאילתות ההגדרה `location CITY` ו־`timezone QUERY` דורשות בקשת מיקום או אזור זמן פעילה בפרטי ומובילות לאישור. המצבים הנוספים: `shabat`, `shabbat`, `שבת`, `zmanim`, `daf`, `omer`. בדקו את המיקום המוצג: שיתוף אישי ותצוגה מורשית בהקשר קבוצה עשויים להשתמש בהגדרות שונות. תקלות חשבון ומכסה נשארות שגיאות גלויות. - -[אינליין ו־GeoNames](docs/INLINE_GEONAMES.md) - - -## מודולי הלוח - -| מודול | הגדרות ומגבלות ממומשות | +| נושא | מדריך | |---|---| -| שבת וחגים | מנהג נרות של עיר או בדיוק 10/15/18/20/22/30/40 דקות או ערך מותאם. ברירת המחדל העירונית של ירושלים היא 40; בחירת 18 נשארת 18. הבדלה: ‎8.5°‎ או 42/50/72 דקות קבועות או ערך מותאם. 72 קבועות אינן כל שיטות רבנו תם. | -| תזמון קבוצתי | היסטי סגירה לפני נרות ופתיחה לאחר הבדלה נפרדים. רצף ימים קדושים נשאר סגור. ישראל/חו״ל נבחר במפורש. הודעת הזמנים כוללת תזמון ועיצוב עצמאיים, תאריכים עבריים ומידע על הפרשה. | -| זמני היום | תאריך אזרחי ואזור IANA; עלות, משיכיר, הנץ, שמע ותפילה לגר״א/מג״א, חצות, מנחה, פלג, שקיעה, צאת וחצות לילה כשזמינים. נתון חסר נשאר לא זמין. | -| דף יומי | חישוב לפי תאריך אזרחי וקישור לימוד מהספק; דילוג על שליחה אינו עוצר את המחזור. | -| תפילין | שעות קבועות, מרווחים והיסטים משקיעה, מניעת כפילויות, מכסות, מרווח מינימלי, שקט והשהיה. תחילת הזמן משתמשת ב־`misheyakir` של ‎11.5°‎; שדה הספק המחמיר אינו מוצע לבחירה. אין שליחה בשבת/יום טוב; מדיניות מפורשת לחול המועד ולתשעה באב בפועל. שעת הסיום נבדקת שוב במסירה. אישור הנחה אופציונלי סופר משתמשים ייחודיים וניתן לביטול בלחיצה חוזרת. | -| עומר | 49 ימי העונה מתקדמים גם בימים ללא שליחה ובין שנים. לילה ממתין לצאת שנבחר ולסוף השקט הקבוצתי; השלמת יום אופציונלית ללא ברכה. ממומשים `ashkenaz` ורצף `sephard` המתועד, ולא כל מנהגי הקהילות. הנוסח המלא כולל הכנה ותוספות מסורתיות לפי הבחירה. | - -ההנחיה לברכה מתייחסת לזכאות אישית; היסטוריית הודעות אינה היסטוריית הספירה של אדם. ראו [הגדרות שיטות](docs/ZMANIM_METHODS.md), [תצוגת הלוח](docs/CALENDAR_PRESENTATION.md) ו[מקורות הנוסחים](THIRD_PARTY_NOTICES.md). - - -## פקודות הבוט - -את הפקודות שולחים **ב־Telegram**. התפריט הוא קיצור דרך ולא מפרט הרשאות מלא. `[...]` מציין פרמטר אופציונלי. - -### משתמשים - -| פקודה | מקום והרשאה | השפעה | -|---|---|---| -| `/start`, `/help` | בפרטי; כל משתמש | תפריט הבית ועזרה. | -| `/preferences` | בפרטי; העדפות אישיות | מיקום, לוח ושיטות אישיים. | -| `/language`, `/lang` | בפרטי; העדפות אישיות | שפה אישית; שימוש בקבוצה דורש ניהול קבוצה. | -| `/groups [search]` | בפרטי; אימות ניהול עדכני | רשימה וחיפוש בקבוצות מוכרות שניתן לנהל. | -| `/shabat [YYYY-MM-DD]`, `/shabbat [YYYY-MM-DD]` | בפרטי או בקבוצה רשומה; כל משתמש | זמני שבת/חג לפי ההקשר. | -| `/zmanim [YYYY-MM-DD]` | בפרטי או בקבוצה רשומה; כל משתמש | זמני היום. | -| `/daf [YYYY-MM-DD]` | בפרטי או בקבוצה רשומה; כל משתמש | דף יומי. | -| `/omer [YYYY-MM-DD]` | בפרטי או בקבוצה רשומה; כל משתמש | ספירה או מידע על העונה בתאריך שנבחר. | -| `/stats` | בפרטי או בקבוצה; כל משתמש | נתונים מצרפיים ציבוריים, ללא זהויות מנויים. | -| `/donate` | בפרטי; כל משתמש | אפשרויות תמיכה בכוכבים; תשלום מחייב אישור ב־Telegram. | -| `/source`, `/license`, `/version` | בפרטי או בקבוצה; כל משתמש | הצעת מקור, רישוי וזיהוי גרסה. | - -### מנהלי קבוצות - -| פקודה | מקום והרשאה | השפעה | -|---|---|---| -| `/add` | בקבוצה; מנהל נוכחי | רישום/הפעלה מחדש ופתיחת ההגדרות. | -| `/remove` | בקבוצה; מנהל נוכחי | השבתת הרישום; חוב שחזור חוסם הסרה. | -| `/settings` | בקבוצה; מנהל נוכחי | הגדרות קבוצה בפרטי; ראו הסתייגות רישום לעיל. | -| `/settings [GROUP_ID]` | בפרטי; מנהל נוכחי בקבוצת היעד | פתיחת יעד, או רשימת קבוצות ללא מזהה. | -| `/language`, `/lang` | בקבוצה; מנהל נוכחי | בחירת שפת קבוצה בפרטי. | - -טפסים מתקדמים **בפרטי** מחייבים את הטוקן המדויק שהפאנל הנפיק, את בעליו וההקשר/גרסה התקפים, וכן הרשאת קבוצה עדכנית ליעד קבוצתי. העדיפו את הכפתורים המודרכים. - -| טופס | השפעה | -|---|---| -| `/city TOKEN QUERY` | חיפוש המיקום שבבחירה. | -| `/coordinates TOKEN LATITUDE LONGITUDE IANA_ZONE [NAME]` | תצוגה מקדימה לקואורדינטות ואזור זמן. | -| `/location TOKEN IANA_ZONE` או `/location TOKEN auto` | בקשת תשובת GPS; ‏auto דורש GeoNames. | -| `/timezone TOKEN QUERY` | חיפוש אזורי IANA. | -| `/configure TOKEN FORM` | תצוגה מקדימה של טופס ההגדרות הנתמך בפאנל. | -| `/viewdate TOKEN YYYY-MM-DD` | תאריך לתצוגת הלוח. | -| `/template TOKEN` + שורה חדשה + תוכן | סקירת תבנית קבוצה מוצעת. | -| `/buttons TOKEN` + שורה חדשה + תוכן כפתורים | סקירת כפתורים בפורמט JSON או בפורמט הישן. | - -### מנהלי הבוט - -כל הפקודות להלן **בפרטי**. תפקידי ניהול הבוט נפרדים מניהול קבוצה; צפייה בלבד אינה מתירה שינוי. - -| פקודה | הרשאה נדרשת | השפעה | -|---|---|---| -| `/admin` | מנהל בוט | פאנל הניהול. | -| `/adminstats` | סטטיסטיקות | נתונים מצרפיים ניהוליים. | -| `/testzmanim [GROUP_ID]` | סטטיסטיקות | אבחון מדופדף, סינון וחיפוש וייצוא JSON פרטי לפי בחירה. | -| `/subscribers` | מנויים | ספריית נמענים מוכרים ופרופילים. | -| `/broadcast` | שידורים | טיוטות ומשימות; שליחה, עריכה ומחיקה דורשות הרשאת שינוי ואישור מתאים. | -| `/managers` | ניהול מנהלים | תפקידים מואצלים במסגרת סמכות המבצע. | -| `/systemlinks` | קישורי מערכת | קישורי ניווט, שאינם מעניקים הרשאות. | -| `/trackinglinks` | קישורי מעקב | ספירת הפעלות וניהול; שינוי דורש הרשאת שינוי. | -| `/setcommands [LANGUAGE] [SCOPE] [preview]` | הרשאת שינוי תפריטים, גם לתצוגה | צפייה או עדכון תפריטי Telegram. | -| `/closegroups`, `/opengroups` | הרשאת שינוי בפעולות קבוצות | החלת חריגה ידנית לשעה מיד על קבוצות פעילות רשומות; שמירת נעילות קודמות ודיווח התנגשויות. אלה פעולות הרשאה אמיתיות. | -| `/restart` | בעלים מוגדר ב־`ADMIN` בלבד | הפעלה מחדש מסודרת של הבוט. | - -שפות לתפריטים: `all|he|en|ru|fr|es|pt-br`; תחומים: `all|private|operators|groups|group_admins`; ברירת מחדל: `all all`. דוגמה: `/setcommands ru group_admins preview`. בתפריטי הקבוצות מופיע כרגע `/settings`; אפשר להקליד פקודות נתמכות נוספות. - -[ניהול הבוט](docs/ADMIN_PANEL.md) · [אבחון](docs/DIAGNOSTICS.md) - - -## תפעול - -פקודות Docker רצות **במארח, באותו שורש ובאותה זהות פרויקט**, עם גישה לשירות Docker. פקודות PHP רצות **בתמונה ב־/app**, או בשורש התקנה ידנית כמשתמש השירות. פלט תפעולי עלול לכלול מזהי קבוצות ומצב; שמרו אותו בפרטיות. - -| פעולה | פקודה | השפעה או תנאי | -|---|---|---| -| בנייה | `docker compose build` | בנייה מהמקור ומה־lock. | -| הפעלה | `docker compose up -d shabbat` | הפעלה/יצירה מחדש וחיבור ל־Telegram. | -| עצירה | `docker compose stop shabbat` | עצירה מסודרת עם 60 שניות חסד; הכרכים נשמרים. | -| הפעלה מחדש | `docker compose restart shabbat` | הפעלת אותו שירות מחדש; ללא בניית תמונה. | -| מצב | `docker compose ps` | מצב השירות והמכולה. | -| לוגים | `docker compose logs --tail=100 shabbat` | צפייה בלוגים; `--follow` למעקב, Ctrl+C מסיים את הצופה. | -| בריאות | `docker compose exec shabbat php bin/health.php` | סכמה וחיבור, שתי פעימות ומדדי תורים/נעילות. | -| בריאות מעמיקה | `docker compose exec shabbat php bin/health.php --deep` | גם שלמות ומפתחות זרים; פעולה יקרה יותר. | -| בדיקת שחרור | `docker compose run --rm --no-deps shabbat php bin/self-check.php --release` | בדיקות פלטפורמה ותיקונים ללא חיבור לבוט. | -| בדיקת כתיבה | `docker compose run --rm --no-deps shabbat php bin/runtime-permissions.php --require-non-root` | בדיקת קבצים זמניים; עשויה להוסיף שורה ללוג תהליך קיים. | - -שתי פעימות המתזמן חייבות להיות בנות 180 שניות לכל היותר. מסד משוחזר או מנותק עשוי לעבור בדיקות מבנה ובכל זאת להחזיר `healthy=false` וקוד יציאה 1 ללא מתזמנים. אין ליצור פעימות מלאכותיות. - -כלי התחזוקה הישירים מופעלים **משורש הפרויקט כמשתמש השירות**. ב־Docker מקדימים לפקודת PHP ‏`docker compose run --rm --no-deps shabbat` ומשתמשים בנתיבי המכולה. `--writers-stopped` הוא הצהרת המפעיל ולא פקודת עצירה. - -| פעולה | פקודה | השפעה או דרישה | -|---|---|---| -| מיגרציה | `php bin/migrate.php --writers-stopped --db data/shabbat.sqlite --backup-dir backups` | כל הכותבים עצורים ותיקיית גיבוי קיימת; גיבוי מסד קיים והחלת מיגרציות. מוותרים על הגיבוי רק למסד חדש. | -| גיבוי | `php bin/backup.php --db data/shabbat.sqlite --directory backups --keep 7` | העתק SQLite עקבי ומניפסט, שמירת שבעה גיבויים בשם הכלי. אפשר בתחזוקה בזמן פעילות. | -| שחזור | `php bin/restore.php --backup backups/CHOSEN.sqlite --db data/shabbat.sqlite --writers-stopped` | גיבוי נבחר ומאומת, כותבים עצורים; היעד הקודם נשמר. | -| בדיקת ייבוא | `php bin/import-legacy.php --db data/shabbat.sqlite --legacy /path/to/legacy-copy --dry-run` | בדיקה ודוח, ללא כתיבת רשומות מיובאות או פעולות Telegram. | -| החלת ייבוא | `php bin/import-legacy.php --db data/shabbat.sqlite --legacy /path/to/legacy-copy --apply --writers-stopped --backup-dir backups` | מסד שעבר מיגרציות, תיקיית גיבוי וכותבים עצורים; ייבוא תוספתי. | -| אבחון לוח | `php bin/check-calendar.php --date=2026-10-15` | HTTPS ציבורי בלבד; ללא DB, ‏.env או סשן. `--help` מציג קואורדינטות/אזור/לוח/שפה. | -| אימות תיקונים | `php scripts/verify-patches.php` | בדיקת התוכן המותקן המאושר. | -| החלת תיקונים | `composer patches` | החלה ואימות; בהתקנה עצורה בלבד. | -| זיהוי בנייה | `php bin/build-metadata.php --commit=YOUR_40_HEX_COMMIT` | מחליפים את מציין המקום במקור מאומת; כתיבת זיהוי ודחיית טביעה לא תואמת. | - - -## שדרוג וייבוא מהגרסה הישנה - -שמרו תצורה פרטית, נתונים וסשן ואת זהות פרויקט Compose. השתמשו במקור ו־lock שנבדקו; עצרו כל כותב לפני שינוי סכמה או תלויות מותקנות. שדרוג רגיל נעשה עם `composer install`, ולא עם `composer update`. - -למסד Compose קיים, מתוך הפרויקט המוכן המחובר ל־**אותם כרכים**: - -
- -~~~sh -docker compose build -docker compose stop shabbat -docker compose run --rm --no-deps shabbat mkdir -p /app/data/backups -docker compose run --rm --no-deps shabbat php bin/backup.php --db /app/data/shabbat.sqlite --directory /app/data/backups --keep 7 -~~~ - -
- -השלימו גיבוי סשן ו־BroadcastManager כשהם עצורים ותרגול שחזור, כמתואר בהמשך, **לפני המשך העבודה**. לאחר מכן הריצו את המיגרציה ובדיקת השחרור: - -
- -~~~sh -docker compose run --rm --no-deps shabbat php bin/migrate.php --writers-stopped --db /app/data/shabbat.sqlite --backup-dir /app/data/backups -docker compose run --rm --no-deps shabbat php bin/self-check.php --release -~~~ - -
- -`docker compose up -d shabbat` מפעיל לאחר מכן את התמונה שנבדקה; בדקו לוגים ובריאות. הסדר בהתקנה ידנית: עצירה, גיבוי, התקנה מה־lock, מיגרציה, בדיקה והפעלה. - -גרסה 3.0.0 אינה מוסיפה מיגרציה מעבר ל־dev.9. המעבר מ־dev.8 ל־dev.9 הוסיף `016_delivery_safety.sql`. מ־dev.6 נדרשות גם 013–015; גרסאות מוקדמות מחילות אוטומטית את כל החסרות. אין לערוך SQL שכבר הוחל. ניסיונות מסירה קודמים שלא הוכרעו מטופלים בזהירות; צילומי הרשאות ישנים שאינם מאומתים עדיין דורשים בדיקת מנהל. - -במעבר מהבוט הישן מבוסס הקבצים: שמרו עותק מוגן, עצרו את הכותבים הישנים לייבוא הסופי ולמעבר, אתחלו מסד חדש, בצעו dry-run, השוו ספירות/תבניות/הרשאות/אזהרות ואז החילו עם כותבים עצורים ותיקיית גיבוי. הפקודות המדויקות מופיעות לעיל. ב־Docker חברו רק את העותק המוגן לקריאה בלבד: - -
- -~~~sh -docker compose run --rm --no-deps --volume /absolute/path/legacy-copy:/legacy:ro shabbat php bin/import-legacy.php --db /app/data/shabbat.sqlite --legacy /legacy --dry-run -~~~ - -
- -ייבוא מפורש משמר לפי הנתונים קבוצות, תבניות/ישויות/מדיה/כפתורים, טיוטות, נמענים מוכרים ועדויות הרשאות, ללא קריאות Telegram. המודולים החדשים נשארים כבויים; צילום חסר או פגום נשאר לטיפול. הגשר של `DBgroups.txt` בעת עלייה מוסיף רישומים בלבד ואינו מחליף ייבוא מלא. אין להחליף נתוני ייצור במסד או בסשן של בוט בדיקה. - -[מעבר](docs/MIGRATION.md) · [סכמה](docs/DATABASE.md) · [צילומים ישנים](docs/DEV8_PERMISSIONS.md) - - -## גיבוי וחזרה לגרסה קודמת - -גיבוי SQLite משתמש ב־`VACUUM INTO`, מאמת שלמות, מפתחות זרים והיסטוריית סכמה וכותב נתוני SHA-256. העתקת הקובץ הראשי החי בלבד עלולה להשמיט נתונים שכבר נכתבו ל־WAL. שמירת הגיבויים מוחקת רק שמות מדויקים של הכלי בתיקייה שנבחרה; בחרו `--keep` במכוון. - -SQLite **אינו** כולל את הסשן ואת כל קובצי BroadcastManager. עצרו את הכותבים ושמרו בנפרד נתיבים אלה, תצורה פרטית וקוד/lock תואמים לצד גיבוי המסד. דוגמת Docker **לאחר עצירת השירות**, משורש הפרויקט במארח. השתמשו בתיקיית עותק חדשה וריקה לכל גיבוי (החליפו את `../shabbat-private-backup` באופן עקבי): - -
- -~~~sh -mkdir -p ../shabbat-private-backup -chmod 700 ../shabbat-private-backup -docker compose cp shabbat:/app/data ../shabbat-private-backup/data -docker compose cp shabbat:/app/runtime ../shabbat-private-backup/runtime -cp .env ../shabbat-private-backup/config.env -chmod 600 ../shabbat-private-backup/config.env -~~~ - -
- -כך מועתקות תיקיות הנתונים המתמשכים כשהתהליך עצור לתיקייה מקבילה מחוץ להקשר הבנייה של Docker. שמרו אותן בפרטיות ומחוץ לחומר הפרסום. בהתקנה ידנית העתיקו את נתיבי הנתונים והסשן האמיתיים כשהכותבים עצורים. אמתו גיבויים לפני החלפה. - -צרו תיקיית תרגול נפרדת ושחזרו אליה גיבוי SQLite נבחר ומאומת: - -
- -~~~sh -mkdir -p ../shabbat-rehearsal -php bin/restore.php --backup backups/CHOSEN.sqlite --db ../shabbat-rehearsal/restored.sqlite --writers-stopped -php bin/health.php --db ../shabbat-rehearsal/restored.sqlite --deep -~~~ - -
- -החליפו `CHOSEN.sqlite` בשם האמיתי. בדקו שדות מבנה, סכמה ודגימת רשומות; בדיקת הבריאות הכוללת עשויה לצאת ב־1 ללא פעימות חיות. - -חזרה לגרסה קודמת: עצרו כותבים, שמרו גיבוי התאוששות עדכני, פתרו או תעדו חובות הרשאה ב־Telegram, שחזרו מסד/קוד/lock/סשן/מצב BroadcastManager תואמים, הפעילו עותק יחיד ובדקו התאמה להרשאות מרוחקות טריות. שחזור מסד אינו מבטל שינוי שכבר התקבל ב־Telegram. כלי השחזור מאמת קלט ומניפסט, מקבל נעילת כותב ושומר `*.before-restore-*`. כותב עסוק או סכמה לא תואמת דורשים בדיקה, ולא מחיקת נעילות או כרכים. - -[גיבוי ושחזור מפורטים](docs/BACKUP_RESTORE.md) - - -## פתרון תקלות - -| תסמין | פעולה | -|---|---| -| commit חסר או מקור ששונה בזמן הבנייה | שמרו נתוני ארכיון מאומתים או מסרו זהות אמיתית של עותק שנבדק. לאחר שינוי מקור מפיקים מחדש נתוני ארכיון. | -| בדיקת שחרור SQLite נכשלת | השתמשו בתמונה הנעולה או בסביבה מתוקנת ומתקבלת; אזהרת פיתוח אינה אישור ייצור. | -| סכמה חסרה או ישנה | עצרו כותבים, גבו והריצו מיגרציה לנתיב מפורש. העלייה אינה מבצעת מיגרציה. | -| כישלון תיקון | בדקו lock ומניפסטים והתקינו בעותק נקי ועצור; אין להחליש אימות. | -| קבוצה חדשה לא שולחת | בדקו מצב, מיקום, הפעלת מודול ותזמון; `/add` מתחיל כבוי. | -| הגדרות חסומות או פגו | פתחו שיחה פרטית ופאנל `/settings` חדש כמנהלי הקבוצה הנוכחיים. | -| חיפוש עיר נכשל | בדקו הפעלת GeoNames, חשבון, מכסה ו־HTTPS; השתמשו בעיר מוכרת או בקואורדינטות לפי הצורך. | -| מצב לא בריא | בדקו גיל שתי הפעימות, סכמה, תור ולוגים; מתזמן עצור אינו מעדכן פעימה. | -| קבוצה לא נפתחת | השתמשו בהתאוששות ובאבחון לצילומים חסרים/לא מאומתים/מתנגשים ושמרו הגבלות מקוריות. | -| תזכורת חסרה או מאוחרת | בדקו אזור זמן/תאריך, שקט, מדיניות חג וסיום, מודול ונושא. הזכאות נבדקת במסירה. | -| דחיית אימוג׳י מותאם | הגדירו `CUSTOM_EMOJI_ENABLED=0`; גם דחיית זכאות ודאית מפעילה חלופה. | -| שגיאת הרשאות קבצים | בדקו UID/GID ‏10001 ונתיבי עבודה/נתונים/סשן, והריצו בדיקת כתיבה. הימנעו מהרשאת כתיבה לכולם. | - -[תקלות נוספות](docs/TROUBLESHOOTING.md) · [פרטיות](docs/PRIVACY.md) · [דיווח אבטחה](.github/SECURITY.md) - - -## מבנה הפרויקט ופיתוח - -| נתיב | תוכן | -|---|---| -| `bot.php`, `src/` | כניסה לבוט ושירותי לוח, ממשק, תזמון, אחסון, Telegram וריצה. | -| `bin/`, `migrations/` | תחזוקה ושינויי סכמה ממוספרים שאינם משתנים אחרי החלה. | -| `resources/` | שש שפות, מקורות עומר מיוחסים ותצורת PHP. | -| `patches/` | מקורות בסיס ותוכן מתוקן שנבדקו, diffs, מקור וחתימות SHA-256. | -| `tests/` | בדיקות ונתוני JSON/TXT/PHP חיוניים. | -| `scripts/` | תיקונים, איכות, תלויות ואריזה מקומית. | -| `docs/`, `LICENSES/` | מדריכים, מקור ורישיונות. | -| `.github/` | תהליכי CI ושחרור ותבניות תרומה ואבטחה. | - -הריצו **בשורש עותק פיתוח נפרד, כחשבון המפתח**, ללא נתוני ייצור או סודות. ההתקנה כוללת כלי בדיקה; הבדיקות משתמשות במצב זמני מבודד. - -
- -~~~sh -composer install --no-interaction --prefer-dist -composer validate --strict --no-check-all -composer check-platform-reqs -php scripts/verify-patches.php -composer test -composer lint -composer style -composer analyse -composer check-locales -composer check-docs -composer self-check -~~~ - -
- -האפשרות `--no-check-all` מדלגת על עצת טווח גרסאות כללית בשל נעילת MadelineProto המדויקת; בדיקות סכמה ו־lock מחמירות נשארות. `lint` בודק תחביר ואיכות, `style` אוכף שגיאות PHPCS ו־`analyse` מפעיל PHPStan. ‏`composer style-review` מציג דוח סגנון רחב יותר; `composer style-fix` **משכתב קבצים**, ולכן מיועד לעותק פיתוח מבוקר בלבד. - -באותו שורש פיתוח: - -
- -~~~sh -composer show --locked --format=json -composer licenses --format=json -composer audit --locked --format=json -composer dependencies -~~~ - -
- -הפקודות מדווחות על חבילות נעולות, רישיונות מותקנים והתראות עדכניות; audit פונה לשירותי התראות. `dependencies` כותב עדויות ב־`docs/`; בדקו וסננו אותן לפני הכללה. אין להחליף lock כדי להשתיק בדיקה. - -הפקת תיקונים מחדש למפתחים בלבד, משורש עותק הפיתוח: - -
- -~~~sh -php patches/madelineproto/generate-artifacts.php -php patches/broadcastmanager/generate-artifacts.php -~~~ - -
- -הפקודות משכתבות תוצרי תיקון ומניפסטים מהמקורות המצורפים שנבדקו. הן מיועדות לסקירת תיקון יזומה, ולא להתקנה רגילה. בדקו חתימות ו־diffs ששונו והריצו לאחר מכן את כל בדיקות התיקונים. סקריפטי ההחלה והאימות ב־PHP מקבלים גם פרמטר מיקום ראשון אופציונלי לתיקיית vendor; השאירו אותו ריק לשימוש רגיל ב־`vendor/`. - -לאריזת שחרור מעותק Git נקי שכל שינוייו נשמרו ב־commit, עם Git, ‏Python 3.9+ ותלויות הפיתוח הנעולות: - -
- -~~~sh -php scripts/package.php -~~~ - -
- -הכלי כותב אל `dist/` את `shabbat-3.0.0.zip`, את `shabbat-3.0.0-corresponding-source.zip`, את `RELEASE_MANIFEST.json` ואת `SHA256SUMS`, ללא פרסום. חבילת המקור כוללת תלויות ריצה נעולות, תיקונים שנבדקו והשלמות מקור מגרסאות נעולות. הכלי הישן המפיק שלושה ארכיונים זמין לפיתוח מקומי בלבד באמצעות `php scripts/package.php --development`, עם פלט ברירת מחדל ב־`dist/development/`; הפצות כלי הפיתוח המותקנות שלו אינן הצעת מקור תואם לשחרור. ראו [הכנת שחרור](docs/RELEASE.md) לדרישות, לתכולת המקור ולבדיקת התוצרים. - -[ארכיטקטורה](docs/ARCHITECTURE.md) · [תלויות](docs/DEPENDENCIES.md) · [תיקונים](docs/PATCHES.md) · [הכנת שחרור](docs/RELEASE.md) · [תרומה](.github/CONTRIBUTING.md) · [קוד התנהגות](.github/CODE_OF_CONDUCT.md) - - -## רישוי וקרדיטים +| התקנה מפורטת והתקנת PHP ידנית | [התקנה](docs/INSTALLATION.md) | +| משתני סביבה והעדפות | [תצורה](docs/CONFIGURATION.md) | +| פקודות וניהול | [פקודות](docs/COMMANDS.md), [תפעול](docs/OPERATIONS.md), [פאנל מנהלים](docs/ADMIN_PANEL.md) | +| שדרוג, ייבוא ושחזור | [English](docs/PRODUCTION_UPGRADE.md), [עברית](docs/PRODUCTION_UPGRADE_HE.md), [מיפוי ייבוא](docs/MIGRATION.md), [גיבוי ושחזור](docs/BACKUP_RESTORE.md) | +| הרשאות, זמנים ותזכורות | [התאוששות הרשאות](docs/PERMISSION_RECOVERY.md), [שיטות חישוב](docs/ZMANIM_METHODS.md), [בטיחות מסירה](docs/DELIVERY_SAFETY.md) | +| תקלות ואבחון | [פתרון תקלות](docs/TROUBLESHOOTING.md), [אבחון](docs/DIAGNOSTICS.md) | +| פיתוח ובדיקות | [תרומה](.github/CONTRIBUTING.md), [ארכיטקטורה](docs/ARCHITECTURE.md), [מצב הבדיקות](docs/IMPLEMENTATION_STATUS.md) | +| גרסאות ואריזת מקור | [שינויים](CHANGELOG.md), [הערות שחרור](docs/RELEASE_NOTES.md), [תהליך שחרור](docs/RELEASE.md) | -היישום המשולב הוא **AGPL-3.0-only**: [הרישיון](LICENSE), [מדיניות רישוי](docs/LICENSING.md). הודעות MIT והרשאות היסטוריות נשמרות. רישיונות התלויות, הנתונים והתעתיקים נפרדים; הכותרות וההודעות שלהם נשמרות. + +## רישיון וקרדיטים -קרדיט ל־[WizardLoop](https://github.com/WizardLoop), ‏[MadelineProto](https://github.com/danog/MadelineProto), ‏[BroadcastManager](https://github.com/WizardLoop/BroadcastManager), ‏[Hebcal](https://www.hebcal.com/), ‏[GeoNames](https://www.geonames.org/) ולמקורות התפילה המיוחסים מוויקיטקסט. רכיבים, רישיונות, גרסאות מקור קבועות, שינויים וייחוס מתועדים ב־[THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md), במניפסטי תלויות ובנתוני המקור של המשאבים. +היישום מופץ ברישיון **AGPL-3.0-only**. יש לשמור את [הרישיון](LICENSE), הודעות זכויות היוצרים ההיסטוריות ו[הודעות צד שלישי](THIRD_PARTY_NOTICES.md). רישיונות התלויות נפרדים. שם נכלל הייחוס ל־MadelineProto,‏ BroadcastManager,‏ Hebcal,‏ GeoNames ולמקורות המשאבים. -מפעילים ו־forks צריכים להעמיד **מקור תואם בדיוק לגרסה שנפרסה**, כולל שינויים מקומיים ביישום ובתלויות וחומר בנייה נחוץ, ולהגדיר `SOURCE_URL`. קישור ל־`main` ציבורי שונה אינו מספיק. חומר הפרסום מחריג תצורה פרטית, DB/WAL/SHM חיים, סשנים, גיבויים, לוגים ו־caches, ושומר מקור נחוץ, בדיקות ונתוניהן, מקורות בסיס לתיקונים ורישיונות. +מפעילים חייבים להציע את המקור התואם המדויק של שינויים שהם מפעילים. ארכיון Corresponding Source הנפרד כולל את היישום ואת מקורות הריצה המתועדים, בלי טענה למקור מלא של מערכת ההפעלה או כל כלי הפיתוח. ראו [רישוי](docs/LICENSING.md).
From faa283e93e0641c70d6f221353dc25d81c0f9ca8 Mon Sep 17 00:00:00 2001 From: WizardLoop Date: Thu, 22 Oct 2026 22:21:52 +0300 Subject: [PATCH 3/4] Normalize public GitHub templates to declared LF archive bytes --- .github/CODE_OF_CONDUCT.md | 78 +++++++++---------- .github/FUNDING.yml | 4 +- .github/ISSUE_TEMPLATE/bug_report.yml | 68 ++++++++-------- .github/ISSUE_TEMPLATE/feature_request.yml | 36 ++++----- .../ISSUE_TEMPLATE/improvement_question.yml | 28 +++---- 5 files changed, 107 insertions(+), 107 deletions(-) diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md index 7323052..58f9d5a 100644 --- a/.github/CODE_OF_CONDUCT.md +++ b/.github/CODE_OF_CONDUCT.md @@ -1,39 +1,39 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to a positive environment for our community include: -- Using welcoming and inclusive language -- Being respectful of differing viewpoints and experiences -- Gracefully accepting constructive criticism -- Showing empathy towards other community members - -Examples of unacceptable behavior include: -- The use of sexualized language or imagery and unwelcome sexual attention or advances -- Trolling, insulting or derogatory comments, and personal or political attacks -- Public or private harassment -- Publishing others’ private information, such as a physical or electronic address, without explicit permission - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and will take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -## Scope - -This Code of Conduct applies within all project spaces and in public spaces when an individual is representing the project or its community. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [@WizardLoop on Telegram](https://t.me/WizardLoop) or contact@wizardloop.com. - -All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html - -[homepage]: https://www.contributor-covenant.org +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our community include: +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Showing empathy towards other community members + +Examples of unacceptable behavior include: +- The use of sexualized language or imagery and unwelcome sexual attention or advances +- Trolling, insulting or derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others’ private information, such as a physical or electronic address, without explicit permission + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and will take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +## Scope + +This Code of Conduct applies within all project spaces and in public spaces when an individual is representing the project or its community. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [@WizardLoop on Telegram](https://t.me/WizardLoop) or contact@wizardloop.com. + +All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at https://www.contributor-covenant.org/version/2/1/code_of_conduct.html + +[homepage]: https://www.contributor-covenant.org diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 6d83f6e..1c634ae 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,2 +1,2 @@ -github: ['WizardLoop'] -custom: ['https://WizardLoop.t.me'] +github: ['WizardLoop'] +custom: ['https://WizardLoop.t.me'] diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 9ca37fa..daf22f4 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -1,37 +1,37 @@ -name: "🐞 Bug report" -description: "Report a reproducible bug" -labels: [bug] -body: - - type: textarea - attributes: - label: "Describe the bug" - description: "A clear and concise description of what the bug is." - placeholder: "Bug description" - - type: textarea - attributes: - label: "Steps to Reproduce" - description: "What steps did you take that led to the bug?" - placeholder: "1. Go to ...\n2. Click ...\n3. See error" - - type: textarea - attributes: - label: "Expected behavior" - description: "What did you expect to happen?" - placeholder: "Expected behavior" - - type: textarea - attributes: - label: "Screenshots/Logs" - description: "Use synthetic examples and redact tokens, sessions, private group/user IDs, payment data and live databases." - - type: input - attributes: - label: "Bot Version / Commit" - description: "What version or commit are you using?" - - type: dropdown - attributes: - label: "Environment" - options: - - Self-hosted Linux - - Windows - - Other +name: "🐞 Bug report" +description: "Report a reproducible bug" +labels: [bug] +body: + - type: textarea + attributes: + label: "Describe the bug" + description: "A clear and concise description of what the bug is." + placeholder: "Bug description" + - type: textarea + attributes: + label: "Steps to Reproduce" + description: "What steps did you take that led to the bug?" + placeholder: "1. Go to ...\n2. Click ...\n3. See error" + - type: textarea + attributes: + label: "Expected behavior" + description: "What did you expect to happen?" + placeholder: "Expected behavior" + - type: textarea + attributes: + label: "Screenshots/Logs" + description: "Use synthetic examples and redact tokens, sessions, private group/user IDs, payment data and live databases." + - type: input + attributes: + label: "Bot Version / Commit" + description: "What version or commit are you using?" + - type: dropdown + attributes: + label: "Environment" + options: + - Self-hosted Linux + - Windows + - Other - type: textarea attributes: diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 2fe4d12..78ee1fb 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -1,18 +1,18 @@ -name: "✨ Feature request" -description: "Suggest an idea or improvement" -labels: [enhancement] -body: - - type: textarea - attributes: - label: "Feature description" - description: "What would you like to see added?" - placeholder: "Feature details" - - type: textarea - attributes: - label: "Use case" - description: "Describe a real scenario where this feature would help." - placeholder: "Use case" - - type: textarea - attributes: - label: "Additional context" - description: "Anything else?" +name: "✨ Feature request" +description: "Suggest an idea or improvement" +labels: [enhancement] +body: + - type: textarea + attributes: + label: "Feature description" + description: "What would you like to see added?" + placeholder: "Feature details" + - type: textarea + attributes: + label: "Use case" + description: "Describe a real scenario where this feature would help." + placeholder: "Use case" + - type: textarea + attributes: + label: "Additional context" + description: "Anything else?" diff --git a/.github/ISSUE_TEMPLATE/improvement_question.yml b/.github/ISSUE_TEMPLATE/improvement_question.yml index 6c1b496..39209e8 100644 --- a/.github/ISSUE_TEMPLATE/improvement_question.yml +++ b/.github/ISSUE_TEMPLATE/improvement_question.yml @@ -1,14 +1,14 @@ -name: "❓ Improvement / Question" -description: "Suggest an improvement or ask a question" -labels: [question] -body: - - type: textarea - attributes: - label: "Improvement or Question" - description: "Describe your suggestion or question." - placeholder: "Your suggestion/question" - - type: textarea - attributes: - label: "Context" - description: "Where in the project do you want to see this?" - placeholder: "Relevant files, code, or context" +name: "❓ Improvement / Question" +description: "Suggest an improvement or ask a question" +labels: [question] +body: + - type: textarea + attributes: + label: "Improvement or Question" + description: "Describe your suggestion or question." + placeholder: "Your suggestion/question" + - type: textarea + attributes: + label: "Context" + description: "Where in the project do you want to see this?" + placeholder: "Relevant files, code, or context" From 5a04832535cefbfe3eb26d827cd0afa6e12b0fa5 Mon Sep 17 00:00:00 2001 From: WizardLoop Date: Thu, 22 Oct 2026 22:54:14 +0300 Subject: [PATCH 4/4] Require current stable PHP security patches and verify release runtimes --- .github/workflows/ci.yml | 16 ++- .github/workflows/release.yml | 6 +- CHANGELOG.md | 1 + Dockerfile | 2 +- README.md | 2 +- bin/self-check.php | 10 +- bot.php | 8 ++ composer.json | 2 +- composer.lock | 4 +- docs/DEPENDENCIES.md | 2 +- docs/IMPLEMENTATION_STATUS.md | 2 +- docs/INSTALLATION.md | 11 +- docs/PRODUCTION_UPGRADE.md | 2 + docs/PRODUCTION_UPGRADE_HE.md | 2 + docs/PUBLICATION_STATUS.md | 5 + docs/RELEASE.md | 2 +- docs/RELEASE_NOTES.md | 1 + docs/dependencies.json | 6 +- readme-he.md | 2 +- resources/release/source-manifest.json | 2 +- src/Runtime/PhpRuntime.php | 50 +++++++ src/Runtime/Runner.php | 6 + tests/PhpRuntimeTest.php | 173 +++++++++++++++++++++++++ 23 files changed, 297 insertions(+), 20 deletions(-) create mode 100644 src/Runtime/PhpRuntime.php create mode 100644 tests/PhpRuntimeTest.php diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6ebbf4f..2227d81 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,19 +6,33 @@ permissions: contents: read jobs: php: + name: php (${{ matrix.php }}) runs-on: ubuntu-latest strategy: fail-fast: false matrix: php: ["8.3", "8.4", "8.5"] + include: + - php: "8.3" + version: "8.3.36" + - php: "8.4" + version: "8.4.27" + - php: "8.5" + version: "8.5.12" steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 + env: + update: true with: - php-version: ${{ matrix.php }} + php-version: ${{ matrix.version }} extensions: pdo_sqlite, mbstring, xml, dom, fileinfo, zlib, zip tools: composer:2.10.3 coverage: none + - name: Verify exact security-patched PHP runtime + env: + EXPECTED_PHP_VERSION: ${{ matrix.version }} + run: php -r 'if (PHP_VERSION !== getenv("EXPECTED_PHP_VERSION")) { fwrite(STDERR, "Unexpected PHP runtime " . PHP_VERSION . "\n"); exit(1); } echo "Verified PHP " . PHP_VERSION . "\n";' - run: composer validate --strict --no-check-all - run: composer install --no-interaction --prefer-dist - run: composer check-platform-reqs diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d12796e..ef39f1a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,11 +10,15 @@ jobs: steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 + env: + update: true with: - php-version: "8.4" + php-version: "8.4.27" extensions: pdo_sqlite, mbstring, xml, dom, fileinfo, zlib, zip tools: composer:2.10.3 coverage: none + - name: Verify exact security-patched PHP runtime + run: php -r 'if (PHP_VERSION !== "8.4.27") { fwrite(STDERR, "Unexpected PHP runtime " . PHP_VERSION . "\n"); exit(1); } echo "Verified PHP " . PHP_VERSION . "\n";' - run: composer validate --strict --no-check-all - run: composer install --no-interaction --prefer-dist - run: composer check-platform-reqs diff --git a/CHANGELOG.md b/CHANGELOG.md index 600fe14..dd6ca23 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ PHP 8.3 compatibility: module-delivery bookkeeping now uses the database-owned ` ## 3.1.0 +- Require PHP 8.3.36, 8.4.27 or 8.5.12 and later patches on those branches, incorporating the upstream security fixes published on 22 October 2026. Pin the Docker image to verified PHP 8.4.27 bytes and verify exact patched runtimes in CI and release packaging. - Upgrade the official MadelineProto dependency to the reviewed stable 8.11.10 / TL layer 232 line, with reproducible Composer locking and a stable compatible version range. - Retire the upstreamed UpdateLoop/cancellation, GeoPoint and formatted-date patch sets. Re-review the Fresh Peer and BroadcastManager patches against the updated dependency source. - Update the central keyboard compatibility boundary for the new native inline constructors while preserving saved templates, callback identifiers, styles and reply-keyboard separation. diff --git a/Dockerfile b/Dockerfile index f0f4674..b289779 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM composer:2.10.3@sha256:af98f42dfff7c68ba8d53c2164fd9fde1087b7d449514baa38c418b1f6bc4bac AS composer -FROM php:8.4.26-cli-bookworm@sha256:836ac6c672d1372a47c8fd61b625015bd07760f493fb2eaab2087636498a2b4b +FROM php:8.4.27-cli-bookworm@sha256:496b5e02fe9fe44fcfb715023b931048111dc4e0bc719789d83c906be9f04b05 RUN apt-get update \ && apt-get install -y --no-install-recommends ca-certificates tzdata libsqlite3-dev libonig-dev libxml2-dev libzip-dev unzip curl build-essential pkg-config \ && curl --fail --location --proto '=https' --tlsv1.2 https://www.sqlite.org/2026/sqlite-autoconf-3510300.tar.gz -o /tmp/sqlite.tar.gz \ diff --git a/README.md b/README.md index b791386..9436fee 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ docker --version docker compose version ~~~ -Docker supplies PHP, Composer, SQLite and the locked dependencies. A supported [manual installation](docs/INSTALLATION.md#manual-installation) is also documented. +Docker supplies PHP 8.4.27, Composer, SQLite and the locked dependencies. Manual installations require 64-bit PHP **8.3.36+, 8.4.27+ or 8.5.12+**, within those supported branches. See the [22 October 2026 security baseline](docs/INSTALLATION.md#php-security-baseline) and [manual installation](docs/INSTALLATION.md#manual-installation). ## 1. Extract a fresh installation diff --git a/bin/self-check.php b/bin/self-check.php index 8c93764..c1fcc4c 100644 --- a/bin/self-check.php +++ b/bin/self-check.php @@ -4,6 +4,13 @@ // SPDX-License-Identifier: AGPL-3.0-only $root = dirname(__DIR__); +require_once $root . '/src/Runtime/PhpRuntime.php'; +try { + \Shabbat\Runtime\PhpRuntime::assertSupported(); +} catch (\RuntimeException $error) { + echo json_encode(['php' => PHP_VERSION, 'secrets_required' => false, 'failures' => [$error->getMessage()]], JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR) . "\n"; + exit(1); +} require_once $root . '/vendor/autoload.php'; require_once $root . '/scripts/apply-patches.php'; $failures = []; @@ -13,9 +20,6 @@ $failures[] = 'Missing PHP extension ' . $extension; } } -if (PHP_INT_SIZE !== 8 || PHP_VERSION_ID < 80300 || PHP_VERSION_ID >= 80600) { - $failures[] = 'Supported platform is 64-bit PHP 8.3, 8.4 or 8.5.'; -} try { $pdo = new PDO('sqlite::memory:'); $sqlite = $pdo->query('SELECT sqlite_version()')->fetchColumn(); diff --git a/bot.php b/bot.php index 758c5fe..860c4a3 100644 --- a/bot.php +++ b/bot.php @@ -12,6 +12,14 @@ * @link wizardloop => https://wizardloop.t.me */ +require_once __DIR__.'/src/Runtime/PhpRuntime.php'; +try { + \Shabbat\Runtime\PhpRuntime::assertSupported(); +} catch (\RuntimeException $error) { + fwrite(STDERR, $error->getMessage()."\n"); + exit(1); +} + $autoload = __DIR__.'/vendor/autoload.php'; if (!file_exists($autoload)) { die("Autoload file not found. Please run 'composer install'."); diff --git a/composer.json b/composer.json index e717465..96e0691 100644 --- a/composer.json +++ b/composer.json @@ -9,7 +9,7 @@ } ], "require": { - "php": "~8.3.0 || ~8.4.0 || ~8.5.0", + "php": "~8.3.36 || ~8.4.27 || ~8.5.12", "ext-pdo": "*", "ext-pdo_sqlite": "*", "ext-mbstring": "*", diff --git a/composer.lock b/composer.lock index dfa0218..34fba19 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "86b3871c238751a775f05aa9312e088f", + "content-hash": "a97058db3883fce1e08983afa5d9e2ab", "packages": [ { "name": "amphp/amp", @@ -7896,7 +7896,7 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "~8.3.0 || ~8.4.0 || ~8.5.0", + "php": "~8.3.36 || ~8.4.27 || ~8.5.12", "ext-pdo": "*", "ext-pdo_sqlite": "*", "ext-mbstring": "*" diff --git a/docs/DEPENDENCIES.md b/docs/DEPENDENCIES.md index aad2a53..b8f4f97 100644 --- a/docs/DEPENDENCIES.md +++ b/docs/DEPENDENCIES.md @@ -29,6 +29,6 @@ The omitted Amp HTTP Server tools/tls/localhost.pem and tools/tls/localhost.key. ## SQLite and local validation limits -The current Windows test PHP loads SQLite 3.45.2. This local runtime predates the [official WAL-reset fix](https://sqlite.org/wal.html), so local tests do not approve it as the release runtime. Docker builds pinned SQLite 3.51.3, verifies its publisher SHA-256 and checks the PHP-loaded version with self-check --release. The source hash is 81f5be397049b0cae1b167f2225af7646fc0f82e4a9b3c48c9ea3a533e21d77a. Docker is unavailable locally; exact release-platform evidence must come from the actual hosted build/checks. SQLite retains its public-domain terms. +The earlier Windows check runtime loaded PHP 8.5.0 and SQLite 3.45.2, predating the current PHP security baseline and the [official WAL-reset fix](https://sqlite.org/wal.html). Those results do not approve it as a release runtime. The isolated verifier now uses publisher-hash-verified PHP 8.5.12 with SQLite 3.53.4; it does not replace the Linux image checks. Docker builds pinned SQLite 3.51.3, verifies its publisher SHA-256 and checks the PHP-loaded version with self-check --release. The source hash is 81f5be397049b0cae1b167f2225af7646fc0f82e4a9b3c48c9ea3a533e21d77a. Docker is unavailable locally; exact release-platform evidence must come from the actual hosted build/checks. SQLite retains its public-domain terms. Locked development tools include PHPUnit, PHPStan and PHP_CodeSniffer. Style checks apply to application PHP, scripts and tests; original dependency baselines and deliberately synthetic fixtures retain their existing exclusions. [Publication status](PUBLICATION_STATUS.md) identifies release evidence and live-acceptance limits. diff --git a/docs/IMPLEMENTATION_STATUS.md b/docs/IMPLEMENTATION_STATUS.md index 1ecd7f9..76183a0 100644 --- a/docs/IMPLEMENTATION_STATUS.md +++ b/docs/IMPLEMENTATION_STATUS.md @@ -36,7 +36,7 @@ Shutdown coverage exercises official SDK loop recovery/stop behavior and real di The suites exercise fake transports, provider fixtures, controlled clocks, isolated databases, migration/restore, patch lifecycle and simulated load. Run them against the final reviewed 3.1.0 commit and locked installation. Earlier 3.0.0 hosted results do not replace this version's mandatory clean-install, regression, analysis, image and artifact checks. Publication requires those gates to pass on the exact final commit. Release manifests, SHA-256 sums and the matching GitHub Actions run identify the tested source/artifacts. Local checks directories are external evidence, not runtime source. -Local Windows limitations include unavailable Docker and POSIX-only/symlink-dependent coverage. The local PHP-loaded SQLite 3.45.2 is deliberately rejected by the release gate; the Docker target pins SQLite 3.51.3 and must pass that gate. Do not describe an unexecuted image build, CI run or Telegram operation as successful. See [publication status](PUBLICATION_STATUS.md) for source scope and [release preparation](RELEASE.md) for gates. +Local Windows limitations include unavailable Docker and POSIX-only/symlink-dependent coverage. The recorded local PHP 8.5.0 and PHP-loaded SQLite 3.45.2 are below the current deployment baseline; their test results remain compatibility evidence. The [22 October 2026 baseline](INSTALLATION.md#php-security-baseline) requires PHP 8.3.36+, 8.4.27+ or 8.5.12+ within those branches. Docker targets PHP 8.4.27 and SQLite 3.51.3 and must pass the release gate. Do not describe an unexecuted image build, CI run or Telegram operation as successful. See [publication status](PUBLICATION_STATUS.md) for source scope and [release preparation](RELEASE.md) for gates. ## Remaining deployment acceptance diff --git a/docs/INSTALLATION.md b/docs/INSTALLATION.md index dd9f8c0..583e696 100644 --- a/docs/INSTALLATION.md +++ b/docs/INSTALLATION.md @@ -8,9 +8,16 @@ This documents version 3.1.0; check [acceptance status](IMPLEMENTATION_STATUS.md Run the following commands in the unpacked project root on Linux. Docker commands require access to the Docker daemon and Compose v2; that access is privileged. PHP maintenance commands run as the image's non-root user. The only Compose service is `shabbat`; there is no `composer` service. -The Dockerfile pins PHP 8.4.26 and Composer 2.10.3 images by digest and builds checksum-verified SQLite 3.51.3. It installs dependencies from `composer.lock`, applies and verifies the two active local patch sets before startup, and runs without root as UID/GID 10001. Image building uses network access but no bot credentials. CI uses the same Composer version, including the upstream [GitHub Actions token-validation and disclosure fix](https://github.com/composer/composer/security/advisories/GHSA-f9f8-rm49-7jv2); authentication and all validation gates remain enabled. Runtime requires a separate configured bot, Telegram access and calendar provider access. +The Dockerfile pins PHP 8.4.27 and Composer 2.10.3 images by digest and builds checksum-verified SQLite 3.51.3. It installs dependencies from `composer.lock`, applies and verifies the two active local patch sets before startup, and runs without root as UID/GID 10001. Image building uses network access but no bot credentials. CI uses the same Composer version, including the upstream [GitHub Actions token-validation and disclosure fix](https://github.com/composer/composer/security/advisories/GHSA-f9f8-rm49-7jv2); authentication and all validation gates remain enabled. Runtime requires a separate configured bot, Telegram access and calendar provider access. -Manual installation requires 64-bit PHP 8.3, 8.4 or 8.5, Composer 2, the extensions required by `composer check-platform-reqs`, and a patched PHP-loaded SQLite version accepted by `php bin/self-check.php --release`. That gate accepts SQLite >=3.51.3 or the explicitly reviewed 3.44.6/3.50.7 backports. A newer standalone `sqlite3` executable does not change the library loaded by PHP PDO. The image is the documented deployment baseline; native process supervision is operator-managed. +Manual installation requires 64-bit PHP **8.3.36+, 8.4.27+ or 8.5.12+** within the 8.3/8.4/8.5 branches, Composer 2.10.3, the extensions required by `composer check-platform-reqs`, and a patched PHP-loaded SQLite version accepted by `php bin/self-check.php --release`. That gate accepts SQLite >=3.51.3 or the explicitly reviewed 3.44.6/3.50.7 backports. A newer standalone `sqlite3` executable does not change the library loaded by PHP PDO. The image is the documented deployment baseline; native process supervision is operator-managed. + + +## PHP security baseline — 22 October 2026 + +PHP's [official changelog](https://www.php.net/ChangeLog-8.php) dates the current patched releases 8.3.36, 8.4.27 and 8.5.12 to 22 October 2026. The [security notice published on 21 October](https://www.php.net/archive/2026.php) identifies fixes for [CVE-2026-109618](https://github.com/php/php-src/security/advisories/GHSA-w8hw-w9fx-j79w) and [CVE-2026-109619](https://github.com/php/php-src/security/advisories/GHSA-6wmf-4rv5-p3rp). These versions are this release's minimum patch levels. Use maintained patch releases within the supported branches and recheck upstream advisories when deploying. + +The Docker baseline stays on the 8.4 branch and pins `php:8.4.27-cli-bookworm` by digest. Release checks must record the actual interpreter version and pass on the patched runtime. The advisory describes web-request SAPIs; it does not establish a demonstrated remote exploit against this CLI bot. Meeting these minimums addresses the identified upstream fixes and does not guarantee the absence of other vulnerabilities in PHP, extensions or the operating system. ## New isolated Docker installation diff --git a/docs/PRODUCTION_UPGRADE.md b/docs/PRODUCTION_UPGRADE.md index f481d73..a90eb2e 100644 --- a/docs/PRODUCTION_UPGRADE.md +++ b/docs/PRODUCTION_UPGRADE.md @@ -6,6 +6,8 @@ This is a manual runbook, not an executed deployment. Use the released, verified Commands cover the legacy whole-project bind mount or standard 3.0 Docker data/session volumes. The 3.0 path probe only reads configuration; it opens no API/session. A custom session name or lock-only remnants stop this procedure. Custom mounts, external storage, symlinks to private data or another writer need a tailored backup first. Run server blocks in one **root Bash session** with Docker/Compose, unzip, GNU coreutils and sufficient storage. Keep backups outside source/build directories. Only the final start connects the new bot to Telegram. +The new image uses PHP **8.4.27**. Manual runtimes require **8.3.36+, 8.4.27+ or 8.5.12+** within those branches; see the [22 October 2026 security baseline](INSTALLATION.md#php-security-baseline). Preserve the old image for rollback, but do not treat an older interpreter as meeting the new baseline. + ## 1. Upload from your computer Download the deployment ZIP and SHA256SUMS from the matching GitHub release. In the computer's terminal, replace SERVER with your SSH hostname/IP. SFTP can upload the same files to the same protected destination. diff --git a/docs/PRODUCTION_UPGRADE_HE.md b/docs/PRODUCTION_UPGRADE_HE.md index b6744cf..8e39dbe 100644 --- a/docs/PRODUCTION_UPGRADE_HE.md +++ b/docs/PRODUCTION_UPGRADE_HE.md @@ -8,6 +8,8 @@ הפקודות תומכות בהתקנת legacy שמחברת את כל הפרויקט ובאמצעי האחסון הרגילים של 3.0. בדיקת הנתיבים ב־3.0 קוראת תצורה בלבד; היא אינה פותחת API או סשן. שם סשן מותאם או שרידי נעילה ללא תוכן סשן עוצרים את ההליך. חיבורים מותאמים, אחסון חיצוני, קישורים לנתונים פרטיים או כותב נוסף מחייבים גיבוי מותאם מראש. הריצו את בלוקי השרת באותו **חלון Bash כ־root**, עם Docker/Compose,‏ unzip, כלי GNU ומקום פנוי מספיק. הגיבויים נשמרים מחוץ לקוד ולבנייה. רק ההפעלה בסוף מחברת את הבוט החדש ל־Telegram. +האימג׳ החדש משתמש ב־PHP **8.4.27**. בהתקנה ידנית נדרש **8.3.36+,‏ 8.4.27+ או 8.5.12+** בתוך הענפים האלה; ראו [דרישות אבטחה מ־22 באוקטובר 2026](INSTALLATION.md#php-security-baseline). שמרו את האימג׳ הישן לחזרה לאחור, אך אין לראות במפרש ישן עמידה בדרישות החדשות. + ## 1. העלאה מהמחשב הורידו את ארכיון הפריסה ואת SHA256SUMS משחרור GitHub המתאים. במסוף במחשב החליפו SERVER בשם השרת או בכתובת ה־IP. אפשר להעלות את אותם קבצים גם ב־SFTP לאותו יעד פרטי. diff --git a/docs/PUBLICATION_STATUS.md b/docs/PUBLICATION_STATUS.md index 473b3e9..7a7b50b 100644 --- a/docs/PUBLICATION_STATUS.md +++ b/docs/PUBLICATION_STATUS.md @@ -13,6 +13,11 @@ The matching GitHub Actions run and release manifest identify the tested source and artifacts. Historical results from another version do not replace those checks; a stable tag or release must not bypass a failed mandatory gate. +The runtime baseline requires PHP **8.3.36+, 8.4.27+ or 8.5.12+** within those +branches; Docker pins **8.4.27**. The [dated security baseline](INSTALLATION.md#php-security-baseline) +records the upstream fixes reviewed on 22 October 2026. Earlier checks on an older +interpreter are compatibility evidence, not approval of that deployment runtime. + Shutdown coverage combines the official loop contract with application-owned writer exclusion through SDK disconnect/finalization. Loop `stop()` prevents rescheduling after the current body returns. Offline fixtures use an in-memory diff --git a/docs/RELEASE.md b/docs/RELEASE.md index ff883cb..825649b 100644 --- a/docs/RELEASE.md +++ b/docs/RELEASE.md @@ -10,7 +10,7 @@ The release provides `shabbat-3.1.0.zip`, `shabbat-3.1.0-corresponding-source.zi ## Reproduce quality checks -Run at the root of a disposable checkout, as its nonroot owner with write access, with the supported PHP/Composer runtime. The locked installation writes only this checkout's dependencies and applies the approved patches. Never install or patch dependencies inside an active bot tree. +Run at the root of a disposable checkout, as its nonroot owner with write access, with the supported [patched PHP/Composer runtime](INSTALLATION.md#php-security-baseline): 64-bit PHP 8.3.36+, 8.4.27+ or 8.5.12+ within those branches, and Composer 2.10.3. The locked installation writes only this checkout's dependencies and applies the approved patches. Never install or patch dependencies inside an active bot tree. ```sh composer validate --strict --no-check-all diff --git a/docs/RELEASE_NOTES.md b/docs/RELEASE_NOTES.md index 793d3d6..8ad0fde 100644 --- a/docs/RELEASE_NOTES.md +++ b/docs/RELEASE_NOTES.md @@ -6,6 +6,7 @@ Automated release checks and deployment acceptance have separate scopes. See [re ## Changes +- Raise the supported PHP patch floors to **8.3.36 / 8.4.27 / 8.5.12** and the Docker baseline to **8.4.27**, following the [22 October 2026 security baseline](INSTALLATION.md#php-security-baseline). - Update MadelineProto to official stable 8.11.10 / TL layer 232 with a compatible stable Composer range and exact lock. - Retire upstreamed UpdateLoop/cancellation, GeoPoint and formatted-date patches; retain the reviewed version-matched Fresh Peer and BroadcastManager changes where still required. - Update the keyboard compatibility boundary for new inline constructors while preserving saved templates, callback IDs, styles/icons and distinct reply keyboards. diff --git a/docs/dependencies.json b/docs/dependencies.json index cd94790..d7f0c51 100644 --- a/docs/dependencies.json +++ b/docs/dependencies.json @@ -1,6 +1,6 @@ { "schema_version": 1, - "lock_sha256": "c86f54854a177e458a01cc3943eb6d9eeeb06e29bd670a66a02d9b12bd4ca288", + "lock_sha256": "2b5d70795b5a6000769ea87b6f340667d9d743152ac5fefde8f7ae2ff9aecb14", "packages": [ { "name": "amphp/amp", @@ -2461,10 +2461,10 @@ "external_runtime": [ { "name": "SQLite", - "php_loaded_version": "3.45.2", + "php_loaded_version": "3.53.4", "license": "public-domain", "terms": "https://sqlite.org/copyright.html", - "wal_fix_verified": false, + "wal_fix_verified": true, "docker_source_version": "3.51.3", "docker_source_url": "https://www.sqlite.org/2026/sqlite-autoconf-3510300.tar.gz", "docker_source_sha256": "81f5be397049b0cae1b167f2225af7646fc0f82e4a9b3c48c9ea3a533e21d77a", diff --git a/readme-he.md b/readme-he.md index fbdcf7c..5a80639 100644 --- a/readme-he.md +++ b/readme-he.md @@ -48,7 +48,7 @@ docker compose version -Docker מספק את PHP,‏ Composer,‏ SQLite והתלויות הנעולות. קיימות גם הוראות ל[התקנה ידנית](docs/INSTALLATION.md#manual-installation). +Docker מספק PHP 8.4.27,‏ Composer,‏ SQLite ואת התלויות הנעולות. בהתקנה ידנית נדרש PHP ב־64 ביט: **8.3.36+,‏ 8.4.27+ או 8.5.12+**, בתוך הענפים הנתמכים האלה. ראו [דרישות אבטחה מ־22 באוקטובר 2026](docs/INSTALLATION.md#php-security-baseline) ו[התקנה ידנית](docs/INSTALLATION.md#manual-installation). ## 1. חילוץ התקנה חדשה diff --git a/resources/release/source-manifest.json b/resources/release/source-manifest.json index 2b0d903..01eee6d 100644 --- a/resources/release/source-manifest.json +++ b/resources/release/source-manifest.json @@ -1,7 +1,7 @@ { "schema_version": 1, "description": "Reviewed application Composer runtime source inputs for 3.1.0; exact locked dist bytes plus two manifest-approved local patches and pinned preferred-source supplements.", - "composer_lock_sha256": "c86f54854a177e458a01cc3943eb6d9eeeb06e29bd670a66a02d9b12bd4ca288", + "composer_lock_sha256": "2b5d70795b5a6000769ea87b6f340667d9d743152ac5fefde8f7ae2ff9aecb14", "origin": { "review_date": "2026-10-22", "method": "Exact Composer cache ZIP identified by SHA-1 of locked dist URL and pinned Git-root reference; all runtime files matched original dist bytes except the two approved patch outputs. Supplemental downloads matched pinned upstream Git blobs.", diff --git a/src/Runtime/PhpRuntime.php b/src/Runtime/PhpRuntime.php new file mode 100644 index 0000000..9123a6a --- /dev/null +++ b/src/Runtime/PhpRuntime.php @@ -0,0 +1,50 @@ + 80336, + 804 => 80427, + 805 => 80512, + ]; + + public static function supports(int $versionId, int $integerSize): bool + { + $minimum = self::MINIMUM_VERSION_IDS[intdiv($versionId, 100)] ?? null; + return $integerSize === 8 && $minimum !== null && $versionId >= $minimum; + } + + /** Accept stable upstream releases and distro/build suffixes, but never prereleases. */ + public static function isStableRelease(string $version): bool + { + if (!preg_match('/^[0-9]+\.[0-9]+\.[0-9]+(.*)$/D', $version, $parts)) { + return false; + } + $suffix = $parts[1]; + if ($suffix === '') { + return true; + } + if (!preg_match('/^[-+~][a-z0-9.+_~\-]+$/iD', $suffix)) { + return false; + } + return !preg_match('/(?:^|[-+._~])(?:dev|alpha|beta|rc|snapshot|preview|nightly)[0-9]*(?=$|[-+._~])/i', $suffix); + } + + /** No configuration, environment variable or Composer option bypasses this gate. */ + public static function assertSupported(): void + { + if (!self::supports(PHP_VERSION_ID, PHP_INT_SIZE) || !self::isStableRelease(PHP_VERSION)) { + throw new \RuntimeException( + 'Unsupported PHP runtime. Require stable 64-bit PHP 8.3.36+, 8.4.27+ or 8.5.12+ ' + . 'within those supported branches; running ' . PHP_VERSION . '.' + ); + } + } +} diff --git a/src/Runtime/Runner.php b/src/Runtime/Runner.php index f20c964..1f0aa4c 100644 --- a/src/Runtime/Runner.php +++ b/src/Runtime/Runner.php @@ -151,6 +151,12 @@ public static function finalizeSession(?SingleInstance $lock, callable $flush): /** @param class-string<\danog\MadelineProto\EventHandler> $handlerClass */ public static function run(string $handlerClass, ?string $root = null): int { + try { + PhpRuntime::assertSupported(); + } catch (\RuntimeException $error) { + fwrite(STDERR, $error->getMessage() . "\n"); + return 1; + } $root ??= dirname(__DIR__, 2); $lock = null; $signals = []; diff --git a/tests/PhpRuntimeTest.php b/tests/PhpRuntimeTest.php new file mode 100644 index 0000000..f70c32c --- /dev/null +++ b/tests/PhpRuntimeTest.php @@ -0,0 +1,173 @@ + [$version, $size, $supported]; + } + } + + #[DataProvider('versions')] + public function testSecurityFloorsAndSupportedBranches(int $version, int $size, bool $supported): void + { + self::assertSame($supported, PhpRuntime::supports($version, $size)); + } + + public static function releaseForms(): iterable + { + foreach ( + [ + ['8.3.36', true], ['8.4.27', true], ['8.5.12', true], ['8.5.13', true], + ['8.4.27-1+deb13u1', true], ['8.4.27-0ubuntu0.24.04.1', true], + ['8.4.27-1.fc43', true], ['8.4.27+vendor.2', true], + ['8.4.27RC1', false], ['8.4.28RC1', false], ['8.5.12RC2', false], + ['8.5.12-dev', false], ['8.5.13-dev', false], ['8.3.36alpha1', false], + ['8.4.27-beta2', false], ['8.5.12~rc1', false], ['8.5.12+dev', false], + ['8.5.12-rc1+deb13u1', false], ['8.5.12-nightly', false], + ['8.5.12-preview1', false], ['nightly', false], ['8.5', false], + ] as [$version, $stable] + ) { + yield $version => [$version, $stable]; + } + } + + #[DataProvider('releaseForms')] + public function testUpstreamPrereleasesAreRejectedWithoutRejectingDistroSuffixes(string $version, bool $stable): void + { + self::assertSame($stable, PhpRuntime::isStableRelease($version)); + } + + public function testActualRuntimeAssertionCannotBeDisabledByEnvironment(): void + { + $previous = getenv('COMPOSER_IGNORE_PLATFORM_REQS'); + putenv('COMPOSER_IGNORE_PLATFORM_REQS=1'); + try { + if (!PhpRuntime::supports(PHP_VERSION_ID, PHP_INT_SIZE) || !PhpRuntime::isStableRelease(PHP_VERSION)) { + $this->expectException(\RuntimeException::class); + $this->expectExceptionMessage('Unsupported PHP runtime'); + } + PhpRuntime::assertSupported(); + self::assertTrue(PhpRuntime::supports(PHP_VERSION_ID, PHP_INT_SIZE)); + } finally { + $previous === false ? putenv('COMPOSER_IGNORE_PLATFORM_REQS') : putenv('COMPOSER_IGNORE_PLATFORM_REQS=' . $previous); + } + } + + public static function entrypoints(): iterable + { + yield 'bot' => ['bot.php']; + yield 'self-check' => ['bin/self-check.php']; + yield 'direct-runner' => ['runner.php']; + } + + #[DataProvider('entrypoints')] + public function testProductionEntryPointsRejectBeforeAutoloadOrSessionWork(string $entrypoint): void + { + $this->withFixture($entrypoint, true, static function (string $root, string $path): void { + [$exit, $stdout, $stderr] = self::execute($path); + self::assertSame(1, $exit, $stdout . $stderr); + self::assertStringContainsString('fixture PHP floor rejection', $stdout . $stderr); + self::assertFileDoesNotExist($root . '/vendor-reached'); + self::assertFileDoesNotExist($root . '/patches-reached'); + }); + } + + #[DataProvider('entrypoints')] + public function testRealGuardUsesActualBinaryBeforeVendorIsAllowed(string $entrypoint): void + { + $this->withFixture($entrypoint, false, static function (string $root, string $path): void { + [$exit, $stdout, $stderr] = self::execute($path); + if (PhpRuntime::supports(PHP_VERSION_ID, PHP_INT_SIZE) && PhpRuntime::isStableRelease(PHP_VERSION)) { + self::assertSame(77, $exit, $stdout . $stderr); + self::assertFileExists($root . '/vendor-reached'); + } else { + self::assertSame(1, $exit, $stdout . $stderr); + self::assertStringContainsString('Unsupported PHP runtime', $stdout . $stderr); + self::assertFileDoesNotExist($root . '/vendor-reached'); + self::assertFileDoesNotExist($root . '/patches-reached'); + } + }); + } + + private function withFixture(string $entrypoint, bool $reject, callable $test): void + { + $root = sys_get_temp_dir() . '/shabbat-php-floor-' . bin2hex(random_bytes(12)); + mkdir($root . '/src/Runtime', 0700, true); + mkdir($root . '/bin', 0700); + mkdir($root . '/vendor', 0700); + mkdir($root . '/scripts', 0700); + $project = dirname(__DIR__); + $guard = $reject + ? 'removeFixture($root); + } + } + + private static function execute(string $path): array + { + $process = proc_open([PHP_BINARY, '-d', 'opcache.enable_cli=0', $path], [0 => ['pipe', 'r'], 1 => ['pipe', 'w'], 2 => ['pipe', 'w']], $pipes, dirname($path)); + if (!is_resource($process)) { + throw new \RuntimeException('Cannot launch isolated PHP floor fixture.'); + } + fclose($pipes[0]); + $stdout = stream_get_contents($pipes[1]); + $stderr = stream_get_contents($pipes[2]); + fclose($pipes[1]); + fclose($pipes[2]); + return [proc_close($process), $stdout, $stderr]; + } + + private function removeFixture(string $root): void + { + foreach (scandir($root) ?: [] as $name) { + if ($name === '.' || $name === '..') { + continue; + } + $path = $root . '/' . $name; + if (is_dir($path) && !is_link($path)) { + $this->removeFixture($path); + } else { + unlink($path); + } + } + rmdir($root); + } +}