Repository navigation
Commit bbfbf4e
authored
fix(files): cancel resumed runs across replicas, unify anchored file edits, and harden workspace, integration, and presence paths (#9035)
* fix(projects): share the Project lock during fork creation, archive every banned-user workspace, and drop dead membership guards
- requireForkProject takes the Project lock shared, so sibling file writers and
other forks no longer wait out a fork's content copy; exclusive lifecycle
holders (archive, split, transfer, departure) are still fenced
- disableUserResources keeps archiving after one workspace fails, logs the
failed ids, and throws an AggregateError at the end
- remove null guards on workspace.project_id, which is NOT NULL
- name release v0.9.18 instead of a PR number in Project backfill operator errors
- log workspace and workflow ids per archive repair in the 0032 script migration
(cherry picked from commit 5831241070f08536eb923a4de012b0a58bdb5ff3)
* fix(files): resolve the end anchor after the start, keep line endings, share one anchored edit
The end anchor is now the first match after the selected start anchor, so a
closing line earlier in the file no longer fails the edit. Copilot's
apply_file_edit and its streaming preview route anchored patches through
applyWorkspaceFileContentEdit instead of two divergent copies. Anchored edits
keep each untouched line's own ending; inserted lines take the anchor's.
(cherry picked from commit fb3f81a1b7810c1dc8763f31b5a1479769f60803)
* fix(files): resolve a named file in a folder scope by exact match, not by listing the folder
resolveScopedFileReference listed up to 5000 files to find one name, so a named
write, append, or edit inside a larger folder failed payload_too_large. The id
and name lookups are now exact SQL predicates under the same folder scope and
list authorization, with the same not-found and ambiguity errors.
(cherry picked from commit 63a06782eb3327a6d858bc337600d88d76ce46c8)
* fix(files): treat the root with its subfolders as unscoped instead of listing every folder id
A root scope including subfolders expanded to every active folder id, so file
listing and content search sent an IN list of up to every folder in the
workspace. It now resolves to no folder scope, which selects the same files:
archiving a folder archives the files in it. The two identical folder-scope
predicate builders become one workspaceFileFolderScopeCondition.
(cherry picked from commit 8020c141e6462cb2c97dfe2c992225ed3baad3ab)
* chore(files): drop history narration and overstated folder-scope claims, log context kind only
Folder scope narrows a search; authorization is workspace-level, so the
comments no longer call it an isolation boundary. A failed chat context now
logs its kind rather than the whole context, which for a file selection carries
the user's selected text. The overlap-dedupe docstring keeps its invariants.
(cherry picked from commit 4c22ff11d982a0f57156746f6d07bce584b1d587)
* refactor(files): move the anchored-edit mapper out of the intent store, probe the id alongside folder resolution
(cherry picked from commit 0df6468f6372168cfbe9f3668eae213cee091b6c)
* fix(files-ui): stop folder-scope pruning writes, memoize resource folders, rename untitled files on heading exit
- file-upload: drop the effect that pruned out-of-scope selections from every open editor; flag them for removal instead
- use-resource-folders: memoize on stable query fields; fix byPath doc
- rich-markdown-editor: name an untitled file after its heading when the cursor leaves it, on blur, or on unmount (once), not after an idle pause; caller resolves the file by id
- table-grid: hoist guarded context row instead of non-null assertions
- drop a formula-restating test and trim a home.tsx comment
(cherry picked from commit 419520a1e42c3462b31ccbf2e68f7f8d6af4ae9d)
* fix(resume): abort an active resume attempt when Stop is recorded on another replica
The resumed engine subscribes to cancellation under the durable run id, while Stop records it under the attempt id. Subscribe the attempt's abort to its own id, and assert the durable snapshot id through executeWorkflowCore instead of a log message.
(cherry picked from commit facbad586a01aaeb624150af896dceb1a6430c47)
* fix(agent): reject evaluation models as fallbacks at authoring time and fail saved ones without retry
(cherry picked from commit 80d07588a0c2b6b5edbd130497471f8f6594b801)
* fix(agent): skip a cross-provider fallback that needs its own family credentials, as Router and Evaluator do
(cherry picked from commit 55eb1c8ba930d006bc130fa2de584dfa0f23291a)
* refactor(agent): drop the fallback normalization from the Agent block's unused params mapping
(cherry picked from commit 6a7ccc285ceb5181ce29a43d0e653c48d0a07e64)
* improvement(deployments): skip the defensive clone for an uncached comparison materialization
(cherry picked from commit 462df0ac2a03a7b52928c4333a7e33caa7b00287)
* fix(zoho-desk): fail permanent webhook registration errors terminally
Zoho's permanent 4xx registration failures carried a duck-typed status that
the stable registration path lost inside its AggregateError, so they retried
until max attempts. Throw WebhookDeploymentConfigurationError instead and
classify by class (including an all-configuration AggregateError).
Also guard webhook and tool path segments with safeUrlPathSegment, share one
Desk base validator from host-allowlist, bound the JWKS cache with LRUCache,
and log only profile keys when a connector profile is invalid.
(cherry picked from commit 7aa532557e23a3edc67ee64272811d936cd7eba7)
* fix(sailpoint): cache tokens with lru-cache, guard path ids, reject unknown operations
Replace the hand-rolled token Map, manual LRU, and coalescing map with one
LRUCache whose fetchMethod sets each entry's TTL from expires_in, drop the
test-only state exports, route path ids through safeUrlPathSegment, share the
schema's page limits with the tool definitions, and throw on an unknown block
operation instead of silently running a search.
(cherry picked from commit 663953dc0677c06cbf6c3eac7fa20c1f35b596e9)
* fix(outlook): bind calendar page tokens to event collections and guard path ids
Share assertGraphNextPageUrlForCollection from the sharepoint Graph utils so the
calendar list rejects a Graph nextLink for any other endpoint, compare segments
case-insensitively as Graph does, route event and calendar ids through
safeUrlPathSegment, and drop calendar tests that restated URL and body builders.
(cherry picked from commit 92f96630ab762b4411556a9dce914829fb1f1250)
* improvement(ashby): share the error extractor and sync cursor description
The webhook provider now imports ashbyErrorMessage from tools/ashby/utils (type-only
imports, so the webhook graph stays within the registry-boundary baseline) instead
of carrying a copy. Every list tool describes nextSyncCursor with one constant,
and tests that restated response mappings are removed.
(cherry picked from commit f6f5605cc9c0d757feb2cd7c047fa5524dae457a)
* refactor(webhooks): classify every trigger configuration failure through one helper
(cherry picked from commit 76265ec284edb751dab31df9c9b6a33b52ba0a29)
* fix(tables): list built-in agent tools by base type and teach boolean range rejection
The tool picker split Built-in Tools from Integrations with an exact-version
list while admission matched base types, so workflow_input landed under
Integrations. Split with isCoreAgentToolBlock over the same base-type set and
delete BUILT_IN_TOOL_TYPES. The v2 query enrichment now derives its operator
list from FILTER_OPS and states that boolean columns reject range operators.
Drops the unused select-ops re-export from lib/table/sql.ts.
(cherry picked from commit 39fd5f19a5fb598f01929cb43906343501b8e42d)
* fix(logs): treat archived workflows as unopenable in the logs list and details
List and detail summaries now carry the workflow's archivedAt, and
resolveLogWorkflowId returns null for an archived workflow, so the row, its
context menu, and the details panel stop linking to a workflow that silently
redirects. The row and panel share getLogWorkflowLabel; archived workflows use
the deleted label, matching the v2 logs API.
(cherry picked from commit fa5a4ac66f72ea1610cee8e958784f807d841fd6)
* fix(embeddings): admit tool calls on hosted keys through the shared hosted bucket
The tool layer injects a hosted key as an explicit apiKey, which embed()
treated as BYOK: tool traffic bypassed the hosted:<provider> admission bucket
KB indexing shares, and hosted quota errors read as the customer's key. The
tool layer now passes usesHostedKey through the internal operation call to
embed(). Billing is unchanged: the response still reports total tokens and the
tool layer still decides hosted billing.
(cherry picked from commit c1a2d32965e4927af37d63786ddac2c7fa052063)
* fix(knowledge): keep removing disabled images past a page that removed nothing
removeDisabledImages stopped at the first page whose rows were no longer
removable, then cleared imageRemovalPending with later images still indexed.
The keyset cursor already advances and the loop ends on an empty page. Docs
now say the image cap applies per sync run, with each member-accounts
continuation run getting its own budget.
(cherry picked from commit 494a999b22b82ee86da1abdb796f6b775633e237)
* chore(sim-cli): drop unused Node proxy-support constants from the update check test
(cherry picked from commit abaebd6731cd795d52a902ca5dc9e45b108650c4)
* fix(realtime): keep file-editor presence fresh when adapter reads time out
Skip retrying a fetchSockets adapter timeout (requestsTimeout is fixed at
5s; per-call timeouts are ignored), re-read instead of dropping a roster
change that arrived during a failed read, and emit each fetched snapshot
before re-reading so sustained churn cannot starve clients.
Register the cross-replica presence relay once at startup, share one
clearFileDocPresence helper, drop unused FileDocOwner identity fields, and
add a two-replica Redis-adapter integration test for the shared roster.
(cherry picked from commit 492e6b6151d3d2c6a56e91f85205bc56309fa129)
* perf(db): index chat and legacy workspace_file owners for member handoff
(cherry picked from commit 60bf0f43128ff9640eaf5730d6619d9e2a58bf87)
* perf(files): load creator-handoff version heads in one query
(cherry picked from commit ecd2a71c53ecd2dd96899a796fa1763be2823da9)
* refactor(workspaces): drop unreachable revoke refusal and name unresolved workspace ids
(cherry picked from commit a45a4370a39b2aa9384a5db6ec5ed4f5abcfc411)
* docs(forking): note policy readers wait on the sync-default flip
(cherry picked from commit a60b4b715ac32b17800708a6378a2de01b1c26ae)
* refactor(workflows): share the tool param visibility map between fork sync collectors
(cherry picked from commit 3085f20b91bf6ff89bc406b41580075c95619163)
* perf(files): fetch only head rows when batching version heads
(cherry picked from commit 2962b5b4e590a4aeeff4c2125a1ae0da284908be)
* fix(workspaces): disclose inbound source-org custom blocks on admin move and tidy the move flow
(cherry picked from commit 29a4eb2015c58ec62943b47ee5bfd39fddcecfec)
* test(billing): drop organization-index removal case covered by the handoff integration suite
(cherry picked from commit 79a7a3b90710b76a3c325bcfc6f5d6e02e44c1ee)
* revert(files): keep the file picker's out-of-scope prune
The File block passes picked ids and names to the run without re-checking the
folder scope, so the prune is what keeps a stale pick from overriding the folder.
* fix(resume): keep the pause retryable when the cancellation subscription is unavailable
* test(outlook): cover calendar scoping, the blank-calendar default, and path-id rejection
* chore: regenerate Ashby docs and complete the removal test's sync result
* fix: cap in-flight SailPoint token exchanges, bound anchored edits, and restore Ashby cursor docs
- SailPoint: an evicted lru-cache fetch keeps running, so cap concurrent token
exchanges with a counter alongside the cache.
- Anchored file edits: rebuild line arrays with slices instead of spreading every
inserted line into splice, which overflows the call stack on large inserts;
an emptied replace_between keeps the start anchor's own line ending.
- Outlook: list events continues only calendarView nextLinks.
- Ashby: share nextSyncCursor as a full output const in types.ts so the docs
generator resolves its description.
- Fix the admin-move fixture's duplicate workflow names, the embeddings test's
missing projectInputs, and shrink the Ashby test-types baseline.
* revert: keep hosted-key Embeddings tool calls on their own admission bucket
This reverts commit 07bd9b9. Routing tool calls that use an injected hosted
key through the hosted:<provider> bucket merges hosted Embeddings tool capacity
into the bucket knowledge-base indexing shares.
* revert(ashby): restore per-tool nextSyncCursor descriptions
The docs generator resolves an output description only from a string literal,
so routing the description through a shared constant blanked it in the
generated integration docs. The shared error extractor stays.
* revert(sailpoint): fall back to search for an unrecognized block operation
Throwing on an unknown operation in tools.config.tool makes the serializer fall
back to the block's first access entry, the approve tool, instead of search.
* docs(files): state that occurrence selects the start anchor and the end anchor is the next match after it
* fix(workspaces): keep the admin-api actor email fallback when replaying a move's source audit
* test(knowledge): complete the disabled-image removal test's sync result and shrink its type baseline
* docs(knowledge): say each member-accounts continuation run can read up to the image budget
* fix(realtime): restart presence retries after a membership change and cover read races
A failed presence read that is not retried still re-reads when membership
moved during it; that re-read now starts with a fresh retry allowance. Unit
tests cover a membership change during a successful read and a non-retried
adapter timeout, and the cross-replica integration polls with an explicit
timeout.
* test(resume): keep the pause retryable when the cancellation subscription cannot be opened
Also documents that non-retryable execution errors cover deterministic
configuration failures as well as possibly side-effecting operations.
* fix(db): log each archive repair after its retry loop so a logging failure cannot fail a completed repair
* fix(files): name an untitled file from its heading only after a real local edit
Opening the editor emits an empty update from setEditable, which marked the
heading title pending, so leaving an untouched file renamed it. Only updates
that change the document mark it now, and a window blur no longer commits a
half-typed heading.
* fix(logs): keep an archived workflow's name on its logs
Only a hard-deleted workflow, which leaves no workflow id, is labeled deleted;
an archived workflow keeps its name and stays unopenable.
* fix(logs): accept archivedAt on the workflow label input
* fix(files): lock the workspace row before the directory lock and the payer only for a non-zero delta
Bulk file-folder archive, restore, and delete-by-path took the directory
lock before the workspace row, while uploads and registrations take the
workspace row while preparing accounting and the directory lock after it.
The two orders deadlocked in one workspace. Bulk operations now take the
Project lock, the workspace row, then the directory lock, the order every
other file writer uses, and the storage docs state that single order.
Workspace accounting preparation locks only the workspace row; the payer
row is locked when a non-zero delta is applied, so zero-delta and
collab-state saves no longer serialize on the organization row or fail
when a personal payer has no stats row. A zero workspace delta returns
undefined; Project accounting is unchanged.
Content commits drop a repeated Project lock that accounting already
holds, a folder-id upload target is checked with a point query instead of
loading every folder path, and the list query keeps one file-id filter.
* fix(retention): isolate per-owner failures in unbudgeted runs and lock only owners with work
Without cleanup budgets, a failing workspace file-folder cleanup or a
failing Project retention pass is logged and the run continues, so later
targets (knowledge bases, folder and resource targets, orphan bindings,
chat external cleanup) still run; budgeted runs still fail whole.
Workspace file-folder cleanup selects the workspaces that have an expired
file folder first and opens locked transactions only for those.
Project version and folder retention no longer lock the storage payer;
only archived-file purges, which apply a delta, prepare the mutation. The
free-plan superseded-version cap is one shared constant.
Tests: an unbudgeted folder deletion failure resolves, rolls its tree
back, and still purges a later expired row; the archive release asserts
the workspace ledger; the unsupported-owner case that production cannot
produce is removed.
* fix(files): log a deferred inline live-doc reconcile as a warning and tighten its tests
An exception from the inline live-document reconcile is retried by the
outbox, so it logs at warn again; dead-letter and not-found results stay
errors. The content-effects test keeps the one behavior (an inline
exception resolves), and the soft-delete tests assert that unbilled and
organization purges open no billed transaction instead of checking
billing mocks that are no longer on the path.
* fix(outlook): encode a slash in Graph event and calendar ids instead of rejecting it
Graph ids can contain '/', so event and calendar ids are trimmed, empty and
dot-segment ids are refused by name, and the rest is encoded as one path
segment ('/' becomes %2F). The request transport still rejects any dot
segment in the final URL.
* refactor(tools): encode opaque Graph ids through safeUrlPathSegment with separators allowed
Outlook event and calendar ids share the guarded path-segment helper
(type guards, lone-surrogate check, dot-segment rejection) instead of a
local copy, opting in to percent-encoding / and \. The storage lock-order
note says the Project lock step applies to workspace writers only.
* test(files): scope the bulk-archive lock barrier to waiters queued behind the directory holder
* refactor(outlook): mark the Graph id segment options as const
* fix(retention): charge committed Project version batches to the shared run budget
Project version cleanup commits one transaction per batch. An unbudgeted run
isolates a failing owner, which reported zero rows even when batches before
the failure had committed, so later owners received the full remaining limit
again. Cleanup now charges each committed batch to one RowBudget shared across
the run, matching how archive cleanup decrements its budgets in place.1 parent 22f096b commit bbfbf4e
166 files changed
Lines changed: 34227 additions & 2097 deletions
File tree
- apps
- docs
- content/docs
- integrations
- knowledgebase
- platform/self-hosting
- realtime/src
- handlers
- sim
- app/workspace/[workspaceId]
- files
- components/file-viewer
- rich-markdown-editor
- home
- logs
- components/log-details
- tables/[tableId]/components/table-grid
- w/[workflowId]/components/panel/components/editor/components/sub-block
- components/tool-input
- hooks
- background
- blocks
- blocks
- ee/workspace-forking/application
- executor
- handlers/agent
- utils
- lib
- api/contracts
- v1/admin
- v2
- auth/connectors
- billing
- organizations
- storage
- core/config
- execution
- file-retention
- internal
- file
- sailpoint
- knowledge/connectors
- logs
- mothership
- chat
- tools/server/files
- projects
- __integration__
- application
- files
- __integration__
- table
- llm
- uploads
- contexts/workspace
- __integration__
- server
- webhooks
- providers
- workflows
- editing
- executor
- persistence
- references
- search-replace/resources
- tool-input
- workspace-files
- application
- search
- workspaces
- access
- application
- scripts
- tools
- ashby
- file
- generated
- microsoft_ad
- outlook
- sailpoint
- table
- zoho_desk
- packages
- db
- maintenance
- migrations
- meta
- script-migrations
- sim-cli/src/update
- testing/src/mocks
- scripts
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
198 | 198 | | |
199 | 199 | | |
200 | 200 | | |
201 | | - | |
| 201 | + | |
202 | 202 | | |
203 | 203 | | |
204 | 204 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
200 | 200 | | |
201 | 201 | | |
202 | 202 | | |
203 | | - | |
| 203 | + | |
204 | 204 | | |
205 | 205 | | |
206 | 206 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
124 | 124 | | |
125 | 125 | | |
126 | 126 | | |
127 | | - | |
| 127 | + | |
128 | 128 | | |
129 | 129 | | |
130 | 130 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6920 | 6920 | | |
6921 | 6921 | | |
6922 | 6922 | | |
6923 | | - | |
| 6923 | + | |
6924 | 6924 | | |
6925 | 6925 | | |
6926 | 6926 | | |
| |||
6948 | 6948 | | |
6949 | 6949 | | |
6950 | 6950 | | |
6951 | | - | |
| 6951 | + | |
6952 | 6952 | | |
6953 | 6953 | | |
6954 | 6954 | | |
| |||
6976 | 6976 | | |
6977 | 6977 | | |
6978 | 6978 | | |
6979 | | - | |
| 6979 | + | |
6980 | 6980 | | |
6981 | 6981 | | |
6982 | 6982 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 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 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
160 | 160 | | |
161 | 161 | | |
162 | 162 | | |
163 | | - | |
164 | 163 | | |
165 | 164 | | |
166 | 165 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
61 | 61 | | |
62 | 62 | | |
63 | 63 | | |
64 | | - | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
65 | 68 | | |
66 | 69 | | |
67 | 70 | | |
| |||
72 | 75 | | |
73 | 76 | | |
74 | 77 | | |
75 | | - | |
| 78 | + | |
76 | 79 | | |
77 | 80 | | |
78 | 81 | | |
| |||
87 | 90 | | |
88 | 91 | | |
89 | 92 | | |
90 | | - | |
91 | 93 | | |
92 | 94 | | |
93 | 95 | | |
| |||
1107 | 1109 | | |
1108 | 1110 | | |
1109 | 1111 | | |
| 1112 | + | |
| 1113 | + | |
| 1114 | + | |
| 1115 | + | |
| 1116 | + | |
| 1117 | + | |
| 1118 | + | |
| 1119 | + | |
| 1120 | + | |
| 1121 | + | |
| 1122 | + | |
| 1123 | + | |
| 1124 | + | |
| 1125 | + | |
| 1126 | + | |
| 1127 | + | |
| 1128 | + | |
| 1129 | + | |
| 1130 | + | |
| 1131 | + | |
| 1132 | + | |
| 1133 | + | |
| 1134 | + | |
| 1135 | + | |
| 1136 | + | |
| 1137 | + | |
| 1138 | + | |
| 1139 | + | |
| 1140 | + | |
| 1141 | + | |
| 1142 | + | |
| 1143 | + | |
| 1144 | + | |
| 1145 | + | |
| 1146 | + | |
| 1147 | + | |
| 1148 | + | |
| 1149 | + | |
| 1150 | + | |
| 1151 | + | |
| 1152 | + | |
| 1153 | + | |
| 1154 | + | |
| 1155 | + | |
| 1156 | + | |
| 1157 | + | |
| 1158 | + | |
| 1159 | + | |
| 1160 | + | |
| 1161 | + | |
| 1162 | + | |
| 1163 | + | |
| 1164 | + | |
| 1165 | + | |
| 1166 | + | |
| 1167 | + | |
| 1168 | + | |
| 1169 | + | |
| 1170 | + | |
| 1171 | + | |
| 1172 | + | |
| 1173 | + | |
| 1174 | + | |
| 1175 | + | |
| 1176 | + | |
1110 | 1177 | | |
1111 | 1178 | | |
1112 | 1179 | | |
| |||
0 commit comments