From 5b2b73f5d5096491282adefd872c9994457b4b4a Mon Sep 17 00:00:00 2001 From: xsl Date: Wed, 4 Nov 2026 10:20:29 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E52=E5=8F=B7=E5=8F=91?= =?UTF-8?q?=E9=99=85=E7=BA=BF=E6=8E=A5=E5=8F=A3=E5=B9=B6=E9=99=90=E5=88=B6?= =?UTF-8?q?GPU=20worker=E6=9D=A5=E6=BA=90IP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 保留5号历史三档实现,新增中下庭高度定位、扶正裁切、矩形叠加与30案例对比页。 worker仅允许本机和配置白名单访问;网关不增加IP限制。空图片URL字段改写限定为52号,保持旧接口兼容。同步接口、裁切与部署文档。 验证:113项测试通过;1项历史数值基线失败,在未修改的a3fddbb版本复现。浏览器验证5/52及30案例对比页通过。 --- .gitignore | 1 + app.py | 289 ++++++++++++++- docs/实现说明.md | 23 +- docs/接口52图片裁切扶正规划.md | 119 ++++++ docs/接口IP白名单.md | 29 ++ docs/接口文档.md | 159 +++++++- gateway/app.py | 8 + gateway/forward.py | 18 +- gateway/stub_worker.py | 10 + hair-worker.service | 2 +- hairline/face_landmarks.py | 12 +- hairline/framing.py | 218 +++++++++++ hairline/height_rule.py | 117 ++++++ hairline/reference/framing_profile.json | 43 +++ hairline/service.py | 79 +++- ip_access.example.json | 3 + ip_access.py | 77 ++++ run_worker.sh | 4 +- scripts/calibrate_hairline_framing.py | 25 ++ scripts/compare_hairline_height.py | 122 +++++++ static/framing_reference.png | Bin 0 -> 532770 bytes static/hairline_height_compare.css | 33 ++ static/hairline_height_compare.js | 254 +++++++++++++ static/hairline_reference_box.js | 62 ++++ static/integration.html | 13 + static/test_interface52.html | 418 ++++++++++++++++++++++ static/test_interface52_compare.html | 52 +++ static/test_interface5_compare.html | 3 + tests/fixtures/hairline_height_cases.json | 38 ++ tests/test_api.py | 211 ++++++++++- tests/test_framing.py | 122 +++++++ tests/test_gateway_hairline_routes.py | 27 ++ tests/test_gateway_nullable_images.py | 69 ++++ tests/test_hairline_height.py | 91 +++++ tests/test_ip_access.py | 101 ++++++ 35 files changed, 2826 insertions(+), 26 deletions(-) create mode 100644 docs/接口52图片裁切扶正规划.md create mode 100644 docs/接口IP白名单.md create mode 100644 hairline/framing.py create mode 100644 hairline/height_rule.py create mode 100644 hairline/reference/framing_profile.json create mode 100644 ip_access.example.json create mode 100644 ip_access.py create mode 100644 scripts/calibrate_hairline_framing.py create mode 100644 scripts/compare_hairline_height.py create mode 100644 static/framing_reference.png create mode 100644 static/hairline_height_compare.css create mode 100644 static/hairline_height_compare.js create mode 100644 static/hairline_reference_box.js create mode 100644 static/test_interface52.html create mode 100644 static/test_interface52_compare.html create mode 100644 static/test_interface5_compare.html create mode 100644 tests/fixtures/hairline_height_cases.json create mode 100644 tests/test_framing.py create mode 100644 tests/test_gateway_hairline_routes.py create mode 100644 tests/test_gateway_nullable_images.py create mode 100644 tests/test_hairline_height.py create mode 100644 tests/test_ip_access.py diff --git a/.gitignore b/.gitignore index a131c55..b86d202 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ gateway/config.json # worker 配置(含鉴权密码,不入 git) worker_config.json +ip_access.json # ComfyUI Basic Auth 密码(不入 git) password.txt diff --git a/app.py b/app.py index dcf5025..96b4f28 100644 --- a/app.py +++ b/app.py @@ -194,6 +194,10 @@ async def internal_token_auth(request: Request, call_next): 本地起步),生产务必通过 worker_config.json / 环境变量配置密码。 """ path = request.url.path + from ip_access import rejection + denied = rejection(request) + if denied is not None: + return denied if path == "/" or path.startswith(_AUTH_EXEMPT): return await call_next(request) if path.startswith("/api/") and ACCEPT_PASSWORDS: @@ -370,7 +374,7 @@ class ImageJsonBody(BaseModel): # --------------------------------------------------------------------------- -def _run_face_measure_data(image, variant="v1"): +def _run_face_measure_data(image, variant="v1", landmarks_override=None): """接口1测量数值核心:detect → 姿态校验 → 头发/耳朵分割 → measure_face → eye1~eye7。 返回 (data_dict, result, hair_mask, ear_mask),或检测/姿态失败时返回 None。 @@ -385,7 +389,7 @@ def _run_face_measure_data(image, variant="v1"): from face_analysis.pose import estimate_head_pose, check_frontal_face from face_analysis.measure import measure_face - landmarks = detector.detect(image) + landmarks = landmarks_override if landmarks_override is not None else detector.detect(image) if landmarks is None: return None if not check_frontal_face(landmarks, w, h): @@ -1557,7 +1561,7 @@ async def face_features( # --------------------------------------------------------------------------- -# 接口 5:发际线 PNG 生成 +# 接口 5:发际线 PNG 生成(恢复 a3fddbb 历史版本) # --------------------------------------------------------------------------- @app.post( @@ -1727,6 +1731,285 @@ async def hairline_generate( return err(1007, f"处理失败:{ex}") +# --------------------------------------------------------------------------- +# 接口 52:中下庭规则、扶正裁切与矩形叠加预览 +# --------------------------------------------------------------------------- + +async def _generate_hairline52_data(image, gender, hair_styles, use_mask=True, + prompt=None, generate_grow_image=False, + compare_rules=False, normalize_image=True): + """Share measurement coordinates between interface 52 and its comparison page.""" + from fastapi.concurrency import run_in_threadpool + from hairline.service import generate_hairline_pngs_52, get_landmarker + + original = image + framing, normalized_landmarks, landmarks_override = None, None, None + if normalize_image: + from hairline.framing import normalize_portrait + from mediapipe.framework.formats import landmark_pb2 + landmarks = await run_in_threadpool( + get_landmarker().detect, cv2.cvtColor(image, cv2.COLOR_BGR2RGB), include_iris=True) + if landmarks is None: + return None, None + image, normalized_landmarks, framing = await run_in_threadpool(normalize_portrait, image, landmarks) + landmarks_override = landmark_pb2.NormalizedLandmarkList() + for point in normalized_landmarks: + landmarks_override.landmark.add(x=float(point[0]), y=float(point[1]), z=float(point[2])) + fm, reference = None, None + try: + measured = await run_in_threadpool(_run_face_measure_data, image, landmarks_override=landmarks_override) + if measured is not None: + fm, result = measured[:2] + reference = {key: result.vertical[key] + for key in ("brow_center", "nose_bottom", "chin_tip")} + reference["px_per_cm"] = result.px_per_cm + except Exception as ex: + logger.warning("接口52 当前底图测量失败,使用发际线关键点计算中下庭:%s", ex) + res = await run_in_threadpool( + generate_hairline_pngs_52, image, gender, hair_styles, use_mask, prompt, + generate_grow_image=generate_grow_image, height_reference=reference, + compare_rules=compare_rules, + precomputed_landmarks=normalized_landmarks[:468] if normalized_landmarks is not None else None) + if res is not None: + res.update(processed_bgr=image, original_bgr=original, framing=framing) + return res, fm + + +@app.post( + "/api/v1/hairline/generate-52", + summary="接口52 发际线PNG生成", + tags=["人脸分析"], + description=f""" +输入用户照片 + 性别 + 多选发型,各发型 middle 中点统一对齐到眉心上方(中庭+下庭)/2。 +返回设计曲线、生发图、目标高度与定位误差;high/low 旧字段保留为 null。 + +{_image_fields_desc} + +图片同时支持 `multipart/form-data` 文件上传(字段名 `image_file`)。 + +--- + +**入参**(同接口2:先选性别,再多选发型): +- 必填 `gender`(`male`/`female`),决定发型集合(female 7 / male 7)。 +- 必填 `hair_style`(发型序号,逗号分隔如 `1,2,3`),决定返回哪些发际线类型。缺失/越界/非法返回 `1007`。 + `female`:1=ellipse,2=flower,3=heart,4=straight,5=wave,6=bigflower,7=clasicalflower; + `male`:1=ellipse,2=inverse_arc,3=m,4=straight,5=heart,6=Softpetal,7=wave。 +- 可选 `use_mask` / `prompt`:同接口2 的生发控制参数。 + 生发遮罩直接使用新位置的 middle 曲线,与预览保持一致。 +- 可选 `generate_grow_image`(默认 `true`):是否生成生发效果图(ComfyUI 生发,全流程最耗时)。 + `false` 时跳过生发,各发型 `grown_image_*` 恒为 `null`,仅返回设计叠图与中心点。 +- 新增可选 `normalize_image`(默认 `false`):显式传 `true` 时扶正并裁切,长图采用3:4。 + 不传时保留旧调用的原图尺寸与坐标。测试页显式开启此参数,保留实际像素、不放大图片。 + +**返回说明**: + +- `hairline_images`:**选中发型**的列表,数量 = 所选发型数,`order` = 发型序号。每项含: + - `image_middle_url`:新高度规则的透明发际线 PNG;`image_high_url` / `image_low_url` 固定 null。 + - `height_placement`:旧/新中心坐标、移动距离和目标误差(像素)。 + - `grown_image_url`:该发型的**生发图**(生发失败时为 `null`)。 + - `hairline_type`:发际线类型 key。 + worker 返回 `*_base64`,网关落盘后改写为 `*_url`。 +- `best_hairline_center_point`:**首个选中发型**的 **middle 档**发际线曲线**面部中间点**坐标, + 以**当前底图像素**为基准(左上角为原点,x 向右,y 向下)。 +- `high_hairline_center_point` / `low_hairline_center_point`:旧字段,固定 null。 +- `height_rule`:中庭、下庭、目标上庭高度、目标中心与测量来源;`face_measure` 为当前底图测量。 +- `input_image_*`:处理后底图,须用它叠加发际线;`original_image_*`:处理前图片。 +- `coordinate_space`:默认 `original_image`,开启预处理后为 `processed_image`。 +- `framing`:是否标准裁切、旋转角、前后尺寸及双向坐标变换;关闭预处理时为 null。 +""", + responses={ + 200: { + "description": "成功", + "content": { + "application/json": { + "example": { + "code": 0, + "message": "success", + "request_id": "mock-request-id", + "data": { + "hairline_images": [ + {"hairline_type": "ellipse", "image_middle_base64": "iVBORw0KGgo...", "image_high_base64": None, "image_low_base64": None, "grown_image_base64": "iVBORw0KGgo...", "order": 1}, + {"hairline_type": "flower", "image_middle_base64": "iVBORw0KGgo...", "image_high_base64": None, "image_low_base64": None, "grown_image_base64": None, "order": 2}, + ], + "best_hairline_center_point": {"x": 540, "y": 430}, + "high_hairline_center_point": None, + "low_hairline_center_point": None, + "face_measure": { + "face_total_height_cm": 13.76, + "four_courts": { + "top_court_cm": 3.44, "upper_court_cm": 3.44, + "middle_court_cm": 3.44, "lower_court_cm": 3.44, + "ratios": {"top_court": 0.25, "upper_court": 0.25, + "middle_court": 0.25, "lower_court": 0.25}, + }, + "seven_eyes": { + "eye_width_cm": 3.44, "face_width_cm": 24.08, + "inter_eye_distance_cm": 3.44, + "ratios": {"eye_width": 0.143, "inter_eye_distance": 0.143}, + "eye1": 3.44, "eye2": 3.44, "eye3": 3.44, "eye4": 3.44, + "eye5": 3.44, "eye6": 3.44, "eye7": 3.44, + }, + "landmarks": { + "hair_top": {"x": 540, "y": 120}, + "hairline": {"x": 540, "y": 430}, + "brow_center": {"x": 540, "y": 740}, + "nose_bottom": {"x": 540, "y": 1050}, + "chin_tip": {"x": 540, "y": 1360}, + }, + "hairline_source": "segmentation", + "head_pose": {"yaw": -1.39, "pitch": 2.49, "roll": -0.06}, + }, + }, + } + } + }, + }, + 400: { + "description": "参数错误 / 图片识别失败", + "content": { + "application/json": { + "example": {"code": 1001, "message": "无法识别人像", "request_id": "x", "data": None} + } + }, + }, + }, +) +async def hairline_generate_52( + image_file: Optional[UploadFile] = File(default=None, description="上传图片文件(JPG/PNG)"), + image_url: Optional[str] = Form(default=None, description="图片 URL"), + image_base64: Optional[str] = Form(default=None, description="图片 base64(需带 data:image/...;base64, 前缀)"), + gender: Optional[str] = Form(default=None, description="性别 male/female(必填)"), + hair_style: Optional[str] = Form(default=None, description="发型序号逗号分隔(必填,如 1,2,3)。female:1-7 male:1-7"), + use_mask: bool = Form(default=True, description="生发是否启用 inpaint 遮罩(同接口2,测试对比用)"), + prompt: str = Form(default="填充遮罩区域的头发,人物增加一点磨皮", description="ComfyUI 提示词(同接口2),会替换工作流节点60的文本"), + generate_grow_image: bool = Form(default=True, description="是否生成生发效果图。false 时仅返回新规则发际线叠图与中心点"), + normalize_image: bool = Form(default=False, description="新增可选开关,默认false保留原图尺寸和坐标;true先扶正再裁切,长图采用3:4。测试页显式开启"), +): + if gender not in ("male", "female"): + return err(1004, "gender 必填且只能为 male / female") + + # hair_style 必填(同接口2):解析逗号分隔,缺失/越界/非法 → 1007 + max_styles = {"female": 7, "male": 7}[gender] + hair_styles = _parse_hair_styles(hair_style, max_styles) + if hair_styles is None: + return err(1007, f"hair_style 必填且为 1..{max_styles} 的整数(逗号分隔),收到 {hair_style!r}") + + raw, e = await resolve_image_bytes(image_file, image_url, image_base64) + if e is not None: + return e + + from hairline.framing import decode_portrait + image = decode_portrait(raw) + if image is None: + return err(1008, "图片格式不支持(仅 JPG / PNG)") + + try: + res, fm = await _generate_hairline52_data( + image, gender, hair_styles, use_mask, prompt, + generate_grow_image=generate_grow_image, normalize_image=normalize_image) + if res is None: + return err(1001, "无法识别人像") + + hairline_images = [] + for it in res["images"]: + ov = it["overlays"] + hairline_images.append({ + "hairline_type": it["hairline_type"], + "image_middle_base64": _rgba_png_b64(ov["middle"]), + "image_high_base64": None, + "image_low_base64": None, + "grown_image_base64": (_png_to_jpg_b64(it["grown_png"]) # 生发图 JPG(失败为 null) + if it.get("grown_png") else None), + "order": it["order"], + "height_placement": it["height_placement"], + }) + c = res.get("best_centers") or {} + def _pt(p): + return ({"x": p[0], "y": p[1]} if p else None) + data = { + "hairline_images": hairline_images, + "best_hairline_center_point": _pt(c.get("middle")), + "high_hairline_center_point": _pt(c.get("high")), + "low_hairline_center_point": _pt(c.get("low")), + "height_rule": res["height_rule"], + "guide_landmarks": res["guide_landmarks"], + "face_measure": fm, + "framing": res["framing"], + "input_image_base64": _jpg_b64(res["processed_bgr"]), + "original_image_base64": _jpg_b64(res["original_bgr"]), + "coordinate_space": "processed_image" if normalize_image else "original_image", + "width": res["processed_bgr"].shape[1], "height": res["processed_bgr"].shape[0], + } + return ok(data) + except Exception as ex: # noqa: BLE001 + logger.exception("接口52 处理异常") + return err(1007, f"处理失败:{ex}") + + +@app.get("/api/v1/debug/hairline-height-cases", include_in_schema=False) +async def hairline_height_cases(): + path = os.path.join(os.path.dirname(__file__), "tests", "fixtures", "hairline_height_cases.json") + with open(path, encoding="utf-8") as f: + return ok(json.load(f)) + + +@app.get("/api/v1/debug/hairline-framing-reference", include_in_schema=False) +async def hairline_framing_reference(): + from hairline.framing import load_profile + return ok(load_profile()) + + +@app.post("/api/v1/debug/hairline-height-compare", include_in_schema=False) +async def hairline_height_compare( + image_file: Optional[UploadFile] = File(default=None), + image_url: Optional[str] = Form(default=None), + image_base64: Optional[str] = Form(default=None), + gender: str = Form(default="female"), + hair_style: str = Form(default="1,2,3,4,5,6,7"), + generate_grow_image: bool = Form(default=False), + normalize_image: bool = Form(default=True), +): + if gender not in ("female", "male"): + return err(1004, "gender 必须为 male / female") + styles = _parse_hair_styles(hair_style, 7) + if styles is None: + return err(1007, "hair_style 必须为 1..7 的整数,逗号分隔") + raw, error = await resolve_image_bytes(image_file, image_url, image_base64) + if error is not None: + return error + from hairline.framing import decode_portrait + photo = decode_portrait(raw) + if photo is None: + return err(1008, "图片格式不支持") + try: + res, fm = await _generate_hairline52_data( + photo, gender, styles, prompt="填充遮罩区域的头发,人物增加一点磨皮", + generate_grow_image=generate_grow_image, compare_rules=True, + normalize_image=normalize_image) + if res is None: + return err(1001, "无法识别人像") + h, w = res["processed_bgr"].shape[:2] + return ok({ + "gender": gender, "width": w, "height": h, + "input_base64": _jpg_b64(res["processed_bgr"]), + "original_base64": _jpg_b64(res["original_bgr"]), + "framing": res["framing"], + "coordinate_space": "processed_image" if normalize_image else "original_image", + "height_rule": res["height_rule"], "face_measure": fm, + "guide_landmarks": res["guide_landmarks"], + "results": [{ + "hairline_type": item["hairline_type"], "order": item["order"], + "old_overlay_base64": _rgba_png_b64(item["legacy_overlay"]), + "new_overlay_base64": _rgba_png_b64(item["overlays"]["middle"]), + "height_placement": item["height_placement"], + "grown_image_base64": _png_to_jpg_b64(item["grown_png"]) if item["grown_png"] else None, + } for item in res["images"]], + }) + except Exception as ex: + logger.exception("接口52 高度规则对比失败") + return err(1007, str(ex)) + + # --------------------------------------------------------------------------- # 接口 9:头发遮罩生成 # --------------------------------------------------------------------------- diff --git a/docs/实现说明.md b/docs/实现说明.md index 8803648..f68061d 100644 --- a/docs/实现说明.md +++ b/docs/实现说明.md @@ -13,21 +13,22 @@ ``` 客户端 ──HTTPS──> 外网网关(gateway/) ──HTTP(X-Internal-Token)──> worker(GPU 机, app.py) │ 薄代理 + 落盘改URL │ 跑算法(本地模型/ComfyUI/change_hair) - └ 接口4(豆包)/99(特殊点) 本机实现(不转发) └ 接口1/2/3/5/6/7/9/10/11/12 + 工具路由 + └ 接口4(豆包)/99(特殊点) 本机实现(不转发) └ 接口1/2/3/5/52/6/7/9/10/11/12 + 工具路由 ``` - **worker**(`app.py` + `face_analysis/` + `hairline/`):跑真正的算法,除 ComfyUI/change_hair 走本机 回环外无外网依赖。对 `/api/*` 校验 `X-Internal-Token`(密码在 `worker_config.json` 的 `accept_passwords`); `/health` 模型就绪才返回 200。监听 **8187**(systemd `hair-worker.service`,也可 `./run_worker.sh` 手动起)。 另有 worker 本机的工具路由:`/api/swapHair/v1`、`/hairColor/v2`(CORS 代理转发 change_hair:8801)、 - `/api/v1/redraw`(直接 ComfyUI 重绘)、`/api/v1/debug/*`(免鉴权调试)。 + `/api/v1/redraw`(直接 ComfyUI 重绘)、`/api/v1/debug/*`(免Token调试,仍受IP限制)。 + 所有动态路径先校验直连来源IP:允许本机与网关`49.232.51.171`,其余返回HTTP403/code1010;`/static/`除外。配置见[`接口IP白名单.md`](接口IP白名单.md),网关侧不增加IP限制。 - **网关**(`gateway/`):薄反向代理,健康检查/派发/鉴权/把 worker 的 `*_base64` 落盘改成 `*_url`。 网关本机实现的接口(不转发 worker):**接口4**(调外网豆包)与**接口99**(纯 CPU 特殊点检测, 直接 import 同仓库 `face_analysis/special_points`,`_if99_lock` 单路排队)。 - **图片三选一**:所有接口图片入参 `image_file`/`image_url`/`image_base64` 严格三选一(接口3 是 `marked_image_*`)。 -- **响应信封**:`{code, message, request_id, data}`;业务错误用 `code`(HTTP 一律 200)。 +- **响应信封**:`{code, message, request_id, data}`;业务错误用 `code`(HTTP 200);IP拒绝为HTTP403/code1010,Token错误为HTTP401/code1009,依赖健康异常为HTTP503。 -### base64 → URL 映射(网关落盘改写,递归进数组、可空保留 null) +### base64 → URL 映射(网关落盘改写,递归进数组) | 接口 | worker 字段(内部) | 对外字段 | |------|--------------------|----------| @@ -36,6 +37,7 @@ | 2 | `results[].image_base64` / `results[].grown_image_base64`(可空) | `results[].image_url` / `results[].grown_image_url` | | 3 | `hair_growth_image_base64`(可空) | `hair_growth_image_url` | | 5 | `hairline_images[].image_{middle,high,low}_base64` / `grown_image_base64`(可空) | `hairline_images[].image_{middle,high,low}_url` / `grown_image_url` | +| 52 | `hairline_images[].image_{middle,high,low}_base64` / `grown_image_base64`、`input_image_base64` / `original_image_base64` | 同名 `*_url`,空图片也改为`*_url: null` | | 9 | `steps_common.*_base64`、`bisenet|segformer.{hair,closed_region,final_overlay,mask}_mask_base64` 等 | 同名 `*_url` | | 10 | `steps_common.*_base64`、`bisenet|segformer.{base_mask,contour,band_overlay,mask}_base64` 等 | 同名 `*_url` | | 11 | `steps.{input,baseline,hair_mask,mask_overlay,mask,swap_raw,alpha,final}_base64` | `steps.*_url` | @@ -43,13 +45,14 @@ | 4 | (网关本机产出,无图片字段,`features` 为 JSON 字符串) | — | > 实现建议:递归遍历 data,凡 key 以 `_base64` 结尾就落盘改 `_url`,自动覆盖嵌套/新增字段。 +> 兼容约定:接口52显式开启空图片字段改名;接口2/3/5等旧接口仍保留空图片的`*_base64: null`字段名。有图片时均落盘为`*_url`。 > **图片格式**:接口1 标注图含透明用 **PNG**;接口2/3/5 是不透明照片用 **JPG**(小很多,~9×)。 > 网关落盘按内容嗅探扩展名(PNG 头→`.png`,否则 `.jpg`)。 ### 错误码 `1001` 无法识别人像 | `1002` 分辨率过低 | `1003` 非正面 | `1004` gender 必填/非法(接口2/5/7)| -`1006` >1MB | `1007` 图片参数错误(0或多个)/未预期异常 | `1008` 格式不支持。 +`1006` >1MB | `1007` 图片参数错误(0或多个)/未预期异常 | `1008` 格式不支持 | `1009` Token鉴权失败 | `1010` worker来源IP不允许或白名单配置无效。 --- @@ -99,6 +102,15 @@ - **做什么**:入参同接口2(`gender` + 多选 `hair_style` 必填)。对每个选中发型 → `middle`/`high`/`low` 三档发际线叠图 + 生发图 + 首个选中发型的面部中间点坐标。 - **怎么实现**:复用接口2 的 502 点渲染管线,三档分别用 `hairline_texture[/_high|/_low]` 同名贴图渲染叠图;生发同接口2(ComfyUI inpaint),**黑模板固定取 `hairline_texture_black/`(middle)**,每发型 1 张生发图。`best_hairline_center_point`=眉心 x × 首个选中发型 middle 档发际线 y。 +### 接口52 发际线PNG生成 `/api/v1/hairline/generate-52`(worker) +- **预处理**:`hairline/framing.py`先扶正9→152,再按高(3÷0.9)L、宽2.5L(3:4)做原像素裁切,人物相对原3L规则缩小约10%。L为9→152距离;眉心位置沿用已扶正参考图比例。长图的标准窗口不足时,求原图内最大的3:4窗口,通过可行区域约束保留全部人脸关键点,并尽量贴近目标眉心位置;无法保留人脸时回退仅扶正。其余图片空间不足时仍仅扶正、去除旋转空角。参考图与参数由`scripts/calibrate_hairline_framing.py`生成。公开接口为兼容旧调用默认关闭预处理,`normalize_image=true`开启;规则页显式开启,对比调试页默认开启。返回当前底图、原图及双向坐标矩阵。 +- **目标高度**:`上庭=(中庭+下庭)/2`,用当前底图测量的未取整像素坐标(眉心9、鼻翼下缘94、下巴152)算目标中心。测量失败时用发际线管线同编号点计算并标注来源。 +- **模板定位**:原有502点/贴图生成形状,`hairline/height_rule.py` 将每种 middle 曲线沿面部向上方向平移、校准中心 Y,保留曲线形状与倾斜。此规则仅接口52使用,接口2保持原逻辑。 +- **生发**:移动后的预览曲线直接生成黑线和重绘遮罩,再送ComfyUI,避免预览与黑模板位置不一致。 +- **裁切叠加预览**:测试页新增“裁切发际线叠加”。`static/hairline_reference_box.js`共享同一个162/389/9/152参考框几何,按原图像素裁切middle透明图层,再叠加到处理后人像;四栏顺序为原图、middle、裁切发际线叠加、生发图。 +- **兼容**:high/low不再生成,图片与中心点字段保留为null。网关`gateway/forward.py`仅为接口52开启空图片`*_base64`→`*_url: null`,旧接口空字段名保持原样。部署52路由时同步该改写;网关不增加IP限制。`face_measure`为当前底图测量;新增`height_rule`与各项`height_placement`说明设计目标与实际误差。 +- **测试**:规则页`static/test_interface52.html`,对比页`static/test_interface52_compare.html`;运行`scripts/compare_hairline_height.py`默认保存全部30张×男女各7型,共420组对比。每人一行,顺序为未裁切原图、单张旧规则图、全部新规则样式,支持位置对照、额头特写、同图叠线和上传新图。新图可叠加162/389两侧、底边经过9、高度为9→152距离70%的参考框。原图与叠图按需加载。 + ### 接口9 头发遮罩 `/api/v1/head/mask`(worker) - **做什么**:人像照 → 头发遮罩 + 全流程分步可视化。 - **怎么实现**(`face_analysis/head_mask.py`):MediaPipe 底部分割线(21/68/104/69/108/151/337/299/333/298/251 连线,21/251 水平延伸)→ 线以上为上半区 → BiSeNet 与 SegFormer 双路头发分割、逐列向下填充到分割线得闭合区域(头发+额头)→ 外缘朝 151 内缩 `erode_cm`(默认1.2cm,虹膜标定) → 最终遮罩。返回 `steps_common` + `bisenet`/`segformer` 两组各四张图。 @@ -126,6 +138,7 @@ ## 3. 部署 / 环境要点 **worker(GPU 机,本机 = gpu_worker 角色)** +- 启动使用`./run_worker.sh`或`hair-worker.service`,均显式传`--no-proxy-headers`以保留直连来源IP。部署时复制`ip_access.example.json`为`ip_access.json`并核对网关IP;运行配置不入Git,改动即时生效。旧启动方式也应补上此参数,详见[`接口IP白名单.md`](接口IP白名单.md)。 - Python **3.10.12**(本机 venv 在 `./venv`);`numpy<2`(1.26.4),`scikit-image==0.24.0` (**别升 0.25+,会顶 numpy≥2 顶崩 mediapipe**)。 - 本机 **RTX 4090**:venv 实装 `torch 2.7.1+cu128`,CUDA 可用(BiSeNet/SegFormer GPU 推理)。 diff --git a/docs/接口52图片裁切扶正规划.md b/docs/接口52图片裁切扶正规划.md new file mode 100644 index 0000000..0bd0917 --- /dev/null +++ b/docs/接口52图片裁切扶正规划.md @@ -0,0 +1,119 @@ +# 接口52上传图片裁切与扶正规划 + +状态:2026-11-04 在原3L规则上将人物显示缩小约10%,裁切高度改为(3÷0.9)L≈3.3333L、宽度2.5L,已接入接口52与对比页。参考图先扶正后重新标定,以下旧预检数值仅为历史记录,当前标准以 `hairline/reference/framing_profile.json` 为准。 + +## 接口拆分 + +- 接口5已按11月2日前最新提交`a3fddbb`恢复:`POST /api/v1/hairline/generate`,返回middle/high/low三档,测试页`/static/test_interface5.html`。 +- 当前新规则完整迁至接口52:`POST /api/v1/hairline/generate-52`,测试页`/static/test_interface52.html`,30案例对比`/static/test_interface52_compare.html`。接口52保留迁移前所有参数和返回字段,页面显式开启`normalize_image=true`。 +- 原`test_interface5_compare.html`书签跳转至52号对比页;公开5号与52号的处理路由、生成函数和网关转发均独立。 + +## 已确定的要求 + +- 仅用于接口52与当前旧/新规则对比页。 +- 先扶正:变换后的9号点与152号点保持同一X坐标,9在上、152在下。 +- 原图空间够时按目标人脸比例和位置裁切;标准窗口不足时,偏长图片在保留人脸的前提下裁为3:4,其余仍仅扶正。3:4无法保留完整人脸时不强裁。 +- 输出保留实际像素尺寸,不为了凑参考图尺寸而放大小图。 +- 当前展示:全部30个案例,每个案例一行,未裁切原图放最前,旧规则图仅一张,新规则男女各7型横排,人物图片完整显示。选择新样式时旧图同步对应形状;失败案例仍保留原图并显示原因。 + +## 已扶正标准(当前生效) + +- 标准图:`static/framing_reference.png`,786×1048,3:4。 +- 两点X均为385.18783691;9号Y为360.65437127,152号Y为725.82510480。 +- 相对位置:9号点 x=49.00608612%,y=34.41358504%。 +- 当前裁切高/L=3÷0.9≈3.3333、宽/L=2.5(3:4),L为9→152长度。参考图自身测得的宽/L=2.15241783589、高/L=2.86989044785作为原始标定记录保留;眉心在画面中的位置比例继续使用参考图数值。 +- 校准旋转约0.25962484°,变换后横向误差约5.7e-14像素。参数取自扶正并去空角后的图,不再使用未扶正原图的比例。 +- 重标定脚本:`./venv/bin/python scripts/calibrate_hairline_framing.py <参考图路径>`。 +- 使用同一套原始检测点作刚体变换与后续测量,避免二次检测抖动破坏轴线竖直。 +- 公开接口新增`normalize_image`默认false,旧请求保持原图尺寸和坐标;显式true开启预处理。规则页主动传true,对比调试页默认开启。响应明确返回`coordinate_space`、当前底图和坐标变换。 + +## 原始参考构图(旧测量) + +[用户指定参考图](https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/misc/20261103_user.jpg) + +测量采用当前发际线管线的MediaPipe FaceLandmarker: + +| 指标 | 测量值 | +|---|---| +| 画面 | 792×1056,3:4 | +| 9号点 | (388.93, 364.62) | +| 152号点 | (387.27, 729.79) | +| 9→152长度L | 365.17像素 | +| 面部轴线距竖直方向 | 约0.26° | +| 9号点画面相对位置 | x约49.1%,y约34.5% | +| 152号点画面相对高度 | y约69.1% | +| 画面宽度/L | 约2.16885 | +| 画面高度/L | 约2.89180 | + +参考图接近竖直。以9号点为定位锚点,用9→152长度作为缩放无关的构图标尺。这里的L仅为眉心到下巴的距离,不是头顶到下巴的全头高度。 + +## 实施流程 + +1. 读取上传原图、处理EXIF方向,再检测人脸关键点。 +2. 用9→152方向计算二维旋转,使转换后两点竖直。不改变脸部比例。 +3. 按本人的L算目标裁切尺寸:高(3÷0.9)L、宽2.5L;令9号点位于裁切画面约(49.0061%,34.4136%)处。高度取最接近的4的倍数,宽=高×3/4,不改变原图像素尺度。 +4. 将裁切窗口四角反算回原图,四角均在有效图片区域内才执行标准构图。采用一次仿射变换合并旋转与裁切,降低重复插值。 +5. 标准窗口空间不足时,偏长图片采用原图内最大的3:4有效窗口,约束所有人脸关键点在框内,并尽量靠近目标眉心位置。若无法保留完整人脸则仅扶正并给出原因。其余图片仍仅扶正,最小去除旋转空角。 +6. 后续测量、分割、旧/新发际线和70%参考框使用同一个处理后底图与坐标系。保留原图及原图/处理后坐标转换关系,防止叠图错位。 +7. 页面展示原图、处理后图、旋转角、是否标准裁切、跳过原因与前后尺寸。旧/新规则对比使用同一处理后底图,避免构图变化混入高度规则差异。 + +## 当前:长图与矩形发际线预览 + +- 长图即使放不下标准人脸占比窗口,也尝试在原图有效区域裁出最大的3:4窗口;通过可行区域约束保留468个人脸关键点,并尽量贴近参考眉心位置。无法完整保留人脸时回退仅扶正,响应说明原因。 +- 案例7从1080×1920裁为1062×1416,保持9→152竖直。长图7、20、21、22、50、51的男女各7型已更新,84组均成功;对比页30张、378组结果统一使用当前规则。 +- 规则页展示原图、middle、裁切发际线叠加、生发图。新增预览使用共享矩形几何裁切透明发际线,矩形外清空透明,底图仍是完整处理后人像。 + +## 人物缩小10%的验证(长图规则加入前) + +- 裁切高=(3÷0.9)L、宽=2.5L,使同样展示尺寸下的人物线性尺寸约为原3L规则的90%。 +- 案例1由828×1104改为918×1224,人脸相对大小约90.20%,差异来自原像素窗口取整;底图、发际线和实际生发图均为918×1224。 +- 对比页保留全部30张。重新计算了1、3、42、43、44、45;其余48组结果验证新窗口仍超出有效范围,且只扶正后的矩阵和尺寸完全一致,复用原定位图并更新裁切参数。 +- 当前生成378组对比,43、44、45的男女组仍显示原图及定位失败原因。布局、眉心比例和9→152扶正方向保持一致。 + +## 历史:3L规则的五个案例验证 + +2026-11-04 按3L规则重跑男女各7型,共70组,失败0组。保留原始像素,不缩放人脸;实际尺寸如下。 + +| 案例 | 原尺寸 | 处理后尺寸 | 实际处理 | +|---|---|---|---| +| 1 | 1088×1406 | 828×1104 | 按3L规则裁切 | +| 2 | 1088×1406 | 1042×1346 | 空间不足,仅扶正并去除旋转空角 | +| 3 | 1088×1406 | 810×1080 | 按3L规则裁切 | +| 4 | 1088×1406 | 1042×1346 | 空间不足,仅扶正并去除旋转空角 | +| 5 | 1088×1367 | 1071×1346 | 空间不足,仅扶正并去除旋转空角 | + +## 历史几何预检(未扶正参考图) + +以下为修改前的预检记录,当前生效尺寸见上表。 + +| 案例 | 原尺寸 | 所需裁切尺寸(约) | 预计处理 | +|---|---|---|---| +| 1 | 1088×1406 | 797×1063 | 可按参考构图裁切并扶正 | +| 2 | 1088×1406 | 1442×1923 | 空间不足,仅扶正 | +| 3 | 1088×1406 | 782×1042 | 可按参考构图裁切并扶正 | +| 4 | 1088×1406 | 1465×1953 | 空间不足,仅扶正 | +| 5 | 1088×1367 | 1463×1950 | 空间不足,仅扶正 | + +## 历史:3L规则的全部30张验证 + +- 按3L规则运行全部30张、男女各7型,共60次请求;55组请求成功,生成385组旧/新规则对比。27张男女均成功,案例43额外生成男性7型。 +- 案例43女性:模板在面部中轴处没有有效曲线;案例44、45男女:扶正后无法保留9/152参考点。三个案例均在对应行显示完整原图和未生成组合的原因,不隐藏失败案例。 +- 页面顺序为未裁切原图、旧规则、全部新规则;案例筛选包括失败图片,重跑按钮运行完整30张。 +- 页面筛选、旧图切换、末尾图片加载及移动端横向浏览均通过;3L调参后再次检查全部输出尺寸与混合成功/失败案例的筛选。 + +## 验收重点 + +- 处理后的9、152号点X差不超过1像素,保证9在152上方。 +- 标准裁切成功时,画面比例及两点位置接近参考构图,保留实际像素,不放大小图。 +- 空间不足的案例明确提示,仍完成扶正。 +- 旧/新规则叠图、参考框与底图坐标一致,原图坐标可通过逆变换还原。 +- 全部30案例均可查看,成功案例显示男女各7型,失败案例显示原图与原因;沿用每人一行、单张旧规则图的展示。 + +## 2026-11-04 提交前 Review 与验证 + +- 接口5的请求处理函数、三档PNG生成函数与`a3fddbb`逐项AST比较一致,测试页逐字节一致;新高度规则、扶正裁切和矩形叠加均在接口52。 +- 修复网关空图片字段改名影响旧接口的兼容性问题:仅接口52开启`*_base64: null`→`*_url: null`,接口2/3/5等旧接口保留原字段名;已增加递归改写和真实转发函数的回归测试。 +- GPU worker所有动态接口启用直连IP白名单,本机和网关`49.232.51.171`可访问;网关侧不启用IP限制。配置与部署见[接口IP白名单](接口IP白名单.md)。 +- `./venv/bin/pytest -q`:113项通过、1项已有失败。`tests/test_pipeline.py::test_numeric_regression`期望全脸总高24.01cm,当前实测22.47cm;从未修改的`a3fddbb`导出代码、夹具后独立运行,同样失败。此次保留历史断言,未通过修改基线掩盖差异。 +- 浏览器实测:接口5返回middle/high/low且保持868×1166;接口52长图案例7返回1062×1416、`status=aspect_crop`,四栏图和裁切边框正常;对比页显示30个案例、378组结果,旧书签可跳转52,未出现页面脚本错误。定位验证均关闭ComfyUI生发,本轮未重复运行耗时的真实生发。 +- 批量结果与上传图位于被Git忽略的`static/annotations/`及`tests/output/`,不随提交分发;新环境执行`scripts/compare_hairline_height.py`重建。420是计划组合数,378为当前成功结果,失败组及原因保留在报告中。 diff --git a/docs/接口IP白名单.md b/docs/接口IP白名单.md new file mode 100644 index 0000000..4f09fd8 --- /dev/null +++ b/docs/接口IP白名单.md @@ -0,0 +1,29 @@ +# GPU worker 接口 IP白名单 + +仅GPU worker使用项目根目录的`ip_access.json`,不存在时仅允许本机。网关不启用IP限制。配置每次请求重新读取,修改后立即生效。现有`X-Internal-Token`鉴权继续有效。 + +```json +{ + "allowed_ips": ["49.232.51.171"] +} +``` + +当前已将网关IP `49.232.51.171`加入白名单;本机回环地址和网卡自身地址自动允许,其余来源返回HTTP403、`code=1010`。支持IPv4、IPv6及CIDR,不自动允许整个内网。 + +worker的所有动态路径统一保护,包括5号、52号、其他业务接口、调试接口、代理接口、健康检查和文档接口。`/static/`下的测试页和图片可正常访问,但页面发出的API请求仍需通过IP限制。 + +启动GPU worker时使用`uvicorn ... --no-proxy-headers`,保留真实连接来源。`run_worker.sh`与`hair-worker.service`已配置该选项。来源被服务器提前改写、地址格式错误或白名单配置无效时拒绝访问。 + +判断依据是直接连接worker的IP,忽略`X-Forwarded-For`、`X-Real-IP`和`Forwarded`,这些请求头不能用于绕过限制。由网关转发的请求按网关IP判断,网关后面的最终用户无需加入worker白名单。网关保持原有鉴权和转发流程,无需部署此配置。 + +`ip_access.json`不入Git;配置格式参考`ip_access.example.json`。本机网卡地址在请求时自动获取。 + +## 部署与维护 + +首次部署复制`ip_access.example.json`为`ip_access.json`,示例已包含网关`49.232.51.171`;已有配置不覆盖。该操作仅在GPU worker执行,网关服务和启动参数保持原样。 + +修改`allowed_ips`后保存为有效JSON即可生效,无需重启;建议写入同目录临时文件再原子替换,避免编辑过程中出现半份JSON。文件不存在时仅允许本机,内容损坏时动态接口一律拒绝。更新程序时保留本机配置文件。 + +IP检查先于Token检查。白名单内请求仍需原来的`X-Internal-Token`;`/health`和`/api/v1/debug/*`等原本免Token的路径仍需通过IP检查。静态页可打开不代表该来源可以调用API。 + +验证命令:`./venv/bin/pytest tests/test_ip_access.py -q`,覆盖本机、精确白名单、CIDR、IPv6、转发头伪造、热更新、全接口拦截与网关不受限制。 diff --git a/docs/接口文档.md b/docs/接口文档.md index 25cf3d0..a1e549b 100644 --- a/docs/接口文档.md +++ b/docs/接口文档.md @@ -20,11 +20,14 @@ | 3 B 端生发 | POST | `/api/v1/hair/grow-b` | | 4 用户特征 | POST | `/api/v1/face/features` | | 5 发际线 PNG 生成 | POST | `/api/v1/hairline/generate` | +| 52 发际线新规则与裁切 | POST | `/api/v1/hairline/generate-52` | --- ## 通用约定 +GPU worker的所有动态接口均启用IP限制:允许本机及`ip_access.json`白名单(当前为网关IP `49.232.51.171`),其他来源返回HTTP403、code=1010;静态页面与图片除外。按直接连接worker的IP判断,网关不启用此限制,已有鉴权继续有效。 + 以下约定适用于全部 5 个接口(最终以联调为准)。 ### 请求 @@ -35,7 +38,7 @@ | 请求方式 | `POST` | | 图片传参方式 | 三选一,三种都支持:① `multipart/form-data` 上传文件、② 图片 URL、③ base64 字符串 | | 字符编码 | UTF-8 | -| 坐标基准 | 所有返回的坐标均以**原图像素**为基准(原点为图片左上角,x 向右、y 向下) | +| 坐标基准 | 默认以**原图像素**为基准;接口52开启预处理时使用响应中的处理后底图坐标(原点为左上角,x向右、y向下) | 图片传参字段(三者**严格互斥**,必须且只能传其一;传了 0 个或 ≥2 个均报错): @@ -81,12 +84,13 @@ | 1001 | 无法识别人像 | 图片中未检测到人脸 | | 1002 | 人像分辨率过低 | 低于最低分辨率要求 | | 1003 | 角度问题,非正面照 | 非正面 / 角度过大 | -| 1004 | gender 必填/非法 | 接口2/5 的 `gender` 缺失或非 `male`/`female` | +| 1004 | gender 必填/非法 | 接口2/5/52/7 的 `gender` 缺失或非 `male`/`female` | | 1005 | 检测到多张人脸 | 默认仅支持单人,检测到 2 人或以上时返回 | | 1006 | 文件超出大小限制 | 单文件超过 1 MB | | 1007 | 图片参数错误 | file / url / base64 未传,或同时传了多个(三者严格互斥) | | 1008 | 图片格式不支持 | 非 JPG / PNG | | 1009 | 未授权 | 缺少或错误的 `X-Internal-Token`(`/api/*` 路径鉴权) | +| 1010 | 来源IP不允许 | 仅GPU worker:直连IP不在本机/白名单内,或来源/白名单配置无效;HTTP403 | --- @@ -518,6 +522,154 @@ --- +## 接口 52:发际线 PNG 生成接口 + +**说明**:入参同接口2(先选性别、再多选发型)。对每个选中发型返回一张 `middle` 设计叠图与生发图。**目标上庭 =(中庭 + 下庭)÷2**,从眉心向上定位;所有形状的中点对齐同一目标。`high` / `low` 已停用,旧字段保留为 `null`。 + +**请求**:`POST /api/v1/hairline/generate-52` + +**IP限制**:GPU worker的所有动态接口统一仅允许本机回环地址、本机网卡地址及白名单;目前白名单含网关IP `49.232.51.171`,其他直连来源需加入`ip_access.json`的`allowed_ips`。该文件支持单个IP与CIDR,修改后立即生效;拒绝时返回HTTP403、code=1010。网关不启用此限制,已有鉴权仍保留。详见[接口IP白名单](接口IP白名单.md)。 + +### 图片扶正与标准构图 + +显式传`normalize_image=true`时,先扶正9→152,再按**高(3÷0.9)×L≈3.3333×L、宽2.5×L(3:4)**裁切,L为9→152的直线像素距离。相对原3L规则,裁切框宽高均扩大约11.11%,同样显示尺寸下人物缩小约10%。高度取最接近的4的倍数,宽度取高度的3/4。眉心定位沿用已扶正参考图:9号点相对位置约(49.0061%,34.4136%)。参考图仍为786×1048,两点X均为385.18784。 + +目标窗口完全在原图有效区域内才进行标准裁切。标准窗口不足时,偏长图片(宽/高<3/4)采用原图有效范围内最大的3:4窗口,尽量贴近眉心目标位置并保留完整人脸,`status=aspect_crop`;人脸放不进3:4窗口时回退仅扶正并返回原因。其余图片空间不足时仍仅扶正、去除旋转空角。不放大小图。**所有叠图与坐标使用响应中的处理后底图 `input_image_*`**,调用方应使用该底图叠加;`normalize_image=false` 可关闭此预处理。 + +`framing`包含处理前后尺寸、旋转角、是否标准裁切、跳过原因、`source_to_processed`/`processed_to_source`仿射矩阵。`status`区分`reference_crop`(标准窗口)、`aspect_crop`(长图3:4裁切)和`rotation_only`(仅扶正);`standard_crop=false`时仍可能有`aspect_crop=true`。`aspect_crop_skip_reason`说明长图无法保留人脸时的回退原因。`original_image_*`保留EXIF方向修正后的上传图,原图坐标可通过逆矩阵还原。 + +### 输入 + +图片参数见「通用约定 → 图片传参字段」。专属参数: + +| 参数 | 类型 | 必填 | 说明 | +|------|------|------|------| +| gender | string | **是** | 性别:`male` / `female`。决定发型集合(female 7 / male 7)。缺失/非法返回 `1004` | +| hair_style | string | **是** | 发型序号,**逗号分隔多选**(如 `1,2,3`),决定返回哪些发际线类型。female:1=ellipse, 2=flower, 3=heart, 4=straight, 5=wave, 6=bigflower, 7=clasicalflower;male:1=ellipse, 2=inverse_arc, 3=m, 4=straight, 5=heart, 6=Softpetal, 7=wave。缺失/越界/非法返回 `1007` | +| use_mask | bool | 否 | 生发是否启用 inpaint 遮罩,默认 `true`。`false` 时用干净原图生成(空遮罩、不烧模板黑线),供测试对比 | +| prompt | string | 否 | ComfyUI 提示词,默认「填充遮罩区域的头发,人物增加一点磨皮」,会替换工作流节点 60 的文本 | +| normalize_image | bool | 否 | 新增可选开关,默认false:保留原图尺寸与坐标。传true开启扶正和裁切;规则测试页显式传true,对比调试页默认开启 | +| generate_grow_image | bool | 否 | 是否生成生发效果图(ComfyUI 生发,全流程最耗时),默认 `true`。传 `false` 时跳过生发,各发型 `grown_image_*` 恒为 `null`,仅返回设计叠图、中心点与高度规则数据,可大幅降低耗时 | + +> 生发划线与遮罩直接取新位置的 middle 曲线;旧规则的头发边界与模板用于保留形状和倾斜,不决定新中心高度。计算使用未取整的像素高度,与四庭测量采用同一 Y 方向;测量主流程失败时用发际线管线的同编号关键点计算,`measurement_source` 标明来源。目标越出图片或无法对齐时返回 1007,不静默回退旧规则。 + +### 高度规则与对比 + +- **参数与字段**:原有8个请求参数、响应外层结构和所有旧返回字段均保留。`use_mask=true`、默认prompt、`generate_grow_image=true`保持原值。新功能只新增可选参数和返回字段;旧请求未传`normalize_image`时保留原图坐标,high/low按已约定保留null,worker仍返回`*_base64`,网关仍返回对应`*_url`。 +- `height_rule`:`middle_height_px`、`lower_height_px`、`target_upper_height_px`、`target_upper_height_cm`(可空)、`target_center`、`brow_center`、`nose_bottom`、`chin_tip`、`measurement_source`。 +- 每项 `height_placement`:`old_center`、`new_center`、`shift_x_px`、`shift_y_px`(正=下移)、`target_error_px`。浮点坐标保留精度,旧中心点字段继续返回取整像素。 +- `face_measure` 为处理后底图的实际测量值,未被设计目标覆盖。 +- `guide_landmarks`:9、150、152、162、251、389 号 MediaPipe 点的图片像素坐标,供对比页绘制参考框。参考框左/右边分别经过162/389,底边经过9,高度为9→152距离的70%;两侧均固定平行9→152。 +- 规则页:`/static/test_interface52.html`;旧/新规则对比:`/static/test_interface52_compare.html`。 +- 规则页每个发型依次展示未裁切原图、middle、裁切发际线叠加、生发图。“裁切发际线叠加”由页面按`guide_landmarks`生成:在相同处理后底图上叠加矩形内的middle PNG,矩形外保持透明;左/右边过162/389,底边过9,高度0.7×9→152,左右边平行9→152。 +- 对比调试接口:`POST /api/v1/debug/hairline-height-compare`,图片三选一、gender、hair_style;默认只出旧/新曲线,可选 `generate_grow_image=true` 额外验证新规则生发。 +- 测试清单:`tests/fixtures/hairline_height_cases.json`(用户指定30张);批量运行:`./venv/bin/python scripts/compare_hairline_height.py`,默认全部30张、男女各7型,共420组。每人一行,未裁切原图放在最前,后接一张可切换样式的旧规则图和全部新规则样式。可用 `--cases 1,2,3,4,5` 指定部分案例。 + +### 输出(data) + +| 字段 | 类型 | 说明 | +|------|------|------| +| hairline_images | object[] | **选中发型**列表,**数量 = 所选发型数**,元素见下表 | +| best_hairline_center_point | object \| null | **首个选中发型**的 **middle 档**发际线曲线「面部中间点」坐标,当前底图像素:`{ "x": number, "y": number }` | +| high_hairline_center_point | object \| null | 已停用,固定 `null` | +| low_hairline_center_point | object \| null | 已停用,固定 `null` | +| input_image_url | string | 当前底图,发际线叠图、参考点和测量值均使用该图的坐标系 | +| original_image_url | string | EXIF方向修正后的上传原图 | +| width / height | int | 当前底图的实际像素宽 / 高 | +| coordinate_space | string | 开启预处理时为 `processed_image`,关闭时为 `original_image` | +| framing | object \| null | 裁切状态、旋转角、前后尺寸、轴线误差及双向仿射矩阵;关闭预处理时为 `null` | +| height_rule | object | 中庭/下庭、目标上庭高度、目标中心及测量来源,详见“高度规则与对比” | +| guide_landmarks | object | 9、150、152、162、251、389 号点的当前底图像素坐标;参考框实际使用9、152、162、389 | +| face_measure | object \| null | **复用接口1**的四庭七眼测量**数值**(不含标注图)。独立流程,测量失败(无人脸/非正面/分割失败)时为 `null`,不影响发际线主结果。字段结构见下表 | + +`hairline_images` 元素: + +| 字段 | 类型 | 说明 | +|------|------|------| +| hairline_type | string | 发际线类型 key:`ellipse`/`flower`/`heart`/`straight`/`wave`/`bigflower`/`clasicalflower`(female),`ellipse`/`m`/`straight`/`inverse_arc`/`heart`/`Softpetal`/`wave`(male) | +| image_middle_url | string | middle 档发际线曲线**透明 PNG** URL(仅曲线,透明底,**不含人物**,需叠加 `input_image_url` 显示) | +| image_high_url | null | 已停用,保留字段为 `null` | +| image_low_url | null | 已停用,保留字段为 `null` | +| grown_image_url | string \| null | **生发后图片** URL(ComfyUI「植发」效果图,完整人像照片,生发失败或 `generate_grow_image=false` 时为 `null`) | +| order | int | 发型序号(= 传入的 hair_style 值) | +| height_placement | object | 旧/新中心、XY移动距离、目标误差,均为未取整的像素值 | + +> worker 侧返回 `image_middle_base64` / `image_high_base64` / `image_low_base64` / `grown_image_base64`,网关落盘后改写为上表对应的 `*_url`。 +> +> 💡 `image_middle_url` 为透明底 PNG,前端需用绝对定位叠加到 `input_image_url` 上显示(参考[测试页](https://hair.xiangsilian.com/static/test_interface52.html)的 `.img-stack` 叠加结构)。`grown_image_url` 是完整人像照片,直接显示即可。worker返回上述图片的 `*_base64`,网关改写为 `*_url`。 + +`face_measure` 元素(与[接口1](#接口-1四庭七眼测量标注接口)的 `data` 同构,**不含** `annotated_image_*` 标注图字段): + +| 字段 | 类型 | 说明 | +|------|------|------| +| face_total_height_cm | number | 全脸总高度(cm)= 四庭之和 | +| four_courts | object | 四庭数据(顶/上/中/下庭 cm + 占比 ratios),结构同接口1 | +| seven_eyes | object | 七眼数据(眼宽/脸宽/两眼间距 cm + 占比 ratios + eye1~eye7 从左到右 7 段宽度),结构同接口1 | +| landmarks | object | 5 个纵向关键点像素坐标(hair_top/hairline/brow_center/nose_bottom/chin_tip),结构同接口1 | +| hairline_source | string | 发际线来源:`segmentation`(真实分割)/ `estimated`(比例估算)/ `corrected`(发际线贴近头顶、分割不可靠,已按 0.95×中庭反推修正) | +| head_pose | object | 头部姿态角度(yaw/pitch/roll,单位:度) | +| left_position | object | MediaPipe 21 号关键点坐标(左脸定位点),当前底图像素:`{ "x": int, "y": int }` | +| right_position | object | MediaPipe 251 号关键点坐标(右脸定位点,与 21 号镜像),当前底图像素:`{ "x": int, "y": int }` | + +> `eye1`~`eye7` 为从左到右共 7 段宽度,eye1=左耳外段、eye7=右耳外段,某侧耳朵不可见时对应段为 `null`。详见接口1说明。 + +### 网关响应结构示例(normalize_image=false) + +此例未开启裁切,坐标基于原图;`face_measure=null`时仍可按发际线关键点计算目标。网关对接口52的所有空图片字段均返回`*_url: null`。worker直连时图片字段名对应为`*_base64`,图片内容为base64。 + +```json +{ + "code": 0, + "message": "success", + "request_id": "mock-request-id", + "data": { + "hairline_images": [ + { + "hairline_type": "ellipse", + "image_middle_url": "https://hair.xiangsilian.com/static/annotations/mid1.png", + "image_high_url": null, + "image_low_url": null, + "grown_image_url": "https://hair.xiangsilian.com/static/annotations/grown1.jpg", + "order": 1, + "height_placement": { + "old_center": {"x": 540.0, "y": 450.0}, + "new_center": {"x": 540.0, "y": 430.0}, + "shift_x_px": 0.0, "shift_y_px": -20.0, "target_error_px": 0.0 + } + } + ], + "best_hairline_center_point": {"x": 540, "y": 430}, + "high_hairline_center_point": null, + "low_hairline_center_point": null, + "input_image_url": "https://hair.xiangsilian.com/static/annotations/input.jpg", + "original_image_url": "https://hair.xiangsilian.com/static/annotations/original.jpg", + "width": 1080, "height": 1440, + "coordinate_space": "original_image", + "framing": null, + "height_rule": { + "name": "court_average", "formula": "上庭 = (中庭 + 下庭) / 2", + "measurement_source": "hairline_landmarks", + "brow_center": {"x": 540.0, "y": 740.0}, + "nose_bottom": {"x": 540.0, "y": 1050.0}, + "chin_tip": {"x": 540.0, "y": 1360.0}, + "middle_height_px": 310.0, "lower_height_px": 310.0, + "target_upper_height_px": 310.0, "target_upper_height_cm": null, + "target_center": {"x": 540.0, "y": 430.0} + }, + "guide_landmarks": { + "9": {"x": 540.0, "y": 740.0}, "150": {"x": 470.0, "y": 1340.0}, + "152": {"x": 540.0, "y": 1360.0}, "162": {"x": 300.0, "y": 680.0}, + "251": {"x": 770.0, "y": 630.0}, "389": {"x": 780.0, "y": 680.0} + }, + "face_measure": null + } +} +``` + +开启`normalize_image=true`后,`coordinate_space=processed_image`,`framing`包含前述裁切状态和坐标变换,所有发际线图片须叠加到`input_image_url`。原始图片仅用于展示和坐标回溯。 + +--- + ## 接口 9:头发遮罩生成接口 **说明**:输入一张含人头的照片,生成头发遮罩,并返回**每一步的可视化图**(供对比调试)。 @@ -702,6 +854,7 @@ | 3 B 端生发 | `/api/v1/hair/grow-b` | 划线图片 | 检测到的发际线 + 生发后图片 | | 4 用户特征 | `/api/v1/face/features` | 用户照片 | 6 个用户特征字段(脸形/眉形/年龄/动静/性别/基因风格),网关本机实现 | | 5 发际线 PNG | `/api/v1/hairline/generate` | 用户照片 + gender + hair_style(多选) | 每个选中发型 middle/high/low 三档发际线叠图 + 生发图 + 最合适发际线面部中间点坐标 | +| 52 发际线新规则 | `/api/v1/hairline/generate-52` | 用户照片 + gender + hair_style(多选) | 每个选中发型的新规则 middle 设计叠图 + 生发图 + 目标中心坐标;high/low 旧字段为 null | | 9 头发遮罩 | `/api/v1/head/mask` | 用户照片 | 头发遮罩 + 分步可视化(BiSeNet/SegFormer 双路) | | 10 外缘膨胀带 | `/api/v1/head/band` | 用户照片 | 头部外缘带状遮罩 + 分步可视化 | | 11 发际线生发 | `/api/v1/hairline/grow` | 用户照片 + hairline_id | 压低发际线图 + 全步骤可视化(不含重绘) | @@ -716,7 +869,7 @@ - 图片传参:**文件 / URL / base64 三种都支持,严格互斥**(必须且只能传一个,base64 需带 `data:image/...;base64,` 前缀)。 - 默认单人;检测到 2~3 人报错提示客户端;单文件 **≤ 1 MB**;格式仅 **JPG / PNG**。 -- 所有坐标基准:**原图像素**。 +- 坐标基准:默认**原图像素**;接口52开启预处理时使用响应中的**处理后底图像素**。 - 接口 2:提供「美颜」开关 `beauty_enabled`。 - 接口 3:仅传**划线图**(`marked_image_*` 三选一),需返回发际线类型(`custom`)。 - 接口 4:`data` 返回**一个 JSON 字符串**,字段不固定,可随时调整。 diff --git a/gateway/app.py b/gateway/app.py index b96cc37..56d396b 100644 --- a/gateway/app.py +++ b/gateway/app.py @@ -208,6 +208,8 @@ async def index(): "if3_hair_grow_b": "/static/test_interface3.html", "if4_features": "/static/test_interface4.html", "if5_hairline": "/static/test_interface5.html", + "if52_hairline": "/static/test_interface52.html", + "if52_compare": "/static/test_interface52_compare.html", "if6_measure_v2": "/static/test_interface6.html", "if7_hair_grow_v2": "/static/test_interface7.html", "if9_head_mask": "/static/test_interface9.html", @@ -591,6 +593,12 @@ async def hairline_generate(request: Request): return await _proxy(request, "/api/v1/hairline/generate") +@app.post("/api/v1/hairline/generate-52", tags=["人脸分析"]) +async def hairline_generate_52(request: Request): + """接口52:新高度规则、扶正裁切与发际线生成""" + return await _proxy(request, "/api/v1/hairline/generate-52") + + @app.post("/api/v1/hair/grow-v2", tags=["生发"]) async def hair_grow_v2(request: Request): """接口7:C端生发 v2(add_hair2 工作流)""" diff --git a/gateway/forward.py b/gateway/forward.py index 2e6aa40..704c35b 100644 --- a/gateway/forward.py +++ b/gateway/forward.py @@ -88,6 +88,8 @@ def rewrite_base64_to_url( obj: Any, public_base_url: str, static_dir: str, + *, + rewrite_null_images: bool = False, ) -> Any: """递归遍历响应 JSON,将所有 *_base64 字段改写为 *_url。 @@ -95,10 +97,16 @@ def rewrite_base64_to_url( - 支持 data: URI 和原始 base64 两种格式 - 解码 base64 → 保存到 static_dir/{uuid}.png - 删除 *_base64 字段,新增 *_url 字段指向公网 URL + - 接口52显式开启 rewrite_null_images,空图片也返回 *_url: null;旧接口保持原空字段 """ if isinstance(obj, dict): new_dict: Dict[str, Any] = {} for key, value in obj.items(): + if rewrite_null_images and key.endswith("_base64") and value is None: + # Deprecated/optional image fields must keep their external + # *_url names even when no image is generated. + new_dict[key[:-7] + "_url"] = None + continue if key.endswith("_base64") and isinstance(value, str): img_bytes = _decode_base64_value(value) if img_bytes is not None: @@ -118,10 +126,12 @@ def rewrite_base64_to_url( logger.warning("字段 %s 的值无法解码为图片,保留", key) new_dict[key] = value else: - new_dict[key] = rewrite_base64_to_url(value, public_base_url, static_dir) + new_dict[key] = rewrite_base64_to_url( + value, public_base_url, static_dir, rewrite_null_images=rewrite_null_images) return new_dict elif isinstance(obj, list): - return [rewrite_base64_to_url(item, public_base_url, static_dir) for item in obj] + return [rewrite_base64_to_url(item, public_base_url, static_dir, + rewrite_null_images=rewrite_null_images) for item in obj] else: return obj @@ -248,7 +258,9 @@ async def proxy_request(request: Request, path: str) -> JSONResponse: ) # 递归改写 base64 图片字段 - rewritten = rewrite_base64_to_url(worker_json, public_base_url, static_dir) + rewritten = rewrite_base64_to_url( + worker_json, public_base_url, static_dir, + rewrite_null_images=path == "/api/v1/hairline/generate-52") return JSONResponse( status_code=resp.status_code, diff --git a/gateway/stub_worker.py b/gateway/stub_worker.py index 8745d6c..3aa05ad 100644 --- a/gateway/stub_worker.py +++ b/gateway/stub_worker.py @@ -7,6 +7,7 @@ - POST /api/v1/hair/grow-b → mock 响应 - POST /api/v1/face/features → mock 响应 - POST /api/v1/hairline/generate → mock 响应 +- POST /api/v1/hairline/generate-52 → 新规则 mock 响应 鉴权:校验 X-Internal-Token 头,不匹配返回 401。 并发模拟:可通过 ?delay=N 让接口 sleep N 秒(默认 1)。 @@ -213,6 +214,7 @@ def create_app(port: int, password: str) -> FastAPI: # --- 接口5 --- @app.post("/api/v1/hairline/generate") + @app.post("/api/v1/hairline/generate-52") async def hairline_generate( request: Request, x_internal_token: Optional[str] = Header(default=None), @@ -245,6 +247,14 @@ def create_app(port: int, password: str) -> FastAPI: ], "best_hairline_center_point": {"x": 540, "y": 430}, } + if request.url.path.endswith("generate-52"): + for item in data["hairline_images"]: + item["image_high_base64"] = None + item["image_low_base64"] = None + data.update(high_hairline_center_point=None, low_hairline_center_point=None, + face_measure=None, framing=None, height_rule=None, + guide_landmarks={}, input_image_base64=_png, original_image_base64=_png, + coordinate_space="original_image", width=1, height=1) return mock_ok(data, delay=delay) return app diff --git a/hair-worker.service b/hair-worker.service index 91f5acb..992959e 100644 --- a/hair-worker.service +++ b/hair-worker.service @@ -7,7 +7,7 @@ Wants=comfyui.service change_hair-hair.service Type=simple User=ubuntu WorkingDirectory=/home/ubuntu/hair -ExecStart=/home/ubuntu/hair/venv/bin/uvicorn app:app --host 0.0.0.0 --port 8187 +ExecStart=/home/ubuntu/hair/venv/bin/uvicorn app:app --host 0.0.0.0 --port 8187 --no-proxy-headers Restart=on-failure RestartSec=5 diff --git a/hairline/face_landmarks.py b/hairline/face_landmarks.py index 04300e0..d592338 100644 --- a/hairline/face_landmarks.py +++ b/hairline/face_landmarks.py @@ -44,18 +44,18 @@ class FaceLandmarker: self._detector = vision.FaceLandmarker.create_from_options(options) self._mp = mp - def detect(self, image_rgb: np.ndarray) -> np.ndarray | None: - """Returns (468, 3) float32 of normalized x, y and relative z, or None. + def detect(self, image_rgb: np.ndarray, include_iris: bool = False) -> np.ndarray | None: + """Returns (468, 3), or (478, 3) with iris, normalized float32 points. - The task model produces 478 landmarks (468 face + 10 iris); we return - only the first 468 to match the canonical FaceMesh topology used by - the SDK's OBJ file. + The task model produces 478 landmarks (468 face + 10 iris). By default + only the first 468 match the SDK's canonical FaceMesh topology; + include_iris=True retains all 478 for face-measurement calibration. """ mp_image = self._mp.Image(image_format=self._mp.ImageFormat.SRGB, data=image_rgb) result = self._detector.detect(mp_image) if not result.face_landmarks: return None - lm = result.face_landmarks[0][:468] + lm = result.face_landmarks[0] if include_iris else result.face_landmarks[0][:468] arr = np.array([[p.x, p.y, p.z] for p in lm], dtype=np.float32) return arr diff --git a/hairline/framing.py b/hairline/framing.py new file mode 100644 index 0000000..cbaa50e --- /dev/null +++ b/hairline/framing.py @@ -0,0 +1,218 @@ +"""Interface 52: upright face axis, then native-resolution reference framing.""" +from __future__ import annotations + +from functools import lru_cache +from io import BytesIO +import json +from pathlib import Path + +import cv2 +import numpy as np +from PIL import Image, ImageOps + +PROFILE_PATH = Path(__file__).parent / "reference/framing_profile.json" + + +def decode_portrait(raw): + """Respect phone EXIF orientation before detecting or transforming points.""" + try: + with Image.open(BytesIO(raw)) as image: + return cv2.cvtColor(np.array(ImageOps.exif_transpose(image).convert("RGB")), cv2.COLOR_RGB2BGR) + except Exception: + return None + + +@lru_cache(maxsize=1) +def load_profile(): + return json.loads(PROFILE_PATH.read_text(encoding="utf-8")) + + +def transform_points(points, matrix): + return np.asarray(points, np.float64) @ matrix[:, :2].T + matrix[:, 2] + + +def _rotation(landmarks, width, height): + xy = landmarks[:, :2].astype(np.float64) * [width, height] + delta = xy[152] - xy[9] + length = float(np.linalg.norm(delta)) + if not np.isfinite(xy).all() or length < 2 or delta[1] <= 0: + raise ValueError("9号点与152号点无效,无法扶正人脸") + down = delta / length + rotation = np.array([[down[1], -down[0]], [down[0], down[1]]], np.float64) + return xy, rotation, length + + +def _matrix(rotation, source_anchor, target_anchor): + return np.column_stack((rotation, np.asarray(target_anchor) - rotation @ source_anchor)) + + +def crop_fits(matrix, source_size, output_size): + w, h = output_size + corners = transform_points([[0, 0], [w-1, 0], [w-1, h-1], [0, h-1]], cv2.invertAffineTransform(matrix)) + sw, sh = source_size + return bool((corners[:, 0] >= -1e-7).all() and (corners[:, 0] <= sw-1+1e-7).all() + and (corners[:, 1] >= -1e-7).all() and (corners[:, 1] <= sh-1+1e-7).all()) + + +def _inscribed_frame(rotation, source_size, aspect=None): + """Largest centred valid rectangle: no generated background or upscaling.""" + sw, sh = source_size + ratio = sw / sh if aspect is None else aspect + source_center = np.array([(sw-1)/2, (sh-1)/2]) + low, high = 2.0, min(float(sh), sw/ratio) + for _ in range(48): + h = (low+high)/2 + w = h*ratio + matrix = _matrix(rotation, source_center, [(w-1)/2, (h-1)/2]) + if crop_fits(matrix, source_size, (w, h)): + low = h + else: + high = h + if aspect == .75: + h = max(4, int(low+1e-7)//4*4) + w = h//4*3 + else: + h, w = max(2, int(low+1e-7)), max(2, int(low*ratio+1e-7)) + matrix = _matrix(rotation, source_center, [(w-1)/2, (h-1)/2]) + if not crop_fits(matrix, source_size, (w, h)): + raise ValueError("图片边缘空间不足,无法得到有效扶正画面") + return matrix, (w, h) + + +def _tall_portrait_frame(xy, rotation, source_size, profile): + """Largest native 3:4 frame, positioned to retain the entire face.""" + _, size = _inscribed_frame(rotation, source_size, aspect=.75) + half = (np.array(size, np.float64)-1)/2 + extent = np.abs(rotation.T) @ half + low, high = extent, np.array(source_size)-1-extent + polygon = [np.array(p) for p in ((low[0], low[1]), (high[0], low[1]), + (high[0], high[1]), (low[0], high[1]))] + face = xy[:468] @ rotation.T + # The crop centre must satisfy both the source boundaries and the face + # bounds. Clip the feasible polygon in double precision to avoid padding. + face_low, face_high = face.max(axis=0)-half, face.min(axis=0)+half + for axis in range(2): + for normal, bound in ((rotation[axis], face_high[axis]), + (-rotation[axis], -face_low[axis])): + clipped = [] + for start, end in zip(polygon, polygon[1:]+polygon[:1]): + a, b = float(normal @ start-bound-1e-8), float(normal @ end-bound-1e-8) + if (a <= 0) != (b <= 0): + clipped.append(start+(end-start)*(a/(a-b))) + if b <= 0: + clipped.append(end) + polygon = clipped + if not polygon: + raise ValueError("3:4裁切窗口无法保留完整人脸") + target = np.array([profile["brow_x_ratio"]*size[0], profile["brow_y_ratio"]*size[1]]) + preferred = xy[9]-rotation.T @ (target-half) + # Euclidean projection keeps the brow as close as possible to its target. + candidates = [] + if (preferred >= low-1e-8).all() and (preferred <= high+1e-8).all(): + upright = rotation @ preferred + if (upright >= face_low-1e-8).all() and (upright <= face_high+1e-8).all(): + candidates.append(preferred) + for start, end in zip(polygon, polygon[1:]+polygon[:1]): + edge = end-start + length2 = float(edge @ edge) + t = np.clip(float((preferred-start) @ edge)/length2, 0, 1) if length2 > 1e-16 else 0 + candidates.append(start+t*edge) + centre = min(candidates, key=lambda p: float(np.sum((p-preferred)**2))) + matrix = _matrix(rotation, centre, half) + if not crop_fits(matrix, source_size, size): + raise ValueError("3:4裁切窗口超出原图有效范围") + return matrix, size + + +def _apply(photo, landmarks, matrix, size): + h, w = photo.shape[:2] + ow, oh = size + moved = np.asarray(landmarks, np.float64).copy() + moved[:, :2] = transform_points(landmarks[:, :2]*[w, h], matrix) / [ow, oh] + # MediaPipe Z is measured in normalized image-width units. + moved[:, 2] *= w/ow + result = cv2.warpAffine(photo, matrix, size, flags=cv2.INTER_LINEAR, + borderMode=cv2.BORDER_CONSTANT, borderValue=(0, 0, 0)) + return result, moved + + +def calibrate_reference(photo, landmarks): + """First straighten the actual reference; derive ratios from its final frame.""" + h, w = photo.shape[:2] + _xy, rotation, length = _rotation(landmarks, w, h) + matrix, size = _inscribed_frame(rotation, (w, h), aspect=.75) + image, moved = _apply(photo, landmarks, matrix, size) + ow, oh = size + b, c = moved[[9, 152], :2]*[ow, oh] + profile = { + "version": "2026-11-04-upright-9-152-subject-90pct-tall-3x4", + "source_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/misc/20261103_user.jpg", + "reference_image_url": "/static/framing_reference.png", + "reference_size": {"width": ow, "height": oh}, + "source_size": {"width": w, "height": h}, + "brow_9": {"x": float(b[0]), "y": float(b[1])}, + "chin_152": {"x": float(c[0]), "y": float(c[1])}, + "face_axis_length_px": length, + "brow_x_ratio": float(b[0]/ow), "brow_y_ratio": float(b[1]/oh), + "reference_width_per_face_length": ow/length, + "reference_height_per_face_length": oh/length, + "width_per_face_length": 2.5, "height_per_face_length": 3.0/.9, + "rotation_degrees": float(np.degrees(np.arctan2(rotation[0, 1], rotation[0, 0]))), + "axis_x_error_px": float(abs(b[0]-c[0])), + "source_to_reference": matrix.tolist(), + "landmark_source": "source_landmarks_transformed_without_redetection", + } + return image, moved, profile + + +def normalize_portrait(photo, landmarks, profile=None): + profile = load_profile() if profile is None else profile + h, w = photo.shape[:2] + xy, rotation, length = _rotation(landmarks, w, h) + # Round to an exact 3:4 frame without changing pixel scale. + target_h = max(4, round(profile["height_per_face_length"]*length/4)*4) + target_w = target_h//4*3 + matrix = _matrix(rotation, xy[9], [profile["brow_x_ratio"]*target_w, + profile["brow_y_ratio"]*target_h]) + cropped = crop_fits(matrix, (w, h), (target_w, target_h)) + aspect_cropped = False + aspect_skip_reason = None + if cropped: + size = (target_w, target_h) + elif h*3 > w*4: + try: + matrix, size = _tall_portrait_frame(xy, rotation, (w, h), profile) + aspect_cropped = True + except ValueError as ex: + aspect_skip_reason = str(ex) + matrix, size = _inscribed_frame(rotation, (w, h)) + else: + matrix, size = _inscribed_frame(rotation, (w, h)) + image, moved = _apply(photo, landmarks, matrix, size) + ow, oh = size + axis = moved[[9, 152], :2]*[ow, oh] + if not ((axis[:, 0] >= 0).all() and (axis[:, 0] < ow).all() + and (axis[:, 1] >= 0).all() and (axis[:, 1] < oh).all()): + raise ValueError("人脸过于贴近边缘,扶正后无法保留9号点与152号点") + metadata = { + "enabled": True, "standard_crop": cropped, "aspect_crop": aspect_cropped, + "aspect_crop_skip_reason": aspect_skip_reason, + "status": "reference_crop" if cropped else ("aspect_crop" if aspect_cropped else "rotation_only"), + "skip_reason": None if cropped else "insufficient_space", + "message": ("已扶正并按参考图裁切" if cropped else + "原图偏长,已扶正并裁成3:4,保留完整人脸" if aspect_cropped else + "3:4窗口无法完整保留人脸,已仅扶正" if aspect_skip_reason else + "空间不足,仅扶正,未按参考比例裁切"), + "rotation_degrees": float(np.degrees(np.arctan2(rotation[0, 1], rotation[0, 0]))), + "source_size": {"width": w, "height": h}, "output_size": {"width": ow, "height": oh}, + "requested_crop_size": {"width": target_w, "height": target_h}, + "face_axis_length_px": length, + "height_per_face_length": profile["height_per_face_length"], + "width_per_face_length": profile["height_per_face_length"]*.75, + "source_to_processed": matrix.tolist(), + "processed_to_source": cv2.invertAffineTransform(matrix).tolist(), + "axis_x_error_px": float(abs(axis[0, 0]-axis[1, 0])), + "profile_version": profile["version"], + "reference_image_url": profile["reference_image_url"], + } + return image, moved, metadata diff --git a/hairline/height_rule.py b/hairline/height_rule.py new file mode 100644 index 0000000..63184ee --- /dev/null +++ b/hairline/height_rule.py @@ -0,0 +1,117 @@ +"""接口52设计高度:上庭 = (中庭 + 下庭) / 2;不改变接口2/5的几何。""" +from __future__ import annotations + +import cv2 +import numpy as np + +from .mask import mask_from_curve + + +def height_target(landmarks, width, height, reference=None): + """Use unrounded measurement coordinates; fall back to the same MP indices. + + Distances use image Y, matching face_analysis.measure's court heights. + No rounded centimetre values or existing-hairline estimates enter the rule. + """ + scale = np.array([width, height], dtype=np.float64) + if reference is None: + brow, nose, chin = landmarks[[9, 94, 152], :2] * scale + source = "hairline_landmarks" + px_per_cm = None + else: + brow = np.asarray(reference["brow_center"], dtype=np.float64) + nose = np.asarray(reference["nose_bottom"], dtype=np.float64) + chin = np.asarray(reference["chin_tip"], dtype=np.float64) + source = "face_measure" + px_per_cm = reference.get("px_per_cm") + if not np.isfinite([brow, nose, chin]).all() or not brow[1] < nose[1] < chin[1]: + raise ValueError("眉心、鼻翼下缘与下巴坐标异常,无法计算目标上庭高度") + middle, lower = float(nose[1] - brow[1]), float(chin[1] - nose[1]) + upper = (middle + lower) / 2.0 + target_y = float(brow[1] - upper) + if not (0 <= brow[0] < width and 1 <= target_y < height - 1): + raise ValueError("按中下庭均值计算的目标发际线超出图片范围,请使用完整正面照") + def pt(p): + return {"x": float(p[0]), "y": float(p[1])} + return { + "name": "court_average", + "formula": "上庭 = (中庭 + 下庭) / 2", + "measurement_source": source, + "brow_center": pt(brow), "nose_bottom": pt(nose), "chin_tip": pt(chin), + "middle_height_px": middle, "lower_height_px": lower, + "target_upper_height_px": upper, + "target_upper_height_cm": upper / px_per_cm if px_per_cm else None, + "target_center": {"x": float(brow[0]), "y": target_y}, + } + + +def clean_curve(overlay): + """Keep the white design line; discard opaque black texture-border pixels.""" + out = np.zeros_like(overlay, dtype=np.float32) + out[:, :, :3] = 255 + out[:, :, 3] = overlay[:, :, 3] * (overlay[:, :, :3].mean(axis=2) > 128) + return out + + +def curve_center(overlay, center_x): + """Alpha-weighted centre of the line at the facial midline, in image pixels.""" + h, w = overlay.shape[:2] + column = int(round(center_x)) + if not 0 <= column < w: + raise ValueError("面部中轴超出图片范围") + alpha = overlay[:, column, 3].astype(np.float64) + alpha[alpha <= 1] = 0 + if not alpha.any(): + # Rasterized endpoints may leave a 1px gap, but distant sideburns + # must never be silently substituted for a missing central curve. + columns = np.flatnonzero((overlay[:, :, 3] > 1).any(axis=0)) + if not columns.size or np.min(np.abs(columns - column)) > 2: + raise ValueError("发际线模板在面部中轴处没有有效曲线") + column = int(columns[np.argmin(np.abs(columns - column))]) + alpha = overlay[:, column, 3].astype(np.float64) + alpha[alpha <= 1] = 0 + return {"x": float(center_x), "y": float(np.dot(np.arange(h), alpha) / alpha.sum())} + + +def place_curve(overlay, target, landmarks): + """Rigidly shift a rendered template along face-up to meet the target Y. + + Keeping the curve rigid preserves roll and the template's shape. Pixel Y + remains the height convention, even for a rolled face. A short correction + compensates for the curve's slope as the local-axis shift also changes X. + """ + curve = clean_curve(overlay) + h, w = curve.shape[:2] + center_x, target_y = target["x"], target["y"] + before = curve_center(curve, center_x) + up = (landmarks[10, :2] - landmarks[152, :2]) * [w, h] + if abs(up[1]) < 1e-6: + raise ValueError("无法确定人脸向上方向") + x_per_y = float(np.clip(up[0] / up[1], -1.0, 1.0)) + dy = target_y - before["y"] + moved = curve + for _ in range(8): + transform = np.array([[1, 0, dy * x_per_y], [0, 1, dy]], np.float32) + moved = cv2.warpAffine(curve, transform, (w, h), flags=cv2.INTER_LINEAR, + borderMode=cv2.BORDER_CONSTANT, borderValue=0) + center = curve_center(moved, center_x) + residual = target_y - center["y"] + if abs(residual) <= 0.15: + break + dy += residual + if abs(center["y"] - target_y) > 1.0: + raise ValueError("发际线中心无法对齐目标高度,请检查照片姿态与裁剪范围") + return moved, { + "old_center": before, "new_center": center, + "shift_x_px": float(dy * x_per_y), "shift_y_px": float(dy), + "target_error_px": float(abs(center["y"] - target_y)), + } + + +def inpaint_from_curve(photo, landmarks, parse_map, overlay): + """The preview line is also the exact boundary used for the black line/mask.""" + alpha = np.clip(overlay[:, :, 3:4] / 255.0, 0, 1) + marked = np.clip(photo * (1.0 - alpha), 0, 255).astype(np.uint8) + curve = (overlay[:, :, 3] > 40).astype(np.uint8) * 255 + mask = mask_from_curve(curve, landmarks, parse_map) + return marked, mask diff --git a/hairline/reference/framing_profile.json b/hairline/reference/framing_profile.json new file mode 100644 index 0000000..c9a1c81 --- /dev/null +++ b/hairline/reference/framing_profile.json @@ -0,0 +1,43 @@ +{ + "version": "2026-11-04-upright-9-152-subject-90pct-tall-3x4", + "source_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/misc/20261103_user.jpg", + "reference_image_url": "/static/framing_reference.png", + "reference_size": { + "width": 786, + "height": 1048 + }, + "source_size": { + "width": 792, + "height": 1056 + }, + "brow_9": { + "x": 385.1878369059212, + "y": 360.65437126595765 + }, + "chin_152": { + "x": 385.18783690592113, + "y": 725.8251047982238 + }, + "face_axis_length_px": 365.1707335322661, + "brow_x_ratio": 0.4900608612034621, + "brow_y_ratio": 0.3441358504446161, + "reference_width_per_face_length": 2.152417835890317, + "reference_height_per_face_length": 2.8698904478537566, + "width_per_face_length": 2.5, + "height_per_face_length": 3.333333333333333, + "rotation_degrees": 0.2596248408989324, + "axis_x_error_px": 5.684341886080802e-14, + "source_to_reference": [ + [ + 0.9999897336401403, + 0.004531292786961665, + -5.386196599797756 + ], + [ + -0.004531292786961665, + 0.9999897336401403, + -2.202458197930582 + ] + ], + "landmark_source": "source_landmarks_transformed_without_redetection" +} diff --git a/hairline/service.py b/hairline/service.py index 50cd7c0..939263a 100644 --- a/hairline/service.py +++ b/hairline/service.py @@ -22,6 +22,7 @@ from .lift_3d import lift_hairline_to_3d, build_middle_row, assemble_full from .render import load_ext_mesh, load_texture_rgba, render_hairline_overlay, build_overlay_layer from .mask import build_inpaint_mask, compose_comfy_rgba, mask_from_curve from .marker_detect import detect_marker_hairline, path_to_curve_mask +from .height_rule import height_target, clean_curve, place_curve, inpaint_from_curve import base64 import io @@ -178,7 +179,7 @@ def extract_502(image_bgr: np.ndarray): return ctx["points"], ctx["valid"] -def extract_context(image_bgr: np.ndarray): +def extract_context(image_bgr: np.ndarray, landmarks: np.ndarray | None = None): """照片(BGR) → {landmarks, parse_map, points, valid}。无人脸返回 None。 发际线几何使用射线检测 + 人脸对应点对齐 + 头部轮廓钳制: @@ -189,7 +190,8 @@ def extract_context(image_bgr: np.ndarray): fallback 点不会再跑出头部轮廓。 """ rgb = cv2.cvtColor(image_bgr, cv2.COLOR_BGR2RGB) - landmarks = get_landmarker().detect(rgb) + if landmarks is None: + landmarks = get_landmarker().detect(rgb) if landmarks is None: return None parse_map = get_parser().parse(rgb) @@ -538,6 +540,79 @@ def generate_hairline_pngs(image_bgr: np.ndarray, gender: str, return {"images": images, "best_centers": best_centers} +def generate_hairline_pngs_52(image_bgr: np.ndarray, gender: str, + hair_styles: list[int], use_mask: bool = True, + prompt: str | None = None, + generate_grow_image: bool = True, + height_reference: dict | None = None, + compare_rules: bool = False, + precomputed_landmarks: np.ndarray | None = None): + """接口52:每种 middle 曲线中点对齐到眉心上方 (中庭+下庭)/2。 + + 只读取 middle 贴图,high/low 保留空值。生发直接复用移动后的预览曲线, + 不再使用位置不同的黑模板。compare_rules 仅为调试页附带旧规则叠图。 + 接口2仍使用原有管线。 + """ + if gender not in ("male", "female"): + raise ValueError(f"gender 必须是 male/female,收到 {gender!r}") + if not hair_styles: + raise ValueError("hair_styles 必填且不能为空") + ctx = extract_context(image_bgr, landmarks=precomputed_landmarks) + if ctx is None: + return None + h, w = image_bgr.shape[:2] + uv, ext_faces = load_ext_mesh() + rule = height_target(ctx["landmarks"], w, h, height_reference) + textures = get_texture_map()[gender] + + # use_mask=False:干净原图+空遮罩与贴图无关,只跑一次 ComfyUI,选中项复用 + # generate_grow_image=False:完全跳过生发(最耗时),grown_png 恒为 None + shared_grown = None + if generate_grow_image and not use_mask: + shared_grown = _grow_from_texture(image_bgr, ctx, None, use_mask=False, prompt=prompt) + + images, best_centers = [], None + for s in hair_styles: # s = 1-indexed 发型序号 + key, mid_path = textures[s - 1] + old = build_overlay_layer(h, w, ctx["points"], ext_faces, uv, load_texture_rgba(mid_path)) + overlay, placement = place_curve(old, rule["target_center"], ctx["landmarks"]) + overlays = {"middle": overlay, "high": None, "low": None} + if not generate_grow_image: + grown_png = None + elif not use_mask: + grown_png = shared_grown + else: + grown_png = None + try: + marked, mask = inpaint_from_curve( + image_bgr, ctx["landmarks"], ctx["parse_map"], overlay) + buf = io.BytesIO() + compose_comfy_rgba(marked, mask).save(buf, format="PNG", compress_level=1) + grown_png = comfyui.run(buf.getvalue(), prompt=prompt) + except Exception as ex: # 单张生发失败不丢弃设计曲线 + logger.warning("接口52 生发失败 type=%s:%s", key, ex) + # Flux may round dimensions to a multiple of its latent stride. + # Restore the input size so the preview and generated photo align. + if grown_png: + grown_png = _upscale_png_to(grown_png, w, h) + item = {"hairline_type": key, "order": s, "overlays": overlays, + "grown_png": grown_png, "height_placement": placement} + if compare_rules: + item["legacy_overlay"] = clean_curve(old) + images.append(item) + if best_centers is None: + center = placement["new_center"] + best_centers = {"middle": (round(center["x"]), round(center["y"])), + "high": None, "low": None} + guide_landmarks = { + str(index): {"x": float(ctx["landmarks"][index, 0] * w), + "y": float(ctx["landmarks"][index, 1] * h)} + for index in (9, 150, 152, 162, 251, 389) + } + return {"images": images, "best_centers": best_centers, "height_rule": rule, + "guide_landmarks": guide_landmarks} + + # 接口3 送 ComfyUI 前限边,降低峰值显存,避免与接口2 切换时把 Flux 挤出。 # 统一 prompt 后 Flux 不再被 CLIP 挤出,接口3 可用较高分辨率。可用 GROW_B_MAX_SIDE 覆盖。 _GROW_B_MAX_SIDE = int(os.getenv("GROW_B_MAX_SIDE", "1024")) diff --git a/ip_access.example.json b/ip_access.example.json new file mode 100644 index 0000000..bfc93a7 --- /dev/null +++ b/ip_access.example.json @@ -0,0 +1,3 @@ +{ + "allowed_ips": ["49.232.51.171"] +} diff --git a/ip_access.py b/ip_access.py new file mode 100644 index 0000000..ddae89f --- /dev/null +++ b/ip_access.py @@ -0,0 +1,77 @@ +"""Direct-peer IP access policy for the GPU worker's dynamic endpoints.""" +import ipaddress +import json +from pathlib import Path +import socket + +CONFIG_PATH = Path(__file__).resolve().parent / "ip_access.json" + + +def _address(value): + address = ipaddress.ip_address(value) + return address.ipv4_mapped if isinstance(address, ipaddress.IPv6Address) and address.ipv4_mapped else address + + +def local_addresses(): + addresses = {_address("127.0.0.1"), _address("::1")} + try: + addresses.update(_address(item[4][0].split("%", 1)[0]) + for item in socket.getaddrinfo(socket.gethostname(), None)) + except (OSError, ValueError): + pass + # Include all assigned Linux interface addresses, not entire private ranges. + try: + import fcntl + import struct + with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as sock: + for _, name in socket.if_nameindex(): + try: + data = fcntl.ioctl(sock.fileno(), 0x8915, struct.pack("256s", name.encode()[:15])) + addresses.add(_address(socket.inet_ntoa(data[20:24]))) + except OSError: + continue + path = Path("/proc/net/if_inet6") + if path.exists(): + addresses.update(ipaddress.IPv6Address(line.split()[0]) for line in path.read_text().splitlines()) + except (ImportError, OSError, ValueError): + pass + return addresses + + +def _networks(values): + if not isinstance(values, list) or not all(isinstance(value, str) for value in values): + raise ValueError("IP配置必须是字符串列表") + return [ipaddress.ip_network(value, strict=False) for value in values] + + +def _matches(address, networks): + return any(address.version == network.version and address in network for network in networks) + + +def check_access(request): + """Return (allowed, reason), re-reading the whitelist for each request.""" + try: + config = json.loads(CONFIG_PATH.read_text()) if CONFIG_PATH.exists() else {} + allowed = _networks(config.get("allowed_ips", [])) + if request.client is None or request.client.port == 0: + # Uvicorn proxy middleware has discarded the socket peer at port 0. + # Reject rather than treating an unverified forwarded IP as local. + return False, "无法确认直连来源,请使用 --no-proxy-headers 启动服务" + peer = _address(request.client.host) + # Authorize the gateway's socket IP, never its end-user forwarding headers. + if peer.is_unspecified: + return False, "来源地址无效" + return (True, "") if peer.is_loopback or peer in local_addresses() or _matches(peer, allowed) else (False, "来源IP不在接口白名单") + except (OSError, ValueError, TypeError, AttributeError): + return False, "IP白名单配置或来源地址无效" + + +def rejection(request): + from fastapi.responses import JSONResponse + if request.url.path == "/static" or request.url.path.startswith("/static/"): + return None + allowed, reason = check_access(request) + if allowed: + return None + return JSONResponse(status_code=403, content={"code": 1010, "message": reason, + "request_id": "ip-access", "data": None}) diff --git a/run_worker.sh b/run_worker.sh index b2a0bd8..e91f538 100755 --- a/run_worker.sh +++ b/run_worker.sh @@ -31,11 +31,11 @@ fi if [ "${FOREGROUND:-0}" = "1" ]; then echo ">> 前台运行 worker: ${HOST}:${PORT}" - exec "$VENV_UVICORN" app:app --host "$HOST" --port "$PORT" + exec "$VENV_UVICORN" app:app --host "$HOST" --port "$PORT" --no-proxy-headers fi echo ">> 后台启动 worker: ${HOST}:${PORT}" -nohup "$VENV_UVICORN" app:app --host "$HOST" --port "$PORT" >> "$LOG_FILE" 2>&1 & +nohup "$VENV_UVICORN" app:app --host "$HOST" --port "$PORT" --no-proxy-headers >> "$LOG_FILE" 2>&1 & echo $! > "$PID_FILE" sleep 1 if kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then diff --git a/scripts/calibrate_hairline_framing.py b/scripts/calibrate_hairline_framing.py new file mode 100644 index 0000000..cc53d45 --- /dev/null +++ b/scripts/calibrate_hairline_framing.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +"""Straighten the specified reference first, then recalibrate framing ratios.""" +import json +from pathlib import Path +import sys + +ROOT = Path(__file__).resolve().parent.parent +sys.path.insert(0, str(ROOT)) + +import cv2 +from hairline.framing import calibrate_reference, decode_portrait, PROFILE_PATH +from hairline.service import get_landmarker + +if __name__ == "__main__": + source = Path(sys.argv[1]) if len(sys.argv)>1 else ROOT/"tests/output/upload_framing/reference.jpg" + photo = decode_portrait(source.read_bytes()) + if photo is None: + raise ValueError("Reference image cannot be decoded") + landmarks = get_landmarker().detect(cv2.cvtColor(photo, cv2.COLOR_BGR2RGB), include_iris=True) + if landmarks is None: + raise ValueError("Reference face not detected") + image, _, profile = calibrate_reference(photo, landmarks) + cv2.imwrite(str(ROOT/"static/framing_reference.png"), image) + PROFILE_PATH.write_text(json.dumps(profile, ensure_ascii=False, indent=2)+"\n", encoding="utf-8") + print(json.dumps(profile, ensure_ascii=False, indent=2)) diff --git a/scripts/compare_hairline_height.py b/scripts/compare_hairline_height.py new file mode 100644 index 0000000..ee314d9 --- /dev/null +++ b/scripts/compare_hairline_height.py @@ -0,0 +1,122 @@ +#!/usr/bin/env python3 +"""保存接口52旧/新高度规则对比,供 static/test_interface52_compare.html 展示。 + +默认验证用户清单全部30张,男女各7型,共420组;只跑定位,不调用ComfyUI。 +用法:./venv/bin/python scripts/compare_hairline_height.py +可用 --cases 1,2,3,4,5 只验证指定案例。 +""" +from __future__ import annotations + +import argparse +import base64 +from datetime import datetime +import json +import os +from pathlib import Path +import time +from zoneinfo import ZoneInfo + +import cv2 +import httpx +import numpy as np + +ROOT = Path(__file__).resolve().parent.parent + + +def run(args): + manifest = json.loads((ROOT / "tests/fixtures/hairline_height_cases.json").read_text()) + available = {c["image_number"]: c for c in manifest["cases"]} + requested = list(available) if args.cases == "all" else [int(n) for n in args.cases.split(",")] + cases = [available[n] for n in requested] + inputs = ROOT / "tests/output/hairline_height_compare/inputs" + inputs.mkdir(parents=True, exist_ok=True) + output = ROOT / "static/annotations/hairline_height_compare" + output.mkdir(parents=True, exist_ok=True) + report = { + "created_at": datetime.now(ZoneInfo("Asia/Shanghai")).isoformat(), + "case_numbers": requested, "groups": [], "errors": [], + } + started = time.monotonic() + with httpx.Client(timeout=180, follow_redirects=True) as client: + for case in cases: + number = case["image_number"] + source = inputs / f"case_{number}.png" + if not source.exists(): + response = client.get(case["image_url"]) + response.raise_for_status() + source.write_bytes(response.content) + photo = cv2.imdecode(np.frombuffer(source.read_bytes(), np.uint8), cv2.IMREAD_COLOR) + if photo is None: + raise ValueError(f"案例 {number} 无法解码") + # Keep the source photo available even when positioning fails. + original_path = output / f"case_{number}_original.jpg" + cv2.imwrite(str(original_path), photo, [cv2.IMWRITE_JPEG_QUALITY, 95]) + original_url = "/static/annotations/hairline_height_compare/" + original_path.name + # Interface 52 frames native-resolution input before any size changes. + content = cv2.imencode(".png", photo)[1].tobytes() + for gender in args.genders.split(","): + step = time.monotonic() + try: + response = client.post(args.base_url.rstrip("/") + "/api/v1/debug/hairline-height-compare", + files={"image_file": (f"case_{number}.png", content, "image/png")}, + data={"gender": gender, "hair_style": "1,2,3,4,5,6,7"}) + response.raise_for_status() + body = response.json() + if body["code"] != 0: + raise ValueError(body["message"]) + group = body["data"] + group.update(case_number=number, source_url=case["image_url"], + elapsed_seconds=round(time.monotonic() - step, 2)) + def save_image(obj, field, suffix): + value = obj.pop(field + "_base64", None) + if not value: + return + # Both gender sets use the same source and processed + # photos; share their URLs and browser image cache. + prefix = f"case_{number}" if obj is group else f"case_{number}_{gender}" + path = output / f"{prefix}_{suffix}" + path.write_bytes(base64.b64decode(value.split(",", 1)[-1])) + obj[field + "_url"] = "/static/annotations/hairline_height_compare/" + path.name + save_image(group, "input", "input.jpg") + save_image(group, "original", "original.jpg") + for result in group["results"]: + save_image(result, "old_overlay", f"{result['order']}_old.png") + save_image(result, "new_overlay", f"{result['order']}_new.png") + save_image(result, "grown_image", f"{result['order']}_grown.jpg") + if result["height_placement"]["target_error_px"] > 1: + raise ValueError(f"{result['hairline_type']} 中心误差超过1像素") + if group["framing"]["axis_x_error_px"] > 1: + raise ValueError("扶正后的9/152横向误差超过1像素") + report["groups"].append(group) + print(f"case {number} / {gender}: {len(group['results'])} shapes OK ({group['elapsed_seconds']}s)", flush=True) + except Exception as ex: + report["errors"].append({"case_number": number, "gender": gender, "message": str(ex), + "source_url": case["image_url"], "original_url": original_url, + "width": photo.shape[1], "height": photo.shape[0]}) + print(f"case {number} / {gender}: FAILED {ex}", flush=True) + # Atomically expose partial results to the page while running. + temporary = output / "latest.json.tmp" + temporary.write_text(json.dumps(report, ensure_ascii=False, indent=2)) + os.replace(temporary, output / "latest.json") + results = [r for g in report["groups"] for r in g["results"]] + summary = { + "cases": len(cases), "successful_groups": len(report["groups"]), + "comparisons": len(results), "failures": len(report["errors"]), + "max_center_error_px": max((r["height_placement"]["target_error_px"] for r in results), default=None), + "elapsed_seconds": round(time.monotonic() - started, 2), + } + report["summary"] = summary + temporary = output / "latest.json.tmp" + temporary.write_text(json.dumps(report, ensure_ascii=False, indent=2)) + os.replace(temporary, output / "latest.json") + print(json.dumps(summary, ensure_ascii=False), flush=True) + if report["errors"]: + raise SystemExit(1) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--cases", default="all", help="all 或逗号分隔的图片编号") + parser.add_argument("--genders", default="female,male") + parser.add_argument("--base-url", default="http://127.0.0.1:8187") + run(parser.parse_args()) diff --git a/static/framing_reference.png b/static/framing_reference.png new file mode 100644 index 0000000000000000000000000000000000000000..4b47a83c3b6b4bef8c11347916024a16a0e84c06 GIT binary patch literal 532770 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∓v_ciBeDZ9Y+x^G}*Ztdr#a<0}vE zx=bdNO0a?L|3xAKXMGT1O!VIc2G9=K$jONPmkm40&jDjAEUV>$e##Ch`i@SvZ2m7O$288hJq7iWtWJAmvuJi?dKowc@|iZCskWXY?g zJWD*$80--mM8*_58QnKWn_W=qWIy5zg+$@t;}x$Na7jsf^qSady0<>&P)dfO+(bm> z*z7HXyJ4rIY@s0tK0pq;UreLZp*exZl{VpJP-#K=m?1+~GQ)|P*c&NFT(6^WDn+~R zhJogfMXy@y|Nff0xpTY!-3-IRK1Y!o3{0|UCNW9<_CW^&aPElv0!}?bC=pydMwL!1 z%5Z(rX@7F2!A2fh9A9%(OsNldhhNj-R9aoNsM;7B>;XFTw`WlC2V^!nYO`)YM}>~X zZg7)$k$mDov9xvMb9A+6CtED4V6rw^|5aJ)caawdYivWOA^mvY8%H~fVKv-1IRPiN z4w2dFpd&K~lEz_dZ9U_Ih~Mfh`dGsL)cQT3iE%q(Gwmq{J25cP3xzb=-UVewPf0Od zAl^K!S_Xb=at@>3QTSAN_&WS65jFRhJ+AlNZA`B}DzaDI;Xiim(5IUdL(>+&TqCO`%hT%+b6^GwjAJp2-79a`KI~ijS#jeW z|Gsy=ca!R6@1|&TNJSGzLuTSAWZt z#YeqF5(YfHtJ5O6?_x~KnS$>}2hwLEBCE7Qd8o05@eDAjoLDkNUOp3T6drXU?*Z#I zNqvz6i6Qs0n;uG%=0vUP{HGlwbK88h-cUX?;Pv;_6D439%O|EP;8IR=ITXc9&%p6% zRwykqc(aJn2cSSp<{n`TCh1moW~skB#x>{)n;99t?qQjST@mDc*gz#A$QpX#WDY$! z7?8N8y)c9x;YBU4lnDYkfVeSK226~NFZw^x8PI+~1}A&UC0?SnfxjnevZ+u4dt zuZi6Hxd}#R@~%qfXI7j2FdP5lh6#2`qV~dg!D}Ay>)r%f!ymr@{xAeZ33_%I4~x>j z@cxU5C(7mpdOrdw0h_5}ilN5&U{3)ACw6(UX=VED+EV-Bec?K`b7z~luH~KH2}^0c z`9p8U8vme~J2Qj5;}-?tblzu|V2eC`s2or)kW!*)ImN8zVBf&5Zbz|Jv$&Cx_$~f0 z>4KhgGjye#`HH+=7=Uo zBW3vqO=ud-rnhGeXgHV5LlvvrrFX^uuZ+?Ts*3}ovqNknTJd0zQi{)C&8AoT^*mxj zOJ!dWQ*$?Xwe4~mH+=2zu$md%{epNex8!xKp9~(==b>RJec>8e&xL5$>lBBNDx4ES zqZ0erx)RB3>RDM73_kxhxbWrctymqeXdyp8n{30^zjRJE5BEIg#PU+9l9~u%wB<%L z9znoeLk7BMvv(BN?0&&w&7bzlYGosX0oz&S1^s=}Lkdt0is>*;bX0DC#F4Ru8yW)BUr^X!h;l6xuC4oUGOgcdFpwA{^liUZsW zY?Z*9ZKWKEM7+-8^R)AgAG5~e{#^^es{HK|5&lcM^GDGop9rI*_0RLjAr}oVkhqvT zka7X*js1Z@S1-cqwz9E8U&eGQj@yxgu7Gj*04(!pQ!ZC_o^R^_SX)Vd00_P&=VJs~ z3%D=EZ*l&WCiFH^2llKlV)CU^8jI$?JDqNL$KzvRW^Duat8_E|^f1qXIbBu8>|?&( zW}T?DZc1;&ydb0?MJ8a~S*OjFN%GhK2Nx?sZcZBFyG+b&G5DV+2~Ta$ zYj#|(u6`#bE{JjYKKmpy)T15}mk=E0&FnWrnmW@JAs)%6G~WXlM*KF_I(=B9nv)$l zglV9Ivlp~;E1%Aq-i&QoeW+_a1LxijvkBE096WR{J4~_d_El>guR!hkfOmVBljMSW z^SvDO(}%It;?GgbL#7Jza1%dZNwLVsxTGSw5+gpS>$F$TB)~92kyJZ;sw6Dsu@uQn z2LwG?6e*Ti#IWzQ*_J(g!7cFjoeoUF!6a?Bw=bp#J`7!5i z*kE@(Y%aCJ;oI69sa48k6)Un2LydBD%X!lMT%{{|eNQE~ifPi($=fYuVQ-IjP`-3q z`T`v#E==~AE}4(v{)zkTlI452&Ls?VoAm_mdiywB3)vu`I{}XuK~*{hG>Ak8Uc5>> zX}YcqvLv8P9pFW=IFX*XaK%e8`BC-119LnAI?!UkZU)@5_Jqa5lp!bVqtf1oJ_|m> zuww|xkIZ^cbKBV3U~D7)-@kLk@tEOf|M{Ra-SV=N7y{;dyvF0?(u*w>I~)0rz8S53 zNca9ZZ4p1$Zqf36!Km7(Y2|ZFUi!PNrsbK?gzsamE-Ew|8oy-TXe55SV#i_wt)aG7 zJqGkBGj~lez*&{7{3w%m_DmG|v`K-GR5Rd#iKYFY{+TsezEIES2ms&y0J<6scW?Qg|pNZ%dTX4PsyAp7f8GMGf!1#t<1l%83fKdHWjw zu#efKov-x`cIsug&o=Kbaboqcpn z9${QNX(hX+7Ww54b|B1C{0uLAaAlanejqA=E}dAoabo)Hfxr1#cp@oQvx03O8|J?AkEBbn@$K=@6j9CzL`n#vb*)0t7 z<1Kc;cgql1KRt)vLM$_9>T-rjpuU!r@y@h)VWxbwq^OkPd0};}!a9#Rb2|W*4#iXZ z;5otSC`?Nnqw4#TO1Z-$4Ke+3x)9nl#_HPvpZdDbr%Z*x)&!a>xVsm{69qNLW%$Fh zpzigXs0tRG`gTRse6%TqV0-FxoiEjyY zGaIACQ;G-IR=q9Ocx%0DKbD(ZM+(&5rF+MpK2URGb>dA)@6~p<#;i;$-gpBq-i|k3 z-LxEU)9~Y;YvXgqlT=Crg=zw28HFMrq(oBBr@j6Z(WwMFE0}>*zw6xX8)AVmsjQIm!=y>;s1`kTbX6KivG>(?EY2`b%$wZwUeA>1F}*;1J^$J|qQM_=3nTiA4D(fJU= zb+_62$JNrw>;@X4F1zZnzdI?s8M!qgL%Rq=6c-Zv0I+nw7OKf{>J5#|2MSQdq-KEG zAhft_+5zav)FauD()1GHyxn-Gs}jX{hhy00%3}&46Gi8D>TT5a?{T}QAh_Wm=A&H^ zwkftm?c%D5R$O?ClMink7zE3+UeYPn0awW3ZBJ&<*^xKHXO~0BMK_&8HICH^mI|5z zqVD(kNtl;GIWodu3`~ds5b4rV6{L-MzHJ^w2XL!S19cO+yU=sPUit zs`K7CZ?DFm&*r)NLS)KkXQf$Hq(E)du23%JA!+1n%-ZzGYSr~0pGpd{h!c6($-K!F z(c&zB{Yps4OGp?YEsq{AaGk8WIibj8K?pc$`eXd=Pz0!CMo%4V;Vy%z#|hxwUq(mI z0=!Nj_f$|U)o;tIOgEokAGEoeW>OtbaSE7TR(#Z}PbO)*nHJ4IxuB9!K5~{p3<};I znkjaYdx;(Cp6%w_GxcF&>>-CpJ;_p)Nnz<2eR%m%o_cWNqwhi)!B%-7&XLB!|@RDuM0g4~8T?Gl|yFq>#yI6~*@ zWWX&+N-~jH=c%V5QoFm`ppruh6hVu(aY)*lMZqH)r`a*)1wyLnMqZtqsA2;sAy|36 z+`LLo76VG*6w2YZ&0Pw*M3XkB53O+7WcfqbO{O=vxWl#2MMYIZ!Uq$?m#{k%(D+Fn z+$H9lsoAEVA9TH&R=>`EzbR$7_F2^8+duvLu5mU#dC*lkIWrrR^}#el%gya20{0Ys zHuT?aVvxlC>n0w;j;0DUu`9Hex3reH_nU@u8KWNRm$zay5e-i_S*-os`pp~^u>z@! z1+2%8!^{ohYV8uWWDz1_hmzM3@Uj6#bHXN2a(o-G_zCKP^tWq2wg;D}J&9iWG&5Q` z8C5f$h6CO}NhN|`^)r)7nx)Hvh4~NUf&&JDU!kk>xc7yv7 zcWgSIH{@_JY+LW-%@E5PzW*LY!KEsj^J<->DK z)t^*R2#5BLU2{WLL@V;Vq@0U{#wJ)8thY)kvtv`m{4u&%A-zf}wbZGb(jkj5uQ)cl z{#BZXcJXFh;rsU&GsqKUG!AE=e*SSnN;Ed7$cgc&s_L;@;2#yu7NN znXIdQ8|Np;we__bm_6Qs?jD|`V)V12ZWTiz#z6-MKRNi*Vl0n9T1F67<5=4Q9CEL& zDn22@)Z!f}2;59u{u3THy*;<;@qBX()jjB11?$hrv*8K6SvZUijQZNXlkVBT1((Nc zc_Ba`AK2#oBsxa0yPclHpQf6(vDvxx9{$2Ag=^Dbj{J~aK7IRDe87xo!OF)EUHcAb zHvXR9^g!3k&*RcSaz-ng;gSTjrV|mia{CBl<<@fED50^&jFzbL*e75fTW5d7{`p2P zA@t?Yi-&45lcUB3XEmecE#bM5`eh5uQ^_N9^Sud4JPj0h*oo-X@r;%PNLrA^&ONiC z$)OXYt%!aOh@mTw*(Usy{_LjZ?1Gi?@^h={%PZ59%)vj_76xXH!|TtiBC208!Td4d zR?nYN_5G4@fu`3sxO_t&_*P08SUDBcavlVg_9#7?i3by@m2XdDRHASXcl|BS zE)4@)IXNNRpM1AY2onS1DGM4ym8{}7Q-pa6>3JxeFI8nUgt>$H+RY=V zt4=l06H_|@`>M(Bp;e(WBbxgY=*{*_>RjNDEfO@!NFIWj2^!e|mV76PA3XwUW&4SXP zCkDdNOjWrR58BrW*)w8>t8%%y?{fNv^M_Zbvcaae>KOXxAG{Daw3Tb82UQ01 zi^QSKFCh)jG5B8@krHLw>3=?7=Fhj(Con9RZ8Zo-I z2T8FY+Nn*ZjI4b1KDUxqP;ibveQxc?;V*G{?PSTfHNn45ykv1vUuRpSG64@<(51apF~dkvAlb(`4l< z$f9E>VUY>2Tc%@hkcYIRN0wV-O>H0bLGezOQt(xiWt(l*mFX%zh9yeOtapJM8(;g6 zoFSw%k3u=;(NrII##n_EBp;_%H`UkD&mA=*ch#$-rq7*%~>B-v|V8=h^EQ@svQ}$`l8y7)X;;n=(g3w_> zOTz$Tps{uZF^aOx&G4l<(P5}q%6jzxk}t)_t9V5^U9pydJ&ztRUDF5ll1QFGp4r7U z8^MQ-#p8?)_jKqR^y>y{Y9}eodgYNbk48jg;(XZ@`LYRk)wC-io{DN2;K_kiS&zw3 zBmK`d#+w6M?EWE7Fr&ry6<{cxI7&XwO;jVa@^| zbhRYmN6FhzueWcO|Mrgm`f23n`}Q}SszD!<;j=%Q7vJ0;cz0@FVV|d;SVqx{|M5u$ zR%6LGvE=kL4E}7w{=_dZD)#(WIRKOoikK`zI{Ny{jPVc%ok;f1}>YmlGEu=VF zkO~9?c&6vSWVkzsYacjcDR;W!4aw0xtBUi=!85B$KxZkg>HA0?hAEdERVmf* zFq?vMk`FJjMxU6KnRE`9XpML0REO?sXH$Lq&BM2i~1LA=O9UAwf`+)mWx zCki3aQb=*ZCZ4u6z-g%G)Mm({#q7e@p_Jkmln!Jn*n|NUb2z&= z%PnyG#iCUNGGM~aTC0r$$Lw|BtS~-WJHqj@ACO~m7?be@83;^2n6bF6-y0xZuGge} zSR6Y3sDkji-A5HNL#w}+n8d|ybJ`LMMwOG~8nit~AO z+obi%=E|PG8vkip%ORV@=+IxsD%47j2Rg#cFUg01(BUz)$_cBmGasGueB)!i{*lZ zxI;4^ZpWXFtJ(e7sv-9KvEZ&;-6m`!ry^K}mBk*cnmJ`mh+SR+FwF0X`s-f|?|wn- zRJ11QgxG;G&&^?uIN1Gh7JD6~KdA`13xJuF^xHFJ4XzbE?KqhFm;y|SURhb3#@A!q zYO@MQoHdbrRevH6(Zh}5p0O;Jr^Qnt@9-5qy#CJMgDg0SBp6hUG2awdxdnxV8A*+B=zpOy^N@Zlw z4asVSj;HxV3HxP#;@tgScQ%}P(H{5~r*7eo* z(PuDaqZ_mv7pMj@Q<~2g)$f6j*8#`dN{PhI;V9bl=u1wk<1-QWz)~RB#ksNnld`ci`#wv%|~I6;<%`=xhAkuOA*2XH)0Cy*R7lF>xr( zL#Ox+d`57MJdi~meeC8jcT6w&*!pM3ilZ$t8g^>>mFcp7JLt@2_Dt#=fPJ1>eVm)) z&G032dXBHTsVP=eEp?MKt}T8!IofntinGN|XYMyf4#f;(oiXBpGzG9Z_g8KMw_3953@- z-Gk{Ih731`jR@{hLUmQpiA(Xk<=I)7Dy?t${HpxWT219eYzJg?B(j|^$RCH`|@9IVNXY+Q_Ou;{JNwlF^T zRY}^2y?i&*`9J2Xc1 za}qFNT~+xtO8wuw9sOR9g>!#=pRrgg?@gF%GEWHmYw~T=&~U@K$f)InmA7gZyH!#9 z2bZh(@!OfPk4Ta);zxwwS;&Nd2uMDVk&y}Sf!J0sIF_;Quxkt+zKK1YEeUQ>>M(z1 zwBcrNxHBT28^?nm%Pm{7joe^W@JLkb?SUtY!Q9Eb_yuj}0JahXM}}HTy)?aV&sKL2 zT&2lzznVDhH%uT&80KWK=%mh9fnmCrK*scTEM%74Dq#uEAduGZ_qD zDjT4KqBIBE4rd$!egem}E+)?jBVmiCmnxC06;;lxt*0jqb`M&Dy80gtPekfK_|icu zVKsqPEfb9ZQW^rAb4^McGvS0_LG33I-bSt6k(NE>g?~*dzM+4d#~A-RD>7JGQT#H# z_D*dgg-zJFL9c@2P)SGjJ$SwCSPz3(T3of|Q$wilrKggJbJtPuVPHXm`j!K?NB^gT z4uDOA3mo!V!73yKW&>{BYYz7OiLSAb<>BrJba1Te|KjY8SWD^ zQ&X^4S%t+NIk!;QdsI5BZZQAC;zaAveYK;F;^p^j-Q?1xBJ?)OnXCRc-fTO$1Zn%T zFxvms@cb{!$h~+E30zfm=s8egtsb&iYZsaOacE6tvOnEod138mu3Fuz15xd{1N8>e zL~9>sSU1;l1Zd^SLH_SgpYXz1yyekT(MzA*?`z`PuAg@dnm*kJqmj1H@db_P<^~5| zoiXp#w-;8#L5+CO;S*%G<>MumIdN(XSi5wfOmq#}ZY)1Z?>j*FKt;F&=~pUcFuZ`% zaHIxCDIq(G55iPHA9v?QZEpRhC|o!RiULP%=3}?qW}NLyrtx0rm8ptmb_HIYia0y1 zaH^1{%l(<}m9U}GziZ%F+F=^%VI#IB#?B7;Lca|%1HFXwaER|VFR8#<87Af8mg3VW zCWZ3p_lc>VwQ=MghPKdq5rkYaflw-seoCO#bvS9C78aaHM3P+&qsXKLTi?lMs3(R1 zMp=W*?vVEhnZRCIFN?KJA{5=2bqm5pscSNnhVcG&f2yvpb zH+$gjOtYy{_P$i&{rZxF*_Lgb$llA#eFtX4CBt;)FJ=BQ&kG)oZzr7 zXx`o+ni&l(yKIqA%f|m@U8(k|HBXWI$@|<=I<#H|SNf-+DK7|KT3hl?`1z^QV}`re z^XhbJN3rWJ>x@)jivp&9N0$L))eSFyir97tqLIr}J;-2gp4>4pUGbR2en1yKdR0|l zTPyrXE0wy3VWP2QJ^`7caXb&0Zt!p#_B}T|3YKs9UZp5PrElIwD2_t`Oyr`UAK@<+ z%=}zo=2EBxRarPrs0Z*QH#xNZ{9nntS?m7}Cjo zo!s<7|2X?ov3wK`(&rW9VT>e;v`j*j?qOt#C86n^PW!DKzKpf19D*D&APec?GT{#0 zg3ut~amVbi#6$%nqwrVMbhPYxecReN=9@vHf_;)RqO{>gMg~r!xJa&!AcQ0&wOrhJ zN)zr&aakn(82PHn0fTDdHp@g`XIb(GtEBpvx#VLJL;!Wv*oWM8@~;DDR6`=0Zl%Aa z*bNwBZmByF;e{T4Jz@xme?aw3{=M{MrjZ4(1;^7ppU6;`a^5*a!h^&6zi4~+XsGx1 zZ}>B25=9v)gJO&!WbAv9BTz;qBHhmu37oXTNRi44XNq0){`jq?;aA0nqwDjA0f zMX_r_l0ym4HGRMLv+lK?b$@^N`aSo(*DQPgF|}*v{kh)P^}1e%o%-V}uB@&5?<=W$ z!s2Jnl~>fP$4J)S>FRJeUgoR)w@Jj(yM4xY6~NR9gr?JDotGzbZ`_zEu7#!&vgIKI zg8zm)8uZjC;8^GGGdDg>TyKX_=b=%Mm*o?TrI3^*jbQO#-{i^HVCIRq342jcQbnvO z`UYL4HUZ#vkg0r-cK$7;aOIo-Ax!k7_9}_mC}Qnu;*{c_edtQSNf$*B|3ls};Y$PB z%b#Y7B7RmmFHWBgpPF7VHMEqVFl0Y>TiefXOW(V-9HvOxr6DkR6}XT20FVtsPpGK^ z0OC$#cg9)e;|qai>`RYeECFLigdlw7WJ;nSZ7VJX3&RE-`zU#oe%p*aw^Tgt_A=Vu z{0+Tgregf^q>{eUNrjpO)T2_X$M#GEeVW0Bpf{&AMx{M3>KmoM4nYZdo^$Zmf4Vxi z)S<@%#+i^Q+v>{8C3|Hh(~Mg-*6hK!6mUacZ_cLQ)<>0c@h^2>F?a$fG0e z!iGItp2uC+n6NSzdOtDx{GEOxHvLL+h9<|>K}ij{)+3o#6NEakDh{iw7+4ajye&4_kzYIsdZn^2%2!9u~tc)+zjxT`I2guqR8yn$pifTPS>z7cQ@8rpU@!?b6x92Gtm4o$; zKo79IDQS@w^Iy+5YNF6$E=f^L6hUvgwDH7;3`Uc)1x(f;;Clv~QZ-Yd4B$h1$^YiCxV9lPNG&niUQ4$Xm%&-j!YupYRw2<2}n$*~(6k7-8FA*MPtdz$;K_wGM*>)wbA=FqeOw=P+Hd4 z^0PXvq}y{;0yTbIx*ccS4A>o*uaYL6m}xJz07jRV)d>@cBPdE4c;A<=7m$NDGmJ%< zY3&%4nGkp_RPZUPihmOwRrN8iRn3l+Ll&15B9xsSZLB1z#`H9R!lop0LElLB#ejU` zeujCg%Tjc9a-xi}D2+~Um61t%WW94Q`L`WH^ia7+es)U>5qVaJg{E}$LOg`uc|W2; z{hvsTvBqyy^(#mQ+~_h~ZafPXgX~fj<_-Eh{%~b_B zMf_+~=&pP>R2LV`l^qa#7mXi^3%woP3vbMTZo3`Md{|+vn8o_e#nkfD~_67M(=c}izA(~SuPrIU64xbc1s&RL_PZ>M=poLB`3ejv}RN=t<8$!NCo z?X(OTQ3l?X0pE~cxT|nXWYv0Y2(juvqj|#nk%YeT6_TgAhYnMB4_y@d>W;pCY>)Bi z&(IWh@~{R``G@IWdQr`|i8YE4cAc!(jC}SK%=dPBwzfG0+r&t{3op|W@$W*d=!2;8 z9dQyEHAPx*vXE%ixpk@#xBf+48L7Na`l7C{ocP1GLmVk0!d!eiP3QFsx&iH)45jG# zfQwF6T83O4-cB*6;!1)Z+|$A$q{KAc-PoUG$?L04b@fkpo8lgNZ`cA|LMn z*f2V=f>seLb-Mn}<@mmv3f!`{+`W(rfb1kjpaQ&H@bvUOM!2vu zzw_R%q1o}dB4=&R_qNTM8so*jVe}6Z1{pFJUV=h95o7lFUxO%kDXrjLI(l!Xcc=5l z6QS(tdH4FH=ST6-d5~EMILhk7JRwT`QOd`aQfH&mqyPKV_R z0(!@~yqxxUYpOEKQkA!qY6Mo6j(*>6MJ{;Sk^I22gA=;_u3i$}hemy=%kt^jZsl=E z%<^y{XVp>3de)B>!Kiw~2aQ)w)R=$3sz$lss*yH!*C+K6GjAJBP@!V*d2dQb9r8~z zBNby_t>`vaWJs;B4{$wRet(`MsZA6Tb{Sc|@kAUa zhZc503>bwSm56GLWCP}*L`g@kZl~tO(xJ&5uQN7GUnYZWX>bVjI`9^8Z?e>xnp|&i zt+FWjP11a*6TJN{Xh4aj+~!KAfI(St=Tzd2Ml)N_*}=T?$3}&~y(fs5JN+=ygkJ&Tr_mQ^LbZ9p z?$EovJ^rIUw03c(XldlY@?r*0d%60mv$H}1gmPVcJQQ;8Q)P(%yYWl>@!^XR%isj`=u1pGh0O{%+dDay z)VTZ*rwdZ`A@{&qDkIB^%ZBRKC*0?NK3J9=`1&}gb=vT|-(Ed^GFpn_bCcE-e1C)D zA-t#%M%mKajt8vxbn#SIt0$`?AF>hyE7V&cEo^Ms{LIs#zs^Mj)oFNJFs`94)7x+H z9j`%NU~&Ey6va)9Qc&vQw0|x)@hWY#mgixQl-13x7uQoL$F_32%ZNzGAz^$ z4)uMiYiPz$Vi2)p{xd@|IKNU3Ng}+@j?GN#>jZP`Dl^-ISSiIXC~bTsBA$M2Jo2&n z1@{~$r2W>d(y1s!jL9VL9d0%R!xDI$Q4(cSt+Xk;cDt}|5vTRtvgk?*X3p>F6# za$3tsNoinhT~YqXRQb@P?>UYv_n|vu(?^^m?ot8Swm3_j8Sdu5(Sm*o7*~Vv zKU)iu^Tnx$uW%zkS{xjl9Tcw)n=6}Jx`h5`HoRkZPi8oT5zc$OtA02Teh|AZ7N-ne z4G)q$B2zR>cXdThZcJx=w0KTCmiegZF*`BeA_m3;3FsXNXrP+xca3p9BqiVmBubC*1|B# zJilAA9(VQJWC3e5WDV=7@DB5uAjHk->#9d;KAqEI=-Kaa{)ukx@zqf0Oti;5{Qqjt z?fMLh8&$-y8B9VEpQj+@(NuE)Cwy7%Fe*ld@2Vpge2n;{F+h2w)mPo2iUq|O>^iohCV z1{5h+*Ls)9uJEU+SJ-5Vu$9X0E(1+BCoa`CGw1Y+Z)m+dvBTZqnq|_tu(%Yw4UlWd zc7i>0idT9(P@*ou=E+`Wq6U&t6GvtzCN7#P#J4QEI?pbhD-ZEcN&`|xfPdXC=DYF0 zBSt+pacXf@p{LQ zoBLBl9saKuKq8sW!m#E%i-OM9Z68>g*|jvjy!7QjT|`BuX;nq#=be*&-uLG07QW7K zQnd>~S@AP;iIchPvv6)3D7B&ymnxRtW0ud6TOyLw6(pi~jHW!}q6bw{q)d=?u#4V#jaX+6mL#;^&K!LRN=MZ7Q@>EiqbT3aFnhU9*T0(|s5# zqNW;&@pqMwRC??1J5Cj;tzYpd8jK5`L`yV!AhwRk#Wj_u$8a1yEySwz`cIPtUBUx) zN=V5*kyCP~x*)m}t1Ayyz(=T)1GBBDEEaINM+2NB4b>z|71h+YTp&I_hL&+;p6XaYeX}aeiGuINEcyv$Q?W_!`~i7$npAOXT*>$46yf< z#kqkEyhBxGWuy~zVbL`ElSvZf5fXa>R@}M8IZ6SUF?WY0Z*ELKnxB!uUD(cz?i~-D z4!Jj0!W%a$8!Rk5t6ISS{XEtA-OwQDfzG7o6b*%kZQBT3iCe+YElSaf3f zd+Oq+*fU)c;>GnE>qSN)wfZqO4#9?lg7m3*f7nAq_vZ4abAuc9GNY;4aA^&o`BROI zrXfX;Xd}GdUX_@--I9}LlFMR7^E=9>E@mSq8)J>mnzrcc+>^GU&3}G?8UYtPxWaS) zyf*8ihA;OuE1BC}tYTXkV2x8kI)avGCP6?qwAeq^#UEM9d0JIe+Z&@@l(78$@d4+W zYQ-tIf{SW@fiK>#(b49adbo1Zj60`sy9thb@R5&i$)b6jAkK21c>Tr7*LAFY$a37{ zE6`x?x;s|U{y;0mqheQPYCt|Gcy3}A48~YZ5B0td<_;dG7P#SV=ct(*;>*Bz#Da0g zHd=D`UyLRR5k@e{LNyZm`oVQ6v&3&kh|b&We=-hkITH5(_gduenuIItJf#02tK*3- zck5$^CLC~GS*%Bwo6hgLv+e6#!BgGybWjsOrWkeB6ic&VL&3f~IaacUmn=f{prW!r zvO2QgI_R5l6Vp^w6EO!1HRM1=L=c#N?bSP^^(q;0P8OFST1dRNGH|KVI=V(xYLx_D zRW}ni@j6t@f$<=au=Kxil`d%$2{z$9kr}vN|@$bPeb9FuDkXk z4O_b)1~w{=>rk;Ou^zWY{SdWcyMC+uYlm2HP~-nOoKgnpSHhBT&~Fvy3rT>B(|Q)` zq9*@n%bEI50r?NsEQEo-=;g_UfkG=S&dKA$D^%A>XA`ZwU#AmBJ?^E3L~L^$0vScM z#ww2uz;6@rI+1#MF*u;Z5xfwFUgR#o7r9-2&1Z*oE&Le+2Ph-n^?(d@0`7WRn`L_uKG` zjLs=B`j{nL;gzTB=fNxtu5qz1Jx{FS?_ zx_8Fy{Ssf>S$;0F=F(Jb=LzRcvt?(8YN~1=LgGtz_e}RuZi$x14a`EQDGVgk?(nCa zjRNl}IE3{jg~i8LQxr=XPR4A#4=d9uwD=~Soac~*j^h`9c#$5kJrjPXs=6u#H>CKG zmO1t{q5Y+Lm4i3dm1G+WHXH_tiiS=Sv{uO8(OEH2t|1pKa)^KQG23#bacArnC1TZ*)iXn!{OU^&z_q**3Pg9az%^R^n-e?W|`iM%3pv4O-|?v~Dnp26G{* zw^@mYR9}hJLDuQGCX3_w&zjM;_Wz)6RJa%Lhh-zL-ginP>;~Vyg(ti@FJ@#8O}@aA z0qBs$;ag7U4x^ytU(b$we8xR~qcm07%gE-&VnZNx{1@^3v6ShbVlL?_mUfq2s=fxk z&S*H~c47ks6bxVO>Oh=RRktg%^GHh`KTn#|`ZOp=tY+!Q*3ZjJ14UyCL76q-0Rbko z5;1wd6Hax%-}-;MI8bC-bLr=ob0!a-O4^ajUC;(1t$5PaD2mDE|Ih>ehvQeYb-ROtCqK3&`% z7n|=!mbXVkVg5#?JaSwjf4k2S>IwVxq=%)2@7eU&({UeA8S&@WMOMD>OjF!-n-fIJs`E?;Nb14zt zCw2DBPcc7YKhpAl$N6( z#0VCBg#^4Ucp`@Nmkv_?l5jbzNkoLD%u2pqyyX;5O0=~g*;^dGJ9fcS2yZ+S-m5@3 zNjJN%rZ)|rqAmzPhinQC6wKx4vj(1c+c~!!eCWt;ZG>zr`2%Cq($1m&0w3$e@4tRM z4>>V7FqAR>ac1-DAMl0FT&i8}J5`i$tgHITshI30sXpV9mYAKd&TfnvRVW3Wprx z|C|k4{+YMy_vn$HySFE&e@r|+;8&Pyit4%1SQv2g!Gq_n5f9r-3U9d?XTHpxKAOss zBI!BoIN>w{_5>b6ZcdaZr;E4T5ZsjIXY$bge2)Ixl!`I2W;fs1{UY zTcMp%2cX0A@Os3Q*<@q!!^Yc2`kaI$DjMon4#oCUt1h`2E-^K=yk;B%t@+lSH%0sq zU@q-D-@QFSx2RBv@=E7Qba73g+ea8%ihBY+ZZ}9C19gIP50##?L6PaUiBp}=Z|#sh zro>UU^wji@@7S1jt4!29JuvBE$O&%Z>x}G;%8^<}Y%zxd8=6-L&X~w`)xJV;EiwbI zsvfC`_K>Rua7Xcw2tfoJ=-Gcbc2Lf;N{oh>y(#8=(&)MFOCkF9G#gTOfoT9iyy=jMFmOJi+y#^Ei*>w7hc4%(?|a6+Pj{N`lwU*b-E_9l zdC|J-O4rQN^UlDYqTCVck9+1=(cC;_-T$xJ2H1)?1u2`7`mcJsG2%MB^*T#LnDlo0 z(DDbP<)6Thz4X2EU3ksAn#Hf(FKVaoiyVH>!Xutvfn}3lzvlEEW4)H~svu72gl1ru z)=&k6x;1m8H@_V+-(xsyO4sJqtT!Exn$^v`^o0ZuiC(rmOS4J*ny0 zM6^;%Wr>ZRfM``717{N~gH?19ERlHq!PAvY$75*-v6RttR)fF2neo;kwhmn{$MkjE zq2CiSu=(#n(*J34>~$(3#MFIiLg!?t3LoEbKsrOReDZ|8c*D7Cce zM(LZycLdPi^&%n?C(qt}!!AtgzMN`cCHZjUt*eR*Lps~_flp)dgX;wRv)0uaIz)u1 z$g+GQe4iyICB}R}AnKle6G-*QIrRF$jFrw^D^#+GsC41^Ff_^HoE_DT&LW832OzLs zBKqvPby#A_BXu6tLoUMY8BxopU&m#KexA=sB^qK)e^%@o+nuel0(G4Do0i>gnQ$6| z7TcTc%Xsa;zdM}Xh$!>2-jrqkGoaci3_NZYm<3mDYFJGvWOcA2QRO}iL0x3u{5Tc- zwaY+zU&ZW=s~?_D4#stGcObTgN;%vGz3*VIdZ>^)GT!6-Y-B96rna`$Ft|KCAaqKt zzgEHdM8x-^s*E1re&ghG&n&aIpd|hrG`HRVtvmFxpwwnQE+*RP z$W)glx;Y5UGr?~Yyj{&CJ1Ht8L^u`^qdhFSQ#;=nu{@(4@$pja;`alSwZErhN5U0C z!vf}aMJzpDEG*&(eJdWC12Y`E(aL!Lxru>FjViCo%F6U#?o~4?faL`^iC!}&_y`%$ z2qd8>4iy?VwuT#Y@TmcG>r~%fNHqipc&oz}SJTqU%;+5+ZpUrCH4TXZqzl|#ZB9xE z5v?p@xyO@4Xoyce(HyJDEZbwsfZF#&5dPu|AS#jCjYD52SzJb3=!t0rR6f5le+z8` zN>6|1syt&2GS;l`MCwfFy|6>2FF8;=3;5epO1}o=^KpX=f=9g$-Zt&n?2`7BQS>LFU{}OI*-{7d`coyXVI^Md;LQ!#7uQ_TWfb#l3+w~e)W>Z0s`wnPEG_?# zDvh9+c;B`66N{}01~~olZtf~ZWqIv}NTWoZVvO8xrL(MdY1Mk7zpK!X6+RLPV*TZ+ zm)m4LB+U$ToA8*MM4jeh8%r2u<;AX;MY+pm6CBP8v)e7;XgeNTLDFouM1A}jdLqT6 zZpe94kvU7@5JygxCB)e4l~`eh{_08tiHH}HiN zuK!P?>liU9M-*)-Buq-aU<|m)?}?(VLv@S82O^fni>M=K&g`l(UK&o4UKkvmZu``e z8A>>Rw=-%i#B^Xtds-48Jn+tfNciJiSic$DLcp?7K%$$|mMs>NFVEldWx6?~hRC>e zNOSbqh-62{r<0pj*oWjB1CQqX3(i&DsBy4of665Yk*FxfTSLhVRTB83e6fqw@i}sk zfI_FdC6Kw-U&M{G2w>nYLKy^4$2fPWGZNQa(8W8Oi#K7@Dl|AaG>ynh`+QzMW48n< z64?V@k7eF(1&5s_%RkE9s^3ysSdn6L@UPW!$6i*Rs~}l-?WcpAuAP(!vy5X11&p{C zzrIq(tBNH?$`+}Iadp)d9hZ8HNF+kuaLB^Ry_`ed(Zc0ckV?BRr+kjt>!{cM4>7|~F9}*%Qxt~Tye=W`W#{W!`)()S2 zoH<@p*td3lRUqUFc12W#EXIb1idr5PPhF9;LM~$WRRkp~_up*Tc)jP~vqyNrkT=`( zzj4ldtflUjYK>fc`mUyG@mDPD$0FW^FMfIv{_AIKPp~}a zvr6M~T2IIcz=cx+Ds~Md=z=XD#8wR&5?Sq0*<~>YC4|WPA*#?uv0J5;fjCF|Xc9eh z8n~6&ELk_?bOA-kMULcy*sn(j>fZDZY^OA;R-y+iN+?AA3-pHXQZ@RFmx-U4k@g;a zh4}*9&c)rs^OpCElEQtSeK`PXP)p+h6kbirP*G3u@TWdeY0Jph)7T3U+)XQ%n*;kS zNf^p~7c`zMyOtb@e6~Re-wdp9)KOKH(nJpb?SwpB`P-_J-Ha=vSYaq<5i*Pg3GKJE zn7!m-C8P`$jHazc`irlqmpjTa@Fi+l?Z-T-IwH*(64@>&vzuUKh)8KVBt?2Mb~>Dm z%SJKq>@)6qZ?$t`P9BbnZ9ji2_5qPMZBq56c-Pm!9ZZ5N`l0$+l9~hGw}0HhyBfMv z&Gy4&Z0_{Wi>7-lynXMb>hYdr^`8x&1O0bZsso=eZD>ZzN@GM`^-6TM$qD?^b^(W!1IE#Ud>^0#FoV}JdwZLA z0q#M(2YWB3;1m&GwfT_=<+ zibU;0^<*bYq?xS|Bt4g#FR5%vEr2V{O-5-C>c=QpHcUTa`Rx0W!A&Rfs4MV{Tavbep$Z z9j=&p`ReG658O&A>Mdz%v9cvbiPWp&C3(%r@-~#Nz`iKTFYtJfBsEY!oqsJ{jVg$J zwL%mc{kLdam)DJHUUKlfmI09&f|Y!I;7t8{20+>0GD7CXQ9=|RRbENEeJ#uSO?I66 zDQbn-p@Qp?5*p?@?TRr^UaVfBY^xOnu?LsD5%x{V=){WAgH3)<`CS&edCis{744Lg z(lzfv-p<+h8a%wuiU*Rj0a_smOV8Vfo(2 zW&YzM%hS@CE*kvv;fr6o-<~wiG->V*U;F;zb_$@>$N5_M{7XR*$6FV}H+!X}vic`; z1`J9?QZMAwMD3~ZM7$12V8CDNGZ-vY3Vkg&(rwZ?=8=}V-g9ytP-jOyv^FD5EWno{ zOqj+V307n9u|GP{^|q?@l8%V5HWEoABejTrg~qfoqzu2yx%D1YCBRgv&g}2qf8^OJ-DgyfX>+!dp$m<;O4Zr^R@be< zcA@+CEhNfNNm7(ohBOh&*y4lb-;{jFdtt7WW5PBS&eb<8fM*PhiyZBcSlJ*Y{t&;? zQ>C?IqY_7$v;zL^mMr6&?vSLh!=mq&8vALpIQgpK!GEv|UOmS-vFerwH>P=eKIt8w zs|k`&QjqeouTZtZfJ}WXM4k`q_q8|B;)%U5zpA$zzJm!|jj+m40vne8VC&84N?48- zvd(|39MwCYz30Qld*TLa_j1yl>MT9nN{DBPUOIPbM9s1_di2`)zrz*I3RkFVo{sS7lj7eVy2I z%>9CdWnz8CL_x=eS%<<5m&8ug!O-sd^>LF)dlW>t4+F-Psq2%(Agt7?f4lB!J8m1} zOfr!nW<|82WXadN=;+HNYsR?yAiY|ki}Kp1cR|3D} zi8ZS?1jMh;ff%P9a@7WGp^vmm(#0tNIYF}cJA~n0WgyYYC76F#?Gtv*N+>CG0+wi* zteaDh-tmkvE@5LJQ|7)IUP(`%AeJnqBSG2Um&3hya*wAwoy8_xNFU?MM!!LKMeSR0 z66|sNaU)9;6R>+J4Gasb$qX`s@D{Et6AEy1pE=ly-|IHf`vE_%9Xt zBqO4~mE@2Z<#(c}gaT0R#EDa>jHXNhoHmb8VBLKF-TMwh%I^&Fu({x^(tn{w=tUm{>B2mI=IMf;%5+AF_xFWLZIP`c=6WRvu_tP)v>g?0B7 zdZ@n7?O5uDvO-+q!%aVccs}tWc$vR>(=)=Z4w+U_u+FRtzu@@GFQSyUiCDxr9~L(AnInx< zhE5MBrS6*NZO&YBsSPtd`Q<*zM+{dSSG1dk*qEpQ^iL<&0=T;FS<@aR!5R3iOq@E! zXiD?Flh_nR)M^oj6Cq8A(Px&6h~rL$&U|SJ#x#!r-)Km{H(Egnl_L*J68%M)!Pc&C zFs`tJlMr^nu6ag1I8YNd_k40!#9~#%rl6v=x`Po@RchZFJ5AHP5@s$L*<5Re{ra?t z!elDM-^L$Gl!^K4<$E9_gg=$5$x|m&AKfGggRC{KM1yn5@$C&GWsZEUSWoN?CA_To-XeCtoLY?4IvV1=gt8QR>>wg9#vUXj>ndf zF-EC&_mYKld|)YLi9)9XAx0&uj96N$&nU~c$}G}ZJe%%rFc>)rKh|{!@`PC@9vckhFkY? zAr=h2a>yzgavU(Js2La!w4E^}Ta>kK&{TTE#a+ctha0`PaQER}S=&do^TVro)723{ z5nr8r(}NcHbZ!qI7&W0&COFH%>iLg9=fW=r&w4oy6yC0M9ZnDv+|tfwcoHt5MUJ@* z&PWt->6*^eYw|FUBpCso7&1hEPq|aX62%yf|J8krrt5+;rDcw8mT|86r7M49Dq7@O zQxGtOoFUXum|2by)ERlZ+XiMh9T(&pN+|F(O}zV(<6vFHat2_$GiM|2j+DQv2?@VE zvzXeM#r+X{Dd2XrLqe6INAr0{0H*Q`CIiLhN+#A+7JpB3Ac#| zWzE4N$lx}&^vkY|^&(&7=CbVVhi)n3NQ^WYvwbX~R}P+cUK#pErZud5FY^+} zSkOIfQ^YJ|cfF4z@{nLjDHDUJFBW>FOvK$iC+1Lh575*ZX;_3ZWXucBf(HO!p`MH+MK%wg(lJC#eYV6a4u*brp zBHuX(2Tc!p?cf>tHRE(hK-gW))PP&!q;nLwq#m&bCW=!gCZuDYK0R>O?_NIV5KFrA z9)uLUoK8y3bgG-D-`JeKW@kTQgAk#w2mb7O)SF-vAX>;!LiLGLo3F(rz?B7q9;9t| z;$!rAaIVBDj`4DW8^}WP6wx0mtMhXHOLxN5Hu@e536>h`m2 zQD~dccrlA>2R;%b^I0PUi`o%O(?h?9GgF>AZyc&w8jL-)>-X2^)-T@9+|k{>HLyUF zsW<{k{3cBY*`4Jgn!@; z!DZR+u31azdr*pT6+t?S6=h%@zb{>HZu+f588;GctVpvrubS0+!HgO!ZtVvQR~cZR z^+d@b{D1hWX(B?!nr()LC5Z;juX6SZd)T*O=%&9^E#04dg@#p2*gXMIZ=u_EXtmuW z3x>T6KAPE#t4UB76=7d-?fn)-vT%nVI9zFofhX1+SIaLO|jU2OlqmiJ(L=#_)~@uP09V;$xsp!8y{sPFZ&ig%&2^qD3;v?$%uvE<3dZ8B|L%J$1p0 zyoja6y5GOLP92E&_W5y!agprF{Ed9qcB|Tm1>x`0r#jc($Sa*IjE{=OyNH@5vP3W< zxZ=J1@AsQ;JMa!vfxPrQr6%E1`No8n0H-}(o7{dd#qg2VOvY-YE&9C`bG-MP*tg`0 zjQtLt!lGBNbl{O=taa3emo^sYb#lCSg8rsdF)a;AsU1}4(Xxct=0OWgCy{!~7op02 zIw7kk+Q;!fcKH+>qM9P_l}A~+!eR~4(T2xVDS=ix=22q3%5l1v6qK)s=!v!KgbJ;^ z4bCjl3F~lQrhql`P&9-5ClvxXF>?!srqvK1j*dPY~ zY-?;bGy?1;O=I0=O#QB@W7MAsE)Ba!!kt?Fae3l{b!{vLo)k*yEqH`2jyg@w{P;Z0 z=Y#HasPEU0E+|Er8~yH?EPP!#J^omU_w2B4+S+0uZn-1C5AO&j-C;D30LdQ?hMZE2 zb{Yar%X~ASW`E8CTv`8abmoB#Ya^jk+jOKToZjMULWtCv8i0Mw5g=$^5xgrEAJbx? zZ@q3aOglRAy}}|c_f9dxK4&g31x*Ti<>gO3b+D84o2%Nq@R0b zQcLH|^a#E(Lav;^&=`#Bt&h>I5QS(W%Cu`XDScGhVP)ci*B2?bUt77ic-joz)vWM5 zD%;l=cFlTSv;N1p>Ym$@ainURx-eu!|~>Y8|?u-M2I4pmF|xHq-?a%ab4_^wi~AGI433?cItM4ir0FMCM9OWbVM9o?C&{zO_*e&!V}b+C>`j3pf!TS zHI>-3k~|D_e)xG_FmNf{Al54X>6|wRkF=6ny-g`R)BT4QoZKIe1WxcIni>8_0u|9pwcJ7Z)6;mrI{ zz0!bVu7Vy3n!IV?%sk!obq-^t5O(pF71g=r;g_(txSBJ^QgneL$<2|?N}#Gk4@A%p z5$Z*(^$5o~YR5hG9+cj8P*G9}k?aUY%J*)yQgEUo-_6jcNzkVh*c2#}c+4|y8QJ59 zJa*{$9=Vkr-I{_ibNAHQOUtQeZnSh-@lt2l$od6AZA4Z8xc-E?@?X6I= z+LK5@s3)&w53ZyIIDzuM(Ck?mkq5|DMh-|z*{n;GR7)@-JWyasT5&l&C*&SX|DtkW za8vBD5`E6OYOh)Es7j|C-li)*yy+!<9N67)6R{2NV^F?6R}uSj z?y!HK8FWj+GF$%9fo#EmfUq!+D(#&F(rxH5rh0R{(sKt}+7{2BwdIZhD<&Xdrcq%@ z^})b^HZ|U-%iuuOVn$HV>%e8s@@x=LpnYm9;|8c6d=c=1BDWgUwj0(8Pqq4tWFrp!bAWBrxCUGKm#--;G;hKcLiF-+y*pKU2H$giiRV-!u8_&$%v^U>5?5Yf8_>3niq`tQ0b5| z54m{p{XVIV?a^N8dR=93vOA&?oo1wXXtJoV5IHv@-U${xkY!jPzW;Qi3R@XKvqT8l z(Y3NbAeFA5G%qiY>p;a~{Pmj4tLhRuxH*TiSc5>)_8NQwCx7 zboq7q1htqtJ1rMQ%+>7*`Ki{Qe<${k7{t^fhH*vgxS~D(E-f^jf8jeYkdG+EtOZtp zqTuHz!I&jDF>>=?a(6WZfsgBJ3EI?cF$-6N+Iz&7V+EOVuqd(I> z;hCVhQEwO4`VwQ<-cr$9+5bC*NfppSu-xF50(FP1JBis6~) zFV)jr;OoC-Xh?RKUF)+?-OC;r%IbYsvo~cd{7OVgKi8}Mac?iI`UPlAQBje8k{qSX z&FwfGw{)ZaUe8xLXydJrcRb+tbVx8UB(%7BmT_~uSn8A;(15?o53AWFFO%4}m-?L- zG}%)MhIq5Dm3LmAHDPb+x%V0v;wvkDUJZO>FbRUjfkjuG!wv(`xG7%f%pe6SYwvKpa_aCB{h8z>!4_I zAnxK(yIX*28ULk`Q#q>(ZzPuv?F?){h@;%&0?F__}^vG`;4N4!^`7PuMWq!d%nyl zYwLj3u%IkCz;{kCXO2T#E!Y6+qk0R~DcclDIx;f+{?t$9ym7y?nRMOwmdmth6G%bO zWz7YokMj9^>%(!a^p4tD4<{vkf=9xe45PD?sWY>)l*y6ujZk~WyiPHU$BWMP`#EDv zAbj%c%Aw_qx)%d~^>%FN!-?M~@@P{5J|lc=LYtwWi^W?*tuWdxxJKs5!{|Sk37Y6{ zEP!tW`c~oEU!Mkq;I(H%QI{rllP)z8MY>8>t3evhif9RHF!d0Dl-d8z0wIu zKqe!zH(~8YUHvp4Lp378<8I9?yDW&!)rTUl>k)+-X)**T{bZxQiH^(h`xGI;838rs zG@Ow*p9aK-lQL7Ubvb$ORu*7Ir1SQ1>V71e4>U}#U*Q_Id7UDTh4>XvsXmuLRW69W zg#oz?$`c$~5LEl{#V{hmHn1Z!k|V6SbT6~ zoDotU1Ll8dblD171Z4`^ssrCZB6UwD!iA(`$o9C~n{w#8Lsr6xEFwx+f%e47mf8k| zLUtUPtped}1z3i{Uuhi;PT@&G4JDkc8+yw1**6So7J(lH>>S?2JimYc&V2^y zc!!+Zwh_crHR#(pF&|91-2Q5w=Ds5_iSA-Q7YC-stLB8~Zt&q5)Z}kJP{q&7fMHYV z_>PUk=T7$+b=J<+S2`u%+m`*ahO9fFzsfXq5Z7K{H>b{9%jO?e}R@D}}A^%wtkC+cuL#chBr$ zn|-tj{M_)TL%Cm*F~-m15BQ~KL<>l2eGVLJCIE6IUN2Y1$luD=HjMK8{lk(Uu(E|k zxJA>4bGOGT&K4FH0-2BsDuBwK?KZymprPcbCb~AM)`cugEDkIJB)*Ubixm5Azo7Ek z+OVnLU8n8j*Mx-CM9hBeQdoR3GcDcz$l6LWo08_qU}OHvw!+z5QsD~GP_WvW7yf@+ zOx@SP78ozV(&vA=F5EA~kXF|&4b=VqG6qq_L%+Wm)%~jAR*f0m;5#jR{5;-W`$DsD z?GA^av(9-585yAC%g}9xTaNqbHrA-e$j-Z_NK?dxu3PG51Q#?3$~m>PFwCin$gD{i zgr8-wEsWno9Ul!jBM#35+Xj#8GI%jJ1RUc@<07(V(6hvQW6eS4zATgv|gH2RO*r$Nb1{R+_pb-sgxDyi1E}hYQoXE(J`+(O!?g_`U`Jb(4b{(klVzFRQV1b>f zWE)&jqHFK;?MEI;Sy$mwgu*GQ^(XcFn@EZ)|xSI`kT$`%j zTpTJai+j^+zrO8sh`B8j#bBny?W^*FXh4Vz#_IZ#t(r_ai9qH7{CBI3odtL_@(M~> z?7L|Q0XEI7%DTE#sWh>Tsh`4)C*~mdSB}SFyK@?sz?*ZBJwCf2!ooazwS5D#%OurN z`D#s1KYw6h0nj$zbbVfb%iEmR*&l7wW7?+cFI3jnhWz|K3rL!CIP=DqQ|s2@#bpi5 zRaAQ!{@7vNzGmnWgs%M?f29+b!V;U{lq{<-Vb2_j5wNr14G|lh7k_M?-%kK&L>6Gz zIKfhJE2C+J$T|Sd5}v!1TjSfpmzO5Sr8AdjGnc38mK$Mc9pgJ)4tyN(^W!g_r;UZ< zIgXQ)3+IDscs0RGZ@*6khhF&pYv#pF_hxNpVYeS!uQGr2ABVrA4umAK*aMe$$tQ5w z{h;HX(@Oi;OC~U|GT7{K=*!5f&Y$U`cx#fVGd7S|YX^g>2(x#7d3A)8VixO(fJl#= zL&FN!&u1UBpmIn_;@it0SA*Zms!eD2>_gp41!4JNAepwZNDn5-enZ1r;Gqkm(fyDu z{>p_?CMJP-VDBadd%IGfuD5z}?{%#vciUpx<|Sj)AE{rp6V?Fd5P?iL&~txRGBEBf zExa|AT=rm$fKee#(ldMq2paBND)?McE?q79e^`4Hc&PXHZG0?+C`*nd%3zc!B2y?? zLo>3}=u}3wVq{N3_7Pd4ViJwD#d10t`>vs6Nd_TXwjw0UkTiDBJ$=95*YjJR|L^yE z{h#L?$IB^&`Mlrvecji6-Pe8fbv+L*H4cH@BfzIawp-yx+&fRl z%7{U23Xzx9ep6#WxI$+cW@wB5Ls)?dXLBq3Unq3%Kp$AG3n2uLx}EwXv1zq|u{j>H zuALvuOtDex=@#DY-B)@*jqC5ZVVd8<&xz)4_qG{Y?dE7qd&rjGy@k=0;>q^(ZO;wM z-;>AbsjOXdfWE+Efq7Wm)(v~%g$Jwd=($~Dzk&O6+f_BFX5we2tM-XPH_R`ca3&ZA zVpxypwUR-?5wNbkhjNE0YWRL|u26I!n^oJP2LAiKgq!Q01gi^=R!<~)Tl91r+GA|% z3fNjy0l1*tlFrNVqWBVA$LepL{qy<3$1F)h3+#i*b&frEkR2HY3W3C2nIq*BP$ZK7 zelNrlm$-6ptEgaZLmQ~RQ33&70JY&bgsV6rOq_?k%vB7fGkT_sZ8x$|nn%b+#-y(& z`cJajpX4`4*>?rqYnRq`*bdMBie$NR0Mz8emGG4HAbvtR1Vu(LfJB*REDQw;SaT0T zebPpEut3lkFGJ~XRJ0Q+mY359fvj*#zTfiW*N_ITJzW##vRVD5lkKdX3yorcjqh@A zr<}}dQu7#5G5zFe;i^n%_86|I)!x@6*78a2)vc8uD=}v2S|P`!+^-I61}!wVFt$E_ zpTe{Sl!&iv;kn9d$ySq;j1XpV&+wn#!>f;mo}sQPhv7)#;0nkYhFnS5($;OMcfQ$d$>t)(K?4s%WeTL|?>$Dp=t0%sG`tN9kf^9{G4t$N0rw8Q*Bu@#Q77*bg zFDsMP2}wh3!b*mqss2T?WnH1DYLr)Gxczp(9!q0MC21g{tjSi6nXyq{VfwWnG9alF_>J7{%&)V`GF zuQ8jQq-1^B%GxS5BP~5OHo&{j%4SJ5Nq+45^PYn|@948W)dRCAgM^;deIEimVEErP z=?*5qMNTG@K0|Zde^$o%1rSJX>BUP?Vz2`ApoP#AOV`OzH>3I{)%Ox zm#{@Uui0r}+&BogV9OSDye{Bf;+wYg^nq6cCe==+8b)H`e*8+;8U4Gj4}VidqD?+s znu(?b%Vzym8u2V4N}e2B3_gefM@y#VV|y#0r{o7#?D6Sl4omP ziyX{CR7OP+Tr6H*$bIuzG&uYr~p zAWHgO+uGY%l6App1DlToIfra#I*sPPQME+>>GSE)3BIv|56eB2My#!@Z9IItB(t=F zR-Yd*3%R-Z+4H4o&w>sBYyRf^40sa``p3 zpTk~umazRouVa?}^O>S+5+2Cu(5Syk;kqW^NtgSG(mZh=17MSOX(DCt?4A@_$>eah zQ+oDsw>z$KVy-z|szY-_pXupNmOF4dpAz*Ejg`ITcku_2Xc4k&`8Hb(5%O!f^D?OZ zIbNjuyKHdfCSNgQ7Y2TYTwy1{6UTXtzhEbK42W28Wo!dF`q#b~wCn%HDa62%P^YfE zR<*TD(Y#{<@(I~z3D1PK55UfG%TI#mjM)4cZNlvDWn@Tj)_V!nAgWy6Y zxC{*47y5gAb=AK*rEI`zdgJR)SFwwlYcQjp+Y9zeeqCKTIXPw_KNrGIOQmVvI+=bs zbtGiDqw4`fJMi*%=ee8P&gmwas~YkU+igSDZ&#ctJ05|$k5qu&gmx%6E82&_><|}t z2p7mtt}qZ9F%n|PMvo+=Yi@;0p+YOpsQ6;B6Jq3LFPUgr?wG6CQLJjwsf4K1oZ0aK zzW_}eo6W`ct%V;;F(%y?ZPuNK-7-!F&%^QP=zlkGvDR;8blkbLN?oI6_!QyZ*sBzu z0T+k7-sy)+te;bm&3=CjupTDnEyf~v1RN3=g--FQo}ne+WsT5qHw#Ss&G6A;Mv7Vb z;c1jK53;=m|E2o6zt*UCzowg6Y1Ga{{_nbwcFryGL^J%=sAy*gldH;U|3ka-E~Ol@79F;GCU=}Dtp znJ@?|4_|P0IDlw$Fbn(M_|7w790>(4nMoO2=vn=Oc@Q?BWlH8{(y(_6;_B1uHSkwn z2lUxWD6_Mbl|~62Z15renxXm*klb`g&2;>G=TcaA%&Zx5pY+QswZ42Af<}~l4Bfs1 zc2{1uvVy)_Sx*&#>RS9524|_>$=S2+mXTj()=wHyfEv1B^de?hIFZusCMT@xi_ft>tfD#&RC) z)6_hE{Nl&N@90BkGhO@baxIDN`0Y`$QPuV-@Km|$MqwV=PzX}V7`fgzzP_ByN+Fi0 z!h%-Dhuh5fdd3-0F4Xapbq3`q8Yq+(NH34a*9(R>u%gc5eZgx=0c9eT#ij0%ts$5; z*jVw8O0wBl{ob0}#BARhvI#uu?7K7}ciqRIAl&6H+Ii`a6Z1kQ!CBD&ub+T#^o)fL zhkJRkqJc|L`XsCuXFJ-y=u@4R-R$E*Z7oJ-5?u6w0CP0cg&is~as6F8Uy~~uV(35F zKZKqux3C9o(&9-DLAz?^E`3(SCb4!zSR=He42W$pP)+4v+#Y^5Xm{-oXm^ig`d8&( z9v(G4UYz3=E|Xc%|1g~M2YVDZS_j4fAQ7;Jm6cEi;izA(cCUG1bvu^bpHU`vC*0oh zsr(&SqrvKh7jnCm`B=ocTDuq3Te8Vc%$b_o{WmO@P7;Q8Gb@=SB_+Y9J({I+ z5?pl9+xq6pG#BCS)B5||sSf*<`NB{GW9saxl#SKKvM(xm-<7i${i|E)UBzCu?o`K+ z0Pm$A-G@F8Z>+(SKT%!bySY5o@bH1Q|Br_OqRcbmp7G9ROC@q#;$^U%Fcx`Ayy(A= z4ZH*EyA*H1JYCJtnUw?UNS=Bta^)#Kl_t>L?#4;#UIH}2kmV_8ty5KtRk$Nyh?GA& zKllBI)aD$FYbLd~T^M^sTVI;2{kvrA%gD*S-n43eFUByfTix2my5BW{JWuEP>noKNvBqpu#sm!*|nwi{TixJW?&U-Vj`yO^Z9j>PrWGC?<)FX3#9}+Et z@{DoADez&>-R2l#UltL$efHHuXot}`W%PKVgnum-Eg;1Bw%xX%U}vVN*t?S52J$~m z72*_rx#ko*eo72)me>nhqO*_=4ARrm$^?J^8_#=oVBgdI(q;9)#Q+}u-C4hMHx9@F zdz(Cyb6RqzPvo_=wL9;fagD)GtH)huzEF+D#h@toh$UFL2UH>~zYohOW!T zcy5yBTJzLY7#BYzfSU_n$6_961^-wuGc#+mEWT`HwbVAKK@Q_{>@$koc_U6bhG8(M z`5$3qJgNpP^*mtR*YA`NhPrqIh<$~YyTJ5dCn(tprAQ*nsYVTh=`~Ixay}txcp`{(np0EO-5t@2z;5Rw+ z0-BD$(kYrFq%O61LTl)r)y$zy|ZHog-<5OsFvF(EWi+cx7ykh}I9p2ZfVmWS46c7WX*{IL2RiAL7IEi(R3VK{>-XY^84(>xZa!`lFAod~7dk2XLD^ya9O@CfGG)!ubRb2Aq4Q&+zm1jy|rbp{cDc)g*Wo)?%ew!oFjF#^Rt%!W6Vh z=+;KfC2%L&eh%awGCHoIAr*Poy(|LRoyjsyXEMZ$WNIn6sR zocmMf+l^o83;{#DrI?Ugn?E=I>>ug^}jUgx31ZHra$(%W$x2LJ~<=# z%)d%uyit&pwqaNXc3Z#&^xywW(9V%@e73BsB)4>zx4iVghT*SaY!Wvb1v3&)cM0|H zE}RTA<`CN2nm&9jhlKCcd&)d3z{gh+A5!Adb^MoBz_a zP{@!nGAOn(HXIiIBca?E*b7=AIb4r{3Zu;8+MAsc3cqfWbl6cASH5W8Q5@6M5fYMq z9aB%ryi_tg>328_;dC{L&}8@5+t2j!q$JquE!nijoJ&hhKT%ws$kMOLXW0|s#E_ud z?w5WB4cvdi?UEsr3#_vc@pn{DfQu$3(k@CKOZEMg>6eb_I#`XqCpB1mQC4d!sog(= zF;p8_REonhD8KxR{g#&(!Xh7BWbU&$xw-K6fcCx%)9%KZ-PBz}`@=c0ecMmHV;fy7 za+o8#LA405j{_GdhLgmyyLvg6eCGI9QK2KmxGE7>AIb_39GU@}Jla@x&m{XfvdIsP zlFxt{!3y>_K3G^2;0;wa)Dz3GP0y~~NXZCVE!UP<9eB0*V|Z%*+nbF8{Bs@=ML~=H zdkgdK^ziaIT)LNQcZsJIuFh9{i~4;sD4Ld*ycv71QD=QLY{eQ0XBhnfUi(o*Gok&W zG+zylM*!H+a=(Q2kTCbWjf?#1v+5}_B`BVv09}%7xYlKn@ald@gYY8A)|bf1GGBXm z-l$L$I;M&kH^*!yBDAoXo=)*GW720dF>bum&eEx!1^7UN_`g@y;d))R`OXxTp9 zraFS+fzcl_L<1B=9Y{Iw5yU@U9QVyI2!v%Kfck`+@8)?HA<<{^T&wd*JBao!xt(Z1?GG#u=C;`^J1sj+~` zoH6CN6rpLnOm*ieanMByz@%3$R$$_ErhGfmu*l#hI{(j*zdR15G_0Y&iDyzC!PXu5XB8OS~cv;;gVrz zU2II3&tUxa+0{ziUfWK8`&$_L5kNW+(!hU#zRVoKk|QU&Gzy#<3nB*-eD3 zK7ZR1Dnf-|pjB`}NFLXMTc^21$bAp#JHz6Izqyb+Z;LceNkGMcb^;XAO>iskA$dyn zPM2nah{VsYpJ18a>*(lsin@5zfoRc}4%owmnw2msBNJhFjcU^Mk&3!7{U^1%VxW5V zywPmT645+T0{Sdn?rKZtg|ZSnoPGYn{oOx4zqE&lecFa05{vxmx*%nphk$o0N=F8G#@f1$-a=_Tv4 z_wX$OchirT_gCyXrl$k`!7v6qK0bc39b^bb)IV8{!fw2%+P5+R#9F)RM3sapSmuL} zAp5egG#MdPARt4TtYo@dl3A744KP8GGYB`zOrwxcuem_1&xvANF&XCIY}_vz;r`>b zY8l**m=_oLcSJ@V-{{HRRPIu_!+v z{-8e9g8UP-1@mVSd+Kt zFl#RDRdru$|n8_M^HSY@2*&rXK{b*m^?I1fUSgs`N!|8NRWuME4Fsrk8J+MlKAuwyQ-G)MFTZ*RgL zcHPrYD6;l2ZEsgSa3HHE)88xj*VhC5>47KnREIL3SyGG=RCfrHx0S8XE)AmpJpkwI zn`pcCh6{w(zbo<3f6%n79Q<#S?EfL^KE9(f({Bp&k&ID?NAM!7fn0t?3u^A3&P}ob zI=5|V)&7G`;QH4u4gKt+&Kn7(vxTWj&}z_)k|Pn+Ulm5eja< zDekERa9aSX-Q3$0vOd!A>}(YDGkrFh+jmAHIi$%o2vrxD-RBd&B>-q|deMl+8bg4Qy-Z-=8x#nwIK6W;;vMMW^ezyF%3w!0uHr|1M zK3UGpR>d-lz6l*Jol#AZ!Vh(-Mvb&6ShF<_s<@TsQ1EKN@bKJs^;h+ML-iC(f-5QaL+!EQUU;i$>LEYL0eu5o46 ze#rqX!-P{s?|%B1g0Ix4iLdpx67Wbtu_5R{)AF29{@8tKby0)hK(j7$NAYCFd>Bf=7dNqsr+FQg;DG%RF#AwidvZ?bAo;eV`Ynvaonbpq zYfOHP|6)U}YwhZK>qVQ(wLzr^PgbdKe0#If?<{s(TFl5|=P5-wyX1*kceQd@?Y`<- z-E$)L`4dQo4}`{)4Z|x1h2q@i+$LTFo-U_V_FFuAB^#dBR-h**Q-TNtkn>q5v5Vpa z)H^U?U7%E^^au3T`LvhFXBEJ}FmSGdY$bPQqYyt{2asOFByp!{0%en$-p1)#jJ;Z4 z2Tym_^OWB2r^_Ki)>8v~Bua9_vG}~5SoTh$9o${0l|@b{n@RwYwhOd^GC;bjUV8PM zgIAGn!X@zu@)bgXk1SK?GYU-VB>UM)JBdD5)#;^AJ^-5n7?2w!WuGa@Ji}H-88CuC z*_}KK{BYaiNs}(;(od@v?BuAZIsfl!W~TAz8Q zpCFX`)IDFxG9x4K=khQu2L6^4yHZ-4D?TMWO|*NIQr!I(671?i#qiCC`UFb6{BB`9 zH#>uEd(89y)2%&>yCNMuh8q=u*apGa3RU>w_K01IHYaZInPa>57cLxfj!fSxL|!=s zl*w%t4GZ|1AF1%_09ub?g;yM3nuZq4`j3n48MO5o(JYfc{ep{vZw3pcpC0#@cTDN_ zKbF_X_F{G^eab04FE9T$+Bo)s&_cHpyO8_mVHvo(QI98`K3O@sKwB_C$>S#r`#_SB zVV~E-3Bc~k-_N(4Jj2sB2jtmp0~;)CmUN}<2A&htU?5u85?ix zJvW@wf%nEz_GZksP$p7QWcyVC?hpIObzBN?UO;i8r*>(X6!wpd%jQ%JF&_we)}uyA zcdA{|2VgFP7?8wXkuG$E+{+%Pf9-+6ZB+4r-BBYdsQXcbT}ey5P|>~vwC?hCY{QBtagHaYHGUSULW(2fE6F`4Ry^K zQjUF!cbTQZ6_x2vya`J6ALC~}f7#$lS#p+)ASBQXfJm*f&bOD`6X6Mao9q-yd%COg zO|!e5hEm;3P1O!KzMVLK?w)aIl)Ng>KRU*m_z%yexgS;?ySW4_e7pOJfw#7_rN{(ID#z*)}IuKHWw(P~g)Hu(aPFAVi)eOsn4qLvg_V zx!ul^O+BBMmW~xz=QnvO2==d?Y%gm8wQW0G^W8v!LZNHvlDp(zsznK?fgW0^NY-U* zo9+`(E%#|@YMgp+jO*>~RSI6zn_vDC)=H#V-^;?@`m1mc5Uy9wMRqISFTJ0YsFL@| zdGX5k+SMNoK57~1BO&w4&9q4VcBQ#|wVbS2Z!uk3sqtyfz)8iq#L>+ZmOGTyLSMBF^0+u zu74WR(eF!#7Mi07m_k>xrT}`9-B5Y~S_shgiUz%rfuIW+JU|Qwi)8VihWfUvbou-m zo@`Wmw?kw*CwF~ab&2d0NunfxOm(k`xK037{GFDSw>J%j#d zAqB;pIWK(I&?FdMD|ie7hiqt?`gc{0yb5x$e5#g|qY#dOkfXNPb zK9A&A&7~D`O7{|a-m1qQdnW&E*Qvc1vp(Wo#CwA-Z>|1VbqryyGqx5)dwZ)NF0MVu z*o3~x0sehjHCyu?4Kyy%NzpN9t26fm$TCJ$r|H+=bT(mQ7yTdGCy0UdbJ$VvQHSoy z9TqAVAy-@_tAF@+37%CgoBp%L3iKF$D~*OGlA=T^Oo`@O*9LFS^xJHVhit-h-`0v$ z$XrYL)|Ug?E47WACNMs%Iqm}{N-*bSSpOuA)a8yS_$7_uh-++ z-2YlNAi67n1pIRVg9H>Mk^LV@pfM2=F=%;!m4KwH^3Z@W6m$6&zkr@pPkl(06NC7rg>N+x7fU9cT2llx7 zy0Y+4fhXJG7mz#!_37a#IFlmVV`zh3*@^(q{qm2ULT`(T>SmSk1`4oog1)3z#!?at z+~>xDJ-ipO#{gRGM0xMW$@zKt&QzybT2*ScU$GWC3wuICd&Hz`X{i(i1$LR?$yXtT zdm=r>jLzPE+T$ttOGfYR2|jPJ=O5*>Vsj;XJ*q=iRzyRVdbQWSg5lcIsJE3{V{7vY zjmu1XbKzl*_UiJOly>lsuV2C{J365WF%%HkGuu8nic;LROSQRx-dWzg^3vdI-HK z74q}v7Oazfu=TTcD_?tKx%qEp4<%T*vvf(!rE=K1b#c(&OvC6=0<7e+6Jsf0pskga z0L4rzk;Aoopof5VC?)(+X=cvwa-o(dQd!yzBecQ|JB_%rm-GSzrJ*$bNB#CXuCI;N zObLY~(a*yAmM%1AiQ+#F1=>Nf32y|JXpRHWfSsWgU!$(<)#+1jl`$!|_c`bR2hUvg-+$6CuD)N8_yLX4yG!UzSz2Szm}8c3 z?jLL|bYHagn{F*{^c=L{GrPH2_oyXgAx(R;O={y!u~|s>AF+idF3&%FKi|~aqu#^) zVUTy{oI+MhEUa!Edw$hxU}(sanmA`laPdz5yPE&)*}LUVsXa|+)1&B7bd)X8J%U0+ z#Oky2>`3iLgSm)NF}N}uAsz>{8Ti2=j<(QQ66b7gGSr87w1e1oUk_?Gfvq9{sC{~@ zJ(L4-p#lhL^T!4UQS=*zY(j`u1h+6ZOG1ZWyRu(ew)`lEEiu(DTU>i5DA_Qq*pNK0>4@tQX42A#Ml%F#XhLb}-mW)B*?v~K#w$?hKtu=u zRz?9nKHj~XjEEf*6V%Yq0E6(Lku%O15YUB%aUd=pw)(ziji(;N3=Ppgf&D8qp1iFt z8oelW&nBek^?O^zh)th&8L)s7ROXpfgy)HKL@RVmjpfea%0JX(hp2}fI()5qQ;uVq zSF%1x9-Uq-x|Eo<_t%DcY58yvgG+l=dt`0%fpzubMA(M+LyO6l@d95v#*asbF6IS~ ze=l{hp?Qu?w2J0g*KU4&Xl7k;{V5|LB|ahiwDJe#E3*+bbm{wQpZp546YO#}SD!pq94MUEzsm z0Pz`^(DeT+m|obHp~bN;UtFju!DWp3;TyEt(k z?0fNMyiu?BTsj53N$Ie45{D3cD$dPDRw>zryc37GmPm<s&`E%n6=8zRvC*255 z?C~CI`@r9D_YEIWVIt^aM9s9(5hX-xj9;j@&Y?7=?KTS4<2MRFy@>7|@n>c+g0?(r znH#-xuNG{#DtMIr9kXs)zmkX;qVbw(`HfLh+JnXmoc$4bSA%Ux%8S7ul0qAbcY_0aF?QD%t6SNpO3KKGb&XJjRg~m>QckmD0=#Y|} z@cs{B)lM+ zM`wpL+XsbmnLpTcYB_g+G?oNz&_^D|#ajZuL26a+;=^nTficz-*mC-hV{?}q4E@m{ zP+Av8kab80=&=xlu*u?%U{EZ~BQVMXs`%T>oH&FGTb%J(_FH;*Bk)iHQLIkqwK*%a z_1$WYC}TEv!yC!jZ=XMRlB6XJrKJUblPmpH;qcNtE!*i^)%cC6IS|gz?b0a*>JD+_ zP}b{~^AfE(?u~^GH?2GrPM?lEeYzwQPoJ_n3!t<|m!Gp#qLX2X^$`b+k6Bka;b<;F!b z`T|(HD`|d@CHG*PJIX@#GY??2}#^1R0#R2!U) zf4%L4|Be1nL1%qO+q^t^-a+qo$bvM7(bXX%5-5?8k@+K)i~QQFYf_uvBJ*GU_z||o zR2u`g;yuL^DnFN8s<&1Kwx+5>mPA9=xoR&yzO(19L&~%6=VN1Q{QFAY*%iLi&x{za zyT`vT@aFaFh#OF0loB4{Q3ft>2La2dtE-Vel z*Ths@LO2C>g6e$PeIougk{iE67`M)j1Ao9TkmcV)t=5ViO+f6?2J1pHvC&*zj@y#+ zp5tbZ()Q|IVkmw2xXQlu_H3Q#PM^{-~zGd=EY86F~A&s^65fW;+Zr!~3 z$~wOq4>5bL%^jU69yH}666A5TF4oYCS#!t=PL{izbb5he=eM>zDW6{=8r2u>QhZ~^ z&o2$PGdA9u1^?(A*{IDQu3YPBAJ*Py$&nm~oP_hH@|FYj4%@D!p1Roy-WB zYY8cci^ud4`X$$>ln%NKyZzMNfcPQP&F&zq9~|1@&{cV!83lf24jnhx*bI z{yTj6aO$qNV4V$xNXWA&%s@v+M>XTs+HQ&D$bLW6RJB~j>LR)q$hdVz-%C)PU1`bQF> zt7}OKC2?|7-cvH^u8L&{=qq;<pDpr28aZ`5ao% z(%4}K#R7w*1lSu!ptxm_`ZCU`?@&4zAt9sylJbI%nwmr4DetLKVA;4I_dJQ3mv27s zK7kTahegU!DAkTc{cRP02;!3|)n{OI)X*p%-*(*yuOD~QH#xMAtlvpT#MK)MA>c%c zYso!&dNjj1dl^GW^wgyH<>`6u0~ z3S5lAyBwE2vI`BSPP|r4@l4LnJ5&wF)7c4`5HzB=)+wGg0UM0x940J@bv$JFNVzz; z@Kbf4(go|(39H&CkKT^8wrj6{TPh#+TgfR8`SIPwcf^lL<7Y6W?#X<^>Y%vaTytR5 z4KGdG&=x-4%csq+$0(iLf)8$ut(G1*Y%R8`_hMU)GNE6km>zo#ft@f8r?3gwn_dm& z7Ic)8UZ{+#ca&wJs6a|weeAzNAQ-8@rYneoVgHPRCI%->g*~^U;PY<@kMcqYM4pAi z42M&&7D5d0p`cuiKU#dgQ&4bvX?4gqI@DGdnq@KGhj)u~k!WwhOxo_M8}e$-nCXYAMLEkuIqw z;Q)i}B~j1c?k4&8`uy_oscw_~PNWUH_6S4-e>)TXSI4IhkA}KU(LK(0V6!t3B+Ei& zSh3b2`e3Z7Y&3<_K}JrunVyhP92NU63W0oDdcmc^xR~2yEP(y8*=4KcW=a!GBuycRldl74+yaxqwId2+ksDIB0uSZugNbbP) z@)#lAVlv~;y2Fv=fwikTcsw!gx^F9;J{0?oE)p+TDF+ya(rU}8gFq3<%CbD9Ojaxv z!no-^Lxf^9biLduS79p!f(^Z6KJQQ#_cdy_YD*mFRjN0wzoaL^u5W0-l6v9&NiD55 zdfqghPX}$#xw*Niejg}GUti|@{QQ@hAE0f0;{ugde1}4!$%n?Yc%p@$cGY zNqu``zU|tsPsCJb`w{+|8I5~7s_++L8k~=d={sC}|G{@}YwIAqU^Mz*8j6T&r4Ko| zZxr-ZD!;riXP`3`fsc66kX?pe_!7pIU%T<^fsNmiluhvXz4DQug01VxpFRqcjyt*X zgvK;nfp2HDf!A!PVqx8@eK>GpN;IQ-1+wzxT7RkpSQ}Rj(-S_i>yS_|xNn5OvOS@6 z$fd@h0uQ4W`nd(6F0k2;IwJeeTA&zQ$B@xLY%c=*eHAn*5SLTb1Tss{Z zX*DGh^M;Ou5&;fs!dfgD)Rwug`}$B|q!Izn^n1y{zyg;l}ZwX&MO~b@#H= zGZPTlIyx5Pg&`YaHrWwwSqbk!U5`d%z;UUZZj5(1=kiD&kJmSBp#tE;c==*DbUGao zDi|WWUE+I@b5N+=!^XdONu^j$-A!UwRw2ZQSh8QstWKe1UZa|pn(ihVPFL?n$Y362 z3B%Z;iJ}Yy*i&;2w73NMW;zyWPNu{s2#ez%i#OAex&u>7?QwlMC;v@Y86X;`EA%_=Rbr6&8b~Svq~;0 zUTpbua$k;07Zd|?S|(j@Bl*vuVYZF)`mI}i1PS8YeM)tTMOys%iSxMw(Ja)MyxQ=& z;f-Pn;f&oSg;zH_l2u~*m4C+6U{H@5TF$~3fj>a0PQt@E#Ik>;13n(4TK>$XjnBC+ zka?1mf)NUwexYld3kw4b+Sd0pjr`4@Ir+5U$w{ffwOd>BW06hfe@^k7a$#?+?qm+# zDC`>;s=Tq%x!69mJ`u7!lpnGoVHUjfA|@$64}wVE+gN);{cH+s7B~Q|0-Ud}?<3Fu z52GUWG|~VPIP1)+$JZa{7KV7aPgbu!A4aIj6t*aC3`d;63uegXrkVT3*MO0=VP@^t zM)`1HuIW8{eS4ydV7yQnA3^7$=r}W&IkB}q&DiV?S$Qszq*QgV<6Qzl-UU9#q~k{N z6^zN+w6}bu9ch04P1xJFr!pvoi~uYm0$xKP%HM`KcrT|Yrrf+8MIy@SF${78U)*2B!q9vMQi zg$uREnHV&Zgg?3{PKvr_*+DSUv(GMqc)7Fr%+o>xZgwOxE4B1p582*R2}7ocgD;uU zU2b-(sX@*1Cn_8t2og#1R5=l@Par;Rq6e5}PyzEGJfqQd^l5N~1&qGLrHJ16kgULsaKrC!LP+i>J zQ1x`AvZ6TPDPv89avKU0{pZz>@`(HL)cAifM{1dGBs^-CR#QA^!AyvNEB&+prdny4 z{+ZW02XvH%y@#%d9oF*v(s(alYvW^=TDt!#)VDU(!5i-{))e{Ld6ZuE4$3)iST!Jm zL)7!Qg=UVOM1A=m;zY{_I(MPqUA~MR^^}SB5|D=se$p^J%H|CPwi=*cB*?rdt=jj1 zF<7&xW~oH`IU(V3e@x7zv?nT&m4@QOcZc2dEAR-KeX+GLviZF_WHrq(FDUD3oOB6& z|G`k>l245$5^CP&IcUOEfGj^hKT}Fevgt+74qFe8{6ksO)p<8>H@4oo8JHQB*8PkT zpa)(wx$ZMGfooKe$q(MS<5wy#AudTtJ?OGGB*8ST89d*H)XWZ@Q~{LkJ5mA#=o4@} zQ`8Y6xWQ-wO0N48fmcb603MKISH!CFIFP`A+1tm60O6KttWP{>?kq?)x~Ox%OBif@ zf9UI%@bS2(p)iLqYF$cMMWytka1MEFFYzh2&`)%Gz7%8=BN-=jifaNxOm@9Mzolo1 z_{q!j&Jm^KHhzIObGhBl5RXX}LU5$W@U z=(v)aeZs{0B;gi1sF$ji;wecJ4vn9hJNcz${24=oL&G;L^`N0FRvc2UhT4bZ^2FGD2F#@=UVd)HnCJXC@uld(2A;O}V%tnOcF@nXTo+{*!6d zz9WH?pwyo4Xj+R*NsMC)_q|XxnpLrO<;cveRmF0B!=c`?^jDi-m!^SZ0g0GPZ=U8t z{qB~A88jr_mQzHwjY$cUdoN+72FOk)mjyy36es@?3}s_~va zu*T1iGBMxVbOiHAPfrN7XXj<4($4j?l-|vZ+Vz;)%|&g$xfj!6Z^f>}#D?2$e`4xZ zoZjf2_UWTaWJ4YO7Za>bYPIiQrFIWx+#1DGyXjSVE>t&F2}Dan!R5mQY8Me>@?2t- ziYKHsF0FR%7R{)*UO0XCSvNtJkd0@NWgOae_D3f9GGM-&^capHKr(TlOAP@q;Mo5v zEfs;nntBW|1WCsVPb{+_UWws+S@yT0ii+&p!EKQ7V>oqGR9tdlH;Ck_1JURPr0FNd zz>?|2gTVovGkT`#FihgPb<>4)NC=#)0-QdIj1$p%uu@K!Q}-Z71?z`4(2$d+ZqzV!Hi=fh+3_vU5XR#sgif5~qBk6^nXek*%+zE`3`7scaxHF_%?Q{Ul02 z=SHgOM?N<;6u~8BscO2a+xZyZTlM=;noy?TwNJnUTZxu~FI*|dqta=Fo=~>`dOpV~ zwJI-$Tgl;D)zU<`A5IxFbY?-(@^I3r-s8s;*inxR)$PJVj~=pOTyWh^%3yy@%o5f< z_tJ6~96}!@zPE8NU`1W0_XWwLj}3@!=bm?~A1PJWN}mf_?tt(Yw05uBgSOE&z^Gvk zb1@$@UD%#0$kT}}@AQ7F{PUEDRrzH_*zclb1(TfLyCu}zPcD7z>IH^x^-=!iSGPQU z9rG)^CXUA6{__7I06rDRVIC$>P)(kT9UJ^MLF12-tXET{Hs=}ItKXhGy@Y$HcC`e{ zgV@Hs9Zb2L{2ZD^GgjY+tSxG9%w=pg^O}Wt_orBp;_*m3&X+x6y(vyzu#T#=3g45m zu(`1Y^cD3O$*Q-T&`L`XiYH$Ih?VYAy z`Wfb%)x&d=EmS~92bJayj6SD+D6;-{B?2WflqtVs;A3zmScwMh%Il%(ylG(WT@;Cw zX2oL8CQsqdbLj31+p>okBC7I)eMx$IbTJNw``LWCROHAL5eYJXaoQq@6f_SU(wO6peKNPX z&%_Z8JL$J}0HqAA4}Co(_BKXV2f@y1ub06dcR~L)r>$l1?M9I!rd|HUd4g8GOQ)1x zn40H4tWFUJ1D&4fCH4CNN0fm}PHb@)VIpLn8GO9APBy&fF?*`@oPn`AYo7UD?lxh4?3_|q~W^vTv_{`pZxzI}TcQc|;0duuo5+Jm7)E@#v%0McKJ zY)UzI{g$KkUEgi`Ery-dc~TL1(-$=~l0e`Pys^624pv^pYBsm#?f|qoAr#+RfsX#i4Nf2fG{t;9yypOrBTz?`jcwGL~JeY2ntd&u=!M zY+oC*tU{lljct+qPOAAQB6DQa!0E262%sC_zsHM|JXjM1W zxIyKgZ`*EI+%*{!cH2|cc2Ag)d+yNFJow$C>~+SJRvVj(sF}G4rOmfpM%GI)g?++(UQJ2lv|Qmwj^H*-1~$3|Dd#61KW?gR<7S@^MXahcMEg#WTKXG55d^EAGx+W$z zkq5&#!PpUA!^pR;4jzC1C%H%Y|UQ_%I*bFALgu+t-78DU= zWELlnPG-+lD-TtKNQ*)5QfcWDaqoM4)r;;=&PML07=)s%d6qCHCh7#}4PRAgl#~9V z_I#fU8gV32O^`!n2%@}sro-Po#G@p)L^Os2e|ChKC5%92z4Ugb0?#w8pX_;v(9$Dm zNU}6kD_88qKKCSMh9a)H#u9~eJL%9}VFlE?D58x06A7WxG^9lp{?+cd6S`h?GO~p5 zuhu$^FBxkMH@;-)6J4l8<1XR%_`8+81huB7j_g!%V{9h!e#si+DQMAzme#TP5{^#@JC)DkN#ZMDdjP_w^z?xAr$WUG`8l zj|opMaGKo&L;m5w#qr)?e-`!(+Jf0mewRDPtJ4)Y`!f?>-csY6NRMu~;WyryHQk#Y zxY}s0#_GxRJ7)M#P$bN>yZFO0>GjZxX3Z5RQ^cX(GpZB4i`wLo9zBU21%4Y&>py76 z%|B5KF7RDKBH%>wfSxVq)>@n5dQZL(a`fW$2#Cue{Qu&8ly0No4A;dXr=S~HWT6ih z!f^Qlm~*t1i4>1l3ym6#SBqb00g>?SGNF*URZtsp*3$mU-`;z2`2M&}V%v4|e#2QG zk&R*7i#{z6lhT)a7$7PLT4UBM)Om?Aedt2Fd@ei>{W&TyeSSdQAv0wmyhA|`6j_05 zX};RQ%hwro4YU~1NIOdB(e76D_{)bQ^!DzZb0nhW2)SK-N$#bDpVn1Z42h~c4ELb_ zo<1S8-RM0Xh@LF&ihy44h9SDLdA7`vhr$O`%q>w+P?S-l5Vk}iLX1;#qvy*~_Ulj+ zRCByD4l=SYql+MU@Dy|@{k);!y?18V&pbNp+OTEU3fajJ~hcOjmvSM z4V3G*Z+2cg8sT8@zJ52*2AtZVX3}W(aPD}48)t5F;!)x6ICZ>~(!|;1r9+8i8FR9z zQWozujQcBLvUKS+3hsLG@y+Gu4}5$s027o@0Nosi@1H;0hJ=KOtTUeUw5PG!8H zXPUD}5SY0~#3^J+N=Y$;v`uy+a4D_XrHL%pB! zr-_DdL_;Bj8BPV0@d#g)hw=627kN{arIh2J4ad~KsRXYz%I2I&jURNMJFPX5@P zlxGw2qw%80;H}juQS0?p^Y)WL5TIENP71miQb)v=_9(A`&{jCBqr3oZK{%!G2Gr%& zLGto3!1AE&V2=w2+VX#MmjC>Oeb`Y+&K)e4Q-J)~X*(&i@UaEah#d)Gm^HVx1gQdi zmDWDF-?M^ zql;Bf^Go;UKe&gwS+M1qmJJ$&mLw(6gTTcKF7B7yx9|Q~-|t5MmBKiCqP5YzYzzGg z4FuV$7lLmM1DwI)V0%_67?}rMq(|mSM7V!DaX|Q<(SiR(+PgqQy?=4TKXNom%;1zt zF_Y4C5NBMY+(yT}noJ#2Dr7pyohId0i6P~ZFm7GlMx&x}n?ezlaVgAHOo&X#NRkkq zJ)Qsmd7tNb-?iR%t+!>JRg*PG^ZV}a{_M}*`}2`V)(f8b01UwHO2`U7g}sk+f@qXA zW$)g(KhTUgA<7?nbTX7GeGbaQ<6Dq(3PA90+vJ{bz^5cdGxu6)?DwQA&<1ZXp-t3& zeK#(y{u|`Yb{M^LkWsZ6ypzVDT@*`l3dNqVq_EOGL`h_f^q#I8YiEZ71=WJkUD*bEp1M8 zPsDu?oq6r#+|9LBA3m~&`}iR+7@bt2H&ui@KoLx;J1dV-nRY~+ByRs7`9<3OKO99vZy5ycb+n;L1UwmO-g>dmCYKNrj%t$#6a<&cz-#Ib09 ziKi-7$8m_mjYCMvdWYYnn(M5QWg(K$PC0aCxoxcKY#X$UoHyD39K#wp&|R=XEjEoL zr@$w5bqVZQj`~fRH7BWtagP}vwH5E*^(oPplH)cn__^{m_T+Vd?Tt=3)O(?x!vP8& z$A_uAMN+Q|G##8OgEH*#t|B|Fq2qpRC4yn)Rs|`1lZsWEn#1wSy~+U^(MPXtRYB01 zGPtK)BP6ST42dC4V8El8YgLZck z++V9&x4`S!llKTNQD_A{X^&c*nt6ZLpCf2eKIB6jy0) zcM7PHN4^RBHA2oSnt65mT_dG?R##VppyS6&kOgbQXQ%l`kGi_q!h1(yQS5c~x2z!M?p5`2C>tM~eRKVC&)yxh|IPv|6eMNu%JZLJ`nEW~ zG`*(oN4EUZ+>>YN7t^>>Dh#WDpo4LkoL*b|5_U1;!iKH++CC=SsgjnG*Ib$W(ZdPV zisxQ5YqM*ZUQQz)KA+^Q9Vlhxt5x2j>pahSZk>5iaBb~VS!&Qh!hU@MS^}+O%wTx? zIKD`f*rG$g%*L;+<}lxBh3=eGBplQy`?89eoWU4IJd}Xl6n-d~tYJe>4lr_(ehEAU zjT2G4xpAwm_L#c}pP#9SJoe-{OZ?CxNL!+a$C(AtZF%P`aVIm#4tMVFu19HQnwJbV zoo90P!;;N6eZur1qLg%|nx=-xk184#5sw#$VogNaYO7-vKj|Z~Iu@B8iIUW48IfO~ zyHMLmg+@nda2@(2>f=?0ZoJN7=-MZv%v-azVchMW9zJx4-_7-KFcvBY17Vm`R8dh{ zl4XYybdnkxP5(7RHYZf>q_IXs|v8zQVxFqSR2NZg3}EvO>`xuL3vhz~EEX86Oz zZ_$ezzy}$rSr$$2%@rT~CmPoyiDsbxZ2^%WT81qAg_zIuOBK!|=23Dmr$CG`p&sz* znUHH9oE#l`c4^HXP=j0iIXexjAKl%Nb$#QfTFM%g1r-!f$o=c~HCX&}63##OoIbj8}mQ2}l7yZ_?wiKvAq&z`N#OzXOMc_*Br)B9O3 zE7d}e*!%hvdv6S;%5)yq_CEyyMakBm7JJ30#_elc;^^GN z-HV2B%7JOZG1=NJx0u9$^midFvb!u6 zI-|8qz!;z*L4P8a$EelMaL9#=3<>EAsNvyLEf?=xl3Q+0tg<3<9f-)MsAW0N%}1%C zAtaNY)64DJ3dfAedsuCJ&I*O6(lqM1-aaj5T!^~CQ{|vB~whQtF2R%rEX9_WhlL-^bd74^>jq84VPN)mNjjFQ}^(qBl#+;Gbm%i{b*y*8)E{-%1URj9dgNV(Ie<*b;~R0~mA&R3Wq3 zv5GXwn8mwDN1ddx_%2S8LC*Ypw&4#mlIBZtVsj9IggH^+!pZq_~mKA3h8WHdA;l z!ac!P;Qy*DoxDu%)B^Pri!Jb56VqOKNV;`O_LkeHpbQuE-$*8dS;2GYZk5m>(0d*H z^+O5Lx_-LmPD8`gA(2`czZb5uc=I7AR&jN9Eidc+p9GB)I_I9dw!UM%%kth|(rUDu zdZ61Y&xfU(pZo!~lO{h6HRzlITnccJ;;YqULxgce<9s#AXvQHH%YY_SJhRHlojO*N zPGW3s8rsc1K;9&2?Ds0(#CWYtwaIlj_*Zq`{} zc6R~QF+0mrot7(A%yxp+3OA}@?)Ujtqr-;}YqmV);-4K7)s}9SdT>?Qqs@iP58XV4 zwoKedZoLbMcC6+KeXjN(`Aq8}ADrZ$TTY~5DJb30h`yx3`)~c+ z=~AFhDTc{?dEq|>;_xTPn{gQIc}8cQ(-v#q!#^up6-cZ5!0K>VtcxLpI?CE41_l*nqS`;vH1043&0Z< zxj3(^;jkloHrwF(KRyjQrf0tWQ~oyd?GDF}Mqa-84@ta3rCAr7HLX@y)f==Jw76Vv ziwie66>)t|SKfGMhbEi=|{&_gbajWOa1UJsBF3#y#Ni*hM588LUIF zu|o@G?Blc_eteD^6&AX|-Ol*l)N$5HL#sZa(*C}WwPVnz_sW+ZNF$+nJZJrj9rD#< zgbTmjEB4;0OV)6|uXEwKU^<2?6?2HI7KAf2+!VA1bGEh48jeqq{{HTQca;5P6A6q2 zOW$x4PQ#m}Rq4GfF3p6HJ?zp-N>H%uHfWtH(?;Y6lS#~RF_3wtOlI?5a*a<&K+?Cv z^YofBNkKEAT8>&VMB+#GOHJJ^`@tY7?WtxZzyNM^EEnB#bHWHnUh;(%~6&^ zOz&Z0X#t|EE+tb5jS@GV7%pW$PF_=i__yqC3|Eb|2?DL3n5gzd5RZ~YGfYr&q`fE^ zE>qmWe3lDud@mpDv!7)e-`CfdRMXu|JNnYwF+Q;6g-@qf9?1?0WwJkLL~Awe1q1eH z&o0^^DOZ~_Esq%*c82AVUg9@nM&^$k`eTg3>lS#>ab@Xj_PfwrxYq%wkk_Xyj}P!L zQj}2VK27FlKB??|AwyJ)MkL{s%SvAdq6y(Xpy6|wjuxI%dOTrbo~Bk6TiR>k1t-`))2?A+Wioc^Ox3)6;urjH*zdQ@BU zc4DSe&&$XA02Ij;Jf0^$A2l^QI}0i#bESteLU*Y2JOUmhz3gtN>j3YslQj=Vo}zWA zZ%>ttcfNh&+w7+Dx@u%TXM0=wd$98Xw)-q}ALw^W8Ux$FWM@mXOjfpX7!b_7pZ8z-BEK}Q8oBU(exg}PuuARx zg*ST;I+5z<7>`0Q&n@6S?0xZRBjPSDND@~K%0S$GEb0q&~_lKEBunuOPs9Qzfc(9$kswslG zaB5xOo155Aob>hmX0zWFH`SP-#inST(WIJfNK>ZQ40&$9THLK_6B% zL#G*i@nSEzThMy9G(YQOBoY^v2d(};9rwHN-BcR1QaoMd=b_ayWokmV`kNW6oNF3; z+ULmdYf8d{E`Ggi6AKEyqAU{$wOgUChkT4b=A^;|q{~5xI5fp4Uy0gQO-L1=W@Z*? z1vU*LNO!jx03=ZxS9dq9i^6ydrDe!1s2jbq=#YYut@+V(nS3RkAkld`Ljr|;&O%dI zj=vMJv4^ZzKH=;llrto`vN-qjLrl9NE{^LoBx(hSr+Du9i`tJ($1tz1z5^cwCs%%R zFL`QVQrS{D*3Bgyo?`LnDb9x2fzzgk4|OH8O83E9Lr*VmLzoF#a(E}}E5*}I9{&%?)uMF^}P!A9jZ z6QYu(4L%-~>Eez$7yXVxC>h@GwY{`-k#Dv*ytGi*7x}ZN{m9|*^nw*~y3gLkWqzG<=nyggHDC;B301WR)zAo&YEuz*V{PaM)QuD%b+u!vnST1hw8K(1a`yr`HX zl2H3Et~x7mK&xUk)(JGz!X?;o+}egDQKpT1ZaLYytCHZ+sEEBByAZ;#{qniHQkF zYjSGYr@*Yap=-E+?d|$l>7PsY9W@{{YTo=M>#98ea06%j)SD|FW{o#nBKmv{8lF9S zb`>IH=b6l)5JT#H9doL80awL+C^=q%Q3+`(v8q_~ecp?r-Y6JAt-k;0^dxuyWPp$# z)W!0hZmt=D%B`Ql=1C>4IcZ}Yn*Mq8>(^&fLKeHSFA_Rf?=iz+JN|Z^+eLHLz=@ok zD!DBE@fz7qX=SO}Zom+8omwgC$XYU7@y;uI_cXo$Gq zq>kg>Ey%~8+i;u;^2{r+=oILO!dn1VvO@KYuf{45j1KQ6&)1#+JH`x8cvI>7rDJ-I zu&C#iVPx=4s2l79tzD05REMX>PHc}{ zio3To+u0s9Kf4BUOIUDbywR}sDUZ>)QhVLqtJ4GQGjB3ouUnzG;im#8FM-a>#M0u# z(p1#q>{Z(JMr8(rj-X%F@D5>#b88UYg_Rmcf@S6oGZN8}4!?@(8L8++DdgJ)y09AFrIB>*u%90vQ14q-ig_gt=Zv!OI`xq)OsG#fmz8M*jC-?K`eglb(#x7s7{8-R(+DNNy}YI@+b0{y5ga*u_+(RxOiP)Hd|c=eU*7{v z_6nAJ*2N}mzj>Wu9rcZI57)k?eyYrlEMLpf4#9tq5Y3A|fBwvZ2FbS{`}mu2?pvs6 z8?xXU!-}q;urFYf&%3U~BK@6Cl?U`CFELujb~pz6G(B|+2@T%aUY;HQTu0U)wi~GB zF6pyWS_H`2gc!*+faMAZ7C__u&kaFC<5UMcbpHtigti9rAEpRSm`?euQNHrUqxKpO z0p(lI`BmR*DeD_A^m0$>omRP(RWjPzdYPlR&#pM_g9yA%lK!IZGBeY-br6(R8+4}^ zsstgfe-ZQ38YZjK0ZPS?Ru1Un62L(w48$6P+L${W6{}aS6n~uDECmc94viR{gQU_@ z)F$QmNU*_MlK}$s1;#Zr^yjm)VW4GBg2r?1_3O`6hCQ8hW6{|akjEbKGL7k(oC@h-H4A~akIJpa8_X8d z>_droDcxYQXOo^I&fWXiE)%oh^O)h#og0&wJFa-}Lp$}xXU zFYxnWiL`N$fpgurBEo5`ERE!zh(F=m`Y1omLzdYj3)z5f zlWa~6SpGOxQQR(2OyLYdZjtMIB6Iz@?GL&8Y0UWsx4J&g**v>v~5!O2SF6IAIOhOM$1ZKVa#5>@v0WZt7Gp16guG#|CtPV0-HDaVo$ zn9a%(4|#N8Fh0p4HHOidV!AZ*7pp3gK^A0?Ps@Mx6X0dRlfvr}4!>yC{{+)f1;p&; zL;wv2Pj>>Dc7#72UfV$e;w-Kn+wYP7Fr&r)bA|v6qm@Q=voz6b1u*oK1 z`q2U(8hvZ5(YFOCQr^CGNhrP+BsMYh_PKfMKz3zQY0ATuZ$bh)FJfOLdzuWjW*S;m zzLm{(?EBdDF*BHJoHY35)2rLfNvf+nJg*ku#U5^~unABWeUJegJm;;sP0f_nnWyW)E@6M*b zTNFG(X2SBw*JMugymIzofh(QfewsZ#p3a0!SaJY5XnxWJ+*6tk!ReFSA}pQsE9L;# z9jAzihd8c3%oNEt3;a${UHNc}h~nG=Xyi+}@isodB4w^MiLiIdT#I0;&;GgsHsi$E zNGheC8}yVbmwA?)J6v`>Lzt0qG;*O847V3%Gmb6}WS_VvXD{Qiu>xi_RO6I45o`iV zc+7XCmkk}&+1{7%z#e@%SU1x}e$+NKdHQhrGrRm-2iCh> z`oit{ZC&si^|e7NJKoBMnG^(mG8{DWt0}d&%5YD_!c5*q)2h=yd4sJ~CAVml(-8DM zkVzj2DVn6RrX!12;H_y{Uw&eHLD*${HTdB1G8WCGZkVoc#GS9OT_)0PVb^cu+BcGn5jBH3rA$c^7kgKj!S0 zG#_T^Yl$HwBQ8*{VNKMJ9gR};+_~E2I_*<_l`Q}fPEcE3z`x1f*4V#dO`{E7;vW`f zpS~;q_xdu;-B+%P(=U_WMG-t^L*tA7ty&R-JmpI5)FqHN+whZgo1m6&XKn*P1k87+ zYpa73l zE6c@iSzdD1E}oI$`F8wNr``aO9NY%0?_ylH1gq6#!AS$~jIhIBBZ2(}!?)={`&+-_ zXUZ>kT&NDqoF;AV9L+dcV15#A?T>AtXBx`u2Z3{p0h=Kh7~MhKNIcPEJEaDII#Rt>v+J zCdF=(n$6*tXCm19%e80NBhwAAa)7SYx`Vzi;~K*{|( zX+d_fe)$jI^=ig+%tWMiIMd=94BL;`(7C2pJYIq>TXyz(D#+*-)TCbx1%&;MBAUxQ zs{?Tam;7Nza0~ZwBx7akL4#L}PKKvU$9z~_>xebI7u9eUe@m7#uE8aZsK=zuE8k{n zx42W`G_iS}E}(ys4n=&X3ya)M-)jd6`~aDHMYjgHVRQ;Fi+N=*GuV%{c9wPOg9saw zL%^`cMnx=k?SvI7q>QIPdXwiHf4{UO+ZZLan)lAGL@gvD!#ya7~X;k_-D!tTk;_vwV-Hv*GQEnpR>>cIVF60+TU#c zXJyps@3Sot)-g7s*vXTeohGWy``k~mw8qLx2`MyJQBV+pw!ZR&Zj+cQhN6DDZ*ja2 zS`BLXN>J3DSw)nJuKf)c{lC}qsw>1qm$;s<`%T=!{(k^p8wtyFfbI~6{d+-YXn@!* zG_n^OR2Kt4j|nUbD)VI&>MnB*Z%CwDyUdZ z`6Fw~_g!(=*j*jyFm8}RNJOfe&0xnWD?>kVdp>BCl%_`9XlZ0-7BxR!+16H}yFxiy zG3BaaHRF|*Mv#VD<5n#2LwZsenYaZvEwXw{W`P&T&mSo7oyLZ+*$a_TrW>=F9AWQt zgSjl3#eymuNE|lr{h6_G4gZ~|d^v*F5K}u8kY7f1Rdj3`MQ;AW)k1*MQ;$@DMSlAB z)OwH1D{-DK5B2vi>-d=CzRl+q#p0pBPjy%L^ZJ&IdwDyfT(X8sOTY6S};x7-{5StsI(17B`=W?&L zl)0U4=4~mM))rSL#eqf;t~SkQk`L4cnko zG-}!ouwr7KotEjob03+oObvI;fQ-u$R*%gq-KO8kk?#z25jOkRZ8)zv=IuSa1?Sr4 z7`nqr^nTja?nP@xXl{Bw(+=g@rgGnv|>6UcL)P1!?J?`^Zow zXhDfd0Nygg6MGA^cq1e8;K#^6fE(rT?eJ5ke+}1;JulX@Pp}|!v=v{uRqnz6W|8;` z+J?vIsD2n55I{dcX0^IbLszd7LKu`I48}MG#L+X?_C29Nfe-Z=Q9TFB>1qS8R}%w( zbdnr)s24sgDcXtWS~zrdu1>!QN_&BXPH>`b%rR)CipyS)VddL4XeX?VQtd}*ph=#~ zxiQ>2Zlq<%5wx_FY_FXgR*hPUONw0j{7iKJuKvv6_n+atInzC@IK*Y07 zkI#e#2M33SvU|pRcjh;8jRI-&S4atr5gCkbFwhzH_+K4Ug?)CvW0n&a`>+{Tw1rV~NKV06NeN`EPz7T4`vh#v zR<;uBn)O5WtkJn-l4MG;OSx+JDB_)w7;L)#K64&ft# zU+c*{p|S_+X2m-9yG*X^u^l5dejGv8Td}26K;hU9Dd_F3jt5e~BwqJ>#2#WxS(OP! zg07oR^80>PVT<@q)md12b79Sf7o}qk9ZPk*_d+llAZw;?C9V4BADPt4tKVhLM9E2B zkdS#>lYI9Pk$Swb`g05AYUn4u=cn{zUl^>?zcEo#ou>R$N7k`3r_lC!#TfT<_^v}N z!4@(4d%YXV>0d~NGUiv=Gcn`J*LSo^fzM6bJ~6Per+R)iq>OZa>$wWAv;Z1LhDkjT zbY+`wPtDmj#_`0I57gZxqF5b39-ACOpebVfkms@Ld6RKODa1Am{?3^U?_VRXeTeEA zXG}LvOiTzKd#xk;_CzX6r;5~uOu*(LDrtRRk#}#^Sv#1yhAO^E+1h!tbhk1wMhcaT z$Rx}vwvC+$H{Gyt;Wp7y2%zI_OTl38~6 z11o!PClo28%*hr&FDsi58lc~djR&*l6F2sW# z4dfzJ;%a?7__RSIkv46xLti%m?k!oXrQz1U?j3QRj@Wa~WwR^s=gwtV%S_lWLE}z; z0O3Sx?Om^|bV^BVM`IJdGeiTV;-v@$^Zxj3%GU;g zphkOX{NU1fYqS4w*sx;1DBwBX&{xs9#HFL-lyAqe13XVG+BvvwtW4?^ki$8ozUhoL zYdC>1vtUzw`t;wyUh{6Q2Wb;EqL3Y0P&6j^fSUmR9PERGn=L%L9HJu3UcnbJKR{{>xw=`kGwvNSqAW#V3*MU=Zi` z*FoCV4<~olxUit9bLV!K0=>XXWov%2tc7hRIT{y2BW%K)PyOI0f`EbDcl>(OL3tn! z{f6Scxt!jD%kLVTJRKF~Pj&2M+I2o0)JZ6+R!o~wiuOI$&8-Tg84>f}R-L7En(nDq zBCo=d$eX=8Zfvvs4dy_l)Z}Q-Q(t>!sqQKC?-MMx7#c>^nk-JX_x)@+TDvPx8Vt$3!8d1 z#=l3KkDzNoY{Ri<^X_9A!A;AP(T_mLTW&dPJNBaUXy~Cde27sJ-*cGaUIboo;dU|?5)NN`uhxBrN zYR!|_JDiM(2bVdQPzVsy2{ymNr*k%kckOtmo_K`kO@(h4aQk-nFc&z->2G;TcA!r1 z@=eTxR}WGmRB5igwAPO1z)zf7Uyh%0T%eg;#F`5bKDOT@X27xqW^rO~uE9)MS`raM z0vZ>+*7ng~^m>Wpn7#J+v9m97*PTyLYS1gx&(JUyHh0brOlI1}J9f&O$ZTU$4eo_G z{$ajZOL*zhLWle?S-nvi78DE(`D^A^#$}LNz2V^*HNL4LmsmfiyjM&>`4r<>VUF{H z#jhW5|75lcJ4cR-aA)#PT$ph+bes|ll={A_^f%+7gY4K@4ZzN3`*cjrs#sY`r`BLF z$=&0&Fi5MSQ=UV3K^cRd{N7c4fipS5T~K-9t!+v|^MpB9>E9#z^c=TY8;Fh=Fjw@S zHqCPBsQ{D6Orf#RK_MBSKsP1BvzRS9#R*g?^!k%PepcXnXjPV7v7egnGIImu>6U!x z724w?`s4@E?rG>?tvxnP&_xu_koHtSnQ zS*+hDW05CyK4yjOxz7G*P2)W+L3zTS?D>2CqS7Q`)WV!Vb?GOcMvF7f)^n|_`%GKY zuvn%_^X=JTnxCI0Ta~cQ#b@(c4_Peo#ZepFCB|pw16A&oYVVpIx(X|#pS!aSGuGT| zTJTejMW6SF`DNDcs^*qo6x1gxW5mG$U%O(|Bf%7YW9n&{)YDDd>*ge*X0Rbo;*uNf z#oH{WL12zE2wKqF8&3f91z$MHdQka+K1@pHh5|!42gaM$Qr>-MYn024cU)Pe|2S@w!+;{hX;%dcnpqvW-`J1YzJop9{M5R484}HNuV|H%3 z#7)_9?~L6|X3asuGOYSQ^fEOW)Z(g(B$&C-&v!^DO4WQeym|c{9_Uui&kuU#smbcD z``i2XRqL#Z^X%hwPdTo)c1H=P-g1vVK0~$>FAb)9*4CV1m)hg?n>zG-6R}OZ$-OIH zJlcZgz-x{|g33O&?>pu5jB9BUdXCG!3dUF2(w4sW_>-pxlgw&sYIdlARcHbDGR@4) zz^9Qbtd4hW>*m@pp`C|w61%CDvJm^_z^^gIi&I1${o54Rfd@ zJ8Vqpm~&{WaZ?fV*N2%JGBY)Mm+9Nnq->AJZ>Ak2oAcnWvw?pgexHx%n-NY``@zys zqHbgVo$7;zOEmMn-DuQ5D0Z4xUa%9kv3AU|$A&J~o?jJq5+<63k4lTZvTtBBpgC;d zc$FT~5RjMQrXuv*b-f+#wT8dF!+;NOy*rc|^e2JjOhi5P2}^=I52`p@eDSE!6)`4* zCR48-D7$=c{P3<;JCjC?SeN0N)Yfz$HSXkD}DLvSYw(OG!rb3iFlXl1K!Du&V zlNmsKgTc9St7iVg(h>%coK-d*>Dw&uPt6ndrddifaxF@$xh*^H%`OfM2*$?+fpakI zb#!sAmCvu7DKy^nk6~jZKasNl!|G8Oy|k>LHh9OP^x#u7Fe$nX2b}1QOZR!HFbgQ~ zoB2N8V_5g&892y|mLGjQ16wC-Umxf{lk89u|KFo(Njeoimq;goa*ME$c9MJ2B|Yu6 zX?s#q5~ySJ`T2pg&b@m;MqG!KPS_NGnNz}qY}((R4p(KmBdgo67f~A#iQRysLtXb2 z?zb(Tm~UxmaZ}DJz@(^c!-?{EdSY~PZ|o_FQoj2AZ-PoU{_{7ZwJSNb)he8u{>_1( zV{6B=YA1T!{>d(q#H6ad)eEfagRPYDQyk^)0UXLgFb*pT3VT$*c|IUK?#429T3YJb z;~v_@Z_2=wLFft91|{9ovG~BgYiMG(IXzbSU4gHMb4KS#NN_MguA$k#Z=*a~y=%={?FA&ddZ*H#eo#EtW3q$qGAE=(1-x&>W5E1+b zuCQ}tVBp8diR(vPU8~mmiPjEb4Y>Q&kt|l{e^AFqU5>n^Xr8L9^MFxqeAJZ>_ z%LAT;CX9Gp)-`Y}*K7&T%PLsgoO0({S?M3qPzyad=jrN^h?OF=7-x`9?zf9yPul~m zGVu=lXjxuaBs-u`0SNnKQ2{u%!}oxkH~ql~<)BOF3UlJ?g0UJmW#IaxqmK(>l&w0A zwqk3}vaa2sXS(1wi(_*O4rvnx+ZB(WmC?PX;>iJvsTHPwX6_11h+Tk2$Rl$;E)V^B~+}2W-2s?xks3$P&lb@CotnZVx8^%u$B<#I~vdAhAB^Kw9czUdmoFCeRQKLa6P;nDr-rSTR>buNN0R-x&0mRWCwaq1b^{MH{(= ztuS06=IprwY&%z0q+>|%gQ?YD!#JWm15qjS)@Y24((fRfDT8@sj=@@mE?58frxrfr z>**bWUI7$7ej>T3xv|Qqx#2m%fZoCTBX`!j8-CV4>U#LGcTWKY9)u;O7(V#~l=W6z z;BAY%%xj^p?ZV);YOkzQpJ;>6mZs&GzRdS6fipW;2W*ejy|T%cpoj@aWS-b3H})y~ z$~-cuKhUW^Y{9DHR{^xP?&s*rpMtoK-&8FX%w%lClm1OY$NR2c&vh!~a5#{4XxZ=! zekBi&PLbH<WI}UK76nw2DL@>P0Y-bUXFw( zGDWK`Kh19x#c`}C={F~u-MGeuo|u=grUagjJ943XY7@FZ$HcKS{QKJz`DvXaX`~(3 z+p#gBt~5?A=X$#kp8lN!?du7fikY%2V45c_wI~+dn|p_IZ^DxtIzzp>Kd&(UI6u_l zcMxuF5wryYs;gM*?pH2 z2TXHY9f&+Ade^L3$SZ!UM*~TOg3UXexO*}2#g8rJUX zMxSTaoPD1xi{0CZ&`IhjTa?YsZPw1j4SSBa>gSWV1!2`3&f~hev!_iLrhBrZW+7Ip zja4#8cP8H$EWDY}ZeFnNsX(XFEyzkBs6?2W*@lo;S+uSSAcv8F2i+`8^L8En26c{j zF;~oM3t?Gc?C8=QtoK>Nlqy&qV*#A~IAo~+BmsQ=CnV%;q3AIk%s3ixu5KP((+{M< zN1G38ZTtGgaBTqgHPT+!lnSS2tBiAA~3ismh*JoSP$a9c*0#tlgai%NR@2n;EhB=CfzkJ-h4mZBP1v6vvZ9n^jM8^@Wtnh_wnyzhj@>i~IvW9%)Ya$@41>g|n5o90Rw`1a_v!Vkg^9jnP}zshNCNezy@J;Cu#-=CnXpso&h$j9!5 zz*=8#A2EHEH7x3mLere&KzvuR3j3pAI2D>bA-?OKVd}qAPkmgbA3kZ)3R{eB`J=VX zkmnxi5^6Q>m||V*T!4$ygh)WE+iR=$RKTj$C)(|joI*$ve!Y)-#J5w$U+O#4Q z7^_y=nV?q43kaBaGb=nW0-cY1^AdRGUB*^8sLPOQmRThp>9niTNAHeL?b!vLa2lXCySVa zMx%-{uKbj{>>3k1Zkr{oe#0>AJcrN_D0-a9gg@2;w%^;>@AMKJDQq#!75FuH)nMEv!_P`@lDGb)_tPr^B4R*+R$g<#H!zqxlu&Lqr0;CPw zyjf}$b|?q`sYcAjxbQt)r@XRqQ0uhsX`3zmoHF}4AYZq%FkuGO4p6MANN;XqEJ&=% zpv~m|7dBwYOnp){xiQIH96RklJ{~;UKd~!D8}f}fsy3#+$y_UjW4F60u&!R{1)v?^ zI$$wFLqqrttTqCNo7CJn;%o=t6=1wpe$}!7KcbXc|DMruFzoE+dh3^uwgcCHov{{N z1sTCd(l_Tjd&{hAs_nbXDe$ertmuU?E0EFOBlODpTI0>yd3RInf$cTJx4Iv^a$Qe* zEQ<5{1TNc#pPLFMta@UU$!oW6QzB!r?+seTLGuxU2EhW%G-q``X43b5*+7#NUAY{q zreydx3$e*^3B^^|4U>3jOphb{F%G9;!79{7*5@T?5O~r6Sb3~pcX2o;8}K1K#)bi% z_LcPukr||y#+OF@D#zv}uH;a+hpEgfXE!$wj!XusG{dJ^#Xs!L+Q!5IGZ0`jl;hF) z(3LOW&>^oI8+N2A@bBU2@Leh4;ilggkh32g6DwkQ1HtdN> zL0f8Xh8YG5?|8Rf%!1#ZCx2?G+qh;_XSsf!aXbmyW~(jtlIzLru2f!{kIXuE#gV^X z@5n7|X}MH77KHb59G3nIznN9N9sr{qUN{xz$_HTnN+6L&%BpyKnM3g@W_ul4!)^J~ zv9so`l7XY5yK{GiuT`R7#a$n*-*AX*$D6DkMVfO7yQ{*N#(BW2DYYdtT_{(XSv?Om z7pg8fI^f%<9Lz5igzmiF&JirSSFXh7v}u&^3>>xJ+Iiguxva8@dF4&fXb`sqj7E5Y zwrm5F9*ET~Md_q|C>IXcojdD%8LOwuOqSbheTTxz-}+whrZ@U#gEz}hI$F|b!){XA zoq%OniRJwW7DDVpfKeWOuQS;ha7psa*7YQtgn&(ZEIZKWy^(-j*Eeq5*e1ls037Jl zv&3NQy?>8RAW4Z32}6QWmBeI>5+toZC0}@N&F>n8 zUDPSP_Bbfbo2LXY-u7Lzoga74ALenLl8ufu27ac^7kCXQ{iT{+;lqws3Y?jK3}gao zq!0V{q|I>7{+Ibf##$dXaw@#ClFSx=$VdHXSo$Gcn#}H793CBg31dwwfI!i!XJS4; z9n!cBTA|L}vP&ytfqJ{HX!}!LeR9*Ucrzm^m`VQMvlI~AYi&&lgrDF5^w%N&bW+sM zL6FzDzVuTlW)a}muZZ(>@n#vHKw!b*yuS@d;A~j*=W-2)MeHmWHgqw%ys3?fhRa3} zYa39M6-n@Kn};xEbF{RhpHd6xnbYl$#rSwiI=d3a6l?nyRtWdVF@f3Mb&z z#Y;}K%b(vFRRr>B5q(EKe{YE7%etOiFT=!HY`w!oJ#*7-g4r|ps`WAVzClM|4}FUg zIsZZcB0_pMs5}3zrXq4uFpqE#h?nl7@KZ~|N<*{w`kR+sdK;ECk<>h;XK}oa^Je0d zMYs3(+^(2_2=OjyU#v2Gq-$LJj@EJVhQr>B$GJT>R(x&k(%xL@-@%DXZzx%(s0JgK?J3@VF;o-{f zBF#j+(9qNCd%|3J>`X#NDrp;=Zj*Rf%F%0Q>wejNMDx5hAsmj1@m}+R?vH;I_Vo!a z-S_SB%nR0TFe=)HbR$)a61&s4&g{tTeeAnVlek|*Ia44Z!L{e;Fa#F8*JnZErf=Jn>9d-hHi*fzFpL$T+$tu z#bgv6m~r1|S+02r<|3*zS4Knk`q#zV(>fcTCuH17S@%Ko)lvn@;pV}>PxGZda&Z?D zRy^_@EYoy6`JLm6*Oy}H!$!5pmH$lHS_%dUC<0faGdr!Uw1l&qEWtV;Y57{fwJrJw zr9l2oT}?7Ipwe4!lLd*452&0-?w1azw|FV7Brd`Y%O+RB7WR6;ihe_D4RMnHR%YU2 z5>V5?04zwLe>Jb@bk4FOb}9fLs&q1u1+qieC7{wkMq|Y^$clOaa(;bSlJl+k)XE zKo9v*wqG zH{F!Kx4=+#^X89%kN)9k=c_n3*Sc(+FbkW1HF?_fdZF7V8b>z1IYIdR;j*^!z0RH|L58a>sgN?(F(V8!-eaq$oE)s3kKE{Z zL24;01va9DomV&#vSWN^O+W&WX>8u$BFj36G=B)rWz6R*&1FO_z zc1c($^utJF=q6}sUU=%J1O7!TF5+&aD#;+N`+V3lrWrf#jSPfDnmWeK4-S0!A^JXW z&(N^%y=qeNjj=(a?;HRd-MXTN#k|IPWA#%2R%@0s(jKb2Iqqfx?vr;fS&l$8LN~wMj{pbUZeam{JR>GX550V9h z2B_BosI^c1{PG3P9GG8#?s)S&r(s<0dcjm`Fqn%Wy%sBwzRX!#f55?$;U3glT|!?b zgX1yi$3EWoiGY#l7eTL_+IotDdoP>jufmu-I zJr(Hu{Q5sAdlPUd*EfFr9StF6i9!+@)s*a6N|B@)8frojMKPLWUxo@pLZvWGWJ#N) z2$d~HRElKlG~v`3lg4t8LCPBb_v?JW|Lgj#*Y&&3IjPP$V&;9G`@TQ-XGyKCKL7iw zyOl@!0H2yZP?m0dDF50S(UtV_VcNco)`ptvw2BJv&WN9lT4XDz2gb$i`J($o^BNkc zS+HN7OYFYb+dIN7%s(NR^vh;eJ8YBd=WC0Kx!&n_@>-oiJ(1_(J*NZo>l1rJn z57G_T`t432d2fbIL3`$eK1tB6kD_I)B7oOW5t2z;S;wXr@LmfR{y6nA{x;AhfG+T7 zyg@AhZ0mO30i~PB^Yq6<+7dWGUJG};eUz^nv!hVTe@gx|Ti@7I8pTVjsDK|PlFqSK zy_&h$Jv#OEt&E-+8syh<9=%)M-P7}Ir7l!x3if(4Yg;i}~l>!j~vVamIXg38do zSs1ECuOx=muS6Kn58H#*pU>z2Th!sUNEgXKmo|s&AFJsv^JqQtt7o}IJe$l_4 zFZAdHW{fAg->mO~)u+rd2b$pod8iZ?SA(Hh%7V5j=sxH9CyRU+&tIS!ZtwmL79Nn} z*6<#gK-#6Ur8j56XPVsy1#@*WW%X%059siBq?#0a0sUpRCURo3Wi)bXZgC-Qae>2I zn7nD*T`y0p|NBKrhd4c38~y6(-|8e_rZe5VgdC#9E(#YBkBfls@4w3|Q^;D<>J?1e z?q7S3@O@Dqw@(z;@`T9<%mN5w=bg5JhK2@s3!u39*39(7@$y6Wh(*I^AMpTbRkIQY zYg-?95lnSx%kPEuw}HRLqEyz43_18^21sL&v6X-|0=dECF~ysgP#3Br*yVk!ha!?E zYFBzV|JaGtiLg7Z9w&0LTc3Ibo4&nvV(N~7^VBQ7=E}ZK$@!a?k8_njM(6Z(;} zU$j6#IoUrsyRc9*;w0UlDT<;JmDE$6z)RRpy_1?lO$QpJcYK+h;p*oruV<{^p!}`q z0XTZy&Gp#+yS*T>s_1x1pZ=Y|*5HzqC;2L{iOK=VXmACmb4aHiJxRu%G)Yx`0OGAX zgS%ot@UZ)ijru?lOkv!rB3zuCsOo2@fiUHU@u8usy-N?BQ_8z$+@oC<*~2>#*kOHE z1fDWdDJwQ4(5cU*Hlxt~_8j2(ww9$odb=tAOp%Aufz5>-WLQ9#b^KkL^vxYMV0Io^ zshLMO<>98y6PaYi27mck{nFDJJ*xRygB9kF^w-cN{P zZS#O7skxPxmBQF&<5Zwiv&H%?;Ig|9nyt7S_e{%t6N0lPVW=H8&CfLi>}JfvjVXF94gI4Pi0nO z101bY4TBl1y4r{d0hiy%Il-#ozz}h+bo{J%xY}Wri)w1{fct#dlw*gkhR>yMin;e8 zGq4bZ+!}yFUt`sV&yD9nAKBElXZ|kYI?L8Q>ss6kx5Kuq@a{_%5xr0DD{jJ#Lmw9)Em#diq6?7rHkjMVq{? zH=s|~H=iwo>t<$kAWaA&FHz|JRr8;;w8~vI{8hJEH)R1%NH}Z(X1WLih~Q27B)t0O z*k>E!+&V{(uhe)1n3Nsvk;VO|=rBJpcy2gfed=4$U-N%E|Ed}d;tdsf$H~tXZJ2Y5 z^fwm77L8_0uawdyjGcV|+mtJ$>KE`=^*PR#t#(2JAKRx_WRWgczF_*K-`0H^?bhL^ z+Ia=5>Q*~`s>+r)6wP?@j%=03ZUk*kj$Jd$hyKsZMVrc8yN(@~B%Y~$nW~F0>~e{m z%Zr@n8zn4`W$@nKXhBGpXs9-iRpq^vW7MMTTsAak?7UD^J0E{79+G_Jm_F%Pg`1JbVKGfco%Edoe5z0@rzZRk}$C?s7WwYx(Z34VnWJ5fy>l?x{Qz3eLb2tw;Ybb;5{(J9r(y)W! zK<@i=en&c4NV~1QS?yGMZdeu^VeW3Vs-l~+(l~&h@7R!kOkL1h7khuWY9wTvm>E2Z z#~I`9N)7R6(l=p=BsTKGSu@AM+J+3V&V6srP}73vA)WY8M*X{f0|GQDvI z$B2ZS{XC&XjGkzBgTi6qxZ4Lg1J_BV) zBj?v-%ev2J(kYI)NAF%_?8Z3d9)9J++FoYEKVvC%UP}5rR<+Na!aylNX1Wu-S-Xk4 zpSWTcG18Vh2Ys+=(Mf5C1PJ1C+j^pQt6Y&I9(Q|p>*exoMa>D@ zo-{Wf#i?VqSB^F^g1(O6-Yd%+NK=cq>e`VcMi!e|mE&L^D_bgtRPF$RB zTl~|u*lWAc+t+jyv@{?ARz)=g)xNh9K!cyNpBle zu5A7@ptXRh-GCck#)#qJKRi`KPbE)XZOn!6o%XsJmyA8+_0m}rRt$0cp8oz3;H;rK zE!t=|SgL>r7fLe_+>nE8=))WKuS`>DjDM79PPX{$q)xcMd@uBZ7V+EA$6i+Yyo_|{ zDOn=$7=T?MVGC*mleRoIRp|gi>J)@zl#k5jT0h?+o%4x6Yx1!%n=rB&m@skHZoymm zmV1qyWjp)+tf_EGt?*_WwiJQbnKQp|p2g7*A5Od1oV5MGV|}>iUQ*NNe=qFiPy#PS z#mGwHr2WP)NYNNhZA_V=BD~^u<;^D_pMNG>V};K9Db}-ROtuHcm~YL|Yzl~^y{LRi z0^07bHfx`BuE5D1pG;mx{!TtEuUTfF*$t%MjIQ2Wj@tL>sGo`^3*P=|q9SI>TCL&8vTVSCoC$Z9@{{PCp*!-~Dsg zC%w3Kc4&k{(=Ugk1~_G8@Q${U!n1`Ww#8c`P3dHyp=Gss0{P>Bh1KKXDzE{u0`NlV zfSw=(CNQHLpgSI&gVUIFjuUcX=Ip=6?bjCCcDkFqnpzH4<}L6XPi$+5$ zX}`>XuP!cqnW^Mhw-*wrsJb?;PSx=GKv1NK!MtXlg`eh%*X3TRVSAKr_&7YA+$I|6 z7(3yi)R5X%T$1On#3~<7@4vX`md6dz7|=_!Q+zq)nmHX`%SViEOqghTY)T8<n*nu5 zj!4@KKU|PR#|I!HLcEpL&&@dX{T7A4LnChwIFdQ#B=+qz2WdETNn|J~OZiuH+o#|2 zQDCnmvjoH;Tg~D_U7Z!o{vuduXZ`{8NOkDs564zVAi2vV*vKS`N=cc?kiVTydONzBcu{NVz`<#& zNPfFq)m=eA($BES*VY=;KDudP*-&oL*>JukSQpqXpGZ#_!>CTgp z;ei(d11BbdugGQ5V6B7_sV#0hLS7BQYHI=50j->nl`exsC^g)>t9~ZQj~2}k=bkIs z@gFOC4!?K}5<$3+Ha~_Jc)2!-Jsz5w+X#SI5ii7rQ{GLESGQYcGv)rJ1y4x6?_rWep1NYZ$wCNj*%nkEh7b`i)}gFB(wjPcGYElEsxvvZs&s(;`}oQ zs5Q>@b90x>#Bx5b)jE0Nr0IqMW5baNPc5MrtX*B}Z`5g9U{}&;6>V9&Szkwa)!_y4 zNAE_YcQsdc?9`e77F><9kB?74tEJ7v=c$q3C0-9(CiD~8gP}pT;L_pOmdbzD@lRE5 z${BKiEjXqHTMbTZn19cOlUKmu9A9Eh)%#zBYZQHlA27i!!Rm3HHrT>&eK1`-uxMcG zgD1K-XX<4(y52!u40;8y`8=^Za-kaBYiE=ILdm6SrZySfXgLdwkrlgK)gI7tiUH|} zMK;rwso!>ObFnyWbC`liyX(g;m>_d?1}=t&-wDV{g^7NHZG&fLr(lrV!eUNPN{lnL zMkwo~AiecCw3_EDonzYM3bKt=T8<2YcAr5eax2EUj z$Vz*6c92taSJoY~B5pG~)-oaVo_pj24p({MXZBXS=xqfIQRL$pdWM3sw3--R`SYu* z*p*Pv{3?8tu*()>g%;PNNyBpRgXJd&w34Cu!&sHZqj+@&95|PhzR<`=u*)jZEjb2& zsR_)Ak}5?{)i4YdWbf4jDqNGCULUnmp))}YHPxh5_oAQW?*Jp(^^oF~!uLOxZ&UZH zf8keO25s@zFz=vWPDho2VfcW{WUpU(k{O6EAxqSK8zWc_Txn5vogCRqVEP!+c~dFY zEj{<+L;fHzpdYZvJ}09r7_H>0v1$CBSJo@{plvx?S%34qyq{9e@7 zE}jp*K)XEit}B7?S`=F%NBl1rs=Ln^)qii;{(B)0pePrdc-c&q!W#p$_U1QqbDdzVzc zMhN0hWZi^#%b?{b9E*WWUQ1u0^M{5mZ4qZ^8yaHN^7U^3J<;T@78{;HE4&QQf=j=g z`v>@tad8Y=TOr!OQl~h6kKPm7m zY*)X|u{iFHH?PSb{3!H@pyn2`zxh-;Dbe8$d zD(=U|Ar^B``WeFl`swNepPp+VxSrjXFLXTGjPsc2gJREM$L)1hw9%|{&T%iMTM>3~#|u2$2h@{yT~g1HFJ6b!U8B?FQ^-PQA8H1***up|de zXa58eQ`wJ4IouFhr86+DQM#(aE9k>#YiLtW!;}*LsiwZ~lx!|{!^Tr3UtY|$w2)fC zC=`WDy*ZhI_;+0Bx?qNXQ#1EV};9I_De`I0CdxsJ0SVutpbna7+h+%J89@U^o|o}1Vm%_dG=UsHwQ z;;+8q^3K5RyS*L-woz=V-UVbF4O+8GK2TmiX`DOA_vr(H7N z9#O*i6@EAHhG@Eri_79a2TT_RZ6jw5BPR?a$Ja(a`*JSDLlwfWF$c4V@NBm?qtn`Q z3z-eEOSlLWFoUHU2EQv-JKe4|zMLdev-T4IG~o?R6|G+^Qu&$}c_ErB6x?;Aaso9sa0&J+&#Uf}0D(%RjTf zJ8`LD{Y&-^botWiJ^1e+8$MF`j;aat$3daHROIiU-G-a&LuHIdjl#A#Cd48`>9p6ra-NP9&n)T?moEUpp4lwg z%Yb99bO6|=@$ZdqJ}I*TbiV?GcelxE!0q9_M3?6JBv|Qh1rtl@9{g*zwgif|XVh$T zJSwe|dfDCLv#6~mRdKU0DyHbq+PE>gII;YJ9Xz1coE^Y~hcBY( z`E5t5$5h29@PO^Tf=hTRhqXcyqAf7z4`B#sO9v-TgmH}cT25IT@e|(3J59lX4O8tk z+`pj5w*MTpCC<9DjVD6@${l=i!scmB%W*LWilwd^0__elYgTKql2HI10bxF-8}ug?*m6592gW{V?IQ9$!(NpN=o zTSWx5;{tylb%Z_m*>^UgGXvI(Z2engwNtlaJx-i~H9{GcJ;mV`T>u`#MB1+ni_-^8 z7iYAT{|w$;7z7K}mdxyIr@Au~8<|5f|Bt5)unaYYZNxtYkYs9M;kX@;gGjKsfCjR= zu=~lXxH@eK6xzlC=LTO>xF^{{#un$ME=CbQwSOlZ%~KF@OAK9F7%-5x;-k<=Z`vHd zH}*tJ&2>>InM|0^L3Nl@${Crhsjyf^sz-zvuGx-fONOoG;;3Q|>hsFA8Iy~FKZT{AHQ;)szjS}4Bz_J*un7>ry)#Z{Kui^pe zXKyYqcLu5EE!@R*L_~&~ct+%b)%{0TW!xzG#rbS~+op2@;~n(QtCgQo`lMpLn|!W6 zfPXr+S&CB@*5xwNSE*@LMH@lK2I-%?>Wec0N(X>*<_m}bny3M#=|%&;z}9s49a~^5 zghy67L#E}-cku6QyX#`ga@K@^5Z@zKmNgg0PnB>ZezzZO{Ly}GE$Js5Nf1BI1XO0i z%_~1!ejK$%UfYH$ge3N%9(@~b475-{4HNI-s0JC{fa;cdZ-e~-t+>qcZC?PD<&y=o zt}$sfQEyug0cJ7?x`63-t%dEq>je=d)VUi49*!1}SSYOzotRS#;j78^!w;F?eMlV3 zGwJo@ZAewJQY>_-ExEp&q8Ks|Ney?)H!w?Bw(yV!;)Op!T*!RSA=pFom$dEShH!xc zU-lp`eb%u=4?*+h@M)#FX zCW)zkHNz)-&cejQ`?&T}GoZ^@DsH=)%H?d)Bua|%iza~Fu%8IATg2{VOF;*~mp=R1 zUnw^y%a%_LR%{yP51!<8&jTg@M0B!ZZ^x0FFTFI3xhwZ#w-Qfc9&OVL{P&;%CHA_~ zjfOw>{4s%!%AcKblI+fc&rC&;*PQQ<@{Ey?EKj1KyL=ucM%K=;YUe;TGd`GicXEDH z4%kD0qMx;nr1pR5A=lQj0P_R2t1mzy)(tdXj%wyIaJu$e;MJ93J|$uRf`JzigT+dj#WTj@v;Bq9 zvWCb)G9!EdJQAzo0Q&|{t61i4P!KR6NETI`20OJoW#odl7wFX8?lsEa6IBtdf)K3? zjE8(b-{1J|4lM-_-rqG9TzI1|vcHsj8H95TTiOL*(4*%<3-?L{&rLmcjhruE+FUP zk}{Dvp?{qX!zI}&hZ#?R7R%zr1-Vow%~WgDjE(5cyG347zQGIocnQ_y_*4u`xKbdJ z9PF<@?`&P&=&!^n-%-*8e^Ld$ZHDJs6Yig-+m!*5!6jO$iO~Us#xO+a zzyQJ8sT&ibrH&$75bR1wB#XL&b0GVn1KXcib;LPM;V4+%BD_meV`6Z}!<+{C3h177 zi&OjqCQ5bni16^xaaja4SJ}IW3bnv#8y)B=uWFN>KVOP}wQ-}u0~{SOPp~iCAp~Dd zYS@Vz1OAUquJ?`f{OaRy7U!EzO1@6d82jguwnL*6nP1f7`+j2u~`xJ3r4` zocFvNKKcEfwchcR{S5F3RzjC;X1H;;CA=TTH{Xp*TenNNtg&k+=Vc;4;(9LV810FL zD}*tv$#}|;<&|pyo&}szn2uY9Ai}jJ!w_@@@T;Jmx5#4_WRqm*Hf4T^O3P`JvzMt# zi@u^G39_z2XA9{)VjGMbu=c~@wSy@btlbM)IL z`U28&#mqS6D57!vvCva(p-medRpkS3X7q}5_-7_I%mjVXH{3ecQT}q2Hc~!C8qLu3 z1rYk{@CZZ&(aK&5W;+tHyLPKns_rqLcyp@H&Xr&I{DO5*l8~lAf7BkcoH4dYka3`h zm?2{6e(CdMkIsEh)^Ev4Av%8#Q$Nfws>ke7b^{wyq>yAwB z0u*+!srFA(2y3plZyQokF@<6ksPW6oh5a*6mY{;MAx5mAneWd2JKA34y#Rbj3pl zH2<@cHJ&rl0b)x8Kz#iKwh`(3Lv$=fd6q^JbrH3w((`Pgz~*^}mEOnw@F^oobe?|( zS3_$&qklO#g-ZMHywm(+XlN)vq2)(FCE@ExNKQwS(Th14F=x9WTRI;s40h2r)IS^9 z8F)AEF#x2kT`6HFtQ6v&4YNS=_$O$mOY4At=GXGUjQ;a%$yC@9fBhBCGr+NOFP9GP zA~sbwPaNEmgWd8#9&b;Co=y#qS0f00TaElNTt&y>VzLj}5mzx(-fk8V5*;_aP57P+ zO{1tRQe-v&ZskP4rp1WJ#pqi&*aX3}>EW0Qgt|%_>+|NiS%mN6wz$2zBJjkB0nC;h zFDgd15T&znm|ZUQ$9j^JB@WA&5ml}7%j!2;ywzU`fJhruvuX`r$y9K4o##g`j_x}~ zG_LkEQOvhc+5@{F}g8eyiMwngzKnDr{r45A1$5PXwO@f*Rs?hKNm^NUg-N661lZC>c zMYxJWLrFgUP9UEKkkJyGmGt(eVyMa$9I__>VT_q=f;sm|vxF@U^D)2UDuC@9sfoSy zxg<&8v?xmBym#E-qdfI5;J*oBJ+NDny{s{2!Kv^HG2%^aQ$N3*iOdQ6K^$-SH8Vea@THZ_nPreF(GKc{51j-4d;e zIKlpcj$?#AkV6cYBtDi7wIh=mf>LSdJ= z6xxeF470+~INnxxwUp%^)SG%ACWgapzBEJMT>qE|23<8H0j+uL$IMgNI2!o!jV-Y! zHGy(SglV8RqSmm436PrFY|Tk4V7et6ZK2Tj-mg(d{qSj^2eZ%D82XAh|&sMcFdJj#d~mU9~-7GmYBdvOrBo4vn9yZSomt(#h$)mt90{@bB_99KUBr zq^M9Y-iuG#iU7sJK^j9J1#Ybn=8c)Eitqz-KRu!B7ecNo$ZKS5-6j(qz9E7U+AB{O zJKmgtbHF`AX(9mL1MdSpmjN_rj}Nj-4+gqe0bB8h06C?OSDVJt9n9q2>!)B<>$DBZ z4(8R}k59I$jg6W!v4_ZJ;vG(W-kG!k>Is2us(Pq=N@pD3x4V0hUwhGbqrJ7&m6WcG zUgNY%g@Xdv>01zf$~mCTQ`hbR7@#>muv^SrmDl8vmMfm!3l`D(S#7C`9<@C1Ybqb{ zsW^UW&~V+xI5+2%FS{$l?0;0S?k={UoCl6FEpmak@V&k1sCTDjq4i_DXFNhQNkT*u zfqhJC*lsbKBlNj&X>v6zFO!MqfSD?pCT@XzNC^!I^=4S*qB)X~Q z@oFKR7<{TVQYoPks4eqoV?0my<5m$$_U+z8W03w{{Lm zpOX8IpP%-+_@p?M&-d%D^3fE(AC`40Ym!B>Xf$4ThT;uRsrDl#0FCZ3m3h5iuH)>4 zQCl`JC<8ewZm$fqNfu*K5)yB+5%&jaQ7RTPk^n{#_{$#tWtRN*>Jl)Oq;dz_0?!cD zQg7qRMC@J!Gqz4e^gCwn7%xf%QG_5GObR$Als2!%(X6wYCEQJtEj~39gl1{E+Ilq& z%>=;S%o&hq{7ryYpOPhG)$HU#RZK+xkycfWsUrWSdn*jzKs9dd3vsHcdb#-Buz2zJ zZ_fTr))Zo6*Xr$HffT|Q=Uv7@T_Fg;YEB`B++<=C2nMeR`KOb0;ke4c=cx>?4=8yb zB>`zFK=N@)<(70NVC9kXjgd3&PNE0z&sx)&;zf^IuA@!#G8HNXcUt&W^O!R6nDmVe zQcJsQpn)v=@9z44I&;kuJh=JeL6!~1ZXKa8l#PeJsI1(rB(TkcT@M#@H?VC6g0;!| zMA-ML37I`$edR znCcKBcKVfTzrOtH?f1^4e+CM?QvnV(c5MUjz&$Pl^9-)f914V|il&`;YO&ezKAp_b zzwW8q@3Awhp05*Yo!?Z_It6EtTW%ZfnV~sq5Y7wfoEu=Z2+r1eWyFf;-LAWSU0u(B z#11A|ec`4Td2>M7toKHY&P=0v-1mh&_F{|!az-RtMJ#DrL~JAdC3WGolWrbe+he@JCNJzn?ZV`7Mbitv0RV%72f8@Nfv}<3J)ZAeNt`m5 z&W_*O5>z7Ti9yEoGiy&4*)JuYZ2j$Cf?3Uvv0=xs~`af`LMY7$n;JYKc_f<6LwjNTQ=y9JCaJU>)CaRdRj_nqoJz0<4kHK| zV%?HT@%i9xA%nZAApc4aVrVyIrR^QAQnF=_KUKCZw`pSyRY@M@6nX7CTH-s*rIZZL z7L5E3VR3$E_Y*@8?`PU+AFSWgT>Fv)> z^yl~*lDJ85kC?QR zrw>OemkPeCDtL63h7BpYLGj51s=CpQjdXcFL>l+_p;iQAV`JcR=h8Vhzb6JvUO@uE zwGX~U-l?2Obs5g3W~>3G7!0c5f-~_0_S=N?yr>URMopgh%4>(f0#1>Zx=Tf7Tm$>C zSJw!J`ol>~06#Qwhec(D8I)L{JTbQ5?k8F3#=H_jwEXr$iTkdGoruns!yP7=zn;1e zH+u6y85m8{mLBxA=Afc??YS(D9!9$6KWT7q;S|!Dc`9P;L&ym{dpZi%un*32^| zrbGk$Co_M3pP=4J2|7rv?e`UIsQJ^+Dz2^FwW{Q@$eIMqUm959U3>*8I9B6WbONH_ zeq*m?PB;Nk^^SY%muvE;0hJ#A;;99P8wfJmZF=;oqJsPnVL+uF=qhgkdBIQA@CP;M zUKp&XUG%N}W6zn=sb@k68lYR#T2h!u5X2oOd~aCVfKUC)<9Y}7bITS^$VZ4zxx+q$ z@a8h>Cf1D1NPC8;G+twV3h*~l%B3pC0tsFz5#WNwF+cg(@zC21{_xtvU6%;iOym!U z-3u1ZIZ5c=)W7FxQ63?_NP?GG9NiK`i0^xK86I6YO-Z_X3tE8`odU7!oo zH>=em(0!aNC3Z6o^ZwO$8$E3#NmPbnajXQE@O9M80gv>Ku&fSdS07~PIUf<}T3>X~ zNrIwUG_0mQP^#f|b(XJz>l*%o%&g%m-2hmXvw+w| zwhDGB9tK^sdJYrj@#h-hJg^b>M7J2=hQ~3;0cf*7%qJcAcK{YJDCJ-o9w(Jh&T(0G zdjJ()yL9G5D(VUd+lG}*em+X_$p5fgvd%xPzWnh}l}J*`j)8+}v1W9v3Iimx*VYgY z+lXGqIX^{-=r|-u+UK5J=$mG{dmu&>uTH$2_H2m?f>G%aCT@e>F4}HF{dv>u_j(HB zictakIIq?#Qp9Zt;V0lJfRvc6{Uz}#3!2d!W}t|xFxWpNBqt#1l@~fT#vw*QB8Pwg zhu=F}4oyp%qo(KQpXFHo)Z6`2>J996_JCm){1XY8 z*Yk@rkc|pK)byKM`gf;|!eY<{bqWuItyVA%*$PVCUwdS;p$$N50nVB5<^mLQ zXF!0U^aE|p^s?%=#WvVpB4kQ^-a$|F7D}_Xmoqm~S_Nd}^js*w9B&>tAR>5Ap&$|M zH?B%-PuN=p{H_r`e(oGo}!;E2CbWo$Wi&owF^@di zegpMM!BHOqnjDSfGm(<{vYk6O61J560bJ&BC z5p%OmwHH~YEeR{-2^)o?b#5m}80leGANvLq40`I9-Fw3&0y?242g~uv6$}`ANk{B; zu+Rg~lz6t~=PTwxp^&Ic3fv?I;ynh_of6J-;hM~SzZN-@7r8Ki2BU0P9Nz%Vp}jqd zx?Wkq*g`P>-yW*}{~!tDX@L0)!}Za>)_CC8mVqDOA_ceg$@NonbMp(p$WjJZGuZC& zd;D(ag4J2(ZqK;rU0rw9GP>5&vtC_h`m2hKE;V@X;kJU+oXQn*nXIIkyV1JNNpCkU zmoi7pp!a@;xMCQGk`i^&&(i9<~w6rg+rGLC=@+b{UCp3x}r#8unsL+sxUJS ztCZu$U!074-7&*1su|+9ln+;ZwEMfXr5zf*xnXVzgw_ok2Cv`eE~>jMYG?h{x8;Q# z@Uu#Kl3oSsVR3lR^~f-&>-HQ(DI))#rYt{E^yi14BCl3tCa-c=>8svk>*-zbs&x33}2wqdm!m6Qho=;y%nQrQ;B;A-_lzo&`|@@M|6tp(Z7 z-1F=(m*#|Q=;k>F!CVkXpkiwXlR8_-bL4zgyd>F{{_5Px&cJ{Z( zLsf!>g$S2U^gs7f6|;DhpZgegE@UebJBeAUv7)iuyX72cwGEfjA7*~FH^H(zb7J$| zi@Fk*SOb|DXBU^tQs|khD(VbgkH!aI{>nvlb|`B(*rmcdgA89RI5@g=QeE<>b~Z`N zzHLm>&wM=WghbWXMt{Q|1o&Q@5gLuQciJzaDD^^gaaoNgt~~<47+{44H9?c`;N!+c z43Mpa5jkYqLKL$W#wqmN`Aq@#X|0wiEbg*2N@4y{gBXU(X~dsu0}?6_6ai^=_VySN zvj^E4GYY@ru}QzTcy1pC{+sTF6FSX%&$l!oFw52}`-ac^Q11w5Xa;~l?XeV&1*ys>J3cCYylxN!m zjIN0;Et6=j+6ZIPp{UK-2^%(wt!4P_6+svmLEk!AKo_fc-^sla zAg=R*TDcX$drV149TL^a`5kJK%LE{ub8er6u`!izRAj6G$lZKZ(R|42?J-q~v4cHh zQu3ffS^q&lM6pnfr1LukSZVbkts<9Ww0Xc(!ZX~^;r(iAqWGEP9uzz zAm9uSV{r|t%snlU$5-7x9Kw283C@M9z!jlIp9J$(opv@8_f9^rb;4vI^K>aZ6Xi1k z)+lV;(1Xzx?zjdC@5CHqJJ|z|glz;~2e3qT{#2#WRB%))&)+FUz3+)y{TYf*Y?V(J zzyOHQ!wX>Zt_%ha15!^w)dt4>pjXu=+3%;#RG9%2b$6UpdR0-zCPfTZZ?E4xBBde} zrKX&WB}%>BC1pUG@6CijRp7{p-p}891<9m;TSaR-j};-> z5S(smHKC@V+0?&Ehgy238%B8-XGSV~r}jl(&TUb!5Ea#B{4~3b$eSbZhrt(8{c1Ji z(9Z^||=6(T#?=-}+y7zWf?=^rg$vu+&02a?%^>KyCMKj*kJWr99s} ze$B%(+V^fe6MyDCT<%@?C>=(od~uU&ubT;&L((xD(1vq=s{(YH$$e0T%-kqw4|+w9 zeDA$_UZ#tTlyg>zmKT5@5_?nn*rf^V+a+ubyZhcSgb!Ci0@nbrMR#VEvqlDk;8`rh z4|Iii^M1>)hZq|YH`5A-8PAVCQ?B=SOie95VXvb(e17NkiK-4A8}@Te5QZi3wa--? zRRdQt)2Z+SKl}UlheXazdUuwo#>@fK7qSgaRpY~ib;N3JejocYs&t>L*$@l2CmI56 zV)83|5p=Y`vhiWffL+hj+{^5uVQ35lLtAg7ArQjf1a;a^@a@6j!Qo}xNnXSp=)Rzb zRK?O#?d;{~c6I<-{C-}P*Yo*zcxP~(Hbmya4!bR|)i?(1wi=~`h_VqWcO;BG83;NS zzivhyD(|UWQHzlxZW#bi@HnZjFns2Ui>N^2%FhGzWl#0AZ>wY`TkMrt3y_(ZnFp>L zW}O6S^!^0Rg_|&1`r)H3^4=KO^a}K}XD}_J_+EBePqZ!g>o&qFeQT&l!|JVvmLz3% zW>+n>nlK(CJ%?n=msEld?V#mkn>&_5gB=5$)h(j*54Vx#S{Sd zK()(i+Pw^Gq4^V3#?LSW|;rP%pNcQif6ofQhWpAzD>EM0b5F$

z=NB5UmG-iY%+4ByA8DVOk{nKN@P9Hq8ML$1+qT3MNC0czJbwaiI8L3v<~gHxxz)(; z-zRH;GPdT;HQSTjJf3d_CoBu(=;7hvFTpcziHK`&zc?nj2m~shiaEh>ac$&0V47hw zKl|$H_KAYk3{U`;T#_q_fJ6&~MN_3!!&T)j;S-QL*wO+fY7PF?py1Y91EgyWvXw(< zaxa`cSaJ6ETYfTW6P&O|h5v()3%37RQGrfB(@YU;nDlKey}laMyOzp7Oe@6qG0jC? zj@W}bxeXY~$DTs9Y3W*@#T9t?jRO9!J4P!+kx*z#G=Z2!bh(|j)**@6D*%L)#R4f-FXZE{QH_z`4nNrL2|sLa z@6t&rFB%^F%Pq50>QqRO%haEl33z=`Ht!A^(z^!GBDUt?j2b6<=pJT`Kfaiuq7k8G)O5#Yb24^o4d6Cd(gB?jvXZ(iF5T# zK+7211EQvYOk8Fa{EJOF-ar9fzuI)awU?Y=K?-k!5 z5iU`uBY5OfNJ-d~VEudGEL~KJg~$UK*hXvS%L`AT9^gz+4KaqQ&{BrFvD(92x?~Kf zo;Pr}8kUq`<9yEw(iYsiZ7QfHVR*kZx)b26K35UVn8!QgtE@6xXs$EGmm$Cg{(ezR9U{g&;e(6Ed0h=#@Mqhb;65Q@Uj8H1J)3yMd6!< zrGN^&mC%%eU0U%qsW(+c#-13gP;}H`*}b~U-|lo0{p*|Y_Bc0_?&7?^ItKf4Uk>tr z7Y(!i?&vCQfz8z5>~Mi6ux2}_?B({A%6mjH^QFF44ORi5C>1Sy&0cPUqi7Ut03XAa zvLzT@oX|QigYnW8b8^Z<^mrlgMm|tUbHgFxKP6JJSD3d0Qmmr_?)G~aW#saWB-q~s zTt~JQ^o9e~!-hIBvrnkeU#g1o>c;hNklK}O>-tib0Gz8mx*&TDJ zV!N|s!$wztID&_>5+PJN&efs4rLGR}Tz{pbZQ&IP4Q}ZvT%Um(Bkdtd4ImF|9qq0u z7|I7${pj2R2xgEIFK5rC*F)aqlwguO=Q-rTWyJnoxU{I zu%{u~=ft7JMf(J3PJaI`OS=yKsn()V*|1Wf`)8TM=I*C-SGY?@uJ?6lQRJ6b4&@q@ zFau6N-C(c^{MNcsUO%D2z;`_})x+iJva>7f?cd20syy2i5X=e@F@dq?Bf6+TF!t37 zSq9pGt;iCyypJNj;%i>OhqVshOkwf67S0p~u35nMwt(hKZw&*8QsTsFf|@&xl#E22tw~AWxE*V9rf=AiDPXH&3ZncgFKxK_li^NH#N9y~Pt)z%?5{ zpu)XdGc!3%tB`C;H&?e@`_NwG5Tb;T9w4EcG~u?SQW%GTJuJ|KMlczkE(j#p`UFXW z^)ZVDCG#{u7p@fJf&8o9os;1wJ9p5-PV@&WH0*zxpZ~SI?EmBIO~7L8|F-cqDMBSG zLS<4>p&_X#DVns9wMh~+-I%wp`9IJ9INs;I58NC=UDx;fS%Y*8+IeHL*3&42qhs`%36pkRu=l*QagC~t36Oj% z3?(nK`bt!ZC@Nrh6nyybVMu_YqpcG`eE^#b3ny~7t>dwAXbtp3?7UXT-%G(KzngAC z`tY;~mAJakld+SeBSveJVvj}ZsnOO!!@>G>Tney@?Dei9|5=o-qUPr2#MZxPs8Z0I zgEZMttw}l>vwL^olY?opwli$c{PW)5^K99{cZ(}@t_|Wk^|T6!>+}|sTx}Tm-i-Wq z%xmrA-ngl8rCee1k{hS)aWZbxZ-W25;C_9Nw~pNN-82CGNz3YBv1LGdSUf3wBH)W_ zM)(mGbkca=Fd=4Lx>UHL%zGP06Wc47xL>mm?AkmlZO}Zk&7Y-aRIh1c8s~6n(&d|- z%E#KRT>I|}`j;3-Z2i8m!nv3ud49|nt;)!UyGE6N;Q~2xovOM=R;~T3(TuuW2<}0l zvj}RDl$}ptLfEtQR{RIjx3)n5bSpCQQ`{81J<~>_yy`+R3k{H>sVVCkR)F}r7u`O5 z@SyoBtOi58EejAx5WV zg>@DG1HAat8vVWo7o#Aa9HY7=$?ozV&+RzgCjTh}QMi}3l#ccwB#d;`5%ZRi z$#c5W-QLXqef2B&(+vmC+r8NGe(kHi%@6cJKoNPLzyLMBMe8cgt5P0ER?phGu~t2W z$=0@4pAeZ?&Z4)W-91$W@0y#d`|VA+ucgE zb)BfHgK=S0Nk3jRZN(xpg_pvt4PSRN7wc2tu=7ep-=5N}x+M{lt#f`;c5tiP_?ytD*7tHFotoy?cS-lXdd$-=Z&p zIAhz4cOA#%7G|=gzoFPBIV926y$EfSQ8WG~gR*4;MU8Y!1(nL=MLVP*aM&WXggmS< zaE3_YD5l;MH5JJn^Bh|*KtRxwJz46PEb)w`SS8nQI!=(9iIGUv9+OIegQFu_5Pp*pXQD)olA?wJW!mc}y2Wi&M5BD|Ms_L!FH_*uZ zE>-lv3)%dh5qOlc4D6(%UdC`ge*1<0Su@wKWagX~}kJ1%0^8 znI$k9E*1Pk5B8~x$n6-4s9WtTGa-ev?=34daM9E5Y12o>#wO`o7`ZL*b@Q1~c~d5d zefZAL)yX@2US3yWq*}Sf-pN;^Ncg^fv%j6#l36gNKJ8hwqjz>P+iJ12WM{oRqd%4z zr97<1AG|YZlIxdqdJT!|9b`!MvDHsG$=Fd$tQv;RV|QVTn3{)S#qV$o#=>ohn7Ve7 zq1I9P)5=NqOV??}sXhqE3!hd|+$)YhE^Zxr(Ae~~s!APt*c}UQpC2s$S^IOe^H=%V zT|2!>9~5QhURGMFWT&%xZiR1pcyWYQ#g{mLqqAEaUvJd4{jRBPs1!v~R1C~57TllW zAj6P78F7(G8Lm)MnM9gjZR@a{%i{+alPiKU&%3|5@%e_>Kby+Lvm0%z?Sht$5WXV0 z=7}1`QvMq>zpMAN3l z`)Bi+RX+;8+Dw}^Ftcz)VcyTT)Y*GTUtwu+W66}@V9R&&jQlp7cy0<o(37lpyos=V+*+!bEV$p&Yh*R~kF)=II1q zHYt^u`8^*|=z(%t32yJ+`4MJ`FkpqUUc#qfhG%HxaSDr#)va$wAg+iWgCF%U{7?Zg z8CUWxB*UvHA4@T546&cX$4FFztlxLu=wFNyw8S$0kwlM#@- zGbT$y_z_QMMxSJks#2`hPc``=E25mTQPnoI5Sem$GgXM9devT@4eHbgE1`K@ub*QvuO4Y3{-^ULh z7d3W!H4p!WlSNzSq4YS@XXdK*-i!N7ocar#Ffz3raseM!fCUp7CRa!2DDbbQd9$z5GFKTLP@uP7Du^UXj9Im;` z)HZT{-oM>yF2?NE&`7FUMeEXTe=Q~qPP*H&QeEQiz2()u3+s>KOJ)Sf?D7TLf=4NbO>t459cOM6mltM{EwZK~glmm~r zPi(`E+7)*^=l}xU)5HzUb2&LmRi>^YMloE_1pNi8ZuO8-*Gt#OnVj;AFZ^OGB%I}vR&!b|)5Z;coTMqbWTq?&UrQr(b{t9x zb(OLue;L^9@rY5BEKg+{-x~?M1*nMgxuJNdtSfxrBDg6(uju}t8HFB(b1U`+tClT! zt+3f=W!a@R|m)IGuH3Vr_>`R^L;h$yicesm6Cu{;Bcs5V8F@$ZY*YL;aVfguu5)GBtNauFz z!OHc;O}d8U`NvB2DZ}T{N5L+NQsSyQ&qj4@>z_}evx7r-g)PaX?7beU+KP9b^;5&{ zF(pV?&{E?^LXX>7n@^-kV)%JQ%MrL77q|B9pqF`{HqmAHZFj6pbYT@I{A0E|V={$Z z8BE+ntHlvd&0Oo-o|>IK)=vB{`XniPy4n*y$>yw4Wti1RCsk$7A{vd(AyyQbCqgVS zH6Bw@QdI@SqFy@dTc;xyLV>+D`pQ?+by)w0CBA--C8#VKyf5Uh^K zJ51_-vCj7C^J=GXw&L}EO|!F%VDAilhAh8B#?baMdE+tNS67X3y+PJwK5q&*Yku3~ z%;_AgYQjWzr$28b5L;!tC07z&)%JA$`bC?Y$CMP9O;{VG>3IFE7@335R8+Za(B;nz zAigsFHMHh=iDmb-4MW7#e4gGZgVtrYyQnWg8NH&?_yV<};=_lBKJtC(9$Dd4hp2@` z#-bxTU5~~^9O)N^SJj#nZtGT^ZWo4aC`oUrrxW06Q!#&u^YlP!orv#-<_Lq$5=@U< z)v!#1HR7-si=LHBaibgS_5iqS4bq5<$i51@8Y0;+&Js&rHqz(Bc^4Y}+~GmzZ!km| ziSx!>RHhvg_dC2p$JT83?5|Ev<7 zZ@B5D@|rbl|Jg_z5}7Ui#VIOyiYyek>+!`uLT+5y^sI& zG>r|G;S@#=b&ouHeq%~mkR-u7JB%suk&%gC!!D@aBbaRCW@xXPWoe_Hlk!z6w0o1d z$o|=qGoq`TR2t^`x{*CNUHpek4>PKnRou&EE@ch|8#UvbO3w5z6BfHY_cl=RPG<8w z>Ne+A1Yxp4BQ8OsA}GDhTLW}_)F}L;TKA9kjaQ0;`OyGZ4fSk~%7ra(b5M|I+o-`5K_EQ@6FqcU$^|A2P}uAfx}&Ohs74BnV$9hlJQ=rJNmMUDKC>@OYp z-FmiksHd1Pj%sS+bTv|CZS^+u8BeTK&no#?kfjxs>({ZEPt3-w>)TeUWH#Vd^>T$L zjI;M5Uk&TA4!UeSXghwpY*jCr=)U2BpTsI>kW&>z{aGB|OM;O{a4^@XiqAyFVobgk zC^yTWNrTM$2riQt2wgsM6S^QLE7rKokG5`Kgh zvul$>y@IZ8Ve-aUrTS{x#QFO_dY`3r$62Pm`$vV%A^!+iEh#fB^}KT zIkCuL>OEgbeX%l2SW+h^OS?IIkx|k(5vyG7G+Q#PP0nJQ@kz0l@eb`vqYZHJSCBP9@pdU0>^#a^|0Up}B9SUv-*CfBGPC+nAbrm!sqp z_CEgI3TWOmc~Gqp{Jeuq6sA zP(JhXIch#fPdT0Our-oTp1!f&g=L9sWq~`*=+9Jm?1wv6Qe&3&|G#Yo7B&YkkBJV; zt|)T91_+uJgdrj^>|9!UJ|r~s=g0EX=unt+j=f#J^W{LfNl88*zTFqVzCi^oM)*K{ zadCIx9Z_G!hKEh5=NI3Gw{^go{HBA!k-U~(`0c=39L}ptU0Zj&G=H|kF*XeOzdvBt zo-UJn5#kX^WbU#VVOtV+kwip3|N}hD)K7k|;N{x2txg1_66}Ld!CxAA-U&LV9F^9d zjLcx zJ!!n;#X7!TgqB~ibPwtE1R`U7v|hgMoLa(0ZCg`$#%Y_GM~!6M?G#Z5`en5LrF_AK zAfr}EI}{k7tX7XfM17yQUeQi_!fzvT2htXKiV32>>L${R8Ip((r-{+OBB@&}Uq_Dy zpQ^A8g`5R>ye!k+sglcYUIs?LTRrr#%eC}(XY!qvOcs?+lTo>BqWhaXQ)MleEHXp& zOyY@u$n7SQ9l9o)u6>-cB`|{`96Vx*+tOX{n~+h6>Ry4VD9p#P8URMa&9e5b+_RQrq-@Z<+9wAnMC&B$a3%TKiPeKY_KvP*^w+5%P2sb<>#VNALU<;7 zSY!oo<|M|)50#yVnh>=gjH+t$>%2-2{rr;;A8x=0SuXM7%mxO@?i$^UvEjIo&9tDz zSelR+PyAwpY&(4$)%rG9Qnl$hIilm|&zHF?JVAPb1Tc#DpUkkTFjMCbhW`^xdVS++ zvX4iWrS{yQnR6U1LZ1*F0I|E}WI}5nB;U=CBa4lypbm&CJ&%b1n&V5(x>yT~6AEeG z;7k(UxO9E^F#02~e(JP{LkCy(9Wcb|vD@LIfHPf9-#(T{h4VmzHhc93>?)}j25-{L z@!k16=t5f%@|M-2Jq9^SYc=JZM9L~GJslFdb2C|)<4?3J!^UHm;FHrr6^8}VIIU+G zPt4@4ak8$<{&=LUdMQD`Fe^}t5iQ^B8<3k-+enq5h22JfR9YH7F;>?xg`4p4g%ccY zm1JKb0N#|{N0JL)~9%R zJG)fh<^VR$yXH+_QWH#=j04nQN~9>94JE$$4KVR_qhoVRPKvL4ocDE4nxhPr&fDf- zoDIxra207niO&ny=^2Cs|$q}}yO%6os zv$G!9f(&e93;-}hA2mGUiVj=mt#s#aa@4VE)bzyFP<-JeLGg(*#d5?kIrh=SGTg@Q zOJvN98%vKeq#w`Kc;gjud;9Zyn@4)M)<=HTuJC$f$;su>EKSgxYo2y{ zPV*b@rX2QhI#5;m<}xiL4Lot2w??tsDUu{&9XE^J^Ig&6(KLe`wAe;f*rgIywuIqH z=ZFtkA!l#4GpdSWhl%bht*w{8efxIQAJN6(-xb!Q-TR}5L>HreOe-BOhlhn|B+5E* zuiT}y)o7IopyJv8D_M-094m!ygT|!aN(MPnd_CW`qB%9F<1v#E-h%#l#r`NP7{fsE zywc(CXOT)Cl}0}(j^184Q!i6qQtyBKNv7}jF&#y8IrG;1b%x&vn%x!NvGE;?c*SqqCkuFbBv0~}j$6jNsZnah2ZFx~D z?Y@)Ug0v37HhMk})wno}E;LiVoS>?5 zyv*!+ibkAtN<%eCdOV2NQpw!L25M*(&Bj-XpT=f#oZXzUx`#(eKaXB@=k_PoPr|rT z9$2RUxa$7V1RY(MJgB@_e5P!icS3?V{aV=vNGz_oo$3}-KgQAd30S6ztv%>{pfRcv zh=G?iG^8nApZsIh?u}B1bV)YrRMq*Z@}|=jPLhu++pb)vEz6HcY+gSrY5b6LmRp3z zkapkAmLWB?+0Mx#oqCY;%xjAh0j?n@go3*GHsO6@wVAbpwhZO*s}q)#9MOQ5O<2zt zU6};n1lzVuba2sZU^nbzb_}(Kg}-yrTpm{#-#y@UWDw`$*XI@c=j}Ah$9YFUM7id= z!%j(Pjp5qaDCtg4mc%SJ6?q!MZ=TpF5YugS^`R`Oq1s8p+xBFR>wU2!TCwW>5(23u z{Lx|jjiyx^`g-72*)IB+$L;D;-@bh);V%w_ng-Nl1V)=hPz%)F8T$a?s&Fy3-w|sr zikq}HCFZ5Nz`Nq5lVo_}|D#U&&(YVaQ1H#o0)$87)c)!V`Q0Pwg#rH0&&UCNpw2gSqFF!fqCE&0yF-pN7bZwAl zh$<_AQt=<&6<&S6lJ({7>kb(J4LI=$8+WjfI}rBS@O=y@JWYgsRO@h6hW!x+u|h-j zAfy(gJQIg(lW_=Iuu`|pduLn3nK%4H7IR&u#kZDS&g!|%YwC%c=jqk*wJqQ9c35j| zRQmZ3zt*p)s~Z9t*;JymXCZEL0D+e%dz-$@IZ0&$nZe)@9&c0 zi8Vt)9|U?dz{K|_whM*wfGNj;r(SMWR`HiO6J4orVXfJvse#++q378>UreVb1e7Es zz^>FkJ#0>3C$*}m?XA6>w!c;ts^xnvz0u!apB?YS31FDeXcMN+pR3MqI>mg#x3F=e zeb>U0afgp932gY_Mbc_0OJh*N@B9LvxVF;M@9&&r=crNmI(j@Yp9yHV34kP=yvKcy zK47VGUGzvDvBDg>Uz((|Y$V8YyS6SvHb*U--7z^zIfe+?td(9=Xh307+gL50-G_)xa4?l#4lv5AAWfS6lar*2mAa$Q^BMp!vbrh4{770?8p^6zV`wNUfFk!vLDbmH|`-I|s zG)Dlw=4lC1&x79ep6^m$42#j|J{bS}Dje&d7u7e-dT6jF9_?r-!uaTd{|#YkvHw?jxoIAZ1Gk!J)xIF?wvMB^u_Vgq9r;kV_sf#oNP!w$9G5Jc|_0_O~QUOKc41 z6Zp(L#BHJlKNsv zk}^Q-rh@x7L}swDa4a_D%g&OYl$Zd#B_jLf`!vZR3(IC}#dG zD2(<7hZg}$nzB2#CGW?8`G)9esIkQMb`H8B@(u^S2!Kx*P~9>BQTSV4yxT-2PPDG= znDIk>tfKNP@oKCXJPz~_n^l)69mf-J%@diQ z85)`T#;QQbo+EFlD|fl~L~Qk~HBZkg7?Z=-7DL zU6&=jrhGiff<6(6RGNs@crz0bt4ptI5YsJB%*K1Vr|LE|8P-8p8J4sp7Fa*<@Zj_+m;(I^g7bt)EfmG0IV?E-!pagtn)bwILl4m z5tK-b#pDDz;$G>>1g_6BA#woy3Ca>Y)wY#HFgQU%KWC$QY5fHJ9C&0fLOGhB2lxP#VKLph*}k)J z>X}debI5@YSX2gGUh;lw(p!t&5d8*B#MTr5v=G4rU_iUMd6$>h2CN94yT#Ef8mJz#)G%7AD=`2;Uca!s50IKx^X)$91NZ$}Xc>W6^6YHP9z|pzJ zm1S&r=@j~!g2SHTW`Izprea{)kdD)?`1=Z?EQj|M*wnQ>gGSt}&+{!KNYc8Z?oFYM zwhL?B=}f;45D8sjzj{UiB$?9Mw&iyd0H*(x7pSZ`9C49Ya9@oLj`-{~nUpJgClZdr zJTX)9JSb%uLRKPCwcX&VA_3Y!87W?f!SV$2u&RQcUS1NR>ldXT`s+}C%8;h4d#--8 zTI#5>Islsu+82YoX9rG18kPQY)?N->Q34HJsQg=C0m0u^QH~_+0V#KdJB3K(4B4n- zE~;ZDdTV6(z-Cmy?H)xF06%-lwRe57XevvPiCuUI+*3WW(_2<)1vgsX>J~*0b&d^w zLM`&=XV8W#cAEM9N=bI@Q<6Dauxzjg5V1oyFo=+OYShyr#&!V={Th zh8C0_)9FO$Yd-JlfSjd8ENuK2l>uKZU=gopsV$Gn>Lh0oif>D;8Ik7zG;w zX$#V-y2SNPAXmmvY_g^kmBW27NjSGa=5}Y?_ML!IYe_)|!;i^sp!QE7`-@O;5Q`_Nbk_4~qB38i zBs8ov%OWHoKxGJHd6ggnmJpdP1~Z~lb0m!dfW(}9l=N!a(=#u^XtSyuWU^+QBvXcM zR1ds)a93zg|9dh*xvtDcbs(|{@9|b%qXAWvsH_1N;Px_v^;@~zN{4_1fNUd%=To>`R;1x4SH472IQbcEK0x1%HO3n5qs zM3EA@YoMB!efXEV{i)4jmD}kG>jOP2I&*x_Tm^U4E%Jlek>jU!g_k+{NVP%XtbB`0WX zx9Lu-*lU*(pb>`))Y6ODe=N?@YKdsi>W%C@Ow{9qNv3t=pAc??12ruNfks1~!Y6ap zq|vFM?q)iCT*^8q%Q~1vYKF3rDEV*w7%rbU%u#55egozLiwW@N(ZRltR}asN{$8n% zojfoSgN(!NzBn^YMh?|GTP`K6Z=m^RY+Z1cMPN8AW@t~00-=3L*!X+K6SG%E3H4$8#fu3%(q!>s z6htsUm>Pe)n;>T=$UHg*DUROXW!U(%>i)Il zyneATZ2Hh?Xmbz$`C18wH)-RUR?E+Kh~vi6M+ZId3zGWwUp zI$jR!=G#8u74}4;{?4+npcwXRNMcB%$M@jn@AAu-Xu5ek%K6V`rC$58j{`63`ZgoH zER(~IJ-qwZ4tCq(fJB&1aJ{02Gg_klz^ zXLrVSTQ|yGp(Cm}*`!66& zj4z5%$fPoXkZnO5g~Q&qbUZIy>F4 zwmMl&1*k|qKsvjxMS>#@o={=z+-Zdyo9*{L#DXVg$f{i4{wBr&`>X7py=s6B3btoi zHh=Ecs|xb^IC6Rj)P3nT z{o9JaIGRN}0LQFTf_EQiUVLqSZTu<$C_W$+L0at**}0W?_9><{+-_fYD!r3Rx3SA~ z(GLx2XlU;Cv+?}0OF3bC%IGA&uz!v!UwZW@DaLJ57L&bQ)x$rd)KPU2C1%$|M6jEc zj;i?yi0Jx;zRhv-2WhMwls&!~cp-@X+rqe0Di>N%pt6J9?o#mjmuC52?h|bRS+s3| zS={}^ypomKw*$KFJ^VVgbhOp4^v~}?{68=HP()-THGQL|FX>*vlm}QL)^kvglqx5= zMUp1uf?+lxos2?pnr|h_bZqI-we_SG$=;H?k44B67+lt~6^n9E8Ecc7BIi~GB{+-q zN0q{7x%KY3XBX|e80QmTiSk@8T1BWfS@xC?J;i`W%O5cz6#_^$@bROJd6o+{2eIb+ z^`Y#+g5t-IqrQKtLvurA->8Xj>t75=KD zV($S?SGkxhCUYMy}x`_DZG8hsEyi zrv~mRMwBXYzbQA@gI-7_+q}K+p31cgY^ndctkdG7mA?S6+zj4esH{@o>q8*FQ3DM zJL_Ro{5#Tecnkcq^|iOL=3b7u8Es6BOq1 zme~-8o@5ak!g6a9*0sjm3yI5mgP|2m)ER316yN4q8(&;#q9k}Q&83OtGOv+y~bmo5R0&M%AGv0^(BE~`i z#0G&oo*93xUrNBc9+2tTK|ukDvXTE#-D-CR!8DzOJX|Q|RS4TsM z2^r;z*W)7*fZfftFg{}TpNPh)PT$P=oEv~|x6<%23Te6y8USoCQ2Ft43W`1oQAu{iHX&fHTynlM6>(5)uFQtrY z;&z4cA)TagZ}6JO1AA{+aoLBBjyC|_5O)2Vhao;qx4^@?B0dxu$vj*rnL?OVQlTEQ zd%fu1!Y{XY>-;=+d+grqV`o5`pz)3(Bgda$HeiPZEUy-Yu#~-2Y@yR4keh=}%TTG} zXPsY2If5=CF!^O{KNUe#t<1;k<}50fX4mqsp)f|t4*^|*6vHpKW|r4EwJgwIB#@*H zwq9ru0mN< zlyIraDV(U#W$JHdbrZFBtAU~JI2e3_9C{1?(7)$Dg-sw#_|9R7jPr^gtN_~Ltq~?E zL*be0|6oO`8_Ac(i3mGfat?NZ*{dV}d~JX+@ruN~hB@Lt&4+tO-cPjtjp?H?>{vVt z6SN-lM0Ty&CpO41{{Q19n4To6s7|bWpwiEuKR++(_XlFv2P`|rrL5nph%%Znt?WJb ztvkJKm&4P7DYib_v@InK(gdNWa@m?Z?O-Z9#&TOH0gxf^j0XVH_?0NpM3^CR0-8w= z7Xk|!Ct-9cJCoXa}1A zTh#yw63+t2E0wZ(vYTJfehm4ozas8v{d(r%h;lT~P zX2ngzpE^F=ZK)B_3fYAj5!rDOSg5q3xG5|>_ul5;x70%aO#=UQE#6Oj8??Y$E;gdv ztb;i8G|)p#0tG?^pgoRm8d-#L79>nOa}?KQQFuMm{VQ=dn3UI_R~3r)aoG5H{ZkqW zD?=gaNUWf$=VxZ6r8n#oa?|gV+uc1`)nU1G&W2!GnkkgH0h}D;8!1b59bbR`Ow5JY zVKD-+zykvGT8{#D?~Uf~vq#_0FPyu(s|D`=QYW&ejxe*#~UBT_%JN zqQ*Lk89O34e3f%D31cIpBLgj^4;~~WG{S;(pe1??x8Wb_v3~35c1xn2%_CGAgo1Ow ztLoWvMETQ2>XRqFA;0CcFJAqA|8dTCoYiXy(3hUuLLUKsZ$132?Bd8*zcI82qlAU) z>BWze)HdnrW}NrEw_Is0N8ZliSl~o6Vc6>Tw|NUt1ude4wMySHogTPeUok;}NWISdiXxU;n@NdzbM1Ia%9YG1W#-Nc9ZTM(|9qPmo_Bt+?wM&VFIag(5bnP3PZq&G}*V|K-+4+10mETXnA&%KNvtOxaLcSk*SgPKa-W@kTowSeYJ6Q;4viQ2h|>XF_*m)(%QQnX4zo7?>E z9mKNUU?~!@du<<%eo&!A*v~kOr5df~Q~j=s)7emXeQpYozUz zqS&lK?9s*}51p_kHzq`XY=WnQijIA3Y_$x)wYM170cDsDVDTkjt%@^pL@tIV3Ki+p zQH$^xX7#DTd{UnfjTaO-dwdHM{$f@N5;QEd!7p@vDc~B%V+`RI@D>|C%k9Fqvnm63 zcGe1+%q<`VTiX}k8Lc^uxLdA%@o|X-c!*j1v<+wTr8!8jfCj;|pL9}1L2sw8NJztw z(svh!0?I_fK}g|qxl>5afY!#D2BJCOEZ@fZUBk#-YKt~u8=Yeku?-vPg5C-GOBw_i zOi_FCGDr(-wITLiSVw&K=>ctZ9aQN=1x_|Be zcI@r%7J#}6LE&LF*BV24SfMwDT{M!3^Nygd8vfAJ1CgA)+NG_9Vn)`QFK2WWKix?R ztEzh_`?lPX)pYQQmu!6+#xcf&zan&g9;%nB#fwl8jfa0me++Y1rTl}vdW1xQU|1L^ zny{wKk?5mYj+-F#)wTUVrT|~wpbv2~!oKrndN*SJe-3+wQ2siPwqSRXnyRwUZ;gy0 zke&)}a;oag4vF!s3yVrhv8x z^4F>HO##i_d<2j5+#szP0i4t;)fSWANjEs5nSJ&W<6A^2bmaxQu*ty-49QJz%#zp~ z*|+xkCtqnMv8NKt-w?F)WMC3d8ME=sM5(}K$qnEhMNB~#A+@%nA>os^#U7P2F1iAleY$e zi6>~p>FBPr=gde@xD*PFbIi4aHg5FOz`m4=P@O;hBJB{*YD@fq`Mw8vCe@_N3ED)s zw%hLb0Y#2bkpMv+w$kOUP9kEt2r|D7O?M|+kzqyOT$XL}i3P!}c7RrWE_dg6AK zN%_zW?H8fYNjvUBNUt#!gCNavC;L}6-P?B|z!hn@E#-iw^~m?m716)H4z4d9{Qm3L zXJOxMvv`9O0sb^S!)+lCWpr)zO#R36yh8z}nizLl{TyUx(Q_6l7&FFFmA; zkN(&`CkUZ+Zp_sEyZcY|1TB!`XBdFV4l>Hw?b`-hhwcP#jh9yYiALW!mS4=ICAL0j zV4$Tn%MgYY&v_1IbBgzks?Sv$BrSv0)<=4WT88G0wT>McXbLa=$=S~|n~hw;7h{P; z3L7&;xBe6KiIxb6&XoUvmCPhZ(3y5LlPWj*qmq*0k>2RB(>>dPpRO51^GmUM zJ|1e&Ab3o8hj@h7bG3gJt^qoeiErww}07tyy*mEMIJ=q#<^KRqjM%?IFutfW`&yYrYE&H6R0 zZSrm_d0SeBJIbn@^W(j42*`RI_ljMthT*8Sc2ew>Ddz}j;yA(1MESa_l4fan2g_u# z@)7(SA6xQ@i$%h2CT(h~2ADWwa>m~ttZFCU;zFNAzH+2NqZ$k|-q3{{Z=)P3 z4lhT%t;^rtHr*^ENF$AkRn)$da)r5enQ3|+r`_T(`gKY?Yonudny)_xc(Ar1`RIYg zUq5B9@ltG}b6!&>wQjtyWt|<%v89X^bL`6xM`$Lq*xN}UR1o*~3Rdl9JZTeXWZWSi z2cI>qJ{K@g;e$t!k+vi^&dtZEoap_Bis+ z0%AIo(@^Axq7uTV6XPY;loU5pQGUY46-vjU1jPi)#3*_tzjjFJ36e35W2__^x(IfCN zz%&ea;g~OJIYpQuAUiC4m%If#9qwkGY;tOh5L3t1e~pO>IQS&{Z%Nx@#^w5GcZh-~ zL4inNEXE@l2UL+KEB<}nW@m%)i9P@Xn6n?!!0&8enO^h9TVf*M5Iymv-KMsFsPw8j zLQW<8i|*YJ9|{c(g-QojXILC*VgeAzlg@L_Q+Smu3fSMo`=V8LBf0B|U5 zBQ#SlCQ3;TG*d*-VN$2d;K|5X|_n$)9b22~!%n1QCsQe>&;WU?QfM=UU8qcwJl6^8j zkUR-{ImxKsj0il*&-Q-J-5LU12>5+B2E#Q~{&00~r07T6V2~4tmv6I470&tA z9;>J*56EFeXQKxytfNK`+}QQTU;Pa0ewK0S$3@hJHo6hReE{V=)?&%j=LX|u%^~zR zTAGB4=5Vfka<8GVxx%A)ylLwA z)fC<`(me2Zpr)y1Y@`JM0ny-uzD6@9{AHeq;QimA{Mvt!ow2RYR+wr}$jahN@4ZES zkGbAt*VTjAO*+~>He4G0v#Omixxs%|vGO%GCMP>KhRPMw=BI9ie*5_&Crghi@(Rhr z0slzkt-vGaWOo(-G30nJV-s{GjpV%MIsv3=^IV3|pr4Zb`01`!)wBZh|flTY2|rSTf% z#|LV`ArRWUm6O5yQVj2-Cf#wXXixTxb&lA!b8$O*c*y&>2 zoo>9HnAwU|>q+N^vfY!nlh#NX_Zn9{eF=g?Weu=pQaA=iK&N14H=o!FNg?hC7Wh2% z`amClhBnxWMxAizL@Iaf;zAI{$_uT?plOGFRh zilk?c-qyV$;K`WnNv}J0or|?SWqvm@S-LjmAu&T{fm|8$~9_AYLkTjZ>N0~}RnT#v{)(hY;49R#rG z8udMS9@N5w$r90vMr23WxP|4YHOKuoI$5amFBCtv@SnXT-vvl_fQFiMbv-?VY0Q#;wjV?Xk00L+l=l^X0{R6`R^_2BRo%iRs_PbugS%)19F&-+H3jIe6Wp+b>%dk?C2rpMI2g3Th|F+y3JxYai(s^?g}sA_SX_8OLleZ(nVIrq+Omlcbznz*hg8&WU!ix-w#%?T5EujmcWDD#dE3JNm+YF769 zYlo<*WR+GJbb4IPDrIk{35yC0bdv;Z)%CR9_YO>a0N62vWu9EyP<{In7q6x8J`tWV z$KB^>pldqa;WC!=J>Bzp#-ckw<+W$O0EdI0&GAdz*U93E1tHs!bQ^f6R@dx5=L~U-yXs2&@j12e~lBgMrBuOfp98W43GMuD1ns>A0i=lh-q~=D3hL^15OP=RJ+!8fZ z8DBc|qrXbBH`u~WT8%Nwzv}Y64|hNa*6nc6d+0}i%n+CWUqIg9c28zl>QdrFf=JrS zKIOLa zS61(lc0y4zE$Z8G@Jz)3Az+>rVo^)2K(X$VOZs0AGs>_A`6G+2M&i1l|$MI zIe^#L&*-s_>SOJ$7bAnh!|T#F7`hp4n2_s#o!7`&UdNpvaRa7t>9E0(GigY zg;Z#@6BO_WHjNAO+3q;ZOO*cWFvIC$yv$hTEP4#6J+zZZYKj{z$hA}cRSKXLzry1i zRkZ&6+3{yX3&d#6hYKPH_8ea7>dMd1ALxWRWTbCUerr zM7c$Gq$qsp@R(vL$;0u}Zyj?reH$ddpatnbCB6K8XrcUCw|i4w3fdT)&x_=;dS*x( z*w(08ash6uW-)=X#!$P6no3BUkK$R>A@?=R^2EG7GgQVg=lPdSEGYKU;QnRVC&!eM z1TW3TG$~dK$nL~ZMHH3>v8vXqE4yg2f96FN>6%Qe zXqjf!p1(9eC7#^BTlyS9mw+-N{(c+!lviWxXP2y|gr)j5k2cjbMpWPI4A6<#<^4oy zrgv<&_EVM7u~NYiyn^;GU{H)tx_+%fCg~nd}^n}H0RTtZ+hEqOb z5XskJPj2BwtF~g*ck3}FPl?Im)TaIH{Qid+mKvWw?~AsI8lDFQg7miB`Ekikx&AU~ zRhN0RLa~+e=KOjG9shefzQ|8%|GTjULf4y~ZTtpDV3^+&paxbkb zc3dX?%u5fDfc|)Gl9h=EDIhfvxMMEYcRU-kC!YfPr2@L+!5Sb$xA;rR@!sRx*x{cZ z5fK3vYIS7M4kHkfQKeoc=aEyA<;KSf^o^PMi*l68?oy57y_0-iW9@oS$zzLMQMI>C z)aTCY7T?L-znI^}?e08M*v#BM)YSG*dHLXALm1CO(hKw@s#MY&o?m-F~Qv!FJe&hgLN|F&@-M;LMSoF|?6GR$=AyU(`<*U@As*D(RH zCrR$NNe|1;&r&x=um$0-?;zfJ)n``2hrqj!T6$;5TkW0sA3$q|atuU06D+*jlA%!r zDu{8O`nJ{VN`V=7i9Y6*Vo3O#&a-ivHcq@Q%g8%2pQWD0CXOz?3js~a;iJZ{MmR-= z7&UeB$>ls#7P2W!V~^Q+u;JOl{pTM4&Yg<0tH-`)Ob?sRc7RCo5ceJtJBH(@j;^QAyM{I@`k5qz2!qVkUyq`=O2s=A7= zlr~lfW+KEu>eY_Ki%FT&5E5Iilt#UMVLY4uTW>>7xppBaK6{jKALS8O1Gh^qura@A zhPn3VguS(e)>MRN;~cOnO#y|w?r>$T_U8ULSp>k%o3~?XnX*bOm5%Y?imr}M|3`;j z9t?fFYxTQ3bH9eG7k@4fD3+Mi@G~Y(Gnuzpm@^o_hwD6{unb zc-&N~@^vy_1nDY%yT!u{0uy>97nvGT!?r(~Sy0JzXmT&;Maet#ouOTRDj*Z27}2}Q zFxmxXAY-em$y)6DZQ}IqSV3kk>gI;;*Zw`iR~H5~zd14=>c+PX)g~{Gv5WDrz-!Kw zlq~@=8NnK2~njjms9X}S5g-2b8LO#rFhxA$RVhLlJp5@{onLYYIQ zvV~--Xf#H~5-FilQHi#pgs9At^1VLeC%1Hxa8U^5 zm1LgoV~AD!!H|cxwA?LvUY&4uuf4Dl$EiiSNe!FGkDsvQ2OZ&Vyoeh0BKEDe&c08P zCK>0_D!V+^gqYNrf7{ZXeB5U|PSj`ia~ujVXc?rVBbPk2+HF^0c7jv!jeLmC>rktkCe*kV{=LRcg7EF$Bvyl#Qk+*||z6QeOoh#%KV! z`eNcQLy*lt8H8C)3r-)|*EAsSqlpuFyqBN_g39O%Pua$X*<){(odMsMG|6&6Ly zVqH|k8(SA8U8qJs825DxPnQZ%nF!;{?J2j*ZXKRXZ(@+w|3NJ4cjDcoSDeW@1dq_1 z$jYvhLcFSLlhZTlU(cwQPkWyKtMlm3NZyH=4!f+*XQG-ae!qXcb}8(57CA8f$El<< zF4noZs^T#`2;7oZI2-BQwb3<{RRwd4>;d?V;Uz=ajh-zq{uj2@Did#Ep($9e?MrBtyFRO%ogdZtYRhd0>fS%FPc! zRTR64+ykexB}UNNU4b6r$My9)MLJAFq7Lh|Iw_Hwk?iEY(*@O*M8>CqIp30Fna*fE zVc3EYjD6Lzi7k;BfpE-1$}ZcIqLbmRa%6wkj*Ojqw})dKCfx@H3@>ao-Ykb-Jr^I?ng4bu8+MvX3~WtAoSMwuX{d)yL?PcyQw? zA&cm$yXtb=6oS5hR%u92>b;6HRr{tr+KIaZYZc>j7EQ^Cm3l#{IvA7B8k2}F$E!!x z8ipnrO_GYIb7PvMEl-=YrB*vh)h>??>q!W+A;|nhkDTK4N{o}Nx^->PeGM9zNe%@C z1#RTZ>&hfDVV{g*U0vM@yQI~md_>|irP<@7*`mA9pa?sFr`6=R16@R+fEZd%aEhX~ z195n;qur-I&aTlHIjXZ|OgTXQr1de3hq1N0-y?w&*Q8Y%c?p9U*)`Ql9b06(5_q%? z?AzY)-)z%pzOZIM#h}tbD5TPQOb6}(O)$}27@ENpT+_LnHC68^_nB5##q*rCT49$P zMg0KDA~WbZLA{J9jeE|ecp7A^{iGn#6rEn;mTXB*_gJR^e|F%Q)Ix<{KZRMZu$4ALa7Xu2mlvv{JdqGI=H zXEL}=X|j;m&GykE`zRWsm`q+w&ewTn+WFPA`+b8_A=A&;ChxM@DD$xX!hn*`>_{ac z{2-AWB~TrjMpAWMS9f7MVHrDUv6mk8SD1|0W1VE-4L*OjH3C{^Oj8s)m{MRfK_H0g8t=R%Y!O)duc zCmv{M%*K#fIa|XOta)JkO#VL$=+A3FYe~NG&!0}k$5=DA0oABc6SCI7$t88jA=!IX zCk3rGjHhZO_mw z!a&SW?!fqk{6jqawAXyAY1}N<$@grjWsp-_qHwONR$%*b$FMJ~*&;@a4o;-8n$hx; zz_geqU(cP2=Qceh?3}-j5)9kw-7Fb{I<=$Y ziQ_W5`;~mxngpi>|qV zQIx#s>_NLi%gy%||FYsNjJhqhlkbB*WUzWcNF=EHzOM#gmV*@uE**R)OpL|I08?YN zCz-I_O>=LfIVC@@*(9-u>hJn!ERSjQIAJ>R?pj-2Ow_ucsSX4`mGXX)qv24CnY(TK zEw;uSP1mH(@<{RdtH-xyygwoQ>$W9nU|7noEXB;-7M_e8_ciybx{*Hhq)SK6S664l zXb6h^`_wa)`W;uE*Hq_L2RYlZoNL#8Scg;eyylWP%g3YI_m`8qO($F*s=!8hA^>tq zuBHl(ta3UliuW@_VP5n9ePGoWk}|U$I7ftAVrQT1(;6=^4Q$!j&Th zJs6}J8R8I~>%Az79YBK{WOk_;>)nddwR_BjoRAdu9ZFwn&^lW0C=XPdb~@p5xFM*a zl@!kvX@L2lwpXG(gcE^s6%E{T{(}w={Kqe#!FFs$G*j;0zAr6Q3owFku&^PRy1P3O z_2amg-=tS&$^0L!xdttqW33se4NK^QdiO-YRy$_ouHX6pL3o^89Ln|*n&QOpYK^ra zT`IsA2VINDoBd`h7p6O0Mg9Kt!KHI92jc)+No>db8!IHGK2KsBA4r`K{5mV)seLRYHn=Xs5#Wo{_yFnWg)tU6rBUU&m&WfS;@ zY_OG=g=DA9r~&Jm8otMz5lZedGraM-!82c_Q+Dl;@~Y?x-{K1%uVy|!xxu@+HkV%G zncX_%iA{+m9X}_cn;h3=9SP`QV&~&NnLNmTOS`(g-WFn+Sm)>Ru@tdts$D;uDv^tz zzQP<4f1D26$1OxL8F<1@*sYS3iczm_VG3T(J~#UhMbX**NsbbriE~YqDi~}`pqOW? z?z1!RRgPid-^aon6h}Q};K2Io+COxVQ`R9S7!P988XRtJ;ngx#cGW{U=&DL4oFU0W z+p5N&{q?3?Tf_Exu15Fu-kP}j8gT?&@Gs+x29^2`)rZ&)P{If!a`JEP`rL9J>ROG0 zkU`Oevi-P@!7$P#iM6W@y%KuBVuig`#kjkWWwb?ePo(#DgBt^7P4`PKj`}T(l|gd- zy}|K%w_1i>dU$iSKBd#m?Ur*va~p1$V@9b}R%l~PE^VfDkp`<%`o>r_(1F2Gc<)6} z7ctJUSWpz1lGog{Ix0Q|BA^+xu6v*K-s;&;Wwt97a+1CCdqTn zmVQ%T=CmN;H!z7fwJF)*#de;nF6BW5KmR$$TLN}+Q$6_KeW?a}r>v3%^p%Gu0@3^e zMBvWa*+s(*pMfXZImy>ie7H-5F)u;D^G!k!;3pNr7;T)DUzTEo7iBS`#CvT_WRlwJ zK~9XJQ|70ECdY^hvVj4Gg93;k|ryn~N8MDp#DzI76E4jzf1 zELcI*wk27M@H(sMsLOqyb3Fgja(jD5?Wcho_Vm5HwW3F2Vo?zi$^W2e&3H_LQ%tJ}M);U{wHa34M>O8{olvtmW^TAHihcyj6RcKIDqdr8wLRI+pFInN7=F}#+{YlL)PD5#9`1gx#wpCFk{=22bMwF8z zuL59-F|N2BKr+Fegmp{}e{n>viMdOq?en1LCMlN#m7DsR&RvC=!mx*e8C!qCOw)Q9 zu@)-)5CmTwT!9{-jokcwV5;p1zkp{iXKVN-u;f2ovM+a{NPr=*qTnP6I4(h!jbB+_ zgr7)Pv;6yG)5)h%m64maD;*alY|>nR+Wf*oZ;0QY*@3EofkU$Ucq-czvUzUlCv!GP zh^cYl*Qe%S)vED_uWl(hs9qf$&k07p-%ctGFKtqk!b$-&4i%I%&h+diLTXXm4nC7x>p!C-d|O*xpRPmx|LNzM12Hh)A_$wyI>7 z7}UYB#lzQksSQWUt-$K;rV7c4z(bBXZ2tdS=KJEqj-1{MbXh`<6?nWZN|t!C4hVeM0qjONuk z`zM?iQ5xvP#KsOn`HV^W#(Y+&no(}b>#Qyiyt%Eh+Po4jSk|%6=;uAQhsWgJI{*Bb zMti2H3vltkjox0~+DZJ+i;e-n4kyUJFF@{{OF#L@cC|p{ny;L(U&2KWv%tUt(+)7E zsLi$0E^t41KdkyY1z!UxTJ~X9Yzu-~-68Zyyfoq%2i9%~rxPM?VNRJw=uEhC<9PTzJ)f)bg zQSD_)B!6y5EZ3*mN2Ma*f}z=5rnGrI_$?xHL#{w)3K~C0EDH$ztNTp8MFuD2>KnYG^W@Ox`OV~kqU(Bnm4kpwC4;bp zKtzxKi^}K-+@J(Mg3#}Bil;NkSUxeCXRI*-^W1rHxEQ3i9#2&5Z|doBHdv!!1}Pz? zb(5my7#Gi@P?#br>bcp~Jk7OKoV;6p39PeoK_L0+_O3~@|Iq^YMF1t0$Fax0x`rt! zu^>p+snuk*2bjW&3{?Zfp$sAAUb|G-a)e|50#5K?k6Z&P-JLQr)aXz#KS+Yq19a7w zS!AT2vhZAQMUlQlK!DGq9~PbpF)3_Wy6>Jkr{x46u5>7J=^77hxZ?RrHe@1t?@UdF z=iHCkpWmFk=70IX=-?-`U4X>s)rM7wuPigVDR4(jd*_R%y4O~K2dFz^2bT7J0wP{y zu=|ZozX6zX)k;Mkg+aKlLWUV3Nyps-&FgfQ#$}Ua@9~gm7!8+#)KdrR+R$j>Y?6+W zK`|SmNym&qiY?J@HlgohxW@k))<{s>WtaQx(_#9vl3ow_1w9A8L7xWDhmUXOe)?&^ z;~atwrX&Qk0aupQv|CyB2oIIV^JFE=tGFQaG#ibrV& z>WEls0pGbGG#XAa@7zbPc^0+I`a+s&?wZrvlae1;SCzTX{vO+`r8fO-K+9*U^_@Q( zb7PONxE}Kx53WFALwCGO;|~xH6+;kB*o5isd)hks89OPHZXD+qwH%XONhX&xs`P7q zwC`s7?+Mlhgz?Dj!v|1kz&H>bYgqN9O``odBa9Jxaf&Y#NB(7zL9w+jB$;Q`tqQyB zsH9X_)8LYzq`%lX^O^L={T8tQu@5!g6VbU-`9};J*l;11l$HKpWQB|F$+IYmS!_O8 zVD9V!#vF-<9An(lXY@Ugw~Arw<7V^IRr#?4R-u|5GW|tE^ zh&YX?J1;}8MmxaDF1kbl*KrdggKb5OB|Y&59&%R=!P4P}ft-P(k4j1*|Df;)dmm)y zZ=-#b4f=z6S#Gju02Pj74$E72e5bVROP-#dzP`s8lUblE+o>`e#D6qK1U^FFbVEg! zn2r7EZS=;rt-+rL-4d1d2zy->9n1}xNau(iFUy{*Xq}(^+WH>-KcEK}uoDwDS%T(O zyQO7VX|@z`PI20ELk4GJ&w#={U#JD(hR!L|}ah_}Eba@WO`H0eBPh8A8a$SJ$e;#GOu&F&8 zv||E=-wG}h1CgcJbN&1tDbBl5{sOe0)sec1<)%{V&a744XNr$)zE>6a5`kWBRT~i+fxJOAh;ig{N(` z-*tG5{mG&3xUHDp;gn}bno?>Aw`WBG*T5(AuDrJyZ@}(mZOb@Gxl1O87 zLy|MJq*HACRfpak3SdDeTCoG-JJR_vROrBrC4m|uk^FRrsL0^v{;f^TZH=P|2*ukv zu$H1jceLbVj00=ya~0ySy__Z{An<0#x-|kDyT#VvuMX^3`sU1`!&}Sa;~Qhz8ZDa5 z&*mInu_VVp+`>>LvT6rS-6^(w3AN?NYD1?OF1B|uE$!wB0?2R)dm5lT8ug z+=4EU=!Ez^zuFjn5&4MK;5Fj!L_zRE67m)mbviElY7DQv=x{lh-gKe(ScW-vB)qoD zIwW_mY>Q3LRs(1|u+_vHJ#MYpGA%+klaeq!^HssI%ze_jBv^pdrFctnJ!PL6Shk^R0`#A0`k=?`}CCeJkx0UV!&q93PrWV)z^UNEB>@bpjp) zehIH;W0aNtcidz*l8)Nm_Kz*K-&cG23md-w4mXvkJ;nigLH4*Kf^Z0f{k0I7n3^#k zkb2l?e|o#RdSOwKY+~cvDBYbWqOXcG^X)kJcnwdYj`Y$cwxL_?n>A7z=IsjdYv<%# zpY7Q{+1xcZ*#Fsc{EN@UVV_IGpDVg6rsrlRYinzj2Aa^VbWyJAw#q&hV!irCs8f$W zrwGqd{?6A+V7Rm1MPZ|tlMsDbkJ!#APf5w0{)75-E?t&(F>O9(UCKK{F~vvWJA2pf zT;UBpLrXN85;DcHT7Ez z965c?&R8+KxnDn;^@g)pR= zX{ItlrW+#k5{)?`HlQ}|XWE9gtcc*Jgymu*`UZ=mSg9V;rA0dY$!wb$nszMn-H`Z^ z==$uVU26ZT;bZi#3ANH-D+!y^Yv}McFy4!h&_?E{tJ>=-F0Dz^dc(qyJ1)3a+}9ot=$#x_(1ASUey-;zYzI zzLVx`c(+{ZDn)Jk?C`k&10FtY~8}23A(F9lZ97d z2ac8vC$Z$>_u^rUTEAd*ayq-$7>PvRN?6%J_{ix*oM~!|JlbP1Ht6}~%ytbG%aU_h#Tu5MOEe0-vhw{Fh_uNuM^iB|j;yg= zEJa*JaNCLe_xkh%UVz!XK2op!g-dgpERF4GU~+urRCg~Cdw;aecEeU*zWD2JJ?&Ty zza}PlFiUu+Uuxi)`~F+CDlE0&jOhKWuA4dPaO~MjF3)nl=__Qb@xpa&T6=1#i+|w9 zef}^RtcQae^N@m~5P|VRtBW}qj!AeZB8}x5>!GJ`ptw_P@w%j6pGA9WA4@wE?UbH0 zo)OpwrH+{Q={U9IAwY5Cfh8e4zSsAFD#0}6R;nHw3wHr4&4`J{FU#W~b@#BoY3~s- zkEPbxcp+MqCp}qtrmn>IPi5V!*|Al}wJwYfZna)QrPP6lE|<>rUcNH(+ft*0u!>pb zuEQTp`5Zv`tPhYxiYC6->8X#hMfmW07P6s@_5wvS=>WfUGOw}9a;r@Ye7u z+!X;<4?v)7-9L5@o7TaV%+5gAgadvr^VJ`O3OJ#jL;jw`GT}8iTJ@=C!=iF`C=n}8 z;bl`yZXC5wW5k0Ru9y(D%?%`SVrC~mcxWMF#xcYcyVDv)K2|uz(+mzwk&P)yX;)!nN~9IW;*aNo-xjO!Yl z05#Ghfh7{x*9lnXD4I3QIA{&Jo@wi?G1JehO0i$u(J3by<0_X|HFGbzYODslkenRI zy1@&@s+|vAmEii2Lx9~5y%&1YTty#u(n4(80?5m)iDheN%4KiS{_hz?N&9vQ$GThg zv*J`SE@AYvqIsbCVN8Xz)V?(^w>?+$AZk4SX-;iUj|fg)@1OP~rz>*tSI!NMt=d+l zZyOAMJsx5L%?LBZq0RI6a-`26M>(^g7yG%(oX$t_Q)teK-YhG!y>BA zGC_rGJM;VY5_c!I?r+c-JUtXU)9;=?-9OTB!w=Rqb(#zP1H-QhqeQF^%T6>nJgM0TsK5cz$_^GZp)pZWSGUYCNBMiUTVNYX zrJ+-6K9J=wtL^u+HN2j`?wzLm>8BTKL++H%_I7p4<1Y6mH#e`ckIq}GfjXkyr4HTg zY0tuA8JlbK(C5xMrXzOn{kl?X*#NfO%hevs5t#7W&sLr&jdd!mYy7TjcSTh^h&=lB zi*#lN!8A1B5gyqAEg1)qC72Y z!pdXy&fKIJe)t~f{2(wsi=+S@w!M@Qe!9n5$%U(kj;t`U*RU^Lq;CzWY3Dv`GQhU% zPhse?Z&B5%;y1r7<+o{*gtyx@qc<@*b{TyZvEdd2gMXF8p8h6%&T_z|XLFp^pYQwQ z7RKwlhCNje-+3%}x)$MX9ZjV|N$Q$Y11LO$C-^roL&1qW=5qe-f3mn`9gaODVNH!6 zTg}V%Q2?LYRe{ie$*tLW1YHy1rGJ|t_Nj+R~bbVUVG7I%Rc zEAE+}n}JA72@XhX>&m!?hGLsWSq&bNGk`?LSPpg9lgiw}GEhOFK0Gxe*i zbG{@5UJh`(jEpLKPJGjPL1bYbtwKX0;0_ZS6Zm+jV>p#bA`Zp`RH*7%Jk7<1S-5SY zR?#L-XLV2yKR&P*m#>l8@l^ZARA}5l3AZdd(y*D?X-pjDju72n2ycz*uJa-xf9P}u zS>yI=9#R)vH&a^@+K!62d2M&rRqGO!iuPNS?l<*hpwM5{F*4Px`<(h?89-cx#>;)-+T&NpEgG~ZP9tRZr|Ir zRy^gGRowmrKAi*+tVZ3ovk#JPI=33?--}>fOcx^v zz0qAqgv9sQ=<3^n#y1NgeF|Olo96uxI$@f>wg;jf(hGY}u+5oreBlbl#Bk9SXQ5qf zZ+nJGx+K*O!T6x4^x2&nQkX#-$6v2~M!WefUJOlqYJgFe=}64@iCR`8{j(i|uE`Hl z&nPwxPmHY!fgNg{=v?2}-u=&9!m=Dw1cY^Uh3K=(s4-U2VLNjj+CSPPJvh}^Pi+49 z0iMn;#~-;%nYMZ4szTLu9dlX8XM8V~xWMNcTRJ?OA8_P$-O(d{{xE4>c?)X8BeFP> zK$n=vhA-FQ>}DZ}$Xnf3Ie~%QXS|`({POxLG3Gcv-+i2Ddmzj0KC>D|A%PE#KF({Za0yAiWbqg=6bVl^FIc64P0_Gbx9oZpeQ;J z+j7)*?&TcYm_-54TavO2kj#PI`Iu9J3|}NXIGd53z(C1(u`YRq4wMX7^?IuFT;+AN zvX?|S(OJ&t;VAx>Abc}FY*G6zyAq|JUzhiXxnS2!GuP`e<`wqo-P3mN3qI$(U-=Hq zU!9p8MnesmI=jX$=TJyzplI3KqXq@l zzhlX^S>h$KOMy~1y&JdAQz*oOC6c0ScZYdy4bQ{VIiDa z{9~S@k~R%3J-Xn1B$)eg=}E^D9bU?mc2P9~H!4bER~YE5X5x(M<~RSbP{*Bo+?P!j zG1FG8Y*OvL+*|GNU{liX8s7(hhmCvW`OOYCi7t#*^oBgt_(N|Bw>o5YPj$%~MM|)< zZy?1mtA@G`VWCv%%N~N78kv3hl1Z5x9a=f^GJtnGzebNJiGFbFL`es&HQ(vy~`Vxcp*z#oKqVdCJO612x_4d1q23;PrGOk*0I?d<>uuu8G%Ig{TGCqR`p^FLyW9r$+; zTTx&R_ZyE8KtF8ZKe@uFSYfuCwYgCK8(Wv z^q^g~P-XUD&#cc`=pHOKU06j`X*$;G!t};cFGtU9gZiDX6UJ7H+Nfov=CnQYPX0{2RsEEz zv@Ki7#Juys+ApjRo~}8xrUmScIs_?;~~$#(e;hWXa(%o9NnSZ@1!v;Msj;PnFw1d+s!( zyK+V1cH5fj2Uy9-Q`1M!H*7W-|Fr+r%xpA5OP778MsdNb)H~O#W72y(r1?z$XJ}+r zCel_3tkDb8>5^1*9^=Mq9Kk98Nhc8|+##eql-&;~YQ^v17UGW&wY9ciUzu!@g=Y8q zNn-GUR$3%jk1R57WLKyZiRoxI^ly*I`4NpHHsg_vdvM)~+q7~q9X=?IDC*FHc!2+3 zz9A7HGC%wcvh}(PQ+<1jo_#U+IhnWrp~f`Kbu~$WJ>$19*RX%#JVxY)lhLdY|DaKa zh1<$`c{%2MiMNU9=%2B`s`CG0$d(A@<%s=c%*xQ6Q9|c7eZ;^%!6MlEfz-$NC6PA5 zM$3Z}s{b-bUKCo+=cT}r%dET=xgUQb2paF7sd4xE!?aY6sC@D*6B8UBOw=$;%NUZ2 z3agXqw+Ee0HQFRG*l{_&E~_=y?{Zo(*=CFtZT74Un^Yh6%I}o#l)IUmerCbxl6&rj znb&h1lfy@k9f`pK9lxNu6s+s?^u*|>RnD>7*xk09!v-5(6Lq=Ydn%n=%Cem`K-F#P zA~3QrfxGmr(?=2yko%Y+DYSD>&mFu!5}Mj=th-jzTN^F1AECm7?(whKvvvi|j)iKx z{V_S_H%6DXHdg=P(R@eY{l#pM;o0_>@2C#=oCdyQj~BVIf*gQDfiNavZ=N3IW`Hqm zj-FD%=UKtd)gsKe#hgxvUed1}Xey7df3l92%(r%$H^g?*PefU;Sw3RD8artj?$dq5 zD!{$QU;OWC&uvW)v)5Ml4Mayf@=v^XsjcihN){Q#`OW2N`OW|EoQSzAR2>?y>DpBR z2U2539}MIqzsXAMI{~j8oM5a6YypcH5(b?OgYc6E>w`Xt1(}F1!atWzJTM@5kIzO% z!#SX#?0T`}UG39WruyK2k0pBUa`$dkSe;s#4mSym*t-`W<1I5fU0ht8Q+zCwsACqe z)z}x&^7Dm(45C4V8%Z7=qx|gekao~06XA1#VGPmcqWJa={7(iC5!IR>IKJ?Ql-v_} zC3B?4`Tl-6HOCGMXT=;!I*%XkfU_ALcV#`JGJx;6FzHPF|Af%eB?P^vFyr)LErQMu z&R`)m|e_|Z6LzHo;#xXbA60lvRE&)C(Z3f6@s3-4EMs5uww z`J_em+vnC%pKPCj`Qkj$_L8EPDxJ@i2gV&$k3Ic_;_ue2>>AJFL$}KgEe+Ublwh<$ zfV(s*w`|S3H34jF-^8}~N(wtUi76h%n;WctdM>G+PfXDP?TmFBL$z~3W~#||o;Asa z^m2u;aOZn_m}mAqYp#CkZKOD;q3}sx>s};&S&m)Opmh51JI`}%wfd#fV(wRkwfBne zToMe`3W=0lMyL{vmh)|O6u$MSofQR1os;yj<i8-=gA{H*IgwX5&GzHhvj1oSh6=G7N&Ip9 zYCIVVR&c1_u{raPV(9H&rovGn%1Dehd48ns-a{}E^tkTjC>M=(LA)Wr=g1%}sYSYo zxQy0Sd3wGiswRkW*XQ=(21EM275zt4Omd0$FPwk@B7w&_&DfF2k{7Ad26?h z(Q-G|m(1c<_K1kBlfRvK`b36QM&nqe!dGiq`~#BeUT~OhM@)@s-~jo! z>7ONB^t0wyGc-yOk=;Icep{rht;6Jq6B@sWK}9~}Imibp-~%`ZDIHL{()b&=E6Wh|^p!OYPI-L}=G;z*IDyyV2MzRkL< zUO@Wq2ZIi^(qM)zK2vQqQAl)6>Kkbos9Sq!tao$C{Aje){!CZ<70b9$rDZ2BKD4JJu;y4`8Q&NRnc{*1nM9O5M5zLEwbxKuMU&Ri zUadd%cG;_=15V1FzsE1QeFT^fS zcwtdkwYh{SX!Mt^0pawjAiJuXFa(fxd+>c-?~zL;MVRSZHCb9BkQaKdyj9vuN_Rqi z1(NDp{TOmQvSq_9oNOU&ejvGjrCTG8&!`M$6DQOG9tw~{0g#dH5Z?o}51-CqRAIM) zs~dr<=yXdeZeNbYZnkZ}2Ey7);+K9Dxwr1aOC)Oc#R*%^o{QDk|7>R3F0Uj%a^QvA zD zv;GBTC;X~Gcm)mHn1J_paQgJrK^^mF1D6%i(Qs;gX6SWTRk!^MPAO6b7$YGB!3Wi* ztiVMiB+~sKXd|iM*^#MJLRCT<21y0Z^#;a`M-?R0iX9Tkde5ITVybF|(t>VV(g6-E zO<^3>j9-`6s>{MSK68}`)am_!o^<7eUq&Ka% zRB&>xmu1!b;%D}5FB2UqbiPMRf8BNRKLwW%99~gc`RUMdY2&X3Ej@u0?Ik4e@IU^i zGq~?X?Uz6#gF+}wk_O32_534pE6XOF3N1E&!ti4vu~fu*AOzT^erytmDuVVj5`P(zQ6}h@9ebY?2_jJrby$>dDyp%O`hjqTfOoyJYWgark8rFbY28RO3h8Z)Sg! zR7Jw5Dq246^}3It@$aatlu*XmEls2rO0={{T3; z?ywJ%i%S)<+;G96GA;Ql-%ERk4@1yZb9u%T23p0U^04 z4Ggw=7I)mPs@PKQD6ex!ELC^s?scW_B2_uh#=kvTYM^9;J1N@umjSv7r(;2Lu15+u zeCR4y3d#p&n z>5qwL)!s`|h>F`4?;zX-xXMHhpe3)SPJi}k;G`giG6nbuFiUcH*b6NxtbQ9&l*4I( zL`ouy0+9R!8Op++`I+I)LN9FmM&KdS4aSuJmENf^P-KGAM0ERw-(={E*m~nveMeLO z!t4|^b^uq186tw+r0au?0{a_ecS~d0Q@;vEw)q||CW>DaHX%%&-P=Gsu;^GvixQ4H z)>%lo=pA|nBjUxJANi26$YjVrH%(fB)C1t=)?_WQk;HHnf9!)m|J$759N-^rRXh%- zMG;2R#W4fDb}3fBCtR)n^X) z$lag{xaA(f?7-7h;_l+bQ~t-`U8uIESgaNSG@^w-|)?!W2D z)@6G*{J(GcA}OrkY`^P|Kg!lmYS850;?xF&eja{PhvUam)Gqhma!kjh@7m2tTuBuh z@Vv>CNGPd|Jdy^T`VlrAK3QA}eQ`8)T&!Wqi7L-;tfihAZz(S5x|*-zbM!~gjl?xK z)|5wC22U2bJ&{}{7Ig35jx1C=SipD%rDTvK#r=x&otC7#HPO#&PVW=58BzH6c^N?W zl`H`Su$KWjbKm&OhMMFa$fE8x*xzK*V+#Ii?#N{7QIYx4A0vJX)0x;wd*hoYL7C^kMJp$Ainjk*UMzW}?6lcx^>qibuU*v01m|nCNtyLHeK0`f#EP@CA$Z~0o}h{|N0jld)>Kwl9nd>0ch3>?KE9ZT zEF8w(V{8Y(!6a7njDv|yA7rx{GI{Z>TerH;V4Er=_u^2#yZxVXNM*NiMh+HLjFFXT zsEB-~fI9tVN1p7(>QtABhM#}c>_Azx<<2cSeGbyUni_+Q)g0W{^!OO4Df0XJ*`s7T zD1fyO+w+Z?JNSc5F&rQ0d~C;`g{Q9_!V*A+_l*^F9+62;6J|2l^d!r6QEL3MrE1@^ zW-AsJvaM_!*RA-QP0W1-^`x`MLEE0QaVFzTo1+HhLj5bc0zc?=Us-O#ugz{MM>%PH zSzr4VTWEk8|FL`E98p953V+vYN`5lsX@Rg?ML3($WvnDhyHa~~bcff$Cg^)3*?;sk zr61gUtO#2t&`%<+)iX2>Lx22R#Wsp@9g2|6aZ;*!ks+hKiK-i-8E078rSdt>P-?%| zjGC+BQkeZlm(lY+b)NT~xiMTcH$gTjwqtN+&eu!jh=|LxOjnm@t}dPj3+FVW4RUi# z&1hGyS){RC-g;_>u7rQ$m&WBC{eop2PoiQ9ETgIHrb%fm3e1K}u6oEwi!IMQ+y8#3 z;@W$&lG-N0CkGw9LgWiBPMx~__39n9pJRd@gKVc7_h_@fUFHzu#$qZ)HS6AKhSl&) zGGD^EbRR3EnnmCn`xvgZu}Wl-iDyCRm08EOOzVc}3i6c1K7vQSXW!e7(OXP^WC>3)8bfh0gM&u?o>W`knkem zg)B3_g8S>mvwN6jHm)#=Dq{NaWuxvJ(;V$XsYN@wrDZZr4off}VRqy{mMqCU8lI-d zLOB@`ploCHq1@yq6W)=`DpNTRkz(^UIQK~KGT+G;0cFRa#jM?AYkXkwIqcJhk^mfJ|&NI3ozpeP( z+40)!Xe^x=^!i+IsdpOdHs{@11~Xy4H}7`#ES#h+6_*rXhR!yx)g@9w!{QyyBF#V1 z+h{bNpa1VAhTH2i?#TOWv9RrTSz&XAJ;f{{g8Mh?c0Lm-Gxd-yOUzrrjtn{T!1N){ z{)lw>J(-OU-wI}AbY$c@3=YZf@k;Ngd15TgyyC~}t8ckBf0s6k2>6t$A9YC8%#7b0 zf1|Wfa)l9dgc*OlJXhGp_%wgYk-(2jC@1yau;Vw9USYZnB~asqouLXRK~xDr>6N2 zd0IqX``^d(TlqD8A1-0%V-Zg#0+I?koLxQB$q&LrNTbLvkrl*&A7Pf!Z z>~xAO`+A|IbLXaggPs?E6dv>sq33h3`opmF#VtxmUXPL7Nb0Je3Zto=)Qx!s5D&G|AQX8spMuRwJC1e7BgoA z4_Bio(__h_Y7vX03M|=U{3%aO&ApGB*`~>eaivp=Fyj%Bns#1~53h@a3jJqH5uZ}E zCB;TwzX;g!Ru{TO}dV;|gIf&tbEJSV2DLTPV8@fi+!UTk^zVmivvy(KXM~ zm~!6P9sVYWg{QnCy$#-Lj`#d_Ts=wua5B%^x7crH;unW&$#`&{OQ-kz&p#LZE?sIF z^os8A^gDNM=I3ulrm_?8oq~RH|M%NuT!N8nsDqIG*95X z>KgsE!l?dP+EanSy%(+|-4v&s+i>w3Oi6S?(VgJ-GDap87F7rfHv{?3kLY zvyW?KHxKRCTEOH<>t?Ol1>fIQA;)8fheGW4nk2k%GTv5j?c?i@cTeaii{XtiqA$sb z2cm@hHoaG9N?_^8m`E@;Gxtx&72-O+m;cor8!Ai6>^$ocHjY=%^X{8{xG63OGex`d!Zm(M`wa znmXq?IxkIq-TS4lG1q!Z>^&B*fNsPtRV^cV=NoC)(kM2VuQ$~8QqR&`$p{HytC&Q5 z*s1p;ZCUX>u5zao8QLaF9zf8gk*F%o70=>`CV`RJVKXzi=X!7S3^?08Nr+N^U>|>h@S(^W&%z9u71-Jc?(JK*{pO0f`F_WePUpOcl#V4S{vX2G z-d(c|vPwy_Z8hD*#VeC4kZbLcH=z=u*%3FaS=Hwf^r^5WJAH6$pu_LH=U8xWUg!CN z>6)6RY28<&q6umO{~&-cg?mBkZOz zLC+_-@&3Fz@?LFt0d8&$Ugl z=9#(N=Ij+x-%(a?xV@E^#e;Wu!^D$%-bO>#juht*mlZ!2@ma3ZN6I75g_(L@&ul~> z2U*v=O+-&kKt9}KgVhFy+a4PZq|1z|MntUge|qZHUPRxAG#P$eeSMkuQGtlf_9?b~ z0o3kuua+9+hXzpDX-rZ6x1UPvRE(4{jbBu8XNWbq(p5-!fF0@>Lq2#%nAb2tY0+*q@tnI4RBQOutJ` zVN=?N@(+L&)Hk2*24t?6<}7ig-p3~jNS3X7Bg2(>)=H1XWAcS8eE5GL`w+x2=j+E< zR0J%X+W=9ob0kN{Tz^wK1S3CSvavm`&Mc?ZDbg0+L{RM2Lf_OuPNEMEE-^qIpqIUn zEfri(HA{s6JB{W>0-@RGiwieq<*4@yn8UOW1kV!7<%nnD+3Wc({u@umQ%wB9seHwHB2(zZp5#2WlEV%m2 zv}>D_S!BW<=yYGv;@B@HK+Ss&@TI|r!5aO}7pC9gSCjK))PvjP~_VD6AarS*^ueoh zLr7gm20OidFTHGAv-AeSe5!=}vZtZXQ%$>fT-!^N+KN8TEsMN0{K+YtP+w#IJ9gkXamewkaV80k_QeL_>%5?X_3y9Wza3a|)RajvH~X ze)O1pK9_Tc_X_t(@?BrB(0)nKe*JS$4Hh#V*DqD}?*}{{-8VHyOvwJw+lJ)Uou{k& zGXBgCTZDrT_Y`do>yvclzltehG4=dW!~))LS9XYT1uO)A-6l^-l@aN<1eD*aInd#7 z+i6%`)Yo(N6EDd6&016M!N=Ycy>v!7QZdn{8{nC7K5u@wx9^P}`}Laege2R;G$u`n zjpl|pwuq<{pY4|k^R6$mu#`HbWo(8|dD56*oD+vvCZ*{;hNW^t-(Rv-IE|S4>f16n zNsI?awYRSg$xLeKOTf<$K~Gc{r?n8KH66C_=lH?^84+{6G^165Vgq?~`=+YL4-Jzk zgjmt19_lWh^t&Gr@gafbFmszV&$+`&X2R!g*LR@8nZo4vC~0T;&5cj`p>Z1`PrF@j z{Tm^b9DVv=E*)V){#fyaa|m_G%R|fen%W+YO#8q_IRMz^B4z&mO~Q*aR%h6!PT}x} zaRa)t>8^Yg^C1CXp;LzIW5-hfQX~x;3JkWCGz#hu-8bPuxTdKx1jYMqT=9z~UQQY% znKnBu1@{@E4km@vQidUz*|xVTYeOa{Cy_#m3JWbGyMLW1p*uxVtZxq)vfP$W<3{f# z!Tc#r*2GK#pU9|E@Q!9@XYBB>!q8-N!RPOeU#Cw_P7IDK$8~Cy6ywVFViQ4O`XCfA zFwr|m&vW6ukv=#+{uRO7Qb{_J?a0l5MB{zjqfF~;xY$$v+Ma67vm%Ec^!|0G_hmD{ zzsBYvrFTyf#Pnr&Z$F+$;OF8sE!}&dZo)?EY>za5+^^bdKr!~2#{4=UuNU+%5b)n$cPWaR&RzMzc9{^ zAMNHj9ND96DyPD1=>OpwrATgh+~UQHE>n&ed7Hj-Wn0I!<>%P6hg$6Zjxx2SLxq~f z>hs^qR%y+5b7;*p-GH%5tNmnh_BP{C4zupY4zmg%*_kjz;l|wes~jyNC8%DkC>K%J zB~ko8xJDpkavi_12!$34663$8Q=6ZB*dy<-4aAJOW4okS5H|(+9h3S0>~m7uhcJrh zIWcpIhQ6PlpPyzNS^uW7HeHW>{ueg4kWG$$)1UpkCp)wj&^;yYw3=~+>Ol|4^9WG> z{@>FH(LwTTe&8BY%djVkEd+FEf8(LE{B@5{#fBc}in!C4oxRGK8V||Udx{hMm zDpIc}7GiZWcEFCD#}Deu7@1YQFf}8eGzBPNL^wi+6b8uPOwOTZ{E{nlkqbfv0yaN- zVSE{1T(7$dL6+&DzPAYIa$~c@@}ykGt^B%EGD#ohMLdh4zXcu}p$uqDZEe&vZX@7x zm%Q|}Apc(i2h=O5wWqVZW&UnfgChv9wbTT;CJXC^OMomlqO5rH|vH*|cbe$5h-uj`J<)m@g31)=Tj!jEGtnv{! z(egy}6n)~yUTdDZviU1*9f$mvC(t>zr}k>*WgHM@mbz_awC-u7E%ote0R^dokvvki zNgTNBbGc69WJD0Pd*}DNC?g<4M$)s(MuYu01+m~gQM=X}v zD8=Ahkdwr?Ol~^TR?>c5`=#BzL+r>eW{=7I%048Ui|^i@@vE)eJnTFFHCYQQ3$+%$ zJPFalmfw?+T|aVHY~%XEh@q2GKxKx()c&3P@r9R%%=1Hay3bKbE@vE47G?!zDpQ2t z4a%%&stiu31T!wx{YWk_HXTRJVCd|l86qE(2A91d&q7rDIdo?woE0pc!Wt4p$f_4i z$qjuPFdsyvG&ap6TQ%x82ZkTC*nHl?MCU7@QlGKt&Z7K$X2WEJwXf%7(u*eNdBcG4 zO_TIX`#jR929ZPaa0Eri)^DbF((kvj-bDn&O}nTtG0j~tsmuNfC6OID!M zV(NPTxgi>B>v|PeMS@BB&k?O)k6;w;+QK#w1SUO4He>&~FQrJ13*^h;R3KI)`Hl=0 z)Lf}l|DvS~DvSJ6D1{MISSVlfj1m2qb2vd4fYmWQc28%omlV!j{|i|}@w7&Oj1ox7 zyFq_|<~msd>smPT4Z0)^Jxil#d!=h5Q8BGZ!S*#u)r&2*#)Wj3y>W0mElStibm?>b zCwf7L>*s>)MVBs4@eXVF%?u)t9^^%CZ}RnOapgV8IIH7LO)kWrAetjbz|7P*BJrkR z_kn8{m~{SJ(aUS=kcm4ju)@ts$ePK~Aj)EYvdI&Tzn_2T-4NIo*7nd$GUzeOu9>@Y zr9++`A@Uk=gXV>ngDy)Rvj_p&4Vl+nauNQ(v4h=|Ct-w{eC3mgFZABrBTqts+0lS% zDt7$KCp@_~31?D+eGF}zI>^n{4yW2Cj!Hb(j3a_WP(5{BJt-GUbfYHd`G?@8XxLlAqSl(ls%wlkMqaKpIIg-C9Db_8pFQE z?kbDXX1ePfp`i*fqO{6yWEH&m^ITnAfY!l?6s-dlP=*R!G6H6!-#yeMmRy_q_l2{k_kla|#`M z-`{nwb**b%Yprv00J8}XKr@^70mcUi^(XNnAV7`=8!HQ9Skf58u@am8<6dX@mD=pU znzTjSe+XHc*eYk|lvSHZPDcl|Ri04abHW>T3bA%k8#lWSL5ztE5mXFri6Pb*879<) ztO4wG(v;Zt{7dJJo`YAKp1T*iJ*tLl9Ztw`eLUHBqbP~3q4s{S9ec0cws%-JG5MLS zVBBj4s^c4?31!X zOyRb`(niW|@RVDBrzz35aQ8d_1)JQaAv%7%s5Ls`tg6aaY*L@x6ihw8B$nph@D?2S!*Nj4|0dy^+Gt9d4{KhB#u)a_t)3<7I_ z6HZb(zO8{(!^0ZTeJ<6QE8PR1E`2TXad&?3jsHU z$H#)FL;l~Avlz+U{g#PWD<)qNV|_GmW}p=He*AHTbJ3nBbN(BiddO6doj&}vf5UH- zy2ilHX0Dj{IBObnoXPf+Em95axtDjbIr&{rNe*||I)?Z(%^7&uGyJeLu9=0|lmBg^ zGz${FsUP{WUj9%1boRTz9|*ul4t7EG0$1?l3SB(W@q91%GYn>q*&1vt`R%V<3xz`D zvPcz}!MnUfv3s3Dy$dLWbzIm<4$Q%BZ^v{Z0CwB2ZpEOS>7d7&4QR$RLpq{zAzlzY zF#dXppE8>>rW!uFg&lja>RoKncpc|w|FQ;Gq)5YWhQA#t3O!Op;?g)9tM2#Na_)$X zS3Rc_CQ(|?mY;&SR}&bG0XPNAEgMdq5i!&zLFuDfZS zypXMZnPKAr)90Wr%~IOZeWHdcnA3kaJwJchSYnNyL%LUy`9d7p>4&KXz-r_|!>K0v zW!<)ToXFj%PB80Magyn;5j0_pRRX%D%o!SDg9% z^;Sbaxb%RbFj391@1W&Vj;ZBuN#N?duE86}_1~7tWUiI60ANiA>1xScSjs@AOBi$O zlPdq@`kBQkN(^y8R-m@IRO9Nu&jZ*ki$Z?jWWC4|HaTZ;^S&+hPEo8@j#p@^rzEi|{}opL>%QjreJDeI`lz#L zgg6);yKOm>=mQ-a7{Re`2-&(b*(j6jo5c+Mv4rxmHZpY_<1_rjoD4Qp;#O(2D&sZCBo?&DuvRwbZ@tQY;DFSo#c&=3f(NEamuc}MP|Z-^ z*`?g#ZlC5F1;$@Q$p$|E5D!vc@Q#shxv2oL#KnGpoki;kLWC0{nVK$7*VTi1RRwe}@Ao->c>Kt}r{!l`!=3h1{*!O+BmBcl1F2#dvw!(E>}ac;f}j2B6i~>v zOuv+##gcByaLP_+#W-C2!OxsJyI@|;h!$Xn7~+F?7R!J(et~W(m32BbvBd9k>gI^D zm#wW$4_B;Vhp&0?pfy@_>k|o`^F!L+dxl`Lcg~+x)(BiL+v~DP@Q!|kIZNopw?G3_ zIt=Jvj4IC0(~ejKi)HQL27emYbyc)v4@aQlFL9Hx+>i(*?zliuBNgZEb5MSnE0FF> z9C6h5lK#U?QUOEVNh;Xv=qhvCYOVQ&^ImY3w7tI(UL|!-`R9<&@9xm#i64unN5UfZ zP4wa4E%yf0{;GZPrupvK*Hx+&R!l+EE81DCUmiw*LRr~*>6W+ad+x{MM%*z6IfF-r z-x;g&VmF-RE45IqOn;DC<*BbsEpZCnQC@ww-@@&pj3kX4yVK?tdv}KefH~ zZ*?iE97gXB;Rli@s*_J+CoF0M!vSPC#p6ehz!9(?wH$B8H?UpeSfnN}0|ew0EME6| zo*EnKCu^k0L>IDL8RK0vfAs`R^)$J6z4FjVj;I=z_zS_;Iz}Cy{0~G1JEVGLLo@Oj zMFL_yxDhp|FWE-7l~DnpeiSnCZT`PpD}Y%IAEH+2G81k&nqftaph>Jl$4T51l&+DEo!Y-jLTwoI=MvPr39PT4TmOJ_vt5zr;wl1Q@Eoc+qkAqKCL(#)m!qik@zAd)267Pq%3oOeC^EQO9QN^2ogf6I z!D~BF@hp4#(s@|dAzcYc7<_XEaOzA}swE$E`0GMZVXa%e4}2qC`lLKGpPL$UCVMBI zRwYkS6X3M5-5KPNJcHS}Rz(*V`H zYH>(INq&NDt-r_uz!g&+05FvpuYuWwy>iK`=4>ZL)=sS#`PL8G;78~%c5H2e1M}Q^ zWdke-aAb1=O6BfP-`;Dyi+5Tr==Nz&?#%g-oIm1HyDUIzV9hrR;0^|V@c|}=GI$mt z$`MPn5XW<#sY^%V(=g({(@>24G?%(Ax~2wv)nc(AgRj?1#vuprDrGG_`2L^Bk0mJ$ zRi*!sAluwDl7s3FSEhm5q-=V~6Gf^X4F2W<{Jh;uZdm$V9?p&cW;?a@^XW1hk3yeP zyQKEM_L3IO@<+c#!J?v~H8$MFDQFwW^BTuGDZdjy6|hpy;TDV!Q!`yh4jK9xX{AV8-XmnimsktXCq8XP*K-2^@BUi;3`~^m32?@pyz0IXlv)8 zqSm!))Q`7(xbL3k;+L>kHTS^x`Jyvd@r96X#k8?x;%0hG^2zwe0S#LoZ+A&|unDXd zZWRa$3i7EMo#ta-rtQ%`y2FIE?O5#vx6$GEor4YPR8a?u)TL{$#N~aHVelV9d?EHa=l-pdc(;x>SrcCeIBcV3jc15!bT7nWOWY{-*Evz;x_+`muZKb6Xc351#PD&=^UmbTUp z?`6=rPA(zqq{uAU=^w_^Gs!=guApwXx0}ISOLKT3 z^j%vlpc%kgOI-b5XwRV9>R*x$Yv>7yjDg{Mkjit-oxg%=hx2ch*?IVEe@YO zH+A>Eo_OBLUKZhP7claxC3=^uy5FgvM@PTBdX4Q2h-944gRfiq$)Cs$`;8657J_uD z<-P29r>$!%pyKG?$=Mh4Ea<*S&c1BnC0ybrOVrQpE8w^^NJkn_T94E^I*Jb{A6c?B zi!S&z-?ON;QD1Sy!$t)4%aoC`H7Tp}0*!c=K5@(7d6Xq#aiPY9@sNu^qDWzy0IUny z=1R}Sc9e@kc>IXcaMIL|Pa?NFxP3eeBb2|YwnRed`%*3Cvicxq&E0~bCCs;!juRA^ z4OLL_yxGy!DOxhJN5jK1)0wO_bno`fZ|i0y?<=3|pH+UQ=TT9+-_!?4qE7Y6HobC+ z{7R{zDws~~r~f(_zxf1oNy~pNr(5)+eb}9=nIcU8V|Q8>0?bsF&xINtXkWC&rq<&X zcW8TW?Bbc1i!LZexT%#>5?dnTUY@=a99PMm%d5S22IKhCm1J3)f-5g3W}>^ zWbz=w`}8l4Yrr^GO_aCuf+`J*x0@KMLZws3J4e__^a&QF4n3WN zuCTMSv#LYCRW)Ct5qR3t#F+RD-wzfW*Z|zU{g?ngvs|oHe$Gb|+=)$x_NViFsM5nu zfxX`_mLn-!d{8_aAgG{~`m+(ax zq%a{xyrb6Rc+a+az`Uf)b}%+%;T7w98#e*RzN1n+s8cDm2wn(b7k8j)7`g&Q!16TDA zXE?pLjzrw~;PbnyIy&cwaWWFF&uUGt{QSJHo-rsBn~Rgkac zfd>!>JA32U;C?BoU=fD2&$AB+OXrjm60!v``fSR}Mx05yV5b3xSWq6$|Q!3>#`w|mR_te3Z= z?$+R5B^`k0WDqGs)b}la%#wR~F>wIIHUUjXx#<$bB2lsdX*dkZ6(K~LRAr32wZ$3C zv{FV&X{-bH<^)5=7WrC_8BZBztf?U-!YG`fLq7X@Wl?FIeh2I3+g!6!SQ(CbDD^pA z&&U>7AawSnr6(@>3?!>s7gsTZo(q z-FM1*5z?zedN;jBdp&LHOZ<8*Qv}RtEWQMn#eUW?k53F;-a+7lvow|X&GYApm44-K zsF?SsVg*zGa~3!WD9%WgZe_YG^&A)}VUa*y#C78JEHpG9?D@3jQYO)U*7#qTej|T8W8aJF$<|iHa!rza?@dfW+}v?111ksln(9J z=3^-K_%dYzjH5+}FageZF+sxc_2N7r0pcxd-Ik-|0g|)F_e1~Y z;lm%WLb9&%@O}Cac6vC*u(esd%v8CzS z#-I4?OcOMz=N{Hon!5?s2-G@oFumg}f;TKwtq%MPeop@yODez&RWMlx!50x6brxyC zwTfIKGY28E1gL;yRXTW|Grp8-Nnm2NK6UM;i!~|vde<|y?upr9$O8_dKS_YbA6`i; z_5BC0QI{e=wBSHV*ep!)yGFJ(H~Ejj*=NsbQZ_Y_iTrY?Y0d-B(T>la<7X>>uF8~a zQ)f50s<&vCwmu?On!|3&j7ZivGxTfl)})JCgE>QL8VEkfr~TyMeDX-|#a7lXQ!h2cCLXosiGZ-eM&u5`2c$`ABM z8}-|*#SVc>-#ky8_|T;>o^#$BkEgygeQQfsOIUESFEQRR$^4pR$=p`~CcK zpDRLL8v8#SpZ&;e3G0#;emER_#Ye6z+@kLcJS1g2Q2mP7tHGKX6e>7#;IXw<3=}C* zdrbU!Q;Cu-13AfzimzWFL&m%y8d-lrombK^2m(gid_N@Cd1pArt0at}vU(reOz%vC z0vKz+c(UYeew!Ok_)mqcxCb}a`+Csl^wh-II2vA{A~Y@^g?Uc&l%qywQdMcX(J

保留完整画面查看原图 ↗
`; + return panel; +} +function failureCard(errors){ + const panel=document.createElement("article");panel.className="failed-reference-card"; + panel.innerHTML='

定位失败,未生成对比图

左侧保留完整上传原图。

'; + for(const error of errors){ + const message=document.createElement("p"); + message.textContent=`${error.gender==="female"?"女性":"男性"}7型:${error.message}`; + panel.append(message); + } + return panel; +} +function refreshStyleOptions() { + const old = $("styleFilter").value || "all", gender = $("genderFilter").value; + $("styleFilter").replaceChildren(); + for (let i = 0; i < 7; i++) { + const label = gender === "all" ? `${i+1}. 女:${styleNames.female[i]} / 男:${styleNames.male[i]}` : `${i+1}. ${styleNames[gender][i]}`; + $("styleFilter").add(new Option(label, String(i+1))); + } + $("styleFilter").add(new Option("全部 7 种形状", "all")); + $("styleFilter").value = old; +} +function refreshCases() { + const selected = $("caseFilter").value; + const cases = [...new Set([...dataset.groups,...dataset.errors].map(g => String(g.case_number)))].sort((a,b)=>a.localeCompare(b,"en",{numeric:true})); + $("caseFilter").replaceChildren(new Option(`全部 ${cases.length} 个案例`, "all")); + for (const key of cases) $("caseFilter").add(new Option(key.startsWith("custom") ? "自定义图片" : `案例 ${key}`, key)); + if (cases.includes(selected)) $("caseFilter").value = selected; +} +function refreshStats() { + const results = dataset.groups.flatMap(g => g.results); + const errors = results.map(r => r.height_placement.target_error_px); + $("statCases").textContent = new Set([...dataset.groups,...dataset.errors].map(g => g.case_number)).size; + $("statComparisons").textContent = results.length; + $("statError").textContent = errors.length ? `${fixed(Math.max(...errors))} px` : "—"; + $("statStatus").textContent = busy ? "运行中" : (dataset.errors.length ? "有异常" : (results.length ? "已完成" : "待运行")); + $("runTime").textContent = dataset.created_at ? `更新于 ${new Date(dataset.created_at).toLocaleString("zh-CN", {timeZone:"Asia/Shanghai",hour12:false})}` : "尚无保存结果"; +} +function cropBox(group) { + if (!$("zoomFace").checked) return [0, 0, group.width, group.height]; + if (group.crop_box) return group.crop_box; + const rule = group.height_rule, upper = rule.target_upper_height_px, center = rule.target_center; + const oldY = group.results.map(r => r.height_placement.old_center.y); + const left = Math.max(0, center.x - 1.7 * upper), top = Math.max(0, Math.min(center.y, ...oldY) - .55 * upper); + const right = Math.min(group.width, center.x + 1.7 * upper), bottom = Math.min(group.height, rule.brow_center.y + .75 * upper); + return [left, top, right, bottom]; +} +function paint(canvas, photo, oldLine, newLine, group, kind) { + const [x0,y0,x1,y1] = cropBox(group), cw = x1-x0, ch = y1-y0; + canvas.width = kind === "overlay" ? 1000 : 650; + canvas.height = Math.round(canvas.width * ch / cw); + const ctx = canvas.getContext("2d"), W = canvas.width, H = canvas.height; + ctx.drawImage(photo, x0,y0,cw,ch,0,0,W,H); + const tint = (line, color) => { + const layer = document.createElement("canvas"); layer.width=W; layer.height=H; + const ink=layer.getContext("2d"); ink.drawImage(line,x0,y0,cw,ch,0,0,W,H); + ink.globalCompositeOperation="source-in";ink.fillStyle=color;ink.fillRect(0,0,W,H);ctx.drawImage(layer,0,0); + }; + if (kind !== "new") tint(oldLine, "#f3a338"); + if (kind !== "old") tint(newLine, "#10c6b6"); + if ($("showTarget").checked) { + const target = group.height_rule.target_center, tx=(target.x-x0)/cw*W, ty=(target.y-y0)/ch*H; + ctx.save();ctx.strokeStyle="rgba(255,255,255,.85)";ctx.lineWidth=1.7;ctx.setLineDash([7,6]); + ctx.beginPath();ctx.moveTo(0,ty);ctx.lineTo(W,ty);ctx.stroke();ctx.setLineDash([]); + ctx.fillStyle="#fff";ctx.beginPath();ctx.arc(tx,ty,4,0,2*Math.PI);ctx.fill();ctx.restore(); + } + if(kind!=="old"&&$("showBox").checked&&group.guide_landmarks){ + window.drawHairlineReferenceBox(ctx,group.guide_landmarks,[x0,y0,x1,y1],W,H); + } +} +async function render() { + if(cardObserver)cardObserver.disconnect(); + const version=++drawVersion,gender=$("genderFilter").value,number=$("caseFilter").value,style=$("styleFilter").value; + const cases=new Map(); + for(const group of dataset.groups){ + if(gender!=="all"&&group.gender!==gender)continue; + if(number!=="all"&&String(group.case_number)!==number)continue; + for(const result of group.results){ + if(style!=="all"&&result.order!==Number(style))continue; + if(!cases.has(group.case_number))cases.set(group.case_number,[]); + cases.get(group.case_number).push({group,result}); + } + } + const visibleErrors=dataset.errors.filter(error=>(gender==="all"||error.gender===gender)&&(number==="all"||String(error.case_number)===number)); + for(const error of visibleErrors)if(!cases.has(error.case_number))cases.set(error.case_number,[]); + $("results").replaceChildren(); + let drawErrors=0,total=0; + const rowUpdates=[],drawJobs=new WeakMap(); + cardObserver=new IntersectionObserver(entries=>{ + for(const entry of entries)if(entry.isIntersecting){ + cardObserver.unobserve(entry.target);drawJobs.get(entry.target)?.(); + } + },{rootMargin:"600px 0px"}); + for(const [caseNumber,cards] of [...cases].sort((a,b)=>String(a[0]).localeCompare(String(b[0]),"en",{numeric:true}))){ + total+=cards.length; + const row=document.createElement("section");row.className="person-row"; + const caseName=String(caseNumber).startsWith("custom")?"自定义图片":`案例 ${caseNumber}`; + const caseErrors=visibleErrors.filter(error=>error.case_number===caseNumber); + if(!cards.length){ + row.classList.add("failed-case"); + row.innerHTML=`

${esc(caseName)} · 定位失败

`; + row.querySelector(".person-styles").append(originalCard(caseErrors[0],caseName),failureCard(caseErrors)); + $("results").append(row);continue; + } + row.innerHTML=`

${esc(caseName)} · ${cards.length} 种发际线样式

点击样式,左侧旧图同步切换
旧规则 · 头发边界定位

正在加载…

与右侧选中的形状对应

当前选中样式的原位置
本行仅显示一次 · 点击右侧样式切换
`; + $("results").append(row); + const groupForRow=cards[0].group,framing=groupForRow.framing; + if(framing){ + const info=document.createElement("div");info.className="framing-info"; + info.innerHTML=`${esc(framing.message)} · 旋转 ${fixed(framing.rotation_degrees,3)}° · ${framing.source_size.width}×${framing.source_size.height} → ${framing.output_size.width}×${framing.output_size.height} · 9/152 横向差 ${fixed(framing.axis_x_error_px,3)} px 上传原图 ↗ 处理后底图 ↗`; + row.insertBefore(info,row.querySelector(".person-body")); + } + const strip=row.querySelector(".person-styles"),oldPanel=row.querySelector(".old-reference-card"),oldCanvas=oldPanel.querySelector("canvas"); + // One horizontal row keeps the unprocessed photo first on narrow screens + // too, without squeezing the new styles into a zero-width column. + strip.append(originalCard(groupForRow,caseName),oldPanel); + if(caseErrors.length)strip.append(failureCard(caseErrors)); + const [previous,next]=row.querySelectorAll(".row-controls button"); + previous.addEventListener("click",()=>strip.scrollBy({left:-strip.clientWidth*.85,behavior:"smooth"})); + next.addEventListener("click",()=>strip.scrollBy({left:strip.clientWidth*.85,behavior:"smooth"})); + const updateArrows=()=>{previous.disabled=strip.scrollLeft<=2;next.disabled=strip.scrollWidth-strip.clientWidth-strip.scrollLeft<=2;}; + strip.addEventListener("scroll",updateArrows,{passive:true});rowUpdates.push(updateArrows); + let selectionVersion=0; + const selectOld=async(group,result,drawNow=true)=>{ + const selected=++selectionVersion,key=`${group.gender}:${result.order}`; + oldPanel.dataset.drawn="false"; + rowSelections.set(caseNumber,key);row.dataset.selectedStyle=key; + for(const card of strip.querySelectorAll(".case-card")){ + const active=card.dataset.styleKey===key;card.classList.toggle("selected",active); + card.setAttribute("aria-current",String(active));card.querySelector(".select-style").textContent=active?"已对照":"对照此样式"; + } + const label=styleNames[group.gender][result.order-1]; + oldPanel.querySelector(".old-style-name").textContent=`${group.gender==="female"?"女性":"男性"} · ${label}`; + oldPanel.querySelector(".old-style-metrics").textContent=`原中心 y ${fixed(result.height_placement.old_center.y)} · 目标 y ${fixed(group.height_rule.target_center.y)}`; + const box=cropBox(group);oldCanvas.width=650;oldCanvas.height=Math.round(650*(box[3]-box[1])/(box[2]-box[0])); + const draw=async()=>{ + try{ + const [photo,line]=await Promise.all([inputImage(group),loadImage(imageSource(result,"old_overlay"))]); + if(version!==drawVersion||selected!==selectionVersion)return; + paint(oldCanvas,photo,line,null,group,"old");oldPanel.dataset.drawn="true"; + }catch(error){if(version===drawVersion)status(error.message,true);} + }; + if(drawNow)await draw(); + else{drawJobs.set(oldPanel,draw);cardObserver.observe(oldPanel);} + }; + for(const {group,result} of cards){ + const rule=group.height_rule,p=result.height_placement,label=styleNames[group.gender][result.order-1]; + const card=document.createElement("article");card.className="case-card";card.tabIndex=0; + card.dataset.styleKey=`${group.gender}:${result.order}`; + card.innerHTML=`
${group.gender==="female"?"女性":"男性"}发际线

${esc(label)} ${esc(result.hairline_type)}

目标上庭 (${fixed(rule.middle_height_px)} + ${fixed(rule.lower_height_px)}) ÷ 2 = ${fixed(rule.target_upper_height_px)} px

新 y ${fixed(p.new_center.y)}${p.shift_y_px<0?"上移":"下移"} ${fixed(Math.abs(p.shift_y_px))} px
${mode==="overlay"?"橙色旧线 / 青色新线":"新规则 · 中下庭均值"}
中心误差 ${fixed(p.target_error_px)} px原图 ↗
`; + strip.append(card); + card.addEventListener("click",event=>{if(!event.target.closest("a"))selectOld(group,result);}); + card.addEventListener("keydown",event=>{if(event.target===card&&(event.key==="Enter"||event.key===" ")){event.preventDefault();selectOld(group,result);}}); + const canvas=card.querySelector("canvas"),box=cropBox(group);canvas.width=650;canvas.height=Math.round(650*(box[3]-box[1])/(box[2]-box[0])); + drawJobs.set(card,async()=>{ + try{ + const [photo,line,oldLine]=await Promise.all([inputImage(group),loadImage(imageSource(result,"new_overlay")),mode==="overlay"?loadImage(imageSource(result,"old_overlay")):Promise.resolve(null)]); + if(version!==drawVersion)return; + paint(canvas,photo,oldLine,line,group,mode==="overlay"?"overlay":"new");card.dataset.drawn="true"; + }catch(error){drawErrors++;const message=document.createElement("p");message.className="error-card";message.textContent=error.message;card.append(message);status(`有 ${drawErrors} 组图片加载失败,可重跑案例。`,true);} + }); + cardObserver.observe(card); + } + const active=cards.find(c=>`${c.group.gender}:${c.result.order}`===rowSelections.get(caseNumber))||cards[0]; + selectOld(active.group,active.result,false); + } + if(!cases.size&&!dataset.errors.length)$("results").innerHTML='
暂无对比结果。可上传图片或点击“重跑全部30个案例”。
'; + requestAnimationFrame(()=>rowUpdates.forEach(update=>update())); + if(version===drawVersion&&!busy){ + const failures=new Set(visibleErrors.map(error=>error.case_number)).size; + status(`显示 ${cases.size} 个案例、${total} 种新规则样式${failures?`,${failures} 个案例存在定位失败`:""}。每人一行,最前面为未裁切原图,旧图仅一次;左右滑动查看全部样式。`,failures>0); + } +} +function setBusy(value) {busy=value;$("rerunBatch").disabled=value;$("customRun").disabled=value;refreshStats();} +async function compare(form) { + const response=await fetch("/api/v1/debug/hairline-height-compare",{method:"POST",body:form}); + if(!response.ok)throw new Error(`请求失败:HTTP ${response.status}`); + const json=await response.json();if(json.code!==0)throw new Error(json.message);return json.data; +} +async function rerun() { + if(busy)return;setBusy(true);let failure=null; + try { + const response=await fetch("/api/v1/debug/hairline-height-cases");const json=await response.json(); + if(json.code!==0)throw new Error(json.message); + dataset={groups:[],errors:[],created_at:new Date().toISOString()};inputImages.clear(); + const cases=json.data.cases,total=cases.length*2;let done=0; + for(const test of cases)for(const gender of ["female","male"]){ + status(`正在运行案例 ${test.image_number} / ${gender==="female"?"女性":"男性"} 7 型(${done}/${total})…`); + const form=new FormData();form.append("image_url",test.image_url);form.append("gender",gender);form.append("hair_style","1,2,3,4,5,6,7"); + try{const data=await compare(form);dataset.groups.push({...data,case_number:test.image_number,source_url:test.image_url});} + catch(error){dataset.errors.push({case_number:test.image_number,gender,message:error.message,source_url:test.image_url,original_url:test.image_url});} + done++;refreshCases();refreshStats();await render(); + } + }catch(error){failure=error.message;}finally{setBusy(false);await render();if(failure)status(failure,true);} +} +async function custom(event) { + event.preventDefault();if(busy)return;const file=$("customFile").files[0];if(!file)return;setBusy(true);status("正在计算自定义图片的旧 / 新位置…");let failure=null; + try { + const photo=file,form=new FormData(),gender=$("customGender").value; + form.append("image_file",photo);form.append("gender",gender);form.append("hair_style","1,2,3,4,5,6,7"); + const data=await compare(form),number=`custom-${Date.now()}`; + dataset.groups.push({...data,case_number:number});dataset.created_at=new Date().toISOString(); + $("genderFilter").value=gender;refreshStyleOptions();refreshCases();$("caseFilter").value=number; + }catch(error){failure=error.message;}finally{setBusy(false);await render();if(failure)status(failure,true);} +} +async function init() { + fetch("/api/v1/debug/hairline-framing-reference").then(r=>r.json()).then(json=>{ + if(json.code!==0)throw new Error(json.message); + const p=json.data; + $("framingStandard").innerHTML=`9号与152号点已竖直对齐的参考图
已扶正参考图:${p.reference_size.width}×${p.reference_size.height}(3:4)

参考图9号点 (${fixed(p.brow_9.x)}, ${fixed(p.brow_9.y)})
参考图152号点 (${fixed(p.chin_152.x)}, ${fixed(p.chin_152.y)})
两点X相同;旋转 ${fixed(p.rotation_degrees,3)}°

当前裁切:高约 ${Number(fixed(p.height_per_face_length,4))}×L,宽 ${Number(fixed(p.width_per_face_length,4))}×LL 为9号点到152号点的像素距离。
眉心位置:横向 ${fixed(p.brow_x_ratio*100,2)}%,纵向 ${fixed(p.brow_y_ratio*100,2)}%

用户图先扶正,有空间时按上述尺寸裁切;长图保留人脸裁为3:4,其余空间不足时仅扶正。保留实际像素,不放大图片。

`; + }).catch(error=>{$("framingStandard").textContent=error.message;}); + refreshStyleOptions(); + $("genderFilter").addEventListener("change",()=>{refreshStyleOptions();render();}); + for(const id of ["styleFilter","caseFilter","zoomFace","showTarget","showBox"])$(id).addEventListener("change",render); + for(const [id,value] of [["sideMode","side"],["overlayMode","overlay"]])$(id).addEventListener("click",()=>{mode=value;$("sideMode").classList.toggle("active",value==="side");$("overlayMode").classList.toggle("active",value==="overlay");render();}); + $("customForm").addEventListener("submit",custom);$("rerunBatch").addEventListener("click",rerun); + try { + const response=await fetch("/static/annotations/hairline_height_compare/latest.json",{cache:"no-store"}); + if(!response.ok)throw new Error("尚无保存的批量结果,可上传图片或重跑全部30个案例。"); + dataset=await response.json();dataset.errors ||= [];refreshCases();refreshStats();await render(); + }catch(error){refreshStats();status(error.message,true);} +} +document.addEventListener("DOMContentLoaded",init); diff --git a/static/hairline_reference_box.js b/static/hairline_reference_box.js new file mode 100644 index 0000000..8d38b6a --- /dev/null +++ b/static/hairline_reference_box.js @@ -0,0 +1,62 @@ +"use strict"; +// Reference geometry is in input-image pixels; no screen-vertical assumptions. +window.hairlineReferenceBox = function(points) { + const p = id => { + const value = points[String(id)]; + if (!value || !Number.isFinite(value.x) || !Number.isFinite(value.y)) throw new Error(`缺少 ${id} 号关键点`); + return [value.x, value.y]; + }; + const add = (a,b) => [a[0]+b[0],a[1]+b[1]]; + const sub = (a,b) => [a[0]-b[0],a[1]-b[1]]; + const mul = (a,s) => [a[0]*s,a[1]*s]; + const dot = (a,b) => a[0]*b[0]+a[1]*b[1]; + const brow=p(9),chin=p(152),left=p(162),right=p(389); + const delta=sub(chin,brow),length=Math.hypot(...delta); + if(length<1)throw new Error("9→152 方向无法确定"); + const up=mul(delta,-1/length),horizontal=[-up[1],up[0]],height=.7*length; + const sidePoint=(anchor,direction,level)=>{ + const denominator=dot(direction,up); + if(Math.abs(denominator)<1e-6)throw new Error("参考框侧边与底边平行"); + return add(anchor,mul(direction,(level-dot(sub(anchor,brow),up))/denominator)); + }; + const corners=[sidePoint(left,up,0),sidePoint(right,up,0), + sidePoint(right,up,height),sidePoint(left,up,height)]; + if(dot(sub(corners[1],corners[0]),horizontal)<=0)throw new Error("参考框左右位置异常"); + return {corners,height,faceLength:length, + landmarks:{9:brow,152:chin,162:left,389:right}}; +}; + +window.clipHairlineToReferenceBox = function(image, points) { + const box=window.hairlineReferenceBox(points); + const width=image.naturalWidth||image.width,height=image.naturalHeight||image.height; + if(!width||!height)throw new Error("发际线图片尚未加载"); + const canvas=document.createElement("canvas");canvas.width=width;canvas.height=height; + const ctx=canvas.getContext("2d"); + ctx.beginPath();box.corners.forEach((p,i)=>i?ctx.lineTo(...p):ctx.moveTo(...p));ctx.closePath(); + ctx.clip();ctx.drawImage(image,0,0,width,height); + return canvas; +}; + +window.drawHairlineReferenceBox = function(ctx, points, crop, width, height) { + const box=window.hairlineReferenceBox(points); + const [x0,y0,x1,y1]=crop; + const screen=p=>[(p[0]-x0)/(x1-x0)*width,(p[1]-y0)/(y1-y0)*height]; + const color="#e33399"; + ctx.save();ctx.strokeStyle=color;ctx.lineWidth=Math.max(2.5,width/280);ctx.lineJoin="round"; + ctx.beginPath();box.corners.forEach((p,i)=>{const q=screen(p);i?ctx.lineTo(...q):ctx.moveTo(...q);});ctx.closePath();ctx.stroke(); + ctx.lineWidth=1.4;ctx.setLineDash([7,6]);ctx.beginPath();ctx.moveTo(...screen(box.landmarks[9]));ctx.lineTo(...screen(box.landmarks[152]));ctx.stroke();ctx.setLineDash([]); + const fontSize=Math.max(13,width/43);ctx.font=`600 ${fontSize}px sans-serif`; + for(const id of [9,152,162,389]){ + const [x,y]=screen(box.landmarks[id]); + if(x<0||x>width||y<0||y>height)continue; + ctx.fillStyle=color;ctx.beginPath();ctx.arc(x,y,Math.max(3,width/160),0,Math.PI*2);ctx.fill(); + const label=String(id),tw=ctx.measureText(label).width; + const tx=Math.max(3,Math.min(width-tw-8,x+7)),ty=Math.max(fontSize+4,Math.min(height-5,y-7)); + ctx.fillStyle="rgba(255,255,255,.9)";ctx.fillRect(tx-3,ty-fontSize,tw+6,fontSize+4);ctx.fillStyle="#a51868";ctx.fillText(label,tx,ty); + } + const top=screen([(box.corners[2][0]+box.corners[3][0])/2,(box.corners[2][1]+box.corners[3][1])/2]); + const text="70% · 9→152",tw=ctx.measureText(text).width; + const tx=Math.max(4,Math.min(width-tw-6,top[0]-tw/2)),ty=Math.max(fontSize+4,top[1]-8); + ctx.fillStyle="rgba(255,255,255,.9)";ctx.fillRect(tx-3,ty-fontSize,tw+6,fontSize+4);ctx.fillStyle="#a51868";ctx.fillText(text,tx,ty); + ctx.restore(); +}; diff --git a/static/integration.html b/static/integration.html index 52c346d..8166019 100644 --- a/static/integration.html +++ b/static/integration.html @@ -56,6 +56,7 @@ 接口3 接口4 接口5 + 接口52 接口6 错误码 在线测试 @@ -261,6 +262,16 @@ console.log(features.gene_style); // "自然型" +
+

52. 发际线新规则与裁切  POST  /api/v1/hairline/generate-52

+
+

中下庭均值定位 middle,支持9→152扶正、人像裁切和矩形发际线预览。接口5保留原有三档实现;新功能使用此独立接口。

+

基础图片参数、gender、hair_style、use_mask、prompt、generate_grow_image沿用接口5。新增可选normalize_image,默认false,传true开启扶正与裁切;测试页显式开启。

+

返回height_rule、framing、guide_landmarks、原图及处理后底图。middle和坐标使用当前底图,high/low字段为null。标准裁切高约3.3333L、宽2.5L;长图在保留人脸的前提下裁为3:4。

+

52号规则测试页 · 52号30案例对比页

+
+
+

6. 四庭七眼测量 v2  POST  /api/v1/face/measure-v2  v2

@@ -323,6 +334,8 @@ console.log(features.gene_style); // "自然型" 3. B端生发/static/test_interface3.html划线图上传 → 生发效果图 4. 用户特征/static/test_interface4.html上传照片 → 6项面部特征 + 原始JSON 5. 发际线PNG/static/test_interface5.html上传+性别 → 发际线方案+中心点坐标 + 52. 发际线新规则/static/test_interface52.html中下庭定位、扶正裁切、矩形发际线叠加及生发 + 52. 规则对比/static/test_interface52_compare.html30个案例,原图与旧/新规则样式对照 6. 四庭七眼 v2/static/test_interface6.html同接口1,去顶庭 · 竖线发际线→下巴 · 无头部端线

diff --git a/static/test_interface52.html b/static/test_interface52.html new file mode 100644 index 0000000..e56ff29 --- /dev/null +++ b/static/test_interface52.html @@ -0,0 +1,418 @@ + + + + + +接口52 — 发际线PNG生成 测试页 + + + + + +

+

💈 接口52 — 发际线 PNG 生成 测试

+

上传正面照,选择性别与发型,查看按中下庭均值定位的设计曲线和生发效果。

+
目标上庭高度 =(中庭高度 + 下庭高度)÷ 2查看旧 / 新规则对比 →
上传图先扶正9→152,再裁切为高约 3.3333×L、宽 2.5×L,人物比原3L规则缩小约10%;L 是9号点到152号点的像素距离,眉心位置沿用参考图比例。长图会在保留人脸的前提下裁为3:4,其余空间不足时仅扶正。从眉心向上定位,各发型中点对齐同一目标。high、low 已停用,旧字段返回 null。
+ +
+
+
+
+
+ + +
+
+ +
+
+
+ + +
+
+
+
+ + +
+ + +
+
JPG/PNG 正面照  |  Female: 椭圆/花瓣/心形/直线/波浪/大花瓣/古典花瓣  |  Male: 椭圆/倒弧/M形/直线/桃心/柔和花瓣/波浪  |  每个发型返回一张设计曲线,生发遮罩同步到新位置
+ +
+
+ + +
+ + + + diff --git a/static/test_interface52_compare.html b/static/test_interface52_compare.html new file mode 100644 index 0000000..8290b42 --- /dev/null +++ b/static/test_interface52_compare.html @@ -0,0 +1,52 @@ + + + + + + 接口 52 · 发际线高度规则对比 + + + + + + +
+ +
+
新规则

目标上庭 =(中庭 + 下庭)÷ 2

从眉心向上定位,所有形状的中点对齐同一高度。各发型保留自身轮廓,叠加在扶正后的底图上。

+
旧规则:根据头发边界和模板定位
新规则:根据中庭、下庭定位
虚线:新规则的目标高度
+
+
查看已扶正的标准图与裁切参数
正在加载标准图参数…
+
+
已验证图片—独立测试图片
+
发际线对比—男性 / 女性各 7 型
+
最大中心误差—新中心与目标的像素差
+
验证状态加载中正在读取已保存结果
+
+
+ + + +
+ + + +
+

正在加载30个案例的对比结果…

+
+
+

继续验证

上传新图片,或重新运行清单全部30张。每人先显示未裁切原图,再显示旧、新规则;对比只生成定位曲线,无需等待生发。

+
+ + + +
+

high、low 已停用;接口旧字段保留为 null。当前页的“旧规则”是本次高度修改前的定位逻辑。旧、新规则使用同一张处理后底图。

+
+
旧线 橙色 · 新线 青色 · 粉色参考框:两侧均平行 9→152,左边经过 162、右边经过 389、底边经过 9;高度为 9→152 距离的 70%
向上移动为负,向下移动为正 · 所有距离基于接口实际输入图片
+
+ + diff --git a/static/test_interface5_compare.html b/static/test_interface5_compare.html new file mode 100644 index 0000000..ccf5960 --- /dev/null +++ b/static/test_interface5_compare.html @@ -0,0 +1,3 @@ + +接口52 · 规则对比 +

新规则对比已迁移至接口52:打开接口52对比页

diff --git a/tests/fixtures/hairline_height_cases.json b/tests/fixtures/hairline_height_cases.json new file mode 100644 index 0000000..a5423e1 --- /dev/null +++ b/tests/fixtures/hairline_height_cases.json @@ -0,0 +1,38 @@ +{ + "description": "用户指定的接口 52 发际线高度规则回归验证图片清单", + "recorded_on": "2026-11-03", + "endpoint": "/api/v1/hairline/generate-52", + "total": 30, + "cases": [ + {"image_number": 1, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%201.png"}, + {"image_number": 2, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%202.png"}, + {"image_number": 3, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%203.png"}, + {"image_number": 4, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%204.png"}, + {"image_number": 5, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%205.png"}, + {"image_number": 6, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%206.png"}, + {"image_number": 7, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%207.png"}, + {"image_number": 20, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%2020.png"}, + {"image_number": 21, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%2021.png"}, + {"image_number": 22, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%2022.png"}, + {"image_number": 23, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%2023.png"}, + {"image_number": 27, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%2027.png"}, + {"image_number": 32, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%2032.png"}, + {"image_number": 33, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%2033.png"}, + {"image_number": 34, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%2034.png"}, + {"image_number": 35, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%2035.png"}, + {"image_number": 36, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%2036.png"}, + {"image_number": 37, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%2037.png"}, + {"image_number": 40, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%2040.png"}, + {"image_number": 41, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%2041.png"}, + {"image_number": 42, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%2042.png"}, + {"image_number": 43, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%2043.png"}, + {"image_number": 44, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%2044.png"}, + {"image_number": 45, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%2045.png"}, + {"image_number": 46, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%2046.png"}, + {"image_number": 47, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%2047.png"}, + {"image_number": 50, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%2050.png"}, + {"image_number": 51, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%2051.png"}, + {"image_number": 52, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%2052.png"}, + {"image_number": 53, "image_url": "https://raw.githubusercontent.com/feastfuyan/yonghe-badcase-0917/main/%E5%9B%BE%E7%89%87%2053.png"} + ] +} diff --git a/tests/test_api.py b/tests/test_api.py index f531688..06c7b8a 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -18,7 +18,7 @@ H = {"X-Internal-Token": "testpass"} @pytest.fixture(scope="module") def client(): # with 触发 lifespan:加载模型单例(detector + 尽力加载 segmenter) - with TestClient(app_module.app) as c: + with TestClient(app_module.app, client=("127.0.0.1", 50000)) as c: yield c @@ -189,6 +189,40 @@ def test_growb_success(client, monkeypatch): HLGEN = "/api/v1/hairline/generate" +def test_hairline5_restored_schema_has_only_historical_parameters(client): + schema = client.get("/openapi.json", headers=H).json() + ref = schema["paths"][HLGEN]["post"]["requestBody"]["content"]["multipart/form-data"]["schema"]["$ref"] + fields = schema["components"]["schemas"][ref.rsplit("/", 1)[-1]]["properties"] + assert set(fields) == {"image_file", "image_url", "image_base64", "gender", "hair_style", + "use_mask", "prompt", "generate_grow_image"} + assert fields["use_mask"]["default"] is True + assert fields["generate_grow_image"]["default"] is True + assert fields["prompt"]["default"] == "填充遮罩区域的头发,人物增加一点磨皮" + + +@pytest.mark.parametrize("gender", ["female", "male"]) +def test_hairline5_restored_three_levels_and_original_coordinate_contract(client, gender): + from pathlib import Path + photo = Path(fixture("frontal.jpg")).read_bytes() + body = client.post(HLGEN, headers=H, files={"image_file": ("frontal.jpg", photo, "image/jpeg")}, + data={"gender": gender, "hair_style": "1,3", "generate_grow_image": "false"}).json() + assert body["code"] == 0, body + data = body["data"] + assert set(data) == {"hairline_images", "best_hairline_center_point", "high_hairline_center_point", + "low_hairline_center_point", "face_measure"} + expected = _cv2.imdecode(_np.frombuffer(photo, _np.uint8), _cv2.IMREAD_COLOR).shape[:2] + for key in ("best_hairline_center_point", "high_hairline_center_point", "low_hairline_center_point"): + assert set(data[key]) == {"x", "y"} + assert isinstance(data[key]["x"], int) and isinstance(data[key]["y"], int) + for item in data["hairline_images"]: + assert set(item) == {"hairline_type", "image_middle_base64", "image_high_base64", "image_low_base64", + "grown_image_base64", "order"} + assert item["grown_image_base64"] is None + for level in ("middle", "high", "low"): + image = _cv2.imdecode(_np.frombuffer(base64.b64decode(item[f"image_{level}_base64"]), _np.uint8), _cv2.IMREAD_UNCHANGED) + assert image.shape == (*expected, 4) + + def test_hairline_gen_missing_gender_1004(client): files = {"image_file": ("frontal.jpg", open(fixture("frontal.jpg"), "rb"), "application/octet-stream")} assert client.post(HLGEN, headers=H, files=files).json()["code"] == 1004 @@ -241,6 +275,181 @@ def test_hairline_gen_female(client, monkeypatch): assert set(["yaw", "pitch", "roll"]).issubset(fm["head_pose"].keys()) +HLGEN52 = "/api/v1/hairline/generate-52" + + +def test_hairline52_legacy_form_parameters_and_defaults_are_preserved(client): + schema = client.get("/openapi.json", headers=H).json() + body = schema["paths"][HLGEN52]["post"]["requestBody"]["content"]["multipart/form-data"]["schema"] + body = schema["components"]["schemas"][body["$ref"].rsplit("/", 1)[-1]] + fields = body["properties"] + legacy = {"image_file", "image_url", "image_base64", "gender", "hair_style", + "use_mask", "prompt", "generate_grow_image"} + assert legacy.issubset(fields) + assert not set(body.get("required", [])) - legacy + for key in ("image_file", "image_url", "image_base64", "gender", "hair_style"): + assert any(choice.get("type") == "string" for choice in fields[key].get("anyOf", [fields[key]])) + assert fields["use_mask"]["type"] == "boolean" and fields["use_mask"]["default"] is True + assert fields["generate_grow_image"]["type"] == "boolean" and fields["generate_grow_image"]["default"] is True + assert fields["prompt"]["default"] == "填充遮罩区域的头发,人物增加一点磨皮" + assert fields["normalize_image"]["default"] is False + + +@pytest.mark.parametrize("image_kind", ["file", "base64", "url"]) +def test_hairline52_legacy_request_keeps_fields_and_original_coordinates(client, monkeypatch, image_kind): + import contextlib + from pathlib import Path + from types import SimpleNamespace + import httpx + import hairline.comfyui as comfy + + raw = Path(fixture("frontal.jpg")).read_bytes() + calls = [] + def generate(*args, **kwargs): + calls.append(kwargs) + return _PNG_1x1 + monkeypatch.setattr(comfy, "run", generate) + form = {"gender": "male", "hair_style": "1", "use_mask": "false", "prompt": "legacy prompt"} + kwargs = {"headers": H, "data": form} + if image_kind == "file": + kwargs["files"] = {"image_file": ("frontal.jpg", raw, "image/jpeg")} + elif image_kind == "base64": + form["image_base64"] = "data:image/jpeg;base64," + base64.b64encode(raw).decode() + else: + url = "https://legacy.example.test/frontal.jpg" + form["image_url"] = url + response = httpx.Response(200, content=raw, request=httpx.Request("GET", url)) + def get_image(actual_url): + assert actual_url == url + return response + monkeypatch.setattr(httpx, "Client", lambda **kw: contextlib.nullcontext(SimpleNamespace(get=get_image))) + # No new parameters: old clients keep their original-size overlays. + body = client.post(HLGEN52, **kwargs).json() + assert body["code"] == 0, body + assert {"code", "message", "request_id", "data"}.issubset(body) + data = body["data"] + assert {"hairline_images", "best_hairline_center_point", "high_hairline_center_point", + "low_hairline_center_point", "face_measure"}.issubset(data) + assert data["coordinate_space"] == "original_image" and data["framing"] is None + assert data["input_image_base64"] == data["original_image_base64"] + original = _cv2.imdecode(_np.frombuffer(raw, _np.uint8), _cv2.IMREAD_COLOR) + expected = original.shape[:2] + assert (data["height"], data["width"]) == expected + item = data["hairline_images"][0] + assert {"hairline_type", "image_middle_base64", "image_high_base64", "image_low_base64", + "grown_image_base64", "order"}.issubset(item) + assert item["image_high_base64"] is None and item["image_low_base64"] is None + assert data["high_hairline_center_point"] is None and data["low_hairline_center_point"] is None + for key in ("image_middle_base64", "grown_image_base64"): + image = _cv2.imdecode(_np.frombuffer(base64.b64decode(item[key]), _np.uint8), _cv2.IMREAD_UNCHANGED) + assert image.shape[:2] == expected + assert len(calls) == 1 and calls[0]["prompt"] == "legacy prompt" + + +@pytest.mark.parametrize("normalize_image", [True, False]) +def test_hairline52_height_compare_uses_same_new_rule(client, monkeypatch, normalize_image): + import hairline.comfyui as comfy + def unexpected_generation(*args, **kwargs): + pytest.fail("Position comparison must not invoke ComfyUI by default") + monkeypatch.setattr(comfy, "run", unexpected_generation) + with open(fixture("frontal.jpg"), "rb") as photo: + response = client.post("/api/v1/debug/hairline-height-compare", + files={"image_file": ("frontal.jpg", photo, "image/jpeg")}, + data={"gender": "male", "hair_style": "1,3", "normalize_image": str(normalize_image).lower()}) + data = response.json() + assert data["code"] == 0, data + data = data["data"] + assert [r["order"] for r in data["results"]] == [1, 3] + assert set(data["guide_landmarks"]) == {"9", "150", "152", "162", "251", "389"} + assert data["guide_landmarks"]["9"]["y"] < data["guide_landmarks"]["152"]["y"] + expected_size = (data["height"], data["width"]) + base = _cv2.imdecode(_np.frombuffer(base64.b64decode(data["input_base64"]), _np.uint8), _cv2.IMREAD_COLOR) + assert base.shape[:2] == expected_size + assert data["coordinate_space"] == ("processed_image" if normalize_image else "original_image") + if normalize_image: + assert data["framing"]["enabled"] is True + assert data["framing"]["axis_x_error_px"] < 1e-8 + assert data["guide_landmarks"]["9"]["x"] == pytest.approx(data["guide_landmarks"]["152"]["x"], abs=1e-8) + else: + assert data["framing"] is None + original = _cv2.imread(fixture("frontal.jpg")) + assert base.shape == original.shape + for result in data["results"]: + assert result["height_placement"]["target_error_px"] <= 1 + assert result["grown_image_base64"] is None + for key in ("old_overlay_base64", "new_overlay_base64"): + assert base64.b64decode(result[key])[:8] == b"\x89PNG\r\n\x1a\n" + overlay = _cv2.imdecode(_np.frombuffer(base64.b64decode(result[key]), _np.uint8), _cv2.IMREAD_UNCHANGED) + assert overlay.shape[:2] == expected_size + + +def test_hairline52_gen_missing_gender_1004(client): + files = {"image_file": ("frontal.jpg", open(fixture("frontal.jpg"), "rb"), "application/octet-stream")} + assert client.post(HLGEN52, headers=H, files=files).json()["code"] == 1004 + + +def test_hairline52_gen_missing_hairstyle_1007(client): + # hair_style 已改为必填(同接口2):只给 gender、不给 hair_style → 1007 + files = {"image_file": ("frontal.jpg", open(fixture("frontal.jpg"), "rb"), "application/octet-stream")} + assert client.post(HLGEN52, headers=H, files=files, data={"gender": "female"}).json()["code"] == 1007 + + +def test_hairline52_gen_female(client, monkeypatch): + # mock ComfyUI:验证处理后底图、发际线和生发图使用相同尺寸与坐标。 + import hairline.comfyui as comfy + monkeypatch.setattr(comfy, "run", lambda *a, **k: _PNG_1x1) + + files = {"image_file": ("frontal.jpg", open(fixture("frontal.jpg"), "rb"), "application/octet-stream")} + body = client.post(HLGEN52, headers=H, files=files, + data={"gender": "female", "hair_style": "1,3", "normalize_image": "true"}).json() + assert body["code"] == 0, body + d = body["data"] + assert d["coordinate_space"] == "processed_image" + assert d["framing"]["enabled"] is True + assert d["framing"]["axis_x_error_px"] < 1e-8 + expected_size = (d["height"], d["width"]) + for value in (d["input_image_base64"], d["hairline_images"][0]["image_middle_base64"], + d["hairline_images"][0]["grown_image_base64"]): + image = _cv2.imdecode(_np.frombuffer(base64.b64decode(value), _np.uint8), _cv2.IMREAD_UNCHANGED) + assert image.shape[:2] == expected_size + imgs = d["hairline_images"] + # 只返回选中发型,order = 发型序号 + assert [x["order"] for x in imgs] == [1, 3] + assert [x["hairline_type"] for x in imgs] == ["ellipse", "heart"] + # Only the designed middle curve is generated; deprecated fields stay null. + assert base64.b64decode(imgs[0]["image_middle_base64"])[:8] == b"\x89PNG\r\n\x1a\n" + assert all(x["image_high_base64"] is None and x["image_low_base64"] is None for x in imgs) + assert d["high_hairline_center_point"] is None and d["low_hairline_center_point"] is None + rule = d["height_rule"] + assert rule["target_upper_height_px"] == pytest.approx( + (rule["middle_height_px"] + rule["lower_height_px"]) / 2) + for x in imgs: + assert x["height_placement"]["new_center"]["y"] == pytest.approx(rule["target_center"]["y"], abs=1) + assert base64.b64decode(imgs[0]["grown_image_base64"])[:3] == b"\xff\xd8\xff" + assert "image_middle_url" not in imgs[0] + c = d["best_hairline_center_point"] + assert 0 <= c["x"] < d["width"] and 0 <= c["y"] < d["height"] + # face_measure:复用接口1测量数值(容错,失败为 null;本用例正常 → 必须有完整结构) + fm = d["face_measure"] + assert fm is not None, "face_measure 不应为 null(正常正面照)" + assert set(["face_total_height_cm", "four_courts", "seven_eyes", + "landmarks", "hairline_source", "head_pose"]).issubset(fm.keys()) + # 不应含标注图字段(接口52 只要数值,不要画线图) + assert "annotated_image_base64" not in fm + assert "annotated_image_url" not in fm + # 子结构 + assert set(["top_court_cm", "upper_court_cm", "middle_court_cm", + "lower_court_cm", "ratios"]).issubset(fm["four_courts"].keys()) + assert set(["eye_width_cm", "face_width_cm", "inter_eye_distance_cm", + "ratios"]).issubset(fm["seven_eyes"].keys()) + # 七眼 eye1~eye7 键必须存在(eye1/eye7 在耳朵不可见时可为 null) + assert set([f"eye{i}" for i in range(1, 8)]).issubset(fm["seven_eyes"].keys()) + assert set(["hair_top", "hairline", "brow_center", + "nose_bottom", "chin_tip"]).issubset(fm["landmarks"].keys()) + assert fm["hairline_source"] in ("segmentation", "estimated", "corrected") + assert set(["yaw", "pitch", "roll"]).issubset(fm["head_pose"].keys()) + + # 接口4(用户特征)已迁到网关本机实现(直接调豆包),不再在 worker; # 其测试随实现一起在网关侧做,worker 这边不再覆盖。 diff --git a/tests/test_framing.py b/tests/test_framing.py new file mode 100644 index 0000000..882c57b --- /dev/null +++ b/tests/test_framing.py @@ -0,0 +1,122 @@ +"""Framing must align real pixel coordinates without scaling or invented pixels.""" +import io + +import cv2 +import numpy as np +from PIL import Image +import pytest + +from hairline.framing import calibrate_reference, crop_fits, decode_portrait, normalize_portrait, transform_points + + +PROFILE = {"version": "test", "reference_image_url": "/reference.png", + "width_per_face_length": 2.1, "height_per_face_length": 2.8, + "brow_x_ratio": .49, "brow_y_ratio": .34} + + +def landmarks(w, h, brow, length=100, angle=0): + lm = np.zeros((478, 3), np.float64) + down = np.array([np.sin(np.deg2rad(angle)), np.cos(np.deg2rad(angle))]) + lm[:, :2] = np.array(brow)/[w, h] + lm[152, :2] = (np.array(brow)+down*length)/[w, h] + lm[:, 2] = .01 + return lm + + +@pytest.mark.parametrize("angle", [-22, 0, 17]) +def test_native_scale_upright_and_inverse_mapping(angle): + photo = np.full((700, 600, 3), 127, np.uint8) + lm = landmarks(600, 700, (300, 280), angle=angle) + result, moved, metadata = normalize_portrait(photo, lm, PROFILE) + h, w = result.shape[:2] + assert metadata["standard_crop"] is True + assert w/h == .75 + xy = moved[[9, 152], :2]*[w, h] + assert abs(xy[0, 0]-xy[1, 0]) < 1e-9 + assert xy[1, 1]-xy[0, 1] == pytest.approx(100) + assert xy[0, 0]/w == pytest.approx(PROFILE["brow_x_ratio"]) + assert xy[0, 1]/h == pytest.approx(PROFILE["brow_y_ratio"]) + matrix = np.array(metadata["source_to_processed"]) + np.testing.assert_allclose(np.linalg.svd(matrix[:, :2])[1], [1, 1], atol=1e-10) + restored = transform_points(moved[:, :2]*[w, h], np.array(metadata["processed_to_source"])) + np.testing.assert_allclose(restored, lm[:, :2]*[600, 700], atol=1e-9) + assert result.min() == 127 # no black triangles / padded background + + +def test_insufficient_space_keeps_upright_original_size_when_no_rotation_needed(): + photo = np.full((300, 230, 3), 127, np.uint8) + result, moved, metadata = normalize_portrait(photo, landmarks(230, 300, (115, 80), 150), PROFILE) + assert metadata["standard_crop"] is False + assert metadata["skip_reason"] == "insufficient_space" + assert result.shape == photo.shape + np.testing.assert_array_equal(result, photo) + assert abs(moved[9, 0]-moved[152, 0]) < 1e-10 + + +def test_rotated_fallback_has_no_empty_corners(): + photo = np.full((400, 300, 3), 127, np.uint8) + result, moved, metadata = normalize_portrait(photo, landmarks(300, 400, (150, 130), 160, 12), PROFILE) + assert metadata["standard_crop"] is False + assert result.min() == 127 + assert metadata["axis_x_error_px"] < 1e-10 + assert crop_fits(np.array(metadata["source_to_processed"]), (300, 400), result.shape[1::-1]) + + +@pytest.mark.parametrize("brow,angle", [((150, 330), 0), ((150, 330), 8), ((150, 70), -8)]) +def test_tall_fallback_is_three_by_four_and_retains_face(brow, angle): + photo = np.full((700, 300, 3), 127, np.uint8) + lm = landmarks(300, 700, brow, length=200, angle=angle) + image, moved, metadata = normalize_portrait(photo, lm, PROFILE) + h, w = image.shape[:2] + assert metadata["standard_crop"] is False + assert metadata["aspect_crop"] is True + assert metadata["status"] == "aspect_crop" + assert w*4 == h*3 + xy = moved[:, :2]*[w, h] + assert (xy >= -1e-7).all() and (xy <= [w-1+1e-7, h-1+1e-7]).all() + assert abs(xy[9, 0]-xy[152, 0]) < 1e-9 + assert np.linalg.norm(xy[152]-xy[9]) == pytest.approx(200) + assert image.min() == 127 + assert crop_fits(np.array(metadata["source_to_processed"]), (300, 700), (w, h)) + + +def test_tall_fallback_does_not_cut_face_that_cannot_fit_three_by_four(): + photo = np.full((700, 300, 3), 127, np.uint8) + image, moved, metadata = normalize_portrait(photo, landmarks(300, 700, (150, 100), length=450), PROFILE) + assert metadata["aspect_crop"] is False + assert metadata["status"] == "rotation_only" + assert image.shape == photo.shape + + +def test_reference_parameters_are_measured_after_straightening(): + photo = np.full((400, 300, 3), 127, np.uint8) + image, moved, profile = calibrate_reference(photo, landmarks(300, 400, (145, 140), angle=8)) + h, w = image.shape[:2] + assert w/h == .75 and w < 300 and h < 400 + assert profile["brow_9"]["x"] == pytest.approx(profile["chin_152"]["x"], abs=1e-9) + assert profile["brow_x_ratio"] == pytest.approx(moved[9, 0]) + assert profile["brow_y_ratio"] == pytest.approx(moved[9, 1]) + assert profile["reference_width_per_face_length"] == pytest.approx(w/100) + assert profile["reference_height_per_face_length"] == pytest.approx(h/100) + assert profile["width_per_face_length"] == 2.5 + assert profile["height_per_face_length"] == pytest.approx(3/.9) + assert image.min() == 127 + + +def test_default_crop_makes_face_ten_percent_smaller_than_three_l(): + photo = np.full((700, 600, 3), 127, np.uint8) + result, moved, metadata = normalize_portrait(photo, landmarks(600, 700, (300, 280), length=120)) + assert metadata["standard_crop"] is True + assert result.shape[:2] == (400, 300) + assert metadata["face_axis_length_px"] == pytest.approx(120) + assert metadata["height_per_face_length"] == pytest.approx(3/.9) + assert metadata["width_per_face_length"] == 2.5 + old_height = 3*120 + assert old_height/result.shape[0] == pytest.approx(.9) + + +def test_phone_orientation_is_applied_before_landmarks(): + image = Image.new("RGB", (120, 80), "white") + exif = Image.Exif(); exif[274] = 6 + buf = io.BytesIO(); image.save(buf, format="JPEG", exif=exif) + assert decode_portrait(buf.getvalue()).shape[:2] == (120, 80) diff --git a/tests/test_gateway_hairline_routes.py b/tests/test_gateway_hairline_routes.py new file mode 100644 index 0000000..96b8986 --- /dev/null +++ b/tests/test_gateway_hairline_routes.py @@ -0,0 +1,27 @@ +"""The legacy interface 5 and new interface 52 forward to separate worker paths.""" +import asyncio +import importlib + +import pytest +from starlette.requests import Request + + +@pytest.mark.parametrize("name,path", [ + ("hairline_generate", "/api/v1/hairline/generate"), + ("hairline_generate_52", "/api/v1/hairline/generate-52"), +]) +def test_distinct_hairline_forwarding(monkeypatch, name, path): + gateway = importlib.import_module("gateway.app") + request = Request({"type": "http", "method": "POST", "path": path, "headers": []}) + calls = [] + + async def proxy(actual_request, actual_path): + assert actual_request is request + calls.append(actual_path) + return {"forwarded_to": actual_path} + + monkeypatch.setattr(gateway, "_proxy", proxy) + endpoint = getattr(gateway, name) + assert next(route for route in gateway.app.routes if getattr(route, "path", None) == path).endpoint is endpoint + assert asyncio.run(endpoint(request)) == {"forwarded_to": path} + assert calls == [path] diff --git a/tests/test_gateway_nullable_images.py b/tests/test_gateway_nullable_images.py new file mode 100644 index 0000000..5493c3f --- /dev/null +++ b/tests/test_gateway_nullable_images.py @@ -0,0 +1,69 @@ +"""Nullable/deprecated worker images retain their documented gateway keys.""" +import asyncio +import json +from types import SimpleNamespace +from unittest.mock import AsyncMock + +import httpx +import pytest +from starlette.requests import Request + +from gateway.forward import rewrite_base64_to_url + + +def test_nullable_image_fields_keep_external_names(tmp_path): + value = {"hairline_images": [{"image_high_base64": None, "image_low_base64": None, + "grown_image_base64": None}], + "high_hairline_center_point": None, "face_measure": None} + actual = rewrite_base64_to_url(value, "https://example.test", str(tmp_path), rewrite_null_images=True) + assert actual == {"hairline_images": [{"image_high_url": None, "image_low_url": None, + "grown_image_url": None}], + "high_hairline_center_point": None, "face_measure": None} + assert not list(tmp_path.iterdir()) + + +def test_nonempty_images_still_rewrite_alongside_null_fields(tmp_path): + import base64 + import io + from PIL import Image + buf = io.BytesIO() + Image.new("RGBA", (2, 2), (255, 255, 255, 0)).save(buf, format="PNG") + value = {"image_middle_base64": base64.b64encode(buf.getvalue()).decode(), + "image_high_base64": None} + actual = rewrite_base64_to_url(value, "https://example.test", str(tmp_path), rewrite_null_images=True) + assert actual["image_middle_url"].startswith("https://example.test/static/annotations/") + assert actual["image_high_url"] is None + assert len(list(tmp_path.iterdir())) == 1 + + +def test_legacy_nullable_image_field_names_remain_unchanged(tmp_path): + value = {"hairline_images": [{"grown_image_base64": None}], "face_measure": None} + assert rewrite_base64_to_url(value, "https://example.test", str(tmp_path)) == value + assert not list(tmp_path.iterdir()) + + +@pytest.mark.parametrize("path,expected_key", [ + ("/api/v1/hairline/generate", "grown_image_base64"), + ("/api/v1/hairline/generate-52", "grown_image_url"), +]) +def test_proxy_rewrites_null_images_only_for_interface52(tmp_path, monkeypatch, path, expected_key): + import gateway.config as config + import gateway.forward as forward + + monkeypatch.setattr(config, "get_config", lambda: { + "dispatch": {"request_timeout_seconds": 10}, "shared_password": "test-token", + "public_base_url": "https://example.test", "static_dir": str(tmp_path), + }) + monkeypatch.setattr(forward, "acquire_worker", AsyncMock(return_value=SimpleNamespace(url="http://worker"))) + monkeypatch.setattr(forward, "release_worker", AsyncMock()) + worker_response = httpx.Response(200, json={"code": 0, "data": {"hairline_images": [ + {"grown_image_base64": None}]}}) + monkeypatch.setattr(forward, "get_client", lambda: SimpleNamespace(request=AsyncMock(return_value=worker_response))) + + async def receive(): + return {"type": "http.request", "body": b"", "more_body": False} + + request = Request({"type": "http", "method": "POST", "path": path, "headers": []}, receive) + response = asyncio.run(forward.proxy_request(request, path)) + assert response.status_code == 200 + assert json.loads(response.body)["data"]["hairline_images"] == [{expected_key: None}] diff --git a/tests/test_hairline_height.py b/tests/test_hairline_height.py new file mode 100644 index 0000000..bdd91e2 --- /dev/null +++ b/tests/test_hairline_height.py @@ -0,0 +1,91 @@ +"""Court-based design placement, including preview/inpaint consistency.""" +import cv2 +import numpy as np +import pytest + +from hairline.height_rule import ( + height_target, curve_center, place_curve, inpaint_from_curve, +) + + +def _landmarks(width=320, height=400): + lm = np.zeros((468, 3), np.float32) + for index, xy in {9: (160, 180), 94: (160, 260), 152: (160, 320), + 10: (160, 140), 21: (70, 170), 251: (250, 170)}.items(): + lm[index, :2] = np.array(xy) / [width, height] + return lm + + +def test_target_uses_mean_courts_without_old_estimation_ratio(): + rule = height_target(_landmarks(), 320, 400) + assert rule["middle_height_px"] == pytest.approx(80, abs=1e-4) + assert rule["lower_height_px"] == pytest.approx(60, abs=1e-4) + assert rule["target_upper_height_px"] == pytest.approx(70, abs=1e-4) + assert rule["target_center"]["y"] == pytest.approx(110, abs=1e-4) + + +def test_reference_uses_unrounded_measurement_and_scale(): + ref = {"brow_center": (161.4, 181.3), "nose_bottom": (160.0, 261.9), + "chin_tip": (160.0, 321.5), "px_per_cm": 20} + rule = height_target(_landmarks(), 320, 400, ref) + assert rule["target_upper_height_px"] == pytest.approx(70.1) + assert rule["target_center"]["y"] == pytest.approx(111.2) + assert rule["target_upper_height_cm"] == pytest.approx(3.505) + assert rule["measurement_source"] == "face_measure" + + +@pytest.mark.parametrize("scale", [1, 2]) +@pytest.mark.parametrize("center_y", [90, 125, 150]) +def test_all_shapes_align_to_same_height_at_multiple_scales(scale, center_y): + h, w = 400 * scale, 320 * scale + lm = _landmarks() + overlay = np.zeros((h, w, 4), np.float32) + # A non-horizontal design, preserving a relative 20px arc after movement. + pts = np.array([[70, center_y + 20], [160, center_y], [250, center_y + 20]]) * scale + cv2.polylines(overlay, [pts.astype(np.int32)], False, (255, 255, 255, 255), 3 * scale) + original = overlay.copy() + target = height_target(lm, w, h)["target_center"] + moved, placement = place_curve(overlay, target, lm) + assert abs(curve_center(moved, target["x"])["y"] - target["y"]) < .2 + assert placement["target_error_px"] < .2 + # Shape's relative heights stay constant after translation. + before_delta = curve_center(original, 100 * scale)["y"] - curve_center(original, 160 * scale)["y"] + after_delta = curve_center(moved, 100 * scale)["y"] - curve_center(moved, 160 * scale)["y"] + assert after_delta == pytest.approx(before_delta, abs=.1) + np.testing.assert_array_equal(overlay, original) + + +def test_rolled_face_preserves_curve_angle(): + lm = _landmarks() + lm[10, 0] -= .08 + overlay = np.zeros((400, 320, 4), np.float32) + cv2.line(overlay, (60, 95), (260, 135), (255, 255, 255, 255), 3) + moved, _ = place_curve(overlay, {"x": 160, "y": 150}, lm) + original_slope = curve_center(overlay, 200)["y"] - curve_center(overlay, 120)["y"] + moved_slope = curve_center(moved, 200)["y"] - curve_center(moved, 120)["y"] + assert moved_slope == pytest.approx(original_slope, abs=.2) + + +def test_inpaint_mask_follows_new_line_not_old_black_template(): + lm = _landmarks() + photo = np.full((400, 320, 3), 200, np.uint8) + parsing = np.ones((400, 320), np.int32) + overlay = np.zeros((400, 320, 4), np.float32) + cv2.line(overlay, (20, 140), (300, 140), (255, 255, 255, 255), 3) + moved, _ = place_curve(overlay, {"x": 160, "y": 100}, lm) + marked, mask = inpaint_from_curve(photo, lm, parsing, moved) + assert marked[100, 160, 0] == 0 + assert marked[140, 160, 0] == 200 + assert mask[90, 160] > 240 + assert mask[130, 160] < 10 + + +def test_out_of_frame_target_is_reported_instead_of_silent_clamping(): + ref = {"brow_center": (160, 50), "nose_bottom": (160, 200), "chin_tip": (160, 350)} + with pytest.raises(ValueError, match="超出图片"): + height_target(_landmarks(), 320, 400, ref) + + +def test_missing_midline_curve_is_reported(): + with pytest.raises(ValueError, match="有效曲线"): + place_curve(np.zeros((400, 320, 4), np.float32), {"x": 160, "y": 100}, _landmarks()) diff --git a/tests/test_ip_access.py b/tests/test_ip_access.py new file mode 100644 index 0000000..9ddad1a --- /dev/null +++ b/tests/test_ip_access.py @@ -0,0 +1,101 @@ +import json +from ipaddress import ip_address + +import pytest +from fastapi.testclient import TestClient +from starlette.requests import Request + +import ip_access as access + + +@pytest.fixture +def policy(tmp_path, monkeypatch): + path = tmp_path / "access.json" + path.write_text(json.dumps({"allowed_ips": []})) + monkeypatch.setattr(access, "CONFIG_PATH", path) + monkeypatch.setattr(access, "local_addresses", lambda: {ip_address("192.168.10.2"), ip_address("::1")}) + return path + + +def request(host, headers=None, port=50000): + return Request({"type": "http", "path": "/api/v1/hairline/generate-52", "scheme": "http", + "client": (host, port), "headers": [(k.encode(), v.encode()) for k, v in (headers or {}).items()]}) + + +@pytest.mark.parametrize("host", ["127.0.0.1", "::1", "::ffff:127.0.0.1", "192.168.10.2"]) +def test_only_actual_local_addresses_allowed_by_default(policy, host): + assert access.check_access(request(host))[0] + + +@pytest.mark.parametrize("host", ["203.0.113.9", "192.168.10.3", "0.0.0.0", "invalid"]) +def test_other_addresses_denied(policy, host): + assert not access.check_access(request(host))[0] + + +def test_whitelist_ipv4_ipv6_cidr_and_hot_reload(policy): + policy.write_text(json.dumps({"allowed_ips": ["203.0.113.9", "198.51.100.0/24", "2001:db8::/64"]})) + for host in ["203.0.113.9", "::ffff:203.0.113.9", "198.51.100.12", "2001:db8::12"]: + assert access.check_access(request(host))[0] + policy.write_text('{"allowed_ips": []}') + assert not access.check_access(request("203.0.113.9"))[0] + + +def test_configured_public_whitelist_is_exact(policy): + policy.write_text('{"allowed_ips": ["49.232.51.171"]}') + assert access.check_access(request("49.232.51.171"))[0] + assert not access.check_access(request("49.232.51.172"))[0] + + +@pytest.mark.parametrize("header", ["x-forwarded-for", "x-real-ip", "forwarded"]) +def test_forwarding_headers_cannot_override_socket_peer(policy, header): + assert not access.check_access(request("203.0.113.9", {header: "127.0.0.1"}))[0] + assert access.check_access(request("127.0.0.1", {header: "203.0.113.9"}))[0] + + +def test_gateway_is_allowed_independently_of_end_user_ip(policy): + policy.write_text('{"allowed_ips": ["49.232.51.171"]}') + assert access.check_access(request("49.232.51.171", {"x-forwarded-for": "203.0.113.9"}))[0] + assert not access.check_access(request("203.0.113.9", {"x-forwarded-for": "49.232.51.171"}))[0] + + +def test_rewritten_peer_or_invalid_policy_fail_closed(policy): + assert not access.check_access(request("127.0.0.1", port=0))[0] + policy.write_text('{"allowed_ips": ["not-an-ip"]}') + assert not access.check_access(request("127.0.0.1"))[0] + policy.write_text('invalid JSON') + assert not access.check_access(request("127.0.0.1"))[0] + + +def test_worker_guard_covers_all_interfaces_before_auth(policy, monkeypatch): + import app as worker + monkeypatch.setattr(worker, "ACCEPT_PASSWORDS", ["access-test"]) + headers = {"X-Internal-Token": "access-test"} + with TestClient(worker.app, client=("203.0.113.9", 50000)) as client: + assert client.post('/api/v1/hairline/generate-52').status_code == 403 + assert client.post('/api/v1/hairline/generate-52/', headers=headers).status_code == 403 + assert client.post('/api/v1/debug/hairline-height-compare').status_code == 403 + assert client.post('/api/v1/hairline/generate', headers=headers).status_code == 403 + assert client.post('/api/v1/face/measure', headers=headers).status_code == 403 + assert client.post('/api/v1/redraw', headers=headers).status_code == 403 + assert client.get('/health').status_code == 403 + assert client.get('/openapi.json').status_code == 403 + policy.write_text('{"allowed_ips": ["203.0.113.9"]}') + assert client.post('/api/v1/hairline/generate-52', headers=headers).json()['code'] == 1004 + assert client.post('/api/v1/hairline/generate-52').status_code == 401 + + +def test_gateway_does_not_apply_worker_ip_policy(policy, monkeypatch): + import importlib + gateway = importlib.import_module('gateway.app') + calls = [] + async def proxy(request, path): + calls.append(path) + return {'code': 0} + monkeypatch.setattr(gateway, '_proxy', proxy) + # Deliberately skip lifespan: no workers or configuration are needed. + client = TestClient(gateway.app, client=('203.0.113.9', 50000)) + assert client.post('/api/v1/hairline/generate-52').json()['code'] == 0 + assert client.post('/api/v1/hairline/generate').json()['code'] == 0 + assert client.post('/api/v1/hair/grow').json()['code'] == 0 + assert client.get('/static/test_interface52.html').status_code == 200 + assert calls == ['/api/v1/hairline/generate-52', '/api/v1/hairline/generate', '/api/v1/hair/grow']

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 literal 0 HcmV?d00001 diff --git a/static/hairline_height_compare.css b/static/hairline_height_compare.css new file mode 100644 index 0000000..570a3a7 --- /dev/null +++ b/static/hairline_height_compare.css @@ -0,0 +1,33 @@ +:root{font-family:Inter,"PingFang SC","Microsoft YaHei",system-ui,sans-serif;color:#1c2e33;background:#f2f5f4;font-synthesis:none;--teal:#087f83;--amber:#dd7d25;--muted:#64767b;--line:#dce4e2} +*{box-sizing:border-box}body{margin:0}main{max-width:1420px;padding:36px 32px 30px;margin:auto}button,input,select{font:inherit}button,a,select,input{touch-action:manipulation}button{cursor:pointer}a{color:inherit;text-decoration:none}h1,h2,h3,p{margin:0}h1{font-size:34px;line-height:1.4;font-weight:700;letter-spacing:-1px}h2{font-size:23px;line-height:1.5}p{color:var(--muted);font-size:14px;line-height:1.8}.eyebrow{font-size:12px;font-weight:700;letter-spacing:2px;color:var(--teal);margin-bottom:10px}.page-header{display:flex;justify-content:space-between;align-items:center;gap:24px;margin-bottom:28px}.page-header p{margin-top:10px}.button{border:1px solid var(--line);padding:11px 18px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;font-size:14px;font-weight:600;white-space:nowrap;background:white}.button:hover{border-color:#95b9b4}.button.primary{background:var(--teal);color:white;border-color:var(--teal)}.button:disabled{opacity:.55;cursor:wait}.rule-card{background:#e4f0eb;border:1px solid #c5ddd2;border-radius:13px;padding:24px 26px;display:flex;justify-content:space-between;gap:24px;align-items:center}.pill{font-size:11px;background:#c9e4d6;color:#205d49;border-radius:5px;display:inline-block;padding:3px 8px;margin-bottom:10px;font-weight:700}.rule-card h2{font-size:25px;color:#234e41}.rule-card p{margin-top:8px;color:#4d6f63}.rule-note{font-size:12px;color:#476259;line-height:2.1;flex-shrink:0}.dot{display:inline-block;width:9px;height:9px;border-radius:50%;vertical-align:middle;margin-right:7px}.dot.old{background:var(--amber)}.dot.new{background:var(--teal)}.dash{display:inline-block;width:18px;border-top:2px dashed #6b7780;margin-right:7px;vertical-align:middle}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:20px 0}.stats>div{background:white;border:1px solid var(--line);border-radius:10px;padding:17px 20px}.stats span,.stats small{display:block;font-size:12px;color:var(--muted)}.stats strong{display:block;font-size:27px;font-weight:650;line-height:1.7;font-variant-numeric:tabular-nums}.stats small{font-size:11px}.toolbar{display:flex;gap:15px;flex-wrap:wrap;align-items:end;background:white;border:1px solid var(--line);border-radius:10px;padding:16px 20px;position:sticky;top:0;z-index:3;box-shadow:0 4px 12px #173b2e05}.toolbar label,.custom-form label{display:flex;flex-direction:column;gap:7px;font-size:11px;color:var(--muted)}select{background:#fff;border:1px solid #cfdad7;border-radius:6px;padding:9px 30px 9px 10px;color:#263a3d;font-size:13px;min-height:37px;max-width:230px}.toolbar .check{flex-direction:row;align-items:center;font-size:12px;height:38px;gap:5px;white-space:nowrap}.check input{accent-color:var(--teal)}.segmented{display:flex;background:#f0f4f2;border-radius:7px;padding:3px}.segmented button{border:none;background:none;color:var(--muted);font-size:12px;padding:9px 12px;border-radius:5px}.segmented .active{background:white;color:var(--teal);box-shadow:0 1px 4px #153d2520;font-weight:700}.status{min-height:24px;margin:15px 0 10px;font-size:12px}.status.error{color:#b64831}.results{display:flex;flex-direction:column;gap:24px}.case-card{background:white;border:1px solid var(--line);border-radius:12px;overflow:hidden}.case-header{display:flex;justify-content:space-between;align-items:start;gap:12px;padding:18px 20px 12px}.case-header h3{font-size:16px;line-height:1.5}.case-header p{font-size:11px;margin-top:5px}.case-number{display:inline-block;font-size:10px;letter-spacing:.6px;color:var(--muted);margin-bottom:5px}.badge{font-size:11px;border:1px solid #cfe3da;color:#377252;background:#f1f8f4;padding:5px 8px;border-radius:5px;white-space:nowrap}.badge.warn{color:#a14f28;border-color:#f0d7c9;background:#fff5ec}.metric-line{display:flex;gap:12px;flex-wrap:wrap;padding:0 20px 14px;font-size:11px;color:#627175}.metric-line b{font-weight:600;color:#334e52}.image-pair{display:grid;grid-template-columns:1fr 1fr;gap:2px;background:#edf1ef}.image-pair.overlay{grid-template-columns:1fr}.image-pair figure{margin:0;background:#f6f8f7;min-width:0}.image-pair figcaption{padding:8px 13px;background:#fbfcfb;font-size:11px;font-weight:600}.image-pair figcaption.old{color:#a85c18}.image-pair figcaption.new{color:var(--teal)}canvas{display:block;width:100%;height:auto;min-height:100px}.case-bottom{padding:12px 20px;display:flex;justify-content:space-between;font-size:11px;color:#657878;border-top:1px solid #edf1ef}.case-bottom a{text-decoration:underline;text-underline-offset:3px}.error-card{padding:24px;background:#fff5ef;color:#a14f28;border:1px solid #edcfc0;border-radius:10px}.tools-card{background:white;padding:24px;border:1px solid var(--line);border-radius:12px;margin-top:26px}.tools-heading{display:flex;justify-content:space-between;align-items:center;gap:20px}.tools-heading h2{font-size:19px}.tools-heading p{margin-top:5px;font-size:12px}.custom-form{display:flex;align-items:end;gap:16px;flex-wrap:wrap;margin-top:20px;padding-top:20px;border-top:1px solid var(--line)}.custom-form input[type=file]{font-size:13px;color:#314a4a;max-width:100%}.footnote{font-size:11px;margin-top:20px;line-height:1.8}footer{color:#74877e;font-size:11px;text-align:center;padding:28px 0 0;line-height:2}.empty{padding:40px;text-align:center;grid-column:1/-1;color:var(--muted);border:1px dashed #b9cfc4;border-radius:12px}button:focus-visible,a:focus-visible,select:focus-visible,input:focus-visible{outline:3px solid #82bfb5;outline-offset:3px} +@media(min-width:1500px){.results{gap:24px}}@media(max-width:1050px){.results{grid-template-columns:1fr}.rule-card{align-items:start}.rule-note{font-size:11px}.stats>div{padding:14px}.toolbar{position:static}}@media(max-width:650px){main{padding:22px 14px}.page-header{align-items:start;flex-direction:column;gap:14px}h1{font-size:26px}.rule-card{padding:18px;flex-direction:column;gap:13px}.rule-card h2{font-size:20px}.stats{grid-template-columns:repeat(2,1fr);gap:9px}.stats strong{font-size:24px}.toolbar{gap:10px;padding:13px}.toolbar select{max-width:175px}.tools-heading{align-items:start;flex-direction:column}.custom-form{align-items:stretch;flex-direction:column}.custom-form select{max-width:100%}.case-header{padding:15px}.metric-line{padding:0 15px 12px;gap:8px}.case-bottom{padding:12px 15px;gap:10px;flex-wrap:wrap}.rule-note{line-height:1.9}.status{font-size:11px}} +.case-group-heading{grid-column:1/-1;font-size:20px;margin-top:12px;padding:12px 0 4px;border-top:1px solid var(--line);color:#284a43} +.case-group-heading:first-child{margin-top:0;border-top:0;padding-top:0} + +.person-row{min-width:0;background:#eaf0ed;border:1px solid var(--line);border-radius:12px;padding:16px} +.person-row-header{display:flex;justify-content:space-between;align-items:center;gap:14px;margin-bottom:14px;flex-wrap:wrap} +.person-row-header .case-group-heading{border:0;margin:0;padding:0;font-size:18px} +.row-controls{display:flex;align-items:center;gap:8px}.row-controls span{font-size:11px;color:var(--muted);margin-right:6px} +.row-controls button{width:34px;height:32px;border:1px solid #c8d9d1;background:#fff;color:var(--teal);border-radius:6px} +.row-controls button:disabled{opacity:.3;cursor:default} +.person-styles{display:flex;align-items:stretch;gap:14px;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x proximity;overscroll-behavior-x:contain;scrollbar-color:#8ba99b #dce7e0;scrollbar-width:auto;padding-bottom:14px} +.person-styles>.case-card{flex:0 0 min(440px,100%);width:min(440px,100%);scroll-snap-align:start} +@media(max-width:650px){.person-row{padding:12px}.person-row-header .case-group-heading{font-size:16px}.row-controls span{font-size:10px}} + +.person-row{--comparison-card-width:min(300px,calc((100vw - 80px)/2))} +.person-body{display:flex;gap:14px;align-items:flex-start;min-width:0} +.old-reference-card{flex:0 0 var(--comparison-card-width);width:var(--comparison-card-width);border:1px solid #e7d2b6;background:white;border-radius:12px;overflow:hidden} +.old-reference-card .case-header{min-height:110px}.old-reference-label{color:#a85c18;font-weight:650} +.person-body>.person-styles{flex:1;min-width:0} +.person-styles>.case-card{flex:0 0 var(--comparison-card-width);width:var(--comparison-card-width);cursor:pointer} +.person-styles>.case-card .case-header{min-height:110px} +.case-card.selected{border-color:#178d80;box-shadow:inset 0 0 0 1px #178d80} +.select-style{border:0;background:#edf7f2;color:#187164;padding:4px 7px;border-radius:4px;font-size:10px;white-space:nowrap} +.old-reference-card .case-bottom{font-size:10px;line-height:1.6} +.person-styles>.original-reference-card{flex:0 0 var(--comparison-card-width);width:var(--comparison-card-width);border:1px solid #bdccca;background:white;border-radius:12px;overflow:hidden;scroll-snap-align:start} +.original-reference-card .case-header{min-height:110px}.original-reference-label{color:#456267;font-weight:650}.original-reference-card img{display:block;width:100%;height:auto}.original-reference-card .case-bottom{font-size:10px;line-height:1.6} +.person-styles>.old-reference-card{position:sticky;left:0;z-index:1;scroll-snap-align:start} +.failed-reference-card{flex:0 0 var(--comparison-card-width);width:var(--comparison-card-width);padding:20px;border:1px solid #edcfc0;background:#fff5ef;color:#a14f28;border-radius:12px;scroll-snap-align:start}.failed-reference-card h3{font-size:15px;line-height:1.6}.failed-reference-card p{font-size:12px;color:#975a40;margin-top:12px;overflow-wrap:anywhere} +@media(max-width:650px){.person-body{gap:10px}.person-styles{gap:10px}.case-header{padding:12px}.case-header h3{font-size:14px}.metric-line{font-size:10px;padding-left:12px;padding-right:12px}.case-bottom{padding:10px 12px;flex-wrap:wrap}.person-row{--comparison-card-width:calc((100vw - 80px)/2)}} + +.framing-standard{margin-top:16px;padding:15px 20px;border:1px solid var(--line);background:white;border-radius:10px;color:#315c4e;font-size:13px}.framing-standard summary{cursor:pointer;font-weight:600}#framingStandard{display:flex;align-items:start;gap:24px;margin-top:16px}#framingStandard img{width:220px;max-width:40%;height:auto;border-radius:8px}#framingStandard strong{display:block;margin-bottom:10px}#framingStandard p{font-size:12px}.framing-info{font-size:11px;color:#45685a;line-height:1.9;margin:-4px 0 14px}.framing-info a{text-decoration:underline;margin-left:10px;white-space:nowrap}@media(max-width:650px){#framingStandard{flex-direction:column}#framingStandard img{max-width:100%;width:220px}} diff --git a/static/hairline_height_compare.js b/static/hairline_height_compare.js new file mode 100644 index 0000000..ebcae89 --- /dev/null +++ b/static/hairline_height_compare.js @@ -0,0 +1,254 @@ +"use strict"; +const $ = id => document.getElementById(id); +const styleNames = { + female: ["椭圆形", "花瓣形", "心形", "直线形", "波浪形", "大花瓣形", "古典花瓣形"], + male: ["椭圆形", "倒弧形", "M 型", "直线形", "心形", "柔和花瓣形", "波浪形"] +}; +let dataset = {groups: [], errors: []}, mode = "side", drawVersion = 0, busy = false, cardObserver = null; +const inputImages = new Map(); +const rowSelections = new Map(); +const esc = value => String(value).replace(/[&<>"']/g, c => ({"&":"&","<":"<",">":">",'"':""","'":"'"}[c])); +const fixed = (value, n = 2) => Number(value).toFixed(n); +const imageSource = (object, field, mime = "image/png") => object[field + "_url"] || window.resolveImgSrc(null, object[field + "_base64"], mime); +function status(text, error = false) { $("status").textContent = text; $("status").classList.toggle("error", error); } +function loadImage(src) { + return new Promise((resolve, reject) => { + const im = new Image(); + im.onload = () => resolve(im); im.onerror = () => reject(new Error("无法读取对比图片,请重新运行案例")); im.src = src; + }); +} +function inputImage(group) { + const src = imageSource(group, "input", "image/jpeg"); + if (!inputImages.has(src)) inputImages.set(src, loadImage(src)); + return inputImages.get(src); +} +function originalCard(group,caseName){ + const src=imageSource(group,"original","image/jpeg")||group.source_url||imageSource(group,"input","image/jpeg"); + const size=group.framing?.source_size||{width:group.width,height:group.height}; + const dimensions=size.width&&size.height?`width="${size.width}" height="${size.height}"`:""; + const sizeLabel=size.width&&size.height?`原尺寸 ${size.width}×${size.height}`:"完整上传图片"; + const panel=document.createElement("article");panel.className="original-reference-card"; + panel.innerHTML=`