From 53210f9a7a9cf924cc01a5e822293f38c76b7c2d Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sun, 8 Nov 2026 20:11:03 +0900 Subject: [PATCH] =?UTF-8?q?feat(810-2):=20=EC=9B=90=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EA=B5=AC=EC=A1=B0=20=EC=A4=84=20=E2=86=92=20=EC=88=98=EC=8B=9D?= =?UTF-8?q?=20=EB=AC=B8=EC=84=9C=20=EB=B3=80=ED=99=98=20=C2=B7=20=EC=9B=90?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=9A=B0=EC=84=A0=20=EC=98=AC=EB=A6=BC=20?= =?UTF-8?q?=C2=B7=20=EC=A0=84=EC=88=98=20=EB=8C=80=EC=A1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 새 M02_Doc_NativeEst(EST 산근 블록 → 가져온 로직 · 단가 \x03 · 변수 \x11 · 줄참조 \x0c 표지로 정함 · 변수 이름 그대로 · 분수 그림 공식 = 위아래 줄 칸 · 기계 · 산근 · 견적 세 줄 = 로직 값묶음 한 줄 · 소계 61 = 합 밖 · 율 58 · 62 = 덧줄 · 못 읽은 줄 = 보인 값 얼림 + 참고 표지 · 품셈 조건 글 = 추정 표지) - 새 M02_Doc_FromNative(원파일 읽기 · 둘 꼴 · 블록 번 = 엑셀 길과 같음 · STmate = 원문 그대로 M02_San_Emit.stmate · 같은 공사 판정 · EST 일위대가 → 실무자료 호표 꼴) - M02_Sangeun_FromHopyo — 산근 자리 칸 원파일 · 원파일 우선 emit · 안쪽 산근 원파일 코드로 · upload_native(같은 공사 엑셀 HP 에 붙음 · 없으면 새 HP) - M02_Hopyo_Router 올림 — .estx · .stc 이면 upload_native(한 덩이) - M02_Doc_Import — 원파일 문서 소계 덧줄 비목 칸 비움 · 수 하나 변수 출처 원파일 · 머리 원파일 - 수식 문서 셈 짝(master_doc · master_doc_calc ↔ common_util_formula_doc · _calc) — 합밖 + 비목 비움 = 금액만(소계 보임) · 그 밖 그대로 - M02_San_Estx 구조 줄 색인(Index) 칸 · 어디서 왔나 카드 「EST · 원파일」 - 전수 대조 — EST 산근 1,849 · STC 371 블록 수식 문서 셈 = 원파일 저장값(STC 계약단가 82 = 낙찰률 버림 뒤) · 표지 없는 틀린 줄 0 · 목록 docs/raw/요구_1104/_목록_810-2_원파일변환.xlsx - 시험 test_810_2_native_doc(전수 · 꼴 · 문서 셈 거울 · 올림 분기) Co-Authored-By: Claude Opus 5.5 --- M02_MasterTemplete/M02_Doc_FromNative.py | 223 +++++++ M02_MasterTemplete/M02_Doc_Import.py | 15 +- M02_MasterTemplete/M02_Doc_NativeEst.py | 570 ++++++++++++++++++ M02_MasterTemplete/M02_Hopyo_Router.py | 6 +- M02_MasterTemplete/M02_San_Estx.py | 1 + M02_MasterTemplete/M02_Sangeun_FromHopyo.py | 67 +- .../logic/M02_Sangeun_Origin.ts | 5 +- common_util/common_util_formula_doc.ts | 2 +- common_util/common_util_formula_doc_calc.ts | 10 +- .../raw/요구_1104/_목록_810-2_원파일변환.xlsx | Bin 0 -> 221132 bytes resources/master_data/_수식문서_틀.md | 2 +- resources/master_data/_원파일파서_틀.md | 9 + resources/master_data/scripts/master_doc.py | 4 +- .../master_data/scripts/master_doc_calc.py | 8 +- resources/tester/test_810_2_native_doc.py | 259 ++++++++ 15 files changed, 1168 insertions(+), 13 deletions(-) create mode 100644 M02_MasterTemplete/M02_Doc_FromNative.py create mode 100644 M02_MasterTemplete/M02_Doc_NativeEst.py create mode 100644 docs/raw/요구_1104/_목록_810-2_원파일변환.xlsx create mode 100644 resources/tester/test_810_2_native_doc.py diff --git a/M02_MasterTemplete/M02_Doc_FromNative.py b/M02_MasterTemplete/M02_Doc_FromNative.py new file mode 100644 index 000000000..fbe0ce94d --- /dev/null +++ b/M02_MasterTemplete/M02_Doc_FromNative.py @@ -0,0 +1,223 @@ +"""경쟁사 원파일(.estx · .stc) → 가져온 식(PLAN 810-2 · 요구 705 · 706 · 서버 단독 · 원파일 우선). + +읽기 = 810-1 파서(`M02_San_Estx` · `M02_San_Stc`) → 둘 꼴(`pack`)을 실무자료 산근 자리 +(`M02_Sangeun_FromHopyo` · `실무자료/산근/.json` 칸 `원파일`)에 둠(원본 파일은 안 둠) → +블록 하나 = `{로직, 원본}`(`emit` · 793-2a 꼴 → 가져온 식 SK → `M02_Doc_Import.derive` 수식 문서): + EST = `M02_Doc_NativeEst`(구조 줄 표지로 정함) · + STmate = 원문 그대로 `M02_San_Emit.stmate`(원파일 원문 = 엑셀 숨은 G 열 · 단가 = COSTN · + 끝전 = 옵션 SAN_TYP 1 비목버림 / 0 합버림_큰나머지 · 810-1 저장값 대조로 확인). +블록 번 = 엑셀 길과 같음(EST = 산근 표 차례 1부터 = 「단산N」 · STmate = 코드 숫자). +같은 공사 = 엑셀 산근 블록이 모두 원파일 블록과 금액 · 이름이 같음(`same`) — 둘 다 있으면 원파일. +일위대가(EST HeadMainDat) → 실무자료 호표 꼴(`hopyo`) · STmate 일위대가 구성은 못 읽음(BDQTY 난독화) → +호표 없음(엑셀을 같이 올리면 엑셀 호표 + 원파일 산근). +""" + +from __future__ import annotations + +from decimal import Decimal +from typing import Any + +from M02_MasterTemplete import M02_Doc_NativeEst as ne +from M02_MasterTemplete import M02_San_Emit as em + +EXT = (".estx", ".stc") +RULE = {"0": "합버림_큰나머지"} # STmate SAN_TYP — 그 밖 = 비목버림 +_EST_KEYS = ("행", "글", "보임", "품명", "단", "색인", "연결", "비목", "자원", "연결단가", "변수") +_EST_KEYS += ("줄참조", "결과", "합계", "저장") +_RES_KEYS = ("코드", "종류", "이름", "규격", "단위") + + +class NativeError(ValueError): + """못 읽는 원파일.""" + + +def is_native(name: str) -> bool: + return str(name or "").lower().endswith(EXT) + + +def read(name: str, data: bytes) -> dict[str, Any]: + """원파일 → 둘 꼴(`pack`) · 못 읽음 = NativeError.""" + from M02_MasterTemplete import M02_San_Estx as estx + from M02_MasterTemplete import M02_San_Stc as stc + + try: + got = estx.read(data) if name.lower().endswith(".estx") else stc.read(data) + except Exception as e: # noqa: BLE001 — 파서 오류 = 사유 글 + raise NativeError(f"원파일을 못 읽음 — {type(e).__name__}: {str(e)[:80]}") from e + return pack(got, name) + + +def pack(got: dict, name: str) -> dict[str, Any]: + """파서 답 → 둘 꼴(셈 · 변환에 쓰는 칸만 · JSON).""" + out: dict[str, Any] = {"꼴": got["꼴"], "파일": name, "표지": got.get("표지") or []} + head = ("코드", "이름", "규격", "단위", "저장") + if got["꼴"] == "EST": + out["산근"] = [ + {**{k: b.get(k) for k in head}, "줄": [_est_line(ln) for ln in b["줄"]]} + for b in got["산근"] + ] + out["일위"] = [{**{k: b.get(k) for k in head}, "줄": b["줄"]} for b in got["일위"]] + return out + out["산근"] = [ + {**{k: b.get(k) for k in head}, "줄": [{"행": ln["행"], "글": ln["글"]} for ln in b["줄"]]} + for b in got["산근"] + ] + out["일위"] = [{k: b.get(k) for k in head} for b in got["일위"]] + res = got.get("자원") or {} + out["단가"] = { + code: {**p, **{k: (res.get(code) or {}).get(k) for k in ("이름", "규격", "단위")}} + for code, p in (got.get("단가") or {}).items() + } + out["끝전"] = RULE.get(str((got.get("옵션") or {}).get("SAN_TYP")), "비목버림") + return out + + +def _est_line(ln: dict) -> dict: + one = {k: ln.get(k) for k in _EST_KEYS if ln.get(k) not in (None, [], False, "")} + if one.get("자원"): + one["자원"] = {k: ln["자원"].get(k) for k in _RES_KEYS} + return one + + +# ── 블록 ────────────────────────────────────────────────────────────── +def numbers(saved: dict) -> dict[int, dict]: + """블록 번 → 산근 블록(엑셀 길 번과 같음).""" + if saved["꼴"] == "EST": + return {i: b for i, b in enumerate(saved["산근"], 1)} + return {int(str(b["코드"])[1:]): b for b in saved["산근"] if str(b["코드"])[1:].isdigit()} + + +def emit(saved: dict, no: int, keys: bool = True) -> dict[str, Any]: + """원파일 산근 블록 하나 → `{로직, 원본}`(원본 `원파일` True · 코드 · 확정 수) · 없는 번 = KeyError.""" + blk = numbers(saved)[int(no)] + if saved["꼴"] == "EST": + names = {b["코드"]: i for i, b in enumerate(saved["산근"], 1)} + return ne.block(blk, int(no), keys, saved["파일"], names) + from M02_MasterTemplete import M02_San_Stmate as stm + + nodes = [{"행": ln["행"], "글": ln["글"], **stm.parse_line(ln["글"])} for ln in blk["줄"]] + saved_amt = blk.get("저장") or {} + head = {"C": saved_amt.get("T"), "D": saved_amt.get("L"), "E": saved_amt.get("M")} + head["F"] = saved_amt.get("S") + block = {"코드": blk["코드"], "이름": blk.get("이름"), "몸": [], "꼬리": [], "머리": head} + out = em.stmate(block, nodes, saved["단가"], saved["끝전"], keys, saved["파일"]) + marks = sum(1 for one in out["원본"]["글줄"] if one.get("표지")) + sure = len(out["로직"]["호표"]) + len(out["로직"].get("덧줄") or []) + len(out["로직"]["중간"]) + out["원본"] |= {"원파일": True, "갈래": "STmate", "확정": {"확정": sure, "표지": marks}} + return out + + +def inner(saved: dict, logic: dict) -> list[tuple[dict, int | None, str | None]]: + """안쪽 산근 줄 `[(호표 줄, 같은 원파일 블록 번, 못 잇는 까닭)]`(`FromHopyo._inner` 짝).""" + have = numbers(saved) + by_code = {str(b.get("코드")): n for n, b in have.items()} + out = [] + for line in logic["호표"]: + res = line.get("자원") or {} + if res.get("갈래") != "단가산출": + continue + n = by_code.get(str(res.get("코드"))) + if n is None: + out.append((line, None, "같은 원파일에 안쪽 블록 없음")) + elif res.get("옮김"): + out.append((line, n, "비목이 바뀐 부름")) + else: + out.append((line, n, None)) + return out + + +# ── 같은 공사 · 일위대가 ─────────────────────────────────────────────── +def same(saved: dict, sheets: dict) -> bool: + """엑셀 산근 블록이 모두 원파일 같은 번 블록과 계 금액(1 원 안)이 같음 = 같은 공사.""" + from M02_MasterTemplete import M02_San_Book as book + + have = numbers(saved) + kind = book.kind_of(sheets) + if not kind or (kind == "STmate") != (saved["꼴"] == "STmate"): + return False + if kind == "STmate": + excel = {int(b["코드"][1:]): b["머리"].get("C") for b in book.stmate_blocks(sheets)} + else: + excel = {int(n): t.get("T") for n, t in book.est_prices(sheets)[1].items()} + if not excel: + return False + for n, total in excel.items(): + blk = have.get(int(n)) + if blk is None or abs(float(total or 0) - float((blk.get("저장") or {}).get("T") or 0)) > 1: + return False + return True + + +GALLAE = {6: "노임", 5: "자재", 105: "기계", 104: "단가산출", 103: "호표", 21: "기타", 101: "기타"} + + +def hopyo(saved: dict) -> dict[str, Any]: + """EST 일위대가(HeadMainDat) → 실무자료 읽기 꼴(`M02_Hopyo_Excel.read_book` 짝 · 호표 · 단산) · + STmate = 호표 없음(구성 못 읽음).""" + blocks = numbers(saved) + names = {str(b.get("코드")): n for n, b in blocks.items()} + heads = {str(h.get("코드")): n for n, h in enumerate(saved.get("일위") or [], 1)} + out: dict[str, Any] = {"꼴": "원파일", "시트": saved["꼴"], "호표": [], "검산": {"어긋남": []}} + out["단산"] = [ + {"번": n, "이름": b.get("이름"), "단위": b.get("단위"), "금액": _cost(b.get("저장"))} + for n, b in blocks.items() + ] + if saved["꼴"] != "EST": + return out + for n, h in enumerate(saved.get("일위") or [], 1): + lines = [] + for k, ln in enumerate(h.get("줄") or []): + link = ln.get("연결") + code = str((ln.get("자원") or {}).get("코드") or "") + ref = None + if link == 104 and code in names: + ref = {"종류": "단산", "번": names[code]} + elif link == 103 and code in heads: + ref = {"종류": "일위", "번": heads[code]} + kind = "%" if ln.get("연결") in (52, 58, 62) else GALLAE.get(link or 0, "기타") + if kind == "자재" and str(ln.get("단위") or "") == "인": + kind = "노임" + if not any((ln.get("단가") or {}).values()) and kind not in ("%",): + kind = "별도계상" if not ref else kind + lines.append( + { + "차례": k, + "이름": ln.get("품명") or "", + "규격": ln.get("규격") or "", + "수량": _dec(ln.get("수량")), + "단위": ln.get("단위") or "", + "단가": _cost(ln.get("단가")), + "금액": _cost(ln.get("저장")), + "비고": "", + "참조": ref, + "갈래": kind, + "행": ln.get("행"), + "코드": code or None, + } + ) + out["호표"].append( + { + "번": n, + "이름": h.get("이름"), + "규격": h.get("규격") or "", + "단위": h.get("단위") or "", + "금액": _cost(h.get("저장")), + "행": [n, n], + "줄": lines, + } + ) + return out + + +def _dec(v: Any) -> int | float | None: + """수 → 엑셀 읽기와 같은 꼴(정수 = int · 아니면 float · 없음 = None).""" + if v is None: + return None + d = Decimal(str(v)) + return int(d) if d == d.to_integral_value() else float(d) + + +def _cost(d: dict | None) -> dict[str, Any]: + d = d or {} + out = {"계": _dec(d.get("T"))} + return out | {name: _dec(d.get(c)) for c, name in em.COMP.items()} diff --git a/M02_MasterTemplete/M02_Doc_Import.py b/M02_MasterTemplete/M02_Doc_Import.py index 59e98b857..05e299177 100644 --- a/M02_MasterTemplete/M02_Doc_Import.py +++ b/M02_MasterTemplete/M02_Doc_Import.py @@ -25,7 +25,8 @@ from M02_MasterTemplete import M02_Sangeun_Doc as sd from M02_MasterTemplete import M02_Sangeun_Imported as imp XL = "엑셀" # 연결 칸 — 엑셀 값 기억 -HEAD = ("파일", "시트", "행", "갈래", "코드") +HEAD = ("파일", "시트", "행", "갈래", "코드", "원파일") +SUB = "원파일 소계" # 원파일 소계 덧줄(810-2 `M02_Doc_NativeEst`) — 합 밖 · 비목 칸 비움 PICK = "소요량" # 고른 표 칸 기호 이름 머리 _SCALE = {"eq": (1,), "pct": (100, 0.01), "kgt": (1000, 0.001)} @@ -291,6 +292,8 @@ def derive(sk: dict, ctx: tuple | None = None, whole: Any = None) -> dict: doc, notes = dc.cv.convert(_Row(master, key, row), row, given) _attach(doc, row, ids, src) _numbers(doc, keep) + if (meta.get("원본") or {}).get("원파일"): # 원파일(810-2) — 소계 비목 칸 비움 · 값 변수 출처 + _native(doc) head = {k: (meta.get("원본") or {}).get(k) for k in HEAD if (meta.get("원본") or {}).get(k)} marks = list((meta.get("원본") or {}).get("표지") or []) if not (doc.get("금액") or doc.get("결과") or row["호표"] or row.get("덧줄")): @@ -300,6 +303,16 @@ def derive(sk: dict, ctx: tuple | None = None, whole: Any = None) -> dict: return {**doc, "키": str(sk.get("키") or key), "이름": str(sk.get("이름") or doc.get("이름"))} +def _native(doc: dict) -> None: + """원파일 문서 — 소계 덧줄(합 밖) 비목 칸 비움(금액만) · 수 하나 변수(옵션 칸) 출처 「원파일」.""" + for line in doc.get("금액") or []: + if line.get("출처") == SUB and line.get("합밖"): + line.pop("비목", None) + for var in doc.get("변수") or []: + if (var.get("연결") or {}).get("갈래") == "숫자" and XL not in var["연결"]: + var["출처"] = "원파일" + + EMPTY = "참고 · 빈 산근 — 엑셀 줄 없음 · 금액 0 그대로" diff --git a/M02_MasterTemplete/M02_Doc_NativeEst.py b/M02_MasterTemplete/M02_Doc_NativeEst.py new file mode 100644 index 000000000..dc3e82908 --- /dev/null +++ b/M02_MasterTemplete/M02_Doc_NativeEst.py @@ -0,0 +1,570 @@ +"""EST 원파일 산근 블록 → 가져온 로직 줄(PLAN 810-2 · 요구 705 · 706 · 서버 단독 · 읽기만). + +바탕 = `M02_San_Estx.read` 구조 줄(칸 뜻 `resources/master_data/_원파일파서_틀.md`) — 엑셀 글 추정 대신 +원파일 표지로 정함(`M02_San_Est` 값 역색인 안 씀): + 단가 = `\\x03` 수 + 자원 코드(LinkIndex) · 변수 = `\\x11` 수(앞 변수 줄 값) · 줄참조 = `\\x0c` 수 · + 결과 = `\\x12` 수 · 비목 = SCheck(음수 = 그 줄이 냄 · 율 · 소계 양수 = 대상). +꼴 = 793-2a 내보내기(`M02_San_Emit.Out`) 그대로 → `M02_Sangeun_Imported.create` · `M02_Doc_Import.derive` + 가 수식 문서로(엑셀 길과 같은 길 · 같은 연결 규칙 `M02_San_Emit._m01` · 797-1 기계 시간당 이음). + 변수 대입 줄 = 중간(변수 그대로 · 공식 글 · 분수 그림 ─ 은 위아래 줄 칸 · 결과와 맞을 때만 식 · + 아니면 결과 값 + 표지) · 자원 줄 = 호표(단가 = 원파일 값 · 수량 = 식 · 변수 = 이름) · + 기계 · 산근 · 견적 세 줄(같은 코드 · 노 · 재 · 경 · 같은 수량 식) = 로직 값묶음 한 줄(소계 줄 = 글) · + 소계(61) = 합 밖 덧줄(출처 `SUB` · 문서에서 비목 칸 비움) + 아래 줄이 그 비목으로 합에 듦 · + 율(58 · 62) = 덧줄(줄참조 = 앞 줄 부름 · 구간 `\\x07X\\x07` = `\\x06X\\x06` 줄 합) · + 합계(\\x1a) = 글(블록 합 = 문서 비목 합 · 끝수 버림 0). +못 읽은 줄 = 보인 결과 값 얼림 + 「참고 · …」 표지(`NOTE`) — 지어 넣는 값 없음. +""" + +from __future__ import annotations + +import re + +from M02_MasterTemplete import M02_San_Emit as em +from M02_MasterTemplete import M02_San_Est as est +from M02_MasterTemplete import M02_San_Expr as ex + +COMP = em.COMP +NOTE = em.NOTE +SUB = "원파일 소계" # 덧줄 출처 — 합 밖 소계(문서 비목 칸 비움 · `M02_Doc_Import`) +TRIPLE = (101, 104, 105) # 견적 · 산근 · 기계 — 노 · 재 · 경 세 줄 +GALLAE = {"노임": "인력", "자재": "재료", "기계": "기계", "견적": "고정", "산근": "단가산출"} +GALLAE["표준"] = "고정" +NATURAL = {"노임": "L", "자재": "M"} +_SENT = 7_770_000.0 # 변수 이름 자리 표 수(토큰 읽기용 · 셈 전에 값으로 바꿈) +_ASSIGN = re.compile(r"(? str: + return _CTRL.sub("", _DROP.sub(" ", raw or "")) + + +def _close(a: float, b: float) -> bool: + return abs(a - b) < 1e-6 * max(1.0, abs(b)) + + +def _fit(got: float, want: float) -> str | None: + """보인 값이 되는 자리 규칙 — `M02_San_Expr.fit`(3 자리까지) + 버림 · 반올림 4~6 자리(EST Diget).""" + if rule := ex.fit(got, want): + return rule + for n in (4, 5, 6): + q = 10**n + if abs(ex.math.floor(round(got * q, 6)) / q - want) < 1e-9: + return f"버림{n}" + if abs(ex.math.floor(got * q + 0.5 + 1e-9) / q - want) < 1e-9: + return f"반올림{n}" + return None + + +class Block: + """EST 산근 블록 한 벌 → `{로직, 원본}`.""" + + def __init__(self, blk: dict, no: int, keys: bool, file: str, names: dict[str, int]) -> None: + name = str(blk.get("이름") or blk.get("코드") or "") + if blk.get("규격"): + name = f"{name}({blk['규격']})" + self.o = em.Out(name, blk.get("단위"), "EST", no) + self.o.head |= {"원파일": blk.get("코드")} + self.blk, self.keys, self.file, self.nos = blk, keys, file, names + self.lines: list[dict] = blk.get("줄") or [] + self.vars: dict[str, tuple[str, float]] = {} # 원 이름 → (엔진 이름, 값) + self.done: list[tuple[float, str, dict]] = [] # (결과, 부름 글, 줄) — 줄참조 찾기 + self.groups: dict[str, list[tuple[str, float]]] = {} # 구간 글자 → (부름 글, 결과) + self.extra: dict[int, dict] = {} # 행 → 소계가 정한 비목(아래 줄) + self.got = {"확정": 0, "표지": 0, "추정": 0} + + # ── 작은 도구 ────────────────────────────────────────────────── + def mark(self, ln: dict, why: str) -> None: + self.o.glyph(ln["행"], ln.get("보임") or "", mark=f"{NOTE}{why}") + self.got["표지"] += 1 + + def _sub(self, seg: str) -> tuple[str, dict[float, str]]: + """식 조각 속 아는 변수 이름 → 표 수(뒤에서 이름으로 바꿈).""" + out, k = {}, 0 + for name in sorted(self.vars, key=len, reverse=True): + pat = re.compile(rf"(? tuple[tuple, dict, str | None] | None: + """식 조각 → (나무, {토큰 차례: 변수 이름}, 자리 규칙) · 결과와 맞지 않으면 None · + extra = {표 수: 값}(구간 합 자리).""" + seg, names = self._sub(_power(seg.replace("·", "×"))) + toks = est.tokens(seg) + if not toks: + return None + try: + tree = ex.parse(toks) + except ex.ExprError: + return None + vars_ = {n[2]: names[n[1]] for n in ex.numbers(tree) if n[1] in names} + sub = {i: self.vars[v][1] for i, v in vars_.items()} + extra = extra or {} + sub |= {n[2]: extra[n[1]] for n in ex.numbers(tree) if n[1] in extra} + try: + got = ex.value(tree, {"V": {}, "sub": sub}) + except ex.ExprError: + return None + same = want is None or abs(got - want) <= 1e-9 * max(1.0, abs(want)) + rule = "그대로" if same else _fit(got, want) + return (tree, vars_, rule) if rule else None + + def ref_of(self, value: float, before: int) -> str | None: + """줄참조 수 → 앞 줄 부름(가장 가까운 같은 결과).""" + for v, call, ln in reversed(self.done): + if ln["행"] < before and _close(v, value): + return call + return None + + def var_of(self, value: float) -> str | None: + for name, (_, v) in reversed(list(self.vars.items())): + if _close(v, value): + return name + return None + + # ── 변수 줄 ──────────────────────────────────────────────────── + def assigns(self, i: int, ln: dict) -> bool: + """「q = 0.7 K = 0.55 f = 1 / 1.325 = 0.75」 · 분수 그림 Q = ── = ── = 23.39 → 중간.""" + text = _clean(ln.get("글") or "") + hits: list[re.Match] = [] + for m in _ASSIGN.finditer(text): # 앞 대입 값이 끝난 뒤(연산 · = 뒤 아님)만 새 대입 + gap = text[hits[-1].end() : m.start()] if hits else "" + if not hits or (re.search(r"\d", gap) and not re.search(r"[×÷+\-*/(=]\s*$", gap)): + hits.append(m) + lead = text[: hits[0].start()].strip(" ○●·-") if hits else "" + if not hits or (lead and not re.search(r"[::]$", lead)): + return False + for n, m in enumerate(hits): + end = hits[n + 1].start() if n + 1 < len(hits) else len(text) + self.assign(i, ln, m.group(1), text[m.end() : end]) + return True + + def assign(self, i: int, ln: dict, name: str, rhs: str) -> None: + parts = rhs.split("=") + lead = re.match(r"\s*(" + est.NUMRE + r")", parts[-1]) + if not lead: + return + value = est.num(lead.group(1)) + body = None + for seg in parts[:-1]: + if "─" in seg: + seg = self.fraction(i, seg) + got = self.formula(seg, value) if seg else None + if got: + body = self.text(got) + break + eng = self.o.names.line(name) + if body is None: + body = em.num(value) + if len(parts) > 1: + self.mark(ln, f"변수 {name} 공식 글 못 읽음 — 결과 값 {em.num(value)}") + self.vars[name] = (eng, value) + self.o.middle(eng, body, None, ln["행"], ln.get("보임") or "") + self.got["확정"] += 1 + + def fraction(self, i: int, seg: str) -> str: + """분수 그림 ─ = 위 줄 · 아래 줄 같은 차례 칸(node `native-text` 와 같은 읽기).""" + + def cols(k: int) -> list[str]: + if not 0 <= k < len(self.lines): + return [] + t = _clean(self.lines[k].get("글") or "") + return re.sub(r"\s*([×÷·+*/−-])\s*", r"\1", t).strip().split() + + tops, bottoms, at = cols(i - 1), cols(i + 1), [0] + + def one(_: re.Match) -> str: + k = at[0] + at[0] += 1 + top = tops[k] if k < len(tops) else "" + low = bottoms[k] if k < len(bottoms) else "" + return f"({top})/({low})" if top and low else "?" + + return re.sub(r"─+", one, seg) + + def text(self, got: tuple, swap: dict[int, str] | None = None) -> str: + """식 글 — 자리 규칙(그대로 빼고)을 식 안 끝수로(금액 줄은 `money` 가 버림1 을 넘김 = 줄 끝수).""" + tree, vars_, rule = got + swap = {**{i: self.vars[v][0] for i, v in vars_.items()}, **(swap or {})} + body = em.text(tree, {}, swap) + m = re.fullmatch(r"(버림|반올림|올림)(\d)", rule or "") + if m: + body = f"{m.group(1)}({body}, {m.group(2)})" + return body + + # ── 금액 줄 ──────────────────────────────────────────────────── + def money(self, ln: dict) -> tuple[str, dict | None] | None: + """금액 줄 식 → (식 글(단가 자리 = 1 · 변수 = 이름 · 줄참조 = 부름), 자리) · 못 읽음 None.""" + raw = ln.get("글") or "" + group: dict[float, str] = {} + sums: dict[float, float] = {} + for k, m in enumerate(_GROUP.finditer(raw)): + calls = self.groups.get(m.group(1)) or [] + if not calls: + return None + mark = _SENT + 500 + k + group[mark] = "(" + " + ".join(c for c, _ in calls) + ")" + sums[mark] = sum(v for _, v in calls) + raw = raw.replace(m.group(0), f" {em.num(mark)} ", 1) + text = _clean(raw) + head = text.split("=", 1)[0] + if ":" in head: + text = text.split(":", 1)[1] + parts = text.split("=") + want = ln["결과"][-1] if ln.get("결과") else None + if want is None or len(parts) < 2: + return None + price = (ln.get("연결단가") or [None])[0] + for seg in parts[:-1]: + bare = re.fullmatch(r"\s*(" + est.NUMRE + r")\s*", seg) + if bare and price is not None and _close(est.num(bare.group(1)), want): + return "1", None # 단가 그대로(× 1) + got = self.formula(seg, want, sums) + if not got: + continue + swap: dict[int, str] = {} + used_price = False + for _, v, idx in ex.numbers(got[0]): + if idx in got[1]: + continue + if v in group: + swap[idx] = group[v] + elif price is not None and not used_price and _close(v, price): + swap[idx], used_price = "1", True + elif v in (ln.get("변수") or []) and self.var_of(v): + swap[idx] = self.vars[self.var_of(v)][0] + elif v in (ln.get("줄참조") or []) and (call := self.ref_of(v, ln["행"])): + swap[idx] = call + if price is not None and not used_price: + continue + place = em._place(got[2]) if got[2] != "그대로" else None + return self.text((got[0], got[1], None), swap), place + return None + + def frozen(self, ln: dict, why: str) -> tuple[str, dict | None]: + self.mark(ln, f"{why} — 보인 값 {em.num(ln['결과'][-1])} 얼림") + return em.num(ln["결과"][-1]), None + + def res(self, ln: dict, part: str | None, price: float | None) -> dict: + r = ln.get("자원") or {} + kind = r.get("종류") + out = {"꼴": "EST", "갈래": GALLAE.get(kind, "고정"), "종류": kind, "코드": r.get("코드")} + out |= {"이름": r.get("이름"), "규격": r.get("규격") or "", "단위": r.get("단위")} + if kind == "산근" and r.get("코드") in self.nos: + out["이름"] = f"단산{self.nos[r['코드']]}" # 같은 파일 안쪽 블록(797-1 형제 SK) + out["원이름"] = r.get("이름") + if part: + nat = NATURAL.get(kind, part) + out |= {"단가": {nat: price}, "비목": nat, "열쇠비목": nat} + out["옮김"] = part if part != nat else None + return out + + def register(self, ln: dict, call: str) -> None: + if ln.get("결과"): + self.done.append((ln["결과"][-1], call, ln)) + g = re.search(r"\x06([A-Z])\x06", ln.get("글") or "") + if g: + self.groups.setdefault(g.group(1), []).append((call, (ln.get("결과") or [0.0])[-1])) + + def item(self, ln: dict, part: str | None, inside: bool) -> None: + """자원 줄(노임 · 자재 · 표준 · 견적) → 호표 단가 줄.""" + price = (ln.get("연결단가") or [None])[0] + got = self.money(ln) if price is not None else None + qty, place = got if got else ("1", self.frozen(ln, "수량 식 못 읽음")[1]) + comp = part or NATURAL.get((ln.get("자원") or {}).get("종류")) or "S" + r = self.res(ln, comp, price if got else ln["결과"][-1]) + name = self.o.names.item(ln.get("품명") or r.get("이름") or "줄") + link, many = em._m01(r["갈래"], r) if self.keys else (None, None) + one = em.resource(name, r.get("단위"), qty, r, link) + one |= {} if inside else {"합밖": True} + one |= {"자리": place} if place else {} + self.o.add_line(one, True, ln["행"], ln.get("보임") or "", ln["결과"][-1]) + if many: + self.mark(ln, many.removeprefix(NOTE)) + self.got["확정"] += bool(got) + self.register(ln, f"줄.'{name}'") + + def triple(self, rows: list[dict], total: dict | None) -> None: + """기계 · 산근 · 견적 세 줄 → 로직 값묶음 한 줄(수량 식 · 자리 같을 때) · 아니면 줄마다.""" + got = [self.money(ln) for ln in rows] + parts = [ln["비목"] for ln in rows] + same = all(got) and len({g for g in got}) == 1 and sorted(parts) == ["L", "M", "S"] + if not same: + for ln, g in zip(rows, got): + self.machine_line(ln, g) + if total: + self.subtotal(total, [call for _, call, _ in self.done[-len(rows) :]]) + return + qty, place = got[0] + prices = {ln["비목"]: (ln.get("연결단가") or [0])[0] for ln in rows} + r = self.res(rows[0], None, None) + r |= {"단가": prices} + head = next( + (b for b in reversed(self.lines[: self.lines.index(rows[0])]) + if (b.get("자원") or {}).get("코드") == r.get("코드") and not b.get("비목")), + {}, + ) # fmt: skip + title = head.get("품명") or r.get("원이름") or r.get("이름") or "줄" + name = self.o.names.item(title) + one = {"이름": name, "규격": r.get("규격") or "", "단위": r.get("단위") or "", "수량": qty} + one |= {"종류": "로직", "값묶음": em.bundle(r), "이음": self.logic_link(r), "자원": r} + one |= {"자리": place} if place else {} + value = total["결과"][-1] if total and total.get("결과") else None + for ln in rows: # 노 · 재 · 경 글 = 펼침(맞댈 값은 한 줄 계 — 소계 글 · 없으면 첫 줄) + self.o.glyph(ln["행"], ln.get("보임") or "") + at = total or rows[0] + value = value if value is not None else sum(ln["결과"][-1] for ln in rows) + self.o.add_line(one, True, at["행"], at.get("보임") or "", value) + if total: + self.register(total, f"줄.'{name}'") + self.got["확정"] += 3 + + def machine_line(self, ln: dict, got: tuple | None) -> None: + qty, place = got if got else ("1", self.frozen(ln, "수량 식 못 읽음")[1]) + price = (ln.get("연결단가") or [ln["결과"][-1]])[0] + r = self.res(ln, ln["비목"], price if got else ln["결과"][-1]) + r["갈래"] = "기계" if r["갈래"] == "기계" else r["갈래"] + name = self.o.names.item(f"{ln.get('품명') or r.get('이름') or '줄'} {COMP[ln['비목']]}") + link, _ = em._m01(r["갈래"], r) if self.keys else (None, None) + one = em.resource(name, r.get("단위"), qty, r, link) + one |= {"자리": place} if place else {} + self.o.add_line(one, True, ln["행"], ln.get("보임") or "", ln["결과"][-1]) + self.got["확정"] += bool(got) + self.register(ln, f"줄.'{name}'") + + def logic_link(self, r: dict) -> str | None: + """기계 = 시간당 기계경비 로직 부름 글(797-1 짝 고름) · 그 밖 = 없음(산근 = 형제 SK 참조).""" + if not self.keys or r.get("갈래") != "기계": + return None + key, _ = em._m01("기계", r) + if not key: + return None + from M02_MasterTemplete import M02_Doc_Import as dim + + got = dim.hourly_link(key, "노무비") + if not got: + return None + args = "".join(f", {k}={v}" for k, v in got["입력"].items()) + return f"로직({got['키']}{args})" + + def subtotal( + self, ln: dict, kids: list[str], part: str | None = None, glyph: bool = True + ) -> str: + """합 밖 소계 덧줄 · glyph 거짓 = 글줄에 안 붙임(같은 줄 식이 붙음 · 61 「합 ÷ N = 결과」).""" + name = self.o.names.line(self.label(ln) or "소계") + one = {"이름": name, "식": " + ".join(kids) or "0", "비목": COMP.get(part or "", "경비")} + one |= {"합밖": True, "출처": SUB} + value = ln["결과"][-1] if ln.get("결과") else (ln.get("저장") or {}).get("T") + if glyph: + self.o.add_line(one, False, ln["행"], ln.get("보임") or "", value) + else: + self.o.adds.append(one) + self.done.append((value or 0.0, name, ln)) + return name + + def sub61(self, i: int, ln: dict) -> None: + """소계(61) — 앞 줄 결과 합(단 > 0 머리까지) · 아래 줄 비목 0 이면 그 줄이 소계 비목으로 합에 듦.""" + want = (ln.get("줄참조") or [None])[0] + part = ln.get("비목") + start, skip = 0, set() + for k in range(i - 1, -1, -1): # node `native-text` 61 — 머리 · -20 줄까지(그 줄 포함) + b = self.lines[k] + if b.get("색인") == -1: + skip.add(b["행"]) + if (b.get("단") or 0) > 0 or (b.get("색인") or 0) > 0 or b.get("색인") == -20: + start = b["행"] + break + kids = [d for d in self.done if start <= d[2]["행"] < ln["행"] and d[2]["행"] not in skip] + ok = want is not None and kids and _close(round(sum(k[0] for k in kids), 1), want) + if ok and ln.get("결과"): # 「인부소계 : ‹합› ÷ N = 결과」 — 합(합 밖) 뒤 식 줄이 합에 듦 + self.subtotal({**ln, "결과": [want]}, [k[1] for k in kids], part, glyph=False) + got = self.money(ln) + body, place = got if got else self.frozen(ln, "소계 식 못 읽음") + name = self.o.names.line("소계식") + one = {"이름": name, "식": body, "비목": COMP.get(part or "", "경비")} + one |= ({} if part else {"합밖": True}) | ({"자리": place} if place else {}) + self.o.add_line(one, False, ln["행"], ln.get("보임") or "", ln["결과"][-1]) + self.done.append((ln["결과"][-1], name, ln)) + self.got["확정"] += bool(got) + return + if ok and part and all(k[2].get("비목") is None and self._is_line(k[1]) for k in kids): + self.subtotal(ln, [k[1] for k in kids], part) + for _, call, kid in kids: # 아래 줄 = 소계 비목으로 합에 듦 + self.joins(call, part) + self.got["확정"] += 1 + return + if ok: # 그대로 — 소계 줄이 합에 듦 + name = self.o.names.line("소계") + one = { + "이름": name, + "식": " + ".join(k[1] for k in kids), + "비목": COMP.get(part, "경비"), + } + one |= {} if part else {"합밖": True} + self.o.add_line(one, False, ln["행"], ln.get("보임") or "", want) + self.done.append((want, name, ln)) + self.got["확정"] += 1 + return + value = want if want is not None else 0.0 + name = self.o.names.line("소계") + one = {"이름": name, "식": em.num(value), "비목": COMP.get(part, "경비")} + one |= {} if part else {"합밖": True} + self.mark(ln, "소계 아래 줄 못 가림 — 보인 값 얼림") + self.o.add_line(one, False, ln["행"], ln.get("보임") or "", value) + self.done.append((value, name, ln)) + + @staticmethod + def label(ln: dict) -> str: + """「인부소계 : …」 → 「인부소계」(= 앞 쌍점만 · 낱말 아니면 빈 글).""" + head = _clean(ln.get("글") or "").split("=", 1)[0] + if ":" not in head: + return "" + got = re.sub(r"[^\w가-힣]", "", head.split(":", 1)[0])[:20] + return "" if not got or got[0].isdigit() else got + + def _is_line(self, call: str) -> bool: + name = call[3:-1] if call.startswith("줄.'") else call + return any(one["이름"] == name for one in [*self.o.items, *self.o.adds]) + + def joins(self, call: str, part: str) -> None: + """합 밖 호표 · 덧줄(부름 글) → 그 비목으로 합에 듦.""" + name = call[3:-1] if call.startswith("줄.'") else call + for one in [*self.o.items, *self.o.adds]: + if one["이름"] != name: + continue + one.pop("합밖", None) + if one.get("종류") in ("인력", "재료", "기계") and "단가" in one: + one["비목"] = COMP[part] + r = one.get("자원") or {} + if r.get("비목"): + r["옮김"] = part if part != r["비목"] else None + elif "비목" in one and not one.get("종류"): + one["비목"] = COMP[part] + + def rate(self, ln: dict) -> None: + got = self.money(ln) + body, place = got if got else self.frozen(ln, "율 식 못 읽음") + part = ln.get("비목") + name = self.o.names.line(self.label(ln) or "율") + one = {"이름": name, "식": body, "비목": COMP.get(part or "", "경비")} + one |= {} if part in COMP else {"합밖": True} + one |= {"자리": place} if place else {} + self.o.add_line(one, False, ln["행"], ln.get("보임") or "", ln["결과"][-1]) + self.got["확정"] += bool(got) + self.register(ln, name) + + def plain(self, ln: dict) -> None: + """연결 없는 결과 줄 — 비목 있으면 덧줄(식) · 없으면 글 + 값(줄참조 대상이면 중간).""" + got = self.money(ln) + part = ln.get("비목") + if part in COMP: + body, place = got if got else self.frozen(ln, "식 못 읽음") + name = self.o.names.line("줄") + one = {"이름": name, "식": body, "비목": COMP[part]} + one |= {"자리": place} if place else {} + self.o.add_line(one, False, ln["행"], ln.get("보임") or "", ln["결과"][-1]) + self.register(ln, name) + self.got["확정"] += bool(got) + return + eng = self.o.names.line("값") + body = got[0] if got else em.num(ln["결과"][-1]) + if got and got[1]: + body = f"{got[1]['방법']}({body}, {got[1]['자리']})" + self.o.middle(eng, body, None, ln["행"], ln.get("보임") or "") + self.register(ln, eng) + + def text_line(self, ln: dict) -> None: + """글 줄 — 품셈 · 조건 이름만 있는 글(값 없음) = 「추정」 표지(연결 안 함 · 810-3 화면).""" + if _COND.search(ln["보임"]): + self.o.glyph( + ln["행"], ln["보임"], mark=f"{NOTE}{GUESS} — 품셈 조건 글(값 없음 · 연결 안 함)" + ) + self.got["추정"] += 1 + return + self.o.glyph(ln["행"], ln["보임"]) + + # ── 한 벌 ───────────────────────────────────────────────────── + def run(self) -> dict: + for k, ln in enumerate(self.lines): # 「노무비 : ‹단가›」(식 · 결과 없음) = 단가 × 1 + text = _clean(ln.get("글") or "") + if ln.get("연결단가") and not ln.get("결과") and "=" not in text and ln.get("비목"): + price = ln["연결단가"][0] + self.lines[k] = {**ln, "결과": [price], "글": f"{ln['글']} = {em.num(price)}"} + lines, i = self.lines, 0 + while i < len(lines): + ln = lines[i] + link, part = ln.get("연결"), ln.get("비목") + if ln.get("합계") and link != 62: + if (ln.get("보임") or "").strip(): + self.o.glyph(ln["행"], ln["보임"]) + i += 1 + continue + if link in TRIPLE and part in ("L", "M", "S"): + rows = [ln] + code = (ln.get("자원") or {}).get("코드") + while ( + i + len(rows) < len(lines) + and lines[i + len(rows)].get("연결") == link + and lines[i + len(rows)].get("비목") in ("L", "M", "S") + and (lines[i + len(rows)].get("자원") or {}).get("코드") == code + ): + rows.append(lines[i + len(rows)]) + nxt = lines[i + len(rows)] if i + len(rows) < len(lines) else None + total = nxt if nxt and nxt.get("연결") == link and nxt.get("비목") == "T" else None + if all(r.get("결과") for r in rows): + self.triple(rows, total) + else: + for r in rows: + self.mark(r, "결과 없는 세 줄") + i += len(rows) + bool(total) + continue + if link in (61, 51, 68): + self.sub61(i, ln) + elif link in (58, 62, 52) and ln.get("결과"): + self.rate(ln) + elif ln.get("결과") and (ln.get("자원") or {}).get("코드") and ln.get("연결단가"): + self.item(ln, part if part in COMP else None, part in COMP) + elif ln.get("결과") and link in TRIPLE and part == "T": + self.o.glyph(ln["행"], ln.get("보임") or "", value=ln["결과"][-1]) + self.register(ln, em.num(ln["결과"][-1])) + elif not ln.get("자원") and self.assigns(i, ln): + pass + elif ln.get("결과"): + self.plain(ln) + elif (ln.get("보임") or "").strip(): + self.text_line(ln) + i += 1 + saved = self.blk.get("저장") or {} + check = {COMP[c]: saved.get(c) or 0 for c in COMP} | {"계": saved.get("T") or 0} + out = self.o.done("비목버림", None, check, "산근", self.file) + out["원본"] |= {"원파일": True, "확정": dict(self.got)} + return out + + +def block(blk: dict, no: int, keys: bool = True, file: str = "", names: dict | None = None) -> dict: + """EST 산근 블록(`M02_San_Estx.read` 산근 한 개 · 번 = 파일 안 차례 1부터) → {로직, 원본}. + names = 같은 파일 산근 코드 → 번(안쪽 산근 「단산N」).""" + return Block(blk, no, keys, file, names or {}).run() + + +_POW = re.compile(r"(\([^()]*\)|" + est.NUMRE + r"|[A-Za-z][A-Za-z0-9]*)\s*\^\s*(\d)(?![\d.])") + + +def _power(seg: str) -> str: + """「x^2」 · 「(a+b)^2」 → 곱 되풀이(EST 토큰에 ^ 없음 · 정수 지수만).""" + for _ in range(8): + new = _POW.sub(lambda m: "(" + "×".join([m.group(1)] * int(m.group(2))) + ")", seg) + if new == seg: + break + seg = new + return seg diff --git a/M02_MasterTemplete/M02_Hopyo_Router.py b/M02_MasterTemplete/M02_Hopyo_Router.py index c0eff4bd6..d29041de6 100644 --- a/M02_MasterTemplete/M02_Hopyo_Router.py +++ b/M02_MasterTemplete/M02_Hopyo_Router.py @@ -19,6 +19,7 @@ from fastapi import APIRouter, Depends, File, HTTPException, UploadFile from pydantic import BaseModel, ConfigDict, Field from common_util.common_util_auth import verify_session +from M02_MasterTemplete import M02_Doc_FromNative as from_native from M02_MasterTemplete import M02_Hopyo_Build as hopyo_build from M02_MasterTemplete import M02_Hopyo_Excel as hopyo_excel from M02_MasterTemplete import M02_Hopyo_Forget as hopyo_forget @@ -63,6 +64,9 @@ def _who(session: Session) -> dict[str, Any]: def _upload(name: str, data: bytes, who: dict[str, Any]) -> dict[str, Any]: + # 경쟁사 원파일(810-2) — 같은 공사 엑셀 HP 에 붙음 · 원파일 우선 + if from_native.is_native(name): + return from_hopyo.upload_native(store.root(), name, data, who) mark = hopyo_store.fingerprint(data) hopyo_forget.sweep(store.root()) # 하루 지난 작업 중 HP 끝냄(743-1) if same := next((r for r in hopyo_store.rows(store.root()) if r.get("지문") == mark), None): @@ -103,7 +107,7 @@ def hopyo_upload( session: Session = Depends(verify_session), ) -> dict: """엑셀(xls · xlsx) 올리기 — 「일위대가」 시트를 읽어 결과 · 격자 저장 · 20 MB · - 엉터리 · 시트 없음 400.""" + 엉터리 · 시트 없음 400 · 원파일(.estx · .stc) = 산근 원파일 우선(810-2 `upload_native`).""" folder = _root(session, layer, owner, write=True) data = file.file.read(HOPYO_MAX_BYTES + 1) if len(data) > HOPYO_MAX_BYTES: diff --git a/M02_MasterTemplete/M02_San_Estx.py b/M02_MasterTemplete/M02_San_Estx.py index 55ebd5f0f..fcbd4288c 100644 --- a/M02_MasterTemplete/M02_San_Estx.py +++ b/M02_MasterTemplete/M02_San_Estx.py @@ -304,6 +304,7 @@ def cost_line(at: int, r: dict[str, Any], res: dict, tags: list[str]) -> dict[st "규격": ld.get("규격"), "단위": ld.get("단위"), "단": r.get("Level"), + "색인": r.get("Index"), "연결": link, "연결뜻": LINK.get(link or 0), "비목": _sc(r), diff --git a/M02_MasterTemplete/M02_Sangeun_FromHopyo.py b/M02_MasterTemplete/M02_Sangeun_FromHopyo.py index 68abc23e0..6e2854e61 100644 --- a/M02_MasterTemplete/M02_Sangeun_FromHopyo.py +++ b/M02_MasterTemplete/M02_Sangeun_FromHopyo.py @@ -9,6 +9,9 @@ 블록 번 = 판정 블록 번(STmate = 코드 「D00102」 숫자 · EST = 단가산출 블록 번). STmate 블록 끝전(비목버림 | 합버림_큰나머지)은 파일 설정 — 참조 평가기로 둘 다 셈해 엑셀 계와 맞는 것. +원파일(.estx · .stc · 810-2 `M02_Doc_FromNative`) = 같은 자리 칸 `원파일`(둘 꼴) — 있으면 원파일 우선 +(그 블록 번이 원파일에 있을 때) · 엑셀 올림 때 같은 공사 원파일이 다른 HP 에 있으면 붙임 · 원파일 올림 = +같은 공사 엑셀 HP 에 붙임(없으면 원파일로 새 HP · `upload_native`). """ from __future__ import annotations @@ -20,6 +23,7 @@ from typing import Any from common_util.common_util_json import atomic_write_json from common_util.common_util_time import utc_now_text +from M02_MasterTemplete import M02_Doc_FromNative as fn from M02_MasterTemplete import M02_Hopyo_Store as hopyo_store from M02_MasterTemplete import M02_MasterTemplete_Store as store from M02_MasterTemplete import M02_San_Emit as em @@ -58,10 +62,54 @@ def keep(folder: str | Path, key: str, name: str, data: bytes) -> str | None: return None path = _path(folder, key) path.parent.mkdir(parents=True, exist_ok=True) - atomic_write_json(path, {"파일": name, "시트": sheets}) + got = {"파일": name, "시트": sheets} + native = next((n for n in _natives(folder) if fn.same(n, sheets)), None) + atomic_write_json(path, got | ({"원파일": native} if native else {})) return None +# ── 원파일(810-2) ────────────────────────────────────────────────────── +def _saved(folder: str | Path) -> list[tuple[Path, dict]]: + out = [] + for path in sorted((hopyo_store._dir(folder) / DIRNAME).glob("HP-*.json")): + try: + out.append((path, json.loads(path.read_bytes()))) + except (OSError, ValueError): + continue + return out + + +def _natives(folder: str | Path) -> list[dict]: + return [d["원파일"] for _, d in _saved(folder) if isinstance(d.get("원파일"), dict)] + + +def upload_native(folder: str | Path, name: str, data: bytes, who: Any) -> dict[str, Any]: + """원파일 올림 — 같은 공사 엑셀 HP 에 원파일을 붙임(`붙음` 키들 · 첫 HP 답) · 없으면 원파일로 + 새 HP(EST = 일위대가 호표 · STmate = 호표 없음 · 산근만). 같은 파일 다시 = 그 HP(`이어서`).""" + mark = hopyo_store.fingerprint(data) + if same := next((r for r in hopyo_store.rows(folder) if r.get("지문") == mark), None): + return {**same, "이어서": True, "원파일": True} + if why := unreadable(data): + raise store.StoreError(400, why) + try: + native = fn.read(name, data) + except fn.NativeError as e: + raise store.StoreError(400, str(e)) from e + joined = [] + for path, got in _saved(folder): + if got.get("시트") and fn.same(native, got["시트"]): + atomic_write_json(path, {**got, "원파일": native}) + joined.append(path.stem) + rows = {r["키"]: r for r in hopyo_store.rows(folder)} + if joined and joined[0] in rows: + return {**rows[joined[0]], "원파일": True, "붙음": joined} + row = hopyo_store.save(folder, name, fn.hopyo(native), who, None, mark) + path = _path(folder, row["키"]) + path.parent.mkdir(parents=True, exist_ok=True) + atomic_write_json(path, {"파일": name, "원파일": native}) + return {**row, "원파일": True} + + def has(folder: str | Path, key: str) -> bool: return _path(folder, key).is_file() @@ -94,6 +142,11 @@ def emit(folder: str | Path, key: str, no: int) -> dict[str, Any]: saved = json.loads(_path(folder, key).read_bytes()) except (OSError, ValueError) as e: raise store.StoreError(409, RELOAD) from e + native = saved.get("원파일") + if isinstance(native, dict) and int(no) in fn.numbers(native): # 원파일 우선(810-2) + return fn.emit(native, int(no)) + if not saved.get("시트"): + raise store.StoreError(404, f"없는 단산{no}") sheets, name = saved["시트"], str(saved.get("파일") or "") if book.kind_of(sheets) == "STmate": blk = next((b for b in book.stmate_blocks(sheets) if int(b["코드"][1:]) == int(no)), None) @@ -109,12 +162,17 @@ def emit(folder: str | Path, key: str, no: int) -> dict[str, Any]: return em.est(blk, est.parse_block(blk["글"], prices), total[blk["번"]], True, name) -def _inner(source: Path, key: str, logic: dict) -> list[tuple[dict, int | None, str | None]]: +def _inner( + source: Path, key: str, logic: dict, native: bool = False +) -> list[tuple[dict, int | None, str | None]]: """안쪽 산근 줄 `[(호표 줄, 같은 엑셀 안쪽 블록 번, 못 잇는 까닭)]` — STmate = 줄 코드가 블록 코드 · EST = 줄 이름 「단산N」(N 은 총괄표에 있는 블록). 비목 하나만 부른 줄은 그 비목이 그대로(옮김 없음)일 때만.""" from M02_MasterTemplete import M02_San_Book as book - sheets = json.loads(_path(source, key).read_bytes())["시트"] + saved = json.loads(_path(source, key).read_bytes()) + if native and isinstance(saved.get("원파일"), dict): + return fn.inner(saved["원파일"], logic) + sheets = saved["시트"] stmate = book.kind_of(sheets) == "STmate" have = {b["코드"]: int(b["코드"][1:]) for b in book.stmate_blocks(sheets)} if stmate else {} total = set() if stmate else set(book.est_prices(sheets)[1]) @@ -143,7 +201,8 @@ def _link_inner(source: Path, key: str, no: int, out: dict, trail: tuple) -> Non from M02_MasterTemplete import M02_Labor_Ref as refs made: dict[int, dict | None] = {} - for line, n, why in _inner(source, key, out["로직"]): + native = bool(out["원본"].get("원파일")) + for line, n, why in _inner(source, key, out["로직"], native): if n is not None and not why and (n == no or n in trail or len(trail) >= MAX_INNER): why = "안쪽 블록이 자기 자신을 부름" if n is not None and not why and n not in made: diff --git a/M02_MasterTemplete/logic/M02_Sangeun_Origin.ts b/M02_MasterTemplete/logic/M02_Sangeun_Origin.ts index b92758ef8..408d01593 100644 --- a/M02_MasterTemplete/logic/M02_Sangeun_Origin.ts +++ b/M02_MasterTemplete/logic/M02_Sangeun_Origin.ts @@ -1,7 +1,7 @@ /* ============================================================================= * M02_Sangeun_Origin.ts * 가져온 식 단가산출 「어디서 왔나」 카드 자료(PLAN 807-1 · 요구 699) — 원문 패널 첫 화면. - * SK `가져온.원본`(파일 · 시트 · 행 · 갈래 EST|STmate · 코드 · 표지 · 가져온때 · 글줄)에서 보이기 자료만 뽑음 · + * SK `가져온.원본`(파일 · 시트 · 행 · 갈래 EST|STmate · 코드 · 표지 · 가져온때 · 원파일 · 글줄)에서 보이기 자료만 뽑음 · * 품셈 절 글 = 엑셀 글줄에 적힌 「…품셈 N-N-N」 글(책 · 절 번호 · 그 줄 글) — 찾기 · 잇기 없음(보이기만) * 화면 · DOM · fetch 없음 * ========================================================================== */ @@ -16,6 +16,7 @@ export interface OriginMeta { 코드?: string | number; 표지?: string[]; 가져온때?: string; + 원파일?: boolean; // 경쟁사 원파일(.estx · .stc)에서 옮김(810-2) — 엑셀 아님 글줄?: { 행?: number; 글?: string }[]; }; } @@ -81,7 +82,7 @@ export function originOf(meta: OriginMeta | null | undefined): Origin | null { const block = src.갈래 === "EST" && code !== "" ? `단산${code}` : String(code); const rows = (src.행 ?? []).filter((x) => Number.isFinite(x)); return { - 프로그램: src.갈래 ?? "", + 프로그램: `${src.갈래 ?? ""}${src.원파일 ? " · 원파일" : ""}`, 파일: src.파일 ?? "", 블록: block, 행: rows.length ? `${src.시트 ? `${src.시트} ` : ""}${rows.join("~")}행` : (src.시트 ?? ""), diff --git a/common_util/common_util_formula_doc.ts b/common_util/common_util_formula_doc.ts index c30c73108..414575c3c 100644 --- a/common_util/common_util_formula_doc.ts +++ b/common_util/common_util_formula_doc.ts @@ -602,7 +602,7 @@ export function check(doc: FormulaDoc): Mark[] { } (doc.금액 ?? []).forEach((l, at) => { const where = `금액 ${l.이름 || at + 1}`; - if (![...COSTS, "묶음"].includes(l.비목 as string)) + if (![...COSTS, "묶음"].includes(l.비목 as string) && !(l.합밖 && !l.비목)) out.push(mark("금액 줄", `${where} 비목 「${l.비목}」`)); if (l.수량 !== null && l.수량 !== undefined && l.수량 !== "") need(l.수량, `${where} 수량`, true); diff --git a/common_util/common_util_formula_doc_calc.ts b/common_util/common_util_formula_doc_calc.ts index 5ddcad3f1..b796b73c4 100644 --- a/common_util/common_util_formula_doc_calc.ts +++ b/common_util/common_util_formula_doc_calc.ts @@ -464,6 +464,7 @@ function money(run: Run, doc: FormulaDoc, rules: Record) { const price = run.expr(line.단가, where, scope); const kind = line.비목 as string; let parts: Bundle = {}; + let bare: number | null = null; // 비목 없는 합 밖 줄(소계 보임 · 810-2) — 금액만 let why: string | null = null; const stop = (text: string): void => { stopped = true; @@ -474,6 +475,7 @@ function money(run: Run, doc: FormulaDoc, rules: Record) { why = (qty instanceof Stop ? qty : (price as Stop)).why; } else if (qty instanceof Blank) why = qty.why; else if (!isNum(qty)) stop("수량이 수 아님"); + else if (qty === 0 && !kind && line.합밖) bare = 0; else if (qty === 0) for (const k of kind === "묶음" ? COSTS : [kind]) parts[k] = 0; else if (price instanceof Blank) why = price.why; else if (kind === "묶음") { @@ -482,11 +484,17 @@ function money(run: Run, doc: FormulaDoc, rules: Record) { else stop("묶음 줄 단가가 단가산출 묶음 아님"); } else if ((COSTS as readonly string[]).includes(kind) && isNum(price)) parts[kind] = qty * price; + else if (!kind && line.합밖 && isNum(price)) bare = qty * price; else stop(isObj(price) ? "묶음 값 — 칸(.계 · .노무비 …) 필요" : "단가가 수 아님"); const rule = line.자리 ?? rules.줄; parts = Object.fromEntries(Object.entries(parts).map(([k, v]) => [k, cut(v, rule) as number])); const keys = Object.keys(parts); - const amount = keys.length ? keys.reduce((s, k) => s + parts[k], 0) : null; + const amount = + bare !== null + ? (cut(bare, rule) as number) + : keys.length + ? keys.reduce((s, k) => s + parts[k], 0) + : null; if (!skip.has(i)) addTo(running, parts); if (line.기호) syms[String(line.기호)] = amount ?? new Blank(why ?? "빈 줄"); outs.push({ diff --git a/docs/raw/요구_1104/_목록_810-2_원파일변환.xlsx b/docs/raw/요구_1104/_목록_810-2_원파일변환.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..84b498435cb4c82b20716654d5b13f3edea41a03 GIT binary patch literal 221132 zcmZ^}WmH^2vxW=7-CdL5?(PH+?(P~S!C{c#9^4_gyUXD2?gV#tw>#lGl5_96KY+!o z+1=H(tE=96x)o#~AThzfz+k}^Gc9z*wK@@fLH|{Oeo#R_CU(XO_IBSL7!ALFXK=N# zmi;A*(8YxM-%^8EXv{4PW6`{atdgJ~!T{?l>sabD(QzHm9$^dnCiOu{ zLqJlRW14(i>LdlvRWS4 zlg|QTBuq*{mh4Nb(7n?B{S8Sn2i>2oYUXBn>iCOzI?m zF^%x!QZ{$Rz{rL14>{m~+I=c;Ms6L=E{o|5B!}uK<3nsK+(3Jcah=uR?xU^ls}_&R zrY}R5Ce`d(`@x|eanoWOY`63twDo(7`cP~oe8Lmd>w&s4i8r^lF5@P;v$CCTiYupF zII5p*@0Yh9C%v(>?3z9AP`1QKweN52E;0VEW0G~!KBGc|fu&J`fnk6g<7&<5Xklt& z`k&v-e_eB;rR}i9h3R!xG2v={YlG0o;Zt9W;b7^!T$}8FB1aN{rV(N7W)ki1-7dj_ zI-G!X5+mE3$_Ghz@H8eSvA56Vc6G{Nv>zB8cj;=d$hbTQY+zhnS7#wZ6K29Is5tL{ z&-@*ZmARnWxBkf~$)CQ1o^epkQnxwNSgVs<)^>7tW5t3 z=_{LXMQXc{59%%t=_{FVJhG&qd@28ydw^{rBEEIxj*eBgBQ#A4rt#f*Ze$7~L67>; zDGq;;2)H7wbFOj99fJ1S*9$pkIfa+NCT^b|1%(X8*)#c7!J|UBK6Je+W=bb&Zk)PK z0UtJHz~@H7_hav$ikF*2;9xGRd%7pj*ta-u%M$Q{6JY9i?6brEc1A($ysXIB_ZB+1 zi>J@phC!6JycqU8gyte1tZ{;Oy zKhGC+)O?zc6DJeP7@%+7M&qiJLSn%XgiQ}jvQi-YkPFA0kQI1e+gFOVj^WwR20O48 z5qwu-m%^`}r6INCe~&7TznSK+>o95k1d}H|d8^v;Cnr$@3p^2bjjfoSu6NEgzT=`S zjgJTeeKZaMS~xI~i~_xg+e=mw*>`^*8(z51rfg{D}J}Z8wcm;t| zki`_A`zzE#8aq5;Gy%~EbAlT2kN%dxbK(lJUnyl>XtW{%MtB_f_I21k^*@UI4Ybhv zCSB#GYSErGOW9)u3YbOrml1@3v{-FW+@>{Q4s&n6W z*zBdzD{z+8n(o(~#0-w~HVQ?7-~kI8Oiqd>T&usDRYq|Tn?NBk3p~_C6S2UKyDL0r zLSKtQxi0|xZE}gTtK{CdgWH?Ib3E^?>6$-ls)6&fr+MdenD(l;t#;2-IrGvy8v~WG zy8Y-tze+_c^#XTB$MK7W!0(Hb$3-&#iWE)y&)88iJ~hH*jn832=QKTV`zG4taKkFo zrktVZzeNaa50r1DDI-Re4Tf6il4P84m#7iojAX-@yc!}U8Ux(R+-Dax+<;h@(Q zf0KI=vdJ?^-DYoLa`I`fQ?WAVj4y$xKln2H<7rl4(s;LMkQ+ch$vnPKfeq8fx|EDg zyuqMx{(=s3-Nb-C6UMJX@x!H(ssXch9|Ubww#V0SvHkCRi8}gQlQCP%`KEQY71S(LW&Tef!lf5<5}qC3~4d|+t;au>OqGMndLuF)gH(P;;3qHoITp3Ls0 zrj@&Ya(+y7=`^@}`93ItvctQlf2}K8?sdDe^=KQ*EBQ6etrrd4QS8I#ctU7w9F}c` z)0ik|4Divo!7t|@d`ocf28xV@mFCnnZ+3r4e8`(wHIAbA-^hLqCf~(-c%U{;R$|oFTp|BJ zp2k}XxbPuOeV$v+ysw+*bo;4s zg_vc=wH73ng3me|R>~a#Zznt}v?I7YgJf}w#6}nmrN^9H&ylk&2haEC^$e-9tLN9o zNmx7h|1BVP+a#m=P+(vy_+VhT|0y6YcJ|*KEKE%u9T?yLyjPJ3%@x~a4qQ*Hu8yCW z-By#;bS0HYr4fgMh*T-IKs5|6O)22DY^?YQdcR+-W`#Om&ClROiDyMq$4Ogm zFS}v4p1S(@fu1rm=vBJ8W*0c7^wo-e8c%jOPg^c0od#>uVg6aE6G+5HU~`ue$jxtZ_Qsy0ePkAzd$Oq+D z%?RIRVH^{U(@qz^+?7h-CGxZE4?C(eV>X*Fx+P;d1_|*Z9FAqHsWqw(X$rYuPX}br z(vk8t(+-6^N|E#Rvt6XST`Qga-5!Heq^O4Rf@gV_M{Sh$CgxL(~Q&#P%m4RwuZuSTPAtPiaN8A|K-j}v2lwv`sd z2$8||#El4GrSNm5;3Lh1TmB8`8}#w#C@x)hy7t$B0$u~kMG!Q_OWkc{ZLRn0OmnrWnNlVw} zcj7NL$ow`RVD?xyX_NfK2uLg8=gWluG=JDGGvN3TSLE;nQke$V(7jCgg3RA9#tFy!c#%L-T1J zD$#*88wb_Om=hPZVpF z5vy#JzfWL0RAz-S!XZK~z(cBSG_wb5tN(04s<94_-{7kM=rK=3P-PE7|8Q-L?8?!*-~0?uBA5Xz z)uejf8c#|%7I0`ywnm)Jw`_;r>a?w;4u5_5xtr9@IBDI$XKPgrF1L&)csjlM$)1U@ zl|SF_WNh+>7;wbI?sMDsZ(Kb1pIG*DF4kwE7Hu6;9%#@#Zy)+D)bUS{t(u2bj8C$q zS}!Ow6e(bQ8nDkC)~zWVV3nJSCin5*KzSHit;Sd^eo#Ho5tAe~bEG=1$UwZZFg&FdD&uI1vkbFJ-RE93b%vh51TuKgwP?VxVn z>$bbyb!&9q`*x+_^)e#En$G)mPJYef0RUZce}TWsBrxJEBC8|9(-w^4<~%u`@v=Y4>2+B{(s~o?m(g~y z2YU34{XyP4CI6slS~KVEO2Y1WbllflU_oHq+wG|At^S4NO7JP?>}!4H>iq?Qpa)=i z_$c-5@rd(vJA&lRb$Jnb z&B!)o@4fZ$)%&aYx5Iur#4+E~5{!-gm+tEqSb*XU|ri9)uT9)5Gh0Ty7MVZS`(BIxT8b zVe`^MdWiaj6_Lh*2PCYKZ_fp9fMZqrRgb6ox1%%4HNZ(lHz)Mb;rGkSx9SB1zoxPb zPmjx;oN0po)P{}0nuR|vq+eop+(LimXElxaJ3&XX3=*)7i#kN-;icf*PLy#wnxm{N zi=tdh2)xcd<}6p?c3o5gOR^Lf%JJ&+{HtDKUE~gupkPyVQ8|{AD@XiLIS_seJtGE{ zmL&Si#(Waj*mZ{M3bcr+rW1pe6$M0p^>@QgIbw;9LmFKqD+ze&!fUOQI6IyMm|y$6 z&cxOKY(T9YMO?xM4bD8pVFtdmi&H!5l23m{T07c3h*@i@+nQ^WqQbny(jYUz@uf!B zC(*Y)tJPY%GhEX`jzb@@Y2C(RJT@2m6~X*|j=0Ss@GN};=FwPra~J!EgI{By4Ygr- zPlV>r#$Ko&Vd){me6T;lzOz96&{W@gst-p?Y$}Vi{r!4radUn!7@IR&AP?svDx?{s z>f8KN{naKdU@jZeTX45aeQJ)liCyA!BpLwN_IVwOt71wcwKhcMs13n+Rm#SNlkuM1 zGEZH*Tz`8yT=z)#Jb%-FTVKB>u`OR~b*p^6zuyikSdKrBkKOX-(s;XKT)~L%6~27Z74lgDf;l>R>!hn1sc6?U@i%2 zK})}~ZZ)}V#ILdrS)basth6M$%qhHV#O7tu8O82qISA$`=P4B?n3=;rcH1fdEhS6~ zm4hwc9*rsJcS*>-XmurwZJ7_R!}=<*Yi2u>DXk;b>Wum~zp|gom8xC1i_+d>Z*U0V ze)GtB7d&}Quz6;C3P!|aaVh8N6e1x`?B&Wa8dQoS`T|QMqlc4MeqnZ_w0qu&ucCCt zA|~-m;Yq&S7~W;(S?p3f$V+@|oEUfn2!Q=L!seQw(~~S19yhjX1HPt)dE98zziYzP zWJZYMOxCG%xrzi%B{rkJwpqLx2|)Q+nt%4YD)jGtRy$kK=6^PL*j|$7}mk{#Q5xvVrhr-JenN}f1~YfZ+s&^KHosh{2KT@ROb*|xw62LK@hW(0f*I~ zbVzz~p18#c`mD4QV1DlNHka0Fn0V`_exupODS14|%Z3yEOMteJwyjcd0tD|I;+j%%vzHatC*4#Z1 zV}a3z)<#uD4&{Z9;4MtEDOQmzrLt9+>@ROMjNPZRdYy#}p0E9e5g6zW3HOj0tqYfd zA`kXZpO6(7<6P98%3}y0BSnx_O}yop;(o2_dRBWopH1j*Z)eWN^?7a)gu2K1D^nZL61Spo&O#P%3&joy;PNBJYs~rphT> zaMq~ovTsIeShkdro)aKz0~ zaq~iD0Km+vTl3(F>ee>#_q+VqeLDl~ED!KNC1Zt(vH~#;%a-9d_*_!sn^DS=xP0-zu@( z z(!n%l5#5`9OGy}R;P|k8kP3_vNZTPz4%FKD4s7;i8qWfaQvysHM%j_I2e2DN8-_cf~L7)>oUoxVEr-;X&>BLz8lsOhmQqJ0-2!4VB~%%XUWoq z%z^e`+|SK&>C|5|HqAh38C{Jz1*-YM9v{)AWvJc~*G<$b-d4}2>(!OmEueNng}{@E z=T@x6Eovr>GWCvpmav+PmS2-q?rOk_dQ%(=_Ue5Zzn6LB8ej|MIcP8BOC}luO+kXu zH_(ctqGYyd>JJJR@`1GVGXaWtDw0JDQ>)@M5-2iC?H4w!?tA;&_pgT+^8_3f-ri^H zL$^0C>no#2yv6e1V|?k`Ec8b3^r2>-To%nHNC#OT$T|C&Q%VysbsMR)P{j7K_H{8K z3ZN)?!f7Ja^Ano?&MDn-odlOmOy+(XebDr+*qo|y5TYcgwgDl3e$ol;vY%7_jBn}u#lXp9?`K65nx$sR9T#jeMpI{yS^N(8ZmAMaDXaUp z$koN1yRm%;$`5-Su*a876dG6!qy7q?KhMa*$x4_qujp##GK4Qv{gko=4jEyrENykP zKhMW*9WB@NNSuL$7GLY#@wIc>Al08)rJ4*8Kcg%0coIX_NwIjDAI8Y^#km74@qdmx zEOc?x5prA%5j_OB8_Gy-t*i#a-y{2vvuU4W9NzSbsrX@6BhqG493CjL8*&QVi`E`v zk0|Ba_$rjYQ!xCdm(SjYp0%0!nj&qhZyY0I|Y|e+z z9Yv`kHbEcY)@B`yYlEP_B(t1ZBEjAgIN}oeWh^C5bE>x$R{ApDnK_n^*8WI1$0JPh}ef6T}ES?nMC~fDA{E| z%iG`AG&pSV@^HMIb?}=AbmyoGXJxX*&38dahejxQnqzU+n{S;5TDE*r7UmBBy#C8<58R{NHiEZII;bZtN2mDB_`Ufya8YOXwb zdH~Vv?OE}Pl`GBT`4oA&`)O37eK0X3Ws;AZzyEJ0eqFx8t@0W!DI)iJ&&7}-v|jl+ z_sORWUZ9k@r?4TNcP|AXI3QFHq&lxLuH54dDcR!1kub@LgI-~f+TqTl=15Wrolb(M z!P#-BH4hls)OUr|f)U;$-RFmd$dHt?I#!NZis60FYLX{I>5Eh@X29X}nSj|eggS;I zbwbc4Rgw@?0L9hoe`q%v{m82?tW53~BeBNJnWU|}ZU!;52K>LBe19@8R+ zDjJVE&ubJRAiyi!<@QMf2>d=hddj?vwcE-6YT&(1-5IYZ?6+%cvv)u1d+aQjH1!Nr zGE5+khsT;=ED`5OG7U82!hv9u`V{t)-UG2LD659)S|HFz*(d1hLJ6I%!A29bxaO7k zM>vsP?WhAQF+Bw=*U0J);2cz-#}`$+1?8X9Y>z~;FLG!6f~`;I+k<;YFp!ss=|?FSn9)N0?2}q z)mg^G2f3DYS@IdeN1{fl$c;hUVRv7X;}FI~k7Pw><&jU?IEri5=Z1QL*2xDv>01%L zAG_?#ZVapIH~7NfO<{r>l5p9MG#6ZIb-(2H0+Vu-TT_w>H6RyF<;CsianM_Re~i;EM+ivLeq>Y+F{aDx!C># z!_PVJ2~99}oQ{s7jzJ{N+L%8H*6#&S$X306RD6+RS+^b}*8XHEB}y$OfL?jX$_T@i2fD{E zUABvQM4&sh0l&!VYIykA(~w&&EjOBkouVtY^S4WanQHAtJWmHAu{8M!iUJrSMaMgT zn_BhOouk$w`;G}u0AQizpou*UGcLo(8py0cFHX{T!2!elO3`}E1t+x#A%|0CBHoDg z&v~x z&HlsV{_A7s({gK2&9&LLGjLMuMQ6|4)8T-E1qz*F_LPq;V?X?@fG(K{77W32P?MUZ z?j$`O4;|f%$Ew6^wdXnzIeZp{QIH!F-cRa;oH<~>&lr9x<6v_th-kpCgPMxQkTCig zyQ}9Cm*2l}pcd#pL}Y`3m5w1iEV2hc$2X%BjaYs}DITeMD^{Ayg2}7{cSQcV3c+-) zpCJKvO`X#d(*;WYAK|il;=8UC;m2JPyNVFDSS72K;0szKV0f~rv1iU$)>ue|DKRt& ztl^OkwN}{ad85Ac5pI9Ebld>9AOcHA%De+Zd^X?v!a)B?n}!Q__UL!XI_7qX*GlA) zdmFG`PFKUV;XX6>sy;0l?AWMfExpqeH4%6b(>ww6{Hv1T`#HR}n!vNx4Vc&1s|m@{ ziOOw5rs9e9OD3p?Vo_tv^sp5%^TRF?2sQ<39?-x@Py6ZLXY90BcBTPG-fkcu*m}b& zFMsxhof#~?=-8WSKAx{0(#$RPny^$#YdGBva6Cs0WbHpquY!36Ts8h=*!jh$p=!_( zJJhl6%lh`Co!fVzWPUbOv4O#Pz6?~!m81CcY-IsJ*y;O~+?nxV3L1q)Rjd`X@|Grd z=w0cda|b5#5S=l`v`KBi^%!xhi#W-B#i$?V=}|nhRmdDjC`UmuA7ZyMi0d{k=;DCN zT6>|3^lS6t(1oMdp^N+0{q^k$l3Rs!TVoCl6PPsRqXh;V)i)U4A!yY-Yx*?4J0`_>)wL(O>5?B+7X2qJlwQ?y2p*YK{1ZoU1y&+g=c z7x27F;Jq#=u*bUkO8a0PQujWGhjZ_e5$3nBm0nOmx+k=9x~x3=cw(cY^MzBmh-CG< zi?i6&;o$T%Aa!RcQBld5!IoJOFG|@$$votbSB4>pTR8(yig8$NF-H8s0fZ$#X*$BY z*vClQP4c0)w3TXlpN7o^BPC4H5wsLtP)6p44~W^dt+LXTe1#fi{Ly*ZjWTw&&>Dm7 z4SbMSdp;k%KjQtOk>7;LS}>8BG5`_JT4{$6Q=I;B;7JzV?Tg)p@c%e14L)s!sgSQw zK_jO0y{!Q1O4Z|%FB-W>B{VZR`*l!}Yc4GhobLC!%%CiIdVOpjwxt4ZB~qy-z>jku z$N0uqU_Wn~V>8{tqn9~;ur?6L9Df(SC* zFY^u+5!AQpKxe6)sB4Loy<3~8n^jL3uw?I&mC%gJkeH=L*?ac4Jx<)R3@5x#jI4)y zi2SW@9on;xm^t-D_ftfs>Bl|1B$?zE4j6}oA*9TJfBMA?9%w0P$-xHp7dTNjNM5mFW`I?&ttuvy?}8&{o zf0dD&F$LLKA#?(p{&{D?QEC-gsvu}fwTSor5nWnzedI`?>-mvEA9ykgVPV!ZGm~#% zw=FS^m|^}2rDC*GZ(9jgldHSo_B@@{;|x)7BAJydTvQreJ0|np%^|u{m4xJ-G3Gi- z=x0=L38daq=)h2e=Qg-sPv~UOrX_T$vNRS7n3p|kh{w^&+Xmwlb$oU$|KxHWZ|L|7 z8a*jf8PwXpxjeI)7B(S=R0AKUpM~a(3N}HZO+#r>cJ*tvwjJRec_E@yq$N#anzDsL zJccHF<(E9!jL$*PZc4+&rwAw_M?(92u&pqLnXDF3O-zH*ZWy37^e5(hV|fEt6(bz*CS+3m&hovMrqSYd9;?tVkn20AqOXiO3siLeAf-c zwWV&CvGZ2e=MM8|ac$GXxcEHfzYR5uxb}>{Ke5wL=&)zp1TX0GEGMF=F>w(IlyAy{ zj1JHf)@KRvh=D4qZktBXyIRCXX*ms3_W!CA$0@{DEfG^wxOh;6L_uCV1q@kX($E&) z{dhd3Qc){H>jWVu=0#GP+wbcce>7gEuWrgD!rK+{>Xit>U^%13%FW_Gc8+!?&9d+t zY#^@k__@rjx3b;~6^s}#TI9sECMbo-e_9-lmwpAdZL$v)daD7CGG+pLAq&lwz(6FH z8Eqve*9(B{3lrz2S;(q7k@DLh_Cx`r4I}=_?!GyLB0bn z0ozuXF(oSjCZM(|{2)4J%+}13Z#3hv>~*7rKGNIM(`oOPVn1?T-p-cRNud;h*P^|d;h{v%)fkG4uHsX0{f4KoseRO)k}hG=rMhlTE4(dd-l-b+0#vs z+=uMHmXP|cuFH@OY#_X!jIe3tj~w|_p$vM3B7SVKZiB3qdl)a8$PoJ}ZvS-RnaUOu zi(jeB=#m%T@#vVXv?V)y*X*e;larw%bchm77wC1;Q>So``eaPHjWmYE;E^rr6saj& zD-@|9gV=Pe%i&0taO`|>WdKZ;6R9Jy|EeF;1U1{f4qiomNjy2S_Ft+#v4|B^qDWZo zj1vT^x2&)!N<<)UJN~N3XN(qgPar1BW1VTGx6=G=pp_N4OvPioq1#jd;?g>%=5+tG zuX35fW~`>Q)s9B*9$*3T{9r%qnLXuUb}}@nXF&p;r)>3kvyJ|Gj8LVoPnk2`>Olr8 zQRP_1JZ@g%5lC#&HbmaFnN^lD2VBn)x7J9UrBA}}ctXb;eyJO&gfxC1l?I5Hb5l4t z2mDt3SHePL$%j_I)95^wo9++v?Z9@~0IzEgr{|*^33+3GXxG_YWvLU#O^B8S7jQM> zFr+gpH)#wlHdECB0%shCUvs^aO8ov??q{bDP@XU);{uv%_hdshU)#R2irF;Aal{t@I&=on z?HrEVhE%14IlaC`t}Slet=>bV3;GSu$(GmUErRyD2)e@Jto4y%O_|HQHOTEO`*BJ& zpe>~G>vwgo*VdE!&DiAN#mnqg#W>?NPouq}A#Jh3U;JEXq@rx0C>Im*=kX`B)bBx2 zS_i_MK>|$&(~WEke$4csY!^jDM`xsLV{ZLHN13(%Xp-jC5UogQ>sBDTj4tlYu58&92w_haDtPM@cg;!Dez z2bJ||Le1huK7i=6efU3WB3<5ZnY3!yIHiuf`<)JcUzSxUld!2;)zyB-&psghyad9} ze{#Gi^zSSvqB;$}hKcr?0oGdx8g-2SxPE z2zMV6-=xpIF=j-(>#%Mq1`l-FG2+E>bU1i}q>QpEhr+>Fe^VA&Z=R2=*8bAqcO#*1 zH~!TIMKzsIK)~(t*#Hn@b*Zb#k8NzMLVvWPDs$Ln1Tn>uX9Xgz#-Fv^yFb|WL&MsQ zk}2b()DDDw$*VH*lcH${%`wjU*nAB*E75Z^=X@DYw;(Y&LBL z+Dhr-W(jA1dArJXvWYBPbzK(BLdmKERJKI{Ot;>zuW@k%^D;B3>qmm)l z^W~?lkq%8H_Mh{c;6`;v=@KfK%w&81T`g&0QFe=!VkpFc^IM4n}=x)B>Q8w{d* z%E9ArHvd_!EZ`PG_eCF=eU$Q9ZPzruNpJ2QDF#3mF0Cb^7nhWa+}qO6C%M^Bq6 zoeYJ+)or9#VsAO1#T?nkd{Tu!UWx96Lg8Z;@j3HSBELWipR{U8b5&#zb?MnvJ>`M2Oh~q2CE{cAJLh{{rH%LNpe&2R(#w5afO&ftNyM zsbHbLoi(3f&&ggsF5d@HZa3GLyl}p|{K4li(@UmV3=7_+_G^|7eAkYPLfnrQMwz%g@|VOXpkJ%_1Ab`9&%>wh|^zRYWz+t zgJ3d#XSf9i!WX7Gk)vRIB@pdS^QltXBdom2kMlk0`iBvZWug&-uw7;g)NRVUgmi4w z`p#Sf8?f~>fxTKngO ze?JZXIgmhsyp_K5?|Es=&((5+<#1n{8lV9vskbV!#a-V*F4L9UDhi67MgA`PCBXl- zRJ)I~WTBLINQGZ3$(oGJ`3;fXo}t-JI$5agJNVyY_74+4Fle3}=%y@@DzXOhmG{~d zwH$Aos@QDfoM;Q837k4W>O5@_f=x-@&6pM3+>Hha^{XpyK8?c|NF+kTXoSmlf!9FZ!=uTx$Zt9dLNt{ndLH#Po_%qZq++Z+sjnqF&L3pat61 zBm-ZDwg@Tmzgfh?@UW#Yk-Z6trN&BO_e`BmvD{@}YhB0Dy0pwRpv}#t4`gF1TPx1n zFMH-UD{Keu3CuS_H4&kf!DKtU4=JA`cKQbtIOsX5Z<^~YRh@I{FXmaWB4#cx$xjne zKB+o+A3zSWW24MqAGzplb(G+o*B9$G{}N{s@P`m1YL;80_Q)O0Lf%1h(&XP%e_JZ) zQ$0eXME7y2mVrHmNlAwubgvS;z(qX=WGmZ#wo)X>)-(!lXsUZ4iFM5sqMTo;R_^8Z zHB9X<3|#%t(F9{v!b{sqcG~|O%x8#&EvuazmRQVf*ZW%{QIa*#%2LMCklvkcvfX8E z_o--z*~(`K04-c zuPi2)OTEL*WbI^<=Dv%#1E(BWiXhz27~~vCr0ph{^7ugO7gWv(3PC*QJWF4F0LE6F zRtPqExznaNg=E&}sqRpJvQ{jJ9|872yMv=ZuoZb+FzCRR!DO+1yk_wCk-~tM71_c%k_|=wnW}N}0AnDci_8*U7sd9}Stqo2e zX+M9h5_5NU35CTGtxC_SONqh(TwEBk3`;n;fp^$^_*i z?XmK^6lslm$X;!`qC&8quhCC$cZZvU)|>Vgpx628V|qb>%O(%;`jE;Y<W%dTLT?&9(N0G(1lzRT6uclBB!C(lV^P6m9a>wcGFrV7wRO?ZLxN+Tax;rSRH@U89uKXuTxotzo;N=E>=sU`N znB-m*b<7ut+fw+Z88TMe{=*P`Eh_JqtHj767DNdph-=$md+7ItAoJ|!CShKha`$p9 z8#_M|K)4S&IH`B&ut|ZgdP2}Mfag1PItnDcq8mU9^kd%$!_3ccl3TtnU&)f~YoZ@070k1V2%p9G(ecA%;{Ur=NZm?~^!7WbOzG7i@Q*G53J2UP3OxMPad}I6F@>^dpnmc|9Q1 zW|N{u@%n#{tZgUvwRN$YfjuqiqHQ$|(%qptX!WZn)t0E6;;tLf`C67<^UViJPcXG0w{~39$Z9NUr z7c}xZXyo>dPz`df=~sq(qH(;PU(3AGf&zN{?p{@R7zJFpIFyHa65uTgFo7LqYB|PA{6aFS|5UTZZQ$qH# zcTqY;C`eff`mx?`C~n?3z?%yM-=?iqPRP$QCR3Pss{@@JZkm)6vdy>vTz*!PTpx4(Em?9OqMWf!E79Y-_!@$78#L@1`PXzSo)IaR*s z%AWHtDfrl1ho+&m?fwL&g=x>~6nHyIQl-?2Xb^1m3BqZ^*MbN&9VXjF7}0~K%*7{J zGCifZ&Q#ZmZ3Eb$UN$XMCwHe%R)j*%MO7tTm;VwWBXo(?OL)=IcXn#G6Cp9K-ruh0 zea$xJ*aFs6DD7tAPO}te`nhfuk3;I}L>>5v?>Z(ipt!KL5i(^?V*0`2Q6>}bo=*Eu zKc&JpC)9s(+~v~;XMEU&1L6;$#cT(~Oi6d-zqFFQEk0D?K3LYB-ksUq`A61MUT&Je zl+`Ix#-dj7_`#UD#V-?%CYL`NMg9*`?l2$yRHKNPwW;^Ud+cvAH?D^+$Xr z(#-wvY^)Gk%W@fs>yqtOn1Kr#~3%oOG*G95eU z5}S0V;z1ER%f`L`qIC_uT^wp`8?#d+MXCso7{M#!L?3$a| zANsxE+#&MWWOshwVQTjbRSWr9XkuGLQ`WU?+irAO@c;MSI~pY4t;W#xBbg9v@;!`U1Bl^P7XL1yx@2)Ov}6Q}9+(;li$4}90ZLiPrHZxx zTp<(iQ>)B`|gm@sAZ>61^Q zu59?vYL$82An3YsEcjcp2nGC}HNH!jj==vt;(pf5g?8gqE#;^)e6MY4PjD@oq^@Qv z=WH6SCF{unhY397vOoe&qO~tq8+`><>#z^{e_Y^gxn$-}$*io&1t*OodNqdl*mI$#nODkbq69_^o{5e?rcWIb9rb zN$H!JblH1=pzX_)X_D5NsaUZ~ww27J2wN3@YVxMHeH~U{YU4X_QCSs?Qu&dMRTd$p|pgfQzP_!w9w2_!Ck$Ry(D~JVEZNF z#$)pX7R=jV#H=8{{+jz2ZY0%=k^u@zA-U~d99HYhc`2%-Ap{2;;-7O66UkuiC>-t*=mBXH;@ z7$0!s)H+VdS;T&vSMp{ek9;F`pI?N{)(b05HM+>a`$UVJzCR=K_ZiJTXMsrIledOa zM6G>FWbXJ^-<*kFuU!*;<2wI>G0L2&rjUHWslfYiEKI2SWL97Jk6Hbchf7DGxxRVm zlqDLjC}ci8MbDQlu9w$%mZZ>7??y{XG$BU<*H*BKC~yR7ypaT!zY%uFRtTMWa&9K?4Ead&@E=+so?C$C2CDRN;cQ)B8fR5B}})i zb<1#Hu?B^8AFV;dsn;iL-@2rMv;gziVj=0m=*c|6l`}Q2G<3cLVLv{;Iu}f&Z;eS+VWXW zIZAg@1PUW19n5C!_C|`c7OnPONwC1H4zo(R=>>%=RHl|6Fq5DVlk<#Z{ivLxAgRfv z&WRf}9%9KOecUTV&8|_)wWP?p=X3h_9yk%?Qcn4l08swJdYT#7;o7LJK}U^py@N(I zt4f5I5N?#_xWnDAl}k=hf&Jl|ZvXy_(cecltJ`{=rXBcdT$5aZb8lkd zchae#^~mK|60o$KITduSjo(;lEky_~nJl5@P64OQrEIx4w>X$`j`g_7g$m{UQ1^T3 z<-SA^0JH^E3r#EP2lHT%ROF1Hy1}YQJrU%vXm6#m! zih?hp0I09s?W|lsuVeyxe|XgdoR7d)n>#6@NjO|;ge%--D#s8tQ>p<%z8|qaf*MCO zA>34U_#EN>X$e3#KPId)c4%SZ^fQ0nA1$}}9WEryTW(@QQvoN0g{<@~jcE45j(W~Z zyIy?UEiHUau4l`;$HS9uqcYa$j=neAQ+9FsK@35>(qO|S);aMQ*|R-93k6CLqxFh< zoty@-#Fp@m2aPXtIqb@+=**FmqVDr^fg67bCBtQywgi|+c+jli>(e2-c#*HH8-L=y zlC4pem0f9V&Aw9+<5iJnovi*5gtr2IoxG}y00-Rmd z6oN{eelldfSPKX(6vM~q14=kegDiByB21uqcy#! zRD_`>;d&frLY^&3)mm{MCu~X~ve5C^(>Dw<1e;&yR&KLKC2 zU(^kQ8&6&_y=C%wrMaKpra+9xltw}a6MMngBiS?p4R_RoKodDk5v95KSPXy6$#L+XDM-je^ON!QoAWZ)_)vPfZ2tbQdSxG?M&Vio zZM8-VPz-=s?mcvmAqUA&ZG!orwRVNcDW>)mDE~}6^tiq|{xHaOb?VDy{MK&cpw_dZ z;r#Zh$Jl4Wj!Y6HTMl9!ufSrXk2S%Be?YC80-J$#p-`2@QG=46}o_XFuv- zv7#d>)OY*}hE=Bx!+U|S+vDYZw;ieMzYNqor$doT!v(T%%V0hOP2kH$_VbOgki5nJ zA;bTT_UeD!zOmzLYDqH}G^Zd2JLR%3{z%a(!BEi>(i(NB8Ymx)KW=LS$c{I7k_44r zB1wTk?YyEl-0XVvt{{%j2SRI~6he_0k0w2h+N%P%a~vA*Ufj1@C=k`{E|YHGjI@JG zY)3fFmdS9Ggy&zTmyAp*CQUXjO-=!V3L%Yu!JyZsDj|)Jiq?KQ=2O5lX}aS03r^TK z*WYsfIJJlt3udzpMoI*rh?OamYXUrGC^12%cw}EmL~y2q?N_SM2Q)5N{%RGR1cz(} zso!G-LG3hbUvQcS-fejWeC;EXs|e1_z@wT5wM?q%w)We?{Q z@aeg)DBMg9R$i$x1B!u6dH2PDq=Ouk2Ag!cla-Ly$VuNrEL0|-8Wa6o_GA9LQ$>cF zR`@Y0P}46hUzeWi%j=u#@eg!_N!jC0*|Ag|RH$9R#)P5l7>I^FOW(iS6)I6P?_=9VjM*fpp6fGcSaoOa2+cgkx(qM>lU6Cs8p zMsxT0Y7bb}XsRLABKwGQcS4WLh>PAo3Gb;C<09?!2x&lM+qFXpNxYHs z7fv_ImIt^2D>`bzT(-Wv4~iwN}W!DWhW( zXHCfb&mN3%W3moMz6T|mcPVD9l)57E2XuwkepUC>EB}f5)7J;)OlpVT7JDdbF(;tO@ z+}5eJ^6{7bH>`Y~Z)}~gJo}%$bD|+DZAhz#zK?t#Yea=Le{k-bgQ;Q=``v|}AJ3{} zH!^80J_MuZRv$1c<6$!7Q&rUEIKNW2NZzQ(w&1$LM8Jh9w{^mEoo^!FC#h|m;d8T? z8r~1^Od$UEH#*l+4(9dmBW%Jm=}ma4ba%zfHZ?S9nguLGAyq z#rr;_^1Hp87ZjbL@q$APk1-05=dcoX&|*Al>b8L} zipZYNHUVlgg5IA=lZX$@{gwsSpOw9^FcQNTz49c1u{A#ht9x-F0Zy4J+AF)ksqfYe zmnBO4uF{{UrB3E*d-JC7s-00V+TbL5UrBK0n(lL0v>}vR;-JL07yg?+mBt{6+5E^K zbi$jh|2eW~A4t9FxS-_@Y+rld$jSKf6d^;7J$#ah5`e z%21L(WXqFO*Z3NWG(i=YtBCcY_Awq`<4~bj1#`f7JtH=|+izZ&uOFs~z6k)-3o@p* zOWs-dC1;LwH;flDAVio90Yb!Kl3sAZ6zBOzUy79N4D+kms3LjYR-%7M>#gw&C#%VY z=&NT;v2(DMpz0H(bC90#gt+?>ROomPtnZ{kehqB=v0nbreCkB4yQJ%7cYmhR6#B}0 zUdKNTdHrKBPq7lA-vGvhtv6K+)3P5z`Z>v0s_)Bw@Bh+P#S>m=(CH=d@Ti@iERBs{ zhus&%9r-}$9FTegsgF@@Lc=dO$#Nu?M+xHbK4emN@oNW+nZs|tA`FghterVNdorz| zWcxCes0t;$G`N?MJF?k2yQAyd3p%^Q>$w$m9qORhT&e?{fpehF`&(g`{rn0IO&3$Z z`k!CRS{|;}_e@76#7(uHTRS@`b)j%|EZUin`_&~AP>wE!03QX&5F6V6k|8SfV0Zu- z!thCkpi@I!O@5qOA$WVVB7{)%>b`ki*ejQx?W<6Q^34Z;AN<;Hm@_p#JXRo=ICBXn z=&SH+1>wUwJgn3$Fl&?qpgv zok!9IXAVivx#h0&|5?4$0ju}!x*5l33F?SUtuZ}eJY|BncogF7^5w6yTPe&a%S5g{x{EBURh2d#Wbs%*JkOQ3TdIv=dsU+bsRc|Fii;8S&>hi+7 zs}=y^DP|1PO~XZ}4PThOtJY}O2@=mlNYjt9IDI?`4ezFGt742Fft%EQHPp5>o6+L& z*1=NZKfKt~CHl~wAaBVfY8X&&@oy(f@B+!&skoQZocrpzJ-wwa*!8?ox0rab?tiv# z>61hhp;%MKjak~7JUSQpMMQiHgxLZ@S`+zP)9;ta|9ld;GkUx~3z5HgtFtag#{%{3 zaZ8mJ+=N|oK-H6SP`*~9*W^a;@V0e1!WRYC%k#Ej^a|CWnoxzA$Y8NZ{PrmP-F4|C+ z@tYF|XvT=qF`a>**}zt<)DZZ#%<(@_{xe_)wEW=E$U$lReCU|nI?4a`;nF%HMFtKC zOPa#st}j5gZN^~&jQ~02bK};@715w7lt_qHtIT-nPNIiN+$H76c&bta`w#g4nIHew zSJEJ*VP;Az&jQ*^V)(e{i9O+V?K#m6!+H8oWWx{Fdw@3c=~M5yCi25vTp>!{D`=ZY zaqu9TedIX{eq=rQkqJ&(?9SE8(^t{>?R*iuPSQZ}6A4b5evgo~CpcYnDaQ`fM{KXZ zN=#?nhhXPKA=wp}=~xhzEOYa4x3s$6oxAAGw8tEtEo+|$!Sk#e^+(0Ia=)^yco)TO z#5zvV4<7cnpUa?`))xGiY%p5c?J1R@a>fZG_q;SWw}9C4I_;e3)sxzRGR=5>!UIqX zQ`WS7x5?jD>RoXKi*|XUO512T`U|zpVpuKGIZ@Jk&Nmb2?o%)2su+VtM8upli``feY*n(lN>?ielt?Ie9h4+-_g*Uj5z+OYPA`NIRFQ zkkZ|Nla8zsGnfV^m?+4axg?q~x+SpHw-gM)Ox}FvA(rxje-HIbe~# z1SbzV6Sw;$YCo5Uj?eCI7lxNI55^m~N`=@gS-Q;xi;yRM)LWdkOh&$5W4$nw@|$DD zL6&=}CXrP>gZTuHh>9DSQ(H3M1Lf;SD~G+YGw8j@N5d@(Yc|={Jvf_1s9$MqUDS;GLfB98PGzEh^tua z?SL8QA>lz0Ir@fkrKEw#8SKiL)A3Y{NsHO&u3EkFYn&5a1+w9vaJ>QytNE2Yo8G-p zh2BRWY~D95;_{*wWXD7%+9KvuiBr}5Ip3i+b~b61yFU?2?fLF#y}zeyLv*hwMlCZu z?1`@b4_(q0SDz%fX>}1^5Ae^Ba@H|JfY84e8HtnT(h`>^`6jJ`%=#>n2>iQWgvw?_ zi8yFGO&psp!W^i?v@ueApIoxf%CAnzw&k0J5LycWz&Ae%c3f;$+q`94@LFa!sY8KJ zj6-Jn_UX+6V6HI9z)yy~nw<+*+a{@^GDTB2unUro{PfEojRCD%h#$KXEFCof6B+go z!DG5XO3{Ex`dtP0V-5feev)F;!dFm3&N=-ytw*7BqiOEXGy&3fFkf1onxQxG>A=VY z%{niNd^U(dkvDgiOmbtv%^&GawKO+2A2>ma_61quGYYVla{7jNxQXoT4D2eM@bHHP zPI-hY%rJZ$tGwt8+l1NOWgesc{wO&RF&h&&z=o*X9YO)iepb1*<;pE%Cba*X|m zG#SnI2)$sFSLb+9^%{@r)hJuw6(`QdA{UN-?{ajQ{Td0=mBUjcxlcGf3#ZX>vxQ^*>T~oOgZ|x0)vF7!gBgl40&RV4pB8!vpLSs=m_Hpf=lr_6C9#`5zuTf7cANxDMgVqpmQ;d(e}! z8lE&wd^gfvl>0opGq|-n2wakwC<2%kfuNC{l+8aH z&xz^gdzJk?3V( zs!7NUo|?bkW-3qO8>oP+OQP{wFA8HL6G=?2l$&(M_VYSgz6QQ=3}|XBcZ9xP5d8HA zkOXhTlIs2|38q2Xsx2Y3?l78xD)3CC@?CCr=_U)?yCbq^CUK;A^P<+C-4q2 z9E?m>?z$u4Hp+#V6KHIwUi7}+;ZFI>7#8#^v(Z~U<1?ENX6TE^2IJr9f*EU_Fh$Yn z^N)cFEAoQ|Wry?k(Gu&*d9T~Q-nk#(m99lB%Y=Pjw+hWfJ9&?Q9(PUFJD|qqA$Z`P z38y=Ca8JQd&|(fnP#|VKl6W*wNCb5qv%#Ou8(25Tx=!>#*($)-R0-sAkvTQdggU?1 zQMP@^rE)buhs;55cKrtHQd|?(Rx*P9WNE5U*?b|x{_JP#c+akr53pICV;DA=$?p+8 zAUWZo7Y(c-<6ISTe3x@EwB}c?98d)k1qq#uc)+DI6=+9FY;rKx-RM*&gASocyAs68 zHvdc`(&s@cNph(%nbG3R)`Fo1H!y8b`9vq}Gi)fx4mgb6N5=xhYCX~K`n*i1m{>uj ze)H_ySwZYZkXydYVkVy@okQP{(EkQaUG1w+A%9TrwLw#C1B@Yn_oRmD50#HM5bqBV z&q4}GdB`!CJNMY0Yiit>BQV#`{a&hEh;guCcuZ$7bI*QS7t?usW^(s~3m3FO9Bp1*cvFcz80GAkwCPiRmA&2HSs547lh9;xA6~!WF=EBo4dQ|8TnKkbWG;gBQzH>;?@{wH9DfYf z@M?x3$X>CmyH}o#6I$~jvvv0%K@e8vBGxCL8i}asQ5hzz5X#tqRF-%(3ct|HwWZ}e zkkN@`sY>eH4vr)jo$#IiJh!O1N^V720$kcT#8;~4{`dOI49b0_AL>|X=4&oWRX8_H zk1@IqRnRxq6}1nNe5O_2$obHp=YQGb(mE}!vM4|@=1(o*WcX1mOU)WGAJm_zQa=9M zSoVf^2vy}+KdAkgNyDP~|2n_YcXoA60t~m3Hi1su3Tenk z*2FN2;qQbsOds{qLouYRgnB7KQvd$Ue@16NHeL`ICd=@nbPT#{OX^`W&=dfhMXmm( zBn3eD-KnS+a=Cluqt~iRqiYjH4vV*hKJ|?*IV>b;Alz#RUs&Z5#$7Bv40M+X{eN+y z#ZDr6E#y+|ghe-mUtS+3_pc=9-5ELPw~)WO7Fg1J$W1*X^vUnsC0reN1l`?63Uq*! zznx=q&irb&PG*9#08uc#!K0`zTI52P<&2>81&m%L_71Ol+y7@=ztYkuh2~XATZYfM zdE%dBu4MjBKeEX^PBu?_?TY_E=I)ZX2S`kjFfTlX-f02%YQwA2($d4ljTBdS z5kEg&NzCK%y&xU|tk@+#q97mbc{yxVMvEIx8p%o!Z~2G1@w=w0pH7+F-`-U!4d#ty z$X#NLlnG7dHExv&O-mURclZTooXdSB3R(s+|NT*|hLVeaMmEMv^BlX+^)U^IjRC}_ z0b=i^UsdwZ2;SnW6ALhn5|bL--&_b-g}K!iVP8@YN^<4QW+-sh43`N-Vk%Ik=m$5@ z7+7ZgyQX!vPJycrG8%R}#qs%uezGj^DIB)<^+a>nTRGVQw|Cb?&PPP#fx2}jyd6L< z8!n2Iyzg`Yx<}L7h{BY0T#i07hw^VYnaO=p*)Q+AzA7-(m=I%p*dFG2Pl{ZQVrI41 zfBSl54>J{oMp%(DUH@u+1!jEExf$=_wXq2C%Aswdu)jmpr;Ca-BIoQ9!CqML*g{EE zK%|n#mqx(;$AN2a`j)U~+WPCMfzLCrAHN6OA6!u3haRxrt_m6YNG71KmxzM63?$aP z9qRp1r!@r7$}=G){QhO;9$JKWVAGP&vyZ+7O6;63DLU#2y?TeTb)XI(ES{eO0ES(y zqhliMyhlT=qbwioASs->=_MdTZWvHU@^={SW|Gm}ugijhKdM6d!@5uj&;pKONqm>! z$(ObuDGfHbRh`x$>DA?D#J$;K^9!cKqo&qImJfHhQZ6bc$qWF6$I;eW(V3y^hVTpS zS-mPLui8|oPb%VRIr`4~8OweVG7ILcL&ShPUu2FeUOb9kq3H=;R*>sc3HvHi)bbnH z=Op={m{(C&!Y;46DB2jv9E@Q{&2qikOt-?{`!8-_>g74RIUHCbuxp1!n63@TC|B!E zB8@=lVfDA4HL#_&e4pKb_7*VS=We>7N@R%2H#OhTVZC)>J|GxOTUe{dxK2Qnfoq=x zGzc)mD1lS+UzE2hQD4bU=W=GV7zg`qiMmFMq&9j^36j{7HmdIwbg$$zu>YecL;cbX zzH`iAj|VEJeC2ld{-ghxVB92&r=lW>p}8olCmxdVck0&SsSo>8mbsWk0Kw6eXLskX1eUiF~J5OKCzWUlQ|LErL`zmDrk@n{vg9xm_PMw&R z#DtrIXEvhW!-E~+40w8v7*~Zz;feAIRZ}nW{&hIBy!C8xW)EhM)Az)RiuUQn0pBSl)u}`B7HwF_-!X-hjjCd62E)}k;J|=wsbym7E9P0DgbbBaPKd%tDrF4GN z$1LfncwRxa=bm6!iherw!m0h9swG>TP`2eilk(`g|Cy9`;ifvnnOe->(t79T|3oTg^~tIIFdud92-A4J#s(`s-y4 z#`CPHfZY*^!R-5xsW9uWcwsiN9HU_qP#MEPszheVdI-(jTtM5`@{}1haids;lFpAB z8`~fm%vgkcs;yLka#Y1JAj=tlK zW!`YN)8-AGUGaRP0=EBp;M(C#el~dX9d3QD37T6Kx4O}l5u$*Uo z4VY5QrUTf&hNx~-kMFmln)iQ3PPtlzz%ml*3r2Jh#&*<3{zzvmuVHDZ6~xs4?a`Pc z(Wlo-Qeaj)XXy(MdiH1t`9P!`F$e;y&luiO0BthAg2QMa`Gfx(A!AxVT>cPcvR*J* z%+{pQtY82FuXUtoOXbVfmel9gmYfDeptZ%nVF)m35HNz$)Un;nXQrb3Bq8%FBq{-^ zVHIs9b}h`NhQYzE3GTKCCPj)2bet|N&rzW_il~`K zgQky>gaYl*nH%=f!13w5P%B;hyC(;S)q=9gx6f-7SB}vO46ksTXEi_Nrm|6`_f$oW z157M)LQg9gu!lEqJxv(ny>`F-r!2l8aLH-V$4TkNWveG zy7S(-+`Y!~`u_hIIHpzs1IH*)57g`L`>tdgb+k2d_t*yq;@uP5zxt z_dk>RWNe~6HiSZGIr7d9KqjiartQfxcn7@P{9FE?fZIhuk1ULIx?TWh)6(sqgH2`mf{+^f75GSl`I8^Qa z@P@L2972mdpS9a=%n1F57ZsjJ1$ml~;_jX!!9UJY*_`gLILcl&Nr|=3ktgp7cF5#% zgPW&KfzlPZzDXh_=U)4LGucX&mi&^PyT{%6Cc@T$_XHR;sw_ta+*n>i7Es z)-^v`Enj789^4Lg>hoHINm{w-;AUlqU2!OksPD?&4F#^CSgl(M8?TFpp0B{b0xvB- zS65(|C|UuH+?G1u_^o_AL5l3zx$GDP1HK0mvSTEr3nk}ItT>1#x*z*LbiX~lS~0?G zX@ffjQ@wU+_%)_#Sd8ctjeEpxt0q~Q%Z!MuSoPed+-(X7F#Et!Dnre2y} zq%`<&{9oNRQI;^T&I)IEvq|Z6S)cg4pU?vGjffa)cGiCJt`lOfHw4wGw*htHxTAEP z{Y~C_%Vi4GSQXt_zmP@5!0@CWg`xG8wY~)^8VX#hx@>RMx+4X@F+vMZg zZK5r%NzcY|BJ+7x7m7oNf+>*I>t&ai(TXDgcpIvJvf49!Vp`}(&-7n7%i zAf}iMSM1vR)w)hb_ z?p2kB5A;%jAWO_s>zYZ2;7QC5i(JlNa}4l}(T2s{(+xEGHQHB5WrTgsk%vegMtj#` z*XLexo`3*!^1MN`A8$7z%)H>^d(p9)2C|aNRAvsHP|6%vFJF+$ytckCc$9+119nJ{ zG@t2E8cv~J&ve~hon9O9>XTl%O-t!r=@Pe_jk!H|vx`=?)zHC*Jl21}(BUBs>h^u0I&Mt1d&NmPDle$F3VTaZ&glj{v zF-j}43K?Ss$O#$RI{a*+Zlq3I*dtfPte#sxS3azxxNp8w>5QklOk+FOeonj^w>MU} z+l?E`Hvp`wf@PN5X#{fmjO}r-K*wZKq3ludC&f8_T=wzz0t- z5OI<-2-JEsOA$y6p4ex@(^OWY1;fCU%+Uf4gxTG%8LTRAo3$85#!`(~#y>Oq)1al4 z?fU%F+{96A zI(0G1%T|XNqv(I*a`h!hTIpMoVan|i(;ZbY_a|cwx7J%9*#aTwZIz8jweXUJCtDpV zzZv>>6!5N@b$z0%LWl6H(#S&KKsi)w+C*|_`U$jCRERTNUI8+TxMF_olR&f@9-nL& zLq~X+{!$@|?A(|N0_UKGjAn^h(TpcompUse!Q41j*R}v#W&8U?_PcD4zS~AMO!i|a z=_y-XkH(KnTycKLIT;}J!lY?>jL`FY;aTBgD>WV=Hl-dM z-3yg`u5=CA_AaXH3< z*>TcnH()Lius`kzZA-mwM)*>;83vc?5mgPdljux_>EgdVG6(dmHwiYDUd$ZkQ-|=@ z!D&447R)Do3X#D>#t}|is)g$)Dy=_`jv@21MzY#?o;u56Nb|P4=UVUVJdU=G;}_2V3L1*_0NOwt zscOV762WcA`s6}w0`eP^6AQ9YE9r8-<*4_CHEzvJi&(|nAAwg`d+8&aglW>l=bGLeMh;-vq*i&A;F&hu}(ih_r`^(poasJt6! zh3^l*4LnKU2?Y!mJUWPbiw7R7H73Jvc_!x@n^D}+ik)ePotZ}w)t)@kKjTyrcCC6O zZP3y)SX$mPHKq#X{c*L$WLkdvJxGZ*J9JNXnSbSg-?{wqzO~5f_;h$6T0|FJ zReyJW)?)kIBR_rX;pGpL^B+7=+;57+;BTiEur`^YpU)|=<1kXCcINLv@QqlxPJG^S zLJ@Y|rbl-|F%cm=bQ1J3zm}VOxkETL%?W$Qri^nO4$qox_KWA-fThSi@{#@3y)zH4 za=B@H$~EDWo;og=G^d#8dJHm01^uew@+Djc;wPB2t>T2LPFDC%wh)O|5z!x@Ej8BDO zBTyKoe1cf3+btEhB!Vq_YV-(f%aac0pNBSVvMihSNbPbKF+k+J&Glfau_AfC^>$XnAL2a<)~ zQv2?w=fw9EGRN8*H}iELZ^E4}BiAUoze^F0A{6*-B+Gg}axZYh*qBE2x#s}>Aj$mH z(XLa@<)%2arC}Lc11Lovwb?d-y}^1 z+qNQyY)M_{K!IU3?(4Ual%+Bbm9UMjO@#qi%qW@Kll6n?N)5=s9e)3K%#t<66=%ow zCH_>?`T#KR>@J<+FHd-zc@F)__M9?AX*y9;5Rohd)7}*f$CPdDHl%}RWWT*H&^DW| z8ErJ1W`);m(>di7bJy}x^vzV+k9ORTw{x}}SbZad^TCUTy9pWmH_^r81rr$LepeuKmzy)ELSP><9O7Srk9G29tr^WMO1P74S(WvleU^(qO+%(gM>sPFW zl7=hhac;>_G+s)%Z7lXhTRyW zJ@np76ZcSclp7)n>K1;hg+Wg&AN-+tm{2jW*PxqFI51bvdL%_``6%JrKz$Vb;bl+7 zKHrhmI&y@5Ufr*5LK`BA6=w*~-4M8}BQU<~BH4Y`JM=nk%D+mK;JQ#_6v!~dnsu~N>;fC5V zC*DI)9QjUmiY1vQay!Dj$7Isu10l3j#J&5gYP5 zC^$WW+AnNYudZn+&+-*7L1nPMtt~Wm?||qu8EQP#lp~I>DRP?uh@_LC4dKuE-!!BM z`!9WtjAMuc!qHQhD1>_-l@U$%UP%wFlUkhW7Wk&3yz*L#OAHvxU;^tfk=NiPst}W` zuEuK<1P7DXajEbZV4+AR1?0FuMq#2LoxWo7{{1~50#2{*Lhvaj@3GeL7_*R;v)EyP z63pltsfC;_*2%j?-?o*@6U8?98WS+xp?p={T}BsrHk5&*&pXEOKTzt|bsADtD1pRM z~RCu3W>%1z3M<*BP4nN3E!;SutmOw8Ib71YpBE1k{qDO>2ZZI~O2?B0ayD!8z zECW=??-Dkf(aI+GYm@Kg8mxV>JRPf2`dqP={w4np%-_Vn@9m5b=SC0{g$JO|@c_sM86k=(zRWB1_Xq-7vSFiSWGdFT!VT;<>7P%`i z5OHvzNZZ3w(G%fqBI-bt!lRIf^@blD19ut_i}ZQ)cH#N)w}8iwr)JD9{3QkXxN%q{ z;Gh@$$@2go6s)al?$!wRucx=Lq)Jplky4RjD9VO+ z+MVPmaEe_p-Xs|1b6(wF-O?hw@8-g+XrVGDXLHET5gBv+nM>3!cUbk+>mF>%HKZI5 z=qOBLq}$g_-+zA(i$E~!b4&+bmgrv7H@+k5b@F;v1?pED>%Fb~UVr;5g=ZhPuve1n zKGwkpP+-I?1|5@lPL@O*If#yDEK;`Q_An%xg6Y!0aGb|+v&f6?mzsuUWv#1*`*&%Y2j7bg;i-@uv zec$iW#Q0ejH;h4Z!sX61--7iv$ju^h%lh?Qlte1XP%iUuyzVrka)0(knKQ29M)Uq5 z3g1LqUUA$a1*b26dw2532YEg>i~)_`V_fj|>CSThb!S*EL)y&mi~98sg3?#Jz%JsA zdP6|V z!fE#_KVh!k*0&1w`65khu8D|5oii#qkCiz;{no?Il7QEDq8IHN*j5M2QPE*8YuCQL zTfnc8CNGy;gZOPyK}@wlT(7Tu-LrV~d?h>@iOPlKu|4wp^nK&`P=n#f>PS@hQ?VR| z_<(!O*FX3H-0PH!xEpY{|Sl@1mysNsy_$CVjM;Tf~GUnV+K z&O5wyvAaj&^^Ju4ZoXsv=iU-5&M3Y4!vzfa)k9J807G*sX7SHSAkw^otJ5b7IV3+N zzW+C<)sN?(lK&SJEpz@H2s-@wDd>e;xDoX7N=+1Q{i)m%H`%D>O4-(3f1{JYgLWcc zUA`|{I#HR>Z?Of)p6Q3mwJp^X`gt&9JRw9d5{WZ}3V%43ago682b`JY@{z1D8@-V_ zV+Ex~(t<-RRfy5FX(VGbF;$48qn3tS?Fq9^^!2bWs!E)JV<}pUU)x|kN{I_eN(%8k zJ>#5-%OQu5y}Myic_HYD#R?nX8XFjvR(__kCD%15G8Y|^DQpK@_@x?^?K1uif2F=u z)q3!`2wdO6%dEWA>gs-ZxG~ZjOdyA4M(q#9v0Xj&+P3;m_UA|1+h4p8l~A9{A)!&) z26`uH?Dm!TE--TVtwFMQGD_h7c$yP2ai)rxuZcpz1Sqs}phMan%7hM6JuUE-fXCID z@2~7ZJYa0;A5IJT8Hd6*3u8Y-ZGFtBVVe5=-n*eC>M{9D z*=!9Pa|M(@6!zG2ES$q>F@)v`6Wmo>_e-jdqKGPN$9F3$ZZ}u`*HMqxvC6+GV}IU3 zyR>0>kgn8)&3?|SDu07F)lD*8-49}RqrpM}*~k~UQxxyQf=|4i5%*3wGN_TL8IP2t zqMay2u;)Iq4X14onunb9TaVt}O1fZM-nhf2I(y!YU+W4u13xjnsYbZ$k2-aGJU=PT zdcO4p_M*M z=(6@~GhjS|3yBd**P733#=sbq+-`!!MnUG@=(OT(@y;I!Q9(cO!n)STG~eamR`m$= zD(Nu;AmT%K0C53M54-2(&aF{M=MJ(k?V}u=g>61ly%;h6b`sRPR;B_KtJTeq@qDj? z;YsUIRrsS-Jl1`X3RfSr(!BCeR#bu*oN62Uy>~*pER=_&$tMWX>X3ZM*U}Fwu zw<+jMQ#BCu)f@YW%|@fSLy8MRY0Qb;+u=j4gws0~gvRa~2$WqK6kAwxc8tSm?8qz`k@luu3#!9aw@Fm|n*EmnD=7jG`^CnOH*r-z5%L(r5VGfm z#My9LE(`*1IJySjW(s?_5X-TY1nW7<)tPDpSl|S`WEi3>*%5L1Lzi6){GMLby14 zK_?JHKw51y&mJyiJKm8^<%{CeGb?!HgUne!7>p&Xd#_oG&bQMwHcEmb-O_HX<|jdbWJ%M>6_6~VY3J*xMaE- zDY)iCGab4c4xJ_J$%{fjtgw#0vQCD|$^#6|Y~ z(&&P&wP75cRjjkJt*?v*vg@^kXu#{n`Tn&fQ(PG(h-Q%prdj4;(g-@n})-d6u8@G=M!j-KNT8OnCRz(rcH)5J(8>@ z9-U;$*~b$PH5)&{9D*S6qNCiSW~T>Dg_ShVMx4p`jyC|<)DYNPj} z1lTKkm%6Cj0sOYsZCHl6Kkdgd3O_Vs^>qFZ0r!OC?U(Cw**g`EnHrQ=eB!>JivQ=cf8){^)N+-Bvzt4xwC-Om(-|n2>RNE1yU5R z90_EYPv1RN^_@%qJo@0pSVrZF-$)Mo~q23|h>^8Ocqw zJHy8JLNc=O0HDP*!_bYuU;^Z7O!7}{((nL=OuQSOv1icM? zlW`bV225?KIqWD*ZN#~_$9i3qN)V>$gmMj)G%L;?9oM3^=|oj)h{KL71lzbFAsJm& z6C~37r&KN5E?DVo*fHJi;S=TL?8M>@Qb>Ee0V z@|0G?hTl}K`7Faqv!@rL#K<{&`fw=ik6HhFyzBH*K%n(@)#>oz?CS2G+Nt&SSgoeJwBB65`~&Qg;G|&34$` zAm<#TP-o0z#Np(}ZtLNAu^*)sG0wmNgf3ZX_hT;g@-l5Z+VluR+Wn?dm;Zj8dWC@Z zG^LUF@wiaH^I|%x_dBC=TjR;5o>pR1C=OHB=w}Q89cyxP;P1>Otz5rRM$T3F1F^K_ zmQ>xD{hWc%(nhc4>Z3a*{IPNksw}ICVP}H@W!L1xA${X)1oeBmt}P{w?b#c02fx9% z^GuwQL6zI4k4>?%DNg?S}&)gbouG`y>3rFI6bboIkjHzAC3xS(q}^IHWw;? z>8!9i7sBdrMNzyvKM``VE8$;I)!i?I+uEfk7A`DHmsS3qBV`3-LTRnv4+`6KXjO$4 zLP z@OA&r7X%ygZb1I-OlQREgf2E{+zz9{+k1Y`E?1EN*yCpjrgNSBUN`y5Uk}{!_>+ZhcdFE%CDz_=}T8!FpJ^!wzNP`_%2(_`kuWhRB3@nvpO61 zCq8>%utYWR(JzWIEvNs0<%EzdpLD|%g7R?u|0sLws3@T3e;A~cMp6(#N;;$@6{KP5 zkPZcQ>6Q*x8blfw=?3YR5((*U1QY=Y0Vyeg-(CDZkNCWQz31@H>N&G>@64V2%q-uE zB8Mf(jyhNPbCf;-{|?m4K$jm*GgPoBYui(GU2gYrM(B}5^!!_z=w?03jUqnyE}F84 z_6h5z{Wn=piTjYMBh(qA96^y6m?!V}`nJc{JtG81f`mO#ET}##qFle@A0LJ2Akcsm zL-?x&#x(<(RzCHrYi!6tiYv!85faBl80W?}C(_u`hEl1zxPF1E_l~MA* zo{M8tD!$!=-H;tU?Jpra>MU<#gH7BB+3{a|x%=dJNSA?U^8RDZ*!DOu?VrTZ{8CT$ zrd0|@#t5$7Ksl62&~1M2yvB(s>ak1Wvxc`{tITYxW$H$JoZ8(vip}Xe!zIMamGJ$i zQOh2nyudP9MzbWXY$A5E?a2k6`D^?5kKSBYhUAIq3YPx#aa@u6Y}0YS4$D}bX$iPA z1;Eoa1WxD}Y z*KNYiLUf7hcyHK*oRO@twKpca?DZ}*xt{OH+RvTsUHESN9!^U$7v0!(3KsU;@6aDS zDLAd2tsS^HTAs6S<}0Aly}NG1hTfk(7979OgDr77o3GN0Uf#~W4mV7X+fKzAHn~?E zC2KQ;*P~3ZV|A}(T;>H=w@i@%vfO(#1FM}oLQ7atoywg1LMHIcXq+>UTikt~4r0-{ zbq?#>xRt@CJKX35Z9Q0{nHMG_3uWP=AM@`)o9=#qa#f8Q&qQu8!3`20p05vF;CMN?bkS7nst< z&lO0V9`)S`=|CegAY`Lagr5x+nfX0UGQDG}S#F#WI;9fbTv2saGiAKLJln>32&Qwq?}KAV_7X;=~7lJ(7HnjMtlWj=h$8~&~lSrzk*T@jz7 zmh`UrzK``(ZM1vu9e$>?P?r|E?6{E-KR*)b^EHU`U_7`|5XlrN2LxVzJ!IM98wo7aX!Sd8J-k5^FX1@&$$7D zvIccwJEkj@8OQ3}7oBghDVICe40c zoe^5Fji%FwX_8{yVDymuQTTh7IE4_7LS?&DVY6^Wa;KK4t3^ro;#(Q~mgwJ>5@jjI zd0&|BX94YHZSkbRp^G(%wY`~r%S8c&{O$c4Bjcx*ZSHvG=3>5lTc2QR{(Eqnnr(X^ z7R|&Bg&p7j3+j{O54z8`Ar;A9_jHG2Wr$zwjK zNjqIX=7it6ttY}VKvNc=7w19Z=<(tUGiUmi%D)a~Su|OrSBgoph$405^9*S zu_W&|S^oUORbHq8=*j1|Zmy$J4R7_!O<#Mm!Z9P`^r9$A4+>NXxvZO(qv2OP)~#jS zltQPVd{#?jvX<$j+$kj_tDGY+TOh>?6>6Io=qZpoZQ%NDO1u0+IDTXqcOb=AHH|hy zB1>=_M3TosW{sRnpW3<~bBkOj!;<((_|ALvofBuDlRzzV1u{M5{0>Sm&d-`*mHmQz z@C0X@^4A2O!0!799WHUxBaZfWVnGgcc<}sJRCC?w(j;t}+N9c?tCmE_1m~d7R9d$7 zu-ld=S?5U~)WOU6_@^$TtvhU$%KxRO6sLcp zrj#kg`AT56LxPuC?ZcaNgWJFqGB3T7G`u}YBz=2oL>`}}EYu>5i27{nUQ4%)(NmtR z)@|SA$I$2whi8pXB|V?5fIKycy>{O^=~<`^zHLo^fQ4#BI$vqm;?!-ZJp@Vlv-+H@RtCjq z=+MeY6h3$iqqe)3IePlpTx<@bK76R1t^3;f%Z$m>_3BQ1{{K(T8$3uCc6YhuDc%2Z z##~Es0?Cxxbx-Dq0)8{@$w{27%ch4P0oL1U7)AgSYv%9%<8Nsx7qbKx_uanx{hl5r zXpxJ>atkW(s)tRY>O*%ahKDzOob>xvNXd99KhNukXOns0&Ye;d5C36!sXm9*F6Q1y z%&ZN^8w=IlcJ)j?74Q{Q9wUlsutl8LSOfT!p0HhU6CB7L`v1w%gU9Hi$`|_no1=F- z_s&6;cBN)qlZy=j!*?DC$-pLoR7BUR-}3EXbfMk%(&}x(Czz6q{q(;Qz6&bGKPGlx zg|0@w@fv}e?KZxH2fUYK*{+CpLbP^`wwB*lV97(4jJX1`LkCsv_@DfEa9O%->r&;_om6%Jk)FasJ3f3O!TKUO8PZdAp+810it(J+owF1?EQ; zFhYq3@kYHCz&yWMB~r($xsr8@dT#z+ZHJAKDbSWppXJ9^(VwPxmi}IthwdkA*J$GO zUbkzY%W~&Il#CE6c*_N=u(=>6rmnqkmBDS_q!pZW#kIF7u=t}= zO{Lx>9L-5VC^-Lj|K1+DLH?Zg(Oss4P(W0BldTngAARUtpgB8-3X$}Qe5jz;^Yxug zG=brlJdvn&hp`LK1WL=nn|R&=a`p#LJ<-_ZqWV4qtL406?t%8ci)zT+3k{07jLUwm zGmkQ}@XJ3z+W~a%EFYEF73#4GrND>)OABX9f^Yh*0ZT`7rQQr214(44|94mIZ#{I$ z0yrzKyG)azBFlC~OYzeFziJ(sY#-!?db|xtK|Se}diM}LNg0(*_+(DSH+H(Q6BKP0 z&U$1=79-Y3%4q*Q`o1@b%OtCGd5;n|NkEs5x9pXH5C+tb%5r1_6$Uu^`8q{{y3+Xr z6M{GQ>4(jKlpzyg8>Efcj`Cyk-=8r?wen8P^|p-SxQr-_!L{Kft( zQk_v0_WRx5gk0mpiB}DOh~8e9N0o{tf`zaQp@YkdA$@|a_OrBt%GoG1g2}LE_@%{= z2Zr_}Th@(D`(&LEy{}Xdrxnr%m3axN%kZOHCtXH6yyI_72}`YoIF#^aRRjo2?nQY>d`SlhKx2GtR{N*p_hkA^R)w z7i~wcQA{+VIEH9hnmZ6`^zh>fQ#gR}&D@X%&`#utV)5`H7$G;LL zTlaIX49hmbv|i+=n&KAS1azY>=>~<`82HpghFc8X!i*3RS^kzuZO5ymcbXo`#n<-X z#zU=)=I@JxEX(uuvcu^yUbjFkbgf#gqm|o>f{fttPwsc#4#h&9qPhiwn}*lr`gwwy z!s&bhSC4eSSnDULiCXd56B*vs+h{U*DZ9lH=mGTi{tx15=DCnpqSp<}bgmxhpp5V)Ln<_TJ%{C$l1!2}w*5 z{pz|)*oXh3LxNBgosCA%I;f!kRwp06q~;)ZkmGB>d)FoJZBn^C;ct=#k#pXmbXT&Zm5a% zQfMoJT#jzZ*j#Xhop@UH)P{<+KfMw+34a;#d{E@G#hd*wJ48~Fd8+Tx@+g6LwWife z-JY{O5S%7@W!~nQSD1K3(IP6ks=_VsS6}F@Ane6LMzFx zyN}B~?Ol>Uc0bVWx`XaV?nL%8Js+YR; zwl{Ncxu{>;D>8_y`%Y~at3J~&OPpq}{z9W1``Fi+uq7+*;Sw{YX6QXe?hZF~d4%ZS z>`HbVk)V{vZKggNvqqu~U4*SgY8+{;c0RPMVlI6XPZ#c(X3GP}Ykz$DDehB}TV21x z8ucA$rXbrJ1>tmCoK1|En1R2KoZ2y)K8yLbyXR;YcEgdqGc3uUwC}v3#Rc7bRP+}7 z{BJCt1~R20=940g1MPm_%iS%Uth-ymLNG00j%Z!UMfI-Tm3t?){nONLeMHyf`FgquRxPL@$s}oM-=l!h)b}(e(PApm>539ud4;om)KJ(=hI)9&8Ao z2r}b|zF=)|w9L!!Y-q4>3o{saT+<6`_|rE;>vyfUQlHoLE5j0bA>J9&HwMY$!ZisN zzgIccfWlSNFIq`>2}gX*%9XZ7-NcV)CvS;j5h+S(U|ld+pX)sU1aNL`DAs6b%qu2M zwsv=x4#K;-kM3sZakL2NLsVeld=Qtsdm6uG8?|!wg`nInJx1s|B|paY(eYP%w>3s% zBd-Lrda<#v*PRR5O!r15(R_-l3G*8R%4O_V%E)7@1%Y+JHA!sS$BFeHY)#?FEfy zcl<42dlF7FBd5Mh>&{zwR`B%Q3F>GAtCiVkjI4d{_fLn&_p9Uz>1Tv~&l6nvp_4&% zF<$bn!ClZ`Db423VrQy}H~SM{$Mo zzS!0DbU?sO#Z`qTGcm2i^>*#vz(5g5i7Ub1z31YDv8GnV9IRI?0Vg{sNf3c4asJJz zzF9$7audC{n?7qJ`z(2Jf<{|ZEi!mI$}G`1;0sK_7v!Y7KB+H*1<%ICfX`Cze@6_m z@^n_@=cxUp^_8AvvLGFnENP%9mmYQVY%{--pJ!BCkd8)(C0W?8A;aU!9xC2nwwCb~ zvxWz251iBpra7$;68A_yOFpU32jsJ3+|)+f+p~Aaw=eoENv2-7L-!?lZH8S^&h>CP z)+=;yMAD@N`F5SRmlpqmqe>|{?yHpo%7X~ z#V5zt^((_+fp?VHs^URdx;VWYNqSOKsc7gjIfcG4XJO|1Ya4XWEnjypi+>HkGIRP$ zEw04rGt%Bid>l;r)I#E|d3h|=P3m?o54SJnNxD+u$}m3q8YpM2!7Gk< z(W!>M>F5J3$l1P+AS^NPt$x2_o^CkWGH1YBO)@+dv+-!!;D(;4xsaA$Z|KEA= zjyqqdHc-uPmA*0Tfx30`6Yk*(H+%{DF!HDmxQWE5y^sC~U!b!iJ}+8;nYDT?6_!Uw2^K^rmH_F|l?kw`pI@v~uEc0?D6fePcP%f}0a8 z*zb6|-U#-L$EN~8{JBLl(dD72P zVqdFr;^twN8Yqoob6TTGjD7x6+cuM3PqXPQo{Wu}PQ0Gtmw$9A&g_;O1}lFKMLo!h zQ`P4w-0Vei_7CE>A3^wXmV|9RFjLfD`e;H}N=9o`z(=#1Kn(DZ^8``}IozrZ99%Uy zmSiW1^s69jiPBde+GFc})`UrI%>aZJdug!@@gS>xV@>U^nS=vZ`-irC#Y+ezZSA28 zmi`(bSUq|0*(@~_165lq@AK(Y=54F`o$qQ@tHK^DpF=o;=4g!#n8^Q@!W^qtNP2D9 z6dv`nBur~(g?^6{w3yW|%`Z8v4Ypp1<3wmU&DDs)2UxyT#%*l;0^gu4|K8SPaS!nX zea!AP4Hf?GCtRnZq%5e~;jT+Kk^UG&5Lz(Z`ri(uH&S)(&tYp?xs@x`0wG{*`C;Q;#>?yqPqAtk3L?JwL+T!sBUk)4^8T_}2UH33m~CPW`o_aAl4!wd^^^ zNa`H&dw{wxF^)~2K567mcROq2 zPi0aT%81pOgxgIP5^$RFg}sl(`dIfDra(}}Q%{n6QNw*!dud6T$iw#IbHGmAe$tKP zjV%PmfGg3leYnj9M}K-O&J)gM-)OJ-uf|M?hQ_&PwR}6KPVy>rCL;0QKT&hf=bHyp zlw#J)ryMn%_#0j60|itvMb?cXF8SU$|A z7T4V4{sx;S5af8MTt1YQ>HiT^WL&Qp4BnWcjm>= zHKA9DR%wO*)|Na=`jCGB-V@1G0%}WR&d==GDmHET;1j&UC2>uWAhH^S1q3q*AFvxf zD@=84lM#E^b{^_Px)8EcG5LxZs}*d(`&04Hs9diX*Z_aiAxL0BDgYJ?M%Na0{n8%B z)f@a$SP)km=2kcEtf!G4sw~#V=^Jk_?)m|<__w-8yZgO|^^p{%TJZm2&#uq2Mmbe5 z>o0rjEENzjBzq5pS7=qf;i^`&F)K_}H? zN}!@vdYs+>pCPkV?a*F#;vi(^4b5H@_PB0=)w)P~{mzScf)uSm_uKDTR|nXkZ3<2! z4vR0Eb9CE(<5Ik#53_Lwy$in9%Ak0m7jAXK3{44KL`& z>Shl&9kLWWL&+d6`PW$84Xy9dRjF%`NCAJoxGXaIsC@o-i+ zB)&B}?CyRV-`gbC+PGbg!nkNBLkqS^KDb&AdUb_*5C7)R09NUfui;EHny8|QvaZz> zl$2vmf{3h;jX^O&n)lk%uGCjmGX2ImH7SJl9aNn%<^TY!ppqH$Z<(So^)0N+K%Wbp zL83nJ3y3|38P0x66H_C;5al*~hV1%tjA7Eq64{SY=aA4ri;Wt@a4X@aj@;jdn=ALJ#IolB$wK5hNr$r zG|dgyJxJ2-lfwthYCikh(gs^f{9!l@jf7Vc@yC|K*%dIeuuna=!~=M%Ec}p(4BUNUoT%&YD&=Aam5AY0~Wabt^(Jy06PIJ~2JBD(27 zuP{>%A*Rm!;)@+Gd~#i%Po!G-=3;?;yF*}eoQNERGibWC>;c7#aMR^BOSO)PRYi>~ zE=Z(NYiPl41>ed2k=0(C$W$bId~7r%z~h1Q?y&>ezOb|}m}4cF%1jtMl8w*_O~y7d zl~V=f1rZ7|tj7*K@4S!L3#TZ3U{?D%1;cC)fQS=hjAbZ&-V_gmvL@+ki)B0AOI@kr zN<`itJlic)FuqQD{h005^W9+!5*=p6CXLs@rf%Hq_(5OHo`8C|W;y@K$QY7G9S5_* zM)t_&FuoI3{j9uO5v-(Ll}=*)K%3PVo1SApstR7XpJ;Qw7BvZ%nboD8SI{_TF5!0B z-56UkOQOaNhu^IO_%d%yEmr-!Ql*sU`>viC_cF1;BtxN;uupvP=p~bu%UK@*Nuibz zDxM*!U{;3^75%ku1L@KnDHyU5f|0q{1{rM2^Nz9M|FY?N(lfTkrjhrD&6MUa7r>xlJnH#vUG?lJ`sGl3EeF#hcnvY&WoM)N0ppDBAVc`Y1a{Pck&HGTi@v(DW{x-^0IOq;ucxo4m7XN z^(7%^3Dzqua&_#x^Qxnb$on=J6DsN}*Vp=<+m1J^K3;#KOENo7XIeq1 zKb-+RKyv^Y6Ult6Qj2DiIlT4lty(}4Y#9pyhpICtkAj#KK5s|Zu-cO%dSbDAnQ@?9 zW*n;FaCpCjhDdP!N_s{LpnL;sL+(XsC8Il{^}!SPE^EgM$n(FMoaja|+1+-*UqOeO ztKF;lEw%5;F()8vGyLmBIYg%bA%ndVOMn~^xpO%nlSIiU^(-u?x}cYyN&Yc-V|N2j z-Vbrd9B$Znq*5FXBOB&QAfFgQ5Lfw@ajEsEtsuYa?QO$G)=JEsr0;e#O&Ny3Qb zR6TGLXgIU`sXTl;>$Q@o#hdZ>u{o-=mP7D@+Jgz8s#SF!rjIR{C;x$!7 zJ}ZcxIYu!VT`0rDj+H^v?Msp2q9b<7^`_q%U_uCnSx}^MrQ$$uHSS?MSzj=Ji5r`& zZ$a~>Ui;x%GXS1J3LKZ+d=bd1Xm9_J7va9Fh=%<+CE+g7aan90&+T$)k9w7Y{?K&k zNiCnOu+LYrlLy6g_CM$Z$K8;yxkb9e@n6E~vl}+mDHcO?SOq!=M(_}@cq-@zmo)F5 zf3r+{p4c$hT!r@p=N5Z>b=jJdd8vgZV*XF!Hj9hvOGwwd5| zRK{efYE^G;c^KtvO7QU%)u0-(_*i4vymr8nXdG!q4@neh zdNL;Qw?9r>yw2IbE>Nv{36Ea?RXxNsBAIN%5oa;9j@hB47X>1y;`gH^piieYSEf`q z!K4XQ1t}8Ix5(cg_{rLl_YYT2U z7e7;-`3e`6!f(tC)g8xUgX3@PVI`vkJP%yJNd8$Hnr*-7S!s z-->`ghdf)xixGUmk?dt-BsEQ)1MQ`u^aQSE*7n8mI%%ZLC9&@RcM(bB;?_F+H6{H+}tlZ=f{`4NDSYfww^v$@jc#e8cREUNS|so zxmo4rFYLZ9jhX#fct;fzuSZWjUYRpuIc!r1<#6&?CP4!U_rzxAyell>++UA z-igee2aY5y`J*F30#GlG4-c*kwWLcYd}In|NvCI!CVTwoyWfU>EMv^_tc@;+qAUD= zd}h;4b*qbJYzm2G5`Kmn-w=-_PE#hK(|h_=?RTb3^K@jU#Q6F*Zt5#orXe~-SZv4G zH=-E2@QhD;EeFNjHw%8-*7T_GGV40Xm#QDbf~j;zdL>|)kI4v|dev>WG4bA~7$i9W z9uw&Lm?;e`Tn|!u1?CBXgq5XtJj)n?{8){Wh%!5nyt&+KO zO+O&f$4T7hPHO@&zh-StIKwY2wEw24NUbApqtjq`2x1>*kOW{5SOXo)WCLBfIfmQ-3!fHHJj|7dkxB! zuEpY#ZEzkhZZdKi2h(@ngdFpCT{=WYX)e8UpNQYx=Tt1mwly&TEDrk?I-$@F!gaP| z+hj6E*rFhTQsT9T7pqNqG~O|sKPj{xcKQ6kpGs$47Lt}7HhKMB>eXU!trgBf_di1- ziwX`i)Hrf5&NBxFE5@PbL&N{K{}I!#p%=|cwD^0_E#c8 z(T@c5{Xv?+lU~=O|2y@$`^8aJ(T%6LsOP_XRR&s)#y-~&IA|Fza-s?Eaqf^{oYc;| z@NCCyqunmO8e{{~0lb6pI`8-yk0#>2fRy7tm*R_Ux*N^C3148CSxUk8U~D&1-Q4}m zjK_0W9uuee?(ZSz$u?|J{C*eh+4~`KaTl$g_q@M`CwyG!0uWw>J0UxTLk$-~SFCx4 z1i4i4{GN!0e{jC%ppFCGd)55XZZBW*wIjotS3tQp9yLO2B*hMmAo_r08 zX?};fwW1E0#d@q^VDRyn&8OW-UV>|Fc@krX2=4j00?cZyGzvZ}v{(^?1GNeVg z`M_XP4GQ|ZCzey!m`5f9U85TSeuW%Fn!>N+u$DQ~sqND4kGx=kc>gkU>o~(7f9^pq z-i0}`?FZVN0=FJDvSu$>fNIyBmmL9@)h?-Uw-AM$0T&9F+_p!pp&o}7w=oTuxK}Hv zF+l>4`OHBm9;7k^lB#Jn-#}n2aL~pz&~lG$o=``tU{e6hj3$Ot^BDE^JIO{Qx-M4t zU2$vIIo^NZynZ5JeuDE3Ia#;1c#8AB%XrBA6bFjQVe?tZ;1~x~(oFNrX%QiTXYlRl zk22GS+bcMDm>%f|MBkd`8E-6V6-C{2z0z@)EGl!ncTH<5xAgLX*Oi@dOf|^8->%5< zLP+3Hy)>$SflL{(lSLPY&<0D{Y(8l9KA%GqP_>w&@1*kh2!Q1Gzh=7pOR*I{-O@&* zuJ&?*(Z;xLo9=6KFWD9ha4Gsy|HffeTX9)8xtZtC@nh46`k@zRgL0;DD^Bw7)Z9kh z&ONW_N(fFqF3ic*PA;J!hfvWjhfw{sb(1ZVpXWZiOcD*o&j&UP8A_f{FADdkYvGv{ zx)dUBR-dAJEhm_7r>F3hBc7A&5n3mk&lXW<4!;LUOG9i!_CN4+sFtg}b~Q`UWsay* z-SW+o{Kgl<8Wa$5YJF3;X7mSHK|Nv>d%x`GMj@qxmM7YE5Xmebh3qJJn#x2ZTCwab z-A$rK4~NsbU)L6YsclGLVVFEqdpR9ym}mB6(kEN}aGI6B-^6teUdS@}3j~~p3j{@U zO>rPC(3un~sYtM#0JFCoMJpjY+BE7|JH0kV69x~iJ}9-xp@PDVd6I(535RvzTg0x^ zYae`S@RfL>hVUQv1`}rX@M+fHD{NDMwzTo@Q60bEKeoted^G0P3OmOKA`=2Kr1Lm@ z7oW2bQIrnxJDJa2EtiC7o1?L6P3K;Z2+=gBqT{}BUO1|BrzxoQsqqByh_OSKea`#{ zKF!#yc+&+cr13LWGui9r(}Uqg8Xw2Q?$V3V1#f3XIcF@wgh20RF_UnKtq0yDVqHxS zWr#}0Oi`|uQT+8jvp}|z)H&(YKl5Z8gzfW3JDtk)Y*yxgK}eSCis8={dO##a!VqP) z5B*_)z4&#mV3wSHR{3-DPr>zBa=Xy9_dY^bsuTIrtv%W41?zNX(h`rybL5Q4v1Jw= z(m3!zrAI=QdD*NEq)b^Rdbe{!r%BqE$ExQy(DnA6C;{wq&ytQgZmbj87MDjFUMJ9l3-K8(< zDAFl;UhS0x+w&)gE9F6~u}qVv>O*5yMA4b)88CqP$HAa)Z5kx|45~b|`OQvnFq8l| zoROC#jwKQG+a1Nh86`o#QLnYY0Sa-@{pa@3bO1H%U_4Q`*Z+DsoQ`%m@t#d~LqGOq z?)j_g3_0lPHj>qkUAKoUlL5+&(KL9klrG~bem<)ietPIM1Nuu_4Yti2dL)4^=wN)F zG4Nc?Aag-pWpU{RGJg0kMG-*J5QT{4CZ!u{*uLvs(=f2ENaD ze^~S!w$$eWEM`0rFO^$;!o|s;#KoS4^=zw9zCY?2}0E&#DMN`jp9oSZfyK7fuLIl9Dx^q6Lj=Y0^xp0aN%~I z`04w_`CP-jhsPEvx-lLoHmlEu!HeVR!ea)L2K3MUDW&0s(0Idf)V~v;40v0iMvTXp zqZ}`~W4y7IrNluI`(3Cg^Wz$XbG}Z(&JjKQY{<2cPy96@g z*O%g7`nF?Ab48KdmWCTLQe#|o@SxNsffi{Nxh8c>=^j`kQMqC+q!!c_djFY-8t`R! zM|exurhrB~#jBqL6J2S(?qEXtyRm4!=$24>X!${oL96=*OlkcBEC7Y+0oxCuswD9< zV?$S%=jK@avV#%!AQulKmediK3R(YLlsX3sJRX7t9*!RvY0nCgO8j=;>n5a+Rym@$ zUVX=4*P2^$Jx?5vWn#L!-RzP@n*a^^hV|Ha434w%XJQ{ToQ zztlrfVR#GZ8v5L|o_GlnZ`vCTwPjLi3?__2MWuI*y7^OOi4v*iUQzhDWd@mrUO_HS z>GA~>Yl6Ki+`5yEwShz5x4)L&;})oCF|N z;(bHXo~^`?eH_ZT=La%QA240B(vBtGOzQJ~v!CxK00G!vc+V<;es3{wCrzMSCeAUx zp5LUPJMih!UI3mErut-=hz40P8Cgp~2ON%|6eOhG2ADIuxC7!vNM4$-Nwgn_AaR=L z-)@lXAS=w7Dxj5Q=F&AN&Me57gjD^wtKSPM9NCT>4I>pW;BTN|ulh#Vhq+)+Qd>rG zu*(8OKLEe2orZ$Bllz*=_$r(-%QC*I9{#}ud-8IYnsIZBcIbzI?a_40o&v)1bxgBL z9T%(s5BM94wfo0bUBpc>WZ;LDA>aM+SgU1ZT+;C;Vve0MhOW9r&&KR>uxhUfZmK(K z0p`GL_)}hmA~-V<16p<-n8mQycb1EeK|$V!Sg9mvCDa$vHn1*If8(o!iCxaHMEm$g zM%|;ViMQ^5ePUFq)@Y#NXo8+K=<_NYjDiuuwflu@28QvLLkKeKNiB%Tdn=(h`Nu*k z`__~-V%tl?AK)L}HGl11U??u4upe&~{#P*khBN%OHwuv4wey2I5uyZe7cY9ro#^uH zAy6IF(KSOO_e|qalmfMeduC|1#YBz=hI%XatY)qRY5VUGB|i`~n##P$VjBW0O=JmgZAph9b#;=@=11}Q7pwr?Eh{GwO{b4Ca}E_ey>X=jEjw7a zHd6vqjN{7!+aO9{&+T_DCZ+gO*l2cf^+suFdK#9%#f|fMr1}~i6N29s5>A&iDOvsm zyOl_j$1|U>JJxcwjsdu{1Kg2F{o&4ywB2G-hCii<7D+9gwr9Hxna#bDOBGAiksx{P z$yjFs*Q4YDIMAggFxDuOu=I~ywIQ``5PiDLTgdt!q=C+?asyl&DbeM%Rc2SZfXLBG zxE_NPDFu@EdM5z{Q;)V~IDKPhzL0%O^pJVzHTADhQ-Dyzpnrr~5;pbYBtO?#ODa{u zni8G2{>>y(Ne<;sx;=mx9JCKO)kf1><#{fcePiQ_!M={%SZ#tUWtQPetM|3mGciQ{ z$Z*+uCY~sHj&R(iB%+HK3V}y3PsRe1H7g34CrZo?&y^j~Cb(F64KA@_88ccf}_QPnl%B^Leh zZVuidEUjL-wxdnW#(kw~6P2nq8dywEmir2dEFf!+b^|4rlVz`Pl>#+6%0zBf>S(t* zF|X`uM+8t6_J*-f<)-lVO03T1TpiE=lJN~o{>Ky)!t`a?m8gf2iF#eG4|REnOFNyu zEI>Zwsu5`j(``Cbaxt8uysn)V8;l%RpOjzSV)Y$0FY z+;L^72B=<*Yx~DBB4DYI!uW?CN$G#+Er3YazZI}OwFw*()!V(+9k;%X*VU7yR*H9fUM_HRhL7vbpe~!5A zwy^&hp}AXyJv%jW{9kY6dgf`5HAfOXr27mf1$ZNTJ~3DTaP~CfePb_OCaG)FL))Lo(d+>P}a z*qP*h`8US&!A80(WqM@^MaH0{u`zZ+9WoiZEyT>=W@YS1@bSl^C%3P+2A1ujR`)d4 z_I}osyA)9GXC1k4xw{+{r0Pf(Nx%=GPJ`DMFQgV*q9#|$?i_b6Trc(&RX=qKqBrCoNxr!puBATUg}{hQA;gu+2peAY6xiqxNJ zg)U#8Vt0Ifh*uKBU;Z%13M zSn`ubj#ftUwW7;DM#kwi>svS8nb&+!;Du(uKd>(Bf_nC*G~d~(Byn2SkebksWg#Cd zn+#?82WFx>tr(@M`+8}++ij?kREukV_3t7=HXHGb9? zdG3f*Z9^bz65+1UL{^QBtqkdVXC1N;lU80Nj)4_%8|zmA6?dz#n<{YT;><2(gENXau|j8k zQVxjL*rk;m@X@M@&>X(6PYPr+;HaaO6Na2v5G@V^0JkFNsRk_{bTJdS+fWo|x5Ru!L?+NEHG54DC_)uoGUwBjtv zgi9SR{_saWybsWWX+;BUakt0sGEJq&s$hV)c(yo#f`-y{Eb1zIl&(h8nNahvOr&U} zTvH=Lg`=c~S@lUS53H!g_~*c9NP?vU5{~b3asfar(mPGutT84n4?M*9-|bh?S5f&| z-)ork-XQWXUrWj<0!j+Y1ZzvcYe|7yFx65`1KjH2(0--{;>g<-|HV^!v3V?;p{~3z z`cC2necJhP&o-1R7&fBn_0I`Xci(M%j*}vNTQ}e%UlqmxIJ}AEuw%ZsaKKQ$>aJ_* zy--hAe8tCJ$1YxkcuRYeMBm2K)ASz={Ww?&y@D13J=FT*5ba#L|7Z-Io^%*AzBmM_ zG3iO&x<~`DF3NE>ij=ScC##^y0~5HmxF0o7iCYy7k2uMRSNPv9=P^>iIGOP*A^#C@ zh;}rso;l8?fUjGqcLK+NJnkXc<#F>QwVQnHQ0vPz76y4ZTi7BgxZF}cJJ|g}#QpIG z8bu?v(pC3K{|H&(kQ4}6s>ntf^v@Kqq^s1zn89?*@aP?KgdFQxZ4{W_+iUPU8K1j2 zxW(f3Xr@PH2zj5QnaJ@Rc}f8E*S0g^yAoLt6l$&4Fzda^{3D`*(@ZF7C=d}d5K#e~ znbo))nZj^c7%84Flw5$ypmL|yh6BD{QKf??Oe`3 zce>upsVDs&+-W$t)AhRkq7k6vv+q*pKfGcRe_qfQR4r03F@Z{DFi)XX0Ow|Toj$-e*z}yD7I}699yy{)v|* z{t@UPy5TBPp+XmPY8K4AUZNs0X_l@9q1C9S5f`tn{t~a}u-L-})3A2iY&3jDaTz*V z-MQ#iNF;t;%&if9`z3_*I6HYMj9B5$NV+t)zn~3%W8%6Q}9EJC~je6e{QZdK( zAB#fxdT%8dZr!XDEAiLb&gL(CTZqWGP~ggUzMSd$vy4xmC~1@0+ggL+kGHlkW+sG zz3+>aK06(a?hc&IyQY<4w|=2%SKDA`T&9%OKX5W!8D36IOEQCIHmpq{4Xrkv7p(hH;unk9aEU1E%Ytpjnn839GYH>(NWhJ8AT^9N8bG}J)zm}z7x5b z|Dgwd@*>P4r5K8&mp)RhFq} zVU5c9J4pP^SS?#BR>nZjy;A?^U%HmoX?*bem{lsrsX*!Hd2?yHbRH$RpC9EJi+N01 zD&fA{-Y>`;N>@z|p*BYoqKe3rP*YG)y0V{&9#-Bdu3sg9p`xVyjt5=kT(*VB8X+fR zTVbw=Xniv3AHkZa3o{Gz$gkeV~S0LJd<{3`@<@?AV>8=6>Vfn35xh!!ht0f`&a^4TL&V%}K!U_9Z zN6E`2sG1WmV&2I{Y z>D0Y>HC@jITMqV2vd0Cd^#GtN8@1SIYaJ-1UABB_4giV8V7}ZnvhTlvhfo%HUF@v=KX&4A0J)}9?KRyJo1x~dpxcPpGVanvn?PKc?4JXF{Ub)D7U`Z`}`7y z20#=vojsq1GjSj3#PL+0bdIfqolT&pTVzjP+}uC0j_m2;=rxI2JOd#QbL_9QQK`iH zC=UDZcSe!R|iV>@#m%P zbnn~ND1jcX>7(4ll?aexR=&*H1~9zeN5&-{+-N4%W9tCf1eRkFopTFaL{ZQzp_0Wq zpH0`FFB&|2Fll^zq^pVA7si_Vgg^~K`uN>=cQ~M&=GedgP7RXW`@G9J$e+z z6m-M?BHkVn+od;Tp%2=kIXAjycUi#OY+Mj1r43htE*^h7+@ANl*fRF>JwI|p(DG!< za2$(*#Y3?)p;1$hoY4iMIhQ^ny3x43P{@cc!Baoj5lIQxaE9o2yhtFpil`TC3kas@ zob>)060qoixQs-ub{^!$!wj}8>7n8flWCWXD1LCYEY!QQHtDcy74^PYZ$POg*o21& zoxHV27HqSCF_saE-3%d7!(~Ig5LrMlN5=ztHvv5o)!rOYkTBV$z3OHYGgLp%`=sLc zb8ESLV~Zf|;n`0di)M6_IpvaHAZ%SS?0CW|W>&SmobW6b%j6ddJJaRbmg{=YP=~_U zS4N!JF{H`bq#i||pKc&(zZxttLo2B<_~1_X{Eo}apu7E+-WX%`{UMtWIU3biMLU{+ z+c&A>ja`L6UK z3n~)O(BYyWS-OD(!h|+fzX~HTBL*DW)+9~p#V3M6nv4D4XM<_yOO<>crUcvVme^0G zI3u%VBNPWuLcV5>DV}X^3=SNSpPsZfocDYhq~mlc+)m8pLiH;%EBUJU#cy3F*l7XN znLbe}c{2tqP56IoePuw@+x9j{N_R(IJf4|MAXV!1+z1Cjw?6s@!5B0>M!2gU?%9u4hWb{cTn(1mS+h)kj z2GYk=QNNnvB{z2LA~4McsD=AKYMDYA2(9_b-vY8f=%*T3{D$?SiFv6P=x@b8J0)AJ zs{wj{lf->J&{hOn0+V}prmwE9<%B=CcKq2VO7r&-_(4Svc8Rc5$6#*svLAdBq8@~^ zh^B6%sN)Cuk`*86W05G1TwzDDK9tbI5l09qFKLa{%AH=rhigsM_fPEMVeJ=8uZcDV z!jy*V(`_Cwq-0d7A6&i9hMctPtO!F+4?R-!U`1xv_9yKZF4u>HXM06`kn>&smA~f8 ztW78Km0=$aU3oT$pui_lG8 zD+M30a0W4ecH0hA{Kl>`heh0kbx zwzI=MAQ|t&Hc24z)V$aKkqC85-Hlj6Tp#K64Gt1`0>I#kPrn5ysq60@l7AdXUtJ1Y z!oOG6u1KZfGrEd4ZhV{I`!)~O9G|*A>xB0b&LJFaY;5%)wYbu&7y*2rEB_H;#)1@Z z5eniyD+oQ^QNQNg&dtsIymH@ryzuu?)QTqV+kPW+4ry#o*Uac6~0Q*Jgw{SF}#X_UnRcBRRh5XO!s;ipJV=(!ld+>>|e~rcB zMAhvH&)*8pdCFmZzt2IUk`b~oJ1f-?ws^>BEFj2*XmH}`i>>RxfD|_^jUTE^! zzCUhq!^y9zkzdauI|XsG>W*k6VoVt@cY|4>4KW+&Qk=+oo zm=|(gItJa3Z)X_LO;pX9N}?U7?pd@~c87qsw?Gn7CVpDEVre94KaH)~x}?l5K8MRC|qSAbfeHNAH~H zL!w7J>Od_?YMmDEIv>TZUH_v;{O>u~k69;t<_g?QLVJQ=?RDTKoTXfi)P+3UVACl9 zcZhhtH8OWWovR9tWD_Gn;8NGzT5!)zcM8lZMsq6?Fb;cO0@1 zD%5@SLC?2ZJT3rNB(RbWmuS9A4qM&K&?toY1S*KAg>@Qap_`lUUE*Ft@i?Af9F9wYCgff8h3~qa z;1azMUa@T0SFSznJ9mnW70b{FEeHp= zP({=U2RKl7g)c3|ntqfInAMU1AAWy*ySrS3e+vDRrZvzkGV-hX8eJ(j`&1b{p7WS` zbCnH~l{86%ia1?auCo`Wq+JUS?h1X3i^`D{|CKzDczok3j7iRq1B6N#4#$s?;T1|` z=W0VRufTIGG?g~W-6`Z;7`Anmu_H8jeRAn=AQgrK2{|w*tpz>F{YXNcrmOOQKzh+0!7qcUq~Zjfk2$ar7lSq zPRz8wnF!uFoNjEQHs~a2SdyMTA3FDF7plxzVs$tkj}0Oe^st$w+IDc-t3-Q3GX1U` zRqzcflAKpX!x}!IxU``LPCR|rhMI8iqi08=E>UTa@t!g=X?wTy$O9A0m_a9N!;%LX z^AmHDyU-7uPaucm%eWv8MyK{odIA~1;d%1)q&po*+R^ujZj&Q*dso`(!$Z0+kpr3q z-V*O_4U~Qr7M`Ra^$XLlD>VE)X#i=nrC7%g)gdz-S+It5&v6&`-he{R)}*_+yiTHCJZrf(jE+eY81FwnL_&t1jQO}}?Vc*Vqo zP3>(h>z}~z!W^Z=m$R0G1owuL>B?%1%MI?WVHs<-am#ZMt+TZKu=O1iU(6yespkUb z=YfzC-*dVd?VU=KB_jTCHjjdT{hU zd&&553{W+!Fph|g7b`_Ke`Gv;?coFz!tLq=#{U6@NNpZUGeb|O+E6oF6}LU?J~Td> zC-)&?>PO&Sb%~pJ+~NNZaY=!=zi?p8l2)x{;{Q_tMBgO6Wdp0Eb4CUt{f0 zsRf8E4Q8*__TGHk_C8nvbQ8Dp<`rEy9$bJQO= z&A#E^9`{X{iaC>N_>+3UPx)kTTs>Sxr=Tj)OlCj0mw?6@cR&B2vW4qFWv$o4Vj=7a z27=35nr@^DGTHh>I&S42JV2e%HPu=|-MwY4CSgi*7(*_MzmomCLY3YN1|_r>oDrS9 zeQ#xe-J9xpr#4_J_ASWKPGgUU2ii!N2$MC3R-e|SNlrc#QV=245XFw7HaA08DP+Yy)C^B?nqkUOmQTht=w9|mIb*klFnd`9YCfh#%HnqAZ-FK0nD0CX zgR!BuB;E)aw_IT7r-Qp58YhfcazY`mn;Edp{=}%jMaJJ_8f|KR%9tXOkdQnL_Q5Z= zn0UG5({#^J#Oy;xtLUMO*O&#;Mq#nkOSk4x^pRxG)$CIT8ujM1EE2gmkUg@uRE)#V zcBm&50IOd|n02VQi^HS%XgX2=tUgMu@58^qBxtmwT2Pq;y958W^_wl~l~AHf_}~?1 zXf1uXU)8gW++daJ!n?_$9E|sLRl@Ju|}aScs)kb z*ET)2;qJ_QM{cIAA43CUUXz@i8|BAYhGI$kGbJ}l)QT#BinR;%DMQ8yeH+1zTcrGM zk_`D-WbhKv zG?2YO0&GaM>T%`z3k-Lk?gqKKlb1pLp9TjvJohPnnqGr~y8a3a4NusEj<2*kpM0qA ziiAFx8Z^8Nv{i@}N`Fz90gyt26Vbd2okfZGD{b5q221oKw z>uc;Y{E)-5GqhPcPsAmI25uS&-GlZItJ2Z=`S1GL%`O(g-1g>lJ;7AW?~k_CAh^Ys z7&obll}x*Y9exr}2rzT=W-K8!_?C$NX6jsrIm{C+2RB8zZ|R^d zJ{Vo1|C(h3T%qD(+}JM#A?9QVc> zPL1^io|77!;c36a_G`?wRC@|2++a$@2AERuF4Kl|d>u@OdWXI4ob}s!VqSA}%?uan zdR2;Mn3u)pi8r={ia<6(jGZKR{cBOzvx2?h6De+AyOxlvreuPtWFoZuCX15HHcn5c zdsqEKGXY$_1W8vGHk>EK3>ENDrrkR?iz3sZYviQi&?n7J#}08KO0wJ=Yxt+`3V()j z9~s{yrJ>IKzs$p4jI)-+>4BmB6tQ~MK5)3?uQ3}gZpO!@Xg?Aibkwmn+$KISNr#g- z{5kAuIJDAt=VYh)B3I;j3WFTa6u$bn(T#J#;+kpD5jXoeiZEB%Yf*YGzSVuVmgaI1 zJ;)nD>TN_C?c)z5wBmF=sI7B$-+WpHkxfyt>|x5Ylh@6ah{wI9$3m7{-Cu27X3;tQ zu<*=wk~Wej@|d5F@~wPJM$H;KDpR)_UTx2i@!;bzb>|z@4C|c$ucm0@! zf=Q5R1wx)FmpK)@J|VO}Fe&ZT00y;5)_C+n!EQ^X{Rv0Atw5!u^%be((%ih5Tr z3+a^(d1;1qqwlW-0S_rdR51UG`wPrMDutOjm80FXjP`oe&0yPS;Yg7lURfVPX-Ql> z(2z-Kj@lXA_IRsKTe207O4PB4lkf4m@0kzjM-sO_P{9i84W;c(t;d>(o5phndaIY8 znNVrpO-pF^LbbXxd!dh7-8XCgq5x0oUhPT`fceHQ)D;G#Bo(sGO~}&xwmbFX=6fCT ziQ_{wU)qddSfFk!5vb>NTLhNPoj0&uJNwh?L$VRarntq>C{LiWOyy!^)|ZLcUVADA zo*zk5{KMEi_a&so6;2uy=c}VLNTcZ2RyRMbtxB*w=CKUq@^|K1)i@@x2hvd`K`KQF zi>iMis7Gi7;i8t;{$k7$LeD6G6r`~Wt%oV?FF4xm1u7-3zsbR67T|F>To}x(r`+&= zla3pocq9rH^&o%EmWQ$F)?A)&u=C7(;h77CPwr8LHCZLHz(VoPo3SU8HIaR{7r{cU z{&AdW;EGhFz5ui=!Q@S`d~CBr=@T%vhTZ>(`K;uYTk}!j=ffu&sKOVm)9euElg-3h z_J*3P-ck1J^^1fQZ^x4!gOx;z$SC$ry{qO0+bsjTHuTvs#@%=I9`~{ChtmeghOI154N%UJzhu!Eo+_~ZW($KP1Do6PX{jsoDCM1PaOEMSnnqu4zyX9$;=-q zY)HIA|AuMiz-t_kjct=Z?V)9WV1z|0PtZas_VQGhc>>+~P&{N6Ra($GfTTx@ z5LpLa>qE|;wC@A^zdlf;3!#%#x=f_94_NIIKIx=ae2^8Nm<66p2tiWKorXAqwQB3K z(d{Oz#786QnJHWpHWcBn(we=2EKl@*D*c5H-2~m}Bi=GzOUsJt;Mcga=n3XV5}$ z85@=^Hl*^rv-;nMbO!a5@D#=XgRK%>!#a35bw`` zm{2z>{!SwNibJNt^=6qG=b3)v9vbqY!nkYN10T-!9AD8pC|h2hUNW=!zR=@mlaVC9 zX6}5H#;Eo!sxM0-n~i7VHwdZkj=tnef|7X7sivIh4z%&CsA80}dt7ANH3eVLgzIfp z1#D=zB+DrqyIenCNC~+^X%cJ_YWI^fGO)kc_*d%q!)MlQi(?PDtTB$hkE=hDbt`|x z1crPl5Hl{7t94s6$0@jtqA7Tu6+ytOU@I;LFhujCR>GmEfNs?s0_|-?>5Yr)Di8iR z2*yGG6A0D;!)M{3Gt3l4QL1m+FP9l5ZcOLl&#uVN)JkOsZ%duQHJ+#pyv;I4;1KsN z*IA*b?*-YoW{@H)dJQF8GJXmNo|%0Xet#D8Go|%1P$_%e{`=@*5W!#sCERyKbwb_a z%-4ra6~Ik-YBYuE^O2Lfxrsk+orDUWt<tx_hD{4@ zfYQd;Qf3bPiahEjqN%fUH-xViwuL=iE;cpPt`}3TimrREkDK>}uX`@*g?u)qY^2b_ zX10IXw;@~@uLiWX+w2ZWBN&C>m#4U~7Wv%c4y1lP2qxzh+}gjCHPWcPy`F2lzRz^f zKI?6FU3J>L1%a{COnIFt6+O|9tGha`tz~b#p3_K5U%$@3n%fq>oIkdO-KW7Jh-;Y0 z9|HBN=gMpMvWI^8K^{&O(&gS&xU`2%kY1m*Pmj{nU#>~Jef4dd;(_H*JkU>i`sW*c zyBk^kHQ{EV-3nd{ndqm70lWdlyG-ix{<)Fns$YsSpYIH0N_c23c*X@E44c}6JF^u& z&u5?8CzI%oe8J`}8 z@=AT*CD&N=jT()XUf+-Vy+j3#71)tYC?e1U8tMTWqE?Q+m)-Nr4|j2GpC!j)VJo|T z8@3a*13RysTuHfJjJva6)Ii%WI`qV@X^-B~67{^|Xg}Gmj&XC{*Ac-G3qc;yhxbnL zF0Z?ryEw+BVbiQHrUQMbSyS6*Wh*G7eSLWzT=;w!$F>b_ zXXE`lLKi3&HUeL(9eR@@ag&~+w7Qy%jwaa&xX5Osa-br7MQEZ#e0j>1yS)9*QBG7h z0=_Y-|2!Jec%Y}1m}LnSO}xjY?lJKvnN&A1G1ywY=KZoati4A`XucOa?=zBT+>xX6Q6;GF+U{_zcU3uc6QaDObr>B zZ}!4X-Jqz|-!PnWIsW#U4mH*v`?*omm0r1U%_9U(srz5i+bI2Bo;u~ycM_KA#mGf# z->9O?B)UdXV%@#;g~C(wm_M)%#muiLqxAi@#v+8@yN<4KQ$5O)`?h#7@OuZ&iX2`N z*O%g^Fkms>tIV0@mEe?O{EFUAnf~%LAeURKRtpl`+Rz)=;k9Qs#GM@mqq(4FRB7Dk zT?d0s7ZE@IPG+oGK`~%AVh&b|qMw;PsH-`sUZ6&o7)#q-;E{+ekc4m{`U`iFA-!EO z5)5MOKyN2X`y@_;nWE56`Leme@nT;`{2K^th^S4`uu#0UDq*ij{TU9$RxlxRQV@uC^#_F^$T(s)OX;Km!0Z*JM{EI zwq8QLh$n0vv=DG5jz&V(%jPWmwX_yl8M*e{*L^#5HZhb05gI3}x9)y#Gi-dNNPpjK zB0@PFKa@#~Gl-EyC^6LC$I|XMA;CG^!#-y^GWNal%F<6C7)>OGPbfkou-PDT*WQi# z%@PE?Tvv%Ze!K1~R>y*IEp`WoWc#w3;id6dT%>zdkE@x+h-0vExUxKcD6ho#-EsBb zmd}m?5Fm8Yz=~w+UnWBgauQZAj!eD4IGXkO*=#yW{{0FnnHR}!C!GL;o>PHB$eDU&+CImAZ_?W1;geS)a**{w5O^dGoB zJ>)~X>5;AuDh>WI1nl~;*9`>h-=%&h7T|-zHEuq>^P6rs^7jub0?g3{3IZHhu`nlt zHvLJRGGID!Z+g3sr-ajaO(YPE!$surgL#p^?^dg~-Q(H|IGMjW2Vz~nKV1-fq#yH= z1=>4;0c{Q*om(61(-y@nWPiDzM`FG(+=gU+5+$UlA+p&%=e>77_1k3uJu+67*E}SW zBOL!dQwxVQ8HrGgpL6i!Adcv(iJZZ(pqPP3$m)*Z7D1zQ>G%$qs<$N~B^0;S-Jk#t2P4aC)O^`& zdahMgCVrPhavw4}JT+uv9MQ*~Y{YxA3Iay#@OT`T;gPl>p1B}8s?T4SEI5qRhrP=LLj3B z+Q|F9YE5&1$9Byf1HQbLNLz1g6dw(XQKu0_%iji14hq!SSLXPSB?@(p_?qOD{|&xC zL)%?^n$WiILsriDV4Lz6KO5tj0*7LK*TbDB*RMMPfz$Wczm=iV< zG0?$X=567SBKwNoN@?`+RGxVP(Z(g;nr@o;?cu_FW|>EcO&q;_9#`TtGkk^Qv6CG0 z2KeQ>*9iUMgJKHC;sVtk{4Oh@x$&5ZdzykYe{wb3=n&j0UTft$@ z%{u+pkWyr8$Fsq`%&jIfBbvt`Xg>#6RV043ZCC`6;91T+Hx#Kp;Q5TFTt+_8{F%7^ z>eX{;vJUiCBBM`qSePj?lC@&L6wlRvueP_!Se(4}VzypTv*5W<2izB`iN{}*0!cip zx~vY0)Xf);%8<+h^++9?d@c+ql=zEvocI|M#6>px(gpts$#0ia#j2{krm6xrq^#+f zcR6Jta#_=xs%hl0&T}QjJzqd1jI^78}eiQ4|GgxX^5axmJ&jsIq(v)k=bAJk?iYNO}UWKVP z!D9Q(O|dP1UxTqip$UXMixiI3Z!C@F?{4|LHT9{yXD68ke;KET(n!$|y?2~*sR1y~ zZC``-nGIl^K?y7h-t{+-x^8EWY~Pl%k`d>nQ$34qsoTPxGed*@cLz`Xqo>M>OI zKOwa(2!8<~%Wi}$8{+?k!Fp<_&GaK|TB;lP;JYeh0; zq6n=4Bs>#j<4}>Gw80>`SfGBcb$O8NRCu%c4m(|ZS`%&6LpIKZps^rWY&xbV1{UAF z|8v5C#RC1dZ(c?vs~g9z9AqZo>|&Ei4ul`uDP>di(ul#FcQ_^QFXOefWUJZZZnD5! zlqR%pHbC{s>n#>*V*?AGNiFcy3H9mIe3rK$ubravo6$H1vQ`a-%o<|N?`-lCN)sxR z_7&YllpLNYcUnPjBlG?A0M8NKc>Y&T)u`pR3~tzsL7gP$2W2S;Jl-Nc`*bvsqb_%F6z`PTJZvZ9_xW6=m>s+O>Ll zG6y^qPR`WvGP(p2jCY%nnto}-c&q#zwgvQ`z6b=P*AFVG+R)-S+(e~)+H zPw%7LMn~N0tC+is)ICw%(MKD~DaI+uxQy4{!l3?L$wP;4&HBdj-^|7wRXBxIW=(Ed z1Izbv{TY5xG2pjR+joh93atw9GAw3HY!N>6g=8FkRYW(ZfRr&K$G$O(y8n+jR=Hhh z%VsUJ_Aev#QW}{adbAyHQ(6m*^mtz8Y2UOMW?`e3Tb3`qjWJE~+%Hr8>Qw*MWOuJN zA5*i>jx9b8S`)u|`u`>81(4JBe{xnjg){;=ZExh93O}d>a`Kb5G;Cb5B3=xfs7z#8 zqlKG0A2%NbBTn~iv$(hTl=PGF|689`PDAtm)2H1UK@iaA{Ea?6jp~o#$LPUBTY)0S zD&$S1M9J|S*ELrlpvrvCJoaCNVr$5A7(*xE)BRg?dda4ap?@Wuh0! z`8`=mx@=db37EZxn;Xqb#g&Z>kL^cn3ErhWH|~_Mr7#&3F7kRFLF}I1IB4xn zRDj5F`m|?^HkEwS-IowGR?-4@U*L8c17Ci}wXFXCE&s|8gAf4ihcCY`squ;@8}KK6 zfyFy~DRNB>MAOBkMFBXd-WoMpY`<5s-<*Zd!OC;JNW^YMN{=jwo_=$(RVP(BxSdHw;!ftXrLlD@eno6yHpfN zKH(GC%-seL($znvJbtS>CU$T4#in+x?wSw&(j1R{CxO4P4>=OF1NJaU{5EvDLV*Px zHZ#Y%1sxXiWhq2p;$h!M@6yr$IOd7r%9lq#84WlK`yE z_WRFJtZ1=M8BrVk`Hz-GKUR`>JnXMr%nR115K`%V|rCC8m^xEQKxE)e{4t?Uv5tR|{B;WKcJKRowxBqI8 z@##a&AfwV@UsH~5touPamMcI5C@Gh6X3(m@Cq9Kao8)gm@Jj{Dz%EX-{=zW_V`*?m z#6Z4nU!oM>)*)u77Vmsiq$$uCXtDniR@!K6Q{_fjV;uu{-e=plufzq;D+>g@o!KN& zkv09#GzuaXjV(%KcGsO%v!4nIm` z2kG4(%syXJ2qB1QX%y&eARsRFZT|$(UwSEfnIhRhHF4SPC>^L1scJfHz~2cGYY1g- zE;H8cg3X849uX^154>BbimHnc=!ggsAEsZ$2IR~-kdwhJVNa+2j{-6XN;|ma0X}^* z$21DQLu$xT99>hv7RV+(h8TE1@%<#_lkTHiu?+J1p(|XYN+;1yG|Sv2V1Y&bF{37! zhK%K3fU+Xtz*PYtf1}XYbTIESB#NZqv2)&W9x^IW4&vU-9QM~NPo7)Y60q7 zABN>F^gNqSblARnyv2_q}}dK@D0!V&$LL^!0;NjTs6(bsgS zw_jt#W(lqxQu@JtBEn5A;0dq2yv9MZcW`U`bI?(n&u{CB`b@(9kz_Wv;Q(u5A(eHq z3tkIwlst|gR+<`EsCv@qTNKI#oHH<@!|n3O9jg!^gX!8XcGu+5-W?wY2fySf4I zGt6hQCf|F?s!z|_puxIAUe+$kT6vNU;)5%a{z8kzkbByc$kXXg{e$%B71>c#3Qc`% zLj0e7a?69JzuZ0!vfu8j@>DCg*)GBpxI_USQ)rzm)HAQ47ZfJ_-7T+h0H*bR{?P{p z8*_&bh8sg$1(tN1erXwZ?QlOc5DpN3rpLWiVoS>HVwqkPYi)>zr*78!Q=csM`7HJe zLb>`=6>!}1yyCutY*@GgRt#euU3|QE%tLcsmEEo3g;SFI)RIQtCuY>Ht_(FS=IjEq zwrBL#K0B4qg%!SoU^buqr_bPM^0hHBv$3+fQ^5b2=SOE&TolN)68HG>0{7aiuOcYS zS1#`1zTCzAlDakVG*5ARr*eA_y_xL(r#r}CbId=@IjoW`qCC z;r>I=nY%u-wS}CWMKvP0ee~IWS%VaZLpCq-KuXEz$dQb*n?>Hi2`7);bD2mcK=UF^ z!pT1)i|+2I8}HCH#Y4ACy@eXR6g%rY-JeexM@1&f?g01g>6&V2D;%eLna3`48tp*C z*wu3@=La_9#;?pcpA7O33-hOSaZTCoi z#Icjmq@`(QO~Wjqoth)PpsxAOo%0Ik7D~-ke%lA3w`?LTlq2h5I8lnxZ}8?||K)+V zRm;PV&fi}R0V+AieG8pua1ud4mvH+)+b0f$oFZ+AT)Y%llFqwOL_ITHLS7>gokM5e z$=ikh$ILD2A30QiyjM{oqkVnQfARfp%#T0qrfy$Mm0NtCTT*oZvwb8#Qz#3BOf{Z$ z-tOg;;Nq|C@4!dW_j1-7mA?FzByfoIT%ZRI2i%$i`RCCU)>?>ROdsduP^b>E|H=aTCZ+dD!?uAKouygl- zdl4lluP?j1PRr)H~@v}M~tzG zcK4>OLjYWgH$D8?mD9u_cm`G^3l^wvFwyr$pr9bERk66W!3D&e>k?XRty!P)_on#Z zHNcZSY({;E^!FZ8N;8&YAAb;cD)#O4KX45IuED@+B))S>O*BZ~Yc)Qzqj95Df(-x`f1bb!~=x18FX$^UQesQs63P#~_ zRK)UcV)l?|?>1vUT};t2PdCM!%XtsZMNf`koeeQzV-cP4R&o$-Y=(AF!^qRg=!nz; zjB!*Rdt#vI$mVP$sE)E{748f?v`TwHlf)WQXkasP1ecVWdE3cLd$;^i$pg&077No_ z{rdIN%k0sJs*_mTi+93T-7TR)#v

