lambda-erp 1.1.6__tar.gz → 1.1.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/PKG-INFO +1 -1
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/chat.py +12 -11
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/providers.py +37 -7
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/pyproject.toml +1 -1
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/.gitignore +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/LICENSE +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/README.md +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/__init__.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/attachments.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/auth.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/bootstrap.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/chat_links.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/demo_limits.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/deps.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/erp_context.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/errors.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/list_values.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/main.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/mcp_oauth.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/oauth.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/pdf.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/pdf_contract.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/pdf_exports.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/pdf_profiles.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/remarks_md.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/routers/__init__.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/routers/accounting.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/routers/actions.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/routers/admin.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/routers/analytics.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/routers/availability.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/routers/bank_reconciliation.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/routers/bank_statements.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/routers/chat_api.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/routers/documents.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/routers/masters.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/routers/mcp.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/routers/proposals.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/routers/reports.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/routers/setup.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/services.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/templates/_proposal_totals.html +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/templates/_record_base.html +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/templates/document.html +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/templates/proposal.html +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/templates/record.html +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/time_filters.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/api/tool_permissions.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/docs/agents/README.md +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/frontend/LICENSE +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/frontend/README.md +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/frontend/src/api/client.ts +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/__init__.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/accounting/__init__.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/accounting/bank_account.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/accounting/bank_reconciliation.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/accounting/bank_statement_import.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/accounting/bank_transaction.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/accounting/budget.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/accounting/camt.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/accounting/chart_of_accounts.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/accounting/general_ledger.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/accounting/journal_entry.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/accounting/payment_entry.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/accounting/pos_invoice.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/accounting/purchase_invoice.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/accounting/revaluation.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/accounting/sales_invoice.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/accounting/settlement.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/accounting/setup/__init__.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/accounting/setup/engine.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/accounting/setup/pack.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/accounting/setup/packs/__init__.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/accounting/setup/packs/ch.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/accounting/setup/packs/de_common.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/accounting/setup/packs/de_skr03.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/accounting/setup/packs/de_skr04.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/accounting/setup/packs/generic.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/accounting/setup/profiles.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/accounting/setup/spine.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/accounting/subscription.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/assets/__init__.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/assets/asset.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/assets/lifecycle.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/assets/reservation.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/buying/__init__.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/buying/purchase_order.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/controllers/__init__.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/controllers/currency.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/controllers/defaults.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/controllers/item_price.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/controllers/item_prices.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/controllers/pricing_rule.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/controllers/taxes_and_totals.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/database.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/exceptions.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/hooks.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/master_integrity.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/model.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/selling/__init__.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/selling/proposal.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/selling/quotation.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/selling/sales_order.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/simulation.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/stock/__init__.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/stock/delivery_note.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/stock/purchase_receipt.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/stock/stock_entry.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/stock/stock_ledger.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/timestamps.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/utils.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/validation.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/lambda_erp/workflow.py +0 -0
- {lambda_erp-1.1.6 → lambda_erp-1.1.7}/terraform/README.md +0 -0
|
@@ -2860,14 +2860,14 @@ Users can attach PDFs and images (receipts, bills, contracts, screenshots) to th
|
|
|
2860
2860
|
# ---------------------------------------------------------------------------
|
|
2861
2861
|
# OpenAI report-spec specialist
|
|
2862
2862
|
#
|
|
2863
|
-
# GPT-
|
|
2863
|
+
# GPT-6 Luna acts as the planner/orchestrator. When it decides a report needs
|
|
2864
2864
|
# a custom analytics view it calls the create/update custom analytics tools.
|
|
2865
|
-
# Those handlers make a separate, narrowly prompted
|
|
2865
|
+
# Those handlers make a separate, narrowly prompted GPT-6.1 Sol call for the bounded
|
|
2866
2866
|
# declarative report spec. Both roles use the existing OPENAI_API_KEY.
|
|
2867
2867
|
# ---------------------------------------------------------------------------
|
|
2868
2868
|
|
|
2869
2869
|
|
|
2870
|
-
REPORT_SPECIALIST_MODEL = "gpt-
|
|
2870
|
+
REPORT_SPECIALIST_MODEL = "gpt-6.1-sol"
|
|
2871
2871
|
|
|
2872
2872
|
|
|
2873
2873
|
def _report_specialist_model() -> str:
|
|
@@ -3276,17 +3276,17 @@ async def generate_title(
|
|
|
3276
3276
|
# ---------------------------------------------------------------------------
|
|
3277
3277
|
|
|
3278
3278
|
# The agentic orchestrator model. Function tools on /v1/chat/completions
|
|
3279
|
-
# require reasoning_effort="none" for
|
|
3280
|
-
ORCHESTRATOR_MODEL = "gpt-
|
|
3279
|
+
# require reasoning_effort="none" for GPT-6 Luna (400 otherwise).
|
|
3280
|
+
ORCHESTRATOR_MODEL = "gpt-6-luna"
|
|
3281
3281
|
|
|
3282
3282
|
|
|
3283
3283
|
# ---------------------------------------------------------------------------
|
|
3284
|
-
# LLM API selector:
|
|
3284
|
+
# LLM API selector: Responses API (default) vs Chat Completions
|
|
3285
3285
|
#
|
|
3286
3286
|
# The Responses API (/v1/responses) is what accepts non-PDF file inputs
|
|
3287
3287
|
# (Office documents via input_file), and it does reasoning natively (no
|
|
3288
3288
|
# reasoning_effort="none" hack). Migrating the whole loop is risky, so it's
|
|
3289
|
-
#
|
|
3289
|
+
# controlled by ERP_CHAT_API. To keep the blast radius tiny, ALL
|
|
3290
3290
|
# conversation state stays Chat-Completions-shaped; we translate to/from the
|
|
3291
3291
|
# Responses shape only at the single orchestrator call boundary
|
|
3292
3292
|
# (_orchestrator_turn), and shim the Responses output back into the
|
|
@@ -3473,7 +3473,7 @@ def _orchestrator_turn(client, messages, tools, max_tokens):
|
|
|
3473
3473
|
tools=tools,
|
|
3474
3474
|
tool_choice="auto",
|
|
3475
3475
|
max_completion_tokens=max_tokens,
|
|
3476
|
-
# gpt-
|
|
3476
|
+
# gpt-6-luna rejects function tools on /v1/chat/completions unless
|
|
3477
3477
|
# reasoning_effort is "none" (400 otherwise).
|
|
3478
3478
|
reasoning_effort="none",
|
|
3479
3479
|
)
|
|
@@ -3490,10 +3490,11 @@ async def run_thinking_loop(
|
|
|
3490
3490
|
):
|
|
3491
3491
|
"""Run the agentic reasoning loop.
|
|
3492
3492
|
|
|
3493
|
-
The orchestrator
|
|
3493
|
+
The orchestrator uses GPT-6 Luna; the report specialist uses GPT-6.1 Sol.
|
|
3494
|
+
When GPT decides to call
|
|
3494
3495
|
`create_custom_analytics_report` or `update_custom_analytics_report`
|
|
3495
3496
|
with an intent/feedback hint, the tool handler itself delegates the
|
|
3496
|
-
declarative-spec step to a separate narrowly prompted
|
|
3497
|
+
declarative-spec step to a separate narrowly prompted GPT-6.1 Sol call. We emit an
|
|
3497
3498
|
`llm_provider` event around that delegation so the UI can surface it.
|
|
3498
3499
|
"""
|
|
3499
3500
|
openai_api_key = os.environ.get("OPENAI_API_KEY", "")
|
|
@@ -3702,7 +3703,7 @@ async def run_thinking_loop(
|
|
|
3702
3703
|
principal_ref[0] = refresh_auth_principal(principal_ref[0])
|
|
3703
3704
|
live_role = principal_ref[0].get("role") if principal_ref[0] else None
|
|
3704
3705
|
|
|
3705
|
-
# If the orchestrator is delegating report-spec generation to
|
|
3706
|
+
# If the orchestrator is delegating report-spec generation to GPT-6.1 Sol,
|
|
3706
3707
|
# surface the handoff in the UI.
|
|
3707
3708
|
will_delegate_to_report_specialist = (
|
|
3708
3709
|
tool_allowed(fn_name, live_role)
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"""Pricing data for external LLM APIs the chat orchestrator uses.
|
|
2
2
|
|
|
3
|
-
Mirrors the shape of `lambda-web/backend/providers.py`.
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
Mirrors the shape of `lambda-web/backend/providers.py`. Includes active models
|
|
4
|
+
and GPT-6 alternatives for comparison. Prices are Standard USD per 1M tokens;
|
|
5
|
+
see docs/llm-pricing.md for sources and billing scope.
|
|
6
6
|
|
|
7
7
|
Consumers import `cost_of_openai_call` to turn an SDK `response.usage` object
|
|
8
8
|
into a USD amount. Both Chat Completions and Responses usage shapes are
|
|
@@ -19,6 +19,36 @@ from typing import Any, Optional
|
|
|
19
19
|
# ---------------------------------------------------------------------------
|
|
20
20
|
|
|
21
21
|
OPENAI_PRICING: dict[str, dict[str, Any]] = {
|
|
22
|
+
# Official model pages, verified 2026-09-29. Above 272K input tokens,
|
|
23
|
+
# the higher rates apply to the entire request (including cache hits).
|
|
24
|
+
"gpt-6-astra": {
|
|
25
|
+
"tiered": True,
|
|
26
|
+
"tiers": [
|
|
27
|
+
{"max_input_tokens": 272_000, "input": 10.00, "cached_input": 1.00, "cache_write": 12.50, "output": 50.00},
|
|
28
|
+
{"max_input_tokens": None, "input": 20.00, "cached_input": 2.00, "cache_write": 25.00, "output": 75.00},
|
|
29
|
+
],
|
|
30
|
+
},
|
|
31
|
+
"gpt-6-sol": {
|
|
32
|
+
"tiered": True,
|
|
33
|
+
"tiers": [
|
|
34
|
+
{"max_input_tokens": 272_000, "input": 2.00, "cached_input": 0.20, "cache_write": 2.50, "output": 10.00},
|
|
35
|
+
{"max_input_tokens": None, "input": 4.00, "cached_input": 0.40, "cache_write": 5.00, "output": 15.00},
|
|
36
|
+
],
|
|
37
|
+
},
|
|
38
|
+
"gpt-6-luna": {
|
|
39
|
+
"tiered": True,
|
|
40
|
+
"tiers": [
|
|
41
|
+
{"max_input_tokens": 272_000, "input": 0.10, "cached_input": 0.01, "cache_write": 0.125, "output": 0.50},
|
|
42
|
+
{"max_input_tokens": None, "input": 0.20, "cached_input": 0.02, "cache_write": 0.25, "output": 0.75},
|
|
43
|
+
],
|
|
44
|
+
},
|
|
45
|
+
"gpt-6.1-sol": {
|
|
46
|
+
"tiered": True,
|
|
47
|
+
"tiers": [
|
|
48
|
+
{"max_input_tokens": 272_000, "input": 2.00, "cached_input": 0.10, "cache_write": 2.50, "output": 10.00},
|
|
49
|
+
{"max_input_tokens": None, "input": 4.00, "cached_input": 0.20, "cache_write": 5.00, "output": 15.00},
|
|
50
|
+
],
|
|
51
|
+
},
|
|
22
52
|
"gpt-5.4": {
|
|
23
53
|
"tiered": True,
|
|
24
54
|
"tiers": [
|
|
@@ -31,8 +61,8 @@ OPENAI_PRICING: dict[str, dict[str, Any]] = {
|
|
|
31
61
|
"gpt-5.6-terra": {
|
|
32
62
|
"tiered": True,
|
|
33
63
|
"tiers": [
|
|
34
|
-
{"max_input_tokens": 272_000, "input": 2.
|
|
35
|
-
{"max_input_tokens": None, "input":
|
|
64
|
+
{"max_input_tokens": 272_000, "input": 2.00, "cached_input": 0.20, "cache_write": 2.50, "output": 12.00},
|
|
65
|
+
{"max_input_tokens": None, "input": 4.00, "cached_input": 0.40, "cache_write": 5.00, "output": 18.00},
|
|
36
66
|
],
|
|
37
67
|
},
|
|
38
68
|
"gpt-4.1-nano": {"input": 0.10, "cached_input": 0.025, "output": 0.40},
|
|
@@ -54,8 +84,8 @@ TRANSCRIBE_PRICING: dict[str, dict[str, float]] = {
|
|
|
54
84
|
|
|
55
85
|
|
|
56
86
|
# ---------------------------------------------------------------------------
|
|
57
|
-
# Rate lookup —
|
|
58
|
-
#
|
|
87
|
+
# Rate lookup — preserve the legacy gpt-5.4 estimate for unknown model IDs.
|
|
88
|
+
# Register a model explicitly before using it; this fallback is not a price cap.
|
|
59
89
|
# ---------------------------------------------------------------------------
|
|
60
90
|
|
|
61
91
|
def get_openai_rates(model: str, input_tokens: int = 0) -> dict[str, float]:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|