ukMHiukJL`Z`!2LhI9IH268Opb+oLgsGw@5 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 IfHwsF59F1!S^xk5 literal 0 HcmV?d00001 diff --git a/resources/master_data/_수식문서_틀.md b/resources/master_data/_수식문서_틀.md index 7974922bf..5de01fab2 100644 --- a/resources/master_data/_수식문서_틀.md +++ b/resources/master_data/_수식문서_틀.md @@ -76,7 +76,7 @@ - 금액 줄 = `이름` · `규격?` · `단위` · `비목`(노무비 · 재료비 · 경비 · 묶음) · `수량?`(식 · 없으면 1) · `단가`(식) · `묶음?`(묶음 이름) · `기호?`(뒤 금액 줄이 부름) · `자리?` · `번지?` · `합밖?` · `출처?`. - 줄 금액 = 수량 × 단가 → 비목마다 끝수(`자리` › 문서 `끝수.줄`) → 합. 비목 「묶음」 = 단가가 단가산출 묶음 → 노 · 재 · 경 각각 수량 ×. - 수량 0 = 금액 0(단가가 비어도). 값 없음(빈 입력 · 표 줄 없음 · 요소 값 없음) = 그 줄만 비움 · 까닭 · 합에서 뺌. -- `합밖: true` = 번지엔 쌓되 비목 합 · 단계에서 뺌. `번지` = 금액번지 이름(그 줄 비목 금액이 쌓임). +- `합밖: true` = 번지엔 쌓되 비목 합 · 단계에서 뺌. `합밖: true` + 비목 비움 = 금액만(수량 × 단가 · 끝수 · 기호) · 비목 칸 없음(소계 보임 · 원파일 810-2). `번지` = 금액번지 이름(그 줄 비목 금액이 쌓임). - `단계`(문서 칸) = `[{이름, 단, 줄 [금액 줄 이름], 제외}]` — 단 1 = 제 줄 · 단 k = 제 줄 + 아직 안 담긴 아래 단 단계 · `제외` = 찍되 위 단계 · 비목 합에서 뺌. - 묶음 = 금액 줄 `묶음` 이름이 같은 것끼리 — 묶음 하나 = 「계」 · 둘 이상 = 묶음마다 「소계」(줄 금액 합) + 「합계」. 묶음 소계는 보이기만 — 합계 = 아래 끝수 규칙. diff --git a/resources/master_data/_원파일파서_틀.md b/resources/master_data/_원파일파서_틀.md index 14872cc5c..abd5d268c 100644 --- a/resources/master_data/_원파일파서_틀.md +++ b/resources/master_data/_원파일파서_틀.md @@ -34,6 +34,7 @@ | 품명 · 규격 · 단위 | `\x0e` · `\x13` · `\x15` 첫 조각 | Name · Size · Unite | 비움 | | 수량 | — | GN | — | | 단 | Level | — | 계 단 1~5 | +| 색인 | Index(-20 = 소계 구간 첫 줄 · -1 = 소계에서 뺌) | — | — | | 연결 · 연결뜻 | LinkIndex · `LINK` 뜻 | 같음 | 줄 종류(빈 · 글 · 계 · 대입 · 참조 · 율) | | 비목 | SCheck 음수 -1 L · -2 M · -3 S · -4 R · -5 T / 율 · 소계 양수 1 M · 2 L · 3 S · 4 R | 율 줄 SCheck | 참조 · 율 꼬리 L · M · S | | 자원 | {코드 · 종류 · 표 · 이름 · 규격 · 단위 · 저장} | 같음 | {코드 · 종류 · 비목 · 옮김 · 이름 · 규격 · 단위 · 저장} | @@ -77,3 +78,11 @@ - EST — 옵션 파일(datestoption.opt) · 원가 서식(wongadat) · 기계 구성(MachMainDat) 은 구조 줄로 안 옮김. - STmate — BDQTY.DBF(일위대가 구성) · SYSINFO.DBF 난독화 · 차수 2~4 금액 칸 안 옮김 · 코드 머리 W 뜻 모름. - 원파일 없는 것(북부청 2 · 2016 사방 · 수목) = 엑셀 길. + +## 6. 수식 문서로(810-2) + +- 길 = 원파일 → 둘 꼴(`M02_Doc_FromNative.pack` · 실무자료 산근 자리 칸 `원파일`) → 블록 하나 `{로직, 원본}`(EST `M02_Doc_NativeEst` · STmate `M02_San_Emit.stmate`) → 가져온 식 SK → `M02_Doc_Import.derive` 수식 문서. +- 원파일 우선 — 같은 공사(엑셀 산근 블록 계 = 원파일 같은 번 블록 계) 엑셀 HP 에 붙음 · 그 블록은 원파일로 · 원파일 없는 블록 · 엑셀만 = 엑셀 길. +- EST 줄 — 자원 줄 = 호표(단가 `` · 수량 식 · 변수 이름) · 세 줄(101 · 104 · 105 같은 코드 노 · 재 · 경 · 같은 수량 식) = 로직 값묶음 한 줄 · 소계 61 = 합 밖 덧줄(출처 `원파일 소계` · 문서 비목 칸 비움) + 아래 줄이 소계 비목으로 합에 듦(-20 · 머리 줄까지) · 율 58 · 62 = 덧줄(줄참조 · 구간 합) · 합계 = 글 · 변수 줄 = 중간(분수 그림 = 위아래 줄 칸 · 결과와 맞을 때만 식). +- 표지 — 못 읽은 줄 = 보인 값 얼림 + 「참고 · …」 · 품셈 조건 글(값 없음) = 「참고 · 추정 — …」 · 문서 수 하나 변수 출처 = 「원파일」. +- 일위대가 — EST HeadMainDat = 실무자료 호표 꼴(`hopyo`) · STmate = 호표 없음(산근만). diff --git a/resources/master_data/scripts/master_doc.py b/resources/master_data/scripts/master_doc.py index 99d8b73ad..cccd98d11 100644 --- a/resources/master_data/scripts/master_doc.py +++ b/resources/master_data/scripts/master_doc.py @@ -478,7 +478,9 @@ def check(doc: dict) -> list[dict]: uses[head] = uses.get(head, []) + need(line.get("식"), head, False, head) for at, line in enumerate(doc.get("금액") or []): where = f"금액 {line.get('이름') or at + 1}" - if line.get("비목") not in (*COSTS, "묶음"): + if line.get("비목") not in (*COSTS, "묶음") and not ( + line.get("합밖") and not line.get("비목") + ): out.append(_mark("금액 줄", f"{where} 비목 「{line.get('비목')}」")) for k in ("수량", "단가"): if k == "단가" or line.get(k) not in (None, ""): diff --git a/resources/master_data/scripts/master_doc_calc.py b/resources/master_data/scripts/master_doc_calc.py index e17bb8ac5..6f0b661b3 100644 --- a/resources/master_data/scripts/master_doc_calc.py +++ b/resources/master_data/scripts/master_doc_calc.py @@ -404,13 +404,15 @@ def _money(run: _Run, doc: dict, rules: dict): ) price = run.expr(line.get("단가"), where, scope) kind = line.get("비목") - parts, why = {}, None + parts, why, bare = {}, None, None if isinstance(qty, Stop) or isinstance(price, Stop): stopped, why = True, (qty if isinstance(qty, Stop) else price).why elif isinstance(qty, Blank): why = qty.why elif not isinstance(qty, Decimal): stopped, why = True, run.mark(Stop(f"{where} 수량이 수 아님", "셈 틀림", where)).why + elif qty == 0 and not kind and line.get("합밖"): + bare = Decimal(0) elif qty == 0: parts = {k: Decimal(0) for k in (COSTS if kind == "묶음" else (kind,))} elif isinstance(price, Blank): @@ -427,6 +429,8 @@ def _money(run: _Run, doc: dict, rules: dict): ) elif kind in COSTS and isinstance(price, Decimal): parts = {kind: qty * price} + elif not kind and line.get("합밖") and isinstance(price, Decimal): + bare = qty * price # 비목 없는 합 밖 줄(소계 보임 · 810-2) — 금액만 · 비목 칸 비움 else: what = ( "묶음 값 — 칸(.계 · .노무비 …) 필요" @@ -437,6 +441,8 @@ def _money(run: _Run, doc: dict, rules: dict): rule = line.get("자리") or rules["줄"] parts = {k: cut(v, rule) for k, v in parts.items()} amount = sum(parts.values(), Decimal(0)) if parts else None + if bare is not None: + amount = cut(bare, rule) if i not in skip: _add(running, parts) if line.get("기호"): diff --git a/resources/tester/test_810_2_native_doc.py b/resources/tester/test_810_2_native_doc.py new file mode 100644 index 000000000..dd4be6446 --- /dev/null +++ b/resources/tester/test_810_2_native_doc.py @@ -0,0 +1,259 @@ +# ruff: noqa: F811 — 임시 층 fixture(world)를 test_m02_labor_ref 에서 받아 씀 +"""810-2 지킴 — 원파일 구조 줄 → 수식 문서(`M02_Doc_NativeEst` · `M02_Doc_FromNative`) · 원파일 우선. + +(a) 전수 — EST 여섯 · STC 일곱 산근 블록 모두: 가져온 로직 → 수식 문서 셈(엑셀 단가 그대로) = 원파일 + 저장 금액(STmate 계약단가 = 낙찰률 버림 뒤) · 검산 줄 틀림은 모두 표지 줄(표지 없는 틀린 줄 0) +(b) 꼴 — 소계 = 합 밖 · 비목 칸 비움(문서 셈 금액만) · 기계 세 줄 = 묶음 한 줄 · 변수 = 이름(상수 아님) + · 분수 그림 공식 = 변수 식 · 수 하나 변수 = 숫자 연결 + 출처 「원파일」 · 품셈 조건 글 = 「추정」 표지 +(c) 문서 셈 거울 — 비목 없는 합 밖 줄 파이썬 = TS +(d) 올림 길 — 원파일 = 같은 공사 엑셀 HP 에 붙음 · 가져온 식 = 원파일 · 원파일만 = 새 HP(EST 호표 · + STmate 호표 없음) · 원파일 HP 호표 → 일위대가(SC) 금액 = 원파일 · 엑셀만 = 엑셀 길 그대로 +원파일 · 실무 엑셀 없으면 그 시험만 skip(다른 PC). +""" + +from __future__ import annotations + +import math +import sys +from decimal import Decimal as D +from functools import lru_cache +from pathlib import Path + +import pytest + +ROOT = Path(__file__).resolve().parents[2] +HERE = Path(__file__).resolve().parent +for p in (ROOT, HERE): + if str(p) not in sys.path: + sys.path.insert(0, str(p)) + +import helper_m02_hopyo_golden as golden # noqa: E402 +from test_810_1_estx import FILES as EST # noqa: E402 +from test_810_1_stc import FILES as STC # noqa: E402 + +from M02_MasterTemplete import M02_Doc_FromNative as fn # noqa: E402 +from M02_MasterTemplete import M02_Doc_Import as dim # noqa: E402 +from M02_MasterTemplete import M02_Hopyo_Build as hb # noqa: E402 +from M02_MasterTemplete import M02_Hopyo_Excel as hx # noqa: E402 +from M02_MasterTemplete import M02_Hopyo_Store as hs # noqa: E402 +from M02_MasterTemplete import M02_MasterTemplete_Store as store # noqa: E402 +from M02_MasterTemplete import M02_Sangeun_Doc as sd # noqa: E402 +from M02_MasterTemplete import M02_Sangeun_FromHopyo as fh # noqa: E402 +from M02_MasterTemplete import M02_Sangeun_Imported as imp # noqa: E402 +from resources.tester.test_m02_labor_ref import world # noqa: E402, F401 — 같은 임시 층 + +WHO = {"이름": "sub3임시"} +COST = (("L", "노무비"), ("M", "재료비"), ("S", "경비"), ("T", "계")) + + +def _file(path: Path) -> Path: + if not path.exists(): + pytest.skip(f"원파일 없음 {path.name}") + return path + + +@lru_cache(maxsize=2) +def native(kind: str, tag: str) -> dict: + path = _file((EST if kind == "EST" else STC)[tag]) + return fn.read(path.name, path.read_bytes()) + + +@lru_cache(maxsize=1) +def whole(): + return imp._whole() + + +def sk_of(out: dict) -> dict: + """{로직, 원본} → 저장 없는 가져온 식 SK(만들기 몸과 같은 꼴 · 키 = 시험용).""" + row = out["로직"] + sk = {"키": "SK-999999", "이름": row["이름"], "단위": row["결과단위"].split("/", 1)[1]} + sk |= {"바탕": None, "입력값": {}, "덮개": {}, "뺀줄": [], "더한줄": []} + sk[imp.KEY] = {"로직": row, "원본": out["원본"], "단가기준": "엑셀"} + return sd.clean(sk, None, whole()) + + +def doc_and_money(out: dict) -> tuple[dict, dict, dict]: + sk = sk_of(out) + doc = dim.derive(sk, None, whole()) + return sk, doc, dim.run(doc, sk, whole()) + + +# ── (a) 전수 ───────────────────────────────────────────────────────────── +def _sweep(saved: dict) -> dict: + stat = {"블록": 0, "같음": 0, "표지없는틀린줄": 0, "다름": []} + for no, blk in fn.numbers(saved).items(): + out = fn.emit(saved, no) + sk, _, got = doc_and_money(out) + mine = {c: got.get(k) for c, k in COST} + nag = (out["원본"].get("계약") or {}).get("낙찰률") + if nag: # 계약단가(B09 몫) — 원파일 저장값은 낙찰률 뒤 + for c in "LMS": + mine[c] = math.floor(round(float(mine[c]) * nag / 100, 6)) + mine["T"] = mine["L"] + mine["M"] + mine["S"] + want = blk.get("저장") or {} + same = all( + mine[c] is not None and abs(float(mine[c]) - float(want.get(c) or 0)) < 0.5 + for c, _ in COST + ) + stat["블록"] += 1 + stat["같음"] += same + if not same: + stat["다름"].append((no, blk.get("이름"))) + marked = {int(m.split(":")[0]) for m in out["원본"]["표지"] if m.split(":")[0].isdigit()} + lines = imp.check(sk, whole())["줄"] + stat["표지없는틀린줄"] += sum(1 for x in lines if not x["같음"] and x["행"] not in marked) + return stat + + +@pytest.mark.parametrize("tag", list(EST)) +def test_est_every_block_equals_saved(tag: str) -> None: + stat = _sweep(native("EST", tag)) + assert stat["블록"] and not stat["다름"] and stat["같음"] == stat["블록"], stat["다름"][:5] + assert stat["표지없는틀린줄"] == 0 + + +@pytest.mark.parametrize("tag", list(STC)) +def test_stc_every_block_equals_saved(tag: str) -> None: + stat = _sweep(native("STC", tag)) + assert stat["블록"] and not stat["다름"], stat["다름"][:5] + assert stat["표지없는틀린줄"] == 0 + + +# ── (b) 꼴 ─────────────────────────────────────────────────────────────── +def _block(no: int) -> tuple[dict, dict, dict]: + out = fn.emit(native("EST", "거창"), no) + _, doc, got = doc_and_money(out) + return out, doc, got + + +def test_subtotal_out_of_sum_no_cost() -> None: + out, doc, got = _block(7) # 지장목 제거 — 인부소계 822.5 · 기구손료 10 % + sub = next(x for x in doc["금액"] if x["이름"] == "인부소계") + assert sub["합밖"] and "비목" not in sub and sub["출처"] == dim.SUB + line = next(x for x in got["줄"] if x["이름"] == "인부소계") + assert line["금액"] == D("822.5") and line["비목"] == {} and line["합밖"] + rate = next(x for x in doc["금액"] if "인부소계" in str(x.get("단가"))) + assert rate["비목"] == "경비" and not rate.get("합밖") + assert (got["노무비"], got["재료비"], got["경비"]) == (1437, 58, 210) + + +def test_machine_one_line_bundle() -> None: + out, doc, got = _block(1) # 측구터파기 토사 — 굴삭기 노 · 재 · 경 세 줄 + rows = [x for x in out["로직"]["호표"] if (x.get("자원") or {}).get("갈래") == "기계"] + assert len(rows) == 1 and rows[0]["종류"] == "로직" and rows[0]["수량"] == "(1 / Q)" + assert rows[0]["이음"] and rows[0]["이음"].startswith("로직(GC") # 시간당 기계경비 로직 + money = [x for x in doc["금액"] if x["이름"] == rows[0]["이름"]] + assert len(money) == 1 and money[0]["비목"] == "묶음" + line = next(x for x in got["줄"] if x["이름"] == rows[0]["이름"]) + assert line["비목"] == {"노무비": D("2523.3"), "재료비": D("832.5"), "경비": D("1049.7")} + + +def test_variables_by_name_and_fraction_formula() -> None: + out, doc, _ = _block(1) + mids = {m["이름"]: m["식"] for m in out["로직"]["중간"]} + assert mids["Q"] == "반올림(((((((3600 * q) * K) * f) * E)) / (Cm)), 2)" or "Cm" in mids["Q"] + assert {"q", "K", "f", "E", "Cm"} <= set(mids) + by = {v["열쇠"]: v for v in doc["변수"]} + nums = [v for v in by.values() if (v.get("연결") or {}).get("갈래") == "숫자"] + assert nums and all(v.get("출처") == "원파일" for v in nums) + assert not any(x for x in out["원본"]["표지"] if "공식 글 못 읽음" in x) + + +def test_guess_mark_for_condition_text() -> None: + out, _, _ = _block(7) + assert out["원본"]["확정"]["추정"] >= 1 + assert any("추정" in x and "품셈 조건" in x for x in out["원본"]["표지"]) + + +# ── (c) 문서 셈 거울 ───────────────────────────────────────────────────── +def test_bare_out_of_sum_line_mirror() -> None: + import test_802_1_formula_doc as t + + doc = t._doc( + [], + [], + [ + t._man("갑", "2", "100", 기호="C_갑"), + {"이름": "소계", "단위": "식", "수량": "1", "단가": "C_갑 + 0.07", "합밖": True}, + {"이름": "율", "단위": "식", "비목": "경비", "단가": "소계 × 10 ÷ 100"}, + ], + ) + doc["금액"][1]["기호"] = "소계" + want = t.mc.calc(doc, t.Fake()) + assert not want["표지"] and want["노무비"] == 200 and want["경비"] == 20 + assert want["줄"][1]["금액"] == D("200") and want["줄"][1]["비목"] == {} + got = t._ts({"문서들": {"맨": doc}, "대상": ["맨"], "기록": {}, "글": [], "표": []}) + t._same(t.ml._norm(want), got["답"]["맨"], "맨") + bad = dict(doc, 금액=[{**doc["금액"][1], "합밖": False}]) + assert any(m["갈래"] == "금액 줄" for m in t.mc.calc(bad, t.Fake())["표지"]) + + +# ── (d) 올림 길 ────────────────────────────────────────────────────────── +def _excel_hp(folder: Path, tag: str) -> str: + src = golden.FILES.get(tag) + if src is None or not src.exists(): + pytest.skip(f"실무 엑셀 없음 {tag}") + data = src.read_bytes() + parsed = hx.read_book(src.name, data) + row = hs.save(folder, src.name, parsed, WHO, None, hs.fingerprint(data)) + fh.keep(folder, row["키"], src.name, data) + return row["키"] + + +def test_upload_native_joins_excel_and_wins(world) -> None: + folder = world["personal"] + est = _file(EST["거창"]) + with store.at(folder): + hp = _excel_hp(folder, "거창") + before = fh.emit(folder, hp, 15) + assert not before["원본"].get("원파일") # 엑셀만 = 엑셀 길 + got = fh.upload_native(folder, est.name, est.read_bytes(), WHO) + assert got["붙음"] == [hp] and got["키"] == hp and got["원파일"] + again = fh.upload_native(folder, est.name, est.read_bytes(), WHO) + assert again["붙음"] == [hp] # 다시 올려도 새 HP 없음 + assert len(hs.rows(folder)) == 1 + made = fh.make(folder, hp, 15) # 전석 메쌓기 — 안쪽 산근 둘 + 굴삭기 + sk = store.read("sangeun", made["이름"])["문서"] + assert sk["가져온"]["원본"]["원파일"] and made["검산"]["같음"] + refs = [x for x in sk["가져온"]["로직"]["호표"] if x.get("참조")] + assert len(refs) == 2 # 산근 속 산근 = 형제 SK 참조(797-1) + doc = dim.of(sk) + assert doc["가져온"]["원파일"] is True + ans = dim.run(doc, sk) + assert (ans["노무비"], ans["재료비"], ans["경비"]) == (74880, 7029, 12306) + # 엑셀 먼저 · 원파일 나중의 반대 — 원파일 HP 가 있으면 엑셀 올림에 붙음 + other = world["company"] + with store.at(other): + fh.upload_native(other, est.name, est.read_bytes(), WHO) + hp2 = _excel_hp(other, "거창") + assert fh.emit(other, hp2, 1)["원본"].get("원파일") + + +def test_upload_native_alone_hopyo_to_sc(world) -> None: + folder = world["personal"] + est, stc = _file(EST["장수"]), _file(STC["봉화"]) + with store.at(folder): + got = fh.upload_native(folder, est.name, est.read_bytes(), WHO) + assert got["원파일"] and not got.get("붙음") and got["호표수"] == 3 + out = hb.build_all(folder, folder, got["키"], None, True, 1) # 제1호표 = SC + 부르는 SK + assert [x["번"] for x in out["만듦"]] == [1] and out["같음"] == 1 and not out["실패"] + assert out["단가산출"] and all( + store.read("sangeun", k)["문서"]["가져온"]["원본"].get("원파일") + for k in out["단가산출"] + ) + st = fh.upload_native(folder, stc.name, stc.read_bytes(), WHO) + assert st["원파일"] and st["호표수"] == 0 # STmate 일위대가 구성 못 읽음 — 산근만 + made = fh.make(folder, st["키"], next(iter(fn.numbers(native("STC", "봉화"))))) + assert made["검산"]["같음"] + with pytest.raises(store.StoreError): + fh.upload_native(folder, "깨진.estx", b"PK\x03\x04garbage", WHO) + + +def test_router_branch_by_extension() -> None: + import inspect + + from M02_MasterTemplete import M02_Hopyo_Router as router + + src = inspect.getsource(router._upload) + assert "from_native.is_native(name)" in src and "upload_native" in src + assert fn.is_native("가.ESTX") and fn.is_native("나.stc") and not fn.is_native("다.xlsx")