diff --git a/.gitea/workflows/ci-base-image.yml b/.gitea/workflows/ci-base-image.yml new file mode 100644 index 000000000..fe3c443e9 --- /dev/null +++ b/.gitea/workflows/ci-base-image.yml @@ -0,0 +1,105 @@ +name: CI Base Image Build + +on: + push: + branches: + - develop + - main + paths: + - 'requirements-base.txt' + - 'requirements-dev.txt' + - 'infra/docker/ci.Dockerfile' + workflow_dispatch: + inputs: + reason: + description: "触发原因" + required: false + default: "手动触发 - ci-base 镜像重建" + +concurrency: + group: ci-base-image-build + cancel-in-progress: false + +jobs: + build-ci-base: + name: Build CI Base Image + runs-on: runtime-builder + timeout-minutes: 60 + steps: + - name: Checkout code + shell: sh + env: + GITHUB_TOKEN: ${{ github.token }} + run: | + curl -sH "Authorization: token $GITHUB_TOKEN" \ + "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/raw/scripts/ci/step_checkout.sh?ref=${GITHUB_SHA}" \ + | bash + + - name: Docker login to Gitea Registry + shell: sh + env: + GITEA_REGISTRY_USER: xiaoxia + GITEA_REGISTRY_TOKEN: ${{ secrets.REGISTRY_TOKEN }} + run: | + set -eu + for i in 1 2 3; do + echo "=== Docker login 尝试 $i/3 ===" + if docker login git.xiaoxiajianji.com -u "${GITEA_REGISTRY_USER}" -p "${GITEA_REGISTRY_TOKEN}"; then + echo "✅ Docker login successful" + break + fi + echo "❌ Docker login 失败(尝试 $i/3),5s 后重试..." + sleep 5 + done + + - name: Build and push CI base image + shell: sh + run: | + set -eu + IMAGE="git.xiaoxiajianji.com/xiaoxia/xiaoxia-saas/ci-base" + VERSION_TAG="deps-$(date +%Y%m%d-%H%M)-${GITHUB_SHA::8}" + + echo "=== Building CI base image (tags: latest, ${VERSION_TAG}) ===" + docker build --progress=plain \ + -f infra/docker/ci.Dockerfile \ + -t "${IMAGE}:latest" \ + -t "${IMAGE}:${VERSION_TAG}" \ + . + echo "✅ Image built successfully" + + echo "=== Pushing ${VERSION_TAG} ===" + docker push "${IMAGE}:${VERSION_TAG}" + echo "=== Pushing latest ===" + docker push "${IMAGE}:latest" + echo "✅ Pushed to Gitea Registry" + + - name: Verify image + shell: sh + run: | + set -eu + IMAGE="git.xiaoxiajianji.com/xiaoxia/xiaoxia-saas/ci-base:latest" + echo "=== Verifying pinned deps in fresh image ===" + docker run --rm "${IMAGE}" /opt/xiaoxia-ci-venv/bin/python -c \ + "import httpcore, h2, numpy, httpx; print('VERSIONS:', httpcore.__version__, h2.__version__, numpy.__version__, httpx.__version__)" + + - name: Notify result + if: always() + continue-on-error: true + shell: sh + env: + CI_NOTIFY_WEBHOOK: ${{ secrets.CI_NOTIFY_WEBHOOK }} + run: | + set +e + if [ "${{ job.status }}" = "success" ]; then + NOTIFY_MODE=success JOB_NAME="CI Base Image Build" python3 scripts/ci_notify.py + else + NOTIFY_MODE=failure JOB_NAME="CI Base Image Build" python3 scripts/ci_notify.py + fi + + - name: Cleanup + if: always() + shell: sh + run: | + IMAGE="git.xiaoxiajianji.com/xiaoxia/xiaoxia-saas/ci-base" + docker rmi "${IMAGE}:latest" 2>/dev/null || true + echo "Cleanup done" diff --git a/.gitea/workflows/pr-auto-scan.yml b/.gitea/workflows/pr-auto-scan.yml index f362e74de..684258415 100644 --- a/.gitea/workflows/pr-auto-scan.yml +++ b/.gitea/workflows/pr-auto-scan.yml @@ -3,7 +3,7 @@ name: PR Auto Scan # 作为短作业模式的兜底,防止事件驱动遗漏 on: schedule: - - cron: "*/10 * * * *" # 每10分钟扫描一次(脚本自带240s墙钟上限,降频减负) + - cron: "*/15 * * * *" # 每10分钟扫描一次(脚本自带240s墙钟上限,降频减负) workflow_dispatch: permissions: diff --git a/apps/api/app/api/routes/templates_editor/clips.py b/apps/api/app/api/routes/templates_editor/clips.py index 59ce092e6..98dcee836 100755 --- a/apps/api/app/api/routes/templates_editor/clips.py +++ b/apps/api/app/api/routes/templates_editor/clips.py @@ -23,6 +23,10 @@ import re from app.auth import AuthenticatedUser, get_current_user from app.core.storage import get_storage_service from app.dependencies import get_asset_repository, get_db_session + +# 默认转场时长(与 worker 端保持一致) +_DEFAULT_TRANSITION_DURATION = 0.5 + from app.services.asset_segment_tracker import ( REUSE_RATIO_LIMIT, SEGMENT_EDGE_GAP, @@ -43,7 +47,14 @@ from packages.adapters.sqlalchemy_impl.template_clip_config_repository import ( from packages.adapters.sqlalchemy_impl.template_repository import ( SQLAlchemyTemplateRepository, ) -from packages.domain.plan_generator_utils import _calc_random_start_time +from packages.domain.plan_generator_utils import ( + _calc_random_start_time, + build_scene_segments, + extract_scene_points_from_metadata, + pick_scene_aware_start, + pick_start_in_scene_segment, +) +from packages.domain.smart_match import SCORE_RANDOM_NOISE_MAX, score_asset from packages.shared.mediakit_client import get_mediakit_client from .dependencies import get_draft_plan_id, get_editor_services @@ -470,6 +481,12 @@ def _recommended_time_conflicts( return False +# 向后兼容别名:镜头段构建/段内取点逻辑已下沉到 packages.domain.plan_generator_utils, +# 旧测试与历史代码仍按 clips._build_scene_segments / _pick_start_in_scene_segment 导入 +_build_scene_segments = build_scene_segments +_pick_start_in_scene_segment = pick_start_in_scene_segment + + def _get_mediakit_recommendations( asset_ids: list[str], asset_repo, @@ -582,6 +599,47 @@ def _get_mediakit_recommendations( return {} +def _calc_plan_internal_duplicate_rate(clips_data: list[dict]) -> float: + """估算单条成片内部重复率(%). + + 检查本条成片中同一素材是否有重叠的时间区间。 + 重叠时长 / 成片总时长 * 100 = 内部重复率。 + 这是一个轻量估算,不依赖视频指纹;完整查重由 worker 异步完成。 + """ + if not clips_data: + return 0.0 + + # 按素材分组 + by_asset: dict[str, list[tuple[float, float]]] = {} + total_duration = 0.0 + for c in clips_data: + aid = c.get("asset_id", "") + if not aid: + continue + start = c.get("start_time", 0.0) + end = start + c.get("duration", 0.0) + by_asset.setdefault(aid, []).append((start, end)) + total_duration += c.get("duration", 0.0) + + if total_duration <= 0: + return 0.0 + + # 检查同素材内的区间重叠 + overlap_duration = 0.0 + for segments in by_asset.values(): + if len(segments) < 2: + continue + segments_sorted = sorted(segments, key=lambda s: s[0]) + last_end = segments_sorted[0][1] + for start, end in segments_sorted[1:]: + overlap = max(0.0, min(end, last_end) - start) + if overlap > 0: + overlap_duration += overlap + last_end = max(last_end, end) + + return round(overlap_duration / total_duration * 100, 1) + + @router.post("/clips/from-assets", response_model=ClipsFromAssetsResponse) def create_clips_from_assets_editor( template_id: str, @@ -626,10 +684,26 @@ def create_clips_from_assets_editor( # 2. 获取素材实际时长(去重查询) unique_asset_ids = list(dict.fromkeys(asset_ids)) asset_durations: dict[str, float] = {} + asset_smart_scores: dict[str, float] = {} + # 素材 metadata 中缓存的场景切换点(由后台 MediaKit SceneChange 检测写入): + # 有缓存时片段起点从随机镜头段中选取(不同片段来自不同镜头),无缓存回退随机起点 + asset_scene_points: dict[str, list[float]] = {} for asset_id in unique_asset_ids: asset = asset_repo.get(asset_id) if asset and hasattr(asset, "duration"): asset_durations[asset_id] = float(asset.duration or 0.0) + # 计算 smart_match 综合评分,用于候选排序 + smart_score, _ = score_asset(asset) + asset_smart_scores[asset_id] = smart_score + # 读取场景切换点缓存(新素材未检测过时为 None,走随机起点兜底) + cached_points = extract_scene_points_from_metadata(getattr(asset, "metadata", None)) + if cached_points: + asset_scene_points[asset_id] = cached_points + logger.info( + "from-assets 场景缓存命中: %d/%d 个素材有场景切换点", + len(asset_scene_points), + len(unique_asset_ids), + ) # 3. 在内存中计算所有片段数据(使用随机起始时间,不调用MediaKit) # 读取素材 metadata 中持久化的历史已用区间(跨任务/跨调用去重), @@ -662,19 +736,52 @@ def create_clips_from_assets_editor( return False return reused_durations.get(aid, 0.0) / assigned > REUSE_RATIO_LIMIT - for i, (_seg_order, dur_min, dur_max) in enumerate(segments): + # 素材耗尽标志:某轮循环中所有素材均被跳过时为 True + all_assets_exhausted = False + + # 计算转场重叠补偿:每个 clip 需要额外增加的时长 + # 目标:渲染后视频总时长 = 模板设定的各片段时长之和 + # 公式:每 clip 增加 (n_segments - 1) * td / n_segments + n_segments = len(segments) + if n_segments > 1: + transition_compensation = (n_segments - 1) * _DEFAULT_TRANSITION_DURATION / n_segments + else: + transition_compensation = 0.0 + + # 打乱 segments 的处理顺序(分配素材的顺序随机化),但最终 clips_data 按原始 order 排序 + shuffled_indices = list(range(len(segments))) + random.shuffle(shuffled_indices) + + for idx in shuffled_indices: + _seg_order, dur_min, dur_max = segments[idx] # 在 segment 的 duration_min ~ duration_max 之间随机取值(保留一位小数) raw_duration = random.uniform(dur_min, dur_max) + # 加上转场补偿,确保最终输出时长 = 模板设定总时长 + raw_duration += transition_compensation - # 轮询分配素材:跳过时长缺失、复用占比已超 15% 阈值的素材; + # 贪心分配素材:按"已使用次数"升序排列候选素材(使用最少的优先), + # 同次数随机打散,避免"A-B-C-D"的固定组合反复出现。 + # 跳过时长缺失、复用占比已超 10% 阈值的素材; # 选中后计算起点,若该素材可用区间耗尽且复用被闸门拒绝(calc 返回 None), - # 继续轮询下一个素材 + # 继续尝试下一个素材 asset_id = "" clip_duration = 0.0 start_time: float | None = None - n_assets = len(asset_ids) - for offset in range(n_assets): - candidate = asset_ids[(i + offset) % n_assets] + # 动态按使用次数排序:优先选使用最少的素材,同次数随机打散 + asset_use_counts = {aid: len(used_segments.get(aid, [])) for aid in asset_ids} + # 排序键:smart_match 评分(注入随机噪声)→ 使用次数 → 纯随机。 + # 噪声让得分接近的素材排名每次浮动,避免同一批素材反复选出相同组合, + # 从素材组合层面降低成片查重率;分差 > SCORE_RANDOM_NOISE_MAX 时排名稳定, + # 质量差距显著的素材仍保持优先级。 + sorted_candidates = sorted( + asset_ids, + key=lambda aid: ( + -(asset_smart_scores.get(aid, 0.0) + random.uniform(0.0, SCORE_RANDOM_NOISE_MAX)), + asset_use_counts.get(aid, 0), + random.random(), + ), + ) + for candidate in sorted_candidates: candidate_total = asset_durations.get(candidate, 0.0) if candidate_total <= 0: continue @@ -688,16 +795,30 @@ def create_clips_from_assets_editor( candidate, ) continue - # 随机起始时间(不调用 MediaKit,保证接口快速返回);100 次避不开 - # 历史区间时走受控复用回调(复用片段累加 reused_durations,回调内部 - # 预判复用后占比超 15% 则拒绝并返回 None) - candidate_start = _calc_random_start_time( - candidate, - candidate_duration, - asset_durations, - used_segments, - on_exhausted=reuse_cb, - ) + # 起始时间选取(不调用 MediaKit,保证接口快速返回): + # 1) 素材有场景切换点缓存时,优先从随机镜头段中选起点(不同片段来自不同镜头, + # 画面内容本质不同),与 used_segments 做冲突避让(含 1.5s 边缘间隙) + # 2) 无缓存 / 镜头段全冲突 → _calc_random_start_time 随机起点兜底; + # 100 次避不开历史区间时走受控复用回调(复用片段累加 reused_durations, + # 回调内部预判复用后占比超 10% 则拒绝并返回 None) + candidate_start = None + if candidate in asset_scene_points: + candidate_start = pick_scene_aware_start( + candidate, + candidate_duration, + asset_durations, + asset_scene_points, + used_segments, + edge_gap=SEGMENT_EDGE_GAP, + ) + if candidate_start is None: + candidate_start = _calc_random_start_time( + candidate, + candidate_duration, + asset_durations, + used_segments, + on_exhausted=reuse_cb, + ) if candidate_start is None: # 该素材可用区间耗尽且复用被闸门/use_count 上限拒绝 → 尝试下一素材 logger.info( @@ -712,6 +833,7 @@ def create_clips_from_assets_editor( if not asset_id or start_time is None: # 所有素材时长缺失、复用占比超阈值,或区间耗尽且复用被拒 → 素材可切区间不足 + all_assets_exhausted = True raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail="素材可切区间不足,请补充新素材", @@ -727,7 +849,7 @@ def create_clips_from_assets_editor( clips_data.append( { - "order": i, + "order": _seg_order, "asset_id": asset_id, "start_time": start_time, "duration": clip_duration, @@ -735,6 +857,9 @@ def create_clips_from_assets_editor( } ) + # 按原始 segment order 排序,确保 clips_data 的 order 字段有序(0,1,2,3...) + clips_data.sort(key=lambda c: c["order"]) + # 4. 事务性替换:清空旧片段 → 创建新片段 → 标记ready(单事务,失败自动回滚) created_count = plan_svc.replace_all_clips_transactional(plan_id, clips_data) @@ -754,11 +879,31 @@ def create_clips_from_assets_editor( unique_asset_ids, ) - # 6. 立即返回响应 + # 6. 估算成片内部重复率(本条成片中同一素材的重叠片段时长占比) + dup_rate = _calc_plan_internal_duplicate_rate(clips_data) + duplicate_warning = None + if dup_rate > 50: + duplicate_warning = f"查重率 {dup_rate:.1f}% 超过50%,建议更换素材或模板" + logger.warning( + "from-assets 成片查重率超标: plan_id=%s dup_rate=%.1f%%", + plan_id, + dup_rate, + ) + + # 7. 素材耗尽提示 + exhaustion_warning = None + if all_assets_exhausted and created_count < len(segments): + exhaustion_warning = ( + "素材可切区间不足,部分片段使用了复用素材。" "建议:1) 补充更多素材到素材库 2) 使用不同的素材组合生成" + ) + + # 8. 立即返回响应 return ClipsFromAssetsResponse( created_count=created_count, plan_id=plan_id, clip_ids=[], + duplicate_warning=duplicate_warning, + exhaustion_warning=exhaustion_warning, ) @@ -766,7 +911,15 @@ def _update_mediakit_recommendations_async( # pragma: no cover plan_id: str, asset_ids: list[str], ) -> None: - """后台任务:调用 MediaKit 智能选片并更新片段的起始时间. + """后台任务:使用 SceneChange 智能选帧并更新片段的起始时间. + + 优先使用 SceneChange 策略检测视频镜头切换点,将每个素材按镜头段拆分, + 各片段优先从不同镜头段中选取起始时间,实现「不同片段展示不同场景」的效果。 + + 降级策略: + 1. SceneChange 优先 → detect_scene_changes 内部已含 TimeInterval 降级 + 2. 若 detect_scene_changes 仍返回 None → 回退到旧的 analyze_videos 方式 + 3. 所有方式都失败 → 保持现有随机 start_time,不影响视频生成 此函数在后台异步执行,不影响接口响应时间。 失败时静默处理,不影响已创建的片段。 @@ -788,12 +941,6 @@ def _update_mediakit_recommendations_async( # pragma: no cover asset_repo = SQLAlchemyAssetRepository(db) plan_svc = EditPlanService(db) - # 调用 MediaKit 获取推荐时间 - recommendations = _get_mediakit_recommendations(asset_ids, asset_repo) - if not recommendations: - logger.info("后台任务: MediaKit 无推荐结果,跳过更新") - return - # 查询该 plan 的所有片段(分批获取,避免硬编码 limit 截断) batch_size = 500 all_clips = [] @@ -816,15 +963,16 @@ def _update_mediakit_recommendations_async( # pragma: no cover unique_asset_ids = list({getattr(c, "asset_id", "") or "" for c in clips} - {""}) assets_map: dict[str, object] = {a.id: a for a in asset_repo.find_by_ids(unique_asset_ids)} - # 按 asset_id 预分组片段时间段(消除 O(N^2) 嵌套循环) - clips_by_asset: dict[str, list[tuple[str, float, float]]] = defaultdict(list) + # 按 asset_id 预分组片段对象(按 order 排序,保证按模板顺序分配镜头段) + clips_by_asset: dict[str, list] = defaultdict(list) for clip in clips: aid = getattr(clip, "asset_id", "") or "" - if aid and clip.start_time is not None: - clips_by_asset[aid].append((clip.id, clip.start_time, clip.start_time + clip.duration)) + if aid: + clips_by_asset[aid].append(clip) + for aid in clips_by_asset: + clips_by_asset[aid].sort(key=lambda c: c.order) - # 读取素材全部历史已用区间(跨任务/跨 plan 持久化记录): - # MediaKit 挪点必须与随机选片一样避让历史区间,否则会把片段挪回已用过的画面 + # 读取素材全部历史已用区间(跨任务/跨 plan 持久化记录) historical_segments = get_used_segments(db, unique_asset_ids) # 已更新的片段ID(用于排除已移动的旧时间段) @@ -833,16 +981,22 @@ def _update_mediakit_recommendations_async( # pragma: no cover updated_segments: dict[str, list[tuple[float, float]]] = {} updated_count = 0 - # 遍历片段,按 asset_id 匹配推荐时间 - for clip in clips: - asset_id = getattr(clip, "asset_id", "") or "" - if not asset_id or asset_id not in recommendations: + # 尝试获取存储服务(用于生成视频 URL) + try: + storage = get_storage_service() + except Exception: + logger.warning("后台任务: 获取存储服务失败,跳过 SceneChange 更新") + return + + # 获取 MediaKit 客户端 + client = get_mediakit_client() + + # 对每个素材,检测场景切换点并分配镜头段 + for asset_id in unique_asset_ids: + asset_clips = clips_by_asset.get(asset_id, []) + if not asset_clips: continue - recommended_start = recommendations[asset_id] - clip_duration = clip.duration - - # 从预加载字典获取素材(O(1) 查找) asset = assets_map.get(asset_id) if not asset: continue @@ -850,89 +1004,177 @@ def _update_mediakit_recommendations_async( # pragma: no cover if asset_total <= 0: continue - # 推荐时间 + 片段时长不能超过素材总时长 - if recommended_start + clip_duration > asset_total: - logger.info( - "后台任务: 推荐时间越界,跳过: asset_id=%s recommended=%.2f duration=%.1f total=%.1f", - asset_id, - recommended_start, - clip_duration, - asset_total, - ) - continue - - # 构建排除当前片段及已更新片段后的占用列表(O(M),M=同素材片段数) - other_segments: list[tuple[float, float]] = [ - (cs, ce) - for cid, cs, ce in clips_by_asset.get(asset_id, []) - if cid != clip.id and cid not in updated_clip_ids - ] - other_segments.extend(updated_segments.get(asset_id, [])) - - # 并入该素材全部历史已用区间(含其他 plan/其他任务),set 去重: - # 本 plan 片段创建时已写入历史记录 - # 并入该素材全部历史已用区间(含其他 plan/其他任务)。 - # set 去重前先归一化精度(round 3 位),避免浮点尾差导致逻辑相同的 - # 区间(如 1.0 与 1.0000000001)被误判为不同区间 - def _norm(segs): - return {(round(float(a), 3), round(float(b), 3)) for a, b in segs} - - other_segments = list(_norm(other_segments) | _norm(historical_segments.get(asset_id, []))) - - # 检查推荐时间是否与同 plan 片段或历史已用区间冲突(含 0.3s 边缘间隙): - # 冲突时放弃该推荐、保留原随机起点(不硬挪到已用过的画面) - if _recommended_time_conflicts(recommended_start, clip_duration, other_segments): - logger.info( - "后台任务: 推荐时间与同片/历史区间冲突,保留原起点: asset_id=%s recommended=%.2f", - asset_id, - recommended_start, - ) - continue - - # 逐个更新并捕获异常(单点失败不影响其他片段) - try: - old_start = clip.start_time - old_end = old_start + clip_duration - # MediaKit 移动片段起点 + 同步素材 metadata 区间记录放在同一事务: - # 删旧区间记录(按 plan_id + 旧 start 匹配,兼容无 plan_id 的旧数据)、 - # 写新区间,最后统一 commit;任一步失败整体 rollback, - # 保证 clip.start_time 与 metadata.used_time_ranges 不出现不一致。 - plan_svc.update_clip(clip.id, start_time=recommended_start) + # 获取素材视频 URL + video_url: str | None = None + storage_key = getattr(asset, "storage_key", None) or "" + mime = getattr(asset, "mime_type", "") or "" + if storage_key and mime.startswith("video/"): try: - if remove_used_segment(db, asset_id, old_start, old_end, plan_id=plan_id): - record_used_segments( - db, - asset_id, - recommended_start, - recommended_start + clip_duration, - plan_id, - ) - except Exception as me: - logger.warning( - "后台任务: 同步素材区间记录失败,回滚本次片段更新: clip_id=%s error=%s", - clip.id, - me, + video_url = storage.get_download_url(storage_key) + except Exception as e: + logger.warning("后台任务: 获取素材URL失败: asset_id=%s error=%s", asset_id, e) + + # 构建该素材的占用区间列表(排除已更新片段) + def _get_other_segments(asset_id_inner, clip_id_inner): + segs: list[tuple[float, float]] = [] + for c in clips_by_asset.get(asset_id_inner, []): + cid = c.id + if cid != clip_id_inner and cid not in updated_clip_ids: + segs.append((c.start_time, c.start_time + c.duration)) + segs.extend(updated_segments.get(asset_id_inner, [])) + + # 并入历史已用区间 + def _norm(segs_in): + return {(round(float(a), 3), round(float(b), 3)) for a, b in segs_in} + + return list(_norm(segs) | _norm(historical_segments.get(asset_id_inner, []))) + + # 优先使用 SceneChange 策略 + scene_segments: list[tuple[float, float]] = [] + # 先查素材 metadata 中的场景点缓存:命中则直接复用,跳过 MediaKit 检测 + # (缓存由本任务首次检测后写入,跨任务/跨 plan 复用) + cached_points = extract_scene_points_from_metadata(getattr(asset, "metadata", None)) + if cached_points: + scene_segments = build_scene_segments(cached_points, asset_total) + logger.info( + "后台任务: 命中场景点缓存: asset_id=%s scenes=%d", + asset_id, + len(scene_segments), + ) + + if not scene_segments and client.is_available and video_url: + scene_changes = client.detect_scene_changes(video_url) + if scene_changes is not None: + scene_segments = build_scene_segments(scene_changes, asset_total) + logger.info( + "后台任务: 素材场景检测完成: asset_id=%s scenes=%d", + asset_id, + len(scene_segments), ) - db.rollback() - continue - db.commit() - updated_count += 1 - updated_clip_ids.add(clip.id) - except Exception as ue: - logger.warning("后台任务: 单个片段更新失败: clip_id=%s error=%s", clip.id, ue) - try: - db.rollback() - except Exception: - pass + # 检测结果写入素材 metadata 缓存:首次生成用随机起点, + # 检测完成后后续生成的渲染前同步路径即可读缓存选镜头段 + try: + existing_meta = dict(getattr(asset, "metadata", None) or {}) + existing_meta["scene_change_points"] = scene_changes + asset.metadata = existing_meta + asset_repo.update(asset) + logger.info( + "后台任务: 场景点已写入素材缓存: asset_id=%s points=%d", + asset_id, + len(scene_changes), + ) + except Exception as cache_err: + # 缓存写入失败不影响本次片段更新 + logger.warning( + "后台任务: 场景点缓存写入失败: asset_id=%s error=%s", + asset_id, + cache_err, + ) + + # SceneChange 未获得有效结果 → 尝试 analyze_videos 作为 fallback + if not scene_segments and video_url: + fallback_recs = _get_mediakit_recommendations([asset_id], asset_repo) + if fallback_recs and asset_id in fallback_recs: + # analyze_videos 只返回单个推荐点,转为单镜头段 + rec_start = fallback_recs[asset_id] + scene_segments = [(rec_start, asset_total)] + logger.info( + "后台任务: 使用 analyze_videos fallback: asset_id=%s start=%.2f", + asset_id, + rec_start, + ) + + if not scene_segments: + # 所有方式都失败 → 保持现有随机 start_time + logger.info( + "后台任务: SceneChange 与 analyze_videos 均无结果,保持随机起点: asset_id=%s", + asset_id, + ) continue - updated_segments.setdefault(asset_id, []).append((recommended_start, recommended_start + clip_duration)) - logger.info( - "后台任务: 更新片段起始时间: clip_id=%s asset_id=%s start_time=%.2f", - clip.id, - asset_id, - recommended_start, - ) + # 为每个片段分配不同的镜头段 + scene_segments_pool = list(scene_segments) # 可消费的镜头段池 + for clip in asset_clips: + clip_duration = clip.duration + recommended_start: float | None = None + + # 从镜头段池中依次尝试,选一个不冲突的 + for seg_idx, (seg_start, seg_end) in enumerate(scene_segments_pool): + candidate_start = pick_start_in_scene_segment(seg_start, seg_end, clip_duration) + if candidate_start is None: + continue # 镜头段太短,跳过 + + # 检查越界 + if candidate_start + clip_duration > asset_total: + continue + + # 检查与已用区间冲突 + other_segs = _get_other_segments(asset_id, clip.id) + if _recommended_time_conflicts(candidate_start, clip_duration, other_segs): + continue + + recommended_start = candidate_start + # 消费该镜头段(从池中移除,下一个片段用不同镜头段) + scene_segments_pool.pop(seg_idx) + break + + if recommended_start is None: + # 镜头段用完或都冲突 → 尝试 _calc_random_start_time 兜底 + used_segs_for_calc: dict[str, list[tuple[float, float]]] = { + asset_id: _get_other_segments(asset_id, clip.id) + } + fallback_start = _calc_random_start_time( + asset_id, + clip_duration, + {asset_id: asset_total}, + used_segs_for_calc, + ) + if fallback_start is None: + continue # 完全无法分配,保持原起点 + recommended_start = fallback_start + + # 更新片段起始时间 + try: + old_start = clip.start_time + old_end = old_start + clip_duration + + plan_svc.update_clip(clip.id, start_time=recommended_start) + try: + if remove_used_segment(db, asset_id, old_start, old_end, plan_id=plan_id): + record_used_segments( + db, + asset_id, + recommended_start, + recommended_start + clip_duration, + plan_id, + ) + except Exception as me: + logger.warning( + "后台任务: 同步素材区间记录失败,回滚本次片段更新: clip_id=%s error=%s", + clip.id, + me, + ) + db.rollback() + continue + db.commit() + updated_count += 1 + updated_clip_ids.add(clip.id) + updated_segments.setdefault(asset_id, []).append( + (recommended_start, recommended_start + clip_duration) + ) + logger.info( + "后台任务: 更新片段起始时间(场景选帧): clip_id=%s asset_id=%s start_time=%.2f", + clip.id, + asset_id, + recommended_start, + ) + except Exception as ue: + logger.warning("后台任务: 单个片段更新失败: clip_id=%s error=%s", clip.id, ue) + try: + db.rollback() + except Exception: + pass + continue logger.info("后台任务完成: plan_id=%s 成功更新 %d 个片段", plan_id, updated_count) diff --git a/apps/api/app/api/routes/templates_editor/schemas.py b/apps/api/app/api/routes/templates_editor/schemas.py index 8d4f036b9..5757c8866 100755 --- a/apps/api/app/api/routes/templates_editor/schemas.py +++ b/apps/api/app/api/routes/templates_editor/schemas.py @@ -189,6 +189,8 @@ class ClipsFromAssetsResponse(BaseModel): plan_id: str = "" message: str = "" clip_ids: List[str] = Field(default_factory=list, description="创建的片段ID列表") + duplicate_warning: Optional[str] = Field(default=None, description="查重率超标警告") + exhaustion_warning: Optional[str] = Field(default=None, description="素材耗尽警告") # ── 封面配置 ──────────────────────────────────────────────────────────────── diff --git a/apps/api/app/services/asset_segment_tracker.py b/apps/api/app/services/asset_segment_tracker.py index 06b7273c6..c9122bb02 100644 --- a/apps/api/app/services/asset_segment_tracker.py +++ b/apps/api/app/services/asset_segment_tracker.py @@ -3,7 +3,7 @@ 在素材 metadata(assets.classification_result JSON)中持久化已使用的片段时间区间, 供 from-assets 创建片段时避开历史区间,实现跨任务/跨调用的片段去重; 素材可用区间耗尽后进入受控复用:允许有限次数(MAX_RANGE_USE_COUNT)复用最久未用 -的历史区间,配合调用方的成片复用占比控制(MAX_REUSE_RATIO = 15%),把任意两条 +的历史区间,配合调用方的成片复用占比控制(MAX_REUSE_RATIO = 10%),把任意两条 成片的画面重复率控制在阈值内。 metadata 中的记录字段 ``used_time_ranges``:: @@ -40,14 +40,14 @@ logger = logging.getLogger(__name__) USED_RANGES_KEY = "used_time_ranges" # ── 受控复用配置常量 ───────────────────────────────────────────────────────── -MAX_RANGE_USE_COUNT = 3 +MAX_RANGE_USE_COUNT = 2 """单条历史区间最多被使用次数(含首次),达到后不再参与复用。""" -REUSE_RATIO_LIMIT = 0.15 -"""单条成片中,单个素材的复用片段累计时长 / 该素材在成片中的总时长上限(15%)。 +REUSE_RATIO_LIMIT = 0.10 +"""单条成片中,单个素材的复用片段累计时长 / 该素材在成片中的总时长上限(10%)。 超过则该素材不再分配新片段(调用方在轮询分配时跳过)。""" -SEGMENT_EDGE_GAP = 0.3 +SEGMENT_EDGE_GAP = 1.5 """冲突判定边缘间隙(秒):历史区间按 [start-gap, end+gap] 扩边后参与冲突检测, 避免两条片段首尾紧贴导致画面观感重复;记录仍存实际值。""" @@ -397,12 +397,12 @@ def make_reuse_callback( db: SQLAlchemy session asset_durations: 素材 ID -> 总时长(回调需要素材总时长做边界约束) reused_tracker: 可选的 ``{asset_id: 累计复用时长}``,回调成功返回复用区间时 - 会把本次片段时长累加进去,供调用方统计成片复用占比(15% 阈值)。 + 会把本次片段时长累加进去,供调用方统计成片复用占比(10% 阈值)。 assigned_tracker: 可选的 ``{asset_id: 已分配片段总时长}``,配合 ratio_limit 在复用前预判:若复用本片段后占比 (reused + clip_duration) / (assigned + clip_duration) 超过 ratio_limit,则拒绝复用、返回 None (保证成片复用占比不超阈值)。 - ratio_limit: 单条成片复用时长占比上限,默认 15%。 + ratio_limit: 单条成片复用时长占比上限,默认 10%。 Returns: 回调函数 ``(asset_id, clip_duration) -> (start, end) | None``。 diff --git a/apps/api/app/services/plan_generator_service.py b/apps/api/app/services/plan_generator_service.py index 12b1c0015..de0b9b938 100755 --- a/apps/api/app/services/plan_generator_service.py +++ b/apps/api/app/services/plan_generator_service.py @@ -13,6 +13,7 @@ from __future__ import annotations import logging +import random from typing import Any, List from sqlalchemy.orm import Session @@ -29,9 +30,11 @@ from packages.domain.editing_mode import EditingMode from packages.domain.plan_generator_utils import ( create_clips_from_configs, distribute_assets, + extract_scene_points_from_metadata, generate_default_clips, map_clip_types_for_mode, ) +from packages.domain.smart_match import SCORE_RANDOM_NOISE_MAX, score_asset from packages.domain.template_clip_config import TemplateClipConfig logger = logging.getLogger(__name__) @@ -218,16 +221,64 @@ class PlanGeneratorService: ) -> None: """按 editing_mode 将素材分配到 clips(就地修改,未持久化). - 委托给 plan_generator_utils.distribute_assets 纯函数。 + 先用 smart_match 评分对素材排序(高分优先),再委托给 + plan_generator_utils.distribute_assets 纯函数完成分配。 """ + # 预览随机模式:素材顺序已 shuffle,纯随机起点即可,不读 DB 评分/缓存 + asset_scene_points: dict[str, list[float]] = {} + if not random_selection: + # 正式生成:smart_match 评分排序(高分优先)+ 场景切换点缓存 + if self._asset_repo: + asset_ids = self._sort_assets_by_smart_score(asset_ids) + # 读取素材 metadata 中的场景切换点缓存(后台 SceneChange 检测写入): + # 有缓存的素材片段起点从随机镜头段选取,无缓存走随机起点兜底 + asset_scene_points = self._fetch_asset_scene_points(asset_ids) + distribute_assets( clips, asset_ids, editing_mode, random_selection=random_selection, asset_durations=asset_durations, + asset_scene_points=asset_scene_points, ) + def _fetch_asset_scene_points(self, asset_ids: List[str]) -> dict[str, list[float]]: + """从素材 metadata 读取场景切换点缓存(无缓存的素材不包含在结果中)。""" + points_map: dict[str, list[float]] = {} + if not self._asset_repo: + return points_map + for asset_id in asset_ids: + asset = self._asset_repo.get(asset_id) + if asset: + points = extract_scene_points_from_metadata(getattr(asset, "metadata", None)) + if points: + points_map[asset_id] = points + return points_map + + def _sort_assets_by_smart_score(self, asset_ids: List[str]) -> List[str]: + """按 smart_match 综合评分降序排列素材 ID(注入随机噪声)。 + + 评分高的素材(质量好、时长合适、新鲜、使用次数少)倾向排在前面; + 排序时给每个素材的得分注入 0~SCORE_RANDOM_NOISE_MAX 的随机噪声, + 使得分接近的素材排名每次浮动,避免一键生成反复选出相同素材组合, + 从素材组合层面降低成片查重率。分差大于噪声上限时排名保持稳定。 + """ + scored: list[tuple[str, float]] = [] + for asset_id in asset_ids: + asset = self._asset_repo.get(asset_id) + if asset: + score, _ = score_asset(asset) + scored.append((asset_id, score)) + else: + scored.append((asset_id, 0.0)) + # 评分 + 随机噪声后按降序排列 + scored.sort( + key=lambda x: x[1] + random.uniform(0.0, SCORE_RANDOM_NOISE_MAX), + reverse=True, + ) + return [aid for aid, _ in scored] + def _fetch_asset_durations(self, asset_ids: List[str]) -> dict[str, float]: """从数据库获取素材时长信息. diff --git a/apps/web/.tscache/tsconfig.tsbuildinfo b/apps/web/.tscache/tsconfig.tsbuildinfo new file mode 100644 index 000000000..4f4e339f1 --- /dev/null +++ b/apps/web/.tscache/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2016.intl.d.ts","../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/@types/react/global.d.ts","../node_modules/csstype/index.d.ts","../node_modules/@types/prop-types/index.d.ts","../node_modules/@types/react/index.d.ts","../node_modules/@types/react/jsx-runtime.d.ts","../node_modules/@types/react-dom/client.d.ts","../node_modules/@remix-run/router/dist/history.d.ts","../node_modules/@remix-run/router/dist/utils.d.ts","../node_modules/@remix-run/router/dist/router.d.ts","../node_modules/@remix-run/router/dist/index.d.ts","../node_modules/react-router/dist/lib/context.d.ts","../node_modules/react-router/dist/lib/components.d.ts","../node_modules/react-router/dist/lib/hooks.d.ts","../node_modules/react-router/dist/lib/deprecations.d.ts","../node_modules/react-router/dist/index.d.ts","../node_modules/react-router-dom/dist/dom.d.ts","../node_modules/react-router-dom/dist/index.d.ts","../node_modules/@tanstack/query-core/build/modern/_tsup-dts-rollup.d.ts","../node_modules/@tanstack/query-core/build/modern/index.d.ts","../node_modules/@tanstack/react-query/build/modern/_tsup-dts-rollup.d.ts","../node_modules/@tanstack/react-query/build/modern/index.d.ts","../node_modules/antd/es/_util/responsiveObserver.d.ts","../node_modules/antd/es/_util/type.d.ts","../node_modules/antd/es/_util/throttleByAnimationFrame.d.ts","../node_modules/antd/es/affix/index.d.ts","../node_modules/rc-util/lib/Portal.d.ts","../node_modules/rc-util/lib/Dom/scrollLocker.d.ts","../node_modules/rc-util/lib/PortalWrapper.d.ts","../node_modules/rc-dialog/lib/IDialogPropTypes.d.ts","../node_modules/rc-dialog/lib/DialogWrap.d.ts","../node_modules/rc-dialog/lib/Dialog/Content/Panel.d.ts","../node_modules/rc-dialog/lib/index.d.ts","../node_modules/antd/es/_util/aria-data-attrs.d.ts","../node_modules/antd/es/_util/hooks/useClosable.d.ts","../node_modules/antd/es/_util/hooks/useForceUpdate.d.ts","../node_modules/antd/es/_util/hooks/useMergeSemantic.d.ts","../node_modules/antd/es/_util/hooks/useMultipleSelect.d.ts","../node_modules/antd/es/_util/hooks/usePatchElement.d.ts","../node_modules/antd/es/_util/hooks/useProxyImperativeHandle.d.ts","../node_modules/antd/es/_util/hooks/useSyncState.d.ts","../node_modules/antd/es/_util/hooks/useZIndex.d.ts","../node_modules/antd/es/_util/hooks/index.d.ts","../node_modules/antd/es/alert/Alert.d.ts","../node_modules/antd/es/alert/ErrorBoundary.d.ts","../node_modules/antd/es/alert/index.d.ts","../node_modules/antd/es/anchor/AnchorLink.d.ts","../node_modules/antd/es/anchor/Anchor.d.ts","../node_modules/antd/es/anchor/index.d.ts","../node_modules/antd/es/message/interface.d.ts","../node_modules/antd/es/config-provider/SizeContext.d.ts","../node_modules/antd/es/button/button-group.d.ts","../node_modules/antd/es/button/buttonHelpers.d.ts","../node_modules/antd/es/button/button.d.ts","../node_modules/antd/es/_util/warning.d.ts","../node_modules/rc-field-form/lib/namePathType.d.ts","../node_modules/rc-field-form/lib/useForm.d.ts","../node_modules/rc-field-form/lib/interface.d.ts","../node_modules/rc-picker/lib/generate/index.d.ts","../node_modules/rc-motion/es/interface.d.ts","../node_modules/rc-motion/es/CSSMotion.d.ts","../node_modules/rc-motion/es/util/diff.d.ts","../node_modules/rc-motion/es/CSSMotionList.d.ts","../node_modules/rc-motion/es/context.d.ts","../node_modules/rc-motion/es/index.d.ts","../node_modules/@rc-component/trigger/lib/interface.d.ts","../node_modules/@rc-component/trigger/lib/index.d.ts","../node_modules/rc-picker/lib/interface.d.ts","../node_modules/rc-picker/lib/PickerInput/Selector/RangeSelector.d.ts","../node_modules/rc-picker/lib/PickerInput/RangePicker.d.ts","../node_modules/rc-picker/lib/PickerInput/SinglePicker.d.ts","../node_modules/rc-picker/lib/PickerPanel/index.d.ts","../node_modules/rc-picker/lib/index.d.ts","../node_modules/rc-field-form/lib/Field.d.ts","../node_modules/rc-field-form/es/namePathType.d.ts","../node_modules/rc-field-form/es/useForm.d.ts","../node_modules/rc-field-form/es/interface.d.ts","../node_modules/rc-field-form/es/Field.d.ts","../node_modules/rc-field-form/es/List.d.ts","../node_modules/rc-field-form/es/Form.d.ts","../node_modules/rc-field-form/es/FormContext.d.ts","../node_modules/rc-field-form/es/FieldContext.d.ts","../node_modules/rc-field-form/es/ListContext.d.ts","../node_modules/rc-field-form/es/useWatch.d.ts","../node_modules/rc-field-form/es/index.d.ts","../node_modules/rc-field-form/lib/Form.d.ts","../node_modules/antd/es/grid/col.d.ts","../node_modules/compute-scroll-into-view/dist/index.d.ts","../node_modules/scroll-into-view-if-needed/dist/index.d.ts","../node_modules/antd/es/form/interface.d.ts","../node_modules/antd/es/form/hooks/useForm.d.ts","../node_modules/antd/es/form/Form.d.ts","../node_modules/antd/es/form/FormItemInput.d.ts","../node_modules/rc-tooltip/lib/placements.d.ts","../node_modules/rc-tooltip/lib/Tooltip.d.ts","../node_modules/@ant-design/cssinjs/lib/Cache.d.ts","../node_modules/@ant-design/cssinjs/lib/hooks/useGlobalCache.d.ts","../node_modules/@ant-design/cssinjs/lib/util/css-variables.d.ts","../node_modules/@ant-design/cssinjs/lib/extractStyle.d.ts","../node_modules/@ant-design/cssinjs/lib/theme/interface.d.ts","../node_modules/@ant-design/cssinjs/lib/theme/Theme.d.ts","../node_modules/@ant-design/cssinjs/lib/hooks/useCacheToken.d.ts","../node_modules/@ant-design/cssinjs/lib/hooks/useCSSVarRegister.d.ts","../node_modules/@ant-design/cssinjs/lib/Keyframes.d.ts","../node_modules/@ant-design/cssinjs/lib/linters/interface.d.ts","../node_modules/@ant-design/cssinjs/lib/linters/contentQuotesLinter.d.ts","../node_modules/@ant-design/cssinjs/lib/linters/hashedAnimationLinter.d.ts","../node_modules/@ant-design/cssinjs/lib/linters/legacyNotSelectorLinter.d.ts","../node_modules/@ant-design/cssinjs/lib/linters/logicalPropertiesLinter.d.ts","../node_modules/@ant-design/cssinjs/lib/linters/NaNLinter.d.ts","../node_modules/@ant-design/cssinjs/lib/linters/parentSelectorLinter.d.ts","../node_modules/@ant-design/cssinjs/lib/linters/index.d.ts","../node_modules/@ant-design/cssinjs/lib/transformers/interface.d.ts","../node_modules/@ant-design/cssinjs/lib/StyleContext.d.ts","../node_modules/@ant-design/cssinjs/lib/hooks/useStyleRegister.d.ts","../node_modules/@ant-design/cssinjs/lib/theme/calc/calculator.d.ts","../node_modules/@ant-design/cssinjs/lib/theme/calc/CSSCalculator.d.ts","../node_modules/@ant-design/cssinjs/lib/theme/calc/NumCalculator.d.ts","../node_modules/@ant-design/cssinjs/lib/theme/calc/index.d.ts","../node_modules/@ant-design/cssinjs/lib/theme/createTheme.d.ts","../node_modules/@ant-design/cssinjs/lib/theme/ThemeCache.d.ts","../node_modules/@ant-design/cssinjs/lib/theme/index.d.ts","../node_modules/@ant-design/cssinjs/lib/transformers/legacyLogicalProperties.d.ts","../node_modules/@ant-design/cssinjs/lib/transformers/px2rem.d.ts","../node_modules/@ant-design/cssinjs/lib/util/index.d.ts","../node_modules/@ant-design/cssinjs/lib/index.d.ts","../node_modules/antd/es/theme/interface/presetColors.d.ts","../node_modules/antd/es/theme/interface/seeds.d.ts","../node_modules/antd/es/theme/interface/maps/colors.d.ts","../node_modules/antd/es/theme/interface/maps/font.d.ts","../node_modules/antd/es/theme/interface/maps/size.d.ts","../node_modules/antd/es/theme/interface/maps/style.d.ts","../node_modules/antd/es/theme/interface/maps/index.d.ts","../node_modules/antd/es/theme/interface/alias.d.ts","../node_modules/@ant-design/cssinjs-utils/lib/interface/components.d.ts","../node_modules/@ant-design/cssinjs-utils/lib/interface/index.d.ts","../node_modules/@ant-design/cssinjs-utils/lib/util/calc/calculator.d.ts","../node_modules/@ant-design/cssinjs-utils/lib/hooks/useCSP.d.ts","../node_modules/@ant-design/cssinjs-utils/lib/hooks/usePrefix.d.ts","../node_modules/@ant-design/cssinjs-utils/lib/hooks/useToken.d.ts","../node_modules/@ant-design/cssinjs-utils/lib/util/genStyleUtils.d.ts","../node_modules/@ant-design/cssinjs-utils/lib/util/calc/CSSCalculator.d.ts","../node_modules/@ant-design/cssinjs-utils/lib/util/calc/NumCalculator.d.ts","../node_modules/@ant-design/cssinjs-utils/lib/util/calc/index.d.ts","../node_modules/@ant-design/cssinjs-utils/lib/util/statistic.d.ts","../node_modules/@ant-design/cssinjs-utils/lib/index.d.ts","../node_modules/antd/es/theme/themes/shared/genFontSizes.d.ts","../node_modules/antd/es/theme/themes/default/theme.d.ts","../node_modules/antd/es/theme/context.d.ts","../node_modules/antd/es/theme/useToken.d.ts","../node_modules/antd/es/theme/util/genStyleUtils.d.ts","../node_modules/antd/es/theme/util/genPresetColor.d.ts","../node_modules/antd/es/theme/util/useResetIconStyle.d.ts","../node_modules/antd/es/theme/internal.d.ts","../node_modules/antd/es/_util/wave/style.d.ts","../node_modules/antd/es/affix/style/index.d.ts","../node_modules/antd/es/alert/style/index.d.ts","../node_modules/antd/es/anchor/style/index.d.ts","../node_modules/antd/es/app/style/index.d.ts","../node_modules/antd/es/avatar/style/index.d.ts","../node_modules/antd/es/back-top/style/index.d.ts","../node_modules/antd/es/badge/style/index.d.ts","../node_modules/antd/es/breadcrumb/style/index.d.ts","../node_modules/antd/es/button/style/token.d.ts","../node_modules/antd/es/button/style/index.d.ts","../node_modules/antd/es/input/style/token.d.ts","../node_modules/antd/es/select/style/token.d.ts","../node_modules/antd/es/style/roundedArrow.d.ts","../node_modules/antd/es/date-picker/style/token.d.ts","../node_modules/antd/es/date-picker/style/panel.d.ts","../node_modules/antd/es/date-picker/style/index.d.ts","../node_modules/antd/es/calendar/style/index.d.ts","../node_modules/antd/es/card/style/index.d.ts","../node_modules/antd/es/carousel/style/index.d.ts","../node_modules/antd/es/cascader/style/index.d.ts","../node_modules/antd/es/checkbox/style/index.d.ts","../node_modules/antd/es/collapse/style/index.d.ts","../node_modules/antd/es/color-picker/style/index.d.ts","../node_modules/antd/es/descriptions/style/index.d.ts","../node_modules/antd/es/divider/style/index.d.ts","../node_modules/antd/es/drawer/style/index.d.ts","../node_modules/antd/es/style/placementArrow.d.ts","../node_modules/antd/es/dropdown/style/index.d.ts","../node_modules/antd/es/empty/style/index.d.ts","../node_modules/antd/es/flex/style/index.d.ts","../node_modules/antd/es/float-button/style/index.d.ts","../node_modules/antd/es/form/style/index.d.ts","../node_modules/antd/es/grid/style/index.d.ts","../node_modules/antd/es/image/style/index.d.ts","../node_modules/antd/es/input-number/style/token.d.ts","../node_modules/antd/es/input-number/style/index.d.ts","../node_modules/antd/es/input/style/index.d.ts","../node_modules/antd/es/layout/style/index.d.ts","../node_modules/antd/es/list/style/index.d.ts","../node_modules/antd/es/mentions/style/index.d.ts","../node_modules/antd/es/menu/style/index.d.ts","../node_modules/antd/es/message/style/index.d.ts","../node_modules/antd/es/modal/style/index.d.ts","../node_modules/antd/es/notification/style/index.d.ts","../node_modules/antd/es/pagination/style/index.d.ts","../node_modules/antd/es/popconfirm/style/index.d.ts","../node_modules/antd/es/popover/style/index.d.ts","../node_modules/antd/es/progress/style/index.d.ts","../node_modules/antd/es/qr-code/style/index.d.ts","../node_modules/antd/es/radio/style/index.d.ts","../node_modules/antd/es/rate/style/index.d.ts","../node_modules/antd/es/result/style/index.d.ts","../node_modules/antd/es/segmented/style/index.d.ts","../node_modules/antd/es/select/style/index.d.ts","../node_modules/antd/es/skeleton/style/index.d.ts","../node_modules/antd/es/slider/style/index.d.ts","../node_modules/antd/es/space/style/index.d.ts","../node_modules/antd/es/spin/style/index.d.ts","../node_modules/antd/es/statistic/style/index.d.ts","../node_modules/antd/es/steps/style/index.d.ts","../node_modules/antd/es/switch/style/index.d.ts","../node_modules/antd/es/table/style/index.d.ts","../node_modules/antd/es/tabs/style/index.d.ts","../node_modules/antd/es/tag/style/index.d.ts","../node_modules/antd/es/timeline/style/index.d.ts","../node_modules/antd/es/tooltip/style/index.d.ts","../node_modules/antd/es/tour/style/index.d.ts","../node_modules/antd/es/transfer/style/index.d.ts","../node_modules/antd/es/tree/style/index.d.ts","../node_modules/antd/es/tree-select/style/index.d.ts","../node_modules/antd/es/typography/style/index.d.ts","../node_modules/antd/es/upload/style/index.d.ts","../node_modules/antd/es/splitter/style/index.d.ts","../node_modules/antd/es/theme/interface/components.d.ts","../node_modules/antd/es/theme/interface/cssinjs-utils.d.ts","../node_modules/antd/es/theme/interface/index.d.ts","../node_modules/antd/es/_util/colors.d.ts","../node_modules/antd/es/_util/getRenderPropValue.d.ts","../node_modules/antd/es/_util/placements.d.ts","../node_modules/antd/es/tooltip/PurePanel.d.ts","../node_modules/antd/es/tooltip/index.d.ts","../node_modules/antd/es/form/FormItemLabel.d.ts","../node_modules/antd/es/form/hooks/useFormItemStatus.d.ts","../node_modules/antd/es/form/FormItem/index.d.ts","../node_modules/antd/es/_util/statusUtils.d.ts","../node_modules/dayjs/locale/types.d.ts","../node_modules/dayjs/locale/index.d.ts","../node_modules/dayjs/index.d.ts","../node_modules/antd/es/time-picker/index.d.ts","../node_modules/antd/es/date-picker/generatePicker/interface.d.ts","../node_modules/antd/es/button/index.d.ts","../node_modules/antd/es/date-picker/generatePicker/index.d.ts","../node_modules/antd/es/empty/index.d.ts","../node_modules/rc-pagination/lib/Options.d.ts","../node_modules/rc-pagination/lib/interface.d.ts","../node_modules/rc-pagination/lib/Pagination.d.ts","../node_modules/rc-pagination/lib/index.d.ts","../node_modules/rc-virtual-list/lib/Filler.d.ts","../node_modules/rc-virtual-list/lib/interface.d.ts","../node_modules/rc-virtual-list/lib/utils/CacheMap.d.ts","../node_modules/rc-virtual-list/lib/hooks/useScrollTo.d.ts","../node_modules/rc-virtual-list/lib/ScrollBar.d.ts","../node_modules/rc-virtual-list/lib/List.d.ts","../node_modules/rc-select/lib/interface.d.ts","../node_modules/rc-select/lib/BaseSelect/index.d.ts","../node_modules/rc-select/lib/OptGroup.d.ts","../node_modules/rc-select/lib/Option.d.ts","../node_modules/rc-select/lib/Select.d.ts","../node_modules/rc-select/lib/hooks/useBaseProps.d.ts","../node_modules/rc-select/lib/index.d.ts","../node_modules/antd/es/_util/motion.d.ts","../node_modules/antd/es/select/index.d.ts","../node_modules/antd/es/pagination/Pagination.d.ts","../node_modules/antd/es/popconfirm/index.d.ts","../node_modules/antd/es/popconfirm/PurePanel.d.ts","../node_modules/rc-table/lib/constant.d.ts","../node_modules/rc-table/lib/namePathType.d.ts","../node_modules/rc-table/lib/interface.d.ts","../node_modules/rc-table/lib/Footer/Row.d.ts","../node_modules/rc-table/lib/Footer/Cell.d.ts","../node_modules/rc-table/lib/Footer/Summary.d.ts","../node_modules/rc-table/lib/Footer/index.d.ts","../node_modules/rc-table/lib/sugar/Column.d.ts","../node_modules/rc-table/lib/sugar/ColumnGroup.d.ts","../node_modules/@rc-component/context/lib/Immutable.d.ts","../node_modules/rc-table/lib/Table.d.ts","../node_modules/rc-table/lib/utils/legacyUtil.d.ts","../node_modules/rc-table/lib/VirtualTable/index.d.ts","../node_modules/rc-table/lib/index.d.ts","../node_modules/rc-checkbox/es/index.d.ts","../node_modules/antd/es/checkbox/Checkbox.d.ts","../node_modules/antd/es/checkbox/GroupContext.d.ts","../node_modules/antd/es/checkbox/Group.d.ts","../node_modules/antd/es/checkbox/index.d.ts","../node_modules/rc-menu/lib/interface.d.ts","../node_modules/rc-menu/lib/Menu.d.ts","../node_modules/rc-menu/lib/MenuItem.d.ts","../node_modules/rc-menu/lib/SubMenu/index.d.ts","../node_modules/rc-menu/lib/MenuItemGroup.d.ts","../node_modules/rc-menu/lib/context/PathContext.d.ts","../node_modules/rc-menu/lib/Divider.d.ts","../node_modules/rc-menu/lib/index.d.ts","../node_modules/antd/es/menu/interface.d.ts","../node_modules/antd/es/layout/Sider.d.ts","../node_modules/antd/es/menu/MenuContext.d.ts","../node_modules/antd/es/menu/menu.d.ts","../node_modules/antd/es/menu/MenuDivider.d.ts","../node_modules/antd/es/menu/MenuItem.d.ts","../node_modules/antd/es/menu/SubMenu.d.ts","../node_modules/antd/es/menu/index.d.ts","../node_modules/antd/es/dropdown/dropdown.d.ts","../node_modules/antd/es/dropdown/dropdown-button.d.ts","../node_modules/antd/es/dropdown/index.d.ts","../node_modules/antd/es/pagination/index.d.ts","../node_modules/antd/es/table/hooks/useSelection.d.ts","../node_modules/antd/es/spin/index.d.ts","../node_modules/antd/es/table/InternalTable.d.ts","../node_modules/antd/es/table/interface.d.ts","../node_modules/@rc-component/tour/es/placements.d.ts","../node_modules/@rc-component/tour/es/hooks/useTarget.d.ts","../node_modules/@rc-component/tour/es/TourStep/DefaultPanel.d.ts","../node_modules/@rc-component/tour/es/interface.d.ts","../node_modules/@rc-component/tour/es/Tour.d.ts","../node_modules/@rc-component/tour/es/index.d.ts","../node_modules/antd/es/tour/interface.d.ts","../node_modules/antd/es/transfer/interface.d.ts","../node_modules/antd/es/transfer/ListBody.d.ts","../node_modules/antd/es/transfer/list.d.ts","../node_modules/antd/es/transfer/operation.d.ts","../node_modules/antd/es/transfer/search.d.ts","../node_modules/antd/es/transfer/index.d.ts","../node_modules/rc-upload/lib/interface.d.ts","../node_modules/antd/es/progress/progress.d.ts","../node_modules/antd/es/progress/index.d.ts","../node_modules/antd/es/upload/interface.d.ts","../node_modules/antd/es/locale/useLocale.d.ts","../node_modules/antd/es/locale/index.d.ts","../node_modules/antd/es/_util/wave/interface.d.ts","../node_modules/antd/es/badge/Ribbon.d.ts","../node_modules/antd/es/badge/ScrollNumber.d.ts","../node_modules/antd/es/badge/index.d.ts","../node_modules/rc-tabs/lib/hooks/useIndicator.d.ts","../node_modules/rc-tabs/lib/TabNavList/index.d.ts","../node_modules/rc-tabs/lib/TabPanelList/TabPane.d.ts","../node_modules/rc-dropdown/lib/placements.d.ts","../node_modules/rc-dropdown/lib/Dropdown.d.ts","../node_modules/rc-tabs/lib/interface.d.ts","../node_modules/rc-tabs/lib/Tabs.d.ts","../node_modules/rc-tabs/lib/index.d.ts","../node_modules/antd/es/tabs/TabPane.d.ts","../node_modules/antd/es/tabs/index.d.ts","../node_modules/antd/es/card/Card.d.ts","../node_modules/antd/es/card/Grid.d.ts","../node_modules/antd/es/card/Meta.d.ts","../node_modules/antd/es/card/index.d.ts","../node_modules/rc-cascader/lib/Panel.d.ts","../node_modules/rc-cascader/lib/utils/commonUtil.d.ts","../node_modules/rc-cascader/lib/Cascader.d.ts","../node_modules/rc-cascader/lib/index.d.ts","../node_modules/antd/es/cascader/Panel.d.ts","../node_modules/antd/es/cascader/index.d.ts","../node_modules/rc-collapse/es/interface.d.ts","../node_modules/rc-collapse/es/Collapse.d.ts","../node_modules/rc-collapse/es/index.d.ts","../node_modules/antd/es/collapse/CollapsePanel.d.ts","../node_modules/antd/es/collapse/Collapse.d.ts","../node_modules/antd/es/collapse/index.d.ts","../node_modules/antd/es/date-picker/index.d.ts","../node_modules/antd/es/descriptions/DescriptionsContext.d.ts","../node_modules/antd/es/descriptions/Item.d.ts","../node_modules/antd/es/descriptions/index.d.ts","../node_modules/@rc-component/portal/es/Portal.d.ts","../node_modules/@rc-component/portal/es/mock.d.ts","../node_modules/@rc-component/portal/es/index.d.ts","../node_modules/rc-drawer/lib/DrawerPanel.d.ts","../node_modules/rc-drawer/lib/inter.d.ts","../node_modules/rc-drawer/lib/DrawerPopup.d.ts","../node_modules/rc-drawer/lib/Drawer.d.ts","../node_modules/rc-drawer/lib/index.d.ts","../node_modules/antd/es/drawer/DrawerPanel.d.ts","../node_modules/antd/es/drawer/index.d.ts","../node_modules/antd/es/flex/interface.d.ts","../node_modules/antd/es/float-button/interface.d.ts","../node_modules/antd/es/input/Group.d.ts","../node_modules/rc-input/lib/utils/commonUtils.d.ts","../node_modules/rc-input/lib/utils/types.d.ts","../node_modules/rc-input/lib/interface.d.ts","../node_modules/rc-input/lib/BaseInput.d.ts","../node_modules/rc-input/lib/Input.d.ts","../node_modules/rc-input/lib/index.d.ts","../node_modules/antd/es/input/Input.d.ts","../node_modules/antd/es/input/OTP/index.d.ts","../node_modules/antd/es/input/Password.d.ts","../node_modules/antd/es/input/Search.d.ts","../node_modules/rc-textarea/lib/interface.d.ts","../node_modules/rc-textarea/lib/TextArea.d.ts","../node_modules/rc-textarea/lib/ResizableTextArea.d.ts","../node_modules/rc-textarea/lib/index.d.ts","../node_modules/antd/es/input/TextArea.d.ts","../node_modules/antd/es/input/index.d.ts","../node_modules/@rc-component/mini-decimal/es/interface.d.ts","../node_modules/@rc-component/mini-decimal/es/BigIntDecimal.d.ts","../node_modules/@rc-component/mini-decimal/es/NumberDecimal.d.ts","../node_modules/@rc-component/mini-decimal/es/MiniDecimal.d.ts","../node_modules/@rc-component/mini-decimal/es/numberUtil.d.ts","../node_modules/@rc-component/mini-decimal/es/index.d.ts","../node_modules/rc-input-number/es/InputNumber.d.ts","../node_modules/rc-input-number/es/index.d.ts","../node_modules/antd/es/input-number/index.d.ts","../node_modules/antd/es/grid/row.d.ts","../node_modules/antd/es/grid/index.d.ts","../node_modules/antd/es/list/Item.d.ts","../node_modules/antd/es/list/context.d.ts","../node_modules/antd/es/list/index.d.ts","../node_modules/rc-mentions/lib/Option.d.ts","../node_modules/rc-mentions/lib/util.d.ts","../node_modules/rc-mentions/lib/Mentions.d.ts","../node_modules/antd/es/mentions/index.d.ts","../node_modules/antd/es/modal/Modal.d.ts","../node_modules/antd/es/modal/PurePanel.d.ts","../node_modules/antd/es/modal/index.d.ts","../node_modules/antd/es/notification/interface.d.ts","../node_modules/antd/es/popover/PurePanel.d.ts","../node_modules/antd/es/popover/index.d.ts","../node_modules/rc-slider/lib/interface.d.ts","../node_modules/rc-slider/lib/Handles/Handle.d.ts","../node_modules/rc-slider/lib/Handles/index.d.ts","../node_modules/rc-slider/lib/Marks/index.d.ts","../node_modules/rc-slider/lib/Slider.d.ts","../node_modules/rc-slider/lib/context.d.ts","../node_modules/rc-slider/lib/index.d.ts","../node_modules/antd/es/slider/index.d.ts","../node_modules/antd/es/space/Compact.d.ts","../node_modules/antd/es/space/Addon.d.ts","../node_modules/antd/es/space/context.d.ts","../node_modules/antd/es/space/index.d.ts","../node_modules/antd/es/table/Column.d.ts","../node_modules/antd/es/table/ColumnGroup.d.ts","../node_modules/antd/es/table/Table.d.ts","../node_modules/antd/es/table/index.d.ts","../node_modules/antd/es/tag/CheckableTag.d.ts","../node_modules/antd/es/tag/index.d.ts","../node_modules/rc-tree/lib/interface.d.ts","../node_modules/rc-tree/lib/contextTypes.d.ts","../node_modules/rc-tree/lib/DropIndicator.d.ts","../node_modules/rc-tree/lib/NodeList.d.ts","../node_modules/rc-tree/lib/Tree.d.ts","../node_modules/rc-tree-select/lib/interface.d.ts","../node_modules/rc-tree-select/lib/TreeNode.d.ts","../node_modules/rc-tree-select/lib/utils/strategyUtil.d.ts","../node_modules/rc-tree-select/lib/TreeSelect.d.ts","../node_modules/rc-tree-select/lib/index.d.ts","../node_modules/rc-tree/lib/TreeNode.d.ts","../node_modules/rc-tree/lib/index.d.ts","../node_modules/antd/es/tree/Tree.d.ts","../node_modules/antd/es/tree/DirectoryTree.d.ts","../node_modules/antd/es/tree/index.d.ts","../node_modules/antd/es/tree-select/index.d.ts","../node_modules/rc-upload/lib/AjaxUploader.d.ts","../node_modules/rc-upload/lib/Upload.d.ts","../node_modules/rc-upload/lib/index.d.ts","../node_modules/antd/es/upload/Upload.d.ts","../node_modules/antd/es/upload/Dragger.d.ts","../node_modules/antd/es/upload/index.d.ts","../node_modules/antd/es/config-provider/defaultRenderEmpty.d.ts","../node_modules/antd/es/config-provider/context.d.ts","../node_modules/antd/es/config-provider/hooks/useConfig.d.ts","../node_modules/antd/es/config-provider/index.d.ts","../node_modules/antd/es/modal/interface.d.ts","../node_modules/antd/es/modal/confirm.d.ts","../node_modules/antd/es/modal/useModal/index.d.ts","../node_modules/antd/es/app/context.d.ts","../node_modules/antd/es/app/App.d.ts","../node_modules/antd/es/app/useApp.d.ts","../node_modules/antd/es/app/index.d.ts","../node_modules/antd/es/auto-complete/AutoComplete.d.ts","../node_modules/antd/es/auto-complete/index.d.ts","../node_modules/antd/es/avatar/AvatarContext.d.ts","../node_modules/antd/es/avatar/Avatar.d.ts","../node_modules/antd/es/avatar/AvatarGroup.d.ts","../node_modules/antd/es/avatar/index.d.ts","../node_modules/antd/es/back-top/index.d.ts","../node_modules/antd/es/breadcrumb/BreadcrumbItem.d.ts","../node_modules/antd/es/breadcrumb/Breadcrumb.d.ts","../node_modules/antd/es/breadcrumb/index.d.ts","../node_modules/antd/es/date-picker/locale/en_US.d.ts","../node_modules/antd/es/calendar/locale/en_US.d.ts","../node_modules/antd/es/calendar/generateCalendar.d.ts","../node_modules/antd/es/calendar/index.d.ts","../node_modules/@ant-design/react-slick/types.d.ts","../node_modules/antd/es/carousel/index.d.ts","../node_modules/antd/es/col/index.d.ts","../node_modules/@ant-design/fast-color/lib/types.d.ts","../node_modules/@ant-design/fast-color/lib/FastColor.d.ts","../node_modules/@ant-design/fast-color/lib/index.d.ts","../node_modules/@rc-component/color-picker/lib/color.d.ts","../node_modules/@rc-component/color-picker/lib/interface.d.ts","../node_modules/@rc-component/color-picker/lib/components/Slider.d.ts","../node_modules/@rc-component/color-picker/lib/hooks/useComponent.d.ts","../node_modules/@rc-component/color-picker/lib/ColorPicker.d.ts","../node_modules/@rc-component/color-picker/lib/components/ColorBlock.d.ts","../node_modules/@rc-component/color-picker/lib/index.d.ts","../node_modules/antd/es/color-picker/color.d.ts","../node_modules/antd/es/color-picker/interface.d.ts","../node_modules/antd/es/color-picker/ColorPicker.d.ts","../node_modules/antd/es/color-picker/index.d.ts","../node_modules/antd/es/divider/index.d.ts","../node_modules/antd/es/flex/index.d.ts","../node_modules/antd/es/float-button/BackTop.d.ts","../node_modules/antd/es/float-button/FloatButtonGroup.d.ts","../node_modules/antd/es/float-button/PurePanel.d.ts","../node_modules/antd/es/float-button/FloatButton.d.ts","../node_modules/antd/es/float-button/index.d.ts","../node_modules/rc-field-form/lib/FormContext.d.ts","../node_modules/antd/es/form/context.d.ts","../node_modules/antd/es/form/ErrorList.d.ts","../node_modules/antd/es/form/FormList.d.ts","../node_modules/antd/es/form/hooks/useFormInstance.d.ts","../node_modules/antd/es/form/index.d.ts","../node_modules/rc-image/lib/hooks/useImageTransform.d.ts","../node_modules/rc-image/lib/Preview.d.ts","../node_modules/rc-image/lib/interface.d.ts","../node_modules/rc-image/lib/PreviewGroup.d.ts","../node_modules/rc-image/lib/Image.d.ts","../node_modules/rc-image/lib/index.d.ts","../node_modules/antd/es/image/PreviewGroup.d.ts","../node_modules/antd/es/image/index.d.ts","../node_modules/antd/es/layout/layout.d.ts","../node_modules/antd/es/layout/index.d.ts","../node_modules/rc-notification/lib/interface.d.ts","../node_modules/rc-notification/lib/Notice.d.ts","../node_modules/antd/es/message/PurePanel.d.ts","../node_modules/antd/es/message/useMessage.d.ts","../node_modules/antd/es/message/index.d.ts","../node_modules/antd/es/notification/PurePanel.d.ts","../node_modules/antd/es/notification/useNotification.d.ts","../node_modules/antd/es/notification/index.d.ts","../node_modules/@rc-component/qrcode/lib/libs/qrcodegen.d.ts","../node_modules/@rc-component/qrcode/lib/interface.d.ts","../node_modules/@rc-component/qrcode/lib/utils.d.ts","../node_modules/@rc-component/qrcode/lib/QRCodeCanvas.d.ts","../node_modules/@rc-component/qrcode/lib/QRCodeSVG.d.ts","../node_modules/@rc-component/qrcode/lib/index.d.ts","../node_modules/antd/es/qr-code/interface.d.ts","../node_modules/antd/es/qr-code/index.d.ts","../node_modules/antd/es/radio/interface.d.ts","../node_modules/antd/es/radio/group.d.ts","../node_modules/antd/es/radio/radio.d.ts","../node_modules/antd/es/radio/radioButton.d.ts","../node_modules/antd/es/radio/index.d.ts","../node_modules/rc-rate/lib/Star.d.ts","../node_modules/rc-rate/lib/Rate.d.ts","../node_modules/antd/es/rate/index.d.ts","../node_modules/@ant-design/icons-svg/lib/types.d.ts","../node_modules/@ant-design/icons/lib/components/Icon.d.ts","../node_modules/@ant-design/icons/lib/components/twoTonePrimaryColor.d.ts","../node_modules/@ant-design/icons/lib/components/AntdIcon.d.ts","../node_modules/antd/es/result/index.d.ts","../node_modules/antd/es/row/index.d.ts","../node_modules/rc-segmented/es/index.d.ts","../node_modules/antd/es/segmented/index.d.ts","../node_modules/antd/es/skeleton/Element.d.ts","../node_modules/antd/es/skeleton/Avatar.d.ts","../node_modules/antd/es/skeleton/Button.d.ts","../node_modules/antd/es/skeleton/Image.d.ts","../node_modules/antd/es/skeleton/Input.d.ts","../node_modules/antd/es/skeleton/Node.d.ts","../node_modules/antd/es/skeleton/Paragraph.d.ts","../node_modules/antd/es/skeleton/Title.d.ts","../node_modules/antd/es/skeleton/Skeleton.d.ts","../node_modules/antd/es/skeleton/index.d.ts","../node_modules/antd/es/splitter/SplitBar.d.ts","../node_modules/antd/es/splitter/interface.d.ts","../node_modules/antd/es/splitter/Panel.d.ts","../node_modules/antd/es/splitter/Splitter.d.ts","../node_modules/antd/es/splitter/index.d.ts","../node_modules/antd/es/statistic/utils.d.ts","../node_modules/antd/es/statistic/Statistic.d.ts","../node_modules/antd/es/statistic/Countdown.d.ts","../node_modules/antd/es/statistic/Timer.d.ts","../node_modules/antd/es/statistic/index.d.ts","../node_modules/rc-steps/lib/interface.d.ts","../node_modules/rc-steps/lib/Step.d.ts","../node_modules/rc-steps/lib/Steps.d.ts","../node_modules/rc-steps/lib/index.d.ts","../node_modules/antd/es/steps/index.d.ts","../node_modules/rc-switch/lib/index.d.ts","../node_modules/antd/es/switch/index.d.ts","../node_modules/antd/es/theme/themes/default/index.d.ts","../node_modules/antd/es/theme/index.d.ts","../node_modules/antd/es/timeline/TimelineItem.d.ts","../node_modules/antd/es/timeline/Timeline.d.ts","../node_modules/antd/es/timeline/index.d.ts","../node_modules/antd/es/tour/PurePanel.d.ts","../node_modules/antd/es/tour/index.d.ts","../node_modules/antd/es/typography/Typography.d.ts","../node_modules/antd/es/typography/Base/index.d.ts","../node_modules/antd/es/typography/Link.d.ts","../node_modules/antd/es/typography/Paragraph.d.ts","../node_modules/antd/es/typography/Text.d.ts","../node_modules/antd/es/typography/Title.d.ts","../node_modules/antd/es/typography/index.d.ts","../node_modules/antd/es/version/version.d.ts","../node_modules/antd/es/version/index.d.ts","../node_modules/antd/es/watermark/index.d.ts","../node_modules/antd/es/config-provider/UnstableContext.d.ts","../node_modules/antd/es/index.d.ts","../node_modules/antd/lib/_util/type.d.ts","../node_modules/antd/lib/_util/warning.d.ts","../node_modules/antd/lib/theme/interface/presetColors.d.ts","../node_modules/antd/lib/theme/interface/seeds.d.ts","../node_modules/antd/lib/theme/interface/maps/colors.d.ts","../node_modules/antd/lib/theme/interface/maps/font.d.ts","../node_modules/antd/lib/theme/interface/maps/size.d.ts","../node_modules/antd/lib/theme/interface/maps/style.d.ts","../node_modules/antd/lib/theme/interface/maps/index.d.ts","../node_modules/antd/lib/theme/interface/alias.d.ts","../node_modules/antd/lib/_util/wave/style.d.ts","../node_modules/antd/lib/affix/style/index.d.ts","../node_modules/antd/lib/alert/style/index.d.ts","../node_modules/antd/lib/anchor/style/index.d.ts","../node_modules/antd/lib/app/style/index.d.ts","../node_modules/antd/lib/avatar/style/index.d.ts","../node_modules/antd/lib/back-top/style/index.d.ts","../node_modules/antd/lib/badge/style/index.d.ts","../node_modules/antd/lib/breadcrumb/style/index.d.ts","../node_modules/antd/lib/button/style/token.d.ts","../node_modules/antd/lib/button/style/index.d.ts","../node_modules/antd/lib/input/style/token.d.ts","../node_modules/antd/lib/select/style/token.d.ts","../node_modules/antd/lib/style/roundedArrow.d.ts","../node_modules/antd/lib/date-picker/style/token.d.ts","../node_modules/antd/lib/date-picker/style/panel.d.ts","../node_modules/antd/lib/date-picker/style/index.d.ts","../node_modules/antd/lib/calendar/style/index.d.ts","../node_modules/antd/lib/card/style/index.d.ts","../node_modules/antd/lib/carousel/style/index.d.ts","../node_modules/antd/lib/cascader/style/index.d.ts","../node_modules/antd/lib/checkbox/style/index.d.ts","../node_modules/antd/lib/collapse/style/index.d.ts","../node_modules/antd/lib/color-picker/style/index.d.ts","../node_modules/antd/lib/descriptions/style/index.d.ts","../node_modules/antd/lib/divider/style/index.d.ts","../node_modules/antd/lib/drawer/style/index.d.ts","../node_modules/antd/lib/style/placementArrow.d.ts","../node_modules/antd/lib/dropdown/style/index.d.ts","../node_modules/antd/lib/empty/style/index.d.ts","../node_modules/antd/lib/flex/style/index.d.ts","../node_modules/antd/lib/float-button/style/index.d.ts","../node_modules/antd/lib/form/style/index.d.ts","../node_modules/antd/lib/grid/style/index.d.ts","../node_modules/antd/lib/image/style/index.d.ts","../node_modules/antd/lib/input-number/style/token.d.ts","../node_modules/antd/lib/input-number/style/index.d.ts","../node_modules/antd/lib/input/style/index.d.ts","../node_modules/antd/lib/layout/style/index.d.ts","../node_modules/antd/lib/list/style/index.d.ts","../node_modules/antd/lib/mentions/style/index.d.ts","../node_modules/antd/lib/menu/style/index.d.ts","../node_modules/antd/lib/message/style/index.d.ts","../node_modules/antd/lib/modal/style/index.d.ts","../node_modules/antd/lib/notification/style/index.d.ts","../node_modules/antd/lib/pagination/style/index.d.ts","../node_modules/antd/lib/popconfirm/style/index.d.ts","../node_modules/antd/lib/popover/style/index.d.ts","../node_modules/antd/lib/progress/style/index.d.ts","../node_modules/antd/lib/qr-code/style/index.d.ts","../node_modules/antd/lib/radio/style/index.d.ts","../node_modules/antd/lib/rate/style/index.d.ts","../node_modules/antd/lib/result/style/index.d.ts","../node_modules/antd/lib/segmented/style/index.d.ts","../node_modules/antd/lib/select/style/index.d.ts","../node_modules/antd/lib/skeleton/style/index.d.ts","../node_modules/antd/lib/slider/style/index.d.ts","../node_modules/antd/lib/space/style/index.d.ts","../node_modules/antd/lib/spin/style/index.d.ts","../node_modules/antd/lib/statistic/style/index.d.ts","../node_modules/antd/lib/steps/style/index.d.ts","../node_modules/antd/lib/switch/style/index.d.ts","../node_modules/antd/lib/table/style/index.d.ts","../node_modules/antd/lib/tabs/style/index.d.ts","../node_modules/antd/lib/tag/style/index.d.ts","../node_modules/antd/lib/timeline/style/index.d.ts","../node_modules/antd/lib/tooltip/style/index.d.ts","../node_modules/antd/lib/tour/style/index.d.ts","../node_modules/antd/lib/transfer/style/index.d.ts","../node_modules/antd/lib/tree/style/index.d.ts","../node_modules/antd/lib/tree-select/style/index.d.ts","../node_modules/antd/lib/typography/style/index.d.ts","../node_modules/antd/lib/upload/style/index.d.ts","../node_modules/antd/lib/splitter/style/index.d.ts","../node_modules/antd/lib/theme/interface/components.d.ts","../node_modules/antd/lib/theme/interface/cssinjs-utils.d.ts","../node_modules/antd/lib/theme/interface/index.d.ts","../node_modules/antd/lib/theme/themes/shared/genFontSizes.d.ts","../node_modules/antd/lib/theme/themes/default/theme.d.ts","../node_modules/antd/lib/theme/context.d.ts","../node_modules/antd/lib/theme/useToken.d.ts","../node_modules/antd/lib/theme/util/genStyleUtils.d.ts","../node_modules/antd/lib/theme/util/genPresetColor.d.ts","../node_modules/antd/lib/theme/util/useResetIconStyle.d.ts","../node_modules/antd/lib/theme/internal.d.ts","../node_modules/antd/lib/_util/wave/interface.d.ts","../node_modules/antd/lib/_util/aria-data-attrs.d.ts","../node_modules/antd/lib/_util/hooks/useClosable.d.ts","../node_modules/antd/lib/_util/hooks/useForceUpdate.d.ts","../node_modules/antd/lib/_util/hooks/useMergeSemantic.d.ts","../node_modules/antd/lib/_util/hooks/useMultipleSelect.d.ts","../node_modules/antd/lib/_util/hooks/usePatchElement.d.ts","../node_modules/antd/lib/_util/hooks/useProxyImperativeHandle.d.ts","../node_modules/antd/lib/_util/hooks/useSyncState.d.ts","../node_modules/antd/lib/_util/hooks/useZIndex.d.ts","../node_modules/antd/lib/_util/hooks/index.d.ts","../node_modules/antd/lib/alert/Alert.d.ts","../node_modules/antd/lib/alert/ErrorBoundary.d.ts","../node_modules/antd/lib/alert/index.d.ts","../node_modules/antd/lib/_util/colors.d.ts","../node_modules/antd/lib/badge/Ribbon.d.ts","../node_modules/antd/lib/badge/ScrollNumber.d.ts","../node_modules/antd/lib/badge/index.d.ts","../node_modules/antd/lib/config-provider/SizeContext.d.ts","../node_modules/antd/lib/button/button-group.d.ts","../node_modules/antd/lib/button/buttonHelpers.d.ts","../node_modules/antd/lib/button/button.d.ts","../node_modules/antd/lib/button/index.d.ts","../node_modules/antd/lib/tabs/TabPane.d.ts","../node_modules/antd/lib/tabs/index.d.ts","../node_modules/antd/lib/card/Card.d.ts","../node_modules/antd/lib/card/Grid.d.ts","../node_modules/antd/lib/card/Meta.d.ts","../node_modules/antd/lib/card/index.d.ts","../node_modules/antd/lib/_util/motion.d.ts","../node_modules/antd/lib/cascader/Panel.d.ts","../node_modules/antd/lib/cascader/index.d.ts","../node_modules/antd/lib/collapse/CollapsePanel.d.ts","../node_modules/antd/lib/collapse/Collapse.d.ts","../node_modules/antd/lib/collapse/index.d.ts","../node_modules/antd/lib/date-picker/index.d.ts","../node_modules/antd/lib/_util/responsiveObserver.d.ts","../node_modules/antd/lib/descriptions/DescriptionsContext.d.ts","../node_modules/antd/lib/descriptions/Item.d.ts","../node_modules/antd/lib/descriptions/index.d.ts","../node_modules/antd/lib/drawer/DrawerPanel.d.ts","../node_modules/antd/lib/drawer/index.d.ts","../node_modules/antd/lib/empty/index.d.ts","../node_modules/antd/lib/flex/interface.d.ts","../node_modules/antd/lib/_util/getRenderPropValue.d.ts","../node_modules/antd/lib/_util/placements.d.ts","../node_modules/antd/lib/tooltip/PurePanel.d.ts","../node_modules/antd/lib/tooltip/index.d.ts","../node_modules/antd/lib/float-button/interface.d.ts","../node_modules/antd/lib/input/Group.d.ts","../node_modules/antd/lib/input/Input.d.ts","../node_modules/antd/lib/input/OTP/index.d.ts","../node_modules/antd/lib/input/Password.d.ts","../node_modules/antd/lib/input/Search.d.ts","../node_modules/antd/lib/input/TextArea.d.ts","../node_modules/antd/lib/input/index.d.ts","../node_modules/antd/lib/input-number/index.d.ts","../node_modules/antd/lib/grid/col.d.ts","../node_modules/antd/lib/grid/row.d.ts","../node_modules/antd/lib/_util/throttleByAnimationFrame.d.ts","../node_modules/antd/lib/affix/index.d.ts","../node_modules/antd/lib/anchor/AnchorLink.d.ts","../node_modules/antd/lib/anchor/Anchor.d.ts","../node_modules/antd/lib/anchor/index.d.ts","../node_modules/antd/lib/message/interface.d.ts","../node_modules/antd/lib/modal/interface.d.ts","../node_modules/antd/lib/modal/confirm.d.ts","../node_modules/antd/lib/modal/useModal/index.d.ts","../node_modules/antd/lib/notification/interface.d.ts","../node_modules/antd/lib/app/context.d.ts","../node_modules/antd/lib/app/App.d.ts","../node_modules/antd/lib/app/useApp.d.ts","../node_modules/antd/lib/app/index.d.ts","../node_modules/antd/lib/select/index.d.ts","../node_modules/antd/lib/auto-complete/AutoComplete.d.ts","../node_modules/antd/lib/auto-complete/index.d.ts","../node_modules/antd/lib/avatar/AvatarContext.d.ts","../node_modules/antd/lib/avatar/Avatar.d.ts","../node_modules/antd/lib/popover/PurePanel.d.ts","../node_modules/antd/lib/popover/index.d.ts","../node_modules/antd/lib/avatar/AvatarGroup.d.ts","../node_modules/antd/lib/avatar/index.d.ts","../node_modules/antd/lib/back-top/index.d.ts","../node_modules/antd/lib/menu/interface.d.ts","../node_modules/antd/lib/layout/Sider.d.ts","../node_modules/antd/lib/menu/MenuContext.d.ts","../node_modules/antd/lib/menu/menu.d.ts","../node_modules/antd/lib/menu/MenuDivider.d.ts","../node_modules/antd/lib/menu/MenuItem.d.ts","../node_modules/antd/lib/menu/SubMenu.d.ts","../node_modules/antd/lib/menu/index.d.ts","../node_modules/antd/lib/dropdown/dropdown.d.ts","../node_modules/antd/lib/dropdown/dropdown-button.d.ts","../node_modules/antd/lib/dropdown/index.d.ts","../node_modules/antd/lib/breadcrumb/BreadcrumbItem.d.ts","../node_modules/antd/lib/breadcrumb/Breadcrumb.d.ts","../node_modules/antd/lib/breadcrumb/index.d.ts","../node_modules/antd/lib/date-picker/locale/en_US.d.ts","../node_modules/antd/lib/calendar/locale/en_US.d.ts","../node_modules/antd/lib/calendar/generateCalendar.d.ts","../node_modules/antd/lib/calendar/index.d.ts","../node_modules/antd/lib/carousel/index.d.ts","../node_modules/antd/lib/checkbox/Checkbox.d.ts","../node_modules/antd/lib/checkbox/GroupContext.d.ts","../node_modules/antd/lib/checkbox/Group.d.ts","../node_modules/antd/lib/checkbox/index.d.ts","../node_modules/antd/lib/col/index.d.ts","../node_modules/antd/lib/color-picker/color.d.ts","../node_modules/antd/lib/color-picker/interface.d.ts","../node_modules/antd/lib/color-picker/ColorPicker.d.ts","../node_modules/antd/lib/color-picker/index.d.ts","../node_modules/antd/lib/divider/index.d.ts","../node_modules/antd/lib/flex/index.d.ts","../node_modules/antd/lib/float-button/BackTop.d.ts","../node_modules/antd/lib/float-button/FloatButtonGroup.d.ts","../node_modules/antd/lib/float-button/PurePanel.d.ts","../node_modules/antd/lib/float-button/FloatButton.d.ts","../node_modules/antd/lib/float-button/index.d.ts","../node_modules/antd/lib/form/interface.d.ts","../node_modules/antd/lib/form/context.d.ts","../node_modules/antd/lib/form/ErrorList.d.ts","../node_modules/antd/lib/form/FormList.d.ts","../node_modules/antd/lib/form/hooks/useForm.d.ts","../node_modules/antd/lib/form/hooks/useFormInstance.d.ts","../node_modules/antd/lib/form/index.d.ts","../node_modules/antd/lib/image/PreviewGroup.d.ts","../node_modules/antd/lib/image/index.d.ts","../node_modules/antd/lib/layout/layout.d.ts","../node_modules/antd/lib/layout/index.d.ts","../node_modules/antd/lib/mentions/index.d.ts","../node_modules/antd/lib/message/PurePanel.d.ts","../node_modules/antd/lib/message/useMessage.d.ts","../node_modules/antd/lib/message/index.d.ts","../node_modules/antd/lib/modal/Modal.d.ts","../node_modules/antd/lib/modal/PurePanel.d.ts","../node_modules/antd/lib/modal/index.d.ts","../node_modules/antd/lib/notification/PurePanel.d.ts","../node_modules/antd/lib/notification/useNotification.d.ts","../node_modules/antd/lib/notification/index.d.ts","../node_modules/antd/lib/pagination/Pagination.d.ts","../node_modules/antd/lib/pagination/index.d.ts","../node_modules/antd/lib/popconfirm/PurePanel.d.ts","../node_modules/antd/lib/popconfirm/index.d.ts","../node_modules/antd/lib/progress/progress.d.ts","../node_modules/antd/lib/progress/index.d.ts","../node_modules/antd/lib/qr-code/interface.d.ts","../node_modules/antd/lib/qr-code/index.d.ts","../node_modules/antd/lib/radio/interface.d.ts","../node_modules/antd/lib/radio/group.d.ts","../node_modules/antd/lib/radio/radio.d.ts","../node_modules/antd/lib/radio/radioButton.d.ts","../node_modules/antd/lib/radio/index.d.ts","../node_modules/antd/lib/rate/index.d.ts","../node_modules/antd/lib/result/index.d.ts","../node_modules/antd/lib/row/index.d.ts","../node_modules/antd/lib/segmented/index.d.ts","../node_modules/antd/lib/skeleton/Element.d.ts","../node_modules/antd/lib/skeleton/Avatar.d.ts","../node_modules/antd/lib/skeleton/Button.d.ts","../node_modules/antd/lib/skeleton/Image.d.ts","../node_modules/antd/lib/skeleton/Input.d.ts","../node_modules/antd/lib/skeleton/Node.d.ts","../node_modules/antd/lib/skeleton/Paragraph.d.ts","../node_modules/antd/lib/skeleton/Title.d.ts","../node_modules/antd/lib/skeleton/Skeleton.d.ts","../node_modules/antd/lib/skeleton/index.d.ts","../node_modules/antd/lib/slider/index.d.ts","../node_modules/antd/lib/space/Compact.d.ts","../node_modules/antd/lib/space/Addon.d.ts","../node_modules/antd/lib/space/context.d.ts","../node_modules/antd/lib/space/index.d.ts","../node_modules/antd/lib/spin/index.d.ts","../node_modules/antd/lib/splitter/SplitBar.d.ts","../node_modules/antd/lib/splitter/interface.d.ts","../node_modules/antd/lib/splitter/Panel.d.ts","../node_modules/antd/lib/splitter/Splitter.d.ts","../node_modules/antd/lib/splitter/index.d.ts","../node_modules/antd/lib/statistic/utils.d.ts","../node_modules/antd/lib/statistic/Statistic.d.ts","../node_modules/antd/lib/statistic/Countdown.d.ts","../node_modules/antd/lib/statistic/Timer.d.ts","../node_modules/antd/lib/statistic/index.d.ts","../node_modules/antd/lib/steps/index.d.ts","../node_modules/antd/lib/switch/index.d.ts","../node_modules/antd/lib/table/hooks/useSelection.d.ts","../node_modules/antd/lib/table/interface.d.ts","../node_modules/antd/lib/table/InternalTable.d.ts","../node_modules/antd/lib/table/Column.d.ts","../node_modules/antd/lib/table/ColumnGroup.d.ts","../node_modules/antd/lib/table/Table.d.ts","../node_modules/antd/lib/table/index.d.ts","../node_modules/antd/lib/tag/CheckableTag.d.ts","../node_modules/antd/lib/tag/index.d.ts","../node_modules/antd/lib/theme/themes/default/index.d.ts","../node_modules/antd/lib/theme/index.d.ts","../node_modules/antd/lib/time-picker/index.d.ts","../node_modules/antd/lib/timeline/TimelineItem.d.ts","../node_modules/antd/lib/timeline/Timeline.d.ts","../node_modules/antd/lib/timeline/index.d.ts","../node_modules/antd/lib/tour/interface.d.ts","../node_modules/antd/lib/tour/PurePanel.d.ts","../node_modules/antd/lib/tour/index.d.ts","../node_modules/antd/lib/transfer/interface.d.ts","../node_modules/antd/lib/transfer/ListBody.d.ts","../node_modules/antd/lib/transfer/list.d.ts","../node_modules/antd/lib/transfer/operation.d.ts","../node_modules/antd/lib/transfer/search.d.ts","../node_modules/antd/lib/transfer/index.d.ts","../node_modules/antd/lib/tree/Tree.d.ts","../node_modules/antd/lib/tree/DirectoryTree.d.ts","../node_modules/antd/lib/tree/index.d.ts","../node_modules/antd/lib/tree-select/index.d.ts","../node_modules/antd/lib/typography/Typography.d.ts","../node_modules/antd/lib/typography/Base/index.d.ts","../node_modules/antd/lib/typography/Link.d.ts","../node_modules/antd/lib/typography/Paragraph.d.ts","../node_modules/antd/lib/typography/Text.d.ts","../node_modules/antd/lib/typography/Title.d.ts","../node_modules/antd/lib/typography/index.d.ts","../node_modules/antd/lib/upload/interface.d.ts","../node_modules/antd/lib/upload/Upload.d.ts","../node_modules/antd/lib/upload/Dragger.d.ts","../node_modules/antd/lib/upload/index.d.ts","../node_modules/antd/lib/version/version.d.ts","../node_modules/antd/lib/version/index.d.ts","../node_modules/antd/lib/watermark/index.d.ts","../node_modules/antd/lib/config-provider/UnstableContext.d.ts","../node_modules/antd/lib/index.d.ts","../node_modules/antd/lib/grid/index.d.ts","../node_modules/antd/lib/list/Item.d.ts","../node_modules/antd/lib/list/context.d.ts","../node_modules/antd/lib/list/index.d.ts","../node_modules/antd/lib/config-provider/defaultRenderEmpty.d.ts","../node_modules/antd/lib/config-provider/context.d.ts","../node_modules/antd/lib/config-provider/hooks/useConfig.d.ts","../node_modules/antd/lib/config-provider/index.d.ts","../node_modules/antd/lib/form/Form.d.ts","../node_modules/antd/lib/form/FormItemInput.d.ts","../node_modules/antd/lib/form/FormItemLabel.d.ts","../node_modules/antd/lib/form/hooks/useFormItemStatus.d.ts","../node_modules/antd/lib/form/FormItem/index.d.ts","../node_modules/antd/lib/_util/statusUtils.d.ts","../node_modules/antd/lib/date-picker/generatePicker/interface.d.ts","../node_modules/antd/lib/date-picker/generatePicker/index.d.ts","../node_modules/antd/lib/locale/useLocale.d.ts","../node_modules/antd/lib/locale/index.d.ts","../node_modules/antd/locale/zh_CN.d.ts","../node_modules/zustand/esm/vanilla.d.mts","../node_modules/zustand/esm/react.d.mts","../node_modules/zustand/esm/index.d.mts","../node_modules/zustand/esm/middleware/redux.d.mts","../node_modules/zustand/esm/middleware/devtools.d.mts","../node_modules/zustand/esm/middleware/subscribeWithSelector.d.mts","../node_modules/zustand/esm/middleware/combine.d.mts","../node_modules/zustand/esm/middleware/persist.d.mts","../node_modules/zustand/esm/middleware.d.mts","../src/store/authStore.ts","../node_modules/classnames/index.d.ts","../src/components/ui/Button.tsx","../src/components/ui/Input.tsx","../src/components/ui/Select.tsx","../src/components/ui/Modal.tsx","../src/components/ui/Card.tsx","../src/components/ui/Tag.tsx","../src/components/ui/Tooltip.tsx","../src/components/ui/index.ts","../src/pages/home/sections/Layout.tsx","../src/pages/home/sections/HeroSection.tsx","../src/pages/home/sections/FeatureSection.tsx","../src/pages/home/sections/WorkflowSection.tsx","../src/pages/home/sections/PricingSection.tsx","../src/pages/home/sections/CTASection.tsx","../src/pages/home/HomePage.tsx","../src/api/auth/types.ts","../src/api/auth/user.ts","../node_modules/axios/index.d.ts","../src/api/auth/tokenRefresh.ts","../src/api/client.ts","../src/api/auth/login.ts","../src/api/auth/currentUser.ts","../src/api/auth/password.ts","../src/api/auth/email.ts","../src/api/auth/wechat.ts","../src/api/auth/contact.ts","../src/api/auth/index.ts","../src/hooks/useAuth.ts","../src/pages/auth/Login.tsx","../node_modules/@ant-design/icons/lib/icons/AccountBookFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/AccountBookOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/AccountBookTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/AimOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/AlertFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/AlertOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/AlertTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/AlibabaOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/AlignCenterOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/AlignLeftOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/AlignRightOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/AlipayCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/AlipayCircleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/AlipayOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/AlipaySquareFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/AliwangwangFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/AliwangwangOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/AliyunOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/AmazonCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/AmazonOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/AmazonSquareFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/AndroidFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/AndroidOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/AntCloudOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/AntDesignOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ApartmentOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ApiFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/ApiOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ApiTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/AppleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/AppleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/AppstoreAddOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/AppstoreFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/AppstoreOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/AppstoreTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/AreaChartOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ArrowDownOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ArrowLeftOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ArrowRightOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ArrowUpOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ArrowsAltOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/AudioFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/AudioMutedOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/AudioOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/AudioTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/AuditOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BackwardFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/BackwardOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BaiduOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BankFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/BankOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BankTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/BarChartOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BarcodeOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BarsOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BehanceCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/BehanceOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BehanceSquareFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/BehanceSquareOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BellFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/BellOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BellTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/BgColorsOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BilibiliFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/BilibiliOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BlockOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BoldOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BookFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/BookOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BookTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/BorderBottomOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BorderHorizontalOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BorderInnerOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BorderLeftOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BorderOuterOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BorderOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BorderRightOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BorderTopOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BorderVerticleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BorderlessTableOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BoxPlotFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/BoxPlotOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BoxPlotTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/BranchesOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BugFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/BugOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BugTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/BuildFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/BuildOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BuildTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/BulbFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/BulbOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/BulbTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/CalculatorFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/CalculatorOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CalculatorTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/CalendarFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/CalendarOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CalendarTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/CameraFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/CameraOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CameraTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/CarFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/CarOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CarTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/CaretDownFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/CaretDownOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CaretLeftFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/CaretLeftOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CaretRightFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/CaretRightOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CaretUpFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/CaretUpOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CarryOutFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/CarryOutOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CarryOutTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/CheckCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/CheckCircleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CheckCircleTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/CheckOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CheckSquareFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/CheckSquareOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CheckSquareTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/ChromeFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/ChromeOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CiCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/CiCircleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CiCircleTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/CiOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CiTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/ClearOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ClockCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/ClockCircleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ClockCircleTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/CloseCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/CloseCircleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CloseCircleTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/CloseOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CloseSquareFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/CloseSquareOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CloseSquareTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/CloudDownloadOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CloudFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/CloudOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CloudServerOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CloudSyncOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CloudTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/CloudUploadOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ClusterOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CodeFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/CodeOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CodeSandboxCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/CodeSandboxOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CodeSandboxSquareFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/CodeTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/CodepenCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/CodepenCircleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CodepenOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CodepenSquareFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/CoffeeOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ColumnHeightOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ColumnWidthOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CommentOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CompassFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/CompassOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CompassTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/CompressOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ConsoleSqlOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ContactsFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/ContactsOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ContactsTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/ContainerFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/ContainerOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ContainerTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/ControlFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/ControlOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ControlTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/CopyFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/CopyOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CopyTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/CopyrightCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/CopyrightCircleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CopyrightCircleTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/CopyrightOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CopyrightTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/CreditCardFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/CreditCardOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CreditCardTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/CrownFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/CrownOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CrownTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/CustomerServiceFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/CustomerServiceOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/CustomerServiceTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/DashOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DashboardFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/DashboardOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DashboardTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/DatabaseFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/DatabaseOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DatabaseTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/DeleteColumnOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DeleteFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/DeleteOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DeleteRowOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DeleteTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/DeliveredProcedureOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DeploymentUnitOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DesktopOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DiffFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/DiffOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DiffTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/DingdingOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DingtalkCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/DingtalkOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DingtalkSquareFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/DisconnectOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DiscordFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/DiscordOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DislikeFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/DislikeOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DislikeTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/DockerOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DollarCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/DollarCircleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DollarCircleTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/DollarOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DollarTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/DotChartOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DotNetOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DoubleLeftOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DoubleRightOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DownCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/DownCircleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DownCircleTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/DownOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DownSquareFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/DownSquareOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DownSquareTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/DownloadOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DragOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DribbbleCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/DribbbleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DribbbleSquareFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/DribbbleSquareOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DropboxCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/DropboxOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/DropboxSquareFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/EditFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/EditOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/EditTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/EllipsisOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/EnterOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/EnvironmentFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/EnvironmentOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/EnvironmentTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/EuroCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/EuroCircleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/EuroCircleTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/EuroOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/EuroTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/ExceptionOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ExclamationCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/ExclamationCircleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ExclamationCircleTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/ExclamationOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ExpandAltOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ExpandOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ExperimentFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/ExperimentOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ExperimentTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/ExportOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/EyeFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/EyeInvisibleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/EyeInvisibleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/EyeInvisibleTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/EyeOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/EyeTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/FacebookFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/FacebookOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FallOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FastBackwardFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/FastBackwardOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FastForwardFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/FastForwardOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FieldBinaryOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FieldNumberOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FieldStringOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FieldTimeOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FileAddFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/FileAddOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FileAddTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/FileDoneOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FileExcelFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/FileExcelOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FileExcelTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/FileExclamationFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/FileExclamationOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FileExclamationTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/FileFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/FileGifOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FileImageFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/FileImageOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FileImageTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/FileJpgOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FileMarkdownFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/FileMarkdownOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FileMarkdownTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/FileOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FilePdfFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/FilePdfOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FilePdfTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/FilePptFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/FilePptOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FilePptTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/FileProtectOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FileSearchOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FileSyncOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FileTextFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/FileTextOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FileTextTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/FileTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/FileUnknownFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/FileUnknownOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FileUnknownTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/FileWordFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/FileWordOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FileWordTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/FileZipFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/FileZipOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FileZipTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/FilterFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/FilterOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FilterTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/FireFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/FireOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FireTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/FlagFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/FlagOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FlagTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/FolderAddFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/FolderAddOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FolderAddTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/FolderFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/FolderOpenFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/FolderOpenOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FolderOpenTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/FolderOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FolderTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/FolderViewOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FontColorsOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FontSizeOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ForkOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FormOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FormatPainterFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/FormatPainterOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ForwardFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/ForwardOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FrownFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/FrownOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FrownTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/FullscreenExitOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FullscreenOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FunctionOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FundFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/FundOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FundProjectionScreenOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FundTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/FundViewOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FunnelPlotFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/FunnelPlotOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/FunnelPlotTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/GatewayOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/GifOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/GiftFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/GiftOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/GiftTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/GithubFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/GithubOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/GitlabFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/GitlabOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/GlobalOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/GoldFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/GoldOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/GoldTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/GoldenFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/GoogleCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/GoogleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/GooglePlusCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/GooglePlusOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/GooglePlusSquareFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/GoogleSquareFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/GroupOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/HarmonyOSOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/HddFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/HddOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/HddTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/HeartFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/HeartOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/HeartTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/HeatMapOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/HighlightFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/HighlightOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/HighlightTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/HistoryOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/HolderOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/HomeFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/HomeOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/HomeTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/HourglassFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/HourglassOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/HourglassTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/Html5Filled.d.ts","../node_modules/@ant-design/icons/lib/icons/Html5Outlined.d.ts","../node_modules/@ant-design/icons/lib/icons/Html5TwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/IdcardFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/IdcardOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/IdcardTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/IeCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/IeOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/IeSquareFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/ImportOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/InboxOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/InfoCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/InfoCircleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/InfoCircleTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/InfoOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/InsertRowAboveOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/InsertRowBelowOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/InsertRowLeftOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/InsertRowRightOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/InstagramFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/InstagramOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/InsuranceFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/InsuranceOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/InsuranceTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/InteractionFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/InteractionOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/InteractionTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/IssuesCloseOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ItalicOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/JavaOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/JavaScriptOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/KeyOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/KubernetesOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/LaptopOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/LayoutFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/LayoutOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/LayoutTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/LeftCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/LeftCircleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/LeftCircleTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/LeftOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/LeftSquareFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/LeftSquareOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/LeftSquareTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/LikeFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/LikeOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/LikeTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/LineChartOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/LineHeightOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/LineOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/LinkOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/LinkedinFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/LinkedinOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/LinuxOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/Loading3QuartersOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/LoadingOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/LockFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/LockOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/LockTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/LoginOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/LogoutOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/MacCommandFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/MacCommandOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/MailFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/MailOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/MailTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/ManOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/MedicineBoxFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/MedicineBoxOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/MedicineBoxTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/MediumCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/MediumOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/MediumSquareFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/MediumWorkmarkOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/MehFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/MehOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/MehTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/MenuFoldOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/MenuOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/MenuUnfoldOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/MergeCellsOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/MergeFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/MergeOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/MessageFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/MessageOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/MessageTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/MinusCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/MinusCircleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/MinusCircleTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/MinusOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/MinusSquareFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/MinusSquareOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/MinusSquareTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/MobileFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/MobileOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/MobileTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/MoneyCollectFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/MoneyCollectOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/MoneyCollectTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/MonitorOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/MoonFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/MoonOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/MoreOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/MutedFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/MutedOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/NodeCollapseOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/NodeExpandOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/NodeIndexOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/NotificationFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/NotificationOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/NotificationTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/NumberOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/OneToOneOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/OpenAIFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/OpenAIOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/OrderedListOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/PaperClipOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/PartitionOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/PauseCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/PauseCircleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/PauseCircleTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/PauseOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/PayCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/PayCircleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/PercentageOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/PhoneFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/PhoneOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/PhoneTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/PicCenterOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/PicLeftOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/PicRightOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/PictureFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/PictureOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/PictureTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/PieChartFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/PieChartOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/PieChartTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/PinterestFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/PinterestOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/PlayCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/PlayCircleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/PlayCircleTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/PlaySquareFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/PlaySquareOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/PlaySquareTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/PlusCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/PlusCircleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/PlusCircleTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/PlusOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/PlusSquareFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/PlusSquareOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/PlusSquareTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/PoundCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/PoundCircleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/PoundCircleTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/PoundOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/PoweroffOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/PrinterFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/PrinterOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/PrinterTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/ProductFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/ProductOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ProfileFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/ProfileOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ProfileTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/ProjectFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/ProjectOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ProjectTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/PropertySafetyFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/PropertySafetyOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/PropertySafetyTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/PullRequestOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/PushpinFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/PushpinOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/PushpinTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/PythonOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/QqCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/QqOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/QqSquareFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/QrcodeOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/QuestionCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/QuestionCircleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/QuestionCircleTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/QuestionOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/RadarChartOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/RadiusBottomleftOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/RadiusBottomrightOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/RadiusSettingOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/RadiusUpleftOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/RadiusUprightOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ReadFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/ReadOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ReconciliationFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/ReconciliationOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ReconciliationTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/RedEnvelopeFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/RedEnvelopeOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/RedEnvelopeTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/RedditCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/RedditOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/RedditSquareFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/RedoOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ReloadOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/RestFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/RestOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/RestTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/RetweetOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/RightCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/RightCircleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/RightCircleTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/RightOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/RightSquareFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/RightSquareOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/RightSquareTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/RiseOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/RobotFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/RobotOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/RocketFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/RocketOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/RocketTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/RollbackOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/RotateLeftOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/RotateRightOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/RubyOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SafetyCertificateFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/SafetyCertificateOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SafetyCertificateTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/SafetyOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SaveFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/SaveOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SaveTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/ScanOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ScheduleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/ScheduleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ScheduleTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/ScissorOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SearchOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SecurityScanFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/SecurityScanOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SecurityScanTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/SelectOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SendOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SettingFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/SettingOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SettingTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/ShakeOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ShareAltOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ShopFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/ShopOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ShopTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/ShoppingCartOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ShoppingFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/ShoppingOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ShoppingTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/ShrinkOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SignalFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/SignatureFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/SignatureOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SisternodeOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SketchCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/SketchOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SketchSquareFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/SkinFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/SkinOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SkinTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/SkypeFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/SkypeOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SlackCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/SlackOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SlackSquareFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/SlackSquareOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SlidersFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/SlidersOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SlidersTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/SmallDashOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SmileFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/SmileOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SmileTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/SnippetsFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/SnippetsOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SnippetsTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/SolutionOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SortAscendingOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SortDescendingOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SoundFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/SoundOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SoundTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/SplitCellsOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SpotifyFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/SpotifyOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/StarFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/StarOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/StarTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/StepBackwardFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/StepBackwardOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/StepForwardFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/StepForwardOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/StockOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/StopFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/StopOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/StopTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/StrikethroughOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SubnodeOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SunFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/SunOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SwapLeftOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SwapOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SwapRightOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SwitcherFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/SwitcherOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/SwitcherTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/SyncOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/TableOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/TabletFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/TabletOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/TabletTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/TagFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/TagOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/TagTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/TagsFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/TagsOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/TagsTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/TaobaoCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/TaobaoCircleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/TaobaoOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/TaobaoSquareFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/TeamOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ThunderboltFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/ThunderboltOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ThunderboltTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/TikTokFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/TikTokOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ToTopOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ToolFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/ToolOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ToolTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/TrademarkCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/TrademarkCircleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/TrademarkCircleTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/TrademarkOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/TransactionOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/TranslationOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/TrophyFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/TrophyOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/TrophyTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/TruckFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/TruckOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/TwitchFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/TwitchOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/TwitterCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/TwitterOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/TwitterSquareFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/UnderlineOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/UndoOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/UngroupOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/UnlockFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/UnlockOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/UnlockTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/UnorderedListOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/UpCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/UpCircleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/UpCircleTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/UpOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/UpSquareFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/UpSquareOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/UpSquareTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/UploadOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/UsbFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/UsbOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/UsbTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/UserAddOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/UserDeleteOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/UserOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/UserSwitchOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/UsergroupAddOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/UsergroupDeleteOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/VerifiedOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/VerticalAlignBottomOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/VerticalAlignMiddleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/VerticalAlignTopOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/VerticalLeftOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/VerticalRightOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/VideoCameraAddOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/VideoCameraFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/VideoCameraOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/VideoCameraTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/WalletFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/WalletOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/WalletTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/WarningFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/WarningOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/WarningTwoTone.d.ts","../node_modules/@ant-design/icons/lib/icons/WechatFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/WechatOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/WechatWorkFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/WechatWorkOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/WeiboCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/WeiboCircleOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/WeiboOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/WeiboSquareFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/WeiboSquareOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/WhatsAppOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/WifiOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/WindowsFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/WindowsOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/WomanOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/XFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/XOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/YahooFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/YahooOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/YoutubeFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/YoutubeOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/YuqueFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/YuqueOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ZhihuCircleFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/ZhihuOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ZhihuSquareFilled.d.ts","../node_modules/@ant-design/icons/lib/icons/ZoomInOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/ZoomOutOutlined.d.ts","../node_modules/@ant-design/icons/lib/icons/index.d.ts","../node_modules/@ant-design/icons/lib/components/IconFont.d.ts","../node_modules/@ant-design/icons/lib/components/Context.d.ts","../node_modules/@ant-design/icons/lib/index.d.ts","../src/pages/auth/Register.tsx","../src/pages/auth/ForgotPassword.tsx","../src/pages/auth/ResetPassword.tsx","../src/components/auth/BindContactModal/hooks/useCountdown.ts","../src/components/auth/BindContactModal/hooks/useBindContactForm.ts","../src/components/auth/BindContactModal/types.ts","../src/components/auth/BindContactModal/index.tsx","../src/pages/auth/WechatCallback.tsx","../src/router/publicRoutes.tsx","../src/config/navigation.ts","../src/components/layout/Header.tsx","../src/components/layout/AppLayout.tsx","../src/components/layout/Sidebar.tsx","../src/components/layout/MainLayout.tsx","../src/router/ProtectedRoute.tsx","../src/pages/dashboard/Dashboard.tsx","../src/api/assets/types.ts","../src/api/projects/types.ts","../src/api/projects/utils.ts","../src/api/projects/projects.ts","../src/api/projects/index.ts","../src/api/assets/diagnosis.ts","../src/api/assets/usage.ts","../src/api/assets/libraries.ts","../src/api/assets/assets.ts","../src/api/assets/upload.ts","../src/api/assets/jobs.ts","../src/api/assets/batch.ts","../src/api/assets/index.ts","../src/pages/assets/utils/format.ts","../src/pages/assets/types.ts","../src/pages/assets/components/BatchMarkModal.tsx","../src/pages/assets/components/AssetSkeleton.tsx","../src/pages/assets/constants.ts","../src/pages/assets/utils/asset.ts","../src/pages/assets/utils/kindIcon.tsx","../src/pages/assets/components/LibrarySidebar.tsx","../src/pages/assets/components/AssetFilterBar.tsx","../src/pages/assets/components/BatchOperationBar.tsx","../src/pages/assets/components/AssetUploadZone.tsx","../src/pages/assets/hooks/useAssetUpload.ts","../src/pages/assets/components/UploadQueuePanel.tsx","../src/pages/assets/components/AssetCard.tsx","../src/pages/assets/components/AssetGridSection.tsx","../src/pages/assets/components/CreateLibraryModal.tsx","../src/pages/assets/components/PlayModal.tsx","../src/pages/assets/components/BatchTagModal.tsx","../src/pages/assets/components/BatchClassifyModal.tsx","../src/pages/assets/components/ResultDrawer.tsx","../src/pages/assets/components/AssetModals.tsx","../src/pages/assets/hooks/useAssetsData.ts","../src/pages/assets/hooks/useLibraryManagement.ts","../src/pages/assets/hooks/useAssetSelection.ts","../src/pages/assets/hooks/asset-operations/useSingleOperations.ts","../src/pages/assets/hooks/asset-operations/batch-operations/useBatchDelete.ts","../src/pages/assets/hooks/asset-operations/batch-operations/useBatchTag.ts","../src/pages/assets/hooks/asset-operations/batch-operations/useBatchClassify.ts","../src/pages/assets/hooks/asset-operations/constants.ts","../src/pages/assets/hooks/asset-operations/batch-operations/useBatchMark.ts","../src/pages/assets/hooks/asset-operations/batch-operations/index.ts","../src/pages/assets/hooks/useAssetOperations.ts","../src/pages/assets/AssetLibrary.tsx","../src/pages/titles/types/titleLibrary.ts","../src/pages/titles/constants/titleLibrary.ts","../src/pages/titles/hooks/useTitleLibrary/useTitleFilters.ts","../src/api/titles/types.ts","../src/api/titles/utils.ts","../src/api/titles/titles.ts","../src/api/titles/index.ts","../src/pages/titles/hooks/useTitleLibrary/useTitleMutations.ts","../src/pages/titles/utils/titleLibrary.ts","../src/pages/titles/hooks/useTitleLibrary/useTitleData.ts","../src/pages/titles/hooks/useTitleLibrary/useTitleActions.ts","../src/pages/titles/hooks/useTitleLibrary/index.ts","../src/pages/titles/hooks/useTitleEdit.ts","../src/pages/titles/hooks/useTitleAI.ts","../src/pages/titles/components/title-library/CategorySidebar.tsx","../src/pages/titles/components/title-library/FilterBar.tsx","../src/pages/titles/components/title-library/TitleCard.tsx","../src/pages/titles/components/title-library/TitleGrid.tsx","../src/pages/titles/components/title-library/CreateTitleModal.tsx","../src/pages/titles/components/title-library/AIGenerateModal.tsx","../src/pages/titles/TitleLibrary.tsx","../src/components/layout/PageHead/types.ts","../src/components/layout/PageHead/constants.ts","../src/components/layout/PageHead/utils.ts","../src/components/layout/PageHead/index.tsx","../src/pages/voices/components/VoiceTabBar.tsx","../src/pages/voices/components/VoiceFilterBar.tsx","../src/api/voices/types.ts","../src/api/voices/voices.ts","../src/api/voices/index.ts","../src/api/voice-clone/types.ts","../src/api/voice-clone/utils.ts","../src/api/voice-clone/clones.ts","../src/api/voice-clone/index.ts","../src/pages/voices/types.ts","../src/pages/voices/constants.ts","../src/pages/voices/utils/format.ts","../src/pages/voices/components/VoiceCard.tsx","../src/pages/voices/components/PresetVoiceTab.tsx","../src/pages/voices/components/clone-voice-card/CardHeader.tsx","../src/pages/voices/components/clone-voice-card/CardFooter.tsx","../src/pages/voices/components/CloneVoiceCard.tsx","../src/pages/voices/components/CloneCardSkeleton.tsx","../src/pages/voices/components/ClonedVoiceTab.tsx","../src/pages/voice-materials/types.ts","../src/pages/voices/components/MaterialVoiceTab.tsx","../src/pages/voices/components/tts-modal/VoiceSelector.tsx","../src/pages/voices/components/tts-modal/types.ts","../src/pages/voices/components/tts-modal/TextInputSection.tsx","../src/pages/voices/components/tts-modal/SpeedControl.tsx","../src/pages/voices/components/tts-modal/SynthesizeButton.tsx","../src/pages/voices/components/tts-modal/ErrorAlert.tsx","../src/pages/voices/components/tts-modal/ResultPanel.tsx","../src/pages/voices/components/TtsModal.tsx","../src/components/voice/CloneModal/types.ts","../src/components/voice/CloneModal/constants.ts","../src/components/voice/CloneModal/utils.ts","../src/components/voice/CloneModal/hooks/useAudioRecorder.ts","../src/components/voice/CloneModal/index.tsx","../src/pages/voices/components/CloneDetailModal.tsx","../src/pages/voices/components/upload-voice-modal/types.ts","../src/pages/voices/components/upload-voice-modal/FileUploadZone.tsx","../src/pages/voices/components/upload-voice-modal/FileInfoCard.tsx","../src/pages/voices/components/upload-voice-modal/UploadProgress.tsx","../src/pages/voices/components/upload-voice-modal/FormFields.tsx","../src/pages/voices/components/upload-voice-modal/ActionButtons.tsx","../src/pages/voices/components/upload-voice-modal/index.ts","../src/pages/voices/components/UploadVoiceModal.tsx","../src/pages/voices/components/VoiceModals.tsx","../src/pages/voices/components/VoiceToasts.tsx","../src/pages/voices/hooks/useVoicesData.ts","../src/api/tts/types.ts","../src/api/tts/jobs.ts","../src/api/tts/index.ts","../src/pages/voices/hooks/useAudioPlayer.ts","../src/pages/voices/hooks/useCloneOperations.ts","../src/pages/voices/hooks/useTtsSynthesize.ts","../src/pages/voices/hooks/useVoiceUpload.ts","../src/pages/voices/hooks/useMaterialDelete.ts","../src/pages/voices/hooks/useMaterialBatchDelete.ts","../src/pages/voices/VoiceLibrary.tsx","../src/pages/editing-planner/types/transition.ts","../src/pages/editing-planner/types/speed.ts","../src/pages/editing-planner/types/tts.ts","../src/pages/editing-planner/types/trim.ts","../src/pages/editing-planner/types/watermark.ts","../src/pages/editing-planner/types/intro-outro.ts","../src/pages/editing-planner/types/pip.ts","../src/pages/editing-planner/types/filter.ts","../src/pages/editing-planner/types/chroma-key.ts","../src/pages/editing-planner/types/sticker.ts","../src/pages/editing-planner/types/clip.ts","../src/pages/editing-planner/types/title.ts","../src/pages/editing-planner/types/subtitle.ts","../src/pages/editing-planner/types/index.ts","../src/pages/generate/types/cover.ts","../src/api/editing-planner/types.ts","../src/api/editing-planner/constants.ts","../src/api/editing-planner/templates.ts","../src/api/editing-planner/index.ts","../src/api/template-editor/types.ts","../src/api/template-editor/constants.ts","../src/api/template-editor/editPlans.ts","../src/api/template-editor/clips.ts","../src/api/template-editor/aiFeatures.ts","../src/api/template-editor/mediaAssets.ts","../src/api/template-editor/index.ts","../src/api/templates/types.ts","../src/api/templates/constants.ts","../src/api/templates/templates.ts","../src/api/templates/index.ts","../src/pages/templates/types/templateLibrary.ts","../src/pages/templates/constants/templateLibrary.ts","../src/pages/templates/hooks/useTemplateLibrary.ts","../src/pages/templates/hooks/useTemplateDetail.ts","../src/pages/templates/components/template-library/TemplateHeader.tsx","../src/pages/templates/components/template-library/TemplateToolbar.tsx","../src/pages/templates/utils/templateLibrary.ts","../src/pages/templates/components/template-library/TemplateCard.tsx","../src/pages/templates/components/template-library/TemplateGrid.tsx","../src/pages/templates/components/template-library/template-detail-modal/types.ts","../src/pages/templates/components/template-library/template-detail-modal/PreviewArea.tsx","../src/pages/templates/components/template-library/template-detail-modal/SegmentList.tsx","../src/pages/templates/components/template-library/template-detail-modal/StyleConfig.tsx","../src/pages/templates/components/template-library/template-detail-modal/DetailFooter.tsx","../src/pages/templates/components/template-library/TemplateDetailModal.tsx","../src/pages/templates/TemplateLibrary.tsx","../src/hooks/useCloneProgress.ts","../src/pages/generate/components/GenerateHeader.tsx","../src/pages/generate/utils/calculateTotalVideoDuration.ts","../src/pages/generate/hooks/useSegmentScheduler.ts","../node_modules/mp4box/dist/all-JrUeGBJv.d.mts","../node_modules/mp4box/dist/mp4box.all.d.mts","../src/pages/generate/hooks/useCanvasPlayer.ts","../src/pages/generate/components/FrontendPreviewPlayer.tsx","../src/pages/generate/constants.ts","../src/pages/generate/components/GenerateStepsBar.tsx","../src/pages/generate/types.ts","../src/pages/generate/hooks/useStep1Template.ts","../src/pages/generate/components/Step1TemplateSelect.tsx","../src/pages/generate/hooks/step2-materials/useMaterialLibrary.ts","../src/pages/generate/hooks/step2-materials/useSmartMatch.ts","../src/pages/generate/hooks/useDraftAutoSave.ts","../src/pages/generate/hooks/useStep2Materials.ts","../src/pages/generate/components/material/MaterialModeTabs.tsx","../src/pages/generate/components/material/ManualMaterialList.tsx","../src/pages/generate/components/material/SmartMatchInput.tsx","../src/pages/generate/components/material/SmartMatchResults.tsx","../src/pages/generate/components/Step2MaterialSelect.tsx","../src/pages/generate/components/Step5VoiceSelect.tsx","../src/pages/generate/hooks/useStep4Title/useAiTitleGenerator.ts","../src/pages/generate/hooks/useStep4Title/useTitleStyleUpdaters.ts","../src/pages/generate/hooks/useStep4Title/index.ts","../src/pages/generate/components/title/AiTitleCard.tsx","../src/pages/generate/components/title/AiTitleGenerator.tsx","../src/pages/generate/components/title/TitlePresetsGrid.tsx","../src/pages/generate/components/title/TitleStylePanel.tsx","../src/pages/generate/components/Step4TitleSettings.tsx","../src/pages/generate/hooks/useStep7Generate.ts","../src/pages/generate/components/step7-confirm/SummaryCard.tsx","../src/pages/generate/components/step7-confirm/GenerationStatus.tsx","../src/pages/generate/components/Step7ConfirmGenerate.tsx","../src/api/generation/types.ts","../src/api/generation/preview.ts","../src/api/generation/cover.ts","../src/api/generation/index.ts","../src/api/cover-templates.ts","../src/pages/generate/hooks/useStep6Cover.ts","../src/pages/generate/components/cover-settings/CoverSettingsModal.tsx","../src/pages/generate/components/cover-settings/CoverEditorModal.tsx","../src/pages/generate/components/Step6CoverSettings.tsx","../src/pages/generate/components/GenerateStepContent.tsx","../src/pages/generate/components/GenerateStepActions.tsx","../src/pages/generate/hooks/useGenerateFormState/useTemplateSelection.ts","../src/pages/generate/hooks/useGenerateFormState/useTitleCoverSync.ts","../src/pages/generate/hooks/useGenerateFormState/useVoiceState.ts","../src/pages/generate/hooks/useGenerateFormState/usePlanConfigLoader.ts","../src/pages/generate/hooks/usePersistedState.ts","../src/pages/generate/hooks/useGenerateFormState/index.ts","../src/pages/generate/hooks/useStepNavigation.ts","../src/api/tasks/types.ts","../src/api/tasks/tasks.ts","../src/pages/generate/hooks/generate-video/types.ts","../src/pages/generate/hooks/generate-video/phase.ts","../src/pages/generate/hooks/generate-video/errorUtils.ts","../src/pages/generate/hooks/generate-video/useGenerationPolling.ts","../src/pages/generate/hooks/generate-video/buildPayload.ts","../src/pages/generate/utils/calculateResolution.ts","../src/pages/generate/hooks/useGenerateVideo.ts","../src/pages/generate/hooks/usePreviewAssets.ts","../src/pages/generate/GeneratePage.tsx","../src/pages/history/components/States.tsx","../src/pages/history/constants.ts","../src/api/tasks/index.ts","../src/pages/history/utils.ts","../src/pages/history/hooks/useTaskHistory.ts","../src/pages/history/components/TaskList.tsx","../src/pages/history/TaskHistory.tsx","../src/api/products/types.ts","../src/api/products/utils.ts","../src/api/products/products.ts","../src/api/products/index.ts","../src/pages/products/types.ts","../src/pages/products/constants.ts","../src/pages/products/utils/index.ts","../src/pages/products/components/ProductCard.tsx","../src/pages/products/components/ProductFilterBar.tsx","../src/pages/products/components/ProductBatchBar.tsx","../src/pages/products/components/ProductEmptyState.tsx","../src/pages/products/hooks/useProductList/useProductFiltering.ts","../src/pages/products/hooks/useProductList/useBatchSelection.ts","../src/pages/products/hooks/useProductList/index.ts","../src/pages/products/hooks/product-actions/useBatchDownload.ts","../src/pages/products/hooks/product-actions/useBatchDelete.ts","../src/pages/products/hooks/product-actions/useProductMutations.ts","../src/pages/products/hooks/useProductActions.ts","../src/pages/products/ProductLibrary.tsx","../src/pages/products/components/DetailHeader.tsx","../src/pages/products/detailUtils.ts","../src/pages/products/hooks/useVideoPlayer.ts","../src/pages/products/components/DetailVideoPlayer.tsx","../src/pages/products/components/ProductInfoPanel.tsx","../src/pages/products/hooks/useProductDetail.ts","../src/pages/products/ProductDetail.tsx","../src/pages/tasks/constants.tsx","../src/pages/tasks/components/TaskFilterBar.tsx","../src/pages/tasks/components/TaskErrorDetail.tsx","../src/pages/tasks/utils.ts","../src/pages/tasks/components/task-table/useTaskTableColumns.tsx","../src/pages/tasks/components/task-table/TaskEmptyState.tsx","../src/pages/tasks/components/task-table/index.ts","../src/pages/tasks/components/TaskTable.tsx","../src/pages/tasks/hooks/useTaskList.ts","../src/pages/tasks/TaskCenter.tsx","../src/pages/editing-planner/constants.ts","../src/pages/editing-planner/components/MediaPanel.tsx","../src/pages/editing-planner/components/PreviewPlayer.tsx","../src/pages/editing-planner/constants/timeline.ts","../src/pages/editing-planner/hooks/useClipDrag.ts","../src/pages/editing-planner/hooks/useTrimDrag.ts","../src/pages/editing-planner/hooks/timeline-menus/useContextMenu.ts","../src/pages/editing-planner/hooks/timeline-menus/useAddPicker.ts","../src/pages/editing-planner/hooks/useTimelineMenus.ts","../src/pages/editing-planner/components/timeline/hooks/usePlayheadDrag.ts","../src/pages/editing-planner/utils/timeline.ts","../src/pages/editing-planner/components/timeline/TimeRuler.tsx","../src/pages/editing-planner/components/timeline/ClipCard.tsx","../src/pages/editing-planner/components/timeline/ClipTrack.tsx","../src/pages/editing-planner/components/timeline/TimelineHeader.tsx","../src/pages/editing-planner/components/timeline/AddClipPicker.tsx","../src/pages/editing-planner/components/timeline/TrimPreview.tsx","../src/pages/editing-planner/components/timeline/ContextMenu.tsx","../src/pages/editing-planner/components/TimelinePanel.tsx","../src/pages/editing-planner/components/TopBar.tsx","../src/pages/editing-planner/components/ModeBar.tsx","../src/pages/editing-planner/types/clipProperties.ts","../src/pages/editing-planner/constants/clipProperties.ts","../src/pages/editing-planner/components/clip-properties/SubtitleSettingsSection.tsx","../src/pages/editing-planner/components/clip-properties/BgmSettingsSection.tsx","../src/pages/editing-planner/components/clip-properties/clip-detail-section/ClipTypeAndDuration.tsx","../src/pages/editing-planner/components/clip-properties/clip-detail-section/AdvancedEntries.tsx","../src/pages/editing-planner/utils/clipProperties.ts","../src/pages/editing-planner/components/clip-properties/clip-detail-section/VoiceMaterialSection.tsx","../src/pages/editing-planner/components/clip-properties/clip-detail-section/index.tsx","../src/pages/editing-planner/components/clip-properties/ClipDetailSection.tsx","../src/pages/editing-planner/components/clip-properties/StatsSection.tsx","../src/pages/editing-planner/hooks/useVoicePreview.ts","../src/pages/editing-planner/components/ClipPropertiesPanel.tsx","../src/pages/editing-planner/components/EditorClipList.tsx","../src/api/bgm/types.ts","../src/api/bgm/constants.ts","../src/api/bgm/bgm.ts","../src/api/bgm/index.ts","../src/pages/editing-planner/components/RightPanel.tsx","../src/pages/editing-planner/components/StatusBar.tsx","../src/pages/editing-planner/components/bgm-selector/useBgmSelector.ts","../src/pages/editing-planner/components/bgm-selector/BgmItem.tsx","../src/pages/editing-planner/components/bgm-selector/BgmMixConfig.tsx","../src/pages/editing-planner/components/bgm-selector/index.tsx","../src/pages/editing-planner/components/BgmSelector.tsx","../src/pages/editing-planner/constants/subtitleStyle.ts","../src/pages/editing-planner/components/subtitle-style/SubtitlePreview.tsx","../src/pages/editing-planner/components/subtitle-style/SubtitleModeSwitch.tsx","../src/pages/editing-planner/components/subtitle-style/SubtitlePositionSelector.tsx","../src/pages/editing-planner/components/subtitle-style/SubtitleEffectButtons.tsx","../src/pages/editing-planner/components/SubtitleStylePanel.tsx","../src/pages/editing-planner/components/TransitionSelector.tsx","../src/pages/editing-planner/components/SpeedPanel.tsx","../src/pages/editing-planner/components/TtsPanel/hooks/useTtsPanel.ts","../src/pages/editing-planner/components/TtsPanel/components/VoiceSelector.tsx","../src/pages/editing-planner/components/TtsPanel/components/TtsSlider.tsx","../src/pages/editing-planner/components/TtsPanel/constants.ts","../src/pages/editing-planner/components/TtsPanel/index.tsx","../src/pages/editing-planner/constants/watermark.ts","../src/pages/editing-planner/components/watermark/WatermarkTypeTabs.tsx","../src/pages/editing-planner/components/watermark/ImageWatermarkSection.tsx","../src/pages/editing-planner/components/watermark/TextWatermarkSection.tsx","../src/pages/editing-planner/components/watermark/ScrollWatermarkSection.tsx","../src/pages/editing-planner/components/watermark/WatermarkCommonSection.tsx","../src/pages/editing-planner/hooks/useWatermarkConfig.ts","../src/pages/editing-planner/components/WatermarkPanel.tsx","../src/pages/editing-planner/constants/introOutro.ts","../src/pages/editing-planner/components/intro-outro/IntroOutroBlock.tsx","../src/pages/editing-planner/components/IntroOutroPanel.tsx","../src/pages/editing-planner/components/PipConfigPanel/constants.ts","../src/pages/editing-planner/components/PipConfigPanel/hooks/usePipConfigPanel.ts","../src/pages/editing-planner/components/PipConfigPanel/components/LayerList.tsx","../src/pages/editing-planner/components/PipConfigPanel/components/PipPreview.tsx","../src/pages/editing-planner/components/PipConfigPanel/components/LayerConfig.tsx","../src/pages/editing-planner/components/PipConfigPanel/index.tsx","../src/pages/editing-planner/constants/filter.ts","../src/pages/editing-planner/components/filter/FilterPresetGrid.tsx","../src/pages/editing-planner/components/filter/FilterManualAdjust.tsx","../src/pages/editing-planner/components/FilterPanel.tsx","../src/pages/editing-planner/components/green-screen/GreenScreenPresets.tsx","../src/pages/editing-planner/components/green-screen/GreenScreenCustomColor.tsx","../src/pages/editing-planner/components/green-screen/GreenScreenSliders.tsx","../src/pages/editing-planner/components/green-screen/GreenScreenPreview.tsx","../src/pages/editing-planner/components/GreenScreenPanel.tsx","../src/pages/editing-planner/components/StickerPanel/constants.ts","../src/pages/editing-planner/components/StickerPanel/hooks/useStickerPanel.ts","../src/pages/editing-planner/components/StickerPanel/components/StickerTabs.tsx","../src/pages/editing-planner/components/StickerPanel/components/StickerList.tsx","../src/pages/editing-planner/components/StickerPanel/components/StickerPropsEditor.tsx","../src/pages/editing-planner/components/StickerPanel/index.tsx","../src/pages/editing-planner/components/EditorDrawers.tsx","../src/pages/editing-planner/components/SaveModal.tsx","../src/pages/editing-planner/hooks/useUndoRedo.ts","../src/pages/editing-planner/hooks/useEditorDrawers.ts","../src/pages/editing-planner/hooks/usePlaybackControl.ts","../src/pages/editing-planner/hooks/useClipOperations/useClipBasicOps.ts","../src/pages/editing-planner/hooks/useClipOperations/useClipTrim.ts","../src/pages/editing-planner/hooks/useClipOperations/useClipEffects.ts","../src/pages/editing-planner/hooks/useClipOperations/index.ts","../src/pages/editing-planner/hooks/template-management/useTemplateList.ts","../src/pages/editing-planner/hooks/template-management/useTemplateDetail.ts","../src/pages/editing-planner/hooks/template-management/usePlanLoading.ts","../src/pages/editing-planner/hooks/template-management/useTemplateSave.ts","../src/pages/editing-planner/hooks/useTemplateManagement.ts","../src/pages/editing-planner/hooks/useGlobalSettings.ts","../src/pages/editing-planner/hooks/useVoiceMaterials.ts","../src/pages/editing-planner/EditingPlanner.tsx","../src/pages/my-templates/hooks/useMyTemplates.ts","../src/pages/my-templates/components/TemplateCard.tsx","../src/pages/my-templates/MyTemplates.tsx","../src/pages/voice-clone/types.ts","../src/pages/voice-clone/components/VoiceCloneCard.tsx","../src/pages/voice-clone/components/States.tsx","../src/pages/voice-clone/components/EditNameDialog.tsx","../src/pages/voice-clone/hooks/useVoiceCloneList.ts","../src/pages/voice-clone/VoiceClone.tsx","../src/api/tags/types.ts","../src/api/tags/tags.ts","../src/api/tags/index.ts","../src/pages/voice-materials/hooks/useVoiceMaterials/useVoiceTags.ts","../src/pages/voice-materials/hooks/useVoiceMaterials/useVoiceMaterialFilterState.ts","../src/pages/voice-materials/hooks/useVoiceMaterials/useVoiceMaterialData.ts","../src/pages/voice-materials/hooks/useVoiceMaterials/actions/useVoiceUpload.ts","../src/pages/voice-materials/hooks/useVoiceMaterials/actions/useVoiceEdit.ts","../src/pages/voice-materials/hooks/useVoiceMaterials/actions/useVoiceDelete.ts","../src/pages/voice-materials/hooks/useVoiceMaterials/useVoiceMaterialActions.ts","../src/pages/voice-materials/hooks/useVoiceMaterials/index.ts","../src/pages/voice-materials/hooks/useAudioPlayer.ts","../src/pages/voice-materials/hooks/useBatchOperations.ts","../src/pages/voice-materials/hooks/useTtsSynthesize.ts","../src/pages/voice-materials/components/tag-selector/useTagInput.ts","../src/pages/voice-materials/components/TagSelector.tsx","../src/pages/voice-materials/constants.tsx","../src/pages/voice-materials/utils/format.ts","../src/pages/voice-materials/components/material-form/FileUploadField.tsx","../src/pages/voice-materials/components/material-form/GenderSelector.tsx","../src/pages/voice-materials/components/MaterialForm.tsx","../src/pages/voice-materials/components/voice-material-card/types.ts","../src/pages/voice-materials/components/voice-material-card/BatchCheckbox.tsx","../src/pages/voice-materials/components/voice-material-card/CardActions.tsx","../src/pages/voice-materials/components/voice-material-card/CardHeader.tsx","../src/pages/voice-materials/components/voice-material-card/CardTags.tsx","../src/pages/voice-materials/components/voice-material-card/CardMeta.tsx","../src/pages/voice-materials/components/voice-material-card/CardPlayer.tsx","../src/pages/voice-materials/components/VoiceMaterialCard.tsx","../src/pages/voice-materials/components/voice-material-row/useRowProgress.ts","../src/pages/voice-materials/components/voice-material-row/TagDisplay.tsx","../src/pages/voice-materials/components/VoiceMaterialRow.tsx","../src/pages/voice-materials/components/Toolbar.tsx","../src/pages/voice-materials/components/TagFilterBar.tsx","../src/pages/voice-materials/components/BatchBar.tsx","../src/pages/voice-materials/components/EmptyState.tsx","../src/pages/voice-materials/components/TtsModal.tsx","../src/pages/voice-materials/VoiceMaterialLibrary.tsx","../src/pages/my-voices/types.ts","../src/pages/my-voices/utils.ts","../src/pages/my-voices/components/VoiceCard.tsx","../src/pages/my-voices/components/States.tsx","../src/pages/my-voices/hooks/useMyVoices.ts","../src/pages/my-voices/MyVoices.tsx","../src/pages/accounts/Accounts.tsx","../src/pages/duplication/duplication-upload/constants.ts","../src/pages/duplication/duplication-upload/UploadZone.tsx","../src/pages/duplication/duplication-upload/UploadActions.tsx","../src/pages/duplication/duplication-upload/UploadProgress.tsx","../src/pages/duplication/duplication-upload/UploadResultPanel.tsx","../src/pages/duplication/duplication-upload/InfoSidebar.tsx","../src/api/duplication/types.ts","../src/api/duplication/duplication.ts","../src/api/duplication/index.ts","../src/pages/duplication/duplication-upload/useDuplicationUpload.ts","../src/pages/duplication/DuplicationUpload.tsx","../src/pages/duplication/types.ts","../src/pages/duplication/utils.ts","../src/pages/duplication/hooks/useDuplicationResults.ts","../src/pages/duplication/constants.ts","../src/pages/duplication/components/FilterBar.tsx","../src/pages/duplication/components/EmptyState.tsx","../src/pages/duplication/components/ResultCard.tsx","../src/pages/duplication/DuplicationResults.tsx","../src/pages/duplication/components/RiskCard.tsx","../src/pages/duplication/components/InfoCard.tsx","../src/pages/duplication/components/SegmentCard.tsx","../src/pages/duplication/components/SegmentsSection.tsx","../src/pages/duplication/hooks/useDuplicationDetail.ts","../src/pages/duplication/DuplicationDetail.tsx","../src/pages/subscription/Plans.tsx","../src/api/subscription/types.ts","../src/api/subscription/subscription.ts","../src/api/subscription/index.ts","../src/pages/subscription/constants.ts","../src/pages/subscription/components/SubscriptionUI.tsx","../src/pages/subscription/hooks/useSubscription.ts","../src/pages/subscription/UpgradeSubscription.tsx","../src/pages/subscription/Billing.tsx","../src/pages/profile/Settings.tsx","../src/pages/admin/AdminComingSoon.tsx","../src/router/appRoutes.tsx","../src/router/index.tsx","../src/main.tsx","../src/api/generation/confirm.ts","../src/components/asset-selector/utils/index.ts","../src/components/asset-selector/AssetCard.tsx","../src/components/asset-selector/AssetListItem.tsx","../src/components/asset-selector/types/index.ts","../src/components/asset-selector/hooks/useAssetFilter.ts","../src/components/asset-selector/hooks/useAssetSelection.ts","../src/components/asset-selector/hooks/useDragReorder.ts","../src/components/asset-selector/hooks/useAssetPreview.ts","../src/components/asset-selector/constants.ts","../src/components/asset-selector/SelectorToolbar.tsx","../src/components/asset-selector/SelectorBatchBar.tsx","../src/components/asset-selector/PreviewOverlay.tsx","../src/components/asset-selector/EmptyState.tsx","../src/components/asset-selector/AssetSelector.tsx","../src/components/asset-selector/index.ts","../src/pages/assets/hooks/asset-operations/batch/useBatchDelete.ts","../src/pages/assets/hooks/asset-operations/batch/useBatchTag.ts","../src/pages/assets/hooks/asset-operations/batch/useBatchClassify.ts","../src/pages/assets/hooks/asset-operations/batch/useBatchMark.ts","../src/pages/assets/hooks/asset-operations/batchOperations.ts","../src/pages/assets/hooks/asset-operations/batch/index.ts","../src/pages/editing-planner/components/editing-drawers/types.ts","../src/pages/editing-planner/components/editing-drawers/ClipLevelDrawers.tsx","../src/pages/editing-planner/components/editing-drawers/GlobalDrawers.tsx","../src/pages/editing-planner/components/EditingDrawers.tsx","../src/pages/editing-planner/constants/pipConfig.ts","../src/pages/editing-planner/components/pip-config/layer-config/PipPreview.tsx","../src/pages/editing-planner/components/pip-config/layer-config/LayerPositionSize.tsx","../src/pages/editing-planner/components/pip-config/layer-config/LayerTimingAnimation.tsx","../src/pages/editing-planner/components/pip-config/layer-config/index.tsx","../src/pages/editing-planner/components/pip-config/LayerConfig.tsx","../src/pages/editing-planner/components/pip-config/LayerList.tsx","../src/pages/editing-planner/constants/sticker.ts","../src/pages/editing-planner/components/sticker/StickerLibrary.tsx","../src/pages/editing-planner/components/sticker/StickerList.tsx","../src/pages/editing-planner/components/sticker/StickerPreview.tsx","../src/pages/editing-planner/components/sticker/TextStickerPropsEditor.tsx","../src/pages/editing-planner/components/sticker/StickerPropsEditor.tsx","../src/pages/editing-planner/components/tts/TtsSlider.tsx","../src/pages/editing-planner/constants/tts.ts","../src/pages/editing-planner/components/tts/VoiceSelector.tsx","../src/pages/editing-planner/hooks/usePipLayers.ts","../src/pages/editing-planner/hooks/useStickerItems.ts","../src/pages/editing-planner/hooks/useTtsPanel.ts","../src/pages/editing-planner/hooks/useEditPlanClips/useEditPlanClipList.ts","../src/pages/editing-planner/hooks/useEditPlanClips/useClipReorder.ts","../src/pages/editing-planner/hooks/useEditPlanClips/useClipImport.ts","../src/pages/editing-planner/hooks/useEditPlanClips/useEditPlanClipMutations.ts","../src/pages/editing-planner/hooks/useEditPlanClips/index.ts","../src/pages/editing-planner/utils/selectors.ts","../src/pages/generate/components/result-panel/ProgressIndicator.tsx","../src/pages/generate/components/result-panel/ResultVideoCard.tsx","../src/pages/generate/components/GenerateResultPanel.tsx","../src/pages/generate/hooks/useServerPreview.ts","../src/pages/generate/components/PreviewVideoPanel.tsx","../src/pages/generate/components/cover-settings/CoverModeSelector.tsx","../src/pages/generate/components/cover-settings/FrameCoverPicker.tsx","../src/pages/generate/components/cover-settings/UploadCoverPicker.tsx","../src/pages/generate/components/voice/CloneVoiceSection.tsx","../src/pages/generate/components/voice/CustomVoicePanel.tsx","../src/pages/generate/components/voice/PresetVoiceDetail.tsx","../src/pages/generate/components/voice/SaveVoiceModal.tsx","../src/pages/generate/components/voice/VoiceChoiceCard.tsx","../src/pages/generate/components/voice/VoiceRecommendSection.tsx","../src/pages/generate/utils/formatDuration.ts","../src/pages/generate/hooks/step5-voice/useVoiceAudio.ts","../src/pages/generate/hooks/step5-voice/useVoiceRecommend.ts","../src/pages/generate/hooks/step5-voice/useTtsSynthesis.ts","../src/pages/generate/hooks/step5-voice/useSaveToLibrary.tsx","../src/pages/generate/hooks/step5-voice/useVoiceModeSelection.ts","../src/pages/generate/hooks/useStep5Voice.tsx","../src/pages/generate/hooks/generate-video/voiceConfig.ts","../src/pages/products/components/VideoPlayer.tsx","../src/pages/templates/components/template-library/template-detail-modal/index.ts","../src/pages/voice-materials/components/voice-material-card/index.ts","../src/pages/voice-materials/utils/audio.ts","../src/pages/voices/components/tts-modal/index.ts","../src/pages/voices/utils/audio.ts","../node_modules/@vitest/utils/dist/types.d.ts","../node_modules/@vitest/utils/dist/helpers.d.ts","../node_modules/@sinclair/typebox/typebox.d.ts","../node_modules/@jest/schemas/build/index.d.ts","../node_modules/@vitest/utils/node_modules/pretty-format/build/index.d.ts","../node_modules/@vitest/utils/dist/index.d.ts","../node_modules/@vitest/runner/dist/tasks-K5XERDtv.d.ts","../node_modules/@vitest/utils/dist/types-9l4niLY8.d.ts","../node_modules/@vitest/utils/dist/diff.d.ts","../node_modules/@vitest/runner/dist/types.d.ts","../node_modules/@vitest/utils/dist/error.d.ts","../node_modules/@vitest/runner/dist/index.d.ts","../node_modules/@vitest/runner/dist/utils.d.ts","../node_modules/@types/node/compatibility/disposable.d.ts","../node_modules/@types/node/compatibility/indexable.d.ts","../node_modules/@types/node/compatibility/iterators.d.ts","../node_modules/@types/node/compatibility/index.d.ts","../node_modules/@types/node/globals.typedarray.d.ts","../node_modules/@types/node/buffer.buffer.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/web-globals/abortcontroller.d.ts","../node_modules/@types/node/web-globals/domexception.d.ts","../node_modules/@types/node/web-globals/events.d.ts","../node_modules/undici-types/header.d.ts","../node_modules/undici-types/readable.d.ts","../node_modules/undici-types/file.d.ts","../node_modules/undici-types/fetch.d.ts","../node_modules/undici-types/formdata.d.ts","../node_modules/undici-types/connector.d.ts","../node_modules/undici-types/client.d.ts","../node_modules/undici-types/errors.d.ts","../node_modules/undici-types/dispatcher.d.ts","../node_modules/undici-types/global-dispatcher.d.ts","../node_modules/undici-types/global-origin.d.ts","../node_modules/undici-types/pool-stats.d.ts","../node_modules/undici-types/pool.d.ts","../node_modules/undici-types/handlers.d.ts","../node_modules/undici-types/balanced-pool.d.ts","../node_modules/undici-types/agent.d.ts","../node_modules/undici-types/mock-interceptor.d.ts","../node_modules/undici-types/mock-agent.d.ts","../node_modules/undici-types/mock-client.d.ts","../node_modules/undici-types/mock-pool.d.ts","../node_modules/undici-types/mock-errors.d.ts","../node_modules/undici-types/proxy-agent.d.ts","../node_modules/undici-types/env-http-proxy-agent.d.ts","../node_modules/undici-types/retry-handler.d.ts","../node_modules/undici-types/retry-agent.d.ts","../node_modules/undici-types/api.d.ts","../node_modules/undici-types/interceptors.d.ts","../node_modules/undici-types/util.d.ts","../node_modules/undici-types/cookies.d.ts","../node_modules/undici-types/patch.d.ts","../node_modules/undici-types/websocket.d.ts","../node_modules/undici-types/eventsource.d.ts","../node_modules/undici-types/filereader.d.ts","../node_modules/undici-types/diagnostics-channel.d.ts","../node_modules/undici-types/content-type.d.ts","../node_modules/undici-types/cache.d.ts","../node_modules/undici-types/index.d.ts","../node_modules/@types/node/web-globals/fetch.d.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.generated.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/readline/promises.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/sea.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/test.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/index.d.ts","../node_modules/@types/estree/index.d.ts","../node_modules/rollup/dist/rollup.d.ts","../node_modules/rollup/dist/parseAst.d.ts","../node_modules/vite/types/hmrPayload.d.ts","../node_modules/vite/types/customEvent.d.ts","../node_modules/vite/types/hot.d.ts","../node_modules/vite/dist/node/types.d-aGj9QkWt.d.ts","../node_modules/esbuild/lib/main.d.ts","../node_modules/source-map-js/source-map.d.ts","../node_modules/postcss/lib/previous-map.d.ts","../node_modules/postcss/lib/input.d.ts","../node_modules/postcss/lib/css-syntax-error.d.ts","../node_modules/postcss/lib/declaration.d.ts","../node_modules/postcss/lib/root.d.ts","../node_modules/postcss/lib/warning.d.ts","../node_modules/postcss/lib/lazy-result.d.ts","../node_modules/postcss/lib/no-work-result.d.ts","../node_modules/postcss/lib/processor.d.ts","../node_modules/postcss/lib/result.d.ts","../node_modules/postcss/lib/document.d.ts","../node_modules/postcss/lib/rule.d.ts","../node_modules/postcss/lib/node.d.ts","../node_modules/postcss/lib/comment.d.ts","../node_modules/postcss/lib/container.d.ts","../node_modules/postcss/lib/at-rule.d.ts","../node_modules/postcss/lib/list.d.ts","../node_modules/postcss/lib/postcss.d.ts","../node_modules/postcss/lib/postcss.d.mts","../node_modules/vite/dist/node/runtime.d.ts","../node_modules/vite/types/importGlob.d.ts","../node_modules/vite/types/metadata.d.ts","../node_modules/vite/dist/node/index.d.ts","../node_modules/vite-node/dist/trace-mapping.d-xyIfZtPm.d.ts","../node_modules/vite-node/dist/index-O2IrwHKf.d.ts","../node_modules/vite-node/dist/index.d.ts","../node_modules/@vitest/snapshot/node_modules/pretty-format/build/index.d.ts","../node_modules/@vitest/snapshot/dist/environment-cMiGIVXz.d.ts","../node_modules/@vitest/snapshot/dist/index-S94ASl6q.d.ts","../node_modules/@vitest/snapshot/dist/index.d.ts","../node_modules/@vitest/expect/dist/chai.d.cts","../node_modules/@vitest/expect/dist/index.d.ts","../node_modules/@vitest/expect/index.d.ts","../node_modules/tinybench/dist/index.d.ts","../node_modules/vite-node/dist/client.d.ts","../node_modules/@vitest/snapshot/dist/manager.d.ts","../node_modules/vite-node/dist/server.d.ts","../node_modules/vitest/dist/reporters-w_64AS5f.d.ts","../node_modules/vitest/dist/suite-dWqIFb_-.d.ts","../node_modules/@vitest/spy/dist/index.d.ts","../node_modules/@vitest/snapshot/dist/environment.d.ts","../node_modules/vitest/dist/index.d.ts","../node_modules/vitest/globals.d.ts","../node_modules/@types/aria-query/index.d.ts","../node_modules/@testing-library/jest-dom/types/matchers.d.ts","../node_modules/@testing-library/jest-dom/types/jest.d.ts","../node_modules/@testing-library/jest-dom/types/index.d.ts"],"fileIdsList":[[2460,2506],[172,182,2460,2506],[182,183,187,190,191,2460,2506],[172,2460,2506],[51,181,2460,2506],[183,2460,2506],[183,188,189,2460,2506],[51,172,182,183,184,185,186,2460,2506],[182,2460,2506],[161,2460,2506],[51,142,151,159,2460,2506],[142,143,144,2460,2506],[143,144,2460,2506],[143,147,2460,2506],[142,2460,2506],[49,51,143,150,158,160,172,2460,2506],[144,145,148,149,150,158,159,160,161,168,169,170,171,2460,2506],[151,2460,2506],[151,152,153,154,155,156,157,2460,2506],[146,2460,2506],[146,147,2460,2506],[162,2460,2506],[162,163,164,2460,2506],[146,147,162,165,166,167,2460,2506],[159,2460,2506],[534,2460,2506],[534,535,2460,2506],[51,595,596,597,2460,2506],[51,2460,2506],[51,596,2460,2506],[51,598,2460,2506],[1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,2460,2506],[51,596,597,1862,1863,1864,2460,2506],[2444,2460,2506],[51,538,540,2460,2506],[536,538,2460,2506],[51,537,538,2460,2506],[51,539,2460,2506],[537,538,539,541,542,2460,2506],[537,2460,2506],[442,2460,2506],[442,443,444,2460,2506],[445,446,2460,2506],[413,414,2460,2506],[51,580,2460,2506],[580,581,582,583,2460,2506],[51,579,2460,2506],[580,2460,2506],[51,363,2460,2506],[365,2460,2506],[363,364,2460,2506],[51,113,360,361,362,2460,2506],[113,2460,2506],[51,111,112,2460,2506],[51,111,2460,2506],[54,55,56,2460,2506],[54,55,2460,2506],[54,2460,2506],[65,2460,2506],[51,52,66,2460,2506],[67,2460,2506],[2460,2506,2609],[2460,2506,2608],[2460,2506,2607],[2460,2503,2506],[2460,2505,2506],[2506],[2460,2506,2511,2539],[2460,2506,2507,2512,2517,2525,2536,2547],[2460,2506,2507,2508,2517,2525],[2455,2456,2457,2460,2506],[2460,2506,2509,2548],[2460,2506,2510,2511,2518,2526],[2460,2506,2511,2536,2544],[2460,2506,2512,2514,2517,2525],[2460,2505,2506,2513],[2460,2506,2514,2515],[2460,2506,2516,2517],[2460,2505,2506,2517],[2460,2506,2517,2518,2519,2536,2547],[2460,2506,2517,2518,2519,2532,2536,2539],[2460,2506,2514,2517,2520,2525,2536,2547],[2460,2506,2517,2518,2520,2521,2525,2536,2544,2547],[2460,2506,2520,2522,2536,2544,2547],[2458,2459,2460,2461,2462,2463,2464,2502,2503,2504,2505,2506,2507,2508,2509,2510,2511,2512,2513,2514,2515,2516,2517,2518,2519,2520,2521,2522,2523,2524,2525,2526,2527,2528,2529,2530,2531,2532,2533,2534,2535,2536,2537,2538,2539,2540,2541,2542,2543,2544,2545,2546,2547,2548,2549,2550,2551,2552,2553],[2460,2506,2517,2523],[2460,2506,2524,2547,2552],[2460,2506,2514,2517,2525,2536],[2460,2506,2526],[2460,2506,2527],[2460,2505,2506,2528],[2460,2503,2504,2505,2506,2507,2508,2509,2510,2511,2512,2513,2514,2515,2516,2517,2518,2519,2520,2521,2522,2523,2524,2525,2526,2527,2528,2529,2530,2531,2532,2533,2534,2535,2536,2537,2538,2539,2540,2541,2542,2543,2544,2545,2546,2547,2548,2549,2550,2551,2552,2553],[2460,2506,2530],[2460,2506,2531],[2460,2506,2517,2532,2533],[2460,2506,2532,2534,2548,2550],[2460,2506,2517,2536,2537,2539],[2460,2506,2538,2539],[2460,2506,2536,2537],[2460,2506,2539],[2460,2506,2540],[2460,2503,2506,2536,2541],[2460,2506,2517,2542,2543],[2460,2506,2542,2543],[2460,2506,2511,2525,2536,2544],[2460,2506,2545],[2460,2506,2525,2546],[2460,2506,2520,2531,2547],[2460,2506,2511,2548],[2460,2506,2536,2549],[2460,2506,2524,2550],[2460,2506,2551],[2460,2501,2506],[2460,2501,2506,2517,2519,2528,2536,2539,2547,2550,2552],[2460,2506,2536,2553],[48,49,50,2460,2506],[2447,2450,2460,2506],[2460,2506,2595],[2447,2448,2450,2451,2452,2460,2506],[2447,2460,2506],[2447,2448,2450,2460,2506],[2447,2448,2460,2506],[2460,2506,2591],[2446,2460,2506,2591],[2446,2460,2506,2591,2592],[2445,2460,2506],[2446,2449,2460,2506],[2442,2460,2506],[2442,2443,2446,2460,2506],[2446,2460,2506],[277,2460,2506],[81,82,83,84,85,86,87,88,2460,2506],[51,79,80,2460,2506],[70,2460,2506],[111,2460,2506],[113,228,2460,2506],[285,2460,2506],[200,2460,2506],[182,200,2460,2506],[51,71,2460,2506],[51,89,2460,2506],[90,91,2460,2506],[51,200,2460,2506],[51,72,93,2460,2506],[93,94,2460,2506],[51,70,513,2460,2506],[51,96,463,512,2460,2506],[514,515,2460,2506],[513,2460,2506],[51,286,311,313,2460,2506],[51,70,308,517,2460,2506],[51,519,2460,2506],[51,69,2460,2506],[51,465,519,2460,2506],[520,521,2460,2506],[51,70,278,2460,2506],[51,70,200,278,380,381,2460,2506],[51,70,354,524,2460,2506],[51,352,2460,2506],[524,525,2460,2506],[51,97,2460,2506],[51,97,98,99,2460,2506],[51,100,2460,2506],[97,98,99,100,2460,2506],[210,2460,2506],[51,70,105,114,528,2460,2506],[51,289,529,2460,2506],[527,2460,2506],[172,200,217,2460,2506],[51,388,392,2460,2506],[393,394,395,2460,2506],[51,531,2460,2506],[51,397,402,2460,2506],[51,70,97,286,312,400,401,509,2460,2506],[51,331,2460,2506],[51,332,333,2460,2506],[51,334,2460,2506],[331,332,334,2460,2506],[172,200,2460,2506],[452,2460,2506],[51,97,405,406,2460,2506],[406,407,2460,2506],[51,70,545,2460,2506],[536,545,2460,2506],[544,545,546,2460,2506],[51,97,282,465,543,544,2460,2506],[51,92,101,138,277,282,290,292,294,313,315,351,355,357,366,372,378,379,382,392,396,402,408,409,412,422,423,424,441,450,455,459,462,463,465,473,477,481,483,499,505,506,2460,2506],[97,2460,2506],[51,97,101,378,506,507,508,2460,2506],[51,70,105,119,286,291,292,509,2460,2506],[70,97,114,119,286,290,509,2460,2506],[51,70,119,286,289,291,292,293,509,2460,2506],[293,2460,2506],[215,216,2460,2506],[172,200,215,2460,2506],[200,212,213,214,2460,2506],[51,69,410,411,2460,2506],[51,89,420,2460,2506],[51,419,420,421,2460,2506],[51,98,292,352,2460,2506],[51,113,280,343,351,2460,2506],[352,353,2460,2506],[51,200,214,228,2460,2506],[51,70,423,2460,2506],[51,70,97,2460,2506],[51,424,2460,2506],[51,424,550,551,552,2460,2506],[553,2460,2506],[51,282,292,382,2460,2506],[51,285,2460,2506],[51,97,104,131,132,133,136,137,285,509,2460,2506],[51,120,138,139,283,284,2460,2506],[51,133,285,2460,2506],[51,133,136,282,2460,2506],[51,104,2460,2506],[51,104,133,136,138,285,555,2460,2506],[131,136,2460,2506],[137,2460,2506],[104,138,285,556,557,558,559,2460,2506],[104,135,2460,2506],[51,69,70,2460,2506],[133,451,648,2460,2506],[51,564,2460,2506],[51,566,567,2460,2506],[69,70,72,92,95,282,290,292,294,313,315,335,351,354,355,357,366,372,375,382,392,396,401,402,408,409,412,422,423,424,441,450,452,455,459,462,465,473,477,481,483,498,499,505,509,516,518,522,523,526,530,532,533,547,548,549,554,560,568,570,575,578,585,586,591,594,599,600,602,612,617,622,627,629,631,634,636,643,645,646,647,2460,2506],[51,97,286,449,509,2460,2506],[236,2460,2506],[200,212,2460,2506],[51,97,286,426,431,509,2460,2506],[51,97,286,509,2460,2506],[51,432,2460,2506],[51,97,286,432,439,509,2460,2506],[425,432,433,434,435,440,2460,2506],[172,200,212,2460,2506],[345,569,2460,2506],[51,455,2460,2506],[51,355,357,452,453,454,2460,2506],[51,104,293,294,314,316,359,366,372,376,377,510,2460,2506],[378,2460,2506],[51,70,286,456,458,509,2460,2506],[51,509,2460,2506],[51,343,2460,2506],[51,344,2460,2506],[51,343,344,346,347,348,349,350,2460,2506],[336,2460,2506],[51,343,344,345,346,2460,2506],[51,96,572,2460,2506],[51,96,573,574,2460,2506],[51,96,2460,2506],[51,510,2460,2506],[51,78,510,2460,2506],[510,2460,2506],[460,461,510,511,512,2460,2506],[51,69,79,100,509,2460,2506],[51,511,2460,2506],[51,463,572,2460,2506],[51,463,576,577,2460,2506],[51,463,2460,2506],[51,298,313,2460,2506],[314,2460,2506],[51,315,2460,2506],[51,100,279,282,316,2460,2506],[51,465,2460,2506],[51,279,282,464,2460,2506],[200,214,228,2460,2506],[374,2460,2506],[51,585,2460,2506],[51,378,584,2460,2506],[51,587,2460,2506],[587,588,589,590,2460,2506],[51,97,331,332,334,2460,2506],[51,332,587,2460,2506],[51,593,2460,2506],[51,97,601,2460,2506],[51,70,97,286,308,309,311,312,509,2460,2506],[213,2460,2506],[51,603,2460,2506],[51,604,605,606,607,608,609,610,2460,2506],[611,2460,2506],[51,70,282,470,472,2460,2506],[51,97,509,2460,2506],[51,97,474,475,476,2460,2506],[51,614,2460,2506],[614,615,616,2460,2506],[613,2460,2506],[51,618,619,2460,2506],[51,80,618,2460,2506],[619,620,621,2460,2506],[51,625,626,2460,2506],[172,200,214,2460,2506],[172,200,277,2460,2506],[51,628,2460,2506],[70,359,2460,2506],[51,70,359,478,2460,2506],[70,97,330,357,359,2460,2506],[330,356,359,478,479,2460,2506],[330,358,359,478,480,2460,2506],[51,69,70,282,319,330,335,354,355,356,358,2460,2506],[51,385,392,2460,2506],[51,97,383,388,390,391,2460,2506],[51,70,89,278,482,2460,2506],[51,172,194,277,2460,2506],[51,172,195,277,630,648,2460,2506],[51,179,2460,2506],[201,202,203,204,205,206,207,208,209,211,217,218,219,220,221,222,223,224,225,226,227,229,230,231,232,233,234,235,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,2460,2506],[180,192,275,2460,2506],[70,172,173,174,179,180,275,276,2460,2506],[173,174,175,176,177,178,2460,2506],[173,2460,2506],[172,192,193,195,196,197,198,199,277,2460,2506],[172,195,277,2460,2506],[182,187,192,277,2460,2506],[509,2460,2506],[51,70,119,286,289,291,2460,2506],[51,632,2460,2506],[51,70,2460,2506],[632,633,2460,2506],[51,282,2460,2506],[51,70,140,141,278,279,280,281,2460,2506],[51,366,2460,2506],[51,366,635,2460,2506],[51,365,2460,2506],[51,367,369,372,2460,2506],[51,286,367,369,370,371,2460,2506],[51,367,368,372,2460,2506],[51,70,97,286,311,312,489,493,496,498,509,2460,2506],[200,270,2460,2506],[51,484,495,496,2460,2506],[51,484,495,2460,2506],[484,495,496,497,2460,2506],[51,282,439,637,2460,2506],[51,638,2460,2506],[637,639,640,641,642,2460,2506],[51,376,503,2460,2506],[51,376,502,2460,2506],[376,503,504,2460,2506],[51,373,375,2460,2506],[644,2460,2506],[735,2460,2506],[746,747,748,749,750,751,752,753,2460,2506],[51,79,745,2460,2506],[649,2460,2506],[113,686,2460,2506],[984,2460,2506],[743,2460,2506],[182,743,2460,2506],[51,803,2460,2506],[51,754,2460,2506],[755,756,2460,2506],[51,743,2460,2506],[51,804,805,2460,2506],[805,806,2460,2506],[51,649,813,2460,2506],[51,808,811,812,2460,2506],[814,815,2460,2506],[813,2460,2506],[51,311,817,985,2460,2506],[51,308,649,818,2460,2506],[51,820,2460,2506],[51,780,2460,2506],[51,820,823,2460,2506],[821,824,2460,2506],[51,649,758,2460,2506],[51,649,743,758,759,760,2460,2506],[51,649,837,838,2460,2506],[51,835,2460,2506],[838,839,2460,2506],[51,762,2460,2506],[51,762,763,764,2460,2506],[51,765,2460,2506],[762,763,764,765,2460,2506],[668,2460,2506],[51,105,114,649,842,2460,2506],[51,289,843,2460,2506],[841,2460,2506],[172,675,743,2460,2506],[51,388,768,2460,2506],[769,770,771,2460,2506],[51,397,775,2460,2506],[51,400,649,762,773,774,979,985,2460,2506],[51,846,847,2460,2506],[51,848,2460,2506],[331,846,848,2460,2506],[172,743,2460,2506],[972,2460,2506],[51,405,762,776,2460,2506],[776,777,2460,2506],[51,649,852,2460,2506],[536,852,2460,2506],[851,852,853,2460,2506],[51,543,762,791,823,851,2460,2506],[51,650,735,744,757,761,766,768,772,775,778,779,783,785,786,787,791,792,799,800,812,817,823,834,873,879,884,886,910,914,915,934,936,939,943,951,955,966,975,976,980,989,2460,2506],[762,2460,2506],[51,650,762,976,977,978,989,2460,2506],[51,105,119,649,766,979,985,986,2460,2506],[114,119,649,762,939,979,985,2460,2506],[51,119,289,649,766,979,985,986,987,2460,2506],[987,2460,2506],[673,674,2460,2506],[172,673,743,2460,2506],[670,671,672,743,2460,2506],[51,780,781,782,2460,2506],[51,420,754,2460,2506],[51,419,420,784,2460,2506],[51,763,766,835,2460,2506],[51,113,343,789,834,2460,2506],[835,836,2460,2506],[51,672,686,743,2460,2506],[51,649,787,2460,2506],[51,649,762,2460,2506],[51,792,2460,2506],[51,792,857,858,859,2460,2506],[860,2460,2506],[51,761,766,791,2460,2506],[51,984,2460,2506],[51,104,131,132,762,801,862,866,979,984,2460,2506],[51,120,980,981,982,983,2460,2506],[51,801,984,2460,2506],[51,791,801,862,2460,2506],[51,104,555,801,862,980,984,2460,2506],[131,862,2460,2506],[866,2460,2506],[104,863,864,865,867,980,984,2460,2506],[51,649,780,2460,2506],[801,802,971,2460,2506],[51,566,869,2460,2506],[649,757,761,766,768,772,774,775,778,779,780,783,785,786,787,791,792,799,800,804,807,816,817,819,823,825,826,834,837,840,844,845,849,850,854,855,856,861,868,870,872,873,876,879,882,884,886,888,889,890,895,896,897,898,899,909,910,914,915,920,925,926,927,934,936,938,939,942,943,945,951,954,955,962,966,968,969,970,972,975,979,2460,2506],[51,449,762,979,985,2460,2506],[694,2460,2506],[670,743,2460,2506],[51,426,431,762,979,985,2460,2506],[51,762,979,985,2460,2506],[51,794,2460,2506],[51,439,762,794,979,985,2460,2506],[793,794,795,796,797,798,2460,2506],[172,670,743,2460,2506],[828,871,2460,2506],[51,975,2460,2506],[51,884,915,972,973,974,2460,2506],[51,104,786,809,883,885,929,943,951,963,987,988,2460,2506],[989,2460,2506],[51,456,458,649,979,985,2460,2506],[51,979,2460,2506],[51,827,2460,2506],[51,343,827,829,830,831,832,833,2460,2506],[51,343,827,828,829,2460,2506],[51,572,808,2460,2506],[51,808,874,875,2460,2506],[51,808,2460,2506],[51,809,2460,2506],[51,78,809,2460,2506],[809,2460,2506],[809,810,811,877,878,2460,2506],[51,79,765,780,979,2460,2506],[51,810,2460,2506],[51,572,812,2460,2506],[51,812,880,881,2460,2506],[51,812,2460,2506],[51,298,817,2460,2506],[883,2460,2506],[51,886,2460,2506],[51,765,788,791,885,2460,2506],[51,823,2460,2506],[51,788,791,822,2460,2506],[672,686,743,2460,2506],[887,2460,2506],[51,889,2460,2506],[51,584,989,2460,2506],[51,891,2460,2506],[891,892,893,894,2460,2506],[51,331,762,846,848,2460,2506],[51,846,891,2460,2506],[51,601,762,2460,2506],[51,308,309,311,649,762,773,979,985,2460,2506],[671,2460,2506],[51,900,2460,2506],[51,901,902,903,904,905,906,907,2460,2506],[908,2460,2506],[51,470,472,649,791,2460,2506],[51,762,979,2460,2506],[51,762,911,912,913,2460,2506],[51,917,2460,2506],[917,918,919,2460,2506],[916,2460,2506],[51,921,922,2460,2506],[51,745,921,2460,2506],[922,923,924,2460,2506],[172,672,743,2460,2506],[172,735,743,2460,2506],[649,929,2460,2506],[51,649,929,931,2460,2506],[330,649,762,915,929,2460,2506],[330,928,929,931,932,2460,2506],[330,929,930,931,933,2460,2506],[51,319,330,649,780,791,837,849,884,928,930,2460,2506],[51,385,768,2460,2506],[51,383,388,390,762,767,2460,2506],[51,649,754,758,935,2460,2506],[51,172,735,737,2460,2506],[51,172,735,738,937,971,2460,2506],[51,657,2460,2506],[659,660,661,662,663,664,665,666,667,669,675,676,677,678,679,680,681,682,683,684,685,687,688,689,690,691,692,693,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,2460,2506],[192,658,733,2460,2506],[172,649,651,652,657,658,733,734,2460,2506],[651,652,653,654,655,656,2460,2506],[651,2460,2506],[172,192,735,736,738,739,740,741,742,2460,2506],[172,735,738,2460,2506],[182,187,192,735,2460,2506],[979,2460,2506],[51,119,289,649,985,986,2460,2506],[51,940,2460,2506],[51,649,2460,2506],[940,941,2460,2506],[51,791,2460,2506],[51,140,141,649,758,788,789,790,2460,2506],[51,943,2460,2506],[51,943,944,2460,2506],[51,946,948,951,2460,2506],[51,946,948,949,950,985,2460,2506],[51,946,947,951,2460,2506],[51,311,489,493,649,762,773,952,954,979,985,2460,2506],[728,743,2460,2506],[51,484,495,952,2460,2506],[484,495,952,953,2460,2506],[51,439,791,956,2460,2506],[51,957,2460,2506],[956,958,959,960,961,2460,2506],[51,963,964,2460,2506],[51,502,963,2460,2506],[963,964,965,2460,2506],[51,373,888,2460,2506],[967,2460,2506],[288,2460,2506],[287,2460,2506],[2059,2460,2506],[2460,2506,2578],[2460,2506,2576,2578],[2460,2506,2567,2575,2576,2577,2579,2581],[2460,2506,2565],[2460,2506,2568,2573,2578,2581],[2460,2506,2564,2581],[2460,2506,2568,2569,2572,2573,2574,2581],[2460,2506,2568,2569,2570,2572,2573,2581],[2460,2506,2565,2566,2567,2568,2569,2573,2574,2575,2577,2578,2579,2581],[2460,2506,2581],[2460,2506,2563,2565,2566,2567,2568,2569,2570,2572,2573,2574,2575,2576,2577,2578,2579,2580],[2460,2506,2563,2581],[2460,2506,2568,2570,2571,2573,2574,2581],[2460,2506,2572,2581],[2460,2506,2573,2574,2578,2581],[2460,2506,2566,2576],[51,112,306,311,397,398,2460,2506],[51,399,2460,2506],[397,399,2460,2506],[399,2460,2506],[51,403,2460,2506],[51,403,404,2460,2506],[51,76,2460,2506],[51,75,2460,2506],[76,77,78,2460,2506],[51,415,416,417,418,2460,2506],[51,111,416,417,2460,2506],[419,2460,2506],[51,112,113,386,2460,2506],[51,123,2460,2506],[51,122,123,124,125,126,127,128,129,130,2460,2506],[51,121,122,2460,2506],[123,2460,2506],[51,102,103,2460,2506],[104,2460,2506],[51,75,76,561,562,564,2460,2506],[51,79,561,565,2460,2506],[51,561,562,563,565,2460,2506],[565,2460,2506],[51,426,428,447,2460,2506],[448,2460,2506],[51,428,2460,2506],[428,429,430,2460,2506],[51,426,427,2460,2506],[51,428,439,456,457,2460,2506],[456,458,2460,2506],[51,336,2460,2506],[51,111,336,2460,2506],[336,337,338,339,340,341,342,2460,2506],[51,106,2460,2506],[51,107,108,2460,2506],[106,107,109,110,2460,2506],[51,571,2460,2506],[51,296,2460,2506],[296,297,2460,2506],[51,295,2460,2506],[51,114,115,2460,2506],[51,114,2460,2506],[114,116,117,118,2460,2506],[51,105,113,2460,2506],[51,592,2460,2506],[51,112,304,305,2460,2506],[51,309,2460,2506],[51,305,306,307,308,2460,2506],[51,306,2460,2506],[306,307,308,309,310,2460,2506],[51,466,2460,2506],[51,466,467,2460,2506],[51,466,468,469,2460,2506],[470,471,2460,2506],[51,623,625,2460,2506],[51,623,624,2460,2506],[624,625,2460,2506],[51,319,2460,2506],[51,320,321,2460,2506],[51,319,322,2460,2506],[51,317,319,323,324,325,326,2460,2506],[51,319,326,327,2460,2506],[317,319,323,324,325,327,328,329,2460,2506],[51,318,2460,2506],[319,2460,2506],[51,319,324,2460,2506],[51,383,388,2460,2506],[51,388,2460,2506],[389,2460,2506],[51,111,384,385,387,2460,2506],[51,428,431,436,2460,2506],[436,437,438,2460,2506],[51,112,113,2460,2506],[51,489,2460,2506],[51,311,484,488,489,490,491,2460,2506],[490,491,492,2460,2506],[51,484,2460,2506],[484,489,2460,2506],[51,484,485,486,487,2460,2506],[51,484,488,2460,2506],[484,485,488,494,2460,2506],[51,304,2460,2506],[51,373,2460,2506],[51,373,500,2460,2506],[373,501,2460,2506],[51,73,74,2460,2506],[51,299,300,302,303,2460,2506],[51,300,301,2460,2506],[57,2460,2506],[51,57,62,63,2460,2506],[57,58,59,60,61,2460,2506],[51,57,58,2460,2506],[51,57,2460,2506],[57,59,2460,2506],[2460,2506,2556,2585],[2460,2506,2555,2556],[134,2460,2506],[2460,2473,2477,2506,2547],[2460,2473,2506,2536,2547],[2460,2468,2506],[2460,2470,2473,2506,2544,2547],[2460,2506,2525,2544],[2460,2506,2554],[2460,2468,2506,2554],[2460,2470,2473,2506,2525,2547],[2460,2465,2466,2469,2472,2506,2517,2536,2547],[2460,2473,2480,2506],[2460,2465,2471,2506],[2460,2473,2494,2495,2506],[2460,2469,2473,2506,2539,2547,2554],[2460,2494,2506,2554],[2460,2467,2468,2506,2554],[2460,2473,2506],[2460,2467,2468,2469,2470,2471,2472,2473,2474,2475,2477,2478,2479,2480,2481,2482,2483,2484,2485,2486,2487,2488,2489,2490,2491,2492,2493,2495,2496,2497,2498,2499,2500,2506],[2460,2473,2488,2506],[2460,2473,2480,2481,2506],[2460,2471,2473,2481,2482,2506],[2460,2472,2506],[2460,2465,2468,2473,2506],[2460,2473,2477,2481,2482,2506],[2460,2477,2506],[2460,2471,2473,2476,2506,2547],[2460,2465,2470,2473,2480,2506],[2460,2506,2536],[2460,2468,2473,2494,2506,2552,2554],[2460,2506,2587,2588],[2460,2506,2587],[2460,2506,2586,2587,2588,2601],[2460,2506,2517,2518,2520,2521,2522,2525,2536,2544,2547,2553,2554,2556,2557,2558,2559,2560,2561,2562,2582,2583,2584,2585],[2460,2506,2558,2559,2560,2561],[2460,2506,2558,2559,2560],[2460,2506,2558],[2460,2506,2559],[2460,2506,2556],[2447,2450,2453,2454,2460,2506,2518,2536,2552,2586,2589,2593,2594,2596,2597,2598,2599,2600,2601,2602,2603,2604],[2447,2453,2454,2460,2506,2518,2536,2552,2586,2589,2593,2594,2596,2597,2598,2599,2600,2601],[2453,2454,2460,2506,2597,2601],[2460,2506,2605],[991,992,994,995,996,998,2460,2506],[994,995,996,997,998,2460,2506],[991,994,995,996,998,2460,2506],[52,1021,1882,2460,2506],[52,1021,1882,1886,2460,2506],[52,1882,1887,1888,1889,1890,1891,1892,1893,2460,2506],[52,2460,2506],[52,1017,1021,2460,2506],[52,1017,1018,1021,2460,2506],[52,1021,2460,2506],[52,1017,1018,1022,1023,1024,1025,1026,1027,2460,2506],[52,1017,1019,1021,2460,2506],[52,1000,1022,2460,2506],[52,1017,2460,2506],[52,1021,2197,2460,2506],[52,2197,2460,2506],[52,2197,2198,2199,2460,2506],[52,648,1000,1019,1020,2460,2506],[52,1021,2023,2460,2506],[52,1021,2330,2460,2506],[52,2330,2331,2460,2506],[52,2024,2460,2506],[52,2024,2025,2026,2460,2506],[52,1021,2024,2460,2506],[52,2022,2023,2460,2506],[52,1021,2090,2460,2506],[52,2090,2091,2092,2460,2506],[52,2126,2127,2128,2460,2506],[52,1021,2126,2127,2460,2506],[52,2126,2460,2506],[52,1883,1884,1885,2460,2506],[52,1021,1883,1884,2460,2506],[52,1883,2460,2506],[52,2350,2351,2460,2506],[52,1021,2350,2460,2506],[52,2279,2280,2460,2506],[52,1021,2279,2460,2506],[52,2108,2109,2460,2506],[52,1021,2108,2460,2506],[52,1021,2028,2460,2506],[52,2028,2460,2506],[52,2028,2029,2030,2031,2032,2033,2460,2506],[52,1021,1894,2028,2460,2506],[52,2035,2036,2037,2460,2506],[52,1021,2035,2460,2506],[52,2027,2034,2460,2506],[52,1931,1932,1933,2460,2506],[52,1021,1931,1932,2460,2506],[52,1931,2460,2506],[52,1999,2000,2460,2506],[52,1021,1999,2460,2506],[52,1021,1958,1959,2460,2506],[52,1958,1959,1960,2460,2506],[52,1958,2460,2506],[52,1955,1956,2460,2506],[52,1021,1955,2460,2506],[51,52,2034,2364,2460,2506],[51,52,2034,2365,2366,2367,2368,2369,2370,2371,2373,2374,2375,2376,2460,2506],[51,52,2460,2506],[51,52,1009,2460,2506],[51,52,1009,2034,2367,2372,2460,2506],[51,52,2034,2367,2460,2506],[51,52,2034,2460,2506],[52,2367,2377,2460,2506],[52,2034,2460,2506],[51,52,648,1028,1869,2460,2506],[51,52,648,1870,1871,2460,2506],[52,1028,2460,2506],[51,52,64,1876,2460,2506],[51,52,64,648,1000,1029,1865,1875,2460,2506],[51,52,1865,1877,1878,2460,2506],[51,52,64,1865,1949,1951,2460,2506],[52,1949,1950,2460,2506],[51,52,64,1875,1879,2460,2506],[51,52,648,1001,2460,2506],[51,52,441,648,1001,2460,2506],[51,52,462,648,1001,2460,2506],[52,1002,1003,1004,1005,1006,1007,1008,2460,2506],[52,1982,2460,2506],[51,52,1983,1984,2460,2506],[51,52,64,68,1009,1886,1894,1961,1982,1983,1984,1985,2460,2506],[52,1961,2460,2506],[51,52,1865,2460,2506],[52,64,68,1000,1020,1028,2460,2506],[51,52,1961,2460,2506],[51,52,53,64,68,648,990,1020,2361,2460,2506],[51,52,1009,1952,2460,2506],[51,52,64,648,2460,2506],[51,52,1896,1897,1898,1902,1903,1904,1905,1906,1907,1909,1915,1916,1917,1918,1926,2460,2506],[51,52,648,1865,1896,1898,1900,1901,2460,2506],[51,52,1009,1865,1899,2460,2506],[51,52,1009,1865,1896,1898,1908,2460,2506],[51,52,1894,1896,1897,1910,1911,1912,1913,1914,2460,2506],[51,52,1896,2460,2506],[51,52,648,1005,1899,2460,2506],[51,52,648,2460,2506],[51,52,648,1009,1865,2460,2506],[51,52,648,1865,2460,2506],[51,52,648,1009,1896,1899,2460,2506],[51,52,648,1865,1896,1900,1901,2460,2506],[51,52,1005,1896,2460,2506],[51,52,648,1865,1894,2460,2506],[51,52,1865,1906,2460,2506],[52,1896,2460,2506],[52,1920,1921,1922,1924,2460,2506],[51,52,68,648,1894,2460,2506],[51,52,648,1894,2460,2506],[51,52,68,648,1894,1897,1923,2460,2506],[52,2379,2380,2381,2382,2460,2506],[52,1897,2460,2506],[51,52,68,648,1894,1896,2460,2506],[51,52,68,1894,1897,1919,1925,2460,2506],[51,52,68,648,1894,1899,2460,2506],[51,52,68,1894,1896,2460,2506],[52,1894,1895,2460,2506],[52,1896,1899,2460,2506],[51,52,1865,1896,2460,2506],[51,52,64,68,648,1028,1865,2460,2506],[51,52,64,648,1002,1028,1029,2460,2506],[51,52,64,648,1002,1029,1865,2460,2506],[51,52,64,648,1000,1028,1872,2460,2506],[51,52,64,1009,1865,2460,2506],[51,52,1009,1952,2336,2338,2343,2344,2346,2347,2460,2506],[51,52,1009,1952,2337,2339,2340,2341,2460,2506],[51,52,64,1009,1952,2324,2325,2326,2327,2328,2329,2333,2460,2506],[51,52,2335,2338,2460,2506],[51,52,1009,2332,2336,2460,2506],[51,52,1009,2332,2336,2338,2460,2506],[51,52,2338,2460,2506],[51,52,2332,2336,2460,2506],[51,52,1009,2332,2345,2460,2506],[52,2332,2335,2460,2506],[51,52,1009,2324,2460,2506],[51,52,68,2324,2332,2460,2506],[51,52,64,68,2332,2336,2338,2460,2506],[51,52,64,68,2332,2335,2336,2460,2506],[51,52,64,2022,2027,2162,2163,2164,2180,2181,2182,2201,2202,2253,2254,2255,2256,2257,2261,2266,2267,2268,2460,2506],[52,2206,2460,2506],[51,52,2183,2185,2186,2192,2193,2194,2460,2506],[51,52,2254,2385,2386,2387,2460,2506],[51,52,648,1865,2022,2460,2506],[51,52,2021,2022,2200,2207,2213,2214,2215,2220,2228,2231,2237,2241,2246,2252,2460,2506],[51,52,648,2022,2238,2239,2240,2460,2506],[51,52,648,2022,2242,2243,2244,2245,2460,2506],[51,52,648,2022,2230,2460,2506],[51,52,2027,2460,2506],[51,52,2022,2232,2460,2506],[52,2022,2460,2506],[51,52,648,2022,2233,2234,2235,2236,2460,2506],[51,52,2022,2034,2460,2506],[51,52,1894,2021,2022,2027,2195,2196,2200,2460,2506],[51,52,1009,2027,2460,2506],[51,52,648,2022,2460,2506],[51,52,2022,2460,2506],[51,52,2022,2247,2460,2506],[51,52,648,2022,2248,2249,2250,2251,2460,2506],[51,52,547,648,2021,2208,2209,2210,2211,2212,2460,2506],[51,52,2022,2165,2166,2167,2170,2171,2173,2175,2176,2177,2178,2179,2460,2506],[51,52,648,2022,2034,2460,2506],[51,52,1865,1957,2460,2506],[51,52,648,1957,1961,2001,2022,2460,2506],[51,52,648,2022,2216,2217,2218,2219,2460,2506],[51,52,648,2022,2222,2223,2224,2225,2226,2227,2460,2506],[51,52,2200,2460,2506],[51,52,648,2200,2460,2506],[51,52,648,2200,2203,2204,2205,2460,2506],[51,52,2183,2460,2506],[52,2191,2460,2506],[51,52,2027,2189,2460,2506],[51,52,2183,2184,2460,2506],[51,52,2022,2027,2184,2460,2506],[51,52,64,1894,2022,2189,2460,2506],[51,52,1894,2022,2027,2187,2188,2190,2460,2506],[51,52,2022,2214,2215,2220,2385,2460,2506],[51,52,2207,2213,2228,2231,2237,2241,2246,2252,2385,2460,2506],[52,2021,2022,2027,2200,2460,2506],[51,52,2022,2238,2460,2506],[51,52,2022,2034,2229,2460,2506],[52,2393,2460,2506],[51,52,2022,2389,2460,2506],[51,52,2022,2390,2391,2392,2460,2506],[51,52,2022,2396,2460,2506],[51,52,2022,2399,2400,2460,2506],[51,52,2021,2208,2460,2506],[51,52,2021,2460,2506],[51,52,2022,2165,2460,2506],[51,52,2022,2034,2165,2460,2506],[51,52,2022,2174,2460,2506],[51,52,2165,2172,2460,2506],[51,52,2172,2460,2506],[51,52,2001,2403,2460,2506],[51,52,2022,2221,2460,2506],[52,2027,2460,2506],[51,52,648,2021,2022,2034,2200,2460,2506],[51,52,648,2021,2022,2027,2034,2200,2460,2506],[51,52,648,2027,2162,2460,2506],[52,2022,2258,2259,2260,2460,2506],[51,52,648,1894,2022,2460,2506],[52,2034,2255,2408,2411,2460,2506],[51,52,68,648,2034,2460,2506],[51,52,68,2034,2460,2506],[51,52,68,648,2034,2409,2410,2460,2506],[51,52,2021,2022,2034,2200,2460,2506],[51,52,2021,2022,2027,2034,2162,2200,2262,2263,2264,2265,2460,2506],[51,52,2022,2168,2169,2460,2506],[51,52,648,2001,2022,2460,2506],[52,68,1886,1894,2460,2506],[51,52,1894,2460,2506],[52,2009,2010,2011,2012,2460,2506],[52,1894,2019,2027,2460,2506],[52,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2460,2506],[52,2009,2460,2506],[52,1894,2027,2460,2506],[52,2022,2027,2460,2506],[51,52,64,68,648,1894,1961,1986,2001,2055,2056,2057,2062,2064,2079,2099,2100,2106,2107,2116,2117,2460,2506],[51,52,1865,1894,2027,2034,2058,2061,2460,2506],[51,52,648,1865,2034,2414,2415,2460,2506],[51,52,1957,1961,2023,2027,2034,2065,2067,2076,2077,2085,2089,2098,2460,2506],[51,52,2063,2460,2506],[51,52,648,1865,2063,2065,2417,2460,2506],[51,52,2027,2063,2066,2460,2506],[51,52,2034,2035,2071,2072,2073,2074,2075,2460,2506],[51,52,648,1865,2063,2065,2080,2082,2084,2460,2506],[51,52,64,68,648,1865,1894,2460,2506],[51,52,648,1002,2023,2034,2065,2095,2096,2097,2460,2506],[51,52,1957,1961,2023,2027,2034,2086,2087,2088,2460,2506],[51,52,1002,1005,2023,2460,2506],[51,52,2023,2460,2506],[51,52,1865,1961,2034,2460,2506],[51,52,1865,2034,2460,2506],[51,52,1865,2081,2460,2506],[51,52,2065,2083,2460,2506],[51,52,648,1865,1961,2460,2506],[51,52,1865,2281,2460,2506],[52,2023,2460,2506],[52,2110,2460,2506],[52,2023,2034,2065,2460,2506],[51,52,648,1019,2034,2109,2112,2460,2506],[51,52,68,1894,2460,2506],[51,52,648,1894,2035,2460,2506],[51,52,64,68,648,2001,2281,2460,2506],[51,52,68,648,2001,2460,2506],[51,52,68,1957,2460,2506],[51,52,2060,2460,2506],[51,52,64,1957,2023,2027,2034,2063,2065,2101,2102,2103,2104,2105,2460,2506],[51,52,2023,2034,2065,2460,2506],[51,52,68,2027,2460,2506],[51,52,2023,2027,2065,2460,2506],[51,52,648,2034,2109,2110,2111,2112,2113,2114,2115,2460,2506],[51,52,1019,1021,1894,2460,2506],[51,52,2090,2091,2460,2506],[51,52,648,2034,2035,2068,2069,2070,2460,2506],[51,52,68,1934,2065,2070,2078,2079,2460,2506],[51,52,648,2063,2065,2460,2506],[51,52,2063,2065,2460,2506],[51,52,648,1961,2063,2428,2429,2430,2431,2432,2433,2460,2506],[51,52,648,2023,2034,2065,2093,2094,2460,2506],[51,52,68,1894,1957,1961,2023,2027,2034,2063,2460,2506],[52,648,2065,2460,2506],[52,1894,2460,2506],[51,52,2119,2123,2124,2460,2506],[51,52,1009,2120,2123,2460,2506],[51,52,68,2120,2121,2122,2460,2506],[52,2120,2460,2506],[51,52,64,1000,1010,1011,1012,1013,1014,1015,2460,2506],[51,52,64,1009,2460,2506],[51,52,64,648,1865,2027,2270,2271,2460,2506],[51,52,648,1865,2027,2460,2506],[51,52,68,648,2027,2460,2506],[51,52,648,1009,1865,1952,2319,2320,2321,2460,2506],[51,52,1009,1865,2317,2460,2506],[51,52,1009,1865,1961,2317,2318,2460,2506],[51,52,64,1961,2055,2317,2460,2506],[51,52,1009,1865,2145,2148,2149,2150,2460,2506],[51,52,1009,1865,2133,2134,2135,2136,2139,2143,2460,2506],[51,52,1009,1865,2460,2506],[51,52,1865,2146,2147,2460,2506],[51,52,648,1865,2130,2131,2132,2460,2506],[51,52,2129,2131,2146,2460,2506],[51,52,1009,1865,2130,2132,2147,2460,2506],[52,2129,2130,2460,2506],[52,68,648,2129,2460,2506],[51,52,648,2129,2460,2506],[52,64,648,2129,2130,2132,2140,2141,2142,2460,2506],[51,52,64,68,2129,2460,2506],[51,52,68,2129,2132,2137,2138,2460,2506],[51,52,2130,2460,2506],[52,2129,2460,2506],[52,2129,2130,2131,2460,2506],[51,52,1000,1009,1952,2460,2506],[51,52,648,1952,2352,2460,2506],[51,52,648,1952,2460,2506],[51,52,64,1009,1952,2352,2353,2354,2355,2460,2506],[51,52,2352,2460,2506],[52,2352,2460,2506],[51,52,648,2352,2460,2506],[52,648,1865,2153,2159,2160,2460,2506],[51,52,648,1865,2121,2460,2506],[51,52,648,2121,2152,2460,2506],[51,52,648,2121,2154,2158,2460,2506],[52,2156,2157,2460,2506],[52,481,648,1865,2121,2152,2155,2460,2506],[51,52,1865,2121,2460,2506],[51,52,68,648,2121,2460,2506],[51,52,2041,2042,2043,2044,2047,2053,2460,2506],[51,52,648,2038,2045,2460,2506],[51,52,648,2040,2045,2048,2049,2050,2051,2052,2460,2506],[51,52,648,1865,2038,2046,2460,2506],[51,52,1865,2039,2040,2460,2506],[51,52,648,1865,2038,2460,2506],[51,52,2038,2040,2045,2460,2506],[51,52,2038,2045,2460,2506],[52,2048,2049,2050,2051,2052,2053,2460,2506],[52,2038,2460,2506],[52,2039,2460,2506],[51,52,68,648,2038,2460,2506],[51,52,64,68,648,2038,2039,2040,2460,2506],[52,2038,2039,2040,2460,2506],[51,52,1939,1940,1941,1942,1943,1945,1946,1947,2460,2506],[51,52,1005,1009,1865,1929,2460,2506],[51,52,1865,1928,2460,2506],[51,52,1005,1009,1928,1929,2460,2506],[51,52,1009,1865,1928,1929,2460,2506],[51,52,648,1865,1928,1936,2460,2506],[51,52,1865,1928,1944,2460,2506],[52,1928,2460,2506],[51,52,68,648,1929,1934,1936,2460,2506],[51,52,68,648,1928,1934,2460,2506],[52,1930,1935,1937,1938,2460,2506],[51,52,68,648,1928,1936,2460,2506],[51,52,68,1928,1929,1934,1936,2460,2506],[51,52,1928,1929,2460,2506],[52,68,648,1934,2460,2506],[52,1928,1934,2460,2506],[51,52,1009,1952,1986,2274,2275,2276,2277,2460,2506],[51,52,1009,1865,2273,2460,2506],[51,52,648,1009,1865,1961,2273,2460,2506],[51,52,68,1961,2273,2460,2506],[51,52,1009,1865,1952,2289,2290,2291,2292,2299,2307,2310,2311,2312,2313,2314,2315,2460,2506],[51,52,648,1009,1865,2281,2460,2506],[51,52,1009,1972,2281,2294,2297,2298,2460,2506],[51,52,2281,2460,2506],[51,52,1009,1865,2281,2293,2460,2506],[51,52,1009,1865,1972,2460,2506],[51,52,2296,2300,2301,2302,2303,2304,2305,2306,2460,2506],[51,52,1865,1972,2281,2296,2308,2309,2460,2506],[51,52,1865,2296,2460,2506],[51,52,1972,2295,2296,2460,2506],[51,52,1865,1972,2296,2460,2506],[51,52,2296,2460,2506],[51,52,648,1009,2281,2295,2460,2506],[52,2300,2301,2302,2303,2304,2305,2306,2307,2460,2506],[51,52,1972,2281,2460,2506],[51,52,1865,1972,2460,2506],[51,52,1972,2460,2506],[51,52,68,648,1894,1972,2281,2460,2506],[51,52,68,648,1957,1961,2001,2460,2506],[51,52,68,1894,1972,2460,2506],[51,52,68,1894,1972,2281,2460,2506],[51,52,1972,2281,2282,2283,2284,2288,2460,2506],[51,52,1894,1972,2285,2286,2287,2460,2506],[51,52,68,2281,2460,2506],[52,1972,2295,2460,2506],[51,52,1009,1865,1894,1952,1953,1966,1971,1973,1996,1997,1998,2002,2003,2004,2005,2006,2007,2460,2506],[51,52,1009,1865,1962,1963,2460,2506],[51,52,648,1865,1962,1967,1968,2460,2506],[51,52,1009,1865,1962,1969,1970,2460,2506],[51,52,1009,1865,1894,1964,1972,2460,2506],[51,52,1009,1865,1954,1962,1964,1965,2460,2506],[51,52,648,1974,1975,1976,1977,1978,1979,1980,2460,2506],[51,52,648,1994,2460,2506],[51,52,1865,1962,1964,2460,2506],[51,52,1961,1962,1974,1981,1986,1987,1995,2460,2506],[51,52,1865,1962,2460,2506],[51,52,1865,1962,1963,2460,2506],[51,52,1975,2460,2506],[51,52,648,1865,1975,2460,2506],[51,52,1962,1964,2460,2506],[52,1974,1975,1976,1977,1978,1979,1980,1981,2460,2506],[52,1962,1974,2460,2506],[51,52,1865,1964,2460,2506],[51,52,648,1865,1988,2460,2506],[51,52,1988,2460,2506],[52,1988,1989,1990,1991,1992,1993,2460,2506],[52,1962,2460,2506],[51,52,1972,2001,2460,2506],[51,52,68,1961,1962,2460,2506],[51,52,68,1009,1894,1997,2460,2506],[51,52,68,648,1962,1974,2001,2460,2506],[51,52,68,1894,1957,1961,1962,2460,2506],[52,1957,1961,2460,2506],[52,1962,1963,2460,2506],[51,52,64,1000,2460,2506],[52,64,1879,1880,1881,1927,1948,2008,2054,2118,2125,2144,2151,2161,2269,2272,2278,2316,2322,2323,2334,2342,2348,2349,2356,2357,2358,2359,2460,2506],[52,64,1874,2360,2460,2506],[52,64,1000,1016,1030,1866,1867,1868,1873,2460,2506],[52,993,999,2460,2506]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb5b19b86227ace1d29ea4cf81387279d04bb34051e944bc53df69f58914b788","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"87d9d29dbc745f182683f63187bf3d53fd8673e5fca38ad5eaab69798ed29fbc","impliedFormat":1},{"version":"09ddcfcfbe77a8232d155ca1030005106b1328f6210df43629d0be750da07c16","affectsGlobalScope":true,"impliedFormat":1},{"version":"b838d4c72740eb0afd284bf7575b74c624b105eff2e8c7b4aeead57e7ac320ff","impliedFormat":1},{"version":"05321b823dd3781d0b6aac8700bfdc0c9181d56479fe52ba6a40c9196fd661a8","impliedFormat":1},{"version":"5af7c35a9c5c4760fd084fedb6ba4c7059ac9598b410093e5312ac10616bf17b","impliedFormat":1},{"version":"503cdeeaeca0f08ff204ea818f2b3fe711b5e98ac574b6cded51495c943f2c34","impliedFormat":1},{"version":"3c8c1edb7ed8a842cb14d9f2ba6863183168a9fc8d6aa15dec221ebf8b946393","impliedFormat":1},{"version":"0a6e1a3f199d6cc3df0410b4df05a914987b1e152c4beacfd0c5142e15302cac","impliedFormat":1},{"version":"ec3c1376b4f34b271b1815674546fe09a2f449b0773afd381bbce7eb2f96a731","impliedFormat":1},{"version":"c2a262a3157e868d279327daf428dd629bd485f825800c8e62b001e6c879aff6","impliedFormat":1},{"version":"f7e84f314f9276b44b707289446303db8ef34a6c2c6d6b08d03a76e168367072","impliedFormat":1},{"version":"2b493706eb7879d42a8e8009379292b59827d612ab3a275bc476f87e60259c79","impliedFormat":1},{"version":"5542628b04d7bd4e0cd4871b6791b3b936a917ac6b819dcd20487f040acb01f1","impliedFormat":1},{"version":"f07b335f87cfac999fc1da00dfbc616837ced55be67bcaa41524d475b7394554","impliedFormat":1},{"version":"938326adb4731184e14e17fc57fca2a3b69c337ef8d6c00c65d73472fe8feca4","affectsGlobalScope":true,"impliedFormat":1},{"version":"73c078fcbc0fa04ba70b1c3e5a3dea6a980d8765079cdbfb40f903eb8daa4319","impliedFormat":99},{"version":"5297e84d3de08bbe3c00f964d1c74f89cf101d59a4826b335654f44ff41529a8","impliedFormat":99},{"version":"355b33af59287683501f76cbf7d6a141544c5ff1ae5f5c0701a3f89cc38e5238","impliedFormat":99},{"version":"280a996092ab956e80dc7bb7497d472ca5c1be23a9c52ac771f5c750ede462b9","impliedFormat":99},{"version":"764fec087122d840f12f9f24e1dc1e4cc2dcb222f3d13d2a498bf332fbe460d7","impliedFormat":1},{"version":"92ee216a93c16d3724ce70c9a20f56b05659c7c67b86827d481ff89c1a5d23d9","impliedFormat":1},{"version":"05d1a8f963258d75216f13cf313f27108f83a8aa2bff482da356f2bfdfb59ab2","impliedFormat":1},{"version":"1a848ab32f6114131218358c47b81a2b6fd71789d3c9cda62a6218194cba5ecb","impliedFormat":1},{"version":"b1fb9f004934ac2ae15d74b329ac7f4c36320ff4ada680a18cc27e632b6baa82","impliedFormat":1},{"version":"f13c5c100055437e4cf58107e8cbd5bb4fa9c15929f7dc97cb487c2e19c1b7f6","impliedFormat":1},{"version":"ee423b86c3e071a3372c29362c2f26adc020a2d65bcbf63763614db49322234e","impliedFormat":1},{"version":"77d30b82131595dbb9a21c0e1e290247672f34216e1af69a586e4b7ad836694e","impliedFormat":1},{"version":"78d486dac53ad714133fc021b2b68201ba693fab2b245fda06a4fc266cead04a","impliedFormat":1},{"version":"06414fbc74231048587dedc22cd8cac5d80702b81cd7a25d060ab0c2f626f5c8","impliedFormat":1},{"version":"b8533e19e7e2e708ac6c7a16ae11c89ffe36190095e1af146d44bb54b2e596a1","impliedFormat":1},{"version":"b5f70f31ef176a91e4a9f46074b763adc321cd0fdb772c16ca57b17266c32d19","impliedFormat":1},{"version":"169035d6d96186b82cd6456a1dd0dca511abf191d4f59d8ab012d9a5ce25c2e0","impliedFormat":1},{"version":"a78a334d8e93cf70b3dded844963e5d0c529546b12ec3a8668afa05f707e8222","impliedFormat":1},{"version":"503d068eb2b24456c90d15b2331a3cb04aa03b07d35699dac828d8c654d22c4e","impliedFormat":1},{"version":"c133900491138f79cecffb0dca079393b8e704899e4fcf9a9d8b399f8b91c3db","impliedFormat":1},{"version":"0b43cdc862f70c9b37bca929513eab72ab764845ea5d83cef47d148a1ff3f0d5","impliedFormat":1},{"version":"4a193963d67a56bff9331232db719a9dc71ff8a7795cb9de2f047d0de214d709","impliedFormat":1},{"version":"59ce6c57619857ab7dfc367715a3dbf300880cd16e7c84c12ac4ba1e39cdee63","impliedFormat":1},{"version":"5a1c84eb2e4797d0a021fcb4033a1189941265d03d6a1930bf6132143ee4065d","impliedFormat":1},{"version":"d38293b3bcb73ba1c719ba50497859a2f37fa64a6de7f22eeb32ae9f3b1bcefc","impliedFormat":1},{"version":"d67484f1551a676c22ebb9be78723e839d630d6459794e32cc050aaab7641621","impliedFormat":1},{"version":"5eaf2e0f6ea59e43507586de0a91d17d0dd5c59f3919e9d12cbab0e5ed9d2d77","impliedFormat":1},{"version":"be97b1340a3f72edf8404d1d717df2aac5055faaff6c99c24f5a2b2694603745","impliedFormat":1},{"version":"1754df61456e51542219ee17301566ac439115b2a1e5da1a0ffb2197e49ccefe","impliedFormat":1},{"version":"2c90cb5d9288d3b624013a9ca40040b99b939c3a090f6bdca3b4cfc6b1445250","impliedFormat":1},{"version":"3c6d4463866f664a5f51963a2849cb844f2203693be570d0638ee609d75fe902","impliedFormat":1},{"version":"752677ae7ebfef0fa54a6642b48ad671654223c3cde56259ce41292081ef0f0e","impliedFormat":1},{"version":"e88b42f282b55c669a8f35158449b4f7e6e2bccec31fd0d4adb4278928a57a89","impliedFormat":1},{"version":"2a1ed52adfc72556f4846b003a7e5a92081147beef55f27f99466aa6e2a28060","impliedFormat":1},{"version":"a4cf825c93bb52950c8cdc0b94c5766786c81c8ee427fc6774fafb16d0015035","impliedFormat":1},{"version":"4acc7fae6789948156a2faabc1a1ba36d6e33adb09d53bccf9e80248a605b606","impliedFormat":1},{"version":"f9613793aa6b7d742e80302e65741a339b529218ae80820753a61808a9761479","impliedFormat":1},{"version":"b182e2043a595bca73dd39930020425d55c5ff2aae1719d466dadeadc78273c7","impliedFormat":1},{"version":"5b978a20707f2b3b4fa39ca3ba9d0d12590bf4c4167beb3195bcd1421115256f","impliedFormat":1},{"version":"ed1ee10044d15a302d95b2634e6344b9f630528e3d5d7ce0eacad5958f0976c3","impliedFormat":1},{"version":"d18588312a7634d07e733e7960caf78d5b890985f321683b932d21d8d0d69b7b","impliedFormat":1},{"version":"d1dac573a182cc40c170e38a56eb661182fcd8981e9fdf2ce11df9decb73485d","impliedFormat":1},{"version":"c264198b19a4b9718508b49f61e41b6b17a0f9b8ecbf3752e052ad96e476e446","impliedFormat":1},{"version":"9c488a313b2974a52e05100f8b33829aa3466b2bc83e9a89f79985a59d7e1f95","impliedFormat":1},{"version":"e306488a76352d3dd81d8055abf03c3471e79a2e5f08baede5062fa9dca3451c","impliedFormat":1},{"version":"ad7bdd54cf1f5c9493b88a49dc6cec9bc9598d9e114fcf7701627b5e65429478","impliedFormat":1},{"version":"0d274e2a6f13270348818139fd53316e79b336e8a6cf4a6909997c9cbf47883c","impliedFormat":1},{"version":"78664c8054da9cce6148b4a43724195b59e8a56304e89b2651f808d1b2efb137","impliedFormat":1},{"version":"a0568a423bd8fee69e9713dac434b6fccc5477026cda5a0fc0af59ae0bfd325c","impliedFormat":1},{"version":"2a176a57e9858192d143b7ebdeca0784ee3afdb117596a6ee3136f942abe4a01","impliedFormat":1},{"version":"c8ee4dd539b6b1f7146fa5b2d23bca75084ae3b8b51a029f2714ce8299b8f98e","impliedFormat":1},{"version":"c58f688364402b45a18bd4c272fc17b201e1feddc45d10c86cb7771e0dc98a21","impliedFormat":1},{"version":"2904898efb9f6fabfe8dcbe41697ef9b6df8e2c584d60a248af4558c191ce5cf","impliedFormat":1},{"version":"c13189caa4de435228f582b94fb0aae36234cba2b7107df2c064f6f03fc77c3d","impliedFormat":1},{"version":"c97110dbaa961cf90772e8f4ee41c9105ee7c120cb90b31ac04bb03d0e7f95fb","impliedFormat":1},{"version":"c30864ed20a4c8554e8025a2715ba806799eba20aba0fd9807750e57ee2f838f","impliedFormat":1},{"version":"b182e2043a595bca73dd39930020425d55c5ff2aae1719d466dadeadc78273c7","impliedFormat":1},{"version":"5b978a20707f2b3b4fa39ca3ba9d0d12590bf4c4167beb3195bcd1421115256f","impliedFormat":1},{"version":"ed1ee10044d15a302d95b2634e6344b9f630528e3d5d7ce0eacad5958f0976c3","impliedFormat":1},{"version":"c30864ed20a4c8554e8025a2715ba806799eba20aba0fd9807750e57ee2f838f","impliedFormat":1},{"version":"e0cd55e58a4a210488e9c292cc2fc7937d8fc0768c4a9518645115fe500f3f44","impliedFormat":1},{"version":"d0307177b720b32a05c0bbb921420160cba0d3b6e81b1d961481d9abe4a17f60","impliedFormat":1},{"version":"8c25b00a675743d7a381cf6389ae9fbdce82bdc9069b343cb1985b4cd17b14be","impliedFormat":1},{"version":"e72b4624985bd8541ae1d8bde23614d2c44d784bbe51db25789a96e15bb7107a","impliedFormat":1},{"version":"0fb1449ca2990076278f0f9882aa8bc53318fc1fd7bfcbde89eed58d32ae9e35","impliedFormat":1},{"version":"c2625e4ba5ed1cb7e290c0c9eca7cdc5a7bebab26823f24dd61bf58de0b90ad6","impliedFormat":1},{"version":"a20532d24f25d5e73f05d63ad1868c05b813e9eb64ec5d9456bbe5c98982fd2e","impliedFormat":1},{"version":"d0307177b720b32a05c0bbb921420160cba0d3b6e81b1d961481d9abe4a17f60","impliedFormat":1},{"version":"7a17edfdf23eaaf79058134449c7e1e92c03e2a77b09a25b333a63a14dca17ed","impliedFormat":1},{"version":"e78c5d07684e1bb4bf3e5c42f757f2298f0d8b364682201b5801acf4957e4fad","impliedFormat":99},{"version":"4085598deeaff1b924e347f5b6e18cee128b3b52d6756b3753b16257284ceda7","impliedFormat":99},{"version":"c58272e3570726797e7db5085a8063143170759589f2a5e50387eff774eadc88","impliedFormat":1},{"version":"e3d8342c9f537a4ffcab951e5f469ac9c5ed1d6147e9e2a499184cf45ab3c77f","impliedFormat":1},{"version":"bc3ee6fe6cab0459f4827f982dbe36dcbd16017e52c43fec4e139a91919e0630","impliedFormat":1},{"version":"41e0d68718bf4dc5e0984626f3af12c0a5262a35841a2c30a78242605fa7678e","impliedFormat":1},{"version":"6c747f11c6b2a23c4c0f3f440c7401ee49b5f96a7fe4492290dfd3111418321b","impliedFormat":1},{"version":"a6b6c40086c1809d02eff72929d0fc8ec33313f1c929398c9837d31a3b05c66b","impliedFormat":1},{"version":"4e87a7aa00637afd8ccbaf04f8d7fdbd61eb51438e8bd6718debcfd7e55e5d14","impliedFormat":1},{"version":"55d70bb1ac14f79caae20d1b02a2ad09440a6b0b633d125446e89d25e7fd157d","impliedFormat":1},{"version":"c27930b3269795039e392a9b27070e6e9ba9e7da03e6185d4d99b47e0b7929bc","impliedFormat":1},{"version":"ae22e71c8ebcf07a6ca7efb968a9bcdbfb1c2919273901151399c576b2bed4b8","impliedFormat":1},{"version":"47f30de14aa377b60f0cd43e95402d03166d3723f42043ae654ce0a25bc1b321","impliedFormat":1},{"version":"0edcda97d090708110daea417cfd75d6fd0c72c9963fec0a1471757b14f28ae5","impliedFormat":1},{"version":"f730a314c6e3cb76b667c2c268cd15bde7068b90cb61d1c3ab93d65b878d3e76","impliedFormat":1},{"version":"c60096bf924a5a44f792812982e8b5103c936dd7eec1e144ded38319a282087e","impliedFormat":1},{"version":"f9acf26d0b43ad3903167ac9b5d106e481053d92a1f3ab9fe1a89079e5f16b94","impliedFormat":1},{"version":"014e069a32d3ac6adde90dd1dfdb6e653341595c64b87f5b1b3e8a7851502028","impliedFormat":1},{"version":"ac46b462f6ae83bee6d3f61176f8da916c6fd43774b79142a6d1508745fbd152","impliedFormat":1},{"version":"ac46b462f6ae83bee6d3f61176f8da916c6fd43774b79142a6d1508745fbd152","impliedFormat":1},{"version":"ac46b462f6ae83bee6d3f61176f8da916c6fd43774b79142a6d1508745fbd152","impliedFormat":1},{"version":"ac46b462f6ae83bee6d3f61176f8da916c6fd43774b79142a6d1508745fbd152","impliedFormat":1},{"version":"ac46b462f6ae83bee6d3f61176f8da916c6fd43774b79142a6d1508745fbd152","impliedFormat":1},{"version":"86c8f1a471f03ac5232073884775b77d7673516a1eff3b9c4a866c64a5b1693a","impliedFormat":1},{"version":"5545aa84048e8ae5b22838a2b437abd647c58acc43f2f519933cd313ce84476c","impliedFormat":1},{"version":"0d2af812b3894a2daa900a365b727a58cc3cc3f07eb6c114751f9073c8031610","impliedFormat":1},{"version":"30be069b716d982a2ae943b6a3dab9ae1858aa3d0a7218ab256466577fd7c4ca","impliedFormat":1},{"version":"797b6a8e5e93ab462276eebcdff8281970630771f5d9038d7f14b39933e01209","impliedFormat":1},{"version":"549232dd97130463d39dac754cf7faa95c4c71511d11dd9b1d37c225bf675469","impliedFormat":1},{"version":"747779d60c02112794ca81f1641628387d68c8e406be602b87af9ae755d46fd6","impliedFormat":1},{"version":"0a22c78fc4cbf85f27e592bea1e7ece94aadf3c6bd960086f1eff2b3aedf2490","impliedFormat":1},{"version":"fea1857ed9f8e33be23a5a3638c487b25bb44b21032c6148144883165ad10fb0","impliedFormat":1},{"version":"d0cffd20a0deb57297c2bd8c4cd381ed79de7babf9d81198e28e3f56d9aff0db","impliedFormat":1},{"version":"77876c19517f1a79067a364423ba9e4f3c6169d01011320a6fde85a95e8f8f5c","impliedFormat":1},{"version":"84cf3736a269c74c711546db9a8078ad2baaf12e9edd5b33e30252c6fb59b305","impliedFormat":1},{"version":"8309b403027c438254d78ca2bb8ddd04bfaf70260a9db37219d9a49ad6df5d80","impliedFormat":1},{"version":"6a9d4bd7a551d55e912764633a086af149cc937121e011f60f9be60ee5156107","impliedFormat":1},{"version":"f1cea620ee7e602d798132c1062a0440f9d49a43d7fafdc5bdc303f6d84e3e70","impliedFormat":1},{"version":"5769d77cb83e1f931db5e3f56008a419539a1e02befe99a95858562e77907c59","impliedFormat":1},{"version":"1607892c103374a3dc1f45f277b5362d3cb3340bfe1007eec3a31b80dd0cf798","impliedFormat":1},{"version":"402da75bfdaf5b2cf388450cb56a4c5ba2ed67bc9f930eba0e7ce7fc57cddf11","impliedFormat":1},{"version":"220aafeafa992aa95f95017cb6aecea27d4a2b67bb8dd2ce4f5c1181e8d19c21","impliedFormat":1},{"version":"a71dd28388e784bf74a4bc40fd8170fa4535591057730b8e0fef4820cf4b4372","impliedFormat":1},{"version":"0e411566240d81c51c2d95e5f3fa2e8a35c3e7bbe67a43f4eb9c9a2912fdff05","impliedFormat":1},{"version":"4e4325429d6a967ef6aa72ca24890a7788a181d28599fe1b3bb6730a6026f048","impliedFormat":1},{"version":"dcbb4c3abdc5529aeda5d6b0a835d8a0883da2a76e9484a4f19e254e58faf3c6","impliedFormat":1},{"version":"0d81307f711468869759758160975dee18876615db6bf2b8f24188a712f1363b","impliedFormat":1},{"version":"22ddd9cd17d33609d95fb66ece3e6dff2e7b21fa5a075c11ef3f814ee9dd35c7","impliedFormat":1},{"version":"cb43ede907c32e48ba75479ca867464cf61a5f962c33712436fee81431d66468","impliedFormat":1},{"version":"549232dd97130463d39dac754cf7faa95c4c71511d11dd9b1d37c225bf675469","impliedFormat":1},{"version":"1e89d5e4c50ca57947247e03f564d916b3b6a823e73cde1ee8aece5df9e55fc9","impliedFormat":1},{"version":"8538eca908e485ccb8b1dd33c144146988a328aaa4ffcc0a907a00349171276e","impliedFormat":1},{"version":"7b878f38e8233e84442f81cc9f7fb5554f8b735aca2d597f7fe8a069559d9082","impliedFormat":1},{"version":"bf7d8edbd07928d61dbab4047f1e47974a985258d265e38a187410243e5a6ab9","impliedFormat":1},{"version":"747779d60c02112794ca81f1641628387d68c8e406be602b87af9ae755d46fd6","impliedFormat":1},{"version":"40b33243bbbddfe84dbdd590e202bdba50a3fe2fbaf138b24b092c078b541434","impliedFormat":1},{"version":"fea1857ed9f8e33be23a5a3638c487b25bb44b21032c6148144883165ad10fb0","impliedFormat":1},{"version":"f21d84106071ae3a54254bcabeaf82174a09b88d258dd32cafb80b521a387d42","impliedFormat":1},{"version":"21129c4f2a3ae3f21f1668adfda1a4103c8bdd4f25339a7d7a91f56a4a0c8374","impliedFormat":1},{"version":"7c4cf13b05d1c64ce1807d2e5c95fd657f7ef92f1eeb02c96262522c5797f862","impliedFormat":1},{"version":"eebe1715446b4f1234ce2549a8c30961256784d863172621eb08ae9bed2e67a3","impliedFormat":1},{"version":"64ad3b6cbeb3e0d579ebe85e6319d7e1a59892dada995820a2685a6083ea9209","impliedFormat":1},{"version":"5ebdc5a83f417627deff3f688789e08e74ad44a760cdc77b2641bb9bb59ddd29","impliedFormat":1},{"version":"a514beab4d3bc0d7afc9d290925c206a9d1b1a6e9aa38516738ce2ff77d66000","impliedFormat":1},{"version":"d80212bdff306ee2e7463f292b5f9105f08315859a3bdc359ba9daaf58bd9213","impliedFormat":1},{"version":"86b534b096a9cc35e90da2d26efbcb7d51bc5a0b2dde488b8c843c21e5c4701b","impliedFormat":1},{"version":"75519029c9e9389852d22714aec5956e00f090d18082e49f21d2875d554ebd26","impliedFormat":1},{"version":"e46d7758d8090d9b2c601382610894d71763a9909efb97b1eebbc6272d88d924","impliedFormat":1},{"version":"03af1b2c6ddc2498b14b66c5142a7876a8801fcac9183ae7c35aec097315337a","impliedFormat":1},{"version":"294b7d3c2afc0d8d3a7e42f76f1bac93382cb264318c2139ec313372bbfbde4f","impliedFormat":1},{"version":"a7bc0f0fd721b5da047c9d5a202c16be3f816954ad65ab684f00c9371bc8bac2","impliedFormat":1},{"version":"4bf7b966989eb48c30e0b4e52bfe7673fb7a3fb90747bdc5324637fc51505cd1","impliedFormat":1},{"version":"468308e0d01d8c073a6c442b6cbd5f0f7fcb68fbeabd3c30b0719cda2f5bfc38","impliedFormat":1},{"version":"c2d3538fabf7d43abd7599ff74c372800130e67674eb50b371a6c53646d2b977","impliedFormat":1},{"version":"10e006d13225983120773231f9fcc0f747a678056161db5c3c134697d0b4cb60","impliedFormat":1},{"version":"b456eb9cb3ff59d2ad86d53c656a0f07164e9dccbc0f09ac6a6f234dc44714ea","impliedFormat":1},{"version":"0fff2dbabbb30a467bbfef04d44819cb0b1baa84e669b46d4682c9d70ba11605","impliedFormat":1},{"version":"8baf3ec31869d4e82684fe062c59864b9d6d012b9105252e5697e64212e38b74","impliedFormat":1},{"version":"36a9827e64fa8e2af7d4fd939bf29e7ae6254fa9353ccebd849c894a4fd63e1b","impliedFormat":1},{"version":"3af8cee96336dd9dc44b27d94db5443061ff8a92839f2c8bbcc165ca3060fa6c","impliedFormat":1},{"version":"85d786a0accda19ef7beb6ae5a04511560110faa9c9298d27eaa4d44778fbf9e","impliedFormat":1},{"version":"7362683317d7deaa754bbf419d0a4561ee1d9b40859001556c6575ce349d95ea","impliedFormat":1},{"version":"408b6e0edb9d02acaf1f2d9f589aa9c6e445838b45c3bfa15b4bb98dc1453dc4","impliedFormat":1},{"version":"f8faa497faf04ffba0dd21cf01077ae07f0db08035d63a2e69838d173ae305bc","impliedFormat":1},{"version":"f8981c8de04809dccb993e59de5ea6a90027fcb9a6918701114aa5323d6d4173","impliedFormat":1},{"version":"7c9c89fd6d89c0ad443f17dc486aa7a86fa6b8d0767e1443c6c63311bdfbd989","impliedFormat":1},{"version":"a3486e635db0a38737d85e26b25d5fda67adef97db22818845e65a809c13c821","impliedFormat":1},{"version":"7c2918947143409b40385ca24adce5cee90a94646176a86de993fcdb732f8941","impliedFormat":1},{"version":"bdbf3acd48d637f947a0ef48c2301898e2eb8e5f9c1ad1d17b1e3f0d0ce3764c","impliedFormat":1},{"version":"55a36a053bfd464be800af2cd1b3ed83c6751277125786d62870bf159280b280","impliedFormat":1},{"version":"a8e7c075b87fda2dd45aa75d91f3ccb07bec4b3b1840bd4da4a8c60e03575cd2","impliedFormat":1},{"version":"f7b193e858e6c5732efa80f8073f5726dc4be1216450439eb48324939a7dd2be","impliedFormat":1},{"version":"f971e196cdf41219f744e8f435d4b7f8addacd1fbe347c6d7a7d125cd0eaeb99","impliedFormat":1},{"version":"fd38ff4bedf99a1cd2d0301d6ffef4781be7243dfbba1c669132f65869974841","impliedFormat":1},{"version":"e41e32c9fc04b97636e0dc89ecffe428c85d75bfc07e6b70c4a6e5e556fe1d6b","impliedFormat":1},{"version":"3a9522b8ed36c30f018446ec393267e6ce515ca40d5ee2c1c6046ce801c192cd","impliedFormat":1},{"version":"0e781e9e0dcd9300e7d213ce4fdec951900d253e77f448471d1bc749bd7f5f7c","impliedFormat":1},{"version":"bf8ea785d007b56294754879d0c9e7a9d78726c9a1b63478bf0c76e3a4446991","impliedFormat":1},{"version":"dbb439938d2b011e6b5880721d65f51abb80e09a502355af16de4f01e069cd07","impliedFormat":1},{"version":"f94a137a2b7c7613998433ca16fb7f1f47e4883e21cadfb72ff76198c53441a6","impliedFormat":1},{"version":"8296db5bbdc7e56cabc15f94c637502827c49af933a5b7ed0b552728f3fcfba8","impliedFormat":1},{"version":"ad46eedfff7188d19a71c4b8999184d1fb626d0379be2843d7fc20faea63be88","impliedFormat":1},{"version":"9ebac14f8ee9329c52d672aaf369be7b783a9685e8a7ab326cd54a6390c9daa6","impliedFormat":1},{"version":"dee395b372e64bfd6e55df9a76657b136e0ba134a7395e46e3f1489b2355b5b0","impliedFormat":1},{"version":"cf0ce107110a4b7983bacca4483ea8a1eac5e36901fc13c686ebef0ffbcbbacd","impliedFormat":1},{"version":"a4fc04fdc81ff1d4fdc7f5a05a40c999603360fa8c493208ccee968bd56e161f","impliedFormat":1},{"version":"8a2a61161d35afb1f07d10dbef42581e447aaeececc4b8766450c9314b6b4ee7","impliedFormat":1},{"version":"b817f19d56f68613a718e41d3ed545ecfd2c3096a0003d6a8e4f906351b3fb7d","impliedFormat":1},{"version":"bbdf5516dc4d55742ab23e76e0f196f31a038b4022c8aa7944a0964a7d36985e","impliedFormat":1},{"version":"981cca224393ac8f6b42c806429d5c5f3506e65edf963aa74bcef5c40b28f748","impliedFormat":1},{"version":"7239a60aab87af96a51cd8af59c924a55c78911f0ab74aa150e16a9da9a12e4f","impliedFormat":1},{"version":"258cbdcac1da6d114455af3ac7ca87eeff074001765e3b154dd57f25bda5fcb5","impliedFormat":1},{"version":"022e48d4e1ebd512e3fa5c3a321262ce05b53e8773fdb4b7de80d5288720993a","impliedFormat":1},{"version":"95fab99f991a8fb9514b3c9282bfa27ffc4b7391c8b294f2d8bf2ae0a092f120","impliedFormat":1},{"version":"62e46dac4178ba57a474dad97af480545a2d72cd8c0d13734d97e2d1481dbf06","impliedFormat":1},{"version":"3f3bc27ed037f93f75f1b08884581fb3ed4855950eb0dc9be7419d383a135b17","impliedFormat":1},{"version":"55fef00a1213f1648ac2e4becba3bb5758c185bc03902f36150682f57d2481d2","impliedFormat":1},{"version":"6fe2c13736b73e089f2bb5f92751a463c5d3dc6efb33f4494033fbd620185bff","impliedFormat":1},{"version":"6e249a33ce803216870ec65dc34bbd2520718c49b5a2d9afdee7e157b87617a2","impliedFormat":1},{"version":"e58f83151bb84b1c21a37cbc66e1e68f0f1cf60444b970ef3d1247cd9097fd94","impliedFormat":1},{"version":"83e46603ea5c3df5ae2ead2ee7f08dcb60aa071c043444e84675521b0daf496b","impliedFormat":1},{"version":"8baf3ec31869d4e82684fe062c59864b9d6d012b9105252e5697e64212e38b74","impliedFormat":1},{"version":"84de46efa2d75741d9d9bbdfdfe9f214b20f00d3459af52ef574d9f4f0dcc73a","impliedFormat":1},{"version":"fb02e489b353b21e32d32ea8aef49bdbe34d6768864cc40b6fb46727ac9d953a","impliedFormat":1},{"version":"c6ade0291b5eef6bf8a014c45fbac97b24eeae623dbacbe72afeab2b93025aa2","impliedFormat":1},{"version":"2c5e9ca373f23c9712da12f8efa976e70767a81eb3802e82182a2d1a3e4b190e","impliedFormat":1},{"version":"06bac29b70233e8c57e5eb3d2bda515c4bea6c0768416cd914b0336335f7069b","impliedFormat":1},{"version":"fded99673b5936855b8b914c5bdf6ada1f7443c773d5a955fa578ff257a6a70c","impliedFormat":1},{"version":"8e0e4155cdf91f9021f8929d7427f701214f3ba5650f51d8067c76af168a5b99","impliedFormat":1},{"version":"ef344f40acc77eafa0dd7a7a1bc921e0665b8b6fc70aeea7d39e439e9688d731","impliedFormat":1},{"version":"36a1dffdbb2d07df3b65a3ddda70f446eb978a43789c37b81a7de9338daff397","impliedFormat":1},{"version":"bcb2c91f36780ff3a32a4b873e37ebf1544fb5fcc8d6ffac5c0bf79019028dae","impliedFormat":1},{"version":"d13670a68878b76d725a6430f97008614acba46fcac788a660d98f43e9e75ba4","impliedFormat":1},{"version":"7a03333927d3cd3b3c3dd4e916c0359ab2e97de6fd2e14c30f2fb83a9990792e","impliedFormat":1},{"version":"fc6fe6efb6b28eb31216bd2268c1bc5c4c4df3b4bc85013e99cd2f462e30b6fc","impliedFormat":1},{"version":"6cc13aa49738790323a36068f5e59606928457691593d67106117158c6091c2f","impliedFormat":1},{"version":"68255dbc469f2123f64d01bfd51239f8ece8729988eec06cea160d2553bcb049","impliedFormat":1},{"version":"c3bd50e21be767e1186dacbd387a74004e07072e94e2e76df665c3e15e421977","impliedFormat":1},{"version":"3106b08c40971596efc54cc2d31d8248f58ba152c5ec4d741daf96cc0829caea","impliedFormat":1},{"version":"219d9a049a24c69d917d0d87d09edc4d009d527e6eb77b7eab97e560f8e59039","impliedFormat":1},{"version":"6df4ad74f47da1c7c3445b1dd7c63bd3d01bbc0eb31aaebdea371caa57192ce5","impliedFormat":1},{"version":"dcc26e727c39367a46931d089b13009b63df1e5b1c280b94f4a32409ffd3fa36","impliedFormat":1},{"version":"36979d4a469985635dd7539f25facd607fe1fb302ad1c6c2b3dce036025419e8","impliedFormat":1},{"version":"670a1df5b6f9df0d001d22620a50776153e04f8541d5b17298a6b8afced71e20","impliedFormat":1},{"version":"7e138dc97e3b2060f77c4b6ab3910b00b7bb3d5f8d8a747668953808694b1938","impliedFormat":1},{"version":"5b6d83c94236cf3e9e19315cc6d62b9787253c73a53faea34ead697863f81447","impliedFormat":1},{"version":"6d448f6bfeeef15718b82fd6ac9ae8871f7843a3082c297339398167f8786b2e","impliedFormat":1},{"version":"55cdcbc0af1398c51f01b48689e3ce503aa076cc57639a9351294e23366a401d","impliedFormat":1},{"version":"7e553f3b746352b0200dd91788b479a2b037a6a7d8d04aa6d002da09259f5687","impliedFormat":1},{"version":"32615eb16e819607b161e2561a2cd75ec17ac6301ba770658d5a960497895197","impliedFormat":1},{"version":"ac14cc1d1823cec0bf4abc1d233a995b91c3365451bf1859d9847279a38f16ee","impliedFormat":1},{"version":"f1142315617ac6a44249877c2405b7acda71a5acb3d4909f4b3cbcc092ebf8bd","impliedFormat":1},{"version":"3356f7498c6465efb74d0a6a5518b6b8f27d9e096abd140074fd24e9bd483dbd","impliedFormat":1},{"version":"73a0ee6395819b063df4b148211985f2e1442945c1a057204cf4cf6281760dc3","affectsGlobalScope":true,"impliedFormat":1},{"version":"d05d8c67116dceafc62e691c47ac89f8f10cf7313cd1b2fb4fe801c2bf1bb1a7","impliedFormat":1},{"version":"3c5bb5207df7095882400323d692957e90ec17323ccff5fd5f29a1ecf3b165d0","impliedFormat":1},{"version":"648ae35c81ab9cb90cb1915ede15527b29160cce0fa1b5e24600977d1ba11543","impliedFormat":1},{"version":"ddc0e8ba97c5ad221cf854999145186b917255b2a9f75d0de892f4d079fa0b5c","impliedFormat":1},{"version":"a9fc166c68c21fd4d4b4d4fb55665611c2196f325e9d912a7867fd67e2c178da","impliedFormat":1},{"version":"2f60a32bb6a05a722c42bb9709f917bb37f2484375367eb9c03bdafd9de42daf","impliedFormat":1},{"version":"d571fae704d8e4d335e30b9e6cf54bcc33858a60f4cf1f31e81b46cf82added4","impliedFormat":1},{"version":"b9406c40955c0dcf53a275697c4cddd7fe3fca35a423ade2ac750f3ba17bd66d","impliedFormat":1},{"version":"d7eb2711e78d83bc0a2703574bf722d50c76ef02b8dd6f8a8a9770e0a0f7279f","impliedFormat":1},{"version":"323127b2ac397332f21e88cd8e04c797ea6a48dedef19055cbd2fc467a3d8c84","impliedFormat":1},{"version":"f17613239e95ffcfa69fbba3b0c99b741000699db70d5e8feea830ec4bba641d","impliedFormat":1},{"version":"fff6aa61f22d8adb4476adfd8b14473bcdb6d1c9b513e1bfff14fe0c165ced3c","impliedFormat":1},{"version":"bdf97ac70d0b16919f2713613290872be2f3f7918402166571dbf7ce9cdc8df4","impliedFormat":1},{"version":"8667f65577822ab727b102f83fcd65d9048de1bf43ab55f217fbf22792dafafb","impliedFormat":1},{"version":"58f884ab71742b13c59fc941e2d4419aaf60f9cf7c1ab283aa990cb7f7396ec3","impliedFormat":1},{"version":"2c7720260175e2052299fd1ce10aa0a641063ae7d907480be63e8db508e78eb3","impliedFormat":1},{"version":"506823d1acd8978aa95f9106dfe464b65bdcd1e1539a994f4a9272db120fc832","impliedFormat":1},{"version":"d6a30821e37d7b935064a23703c226506f304d8340fa78c23fc7ea1b9dc57436","impliedFormat":1},{"version":"94a8650ade29691f97b9440866b6b1f77d4c1d0f4b7eea4eb7c7e88434ded8c7","impliedFormat":1},{"version":"bf26b847ce0f512536bd1f6d167363a3ae23621da731857828ce813c5cebc0db","impliedFormat":1},{"version":"87af268385a706c869adc8dd8c8a567586949e678ce615165ffcd2c9a45b74e7","impliedFormat":1},{"version":"affad9f315b72a6b5eb0d1e05853fa87c341a760556874da67643066672acdaf","impliedFormat":1},{"version":"6216f92d8119f212550c216e9bc073a4469932c130399368a707efb54f91468c","impliedFormat":1},{"version":"f7d86f9a241c5abf48794b76ac463a33433c97fc3366ce82dfa84a5753de66eb","impliedFormat":1},{"version":"01dab6f0b3b8ab86b120b5dd6a59e05fc70692d5fc96b86e1c5d54699f92989c","impliedFormat":1},{"version":"fe06598ceca505b18966573fbae84dfc1fda6f4e2adbb4369f3b3e2aef16bada","impliedFormat":1},{"version":"1ca7c8e38d1f5c343ab5ab58e351f6885f4677a325c69bb82d4cba466cdafeda","impliedFormat":1},{"version":"17c9ca339723ded480ca5f25c5706e94d4e96dcd03c9e9e6624130ab199d70e1","impliedFormat":1},{"version":"01aa1b58e576eb2586eedb97bcc008bbe663017cc49f0228da952e890c70319f","impliedFormat":1},{"version":"d57e64f90522b8cedf16ed8ba4785f64c297768ff145b95d3475114574c5b8e2","impliedFormat":1},{"version":"6a37dd9780f837be802142fe7dd70bb3f7279425422c893dd91835c0869cb7ac","impliedFormat":1},{"version":"167456e78d7c3a638170cbbca07a9b02df2bee81fbd995e2a0b1719a4e34f16b","impliedFormat":1},{"version":"22e1e1b1e1df66f6a1fdb7be8eb6b1dbb3437699e6b0115fbbae778c7782a39f","impliedFormat":1},{"version":"1a47e278052b9364140a6d24ef8251d433d958be9dd1a8a165f68cecea784f39","impliedFormat":1},{"version":"f7af9db645ecfe2a1ead1d675c1ccc3c81af5aa1a2066fe6675cd6573c50a7e3","impliedFormat":1},{"version":"3a9d25dcbb2cdcb7cd202d0d94f2ac8558558e177904cfb6eaff9e09e400c683","impliedFormat":1},{"version":"f65a5aa0e69c20579311e72e188d1df2ef56ca3a507d55ab3cb2b6426632fe9b","impliedFormat":1},{"version":"1144d12482a382de21d37291836a8aca0a427eb1dc383323e1ddbcf7ee829678","impliedFormat":1},{"version":"7a68ca7786ca810eb440ae1a20f5a0bd61f73359569d6faa4794509d720000e6","impliedFormat":1},{"version":"8f5f7f06129ffd3b4e4c4cf886faa54d85f79debd2651a17d9332b8289306b1a","impliedFormat":1},{"version":"5e97563ec4a9248074fdf7844640d3c532d6ce4f8969b15ccc23b059ed25a7c4","impliedFormat":1},{"version":"7d67d7bd6308dc2fb892ae1c5dca0cdee44bfcfd0b5db2e66d4b5520c1938518","impliedFormat":1},{"version":"0ba8f23451c2724360edfa9db49897e808fa926efb8c2b114498e018ed88488f","impliedFormat":1},{"version":"3e618bc95ef3958865233615fbb7c8bf7fe23c7f0ae750e571dc7e1fefe87e96","impliedFormat":1},{"version":"b901e1e57b1f9ce2a90b80d0efd820573b377d99337f8419fc46ee629ed07850","impliedFormat":1},{"version":"f720eb538fc2ca3c5525df840585a591a102824af8211ac28e2fd47aaf294480","impliedFormat":1},{"version":"ae9d0fa7c8ba01ea0fda724d40e7f181275c47d64951a13f8c1924ac958797bc","impliedFormat":1},{"version":"346d9528dcd89e77871a2decebd8127000958a756694a32512fe823f8934f145","impliedFormat":1},{"version":"d831ae2d17fd2ff464acbd9408638f06480cb8eb230a52d14e7105065713dca4","impliedFormat":1},{"version":"0a3dec0f968c9463b464a29f9099c1d5ca4cd3093b77a152f9ff0ae369c4d14b","impliedFormat":1},{"version":"a3fda2127b3185d339f80e6ccc041ce7aa85fcb637195b6c28ac6f3eed5d9d79","impliedFormat":1},{"version":"b238a1a5be5fbf8b5b85c087f6eb5817b997b4ce4ce33c471c3167a49524396c","impliedFormat":1},{"version":"ba849c0aba26864f2db0d29589fdcaec09da4ba367f127efdac1fcb4ef007732","impliedFormat":1},{"version":"ed10bc2be0faa78a2d1c8372f8564141c2360532e4567b81158ffe9943b8f070","impliedFormat":1},{"version":"b432f4a1f1d7e7601a870ab2c4cff33787de4aa7721978eb0eef543c5d7fe989","impliedFormat":1},{"version":"3f9d87ee262bd1620eb4fb9cb93ca7dc053b820f07016f03a1a653a5e9458a7a","impliedFormat":1},{"version":"a61d92e4a3c244f5b3f156def2671b10a727a777dc07e52c5e53e0ea2ddeefc8","impliedFormat":1},{"version":"de716ad71873d3d56e0d611a3d5c1eae627337c1f88790427c21f3cb47a7b6f7","impliedFormat":1},{"version":"a8072ae5bc04fea741eba493fddf84c8e6d242d2a847467428bf2cbab0b790a7","impliedFormat":1},{"version":"ce055e5bea657486c142afbf7c77538665e0cb9a2dc92a226c197d011be3e908","impliedFormat":1},{"version":"673b1fc746c54e7e16b562f06660ffdae5a00b0796b6b0d4d0aaf1f7507f1720","impliedFormat":1},{"version":"710202fdeb7a95fbf00ce89a67639f43693e05a71f495d104d8fb13133442cbc","impliedFormat":1},{"version":"11754fdc6f8c9c04e721f01d171aad19dac10a211ae0c8234f1d80f6c7accfd4","impliedFormat":1},{"version":"eb394bd8fe37e4f59057ef97404d6b4849bd636921101c25620d933f32ccebac","impliedFormat":1},{"version":"ebed2d323bfc3cb77205b7df5ad82b7299a22194d7185aba1f3aa9367d0582e2","impliedFormat":1},{"version":"199f93a537e4af657dc6f89617e3384b556ab251a292e038c7a57892a1fa479c","impliedFormat":1},{"version":"ead16b329693e880793fe14af1bbcaf2e41b7dee23a24059f01fdd3605cac344","impliedFormat":1},{"version":"ba14614494bccb80d56b14b229328db0849feb1cbfd6efdc517bc5b0cb21c02f","impliedFormat":1},{"version":"6c3760df827b88767e2a40e7f22ce564bb3e57d799b5932ec867f6f395b17c8f","impliedFormat":1},{"version":"885d19e9f8272f1816266a69d7e4037b1e05095446b71ea45484f97c648a6135","impliedFormat":1},{"version":"afcc443428acd72b171f3eba1c08b1f9dcbba8f1cc2430d68115d12176a78fb0","impliedFormat":1},{"version":"8ef33387e4661678691489e4a2cab1765efd8fad7cb5cb47f46f0ece1ad7903e","impliedFormat":1},{"version":"029774092e2d209dbf338eebc52f1163ddf73697a274cfdd9fa7046062b9d2b1","impliedFormat":1},{"version":"594692b6c292195e21efbddd0b1af9bd8f26f2695b9ffc7e9d6437a59905889e","impliedFormat":1},{"version":"092a816537ec14e80de19a33d4172e3679a3782bf0edfd3c137b1d2d603c923e","impliedFormat":1},{"version":"60f0efb13e1769b78bd5258b0991e2bf512d3476a909c5e9fd1ca8ee59d5ef26","impliedFormat":1},{"version":"3cfd46f0c1fe080a1c622742d5220bd1bf47fb659074f52f06c996b541e0fc9b","impliedFormat":1},{"version":"e8d8b23367ad1f5124f3d8403cf2e6d13b511ebb4c728f90ec59ceeb1d907cc1","impliedFormat":1},{"version":"291b182b1e01ded75105515bcefd64dcf675f98508c4ca547a194afd80331823","impliedFormat":1},{"version":"75ddb104faa8f4f84b3c73e587c317d2153fc20d0d712a19f77bea0b97900502","impliedFormat":1},{"version":"135785aa49ae8a82e23a492b5fc459f8a2044588633a124c5b8ff60bbb31b5d4","impliedFormat":1},{"version":"267d5f0f8b20eaeb586158436ba46c3228561a8e5bb5c89f3284940a0a305bd8","impliedFormat":1},{"version":"1d21320d3bf6b17b6caf7e736b78c3b3e26ee08b6ac1d59a8b194039aaaa93ae","impliedFormat":1},{"version":"8b2efbff78e96ddab0b581ecd0e44a68142124444e1ed9475a198f2340fe3ef7","impliedFormat":1},{"version":"6eff0590244c1c9daf80a3ac1e9318f8e8dcd1e31a89983c963bb61be97b981b","impliedFormat":1},{"version":"95f17c73be9d73da53780321cdce58737e915102ac334a75d3798333f5fe2a21","impliedFormat":1},{"version":"a069aef689b78d2131045ae3ecb7d79a0ef2eeab9bc5dff10a653c60494faa79","impliedFormat":1},{"version":"680db60ad1e95bbefbb302b1096b5ad3ce86600c9542179cc52adae8aee60f36","impliedFormat":1},{"version":"8fe6d4285c9486741b09ca3b32dde2da3cf94d18ae1ec490217ee8980c9f7eee","impliedFormat":1},{"version":"b775bfe85c7774cafc1f9b815c17f233c98908d380ae561748de52ccacc47e17","impliedFormat":1},{"version":"5a81c7117f8f1c393c09b3a108549825df175b4b388d2dbc7f11e6a1d234c0d4","impliedFormat":1},{"version":"ebe41fb9fe47a2cf7685a1250a56acf903d8593a8776403eca18d793edc0df54","impliedFormat":1},{"version":"4eb2a7789483e5b2e40707f79dcbd533f0871439e2e5be5e74dc0c8b0f8b9a05","impliedFormat":1},{"version":"984dcccd8abcfd2d38984e890f98e3b56de6b1dd91bf05b8d15a076efd7d84c0","impliedFormat":1},{"version":"d9f4968d55ba6925a659947fe4a2be0e58f548b2c46f3d42d9656829c452f35e","impliedFormat":1},{"version":"57fd651cc75edc35e1aa321fd86034616ec0b1bd70f3c157f2e1aee414e031a0","impliedFormat":1},{"version":"97fec1738c122037ca510f69c8396d28b5de670ceb1bd300d4af1782bd069b0b","impliedFormat":1},{"version":"74a16af8bbfaa038357ee4bceb80fad6a28d394a8faaac3c0d0aa0f9e95ea66e","impliedFormat":1},{"version":"044c44c136ae7fb9ff46ac0bb0ca4e7f41732ca3a3991844ba330fa1bfb121a2","impliedFormat":1},{"version":"d47c270ad39a7706c0f5b37a97e41dbaab295b87964c0c2e76b3d7ad68c0d9d6","impliedFormat":1},{"version":"13e6b949e30e37602fdb3ef961fd7902ccdc435552c9ead798d6de71b83fe1e3","impliedFormat":1},{"version":"f7884f326c4a791d259015267a6b2edbeef3b7cb2bc38dd641ce2e4ef76862e7","impliedFormat":1},{"version":"0f51484aff5bbb48a35a3f533be9fdc1eccac65e55b8a37ac32beb3c234f7910","impliedFormat":1},{"version":"17011e544a14948255dcaa6f9af2bcf93cce417e9e26209c9aa5cbd32852b5b2","impliedFormat":1},{"version":"e12c35fe5d5132ad688215a725ca48d15e5b1bfa26948de18f9e43e7d2cc07ad","impliedFormat":1},{"version":"db7fa2be9bddc963a6fb009099936a5108494adb9e70fd55c249948ea2780309","impliedFormat":1},{"version":"25db4e7179be81d7b9dbb3fde081050778d35fabcc75ada4e69d7f24eb03ce66","impliedFormat":1},{"version":"43ceb16649b428a65b23d08bfc5df7aaaba0b2d1fee220ba7bc4577e661c38a6","impliedFormat":1},{"version":"f3f2e18b3d273c50a8daa9f96dbc5d087554f47c43e922aa970368c7d5917205","impliedFormat":1},{"version":"c17c4fc020e41ddbe89cd63bed3232890b61f2862dd521a98eb2c4cb843b6a42","impliedFormat":1},{"version":"eb77c432329a1a00aac36b476f31333260cd81a123356a4bf2c562e6ac8dc5a4","impliedFormat":1},{"version":"6d2f991e9405c12b520e035bddb97b5311fed0a8bf82b28f7ef69df7184f36c2","impliedFormat":1},{"version":"8e002fd1fc6f8d77200af3d4b5dd6f4f2439a590bf15e037a289bb528ecc6a12","impliedFormat":1},{"version":"2d0748f645de665ca018f768f0fd8e290cf6ce86876df5fc186e2a547503b403","impliedFormat":1},{"version":"7cd50e4c093d0fe06f2ebe1ae5baeefae64098751fb7fa6ae03022035231cc97","impliedFormat":1},{"version":"334bfc2a6677bc60579dbf929fe1d69ac780a0becd1af812132b394e1f6a3ea6","impliedFormat":1},{"version":"ed8e02a44e1e0ddee029ef3c6804f42870ee2b9e17cecad213e8837f5fcd756b","impliedFormat":1},{"version":"b13b25bbfa55a784ec4ababc70e3d050390347694b128f41b3ae45f0202d5399","impliedFormat":1},{"version":"b9fc71b8e83bcc4b5d8dda7bcf474b156ef2d5372de98ac8c3710cfa2dc96588","impliedFormat":1},{"version":"85587f4466c53be818152cbf7f6be67c8384dcf00860290dca05e0f91d20f28d","impliedFormat":1},{"version":"9d4943145bd78babb9f3deb4fccd09dabd14005118ffe30935175056fa938c2b","impliedFormat":1},{"version":"325501db2249efa7194d7baf8f49782709d91bc3d93812b2636e1a7fd127b067","impliedFormat":1},{"version":"944fcf2e7415a20278f025b4587fb032d7174b89f7ba9219b8883affa6e7d2e3","impliedFormat":1},{"version":"589b3c977372b6a7ba79b797c3a21e05a6e423008d5b135247492cc929e84f25","impliedFormat":1},{"version":"ab16a687cfc7d148a8ae645ffd232c765a5ed190f76098207c159dc7c86a1c43","impliedFormat":1},{"version":"1aa722dee553fc377e4406c3ec87157e66e4d5ea9466f62b3054118966897957","impliedFormat":1},{"version":"55bf2aecbdc32ea4c60f87ae62e3522ef5413909c9a596d71b6ec4a3fafb8269","impliedFormat":1},{"version":"7832c3a946a38e7232f8231c054f91023c4f747ad0ce6b6bc3b9607d455944f7","impliedFormat":1},{"version":"696d56df9e55afa280df20d55614bb9f0ad6fcac30a49966bb01580e00e3a2d4","impliedFormat":1},{"version":"07e20b0265957b4fd8f8ce3df5e8aea0f665069e1059de5d2c0a21b1e8a7de09","impliedFormat":1},{"version":"08424c1704324a3837a809a52b274d850f6c6e1595073946764078885a3fa608","impliedFormat":1},{"version":"f5d9a7150b0782e13d4ed803ee73cf4dbc04e99b47b0144c9224fd4af3809d4d","impliedFormat":1},{"version":"551d60572f79a01b300e08917205d28f00356c3ee24569c7696bfd27b2e77bd7","impliedFormat":1},{"version":"8570e9ce13cf15050f0a825e46499c6dedd1989216657799c2c5d5a471d7acff","impliedFormat":1},{"version":"f04efd0fae5202872be8f8b6782b42802ff17de45af734f2baba0b9cc5105e12","impliedFormat":1},{"version":"36d4ae6f8e4c60dfffc8e8ce9ec7a61d01891a081c84856aeba083cb2d756552","impliedFormat":1},{"version":"243d3055f8cb29f0dd09f2f2cdd31b28b7b5ae441a8db32f28bd884f694720f9","impliedFormat":1},{"version":"367a2dbfd74532530c5b2d6b9c87d9e84599e639991151b73d42c720aa548611","impliedFormat":1},{"version":"3df200a7de1b2836c42b3e4843a6c119b4b0e4857a86ebc7cc5a98e084e907f0","impliedFormat":1},{"version":"ae05563905dc09283da42d385ca1125113c9eba83724809621e54ea46309b4e3","impliedFormat":1},{"version":"722fb0b5eff6878e8ad917728fa9977b7eaff7b37c6abb3bd5364cd9a1d7ebc3","impliedFormat":1},{"version":"8d4b70f717f7e997110498e3cfd783773a821cfba257785815b697b45d448e46","impliedFormat":1},{"version":"3735156a254027a2a3b704a06b4094ef7352fa54149ba44dd562c3f56f37b6ca","impliedFormat":1},{"version":"166b65cc6c34d400e0e9fcff96cd29cef35a47d25937a887c87f5305d2cb4cac","impliedFormat":1},{"version":"cf0e1a8d3d1739e50ab4b351cef347959c98c27d1a5ea3b3d922e346a18e4524","impliedFormat":1},{"version":"d17f800659c0b683ea73102ca542ab39009c0a074acf3546321a46c1119faf90","impliedFormat":1},{"version":"e6d61568c240780aaf02c717f950ba4a993c65f3b34ff1bacd9aeff88fa3ac4c","impliedFormat":1},{"version":"f89a15f66cf6ba42bce4819f10f7092cdecbad14bf93984bfb253ffaacf77958","impliedFormat":1},{"version":"822316d43872a628af734e84e450091d101b8b9aa768db8e15058c901d5321e6","impliedFormat":1},{"version":"f20e43033f56cec37fee8ea310a1fb32773afedb382fd33c4d0d109714291cbb","impliedFormat":1},{"version":"53f80bf906602b9cb84bb6ca737bfd71dd45b75949937cc898d0ddffb7a59cde","impliedFormat":1},{"version":"16cccc9037b4bab06d3a88b14644aa672bf0985252d782bbf8ff05df1a7241e8","impliedFormat":1},{"version":"0154d805e3f4f5a40d510c7fb363b57bf1305e983edde83ccd330cef2ba49ed0","impliedFormat":1},{"version":"89da9aeab1f9e59e61889fb1a5fdb629e354a914519956dfa3221e2a43361bb2","impliedFormat":1},{"version":"9703f7408c354bf0264ab25c88c74d7bfee7c6f164661e75813bc68c93836575","impliedFormat":1},{"version":"5ced0582128ed677df6ef83b93b46bffba4a38ddba5d4e2fb424aa1b2623d1d5","impliedFormat":1},{"version":"f1cc60471b5c7594fa2d4a621f2c3169faa93c5a455367be221db7ca8c9fddb1","impliedFormat":1},{"version":"d1bf63146a0dbbe04ba27877020724f165d3f40c4a26aeab373a4ceafc081dc5","impliedFormat":1},{"version":"2739797a759c3ebcab1cb4eb208155d578ef4898fcfb826324aa52b926558abc","impliedFormat":1},{"version":"33ce098f31987d84eb2dd1d6984f5c1c1cae06cc380cb9ec6b30a457ea03f824","impliedFormat":1},{"version":"59683bee0f65ae714cc3cf5fa0cb5526ca39d5c2c66db8606a1a08ae723262b8","impliedFormat":1},{"version":"bc8eb1da4e1168795480f09646dcb074f961dfe76cd74d40fc1c342240ac7be4","impliedFormat":1},{"version":"8d513d33766e10e9c34174600579ece2b57e70e4a6cb8639d3b47f6ae1d40ab5","impliedFormat":1},{"version":"4b31302539066a3c659827d9bfc8a8b87ced23f93bb3a2addc69de2b9755a9b3","impliedFormat":1},{"version":"03b9959bee04c98401c8915227bbaa3181ddc98a548fb4167cd1f7f504b4a1ea","impliedFormat":1},{"version":"2d18b7e666215df5d8becf9ffcfef95e1d12bfe0ac0b07bc8227b970c4d3f487","impliedFormat":1},{"version":"d7ebeb1848cd09a262a09c011c9fa2fc167d0dd6ec57e3101a25460558b2c0e3","impliedFormat":1},{"version":"6c27c0042aed02a14cc458bff4cf45b4da4ae3b26a68e1da66dbf5a1be8d0640","impliedFormat":1},{"version":"07df5b8be0ba528abc0b3fdc33a29963f58f7ce46ea3f0ccfaf4988d18f43fff","impliedFormat":1},{"version":"b0e19c66907ad996486e6b3a2472f4d31c309da8c41f38694e931d3462958d7f","impliedFormat":1},{"version":"3880b10e678e32fcfd75c37d4ad8873f2680ab50582672896700d050ce3f99b6","impliedFormat":1},{"version":"1a372d53e61534eacd7982f80118b67b37f5740a8e762561cd3451fb21b157ff","impliedFormat":1},{"version":"3784f188208c30c6d523d257e03c605b97bc386d3f08cabe976f0e74cd6a5ee5","impliedFormat":1},{"version":"49586fc10f706f9ebed332618093aaf18d2917cf046e96ea0686abaae85140a6","impliedFormat":1},{"version":"921a87943b3bbe03c5f7cf7d209cc21d01f06bf0d9838eee608dfab39ae7d7f4","impliedFormat":1},{"version":"1741f9ea7301b7e61c43bf79b067ffbc22daa0990f06ae6e6dcc0eb55ebb5ede","impliedFormat":1},{"version":"f0885de71d0dbf6d3e9e206d9a3fce14c1781d5f22bca7747fc0f5959357eeab","impliedFormat":1},{"version":"ddebc0a7aada4953b30b9abf07f735e9fec23d844121755309f7b7091be20b8d","impliedFormat":1},{"version":"6fdc397fc93c2d8770486f6a3e835c188ccbb9efac1a28a3e5494ea793bc427c","impliedFormat":1},{"version":"9cc02f7c626b430b3c3b783806262d7c18e9f3fd5a9b6eabb4f943340feaefb5","impliedFormat":1},{"version":"ea694ad54dd168114509a1c3e96141fb1cfbafe09e41180af3ecee66b063f997","impliedFormat":1},{"version":"b6e4cafbcb84c848dfeffeb9ca7f5906d47ed101a41bc068bb1bb27b75f18782","impliedFormat":1},{"version":"9799e6726908803d43992d21c00601dc339c379efabe5eee9b421dbd20c61679","impliedFormat":1},{"version":"dfa5d54c4a1f8b2a79eaa6ecb93254814060fba8d93c6b239168e3d18906d20e","impliedFormat":1},{"version":"858c71909635cf10935ce09116a251caed3ac7c5af89c75d91536eacb5d51166","impliedFormat":1},{"version":"b3eb56b920afafd8718dc11088a546eeb3adf6aa1cbc991c9956f5a1fe3265b3","impliedFormat":1},{"version":"605940ddc9071be96ec80dfc18ab56521f927140427046806c1cfc0adf410b27","impliedFormat":1},{"version":"1a350245a56fdf1f7bac061fce62689f940ea7dd38dee8ccbfc593619eeb4649","impliedFormat":1},{"version":"5194a7fd715131a3b92668d4992a1ac18c493a81a9a2bb064bcd38affc48f22d","impliedFormat":1},{"version":"b7dce3b64ac90cfb272ff277f0a250791829d4b3efc772f2d1c44c30a0218a8b","impliedFormat":1},{"version":"0d7dcf40ed5a67b344df8f9353c5aa8a502e2bbdad53977bc391b36b358a0a1c","impliedFormat":1},{"version":"093ad5bb0746fdb36f1373459f6a8240bc4473829723300254936fc3fdaee111","impliedFormat":1},{"version":"f2367181a67aff75790aa9a4255a35689110f7fb1b0adb08533913762a34f9e6","impliedFormat":1},{"version":"4a1a4800285e8fd30b13cb69142103845c6cb27086101c2950c93ffcd4c52b94","impliedFormat":1},{"version":"c295f6c684e8121b6f25f4767202e5baf9826fe16eec42f4a2bb2966da0f5898","impliedFormat":1},{"version":"fe255676a54e5a01f951e6f773c715391f7d902d197d9ca11a4f9c6b79ffa2ad","impliedFormat":1},{"version":"739708e7d4f5aba95d6304a57029dfbabe02cb594cf5d89944fd0fc7d1371c3a","impliedFormat":1},{"version":"22f31306ddc006e2e4a4817d44bf9ac8214caae39f5706d987ade187ecba09e3","impliedFormat":1},{"version":"4237f49cdd6db9e33c32ccc1743d10b01fdd929c74906e7eecd76ce0b6f3688a","impliedFormat":1},{"version":"4ed726e8489a57adcf586687ff50533e7fe446fb48a8791dbc75d8bf77d1d390","impliedFormat":1},{"version":"bbde826b04c01b41434728b45388528a36cc9505fda4aa3cdd9293348e46b451","impliedFormat":1},{"version":"02a432db77a4579267ff0a5d4669b6d02ebc075e4ff55c2ff2a501fc9433a763","impliedFormat":1},{"version":"086b7a1c4fe2a9ef6dfa030214457b027e90fc1577e188c855dff25f8bcf162c","impliedFormat":1},{"version":"68799ca5020829d2dbebfda86ed2207320fbf30812e00ed2443b2d0a035dda52","impliedFormat":1},{"version":"dc7f0f8e24d838dabe9065f7f55c65c4cfe68e3be243211f625fa8c778c9b85c","impliedFormat":1},{"version":"92169f790872f5f28be4fce7e371d2ccf17b0cc84057a651e0547ad63d8bcb68","impliedFormat":1},{"version":"765b8fe4340a1c7ee8750b4b76f080b943d85e770153e78503d263418b420358","impliedFormat":1},{"version":"12d71709190d96db7fbb355f317d50e72b52e16c3451a20dae13f4e78db5c978","impliedFormat":1},{"version":"7367c0d3442165e6164185b7950b8f70ea2be0142b2175748fef7dc23c6d2230","impliedFormat":1},{"version":"d66efc7ed427ca014754343a80cf2b4512ceaa776bc4a9139d06863abf01ac5c","impliedFormat":1},{"version":"cb0e8923b4d8d8a5bbcea59abc731a1cca90f69aef74f6b27df0bd890d6a00ed","impliedFormat":1},{"version":"dbeb4c3a24b95fe4ad6fdff9577455f5868fbb5ad12f7c22c68cb24374d0996d","impliedFormat":1},{"version":"c1a6eb35cd952ae43b898cc022f39461f7f31360849cdaff12ac56fc5d4cb00d","impliedFormat":1},{"version":"7393dadbd583b53cce10c7644f399d1226e05de29b264985968280614be9e0dd","impliedFormat":1},{"version":"5cd0e12398a8584c4a287978477dab249dc2a490255499a4f075177d1aba0467","impliedFormat":1},{"version":"e60ec884263e7ffcebaf4a45e95a17fc273120a5d474963d4d6d7a574e2e9b97","impliedFormat":1},{"version":"6fd6c4c9eef86c84dd1f09cbd8c10d8feb3ed871724ba8d96a7bd138825a0c1a","impliedFormat":1},{"version":"a420fa988570675d65a6c0570b71bebf0c793f658b4ae20efc4f8e21a1259b54","impliedFormat":1},{"version":"05e9608dfef139336fb2574266412a6352d605857de2f94b2ce454d53e813cd6","impliedFormat":1},{"version":"02de191d16b2797feb7dcebb865562ad148a9507e523c0470d308c5eef158eec","impliedFormat":1},{"version":"bb1c6786ef387ac7a2964ea61adfb76bf9f967bbd802b0494944d7eec31fea2e","impliedFormat":1},{"version":"df407b6c3a8a3ef06519fbe16923df440cbd0fb536effdaa15b312ac8e89dac2","impliedFormat":1},{"version":"77144f05a89288283c8647d605ad49a0b155d0619ed0ea91a15f50174480624f","impliedFormat":1},{"version":"318957769f5b75529bc378b984dacbd42fbfc0db7481bc69cd1b29de812ad54b","impliedFormat":1},{"version":"a5e704ce23f12bfe9df4e9d564656ccaa5a9a896fa7c70537eadec4c74d2a3dc","impliedFormat":1},{"version":"3ee349cda390e8f285b3d861fb5a78e9f69be0d7303607334e08a75ce925928f","impliedFormat":1},{"version":"1efcaa13b1dd8738ba7261f7be898b2d80516e3b9aa091a790b2818179f2cf78","impliedFormat":1},{"version":"111a4c948e8a448d677bfc92166f8a596de03f66045bc1bec50a2f36edb710d2","impliedFormat":1},{"version":"9d7437397cb58f2410f4d64d86a686a6281c5811b17d41b077d6ec0c45d0312e","impliedFormat":1},{"version":"2fdde32fbf21177400da4d10665802c5b7629e2d4012df23d3f9b6e975c52098","impliedFormat":1},{"version":"a8e6ea80509b241d29a62b478b1eb5f8cd2ef9f531056ffc62127ee68e3692f8","impliedFormat":1},{"version":"bbffb20bab36db95b858d13591b9c09e29f76c4b7521dc9366f89eb2aeead68d","impliedFormat":1},{"version":"61b25ce464888c337df2af9c45ca93dcae014fef5a91e6ecce96ce4e309a3203","impliedFormat":1},{"version":"1ac6ead96cc738705b3cc0ba691ae2c3198a93d6a5eec209337c476646a2bce3","impliedFormat":1},{"version":"d5c89d3342b9a5094b31d5f4a283aa0200edc84b855aba6af1b044d02a9cf3b2","impliedFormat":1},{"version":"9863cfd0e4cda2e3049c66cb9cd6d2fd8891c91be0422b4e1470e3e066405c12","impliedFormat":1},{"version":"c8353709114ef5cdaeea43dde5c75eb8da47d7dce8fbc651465a46876847b411","impliedFormat":1},{"version":"0c55d168d0c377ce0340d219a519d3038dd50f35aaadb21518c8e068cbd9cf5e","impliedFormat":1},{"version":"356da547f3b6061940d823e85e187fc3d79bd1705cb84bd82ebea5e18ad28c9c","impliedFormat":1},{"version":"6ee8db8631030efcdb6ac806355fd321836b490898d8859f9ba882943cb197eb","impliedFormat":1},{"version":"e7afb81b739a7b97b17217ce49a44577cfd9d1de799a16a8fc9835eae8bff767","impliedFormat":1},{"version":"ca7c244766ad374c1e664416ca8cc7cd4e23545d7f452bbe41ec5dc86ba81b76","impliedFormat":1},{"version":"46e3a0dfd8cf0e36d14ceaf852d8483bfccbfebe0245debffac0a3b227933c51","impliedFormat":1},{"version":"61e92305d8e3951cc6692064f222555acf25fe83d5313bc441d13098a3e1b4fe","impliedFormat":1},{"version":"dcb3c5cb5cdb73bdf62ffd2808468824ea91a5c258371c32991b97773a20b13e","impliedFormat":1},{"version":"41cf6213c047c4d02d08cdf479fdf1b16bff2734c2f8abbb8bb71e7b542c8a47","impliedFormat":1},{"version":"0c1083e755be3c23e2aab9620dae8282de8a403b643bd9a4e19fe23e51d7b2d3","impliedFormat":1},{"version":"0810e286e8f50b4ead6049d46c6951fe8869d2ea7ee9ea550034d04c14c5d3e2","impliedFormat":1},{"version":"ead36974e944dcbc1cbae1ba8d6de7a1954484006f061c09f05f4a8e606d1556","impliedFormat":1},{"version":"afe05dc77ee5949ccee216b065943280ba15b5e77ac5db89dfc1d22ac32fc74c","impliedFormat":1},{"version":"2030689851bc510df0da38e449e5d6f4146ae7eac9ad2b6c6b2cf6f036b3a1ea","impliedFormat":1},{"version":"25cd596336a09d05d645e1e191ea91fb54f8bfd5a226607e5c0fd0eeeded0e01","impliedFormat":1},{"version":"d95ac12e15167f3b8c7ad2b7fa7f0a528b3941b556a6f79f8f1d57cce8fba317","impliedFormat":1},{"version":"cab5393058fcb0e2067719b320cd9ea9f43e5176c0ba767867c067bc70258ddc","impliedFormat":1},{"version":"c40d5df23b55c953ead2f96646504959193232ab33b4e4ea935f96cebc26dfee","impliedFormat":1},{"version":"cbc868d6efdbe77057597632b37f3ff05223db03ee26eea2136bd7d0f08dafc1","impliedFormat":1},{"version":"a0e027058a6ae83fba027952f6df403e64f7bd72b268022dbb4f274f3c299d12","impliedFormat":1},{"version":"a986ec442c12bed15d981ebd3a193f864d39f017a1f11a0c2e7afaca64288e28","impliedFormat":1},{"version":"83e8fd527d4d28635b7773780cc95ae462d14889ba7b2791dc842480b439ea0b","impliedFormat":1},{"version":"00121d48e941209d282cd87847c665686b77e12e2c3534f20059ece8df0cb84e","impliedFormat":1},{"version":"2f344849d706d5d602830833092bfca2825d87742e2e77908a7d0a6c3d08fdd9","impliedFormat":1},{"version":"cb007806a535d04e11aefff0ce8cd5c8454cad1a5ed774b5fc94e5fc575a8b29","impliedFormat":1},{"version":"b25e13b5bb9888a5e690bbd875502777239d980b148d9eaa5e44fad9e3c89a7e","impliedFormat":1},{"version":"38af232cb48efae980b56595d7fe537a4580fd79120fc2b5703b96cbbab1b470","impliedFormat":1},{"version":"4c76af0f5c8f955e729c78aaf1120cc5c24129b19c19b572e22e1da559d4908c","impliedFormat":1},{"version":"c27f313229ada4914ab14c49029da41c9fdae437a0da6e27f534ab3bc7db4325","impliedFormat":1},{"version":"ff8a3408444fb94122191cbfa708089a6233b8e031ebd559c92a90cb46d57252","impliedFormat":1},{"version":"8c25b00a675743d7a381cf6389ae9fbdce82bdc9069b343cb1985b4cd17b14be","impliedFormat":1},{"version":"cd057861569fb30fea931a115767e6fa600f50e33fadb428c8dd16f2b6ca2567","impliedFormat":1},{"version":"f9ec7b8b285db6b4c51aa183044c85a6e21ea2b28d5c4337c1977e9fe6a88844","impliedFormat":1},{"version":"b4d9fae96173bbd02f2a31ff00b2cb68e2398b1fec5aaab090826e4d02329b38","impliedFormat":1},{"version":"9d0f5034775fb0a6f081f3690925602d01ba16292989bfcac52f6135cf79f56f","impliedFormat":1},{"version":"f5181fff8bba0221f8df77711438a3620f993dd085f994a3aea3f8eaac17ceff","impliedFormat":1},{"version":"9312039b46c4f2eb399e7dd4d70b7cea02d035e64764631175a0d9b92c24ec4b","impliedFormat":1},{"version":"9ddacc94444bfd2e9cc35da628a87ec01a4b2c66b3c120a0161120b899dc7d39","impliedFormat":1},{"version":"a8cb7c1e34db0649edddd53fa5a30f1f6d0e164a6f8ce17ceb130c3689f02b96","impliedFormat":1},{"version":"0aba2a2ff3fc7e0d77aaf6834403166435ab15a1c82a8d791386c93e44e6c6a4","impliedFormat":1},{"version":"c83c86c0fddf1c1d7615be25c24654008ae4f672cff7de2a11cfa40e8c7df533","impliedFormat":1},{"version":"348e5b9c2ee965b99513a09ef9a15aec8914609a018f2e012d0c405969a39a2e","impliedFormat":1},{"version":"49d62a88a20b1dbff8bcf24356a068b816fb2cc2cac94264105a0419b2466b74","impliedFormat":1},{"version":"a04c6362fd99f3702be24412c122c41ed2b3faf3d9042c970610fcd1b1d69555","impliedFormat":1},{"version":"aa6f8f0abe029661655108bc7a0ecd93658bf070ce744b2ffaee87f4c6b51bca","impliedFormat":1},{"version":"5ef75e07b37097e602b73f82e6658b5cbb0683edf35943f811c5b7735ec4a077","impliedFormat":1},{"version":"8c88ce6a3db25803c86dad877ff4213e3f6d26e183d0cde08bc42fbf0a6ddbbe","impliedFormat":1},{"version":"02dabdfe5778f5499df6f18916ff2ebe06725a4c2a13ee7fb09a290b5df4d4b2","impliedFormat":1},{"version":"d67799c6a005603d7e0fd4863263b56eecde8d1957d085bdbbb20c539ad51e8c","impliedFormat":1},{"version":"21af404e03064690ac6d0f91a8c573c87a431ed7b716f840c24e08ea571b7148","impliedFormat":1},{"version":"e919a39dc55737a39bbf5d28a4b0c656feb6ec77a9cbdeb6707785bb70e4f2db","impliedFormat":1},{"version":"b75fca19de5056deaa27f8a2445ed6b6e6ceca0f515b6fdf8508efb91bc6398a","impliedFormat":1},{"version":"ce3382d8fdb762031e03fe6f2078d8fbb9124890665e337ad7cd1fa335b0eb4c","impliedFormat":1},{"version":"fe2ca2bde7e28db13b44a362d46085c8e929733bba05cf7bf346e110320570d1","impliedFormat":1},{"version":"c58afb303be3d37d9969d6aa046201b89bb5cae34d8bafc085c0444f3d0b0435","impliedFormat":1},{"version":"a42d7e73a19bcab1212b419862293fc5ea80293523f08d6ff1f4d013cc6e9409","impliedFormat":1},{"version":"23b93ebd1a1014d6892f417137a0873826b8c21f6460e68d93cef9c0163e2914","impliedFormat":1},{"version":"3e1c36055eeb72af70e6435d1e54cdc9546bb6aa826108ef7fdb76919bc18172","impliedFormat":1},{"version":"e00ca18e9752fbd9aaeedb574e4799d5686732516e84038592dbbe2fa979da3f","impliedFormat":1},{"version":"b8e11b2ffb5825c56f0d71d68d9efa2ea2b62f342a2731467e33ae2fc9870e19","impliedFormat":1},{"version":"1a4e3036112cf0cebac938dcfb840950f9f87d6475c3b71f4a219e0954b6cab4","impliedFormat":1},{"version":"ec4245030ac3af288108add405996081ddf696e4fe8b84b9f4d4eecc9cab08e1","impliedFormat":1},{"version":"6f9d2bd7c485bea5504bc8d95d0654947ea1a2e86bbf977a439719d85c50733f","impliedFormat":1},{"version":"1cb6b6e4e5e9e55ae33def006da6ac297ff6665371671e4335ab5f831dd3e2cd","impliedFormat":1},{"version":"dbd75ef6268810f309c12d247d1161808746b459bb72b96123e7274d89ea9063","impliedFormat":1},{"version":"175e129f494c207dfc1125d8863981ef0c3fb105960d6ec2ea170509663662da","impliedFormat":1},{"version":"5c65d0454be93eecee2bec78e652111766d22062889ab910cbd1cd6e8c44f725","impliedFormat":1},{"version":"f5d58dfc78b32134ba320ec9e5d6cb05ca056c03cb1ce13050e929a5c826a988","impliedFormat":1},{"version":"b1827bed8f3f14b41f42fa57352237c3a2e99f3e4b7d5ca14ec9879582fead0f","impliedFormat":1},{"version":"1d539bc450578c25214e5cc03eaaf51a61e48e00315a42e59305e1cd9d89c229","impliedFormat":1},{"version":"c0ee0c5fe835ba82d9580bff5f1b57f902a5134b617d70c32427aa37706d9ef8","impliedFormat":1},{"version":"738058f72601fffe9cad6fa283c4d7b2919785978bd2e9353c9b31dcc4151a80","impliedFormat":1},{"version":"3c63f1d97de7ec60bc18bebe1ad729f561bd81d04aefd11bd07e69c6ac43e4ad","impliedFormat":1},{"version":"7b8d3f37d267a8a2deb20f5aa359b34570bf8f2856e483dd87d4be7e83f6f75b","impliedFormat":1},{"version":"761745badb654d6ff7a2cd73ff1017bf8a67fdf240d16fbe3e43dca9838027a6","impliedFormat":1},{"version":"e4f33c01cf5b5a8312d6caaad22a5a511883dffceafbb2ee85a7cf105b259fda","impliedFormat":1},{"version":"a368b04888b71c4475a667754b740f4aca7f55db2b7553eacaed36e6962ec48c","impliedFormat":1},{"version":"5b49365103ad23e1c4f44b9d83ef42ff19eea7a0785c454b6be67e82f935a078","impliedFormat":1},{"version":"a664ab26fe162d26ad3c8f385236a0fde40824007b2c4072d18283b1b33fc833","impliedFormat":1},{"version":"193337c11f45de2f0fc9d8ec2d494965da4ae92382ba1a1d90cc0b04e5eeebde","impliedFormat":1},{"version":"4a119c3d93b46bead2e3108336d83ec0debd9f6453f55a14d7066bf430bb9dca","impliedFormat":1},{"version":"02ba072c61c60c8c2018bba0672f7c6e766a29a323a57a4de828afb2bbbb9d54","impliedFormat":1},{"version":"88fe3740babbaa61402a49bd24ce9efcbe40385b0d7cceb96ac951a02d981610","impliedFormat":1},{"version":"1abe3d916ab50524d25a5fbe840bd7ce2e2537b68956734863273e561f9eb61c","impliedFormat":1},{"version":"2b44bc7e31faab2c26444975b362ece435d49066be89644885341b430e61bb7e","impliedFormat":1},{"version":"06763bb36ab0683801c1fa355731b7e65d84b012f976c2580e23ad60bccbd961","impliedFormat":1},{"version":"6a6791e7863eb25fa187d9f323ac563690b2075e893576762e27f862b8003f30","impliedFormat":1},{"version":"bd90f3a677579a8e767f0c4be7dfdf7155b650fb1293fff897ccada7a74d77ff","impliedFormat":1},{"version":"fa28c1f081aa3b9fe872f759f1eb95ced4e4d935b534d7f91797433aee9cd589","impliedFormat":1},{"version":"c1cefd1eccda6d3277d556202450d947a1c88dd8194aabe6fbb101f0149fafaf","impliedFormat":1},{"version":"47008c9a4f168c2490bebc92653f4227accb55fe4b75f06cd0d568bd6370c435","impliedFormat":1},{"version":"b5203823f084dcfaae1f506dfe9bd84bf8ea008a2a834fdd5c5d7d0144418e0b","impliedFormat":1},{"version":"76c2ad2b6e3ec3d09819d8e919ea3e055c9bd73a90c3c6994ba807fd0e12ab15","impliedFormat":1},{"version":"03eb569fd62a9035cac5ac9fd5d960d73de56a6704b7988c13ce6593bec015d1","impliedFormat":1},{"version":"f77ca1843ec31c769b7190f9aa4913e8888ffdfbc4b41d77256fad4108da2b60","impliedFormat":1},{"version":"2ce435b7150596e688b03430fd8247893013ec27c565cd601bba05ea2b97e99d","impliedFormat":1},{"version":"4ea6ab7f5028bedbbc908ab3085dc33077124372734713e507d3d391744a411b","impliedFormat":1},{"version":"909ecbb1054805e23a71612dd50dff18be871dcfe18664a3bcd40ef88d06e747","impliedFormat":1},{"version":"26309fe37e159fdf8aed5e88e97b1bd66bfd8fe81b1e3d782230790ea04603bd","impliedFormat":1},{"version":"dd0cf98b9e2b961a01657121550b621ecc24b81bbcc71287bed627db8020fe48","impliedFormat":1},{"version":"60b03de5e0f2a6c505b48a5d3a5682f3812c5a92c7c801fb8ffa71d772b6dd96","impliedFormat":1},{"version":"224a259ffa86be13ba61d5a0263d47e313e2bd09090ef69820013b06449a2d85","impliedFormat":1},{"version":"c260695b255841fcfbc6008343dae58b3ea00efdfc16997cc69992141f4728c6","impliedFormat":1},{"version":"c017165fe60c647f2dbd24291c48161a616e0ab220e9bd00334ef54ff8eff79d","impliedFormat":1},{"version":"88f46a47b213f376c765ef54df828835dfbb13214cfd201f635324337ebbe17f","impliedFormat":1},{"version":"3ce1188fd214883b087e7feb7bd95dd4a8ce9c1e148951edd454c17a23d54b41","impliedFormat":1},{"version":"a23cc04238f0b8a3805ddb406ee6d69bda510aee5f3c4aa85dbe52cb598cbb04","impliedFormat":1},{"version":"003502d5a8ec5d392a0a3120983c43f073c6d2fd1e823a819f25029ce40271e8","impliedFormat":1},{"version":"1fdbd12a1d02882ef538980a28a9a51d51fd54c434cf233822545f53d84ef9cf","impliedFormat":1},{"version":"419bad1d214faccabfbf52ab24ae4523071fcc61d8cee17b589299171419563c","impliedFormat":1},{"version":"74532476a2d3d4eb8ac23bac785a9f88ca6ce227179e55537d01476b6d4435ea","impliedFormat":1},{"version":"bf33e792a3bc927a6b0d84f428814c35a0a9ca3c0cc8a91246f0b60230da3b6c","impliedFormat":1},{"version":"71c99cd1806cc9e597ff15ca9c90e1b7ad823b38a1327ccbc8ab6125cf70118e","impliedFormat":1},{"version":"6170710f279fffc97a7dd1a10da25a2e9dac4e9fc290a82443728f2e16eb619b","impliedFormat":1},{"version":"3804a3a26e2fd68f99d686840715abc5034aeb8bcbf970e36ad7af8ab69b0461","impliedFormat":1},{"version":"67b395b282b2544f7d71f4a7c560a7225eac113e7f3bcd8e88e5408b8927a63e","impliedFormat":1},{"version":"fe301153d19ddb9e39549f3a5b71c5a94fec01fc8f1bd6b053c4ef42207bef2a","impliedFormat":1},{"version":"4b09036cb89566deddca4d31aead948cf5bdb872508263220582f3be85157551","impliedFormat":1},{"version":"c61d09ae1f70d3eed306dc991c060d57866127365e03de4625497de58a996ffc","impliedFormat":1},{"version":"16a64f8bdaa16d75f9523120f260fcfece9218471062bcc33c4ccb52aa2945b0","impliedFormat":1},{"version":"39e31b902b6b627350a41b05f9627faf6bb1919ad1d17f0871889e5e6d80663c","impliedFormat":1},{"version":"282fd78a91b8363e120a991d61030e2186167f6610a6df195961dba7285b3f17","impliedFormat":1},{"version":"ec571ed174e47dade96ba9157f972937b2e4844a85c399e26957f9aa6d288767","impliedFormat":1},{"version":"16ce742a2199b12a6498dee9f832e27ac5e523064d41f951a8b27cdf3c6b702f","impliedFormat":1},{"version":"92ee216a93c16d3724ce70c9a20f56b05659c7c67b86827d481ff89c1a5d23d9","impliedFormat":1},{"version":"f9613793aa6b7d742e80302e65741a339b529218ae80820753a61808a9761479","impliedFormat":1},{"version":"1607892c103374a3dc1f45f277b5362d3cb3340bfe1007eec3a31b80dd0cf798","impliedFormat":1},{"version":"402da75bfdaf5b2cf388450cb56a4c5ba2ed67bc9f930eba0e7ce7fc57cddf11","impliedFormat":1},{"version":"220aafeafa992aa95f95017cb6aecea27d4a2b67bb8dd2ce4f5c1181e8d19c21","impliedFormat":1},{"version":"a71dd28388e784bf74a4bc40fd8170fa4535591057730b8e0fef4820cf4b4372","impliedFormat":1},{"version":"0e411566240d81c51c2d95e5f3fa2e8a35c3e7bbe67a43f4eb9c9a2912fdff05","impliedFormat":1},{"version":"4e4325429d6a967ef6aa72ca24890a7788a181d28599fe1b3bb6730a6026f048","impliedFormat":1},{"version":"dcbb4c3abdc5529aeda5d6b0a835d8a0883da2a76e9484a4f19e254e58faf3c6","impliedFormat":1},{"version":"0d81307f711468869759758160975dee18876615db6bf2b8f24188a712f1363b","impliedFormat":1},{"version":"e46d7758d8090d9b2c601382610894d71763a9909efb97b1eebbc6272d88d924","impliedFormat":1},{"version":"03af1b2c6ddc2498b14b66c5142a7876a8801fcac9183ae7c35aec097315337a","impliedFormat":1},{"version":"294b7d3c2afc0d8d3a7e42f76f1bac93382cb264318c2139ec313372bbfbde4f","impliedFormat":1},{"version":"a7bc0f0fd721b5da047c9d5a202c16be3f816954ad65ab684f00c9371bc8bac2","impliedFormat":1},{"version":"4bf7b966989eb48c30e0b4e52bfe7673fb7a3fb90747bdc5324637fc51505cd1","impliedFormat":1},{"version":"468308e0d01d8c073a6c442b6cbd5f0f7fcb68fbeabd3c30b0719cda2f5bfc38","impliedFormat":1},{"version":"c2d3538fabf7d43abd7599ff74c372800130e67674eb50b371a6c53646d2b977","impliedFormat":1},{"version":"10e006d13225983120773231f9fcc0f747a678056161db5c3c134697d0b4cb60","impliedFormat":1},{"version":"b456eb9cb3ff59d2ad86d53c656a0f07164e9dccbc0f09ac6a6f234dc44714ea","impliedFormat":1},{"version":"0fff2dbabbb30a467bbfef04d44819cb0b1baa84e669b46d4682c9d70ba11605","impliedFormat":1},{"version":"8baf3ec31869d4e82684fe062c59864b9d6d012b9105252e5697e64212e38b74","impliedFormat":1},{"version":"36a9827e64fa8e2af7d4fd939bf29e7ae6254fa9353ccebd849c894a4fd63e1b","impliedFormat":1},{"version":"3af8cee96336dd9dc44b27d94db5443061ff8a92839f2c8bbcc165ca3060fa6c","impliedFormat":1},{"version":"85d786a0accda19ef7beb6ae5a04511560110faa9c9298d27eaa4d44778fbf9e","impliedFormat":1},{"version":"7362683317d7deaa754bbf419d0a4561ee1d9b40859001556c6575ce349d95ea","impliedFormat":1},{"version":"408b6e0edb9d02acaf1f2d9f589aa9c6e445838b45c3bfa15b4bb98dc1453dc4","impliedFormat":1},{"version":"f8faa497faf04ffba0dd21cf01077ae07f0db08035d63a2e69838d173ae305bc","impliedFormat":1},{"version":"f8981c8de04809dccb993e59de5ea6a90027fcb9a6918701114aa5323d6d4173","impliedFormat":1},{"version":"7c9c89fd6d89c0ad443f17dc486aa7a86fa6b8d0767e1443c6c63311bdfbd989","impliedFormat":1},{"version":"a3486e635db0a38737d85e26b25d5fda67adef97db22818845e65a809c13c821","impliedFormat":1},{"version":"7c2918947143409b40385ca24adce5cee90a94646176a86de993fcdb732f8941","impliedFormat":1},{"version":"bdbf3acd48d637f947a0ef48c2301898e2eb8e5f9c1ad1d17b1e3f0d0ce3764c","impliedFormat":1},{"version":"55a36a053bfd464be800af2cd1b3ed83c6751277125786d62870bf159280b280","impliedFormat":1},{"version":"a8e7c075b87fda2dd45aa75d91f3ccb07bec4b3b1840bd4da4a8c60e03575cd2","impliedFormat":1},{"version":"f7b193e858e6c5732efa80f8073f5726dc4be1216450439eb48324939a7dd2be","impliedFormat":1},{"version":"f971e196cdf41219f744e8f435d4b7f8addacd1fbe347c6d7a7d125cd0eaeb99","impliedFormat":1},{"version":"fd38ff4bedf99a1cd2d0301d6ffef4781be7243dfbba1c669132f65869974841","impliedFormat":1},{"version":"e41e32c9fc04b97636e0dc89ecffe428c85d75bfc07e6b70c4a6e5e556fe1d6b","impliedFormat":1},{"version":"3a9522b8ed36c30f018446ec393267e6ce515ca40d5ee2c1c6046ce801c192cd","impliedFormat":1},{"version":"0e781e9e0dcd9300e7d213ce4fdec951900d253e77f448471d1bc749bd7f5f7c","impliedFormat":1},{"version":"bf8ea785d007b56294754879d0c9e7a9d78726c9a1b63478bf0c76e3a4446991","impliedFormat":1},{"version":"dbb439938d2b011e6b5880721d65f51abb80e09a502355af16de4f01e069cd07","impliedFormat":1},{"version":"f94a137a2b7c7613998433ca16fb7f1f47e4883e21cadfb72ff76198c53441a6","impliedFormat":1},{"version":"8296db5bbdc7e56cabc15f94c637502827c49af933a5b7ed0b552728f3fcfba8","impliedFormat":1},{"version":"ad46eedfff7188d19a71c4b8999184d1fb626d0379be2843d7fc20faea63be88","impliedFormat":1},{"version":"9ebac14f8ee9329c52d672aaf369be7b783a9685e8a7ab326cd54a6390c9daa6","impliedFormat":1},{"version":"dee395b372e64bfd6e55df9a76657b136e0ba134a7395e46e3f1489b2355b5b0","impliedFormat":1},{"version":"cf0ce107110a4b7983bacca4483ea8a1eac5e36901fc13c686ebef0ffbcbbacd","impliedFormat":1},{"version":"a4fc04fdc81ff1d4fdc7f5a05a40c999603360fa8c493208ccee968bd56e161f","impliedFormat":1},{"version":"8a2a61161d35afb1f07d10dbef42581e447aaeececc4b8766450c9314b6b4ee7","impliedFormat":1},{"version":"b817f19d56f68613a718e41d3ed545ecfd2c3096a0003d6a8e4f906351b3fb7d","impliedFormat":1},{"version":"bbdf5516dc4d55742ab23e76e0f196f31a038b4022c8aa7944a0964a7d36985e","impliedFormat":1},{"version":"981cca224393ac8f6b42c806429d5c5f3506e65edf963aa74bcef5c40b28f748","impliedFormat":1},{"version":"7239a60aab87af96a51cd8af59c924a55c78911f0ab74aa150e16a9da9a12e4f","impliedFormat":1},{"version":"258cbdcac1da6d114455af3ac7ca87eeff074001765e3b154dd57f25bda5fcb5","impliedFormat":1},{"version":"022e48d4e1ebd512e3fa5c3a321262ce05b53e8773fdb4b7de80d5288720993a","impliedFormat":1},{"version":"95fab99f991a8fb9514b3c9282bfa27ffc4b7391c8b294f2d8bf2ae0a092f120","impliedFormat":1},{"version":"62e46dac4178ba57a474dad97af480545a2d72cd8c0d13734d97e2d1481dbf06","impliedFormat":1},{"version":"3f3bc27ed037f93f75f1b08884581fb3ed4855950eb0dc9be7419d383a135b17","impliedFormat":1},{"version":"55fef00a1213f1648ac2e4becba3bb5758c185bc03902f36150682f57d2481d2","impliedFormat":1},{"version":"6fe2c13736b73e089f2bb5f92751a463c5d3dc6efb33f4494033fbd620185bff","impliedFormat":1},{"version":"6e249a33ce803216870ec65dc34bbd2520718c49b5a2d9afdee7e157b87617a2","impliedFormat":1},{"version":"e58f83151bb84b1c21a37cbc66e1e68f0f1cf60444b970ef3d1247cd9097fd94","impliedFormat":1},{"version":"83e46603ea5c3df5ae2ead2ee7f08dcb60aa071c043444e84675521b0daf496b","impliedFormat":1},{"version":"8baf3ec31869d4e82684fe062c59864b9d6d012b9105252e5697e64212e38b74","impliedFormat":1},{"version":"84de46efa2d75741d9d9bbdfdfe9f214b20f00d3459af52ef574d9f4f0dcc73a","impliedFormat":1},{"version":"fb02e489b353b21e32d32ea8aef49bdbe34d6768864cc40b6fb46727ac9d953a","impliedFormat":1},{"version":"c6ade0291b5eef6bf8a014c45fbac97b24eeae623dbacbe72afeab2b93025aa2","impliedFormat":1},{"version":"2c5e9ca373f23c9712da12f8efa976e70767a81eb3802e82182a2d1a3e4b190e","impliedFormat":1},{"version":"06bac29b70233e8c57e5eb3d2bda515c4bea6c0768416cd914b0336335f7069b","impliedFormat":1},{"version":"fded99673b5936855b8b914c5bdf6ada1f7443c773d5a955fa578ff257a6a70c","impliedFormat":1},{"version":"8e0e4155cdf91f9021f8929d7427f701214f3ba5650f51d8067c76af168a5b99","impliedFormat":1},{"version":"ef344f40acc77eafa0dd7a7a1bc921e0665b8b6fc70aeea7d39e439e9688d731","impliedFormat":1},{"version":"36a1dffdbb2d07df3b65a3ddda70f446eb978a43789c37b81a7de9338daff397","impliedFormat":1},{"version":"bcb2c91f36780ff3a32a4b873e37ebf1544fb5fcc8d6ffac5c0bf79019028dae","impliedFormat":1},{"version":"d13670a68878b76d725a6430f97008614acba46fcac788a660d98f43e9e75ba4","impliedFormat":1},{"version":"7a03333927d3cd3b3c3dd4e916c0359ab2e97de6fd2e14c30f2fb83a9990792e","impliedFormat":1},{"version":"fc6fe6efb6b28eb31216bd2268c1bc5c4c4df3b4bc85013e99cd2f462e30b6fc","impliedFormat":1},{"version":"6cc13aa49738790323a36068f5e59606928457691593d67106117158c6091c2f","impliedFormat":1},{"version":"68255dbc469f2123f64d01bfd51239f8ece8729988eec06cea160d2553bcb049","impliedFormat":1},{"version":"c3bd50e21be767e1186dacbd387a74004e07072e94e2e76df665c3e15e421977","impliedFormat":1},{"version":"3106b08c40971596efc54cc2d31d8248f58ba152c5ec4d741daf96cc0829caea","impliedFormat":1},{"version":"219d9a049a24c69d917d0d87d09edc4d009d527e6eb77b7eab97e560f8e59039","impliedFormat":1},{"version":"6df4ad74f47da1c7c3445b1dd7c63bd3d01bbc0eb31aaebdea371caa57192ce5","impliedFormat":1},{"version":"dcc26e727c39367a46931d089b13009b63df1e5b1c280b94f4a32409ffd3fa36","impliedFormat":1},{"version":"36979d4a469985635dd7539f25facd607fe1fb302ad1c6c2b3dce036025419e8","impliedFormat":1},{"version":"670a1df5b6f9df0d001d22620a50776153e04f8541d5b17298a6b8afced71e20","impliedFormat":1},{"version":"7c4cf13b05d1c64ce1807d2e5c95fd657f7ef92f1eeb02c96262522c5797f862","impliedFormat":1},{"version":"eebe1715446b4f1234ce2549a8c30961256784d863172621eb08ae9bed2e67a3","impliedFormat":1},{"version":"64ad3b6cbeb3e0d579ebe85e6319d7e1a59892dada995820a2685a6083ea9209","impliedFormat":1},{"version":"5ebdc5a83f417627deff3f688789e08e74ad44a760cdc77b2641bb9bb59ddd29","impliedFormat":1},{"version":"a514beab4d3bc0d7afc9d290925c206a9d1b1a6e9aa38516738ce2ff77d66000","impliedFormat":1},{"version":"d80212bdff306ee2e7463f292b5f9105f08315859a3bdc359ba9daaf58bd9213","impliedFormat":1},{"version":"86b534b096a9cc35e90da2d26efbcb7d51bc5a0b2dde488b8c843c21e5c4701b","impliedFormat":1},{"version":"75519029c9e9389852d22714aec5956e00f090d18082e49f21d2875d554ebd26","impliedFormat":1},{"version":"ebe41fb9fe47a2cf7685a1250a56acf903d8593a8776403eca18d793edc0df54","impliedFormat":1},{"version":"b5f70f31ef176a91e4a9f46074b763adc321cd0fdb772c16ca57b17266c32d19","impliedFormat":1},{"version":"169035d6d96186b82cd6456a1dd0dca511abf191d4f59d8ab012d9a5ce25c2e0","impliedFormat":1},{"version":"a78a334d8e93cf70b3dded844963e5d0c529546b12ec3a8668afa05f707e8222","impliedFormat":1},{"version":"503d068eb2b24456c90d15b2331a3cb04aa03b07d35699dac828d8c654d22c4e","impliedFormat":1},{"version":"c133900491138f79cecffb0dca079393b8e704899e4fcf9a9d8b399f8b91c3db","impliedFormat":1},{"version":"0b43cdc862f70c9b37bca929513eab72ab764845ea5d83cef47d148a1ff3f0d5","impliedFormat":1},{"version":"4a193963d67a56bff9331232db719a9dc71ff8a7795cb9de2f047d0de214d709","impliedFormat":1},{"version":"59ce6c57619857ab7dfc367715a3dbf300880cd16e7c84c12ac4ba1e39cdee63","impliedFormat":1},{"version":"5a1c84eb2e4797d0a021fcb4033a1189941265d03d6a1930bf6132143ee4065d","impliedFormat":1},{"version":"d38293b3bcb73ba1c719ba50497859a2f37fa64a6de7f22eeb32ae9f3b1bcefc","impliedFormat":1},{"version":"d67484f1551a676c22ebb9be78723e839d630d6459794e32cc050aaab7641621","impliedFormat":1},{"version":"5eaf2e0f6ea59e43507586de0a91d17d0dd5c59f3919e9d12cbab0e5ed9d2d77","impliedFormat":1},{"version":"be97b1340a3f72edf8404d1d717df2aac5055faaff6c99c24f5a2b2694603745","impliedFormat":1},{"version":"7e138dc97e3b2060f77c4b6ab3910b00b7bb3d5f8d8a747668953808694b1938","impliedFormat":1},{"version":"4eb2a7789483e5b2e40707f79dcbd533f0871439e2e5be5e74dc0c8b0f8b9a05","impliedFormat":1},{"version":"984dcccd8abcfd2d38984e890f98e3b56de6b1dd91bf05b8d15a076efd7d84c0","impliedFormat":1},{"version":"d9f4968d55ba6925a659947fe4a2be0e58f548b2c46f3d42d9656829c452f35e","impliedFormat":1},{"version":"e88b42f282b55c669a8f35158449b4f7e6e2bccec31fd0d4adb4278928a57a89","impliedFormat":1},{"version":"2a1ed52adfc72556f4846b003a7e5a92081147beef55f27f99466aa6e2a28060","impliedFormat":1},{"version":"a4cf825c93bb52950c8cdc0b94c5766786c81c8ee427fc6774fafb16d0015035","impliedFormat":1},{"version":"4acc7fae6789948156a2faabc1a1ba36d6e33adb09d53bccf9e80248a605b606","impliedFormat":1},{"version":"a9fc166c68c21fd4d4b4d4fb55665611c2196f325e9d912a7867fd67e2c178da","impliedFormat":1},{"version":"17011e544a14948255dcaa6f9af2bcf93cce417e9e26209c9aa5cbd32852b5b2","impliedFormat":1},{"version":"e12c35fe5d5132ad688215a725ca48d15e5b1bfa26948de18f9e43e7d2cc07ad","impliedFormat":1},{"version":"db7fa2be9bddc963a6fb009099936a5108494adb9e70fd55c249948ea2780309","impliedFormat":1},{"version":"25db4e7179be81d7b9dbb3fde081050778d35fabcc75ada4e69d7f24eb03ce66","impliedFormat":1},{"version":"43ceb16649b428a65b23d08bfc5df7aaaba0b2d1fee220ba7bc4577e661c38a6","impliedFormat":1},{"version":"f3f2e18b3d273c50a8daa9f96dbc5d087554f47c43e922aa970368c7d5917205","impliedFormat":1},{"version":"01dab6f0b3b8ab86b120b5dd6a59e05fc70692d5fc96b86e1c5d54699f92989c","impliedFormat":1},{"version":"2d0748f645de665ca018f768f0fd8e290cf6ce86876df5fc186e2a547503b403","impliedFormat":1},{"version":"7cd50e4c093d0fe06f2ebe1ae5baeefae64098751fb7fa6ae03022035231cc97","impliedFormat":1},{"version":"b9fc71b8e83bcc4b5d8dda7bcf474b156ef2d5372de98ac8c3710cfa2dc96588","impliedFormat":1},{"version":"85587f4466c53be818152cbf7f6be67c8384dcf00860290dca05e0f91d20f28d","impliedFormat":1},{"version":"9d4943145bd78babb9f3deb4fccd09dabd14005118ffe30935175056fa938c2b","impliedFormat":1},{"version":"325501db2249efa7194d7baf8f49782709d91bc3d93812b2636e1a7fd127b067","impliedFormat":1},{"version":"764fec087122d840f12f9f24e1dc1e4cc2dcb222f3d13d2a498bf332fbe460d7","impliedFormat":1},{"version":"944fcf2e7415a20278f025b4587fb032d7174b89f7ba9219b8883affa6e7d2e3","impliedFormat":1},{"version":"589b3c977372b6a7ba79b797c3a21e05a6e423008d5b135247492cc929e84f25","impliedFormat":1},{"version":"ab16a687cfc7d148a8ae645ffd232c765a5ed190f76098207c159dc7c86a1c43","impliedFormat":1},{"version":"8570e9ce13cf15050f0a825e46499c6dedd1989216657799c2c5d5a471d7acff","impliedFormat":1},{"version":"f04efd0fae5202872be8f8b6782b42802ff17de45af734f2baba0b9cc5105e12","impliedFormat":1},{"version":"d571fae704d8e4d335e30b9e6cf54bcc33858a60f4cf1f31e81b46cf82added4","impliedFormat":1},{"version":"36d4ae6f8e4c60dfffc8e8ce9ec7a61d01891a081c84856aeba083cb2d756552","impliedFormat":1},{"version":"5b6d83c94236cf3e9e19315cc6d62b9787253c73a53faea34ead697863f81447","impliedFormat":1},{"version":"6d448f6bfeeef15718b82fd6ac9ae8871f7843a3082c297339398167f8786b2e","impliedFormat":1},{"version":"55cdcbc0af1398c51f01b48689e3ce503aa076cc57639a9351294e23366a401d","impliedFormat":1},{"version":"7e553f3b746352b0200dd91788b479a2b037a6a7d8d04aa6d002da09259f5687","impliedFormat":1},{"version":"243d3055f8cb29f0dd09f2f2cdd31b28b7b5ae441a8db32f28bd884f694720f9","impliedFormat":1},{"version":"367a2dbfd74532530c5b2d6b9c87d9e84599e639991151b73d42c720aa548611","impliedFormat":1},{"version":"cf0e1a8d3d1739e50ab4b351cef347959c98c27d1a5ea3b3d922e346a18e4524","impliedFormat":1},{"version":"d17f800659c0b683ea73102ca542ab39009c0a074acf3546321a46c1119faf90","impliedFormat":1},{"version":"e6d61568c240780aaf02c717f950ba4a993c65f3b34ff1bacd9aeff88fa3ac4c","impliedFormat":1},{"version":"f89a15f66cf6ba42bce4819f10f7092cdecbad14bf93984bfb253ffaacf77958","impliedFormat":1},{"version":"0154d805e3f4f5a40d510c7fb363b57bf1305e983edde83ccd330cef2ba49ed0","impliedFormat":1},{"version":"89da9aeab1f9e59e61889fb1a5fdb629e354a914519956dfa3221e2a43361bb2","impliedFormat":1},{"version":"8d513d33766e10e9c34174600579ece2b57e70e4a6cb8639d3b47f6ae1d40ab5","impliedFormat":1},{"version":"7a17edfdf23eaaf79058134449c7e1e92c03e2a77b09a25b333a63a14dca17ed","impliedFormat":1},{"version":"4b31302539066a3c659827d9bfc8a8b87ced23f93bb3a2addc69de2b9755a9b3","impliedFormat":1},{"version":"05d1a8f963258d75216f13cf313f27108f83a8aa2bff482da356f2bfdfb59ab2","impliedFormat":1},{"version":"1a848ab32f6114131218358c47b81a2b6fd71789d3c9cda62a6218194cba5ecb","impliedFormat":1},{"version":"1754df61456e51542219ee17301566ac439115b2a1e5da1a0ffb2197e49ccefe","impliedFormat":1},{"version":"2c90cb5d9288d3b624013a9ca40040b99b939c3a090f6bdca3b4cfc6b1445250","impliedFormat":1},{"version":"3c6d4463866f664a5f51963a2849cb844f2203693be570d0638ee609d75fe902","impliedFormat":1},{"version":"752677ae7ebfef0fa54a6642b48ad671654223c3cde56259ce41292081ef0f0e","impliedFormat":1},{"version":"77144f05a89288283c8647d605ad49a0b155d0619ed0ea91a15f50174480624f","impliedFormat":1},{"version":"318957769f5b75529bc378b984dacbd42fbfc0db7481bc69cd1b29de812ad54b","impliedFormat":1},{"version":"a5e704ce23f12bfe9df4e9d564656ccaa5a9a896fa7c70537eadec4c74d2a3dc","impliedFormat":1},{"version":"1741f9ea7301b7e61c43bf79b067ffbc22daa0990f06ae6e6dcc0eb55ebb5ede","impliedFormat":1},{"version":"3ee349cda390e8f285b3d861fb5a78e9f69be0d7303607334e08a75ce925928f","impliedFormat":1},{"version":"1efcaa13b1dd8738ba7261f7be898b2d80516e3b9aa091a790b2818179f2cf78","impliedFormat":1},{"version":"111a4c948e8a448d677bfc92166f8a596de03f66045bc1bec50a2f36edb710d2","impliedFormat":1},{"version":"9d7437397cb58f2410f4d64d86a686a6281c5811b17d41b077d6ec0c45d0312e","impliedFormat":1},{"version":"fe06598ceca505b18966573fbae84dfc1fda6f4e2adbb4369f3b3e2aef16bada","impliedFormat":1},{"version":"2fdde32fbf21177400da4d10665802c5b7629e2d4012df23d3f9b6e975c52098","impliedFormat":1},{"version":"a8e6ea80509b241d29a62b478b1eb5f8cd2ef9f531056ffc62127ee68e3692f8","impliedFormat":1},{"version":"bbffb20bab36db95b858d13591b9c09e29f76c4b7521dc9366f89eb2aeead68d","impliedFormat":1},{"version":"61b25ce464888c337df2af9c45ca93dcae014fef5a91e6ecce96ce4e309a3203","impliedFormat":1},{"version":"f0885de71d0dbf6d3e9e206d9a3fce14c1781d5f22bca7747fc0f5959357eeab","impliedFormat":1},{"version":"ddebc0a7aada4953b30b9abf07f735e9fec23d844121755309f7b7091be20b8d","impliedFormat":1},{"version":"1ac6ead96cc738705b3cc0ba691ae2c3198a93d6a5eec209337c476646a2bce3","impliedFormat":1},{"version":"d5c89d3342b9a5094b31d5f4a283aa0200edc84b855aba6af1b044d02a9cf3b2","impliedFormat":1},{"version":"9863cfd0e4cda2e3049c66cb9cd6d2fd8891c91be0422b4e1470e3e066405c12","impliedFormat":1},{"version":"a61d92e4a3c244f5b3f156def2671b10a727a777dc07e52c5e53e0ea2ddeefc8","impliedFormat":1},{"version":"de716ad71873d3d56e0d611a3d5c1eae627337c1f88790427c21f3cb47a7b6f7","impliedFormat":1},{"version":"a8072ae5bc04fea741eba493fddf84c8e6d242d2a847467428bf2cbab0b790a7","impliedFormat":1},{"version":"ce055e5bea657486c142afbf7c77538665e0cb9a2dc92a226c197d011be3e908","impliedFormat":1},{"version":"673b1fc746c54e7e16b562f06660ffdae5a00b0796b6b0d4d0aaf1f7507f1720","impliedFormat":1},{"version":"710202fdeb7a95fbf00ce89a67639f43693e05a71f495d104d8fb13133442cbc","impliedFormat":1},{"version":"11754fdc6f8c9c04e721f01d171aad19dac10a211ae0c8234f1d80f6c7accfd4","impliedFormat":1},{"version":"eb394bd8fe37e4f59057ef97404d6b4849bd636921101c25620d933f32ccebac","impliedFormat":1},{"version":"ebed2d323bfc3cb77205b7df5ad82b7299a22194d7185aba1f3aa9367d0582e2","impliedFormat":1},{"version":"199f93a537e4af657dc6f89617e3384b556ab251a292e038c7a57892a1fa479c","impliedFormat":1},{"version":"ead16b329693e880793fe14af1bbcaf2e41b7dee23a24059f01fdd3605cac344","impliedFormat":1},{"version":"c8353709114ef5cdaeea43dde5c75eb8da47d7dce8fbc651465a46876847b411","impliedFormat":1},{"version":"0c55d168d0c377ce0340d219a519d3038dd50f35aaadb21518c8e068cbd9cf5e","impliedFormat":1},{"version":"356da547f3b6061940d823e85e187fc3d79bd1705cb84bd82ebea5e18ad28c9c","impliedFormat":1},{"version":"6ee8db8631030efcdb6ac806355fd321836b490898d8859f9ba882943cb197eb","impliedFormat":1},{"version":"e7afb81b739a7b97b17217ce49a44577cfd9d1de799a16a8fc9835eae8bff767","impliedFormat":1},{"version":"ca7c244766ad374c1e664416ca8cc7cd4e23545d7f452bbe41ec5dc86ba81b76","impliedFormat":1},{"version":"46e3a0dfd8cf0e36d14ceaf852d8483bfccbfebe0245debffac0a3b227933c51","impliedFormat":1},{"version":"dcb3c5cb5cdb73bdf62ffd2808468824ea91a5c258371c32991b97773a20b13e","impliedFormat":1},{"version":"b901e1e57b1f9ce2a90b80d0efd820573b377d99337f8419fc46ee629ed07850","impliedFormat":1},{"version":"f720eb538fc2ca3c5525df840585a591a102824af8211ac28e2fd47aaf294480","impliedFormat":1},{"version":"ae9d0fa7c8ba01ea0fda724d40e7f181275c47d64951a13f8c1924ac958797bc","impliedFormat":1},{"version":"346d9528dcd89e77871a2decebd8127000958a756694a32512fe823f8934f145","impliedFormat":1},{"version":"41cf6213c047c4d02d08cdf479fdf1b16bff2734c2f8abbb8bb71e7b542c8a47","impliedFormat":1},{"version":"a0e027058a6ae83fba027952f6df403e64f7bd72b268022dbb4f274f3c299d12","impliedFormat":1},{"version":"a986ec442c12bed15d981ebd3a193f864d39f017a1f11a0c2e7afaca64288e28","impliedFormat":1},{"version":"83e8fd527d4d28635b7773780cc95ae462d14889ba7b2791dc842480b439ea0b","impliedFormat":1},{"version":"00121d48e941209d282cd87847c665686b77e12e2c3534f20059ece8df0cb84e","impliedFormat":1},{"version":"2f344849d706d5d602830833092bfca2825d87742e2e77908a7d0a6c3d08fdd9","impliedFormat":1},{"version":"cb007806a535d04e11aefff0ce8cd5c8454cad1a5ed774b5fc94e5fc575a8b29","impliedFormat":1},{"version":"b25e13b5bb9888a5e690bbd875502777239d980b148d9eaa5e44fad9e3c89a7e","impliedFormat":1},{"version":"38af232cb48efae980b56595d7fe537a4580fd79120fc2b5703b96cbbab1b470","impliedFormat":1},{"version":"4c76af0f5c8f955e729c78aaf1120cc5c24129b19c19b572e22e1da559d4908c","impliedFormat":1},{"version":"c27f313229ada4914ab14c49029da41c9fdae437a0da6e27f534ab3bc7db4325","impliedFormat":1},{"version":"ff8a3408444fb94122191cbfa708089a6233b8e031ebd559c92a90cb46d57252","impliedFormat":1},{"version":"c58272e3570726797e7db5085a8063143170759589f2a5e50387eff774eadc88","impliedFormat":1},{"version":"cd057861569fb30fea931a115767e6fa600f50e33fadb428c8dd16f2b6ca2567","impliedFormat":1},{"version":"f9ec7b8b285db6b4c51aa183044c85a6e21ea2b28d5c4337c1977e9fe6a88844","impliedFormat":1},{"version":"b4d9fae96173bbd02f2a31ff00b2cb68e2398b1fec5aaab090826e4d02329b38","impliedFormat":1},{"version":"e3d8342c9f537a4ffcab951e5f469ac9c5ed1d6147e9e2a499184cf45ab3c77f","impliedFormat":1},{"version":"9d0f5034775fb0a6f081f3690925602d01ba16292989bfcac52f6135cf79f56f","impliedFormat":1},{"version":"f5181fff8bba0221f8df77711438a3620f993dd085f994a3aea3f8eaac17ceff","impliedFormat":1},{"version":"49d62a88a20b1dbff8bcf24356a068b816fb2cc2cac94264105a0419b2466b74","impliedFormat":1},{"version":"a04c6362fd99f3702be24412c122c41ed2b3faf3d9042c970610fcd1b1d69555","impliedFormat":1},{"version":"aa6f8f0abe029661655108bc7a0ecd93658bf070ce744b2ffaee87f4c6b51bca","impliedFormat":1},{"version":"5ef75e07b37097e602b73f82e6658b5cbb0683edf35943f811c5b7735ec4a077","impliedFormat":1},{"version":"1a372d53e61534eacd7982f80118b67b37f5740a8e762561cd3451fb21b157ff","impliedFormat":1},{"version":"d67799c6a005603d7e0fd4863263b56eecde8d1957d085bdbbb20c539ad51e8c","impliedFormat":1},{"version":"21af404e03064690ac6d0f91a8c573c87a431ed7b716f840c24e08ea571b7148","impliedFormat":1},{"version":"e919a39dc55737a39bbf5d28a4b0c656feb6ec77a9cbdeb6707785bb70e4f2db","impliedFormat":1},{"version":"3784f188208c30c6d523d257e03c605b97bc386d3f08cabe976f0e74cd6a5ee5","impliedFormat":1},{"version":"49586fc10f706f9ebed332618093aaf18d2917cf046e96ea0686abaae85140a6","impliedFormat":1},{"version":"921a87943b3bbe03c5f7cf7d209cc21d01f06bf0d9838eee608dfab39ae7d7f4","impliedFormat":1},{"version":"b75fca19de5056deaa27f8a2445ed6b6e6ceca0f515b6fdf8508efb91bc6398a","impliedFormat":1},{"version":"ce3382d8fdb762031e03fe6f2078d8fbb9124890665e337ad7cd1fa335b0eb4c","impliedFormat":1},{"version":"fe2ca2bde7e28db13b44a362d46085c8e929733bba05cf7bf346e110320570d1","impliedFormat":1},{"version":"1ca7c8e38d1f5c343ab5ab58e351f6885f4677a325c69bb82d4cba466cdafeda","impliedFormat":1},{"version":"ba14614494bccb80d56b14b229328db0849feb1cbfd6efdc517bc5b0cb21c02f","impliedFormat":1},{"version":"01aa1b58e576eb2586eedb97bcc008bbe663017cc49f0228da952e890c70319f","impliedFormat":1},{"version":"17c9ca339723ded480ca5f25c5706e94d4e96dcd03c9e9e6624130ab199d70e1","impliedFormat":1},{"version":"a069aef689b78d2131045ae3ecb7d79a0ef2eeab9bc5dff10a653c60494faa79","impliedFormat":1},{"version":"680db60ad1e95bbefbb302b1096b5ad3ce86600c9542179cc52adae8aee60f36","impliedFormat":1},{"version":"1a4e3036112cf0cebac938dcfb840950f9f87d6475c3b71f4a219e0954b6cab4","impliedFormat":1},{"version":"ec4245030ac3af288108add405996081ddf696e4fe8b84b9f4d4eecc9cab08e1","impliedFormat":1},{"version":"6f9d2bd7c485bea5504bc8d95d0654947ea1a2e86bbf977a439719d85c50733f","impliedFormat":1},{"version":"1cb6b6e4e5e9e55ae33def006da6ac297ff6665371671e4335ab5f831dd3e2cd","impliedFormat":1},{"version":"dbd75ef6268810f309c12d247d1161808746b459bb72b96123e7274d89ea9063","impliedFormat":1},{"version":"175e129f494c207dfc1125d8863981ef0c3fb105960d6ec2ea170509663662da","impliedFormat":1},{"version":"5c65d0454be93eecee2bec78e652111766d22062889ab910cbd1cd6e8c44f725","impliedFormat":1},{"version":"1d539bc450578c25214e5cc03eaaf51a61e48e00315a42e59305e1cd9d89c229","impliedFormat":1},{"version":"761745badb654d6ff7a2cd73ff1017bf8a67fdf240d16fbe3e43dca9838027a6","impliedFormat":1},{"version":"e4f33c01cf5b5a8312d6caaad22a5a511883dffceafbb2ee85a7cf105b259fda","impliedFormat":1},{"version":"5b49365103ad23e1c4f44b9d83ef42ff19eea7a0785c454b6be67e82f935a078","impliedFormat":1},{"version":"a664ab26fe162d26ad3c8f385236a0fde40824007b2c4072d18283b1b33fc833","impliedFormat":1},{"version":"193337c11f45de2f0fc9d8ec2d494965da4ae92382ba1a1d90cc0b04e5eeebde","impliedFormat":1},{"version":"4a119c3d93b46bead2e3108336d83ec0debd9f6453f55a14d7066bf430bb9dca","impliedFormat":1},{"version":"02ba072c61c60c8c2018bba0672f7c6e766a29a323a57a4de828afb2bbbb9d54","impliedFormat":1},{"version":"88fe3740babbaa61402a49bd24ce9efcbe40385b0d7cceb96ac951a02d981610","impliedFormat":1},{"version":"1abe3d916ab50524d25a5fbe840bd7ce2e2537b68956734863273e561f9eb61c","impliedFormat":1},{"version":"2b44bc7e31faab2c26444975b362ece435d49066be89644885341b430e61bb7e","impliedFormat":1},{"version":"06763bb36ab0683801c1fa355731b7e65d84b012f976c2580e23ad60bccbd961","impliedFormat":1},{"version":"6a6791e7863eb25fa187d9f323ac563690b2075e893576762e27f862b8003f30","impliedFormat":1},{"version":"bd90f3a677579a8e767f0c4be7dfdf7155b650fb1293fff897ccada7a74d77ff","impliedFormat":1},{"version":"b3eb56b920afafd8718dc11088a546eeb3adf6aa1cbc991c9956f5a1fe3265b3","impliedFormat":1},{"version":"605940ddc9071be96ec80dfc18ab56521f927140427046806c1cfc0adf410b27","impliedFormat":1},{"version":"1a350245a56fdf1f7bac061fce62689f940ea7dd38dee8ccbfc593619eeb4649","impliedFormat":1},{"version":"5194a7fd715131a3b92668d4992a1ac18c493a81a9a2bb064bcd38affc48f22d","impliedFormat":1},{"version":"b7dce3b64ac90cfb272ff277f0a250791829d4b3efc772f2d1c44c30a0218a8b","impliedFormat":1},{"version":"885d19e9f8272f1816266a69d7e4037b1e05095446b71ea45484f97c648a6135","impliedFormat":1},{"version":"fa28c1f081aa3b9fe872f759f1eb95ced4e4d935b534d7f91797433aee9cd589","impliedFormat":1},{"version":"c1cefd1eccda6d3277d556202450d947a1c88dd8194aabe6fbb101f0149fafaf","impliedFormat":1},{"version":"47008c9a4f168c2490bebc92653f4227accb55fe4b75f06cd0d568bd6370c435","impliedFormat":1},{"version":"b5203823f084dcfaae1f506dfe9bd84bf8ea008a2a834fdd5c5d7d0144418e0b","impliedFormat":1},{"version":"76c2ad2b6e3ec3d09819d8e919ea3e055c9bd73a90c3c6994ba807fd0e12ab15","impliedFormat":1},{"version":"03eb569fd62a9035cac5ac9fd5d960d73de56a6704b7988c13ce6593bec015d1","impliedFormat":1},{"version":"f77ca1843ec31c769b7190f9aa4913e8888ffdfbc4b41d77256fad4108da2b60","impliedFormat":1},{"version":"2ce435b7150596e688b03430fd8247893013ec27c565cd601bba05ea2b97e99d","impliedFormat":1},{"version":"4ea6ab7f5028bedbbc908ab3085dc33077124372734713e507d3d391744a411b","impliedFormat":1},{"version":"909ecbb1054805e23a71612dd50dff18be871dcfe18664a3bcd40ef88d06e747","impliedFormat":1},{"version":"c260695b255841fcfbc6008343dae58b3ea00efdfc16997cc69992141f4728c6","impliedFormat":1},{"version":"88f46a47b213f376c765ef54df828835dfbb13214cfd201f635324337ebbe17f","impliedFormat":1},{"version":"6c3760df827b88767e2a40e7f22ce564bb3e57d799b5932ec867f6f395b17c8f","impliedFormat":1},{"version":"8ef33387e4661678691489e4a2cab1765efd8fad7cb5cb47f46f0ece1ad7903e","impliedFormat":1},{"version":"afcc443428acd72b171f3eba1c08b1f9dcbba8f1cc2430d68115d12176a78fb0","impliedFormat":1},{"version":"0d7dcf40ed5a67b344df8f9353c5aa8a502e2bbdad53977bc391b36b358a0a1c","impliedFormat":1},{"version":"093ad5bb0746fdb36f1373459f6a8240bc4473829723300254936fc3fdaee111","impliedFormat":1},{"version":"f2367181a67aff75790aa9a4255a35689110f7fb1b0adb08533913762a34f9e6","impliedFormat":1},{"version":"4a1a4800285e8fd30b13cb69142103845c6cb27086101c2950c93ffcd4c52b94","impliedFormat":1},{"version":"c295f6c684e8121b6f25f4767202e5baf9826fe16eec42f4a2bb2966da0f5898","impliedFormat":1},{"version":"fe255676a54e5a01f951e6f773c715391f7d902d197d9ca11a4f9c6b79ffa2ad","impliedFormat":1},{"version":"3ce1188fd214883b087e7feb7bd95dd4a8ce9c1e148951edd454c17a23d54b41","impliedFormat":1},{"version":"a23cc04238f0b8a3805ddb406ee6d69bda510aee5f3c4aa85dbe52cb598cbb04","impliedFormat":1},{"version":"648ae35c81ab9cb90cb1915ede15527b29160cce0fa1b5e24600977d1ba11543","impliedFormat":1},{"version":"003502d5a8ec5d392a0a3120983c43f073c6d2fd1e823a819f25029ce40271e8","impliedFormat":1},{"version":"1fdbd12a1d02882ef538980a28a9a51d51fd54c434cf233822545f53d84ef9cf","impliedFormat":1},{"version":"419bad1d214faccabfbf52ab24ae4523071fcc61d8cee17b589299171419563c","impliedFormat":1},{"version":"291b182b1e01ded75105515bcefd64dcf675f98508c4ca547a194afd80331823","impliedFormat":1},{"version":"74532476a2d3d4eb8ac23bac785a9f88ca6ce227179e55537d01476b6d4435ea","impliedFormat":1},{"version":"bf33e792a3bc927a6b0d84f428814c35a0a9ca3c0cc8a91246f0b60230da3b6c","impliedFormat":1},{"version":"75ddb104faa8f4f84b3c73e587c317d2153fc20d0d712a19f77bea0b97900502","impliedFormat":1},{"version":"135785aa49ae8a82e23a492b5fc459f8a2044588633a124c5b8ff60bbb31b5d4","impliedFormat":1},{"version":"267d5f0f8b20eaeb586158436ba46c3228561a8e5bb5c89f3284940a0a305bd8","impliedFormat":1},{"version":"1d21320d3bf6b17b6caf7e736b78c3b3e26ee08b6ac1d59a8b194039aaaa93ae","impliedFormat":1},{"version":"8b2efbff78e96ddab0b581ecd0e44a68142124444e1ed9475a198f2340fe3ef7","impliedFormat":1},{"version":"6eff0590244c1c9daf80a3ac1e9318f8e8dcd1e31a89983c963bb61be97b981b","impliedFormat":1},{"version":"7367c0d3442165e6164185b7950b8f70ea2be0142b2175748fef7dc23c6d2230","impliedFormat":1},{"version":"d66efc7ed427ca014754343a80cf2b4512ceaa776bc4a9139d06863abf01ac5c","impliedFormat":1},{"version":"cb0e8923b4d8d8a5bbcea59abc731a1cca90f69aef74f6b27df0bd890d6a00ed","impliedFormat":1},{"version":"dbeb4c3a24b95fe4ad6fdff9577455f5868fbb5ad12f7c22c68cb24374d0996d","impliedFormat":1},{"version":"71c99cd1806cc9e597ff15ca9c90e1b7ad823b38a1327ccbc8ab6125cf70118e","impliedFormat":1},{"version":"6170710f279fffc97a7dd1a10da25a2e9dac4e9fc290a82443728f2e16eb619b","impliedFormat":1},{"version":"3804a3a26e2fd68f99d686840715abc5034aeb8bcbf970e36ad7af8ab69b0461","impliedFormat":1},{"version":"67b395b282b2544f7d71f4a7c560a7225eac113e7f3bcd8e88e5408b8927a63e","impliedFormat":1},{"version":"fe301153d19ddb9e39549f3a5b71c5a94fec01fc8f1bd6b053c4ef42207bef2a","impliedFormat":1},{"version":"4b09036cb89566deddca4d31aead948cf5bdb872508263220582f3be85157551","impliedFormat":1},{"version":"c61d09ae1f70d3eed306dc991c060d57866127365e03de4625497de58a996ffc","impliedFormat":1},{"version":"8fe6d4285c9486741b09ca3b32dde2da3cf94d18ae1ec490217ee8980c9f7eee","impliedFormat":1},{"version":"e60ec884263e7ffcebaf4a45e95a17fc273120a5d474963d4d6d7a574e2e9b97","impliedFormat":1},{"version":"6fd6c4c9eef86c84dd1f09cbd8c10d8feb3ed871724ba8d96a7bd138825a0c1a","impliedFormat":1},{"version":"a420fa988570675d65a6c0570b71bebf0c793f658b4ae20efc4f8e21a1259b54","impliedFormat":1},{"version":"16a64f8bdaa16d75f9523120f260fcfece9218471062bcc33c4ccb52aa2945b0","impliedFormat":1},{"version":"39e31b902b6b627350a41b05f9627faf6bb1919ad1d17f0871889e5e6d80663c","impliedFormat":1},{"version":"282fd78a91b8363e120a991d61030e2186167f6610a6df195961dba7285b3f17","impliedFormat":1},{"version":"ec571ed174e47dade96ba9157f972937b2e4844a85c399e26957f9aa6d288767","impliedFormat":1},{"version":"16ce742a2199b12a6498dee9f832e27ac5e523064d41f951a8b27cdf3c6b702f","impliedFormat":1},{"version":"03b9959bee04c98401c8915227bbaa3181ddc98a548fb4167cd1f7f504b4a1ea","impliedFormat":1},{"version":"2d18b7e666215df5d8becf9ffcfef95e1d12bfe0ac0b07bc8227b970c4d3f487","impliedFormat":1},{"version":"d7ebeb1848cd09a262a09c011c9fa2fc167d0dd6ec57e3101a25460558b2c0e3","impliedFormat":1},{"version":"6c27c0042aed02a14cc458bff4cf45b4da4ae3b26a68e1da66dbf5a1be8d0640","impliedFormat":1},{"version":"05e9608dfef139336fb2574266412a6352d605857de2f94b2ce454d53e813cd6","impliedFormat":1},{"version":"02de191d16b2797feb7dcebb865562ad148a9507e523c0470d308c5eef158eec","impliedFormat":1},{"version":"bb1c6786ef387ac7a2964ea61adfb76bf9f967bbd802b0494944d7eec31fea2e","impliedFormat":1},{"version":"df407b6c3a8a3ef06519fbe16923df440cbd0fb536effdaa15b312ac8e89dac2","impliedFormat":1},{"version":"bc3ee6fe6cab0459f4827f982dbe36dcbd16017e52c43fec4e139a91919e0630","impliedFormat":1},{"version":"41e0d68718bf4dc5e0984626f3af12c0a5262a35841a2c30a78242605fa7678e","impliedFormat":1},{"version":"32615eb16e819607b161e2561a2cd75ec17ac6301ba770658d5a960497895197","impliedFormat":1},{"version":"ac14cc1d1823cec0bf4abc1d233a995b91c3365451bf1859d9847279a38f16ee","impliedFormat":1},{"version":"f1142315617ac6a44249877c2405b7acda71a5acb3d4909f4b3cbcc092ebf8bd","impliedFormat":1},{"version":"3356f7498c6465efb74d0a6a5518b6b8f27d9e096abd140074fd24e9bd483dbd","impliedFormat":1},{"version":"ddc0e8ba97c5ad221cf854999145186b917255b2a9f75d0de892f4d079fa0b5c","impliedFormat":1},{"version":"2f60a32bb6a05a722c42bb9709f917bb37f2484375367eb9c03bdafd9de42daf","impliedFormat":1},{"version":"b775bfe85c7774cafc1f9b815c17f233c98908d380ae561748de52ccacc47e17","impliedFormat":1},{"version":"5a81c7117f8f1c393c09b3a108549825df175b4b388d2dbc7f11e6a1d234c0d4","impliedFormat":1},{"version":"19b1e024ed6d2e2a384ab723cc9c0e807bf6939e6013edef0f12d3fc4f79bb2a","impliedFormat":1},{"version":"41f45ed6b4cd7b8aec2e4888a47d5061ee1020f89375b57d388cfe1f05313991","impliedFormat":99},{"version":"98bb67aa18a720c471e2739441d8bdecdae17c40361914c1ccffab0573356a85","impliedFormat":99},{"version":"8258b4ec62cf9f136f1613e1602156fdd0852bb8715dde963d217ad4d61d8d09","impliedFormat":99},{"version":"025c00e68cf1e9578f198c9387e74cdf481f472e5384a69143edbcf4168cdb96","impliedFormat":99},{"version":"c0c43bf56c3ea9ecc2491dc6e7a2f7ee6a2c730ed79c1bb5eec7af3902729cb2","impliedFormat":99},{"version":"9eaa04e9271513d4faacc732b056efa329d297be18a4d5908f3becced2954329","impliedFormat":99},{"version":"98b1c3591f5ce0dd151fa011ea936b095779217d2a87a2a3701da47ce4a498a1","impliedFormat":99},{"version":"aad0b04040ca82c60ff3ea244f4d15ac9faa6e124b053b553e7a1e03d6a6737d","impliedFormat":99},{"version":"3672426a97d387a710aa2d0c3804024769c310ce9953771d471062cc71f47d51","impliedFormat":99},"a20527e2102540bba5bb9b821bf32179449d2bcb75ed1d6d2770ad3e58e78792",{"version":"1dfdec0ec9c299625d20c5cb8f96e2a801c81d91669c6245f520e8734a92fb3d","impliedFormat":1},"08589118c66c4317837183162c589e08c7018472c9a643e96bfe951b59324eca","8e41219cc06d6de9f1de66a2b743f0dd940e23d14d7cf496cd4736fc7ae4bc15","1349ee9d1c7ebd1ff8a7abf8e63e7125674113279b7ffecdd5336b596709ad8e","0abada817500e194e82114c5011edcd2026acdb8d9cffd994634356e0720b2fd","cca4484041a3afc4ba94b76569f47307b572f3efffe6b0b8fa0ba9713d586c3b","07d7aeb3265b4f8ac266df0e6d1168f25225ea9ce6fc7bd483ea41cd3045bdf9","9c1d8389f3bc6eb43c0543d373ddf611115f88974ad272b18b08e2c94da3cbda","5a8167cb7ec29867ba41d7cfaed7b42fd65da006ad97b84cb23e5e9d1791e0fb","1862c37edcf9a04b590812b9f2560799cf88ab9a597ff58951647164a587c085","a49c90710b0329b7738db7f2c4a9afd4a2f5c21905340bb0013d3fced57ccc54","b7fd584b86706199e8fb0abac04d9e099aac067a2b22da9934b5d1ac59fbb8f4","c6e27ad2b400693c81e465f2be685012a215342c879b2a75625b0e4dbfa4dfed","3ded079eb9c4927bccb1698519c576c7892e4f227f09eab62cdc8d655c4a8c41","54018cc75c292b74606d0b2d334857993916708de96f4673ade8d905504efc22","5e37f9cc0521510d84a8ce3b18b3fe3f7120e799360c779708676d02bc9cf0a4","d2be1fc0cf13e412c062a125a64a7b8491fd3dfa3b6dc0c59e6002854ea219a2","5d36abfe4d6de7b23d1ae59de32499d1703583f6aebd9c459a993976dca6d4ed",{"version":"1f983a93b86bf82ef3cc0ead060c5e3d28fd905864d3441337706ea5ef77a990","impliedFormat":99},"85214c668a65fa0ac38be7f4bb39404c6064330a9cedf6cbc5c8760813f1b7b2","965231752a875d0869cdda0d7ac5f0451b3ca2e323b72634b5b9103c009638c0","e425940d97d0871f3dbd282be3c7f957a30b3e1ec7f923803c0f508d2a1bbc38","1fc041a358a47d644c2132eb176eddebdb6535d2ada404d454025e3df0f41dbe","8f39958d12cde2bbb96de8f936fda718f5456c0b157d210400d01a968117b287","2495308ff6eb0c13800cd4e27c40fa51520400a0a99c04b7471311aa1ce47f77","a05bd12fff6270c8e834a55642cecc91c6fe3102713f71c1c30ac3e57e570e63","0ccce2ca114e04230c00e1fe52305f05a4c7462d357f074ca694fa25038ad866","9856b6a9d06ea5ce0a9b412fe1e33995845bc7f9e57e0e2fe0955600a344706c","2751809c81945912d877eec7249729fbb226b2f06c0e2b2b3d190bc3431a5cce","89c73d12c06d970697681124cec19bed3703a39a998014c1124af8d0c64a6fb1",{"version":"b07047a60f37f65427574e262a781e6936af9036cf92b540311e033956fd49be","impliedFormat":1},{"version":"25ba804522003eb8212efb1e6a4c2d114662a894b479351c36bd9c7491ceb04f","impliedFormat":1},{"version":"6445fe8e47b350b2460b465d7df81a08b75b984a87ee594caf4a57510f6ec02e","impliedFormat":1},{"version":"425e1299147c67205df40ce396f52ff012c1bf501dcfbf1c7123bbd11f027ab0","impliedFormat":1},{"version":"3abf6b0a561eed97d2f2b58f2d647487ba33191c0ecb96764cc12be4c3dd6b55","impliedFormat":1},{"version":"01cc05d0db041f1733a41beec0ddaeea416e10950f47e6336b3be26070346720","impliedFormat":1},{"version":"e21813719193807d4ca53bb158f1e7581df8aa6401a6a006727b56720b62b139","impliedFormat":1},{"version":"f4f9ca492b1a0306dcb34aa46d84ca3870623db46a669c2b7e5403a4c5bcbbd6","impliedFormat":1},{"version":"492d38565cf9cce8a4f239d36353c94b24ef46a43462d3d411e90c8bef2f8503","impliedFormat":1},{"version":"9f94dc8fb29d482f80aec57af2d982858a1820a8c8872910f89ae2f7fd9bee7f","impliedFormat":1},{"version":"a23f14db3212d53b6c76c346caca80c3627bf900362ce7a896229675a67ae49b","impliedFormat":1},{"version":"f317cf0107576c3e70d3fc9040d767272e4eb5940a1a22666cc81ae491b69d12","impliedFormat":1},{"version":"f317cf0107576c3e70d3fc9040d767272e4eb5940a1a22666cc81ae491b69d12","impliedFormat":1},{"version":"eedb957064af583258d82b6fd845c4df7d0806868cb18cbc2c6a8b0b51eb00bd","impliedFormat":1},{"version":"b6967a67f087fd77eb1980a8abb701ad040679404ed62bd4d6b40406a621fc45","impliedFormat":1},{"version":"092f99777813f42f32abf6f2e4ef1649b6e74cd94db499f2df64fc78d3f969e4","impliedFormat":1},{"version":"3d86c7feb4ee3862d71fe42e3fc120131decf6aa4a21bdf8b3bb9f8c5228aed2","impliedFormat":1},{"version":"ab70ea5d6d02c8631da210783199dc0f6c51ac5dfbc4265fdb8f1526fa0fdc7f","impliedFormat":1},{"version":"427acaa3bbea7c0b1f57d7d9190bedbbb49c147ef36b9088f8f43d1c57974d6e","impliedFormat":1},{"version":"bbd32da0338c47c74e40436d262d787e9a61c11de6d70d431b830babe79aa679","impliedFormat":1},{"version":"cb852ce7eb0ab4281cd3c5a1710d819f54f58fba0f0e9d4b797195416f254883","impliedFormat":1},{"version":"34465f88f94a4b0748055fa5702528e54ef9937c039e29a6bcde810deefd73d0","impliedFormat":1},{"version":"c451606558ca4e1e71e38396f94778b7c9a553a3b33f376ab5e4991dd3633e28","impliedFormat":1},{"version":"22986fb5b95b473335e2bbcc62a9438e8a242ca3d1b28c220d8b99e0d5874678","impliedFormat":1},{"version":"838dc2c15fe68509985a94d1853e96b1e519992a711a7a0cd8568dfd36bf757e","impliedFormat":1},{"version":"bb894fb593532cd9819c43f747cc7b0901136a93758e78482a9f675563beacdf","impliedFormat":1},{"version":"9575c608269abe4889b7c1382762c09deb7493812284bde0a429789fa963838b","impliedFormat":1},{"version":"c8c57e8f7e28927748918e0420c0d6dd55734a200d38d560e16dc99858710f2b","impliedFormat":1},{"version":"64903d7216ed30f8511f03812db3333152f3418de6d422c00bde966045885fb7","impliedFormat":1},{"version":"8ff3e2f7d218a5c4498a2a657956f0ca000352074b46dbaf4e0e0475e05a1b12","impliedFormat":1},{"version":"498f87ea2a046a47910a04cf457a1b05d52d31e986a090b9abc569142f0d4260","impliedFormat":1},{"version":"5ac05c0f6855db16afa699dccfd9e3bd3a7a5160e83d7dce0b23b21d3c7353b9","impliedFormat":1},{"version":"7e792c18f8e4ac8b17c2b786e90f9e2e26cf967145ad615f5c1d09ab0303241f","impliedFormat":1},{"version":"a528a860066cc462a9f0bddc9dbe314739d5f8232b2b49934f84a0ce3a86de81","impliedFormat":1},{"version":"81760466a2f14607fcacf84be44e75ef9dcc7f7267a266d97094895a5c37cbac","impliedFormat":1},{"version":"ee05b32eccbf91646cb264de32701b48a37143708065b74ed0116199d4774e86","impliedFormat":1},{"version":"60f3443b1c23d4956fb9b239e20d31859ea57670cd9f5b827f1cd0cac24c9297","impliedFormat":1},{"version":"648eacd046cfe3e9cba80da0cf2dc69c68aa749be900d7ee4b25ce28099ffa72","impliedFormat":1},{"version":"6a69d5ec5a4ed88455753431cf4d72411d210f04bce62475f9f1a97c4cf4294e","impliedFormat":1},{"version":"11fb88d11384bea44dc08b42b7341a39e36719a68a6be5fed5da575cdaeb1ad8","impliedFormat":1},{"version":"2936dcfaf4b4d1585b73c5ae7ac6395f143e136474bc091cc95033aface47e5e","impliedFormat":1},{"version":"4719ef9fe00fb18f2c3844a1939111ebca55e64f1fa93b14ddcea050865b63f0","impliedFormat":1},{"version":"86edb0b4f12ce79243d5e6ca4bed776bdd7e7a774ce4961578905e775c994ea8","impliedFormat":1},{"version":"b4a4433d4d4601efe2aa677164dee3754e511de644080147421a8cac8d6aae68","impliedFormat":1},{"version":"09a2e34f98a73581d1fd923f2eafaf09bb3ebde6ea730779af09da35dffebbcd","impliedFormat":1},{"version":"f5b5545691bd2e4ca7cf306f99a088ba0ec7e80f3dfca53b87167dbbb44cd836","impliedFormat":1},{"version":"3bd5bd5fabd0b2c646e1413e4d4eb9bbca4bd5a9ffdc53c5375f50078c20c2e2","impliedFormat":1},{"version":"3bd5bd5fabd0b2c646e1413e4d4eb9bbca4bd5a9ffdc53c5375f50078c20c2e2","impliedFormat":1},{"version":"d5003e54842f82de63a808473357de001162f7ca56ab91266e5d790b620f6fdb","impliedFormat":1},{"version":"aa0761c822c96822508e663d9b0ee33ad12a751219565a12471da3e79c38f0ba","impliedFormat":1},{"version":"8338db69b3c23549e39ecf74af0de68417fcea11c98c4185a14f0b3ef833c933","impliedFormat":1},{"version":"85f208946133e169c6a8e57288362151b2072f0256dbed0a4b893bf41aab239a","impliedFormat":1},{"version":"e6957055d9796b6a50d2b942196ffece6a221ec424daf7a3eddcee908e1df7b0","impliedFormat":1},{"version":"e9142ff6ddb6b49da6a1f44171c8974c3cca4b72f06b0bbcaa3ef06721dda7b5","impliedFormat":1},{"version":"3961869af3e875a32e8db4641d118aa3a822642a78f6c6de753aa2dbb4e1ab77","impliedFormat":1},{"version":"4a688c0080652b8dc7d2762491fbc97d8339086877e5fcba74f78f892368e273","impliedFormat":1},{"version":"c81b913615690710c5bcfff0845301e605e7e0e1ebc7b1a9d159b90b0444fccf","impliedFormat":1},{"version":"2ced4431ecdda62fefcf7a2e999783759d08d802962adcff2b0105511f50056d","impliedFormat":1},{"version":"2ced4431ecdda62fefcf7a2e999783759d08d802962adcff2b0105511f50056d","impliedFormat":1},{"version":"e4c6c971ce45aef22b876b7e11d3cd3c64c72fcd6b0b87077197932c85a0d81d","impliedFormat":1},{"version":"7fd1258607eddcc1cf7d1fef9c120a3f224f999bba22da3a0835b25c8321a1d3","impliedFormat":1},{"version":"da3a1963324e9100d88c77ea9bec81385386dbb62acd45db8197d9aeb67284f7","impliedFormat":1},{"version":"f14deef45f1c4c76c96b765e2a7a2410c5e8ae211624fb99fe944d35da2f27c1","impliedFormat":1},{"version":"04dc76c64d88e872fafce2cceb7e25b00daa7180a678600be52c26387486a6d7","impliedFormat":1},{"version":"18c19498e351fb6f0ddbfa499a9c2c845a4d06ed076a976deb4ac28d7c613120","impliedFormat":1},{"version":"5738df287f7e6102687a9549c9b1402941632473e0423ef08bd8af6f394b2662","impliedFormat":1},{"version":"c67e42d11d442babad44a7821e5a18d55548271fdbe9dceb34e3f794e4e2c045","impliedFormat":1},{"version":"407bd942087ec965acd69dfb8f3196838337b07ce9bb3b6939b825bf01f6fb82","impliedFormat":1},{"version":"3d6e4bf3459c87e9cdf6016f51479c5f1e2535ef6b1e9d09ac5826c53d1f849c","impliedFormat":1},{"version":"c583b7e6c874476a42f22fb8afa7474f7ddedac69733e5e28fed9bde08418a3b","impliedFormat":1},{"version":"faf7c4d1fafaed99f524a1dc58b2c3f5602aebfb1a7cac119f279361bae6a0aa","impliedFormat":1},{"version":"d3ded63f1110dc555469fc51ce9873be767c72bff2df976e3afb771c34e91651","impliedFormat":1},{"version":"b0a1098565684d1291020613947d91e7ae92826ffbc3e64f2a829c8200bc6f05","impliedFormat":1},{"version":"1a5bbfae4f953a5552d9fa795efca39883e57b341f0d558466a0bf4868707eb4","impliedFormat":1},{"version":"fe542d91695a73fd82181e8d8898f3f5f3bec296c7480c5ff5e0e170fa50e382","impliedFormat":1},{"version":"891becf92219c25433153d17f9778dec9d76185bc8a86ca5050f6971eaf06a65","impliedFormat":1},{"version":"267f93fbddff4f28c34be3d6773ee8422b60c82f7d31066b6587dffa959a8a6a","impliedFormat":1},{"version":"276d36388f1d029c4543c0ddd5c208606aedcbaed157263f58f9c5016472057e","impliedFormat":1},{"version":"b018759002a9000a881dbb1f9394c6ef59c51fa4867705d00acba9c3245428ea","impliedFormat":1},{"version":"20bbf42534cbacbd0a8e1565d2c885152b7c423a3d4864c75352a8750bb6b52c","impliedFormat":1},{"version":"0ce3dbc76a8a8ed58f0f63868307014160c3c521bc93ed365de4306c85a4df33","impliedFormat":1},{"version":"d9a349eb9160735da163c23b54af6354a3e70229d07bb93d7343a87e1e35fd40","impliedFormat":1},{"version":"9bd17494fcb9407dcc6ace7bde10f4cf3fc06a4c92fe462712853688733c28a3","impliedFormat":1},{"version":"ba540f8efa123096aa3a7b6f01acb2dc81943fa88e5a1adb47d69ed80b949005","impliedFormat":1},{"version":"c6b20a3d20a9766f1dded11397bdba4531ab816fdb15aa5aa65ff94c065419cf","impliedFormat":1},{"version":"91e4a5e8b041f28f73862fb09cd855cfab3f2c7b38abe77089747923f3ad1458","impliedFormat":1},{"version":"2cebda0690ab1dee490774cb062761d520d6fabf80b2bd55346fde6f1f41e25d","impliedFormat":1},{"version":"bcc18e12e24c7eb5b7899b70f118c426889ac1dccfa55595c08427d529cc3ce1","impliedFormat":1},{"version":"6838d107125eeaf659e6fc353b104efd6d033d73cfc1db31224cb652256008f1","impliedFormat":1},{"version":"97b21e38c9273ccc7936946c5099f082778574bbb7a7ab1d9fc7543cbd452fd5","impliedFormat":1},{"version":"ae90b5359bc020cd0681b4cea028bf52b662dff76897f125fa3fe514a0b6727a","impliedFormat":1},{"version":"4596f03c529bd6c342761a19cf6e91221bee47faad3a8c7493abff692c966372","impliedFormat":1},{"version":"6682c8f50bd39495df3042d2d7a848066b63439e902bf8a00a41c3cfc9d7fafa","impliedFormat":1},{"version":"1b111caa0a85bcfd909df65219ecd567424ba17e3219c6847a4f40e71da9810b","impliedFormat":1},{"version":"b8df0a9e1e9c5bd6bcdba2ca39e1847b6a5ca023487785e6909b8039c0c57b16","impliedFormat":1},{"version":"2e26ca8ed836214ad99d54078a7dadec19c9c871a48cb565eaac5900074de31c","impliedFormat":1},{"version":"2b5705d85eb82d90680760b889ebedade29878dbb8cab2e56a206fd32b47e481","impliedFormat":1},{"version":"d131e0261dc711dd6437a69bac59ed3209687025b4e47d424408cf929ca6c17c","impliedFormat":1},{"version":"86c7f05da9abdecf1a1ea777e6172a69f80aec6f9d37c665bd3a761a44ec177b","impliedFormat":1},{"version":"840fe0bc4a365211bae1b83d683bfd94a0818121a76d73674ee38081b0d65454","impliedFormat":1},{"version":"1b6e2a3019f57e4c72998b4ddeea6ee1f637c07cc9199126475b0f17ba5a6c48","impliedFormat":1},{"version":"69920354aa42af33820391f6ec39605c37a944741c36007c1ff317fc255b1272","impliedFormat":1},{"version":"054186ff3657c66e43567635eed91ad9d10a8c590f007ba9eae7182e5042300b","impliedFormat":1},{"version":"1d543a56cb8c953804d7a5572b193c7feb3475f1d1f7045541a227eced6bf265","impliedFormat":1},{"version":"67374297518cf483af96aa68f52f446e2931b7a84fa8982ab85b6dd3fc4accce","impliedFormat":1},{"version":"cf9bfdf581e8998f45f486fdb1422edd7fc05cc9bc39a0bf45c293805176bf7d","impliedFormat":1},{"version":"cf9bfdf581e8998f45f486fdb1422edd7fc05cc9bc39a0bf45c293805176bf7d","impliedFormat":1},{"version":"849d09d5dc6836815767c3f8e2e4c561c8c1986d5398a8e876208aed2cc691c3","impliedFormat":1},{"version":"849d09d5dc6836815767c3f8e2e4c561c8c1986d5398a8e876208aed2cc691c3","impliedFormat":1},{"version":"0dd43d0e8bc78b0c73b1bd20ad29dac4c82163ab92744551bf2ab46512c33b6c","impliedFormat":1},{"version":"0dd43d0e8bc78b0c73b1bd20ad29dac4c82163ab92744551bf2ab46512c33b6c","impliedFormat":1},{"version":"54a527b58cf10aae5525481b5446b81a28b2ae459ce27dc97bd56b13508ea11c","impliedFormat":1},{"version":"54a527b58cf10aae5525481b5446b81a28b2ae459ce27dc97bd56b13508ea11c","impliedFormat":1},{"version":"d1880d157445fdbf521eead6182f47f4b3e5405afd08293ed9e224c01578e26a","impliedFormat":1},{"version":"ed2f74c2566e99295f366f820e54db67d304c3814efcb4389ce791410e9178b0","impliedFormat":1},{"version":"4f7f0dd2d715968cbc88f63784e3323ef0166566fbd121f0ebeb0d07d1ef886b","impliedFormat":1},{"version":"b45e4210d7ffd6339cc7c44484a287bd6578440e4885610067d44d6a084e6719","impliedFormat":1},{"version":"86c931b4aaddf898feee19e37ebdc9f29715bc71e39717138a8dbfb7b56e964d","impliedFormat":1},{"version":"b23d3623bbd2371f16961b7a8ab48f827ee14a0fc9e64aace665e4fc92e0fabe","impliedFormat":1},{"version":"95742365fd6f187354ad59aa45ec521f276b19acfb3636a065bc53728ede2aa6","impliedFormat":1},{"version":"4ac7cb98cbdde71287119827a1ec79c75e4b31847e18b7522cc8ff613f37d0d7","impliedFormat":1},{"version":"ae46812138452a8bf885321878a4f3f66060843b136322cf00e5bdd291596f5a","impliedFormat":1},{"version":"dd708604a523a1f60485ff5273811ff5a2581c0f9d0ccaa9dd7788b598c3e4cb","impliedFormat":1},{"version":"dbdd0616bc8801c73ded285458dddbc468bbae511e55a2b93db71a6fca9fc8fa","impliedFormat":1},{"version":"7682d3f8f04441f516ce74f85733583138039097779b0ac008785e4ecd440ca3","impliedFormat":1},{"version":"7619775d1c3f0bf6c49df7f1cf46bb0729b2f217e84c05e452ce4bb4c50347ba","impliedFormat":1},{"version":"2bd5ad36a78749bf88e7405712ad6cec774fd7646458612e80992a023f3a4da2","impliedFormat":1},{"version":"29a9495b4092f60dd5f079e664be6be1b967b8c2d600bfbf3986104e1d936e77","impliedFormat":1},{"version":"b966a1ceb3c4e8cc5a195ea43a962a6383d55d528ed3c33e97e65e14d2926e8e","impliedFormat":1},{"version":"524138093155f10c138b3ee9cc07284697bf6ba6d90a072106a1f0f7a23f8bea","impliedFormat":1},{"version":"4d44be7af68c7b5a537781bd4f28d48f2262dfd846ff5167f67f665aa93c342b","impliedFormat":1},{"version":"b5534cd11582a3025fb774fbda25a5bfb3a310befb36df425a954b23e2f1872a","impliedFormat":1},{"version":"1eb50ff7cef891bb6f7970802d061dbeb460bde39aef2690937e4e5dbadd74f7","impliedFormat":1},{"version":"b65353223b43764d9ac3a5b3f6bc80ac69b4bb53dfb733dca5dbe580cb2c95ee","impliedFormat":1},{"version":"a843a1a722ebd9a53aeb0823d40190907bde19df318bd3b0911d2876482bd9fa","impliedFormat":1},{"version":"c587631255497ef0d8af1ed82867bfbafaab2d141b84eb67d88b8c4365b0c652","impliedFormat":1},{"version":"b6d3cd9024ab465ec8dd620aeb7d859e323a119ec1d8f70797921566d2c6ac20","impliedFormat":1},{"version":"c5ccf24c3c3229a2d8d15085c0c5289a2bd6a16cb782faadf70d12fddcd672ff","impliedFormat":1},{"version":"a7fc49e0bee3c7ecdcd5c86bc5b680bfad77d0c4f922d4a2361a9aa01f447483","impliedFormat":1},{"version":"3dab449a3c849381e5edb24331596c46442ad46995d5d430c980d7388b158cf8","impliedFormat":1},{"version":"5886a079613cbf07cf7047db32f4561f342b200a384163e0a5586d278842b98e","impliedFormat":1},{"version":"9dae0e7895da154bdc9f677945c3b12c5cc7071946f3237a413bbaa47be5eaa3","impliedFormat":1},{"version":"2d9f27cd0e3331a9c879ea3563b6ad071e1cf255f6b0348f2a5783abe4ec57fb","impliedFormat":1},{"version":"8e6039bba2448ceddd14dafcefd507b4d32df96a8a95ca311be7c87d1ea04644","impliedFormat":1},{"version":"9466d70d95144bf164cd2f0b249153e0875b8db1d6b101d27dce790fd3844faf","impliedFormat":1},{"version":"223ff122c0af20e8025151f11100e3274c1e27234915f75f355881a5aa996480","impliedFormat":1},{"version":"e89a09b50458d1a1ef9992d4c1952d5b9f49f8cfdf82cada3feb4f906d290681","impliedFormat":1},{"version":"2d46726ef0883e699242f2f429b09605beb94ec2ed90d4cccdee650cfd38e9bf","impliedFormat":1},{"version":"a5d3817a1198f3c0f05501d3c23c37e384172bc5a67eaaccbf8b22e7068b607e","impliedFormat":1},{"version":"4ff787695e6ab16b1516e7045d9e8ecf6041c543b7fbed27e26d5222ee86dc7b","impliedFormat":1},{"version":"2b04c4f7b22dfa427973fa1ae55e676cbef3b24bd13e80266cf9e908d1911ce4","impliedFormat":1},{"version":"e89136e2df173f909cb13cdffbc5241b269f24721fe7582e825738dbb44fd113","impliedFormat":1},{"version":"88cf175787ba17012d6808745d3a66b6e48a82bb10d0f192f7795e9e3b38bee0","impliedFormat":1},{"version":"415f027720b1fd2ef33e1076d1a152321acb27fd838d4609508e60280b47ad74","impliedFormat":1},{"version":"1b4034b0a074f5736ae3ec4bf6a13a87ec399779db129f324e08e7fff5b303f2","impliedFormat":1},{"version":"dcd22923b72f9a979a1cea97be236b10fc1fa3ba592c587807bfe3e10d53dbb2","impliedFormat":1},{"version":"dcd22923b72f9a979a1cea97be236b10fc1fa3ba592c587807bfe3e10d53dbb2","impliedFormat":1},{"version":"f34f40704ea9f38ee0c7e1d8f28dfde5a2720577bfdfcd5c6566df140dbe0f7a","impliedFormat":1},{"version":"ea4034d0a7d4878f0710457807ae81cc00529a5f343594bc6e5fe3337561960a","impliedFormat":1},{"version":"2d3dbed1071ac8188a9d210ec745547bc4df0a6c7f4271ac28a36865bb76ee18","impliedFormat":1},{"version":"f71430f4f235cf6fe3ab8f30b763853fe711d186fc9dc1a5f4e11ba84f2000ad","impliedFormat":1},{"version":"5c4dac355c9c745a43de2b296ec350af4ee5548639728f238996df8e4c209b68","impliedFormat":1},{"version":"e8f5dbeb59708cde836d76b5bc1ff2fff301f9374782ffd300a0d35f68dce758","impliedFormat":1},{"version":"04967e55a48ca84841da10c51d6df29f4c8fa1d5e9bd87dec6f66bb9d2830fac","impliedFormat":1},{"version":"22f5e1d0db609c82d53de417d0e4ee71795841131ad00bbd2e0bd18af1c17753","impliedFormat":1},{"version":"afd5a92d81974c5534c78c516e554ed272313a7861e0667240df802c2a11f380","impliedFormat":1},{"version":"d29b6618f255156c4e5b804640aec4863aa22c1e45e7bd71a03d7913ab14e9e2","impliedFormat":1},{"version":"3f8ac93d4f705777ac6bb059bbe759b641f57ae4b04c8b6d286324992cb426e8","impliedFormat":1},{"version":"ba151c6709816360064659d1adfc0123a89370232aead063f643edf4f9318556","impliedFormat":1},{"version":"7957745f950830ecd78ec6b0327d03f3368cfb6059f40f6cdfc087a2c8ade5c0","impliedFormat":1},{"version":"e864f9e69daecb21ce034a7c205cbea7dfc572f596b79bcd67daab646f96722a","impliedFormat":1},{"version":"ebfba0226d310d2ef2a5bc1e0b4c2bc47d545a13d7b10a46a6820e085bc8bcb2","impliedFormat":1},{"version":"dac79c8b6ab4beefba51a4d5f690b5735404f1b051ba31cd871da83405e7c322","impliedFormat":1},{"version":"1ec85583b56036da212d6d65e401a1ae45ae8866b554a65e98429646b8ba9f61","impliedFormat":1},{"version":"8a9c1e79d0d23d769863b1a1f3327d562cec0273e561fd8c503134b4387c391a","impliedFormat":1},{"version":"b274fdc8446e4900e8a64f918906ba3317aafe0c99dba2705947bab9ec433258","impliedFormat":1},{"version":"ecf8e87c10c59a57109f2893bf3ac5968e497519645c2866fbd0f0fda61804b8","impliedFormat":1},{"version":"fe27166cc321657b623da754ca733d2f8a9f56290190f74cc72caad5cb5ef56f","impliedFormat":1},{"version":"74f527519447d41a8b1518fbbc1aca5986e1d99018e8fcd85b08a20dc4daa2e1","impliedFormat":1},{"version":"63017fb1cfc05ccf0998661ec01a9c777e66d29f2809592d7c3ea1cb5dab7d78","impliedFormat":1},{"version":"d08a2d27ab3a89d06590047e1902ee63ca797f58408405729d73fc559253bbc0","impliedFormat":1},{"version":"30dc37fb1af1f77b2a0f6ea9c25b5dc9f501a1b58a8aae301daa8808e9003cf6","impliedFormat":1},{"version":"2e03022de1d40b39f44e2e14c182e54a72121bd96f9c360e1254b21931807053","impliedFormat":1},{"version":"c1563332a909140e521a3c1937472e6c2dda2bb5d0261b79ed0b2340242bdd7b","impliedFormat":1},{"version":"4f297b1208dd0a27348c2027f3254b702b0d020736e8be3a8d2c047f6aa894dd","impliedFormat":1},{"version":"db4d4a309f81d357711b3f988fb3a559eaa86c693cc0beca4c8186d791d167d2","impliedFormat":1},{"version":"67cd15fcb70bc0ee60319d128609ecf383db530e8ae7bab6f30bd42af316c52c","impliedFormat":1},{"version":"c9ecba6a0b84fd4c221eb18dfbae6f0cbf5869377a9a7f0751754da5765e9d3f","impliedFormat":1},{"version":"394a9a1186723be54a2db482d596fd7e46690bda5efc1b97a873f614367c5cea","impliedFormat":1},{"version":"4fb9545dbfaa84b5511cb254aa4fdc13e46aaaba28ddc4137fed3e23b1ae669a","impliedFormat":1},{"version":"b265ebd7aac3bc93ba4eab7e00671240ca281faefddd0f53daefac10cb522d39","impliedFormat":1},{"version":"feadb8e0d2c452da67507eb9353482a963ac3d69924f72e65ef04842aa4d5c2e","impliedFormat":1},{"version":"46beac4ebdcb4e52c2bb4f289ba679a0e60a1305f5085696fd46e8a314d32ce6","impliedFormat":1},{"version":"1bf6f348b6a9ff48d97e53245bb9d0455bc2375d48169207c7fc81880c5273d6","impliedFormat":1},{"version":"1b5c2c982f14a0e4153cbf5c314b8ba760e1cd6b3a27c784a4d3484f6468a098","impliedFormat":1},{"version":"894ce0e7a4cfe5d8c7d39fab698da847e2da40650e94a76229608cb7787d19e6","impliedFormat":1},{"version":"7453cc8b51ffd0883d98cba9fbb31cd84a058e96b2113837191c66099d3bb5a6","impliedFormat":1},{"version":"25f5fafbff6c845b22a3af76af090ddfc90e2defccca0aa41d0956b75fe14b90","impliedFormat":1},{"version":"41e3ec4b576a2830ff017112178e8d5056d09f186f4b44e1fa676c984f1cb84e","impliedFormat":1},{"version":"5617b31769e0275c6f93a14e14774398152d6d03cc8e40e8c821051ef270340e","impliedFormat":1},{"version":"60f19b2df1ca4df468fae1bf70df3c92579b99241e2e92bc6552dfb9d690b440","impliedFormat":1},{"version":"52cac457332357a1e9ea0d5c6e910b867ca1801b31e3463b1dcbaa0d939c4775","impliedFormat":1},{"version":"cf08008f1a9e30cd2f8a73bc1e362cad4c123bd827058f5dffed978b1aa41885","impliedFormat":1},{"version":"582bf54f4a355529a69c3bb4e995697ff5d9e7f36acfddba454f69487b028c66","impliedFormat":1},{"version":"d342554d650b595f2e64cb71e179b7b6112823b5b82fbadf30941be62f7a3e61","impliedFormat":1},{"version":"f7bfc25261dd1b50f2a1301fc68e180ac42a285da188868e6745b5c9f4ca7c8a","impliedFormat":1},{"version":"61d841329328554af2cfa378a3e8490712de88818f8580bde81f62d9b9c4bf67","impliedFormat":1},{"version":"be76374981d71d960c34053c73d618cad540b144b379a462a660ff8fbc81eabe","impliedFormat":1},{"version":"8d9629610c997948d3cfe823e8e74822123a4ef73f4ceda9d1e00452b9b6bbf3","impliedFormat":1},{"version":"0c15ca71d3f3f34ebf6027cf68c8d8acae7e578bb6cc7c70de90d940340bf9bd","impliedFormat":1},{"version":"e5d0a608dca46a22288adac256ec7404b22b6b63514a38acab459bf633e258e0","impliedFormat":1},{"version":"c6660b6ccec7356778f18045f64d88068959ec601230bab39d2ad8b310655f99","impliedFormat":1},{"version":"aaca412f82da34fb0fd6751cea6bbf415401f6bb4aed46416593f7fcfaf32cb5","impliedFormat":1},{"version":"5e283ec6c1867adf73635f1c05e89ee3883ba1c45d2d6b50e39076e0b27f7cd9","impliedFormat":1},{"version":"2712654a78ad0736783e46e97ce91210470b701c916a932d2018a22054ee9751","impliedFormat":1},{"version":"347872376770cb6222066957f9b1ab45083552d415687f92c8b91cb246fd5268","impliedFormat":1},{"version":"24ecb13ea03a8baa20da7df564b4ba48505b396cd746cd0fe64b1f891574a0c9","impliedFormat":1},{"version":"1ded976e25a882defb5c44c3cf0d86f6157aadc85ff86b3f1d6b0796d842e861","impliedFormat":1},{"version":"c15bc8c0b0d3c15dec944d1f8171f6db924cc63bc42a32bc67fbde04cf783b5f","impliedFormat":1},{"version":"5b0c4c470bd3189ea2421901b27a7447c755879ba2fd617ab96feefa2b854ba5","impliedFormat":1},{"version":"08299cc986c8199aeb9916f023c0f9e80c2b1360a3ab64634291f6ff2a6837b1","impliedFormat":1},{"version":"1c49adea5ebea9fbf8e9b28b71e5b5420bf27fee4bf2f30db6dfa980fdad8b07","impliedFormat":1},{"version":"24a741caee10040806ab1ad7cf007531464f22f6697260c19d54ea14a4b3b244","impliedFormat":1},{"version":"b08dfe9e6da10dd03e81829f099ae983095f77c0b6d07ffdd4e0eaf3887af17e","impliedFormat":1},{"version":"40bd28334947aab91205e557963d02c371c02dc76a03967c04ae8451c3702344","impliedFormat":1},{"version":"62e9943dc2f067bda73b19fe8bcf20b81459b489b4f0158170dd9f3b38c68d30","impliedFormat":1},{"version":"267c58ef692839390c97bbb578bdd64f8a162760b4afbd3f73eacacf77d6ea6e","impliedFormat":1},{"version":"6d2496f03c865b5883deee9deda63b98d41f26d60b925204044cd4b78f0f8596","impliedFormat":1},{"version":"02988c4a472902b6ec5cb00809ef193c8a81ffde90b1759dfc34eb18674e0b02","impliedFormat":1},{"version":"7b2b386bb8e6842a4406164027fb53ab4bfef3fbc0eca440f741555dc212d0e8","impliedFormat":1},{"version":"35d669220fc1b97204dc5675e124932294d45b021feb425a9aa16888df44716d","impliedFormat":1},{"version":"bb7b865996627537dbaba9f2fd2f4195003370b02022937cd9eb57c0a0e461d0","impliedFormat":1},{"version":"28a2b8c6566e5a25119829e96a0ac0f0720df78ff55553f1a7529fbce5a87749","impliedFormat":1},{"version":"a1bb9a53774db78ea94042f996663ccac2ba1a1f695dd3e9931ff8ee898cbd06","impliedFormat":1},{"version":"0875537e7be2600acd9e872204840dcfadcc1fe4092a08bd0172a1b766019513","impliedFormat":1},{"version":"4227776f77e27c7d441fd5b8777d16b527928a7b62a0ef86ab8b9c67014cb81c","impliedFormat":1},{"version":"fbf3b2da9b15b5636cbc84578e26ce32e09ddbbac273d1af0313134858ada13e","impliedFormat":1},{"version":"af6f476584c7f0cc7840d26bd53b8f2cb2d297fdfbbce545f054f6098c156760","impliedFormat":1},{"version":"e0dcee233f86aa9a287c8e5021568a9d141faf5f312f348742d77e0a3e57e57d","impliedFormat":1},{"version":"feb50e2e786d7ffebe305337c5fcfe0a8cb2e9eb86542eafffaaf765526075c3","impliedFormat":1},{"version":"154c7aa0bb4266ec1ba8cbc132a6d6f4f5a501c6f557e42fab1551f12d7aadb4","impliedFormat":1},{"version":"ff580bb5932bafb0e88770659100ebb12da80897ed6cc7ffbdf3687048e46555","impliedFormat":1},{"version":"ef2c75a07f97f5214fb2da7bf59bbe82cbaeb6b9cc081e39b674aed5ebdf7905","impliedFormat":1},{"version":"d0c05fadcba345577656a05bf79d4b39a1f00acf76f22c8e4cf18ff30467750e","impliedFormat":1},{"version":"d0c05fadcba345577656a05bf79d4b39a1f00acf76f22c8e4cf18ff30467750e","impliedFormat":1},{"version":"7014093354b80dd4a938ea58d26de184454c4a08bd0500ae00e80eb9a4c19739","impliedFormat":1},{"version":"d06d271d2c714876d2e99a3e91426ed486ef86e92a46d7bd6183bd7849495162","impliedFormat":1},{"version":"da0fb569b713681bfa283495f9f53de3da5a0934fd1794baa99d83686f0eb243","impliedFormat":1},{"version":"1af351fa79e3f56d6ad665ffcd9c19e13d66a76e6d87e1889047729411c34105","impliedFormat":1},{"version":"97b738457d2e1311435022a93b7fa0105d54d3cab2a9557da6df6c3578b9cbdb","impliedFormat":1},{"version":"4cd82c54df6351d625a16e533463ed589155ca392257d5d5d29908be9f6c6ab0","impliedFormat":1},{"version":"c1a3b064d216c0d2503265a68444cd07638b9894575ebcd28fb3ed87ef401641","impliedFormat":1},{"version":"11ddb81d72d7c1e9b70bdec8d887f5d6737c78448477f34b0e66b9d38c5fe960","impliedFormat":1},{"version":"7f2db8b69950287573e65133460d6d0c55afcf99d415f18b00024bd5f55c4941","impliedFormat":1},{"version":"f279cd82f0d7a8c257e9750beafdd375085419733539e6d5ede1ab242de8957f","impliedFormat":1},{"version":"3bd004b8e866ef11ced618495781fd2c936a2a5989927137bdebb3e4755741fd","impliedFormat":1},{"version":"6d34100e5393cbee1869db0f370436d583045f3120c85c7c20bf52377ab6d548","impliedFormat":1},{"version":"92d7ba36531ea86b2be88729546129e1a1d08e571d9d389b859f0867cf26432a","impliedFormat":1},{"version":"f3a6050138891f2cdfdeacf7f0da8da64afc3f2fc834668daf4c0b53425876fb","impliedFormat":1},{"version":"9f260829b83fa9bce26e1a5d3cbb87eef87d8b3db3e298e4ea411a4a0e54f1f5","impliedFormat":1},{"version":"1c23a5cd8c1e82ded17793c8610ca7743344600290cedaf6b387d3518226455b","impliedFormat":1},{"version":"152d05b7e36aac1557821d5e60905bff014fcfe9750911b9cf9c2945cac3df8d","impliedFormat":1},{"version":"6670f4292fc616f2e38c425a5d65d92afc9fb1de51ea391825fa6d173315299a","impliedFormat":1},{"version":"c61a39a1539862fbd48212ba355b5b7f8fe879117fd57db0086a5cbb6acc6285","impliedFormat":1},{"version":"ae9d88113c68896d77b2b51a9912664633887943b465cd80c4153a38267bf70b","impliedFormat":1},{"version":"5d2c41dad1cb904e5f7ae24b796148a08c28ce2d848146d1cdf3a3a8278e35b8","impliedFormat":1},{"version":"b900fa4a5ff019d04e6b779aef9275a26b05794cf060e7d663c0ba7365c2f8db","impliedFormat":1},{"version":"5b7afd1734a1afc68b97cc4649e0eb8d8e45ee3b0ccb4b6f0060592070d05b6d","impliedFormat":1},{"version":"0c83c39f23d669bcb3446ce179a3ba70942b95ef53f7ba4ce497468714b38b8c","impliedFormat":1},{"version":"e9113e322bd102340f125a23a26d1ccf412f55390ae2d6f8170e2e602e2ae61b","impliedFormat":1},{"version":"456308ee785a3c069ec42836d58681fe5897d7a4552576311dd0c34923c883be","impliedFormat":1},{"version":"31e7a65d3e792f2d79a15b60b659806151d6b78eb49cb5fc716c1e338eb819b5","impliedFormat":1},{"version":"a9902721e542fd2f4f58490f228efdad02ebafa732f61e27bb322dbd3c3a5add","impliedFormat":1},{"version":"6e846536a0747aa1e5db6eafec2b3f80f589df21eea932c87297b03e9979d4bf","impliedFormat":1},{"version":"8bd87605aca1cb62caeca63fa442590d4fc14173aa27316ff522f1db984c5d37","impliedFormat":1},{"version":"0ecce2ac996dc29c06ed8e455e9b5c4c7535c177dbfa6137532770d44f975953","impliedFormat":1},{"version":"e2ddd4c484b5c1a1072540b5378b8f8dd8a456b4f2fdd577b0e4a359a09f1a5a","impliedFormat":1},{"version":"db335cb8d7e7390f1d6f2c4ca03f4d2adc7fc6a7537548821948394482e60304","impliedFormat":1},{"version":"b8beb2b272c7b4ee9da75c23065126b8c89d764f8edc3406a8578e6e5b4583b2","impliedFormat":1},{"version":"71e50d029b1100c9f91801f39fd02d32e7e2d63c7961ecb53ed17548d73c150f","impliedFormat":1},{"version":"9af2013e20b53a733dd8052aa05d430d8c7e0c0a5d821a4f4be2d4b672ec22ae","impliedFormat":1},{"version":"8fbe1bc4365212d10f188649f6f8cc17afb5bb3ff12336eb1a9bd5f966d23ad2","impliedFormat":1},{"version":"8fbe1bc4365212d10f188649f6f8cc17afb5bb3ff12336eb1a9bd5f966d23ad2","impliedFormat":1},{"version":"7c2ad9924e9d856fbefbe4ada292bfbf8ffa9b75c419934ad54c7480ef974255","impliedFormat":1},{"version":"7c2ad9924e9d856fbefbe4ada292bfbf8ffa9b75c419934ad54c7480ef974255","impliedFormat":1},{"version":"8033abdbffc86e6d598c589e440ab1e941c2edf53da8e18b84a2bef8769f0f31","impliedFormat":1},{"version":"e88eb1d18b59684cd8261aa4cdef847d739192e46eab8ea05de4e59038401a19","impliedFormat":1},{"version":"834c394b6fdac7cdfe925443170ecdc2c7336ba5323aa38a67aaaf0b3fd8c303","impliedFormat":1},{"version":"831124f3dd3968ebd5fac3ede3c087279acb5c287f808767c3478035b63d8870","impliedFormat":1},{"version":"21d06468c64dba97ef6ee1ccffb718408164b0685d1bff5e4aadd61fcc038655","impliedFormat":1},{"version":"967e26dd598db7de16c9e0533126e624da94bd6c883fd48fbccc92c86e1163c5","impliedFormat":1},{"version":"e2bb71f5110046586149930b330c56f2e1057df69602f8051e11475e9e0adcb0","impliedFormat":1},{"version":"54d718265b1257a8fa8ebf8abe89f899e9a7ae55c2bbeb3fbe93a9ee63c27c08","impliedFormat":1},{"version":"52d09b2ffcfe8a291d70dd6ec8c301e75aff365b891241e5df9943a5bd2cd579","impliedFormat":1},{"version":"c4c282bd73a1a8944112ec3501b7aed380a17a1e950955bb7e67f3ef2ae3eacd","impliedFormat":1},{"version":"b68bffb8ec0c31f104751b7783ea3fca54a27e5562dc6a36467a59af2b9f45d0","impliedFormat":1},{"version":"5f5befc12e7070c00db287c98ebff95b1978d57c94e5eb7f1dc2cdc4351a132a","impliedFormat":1},{"version":"a1fb885801e6a1b76618c7db3dd88d547d696c34b54afb37c6188fdc5c552495","impliedFormat":1},{"version":"d72c555ebec376d349d016576506f1dc171a136206fe75ef8ee36efe0671d5c3","impliedFormat":1},{"version":"e48eda19a17d77b15d627b032d2c82c16dbe7a8714ea7a136919c6fd187a87e9","impliedFormat":1},{"version":"64f38f3e656034d61f6617bff57f6fce983d33b96017a6b1d7c13f310f12a949","impliedFormat":1},{"version":"044028281a4a777b67073a9226b3a3a5f6720083bb7b7bab8b0eeafe70ccf569","impliedFormat":1},{"version":"0dac330041ba1c056fe7bacd7912de9aebec6e3926ff482195b848c4cef64f1c","impliedFormat":1},{"version":"302de1a362e9241903e4ebf78f09133bc064ee3c080a4eda399f6586644dab87","impliedFormat":1},{"version":"940851ac1f3de81e46ea0e643fc8f8401d0d8e7f37ea94c0301bb6d4d9c88b58","impliedFormat":1},{"version":"afab51b01220571ecff8e1cb07f1922d2f6007bfa9e79dc6d2d8eea21e808629","impliedFormat":1},{"version":"0a22b9a7f9417349f39e9b75fb1e1442a4545f4ed51835c554ac025c4230ac95","impliedFormat":1},{"version":"11b8a00dbb655b33666ed4718a504a8c2bf6e86a37573717529eb2c3c9b913ad","impliedFormat":1},{"version":"c4f529f3b69dfcec1eed08479d7aa2b5e82d4ab6665daa78ada044a4a36638c2","impliedFormat":1},{"version":"56fb9431fdb234f604d6429889d99e1fec1c9b74f69b1e42a9485399fd8e9c68","impliedFormat":1},{"version":"1abfd55d146ec3bfa839ccba089245660f30b685b4fdfd464d2e17e9372f3edc","impliedFormat":1},{"version":"5ea23729bee3c921c25cd99589c8df1f88768cfaf47d6d850556cf20ec5afca8","impliedFormat":1},{"version":"0def6b14343fb4659d86c60d8edb412094d176c9730dc8491ce4adabdbe6703a","impliedFormat":1},{"version":"7871d8a4808eab42ceb28bc7edefa2052da07c5c82124fb8e98e3b2c0b483d6c","impliedFormat":1},{"version":"f7e0da46977f2f044ec06fd0089d2537ff44ceb204f687800741547056b2752f","impliedFormat":1},{"version":"586e954d44d5c634998586b9d822f96310321ee971219416227fc4269ea1cdaf","impliedFormat":1},{"version":"33a7a07bc3b4c26441fa544f84403b1321579293d6950070e7daeee0ed0699d8","impliedFormat":1},{"version":"4d000e850d001c9e0616fd8e7cc6968d94171d41267c703bd413619f649bd12a","impliedFormat":1},{"version":"a2d30f0ed971676999c2c69f9f7178965ecbe5c891f6f05bc9cbcd9246eda025","impliedFormat":1},{"version":"f94f93ce2edf775e2eeb43bc62c755f65fb15a404c0507936cc4a64c2a9b2244","impliedFormat":1},{"version":"b4275488913e1befb217560d484ca3f3bf12903a46ade488f3947e0848003473","impliedFormat":1},{"version":"b173f8a2bd54cee0ae0d63a42ca59a2150dce59c828649fc6434178b0905bc05","impliedFormat":1},{"version":"613afe0af900bad8ecb48d9d9f97f47c0759aaebd7975aab74591f5fe30cf887","impliedFormat":1},{"version":"7c43dd250932457013546c3d0ed6270bfe4b9d2800c9a52ad32ece15fc834ef4","impliedFormat":1},{"version":"d0875863f16a9c18b75ef7eab23a1cf93c2c36677c9bb450307b1fa5b7521746","impliedFormat":1},{"version":"37154c245da711d32d653ad43888aac64c93d6f32a8392b0d4635d38dd852e57","impliedFormat":1},{"version":"9be1d0f32a53f6979f12bf7d2b6032e4c55e21fdfb0d03cb58ba7986001187c1","impliedFormat":1},{"version":"6575f516755b10eb5ff65a5c125ab993c2d328e31a9af8bb2de739b180f1dabc","impliedFormat":1},{"version":"5580c4cc99b4fc0485694e0c2ffc3eddfb32b29a9d64bba2ba4ad258f29866bc","impliedFormat":1},{"version":"3217967a9d3d1e4762a2680891978415ee527f9b8ee3325941f979a06f80cd7b","impliedFormat":1},{"version":"430c5818b89acea539e1006499ed5250475fdda473305828a4bb950ada68b8bd","impliedFormat":1},{"version":"a8e3230eab879c9e34f9b8adee0acec5e169ea6e6332bc3c7a0355a65fbf6317","impliedFormat":1},{"version":"62563289e50fd9b9cf4f8d5c8a4a3239b826add45cfb0c90445b94b8ca8a8e46","impliedFormat":1},{"version":"e1f6516caf86d48fd690663b0fd5df8cf3adf232b07be61b4d1c5ba706260a56","impliedFormat":1},{"version":"c5fd755dac77788acc74a11934f225711e49014dd749f1786b812e3e40864072","impliedFormat":1},{"version":"672ed5d0ebc1e6a76437a0b3726cb8c3f9dd8885d8a47f0789e99025cfb5480d","impliedFormat":1},{"version":"e15305776c9a6d9aac03f8e678008f9f1b9cb3828a8fc51e6529d94df35f5f54","impliedFormat":1},{"version":"4da18bcf08c7b05b5266b2e1a2ac67a3b8223d73c12ee94cfa8dd5adf5fdcd5e","impliedFormat":1},{"version":"a4e14c24595a343a04635aff2e39572e46ae1df9b948cc84554730a22f3fc7a3","impliedFormat":1},{"version":"0f604aef146af876c69714386156b8071cdb831cb380811ed6749f0b456026bd","impliedFormat":1},{"version":"4868c0fb6c030a7533deb8819c9351a1201b146a046b2b1f5e50a136e5e35667","impliedFormat":1},{"version":"8a1cfeb14ca88225a95d8638ee58f357fc97b803fe12d10c8b52d07387103ff1","impliedFormat":1},{"version":"fac0f34a32af6ff4d4e96cd425e8fefb0c65339c4cb24022b27eb5f13377531f","impliedFormat":1},{"version":"7ec5a106f7a6de5a44eac318bb47cdece896e37b69650dd9e394b18132281714","impliedFormat":1},{"version":"a015f74e916643f2fd9fa41829dea6d8a7bedbb740fe2e567a210f216ac4dcad","impliedFormat":1},{"version":"4dbabbde1b07ee303db99222ef778a6c2af8362bc5ce185996c4dc91cba6b197","impliedFormat":1},{"version":"0873baae7b37627c77a36f8ead0ab3eb950848023c9e8a60318f4de659e04d54","impliedFormat":1},{"version":"dc7d167f4582a21e20ac5979cb0a9f58a0541d468b406fd22c739b92cd9f5eec","impliedFormat":1},{"version":"edeec378c31a644e8fa29cfcb90f3434a20db6e13ae65df8298163163865186f","impliedFormat":1},{"version":"12300e3a7ca6c3a71773c5299e0bca92e2e116517ab335ab8e82837260a04db7","impliedFormat":1},{"version":"2e6128893be82a1cbe26798df48fcfb050d94c9879d0a9c2edece4be23f99d9f","impliedFormat":1},{"version":"2819f355f57307c7e5a4d89715156750712ea15badcb9fbf6844c9151282a2b8","impliedFormat":1},{"version":"4e433094ed847239c14ae88ca6ddaa6067cb36d3e95edd3626cec09e809abc3b","impliedFormat":1},{"version":"7c592f0856a59c78dbfa856c8c98ba082f4dafb9f9e8cdd4aac16c0b608aaacd","impliedFormat":1},{"version":"9fb90c7b900cee6a576f1a1d20b2ef0ed222d76370bc74c1de41ea090224d05d","impliedFormat":1},{"version":"c94cfa7c0933700be94c2e0da753c6d0cf60569e30d434c3d0df4a279df7a470","impliedFormat":1},{"version":"b208e4729b03a250bc017f1231a27776db6e5396104c4a5cfe40a8de4d3ab33e","impliedFormat":1},{"version":"b208e4729b03a250bc017f1231a27776db6e5396104c4a5cfe40a8de4d3ab33e","impliedFormat":1},{"version":"83624214a41f105a6dd1fef1e8ebfcd2780dd2841ce37b84d36d6ae304cba74e","impliedFormat":1},{"version":"bc63f711ce6d1745bb9737e55093128f8012d67a9735c958aaaf1945225c4f1d","impliedFormat":1},{"version":"951404d7300f1a479a7e70bca4469ea5f90807db9d3adc293b57742b3c692173","impliedFormat":1},{"version":"e93bba957a27b85afb83b2387e03a0d8b237c02c85209fde7d807c2496f20d41","impliedFormat":1},{"version":"4537c199f28f3cd75ab9d57b21858267c201e48a90009484ef37e9321b9c8dbb","impliedFormat":1},{"version":"faae84acef05342e6009f3fa68a2e58e538ef668c7173d0fc2eacac0ad56beef","impliedFormat":1},{"version":"7e19092d64b042f55f4d7b057629159a8167ee319d4cccc4b4bdd12d74018a6c","impliedFormat":1},{"version":"39196b72ec09bdc29508c8f29705ce8bd9787117863ca1bcf015a628bed0f031","impliedFormat":1},{"version":"3f727217522dabc9aee8e9b08fccf9d67f65a85f8231c0a8dbcc66cf4c4f3b8d","impliedFormat":1},{"version":"bbeb72612b2d3014ce99b3601313b2e1a1f5e3ce7fdcd8a4b68ff728e047ffcd","impliedFormat":1},{"version":"c89cc13bad706b67c7ca6fca7b0bb88c7c6fa3bd014732f8fc9faa7096a3fad8","impliedFormat":1},{"version":"2272a72f13a836d0d6290f88759078ec25c535ec664e5dabc33d3557c1587335","impliedFormat":1},{"version":"1074e128c62c48b5b1801d1a9aeebac6f34df7eafa66e876486fbb40a919f31a","impliedFormat":1},{"version":"87bba2e1de16d3acb02070b54f13af1cb8b7e082e02bdfe716cb9b167e99383b","impliedFormat":1},{"version":"a2e3a26679c100fb4621248defda6b5ce2da72943da9afefccaf8c24c912c1cb","impliedFormat":1},{"version":"3ee7668b22592cc98820c0cf48ad7de48c2ad99255addb4e7d735af455e80b47","impliedFormat":1},{"version":"643e9615c85c77bc5110f34c9b8d88bce6f27c54963f3724ab3051e403026d05","impliedFormat":1},{"version":"35c13baa8f1f22894c1599f1b2b509bdeb35f7d4da12619b838d79c6f72564bb","impliedFormat":1},{"version":"7d001913c9bf95dbdc0d4a14ffacf796dbc6405794938fc2658a79a363f43f65","impliedFormat":1},{"version":"9906fbdb7d8e18b0105f61569701a07c8aaa7ea0ef6dc63f8f9fbba7de8e044e","impliedFormat":1},{"version":"9906fbdb7d8e18b0105f61569701a07c8aaa7ea0ef6dc63f8f9fbba7de8e044e","impliedFormat":1},{"version":"6a0840f6ab3f97f9348098b3946941a7ca67beb47a6f2a75417376015bde3d62","impliedFormat":1},{"version":"24c75bd8d8ba4660a4026b89abc5457037ed709759ca1e9e26bd68c610817069","impliedFormat":1},{"version":"8cc6185d8186c7fefa97462c6dd9915df9a9542bd97f220b564b3400cdf3ad82","impliedFormat":1},{"version":"2cad19f3eae8e3a9176bf34b9cffa640d55a3c73b69c78b0b80808130d5120c6","impliedFormat":1},{"version":"a140d8799bc197466ac82feef5a8f1f074efc1bb5f02c514200269601279a6ff","impliedFormat":1},{"version":"48bda2797d1005604d21de42a41af85dfe7688391d28f02b90c90c06f6604781","impliedFormat":1},{"version":"1454f42954c53c719ae3f166a71c2a8c4fbc95ee8a5c9ddba3ec15b792054a3d","impliedFormat":1},{"version":"ae4890722031fcaa66eed85d5ce06f0fc795f21dedbe4c7c53f777c79caf01dd","impliedFormat":1},{"version":"1a6ff336c6c59fa7b44cf01dc0db00baa1592d7280be70932110fe173c3a3ed6","impliedFormat":1},{"version":"95fa82863f56a7b924814921beeab97aa064d9e2c6547eb87492a3495533be0f","impliedFormat":1},{"version":"248cdafd23df89eee20f1ef00daef4f508850cfcbad9db399b64cdb1c3530c06","impliedFormat":1},{"version":"936579eb15fe5cf878d90bddaf083a5dce9e8ca7d2222c2d96a2e55b8022e562","impliedFormat":1},{"version":"1bd19890e78429873f6eb45f6bd3b802743120c2464b717462ec4c9668ce7b89","impliedFormat":1},{"version":"756c0802bc098388018b4f245a15457083aee847ebcd89beb545d58ccbf29a9f","impliedFormat":1},{"version":"8e00226014fc83b74b47868bfac6919b2ca51e1dc612ea3f396a581ba7da8fdd","impliedFormat":1},{"version":"27930087468a6afd3d42fd75c37d8cc7df6a695f3182eb6230fcea02fce46635","impliedFormat":1},{"version":"b6d0a876f84484d9087e8eadde589e25b3f1975d32a11d188f6da0bc5dcf1d1d","impliedFormat":1},{"version":"5a282b327e397cf1637717c454d71f5dff2af2514d7f3766562bd51721d5eaab","impliedFormat":1},{"version":"fba971f62ec18b0de02357aba23b11c19aeb512eb525b9867f6cc2495d3a9403","impliedFormat":1},{"version":"69334948e4bc7c2b5516ed02225eaf645c6d97d1c636b1ef6b7c9cfc3d3df230","impliedFormat":1},{"version":"4231544515c7ce9251e34db9d0e3f74fc38365e635c8f246f2d8b39461093dea","impliedFormat":1},{"version":"963d469b265ce3069e9b91c6807b4132c1e1d214169cf1b43c26bfbcb829b666","impliedFormat":1},{"version":"387616651414051e1dd73daf82d6106bbaefcbad21867f43628bd7cbe498992f","impliedFormat":1},{"version":"f3b6f646291c8ddfc232209a44310df6b4f2c345c7a847107b1b8bbde3d0060a","impliedFormat":1},{"version":"8fbbfbd7d5617c6f6306ffb94a1d48ca6fa2e8108c759329830c63ff051320e1","impliedFormat":1},{"version":"9912be1b33a6dfc3e1aaa3ad5460ee63a71262713f1629a86c9858470f94967d","impliedFormat":1},{"version":"57c32282724655f62bff2f182ce90934d83dc7ed14b4ac3f17081873d49ec15b","impliedFormat":1},{"version":"fabb2dcbe4a45ca45247dece4f024b954e2e1aada1b6ba4297d7465fac5f7fb3","impliedFormat":1},{"version":"449fa612f2861c3db22e394d1ad33a9544fe725326e09ec1c72a4d9e0a85ccf1","impliedFormat":1},{"version":"5e80786f1a47a61be5afde06ebd2eae0d1f980a069d34cea2519f41e518b31e8","impliedFormat":1},{"version":"565fbcf5374afdcb53e1bf48a4dd72db5c201551ec1cdf408aab9943fec4f525","impliedFormat":1},{"version":"8334934b3c4b83da15be9025d15b61fdada52adfb6b3c81e24bf61e33e4a8f56","impliedFormat":1},{"version":"0bf7ddc236561ac7e5dcd04bcbb9ac34ea66d1e54542f349dc027c08de120504","impliedFormat":1},{"version":"329b4b6fb23f225306f6a64f0af065bc7d5858024b2b04f46b482d238abe01ef","impliedFormat":1},{"version":"c70a7411a384063543b9703d072d38cfec64c54d9bdcc0916a24fcb7945907c3","impliedFormat":1},{"version":"d74eccab1a21737b12e17a94bacff23954496ccad820ee1bd4769353825ea1f0","impliedFormat":1},{"version":"5a169268ac5488e3555a333964a538ce27a8702b91fffa7f2f900b67bf943352","impliedFormat":1},{"version":"85931e79bdd6b16953de2303cebbe16ba1d66375f302ffe6c85b1630c64d4751","impliedFormat":1},{"version":"ad9da00aa581dca2f09a6fec43f0d03eff7801c0c3496613d0eb1d752abf44d9","impliedFormat":1},{"version":"28ea9e12e665d059b80a8f5424e53aa0dd8af739da7f751cc885f30440b64a7f","impliedFormat":1},{"version":"cdc22634df9ab0cd1e1ab5a32e382d034bba97afd7c12db7862b9079e5e3c4c0","impliedFormat":1},{"version":"73940b704df78d02da631af2f5f253222821da6482c21cd96f64e90141b34d38","impliedFormat":1},{"version":"76e64c191fe381ecbbb91a3132eaf16b54e33144aee0e00728d4f8ba9d3be3c1","impliedFormat":1},{"version":"de49fed066a921f1897ca031e5a3d3c754663b9a877b01362cc08fb6a250a8b6","impliedFormat":1},{"version":"833b691a43b7b18f4251fdb305babad29234dd6c228cf5b931118301c922283d","impliedFormat":1},{"version":"a5f925f6ad83aa535869fb4174e7ef99c465e5c01939d2e393b6f8c0def6d95e","impliedFormat":1},{"version":"db80344e9c5463e4fb49c496b05e313b3ebcc1b9c24e9bcd97f3e34429530302","impliedFormat":1},{"version":"f69e0962918f4391e8e5e50a1b3eb1e3fd40f63ed082da8242b34dda16c519ba","impliedFormat":1},{"version":"012dcd1847240a35fd1de3132d11afab38bb63e99ce1ca2679c2376567f5ef74","impliedFormat":1},{"version":"c4e34c7b331584cd9018fb2d51d602d38cf9f2aeec0bad092b61dd10ff602bd5","impliedFormat":1},{"version":"06675fa918f0abfe5632adbfae821517a34af861cadab135d4240f0b0fd975a5","impliedFormat":1},{"version":"a4919817b89aadcc8fb7121d41c3924a30448d017454cb3d1e3570f8413f74a6","impliedFormat":1},{"version":"2a37bd0673e5f0b487f05880d143883abcbdc9682d0ed54d550eb44e775dab46","impliedFormat":1},{"version":"8ed0765cafa7e4b10224672c29056e8ee4a9936df65ba4ea3ffd841c47aa2393","impliedFormat":1},{"version":"a38694615d4482f8b6556f6b0915374bbf167c3e92e182ae909f5e1046ebbc97","impliedFormat":1},{"version":"a0ff175b270170dd3444ee37fdd71e824b934dcdae77583d4cdea674349f980e","impliedFormat":1},{"version":"99391c62be7c4a7dc23d4a94954973e5f1c1ca0c33fdd8f6bb75c1ddc7ffc3ad","impliedFormat":1},{"version":"ea58d165e86c3e2e27cf07e94175c60d1672810f873e344f7bc85ad4ebe00cef","impliedFormat":1},{"version":"85c8e99f8cd30d3a742c4c0fe5500db8561e0028b8153dc60c3d1e64ef2a507f","impliedFormat":1},{"version":"e272f75b77cffbfbb88ba377d7892d55e49f67378a8ffa7bddce1be53634ca3b","impliedFormat":1},{"version":"67448f432a710a322eac4b9a56fd8145d0033c65206e90fca834d9ed6601a978","impliedFormat":1},{"version":"7a319bad5a59153a92e455bebcfce1c8bc6e6e80f8e6cc3b20dd7465662c9c8e","impliedFormat":1},{"version":"2d7bed8ff2044b202f9bd6c35bf3bda6f8baad9e0f136a9c0f33523252de4388","impliedFormat":1},{"version":"308786774814d57fc58f04109b9300f663cf74bd251567a01dc4d77e04c1cdc1","impliedFormat":1},{"version":"68af14958b6a2faf118853f3ecb5c0dbee770bd1e0eb6c2ef54244b68cecf027","impliedFormat":1},{"version":"1255747e5c6808391a8300476bdb88924b13f32287270084ebd7649737b41a6e","impliedFormat":1},{"version":"37b6feaa304b392841b97c22617b43f9faa1d97a10a3c6d6160ca1ea599d53ce","impliedFormat":1},{"version":"79adb3a92d650c166699bb01a7b02316ea456acc4c0fd6d3a88cdd591f1849b0","impliedFormat":1},{"version":"0dc547b11ab9604c7a2a9ca7bf29521f4018a14605cc39838394b3d4b1fbaf6d","impliedFormat":1},{"version":"31fedd478a3a7f343ee5df78f1135363d004521d8edf88cd91b91d5b57d92319","impliedFormat":1},{"version":"88b7ed7312f01063f327c5d435224e137c6a2f9009175530e7f4b744c1e8957f","impliedFormat":1},{"version":"3cf0c7a66940943decbf30a670ab6077a44e9895e7aea48033110a5b58e86d64","impliedFormat":1},{"version":"11776f5fa09779862e18ff381e4c3cb14432dd188d30d9e347dfc6d0bda757a8","impliedFormat":1},{"version":"a7c12ec0d02212110795c86bd68131c3e771b1a3f4980000ec06753eb652a5c4","impliedFormat":1},{"version":"8d6b33e4d153c1cc264f6d1bb194010221907b83463ad2aaaa936653f18bfc49","impliedFormat":1},{"version":"4e0537c4cd42225517a5cdec0aea71fdaaacbf535c42050011f1b80eda596bbd","impliedFormat":1},{"version":"cf2ada4c8b0e9aa9277bfac0e9d08df0d3d5fb0c0714f931d6cac3a41369ee07","impliedFormat":1},{"version":"3bdbf003167e4dffbb41f00ddca82bb657544bc992ef307ed2c60c322f43e423","impliedFormat":1},{"version":"9d62d820685dfbed3d1da3c5d9707ae629eac65ee42eeae249e6444271a43f79","impliedFormat":1},{"version":"9fc1d71181edb6028002b0757a4de17f505fb538c8b86da2dabb2c58618e9495","impliedFormat":1},{"version":"895c35a7b8bdd940bda4d9c709acfc4dd72d302cc618ec2fd76ae2b8cd9fd534","impliedFormat":1},{"version":"e7eb43e86a2dfcb8a8158b2cc4eff93ff736cfec1f3bf776c2c8fb320b344730","impliedFormat":1},{"version":"7d2f0645903a36fe4f96d547a75ea14863955b8e08511734931bd76f5bbc6466","impliedFormat":1},{"version":"4d88daa298c032f09bc2453facf917d848fcd73b9814b55c7553c3bf0036ac3d","impliedFormat":1},{"version":"7e46cd381a3ac5dbb328d4630db9bf0d76aae653083fc351718efba4bd4bf3b3","impliedFormat":1},{"version":"23cca6a0c124bd1b5864a74b0b2a9ab12130594543593dc58180c5b1873a3d16","impliedFormat":1},{"version":"286c428c74606deaa69e10660c1654b9334842ef9579fbfbb9690c3a3fd3d8c5","impliedFormat":1},{"version":"e838976838d7aa954c3c586cd8efc7f8810ec44623a1de18d6c4f0e1bc58a2b6","impliedFormat":1},{"version":"fe7b3e4b7b62b6f3457f246aa5b26181da0c24dc5fc3a3b4f1e93f66c41d819f","impliedFormat":1},{"version":"ea15abd31f5884334fa04683b322618f1f4526a23f6f77839b446dbeee8eb9a1","impliedFormat":1},{"version":"e55b5d8322642dda29ae2dea9534464e4261cb8aa719fe8cec26ce2d70753db5","impliedFormat":1},{"version":"6074dbe82ec2c1325ecda241075fa8d814e6e5195a6c1f6315aa5a582f8eb4cf","impliedFormat":1},{"version":"c044c7f653a4aff233adfdee4c3d4e05da4fc071dfb6f8f32f5a8cd30e8aacaa","impliedFormat":1},{"version":"2f5f95be086b3c700fe1c0f1b20a5ff18a26a15ae9924b495231555a3bed7f05","impliedFormat":1},{"version":"fb4de4bc74a1997282181648fecd3ec5bb19d39cdb0ff3a4fb8ac134b2e03eb8","impliedFormat":1},{"version":"ada6919a8c3d26712dac8469dbe297980d97258fd7927aa4b4f68d8a0efeb20b","impliedFormat":1},{"version":"b1f2367947cf2dfba2cd6cc0d1ed3c49e55059f4ee0e648590daafecd1b49e63","impliedFormat":1},{"version":"e7aee498fe1438535033fdfe126a12f06874e3608cd77d8710ff9542ebb7ba60","impliedFormat":1},{"version":"0017e3bbd2f7b139daf97c0f27bef8531a6f44572ba9387f5451e417b62ecd55","impliedFormat":1},{"version":"91dda5226ec658c3c71dfb8689231f6bfea4d559d08f27237d0d02f4eb3e4aa6","impliedFormat":1},{"version":"e1e2ee6fc32ea03e5e8b419d430ea236b20f22d393ba01cc9021b157727e1c59","impliedFormat":1},{"version":"8adfd735c00b78c24933596cd64c44072689ac113001445a7c35727cb9717f49","impliedFormat":1},{"version":"999bfcbaae834b8d00121c28de9448c72f24767d3562fc388751a5574c88bd45","impliedFormat":1},{"version":"110a52db87a91246f9097f284329ad1eedd88ff8c34d3260dcb7f4f731955761","impliedFormat":1},{"version":"8929df495a85b4cc158d584946f6a83bf9284572b428bb2147cc1b1f30ee5881","impliedFormat":1},{"version":"22c869750c8452121f92a511ef00898cc02d941109e159a0393a1346348c144a","impliedFormat":1},{"version":"d96e2ff73f69bc352844885f264d1dfc1289b4840d1719057f711afac357d13e","impliedFormat":1},{"version":"a01928da03f46c245f2173ced91efd9a2b3f04a1a34a46bc242442083babaab9","impliedFormat":1},{"version":"c175f6dd4abdfac371b1a0c35ebeaf01c745dffbf3561b3a5ecc968e755a718b","impliedFormat":1},{"version":"d3531db68a46747aee3fa41531926e6c43435b59cd79ccdbcb1697b619726e47","impliedFormat":1},{"version":"c1771980c6bcd097876fe8b78a787e28163008e3d6d46885e9506483ac6b9226","impliedFormat":1},{"version":"8c2cc0d0b9b8650ef75f186f6c3aeeb3c18695e3cd3d0342cf8ef1d6aea27997","impliedFormat":1},{"version":"0a9bcf65e6abc0497fffcb66be835e066533e5623e32262b7620f1091b98776b","impliedFormat":1},{"version":"235a1b88a060bd56a1fc38777e95b5dda9c68ecb42507960ec6999e8a2d159cc","impliedFormat":1},{"version":"dde6b3b63eb35c0d4e7cc8d59a126959a50651855fd753feceab3bbad1e8000a","impliedFormat":1},{"version":"1f80185133b25e1020cc883e6eeadd44abb67780175dc2e21c603b8062a86681","impliedFormat":1},{"version":"f4abdeb3e97536bc85f5a0b1cced295722d6f3fd0ef1dd59762fe8a0d194f602","impliedFormat":1},{"version":"9de5968f7244f12c0f75a105a79813539657df96fb33ea1dafa8d9c573a5001a","impliedFormat":1},{"version":"87ab1102c5f7fe3cffbbe00b9690694cba911699115f29a1e067052bb898155d","impliedFormat":1},{"version":"a5841bf09a0e29fdde1c93b97e9a411ba7c7f9608f0794cbb7cf30c6dcd84000","impliedFormat":1},{"version":"e9282e83efd5ab0937b318b751baac2690fc3a79634e7c034f6c7c4865b635b4","impliedFormat":1},{"version":"7469203511675b1cfb8c377df00c6691f2666afb1a30c0568146a332e3188cb3","impliedFormat":1},{"version":"86854a16385679c4451c12f00774d76e719d083333f474970de51b1fd4aeaa9a","impliedFormat":1},{"version":"eb948bd45504f08e641467880383a9d033221c92d5e5f9057a952bbb688af0f2","impliedFormat":1},{"version":"8ad3462b51ab1a76a049b9161e2343a56a903235a87a7b6fb7ed5df6fc3a7482","impliedFormat":1},{"version":"c5e3f5a8e311c1be603fca2ab0af315bb27b02e53cd42edc81c349ffb7471c7e","impliedFormat":1},{"version":"0785979b4c5059cde6095760bc402d936837cbdeaa2ce891abe42ebcc1be5141","impliedFormat":1},{"version":"224881bef60ae5cd6bcc05b56d7790e057f3f9d9eacf0ecd1b1fc6f02088df70","impliedFormat":1},{"version":"3d336a7e01d9326604b97a23d5461d48b87a6acf129616465e4de829344f3d88","impliedFormat":1},{"version":"27ae5474c2c9b8a160c2179f2ec89d9d7694f073bdfc7d50b32e961ef4464bf0","impliedFormat":1},{"version":"e5772c3a61ac515bdcbb21d8e7db7982327bca088484bf0efdc12d9e114ec4c4","impliedFormat":1},{"version":"37d515e173e580693d0fdb023035c8fb1a95259671af936ea0922397494999f1","impliedFormat":1},{"version":"9b75d00f49e437827beeec0ecd652f0e1f8923ff101c33a0643ce6bed7c71ce1","impliedFormat":1},{"version":"bca71e6fb60fb9b72072a65039a51039ac67ea28fd8ce9ffd3144b074f42e067","impliedFormat":1},{"version":"d9b3329d515ac9c8f3760557a44cbca614ad68ad6cf03995af643438fa6b1faa","impliedFormat":1},{"version":"66492516a8932a548f468705a0063189a406b772317f347e70b92658d891a48d","impliedFormat":1},{"version":"20ecc73297ec37a688d805463c5e9d2e9f107bf6b9a1360d1c44a2b365c0657b","impliedFormat":1},{"version":"8e5805f4aab86c828b7fa15be3820c795c67b26e1a451608a27f3e1a797d2bf0","impliedFormat":1},{"version":"bb841b0b3c3980f91594de12fdc4939bb47f954e501bd8e495b51a1237f269d6","impliedFormat":1},{"version":"c40a182c4231696bd4ea7ed0ce5782fc3d920697866a2d4049cf48a2823195cc","impliedFormat":1},{"version":"c2f1079984820437380eba543febfb3d77e533382cbc8c691e8ec7216c1632ae","impliedFormat":1},{"version":"8737160dbb0d29b3a8ea25529b8eca781885345adb5295aa777b2f0c79f4a43f","impliedFormat":1},{"version":"78c5ee6b2e6838b6cbda03917276dc239c4735761696bf279cea8fc6f57ab9b7","impliedFormat":1},{"version":"11f3e363dd67c504e7ac9c720e0ddee8eebca10212effe75558266b304200954","impliedFormat":1},{"version":"ca53a918dbe8b860e60fec27608a83d6d1db2a460ad13f2ffc583b6628be4c5c","impliedFormat":1},{"version":"b278ba14ce1ea93dd643cd5ad4e49269945e7faf344840ecdf3e5843432dc385","impliedFormat":1},{"version":"f590aedb4ab4a8fa99d5a20d3fce122f71ceb6a6ba42a5703ea57873e0b32b19","impliedFormat":1},{"version":"1b94fcec898a08ad0b7431b4b86742d1a68440fa4bc1cd51c0da5d1faaf8fda4","impliedFormat":1},{"version":"a6ca409cb4a4fb0921805038d02a29c7e6f914913de74ab7dc02604e744820f7","impliedFormat":1},{"version":"9e938bdb31700c1329362e2246192b3cd2fac25a688a2d9e7811d7a65b57cd48","impliedFormat":1},{"version":"22ab05103d6c1b0c7e6fd0d35d0b9561f2931614c67c91ba55e2d60d741af1aa","impliedFormat":1},{"version":"aeebcee8599e95eb96cf15e1b0046024354cc32045f7e6ec03a74dcb235097ec","impliedFormat":1},{"version":"6813230ae8fba431d73a653d3de3ed2dcf3a4b2e965ca529a1d7fefdfd2bfc05","impliedFormat":1},{"version":"2111a7f02e31dd161d7c62537a24ddcbd17b8a8de7a88436cb55cd237a1098b2","impliedFormat":1},{"version":"dcac554319421fbc60da5f4401c4b4849ec0c92260e33a812cd8265a28b66a50","impliedFormat":1},{"version":"69e79a58498dbd57c42bc70c6e6096b782f4c53430e1dc329326da37a83f534d","impliedFormat":1},{"version":"6f327fc6d6ffcf68338708b36a8a2516090e8518542e20bb7217e2227842c851","impliedFormat":1},{"version":"5d770e4cc5df14482c7561e05b953865c2fdd5375c01d9d31e944b911308b13a","impliedFormat":1},{"version":"80ad25f193466f8945f41e0e97b012e1dafe1bd31b98f2d5c6c69a5a97504c75","impliedFormat":1},{"version":"30e75a9da9cd1ff426edcf88a73c6932e0ef26f8cbe61eed608e64e2ec511b6c","impliedFormat":1},{"version":"9ee91f8325ece4840e74d01b0f0e24a4c9b9ec90eeca698a6884b73c0151aa11","impliedFormat":1},{"version":"7c3d6e13ac7868d6ff1641406e535fde89ebef163f0c1237c5be21e705ed4a92","impliedFormat":1},{"version":"13f2f82a4570688610db179b0d178f1a038b17403b3a8c80eaa89dbdc74ddfd6","impliedFormat":1},{"version":"f805bae240625c8af6d84ac0b9e3cf43c5a3574c632e48a990bcec6de75234fb","impliedFormat":1},{"version":"fa3ce6af18df2e1d3adca877a3fe814393917b2f59452a405028d3c008726393","impliedFormat":1},{"version":"274b8ce7763b1a086a8821b68a82587f2cb1e08020920ae9ec8e28db0a88cd24","impliedFormat":1},{"version":"ea5e168745ac57b4ee29d953a42dc8252d3644ad3b6dab9d2f0c556f93ce05b4","impliedFormat":1},{"version":"830020b6fe24d742c1c3951e09b8b10401a0e753b5e659a3cbdea7f1348daeac","impliedFormat":1},{"version":"b1f68144e6659b378f0e02218f3bd8dfa71311c2e27814ab176365ed104d445a","impliedFormat":1},{"version":"a7a375e4436286bc6e68ce61d680ffeb431dc87f951f6c175547308d24d9d7ab","impliedFormat":1},{"version":"e41845dbc0909b2f555e7bcb1ebc55321982c446d58264485ca87e71bf7704a8","impliedFormat":1},{"version":"546291fd95c3a93e1fc0acd24350c95430d842898fc838d8df9ba40fdc653d6a","impliedFormat":1},{"version":"a6e898c90498c82f5d4fd59740cb6eb64412b39e12ffeca57851c44fa7700ed4","impliedFormat":1},{"version":"c8fb0d7a81dac8e68673279a3879bee6059bf667941694de802c06695f3a62a9","impliedFormat":1},{"version":"0a0a0bf13b17a7418578abea1ddb82bf83406f6e5e24f4f74b4ffbab9582321f","impliedFormat":1},{"version":"c4ea3ac40fbbd06739e8b681c45a4d40eb291c46407c04d17a375c4f4b99d72c","impliedFormat":1},{"version":"0f65b5f6688a530d965a8822609e3927e69e17d053c875c8b2ff2aecc3cd3bf6","impliedFormat":1},{"version":"443e39ba1fa1206345a8b5d0c41decfe703b7cdab02c52b220d1d3d8d675be6f","impliedFormat":1},{"version":"eaf7a238913b3f959db67fe7b3ea76cd1f2eedc5120c3ba45af8c76c5a3b70ad","impliedFormat":1},{"version":"8638625d1375bbb588f97a830684980b7b103d953c28efffa01bd5b1b5f775d2","impliedFormat":1},{"version":"ee77e7073de8ddc79acf0a3e8c1a1c4f6c3d11164e19eb725fa353ce936a93b0","impliedFormat":1},{"version":"ac39c31661d41f20ca8ef9c831c6962dc8bccbfca8ad4793325637c6f69207a3","impliedFormat":1},{"version":"80d98332b76035499ccce75a1526adcf4a9d455219f33f4b5a2e074e18f343fe","impliedFormat":1},{"version":"0490b6e27352ca7187944d738400e1e0ccb8ad8cc2fb6a939980cec527f4a3f9","impliedFormat":1},{"version":"7759aad02ab8c1499f2b689b9df97c08a33da2cb5001fbf6aed790aa41606f48","impliedFormat":1},{"version":"cb3c2b54a3eb8364f9078cfbe5a3340fa582b14965266c84336ab83fa933f3c7","impliedFormat":1},{"version":"7bc5668328a4a22c3824974628d76957332e653f42928354e5ac95f4cd00664d","impliedFormat":1},{"version":"b1905e68299346cc9ea9d156efb298d85cdb31a74cef5dbb39fda0ba677d8cfc","impliedFormat":1},{"version":"3ab80817857677b976b89c91cd700738fc623f5d0c800c5e1d08f21ac2a61f2a","impliedFormat":1},{"version":"cab9fb386ad8f6b439d1e125653e9113f82646712d5ba5b1b9fd1424aa31650c","impliedFormat":1},{"version":"20af956da2baefb99392218a474114007f8f6763f235ae7c6aae129e7d009cb6","impliedFormat":1},{"version":"6bfc9175ea3ade8c3dce6796456f106eb6ddc6ac446c41a71534a4cdce92777a","impliedFormat":1},{"version":"c8290d0b597260fd0e55016690b70823501170e8db01991785a43d7e1e18435f","impliedFormat":1},{"version":"002dfb1c48a9aa8de9d2cbe4d0b74edd85b9e0c1b77c865dcfcacd734c47dd40","impliedFormat":1},{"version":"17638e7a71f068c258a1502bd2c62cd6562e773c9c8649be283d924dc5d3bada","impliedFormat":1},{"version":"4b5e02a4d0b8f5ab0e81927c23b3533778000d6f8dfe0c2d23f93b55f0dcf62e","impliedFormat":1},{"version":"7bcdcafce502819733dc4e9fbbd97b2e392c29ae058bd44273941966314e46b1","impliedFormat":1},{"version":"39fefe9a886121c86979946858e5d28e801245c58f64f2ae4b79c01ffe858664","impliedFormat":1},{"version":"e68ec97e9e9340128260e57ef7d0d876a6b42d8873bfa1500ddead2bef28c71a","impliedFormat":1},{"version":"b944068d6efd24f3e064d341c63161297dc7a6ebe71fd033144891370b664e6d","impliedFormat":1},{"version":"9aee6c3a933af38de188f46937bdc5f875e10b016136c4709a3df6a8ce7ce01d","impliedFormat":1},{"version":"c0f4cd570839560ba29091ce66e35147908526f429fcc1a4f7c895a79bbbc902","impliedFormat":1},{"version":"3d44d824b1d25e86fb24a1be0c2b4d102b14740e8f10d9f3a320a4c863d0acad","impliedFormat":1},{"version":"f80511b23e419a4ba794d3c5dadea7f17c86934fa7a9ac118adc71b01ad290e3","impliedFormat":1},{"version":"633eabeec387c19b9ad140a1254448928804887581e2f0460f991edb2b37f231","impliedFormat":1},{"version":"f7083bbe258f85d7b7b8524dd12e0c3ee8af56a43e72111c568c9912453173a6","impliedFormat":1},{"version":"067a32d6f333784d2aff45019e36d0fc96fff17931bb2813b9108f6d54a6f247","impliedFormat":1},{"version":"0c85a6e84e5e646a3e473d18f7cd8b3373b30d3b3080394faee8997ad50c0457","impliedFormat":1},{"version":"f554099b0cfd1002cbacf24969437fabec98d717756344734fbae48fb454b799","impliedFormat":1},{"version":"1c39be289d87da293d21110f82a31139d5c6030e7a738bdf6eb835b304664fdd","impliedFormat":1},{"version":"5e9da3344309ac5aa7b64276ea17820de87695e533c177f690a66d9219f78a1e","impliedFormat":1},{"version":"1d4258f658eda95ee39cd978a00299d8161c4fef8e3ceb9d5221dac0d7798242","impliedFormat":1},{"version":"7df3bac8f280e1a3366ecf6e7688b7f9bbc1a652eb6ad8c62c3690cc444932e3","impliedFormat":1},{"version":"816c71bf50425c02608c516df18dfcb2ed0fca6baef0dbb30931c4b93fb6ab28","impliedFormat":1},{"version":"a32e227cdf4c5338506e23f71d5464e892416ef6f936bafa911000f98b4f6285","impliedFormat":1},{"version":"215474b938cc87665c20fe984755e5d6857374627953428c783d0456149c4bda","impliedFormat":1},{"version":"6b4915d3c74438a424e04cd4645b13b8b74733d6da8e9403f90e2c2775501f49","impliedFormat":1},{"version":"780c26fecbc481a3ef0009349147859b8bd22df6947990d4563626a38b9598b8","impliedFormat":1},{"version":"41a87a15fdf586ff0815281cccfb87c5f8a47d0d5913eed6a3504dc28e60d588","impliedFormat":1},{"version":"0973d91f2e6c5e62a642685913f03ab9cb314f7090db789f2ed22c3df2117273","impliedFormat":1},{"version":"082b8f847d1e765685159f8fe4e7812850c30ab9c6bd59d3b032c2c8be172e29","impliedFormat":1},{"version":"63033aacc38308d6a07919ef6d5a2a62073f2c4eb9cd84d535cdb7a0ab986278","impliedFormat":1},{"version":"f30f24d34853a57aed37ad873cbabf07b93aff2d29a0dd2466649127f2a905ff","impliedFormat":1},{"version":"1828d9ea4868ea824046076bde3adfd5325d30c4749835379a731b74e1388c2a","impliedFormat":1},{"version":"4ac7ee4f70260e796b7a58e8ea394df1eaa932cdaf778aa54ef412d9b17fe51a","impliedFormat":1},{"version":"9ddbe84084a2b5a20dd14ca2c78b5a1f86a328662b11d506b9f22963415e7e8d","impliedFormat":1},{"version":"871e5cd964fafda0cd5736e757ba6f2465fd0f08b9ae27b08d0913ea9b18bea1","impliedFormat":1},{"version":"95b61511b685d6510b15c6f2f200d436161d462d768a7d61082bfba4a6b21f24","impliedFormat":1},{"version":"3a0f071c1c982b7a7e5f9aaea73791665b865f830b1ea7be795bc0d1fb11a65e","impliedFormat":1},{"version":"6fcdac5e4f572c04b1b9ff5d4dace84e7b0dcccf3d12f4f08d296db34c2c6ea7","impliedFormat":1},{"version":"04381d40188f648371f9583e3f72a466e36e940bd03c21e0fcf96c59170032f8","impliedFormat":1},{"version":"5b249815b2ab6fdfe06b99dc1b2a939065d6c08c6acf83f2f51983a2deabebce","impliedFormat":1},{"version":"93333bd511c70dc88cc8a458ee781b48d72f468a755fd2090d73f6998197d6d4","impliedFormat":1},{"version":"1f64a238917b7e245930c4d32d708703dcbd8997487c726fcbadaa706ebd45dc","impliedFormat":1},{"version":"17d463fd5e7535eecc4f4a8fd65f7b25b820959e918d1b7478178115b4878de0","impliedFormat":1},{"version":"10d5b512f0eeab3e815a58758d40abe1979b420b463f69e8acccbb8b8d6ef376","impliedFormat":1},{"version":"e3c6af799b71db2de29cf7513ec58d179af51c7aef539968b057b43f5830da06","impliedFormat":1},{"version":"fbd151883aa8bb8c7ea9c5d0a323662662e026419e335a0c3bd53772bd767ec5","impliedFormat":1},{"version":"7b55d29011568662da4e570f3a87f61b8238024bc82f5c14ae7a7d977dbd42b6","impliedFormat":1},{"version":"1a693131491bf438a4b2f5303f4c5e1761973ca20b224e5e9dcd4db77c45f09b","impliedFormat":1},{"version":"09181ba5e7efec5094c82be1eb7914a8fc81780d7e77f365812182307745d94f","impliedFormat":1},{"version":"fb5a59f40321ec0c04a23faa9cf0a0640e8b5de7f91408fb2ecaaec34d6b9caf","impliedFormat":1},{"version":"0e2578d08d1c0139ba788d05ef1a62aa50373e0540fd1cad3b1c0a0c13107362","impliedFormat":1},{"version":"65f22fbb80df4ffdd06b9616ec27887d25b30fd346d971ced3ab6e35d459e201","impliedFormat":1},{"version":"adf56fbfbd48d96ff2525dae160ad28bcb304d2145d23c19f7c5ba0d28d1c0cf","impliedFormat":1},{"version":"e972d127886b4ba51a40ef3fa3864f744645a7eaeb4452cb23a4895ccde4943e","impliedFormat":1},{"version":"5af6ea9946b587557f4d164a2c937bb3b383211fef5d5fd33980dc5b91d31927","impliedFormat":1},{"version":"bffa47537197a5462836b3bb95f567236fa144752f4b09c9fa53b2bf0ac4e39a","impliedFormat":1},{"version":"76e485bb46a79126e76c8c40487497f5831c5faa8d990a31182ad5bf9487409c","impliedFormat":1},{"version":"34c367f253d9f9f247a4d0af9c3cfcfaabb900e24db79917704cd2d48375d74c","impliedFormat":1},{"version":"1b7b16cceca67082cd6f10eeaf1845514def524c2bc293498ba491009b678df3","impliedFormat":1},{"version":"81ad399f8c6e85270b05682461ea97e3c3138f7233d81ddbe4010b09e485fce0","impliedFormat":1},{"version":"8baaf66fecb2a385e480f785a8509ac3723c1061ca3d038b80828e672891cccf","impliedFormat":1},{"version":"6ed1f646454dff5d7e5ce7bc5e9234d4e2b956a7573ef0d9b664412e0d82b83e","impliedFormat":1},{"version":"6777b3a04a9ff554b3e20c4cb106b8eb974caad374a3d2651d138f7166202f59","impliedFormat":1},{"version":"cc2a85161dab1f8b55134792706ecf2cf2813ad248048e6495f72e74ecb2462c","impliedFormat":1},{"version":"c994de814eca4580bfad6aeec3cbe0d5d910ae7a455ff2823b2d6dce1bbb1b46","impliedFormat":1},{"version":"a8fdd65c83f0a8bdfe393cf30b7596968ba2b6db83236332649817810cc095b6","impliedFormat":1},{"version":"2cc71c110752712ff13cea7fb5d9af9f5b8cfd6c1b299533eeaf200d870c25db","impliedFormat":1},{"version":"07047dd47ed22aec9867d241eed00bccb19a4de4a9e309c2d4c1efb03152722f","impliedFormat":1},{"version":"ce8f3cd9fd2507d87d944d8cdb2ba970359ea74821798eee65fd20e76877d204","impliedFormat":1},{"version":"5e63289e02fb09d73791ae06e9a36bf8e9b8b7471485f6169a2103cb57272803","impliedFormat":1},{"version":"16496edeb3f8f0358f2a9460202d7b841488b7b8f2049a294afcba8b1fce98f7","impliedFormat":1},{"version":"5f4931a81fac0f2f5b99f97936eb7a93e6286367b0991957ccd2aa0a86ce67e8","impliedFormat":1},{"version":"0c81c0048b48ba7b579b09ea739848f11582a6002f00c66fde4920c436754511","impliedFormat":1},{"version":"2a9efc08880e301d05e31f876eb43feb4f96fa409ec91cd0f454afddbedade99","impliedFormat":1},{"version":"8b84db0f190e26aeed913f2b6f7e6ec43fb7aeec40bf7447404db696bb10a1aa","impliedFormat":1},{"version":"3faa4463234d22b90d546925c128ad8e02b614227fb4bceb491f4169426a6496","impliedFormat":1},{"version":"83dc14a31138985c30d2b8bdf6b2510f17d9c1cd567f7aadd4cbfd793bd320b8","impliedFormat":1},{"version":"4c21526acf3a205b96962c5e0dc8fa73adbce05dd66a5b3960e71527f0fb8022","impliedFormat":1},{"version":"8de35ab4fcd11681a8a7dae4c4c25a1c98e9f66fbd597998ca3cea58012801a8","impliedFormat":1},{"version":"40a50581f3fa685fda5bbd869f6951272e64ccb973a07d75a6babf5ad8a7ec51","impliedFormat":1},{"version":"5575fd41771e3ff65a19744105d7fed575d45f9a570a64e3f1357fe47180e2a2","impliedFormat":1},{"version":"ea94b0150a7529c409871f6143436ead5939187d0c4ec1c15e0363468c1025cc","impliedFormat":1},{"version":"b8deddcf64481b14aa88489617e5708fcb64d4f64db914f10abbd755c8deb548","impliedFormat":1},{"version":"e2e932518d27e7c23070a8bbd6f367102a00107b7efdd4101c9906ac2c52c3f3","impliedFormat":1},{"version":"1a1a8889de2d1c898d4e786b8edf97a33b8778c2bb81f79bcf8b9446b01663dd","impliedFormat":1},{"version":"bb66806363baa6551bd61dd79941a3f620f64d4166148be8c708bf6f998c980b","impliedFormat":1},{"version":"23b58237fc8fbbcb111e7eb10e487303f5614e0e8715ec2a90d2f3a21fd1b1c0","impliedFormat":1},{"version":"c63bb5b72efbb8557fb731dc72705f1470284093652eca986621c392d6d273ab","impliedFormat":1},{"version":"9495b9e35a57c9bfec88bfb56d3d5995d32b681317449ad2f7d9f6fc72877fd0","impliedFormat":1},{"version":"8974fe4b0f39020e105e3f70ab8375a179896410c0b55ca87c6671e84dec6887","impliedFormat":1},{"version":"7f76d6eef38a5e8c7e59c7620b4b99205905f855f7481cb36a18b4fdef58926d","impliedFormat":1},{"version":"a74437aba4dd5f607ea08d9988146cee831b05e2d62942f85a04d5ad89d1a57a","impliedFormat":1},{"version":"65faea365a560d6cadac8dbf33953474ea5e1ef20ee3d8ff71f016b8d1d8eb7c","impliedFormat":1},{"version":"1d30c65c095214469a2cfa1fd40e881f8943d20352a5933aa1ed96e53118ca7e","impliedFormat":1},{"version":"342e05e460b6d55bfbbe2cf832a169d9987162535b4127c9f21eaf9b4d06578b","impliedFormat":1},{"version":"8bfced5b1cd8441ba225c7cbb2a85557f1cc49449051f0f71843bbb34399bbea","impliedFormat":1},{"version":"9388132f0cb90e5f0a44a5255f4293b384c6a79b0c9206249b3bcf49ff988659","impliedFormat":1},{"version":"a7e8f748de2465278f4698fe8656dd1891e49f9f81e719d6fc3eaf53b4df87ce","impliedFormat":1},{"version":"1ef1dcd20772be36891fd4038ad11c8e644fe91df42e4ccdbc5a5a4d0cfddf13","impliedFormat":1},{"version":"3e77ee3d425a8d762c12bb85fe879d7bc93a0a7ea2030f104653c631807c5b2e","impliedFormat":1},{"version":"e76004b4d4ce5ad970862190c3ef3ab96e8c4db211b0e680e55a61950183ff16","impliedFormat":1},{"version":"b959e66e49bfb7ff4ce79e73411ebc686e3c66b6b51bf7b3f369cc06814095f7","impliedFormat":1},{"version":"3e39e5b385a2e15183fc01c1f1d388beca6f56cd1259d3fe7c3024304b5fd7aa","impliedFormat":1},{"version":"3a4560b216670712294747d0bb4e6b391ca49271628514a1fe57d455258803db","impliedFormat":1},{"version":"f9458d81561e721f66bd4d91fb2d4351d6116e0f36c41459ad68fdbb0db30e0a","impliedFormat":1},{"version":"c7d36ae7ed49be7463825d42216648d2fb71831b48eb191bea324717ba0a7e59","impliedFormat":1},{"version":"5a1ae4a5e568072f2e45c2eed8bd9b9fceeb20b94e21fb3b1cec8b937ea56540","impliedFormat":1},{"version":"acbbea204ba808da0806b92039c87ae46f08c7277f9a32bf691c174cb791ddff","impliedFormat":1},{"version":"055489a2a42b6ece1cb9666e3d68de3b52ed95c7f6d02be3069cc3a6c84c428c","impliedFormat":1},{"version":"3038efd75c0661c7b3ff41d901447711c1363ef4aef4485f374847a8a2fcb921","impliedFormat":1},{"version":"0022901e655f49011384f960d6b67c5d225e84e2ea66aa4aae1576974a4e9b40","impliedFormat":1},{"version":"0022901e655f49011384f960d6b67c5d225e84e2ea66aa4aae1576974a4e9b40","impliedFormat":1},{"version":"9d2106024e848eccaeaa6bd9e0fd78742a0c542f2fbc8e3bb3ab29e88ece73a9","impliedFormat":1},{"version":"668a9d5803e4afcd23cd0a930886afdf161faa004f533e47a3c9508218df7ecd","impliedFormat":1},{"version":"dd769708426135f5f07cd5e218ac43bf5bcf03473c7cbf35f507e291c27161e7","impliedFormat":1},{"version":"6067f7620f896d6acb874d5cc2c4a97f1aa89d42b89bd597d6d640d947daefb8","impliedFormat":1},{"version":"8fd3454aaa1b0e0697667729d7c653076cf079180ef93f5515aabc012063e2c1","impliedFormat":1},{"version":"f13786f9349b7afc35d82e287c68fa9b298beb1be24daa100e1f346e213ca870","impliedFormat":1},{"version":"5e9f0e652f497c3b96749ed3e481d6fab67a3131f9de0a5ff01404b793799de4","impliedFormat":1},{"version":"1ad85c92299611b7cd621c9968b6346909bc571ea0135a3f2c7d0df04858c942","impliedFormat":1},{"version":"08ef30c7a3064a4296471363d4306337b044839b5d8c793db77d3b8beefbce5d","impliedFormat":1},{"version":"b700f2b2a2083253b82da74e01cac2aa9efd42ba3b3041b825f91f467fa1e532","impliedFormat":1},{"version":"0edbad572cdd86ec40e1f27f3a337b82574a8b1df277a466a4e83a90a2d62e76","impliedFormat":1},{"version":"cc2930e8215efe63048efb7ff3954df91eca64eab6bb596740dceb1ad959b9d4","impliedFormat":1},{"version":"1cf8615b4f02bbabb030a656aa1c7b7619b30da7a07d57e49b6e1f7864df995f","impliedFormat":1},{"version":"2cbd0adfb60e3fed2667e738eba35d9312ab61c46dbc6700a8babed2266ddcf2","impliedFormat":1},{"version":"bed2e48fefb5a30e82f176e79c8bd95d59915d3ae19f68e8e6f3a6df3719503f","impliedFormat":1},{"version":"032a6c17ee79d48039e97e8edb242fe2bd4fc86d53307a10248c2eda47dbd11d","impliedFormat":1},{"version":"83b28226a0b5697872ea7db24c4a1de91bbf046815b81deaa572b960a189702a","impliedFormat":1},{"version":"8c08bc40a514c6730c5e13e065905e9da7346a09d314d09acc832a6c4da73192","impliedFormat":1},{"version":"b95a07e367ec719ecc96922d863ab13cce18a35dde3400194ba2c4baccfafdc0","impliedFormat":1},{"version":"36e86973743ca5b4c8a08633ef077baf9ba47038002b8bbe1ac0a54a3554c53e","impliedFormat":1},{"version":"b8c19863be74de48ff0b5d806d3b51dc51c80bcf78902a828eb27c260b64e9f1","impliedFormat":1},{"version":"3555db94117fb741753ef5c37ffdb79f1b3e64e9f24652eecb5f00f1e0b1941c","impliedFormat":1},{"version":"52b3bc9c614a193402af641bee64a85783cd2988a46a09bdfe4bddd33410d1b8","impliedFormat":1},{"version":"52b3bc9c614a193402af641bee64a85783cd2988a46a09bdfe4bddd33410d1b8","impliedFormat":1},{"version":"deb25b0ec046c31b288ad7f4942c83ad29e5e10374bdb8af9a01e669df33d59d","impliedFormat":1},{"version":"deb25b0ec046c31b288ad7f4942c83ad29e5e10374bdb8af9a01e669df33d59d","impliedFormat":1},{"version":"a3eb808480fe13c0466917415aa067f695c102b00df00c4996525f1c9e847e4f","impliedFormat":1},{"version":"5d5e54ce407a53ac52fd481f08c29695a3d38f776fc5349ab69976d007b3198e","impliedFormat":1},{"version":"6f796d66834f2c70dd13cfd7c4746327754a806169505c7b21845f3d1cabd80a","impliedFormat":1},{"version":"bde869609f3f4f88d949dc94b55b6f44955a17b8b0c582cdef8113e0015523fa","impliedFormat":1},{"version":"9c16e682b23a335013941640433544800c225dc8ad4be7c0c74be357482603d5","impliedFormat":1},{"version":"622abbfd1bb206b8ea1131bb379ec1f0d7e9047eddefcfbe104e235bfc084926","impliedFormat":1},{"version":"3e5f94b435e7a57e4c176a9dc613cd4fb8fad9a647d69a3e9b77d469cdcdd611","impliedFormat":1},{"version":"f00c110b9e44555c0add02ccd23d2773e0208e8ceb8e124b10888be27473872d","impliedFormat":1},{"version":"0be282634869c94b20838acba1ac7b7fee09762dbed938bf8de7a264ba7c6856","impliedFormat":1},{"version":"a640827fd747f949c3e519742d15976d07da5e4d4ce6c2213f8e0dac12e9be6c","impliedFormat":1},{"version":"56dee4cdfa23843048dc72c3d86868bf81279dbf5acf917497e9f14f999de091","impliedFormat":1},{"version":"7890136a58cd9a38ac4d554830c6afd3a3fbff65a92d39ab9d1ef9ab9148c966","impliedFormat":1},{"version":"9ebd2b45f52de301defb043b3a09ee0dd698fc5867e539955a0174810b5bdf75","impliedFormat":1},{"version":"cbad726f60c617d0e5acb13aa12c34a42dc272889ac1e29b8cb2ae142c5257b5","impliedFormat":1},{"version":"009022c683276077897955237ca6cb866a2dfa2fe4c47fadcf9106bc9f393ae4","impliedFormat":1},{"version":"b03e6b5f2218fd844b35e2b6669541c8ad59066e1427f4f29b061f98b79aceeb","impliedFormat":1},{"version":"8451b7c29351c3be99ec247186bb17c8bde43871568488d8eb2739acab645635","impliedFormat":1},{"version":"2c2e64c339be849033f557267e98bd5130d9cb16d0dccada07048b03ac9bbc79","impliedFormat":1},{"version":"39c6cc52fed82f7208a47737a262916fbe0d9883d92556bd586559c94ef03486","impliedFormat":1},{"version":"5c467e74171c2d82381bb9c975a5d4b9185c78006c3f5da03e368ea8c1c3a32e","impliedFormat":1},{"version":"ef1e298d4ff9312d023336e6089a93ee1a35d7846be90b5f874ddd478185eac6","impliedFormat":1},{"version":"d829e88b60117a6bc2ca644f25b6f8bbaa40fc8998217536dbbbfd760677ae60","impliedFormat":1},{"version":"e922987ed23d56084ec8cce2d677352355b4afb372a4c7e36f6e507995811c43","impliedFormat":1},{"version":"9cca233ee9942aaafcf19a8d1f2929fed21299d836f489623c9abfb157b8cd87","impliedFormat":1},{"version":"0dc1aac5e460ea012fe8c67d885e875dbdc5bf38d6cb9addf3f2a0cc3558a670","impliedFormat":1},{"version":"1e350495bd8b33f251c59539c7aef25287ea4907feb08dab5651b78a989a2e6a","impliedFormat":1},{"version":"1e350495bd8b33f251c59539c7aef25287ea4907feb08dab5651b78a989a2e6a","impliedFormat":1},{"version":"4181ed429a8aac8124ea36bfc716d9360f49374eb36f1cc8872dcbbf545969eb","impliedFormat":1},{"version":"948b77bdc160db8025bf63cc0e53661f27c5c5244165505cc48024a388a9f003","impliedFormat":1},{"version":"b3ae4b9b7ec83e0630ce00728a9db6c8bb7909c59608d48cded3534d8ed8fa47","impliedFormat":1},{"version":"c2fa2cba39fcabec0be6d2163b8bc76d78ebe45972a098cca404b1a853aa5184","impliedFormat":1},{"version":"f98232fe7507f6c70831a27ddd5b4d759d6c17c948ed6635247a373b3cfee79e","impliedFormat":1},{"version":"61db0df9acc950cc1ac82897e6f24b6ab077f374059a37f9973bf5f2848cfa56","impliedFormat":1},{"version":"c185ceb3a4cd31153e213375f175e7b3f44f8c848f73faf8338a03fffb17f12b","impliedFormat":1},{"version":"bfa04fde894ce3277a5e99b3a8bec59f49dde8caaaa7fb69d2b72080b56aedbd","impliedFormat":1},{"version":"f4405ec08057cd8002910f210922de51c9273f577f456381aeb8671b678653c9","impliedFormat":1},{"version":"631f50cc97049c071368bf25e269380fad54314ce67722072d78219bff768e92","impliedFormat":1},{"version":"c88a192e6d7ec5545ad530112a595c34b2181acd91b2873f40135a0a2547b779","impliedFormat":1},{"version":"ddcb839b5b893c67e9cc75eacf49b2d4425518cfe0e9ebc818f558505c085f47","impliedFormat":1},{"version":"d962bdaac968c264a4fe36e6a4f658606a541c82a4a33fe3506e2c3511d3e40a","impliedFormat":1},{"version":"549daccede3355c1ed522e733f7ab19a458b3b11fb8055761b01df072584130a","impliedFormat":1},{"version":"2852612c7ca733311fe9443e38417fab3618d1aac9ba414ad32d0c7eced70005","impliedFormat":1},{"version":"f86a58fa606fec7ee8e2a079f6ff68b44b6ea68042eb4a8f5241a77116fbd166","impliedFormat":1},{"version":"434b612696740efb83d03dd244cb3426425cf9902f805f329b5ff66a91125f29","impliedFormat":1},{"version":"e6edb14c8330ab18bdd8d6f7110e6ff60e5d0a463aac2af32630d311dd5c1600","impliedFormat":1},{"version":"f5e8edbedcf04f12df6d55dc839c389c37740aa3acaa88b4fd9741402f155934","impliedFormat":1},{"version":"794d44962d68ae737d5fc8607c4c8447955fc953f99e9e0629cac557e4baf215","impliedFormat":1},{"version":"8d1fd96e52bc5e5b3b8d638a23060ef53f4c4f9e9e752aba64e1982fae5585fa","impliedFormat":1},{"version":"4881c78bd0526b6e865fcf38e174014645e098ac115cacd46b40be01ac85f384","impliedFormat":1},{"version":"56e5e78ff2acc23ad1524fc50579780bc2a9058024793f7674ec834759efc9de","impliedFormat":1},{"version":"13b9d386e5ee49b2f5caff5e7ed25b99135610dcda45638027c5a194cc463e27","impliedFormat":1},{"version":"631634948d2178785c3a707d5567ae0250a75bf531439381492fc26ef57d6e7f","impliedFormat":1},{"version":"1058b9b3ba92dd408e70dd8ea75cdde72557204a8224f29a6e4a8e8354da9773","impliedFormat":1},{"version":"997c112040764089156e67bab2b847d09af823cc494fe09e429cef375ef03af9","impliedFormat":1},{"version":"9ddf7550e43329fa373a0694316ddc3d423ae9bffa93d84b7b3bb66cf821dfae","impliedFormat":1},{"version":"fdb2517484c7860d404ba1adb1e97a82e890ba0941f50a850f1f4e34cfd6b735","impliedFormat":1},{"version":"5116b61c4784252a73847f6216fdbff5afa03faaab5ff110d9d7812dff5ddc3f","impliedFormat":1},{"version":"f68c1ecd47627db8041410fcb35b5327220b3b35287d2a3fcca9bf4274761e69","impliedFormat":1},{"version":"9d1726afaf9e34a7f31f3be543710d37b1854f40f635e351a63d47a74ceef774","impliedFormat":1},{"version":"a3a805ec9621188f85f9d3dda03b87b47cd31a92b76d2732eba540cc2af9612d","impliedFormat":1},{"version":"0f9e65ffa38ea63a48cf29eb6702bb4864238989628e039a08d2d7588be4ab15","impliedFormat":1},{"version":"3993a8d6d3068092ed74bb31715d4e1321bf0bbb094db0005e8aa2f7fbab0f93","impliedFormat":1},{"version":"bcc3756f063548f340191869980e14ded6d5cb030b3308875f9e6e0ce52071ed","impliedFormat":1},{"version":"7da3fcacec0dc6c8067601e3f2c39662827d7011ea06b61e06af2d253b55a363","impliedFormat":1},{"version":"d101d3030fb8b29ed44f999d0d03e5ec532f908c58fefb26c4ecd248fe8819c5","impliedFormat":1},{"version":"2898bf44723a97450bf234b9208bce7c524d1e7735a1396d9aabcba0a3f48896","impliedFormat":1},{"version":"3f04902889a4eb04ef34da100820d21b53a0327e9e4a6ef63cd6a9682538dc6f","impliedFormat":1},{"version":"67b0df47d30dad3449ba62d2f4e9c382ee25cb509540eb536ded3f59fb3fdf41","impliedFormat":1},{"version":"526e0604ed8cf5ec53d629c168013d99f06c0673108281e676053f04ee3afc6d","impliedFormat":1},{"version":"79f84d0bccc2f08c62a74cc4fcf445f996ef637579191edfc8c7c5bf351d4bd2","impliedFormat":1},{"version":"26694ee75957b55b34e637e9752742c6eee761155e8b87f8cdec335aee598da4","impliedFormat":1},{"version":"017b4f63bafe1e29d69dc2fecc5c3e1f119e8aa8e3c7a0e82c2f5b572dbc8969","impliedFormat":1},{"version":"74faaea9ae62eea1299cc853c34404ac2113117624060b6f89280f3bc5ed27de","impliedFormat":1},{"version":"3b114825464c5cafc64ffd133b5485aec7df022ec771cc5d985e1c2d03e9b772","impliedFormat":1},{"version":"c6711470bc8e21805a45681f432bf3916e735e167274e788120bcef2a639ebef","impliedFormat":1},{"version":"ad379db2a69abb28bb8aaf09679d24ac59a10b12b1b76d1201a75c51817a3b7c","impliedFormat":1},{"version":"3be0897930eb5a7ce6995bc03fa29ff0a245915975a1ad0b9285cfaa3834c370","impliedFormat":1},{"version":"0d6cf8d44b6c42cd9cd209a966725c5f06956b3c8b653ba395c5a142e96a7b80","impliedFormat":1},{"version":"0242e0818acc4d6b9da05da236279b1d6192f929959ebbd41f2fc899af504449","impliedFormat":1},{"version":"dbf3580e00ea32ec07da17de068f8f9aa63ad02e225bc51057466f1dfed18c32","impliedFormat":1},{"version":"e87ad82343dae2a5183ef77ab7c25e2ac086f0359850af8bfaf31195fb51bebe","impliedFormat":1},{"version":"0659ac04895ce1bfb7231fe37361e628f616eb48336dad0182860c21c8731564","impliedFormat":1},{"version":"627ec421b4dfad81f9f8fcbfe8e063edc2f3b77e7a84f9956583bdd9f9792683","impliedFormat":1},{"version":"d428bae78f42e0a022ca13ad4cdf83cc215357841338c8d4d20a78e100069c49","impliedFormat":1},{"version":"4843347a4d4fc2ebbdf8a1f3c2c5dc66a368271c4bddc0b80032ed849f87d418","impliedFormat":1},{"version":"3e05200e625222d97cf21f15793524b64a8f9d852e1490c4d4f1565a2f61dc4d","impliedFormat":1},{"version":"5d367e88114f344516c440a41c89f6efb85adb953b8cc1174e392c44b2ac06b6","impliedFormat":1},{"version":"22dc8f5847b8642e75b847ba174c24f61068d6ad77db8f0c23f4e46febdb36bb","impliedFormat":1},{"version":"7350c18dd0c7133c8d2ec272b1aa10784a801104d28669efc90071564750da6d","impliedFormat":1},{"version":"45bd73d4cb89c3fb2003257a4579cbce04c01a19b01fda4b5f1a819bcea71a2e","impliedFormat":1},{"version":"6684e81b54855f813639599aa847578f51c78b9933ff7eee306b6ce1b178bc0c","impliedFormat":1},{"version":"36ecc67bce3e36e22ea8af1a17c3bfade5bf1119fb87190f47366a678e823129","impliedFormat":1},{"version":"dbcc536b6bc9365e611989560eb30b81a07140602a9db632cc4761c66228b001","impliedFormat":1},{"version":"cb0b26b99104ec6b125c364fe81991b1e4fb7acdcb0315fff04a1f0c939d5e5d","impliedFormat":1},{"version":"e77adac69fbf0785ad1624a1dbaf02794877f38d75c095facd150bfef9cb0cc5","impliedFormat":1},{"version":"44710cf3db1cc8d826e242d2e251aff0d007fd9736a77d449fbe82b15a931919","impliedFormat":1},{"version":"44710cf3db1cc8d826e242d2e251aff0d007fd9736a77d449fbe82b15a931919","impliedFormat":1},{"version":"0d216597eed091e23091571e8df74ed2cb2813f0c8c2ce6003396a0e2e2ea07d","impliedFormat":1},{"version":"b6a0d16f4580faa215e0f0a6811bdc8403306a306637fc6cc6b47bf7e680dcca","impliedFormat":1},{"version":"9b4b8072aac21a792a2833eb803e6d49fd84043c0fd4996aa8d931c537fe3a36","impliedFormat":1},{"version":"9b4b8072aac21a792a2833eb803e6d49fd84043c0fd4996aa8d931c537fe3a36","impliedFormat":1},{"version":"67bcfdec85f9c235e7feb6faa04e312418e7997cd7341b524fb8d850c5b02888","impliedFormat":1},{"version":"519f452d81a2890c468cca90b9b285742b303a9b9fd1f88f264bb3dda4549430","impliedFormat":1},{"version":"519f452d81a2890c468cca90b9b285742b303a9b9fd1f88f264bb3dda4549430","impliedFormat":1},{"version":"d58d25fa1c781a2e5671e508223bf10a3faf0cde1105bc3f576adf2c31dd8289","impliedFormat":1},{"version":"376bc1793d293b7cd871fe58b7e58c65762db6144524cb022ffc2ced7fcc5d86","impliedFormat":1},{"version":"40bd62bd598ec259b1fa17cf9874618efe892fa3c009a228cb04a792cce425c8","impliedFormat":1},{"version":"8f5ac4753bd52889a1fa42edefab3860a07f198d67b6b7d8ac781f0d8938667b","impliedFormat":1},{"version":"962287ca67eb84fe22656190668a49b3f0f9202ec3bc590b103a249dca296acf","impliedFormat":1},{"version":"3dab1e83f2adb7547c95e0eec0143c4d6c28736490e78015ac50ca0e66e02cb0","impliedFormat":1},{"version":"7f0cfb5861870e909cc45778f5e22a4a1e9ecdec34c31e9d5232e691dd1370c8","impliedFormat":1},{"version":"8c645a4aa022e976b9cedd711b995bcff088ea3f0fb7bc81dcc568f810e3c77a","impliedFormat":1},{"version":"4cc2d393cffad281983daaf1a3022f3c3d36f5c6650325d02286b245705c4de3","impliedFormat":1},{"version":"f0913fc03a814cebb1ca50666fce2c43ef9455d73b838c8951123a8d85f41348","impliedFormat":1},{"version":"a8cfdf77b5434eff8b88b80ccefa27356d65c4e23456e3dd800106c45af07c3c","impliedFormat":1},{"version":"494fdf98dfa2d19b87d99812056417c7649b6c7da377b8e4f6e4e5de0591df1d","impliedFormat":1},{"version":"989034200895a6eaae08b5fd0e0336c91f95197d2975800fc8029df9556103c4","impliedFormat":1},{"version":"0ac4c61bb4d3668436aa3cd54fb82824d689ad42a05da3acb0ca1d9247a24179","impliedFormat":1},{"version":"c889405864afce2e14f1cffd72c0fccddcc3c2371e0a6b894381cc6b292c3d32","impliedFormat":1},{"version":"6d728524e535acd4d13e04d233fb2e4e1ef2793ffa94f6d513550c2567d6d4b4","impliedFormat":1},{"version":"14d6af39980aff7455152e2ebb5eb0ab4841e9c65a9b4297693153695f8610d5","impliedFormat":1},{"version":"44944d3b25469e4c910a9b3b5502b336f021a2f9fe67dd69d33afc30b64133b3","impliedFormat":1},{"version":"7aa71d2fa9dfb6e40bdd2cfa97e9152f4b2bd4898e677a9b9aeb7d703f1ca9ad","impliedFormat":1},{"version":"1f03bc3ba45c2ddca3a335532e2d2d133039f4648f2a1126ff2d03fb410be5dd","impliedFormat":1},{"version":"8b6fadc7df773879c30c0f954a11ec59e9b7430d50823c6bfb36fcc67b59eb42","impliedFormat":1},{"version":"689cb95de8ea23df837129d80a0037fe6fbadba25042199d9bb0c9366ace83b7","impliedFormat":1},"d34797a736793f674a82a27ab54a0d3895d44eab0d82df1b4b90d0444bd19d1e","8c2fb51aa15be92096569bd20adf7f6b54180a2da54374bda9a554b32f777932","9891bbd58530dfc80ad7761f020005164c695e02e34bc3f20a289e17741ecf03","78df341da39ed74f693854f926a9cea66ff14462234424652b5f40597b791572","0f9e77ef652f3137a6948630928ac61064faf97abe8bec03b827c914f6688e43","cd874940ce00271a550e191fa6c93784b6ad7ee61b88e2f913c8ad9232889283","dfc88750e80963bb99ef3cb8303103146e8a9e66ee6d90460323106d5507e020","035e3e612f473cbba68b763b9b731927ee90dd8aac4baa2a29123e79e9334c6d","b5c8f6b51fb6b02ee27649183444dc4c247611358d72096eac6dfc623fa5956a","1174e7d79daea59360779bb706de28b091b2ea4b6dddbfce15055f27ee317224","b1ccaa3c9249ee566b87ae2ae04ca378247cf882e918a32c02f2e16f56ca8bf3","6e2d76c61b6dc12871023a1fbd4697075a31593e9a20161ea6808aa8bcac7019","0c3cd76b4c7d3155a53828bd7a313af8bf1f01b962a7b0abbb5ac56cc35df41e","0fe39184731bf58aeec5d186d35d5f44d11da233e6714a0740da51abe10484e5","9790c3da16f89b208dd215e987265cb99a229419f37cc38ae764ecc00a4b7737","4c0f6a9e29f548df0b076ac03a705bf7f8b8e492389392a607f3677f3f2f91b0","c23e8b8cc59326ef6948068d84509d9de440cf6cd4733507d446bc500e080cdf","be7d31b240f29c280616df68dc94d31c5b76cf4af5d090643fdaa0ed8c1b379a","82127a9f7d9f6b722a0e2b7d80b603318b08af5e65bd41de9e2240d0601f5e4e","4c377eb1520df03c1529928d4950b119275099ab3d2bd04da6b5a84a337ca000","0438c528492ee73441e8654561743b56b822e56108ab75c66040d72e77d9abed","4eb1dcdc5db7ea9ca7a938484b47e950c88643a931641730105194d64312d3ad","45d3be7a5b6e704d291369ef50811b94247f4941ae201446e57c39aa7f25e241","4dd4fe57ff671c30aea6c63835e4b50cd73ec7bcb4b3e12fa11070a9906a29fb","5e984d352a2fcc59b84149ca4142f8ed0db9b3bf5ad9c656c382461c6e7fbc3f","4df92b5d8b23cfc66bb76ba79af0e2a80854f9232175041f40e66d70f4d311b8","cee85eeba521474aaed559468ac9777b07879dd81d8bd869078216c6758bcd5f","94a99b8f17b42b35b7a90330e215a050a6a57de151c4fab420086b8ceefeb96f","2059cced0472aeb04327d37f9549798428ae6aa8766e311fcbd116446c8175a6","0a44c4c655a62ce5d8f660836e27c3f5a600f403f52b2d6478d9e153c6ce3fa8","3671c61c2c668dac4798913f7e230f9b2e77ad990224304f01d1f7ad614ac5a7","34a81afcf23717ed96c5f3dda3be03239fbc1b3d04ede837e2ad986ec45af873","a4be23d928bf8004ff3680b4610ad0f05fc327c937e35ddbbee180d57f40396b","378fc05b917e336214110d2c6f4b9479af96af551c81a074ad3d04725062c9de","aa33c3b6b0ba0f123c9455528be52cceac746f8ded868130aed481fb87822317","2a614dc9c16270268d7a5ea1d253aee5ab2691187480e5e79cf15954903d2508","d359d022c7e7a62461161d1a3278061781147c73448a282cf275f320fce70785","aae99af134b1e90c8511fdc7aa1b93d6beb95a4ad5e77abc7a09d6fa22e79530","4fcf1f1346da8fb9b03048af633b0b1b67e600749e857822287554c793ab5597","a51489633afefa038cfc08286e6281b101924102eb7f632ac5e159cdafc2f40e","80bb6e152c582d7158c402ea1887e94fdb445d5dcdd6616ec5acc5fd2a7fd616","78d51c97d155466276f8835a6447460d5b49a47d04064a968e5e8ce659fe5575","797dbf7ccf888a7d6dff8260f29d55bcd26cb2ecbf5ea36c1c0772f7ee6ea14d","afd840cd6e03f05ffbdf9598820a1bd05a6662854ecc6b84439650e0cb27f320","b55d228b6bc2f00d2cb5eb878df8e8d45d0d7b84ac8fa14c07d032ccc5a5e658","5bd9128d3cf4f5f27ea56c6db52888cefa7816f63951f96042a5bc83ecc10939","13917f1f5e16d04e97ea8c04bb5b5f58e8a011e91c3e8c4297f69d6c44d493ce","2b3e787cdddee5e1058325002411f3bce1e1e23f3be91c9999b408d03560b2bd","32844b141a66c37742b6b00b13fe05996c37d711902dcc6dee332c34bca56b5c","27573e696e963be963a53a9cd5a2839c1734cc4262aef1d34e4ad876062816af","c1aa13d7f80580482949fb373eae623332b35e8846ceef2b1d5b46080f64e0a5","05a71d2790dd75089645d24df48d7173665d217df8fe482f9a1bdeb300e6e498","06f223e897355507531c47ea1f014b2ea3a5832b6048b4281439ed562aace910","48ae32be594de23983ef83743e9c46a27d74b4d880076f0bd547ad726a3c2926","874d26b139d9bf4ede02da936eee1eef8f248053029514951774ddfceb797019","684fbd91147af71f224d5133317964200d192dde51fa5bb8b125a258106b3b87","02229cd903314388c5b3618026420bfbe196171121159c2fd3a79955fe996fc6","443520fdaa4bb77ccf00bed7d77ce4123014d0409dfab0c5e49659af5f821e0d","d57b151a0ea91d00ec04559fc222a6bdf6b1a44c1709e5ee9229962f985c1651","16354b330a655b6ebc381d1c6155cfab99062112ecf0e4989ac754b9bdb5c98d","19ad34b3b3513d14122cc1dbe48f5e689062f328ef14c038bef7743e75115deb","a63ad1e15eeaa02620ab01578d5c932e72a14c460b77bc41fb59d877524306a1","cfcce955edb6b23c40f704336df5cb7c2c9f27f40595965351f14b3a1f25a82d","ba65e672b2e1d968152de51b369d0ac3064d4c5b3c0e2668a9c171147dd9a1ca","e7be47ef7e7aca1fdb9f3b9a46063f224041002b9e683101dcad3111283943af","651b93e698bbdaabba323cdc8dea87ace4293f4d27db3813833f054198d54556","8d241f74aa7ec5396f031ba53d0e15a8d878ec96bb8056d8375ffda7e0725a26","1c9954798c6a320300bc123a9c0c2bbd05f6036de35f2eeca927f1d50cfcb19e","e8a94e049383a34feaeb1e8cbfccd48d72736e1822bc2c4f4a695c64231eb445","2334f83b1645fe06b1cfedcf797727a77d8ffa870e5091450b945fd9b16813e5","61b0e5c9c8819c77ba7eef718a201e63415d9111da36343241ec98ef0464cfd0","5e1f4893b7e7f01e63adfc0f1a80b8c140b860b139cf748bb81bb6b22c56b760","4df5aeb81b1038edb6eb633688a1008eb3b633522670d073a81b28c783bb5478","ef776641a8640e88b0f61d19f749d86dafe4a5ad53f211c9f748601b94da09e6","e2c88261997e402bb0e128b8d5d0cb803e90e8abbf39a49e1a4b6aac0ae51fff","8c7228f8978cdb06d0ec23c4e8f6c74eea10e426f271941734ce91575642ac7f","e8f21af9178d20b32a03cb9a220ff1c6d262ef6bbbd51b9fbe0cf118d88af395","ed139529f38185bed57d49a149ed84754972f5d33e7b579e7ba7544a731adf3e","b909fcbc061f3687275b0dd16f028fca5d01eb5d21862d9e4769b92227a7166a","be81f2c47fa24b11b76a45f73ef246e91e067bf83d1f54b07a93d9bbb90debdc","7f40455eff74faa4e5fa5a23a41de585b7b55172fd33718fb94a9b011337c724","fdad810c16f1eecd9be2c75dc0e9c3f2e4659162f63c49f089d84ff33b9fc2dd","32e2861af2e32aca15fa4b1bc1b6fb85693d0fd8e67ec35a8302e71e49237496","56d8a3fdb8b99367605b767664b0373d5a476efbcfe3db6745dfcdc8741b89fc","006483a0c0cb9ba0b1c5517c9282e023a1e6faf42a7752b95eed36483bbf7a1a","24afb1c0056f6757976c32ef31c491a7de8e57ac18f3a6b007baf306c99c68b6","45ba3620e4a7aee9b45510e2633041363e97de3e235084eb59739c3e2dad9053","b1debe7499113fd84bc73b080de7694558619edac4533d23b3fa347de4c87f78","8c5e5bde19ae73ecad75c2420fccfbf5402f7a93156260b4cac12def6c482a41","bb62f188c387520a5e7c24ba8fd38a6ee57616266f58addd27bac4bbf2ebadf7","e8a9f909e11a2f7f3fa405fde785dc941f60a7f1463abb7dbf0371d31d7c1c95","4e12f50c8927ae4074e3c69c7d761f9d34cebfa7c47cca49e201e8583f16b892","cfa833869468933ee0a016a9f978245a59e5915ac9a891f76e325c4eff5a7df0","5e033eadf85c257b1988049b9c7a3246967a9a80603b468d914018167ab048f9","3a71abaf59ebc0121a15c6bd0e1fcfcf5b695ab942368343874d86e4dbc38402","b939fc803e03b48fcb250002f742d432abc0df6cee1ccc723e7269d02768ed22","34a6338ac6985138265b4923505acfe8ef6ef83765449433c4a0c062f32ac903","99eb757d59538d0ba784d5b28905c5a063e002a1a3bc1e51e57b528c96fda241","9dba57b53a7b8bb31c780a244daa7f206ac4ee9c1d255b2e316fc90ce75b0640","7ffd726735ba076ebdbe86c419c7ce3cf3c3a3f176a2339f6b3151ab199ea4e2","e2c66425599dc025b6f0693f70d889227960444d52ef5f4cf53e60a73e60c8a5","157fe6ac31fb43c9f97175ff5eb15d2ddef58cdff7e2881bbeaebbc8eae61720","46fbdf231f3e455db2d525d8e81f0055ef548d08a2c3ae917521eebfc134da74","a7bb417b3cc61e09d743bfb05a758437dbb7bc50114f2666f4b632c80d066da7","965576cc61900c9b92ff0b322867805c335459e0bb7b9efa5202f8ce948bbb70","5ebf98fbb5ce133b3cdd868b183cc8bcf58174b738b29606e7c8ce59f2c95d96","3207bb05ad3af18a5a8476dc0cd7df8b6290dc8e03303943ad289896e277971c","e8bf46cba554c1baf1dfbe9ea1e3f77f29ca2a64db979eff522052cb20a9de1b","effe7da7f4e797f056f3e0b8b43cb3fc9e86122080cb263cbda52ca250e5f4e0","913bd22f4aaeb1b71a4cf55b8a7a850e2492db3cd692e212fa4081faf4f88c29","08ae6741b5946ef1b017fddb2082a0d0da4fc23f7c7b62a5a85aa385b28df726","9ddc5f4704c0ae6fec752927a68472424d5a7ec31446bbdd299b4ddd40e4af22","fe23002ab7aaa3a74fc650b6946d72067c5a5e3a0bce31e02068bc8ef16b7520","ab3a4019fd9a6604935a4de11e64ccf0c118bc4c29d0c46a4ebaaca5d9ace95d","f2429ec283426315f5751cdc11572ff892e945f7996416717233215622069f72","9abbea59b0a28e6d87135bbdd84669910623820b537f93f4addfde6b2eef3064","f0c057c0980f659edceb1e31d39705e608db30e2aaf0063f35503e85e22ff475","bb8586ef5ce090d0be9545c0bb7cf1ff4473a6c4c811473bb7a251a13183915f","a71d56e6317823736d4e2fbc4c80bf889fe1cd363ed4b86d2ede3668e5138d81","b1302bfe2dd5c6778f0983f078b3471f7edc52fc96bee3d0ac6e62449b3bbe71","cca7ad6d489af34609f056b4d94685de2fa06fef57fb6d6b98e9333325ea2969","ded6577484c54cf718ddbfc3c431b7a0a7e033733e323188720d20d1c2538b07","7ec2b9325732fcad07d3178fbbaaf7734ee09ea6921266a7bdcd617600633962","e146c11710c267eb78663edf92e69021536ecdddb351b75452d9a2b15216a006","2f073598e47e96dd72b8ef99cb56dc9a85449c88a83fb36becc3260ba7cf249d","772f012d49a8edd51abe25d18b8973c07b4a9933c831e1354f77ca72028b7a4c","1a4a535f732d050306fcb1204578767a4934e24c51eb6278d8184b008c249d58","0cfd175ad4cc67e93e6909dc71e9b804d14ab5288dae4d75ac4dacab2e130e65","eea4603d2e9b7996a77224dd17fa687c822fb94f109a2b95c597c659db2ec4f8","bb68a6c3b0a34b956fd4ffe27fcd11ed9664a4960ef674f01bc57a77f7404a63","2fa2f4a883a054ee998b251157b4c3884f866d50d9ee2f30488649382631437a","6a6c13b270fba92b3dd4dffbc917b331f57d7fa80e105486e90c2ea78775df6b","7b3defc1e3e8aa63fc7b261d22eeed0e83f16a0e96b36dfbcd762fc2e1f52b29","645ec9736c1d4db8d132e948402bb4e94be90823a2b80423dc298d8aa4031733","455b4d5865d0cf3ee77f343baec4d1402719458ef3d6815fed3957fc4a451cb0","b5ee739eaa53c96a48392e674b646f45da5a8d568fd7364effd799a0ac76c3af","bc8134468a260ea01c8413c1cdad077fc565fa4c6c4f67e21483934fd96af746","9b9de6e81a1fb917aefe17b2570bd70815203025004a3c4bec0523633aa32547","59b124f1d407b8079f2d29b2ffb6c17f9166c07b4c180b7f56325adc24b12308","25d25bca78cbebdf291046235dbe5daf6edbbe8503fc0cb30e4c86eededf6bec","03530b799bbf76c8fd1d7f92f6640e6ed368b6af4271e3e353780451d8103693","b3e632884d69550fdedb0deaa9164ac9962ec6374bf4e11a27d78c6bd17f9bb3","95768801d33fa924c5f0696b65b25e66a5c6aa57bfa93be5ad73191857f288d3","39f7b3985348f9f45aa34a40fd7d726c1212fa797cc78bc53d6ca5e4fa080d46","d6ef3af26ad2c97d3b8db933ffa315a128eb0898638364764da2e92e60388ac5","36ace00267678808164a4d46b82b471ea8643981eac78b96ab5cd568a4a31455","6ea90d3a388ce4d5afc2864e26b4f41dd7f5af9bc28352d7b71a790cc3ebb505","a4b9f41da9df2328ac6d86a8f6040f352621592fd7fa78789ed3f528e01eca1c","947b67ae5c87eda3dc94128249c325e582e824a0aa8f1c0fe7e7f487eae3cfd9","0c2a2b8447555ba23de2bb82e726ad760c5c037b34bb712774b8b93c16fe872f","f8cb1ede29af80bc42b275ec2c1d7354cf7c2862b3989534836fb3508341621d","93aff6b8e0df7d44482ee9b194194ff4d5806073094270d7895762e531112c87","2f7d79fa5b947a8e23952e4aeebe509f769a75cff32adc4443861a0937d55c28","172be2162a445b51143cb980707faeb50786480d0c731c821fbdd0c013cd92a5","4f6b61f335f121cbc0d083a15c91cf7805b9111292320fb7140ddda43f5787db","f436538a895ebff458a889ca34a31fc205400541560166af8e2296d85a89d24e","d00081485f9fe1c388b262735abca2c03d1a914f5f2896c8bfb2a3393ceda795","d80fe97c0bc86e64323f99428b36c765593fb85c509dca790c0fa2f0a43006d9","6c9eb27d772bc494378a6cb831ba92305b540511b15bbffafb0d1eceb66d3b55","625352db1c829a2b7e2785591aab0e2fd5bf15e8095c8cd400af3451ad54d15e","a5e0eae868e466714ecd0ef20d4bc699852475752b23037c674b0ef105f9f1bc","25dc4d0aceeea68e7df9bb36ee4b1513a5adbb7d0085219720a98cb60112f21f","06b651914f19fd940e8dee432f63e5152d9ffc6a3a7938082d60dcd4961f65ec","007abb294f6b5e7d46f52ddd1fd54d731f14693a346c6b37812d314461e8c9aa","046ac1d366797bcca4e028d294966170f3e2606065ef984a15387f95a8e97124","c0c0be49d788493c951b369053a7b42315e4c4640cd3215ed8fd0e012bf402da","e3270fa7bce53e4b8f8ba3b77ce844ddd3417cc6d2d09af530e57f77ddc9ff98","c159aaf6a269e7e91351d0643c8a3f96e9d745673e39057b5e542e3c17d86010","4f1487f22a6497f258e67fe912369870552c5cda5b71dd7657b7eea2992f760f","279824d1264b0927de9268d20dba26925ebc8d3030c93009e68a3df53b9edb7e","c09d750076f22d65e5cbe9581a5e164d4285354a1576e972aaee0e4d89958a59","c12520887e8bd971fadd8e05730e6159cd1ed4b3a4e740fa807a1c0e3570c464","1fd5bd4d0139a25cfa26ecc2d98f22f6db3a160f3435cbb7b8202d93b13ead07","f640202f96749a7b991c053cdd96b4f2fda7a9afa08f18a08b09d0927cc96a49","b45b944b0825fa5e51b9bfbf062bc9ea83cd83fe8638531fa42b4fa3c4831390","94449d527b63e660367f396eb56b774ae52dad1cb2a2df7ef789e0ce7615676b","03a0605e074e1b853afa9131e9b8a7562c8d4ab99cc8a4dd516d84354468208f","d3350a42a1ddd007c248c896dcba448afec0306c3914ca5b1e6c40acfce1ff34","398a6916b9e9aa7833ae321d176d2388556c65d9d32c16a14170bb3e6dccd7b1","c9800091f581cabc2ca50ea2659499cff4e117e3364ce378723bd3b1532b67c1","6b544f759192e7f88b41a315efba71804509af2d252244127c97708f36387b9b","eb887ea24e5416a1b6d3c52a06a78b57c7e41a17c1001fe7123f801665bba3ad","2251cbcebd20c04cf7fc8fba69afa4a5a0142762d8353ff898e253cfe5b1d53f","2ae33bc5c89aa4a7568d4c07f5667dcbe1b52ad5be0437b929a27c28b0c93b5c","d84e6995e6e1e17ee864f27b32ed68ae50c6ef04399f10d1acb759bda1e7c9f2","6afc27dc42696a879e9ff0a5bd6a333dd1174a52e3548f61f622aff771d61625","5ca6b29c4c930ec81d703c502ca276f952e3307dd6f40bb07aa53fbfd93ed0bc","405883c3e2ac03c4456afd57825ce52b96e2292501aa7b49142223f2c6852712","8e3468395fa1b61bfb59900008565c13c9402b7efc8eafd5da131b8d49aa587c","d9c1458594dd41d11f187938741992a37e598ec995d7d0d2a8b3ba22f7421196","b1aadb29c504b1ac423469db645e94ab3cb9d79bc0f5e5a1fff4cac301227994","452bc74749e508efbfb47c2305d7c3c2fe1b48a1cafbba7b7571fb459364fbc6","a7fb74a92c7f91e6dc313f54a1531e230ea1501b1378b90fa2664c416b48ad85",{"version":"a05c881c282840081bccfcd368a60004e81eab50525c999b838290c8a73d3a9b","impliedFormat":99},{"version":"0a194573bee94360f7dc4f228ec698ca36d9d55fcd9659166c05100d2933f037","impliedFormat":99},{"version":"f574005f93ba6df13c8e7950960f3cbc8ff96ea5a159f6dfdc6ccee6618db278","signature":"e477bcf083ccb3549c1f08da9610971ec88fb9e9b07bcb8408beaec5f8dad0e9"},"5256d6adaeecbce1e31d8d6b781e9044fc779eb3e17e30c31cf6320b74e36bc7",{"version":"96176875fb0dbf4f82c2b3bb03cafd4a3f0ded35a43f6a9275ee94430e5f9265","signature":"affbb5269684e7257731eaef3889d49f22d03363f20eb46bed6411b026bb58b4"},"33cd6bb84b2d5d39889b07f61dc9eb60c4bcd9e2e76c06ffe313b85d15bd1b6b",{"version":"26477c9d175efbcc9b6b7ebee44dd6165b5c4a9f10c38b034232e81078eb393e","signature":"641eec4120e6dfb988024ed1af4d9988e965525f0111a7f47e5a75174a7dad36"},"59187ceccc662db7542977231f26587680b0d77054e624dc60dc9f1225f7c976","027a8bf04b240c4cbcab5b92d463f004b7fd5a39c35434cb67612431a7c4e3d2","37b5397f2909e37745c4e7e8ae128e7c49c8078f654dfecbf7da3dbae8c6757b","5be513fdcee238c97a73e43b470191a34ec9046a7a9ab0972a0510c94a52c610","0313348e7c8535e06013f3bb3e6a3aaa8a180d9177a676ae61e6514166f37e92","745d68ed9f0f43837172ff75063ac1a3c024d04ef858127d101edbfe2085869e",{"version":"9fde3ad17f5cccab8023211ad238ecf72cea80579a6f2f10bd0684139504e288","signature":"e42bdc6dbb997ece4a2e16bfc7b0c79f6b3492b6e4aed0322c8e7ce1b7c96772"},"446726fdc5923c03235f17bf31d922e61815dac46537fc9decd7af44ac55db93","e3c202cb2628ad12d09e56f0335d98ecac10719e505550e4c079a00cb0be2c78","36d3336630f6e2ecf68217819192c7036fa05da7de301e7f5031b0c82ec2cbd3","f585c3a39aa352e9145a047ff190cac597871fbaaa4d047ae7eecd24c6f779da","7a0e0a01b0e254ad00f1995cfe016ab16e843ab6879a1e4964d96489f6319867","48ffc2182e3d2aac2f58d212f21f32d5a444c192befeb0d2ad91e6aab63dfce7",{"version":"aac2774543db3336a0ab58c07c83c20df151bb3d2d505f3475c0b850a1914336","signature":"41ede801a7bc029b66f0d0c88bba6a1d76b8adda85b9ea2cfefcd2a3a02ccbf4"},"83e669460d01d13d0b767bc4151f46da04b5f851a987dfac805cb3d8ecc8c09a","e6e6dbfd4689c7c478777fab62eb37b82310813477ec0a0caae2d4bab5d854d4","05cd2e51c208001a8364a166b238b610b41293a6cf50510ebc924151f8c3614d","1d4e36f1d4feea491a3538f4b35606c7d0c9abe24224568b3241650148d1a3c3","476f616b0b43c845d736b348859acc7e1b5d131318065ae503a277f041be4556","59b7dde9d576984f20df44c3485d724c0e690ebe15c793d840449ce9063aab59","b30a2120803392b09f55f250cd30707bb7105d3d239bd53e0ae36b7693e41eea","56ceb07b796c9095b67e97cf5e1f72b910bd397bfc6cac615ad82327610b64df","00dcac00c8008e7db06f44961dd777a2953b48d983e1c36cd7105e48c2d1ac09","15accd36dc24b3cf24e9cd2e4834281e9ba3545620d822a93df59ade2dfcdb88","f58d1523fad558e2b04cfa26e3b9339a04b0fc4b3d1b690e722300c0d368e0e5","86e243c02b9d0496ceabcc650db8f51a14d3b1eade89e50ba2a417cf691d687d","f0b42a459652bc0d235f19c4489b4ef1db0e78f4b4d20405060b2cf1916e236c","1ed3aa08e8209049a1a40aa84e3001b50c2039f2d52e5584f266100417fd6fa7","4148f61aa486dca56cccc95a345df82e9c3022817ad8734432b4a075566dc157","d9bcd79d39e37836f862651246f0db260f1c8033f0a22b470a195172f32277b1","031237bb7909a2c1d7e2132ab4d601037bb92472cfc605c48717f8f64252931c","675644f2a1696e3ef3a3b349cfc86099f70945d0d5e6c7381730c9fc78e76214","9618d5aaa3c40a109a27602a727cbaba343f31fd4a46d4bf90649f31d16da79f","7fdc86609b50a57a7a762f6fda5ed67ebfee870a4d4a6a58d1176964a91d3cc8","5c95a028d930e97161feaaa9647696b597c8077fd06f071c4e309591d296a590","cd4cfffc2e3094df36ddb4171a210466baa4a9b30271032f36caf6baf128eb3c","c28b18587cad364d1d25fd43216f27bb2aca353e4ef42a550555c36a8ad54f94","f51a502aba0d486a7379c1bfc76045e2abd4763dc18b7fc25b3a1b46e364fe13","c855ee6bbbe9894ba1306c8f8ba54381a1c71eac0b9ffeca2e06798294137aa6","b5505225d857281e0cac9c65675ad139590c39d86f3768dc514dcbfd2a837c06",{"version":"0e2a4d62c0857790285228e4f83a9569e21fd6d8b6c439e7a5f80f55d7cf239f","signature":"438b66062aeac8fe7aadbd67f53a6d0881b58e027302ab903c813cc0f1c7ccc0"},"0ad03d6dd6e6e6d5263bb5bbd118ae7ae8fdaf9aadccd723a7e613d211375bb5","c1767283d26f4329611e3e2a719cf3e28fe49bd4abba301931597745ea02bfab","ae583dc36da710bdd99a1a23ec5c7f2fdc1f2ad5eabf3c9a44fdbed10617ea2f","2fe8eebe46d071fef40419b80a54c1b1af9ef7800f96b5ad260dd61e3f17b80f","896bd332c7db8ddac8fd803c8b9d14914a15fe731e12785b4a39a5fa62564598","f5a5409d1c4ab7bcca8cd92daae06bbafb66764f5bbe963299d2c749b8ebaef9","1a523eca920ad119ef7b2693e6ac883023d1ac929d2f7653f2986768fe0ee6d9","b33cc7d51367517dbb5930c68933305ea75a5235ac925fe5d9a39e3a07dea151","91e07bbe61bab94c5f805402ad22dcb1775ed820251538560eb59261c8877c6d",{"version":"b286364897c372b7c7e0ae3a7a3771eb31a9d0b98e105bd379caf5311b1bf2b5","signature":"163416e040a4944c5c1ffce98c67ba359351ac75663c29bf7bb8eda0e7c2c155"},"5139877967bc28478c6e53b4cfb8ae5318d0366f967eb56959d74f036c955834","34c8d5f3b9db81ae33428580067ddcfbd89ccb113dd5bdb604211561459a2394","22cfc1ec2fc45b90890ab5b4127621c3200aea29af2d41b711eb6a5f72c2e96c","c119f09fa867a573b6101f7fc65e127e1d2f7669be613d62525081b25c961124","fdeedec115606e33ab79a8196c5b7705bcdd091d741236bdb2b43cde7648cc7e","141b42775bedb1e63385fc27b390fd38087df58c7899bc5f35a8f7258df3fa6d","aa716496989daf5a9abc79a3989a00e2b63c2b41575c5d1ecd2a11fbd77e4c4b","2fde1387229f6941b8bcca4fe3112dcafb0294bf556ef21fa3d80b8c4959982e","315b09bfd92ada8e933af5d21b3e65669a0948e5d64bd306241e429ca260b1a8","0711cfe30304cbc28585a819a9d3ec99a6c6d6844e60543278ef9a5a35aa038e","2350c47669801c572195ce8de27abf4b3c442827f34b4c2d5e1c36aa8d7f990e","f64fae237b37a90043c07453fcf5889f5da0752f00d95c3b083b5bb0d7f13ad5","f248cb20419aa6a8128da3d3e2a25d4c9edf948d25c41e923b4d0936628c1148","9717aa7386a68166a91a86537f47b0ad2b2ee0b50a240c2f6c466276abdc8ac7","bbebfc9f9630391081e00cb21c916c199109c59635433bc1c75c2b0e7311091b","be7851a4fd46aac71a0bc11d7b329383203398bac9cc49e296a16d261a0d8b0b",{"version":"358cfaac981d712fc9308e0b61d90ac55c97abc5acbb6425720841fa5e7053cb","signature":"4216bec7075a94d7a1f6f82b38de1c00c63da20f756eb3002ec9b634e38db69a"},"43ed026bedc8afb7381e56c4df924cdc6f37a86ee24cdf5410301684c5a9f7bf","7ed80a9a120cc9a084b462ef03925a32909885c1ab501e201763e9c1fa35a4ff","eb400b99afbcf80861af1cdd1b335679bc7689ec817261e0f9b89abc03aad067","08ea2d58c52a98ec2f30224efc729d005270af00653890420792cfc049433800","2df0d4122adf580f9df32db9fae9eaf1c3d64d37b957975a6c784550f7aae8e8","c2d499016403fa14819d084bcc0291f38028a99e00804a36595657e8da319207","1b44b73a52fb14bef336f7bffbb476e5d100799005cb95d672e0614c811e1710","826a3b7c74598194ffefc333555a700ad02e0402bf8dab8ca1f3e62450df712a","eb3a12497799ede4b21d055cd3c6cb093cce0e47d2c3be488ba98705c50dfb85","99a2d13091797caa304deb0fcd9bdcb72470d24cff206e4c988822a5d4d7cc37","e63171d7f1841184d47a7cbfe1375bda37b7248479bf69ee0c0e0a49bde7371c","2016a8c4097666cfdf38cc4e0a989c041884ae14b537d3731a0d5fd3e7460a7d","585751d4c4758c91a7701f88c4650907f382e1326aa0b404d5853775451779a1","dce2ca32f0cf30a80923cd6832789c9a7c020a1c7064f5d5daaab563baf3acc7","1ffbd97eafc53b27a4f22b5b27510c12187a4c404025b6cf4da95ce0f47fb0cd","d5573a20c234523b24bb539b3770fea7dfe95246fdbca15a8221c7f7ea1df7d3","8de89e6f6c9e7ae46e5e63a085eb317d027d86ab4eb0615be8cb15ff7a5a59da","c3823427af7cd149e4cc8233a564b21a07bf46f2ab8c340aea42bfd76f9b99b4","0fe9d7c6be7ed450588f721955338c897f3eca9fd3fd0342c6a2c45c79ba7871","388ebc4293b2252fed437a6699e4e34b6e4aaecd3c3252e57eae034f0960df01","c91c34ab37711bb3e73f822707b34fcbbf598e2befa4bb861d8db344397e5bbf","e1f82b6967e6cf237dec397e816f9103507589ae934ad1f1c49837c92640a4ee","e2f2c4716c3b58ebb3d9c2e22941c3771af715846f3d205cbced1a932b0eebba","419eaa14de545c167e681979c48ab7acedc953bfcbd2e1667f43bde05938efd8","e3e6090945e13f871ec15d7d6c1dd8cee527b6e449df7bd50a416e48870e856b","8fbd5f90189b99ca939aa85be5ca874b4ed2f57908f343fda4c2488bf7318151","ff79afe21ff2339cbf4fb3a265b6325ae4f827ad9250c1bb4bfed429be958cd6","01c6f7d855c36b1f0664115be970747dd46d1d6e323e7cdc3ccb44f19d99640c","148addaad1a3d9cce465eeaac99f9e6a3cefa9912386895b7815443a787462fe","99d590a267d13093f55a5c0feb09230c93aedd7fb6e03fd9b3ace7b67eb8176d","122d46ddea06d8e1c25471afe40cc2cf8300c98db38001ff804c052b92519d2f","589f3770cb26258fa94becfab67970fb6d5a06ced051d2b70ef9ccaf5c9202a6","b7613e1d0e79c7152b00cd876e4e1677809c6d4a485c2158e986ba97fd9151d1","3074ab3352cb7632c431825ddf31f55a13845f2b4f8f6f3cbfb3dee03cbd27e1","f11708dd9662c883928a7c2aaccdc60cdaad3b653de1a8c298223f11c1d2889a","a528c26f64d624a55e05fdae3a420463aa37c424a83d9b909f96b2176d5ad55c","0f7fae431d5af20e2c1be8eed96ce012572f178583236aebd76407679df56a4f","dcadf215d6988dfd69c38b42488c6174bf8b0d273eca7b050a3908351f759e1b","097875ee98d714cba129fb130ce771eff3210042cfe7045ed9cf07d413e4ba45","90a4a4f037ca935b4a1b25f6df355fecdcaf53d8bab26e9891881ef539171215","f08d8f89361e2a522cf51639664e033a99678dfa4d43182cd35592a911e0c32c","c6f8a4cc8dbffba376c09a785337c1733dc961b47c446cec7caed8ccf39e345e","587785ed74663d3ab38b7e75e687f1d6602bdefbd703d4baa04edb797fb1c304","66975b612ba293b4b0aa59d05720e97673adbfa1abf6db3a43f6b73ec4c32f18","bcecaadd421d9c5771868ebe82e45d2ec86531a02d75677dae0ce8d0928f3c30","f6f2f622352c0885492dba743041784fdad278641828d94b27a66e8c4b819ce7","b9498910b03dbdf5dc9a45312671b4d0c99a7285fd5e83b44c4ba7cf0ba7e942","1ee0dd30398fadad4ed27c57b79f3e0245944a0a6e94ba6832dc2eb7ddb56318","917fe05d5d1f2b964c4173fb0fae04af380f5bcb7f52ee29e0e50d1b6bfa6cb4","9b602e311c51f9f1b57f8b87d90a6151b07334b3249b4e5842b786f426f9a57d","a9b638fdce5004e70f05e000cd3898e14f6769e0caf5d0ad0b83376a674aeb40","addf2c96c3efb59a3b3b3a26223768e6c99b603b1a5c0f769f219882cd2557b4","3223eafa774dfc585507d334bd1dd3de77b46919124f6ff9ff0acbf969102452","6e3628a1499e718142b59214e0d2fad8a619ae93596562d8dde2276cb8e372c0","f471c3b5490f6d744b3bfa46b3e8732fd40743c058340e274367cb44269e903f","08a2024c4d9700154b4de45792eb832b05d874a6997b490e73760eb1f5382130","7c948b5863b1a76dad73028bd4c0cc146c398b75bc4f1cfb42ac5b98945483a8","f1f4e6583847771cef9564d61d7819eaf753de045cf659c4ef4e3916deb374d9","4291a76a91cb6e8ef1172031522f95e93ac0fdae479ad3d05dbc66d89def8aed","16242e97185689dade77cae96e778eea6891f8d3f798eae2d0e5553c66e5171d","7f7aa5ad0dacdbfb75108e3127c6026b172594865247a5c31244a87235191902","b3b5c28fb469e9743e17ab8f44ea30ab93357903f3b4c3ec0999c59432e9e68a","cfa07231bda20be58f4a3a84a7b51ccdd3b9f3a5251e52550cb8e82e32c4cfe4","281fdd84f7b048a7a4078c4a74301223845800d324d8e62d4a9044fe3da0ff67","8332be7bbf44157b94805a6c7f9f4bd1c922e67b900e3742f21636623d379daa","29e60ed487e27b7e0c1fa51834ffc7d90d76564abaca61257896c7c15b3382d4","17d6c1d968a9bebd0ffd0f9ff4dcf19200cbef3c9f9692a24f114c753fdbe502","581ede6f24fd40f20c992490e5c8a9611ef61bb80ad26280fe48abf56d8c440f","09760806ad220b005afbd0699f096cfe2ede34666a58bca2875ddf045141590a","9aad7c6301ef2749a39fc5384eb5e02272a2db57a0539c07c6f3d3b5a2a1623f","4939a9068d484ed1929065303ce308ac6b4e39e3be3e58285bca20cdfb5e5017","51ecb0ba75826e3d5f2d8d538fce586618141f7f14dea124f2e35da9af06f05a","d78864b313d7504f71eee06d3666a2f5e014e182620321ea18e167030d4fcf05","471746d88205c13c8734b8fb09c06dc499615b82c2ad72628f9f769b2f5e189f","5ecec188191a58dddeb0cde7151fe90c96fe292a59a6558771c667a8060232e6","20acdf900d914e2d4e7aa9fb89ceb682c52264381fcb235abbd87b0261c1df0d","5904758c476ccbe24fb00788d2716786e5dc2c81243d49ddc0a67ed1fc53dee2","e88388e613dae79e6fb936f7629d2b7b6764c7e293a28eb20fff2b511ab3eca8","e6fb3986094850e5a7105310c63ff3845a0c7b99b5975ec9a8ff35ee40e2be0d","a4cc6e5535d3f3f4b8ba2524729e1017189046519221a942e4256ad7017fbbe3","69953ec0cf239584711a478fd5d1483f851de10d536bae67278b72962d9b33f3","f634d26b30690090636b85383c7bfe9c9ef00a2ca967ee7a424d652499d553e6","aef74af224d31a9fbd3cddf5693e4e124e7f5bb7f530e15fb87ade2b7f77519b","4252de32758f882f6732382b60de29b075738673bf24ab61eb371a328cedb085","155cc1103797b4a6828d09e1be524db212448d9f2fde92e24269ec53c471d046","eb28f4f85e70e6ce17f3ff79c92cf390675694aa044e02781024cce5ffdfff78","62ad9db86225993a0d7bf02c33e153bf94ab8cbe61b3efe076300fb0a533189d","e18fd5b1a9bc0c54705996de05a3ac4b29423c1f19523f3dea35f1423e139da9","554235b01dbde6c667910df94354f370a9a5b7ed91c44e708706645ed91591ad","5436bb776c891e69fa6ac2f930443537d96153d9f0592fe6af6d6e5298796815","11cd11d9d48844d35a0436c3c43e9333b1784304703cc5e32680cee6c1fa2304","fc64cd7302a58f8ccae6bc3927b3ef3f3817213055fdb1e5ff3aa133a43ec747","c4073ba907840da83d7cbbb12e67207ec55f23a29056358279c8e0b7b72bea81","d56d4eac4da020ec2acdf3cbc876c330d58d5dbe3549842ca84a2e50f125c319","6cbf58e55c62a5144ff36ee7bb05793e7694bb447f1f13dbeb75c97f7fb11a8b","20ad0d76a72973272e429545c2edc8794749e9f988e33fdc8701dbabf544b50e","f079562a3da16c258e574add2b7e9a283aec3f8c6a4b4608810581d2a6dbd14d","130826b398eb7a047045d263903551b5dad6594c31c1f7da1b51c75f535b9eb7","990d72e294e99ba37a23e2597d04ea37a8b02bfa945b75044c724eff22d44dc6","1b88b618d06d61b9f2b06b06801e47d2489de79122a522e8ff89e8329753171c","442e6630e404df002b25075bd8aabd2a549112343bd522b78f73d3b8a57b966c","aabd977cf84fda4b50cc84c099e603f55ef760bb8331e43dab17b0e110178e7c","98dc33571f39c9da83eb8a6d930ce3d7f4bd5e8c329ad3ba587680fcd16d8b4d","9c03550603a7fb158315f81b418b71d242b508fca2ca1b81a78eadc707c6b44c","b5b171509f481d72f4aafa56067662cf8f3ba591d21b608b41914623577ce03a","642986963e5ec17669c5c7ec001e98e83dc8cc472c5166d05728cf5b47459994","bc5a1ea4f72a7f5cf93d2f9a10752e5e26274494d4d2c6865035e1779d055e51","fad2681f1b4683466b5d722ef9499a678f381c7d48c1faff4da69632375ddc2d","b950fb70d8cfe9c356899d4e7f21d89ba98f36b8d9fa46233dc0993f7563dd77","b29f3507be5ea85f48c235fc905c8a724112108adbfd4228560edd75025591ab","c465500aba2318e48eac827a3d45dcb6f85e6ac9c0050b343c2b1671d342546f","85c25a96463b7d346b1f1a21bbeac324cfc019da05d0177f6936def6a875a3b3","6fcc63ab9db65752af393d5dc33cad204147b839ac8b043f292dc33e96fbf0aa","f25cfbbdc90ff991ea2aa70bf38ee0fd7c7a08256c1dae6944bcef90f0a7a211","cfb67cbf7b84dbb7f9932565bb75fbe827500f5951b084a764444be1b2c502a7","c06af510d1e22a9ff0cb51e0fc769af4b638cf51f9b97f780cc23845102244bb","100ee506c3076d8d7064aa65a5c8cf251dd32556c5940188b1d4b348c8ed02aa","6768a9dae80961fe8420a2d0104cfcf18d4db9f05ec8bb7bd3ba96017c1ddaed","f1784c496d5fff1639a556f0b82e317b75dac455a02bd9dbf9624ec495f8c020","6dd99d8afad8939e29cdebfe352da4eb818acd08f105a4eedf8bf25415a768e4","7f2728fbdcb40e72a34540b6f24e368ce40c38c845d7ea20bcab1eec5924d635","734deba9525c5480d33973df52a78a7d8808bf01980e7b293ccd0746b8e50626","c3292c0cbfd9d1930d0f5e9a37ba62fc2e1f50a733f1ca32c5d345daba886db5","3f0cfa99056865fae95258191ccf7089a0155dd818e26eed5f5934b2e79d95ae","85a1064688bef3c51b7fbb0f397fa1e2b5f635edd10a48a701fc06ebb97b29c3","4e9d607650b1473d6630ade4649a30fdbd8bf3e2d17babe3fd5199071018cc57","49f07653643598fdb4319f42ca1aa2826e4385a262848c71c94e00229ab45815","e45ba7be15815b7a8076f0bd7759af6d395297b42df1eb486cbfd2b6bdf1c1c9","89dc80039917feb815c997011a78e34b7c2d5920cd13cf65b48dcbdf739b2567","0fc5c8afe40c38b2e36228ce29e8f29885d05d9c06e4bbe08b4aac22575aab4d","2adad3f672b29cb7afb4883ab0558309d37e1d0b75fe4bcc2f6a820205b73e79","b1318dbb970a2d5c696c7700d6f70e8d64147362241918e6ab6dabf52f9b600e","0bba734b6d5078363f87d6c14d10cd176187fac144abac232c815ed6384810ec","fd409b81aec1f3676545776653d1884aad594513e6735745bbac7e7e1f3ac627","0e55b64934974475b5c53c1452e075606a030047ee3ecb1e089a164835344e29","49bddd5a0e9d2b19538363cf45ffd1bd111776705aa26f0b37355e1301fcf816","80ed17cd108744069a7020ad2a6bd59997e3ce9a2305034b466ae9ead3d878a4","20ae8389fdf0fd1e422a54ef489a3f043b4b8ee05f1069ef7e30c14abccc0fb0","099985066e71227a0ee189d8495c6207a0be5cfd7aa1ec8bd099da0761988d68","4b6a8e536703485571838a333647291c294fdae63f71068df974419f560b5359","5ed029eebfa5244ffae0bdc40f3ead055120e28f33f0e6cd66627baf010f0f9f","158664f3c2f633ff0a75b150a471e8897f03aab8d8f3f9a703b518b69e25196a","4d2a3aa7b767dec09b347809cb1c5d704dbc0bada04f724231ef1c8640e3b474","ec7c10c703842073e2ef2722d5edd12f13b8417d67f9cf2732853d8940bdf722","fa0632a6ad0348e0e518807beb7092c5709cff5573b807941fcd7972d9934e48","267a8bedfaf44d729cf1b286f547fff9bfe475e348b780a07d6163ee2f759c69","29deadd1ff7115d48e3b890e15b3d3a8bb95898d093b11e67ff39559c4b133fd","aabcf5be12bfed7b8b335938712b6d9e095a2777bb322d00b6938d620454804e","c8054eba8eb840070d7c0a1dc26e88414c4e08fc51d12e5557d2018d2800d0de","3a4b0fd55f0362b84df5dd13c8fbd8eb7e105005f5a5571d94167e6e5160a7c0","3d4de99e1bd0f0cc3ffe2cc7071d1e039d0cba13f59629bba9612d41e0dec8a4","deaf3b7914b43ba6054a7974dafed3d4639bbe3eb0dff506350f37a0d3fc15c9","ad565acfcac43ed4620d9af21feb0ea6c6a7b563bce15f621cc1140edb73ed27","b353d9e7f76ae53a98e1b64977fd76542d72b1fb0078f8b1de886a648d9db5ab","dc5b9b8161bf159767caa7ad7435f8b716193c08573158c5de017da34cd5df1e","ce3a80b917f925f1f1bb6a6f1b3b4b5c8816e003c9658adcf182d8c97a3fa308","8a14079ff6a58a3cc7786ae676863c2ac31f28556f3e70ae7859305607a844b7","6fb92439c457ceb3d27094b784fdc9defaf8f2be7e44c3b2316c0cbea90065a5","46968be019fa65280f9d78c41df0e8786007f48d84ce7a31883d80de07244d08","f510692cee9a7480c079e56efaef2a2aaa5e29ddd00d2ffcf185366aa0de2062","376a145081b961e1f370be3e42dff6108607f5a6b436202e8642b05c5943036a","5fd1baa2ae6f2960c52adb8f252cd1a33bb7a426dc0593fd30cea081bee47a45","c9f09c1fedc1d084325517fc7340ef0c386520774b176a599c02e836095305eb","a0058419274c2a50705700d8249668770abc007cee59554d7cc7b51356229c30","b4a1d4c0ac1f9510bbf205caa9fd69cc4507c511a09d0293cb644c73e2509af6","8f7a52f895dcef5023870b64e893e8297f0cfbfaf66b8cdec388bf4b57e66628","8dbf554b8500f4b7a0f09219f57b97d6aa180f9ec88d3b951619b6ae340a6905","dd33c22230875895dc458dd94a2381e41e8eaffefde920fdfe1eb3de7ad62a4b","83befd491ecd89d5d89da1825798b59b90149c813576da1e291f4ad8ba8f2037","ff28e4b4219962f98d43361d7296cfb862e9f1b9359b20cdf961acec88959ba4","4ccfc4d1488f75143254fea15214c96d1a0f5bc5280a261002090d5a0d54f0ea","c3473364ed2e6eb5b44a55d4374d9aab34b450779805e2414c02ce34f581cf44","7c34b3d737354e2265633f5a0302c2bb2a70ef88d56ecc19fbb2980c796ce513","4a843d4b5359e6a0aff559b68e3a00adf10e6bc6c5127c553d784529eb81b3ab","e4ddff1e06385b3048cd878a83014a0fabf91f86d0f792e4b33ccfdb8d2ae392","755a17a2e39dd7b0def937dbb5eef202fb7d59938c835621997e7410406d0bf1","d795a52ec7711b990534073aced0cb9e25271570448fca22478fbb686e7c13b0","e1a81a25334124c02d361d21fee18970052a30ad3ce4e9ee8f5a00ca0ce2a82e","3b70b377ca5f147a4c5413a8d745bf9d92420240f08e1caf6e73b069617b3e35","bf6b27f5632662bf8dcdb75afd0c35b540568d4e7de64fe908bb64b8deddf7b9","004df8101d5279896d10e944a3f5d22d7a2ba1d3e7067a962013b20651bce1c9","d6a85351a28afddd1b0ca64961ed9e2858f4fd82c0ad4fe2acfc58429b8cf87f","f3bd033ff0e9cd813c932e836ab32d4f329055bce983330dc1401db1c3d85494","44ac961f89a7a19807c1a13b1e8397e707aca9cd66d7fa2c4ede87b221dbf308","aaa30ac0412aae3cad701463e8b5bf17b7f0b47d1fffe648dc758149853d56bc","aa29477df8de5a51a981adc8b6202d91a7b9a29ac808ab8c193791c3210cd28d","83ec34f5d2ab8eee2f4b9a743c35851dab8d782458dde182601e763dffa4b7e3","d81b3f12bf9a225184a7bf07ee43952bc88fc1d226151ddede99259d66d69c6a","61374f68966a72c152c5c135b2b7cfb2bfc653e34b8ef2cd541afb44fbc16d03","56a7a8a8a1c9d2d30dc17948034fb1b2710effedfed3edbb6366c6b270d87b34","ec7a0a6409ec452357c8e3dfe828b778a055085f5478413a142ba24e1e018609","c8fd92138124e2df3fc249f6a150edb6b4a7f91044bbd9733a550036498b7a4a","e63e35d113b492ec823501f239ce3439da27a968591ba2c386b6c03ad8a10a9b","cc9ca96106e0565b5c34adfbcf4b9903b541971b78b6a1faf8213740db81c6c8","50fc90d26eeb0d75259bdd66ee8a4b4e9190d93eb14f429660fea6493bb2a552","9992eee8e8a71b37ac73bc53768f559eba2b26afec17b67d444ca044122011b5","26abd68478a0f9df85fde4782f4bd0a08dce86be70ace423a769fe37b0f50c93","f7e311eea0dc038ff34740a641853f508831300e53887bea6761ed63a9287c4d","814a20a382926d199821a569d2cc9eda1490ac3b58d63b910cec273e48add2d3","4a2c7d09da4355e0347802867211796cd146395e33fb0ab382f2def1772e9471","820b7709f8ae61c5c0c5d6c4a9b24ebb08462976d8b6f961a7f65dd03c36efbf","69e9c9d64be19a4d2dac0ae1410089194c44aac7e41aff080ea4c229e22e67a7","836178d2d97f9e367ed14c8f290cd1e8854e34048ea3229c0915ea6754373b96","30fd0e0a73a79c200014d9f133e228b1113fdbdb29f9b01054ce8778461180e7","7da54696cb78e2aa7b45002f03c65af600bc8690022707699447b7d8900aa66e","aff10406d7d7bcaadfe1ee69378b7307c91997271a9c8d32d8b6c5126314e639","1cdc4d193961e37a44f64e4d40215b77ed1de8f073de1a64b1e8c7a69ac9a1ec","5fa061ab509ad663eeee5fdd9ee4b7ff7163eca2ead0eb35773d1922be912645","a1e109aaecc9b9321a2baaa54e4206351e5dc3c7dbe4db032dca57b7ca0e13b8","7a8f1a8695f2fac3aabeb00885af7044ae7e2fde2586fede260069a62529cdb1","c76b2c566d4923dc8730243f0ba1de3b7dbc1f1abdfb3c5deb8a85de27e29aad","e3e5b641f665c5f478404ef9d89bdd647e5930e0e2e1c73197f8203763193cc4","dc50191bfa137f013cc8179acf14243dda829de8ff849da2017b1e7182165b85","774f859ae5f04cc32a9b46cea69ee2fbc83ea6a9254ba9060ea24cfac12e9f15","e44f60a3398d08415e7979df2eb0561c0c7bdde8b9040ebce2f30de42ed367e1","2b9ec53a882be4eb56cb64a18029a4a51030615c2940d3a945d605a8c9ffc299","145d8386b6d1f0d020c64cadb6cdc355b509873405c195a6f67a13238b9637fe","1157c02de068dd715da09271897fb7336540a657c9a4f52fe104060f4be1a45b","78dcc3ab383c63fb57bc24e2b69276c4318023c93bb9952c2faa77218685a6cf","8874f780f356fb9828153f32f7f7eab4767d20e8d90bda7069581736dbba4bdd","2dc8c31657baffb784367666c7f340c744b96ff7feab92b8ba8b9838fb0a4162","89469f6519ec85888b0af12bd9ff1cd4df7ceca9c4c5da870af672eae5d3089e","0fd26b1da257ab1fd096068ae64fe16054c86451ffa94472781a718bae20eb99","febb47d7b41e6d77b4975ec1438ceb2a5af2a750d1617403d9013d9c58460c71","7221f5a57952dd327fce6982124ebf6fba280e570d5ca236ad6b0271de63936a","c0fd09a1f5d1f23e6d7244b91d693bbe582bcda370facd4c5bcb3db365c8c6af","9527d5cb1ccab9bd608e097a283251a88453659b230522d6ba7d103f3fca4b6c","7c2c2d49c0a8a84686726bcebd456b7ff70add1974a08a9580f23b202416b283","5191439e07d3edf737e7fe86b5b9dc8736bbcbc48752ea83e954ff05a3b35b40","89b70003ce845af535974d01a96fbf3780d414330787241cb9f78d31f95178af","579498dcb0f1f15c4c271f4fdd8e72ce2e232d0695e0ca26f36aeff96d3bad60","da7dd23a2e0d636d4687cfc6472149fd800498678bf27797bbdf8e5af2f25986","800cd9b17ef9b53604c99445ea6a2c4e3c9e3b373b159f24d0afc04a415c4187","6330421887b0e0e95f2ac857fec31bdcc0226e3785389c563eb78c64ae17d725","8e3142b668c108ec22a31e35006fb3737691aafa556dc0fba8ea5aa2006cb5e1","87e0f6de79fc970d46e2d8d7b2f4a2a59ca78747bef4af214dbbd699d296904a","0eb7cfe67e21328c286ffeb315094b145fb2bdafff37557720238842721e351d","4fc782473f883464b4c7a48d2c800a65ff61029e37f89a3b1f2d232996a3b5c5","04cb1c2ad19778e9989da18f99de21e24933c0019ebd221985207f18aac7683a","7dad1792be5d143223e5f7a50fc6b76812cf6b662032edfbcca8f03f94109ad4","3661677ddf9b049ab448b1f4502dfebeba9bed01e8eaa112c50a5de28a9e62e4","026b333e46abfc3be4911bd31ad113ed8c238b9a17ae639a0bb0363b9e39fbdb","6f2800a6d2d8cd2ed82e161a9314b5a4b7c81947a13cb47865be0e150f2976d5","5233a1f978b598991830190f660eb0626224cf481bc4adae4da914862e645da6","58e0b49e917ec06c373843d4d76aca3b0823b1a07c2115bdc6e3e64b75bc1b55","874d26b139d9bf4ede02da936eee1eef8f248053029514951774ddfceb797019","684fbd91147af71f224d5133317964200d192dde51fa5bb8b125a258106b3b87","02229cd903314388c5b3618026420bfbe196171121159c2fd3a79955fe996fc6","d57b151a0ea91d00ec04559fc222a6bdf6b1a44c1709e5ee9229962f985c1651","14f73af0fbeeae1767fb053dc366e5ed6436b176c20c6a35c00aa8f6b50634a1","16354b330a655b6ebc381d1c6155cfab99062112ecf0e4989ac754b9bdb5c98d","8d2239239e260e545c7d806735d8759a5bc9400c3a88c17e744b5fc62e25ad21","27cfde30486282da8f0fb4f92fc9c070d55472d06ca8c7b013909f9b77ce99ed","4b477611a2bf5deef9b2274d8c1a137dba00440be603266fc54f558f32b7ff08","577223d04f906007af5bd447f67e2d26b51df5c63d1c2c4ad257e2f124160c6b","a4f795e562924809bb16d4ed4c9aa5efd94b9aae1b9cffff755653ab46ee1810","05a9d5064d529595de0399559eef9cef2e63ba2087a9d52e0913020960402989","a48d91f139bd9b04ed7e6c36fb0835953665ff1d2936742dbde8af2a24242653","0d98bd00b8380d4388eace19e4bdd8b5144502457aa683bc13073effcc3d1194","27de051fedc01250b9be37bcfb81edefa28573b643f72cd93c3195dbed3a8042","3faaf6661831b147895de27f93b4245eb7897669aee8032312fcd010d92241b1","db74fa83d87452a0040766de4f511f36f1d44d0cd4d7eb11deb6aa87b4968f45","293f88925969d283056d80baf32f402a496684aad929b82a8b0308439044e665","34b391a011dceb7c57ecd19e09aab99ea9c65612220ef1074a2910397f8d7bd3","ddd896e5e404c755bc7399bdf849dd375e13132e59983c05523ee06ba3bfde16","84dd25c0afdb30344cc092907f1e8c0fc4438be58946ccb3e940226e81679dc7","50c769f7264e100625c05dc6a905918dbbf245b9d001b989b1ec8eb0e94f19f7","8fa7eb2d413a39fe4224254522e5ea61be33d8a65b1eaac93f0f0df06ec854da","509d3c3ba7acb7151588d972067dc6474cb9b7f66b141e6fbdf91d06ed8df0c5","84e609332711f9740c6774aaaf397de7e87d6b279fde0302a2b9bfd9c9e8f0ff","1f4e984fe75b8b7748f697d67f9ede0d6b4384872806d278c7697023ca08a2c6","67af95ab6b07299a76c083200e6cea608831c5e4506924a96df5a9297efb5d81","e7cecc06d766324762497d60224319cc8917b2ddd474925ae5fe9344778affd8","ba1b60bebef8a4f40916671561bd985a89554ab4474049502fc4bfb23c27175c","8f59a23c5f6768f050a2de8686bb976449388ac92fff2390f11b0e64ce45b70d","731fca5648cc1cc7cb98ff57a48845505b024d2830dbaa2b7e990f947f3e866d","3bd2a30b1f8e3b0b2f4181207c0381dd6d04f59177307dcacfdb0d31467c73e0","04d7cf9a1d84a0324cf526b873d82bf87dfce645ac79d83f163c306d1bf9dbf5","12258866560877a6de6da46c8578d21cd2bc4275db2336979e3cb6edc157ece1","03e9d6bdd9e30824f230a41be43a72bd0d21f4325ba6325ccc15a3e06683d2a0","207ee0ae7f832e7b3974ab6a08a18fbde4a7de3b3c09ea61389fba6deb35862f","7ee91429773f5e0289790ad32f5b0a057f1549e11bc3449d6542aab5d9da61af","92ae92650c2478efbd09d348eebec52f69958510bc95417eebe950247e57745e","56aabe6ed921f5292e0192506ad4275beb6e08c701ca4dbc14ce94ec67ac801e","8d970bc72c8b259c59a5d1be746004927c8c3614f88d3dab72acd23314d694da","52ef9b9f5906dd72f016bf05933c56b3382bcb5f8f2dda161e8718c24f50e7f5","c47b36d73986de72151dd7dcb17282c79224c05af4dc48d1aca9f0df15625be3","5eace8be794ecd62b2ef846f637e0fb25310960a8691417deffcada4c1e827ec","498fbef67bcfbb32209416112490dcc6559fed7ae259789c0dcef43e3343edb6","3738d8ad3822ddbb63961bbffcab50d0b944c8ad21f01e5a707e30d63918994f","1ad3e70642f195a4dce138ea6f6238eb7a1c243d5b9b12837733eacbac8a1281","b7a90cb8013e561c364cb228c7623354e77577d446a421e4fd402c4891962006","1c324bb3c603517e5d92d185b86ad9ebb9672123ef190307a6f42fb2c200dd69","c9cdd6e4e94d71922459e826b072c7171934b701dab6f32b220cac1b4df41d68","8bb808eb6d1316cf1133ed690714987c0ad564517d393a47afceb6a7a0d939f4","1d460f1e2bd8a6f56b4cbbdeb3f9f25d679d5c59ad5048b38a303f90ad5c7707","eaa2d74b1a0d821d7108c03574adceed0e7c28608e49cfd35ca278f58ad88f7a","c62fe7d9aded86a830e36753572f493b45c4da943f61f9a77fdb6f39f845b947","86a557633ad586d3acfd7569f0eadb864b3c5544489d637f2065d5db574d6719","f7132a73b8b7dc313c2ad3becd861b33464a5d7fad78d3d7079b83ad01bbcd62","f7272b2b3362104593a5658071d96c0795e71111b24cb7ac0b3d79c7e2566871","192a024f9ccfa562fad65c4d8cfb8d740dde2a7263332f9b330e1bb8fe97c7be","ad642476835c7a980019b9f011241ff27d8c86612728c50d08f9087b8233e88a","ba7557d10829d0b316a1042d8fa2d715489d1fa97bb78017d1c84cf0c52062b9","1bf55552f99a187e1fbd3e6e427b03b8df054df5d6515f1c67a62a36901d9b54","1c37f9f9bd7c3caa87462bb829414abc580f567e9371fc0d716697f978519c67","7e2c191b9d291c09a229d66dd79a24f4845d135f07b39bd025e77bfc50e3771a","1c37f9f9bd7c3caa87462bb829414abc580f567e9371fc0d716697f978519c67",{"version":"3deed5e2a5f1e7590d44e65a5b61900158a3c38bac9048462d38b1bc8098bb2e","impliedFormat":99},{"version":"d435a43f89ed8794744c59d72ce71e43c1953338303f6be9ef99086faa8591d7","impliedFormat":99},{"version":"e1028394c1cf96d5d057ecc647e31e457b919092f882ed0c7092152b077fed9d","impliedFormat":1},{"version":"f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","impliedFormat":1},{"version":"5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","impliedFormat":1},{"version":"a4f64e674903a21e1594a24c3fc8583f3a587336d17d41ade46aa177a8ab889b","impliedFormat":99},{"version":"b6f69984ffcd00a7cbcef9c931b815e8872c792ed85d9213cb2e2c14c50ca63a","impliedFormat":99},{"version":"2bbc5abe5030aa07a97aabd6d3932ed2e8b7a241cf3923f9f9bf91a0addbe41f","impliedFormat":99},{"version":"1e5e5592594e16bcf9544c065656293374120eb8e78780fb6c582cc710f6db11","impliedFormat":99},{"version":"4abf1e884eecb0bf742510d69d064e33d53ac507991d6c573958356f920c3de4","impliedFormat":99},{"version":"44f1d2dd522c849ca98c4f95b8b2bc84b64408d654f75eb17ec78b8ceb84da11","impliedFormat":99},{"version":"89edc5e1739692904fdf69edcff9e1023d2213e90372ec425b2f17e3aecbaa4a","impliedFormat":99},{"version":"e7d5bcffc98eded65d620bc0b6707c307b79c21d97a5fb8601e8bdf2296026b6","impliedFormat":99},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba481bca06f37d3f2c137ce343c7d5937029b2468f8e26111f3c9d9963d6568d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true,"impliedFormat":1},{"version":"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","impliedFormat":1},{"version":"3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true,"impliedFormat":1},{"version":"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","impliedFormat":1},{"version":"58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","impliedFormat":1},{"version":"641942a78f9063caa5d6b777c99304b7d1dc7328076038c6d94d8a0b81fc95c1","impliedFormat":1},{"version":"1123a83f35cf56c97de746f0a7250012153c61a167e4a61668bf50e558162d14","impliedFormat":1},{"version":"855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e20d899c28ca26a2a7afc98beaa69e63ff7fba0a8bc47b4e3bf3ede5e09e424","impliedFormat":1},{"version":"2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","impliedFormat":1},{"version":"a192fe8ec33f75edbc8d8f3ed79f768dfae11ff5735e7fe52bfa69956e46d78d","impliedFormat":1},{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true,"impliedFormat":1},{"version":"372413016d17d804e1d139418aca0c68e47a83fb6669490857f4b318de8cccb3","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"085f552d005479e2e6a7311cdbbe5d8c55c497b4d19274285df161ee9684cd9c","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"007faacc9268357caa21d24169f3f3f2497af3e9241308df2d89f6e6d9bb3f2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"809821b8a065e3234a55b3a9d7846231ed18d66dd749f2494c66288d890daf7f","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true,"impliedFormat":1},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true,"impliedFormat":1},{"version":"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","impliedFormat":1},{"version":"1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","impliedFormat":1},{"version":"f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7c5e2ea4a9749097c347454805e933844ed207b6eefec6b7cfd418b5f5f7b28","impliedFormat":1},{"version":"b1810689b76fd473bd12cc9ee219f8e62f54a7d08019a235d07424afbf074d25","impliedFormat":1},{"version":"751764bb94219b4ce8f5475dc35d3de2e432fea01a0c9610cd7f69ad05e398c6","impliedFormat":1},{"version":"ee70b8037ecdf0de6c04f35277f253663a536d7e38f1539d270e4e916d225a3f","affectsGlobalScope":true,"impliedFormat":1},{"version":"a660aa95476042d3fdcc1343cf6bb8fdf24772d31712b1db321c5a4dcc325434","impliedFormat":1},{"version":"282f98006ed7fa9bb2cd9bdbe2524595cfc4bcd58a0bb3232e4519f2138df811","impliedFormat":1},{"version":"6222e987b58abfe92597e1273ad7233626285bc2d78409d4a7b113d81a83496b","impliedFormat":1},{"version":"cbe726263ae9a7bf32352380f7e8ab66ee25b3457137e316929269c19e18a2be","impliedFormat":1},{"version":"8b96046bf5fb0a815cba6b0880d9f97b7f3a93cf187e8dcfe8e2792e97f38f87","impliedFormat":99},{"version":"bacf2c84cf448b2cd02c717ad46c3d7fd530e0c91282888c923ad64810a4d511","affectsGlobalScope":true,"impliedFormat":1},{"version":"402e5c534fb2b85fa771170595db3ac0dd532112c8fa44fc23f233bc6967488b","impliedFormat":1},{"version":"52dcc257df5119fb66d864625112ce5033ac51a4c2afe376a0b299d2f7f76e4a","impliedFormat":1},{"version":"e5bab5f871ef708d52d47b3e5d0aa72a08ee7a152f33931d9a60809711a2a9a3","impliedFormat":1},{"version":"e16dc2a81595736024a206c7d5c8a39bfe2e6039208ef29981d0d95434ba8fcf","impliedFormat":1},{"version":"cc4a4903fb698ca1d961d4c10dce658aa3a479faf40509d526f122b044eaf6a4","impliedFormat":1},{"version":"19ee8416e6473ed6c7adb868fa796b5653cf0fa2a337658e677eaa0d134388c3","impliedFormat":1},{"version":"1328ab4e442614b28cdb3d4b414cf68325c0da0dca07287a338d0654b7a00261","impliedFormat":1},{"version":"a039dc21f045919f3cbee2ec13812cc6cc3eebc99dae4be00973230f468d19a6","impliedFormat":1},{"version":"3fbe57af01460e49dcd29df55d6931e1672bc6f1be0fb073d11410bc16f9037d","impliedFormat":1},{"version":"f760be449e8562ec5c09bb5187e8e1eabf3c113c0c58cddda53ef8c69f3e2131","impliedFormat":1},{"version":"44325ed13294fce6ab825b82947bbeed2611db7dad9d9135260192f375e5a189","impliedFormat":1},{"version":"e392e8fb5b514eafc585601c1d781485aa6dd6a320e75daf1064a4c6918a1b45","impliedFormat":1},{"version":"46e4a36e8ddbdfb4e7330e11c81c970dc8b218611df9183d39c41c5f8c653b55","impliedFormat":1},{"version":"370bde134aa8c2abc926d0e99d3a4d5d5dba65c6ee65459137e4f02670cbf841","impliedFormat":1},{"version":"6332f565867cf4a740a70e30f31cefba37ef7cebcf74f22eab8d744fde6d193e","impliedFormat":1},{"version":"2977b7884aedc895a1d0c9c210c7cf3272c29d6959a08a6fa3ff71e0aff08175","impliedFormat":1},{"version":"17f2922d41ddd032830a91371c948cd9ce903b35c95adca72271a54584f19b0b","impliedFormat":1},{"version":"3eed76ede2a1a14d7c9bb0a642041282dcc264811139d3dd275c9fe14efc9840","impliedFormat":1},{"version":"e3cf0611709328b449ec13f8c436712d62003620ce480139fae46ce001c2ee9f","impliedFormat":1},{"version":"8d369483f0c2b9ee388129cfdb6a43bc8112b377e86a41884bd06e19ce04f4c1","impliedFormat":99},{"version":"82e687ebd99518bc63ea04b0c3810fb6e50aa6942decd0ca6f7a56d9b9a212a6","impliedFormat":99},{"version":"7f698624bbbb060ece7c0e51b7236520ebada74b747d7523c7df376453ed6fea","impliedFormat":1},{"version":"8f07f2b6514744ac96e51d7cb8518c0f4de319471237ea10cf688b8d0e9d0225","impliedFormat":1},{"version":"257b83faa134d971c738a6b9e4c47e59bb7b23274719d92197580dd662bfafc3","impliedFormat":99},{"version":"4a27c79c57a6692abb196711f82b8b07a27908c94652148d5469887836390116","impliedFormat":99},{"version":"f42400484f181c2c2d7557c0ed3b8baaace644a9e943511f3d35ac6be6eb5257","impliedFormat":99},{"version":"54b381d36b35df872159a8d3b52e8d852659ee805695a867a388c8ccbf57521b","impliedFormat":99},{"version":"5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","impliedFormat":1},{"version":"c67b4c864ec9dcde25f7ad51b90ae9fe1f6af214dbd063d15db81194fe652223","impliedFormat":99},{"version":"7a4aa00aaf2160278aeae3cf0d2fc6820cf22b86374efa7a00780fbb965923ff","impliedFormat":99},{"version":"66e3ee0a655ff3698be0aef05f7b76ac34c349873e073cde46d43db795b79f04","impliedFormat":99},{"version":"48c411efce1848d1ed55de41d7deb93cbf7c04080912fd87aa517ed25ef42639","affectsGlobalScope":true,"impliedFormat":1},{"version":"28e065b6fb60a04a538b5fbf8c003d7dac3ae9a49eddc357c2a14f2ffe9b3185","affectsGlobalScope":true,"impliedFormat":99},{"version":"fe2d63fcfdde197391b6b70daf7be8c02a60afa90754a5f4a04bdc367f62793d","impliedFormat":99},{"version":"69bf2422313487956e4dacf049f30cb91b34968912058d244cb19e4baa24da97","impliedFormat":99},{"version":"0d87708dafcde5468a130dfe64fac05ecad8328c298a4f0f2bd86603e5fd002e","impliedFormat":99},{"version":"a3f2554ba6726d0da0ffdc15b675b8b3de4aea543deebbbead845680b740a7fd","impliedFormat":99},{"version":"93dda0982b139b27b85dd2924d23e07ee8b4ca36a10be7bdf361163e4ffcc033","impliedFormat":99},{"version":"d7b652822e2a387fd2bcf0b78bcf2b7a9a9e73c4a71c12c5d0bbbb367aea6a87","affectsGlobalScope":true,"impliedFormat":99},{"version":"cb80558784fc93165b64809b3ba66266d10585d838709ebf5e4576f63f9f2929","impliedFormat":99},{"version":"dfa6bb848807bc5e01e84214d4ec13ee8ffe5e1142546dcbb32065783a5db468","impliedFormat":99},{"version":"2f1ffc29f9ba7b005c0c48e6389536a245837264c99041669e0b768cfab6711d","impliedFormat":99},{"version":"b4270f889835e50044bf80e479fef2482edd69daf4b168f9e3ee34cf817ae41a","impliedFormat":99},{"version":"381d27c35f5a5bf6c09dd238ec26fef30a03d12ea84589c621ebc208d7dc8378","affectsGlobalScope":true,"impliedFormat":99},{"version":"ae77d81a5541a8abb938a0efedf9ac4bea36fb3a24cc28cfa11c598863aba571","impliedFormat":1},{"version":"f329dfad7970297cbf07ddc8fce2ad4a24e2a3855917c661922ef86eb24dd1f1","impliedFormat":1},{"version":"841784cfa9046a2b3e453d638ea5c3e53680eb8225a45db1c13813f6ea4095e5","affectsGlobalScope":true,"impliedFormat":1},{"version":"646ef1cff0ec3cf8e96adb1848357788f244b217345944c2be2942a62764b771","impliedFormat":1}],"root":[1000,[1002,1018],[1020,1030],[1866,2058],[2061,2441]],"options":{"allowImportingTsExtensions":true,"jsx":4,"module":99,"noFallthroughCasesInSwitch":true,"noUnusedLocals":true,"noUnusedParameters":true,"skipLibCheck":true,"strict":true,"target":7,"tsBuildInfoFile":"./tsconfig.tsbuildinfo","useDefineForClassFields":true},"referencedMap":[[184,1],[185,1],[186,2],[192,3],[181,4],[182,5],[188,6],[189,6],[183,1],[190,7],[187,8],[191,9],[142,1],[150,10],[160,11],[145,12],[149,13],[148,14],[143,15],[161,16],[172,17],[156,18],[152,18],[153,18],[158,19],[151,1],[154,18],[155,18],[157,4],[147,20],[167,21],[163,22],[164,22],[162,1],[165,23],[166,21],[168,24],[146,1],[159,4],[169,25],[170,25],[144,1],[171,1],[535,26],[536,27],[534,1],[595,1],[598,28],[1864,29],[596,29],[1863,30],[597,1],[1031,31],[1032,31],[1033,31],[1034,31],[1035,31],[1036,31],[1037,31],[1038,31],[1039,31],[1040,31],[1041,31],[1042,31],[1043,31],[1044,31],[1045,31],[1046,31],[1047,31],[1048,31],[1049,31],[1050,31],[1051,31],[1052,31],[1053,31],[1054,31],[1055,31],[1056,31],[1057,31],[1058,31],[1059,31],[1060,31],[1061,31],[1062,31],[1063,31],[1064,31],[1065,31],[1066,31],[1067,31],[1068,31],[1069,31],[1070,31],[1071,31],[1072,31],[1073,31],[1074,31],[1075,31],[1076,31],[1077,31],[1078,31],[1079,31],[1080,31],[1081,31],[1082,31],[1083,31],[1084,31],[1085,31],[1086,31],[1087,31],[1088,31],[1089,31],[1090,31],[1091,31],[1092,31],[1093,31],[1094,31],[1095,31],[1096,31],[1097,31],[1098,31],[1099,31],[1100,31],[1101,31],[1102,31],[1103,31],[1104,31],[1105,31],[1106,31],[1107,31],[1108,31],[1109,31],[1110,31],[1111,31],[1112,31],[1113,31],[1114,31],[1115,31],[1116,31],[1117,31],[1118,31],[1119,31],[1120,31],[1121,31],[1122,31],[1123,31],[1124,31],[1125,31],[1126,31],[1127,31],[1128,31],[1129,31],[1130,31],[1131,31],[1132,31],[1133,31],[1134,31],[1135,31],[1136,31],[1137,31],[1138,31],[1139,31],[1140,31],[1141,31],[1142,31],[1143,31],[1144,31],[1145,31],[1146,31],[1147,31],[1148,31],[1149,31],[1150,31],[1151,31],[1152,31],[1153,31],[1154,31],[1155,31],[1156,31],[1157,31],[1158,31],[1159,31],[1160,31],[1161,31],[1162,31],[1163,31],[1164,31],[1165,31],[1166,31],[1167,31],[1168,31],[1169,31],[1170,31],[1171,31],[1172,31],[1173,31],[1174,31],[1175,31],[1176,31],[1177,31],[1178,31],[1179,31],[1180,31],[1181,31],[1182,31],[1183,31],[1184,31],[1185,31],[1186,31],[1187,31],[1188,31],[1189,31],[1190,31],[1191,31],[1192,31],[1193,31],[1194,31],[1195,31],[1196,31],[1197,31],[1198,31],[1199,31],[1200,31],[1201,31],[1202,31],[1203,31],[1204,31],[1205,31],[1206,31],[1207,31],[1208,31],[1209,31],[1210,31],[1211,31],[1212,31],[1213,31],[1214,31],[1215,31],[1216,31],[1217,31],[1218,31],[1219,31],[1220,31],[1221,31],[1222,31],[1223,31],[1224,31],[1225,31],[1226,31],[1227,31],[1228,31],[1229,31],[1230,31],[1231,31],[1232,31],[1233,31],[1234,31],[1235,31],[1236,31],[1237,31],[1238,31],[1239,31],[1240,31],[1241,31],[1242,31],[1243,31],[1244,31],[1245,31],[1246,31],[1247,31],[1248,31],[1249,31],[1250,31],[1251,31],[1252,31],[1253,31],[1254,31],[1255,31],[1256,31],[1257,31],[1258,31],[1259,31],[1260,31],[1261,31],[1262,31],[1263,31],[1264,31],[1265,31],[1266,31],[1267,31],[1268,31],[1269,31],[1270,31],[1271,31],[1272,31],[1273,31],[1274,31],[1275,31],[1276,31],[1277,31],[1278,31],[1279,31],[1280,31],[1281,31],[1282,31],[1283,31],[1284,31],[1285,31],[1286,31],[1287,31],[1288,31],[1289,31],[1290,31],[1291,31],[1292,31],[1293,31],[1294,31],[1295,31],[1296,31],[1297,31],[1298,31],[1299,31],[1300,31],[1301,31],[1302,31],[1303,31],[1304,31],[1305,31],[1306,31],[1307,31],[1308,31],[1309,31],[1310,31],[1311,31],[1312,31],[1313,31],[1314,31],[1315,31],[1316,31],[1317,31],[1318,31],[1319,31],[1320,31],[1321,31],[1322,31],[1323,31],[1324,31],[1325,31],[1326,31],[1327,31],[1328,31],[1329,31],[1330,31],[1331,31],[1332,31],[1333,31],[1334,31],[1335,31],[1336,31],[1337,31],[1338,31],[1339,31],[1340,31],[1341,31],[1342,31],[1343,31],[1344,31],[1345,31],[1346,31],[1347,31],[1348,31],[1349,31],[1350,31],[1351,31],[1352,31],[1353,31],[1354,31],[1355,31],[1356,31],[1357,31],[1358,31],[1359,31],[1360,31],[1361,31],[1362,31],[1363,31],[1364,31],[1365,31],[1366,31],[1367,31],[1368,31],[1369,31],[1370,31],[1371,31],[1372,31],[1373,31],[1374,31],[1375,31],[1376,31],[1377,31],[1378,31],[1379,31],[1380,31],[1381,31],[1382,31],[1383,31],[1384,31],[1385,31],[1386,31],[1387,31],[1388,31],[1389,31],[1390,31],[1391,31],[1392,31],[1393,31],[1394,31],[1395,31],[1396,31],[1397,31],[1398,31],[1399,31],[1400,31],[1401,31],[1402,31],[1403,31],[1404,31],[1405,31],[1406,31],[1407,31],[1408,31],[1409,31],[1410,31],[1411,31],[1412,31],[1413,31],[1414,31],[1415,31],[1416,31],[1417,31],[1418,31],[1419,31],[1420,31],[1421,31],[1422,31],[1423,31],[1424,31],[1425,31],[1426,31],[1427,31],[1428,31],[1429,31],[1430,31],[1431,31],[1432,31],[1433,31],[1434,31],[1435,31],[1436,31],[1437,31],[1438,31],[1439,31],[1440,31],[1441,31],[1442,31],[1443,31],[1444,31],[1445,31],[1446,31],[1447,31],[1448,31],[1449,31],[1450,31],[1451,31],[1452,31],[1453,31],[1454,31],[1455,31],[1456,31],[1457,31],[1458,31],[1459,31],[1460,31],[1461,31],[1462,31],[1463,31],[1464,31],[1465,31],[1466,31],[1467,31],[1468,31],[1469,31],[1470,31],[1471,31],[1472,31],[1473,31],[1474,31],[1475,31],[1476,31],[1477,31],[1478,31],[1479,31],[1480,31],[1481,31],[1482,31],[1483,31],[1484,31],[1485,31],[1486,31],[1487,31],[1488,31],[1489,31],[1490,31],[1491,31],[1492,31],[1493,31],[1494,31],[1495,31],[1496,31],[1497,31],[1498,31],[1499,31],[1500,31],[1501,31],[1502,31],[1503,31],[1504,31],[1505,31],[1506,31],[1507,31],[1508,31],[1509,31],[1510,31],[1511,31],[1512,31],[1513,31],[1514,31],[1515,31],[1516,31],[1517,31],[1518,31],[1519,31],[1520,31],[1521,31],[1522,31],[1523,31],[1524,31],[1525,31],[1526,31],[1527,31],[1528,31],[1529,31],[1530,31],[1531,31],[1532,31],[1533,31],[1534,31],[1535,31],[1536,31],[1537,31],[1538,31],[1539,31],[1540,31],[1541,31],[1542,31],[1543,31],[1544,31],[1545,31],[1546,31],[1547,31],[1548,31],[1549,31],[1550,31],[1551,31],[1552,31],[1553,31],[1554,31],[1555,31],[1556,31],[1557,31],[1558,31],[1559,31],[1560,31],[1561,31],[1562,31],[1563,31],[1564,31],[1565,31],[1566,31],[1567,31],[1568,31],[1569,31],[1570,31],[1571,31],[1572,31],[1573,31],[1574,31],[1575,31],[1576,31],[1577,31],[1578,31],[1579,31],[1580,31],[1581,31],[1582,31],[1583,31],[1584,31],[1585,31],[1586,31],[1587,31],[1588,31],[1589,31],[1590,31],[1591,31],[1592,31],[1593,31],[1594,31],[1595,31],[1596,31],[1597,31],[1598,31],[1599,31],[1600,31],[1601,31],[1602,31],[1603,31],[1604,31],[1605,31],[1606,31],[1607,31],[1608,31],[1609,31],[1610,31],[1611,31],[1612,31],[1613,31],[1614,31],[1615,31],[1616,31],[1617,31],[1618,31],[1619,31],[1620,31],[1621,31],[1622,31],[1623,31],[1624,31],[1625,31],[1626,31],[1627,31],[1628,31],[1629,31],[1630,31],[1631,31],[1632,31],[1633,31],[1634,31],[1635,31],[1636,31],[1637,31],[1638,31],[1639,31],[1640,31],[1641,31],[1642,31],[1643,31],[1644,31],[1645,31],[1646,31],[1647,31],[1648,31],[1649,31],[1650,31],[1651,31],[1652,31],[1653,31],[1654,31],[1655,31],[1656,31],[1657,31],[1658,31],[1659,31],[1660,31],[1661,31],[1662,31],[1663,31],[1664,31],[1665,31],[1666,31],[1667,31],[1668,31],[1669,31],[1670,31],[1671,31],[1672,31],[1673,31],[1674,31],[1675,31],[1676,31],[1677,31],[1678,31],[1679,31],[1680,31],[1681,31],[1682,31],[1683,31],[1684,31],[1685,31],[1686,31],[1687,31],[1688,31],[1689,31],[1690,31],[1691,31],[1692,31],[1693,31],[1694,31],[1695,31],[1696,31],[1697,31],[1698,31],[1699,31],[1700,31],[1701,31],[1702,31],[1703,31],[1704,31],[1705,31],[1706,31],[1707,31],[1708,31],[1709,31],[1710,31],[1711,31],[1712,31],[1713,31],[1714,31],[1715,31],[1716,31],[1717,31],[1718,31],[1719,31],[1720,31],[1721,31],[1722,31],[1723,31],[1724,31],[1725,31],[1726,31],[1727,31],[1728,31],[1729,31],[1730,31],[1731,31],[1732,31],[1733,31],[1734,31],[1735,31],[1736,31],[1737,31],[1738,31],[1739,31],[1740,31],[1741,31],[1742,31],[1743,31],[1744,31],[1745,31],[1746,31],[1747,31],[1748,31],[1749,31],[1750,31],[1751,31],[1752,31],[1753,31],[1754,31],[1755,31],[1756,31],[1757,31],[1758,31],[1759,31],[1760,31],[1761,31],[1762,31],[1763,31],[1764,31],[1765,31],[1766,31],[1767,31],[1768,31],[1769,31],[1770,31],[1771,31],[1772,31],[1773,31],[1774,31],[1775,31],[1776,31],[1777,31],[1778,31],[1779,31],[1780,31],[1781,31],[1782,31],[1783,31],[1784,31],[1785,31],[1786,31],[1787,31],[1788,31],[1789,31],[1790,31],[1791,31],[1792,31],[1793,31],[1794,31],[1795,31],[1796,31],[1797,31],[1798,31],[1799,31],[1800,31],[1801,31],[1802,31],[1803,31],[1804,31],[1805,31],[1806,31],[1807,31],[1808,31],[1809,31],[1810,31],[1811,31],[1812,31],[1813,31],[1814,31],[1815,31],[1816,31],[1817,31],[1818,31],[1819,31],[1820,31],[1821,31],[1822,31],[1823,31],[1824,31],[1825,31],[1826,31],[1827,31],[1828,31],[1829,31],[1830,31],[1831,31],[1832,31],[1833,31],[1834,31],[1835,31],[1836,31],[1837,31],[1838,31],[1839,31],[1840,31],[1841,31],[1842,31],[1843,31],[1844,31],[1845,31],[1846,31],[1847,31],[1848,31],[1849,31],[1850,31],[1851,31],[1852,31],[1853,31],[1854,31],[1855,31],[1856,31],[1857,31],[1858,31],[1859,31],[1860,31],[1861,31],[1862,32],[1865,33],[531,29],[2445,34],[541,35],[537,36],[542,29],[539,37],[540,38],[543,39],[538,40],[326,29],[443,41],[445,42],[444,41],[447,43],[442,1],[446,41],[413,29],[415,44],[414,1],[582,45],[583,45],[584,46],[580,47],[579,1],[581,48],[364,49],[362,49],[361,50],[365,51],[363,52],[360,53],[113,54],[112,55],[54,1],[57,56],[56,57],[55,58],[2444,1],[65,1],[66,59],[67,60],[68,61],[2610,62],[2609,63],[2608,64],[2607,1],[2555,1],[2503,65],[2504,65],[2505,66],[2460,67],[2506,68],[2507,69],[2508,70],[2455,1],[2458,71],[2456,1],[2457,1],[2509,72],[2510,73],[2511,74],[2512,75],[2513,76],[2514,77],[2515,77],[2516,78],[2517,79],[2518,80],[2519,81],[2461,1],[2459,1],[2520,82],[2521,83],[2522,84],[2554,85],[2523,86],[2524,87],[2525,88],[2526,89],[2527,90],[2528,91],[2529,92],[2530,93],[2531,94],[2532,95],[2533,95],[2534,96],[2535,1],[2536,97],[2538,98],[2537,99],[2539,100],[2540,101],[2541,102],[2542,103],[2543,104],[2544,105],[2545,106],[2546,107],[2547,108],[2548,109],[2549,110],[2550,111],[2551,112],[2462,1],[2463,1],[2464,1],[2502,113],[2552,114],[2553,115],[50,1],[53,29],[48,1],[51,116],[52,29],[2594,1],[2595,117],[2596,118],[2453,119],[2448,120],[2451,121],[2454,122],[2591,1],[2604,123],[2592,124],[2593,125],[2599,125],[2590,126],[2603,1],[2450,127],[2452,127],[2443,128],[2447,129],[2449,130],[2442,1],[2446,126],[80,29],[278,131],[279,29],[89,132],[81,133],[82,29],[83,134],[84,29],[85,29],[86,29],[87,1],[88,1],[312,135],[280,136],[69,1],[286,137],[71,1],[70,29],[101,29],[379,138],[201,139],[72,140],[202,138],[90,141],[91,29],[92,142],[203,143],[94,144],[93,29],[95,145],[204,138],[514,146],[513,147],[516,148],[205,138],[515,149],[517,150],[518,151],[520,152],[519,153],[521,154],[522,155],[206,138],[523,29],[207,138],[380,156],[381,29],[382,157],[208,138],[525,158],[524,159],[526,160],[209,138],[98,161],[100,162],[99,163],[292,164],[211,165],[210,143],[529,166],[530,167],[528,168],[218,169],[393,170],[394,29],[395,29],[396,171],[219,138],[532,172],[220,138],[401,173],[402,174],[221,143],[332,175],[334,176],[333,177],[335,178],[222,179],[533,180],[407,181],[406,29],[408,182],[223,143],[546,183],[544,184],[547,185],[545,186],[224,138],[97,29],[647,29],[507,187],[506,29],[508,188],[509,189],[293,190],[291,191],[409,192],[527,193],[217,194],[216,195],[215,196],[410,29],[411,153],[412,197],[225,138],[548,161],[226,143],[421,198],[422,199],[227,138],[353,200],[352,201],[354,202],[229,203],[294,29],[230,1],[549,204],[423,205],[231,138],[550,206],[553,207],[551,206],[552,206],[554,208],[424,209],[232,138],[557,210],[138,211],[285,212],[139,213],[283,214],[558,215],[556,216],[137,217],[559,218],[284,210],[560,219],[136,220],[233,143],[133,221],[452,222],[451,153],[234,138],[567,223],[568,224],[235,179],[648,225],[450,226],[237,227],[236,228],[425,29],[432,229],[433,230],[434,231],[435,231],[440,232],[441,233],[238,234],[212,138],[345,29],[570,235],[569,29],[239,143],[453,29],[454,236],[455,237],[240,143],[378,238],[377,239],[459,240],[241,228],[346,241],[348,29],[349,242],[350,243],[351,244],[344,245],[347,246],[242,143],[573,247],[575,248],[96,29],[243,143],[574,249],[460,250],[461,251],[511,252],[462,253],[510,254],[244,143],[512,255],[576,256],[578,257],[463,141],[245,179],[577,258],[314,259],[355,260],[246,228],[316,261],[315,262],[247,138],[464,263],[465,264],[248,265],[375,266],[374,29],[249,138],[586,267],[585,268],[250,138],[588,269],[591,270],[587,271],[589,269],[590,272],[251,138],[594,273],[252,179],[599,31],[253,143],[600,180],[602,274],[254,138],[313,275],[255,276],[213,143],[604,277],[605,277],[603,29],[606,277],[607,277],[608,277],[609,29],[611,278],[610,29],[612,279],[256,138],[473,280],[257,143],[475,29],[474,281],[476,29],[477,282],[258,138],[357,29],[259,138],[615,283],[613,29],[616,283],[617,284],[614,285],[274,138],[620,286],[619,287],[621,286],[622,288],[260,138],[618,29],[627,289],[261,143],[228,290],[214,291],[629,292],[262,138],[478,293],[479,294],[358,295],[480,296],[356,293],[481,297],[359,298],[263,138],[391,299],[392,300],[264,138],[482,29],[483,301],[265,143],[195,302],[631,303],[180,304],[275,305],[276,306],[277,307],[175,1],[176,1],[179,308],[177,1],[178,1],[173,1],[174,309],[200,310],[630,131],[194,4],[193,1],[196,311],[198,179],[197,312],[199,313],[290,314],[633,315],[632,316],[634,317],[266,138],[281,318],[282,319],[267,265],[635,320],[636,321],[366,322],[268,265],[368,323],[372,324],[367,1],[369,325],[370,241],[371,29],[269,138],[499,326],[271,327],[497,328],[496,329],[498,330],[270,179],[638,331],[639,332],[640,332],[641,332],[642,332],[637,241],[643,333],[272,138],[504,334],[503,335],[505,336],[376,337],[273,138],[645,338],[644,1],[646,29],[745,29],[758,339],[788,29],[754,340],[746,341],[747,29],[748,342],[749,29],[750,29],[751,29],[752,1],[753,1],[773,135],[789,343],[780,1],[985,344],[803,1],[649,29],[650,29],[744,345],[659,346],[804,347],[660,345],[755,348],[756,29],[757,349],[661,350],[806,351],[805,29],[807,352],[662,345],[814,353],[813,354],[816,355],[663,345],[815,356],[818,357],[819,358],[821,359],[820,360],[824,361],[825,362],[664,345],[826,29],[665,345],[759,363],[760,29],[761,364],[666,345],[839,365],[838,366],[840,367],[667,345],[763,368],[765,369],[764,370],[766,371],[669,372],[668,350],[843,373],[844,374],[842,375],[676,376],[769,377],[770,29],[771,29],[772,378],[677,345],[845,172],[678,345],[774,379],[775,380],[679,350],[846,175],[848,381],[847,382],[849,383],[680,384],[850,385],[777,386],[776,29],[778,387],[681,350],[853,388],[851,389],[854,390],[852,391],[682,345],[762,29],[970,29],[977,392],[976,29],[978,393],[979,394],[987,395],[986,396],[779,397],[841,398],[675,399],[674,400],[673,401],[781,29],[782,360],[783,402],[683,345],[855,368],[684,350],[784,403],[785,404],[685,345],[836,405],[835,406],[837,407],[687,408],[786,29],[688,1],[856,409],[787,410],[689,345],[857,411],[860,412],[858,411],[859,411],[861,413],[792,414],[690,345],[864,415],[980,416],[984,417],[981,418],[982,419],[865,215],[863,420],[866,421],[867,422],[983,210],[868,423],[862,220],[691,350],[801,424],[972,425],[802,360],[692,345],[869,223],[870,426],[693,384],[971,427],[800,428],[695,429],[694,430],[793,29],[794,431],[795,432],[796,433],[797,433],[798,434],[799,435],[696,436],[670,345],[828,29],[872,437],[871,29],[697,350],[973,29],[974,438],[975,439],[698,350],[989,440],[988,441],[873,442],[699,430],[829,443],[831,29],[832,242],[833,444],[834,445],[827,245],[830,446],[700,350],[874,447],[876,448],[808,29],[701,350],[875,449],[877,450],[878,451],[810,452],[879,453],[809,454],[702,350],[811,455],[880,456],[882,457],[812,348],[703,384],[881,458],[883,459],[884,460],[704,430],[885,461],[886,462],[705,345],[822,463],[823,464],[706,465],[888,466],[887,29],[707,345],[890,467],[889,468],[708,345],[892,469],[895,470],[891,471],[893,469],[894,472],[709,345],[896,273],[710,384],[897,31],[711,350],[898,385],[899,473],[712,345],[817,474],[713,475],[671,143],[901,476],[902,476],[900,29],[903,476],[904,476],[905,476],[906,29],[908,477],[907,29],[909,478],[714,345],[910,479],[715,350],[912,29],[911,480],[913,29],[914,481],[716,345],[915,29],[717,345],[918,482],[916,29],[919,482],[920,483],[917,484],[732,345],[923,485],[922,486],[924,485],[925,487],[718,345],[921,29],[926,289],[719,350],[686,488],[672,489],[927,292],[720,345],[931,490],[932,491],[930,492],[933,493],[928,490],[934,494],[929,495],[721,345],[767,496],[768,497],[722,345],[935,29],[936,498],[723,350],[738,499],[938,500],[658,501],[733,502],[734,503],[735,504],[653,1],[654,1],[657,505],[655,1],[656,1],[651,1],[652,506],[743,507],[937,339],[737,4],[736,1],[739,508],[741,384],[740,509],[742,510],[939,511],[941,512],[940,513],[942,514],[724,345],[790,515],[791,516],[725,465],[944,517],[945,518],[943,322],[726,465],[947,519],[951,520],[946,1],[948,521],[949,443],[950,29],[727,345],[955,522],[729,523],[953,524],[952,329],[954,525],[728,384],[957,526],[958,527],[959,527],[960,527],[961,527],[956,443],[962,528],[730,345],[965,529],[964,530],[966,531],[963,532],[731,345],[968,533],[967,1],[969,29],[990,441],[1019,1],[1001,1],[134,1],[49,1],[289,534],[288,535],[287,1],[2562,1],[2059,1],[2060,536],[2579,537],[2577,538],[2578,539],[2566,540],[2567,538],[2574,541],[2565,542],[2570,543],[2580,1],[2571,544],[2576,545],[2582,546],[2581,547],[2564,548],[2572,549],[2573,550],[2568,551],[2575,537],[2569,552],[399,553],[397,554],[400,555],[398,556],[331,29],[404,557],[405,558],[403,55],[78,559],[77,559],[76,560],[79,561],[419,562],[416,29],[418,563],[420,564],[417,29],[387,565],[386,1],[124,566],[128,566],[126,566],[127,566],[125,566],[129,566],[131,567],[123,568],[121,1],[122,569],[130,569],[120,215],[132,215],[555,215],[104,570],[102,1],[103,571],[565,572],[562,573],[564,574],[561,29],[566,575],[563,29],[448,576],[449,577],[429,578],[430,578],[431,579],[428,580],[426,578],[427,1],[458,581],[456,29],[457,582],[342,583],[337,584],[338,583],[340,583],[339,583],[341,29],[343,585],[336,29],[107,586],[109,587],[110,29],[111,588],[106,29],[108,29],[572,589],[571,29],[295,590],[297,590],[298,591],[296,592],[116,593],[115,594],[117,594],[118,594],[105,1],[119,595],[114,596],[593,597],[592,29],[601,29],[306,598],[307,599],[308,599],[309,600],[310,601],[311,602],[305,29],[467,603],[468,604],[469,29],[470,605],[471,603],[472,606],[466,29],[624,607],[625,608],[626,609],[623,29],[628,29],[321,610],[320,29],[322,611],[323,612],[327,613],[329,614],[317,1],[330,615],[319,616],[318,1],[324,617],[325,618],[328,617],[384,619],[385,29],[389,619],[383,620],[390,621],[388,622],[438,623],[437,623],[439,624],[436,578],[141,625],[140,53],[490,626],[492,627],[493,628],[489,629],[491,630],[486,29],[487,629],[488,631],[494,629],[485,632],[495,633],[484,634],[500,635],[501,636],[502,637],[373,29],[74,1],[73,29],[75,638],[299,29],[304,639],[303,29],[302,640],[300,29],[301,29],[63,641],[64,642],[62,643],[59,644],[58,645],[61,646],[60,644],[2557,647],[2556,648],[135,649],[2563,1],[2597,1],[46,1],[47,1],[8,1],[9,1],[11,1],[10,1],[2,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[3,1],[20,1],[21,1],[4,1],[22,1],[26,1],[23,1],[24,1],[25,1],[27,1],[28,1],[29,1],[5,1],[30,1],[31,1],[32,1],[33,1],[6,1],[37,1],[34,1],[35,1],[36,1],[38,1],[7,1],[39,1],[44,1],[45,1],[40,1],[41,1],[42,1],[43,1],[1,1],[2480,650],[2490,651],[2479,650],[2500,652],[2471,653],[2470,654],[2499,655],[2493,656],[2498,657],[2473,658],[2487,659],[2472,660],[2496,661],[2468,662],[2467,655],[2497,663],[2469,664],[2474,665],[2475,1],[2478,665],[2465,1],[2501,666],[2491,667],[2482,668],[2483,669],[2485,670],[2481,671],[2484,672],[2494,655],[2476,673],[2477,674],[2486,675],[2466,676],[2489,667],[2488,665],[2492,1],[2495,677],[2598,678],[2588,679],[2589,678],[2600,680],[2587,1],[2586,681],[2583,682],[2561,683],[2559,684],[2558,1],[2560,685],[2584,1],[2585,686],[2605,687],[2601,688],[2602,689],[2606,690],[993,691],[999,692],[997,693],[995,693],[998,693],[994,693],[996,693],[992,693],[991,1],[1890,694],[1893,694],[1887,695],[1894,696],[1892,694],[1889,695],[1882,697],[1891,695],[1888,697],[1027,698],[1023,699],[1025,700],[1028,701],[1022,702],[1024,700],[1020,703],[1017,697],[1018,704],[1026,698],[2199,705],[2198,706],[2200,707],[2197,697],[1021,708],[2094,709],[2331,710],[2332,711],[2330,697],[2025,712],[2027,713],[2026,714],[2024,715],[2363,716],[2092,700],[2093,717],[2091,716],[2090,697],[2129,718],[2128,719],[2126,697],[2127,720],[1886,721],[1885,722],[1883,697],[1884,723],[2352,724],[2351,725],[2350,697],[2281,726],[2280,727],[2279,697],[2121,728],[2109,729],[2108,697],[2032,730],[2031,730],[2029,731],[2030,730],[2034,732],[2033,733],[2028,715],[2036,697],[2038,734],[2037,735],[2035,736],[1934,737],[1933,738],[1931,697],[1932,739],[2001,740],[2000,741],[1999,697],[1960,742],[1961,743],[1958,697],[1959,744],[1957,745],[1955,697],[1956,746],[2365,747],[2366,747],[2377,748],[2376,749],[2375,747],[2374,750],[2373,751],[2372,697],[2368,752],[2371,753],[2369,753],[2370,753],[2378,754],[2367,755],[2364,697],[1870,756],[1869,749],[1872,757],[1871,758],[1877,759],[1876,760],[1879,761],[1950,697],[1952,762],[1949,749],[1951,763],[1878,764],[1002,765],[1006,765],[1003,766],[1005,767],[1004,765],[1007,765],[1008,765],[1009,768],[1983,769],[1985,770],[1986,771],[1982,772],[1984,697],[1875,773],[1029,774],[2055,775],[2362,776],[2323,777],[2359,778],[1927,779],[1908,780],[1903,781],[1909,782],[1915,783],[1898,784],[1905,773],[1913,785],[1897,786],[1904,787],[1912,788],[1910,789],[1902,790],[1911,791],[1914,792],[1907,793],[1899,794],[1925,795],[1922,796],[1920,797],[1924,798],[1921,796],[2384,799],[2381,796],[2379,797],[2382,798],[2380,796],[2383,799],[1923,800],[1919,801],[1926,802],[1918,784],[1906,803],[1916,804],[1917,801],[1896,805],[1900,806],[1895,697],[1901,807],[1867,808],[1030,809],[1866,810],[1868,808],[1873,811],[1881,812],[2348,813],[2342,814],[2334,815],[2340,816],[2339,816],[2344,817],[2341,818],[2343,819],[2345,820],[2346,821],[2338,822],[2329,823],[2326,750],[2327,749],[2328,823],[2325,823],[2324,697],[2333,824],[2347,825],[2337,826],[2335,697],[2336,697],[2269,827],[2207,828],[2195,829],[2388,830],[2196,831],[2253,832],[2241,833],[2246,834],[2231,835],[2163,836],[2182,836],[2236,837],[2234,837],[2235,837],[2232,838],[2233,837],[2237,839],[2164,840],[2201,841],[2254,842],[2215,843],[2202,749],[2250,844],[2251,845],[2249,845],[2247,844],[2248,845],[2252,846],[2213,847],[2180,848],[2181,836],[2214,849],[2218,786],[2217,850],[2219,838],[2216,851],[2220,852],[2228,853],[2204,854],[2205,855],[2206,856],[2203,855],[2186,857],[2192,858],[2193,859],[2185,860],[2188,840],[2187,861],[2190,862],[2191,863],[2386,864],[2387,865],[2385,866],[2240,867],[2239,867],[2243,749],[2242,844],[2245,749],[2244,749],[2230,868],[2394,869],[2395,870],[2391,870],[2392,870],[2390,870],[2393,871],[2397,872],[2398,844],[2399,872],[2401,873],[2400,872],[2212,749],[2210,749],[2211,874],[2209,875],[2177,876],[2174,877],[2175,878],[2179,749],[2173,879],[2176,880],[2178,880],[2171,749],[2402,786],[2404,881],[2223,749],[2225,882],[2224,749],[2226,882],[2222,882],[2162,883],[2184,838],[2238,838],[2229,838],[2389,838],[2396,838],[2208,697],[2165,838],[2403,838],[2221,838],[2264,884],[2263,885],[2262,886],[2265,885],[2169,876],[2168,749],[2166,749],[2261,887],[2258,843],[2260,888],[2259,844],[2412,889],[2410,890],[2409,890],[2408,891],[2411,892],[2256,749],[2267,893],[2405,870],[2257,749],[2406,844],[2266,894],[2170,895],[2167,844],[2407,896],[2255,749],[2268,897],[2194,898],[2227,844],[2017,697],[2019,899],[2183,900],[2016,697],[2022,901],[2014,902],[2015,697],[2010,697],[2018,697],[2021,697],[2020,697],[2009,697],[2012,697],[2011,697],[2013,697],[2189,903],[2413,904],[2172,697],[2118,905],[2062,906],[2056,773],[2416,907],[2100,749],[2099,908],[2064,909],[2418,910],[2067,911],[2076,912],[2085,913],[2077,914],[2098,915],[2089,916],[2097,917],[2419,918],[2096,917],[2420,749],[2421,749],[2073,797],[2072,749],[2074,773],[2075,773],[2414,786],[2415,919],[2088,920],[2087,749],[2081,773],[2082,921],[2083,909],[2084,922],[2422,923],[2423,788],[2424,850],[2425,924],[2426,749],[2427,850],[2063,925],[2114,926],[2112,697],[2111,926],[2110,927],[2113,928],[2435,755],[2068,929],[2069,930],[2432,931],[2431,932],[2429,786],[2433,775],[2430,933],[2061,934],[2070,753],[2106,935],[2104,936],[2101,937],[2102,938],[2103,933],[2116,939],[2105,749],[2117,940],[2058,749],[2417,941],[2066,836],[2071,942],[2080,943],[2078,944],[2079,945],[2434,946],[2095,947],[2086,948],[2107,949],[2065,950],[2023,697],[2115,697],[2057,697],[2428,697],[2125,951],[2119,750],[2124,952],[2120,697],[2123,953],[2122,954],[1016,955],[1015,956],[1012,749],[1011,956],[1010,956],[1014,956],[1013,749],[2272,957],[2271,958],[2270,959],[2322,960],[2320,961],[2319,962],[2321,963],[2317,772],[2318,697],[2151,964],[2144,965],[2145,966],[2148,967],[2135,787],[2133,968],[2136,787],[2134,966],[2149,969],[2436,970],[2131,971],[2146,697],[2141,972],[2140,973],[2142,972],[2143,974],[2150,975],[2139,976],[2138,977],[2137,977],[2147,749],[2130,978],[2132,979],[2358,980],[2357,981],[2349,982],[2356,983],[2354,984],[2353,985],[2355,986],[2161,987],[2154,988],[2153,989],[2159,990],[2157,773],[2158,991],[2156,992],[2152,993],[2160,994],[2155,697],[2054,995],[2046,996],[2053,997],[2047,998],[2043,786],[2044,999],[2052,1000],[2049,1001],[2050,996],[2051,1002],[2437,1003],[2048,1004],[2040,1005],[2042,1006],[2041,1007],[2039,697],[2045,1008],[1948,1009],[1947,1010],[1942,1011],[1946,1012],[1943,1013],[1944,1014],[1945,1015],[1929,1016],[1941,1017],[1940,1018],[1939,1019],[1938,1020],[1937,1021],[1930,1022],[1935,1023],[1928,697],[1936,1024],[2278,1025],[2276,750],[2275,1026],[2274,1027],[2277,1028],[2273,772],[2316,1029],[2313,1030],[2314,966],[2299,1031],[2312,1032],[2294,1033],[2311,1034],[2315,966],[2307,1035],[2310,1036],[2297,1037],[2298,1038],[2293,1032],[2301,773],[2302,773],[2303,1039],[2305,1040],[2306,1037],[2304,1041],[2438,1042],[2300,1043],[2309,1041],[2308,749],[2295,1044],[2290,1045],[2291,1046],[2292,1047],[2287,1048],[2286,1049],[2285,1046],[2289,1050],[2288,1051],[2284,1048],[2283,1045],[2282,1052],[1972,950],[2439,697],[2296,1053],[2008,1054],[1970,749],[1987,1055],[1969,1056],[1971,1057],[1973,1058],[1966,1059],[1981,1060],[1995,1061],[1965,1062],[1954,966],[1996,1063],[1953,773],[1997,749],[1968,1064],[1967,1065],[1979,749],[1980,749],[1977,1066],[1978,1067],[1976,1066],[1974,1068],[2440,1069],[1975,1070],[1993,786],[1990,1071],[1989,1072],[1992,1073],[1991,749],[1994,1074],[1988,697],[1963,1075],[2002,1076],[2003,1077],[2007,1078],[2006,1078],[2004,1079],[2005,929],[1998,1080],[1962,1081],[2441,697],[1964,1082],[1880,1083],[2360,1084],[2361,1085],[1874,1086],[1000,1087]],"affectedFilesPendingEmit":[1890,1893,1887,1894,1892,1889,1882,1891,1888,1027,1023,1025,1028,1022,1024,1020,1017,1018,1026,2199,2198,2200,2197,1021,2094,2331,2332,2330,2025,2027,2026,2024,2363,2092,2093,2091,2090,2129,2128,2126,2127,1886,1885,1883,1884,2352,2351,2350,2281,2280,2279,2121,2109,2108,2032,2031,2029,2030,2034,2033,2028,2036,2038,2037,2035,1934,1933,1931,1932,2001,2000,1999,1960,1961,1958,1959,1957,1955,1956,2365,2366,2377,2376,2375,2374,2373,2372,2368,2371,2369,2370,2378,2367,2364,1870,1869,1872,1871,1877,1876,1879,1950,1952,1949,1951,1878,1002,1006,1003,1005,1004,1007,1008,1009,1983,1985,1986,1982,1984,1875,1029,2055,2362,2323,2359,1927,1908,1903,1909,1915,1898,1905,1913,1897,1904,1912,1910,1902,1911,1914,1907,1899,1925,1922,1920,1924,1921,2384,2381,2379,2382,2380,2383,1923,1919,1926,1918,1906,1916,1917,1896,1900,1895,1901,1867,1030,1866,1868,1873,1881,2348,2342,2334,2340,2339,2344,2341,2343,2345,2346,2338,2329,2326,2327,2328,2325,2324,2333,2347,2337,2335,2336,2269,2207,2195,2388,2196,2253,2241,2246,2231,2163,2182,2236,2234,2235,2232,2233,2237,2164,2201,2254,2215,2202,2250,2251,2249,2247,2248,2252,2213,2180,2181,2214,2218,2217,2219,2216,2220,2228,2204,2205,2206,2203,2186,2192,2193,2185,2188,2187,2190,2191,2386,2387,2385,2240,2239,2243,2242,2245,2244,2230,2394,2395,2391,2392,2390,2393,2397,2398,2399,2401,2400,2212,2210,2211,2209,2177,2174,2175,2179,2173,2176,2178,2171,2402,2404,2223,2225,2224,2226,2222,2162,2184,2238,2229,2389,2396,2208,2165,2403,2221,2264,2263,2262,2265,2169,2168,2166,2261,2258,2260,2259,2412,2410,2409,2408,2411,2256,2267,2405,2257,2406,2266,2170,2167,2407,2255,2268,2194,2227,2017,2019,2183,2016,2022,2014,2015,2010,2018,2021,2020,2009,2012,2011,2013,2189,2413,2172,2118,2062,2056,2416,2100,2099,2064,2418,2067,2076,2085,2077,2098,2089,2097,2419,2096,2420,2421,2073,2072,2074,2075,2414,2415,2088,2087,2081,2082,2083,2084,2422,2423,2424,2425,2426,2427,2063,2114,2112,2111,2110,2113,2435,2068,2069,2432,2431,2429,2433,2430,2061,2070,2106,2104,2101,2102,2103,2116,2105,2117,2058,2417,2066,2071,2080,2078,2079,2434,2095,2086,2107,2065,2023,2115,2057,2428,2125,2119,2124,2120,2123,2122,1016,1015,1012,1011,1010,1014,1013,2272,2271,2270,2322,2320,2319,2321,2317,2318,2151,2144,2145,2148,2135,2133,2136,2134,2149,2436,2131,2146,2141,2140,2142,2143,2150,2139,2138,2137,2147,2130,2132,2358,2357,2349,2356,2354,2353,2355,2161,2154,2153,2159,2157,2158,2156,2152,2160,2155,2054,2046,2053,2047,2043,2044,2052,2049,2050,2051,2437,2048,2040,2042,2041,2039,2045,1948,1947,1942,1946,1943,1944,1945,1929,1941,1940,1939,1938,1937,1930,1935,1928,1936,2278,2276,2275,2274,2277,2273,2316,2313,2314,2299,2312,2294,2311,2315,2307,2310,2297,2298,2293,2301,2302,2303,2305,2306,2304,2438,2300,2309,2308,2295,2290,2291,2292,2287,2286,2285,2289,2288,2284,2283,2282,1972,2439,2296,2008,1970,1987,1969,1971,1973,1966,1981,1995,1965,1954,1996,1953,1997,1968,1967,1979,1980,1977,1978,1976,1974,2440,1975,1993,1990,1989,1992,1991,1994,1988,1963,2002,2003,2007,2006,2004,2005,1998,1962,2441,1964,1880,2360,2361,1874,1000],"version":"5.9.3"} \ No newline at end of file diff --git a/apps/web/package-lock.json b/apps/web/package-lock.json index 5da4b33ad..dcaf42a7b 100644 --- a/apps/web/package-lock.json +++ b/apps/web/package-lock.json @@ -1848,10 +1848,9 @@ }, "node_modules/@testing-library/dom": { "version": "10.4.1", - "resolved": "https://registry.npmmirror.com/@testing-library/dom/-/dom-10.4.1.tgz", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", @@ -1938,10 +1937,9 @@ }, "node_modules/@types/aria-query": { "version": "5.0.4", - "resolved": "https://registry.npmmirror.com/@types/aria-query/-/aria-query-5.0.4.tgz", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/@types/babel__core": { @@ -3113,10 +3111,9 @@ }, "node_modules/dom-accessibility-api": { "version": "0.5.16", - "resolved": "https://registry.npmmirror.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/dunder-proto": { @@ -4457,10 +4454,9 @@ }, "node_modules/lz-string": { "version": "1.5.0", - "resolved": "https://registry.npmmirror.com/lz-string/-/lz-string-1.5.0.tgz", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, - "license": "MIT", "peer": true, "bin": { "lz-string": "bin/bin.js" @@ -5008,10 +5004,9 @@ }, "node_modules/pretty-format": { "version": "27.5.1", - "resolved": "https://registry.npmmirror.com/pretty-format/-/pretty-format-27.5.1.tgz", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "ansi-regex": "^5.0.1", @@ -5024,10 +5019,9 @@ }, "node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-5.2.0.tgz", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=10" @@ -5735,10 +5729,9 @@ }, "node_modules/react-is": { "version": "17.0.2", - "resolved": "https://registry.npmmirror.com/react-is/-/react-is-17.0.2.tgz", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/react-refresh": { diff --git a/apps/web/src/api/products/types.ts b/apps/web/src/api/products/types.ts index 83a8af804..9b4fa758d 100644 --- a/apps/web/src/api/products/types.ts +++ b/apps/web/src/api/products/types.ts @@ -71,4 +71,5 @@ export interface VideoItem { generation_params: Record download_url: string generated_at: string + duplicate_rate?: number } diff --git a/apps/web/src/api/products/utils.ts b/apps/web/src/api/products/utils.ts index 00fd89ef3..1293a6cd2 100644 --- a/apps/web/src/api/products/utils.ts +++ b/apps/web/src/api/products/utils.ts @@ -29,7 +29,6 @@ export function mapVideoToProductItem(video: VideoItem): ProductItem { // 后端字段名为 generated_at,映射为 created_at 供前端统一使用 created_at: video.generated_at, updated_at: video.generated_at, - // 后端 /videos 接口暂无 duplicate_rate 字段 - duplicate_rate: undefined, + duplicate_rate: video.duplicate_rate, } } diff --git a/apps/web/src/pages/generate/GeneratePage.tsx b/apps/web/src/pages/generate/GeneratePage.tsx index ffd783cd5..f03f84d7a 100644 --- a/apps/web/src/pages/generate/GeneratePage.tsx +++ b/apps/web/src/pages/generate/GeneratePage.tsx @@ -338,12 +338,15 @@ const GeneratePage: React.FC = () => { size: titleSettings.size, font: titleSettings.font, color: titleSettings.color, - position: titleSettings.position as "top" | "center" | "bottom", + position: titleSettings.position as "top" | "center" | "bottom" | "custom", bold: titleSettings.bold, italic: titleSettings.italic, stroke: titleSettings.stroke, shadow: titleSettings.shadow, + posX: titleSettings.posX, + posY: titleSettings.posY, }} + onTitlePositionChange={styleUpdaters.updateTitlePosition} /> )} {currentStep >= 5 && generated && finalVideo && ( diff --git a/apps/web/src/pages/generate/components/FrontendPreviewPlayer.tsx b/apps/web/src/pages/generate/components/FrontendPreviewPlayer.tsx index d72a689d1..61ce703f9 100644 --- a/apps/web/src/pages/generate/components/FrontendPreviewPlayer.tsx +++ b/apps/web/src/pages/generate/components/FrontendPreviewPlayer.tsx @@ -32,12 +32,15 @@ interface FrontendPreviewPlayerProps { size: number font: string color: string - position: "top" | "center" | "bottom" + position: "top" | "center" | "bottom" | "custom" bold?: boolean italic?: boolean stroke?: boolean shadow?: boolean + posX?: number | null + posY?: number | null } + onTitlePositionChange?: (posX: number, posY: number) => void } function formatTime(seconds: number): string { @@ -105,6 +108,7 @@ const FrontendPreviewPlayer: React.FC = ({ serverClips, voiceAudioUrl, titleSettings, + onTitlePositionChange, }) => { const segments = useMemo( () => buildPlaybackSegments(assets, template, serverClips), @@ -126,6 +130,69 @@ const FrontendPreviewPlayer: React.FC = ({ return { width: 1080, height: 1920 } } })() + const customTitleXPct = + titleSettings?.posX != null && playRes.width > 0 + ? (titleSettings.posX / playRes.width) * 100 + : null + const customTitleYPct = + titleSettings?.posY != null && playRes.height > 0 + ? (titleSettings.posY / playRes.height) * 100 + : null + + // ── 拖拽状态(用 ref 避免在每帧渲染中触发重渲染)── + const draggingTitleRef = useRef(false) + const titleDragRef = useRef(null) + const handleTitlePointerDown = useCallback( + (e: React.PointerEvent) => { + if (!onTitlePositionChange || !playerContainerRef.current) return + e.preventDefault() + e.stopPropagation() + ;(e.target as Element).setPointerCapture(e.pointerId) + draggingTitleRef.current = true + ;(e.currentTarget as HTMLDivElement).style.cursor = "grabbing" + }, + [onTitlePositionChange], + ) + const handleTitlePointerMove = useCallback((e: React.PointerEvent) => { + if (!draggingTitleRef.current || !playerContainerRef.current) return + e.preventDefault() + e.stopPropagation() + // 拖拽过程中直接修改 DOM,不触发 React 渲染(避免频繁重渲染导致换行) + if (titleDragRef.current) { + const rect = playerContainerRef.current.getBoundingClientRect() + const relX = Math.max(0, Math.min(rect.width, e.clientX - rect.left)) + const relY = Math.max(0, Math.min(rect.height, e.clientY - rect.top)) + const xpct = (relX / rect.width) * 100 + const ypct = (relY / rect.height) * 100 + titleDragRef.current.style.left = `${xpct}%` + titleDragRef.current.style.top = `${ypct}%` + } + }, []) + const handleTitlePointerUp = useCallback( + (e: React.PointerEvent) => { + if (!draggingTitleRef.current) return + draggingTitleRef.current = false + // 拖拽结束时才调用 onTitlePositionChange 保存最终位置 + if (onTitlePositionChange && playerContainerRef.current) { + const rect = playerContainerRef.current.getBoundingClientRect() + const relX = Math.max(0, Math.min(rect.width, e.clientX - rect.left)) + const relY = Math.max(0, Math.min(rect.height, e.clientY - rect.top)) + const posX = Math.round((relX / rect.width) * playRes.width) + const posY = Math.round((relY / rect.height) * playRes.height) + onTitlePositionChange(posX, posY) + } + ;(e.currentTarget as HTMLDivElement).style.cursor = "grab" + try { + if ((e.currentTarget as Element).hasPointerCapture(e.pointerId)) { + ;(e.currentTarget as Element).releasePointerCapture(e.pointerId) + } + } catch { + /* ignore */ + } + }, + [onTitlePositionChange, playRes.width, playRes.height], + ) + const playerContainerRef = useRef(null) const [containerHeight, setContainerHeight] = useState(0) useEffect(() => { @@ -524,15 +591,36 @@ const FrontendPreviewPlayer: React.FC = ({
= ({ presets, activePreset, @@ -27,18 +58,52 @@ const TitlePresetsGrid: React.FC = ({
{presets.map((p) => { const isActive = activePreset === p.key + const { _strokeColor, _strokeWidth, ...fillStyle } = p.previewStyle + const ff = getFontFamily(fontFamily || "思源黑体") + + // 底层:描边轮廓(用 text-shadow 模拟粗描边) + const strokeStyle: React.CSSProperties = { + color: _strokeColor || "transparent", + textShadow: + _strokeColor && _strokeWidth + ? buildStrokeShadow(_strokeColor, _strokeWidth) + : undefined, + fontWeight: fillStyle.fontWeight, + fontSize: fillStyle.fontSize, + lineHeight: 1, + } + + // 上层:仅填充色 + 可选 textShadow(发光/投影效果) + const topStyle: React.CSSProperties = { + color: fillStyle.color, + textShadow: fillStyle.textShadow, + fontWeight: fillStyle.fontWeight, + fontSize: fillStyle.fontSize, + lineHeight: 1, + } + return ( ) diff --git a/apps/web/src/pages/generate/constants.ts b/apps/web/src/pages/generate/constants.ts index e13061fdd..6dbce4752 100644 --- a/apps/web/src/pages/generate/constants.ts +++ b/apps/web/src/pages/generate/constants.ts @@ -42,6 +42,7 @@ export const POSITION_OPTIONS = [ { value: "top", label: "顶部" }, { value: "center", label: "居中" }, { value: "bottom", label: "底部" }, + { value: "custom", label: "自定义" }, ] /* ── 标题字体选项 ── */ @@ -77,10 +78,11 @@ export const TITLE_PRESETS = [ label: "经典白字", style: { size: 28, color: "#ffffff", bold: true, italic: false, stroke: true, shadow: false }, previewStyle: { - fontWeight: 700, color: "#ffffff", - WebkitTextStroke: "1px #000000", - fontSize: "20px", + _strokeColor: "#000000", + _strokeWidth: 2, + fontWeight: 700, + fontSize: "32px", }, }, { @@ -88,45 +90,54 @@ export const TITLE_PRESETS = [ label: "黑金质感", style: { size: 32, color: "#d4a843", bold: true, italic: false, stroke: false, shadow: true }, previewStyle: { - fontWeight: 700, color: "#d4a843", + fontWeight: 700, + fontSize: "32px", textShadow: "1px 1px 3px rgba(0,0,0,0.8)", - fontSize: "20px", }, }, { key: "fresh_minimal", label: "清新简约", style: { size: 24, color: "#333333", bold: false, italic: false, stroke: false, shadow: false }, - previewStyle: { fontWeight: 400, color: "#333333", fontSize: "18px" }, + previewStyle: { + color: "#e8e8e8", + fontWeight: 400, + fontSize: "32px", + }, }, { key: "variety_show", label: "综艺花字", style: { size: 36, color: "#ff4081", bold: true, italic: false, stroke: true, shadow: true }, previewStyle: { - fontWeight: 900, color: "#ff4081", - WebkitTextStroke: "1.5px #ffffff", + _strokeColor: "#ffffff", + _strokeWidth: 2, + fontWeight: 900, + fontSize: "32px", textShadow: "2px 2px 4px rgba(0,0,0,0.5)", - fontSize: "22px", }, }, { key: "business", label: "商务极简", style: { size: 24, color: "#1a1a1a", bold: false, italic: false, stroke: false, shadow: false }, - previewStyle: { fontWeight: 400, color: "#1a1a1a", fontSize: "17px" }, + previewStyle: { + color: "#e0e0e0", + fontWeight: 400, + fontSize: "32px", + }, }, { key: "retro_film", label: "复古胶片", style: { size: 28, color: "#e8d5b7", bold: false, italic: false, stroke: false, shadow: true }, previewStyle: { - fontWeight: 400, color: "#e8d5b7", + fontWeight: 400, + fontSize: "32px", textShadow: "2px 2px 6px rgba(0,0,0,0.7)", - fontSize: "18px", }, }, { @@ -134,10 +145,10 @@ export const TITLE_PRESETS = [ label: "霓虹发光", style: { size: 32, color: "#00e5ff", bold: true, italic: false, stroke: false, shadow: true }, previewStyle: { - fontWeight: 700, color: "#00e5ff", + fontWeight: 700, + fontSize: "32px", textShadow: "0 0 4px #00e5ff, 0 0 8px #00e5ff, 0 0 16px rgba(0,229,255,0.5)", - fontSize: "20px", }, }, { @@ -145,10 +156,202 @@ export const TITLE_PRESETS = [ label: "手写字", style: { size: 28, color: "#333333", bold: false, italic: false, stroke: false, shadow: true }, previewStyle: { + color: "#e0e0e0", fontWeight: 400, - color: "#333333", + fontSize: "32px", textShadow: "1px 1px 2px rgba(0,0,0,0.3)", - fontSize: "20px", + }, + }, + { + key: "outline_yellow", + label: "黄色描边", + style: { size: 28, color: "#ffd54f", bold: true, italic: false, stroke: true, shadow: false }, + previewStyle: { + color: "#ffd54f", + _strokeColor: "#000000", + _strokeWidth: 2, + fontWeight: 700, + fontSize: "32px", + }, + }, + { + key: "outline_pink", + label: "粉色描边", + style: { size: 28, color: "#ff80ab", bold: true, italic: false, stroke: true, shadow: false }, + previewStyle: { + color: "#ff80ab", + _strokeColor: "#000000", + _strokeWidth: 2, + fontWeight: 700, + fontSize: "32px", + }, + }, + { + key: "outline_blue", + label: "蓝色描边", + style: { size: 28, color: "#82b1ff", bold: true, italic: false, stroke: true, shadow: false }, + previewStyle: { + color: "#82b1ff", + _strokeColor: "#000000", + _strokeWidth: 2, + fontWeight: 700, + fontSize: "32px", + }, + }, + { + key: "outline_green", + label: "绿色描边", + style: { size: 28, color: "#69f0ae", bold: true, italic: false, stroke: true, shadow: false }, + previewStyle: { + color: "#69f0ae", + _strokeColor: "#000000", + _strokeWidth: 2, + fontWeight: 700, + fontSize: "32px", + }, + }, + { + key: "outline_gray", + label: "灰色描边", + style: { size: 28, color: "#bdbdbd", bold: true, italic: false, stroke: true, shadow: false }, + previewStyle: { + color: "#bdbdbd", + _strokeColor: "#000000", + _strokeWidth: 2, + fontWeight: 700, + fontSize: "32px", + }, + }, + { + key: "bg_white", + label: "白底黑字", + style: { size: 28, color: "#1a1a1a", bold: true, italic: false, stroke: false, shadow: false }, + previewStyle: { + color: "#1a1a1a", + fontWeight: 700, + fontSize: "32px", + background: "#ffffff", + borderRadius: "4px", + padding: "2px 6px", + }, + }, + { + key: "bg_yellow", + label: "黄底黑字", + style: { size: 28, color: "#1a1a1a", bold: true, italic: false, stroke: false, shadow: false }, + previewStyle: { + color: "#1a1a1a", + fontWeight: 700, + fontSize: "32px", + background: "#ffd54f", + borderRadius: "4px", + padding: "2px 6px", + }, + }, + { + key: "bg_pink", + label: "粉底黑字", + style: { size: 28, color: "#1a1a1a", bold: true, italic: false, stroke: false, shadow: false }, + previewStyle: { + color: "#1a1a1a", + fontWeight: 700, + fontSize: "32px", + background: "#ff80ab", + borderRadius: "4px", + padding: "2px 6px", + }, + }, + { + key: "bg_red", + label: "红底白字", + style: { size: 28, color: "#ffffff", bold: true, italic: false, stroke: false, shadow: false }, + previewStyle: { + color: "#ffffff", + fontWeight: 700, + fontSize: "32px", + background: "#ef5350", + borderRadius: "4px", + padding: "2px 6px", + }, + }, + { + key: "neon_orange", + label: "橙色发光", + style: { size: 32, color: "#ff9100", bold: true, italic: false, stroke: false, shadow: true }, + previewStyle: { + color: "#ff9100", + fontWeight: 700, + fontSize: "32px", + textShadow: "0 0 4px #ff9100, 0 0 8px #ff9100, 0 0 16px rgba(255,145,0,0.5)", + }, + }, + { + key: "neon_purple", + label: "紫色发光", + style: { size: 32, color: "#d500f9", bold: true, italic: false, stroke: false, shadow: true }, + previewStyle: { + color: "#d500f9", + fontWeight: 700, + fontSize: "32px", + textShadow: "0 0 4px #d500f9, 0 0 8px #d500f9, 0 0 16px rgba(213,0,249,0.5)", + }, + }, + { + key: "bordered_white", + label: "白字绿框", + style: { size: 28, color: "#ffffff", bold: true, italic: false, stroke: false, shadow: false }, + previewStyle: { + color: "#ffffff", + fontWeight: 700, + fontSize: "32px", + background: "#1a1a1a", + border: "2px solid #69f0ae", + borderRadius: "4px", + padding: "2px 6px", + }, + }, + { + key: "gradient_warm", + label: "暖色渐变", + style: { size: 32, color: "#ff6d00", bold: true, italic: false, stroke: false, shadow: true }, + previewStyle: { + color: "#ff6d00", + fontWeight: 700, + fontSize: "32px", + textShadow: "0 0 6px rgba(255,109,0,0.6), 1px 1px 2px rgba(0,0,0,0.5)", + }, + }, + { + key: "gradient_cool", + label: "冷色渐变", + style: { size: 32, color: "#00b0ff", bold: true, italic: false, stroke: false, shadow: true }, + previewStyle: { + color: "#00b0ff", + fontWeight: 700, + fontSize: "32px", + textShadow: "0 0 6px rgba(0,176,255,0.6), 1px 1px 2px rgba(0,0,0,0.5)", + }, + }, + { + key: "shadow_deep", + label: "深影白字", + style: { size: 28, color: "#ffffff", bold: true, italic: false, stroke: false, shadow: true }, + previewStyle: { + color: "#ffffff", + fontWeight: 700, + fontSize: "32px", + textShadow: "2px 2px 4px rgba(0,0,0,0.8), 0 0 8px rgba(0,0,0,0.4)", + }, + }, + { + key: "soft_gold", + label: "柔光金", + style: { size: 28, color: "#ffd54f", bold: true, italic: false, stroke: false, shadow: true }, + previewStyle: { + color: "#ffd54f", + fontWeight: 700, + fontSize: "32px", + textShadow: "0 0 6px rgba(255,213,79,0.5), 1px 1px 2px rgba(0,0,0,0.4)", }, }, ] diff --git a/apps/web/src/pages/generate/generate.css b/apps/web/src/pages/generate/generate.css index 5675cf8f1..d55572b93 100644 --- a/apps/web/src/pages/generate/generate.css +++ b/apps/web/src/pages/generate/generate.css @@ -1733,36 +1733,36 @@ /* 标题预设卡片网格 */ .xx-title-presets-grid { display: grid; - grid-template-columns: repeat(6, 1fr); - gap: 8px; + grid-template-columns: repeat(6, 52px); + gap: 1px; } .xx-title-preset-card { display: flex; - flex-direction: column; align-items: center; justify-content: center; - aspect-ratio: 1 / 1; - padding: 4px; - background: var(--bg-secondary); + width: 52px; + height: 52px; + padding: 0; + background: #404040; border: 2px solid transparent; - border-radius: var(--radius-sm); + border-radius: 8px; cursor: pointer; transition: all 0.15s; - text-align: center; } .xx-title-preset-card:hover { - border-color: var(--primary-200); - background: var(--bg-primary); + border-color: #666; + background: #4d4d4d; } .xx-title-preset-card.active { - border-color: var(--primary-color); - background: var(--primary-50); + border-color: #409eff; + background: #4d4d4d; } .xx-title-preset-preview-text { + font-size: 32px; line-height: 1; user-select: none; } diff --git a/apps/web/src/pages/generate/hooks/step2-materials/useSmartMatch.ts b/apps/web/src/pages/generate/hooks/step2-materials/useSmartMatch.ts index e297b4626..3be6c288e 100755 --- a/apps/web/src/pages/generate/hooks/step2-materials/useSmartMatch.ts +++ b/apps/web/src/pages/generate/hooks/step2-materials/useSmartMatch.ts @@ -20,13 +20,14 @@ const SECONDS_PER_ASSET = 15 /** * 根据模板 segments 计算所需素材数量上限。 * 取每个 segment 的 duration_min 之和作为目标视频总时长, - * 再按 15 秒/素材估算需要多少个素材;结果钳制到 [1, 200] 区间(后端 limit 上限 200)。 + * 再按 15 秒/素材估算需要多少个素材,且保证不少于片段数(每个片段至少 1 个素材); + * 结果钳制到 [1, 200] 区间(后端 limit 上限 200)。 */ function computeLimitFromSegments(segments?: TemplateSegment[]): number { if (!segments || segments.length === 0) return DEFAULT_LIMIT const totalSeconds = segments.reduce((sum, seg) => sum + (seg.duration_min || 0), 0) if (totalSeconds <= 0) return DEFAULT_LIMIT - const limit = Math.ceil(totalSeconds / SECONDS_PER_ASSET) + const limit = Math.max(segments.length, Math.ceil(totalSeconds / SECONDS_PER_ASSET)) return Math.max(1, Math.min(limit, 200)) } diff --git a/apps/web/src/pages/generate/hooks/useCanvasPlayer.ts b/apps/web/src/pages/generate/hooks/useCanvasPlayer.ts index 10d14df0b..2bb6c1f71 100644 --- a/apps/web/src/pages/generate/hooks/useCanvasPlayer.ts +++ b/apps/web/src/pages/generate/hooks/useCanvasPlayer.ts @@ -233,7 +233,7 @@ export function useCanvasPlayer( fontSize: number fontFamily: string color: string - position: "top" | "center" | "bottom" + position: "top" | "center" | "bottom" | "custom" bold?: boolean stroke?: boolean shadow?: boolean diff --git a/apps/web/src/pages/generate/hooks/useGenerateFormState/index.ts b/apps/web/src/pages/generate/hooks/useGenerateFormState/index.ts index 255825343..feac0db50 100755 --- a/apps/web/src/pages/generate/hooks/useGenerateFormState/index.ts +++ b/apps/web/src/pages/generate/hooks/useGenerateFormState/index.ts @@ -27,6 +27,8 @@ const DEFAULT_TITLE_SETTINGS: TitleSettings = { stroke: true, shadow: false, color: "#ffffff", + posX: null, + posY: null, } export interface GenerateFormState { diff --git a/apps/web/src/pages/generate/hooks/useGenerateVideo.ts b/apps/web/src/pages/generate/hooks/useGenerateVideo.ts index 6ed60aefc..e131d0f63 100755 --- a/apps/web/src/pages/generate/hooks/useGenerateVideo.ts +++ b/apps/web/src/pages/generate/hooks/useGenerateVideo.ts @@ -117,6 +117,14 @@ export function useGenerateVideo(props: UseGenerateVideoProps) { font_size: props.titleSettings.size, font_color: props.titleSettings.color, position: props.titleSettings.position, + ...(props.titleSettings.position === "custom" && + props.titleSettings.posX != null && + props.titleSettings.posY != null + ? { + pos_x: Math.round(props.titleSettings.posX), + pos_y: Math.round(props.titleSettings.posY), + } + : {}), bold: props.titleSettings.bold, stroke: props.titleSettings.stroke, shadow: props.titleSettings.shadow, diff --git a/apps/web/src/pages/generate/hooks/useStep4Title/useTitleStyleUpdaters.ts b/apps/web/src/pages/generate/hooks/useStep4Title/useTitleStyleUpdaters.ts index 49ef2685d..5a7934c87 100644 --- a/apps/web/src/pages/generate/hooks/useStep4Title/useTitleStyleUpdaters.ts +++ b/apps/web/src/pages/generate/hooks/useStep4Title/useTitleStyleUpdaters.ts @@ -46,7 +46,16 @@ export function useTitleStyleUpdaters({ const updatePosition = useCallback( (position: string) => { - onTitleSettingsChange({ ...titleSettings, position }) + // 切回三档预设时清掉自定义坐标 + onTitleSettingsChange({ ...titleSettings, position, posX: null, posY: null }) + }, + [titleSettings, onTitleSettingsChange], + ) + + /** 拖拽更新自定义位置(由预览播放器调用) */ + const updateTitlePosition = useCallback( + (posX: number, posY: number) => { + onTitleSettingsChange({ ...titleSettings, position: "custom", posX, posY }) }, [titleSettings, onTitleSettingsChange], ) @@ -111,6 +120,7 @@ export function useTitleStyleUpdaters({ updateTitle, toggleAiAutoSelect, updatePosition, + updateTitlePosition, updateFont, updateSize, updateColor, diff --git a/apps/web/src/pages/generate/types.ts b/apps/web/src/pages/generate/types.ts index 88be13f77..b279973aa 100644 --- a/apps/web/src/pages/generate/types.ts +++ b/apps/web/src/pages/generate/types.ts @@ -16,6 +16,9 @@ export interface TitleSettings { stroke: boolean shadow: boolean color: string + /** 自由位置坐标(PlayRes 像素),仅当 position="custom" 时有效 */ + posX: number | null + posY: number | null } /* ── 智能匹配结果 ── */ diff --git a/apps/web/src/pages/products/components/ProductCard.tsx b/apps/web/src/pages/products/components/ProductCard.tsx index 8f1ff35ad..5a447ab5e 100644 --- a/apps/web/src/pages/products/components/ProductCard.tsx +++ b/apps/web/src/pages/products/components/ProductCard.tsx @@ -221,7 +221,7 @@ export const ProductCard: React.FC = ({ product.duplicateRate > 0 ? ` ${dupClass}` : "" }`} > - 查重率:{product.duplicateRate > 0 ? `${product.duplicateRate.toFixed(1)}%` : "-"} + 查重率:{product.duplicateRate != null ? `${product.duplicateRate.toFixed(1)}%` : "-"}
diff --git a/apps/web/src/pages/products/products.css b/apps/web/src/pages/products/products.css index 1df3cdc38..58bae02de 100644 --- a/apps/web/src/pages/products/products.css +++ b/apps/web/src/pages/products/products.css @@ -91,8 +91,6 @@ height: 18px; border: 2px solid var(--border-color); border-radius: var(--radius-xs); - display: grid; - place-items: center; transition: var(--transition-all); background: var(--bg-primary); flex-shrink: 0; @@ -137,7 +135,7 @@ ============================================================ */ .xx-products-grid { display: grid; - grid-template-columns: repeat(4, 1fr); + grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: var(--space-md); } @@ -187,8 +185,6 @@ height: 22px; border: 2px solid rgba(255, 255, 255, 0.8); border-radius: var(--radius-xs); - display: grid; - place-items: center; background: rgba(0, 0, 0, 0.3); backdrop-filter: blur(4px); cursor: pointer; @@ -262,11 +258,8 @@ .xx-product-thumb { position: relative; overflow: hidden; - display: grid; - place-items: center; color: var(--text-inverse); background: var(--color-gray-950); - max-height: 320px; } .xx-product-thumb-bg { @@ -289,22 +282,28 @@ } .xx-product-play { - position: relative; - z-index: 1; - width: 44px; - height: 44px; - border-radius: var(--radius-full); + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + z-index: 2; + width: 52px; + height: 52px; + border-radius: 50%; background: rgba(0, 0, 0, 0.45); backdrop-filter: blur(4px); - display: grid; - place-items: center; - font-size: var(--font-size-md); - transition: var(--transition-all); + display: flex; + align-items: center; + justify-content: center; + font-size: 28px; + color: #fff; + transition: all 0.2s; + cursor: pointer; } .xx-product-card:hover .xx-product-play { background: var(--primary-color); - transform: scale(1.1); + transform: translate(-50%, -50%) scale(1.1); } /* 时长标签 */ @@ -324,7 +323,7 @@ /* 卡片信息区 */ .xx-product-info { - padding: 14px; + padding: 8px 10px; display: flex; flex-direction: column; gap: var(--space-sm); @@ -506,8 +505,6 @@ z-index: 1000; background: rgba(0, 0, 0, 0.75); backdrop-filter: blur(8px); - display: grid; - place-items: center; animation: player-fade-in 0.25s ease-out; } @@ -546,8 +543,6 @@ background: var(--color-gray-950); aspect-ratio: 9 / 16; max-height: 60vh; - display: grid; - place-items: center; } .xx-player-video-wrap video { @@ -569,8 +564,6 @@ backdrop-filter: blur(4px); color: var(--text-inverse); font-size: 28px; - display: grid; - place-items: center; cursor: pointer; border: none; transition: var(--transition-all); @@ -667,8 +660,6 @@ backdrop-filter: blur(4px); color: var(--text-inverse); font-size: var(--font-size-md); - display: grid; - place-items: center; cursor: pointer; border: none; transition: var(--transition-all); diff --git a/apps/worker/video_processing/dedup.py b/apps/worker/video_processing/dedup.py index 16992ab30..ecbeec613 100755 --- a/apps/worker/video_processing/dedup.py +++ b/apps/worker/video_processing/dedup.py @@ -314,10 +314,13 @@ class VideoDeduplicator: project_id: str, current_video_id: str | None, session: Session, + *, + user_id: str = "", ) -> float: - """计算当前视频与项目内已有视频的最高相似度百分比。 + """计算当前视频与用户库内已有视频的最高相似度百分比。 - 遍历项目内所有其他有指纹的视频,对每个计算相似度: + 优先按 user_id 全局比较(跨项目),user_id 为空时回退到项目级比较。 + 遍历最近 200 个其他有指纹的视频,对每个计算相似度: - MD5 精确匹配 → 100% - pHash 相似度 → (1.0 - avg_distance / 64) * 100 取最高值作为 duplicate_rate(0~100)。 @@ -325,23 +328,34 @@ class VideoDeduplicator: Args: fingerprint: 当前视频的指纹 - project_id: 项目 ID + project_id: 项目 ID(user_id 为空时的回退范围) current_video_id: 当前视频 ID(排除自身,可为 None) session: 数据库会话 + user_id: 用户 ID(优先按用户全局比较) Returns: duplicate_rate: 0~100 的浮点数 """ - # 限制查询最近 100 个视频,避免大项目内存溢出 + # 限制查询最近 200 个视频,避免大库内存溢出 from packages.adapters.sqlalchemy_impl.models import GeneratedVideoModel - recent_models = ( - session.query(GeneratedVideoModel) - .filter(GeneratedVideoModel.project_id == project_id) - .order_by(GeneratedVideoModel.generated_at.desc()) - .limit(100) - .all() - ) + # 优先按 user_id 全局比较(跨项目),否则回退到项目级 + if user_id: + query = session.query(GeneratedVideoModel).filter( + GeneratedVideoModel.user_id == user_id, + ) + logger.debug("compute_duplicate_rate: user-level scope user_id=%s", user_id) + else: + query = session.query(GeneratedVideoModel).filter( + GeneratedVideoModel.project_id == project_id, + ) + logger.debug("compute_duplicate_rate: project-level fallback project_id=%s", project_id) + + # 排除当前视频自身(记录可能已写入 DB,必须在查询层排除) + if current_video_id: + query = query.filter(GeneratedVideoModel.id != current_video_id) + + recent_models = query.order_by(GeneratedVideoModel.generated_at.desc()).limit(200).all() video_repo = SQLAlchemyGeneratedVideoRepository(session) existing_videos = [video_repo._to_domain(m) for m in recent_models] diff --git a/apps/worker/video_processing/dedup_helpers.py b/apps/worker/video_processing/dedup_helpers.py index 8f17d7ac3..efcc2072f 100755 --- a/apps/worker/video_processing/dedup_helpers.py +++ b/apps/worker/video_processing/dedup_helpers.py @@ -123,7 +123,13 @@ def create_video_record_and_dedup( # 计算重复率百分比(与项目内所有已有视频对比取最高相似度) try: - dup_rate = deduplicator.compute_duplicate_rate(fingerprint, project_id, video_id, session) + dup_rate = deduplicator.compute_duplicate_rate( + fingerprint, + project_id, + video_id, + session, + user_id=user_id, + ) generated_video.duplicate_rate = dup_rate logger.info("Duplicate rate for %s: %.2f%%", video_id, dup_rate) except Exception as rate_err: diff --git a/apps/worker/video_processing/unified_render_service.py b/apps/worker/video_processing/unified_render_service.py index 3906869b0..4dd3323a4 100755 --- a/apps/worker/video_processing/unified_render_service.py +++ b/apps/worker/video_processing/unified_render_service.py @@ -200,6 +200,22 @@ class UnifiedRenderService: # 3. 计算视频总时长(用于字幕显示时长) video_duration = self._estimate_total_duration(layers) + # Debug: 输出各图层时长明细 + for layer in layers: + layer_total = sum(UnifiedRenderService._clip_adjusted_duration(c) for c in layer.clips) + clip_details = [ + f"{c.clip_id}(dur={c.duration:.3f},actual={c.actual_duration:.3f},speed={getattr(c, 'playback_speed', 1.0):.4f})" + for c in layer.clips + ] + logger.info( + "[debug] layer=%s clips=%d total=%.3f transition_duration=%.3f details=%s", + layer.role, + len(layer.clips), + layer_total, + self.transition_duration, + ", ".join(clip_details), + ) + logger.info("[debug] estimated video_duration=%.3f", video_duration) # 3.5 TTS 配音生成(如果配置了) self._maybe_add_voiceover_layer(layers, video_duration=video_duration) @@ -1422,6 +1438,7 @@ class UnifiedRenderService: if trim_segments and len(trim_segments) > 1: # 多段裁剪:展开为多个 clip resolved_segments = TrimEngine.resolve_segments(trim_segments, actual_duration) + configured_speed = getattr(clip, "playback_speed", 1.0) or 1.0 for i, seg in enumerate(resolved_segments): # 每个段生成一个独立的 ResolvedClip seg_clip_id = f"{clip.id}_seg_{seg.segment_id}" @@ -1429,6 +1446,19 @@ class UnifiedRenderService: seg_start = seg.trim.start_time seg_duration = seg.trim.duration + # 多段裁剪:如果段的时长超过素材实际时长,减速补偿 + seg_speed = configured_speed + if actual_duration > 0 and seg_duration > actual_duration + 0.05: + seg_speed = max(0.25, round(configured_speed * actual_duration / seg_duration, 4)) + logger.info( + "[debug] multi-seg clip=%s seg=%s duration=%.3f actual=%.3f → speed=%.4f", + clip.id, + seg.segment_id, + seg_duration, + actual_duration, + seg_speed, + ) + rc = ResolvedClip( clip_id=seg_clip_id, asset_id=asset_id, @@ -1439,7 +1469,7 @@ class UnifiedRenderService: duration=seg_duration, transition_effect=clip.transition_effect or "cut", transition_duration=getattr(clip, "transition_duration", 0.0) or 0.0, - playback_speed=getattr(clip, "playback_speed", 1.0) or 1.0, + playback_speed=seg_speed, config={**clip_config, "_segment_id": seg.segment_id}, actual_duration=actual_duration, trim_config=seg.trim, @@ -1461,6 +1491,7 @@ class UnifiedRenderService: effective_trim: TrimConfig | None = None final_start = clip.start_time final_duration = clip.duration + configured_speed = getattr(clip, "playback_speed", 1.0) or 1.0 if trim_config is not None and actual_duration > 0: effective_trim = trim_config.validate_and_resolve(actual_duration) @@ -1474,6 +1505,25 @@ class UnifiedRenderService: final_start = 0.0 final_duration = actual_duration + # 素材实际时长不足以覆盖配置的时长时,降低播放速度来补偿 + # 例如:配置4s但素材只有3s → speed=0.75x,用满3s素材达到4s输出 + if actual_duration > 0 and final_duration > actual_duration + 0.05: + compensated_speed = actual_duration / final_duration + # 保留用户设置的速度(如果已减速则叠加) + final_speed = configured_speed * compensated_speed + # 下限 0.25x + final_speed = max(0.25, round(final_speed, 4)) + logger.info( + "[debug] clip=%s duration=%.3f actual=%.3f → 减速补偿 speed=%.4f (configured=%.3f)", + clip.id, + final_duration, + actual_duration, + final_speed, + configured_speed, + ) + else: + final_speed = configured_speed + rc = ResolvedClip( clip_id=clip.id, asset_id=asset_id, @@ -1484,13 +1534,25 @@ class UnifiedRenderService: duration=final_duration, transition_effect=clip.transition_effect or "cut", transition_duration=getattr(clip, "transition_duration", 0.0) or 0.0, - playback_speed=getattr(clip, "playback_speed", 1.0) or 1.0, + playback_speed=final_speed, config=clip_config, actual_duration=actual_duration, trim_config=effective_trim, ) resolved.append(rc) + # Debug日志:记录每个clip的时长信息 + eff_dur = _clip_effective_duration_pure(final_duration, actual_duration) + logger.info( + "[debug] resolved clip=%s duration=%.3f actual=%.3f effective=%.3f speed=%.4f start=%.3f", + clip.id, + final_duration, + actual_duration, + eff_dur, + final_speed, + final_start, + ) + # 按 order 排序 resolved.sort(key=lambda c: c.order) return resolved @@ -1683,7 +1745,7 @@ class UnifiedRenderService: if d > 0: layer_dur = d break - xfade_filter, _ = self._transition_engine.build_xfade_chain( + xfade_filter, xfade_estimated_dur = self._transition_engine.build_xfade_chain( clip_durations=layer_durations, clip_video_labels=layer_labels, transitions=layer_transitions, @@ -1692,6 +1754,13 @@ class UnifiedRenderService: ) if xfade_filter: filter_parts.append(xfade_filter) + logger.info( + "[unified-render] layer=%s xfade: clips=%d durations=%s estimated_dur=%.3f", + layer.role, + len(layer_labels), + [round(d, 3) for d in layer_durations], + xfade_estimated_dur, + ) layer_output_labels[layer.role] = out_label # Step 3: 合成各层 @@ -1915,8 +1984,14 @@ class UnifiedRenderService: def _clip_effective_duration(clip: ResolvedClip) -> float: """计算 clip 的有效时长(原速 trim 后时长)。 + 如果 playback_speed < 1(为补偿素材不足而减速),返回配置的 duration, + 而非 min(duration, actual_duration)。 实际实现移至 packages.domain.render_layer_utils.clip_effective_duration。 """ + speed = getattr(clip, "playback_speed", 1.0) or 1.0 + # 减速场景:duration 已通过降低 playback_speed 补偿,返回配置的 duration + if speed < 1.0 - 1e-6 and clip.duration > 0: + return clip.duration return _clip_effective_duration_pure(clip.duration, clip.actual_duration) # ── 画中画(PiP)相关方法 ────────────────────────────────────────────────── diff --git a/packages/domain/plan_generator_utils.py b/packages/domain/plan_generator_utils.py index 3e57596ac..446f6da21 100755 --- a/packages/domain/plan_generator_utils.py +++ b/packages/domain/plan_generator_utils.py @@ -27,6 +27,137 @@ DEFAULT_INTRO_DURATION = 3.0 DEFAULT_OUTRO_DURATION = 3.0 +# ── SceneChange 镜头段工具 ──────────────────────────────────────────────────── + + +def build_scene_segments( + scene_changes: list[float], + asset_duration: float, +) -> list[tuple[float, float]]: + """根据场景切换点构建镜头段列表. + + Args: + scene_changes: 场景切换点时间戳列表(已排序,首位为 0.0) + asset_duration: 素材总时长 + + Returns: + 镜头段列表 [(start, end), ...],仅保留长度 >= 0.5s 的段 + """ + segments: list[tuple[float, float]] = [] + for i, ts in enumerate(scene_changes): + end = scene_changes[i + 1] if i + 1 < len(scene_changes) else asset_duration + # 只保留有效长度的镜头段(至少 0.5 秒) + if end - ts >= 0.5: + segments.append((ts, end)) + return segments + + +def pick_start_in_scene_segment( + seg_start: float, + seg_end: float, + clip_duration: float, +) -> float | None: + """在镜头段内随机选取一个起始时间点. + + 确保 start + clip_duration <= seg_end。 + 若镜头段长度不足以容纳片段,返回 None。 + """ + available = seg_end - seg_start - clip_duration + if available < 0: + return None + max_start = seg_start + available + return random.uniform(seg_start, max_start) + + +def _segments_overlap( + start: float, + duration: float, + used: list[tuple[float, float]], + edge_gap: float = 0.0, +) -> bool: + """候选区间 [start, start+duration] 是否与已用区间冲突(含边缘间隙扩边)。""" + end = start + duration + for used_start, used_end in used: + if start < used_end + edge_gap and end > used_start - edge_gap: + return True + return False + + +def pick_scene_aware_start( + asset_id: str, + clip_duration: float, + asset_durations: dict[str, float], + asset_scene_points: dict[str, list[float]] | None, + used_segments: dict[str, list[tuple[float, float]]], + *, + edge_gap: float = 0.0, +) -> float | None: + """基于缓存的场景切换点,从随机镜头段中选取不冲突的起始时间. + + 流程: + 1. 读取 asset_scene_points 中该素材的场景切换点缓存 → 构建镜头段 + 2. random.shuffle 镜头段(保证同一素材多次生成选不同镜头,而非固定第N段) + 3. 依次尝试:段内随机取点 → 越界检查 → 与 used_segments 冲突检查 + 4. 全部冲突/无缓存 → 返回 None,由调用方回退 _calc_random_start_time + + Args: + asset_id: 素材 ID + clip_duration: 片段时长(秒) + asset_durations: 素材 ID -> 总时长 + asset_scene_points: 素材 ID -> 场景切换点列表(metadata 缓存) + used_segments: 素材 ID -> 已用区间列表(冲突避让) + edge_gap: 冲突判定的边缘间隙(秒),已用区间按 [s-gap, e+gap] 扩边 + """ + asset_total = (asset_durations or {}).get(asset_id) + if not asset_total or asset_total <= 0: + return None + scene_points = (asset_scene_points or {}).get(asset_id) + if not scene_points: + return None + used = used_segments.get(asset_id, []) if used_segments else [] + + scene_segments = build_scene_segments(scene_points, asset_total) + if not scene_segments: + return None + random.shuffle(scene_segments) + + for seg_start, seg_end in scene_segments: + candidate = pick_start_in_scene_segment(seg_start, seg_end, clip_duration) + if candidate is None: + continue + # 越界检查(防御:场景点末尾段理论上不越界,metadata 脏数据兜底) + if candidate + clip_duration > asset_total: + continue + # 与已用区间冲突检查 + if _segments_overlap(candidate, clip_duration, used, edge_gap): + continue + return candidate + + return None + + +def extract_scene_points_from_metadata(metadata: object) -> list[float] | None: + """从素材 metadata 中提取并校验场景切换点缓存. + + 合法缓存:list 类型、至少 2 个数值点、单调非负;否则返回 None(按未缓存处理)。 + """ + if not isinstance(metadata, dict): + return None + points = metadata.get("scene_change_points") + if not isinstance(points, list) or len(points) < 2: + return None + try: + cleaned = [float(p) for p in points] + except (TypeError, ValueError): + return None + if any(p < 0 for p in cleaned): + return None + cleaned = sorted(cleaned) + if cleaned[0] != 0.0: + cleaned.insert(0, 0.0) + return cleaned + + # ── 素材分配 ──────────────────────────────────────────────────────────────── @@ -37,6 +168,7 @@ def distribute_assets( *, random_selection: bool = False, asset_durations: dict[str, float] | None = None, + asset_scene_points: dict[str, list[float]] | None = None, ) -> None: """按 editing_mode 将素材分配到 clips(就地修改). @@ -46,12 +178,16 @@ def distribute_assets( - VOICE_OVER: 素材→main clips (B-roll) - VOICE_PIP: 第1个→background, 第2个→corner_voice, 其余→b_roll + start_time 选取:素材 metadata 中有场景切换点缓存时,优先从随机镜头段 + 取起点(不同片段来自不同镜头);无缓存或镜头段都冲突时回退随机起点。 + Args: clips: 剪辑片段列表(就地修改 asset_id) asset_ids: 素材 ID 列表 editing_mode: 剪辑模式字符串 random_selection: 是否随机选择素材(用于预览生成) - asset_durations: 素材 ID -> 时长(秒)映射,用于设置随机 start_time + asset_durations: 素材 ID -> 时长(秒)映射,用于设置 start_time + asset_scene_points: 素材 ID -> 场景切换点列表(metadata 缓存) """ if not asset_ids or not clips: return @@ -62,22 +198,56 @@ def distribute_assets( random.shuffle(asset_ids) if editing_mode == EditingMode.ONE_TAKE.value: - _distribute_one_take(clips, asset_ids, asset_durations) + _distribute_one_take(clips, asset_ids, asset_durations, asset_scene_points) elif editing_mode == EditingMode.PIP.value: - _distribute_pip(clips, asset_ids, asset_durations) + _distribute_pip(clips, asset_ids, asset_durations, asset_scene_points) elif editing_mode == EditingMode.VOICE_OVER.value: - _distribute_voice_over(clips, asset_ids, asset_durations) + _distribute_voice_over(clips, asset_ids, asset_durations, asset_scene_points) elif editing_mode == EditingMode.VOICE_PIP.value: - _distribute_voice_pip(clips, asset_ids, asset_durations) + _distribute_voice_pip(clips, asset_ids, asset_durations, asset_scene_points) else: # 未知模式,退化为 one_take - _distribute_one_take(clips, asset_ids, asset_durations) + _distribute_one_take(clips, asset_ids, asset_durations, asset_scene_points) + + +def _resolve_start_time( + asset_id: str, + clip_duration: float, + asset_durations: dict[str, float] | None, + used_segments: dict[str, list[tuple[float, float]]], + asset_scene_points: dict[str, list[float]] | None = None, + on_exhausted: Callable[[str, float], tuple[float, float] | None] | None = None, +) -> float | None: + """选取片段起点:场景缓存优先(随机镜头段),无缓存/全冲突回退随机起点. + + 场景路径与随机路径共享 used_segments 冲突避让;场景路径返回 None 时 + (无缓存、镜头段全冲突)回退 _calc_random_start_time,其受控复用逻辑 + (on_exhausted)不受影响。 + """ + if asset_scene_points and asset_scene_points.get(asset_id): + scene_start = pick_scene_aware_start( + asset_id, + clip_duration, + asset_durations or {}, + asset_scene_points, + used_segments, + ) + if scene_start is not None: + return scene_start + return _calc_random_start_time( + asset_id, + clip_duration, + asset_durations, + used_segments, + on_exhausted=on_exhausted, + ) def _distribute_one_take( clips: List[EditPlanClip], asset_ids: List[str], asset_durations: dict[str, float] | None = None, + asset_scene_points: dict[str, list[float]] | None = None, ) -> None: """ONE_TAKE: 素材按顺序依次分配给 main 类型 clips.""" used_segments: dict[str, list[tuple[float, float]]] = {} @@ -85,7 +255,9 @@ def _distribute_one_take( for i, clip in enumerate(main_clips): if i < len(asset_ids): asset_id = asset_ids[i] - start_time = _calc_random_start_time(asset_id, clip.duration, asset_durations, used_segments) + start_time = _resolve_start_time( + asset_id, clip.duration, asset_durations, used_segments, asset_scene_points + ) clip.assign_asset(asset_id, start_time=start_time) # Record used segment if start_time is not None and asset_durations is not None: @@ -98,6 +270,7 @@ def _distribute_pip( clips: List[EditPlanClip], asset_ids: List[str], asset_durations: dict[str, float] | None = None, + asset_scene_points: dict[str, list[float]] | None = None, ) -> None: """PIP: 第1个素材→main(全屏背景),其余→overlay clips.""" used_segments: dict[str, list[tuple[float, float]]] = {} @@ -105,7 +278,9 @@ def _distribute_pip( main_clips = [c for c in clips if c.clip_type == ClipType.MAIN.value] if main_clips and asset_ids: asset_id = asset_ids[0] - start_time = _calc_random_start_time(asset_id, main_clips[0].duration, asset_durations, used_segments) + start_time = _resolve_start_time( + asset_id, main_clips[0].duration, asset_durations, used_segments, asset_scene_points + ) main_clips[0].assign_asset(asset_id, start_time=start_time) # Record used segment if start_time is not None and asset_durations is not None: @@ -119,7 +294,9 @@ def _distribute_pip( for i, clip in enumerate(overlay_clips): if i < len(remaining): asset_id = remaining[i] - start_time = _calc_random_start_time(asset_id, clip.duration, asset_durations, used_segments) + start_time = _resolve_start_time( + asset_id, clip.duration, asset_durations, used_segments, asset_scene_points + ) clip.assign_asset(asset_id, start_time=start_time) # Record used segment if start_time is not None and asset_durations is not None: @@ -132,6 +309,7 @@ def _distribute_voice_over( clips: List[EditPlanClip], asset_ids: List[str], asset_durations: dict[str, float] | None = None, + asset_scene_points: dict[str, list[float]] | None = None, ) -> None: """VOICE_OVER: 素材→main clips (B-roll).""" used_segments: dict[str, list[tuple[float, float]]] = {} @@ -139,7 +317,9 @@ def _distribute_voice_over( for i, clip in enumerate(main_clips): if i < len(asset_ids): asset_id = asset_ids[i] - start_time = _calc_random_start_time(asset_id, clip.duration, asset_durations, used_segments) + start_time = _resolve_start_time( + asset_id, clip.duration, asset_durations, used_segments, asset_scene_points + ) clip.assign_asset(asset_id, start_time=start_time) # Record used segment if start_time is not None and asset_durations is not None: @@ -152,6 +332,7 @@ def _distribute_voice_pip( clips: List[EditPlanClip], asset_ids: List[str], asset_durations: dict[str, float] | None = None, + asset_scene_points: dict[str, list[float]] | None = None, ) -> None: """VOICE_PIP: 第1个→background, 第2个→corner_voice, 其余→b_roll.""" used_segments: dict[str, list[tuple[float, float]]] = {} @@ -164,7 +345,9 @@ def _distribute_voice_pip( # 第1个 → background if idx < len(asset_ids) and bg_clips: asset_id = asset_ids[idx] - start_time = _calc_random_start_time(asset_id, bg_clips[0].duration, asset_durations, used_segments) + start_time = _resolve_start_time( + asset_id, bg_clips[0].duration, asset_durations, used_segments, asset_scene_points + ) bg_clips[0].assign_asset(asset_id, start_time=start_time) # Record used segment if start_time is not None and asset_durations is not None: @@ -176,7 +359,9 @@ def _distribute_voice_pip( # 第2个 → corner_voice if idx < len(asset_ids) and voice_clips: asset_id = asset_ids[idx] - start_time = _calc_random_start_time(asset_id, voice_clips[0].duration, asset_durations, used_segments) + start_time = _resolve_start_time( + asset_id, voice_clips[0].duration, asset_durations, used_segments, asset_scene_points + ) voice_clips[0].assign_asset(asset_id, start_time=start_time) # Record used segment if start_time is not None and asset_durations is not None: @@ -190,7 +375,9 @@ def _distribute_voice_pip( for i, clip in enumerate(broll_clips): if i < len(remaining): asset_id = remaining[i] - start_time = _calc_random_start_time(asset_id, clip.duration, asset_durations, used_segments) + start_time = _resolve_start_time( + asset_id, clip.duration, asset_durations, used_segments, asset_scene_points + ) clip.assign_asset(asset_id, start_time=start_time) # Record used segment if start_time is not None and asset_durations is not None: diff --git a/packages/domain/smart_match.py b/packages/domain/smart_match.py index a678265b9..b639a91f0 100755 --- a/packages/domain/smart_match.py +++ b/packages/domain/smart_match.py @@ -14,6 +14,13 @@ from dataclasses import dataclass, field from datetime import datetime, timezone from typing import Any +# 素材选取排序时注入的随机噪声上限(分)。 +# score_asset 综合得分范围为 0-100,噪声 0~20 意味着: +# - 素材间得分差距 > 20 分时,排名不受影响(质量差异显著的素材保持稳定优先级) +# - 得分接近(差距 <= 20 分)的素材排名会随机浮动,使每次生成选出的素材组合不同, +# 从素材组合层面降低成片重复率;排名靠后的低分素材也有机会入选。 +SCORE_RANDOM_NOISE_MAX = 20.0 + @dataclass class SmartMatchResult: diff --git a/packages/domain/xfade_builder.py b/packages/domain/xfade_builder.py index c5ec2a505..a4345e7c3 100755 --- a/packages/domain/xfade_builder.py +++ b/packages/domain/xfade_builder.py @@ -150,8 +150,11 @@ def build_xfade_filter_chain( else: first_input_dur = cumulative - total_transition - # 原始 offset 计算 - offset = max(0.0, cumulative - transition_duration * i) + # 正确的 offset 计算:offset 应相对于累积输出时长 + # offset = 累积输出中,转场开始的时间点 + # = first_input_dur - transition_duration + # 这样每个转场之间的"纯内容"时长等于原始 clip 时长 + offset = max(0.0, first_input_dur - transition_duration) # 安全钳制:offset + td 不能超过第一个输入的时长 available = max(0.0, first_input_dur - offset) diff --git a/packages/shared/mediakit_client.py b/packages/shared/mediakit_client.py index 94557cbe5..80c63f1ae 100755 --- a/packages/shared/mediakit_client.py +++ b/packages/shared/mediakit_client.py @@ -119,6 +119,70 @@ class MediaKitClient: return None + def detect_scene_changes( + self, + video_url: str, + max_frames: int = 20, + poll_interval: float = 2.0, + max_poll_attempts: int = 30, + ) -> Optional[List[float]]: + """检测视频场景切换点,返回时间戳列表. + + 降级策略: + 1. 先尝试 SceneChange 策略 + 2. SceneChange 失败(OOM等)→ 退回 TimeInterval(5秒间隔) + 3. MediaKit 不可用 → 返回 None + + Returns: + 场景切换点时间戳列表,如 [0.0, 3.2, 7.8, 12.5] + 失败返回 None + """ + if not self.is_available: + logger.warning("MediaKit 未配置,跳过场景检测") + return None + + # 策略1:尝试 SceneChange + frames = self.extract_frames( + video_url=video_url, + strategy="SceneChange", + max_frames=max_frames, + poll_interval=poll_interval, + max_poll_attempts=max_poll_attempts, + ) + + # 策略2:SceneChange 失败 → 退回 TimeInterval(5秒间隔) + if frames is None: + logger.info("SceneChange 策略失败,降级为 TimeInterval(5秒间隔)") + # 估算帧数:假设视频最长60秒,每5秒一帧 + ti_max_frames = max(max_frames, 12) + frames = self.extract_frames( + video_url=video_url, + strategy="TimeInterval", + max_frames=ti_max_frames, + poll_interval=poll_interval, + max_poll_attempts=max_poll_attempts, + ) + + if frames is None: + return None + + # 从帧列表中提取 timestamp,排序 + timestamps = sorted({float(f.get("timestamp", 0.0)) for f in frames if "timestamp" in f}) + + if not timestamps: + return None + + # 始终在列表开头加 0.0(素材起始点) + if timestamps[0] != 0.0: + timestamps.insert(0, 0.0) + + logger.info( + "场景检测完成: video_url=%s scene_changes=%s", + video_url[:80], + timestamps, + ) + return timestamps + def _submit_extract_task( self, video_url: str, diff --git a/requirements-base.txt b/requirements-base.txt index d29b06545..1eb77c820 100644 --- a/requirements-base.txt +++ b/requirements-base.txt @@ -24,8 +24,10 @@ celery==5.4.0 # 对象存储 oss2==2.18.4 -# HTTP 客户端 +# HTTP 客户端(pin 间接依赖防止版本漂移) httpx==0.27.2 +httpcore==1.0.7 +h2==4.1.0 # Prometheus monitoring prometheus-client==0.21.1 diff --git a/requirements-dev.txt b/requirements-dev.txt index 1f7dbf57b..dd88dd618 100755 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -15,5 +15,6 @@ pytest-xdist==3.6.1 diff-cover==8.0.3 # 资产质量评分依赖(与 requirements-worker.txt 保持一致) +numpy==1.26.4 scipy==1.13.1 Pillow==10.4.0 diff --git a/scripts/ci/auto_approve.sh b/scripts/ci/auto_approve.sh index 5736898f1..c94988901 100644 --- a/scripts/ci/auto_approve.sh +++ b/scripts/ci/auto_approve.sh @@ -28,15 +28,12 @@ if [ "$SKIP_BACKEND" = "true" ]; then CONTEXTS=("CI/CD Pipeline / Frontend Lint (pull_request)") else CONTEXTS=( - "CI/CD Pipeline / Validate - Code Quality (pull_request)" - "CI/CD Pipeline / Validate - Type Check (mypy) (pull_request)" - "CI/CD Pipeline / Validate - Migration (alembic) (pull_request)" + # CI 优化后 job 名称(2026-08):Code Quality 拆分为 Style+Security,Type Check+Migration 合并为 Python + # 与 pr_auto_scan.py 的 REQUIRED_CONTEXTS_APPROVE 保持一致 + "CI/CD Pipeline / Validate - Style (pull_request)" + "CI/CD Pipeline / Validate - Security (pull_request)" + "CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request)" "CI/CD Pipeline / Frontend Lint (pull_request)" - "CI/CD Pipeline / Unit Tests (pull_request)" - "CI/CD Pipeline / Frontend Unit Tests (pull_request)" - "CI/CD Pipeline / PR Build API Image (pull_request)" - "CI/CD Pipeline / PR Build Web Image (pull_request)" - "CI/CD Pipeline / PR Build Worker Image (pull_request)" ) fi @@ -153,4 +150,4 @@ done echo echo "⏰ 快速检查超时(2分钟),CI尚未完成,退出等待下次触发(workflow_run事件或5分钟定时扫描)" -exit 0 +exit 0 \ No newline at end of file diff --git a/scripts/ci/ensure_persistent_builder.sh b/scripts/ci/ensure_persistent_builder.sh index 0f3c45bdc..3e37f2203 100755 --- a/scripts/ci/ensure_persistent_builder.sh +++ b/scripts/ci/ensure_persistent_builder.sh @@ -4,6 +4,7 @@ # - docker-container driver, host 网络 # - 层缓存保存在 buildkit 容器及其 _state 命名卷中,job 结束不清理 # - 宿主机 ci-docker-cleanup.sh 已豁免该 builder +# - 每次执行自动同步宿主机 docker config 到 BuildKit 容器(确保 registry 认证) # 用法: bash scripts/ci/ensure_persistent_builder.sh set -eu @@ -34,3 +35,26 @@ docker buildx use "$BUILDER" docker buildx inspect "$BUILDER" --bootstrap echo "✅ builder ready" docker buildx ls | head -5 + +# === 同步宿主机 docker config 到 BuildKit 容器(确保 registry 认证) === +# BuildKit 容器名遵循 docker buildx 命名规则: buildx_buildkit__0 +BUILDKIT_CONTAINER="buildx_buildkit_${BUILDER}_0" + +if docker inspect "$BUILDKIT_CONTAINER" >/dev/null 2>&1; then + # 宿主机 docker config 路径 + HOST_DOCKER_CONFIG="/root/.docker/config.json" + + if [ -f "$HOST_DOCKER_CONFIG" ]; then + echo "=== 同步 docker config 到 BuildKit 容器 ===" + # 确保容器内 .docker 目录存在 + docker exec "$BUILDKIT_CONTAINER" mkdir -p /root/.docker + # 拷贝 config.json + docker cp "$HOST_DOCKER_CONFIG" "$BUILDKIT_CONTAINER:/root/.docker/config.json" + echo "✅ docker config 已同步到 BuildKit 容器" + else + echo "⚠️ 宿主机 docker config 不存在: $HOST_DOCKER_CONFIG(跳过同步)" + fi +else + echo "⚠️ BuildKit 容器不存在: $BUILDKIT_CONTAINER(跳过 config 同步)" +fi + diff --git a/scripts/ci/pr_auto_scan.py b/scripts/ci/pr_auto_scan.py index fc422893e..37626c916 100644 --- a/scripts/ci/pr_auto_scan.py +++ b/scripts/ci/pr_auto_scan.py @@ -303,9 +303,10 @@ def main(): "CI/CD Pipeline / CI Gate (pull_request)", ] REQUIRED_CONTEXTS_APPROVE = [ - "CI/CD Pipeline / Validate - Code Quality (pull_request)", - "CI/CD Pipeline / Validate - Type Check (mypy) (pull_request)", - "CI/CD Pipeline / Validate - Migration (alembic) (pull_request)", + # CI 优化后 job 名称(2026-08):Code Quality 拆分为 Style+Security,Type Check+Migration 合并为 Python + "CI/CD Pipeline / Validate - Style (pull_request)", + "CI/CD Pipeline / Validate - Security (pull_request)", + "CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request)", "CI/CD Pipeline / Frontend Lint (pull_request)", ] FRONTEND_ONLY_CONTEXT = [ diff --git a/scripts/ci/run_integration_tests.sh b/scripts/ci/run_integration_tests.sh index 192b538c4..0390285a8 100755 --- a/scripts/ci/run_integration_tests.sh +++ b/scripts/ci/run_integration_tests.sh @@ -197,8 +197,8 @@ if [ "$USE_SHARED_PG" = "true" ]; then # 创建主数据库(xdist 模式下各 worker 会创建自己的数据库,主库作为 fallback) echo "创建主测试数据库: $CI_DB_NAME" PGPASSWORD="$SHARED_PG_PASSWORD" python3 -c " -import psycopg2 -conn = psycopg2.connect(host='$SHARED_PG_HOST', port=$SHARED_PG_PORT, user='$SHARED_PG_USER', password='$SHARED_PG_PASSWORD', dbname='postgres') +import psycopg +conn = psycopg.connect(host='$SHARED_PG_HOST', port=$SHARED_PG_PORT, user='$SHARED_PG_USER', password='$SHARED_PG_PASSWORD', dbname='postgres') conn.autocommit = True cur = conn.cursor() cur.execute(f'DROP DATABASE IF EXISTS \"$CI_DB_NAME\" WITH (FORCE)') @@ -304,8 +304,8 @@ if [ "$USE_SHARED_PG" = "true" ]; then # 清理所有以 CI_DB_NAME 开头的数据库(主库 + worker 库) PGPASSWORD="${SHARED_PG_PASSWORD}" python3 -c " -import psycopg2 -conn = psycopg2.connect(host='${SHARED_PG_HOST}', port=${SHARED_PG_PORT}, user='${SHARED_PG_USER}', password='${SHARED_PG_PASSWORD}', dbname='postgres') +import psycopg +conn = psycopg.connect(host='${SHARED_PG_HOST}', port=${SHARED_PG_PORT}, user='${SHARED_PG_USER}', password='${SHARED_PG_PASSWORD}', dbname='postgres') conn.autocommit = True cur = conn.cursor() @@ -344,4 +344,4 @@ python3 scripts/ci_coverage_summary.py set -e echo "" -echo "=== CI Integration Tests 全部通过 ✅ ===" +echo "=== CI Integration Tests 全部通过 ✅ ===" \ No newline at end of file diff --git a/scripts/ci/run_unit_tests.sh b/scripts/ci/run_unit_tests.sh index 4ba9466cc..0084e3c59 100755 --- a/scripts/ci/run_unit_tests.sh +++ b/scripts/ci/run_unit_tests.sh @@ -1,77 +1,136 @@ #!/bin/bash # CI Unit Tests Job 主脚本 -# 包含:依赖安装、增量测试选择、覆盖率测试、diff覆盖率门禁 +# 包含:依赖缓存、增量测试选择、覆盖率测试、diff覆盖率门禁 set -eu JOB_NAME="${1:-Unit Tests}" echo "=== CI Unit Tests 开始 ===" +# --- 依赖缓存检查 --- +# 如果 requirements 文件未变化且依赖已安装,跳过 pip install(持久 runner 优化) +REQ_HASH_FILE="/tmp/.ci_unit_tests_req_hash" +CURRENT_REQ_HASH="" +if [ -f requirements-base.txt ] && [ -f requirements.txt ] && [ -f requirements-dev.txt ]; then + CURRENT_REQ_HASH=$(cat requirements-base.txt requirements.txt requirements-dev.txt | md5sum | cut -d' ' -f1) +fi + +SKIP_PIP_INSTALL=false +if [ -n "$CURRENT_REQ_HASH" ] && [ -f "$REQ_HASH_FILE" ]; then + CACHED_HASH=$(cat "$REQ_HASH_FILE") + if [ "$CACHED_HASH" = "$CURRENT_REQ_HASH" ]; then + # 验证关键包是否还在 + if python3 -c "import pytest; import celery" 2>/dev/null; then + echo "✅ 依赖无变化 (hash=$CURRENT_REQ_HASH),跳过 pip install" + SKIP_PIP_INSTALL=true + else + echo "⚠️ 依赖 hash 匹配但关键包缺失,重新安装" + fi + fi +fi + # --- 安装依赖 --- -echo "" -echo "=== 安装 Python 依赖 ===" -# pip install 带重试(网络不稳定时自动重试) -for i in 1 2 3; do - python3 -m pip install -q -r requirements-base.txt && break - echo "pip install requirements-base.txt 失败,重试 $i/3..." - [ $i -eq 3 ] && exit 1 - sleep 5 -done -for i in 1 2 3; do - python3 -m pip install -q -r requirements.txt && break - echo "pip install requirements.txt 失败,重试 $i/3..." - [ $i -eq 3 ] && exit 1 - sleep 5 -done -for i in 1 2 3; do - python3 -m pip install -q -r requirements-dev.txt && break - echo "pip install requirements-dev.txt 失败,重试 $i/3..." - [ $i -eq 3 ] && exit 1 - sleep 5 -done +if [ "$SKIP_PIP_INSTALL" = "false" ]; then + echo "" + echo "=== 安装 Python 依赖 ===" + # pip install 带重试(网络不稳定时自动重试),合并为一次调用减少开销 + for i in 1 2 3; do + python3 -m pip install -q -r requirements-base.txt -r requirements.txt -r requirements-dev.txt && break + echo "pip install 失败,重试 $i/3..." + [ $i -eq 3 ] && exit 1 + sleep 5 + done + # 保存 hash 标记 + if [ -n "$CURRENT_REQ_HASH" ]; then + echo "$CURRENT_REQ_HASH" > "$REQ_HASH_FILE" + fi +fi pytest --version # 双保险:确保numpy已安装 echo "=== 验证 numpy 安装 ===" SKIP_NUMPY_TESTS=0 -python3 -m pip install numpy==1.26.4 || { - echo "❌ numpy 首次安装失败,尝试不使用缓存重新安装..." - python3 -m pip install --no-cache-dir numpy==1.26.4 || { - echo "⚠️ numpy 安装失败,跳过需要 numpy 的测试" - SKIP_NUMPY_TESTS=1 +if python3 -c "import numpy; assert numpy.__version__ == '1.26.4'" 2>/dev/null; then + echo "✅ numpy 1.26.4 已就绪(缓存命中)" +else + echo "需要安装 numpy 1.26.4..." + python3 -m pip install numpy==1.26.4 || { + echo "❌ numpy 首次安装失败,尝试不使用缓存重新安装..." + python3 -m pip install --no-cache-dir numpy==1.26.4 || { + echo "⚠️ numpy 安装失败,跳过需要 numpy 的测试" + SKIP_NUMPY_TESTS=1 + } } -} +fi if [ "$SKIP_NUMPY_TESTS" = "0" ]; then - python3 -c "import numpy; print(f'✅ numpy {numpy.__version__} 安装成功')" || { + python3 -c "import numpy; print(f'✅ numpy {numpy.__version__} 就绪')" || { echo "⚠️ numpy 导入失败,跳过需要 numpy 的测试" SKIP_NUMPY_TESTS=1 } fi -# --- 增量测试选择(仅PR) --- +# --- 增量测试选择(PR + push 均支持) --- UNIT_TEST_MODE="full" SELECTED_TEST_FILES="tests/unit" -if [ "${GITHUB_EVENT_NAME:-}" = "pull_request" ] && [ -n "${GITHUB_TOKEN:-}" ]; then +IS_PULL_REQUEST=false +IS_PUSH=false +[ "${GITHUB_EVENT_NAME:-}" = "pull_request" ] && IS_PULL_REQUEST=true +[ "${GITHUB_EVENT_NAME:-}" = "push" ] && IS_PUSH=true + +if ($IS_PULL_REQUEST || $IS_PUSH) && [ -n "${GITHUB_TOKEN:-}" ]; then echo "" echo "=== 增量测试选择 ===" - PR_NUMBER=$(echo "$GITHUB_REF" | sed 's|refs/pull/||; s|/.*||') - API_URL="${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/pulls/${PR_NUMBER}/files?limit=300" - CHANGED_FILES=$(curl -s -H "Authorization: token ${GITHUB_TOKEN}" "$API_URL" | python3 -c "import sys,json; [print(f['filename']) for f in json.load(sys.stdin) if f['status'] != 'removed']") + + CHANGED_FILES="" + + if $IS_PULL_REQUEST; then + PR_NUMBER=$(echo "$GITHUB_REF" | sed 's|refs/pull/||; s|/.*||') + API_URL="${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/pulls/${PR_NUMBER}/files?limit=300" + CHANGED_FILES=$(curl -s -H "Authorization: token ${GITHUB_TOKEN}" "$API_URL" \ + | python3 -c "import sys,json; [print(f['filename']) for f in json.load(sys.stdin) if f['status'] != 'removed']") + elif $IS_PUSH && [ -n "${GITHUB_SHA:-}" ]; then + # Push 事件:通过 GitHub API 获取本次 push 改动的文件 + API_URL="${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/commits/${GITHUB_SHA}" + RESPONSE=$(curl -s -H "Authorization: token ${GITHUB_TOKEN}" \ + -H "Accept: application/vnd.github.v3.diff" "$API_URL" 2>/dev/null || echo "") + + if [ -n "$RESPONSE" ]; then + CHANGED_FILES=$(echo "$RESPONSE" | grep '^diff --git' | sed 's|diff --git a/\(.*\) b/.*|\1|' || echo "") + fi + + # 备用方案:获取 previous commit SHA 再查 API + if [ -z "$CHANGED_FILES" ]; then + PREV_SHA=$(curl -s -H "Authorization: token ${GITHUB_TOKEN}" \ + "${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/commits?sha=${GITHUB_SHA}&per_page=2" \ + | python3 -c "import sys,json; commits=json.load(sys.stdin); print(commits[1]['sha'] if len(commits)>1 else '')" 2>/dev/null || echo "") + if [ -n "$PREV_SHA" ]; then + COMPARE_URL="${GITHUB_API_URL}/repos/${GITHUB_REPOSITORY}/compare/${PREV_SHA}...${GITHUB_SHA}" + CHANGED_FILES=$(curl -s -H "Authorization: token ${GITHUB_TOKEN}" "$COMPARE_URL" \ + | python3 -c "import sys,json; data=json.load(sys.stdin); [print(f['filename']) for f in data.get('files',[]) if f['status'] != 'removed']" 2>/dev/null || echo "") + fi + fi + fi + echo "改动文件数: $(echo "$CHANGED_FILES" | grep -c . || echo 0)" - set +e - CHANGED_FILES="$CHANGED_FILES" \ - SELECTED_TESTS_OUTPUT=/tmp/selected_tests.txt \ - python3 scripts/ci/select_unit_tests.py - SELECT_EXIT=$? - set -e - if [ $SELECT_EXIT -eq 0 ]; then - UNIT_TEST_MODE="incremental" - TEST_FILES=$(cat /tmp/selected_tests.txt | tr '\n' ' ') - SELECTED_TEST_FILES="$TEST_FILES" - echo "增量模式: $(cat /tmp/selected_tests.txt | wc -l) 个测试文件" + + if [ -n "$CHANGED_FILES" ]; then + set +e + CHANGED_FILES="$CHANGED_FILES" \ + SELECTED_TESTS_OUTPUT=/tmp/selected_tests.txt \ + python3 scripts/ci/select_unit_tests.py + SELECT_EXIT=$? + set -e + if [ $SELECT_EXIT -eq 0 ]; then + UNIT_TEST_MODE="incremental" + TEST_FILES=$(cat /tmp/selected_tests.txt | tr '\n' ' ') + SELECTED_TEST_FILES="$TEST_FILES" + echo "增量模式: $(cat /tmp/selected_tests.txt | wc -l) 个测试文件" + else + echo "全量模式(增量选择失败)" + fi else - echo "全量模式" + echo "无法获取改动文件列表,使用全量模式" fi fi @@ -116,7 +175,7 @@ if [ "${GITHUB_EVENT_NAME:-}" = "pull_request" ] && [ -n "${GITHUB_TOKEN:-}" ]; PR_CODE_DIR="/tmp/pr-code-$$" mkdir -p "$PR_CODE_DIR" - # 备份PR代码(含coverage.xml,diff-cover需要用到 + # 备份PR代码(含coverage.xml,diff-cover需要用到) find . -maxdepth 1 -mindepth 1 ! -name 'diff_coverage.html' -exec cp -r {} "$PR_CODE_DIR/" \; rm -rf .git git init > /dev/null 2>&1 diff --git a/scripts/ci/run_validate.sh b/scripts/ci/run_validate.sh index c85c299a1..94fdfae93 100755 --- a/scripts/ci/run_validate.sh +++ b/scripts/ci/run_validate.sh @@ -409,8 +409,8 @@ except: echo "创建测试数据库: $CI_DB_NAME" PGPASSWORD="$SHARED_PG_PASSWORD" python3 -c " -import psycopg2 -conn = psycopg2.connect(host='$SHARED_PG_HOST', port=$SHARED_PG_PORT, user='$SHARED_PG_USER', password='$SHARED_PG_PASSWORD', dbname='postgres') +import psycopg +conn = psycopg.connect(host='$SHARED_PG_HOST', port=$SHARED_PG_PORT, user='$SHARED_PG_USER', password='$SHARED_PG_PASSWORD', dbname='postgres') conn.autocommit = True cur = conn.cursor() cur.execute(f'DROP DATABASE IF EXISTS \"$CI_DB_NAME\" WITH (FORCE)') @@ -431,8 +431,8 @@ conn.close() # 清理数据库 echo "清理测试数据库: $CI_DB_NAME" PGPASSWORD="$SHARED_PG_PASSWORD" python3 -c " -import psycopg2 -conn = psycopg2.connect(host='$SHARED_PG_HOST', port=$SHARED_PG_PORT, user='$SHARED_PG_USER', password='$SHARED_PG_PASSWORD', dbname='postgres') +import psycopg +conn = psycopg.connect(host='$SHARED_PG_HOST', port=$SHARED_PG_PORT, user='$SHARED_PG_USER', password='$SHARED_PG_PASSWORD', dbname='postgres') conn.autocommit = True cur = conn.cursor() cur.execute(f'DROP DATABASE IF EXISTS \"$CI_DB_NAME\" WITH (FORCE)') diff --git a/scripts/ci/validate_migration.sh b/scripts/ci/validate_migration.sh index 20388fc18..6d604406c 100755 --- a/scripts/ci/validate_migration.sh +++ b/scripts/ci/validate_migration.sh @@ -169,8 +169,8 @@ if [ "$USE_SHARED_PG" = "true" ]; then echo "创建测试数据库: $CI_DB_NAME" PGPASSWORD="$SHARED_PG_PASSWORD" python3 -c " -import psycopg2 -conn = psycopg2.connect(host='$SHARED_PG_HOST', port=$SHARED_PG_PORT, user='$SHARED_PG_USER', password='$SHARED_PG_PASSWORD', dbname='postgres') +import psycopg +conn = psycopg.connect(host='$SHARED_PG_HOST', port=$SHARED_PG_PORT, user='$SHARED_PG_USER', password='$SHARED_PG_PASSWORD', dbname='postgres') conn.autocommit = True cur = conn.cursor() cur.execute(f'DROP DATABASE IF EXISTS \"$CI_DB_NAME\" WITH (FORCE)') @@ -185,8 +185,8 @@ conn.close() echo "" echo "清理测试数据库: $CI_DB_NAME" PGPASSWORD="$SHARED_PG_PASSWORD" python3 -c " -import psycopg2 -conn = psycopg2.connect(host='$SHARED_PG_HOST', port=$SHARED_PG_PORT, user='$SHARED_PG_USER', password='$SHARED_PG_PASSWORD', dbname='postgres') +import psycopg +conn = psycopg.connect(host='$SHARED_PG_HOST', port=$SHARED_PG_PORT, user='$SHARED_PG_USER', password='$SHARED_PG_PASSWORD', dbname='postgres') conn.autocommit = True cur = conn.cursor() cur.execute(f'DROP DATABASE IF EXISTS \"$CI_DB_NAME\" WITH (FORCE)') diff --git a/scripts/ci_staging_deploy.sh b/scripts/ci_staging_deploy.sh index 5b055c68b..70aa0955c 100755 --- a/scripts/ci_staging_deploy.sh +++ b/scripts/ci_staging_deploy.sh @@ -397,7 +397,7 @@ fi echo "Stopping old containers..." # 优雅关闭:先 stop(发 SIGTERM,等待),再 rm # Worker 需要更长时间(视频任务最长可能5分钟) -docker stop -t 300 xiaoxia-worker-staging 2>/dev/null || true +docker stop -t 120 xiaoxia-worker-staging 2>/dev/null || true docker stop -t 30 xiaoxia-api-staging 2>/dev/null || true docker stop -t 10 xiaoxia-web-staging 2>/dev/null || true docker rm xiaoxia-worker-staging xiaoxia-api-staging xiaoxia-web-staging 2>/dev/null || true diff --git a/scripts/ci_staging_healthcheck.sh b/scripts/ci_staging_healthcheck.sh index f8609f956..79c30fa80 100644 --- a/scripts/ci_staging_healthcheck.sh +++ b/scripts/ci_staging_healthcheck.sh @@ -187,7 +187,7 @@ health_check() { return 0 fi - sleep 5 + sleep 3 done # 超时了 diff --git a/tests/unit/test_asset_availability.py b/tests/unit/test_asset_availability.py index c37874394..4192a5ca8 100755 --- a/tests/unit/test_asset_availability.py +++ b/tests/unit/test_asset_availability.py @@ -197,14 +197,14 @@ class TestComputeAssetAvailability: def test_large_gap_remains_usable(self): """区间之间留有 ≥3s 空闲段(扩边后仍 ≥3s)→ usable=True。""" - # [0,2] 扩边到 [0,2.3],[5.3,10] 扩边前为 [5,10] 扩边起 4.7;空闲 [2.3,4.7]=2.4s <3 - # 改用更大间隙:[0,2] 与 [6,10],扩边后空闲 [2.3,5.7]=3.4s ≥3 + # [0,2] 扩边到 [0,3.5],[9,10] 扩边到 [7.5,10];空闲 [3.5,7.5]=4.0s >=3 + # 使用 [0,2] 与 [9,10],扩边后空闲 [3.5,7.5]=4.0s ≥3 → usable info = compute_asset_availability( _make_asset( duration=10.0, ranges=[ _range(0.0, 2.0, use_count=MAX_RANGE_USE_COUNT), - _range(6.0, 10.0, use_count=MAX_RANGE_USE_COUNT), + _range(9.0, 10.0, use_count=MAX_RANGE_USE_COUNT), ], ) ) @@ -236,8 +236,8 @@ class TestComputeAssetAvailability: assert info["usable"] is True def test_segment_edge_gap_constant(self): - """边缘间隙常量为 0.3s(与 MediaKit 冲突检测同口径)。""" - assert SEGMENT_EDGE_GAP == 0.3 + """边缘间隙常量为 1.5s(与 MediaKit 冲突检测同口径)。""" + assert SEGMENT_EDGE_GAP == 1.5 def test_domain_entity_metadata_dict_form(self): """领域实体形态(metadata 为 dict,无 classification_result)也能读到区间。 diff --git a/tests/unit/test_asset_segment_tracker.py b/tests/unit/test_asset_segment_tracker.py index 9174226a0..54f66b73f 100644 --- a/tests/unit/test_asset_segment_tracker.py +++ b/tests/unit/test_asset_segment_tracker.py @@ -124,9 +124,9 @@ def _ranges(db, aid="a1"): def test_config_constants(): - assert MAX_RANGE_USE_COUNT == 3 - assert REUSE_RATIO_LIMIT == 0.15 - assert SEGMENT_EDGE_GAP == 0.3 + assert MAX_RANGE_USE_COUNT == 2 + assert REUSE_RATIO_LIMIT == 0.10 + assert SEGMENT_EDGE_GAP == 1.5 # ── get_used_segments ───────────────────────────────────────────────────────── @@ -320,13 +320,13 @@ def test_find_reusable_prefers_oldest_unused(patched_model): def test_find_reusable_excludes_max_use_count(patched_model): - """use_count 达到上限(3)的区间不再参与复用;全部达上限返回 None。""" + """use_count 达到上限(2)的区间不再参与复用;全部达上限返回 None。""" models = { "a1": FakeModel( "a1", { "used_time_ranges": [ - {"start": 0.0, "end": 10.0, "use_count": 3, "last_used_at": "2026-01-01T00:00:00"}, + {"start": 0.0, "end": 10.0, "use_count": 2, "last_used_at": "2026-01-01T00:00:00"}, ] }, ) @@ -335,22 +335,22 @@ def test_find_reusable_excludes_max_use_count(patched_model): assert find_reusable_range(db, "a1", 5.0, 30.0) is None -def test_find_reusable_fourth_use_rejected(patched_model): - """同区间复用第 4 次被拒绝:use_count=2 的可复用,use_count=3 的不可复用。""" +def test_find_reusable_third_use_rejected(patched_model): + """同区间复用第 3 次被拒绝:use_count=1 的可复用,use_count=2 的不可复用。""" models = { "a1": FakeModel( "a1", { "used_time_ranges": [ - {"start": 0.0, "end": 10.0, "use_count": 2, "last_used_at": "2026-03-01T00:00:00"}, - {"start": 10.0, "end": 20.0, "use_count": 3, "last_used_at": "2026-01-01T00:00:00"}, + {"start": 0.0, "end": 10.0, "use_count": 1, "last_used_at": "2026-03-01T00:00:00"}, + {"start": 10.0, "end": 20.0, "use_count": 2, "last_used_at": "2026-01-01T00:00:00"}, ] }, ) } db = _db(models) result = find_reusable_range(db, "a1", 5.0, 30.0) - # 只能选 use_count=2 的区间(start=0),不能选 use_count=3 的(虽然它更老) + # 只能选 use_count=1 的区间(start=0),不能选 use_count=2 的(虽然它更老) assert result is not None and result[0] == 0.0 diff --git a/tests/unit/test_dedup_helpers_user_id.py b/tests/unit/test_dedup_helpers_user_id.py new file mode 100644 index 000000000..4584fc3f0 --- /dev/null +++ b/tests/unit/test_dedup_helpers_user_id.py @@ -0,0 +1,152 @@ +"""测试 create_video_record_and_dedup 传递 user_id 到查重逻辑. + +验证 P0 修复:查重范围从项目级扩大到用户级。 +dedup_helpers 必须把 user_id 传给 compute_duplicate_rate。 +""" + +from __future__ import annotations + +import sys +from pathlib import Path +from unittest.mock import MagicMock, patch + +import pytest + +# Mock cv2/numpy before imports +sys.modules.setdefault("cv2", MagicMock()) +sys.modules.setdefault("numpy", MagicMock()) + +ROOT = Path(__file__).resolve().parents[2] +sys.path.insert(0, str(ROOT / "apps" / "api")) +sys.path.insert(0, str(ROOT / "packages")) +sys.path.insert(0, str(ROOT / "apps" / "worker")) + +import os + +os.environ.setdefault("JWT_SECRET_KEY", "unit-test-secret") +os.environ.setdefault("DATABASE_URL", "sqlite:///test.db") + + +class TestDedupHelpersUserIdPassthrough: + """验证 dedup_helpers 把 user_id 传递给 compute_duplicate_rate.""" + + def test_user_id_passed_to_compute_duplicate_rate(self): + """create_video_record_and_dedup 必须传 user_id 给 compute_duplicate_rate.""" + from video_processing.dedup_helpers import create_video_record_and_dedup + + session = MagicMock() + mock_video_repo = MagicMock() + + mock_fingerprint = MagicMock() + mock_fingerprint.to_dict.return_value = {"md5": "test", "keyframe_phashes": ["aa"]} + + mock_deduplicator = MagicMock() + mock_deduplicator.compute_fingerprint.return_value = mock_fingerprint + mock_deduplicator.check_duplicate.return_value = None + mock_deduplicator.compute_duplicate_rate.return_value = 42.5 + + with ( + patch( + "packages.adapters.sqlalchemy_impl.generated_video_repository.SQLAlchemyGeneratedVideoRepository", + return_value=mock_video_repo, + ), + patch("video_processing.dedup.VideoDeduplicator", return_value=mock_deduplicator), + ): + result = create_video_record_and_dedup( + generation_task_id="task-001", + project_id="proj-001", + user_id="user-abc", + batch_id="", + file_url="https://example.com/video.mp4", + file_size=1024, + duration=15.0, + video_path="/tmp/fake_video.mp4", + mode="smart", + session=session, + ) + + # 验证 compute_duplicate_rate 被调用且 user_id 正确传递 + mock_deduplicator.compute_duplicate_rate.assert_called_once() + call_kwargs = mock_deduplicator.compute_duplicate_rate.call_args + assert ( + call_kwargs.kwargs.get("user_id") == "user-abc" + ), f"user_id 应传递给 compute_duplicate_rate,实际: {call_kwargs}" + + def test_empty_user_id_still_works(self): + """user_id 为空时仍然正常执行(回退到 project 级比较).""" + from video_processing.dedup_helpers import create_video_record_and_dedup + + session = MagicMock() + mock_video_repo = MagicMock() + + mock_fingerprint = MagicMock() + mock_fingerprint.to_dict.return_value = {"md5": "test"} + + mock_deduplicator = MagicMock() + mock_deduplicator.compute_fingerprint.return_value = mock_fingerprint + mock_deduplicator.check_duplicate.return_value = None + mock_deduplicator.compute_duplicate_rate.return_value = 0.0 + + with ( + patch( + "packages.adapters.sqlalchemy_impl.generated_video_repository.SQLAlchemyGeneratedVideoRepository", + return_value=mock_video_repo, + ), + patch("video_processing.dedup.VideoDeduplicator", return_value=mock_deduplicator), + ): + result = create_video_record_and_dedup( + generation_task_id="task-002", + project_id="proj-002", + user_id="", + batch_id="", + file_url="https://example.com/video.mp4", + file_size=1024, + duration=10.0, + video_path="/tmp/fake.mp4", + mode="smart", + session=session, + ) + + mock_deduplicator.compute_duplicate_rate.assert_called_once() + call_kwargs = mock_deduplicator.compute_duplicate_rate.call_args + assert call_kwargs.kwargs.get("user_id") == "" + + def test_duplicate_rate_saved_to_video_record(self): + """compute_duplicate_rate 的返回值应写入 generated_video.duplicate_rate.""" + from video_processing.dedup_helpers import create_video_record_and_dedup + + session = MagicMock() + mock_video_repo = MagicMock() + + mock_fingerprint = MagicMock() + mock_fingerprint.to_dict.return_value = {"md5": "test"} + + mock_deduplicator = MagicMock() + mock_deduplicator.compute_fingerprint.return_value = mock_fingerprint + mock_deduplicator.check_duplicate.return_value = None + mock_deduplicator.compute_duplicate_rate.return_value = 78.5 + + with ( + patch( + "packages.adapters.sqlalchemy_impl.generated_video_repository.SQLAlchemyGeneratedVideoRepository", + return_value=mock_video_repo, + ), + patch("video_processing.dedup.VideoDeduplicator", return_value=mock_deduplicator), + ): + result = create_video_record_and_dedup( + generation_task_id="task-003", + project_id="proj-003", + user_id="user-xyz", + batch_id="", + file_url="https://example.com/v.mp4", + file_size=2048, + duration=20.0, + video_path="/tmp/fake2.mp4", + mode="smart", + session=session, + ) + + # 验证 update 被调用(包含 duplicate_rate 的记录) + mock_video_repo.update.assert_called_once() + updated_video = mock_video_repo.update.call_args[0][0] + assert updated_video.duplicate_rate == 78.5 diff --git a/tests/unit/test_duplicate_rate.py b/tests/unit/test_duplicate_rate.py index b9d6fd2ed..f92a67a85 100644 --- a/tests/unit/test_duplicate_rate.py +++ b/tests/unit/test_duplicate_rate.py @@ -56,9 +56,10 @@ class TestComputeDuplicateRate: with patch("video_processing.dedup.SQLAlchemyGeneratedVideoRepository") as MockRepo: mock_repo = MockRepo.return_value - session.query.return_value.filter.return_value.order_by.return_value.limit.return_value.all.return_value = ( - [] - ) + query_mock = MagicMock() + query_mock.filter.return_value = query_mock + query_mock.order_by.return_value.limit.return_value.all.return_value = [] + session.query.return_value = query_mock rate = deduplicator.compute_duplicate_rate(fingerprint, "proj1", "vid1", session) assert rate == 0.0 @@ -73,7 +74,6 @@ class TestComputeDuplicateRate: session = MagicMock() existing = self._make_existing_video("existing1", {"md5": "exact_match_md5", "keyframe_phashes": ["aa"]}) - # Create a mock model with the domain attributes mock_model = MagicMock(spec=GeneratedVideoModel) mock_model.id = existing.id mock_model.project_id = existing.project_id @@ -83,10 +83,12 @@ class TestComputeDuplicateRate: with patch("video_processing.dedup.SQLAlchemyGeneratedVideoRepository") as MockRepo: mock_repo = MockRepo.return_value mock_repo._to_domain.return_value = existing - # Mock the session.query chain - session.query.return_value.filter.return_value.order_by.return_value.limit.return_value.all.return_value = [ - mock_model - ] + # 链式 filter: 第一次 scope filter,第二次 self-exclusion filter + # 让 filter() 返回的对象仍然支持 order_by() 链 + query_mock = MagicMock() + query_mock.filter.return_value = query_mock # filter → filter chainable + query_mock.order_by.return_value.limit.return_value.all.return_value = [mock_model] + session.query.return_value = query_mock rate = deduplicator.compute_duplicate_rate(fingerprint, "proj1", "vid1", session) assert rate == 100.0 @@ -113,9 +115,10 @@ class TestComputeDuplicateRate: with patch("video_processing.dedup.SQLAlchemyGeneratedVideoRepository") as MockRepo: mock_repo = MockRepo.return_value mock_repo._to_domain.return_value = existing - session.query.return_value.filter.return_value.order_by.return_value.limit.return_value.all.return_value = [ - mock_model - ] + query_mock = MagicMock() + query_mock.filter.return_value = query_mock + query_mock.order_by.return_value.limit.return_value.all.return_value = [mock_model] + session.query.return_value = query_mock rate = deduplicator.compute_duplicate_rate(fingerprint, "proj1", "vid1", session) # hamming distance = 2, similarity = (1 - 2/64) * 100 = 96.875 @@ -140,9 +143,10 @@ class TestComputeDuplicateRate: with patch("video_processing.dedup.SQLAlchemyGeneratedVideoRepository") as MockRepo: mock_repo = MockRepo.return_value mock_repo._to_domain.return_value = self_video - session.query.return_value.filter.return_value.order_by.return_value.limit.return_value.all.return_value = [ - mock_model - ] + query_mock = MagicMock() + query_mock.filter.return_value = query_mock + query_mock.order_by.return_value.limit.return_value.all.return_value = [mock_model] + session.query.return_value = query_mock rate = deduplicator.compute_duplicate_rate(fingerprint, "proj1", "vid1", session) assert rate == 0.0 @@ -172,15 +176,89 @@ class TestComputeDuplicateRate: with patch("video_processing.dedup.SQLAlchemyGeneratedVideoRepository") as MockRepo: mock_repo = MockRepo.return_value mock_repo._to_domain.side_effect = [existing1, existing2] - session.query.return_value.filter.return_value.order_by.return_value.limit.return_value.all.return_value = [ + query_mock = MagicMock() + query_mock.filter.return_value = query_mock + query_mock.order_by.return_value.limit.return_value.all.return_value = [ mock_model1, mock_model2, ] + session.query.return_value = query_mock rate = deduplicator.compute_duplicate_rate(fingerprint, "proj1", "vid1", session) # max similarity: e2 distance=1, (1-1/64)*100 = 98.4375 assert rate == pytest.approx(98.44, abs=0.1) + def test_user_id_scope_cross_project(self): + """传 user_id 时应跨项目查询,而非仅当前项目.""" + from video_processing.dedup import VideoDeduplicator + + from packages.adapters.sqlalchemy_impl.models import GeneratedVideoModel + + deduplicator = VideoDeduplicator() + fingerprint = self._make_fingerprint(md5="cross_proj_md5") + session = MagicMock() + + # 模拟一个不同项目但同一用户的视频 + existing = self._make_existing_video( + "existing_other_proj", {"md5": "cross_proj_md5", "keyframe_phashes": ["aa"]} + ) + existing.project_id = "proj2" # 不同项目 + existing.user_id = "user1" + + mock_model = MagicMock(spec=GeneratedVideoModel) + mock_model.id = existing.id + mock_model.project_id = existing.project_id + mock_model.user_id = existing.user_id + mock_model.video_fingerprint = existing.video_fingerprint + mock_model.generated_at = "2026-01-01" + + with patch("video_processing.dedup.SQLAlchemyGeneratedVideoRepository") as MockRepo: + mock_repo = MockRepo.return_value + mock_repo._to_domain.return_value = existing + + query_mock = MagicMock() + query_mock.filter.return_value = query_mock + query_mock.order_by.return_value.limit.return_value.all.return_value = [mock_model] + session.query.return_value = query_mock + + rate = deduplicator.compute_duplicate_rate( + fingerprint, + "proj1", + "vid1", + session, + user_id="user1", + ) + + # 应通过 user_id 过滤,且匹配到跨项目视频 + assert rate == 100.0 + + def test_user_id_empty_falls_back_to_project(self): + """user_id 为空时应回退到 project_id 过滤.""" + from video_processing.dedup import VideoDeduplicator + + deduplicator = VideoDeduplicator() + fingerprint = self._make_fingerprint() + session = MagicMock() + + with patch("video_processing.dedup.SQLAlchemyGeneratedVideoRepository") as MockRepo: + mock_repo = MockRepo.return_value + query_mock = MagicMock() + query_mock.filter.return_value = query_mock + query_mock.order_by.return_value.limit.return_value.all.return_value = [] + session.query.return_value = query_mock + + rate = deduplicator.compute_duplicate_rate( + fingerprint, + "proj1", + "vid1", + session, + user_id="", + ) + + assert rate == 0.0 + # 验证使用的是 project_id 过滤(回退路径) + # 通过检查 filter 被调用时的参数来间接验证 + class TestDuplicateRateAPI: """Test that duplicate_rate is returned in API responses.""" diff --git a/tests/unit/test_duration_compensation.py b/tests/unit/test_duration_compensation.py new file mode 100644 index 000000000..abd4c08da --- /dev/null +++ b/tests/unit/test_duration_compensation.py @@ -0,0 +1,97 @@ +"""Tests for duration compensation when source video is shorter than configured duration.""" + +from pathlib import Path + +import pytest + +from apps.worker.video_processing.unified_render_service import ResolvedClip, UnifiedRenderService + + +class TestClipEffectiveDurationWithSpeedCompensation: + """Test _clip_effective_duration handles speed < 1 correctly.""" + + def test_normal_speed_returns_min(self): + """When speed=1.0, effective_duration = min(duration, actual_duration).""" + clip = ResolvedClip( + clip_id="c1", + asset_id="a1", + local_path=Path("/tmp/fake.mp4"), + clip_type="main", + order=0, + start_time=0.0, + duration=4.0, + actual_duration=3.0, # shorter than configured + playback_speed=1.0, + ) + # Without speed compensation, effective = min(4, 3) = 3 + assert UnifiedRenderService._clip_effective_duration(clip) == 3.0 + + def test_compensated_speed_returns_configured_duration(self): + """When speed < 1 (compensated), effective_duration = configured duration.""" + clip = ResolvedClip( + clip_id="c1", + asset_id="a1", + local_path=Path("/tmp/fake.mp4"), + clip_type="main", + order=0, + start_time=0.0, + duration=4.0, + actual_duration=3.0, # shorter than configured + playback_speed=0.75, # compensated: 3/4 = 0.75 + ) + # With speed compensation, effective = configured duration = 4.0 + assert UnifiedRenderService._clip_effective_duration(clip) == 4.0 + + def test_zero_actual_duration_returns_configured(self): + """When actual_duration=0, effective_duration = configured duration.""" + clip = ResolvedClip( + clip_id="c1", + asset_id="a1", + local_path=Path("/tmp/fake.mp4"), + clip_type="main", + order=0, + start_time=0.0, + duration=4.0, + actual_duration=0.0, + playback_speed=1.0, + ) + assert UnifiedRenderService._clip_effective_duration(clip) == 4.0 + + def test_compensated_speed_with_actual_zero(self): + """When speed < 1 and actual=0, still returns configured duration.""" + clip = ResolvedClip( + clip_id="c1", + asset_id="a1", + local_path=Path("/tmp/fake.mp4"), + clip_type="main", + order=0, + start_time=0.0, + duration=4.0, + actual_duration=0.0, + playback_speed=0.5, + ) + assert UnifiedRenderService._clip_effective_duration(clip) == 4.0 + + +class TestClipAdjustedDurationWithSpeedCompensation: + """Test _clip_adjusted_duration accounts for compensated speed.""" + + def test_adjusted_duration_with_compensation(self): + """Adjusted duration = min(duration, actual) / speed. + With compensation: min(4,3)/0.75 = 3/0.75 = 4.0 + This equals the configured duration, which is the goal. + """ + clip = ResolvedClip( + clip_id="c1", + asset_id="a1", + local_path=Path("/tmp/fake.mp4"), + clip_type="main", + order=0, + start_time=0.0, + duration=4.0, + actual_duration=3.0, + playback_speed=0.75, # compensated + ) + adjusted = UnifiedRenderService._clip_adjusted_duration(clip) + # min(4,3)/0.75 = 3/0.75 = 4.0 (matches configured duration) + assert abs(adjusted - 4.0) < 0.01 diff --git a/tests/unit/test_editor_clips_random_start.py b/tests/unit/test_editor_clips_random_start.py index bba35e223..4d7489b8d 100644 --- a/tests/unit/test_editor_clips_random_start.py +++ b/tests/unit/test_editor_clips_random_start.py @@ -38,6 +38,28 @@ def _segments(count: int, dur_min: float = 3.0, dur_max: float = 5.0): return [(i, dur_min, dur_max) for i in range(count)] +def _patch_zero_noise(): + """消除 clips.py 排序随机噪声,用于确定性断言(如均衡分配)。 + + 排序噪声(random.uniform(0, SCORE_RANDOM_NOISE_MAX))返回 0; + 其他 uniform 调用(片段时长随机)委托给独立 Random 实例,行为不变。 + """ + import random as _stdlib_random + + from app.api.routes.templates_editor import clips as clips_module + + from packages.domain.smart_match import SCORE_RANDOM_NOISE_MAX + + _fallback = _stdlib_random.Random() + + def _fake_uniform(a, b): + if b == SCORE_RANDOM_NOISE_MAX: + return 0.0 + return _fallback.uniform(a, b) + + return patch.object(clips_module.random, "uniform", _fake_uniform) + + def _patch_segments(segments=None): return patch( "app.api.routes.templates_editor.clips._get_template_segments", @@ -58,6 +80,10 @@ def _make_mock_asset(asset_id, duration): asset = MagicMock() asset.id = asset_id asset.duration = duration + # score_asset 所需的属性(避免 MagicMock 导致类型比较错误) + asset.quality_score = None + asset.created_at = None + asset.metadata = {} return asset @@ -126,7 +152,8 @@ class TestEditorClipsBySegments: body = ClipsFromAssetsRequest(asset_ids=["a1", "a2"], required_clips_count=2) - with _patch_segments(DEFAULT_SEGMENTS): + # 均衡分配由 use_count 贪心保证,消除排序噪声后确定性断言 + with _patch_zero_noise(), _patch_segments(DEFAULT_SEGMENTS): result = create_clips_from_assets_editor( template_id="tpl-001", body=body, @@ -142,11 +169,12 @@ class TestEditorClipsBySegments: clips_data = _get_clips_data_from_call(mock_plan_svc) assert len(clips_data) == 4 - # 验证轮询分配:a1, a2, a1, a2 - assert clips_data[0]["asset_id"] == "a1" - assert clips_data[1]["asset_id"] == "a2" - assert clips_data[2]["asset_id"] == "a1" - assert clips_data[3]["asset_id"] == "a2" + # 验证均衡分配(贪心策略保证):2个素材分4个片段,每个素材恰好使用2次 + from collections import Counter + + asset_ids = [c["asset_id"] for c in clips_data] + counts = Counter(asset_ids) + assert counts["a1"] == 2 and counts["a2"] == 2 @patch("app.api.routes.templates_editor.clips.get_storage_service") def test_orders_start_at_zero(self, mock_storage): @@ -413,8 +441,13 @@ class TestEditorClipsDurationAndStartTime: assert mock_calc.call_count == 2 clips_data = _get_clips_data_from_call(mock_plan_svc) - assert clips_data[0]["start_time"] == 12.5 - assert clips_data[1]["start_time"] == 18.0 + # clips_data 按 order 排序,但分配顺序因 shuffle 而随机, + # 因此只验证两个 start_time 值都存在 + start_times = {c["start_time"] for c in clips_data} + assert start_times == {12.5, 18.0} + # 验证 order 仍然有序 + orders = [c["order"] for c in clips_data] + assert orders == sorted(orders) @patch("app.api.routes.templates_editor.clips.get_storage_service") def test_asset_durations_deduped(self, mock_storage): @@ -631,7 +664,8 @@ class TestReuseRatioGate: clips_data = _get_clips_data_from_call(mock_plan_svc) assert len(clips_data) == 13 # 1 个复用片段,占比 1/13 ≈ 7.7% ≤ 15% - assert reused.get("a1", 0.0) == 5.0 + # 转场补偿: raw_duration = 5.0 + (13-1)*0.5/13 ≈ 5.462 → round(5.462,1) = 5.5 + assert abs(reused.get("a1", 0.0) - 5.5) < 0.1 @patch("app.api.routes.templates_editor.clips.get_storage_service") def test_reuse_ratio_exceeded_returns_400(self, mock_storage): @@ -784,7 +818,8 @@ class TestClipsFromAssetsInvalidIds: body = ClipsFromAssetsRequest(asset_ids=["a1", None, "", "a2"]) # type: ignore[list-item] - with _patch_segments(_segments(2, dur_min=3.0, dur_max=5.0)): + # 消除排序噪声,确定性断言两条合法素材各被使用 + with _patch_zero_noise(), _patch_segments(_segments(2, dur_min=3.0, dur_max=5.0)): result = create_clips_from_assets_editor( template_id="tpl-001", body=body, diff --git a/tests/unit/test_mediakit_conflicts.py b/tests/unit/test_mediakit_conflicts.py index 5c5a7cf96..c9f257be7 100755 --- a/tests/unit/test_mediakit_conflicts.py +++ b/tests/unit/test_mediakit_conflicts.py @@ -32,16 +32,16 @@ class TestRecommendedTimeConflicts: assert _recommended_time_conflicts(10.0, 5.0, [(10.0, 15.0)]) is True def test_touching_endpoint_conflicts_due_to_edge_gap(self): - """首尾紧贴(推荐 15 开始,已用 [10,15]):0.3s 扩边内 → 冲突。""" + """首尾紧贴(推荐 15 开始,已用 [10,15]):1.5s 扩边内 → 冲突。""" assert _recommended_time_conflicts(15.0, 5.0, [(10.0, 15.0)]) is True def test_gap_within_edge_gap_conflicts(self): - """间隔 0.2s(< 0.3s 边缘间隙)→ 冲突。""" + """间隔 0.2s(< 1.5s 边缘间隙)→ 冲突。""" assert _recommended_time_conflicts(15.2, 5.0, [(10.0, 15.0)]) is True def test_gap_beyond_edge_gap_no_conflict(self): - """间隔 0.5s(> 0.3s 边缘间隙)→ 不冲突。""" - assert _recommended_time_conflicts(15.5, 5.0, [(10.0, 15.0)]) is False + """间隔 2.0s(> 1.5s 边缘间隙)→ 不冲突。""" + assert _recommended_time_conflicts(17.0, 5.0, [(10.0, 15.0)]) is False def test_far_apart_no_conflict(self): """相隔很远 → 不冲突。""" @@ -54,7 +54,9 @@ class TestRecommendedTimeConflicts: """多个已用区间,任一冲突即返回 True。""" used = [(0.0, 5.0), (10.0, 15.0), (20.0, 25.0)] assert _recommended_time_conflicts(12.0, 2.0, used) is True - assert _recommended_time_conflicts(6.0, 2.0, used) is False + assert ( + _recommended_time_conflicts(6.5, 2.0, used) is False + ) # range [6.5,8.5], just outside all expanded used ranges def test_custom_edge_gap(self): """edge_gap 可配置:gap=0 时紧贴不冲突(端点相接不算重叠)。""" @@ -64,5 +66,5 @@ class TestRecommendedTimeConflicts: assert _recommended_time_conflicts(15.5, 5.0, [(10.0, 15.0)], edge_gap=1.0) is True def test_default_edge_gap_constant(self): - """默认边缘间隙常量为 0.3s(配置常量)。""" - assert SEGMENT_EDGE_GAP == 0.3 + """默认边缘间隙常量为 1.5s(配置常量)。""" + assert SEGMENT_EDGE_GAP == 1.5 diff --git a/tests/unit/test_mediakit_smart_clips.py b/tests/unit/test_mediakit_smart_clips.py index 61f114d28..bdfadb417 100644 --- a/tests/unit/test_mediakit_smart_clips.py +++ b/tests/unit/test_mediakit_smart_clips.py @@ -69,13 +69,13 @@ class TestRecommendedTimeConflicts: def test_conflict_exact_boundary_no_overlap(self): from app.api.routes.templates_editor.clips import _recommended_time_conflicts - # 新语义:默认 0.3s 边缘间隙扩边,推荐 [10, 15] 与已用 [0, 10] 首尾相接 + # 新语义:默认 1.5s 边缘间隙扩边,推荐 [10, 15] 与已用 [0, 10] 首尾相接 # 落在扩边范围内 → 判为冲突(避免观感重复) assert _recommended_time_conflicts(10.0, 5.0, [(0.0, 10.0)]) is True # 显式 edge_gap=0 时退回纯区间重叠判定:相接不算重叠 assert _recommended_time_conflicts(10.0, 5.0, [(0.0, 10.0)], edge_gap=0.0) is False - # 间隙大于边缘间隙(0.5 > 0.3)→ 不冲突 - assert _recommended_time_conflicts(10.5, 5.0, [(0.0, 10.0)]) is False + # 间隙大于边缘间隙(2.0 > 1.5)→ 不冲突 + assert _recommended_time_conflicts(12.0, 5.0, [(0.0, 10.0)]) is False def test_conflict_multiple_used(self): from app.api.routes.templates_editor.clips import _recommended_time_conflicts @@ -83,10 +83,10 @@ class TestRecommendedTimeConflicts: used = [(0.0, 5.0), (10.0, 15.0), (20.0, 25.0)] # 推荐 [6, 11] 与 [10, 15] 冲突 assert _recommended_time_conflicts(6.0, 5.0, used) is True - # 推荐 [15, 20] 与 [10, 15] 首尾相接:0.3s 扩边内 → 冲突 + # 推荐 [15, 20] 与 [10, 15] 首尾相接:1.5s 扩边内 → 冲突 assert _recommended_time_conflicts(15.0, 5.0, used) is True - # 空闲段 [5.3, 9.7] 长 4.4s:推荐 [5.5, 9.5](dur=4)与三区间扩边均不接触 - assert _recommended_time_conflicts(5.5, 4.0, used) is False + # 空闲段 (6.5, 8.5) 长 2.0s:推荐 [6.6, 8.4](dur=1.8)与三区间扩边均不接触 + assert _recommended_time_conflicts(6.6, 1.8, used) is False # ── _get_mediakit_recommendations 单元测试 ────────────────────────────────── @@ -306,6 +306,27 @@ class TestGetTemplateSegments: # ── from-assets 端点集成测试 ──────────────────────────────────────────────── +def _patch_zero_noise(): + """消除 clips.py 排序随机噪声(SCORE_RANDOM_NOISE_MAX 噪声返回 0)。 + + 用于均衡分配等确定性断言;其他 uniform 调用(片段时长随机)行为不变。 + """ + import random as _stdlib_random + + from app.api.routes.templates_editor import clips as clips_module + + from packages.domain.smart_match import SCORE_RANDOM_NOISE_MAX + + _fallback = _stdlib_random.Random() + + def _fake_uniform(a, b): + if b == SCORE_RANDOM_NOISE_MAX: + return 0.0 + return _fallback.uniform(a, b) + + return patch.object(clips_module.random, "uniform", _fake_uniform) + + def _make_auth_user(): auth = MagicMock() auth.user.id = "user-001" @@ -347,6 +368,10 @@ def _make_rich_asset(asset_id, duration, storage_key="v.mp4", mime="video/mp4"): asset.duration = duration asset.storage_key = storage_key asset.mime_type = mime + # score_asset 所需的属性(避免 MagicMock 导致类型比较错误) + asset.quality_score = None + asset.created_at = None + asset.metadata = {} return asset @@ -442,11 +467,15 @@ class TestFromAssetsByTemplateSegments: ) clips_data = _get_clips_data(mock_plan_svc) - assert 3.0 <= clips_data[0]["duration"] <= 5.0 - assert 4.0 <= clips_data[1]["duration"] <= 8.0 + # PR #1614 转场补偿:2 个片段时每 clip 时长 +(2-1)*0.5/2=0.25s + # (xfade 重叠在渲染时扣除,故 clip 时长 = segment 随机时长 + 补偿), + # 断言上界需计入补偿与一位小数舍入余量 + comp = (2 - 1) * 0.5 / 2 + assert 3.0 + comp - 0.1 <= clips_data[0]["duration"] <= 5.0 + comp + 0.1 + assert 4.0 + comp - 0.1 <= clips_data[1]["duration"] <= 8.0 + comp + 0.1 - def test_assets_round_robin_assignment(self): - """素材按片段顺序轮询分配。""" + def test_assets_balanced_assignment(self): + """素材按使用次数贪心分配(使用少的优先),保证均衡使用。""" from app.api.routes.templates_editor.clips import create_clips_from_assets_editor from app.api.routes.templates_editor.schemas import ClipsFromAssetsRequest @@ -462,20 +491,26 @@ class TestFromAssetsByTemplateSegments: mock_asset_repo.get.side_effect = get_asset body = ClipsFromAssetsRequest(asset_ids=["a1", "a2"]) - create_clips_from_assets_editor( - template_id="tmpl-1", - body=body, - background_tasks=MagicMock(), - plan_id="plan-1", - services=(mock_tpl_svc, mock_plan_svc), - asset_repo=mock_asset_repo, - db=MagicMock(), - current_user=_make_auth_user(), - ) + # 消除排序噪声,确定性断言贪心均衡分配 + with _patch_zero_noise(): + create_clips_from_assets_editor( + template_id="tmpl-1", + body=body, + background_tasks=MagicMock(), + plan_id="plan-1", + services=(mock_tpl_svc, mock_plan_svc), + asset_repo=mock_asset_repo, + db=MagicMock(), + current_user=_make_auth_user(), + ) clips_data = _get_clips_data(mock_plan_svc) asset_ids = [c["asset_id"] for c in clips_data] - assert asset_ids == ["a1", "a2", "a1", "a2"] + # 贪心分配保证均衡:2个素材分4个片段,每个素材恰好使用2次 + from collections import Counter + + counts = Counter(asset_ids) + assert counts["a1"] == 2 and counts["a2"] == 2 def test_orders_start_from_zero(self): """片段 order 从 0 开始递增。""" diff --git a/tests/unit/test_plan_generator.py b/tests/unit/test_plan_generator.py index 10d02f62c..37544c067 100755 --- a/tests/unit/test_plan_generator.py +++ b/tests/unit/test_plan_generator.py @@ -908,6 +908,10 @@ class TestAssetDurationsAlwaysFetched: def fake_get(asset_id): mock_asset = MagicMock() mock_asset.duration = 30.0 # 每个素材 30 秒 + # score_asset 所需的属性 + mock_asset.quality_score = None + mock_asset.created_at = None + mock_asset.metadata = {} return mock_asset asset_repo.get = MagicMock(side_effect=fake_get) diff --git a/tests/unit/test_scene_change_prerender.py b/tests/unit/test_scene_change_prerender.py new file mode 100644 index 000000000..3f7d5f25a --- /dev/null +++ b/tests/unit/test_scene_change_prerender.py @@ -0,0 +1,368 @@ +"""测试 SceneChange 场景检测前置到渲染前 + 场景点缓存读写。 + +验证: +- 场景点缓存读取(extract_scene_points_from_metadata):合法/非法/脏数据 +- pick_scene_aware_start:随机镜头段选取、冲突避让、shuffle 随机化、无缓存回退 None +- from-assets 路径:metadata 有 scene_change_points 时,start_time 落在镜头段内 +- 一键生成路径:distribute_assets 传入 asset_scene_points 时使用镜头段 +- 后台任务:检测结果写入素材 metadata(缓存) +""" + +from __future__ import annotations + +import os +import sys +from pathlib import Path +from unittest.mock import MagicMock, patch + +os.environ.setdefault("JWT_SECRET_KEY", "unit-test-secret-key-for-testing") +os.environ.setdefault("DATABASE_URL", "sqlite:///test.db") + +sys.path.insert(0, str(Path(__file__).resolve().parents[2] / "apps" / "api")) + +import pytest + +from packages.domain.plan_generator_utils import ( + _calc_random_start_time, + build_scene_segments, + distribute_assets, + extract_scene_points_from_metadata, + pick_scene_aware_start, +) + +# ── metadata 缓存解析 ───────────────────────────────────────────────────────── + + +class TestExtractScenePoints: + def test_valid_points(self): + md = {"scene_change_points": [0.0, 3.2, 7.8, 12.5]} + assert extract_scene_points_from_metadata(md) == [0.0, 3.2, 7.8, 12.5] + + def test_missing_returns_none(self): + assert extract_scene_points_from_metadata({}) is None + assert extract_scene_points_from_metadata(None) is None + assert extract_scene_points_from_metadata("not-a-dict") is None + + def test_empty_list_returns_none(self): + assert extract_scene_points_from_metadata({"scene_change_points": []}) is None + assert extract_scene_points_from_metadata({"scene_change_points": [0.0]}) is None + + def test_dirty_data_returns_none(self): + assert extract_scene_points_from_metadata({"scene_change_points": ["a", 1.0]}) is None + + def test_auto_prepends_zero(self): + result = extract_scene_points_from_metadata({"scene_change_points": [3.2, 7.8]}) + assert result == [0.0, 3.2, 7.8] + + def test_sorts_unsorted(self): + result = extract_scene_points_from_metadata({"scene_change_points": [0.0, 12.5, 3.2, 7.8]}) + assert result == [0.0, 3.2, 7.8, 12.5] + + def test_negative_rejected(self): + assert extract_scene_points_from_metadata({"scene_change_points": [-1.0, 3.2]}) is None + + +# ── 镜头段选取 ──────────────────────────────────────────────────────────────── + + +class TestPickSceneAwareStart: + def test_start_within_some_scene_segment(self): + """有缓存时,起点落在某个镜头段内部。""" + points = [0.0, 5.0, 10.0, 15.0] + durations = {"a1": 18.0} + scene_points = {"a1": points} + used: dict = {} + start = pick_scene_aware_start("a1", 3.0, durations, scene_points, used) + assert start is not None + segments = build_scene_segments(points, 18.0) + assert any(seg_start <= start and start + 3.0 <= seg_end for seg_start, seg_end in segments) + + def test_no_cache_returns_none(self): + """无缓存返回 None(调用方回退随机起点)。""" + result = pick_scene_aware_start("a1", 3.0, {"a1": 18.0}, {}, {}) + assert result is None + + def test_bounds_respected(self): + """起点 + 片段时长不超过素材总时长。""" + points = [0.0, 5.0, 10.0, 15.0] + for _ in range(30): + start = pick_scene_aware_start("a1", 4.0, {"a1": 18.0}, {"a1": points}, {}) + assert start is not None + assert start + 4.0 <= 18.0 + 1e-6 + + def test_conflict_avoidance(self): + """所有镜头段都被占满时返回 None(回退随机路径)。""" + # 3 段各 6s,片段 5s;把所有段占满([0,5.5] [5.5,11] 覆盖段1/2,段3太短放不下5s) + points = [0.0, 6.0, 12.0] + used = {"a1": [(0.0, 5.6), (6.0, 11.6)]} + # 段3 [12, 18] 可用 → 应返回其中起点 + start = pick_scene_aware_start("a1", 5.0, {"a1": 18.0}, {"a1": points}, used) + assert start is not None + assert start >= 12.0 + + def test_all_segments_conflict_returns_none(self): + """全部镜头段都冲突时返回 None。""" + points = [0.0, 6.0, 12.0] + # 占满整个素材 + used = {"a1": [(0.0, 18.0)]} + start = pick_scene_aware_start("a1", 5.0, {"a1": 18.0}, {"a1": points}, used) + assert start is None + + def test_shuffle_produces_varied_segments(self): + """镜头段顺序被 shuffle:30 次选取,起点分布应覆盖多个镜头段。""" + points = [0.0, 5.0, 10.0, 15.0] + observed: set[int] = set() + for _ in range(40): + start = pick_scene_aware_start("a1", 2.0, {"a1": 18.0}, {"a1": points}, {}) + assert start is not None + # 记录起点落在哪个段(段宽 5s) + observed.add(int(start // 5.0)) + assert len(observed) >= 3, f"镜头段 shuffle 后应覆盖多个段,实际 {observed}" + + +# ── 一键生成路径:distribute_assets 接入场景缓存 ────────────────────────────── + + +class TestDistributeWithScenePoints: + def _make_clips(self, n): + from packages.domain.edit_plan_clip import EditPlanClip + + return [EditPlanClip(id=f"c{i}", plan_id="p1", clip_type="main", duration=4.0, order=i) for i in range(n)] + + def test_one_take_uses_scene_segments(self): + """ONE_TAKE 模式下,有场景缓存的素材起点落在镜头段内。""" + from packages.domain.editing_mode import EditingMode + + clips = self._make_clips(2) + points = [0.0, 6.0, 12.0, 18.0] + distribute_assets( + clips, + ["a1"], + EditingMode.ONE_TAKE.value, + asset_durations={"a1": 24.0}, + asset_scene_points={"a1": points}, + ) + segments = build_scene_segments(points, 24.0) + for clip in clips: + assert clip.start_time is not None + assert any( + s <= clip.start_time and clip.start_time + 4.0 <= e for s, e in segments + ), f"起点 {clip.start_time} 不在任何镜头段内" + + def test_no_scene_points_falls_back_random(self): + """无场景缓存时正常分配(回退随机起点),不报错。""" + from packages.domain.editing_mode import EditingMode + + clips = self._make_clips(1) + distribute_assets( + clips, + ["a1"], + EditingMode.ONE_TAKE.value, + asset_durations={"a1": 24.0}, + asset_scene_points={}, + ) + for clip in clips: + assert clip.asset_id == "a1" + assert clip.start_time is not None + assert 0.0 <= clip.start_time <= 20.0 + + def test_random_preview_ignores_scene_points(self): + """random_selection 预览模式行为不变(不崩溃、正常分配)。""" + from packages.domain.editing_mode import EditingMode + + clips = self._make_clips(2) + distribute_assets( + clips, + ["a1", "a2"], + EditingMode.ONE_TAKE.value, + random_selection=True, + asset_durations={"a1": 24.0, "a2": 24.0}, + asset_scene_points={"a1": [0.0, 6.0]}, + ) + assert all(c.asset_id for c in clips) + + +# ── from-assets 路径:渲染前读缓存选镜头段 ──────────────────────────────────── + + +def _make_auth_user(): + auth = MagicMock() + auth.user.id = "user-001" + auth.user.email = "test@example.com" + auth.user.display_name = "测试用户" + auth.user_id = "user-001" + return auth + + +def _make_asset_with_scenes(aid, duration, scene_points=None): + asset = MagicMock() + asset.id = aid + asset.duration = duration + asset.quality_score = None + asset.created_at = None + asset.metadata = {"scene_change_points": scene_points} if scene_points is not None else {} + return asset + + +class TestFromAssetsSceneCache: + def test_cached_scene_points_used_for_start_time(self): + """素材 metadata 有场景点缓存时,片段起点落在镜头段内。""" + from app.api.routes.templates_editor.clips import create_clips_from_assets_editor + from app.api.routes.templates_editor.schemas import ClipsFromAssetsRequest + + # 镜头段宽度 10s,片段最长 ~5.3s(含转场补偿),每段都能容纳 + scene_points = [0.0, 10.0, 20.0, 30.0] + asset_duration = 40.0 + mock_asset_repo = MagicMock() + mock_asset_repo.get = MagicMock( + side_effect=lambda aid: _make_asset_with_scenes(aid, asset_duration, scene_points) + ) + mock_plan_svc = MagicMock() + mock_plan_svc.replace_all_clips_transactional = MagicMock(return_value=3) + + segments = [(0, 3.0, 5.0), (1, 3.0, 5.0), (2, 3.0, 5.0)] + + with ( + patch( + "app.api.routes.templates_editor.clips._get_template_segments", + return_value=segments, + ), + patch("app.api.routes.templates_editor.clips.get_used_segments", return_value={}), + patch("app.api.routes.templates_editor.clips.record_used_segments", return_value=None), + ): + body = ClipsFromAssetsRequest(asset_ids=["a1"], required_clips_count=3) + create_clips_from_assets_editor( + template_id="tmpl-1", + body=body, + background_tasks=MagicMock(), + plan_id="plan-scene-1", + services=(MagicMock(), mock_plan_svc), + asset_repo=mock_asset_repo, + db=MagicMock(), + current_user=_make_auth_user(), + ) + + clips_data = mock_plan_svc.replace_all_clips_transactional.call_args.args[1] + scene_segments = build_scene_segments(scene_points, asset_duration) + for clip in clips_data: + start = clip["start_time"] + dur = clip["duration"] + in_segment = any(s <= start and start + dur <= e + 0.1 for s, e in scene_segments) + assert in_segment, f"起点 {start:.2f} 时长 {dur:.2f} 不在任何镜头段内" + + def test_no_cache_falls_back_random_no_error(self): + """素材无场景缓存时正常走随机起点,流程不报错。""" + from app.api.routes.templates_editor.clips import create_clips_from_assets_editor + from app.api.routes.templates_editor.schemas import ClipsFromAssetsRequest + + mock_asset_repo = MagicMock() + mock_asset_repo.get = MagicMock(side_effect=lambda aid: _make_asset_with_scenes(aid, 30.0, None)) + mock_plan_svc = MagicMock() + mock_plan_svc.replace_all_clips_transactional = MagicMock(return_value=2) + + segments = [(0, 3.0, 5.0), (1, 3.0, 5.0)] + with ( + patch( + "app.api.routes.templates_editor.clips._get_template_segments", + return_value=segments, + ), + patch("app.api.routes.templates_editor.clips.get_used_segments", return_value={}), + patch("app.api.routes.templates_editor.clips.record_used_segments", return_value=None), + ): + body = ClipsFromAssetsRequest(asset_ids=["a1"], required_clips_count=2) + create_clips_from_assets_editor( + template_id="tmpl-1", + body=body, + background_tasks=MagicMock(), + plan_id="plan-scene-2", + services=(MagicMock(), mock_plan_svc), + asset_repo=mock_asset_repo, + db=MagicMock(), + current_user=_make_auth_user(), + ) + clips_data = mock_plan_svc.replace_all_clips_transactional.call_args.args[1] + assert len(clips_data) == 2 + assert all(c["start_time"] is not None for c in clips_data) + + +# ── 后台任务:检测结果写缓存 ────────────────────────────────────────────────── + + +class TestAsyncCacheWrite: + def test_scene_points_persisted_to_metadata(self): + """detect_scene_changes 返回结果后写入素材 metadata 并调用 repo.update。""" + from app.api.routes.templates_editor import clips as clips_module + + detected_points = [0.0, 4.5, 9.0, 14.2] + + mock_asset = MagicMock() + mock_asset.id = "a1" + mock_asset.duration = 20.0 + mock_asset.storage_key = "v.mp4" + mock_asset.mime_type = "video/mp4" + mock_asset.metadata = {} + + mock_asset_repo = MagicMock() + mock_asset_repo.find_by_ids = MagicMock(return_value=[mock_asset]) + mock_asset_repo.update = MagicMock(side_effect=lambda a: a) + + mock_clip = MagicMock() + mock_clip.id = "clip-1" + mock_clip.asset_id = "a1" + mock_clip.order = 0 + mock_clip.start_time = 2.0 + mock_clip.duration = 4.0 + + mock_plan_svc = MagicMock() + mock_plan_svc.list_clips = MagicMock(return_value=[mock_clip]) + mock_plan_svc.update_clip = MagicMock() + plan_svc_factory = MagicMock(return_value=mock_plan_svc) + + mock_client = MagicMock() + mock_client.is_available = True + mock_client.detect_scene_changes = MagicMock(return_value=detected_points) + + mock_storage = MagicMock() + mock_storage.get_download_url = MagicMock(return_value="https://example.com/v.mp4") + + mock_session = MagicMock() + + with ( + patch( + "packages.adapters.sqlalchemy_impl.asset_repository.SQLAlchemyAssetRepository", + return_value=mock_asset_repo, + ), + patch( + "app.api.routes.templates_editor.clips.EditPlanService", + plan_svc_factory, + ), + patch( + "packages.adapters.sqlalchemy_impl.session.SessionLocal", + MagicMock(return_value=mock_session), + ), + patch( + "app.api.routes.templates_editor.clips.get_storage_service", + return_value=mock_storage, + ), + patch( + "app.api.routes.templates_editor.clips.get_mediakit_client", + return_value=mock_client, + ), + patch( + "app.api.routes.templates_editor.clips.get_used_segments", + return_value={}, + ), + patch( + "app.api.routes.templates_editor.clips.record_used_segments", + return_value=None, + ), + patch( + "app.api.routes.templates_editor.clips.remove_used_segment", + return_value=False, + ), + ): + clips_module._update_mediakit_recommendations_async("plan-1", ["a1"]) + + # 验证素材 metadata 被写入场景点并持久化 + assert mock_asset.metadata.get("scene_change_points") == detected_points + mock_asset_repo.update.assert_called() diff --git a/tests/unit/test_scene_change_shuffle.py b/tests/unit/test_scene_change_shuffle.py new file mode 100644 index 000000000..5ad9cc4c0 --- /dev/null +++ b/tests/unit/test_scene_change_shuffle.py @@ -0,0 +1,257 @@ +"""Tests for scene-change smart frame selection + random shuffle of segment processing.""" + +from __future__ import annotations + +import random +from unittest.mock import MagicMock, patch + +import pytest + +from apps.api.app.api.routes.templates_editor.clips import ( + _build_scene_segments, + _pick_start_in_scene_segment, +) +from packages.shared.mediakit_client import MediaKitClient + +# ── Part 1: Random shuffle tests ────────────────────────────────────────── + + +class TestRandomShuffle: + """验证 segments 处理顺序随机打乱逻辑.""" + + def test_same_segments_produce_different_asset_orders(self): + """同一批 segments 多次处理,asset 分配顺序有变化. + + 模拟打乱后的处理顺序,验证多次运行中 asset_id 分配顺序 + 存在差异(概率性验证,运行 50 次应该至少出现 2 种排列)。 + """ + segments = [(0, 3.0, 5.0), (1, 4.0, 6.0), (2, 3.0, 5.0), (3, 4.0, 6.0)] + asset_ids = ["A", "B", "C", "D"] + + observed_orders: list[tuple] = set() + + for _ in range(50): + shuffled_indices = list(range(len(segments))) + random.shuffle(shuffled_indices) + order_tuple = tuple(shuffled_indices) + observed_orders.add(order_tuple) + + # 50 次打乱,4! = 24 种排列,应出现多种不同排列 + assert len(observed_orders) > 1, "打乱应该产生多种不同顺序" + + def test_clips_data_order_always_sorted(self): + """clips_data 按 order 排序后始终有序. + + 模拟打乱处理后 clips_data 按 order 排序,验证最终 order 为 [0,1,2,3]。 + """ + segments = [(0, 3.0, 5.0), (1, 4.0, 6.0), (2, 3.0, 5.0), (3, 4.0, 6.0)] + + for _ in range(20): + shuffled_indices = list(range(len(segments))) + random.shuffle(shuffled_indices) + + # 模拟构建 clips_data(用 _seg_order 作为 order) + clips_data = [] + for idx in shuffled_indices: + seg_order, _, _ = segments[idx] + clips_data.append({"order": seg_order, "asset_id": f"asset_{idx}"}) + + # 按 order 排序 + clips_data.sort(key=lambda c: c["order"]) + + # 验证 order 始终有序 + orders = [c["order"] for c in clips_data] + assert orders == [0, 1, 2, 3], f"排序后 order 应为 [0,1,2,3],实际为 {orders}" + + +# ── Part 2: detect_scene_changes tests ──────────────────────────────────── + + +class TestDetectSceneChanges: + """验证 MediaKitClient.detect_scene_changes 方法.""" + + def _make_client(self) -> MediaKitClient: + """创建一个可用的 MediaKitClient(mock 配置).""" + with patch("packages.shared.mediakit_client.get_shared_settings") as mock_settings: + mock_settings.return_value.mediakit_api_key = "test-key" + mock_settings.return_value.mediakit_base_url = "http://test" + mock_settings.return_value.mediakit_timeout = 30 + client = MediaKitClient() + return client + + def test_scene_change_success(self): + """SceneChange 策略成功返回时间戳列表.""" + client = self._make_client() + + mock_frames = [ + {"image_url": "url1", "timestamp": 0.0}, + {"image_url": "url2", "timestamp": 3.2}, + {"image_url": "url3", "timestamp": 7.8}, + {"image_url": "url4", "timestamp": 12.5}, + ] + + with patch.object(client, "extract_frames", return_value=mock_frames): + result = client.detect_scene_changes("https://example.com/video.mp4") + + assert result is not None + assert result[0] == 0.0 # 始终以 0.0 开头 + assert 3.2 in result + assert 7.8 in result + assert 12.5 in result + assert result == sorted(result) # 应已排序 + + def test_scene_change_fallback_to_time_interval(self): + """SceneChange 失败降级到 TimeInterval 策略.""" + client = self._make_client() + + # 第一次调用(SceneChange)返回 None,第二次(TimeInterval)返回结果 + fallback_frames = [ + {"image_url": "url1", "timestamp": 0.0}, + {"image_url": "url2", "timestamp": 5.0}, + {"image_url": "url3", "timestamp": 10.0}, + ] + + call_count = 0 + + def side_effect(*args, **kwargs): + nonlocal call_count + call_count += 1 + if call_count == 1: + # 第一次 SceneChange 失败 + return None + else: + # 第二次 TimeInterval 成功 + assert kwargs.get("strategy") == "TimeInterval" + return fallback_frames + + with patch.object(client, "extract_frames", side_effect=side_effect): + result = client.detect_scene_changes("https://example.com/video.mp4") + + assert result is not None + assert result[0] == 0.0 + assert 5.0 in result + assert 10.0 in result + + def test_mediakit_not_available_returns_none(self): + """MediaKit 不可用时返回 None.""" + with patch("packages.shared.mediakit_client.get_shared_settings") as mock_settings: + mock_settings.return_value.mediakit_api_key = "" # 未配置 + mock_settings.return_value.mediakit_base_url = "http://test" + mock_settings.return_value.mediakit_timeout = 30 + client = MediaKitClient() + + result = client.detect_scene_changes("https://example.com/video.mp4") + assert result is None + + def test_both_strategies_fail_returns_none(self): + """SceneChange 和 TimeInterval 都失败时返回 None.""" + client = self._make_client() + + with patch.object(client, "extract_frames", return_value=None): + result = client.detect_scene_changes("https://example.com/video.mp4") + + assert result is None + + def test_prepends_zero_if_not_present(self): + """若帧列表中不包含 0.0,自动在开头添加.""" + client = self._make_client() + + # 帧列表中没有 timestamp=0.0 + mock_frames = [ + {"image_url": "url1", "timestamp": 2.0}, + {"image_url": "url2", "timestamp": 5.5}, + ] + + with patch.object(client, "extract_frames", return_value=mock_frames): + result = client.detect_scene_changes("https://example.com/video.mp4") + + assert result is not None + assert result[0] == 0.0 + assert 2.0 in result + assert 5.5 in result + + +# ── Part 2.2: Scene segment building and assignment ─────────────────────── + + +class TestSceneSegments: + """验证镜头段构建和分配逻辑.""" + + def test_build_scene_segments(self): + """从场景切换点正确构建镜头段.""" + scene_changes = [0.0, 3.2, 7.8, 12.5] + asset_duration = 15.0 + + segments = _build_scene_segments(scene_changes, asset_duration) + + assert len(segments) == 4 + assert segments[0] == (0.0, 3.2) + assert segments[1] == (3.2, 7.8) + assert segments[2] == (7.8, 12.5) + assert segments[3] == (12.5, 15.0) + + def test_build_scene_segments_filters_short(self): + """过滤掉过短的镜头段(< 0.5秒).""" + scene_changes = [0.0, 0.1, 5.0, 5.3, 10.0] + asset_duration = 12.0 + + segments = _build_scene_segments(scene_changes, asset_duration) + + # (0.0, 0.1) 长度 0.1 < 0.5 → 过滤 + # (0.1, 5.0) → 保留 + # (5.0, 5.3) 长度 0.3 < 0.5 → 过滤 + # (5.3, 10.0) → 保留 + # (10.0, 12.0) → 保留 + assert len(segments) == 3 + assert segments[0] == (0.1, 5.0) + assert segments[1] == (5.3, 10.0) + assert segments[2] == (10.0, 12.0) + + def test_pick_start_in_segment(self): + """在镜头段内随机选取起始时间.""" + seg_start = 3.0 + seg_end = 8.0 + clip_duration = 2.0 + + starts = set() + for _ in range(100): + start = _pick_start_in_scene_segment(seg_start, seg_end, clip_duration) + assert start is not None + assert seg_start <= start <= seg_end - clip_duration + starts.add(round(start, 2)) + + # 应该有多个不同的起始时间 + assert len(starts) > 1 + + def test_pick_start_segment_too_short(self): + """镜头段太短无法容纳片段时返回 None.""" + result = _pick_start_in_scene_segment(0.0, 1.0, 2.0) + assert result is None + + def test_different_clips_from_different_scenes(self): + """不同片段应来自不同的镜头段(模拟分配逻辑).""" + scene_changes = [0.0, 5.0, 10.0, 15.0] + asset_duration = 18.0 + clip_duration = 3.0 + + segments = _build_scene_segments(scene_changes, asset_duration) + assert len(segments) == 4 # (0,5), (5,10), (10,15), (15,18) + + # 模拟 3 个片段从不同镜头段取点 + scene_pool = list(segments) + assigned_starts = [] + + for _ in range(3): + if not scene_pool: + break + seg_start, seg_end = scene_pool.pop(0) + start = _pick_start_in_scene_segment(seg_start, seg_end, clip_duration) + assert start is not None + assigned_starts.append(start) + + # 3 个片段分别从 3 个不同镜头段中选取 + assert len(assigned_starts) == 3 + # 第一个来自 [0, 2],第二个来自 [5, 7],第三个来自 [10, 12] + assert 0.0 <= assigned_starts[0] <= 2.0 + assert 5.0 <= assigned_starts[1] <= 7.0 + assert 10.0 <= assigned_starts[2] <= 12.0 diff --git a/tests/unit/test_smart_match_integration.py b/tests/unit/test_smart_match_integration.py new file mode 100644 index 000000000..b9966072a --- /dev/null +++ b/tests/unit/test_smart_match_integration.py @@ -0,0 +1,475 @@ +"""测试 smart_match 评分集成到素材选取路径。 + +验证: +- 使用次数多的素材评分低于使用次数少的(unused 维度降权生效) +- from-assets 路径中 sorted_candidates 按 smart_match 评分排序 +- 一键生成路径中 _sort_assets_by_smart_score 按评分降序 +""" + +from __future__ import annotations + +import os +import sys +from dataclasses import dataclass, field +from datetime import datetime, timezone +from pathlib import Path +from typing import Any +from unittest.mock import MagicMock, patch + +os.environ.setdefault("JWT_SECRET_KEY", "unit-test-secret-key-for-testing") +os.environ.setdefault("DATABASE_URL", "sqlite:///test.db") + +sys.path.insert(0, str(Path(__file__).resolve().parents[2] / "apps" / "api")) + +import pytest + +from packages.domain.smart_match import SCORE_RANDOM_NOISE_MAX, score_asset, smart_select_assets + +# ── 辅助工厂 ────────────────────────────────────────────────────────────────── + + +@dataclass +class FakeAsset: + """Minimal Asset-like object.""" + + id: str + quality_score: float | None = 70.0 + duration: float = 15.0 + created_at: datetime | None = None + metadata: dict[str, Any] = field(default_factory=dict) + status: str = "ready" + file_type: str = "video" + + +def _asset_with_use_count(asset_id: str, use_count: int) -> FakeAsset: + """创建指定使用次数的素材,其他维度保持一致。""" + return FakeAsset( + id=asset_id, + quality_score=70.0, + duration=15.0, # 最优区间 5-30s + created_at=datetime(2026, 1, 1, tzinfo=timezone.utc), + metadata={"generation_use_count": use_count}, + ) + + +# ── score_asset 单元测试:unused 维度降权 ───────────────────────────────────── + + +class TestScoreAssetUnusedDiminsh: + """验证 unused 维度:使用次数越多,评分越低。""" + + def test_unused_scores_higher_than_used(self): + """use_count=0 的素材评分高于 use_count>0 的。""" + fresh = _asset_with_use_count("fresh", 0) + used = _asset_with_use_count("used", 1) + fresh_score, _ = score_asset(fresh) + used_score, _ = score_asset(used) + assert fresh_score > used_score + + def test_high_use_count_scores_lower_than_low(self): + """use_count=5 的素材评分低于 use_count=1 的。""" + low_use = _asset_with_use_count("low", 1) + high_use = _asset_with_use_count("high", 5) + low_score, _ = score_asset(low_use) + high_score, _ = score_asset(high_use) + assert low_score > high_score + + def test_unused_breakdown_values(self): + """验证 unused 维度的具体分值。""" + fresh = _asset_with_use_count("fresh", 0) + low = _asset_with_use_count("low", 2) + high = _asset_with_use_count("high", 10) + + _, fresh_bd = score_asset(fresh) + _, low_bd = score_asset(low) + _, high_bd = score_asset(high) + + # use_count=0 → unused_score=100 → component=10.0 + assert fresh_bd["unused"] == 10.0 + # use_count=2 → unused_score=70 → component=7.0 + assert low_bd["unused"] == 7.0 + # use_count=10 → unused_score=30 → component=3.0 + assert high_bd["unused"] == 3.0 + + def test_monotonically_decreasing_scores(self): + """使用次数递增时,总评分单调不增。""" + scores = [] + for count in [0, 1, 2, 3, 5, 10, 50]: + a = _asset_with_use_count(f"a{count}", count) + s, _ = score_asset(a) + scores.append(s) + # 验证非递增 + for i in range(len(scores) - 1): + assert ( + scores[i] >= scores[i + 1] + ), f"use_count 递增时评分应不增: scores[{i}]={scores[i]} < scores[{i+1}]={scores[i+1]}" + + +# ── smart_select_assets 排序测试 ───────────────────────────────────────────── + + +class TestSmartSelectAssetsOrdering: + """验证 smart_select_assets 返回结果按评分降序。""" + + def test_less_used_assets_ranked_higher(self): + """使用次数少的素材在结果中排名更高。""" + assets = [ + _asset_with_use_count("heavily_used", 10), + _asset_with_use_count("never_used", 0), + _asset_with_use_count("lightly_used", 2), + ] + results = smart_select_assets(assets) + ids = [r.asset.id for r in results] + # never_used 排第一,heavily_used 排最后 + assert ids[0] == "never_used" + assert ids[-1] == "heavily_used" + + def test_same_quality_different_use_count(self): + """质量相同时,使用次数少的排名更高。""" + assets = [ + _asset_with_use_count("used_5", 5), + _asset_with_use_count("used_0", 0), + ] + results = smart_select_assets(assets) + assert results[0].asset.id == "used_0" + assert results[1].asset.id == "used_5" + + +# ── from-assets 路径集成测试 ───────────────────────────────────────────────── + + +def _make_mock_asset_for_clips(aid, duration, use_count=0): + """创建带 score_asset 所需属性的 mock 素材。""" + asset = MagicMock() + asset.id = aid + asset.duration = duration + asset.quality_score = None + asset.created_at = None + asset.metadata = {"generation_use_count": use_count} + return asset + + +def _make_auth_user(): + auth = MagicMock() + auth.user.id = "user-001" + auth.user.email = "test@example.com" + auth.user.display_name = "测试用户" + auth.user_id = "user-001" + return auth + + +def _make_zero_noise_patcher(module): + """构造 patch(module.random.uniform):噪声调用(上界=SCORE_RANDOM_NOISE_MAX)返回 0。 + + 其他 uniform 调用(如片段时长随机)委托给一个独立的 Random 实例, + 避免递归回已 patch 的全局函数。 + """ + import random as _stdlib_random + + _fallback = _stdlib_random.Random() + + def _fake_uniform(a, b): + if b == SCORE_RANDOM_NOISE_MAX: + return 0.0 + return _fallback.uniform(a, b) + + return patch.object(module.random, "uniform", _fake_uniform) + + +def _patch_zero_noise_clips(): + """消除 clips.py 排序噪声,其他 uniform 调用不受影响。""" + from app.api.routes.templates_editor import clips as clips_module + + return _make_zero_noise_patcher(clips_module) + + +def _patch_zero_noise_plan_service(): + """消除 plan_generator_service.py 排序噪声,其他 uniform 调用不受影响。""" + from app.services import plan_generator_service as svc_module + + return _make_zero_noise_patcher(svc_module) + + +class TestFromAssetsSmartMatchIntegration: + """验证 clips.py 中 sorted_candidates 使用 smart_match 评分。""" + + def test_sorted_candidates_prefers_high_score_low_use_count(self): + """在 from-assets 路径中,smart_match 分高且使用次数少的素材排在前面。""" + from app.api.routes.templates_editor.clips import create_clips_from_assets_editor + from app.api.routes.templates_editor.schemas import ClipsFromAssetsRequest + + mock_asset_repo = MagicMock() + + def _get_asset(aid): + use_count = {"a_heavy": 10, "a_fresh": 0}[aid] + return _make_mock_asset_for_clips(aid, 30.0, use_count) + + mock_asset_repo.get = MagicMock(side_effect=_get_asset) + + mock_plan_svc = MagicMock() + mock_plan_svc.replace_all_clips_transactional = MagicMock(return_value=2) + + segments = [(0, 3.0, 5.0), (1, 3.0, 5.0)] + + with ( + _patch_zero_noise_clips(), + patch( + "app.api.routes.templates_editor.clips._get_template_segments", + return_value=segments, + ), + patch( + "app.api.routes.templates_editor.clips.get_used_segments", + return_value={}, + ), + patch( + "app.api.routes.templates_editor.clips.record_used_segments", + return_value=None, + ), + ): + body = ClipsFromAssetsRequest( + asset_ids=["a_heavy", "a_fresh"], + required_clips_count=2, + ) + create_clips_from_assets_editor( + template_id="tmpl-1", + body=body, + background_tasks=MagicMock(), + plan_id="test-plan-001", + services=(MagicMock(), mock_plan_svc), + asset_repo=mock_asset_repo, + db=MagicMock(), + current_user=_make_auth_user(), + ) + + # 验证 replace_all_clips_transactional 被调用 + assert mock_plan_svc.replace_all_clips_transactional.called + call_args = mock_plan_svc.replace_all_clips_transactional.call_args + clips_data = call_args.args[1] + + # 第一个片段应该分配给 a_fresh(smart_match 分更高) + first_clip_asset = clips_data[0]["asset_id"] + assert ( + first_clip_asset == "a_fresh" + ), f"第一个片段应分配给 smart_match 分更高的 a_fresh,实际是 {first_clip_asset}" + + def test_score_noise_causes_varied_selection(self): + """得分接近(差距 < SCORE_RANDOM_NOISE_MAX)的素材,多次生成的素材组合应有变化。 + + 两条同等质量/时长/新鲜度的素材(use_count 相同),smart_match 得分一致, + 噪声让两者的相对排名随机浮动,多次调用首个片段的素材分布应两者都出现。 + """ + from app.api.routes.templates_editor.clips import create_clips_from_assets_editor + from app.api.routes.templates_editor.schemas import ClipsFromAssetsRequest + + def _get_asset(aid): + return _make_mock_asset_for_clips(aid, 30.0, 0) + + mock_asset_repo = MagicMock() + mock_asset_repo.get = MagicMock(side_effect=_get_asset) + + segments = [(0, 3.0, 5.0), (1, 3.0, 5.0)] + + first_assets: set[str] = set() + for _ in range(30): + mock_plan_svc = MagicMock() + mock_plan_svc.replace_all_clips_transactional = MagicMock(return_value=2) + with ( + patch( + "app.api.routes.templates_editor.clips._get_template_segments", + return_value=segments, + ), + patch( + "app.api.routes.templates_editor.clips.get_used_segments", + return_value={}, + ), + patch( + "app.api.routes.templates_editor.clips.record_used_segments", + return_value=None, + ), + ): + body = ClipsFromAssetsRequest( + asset_ids=["a_x", "a_y"], + required_clips_count=2, + ) + create_clips_from_assets_editor( + template_id="tmpl-1", + body=body, + background_tasks=MagicMock(), + plan_id=f"plan-noise-{len(first_assets)}-{_}", + services=(MagicMock(), mock_plan_svc), + asset_repo=mock_asset_repo, + db=MagicMock(), + current_user=_make_auth_user(), + ) + clips_data = mock_plan_svc.replace_all_clips_transactional.call_args.args[1] + first_assets.add(clips_data[0]["asset_id"]) + + assert first_assets == { + "a_x", + "a_y", + }, f"噪声应使两条等分素材的排名浮动,30 次调用首个片段应覆盖两者,实际 {first_assets}" + + +# ── 一键生成路径集成测试 ───────────────────────────────────────────────────── + + +class TestPlanGeneratorSmartMatchIntegration: + """验证 PlanGeneratorService._sort_assets_by_smart_score 排序正确。""" + + def test_sort_assets_by_smart_score_descending(self): + """_sort_assets_by_smart_score 返回按评分降序排列的素材 ID。""" + from app.services.plan_generator_service import PlanGeneratorService + + mock_asset_repo = MagicMock() + + def _get_asset(aid): + use_count = {"high_use": 10, "low_use": 0, "mid_use": 3}[aid] + asset = MagicMock() + asset.id = aid + asset.duration = 15.0 + asset.quality_score = None + asset.created_at = None + asset.metadata = {"generation_use_count": use_count} + return asset + + mock_asset_repo.get = MagicMock(side_effect=_get_asset) + + db = MagicMock() + svc = PlanGeneratorService(db, asset_repo=mock_asset_repo) + + with _patch_zero_noise_plan_service(): + sorted_ids = svc._sort_assets_by_smart_score(["high_use", "low_use", "mid_use"]) + + # low_use (0次) 应排第一,high_use (10次) 应排最后 + assert sorted_ids[0] == "low_use" + assert sorted_ids[-1] == "high_use" + assert sorted_ids[1] == "mid_use" + + def test_distribute_assets_uses_smart_score_ordering(self): + """_distribute_assets 在非随机模式下按 smart_match 评分排序素材。""" + from app.services.plan_generator_service import PlanGeneratorService + + from packages.domain.edit_plan_clip import EditPlanClip + from packages.domain.editing_mode import EditingMode + + mock_asset_repo = MagicMock() + + def _get_asset(aid): + use_count = {"old_asset": 10, "new_asset": 0}[aid] + asset = MagicMock() + asset.id = aid + asset.duration = 30.0 + asset.quality_score = None + asset.created_at = None + asset.metadata = {"generation_use_count": use_count} + return asset + + mock_asset_repo.get = MagicMock(side_effect=_get_asset) + + db = MagicMock() + svc = PlanGeneratorService(db, asset_repo=mock_asset_repo) + + # 创建 2 个 main clips(需要提供 id 参数) + clips = [ + EditPlanClip(id="c1", plan_id="p1", clip_type="main", duration=5.0, order=0), + EditPlanClip(id="c2", plan_id="p1", clip_type="main", duration=5.0, order=1), + ] + + with ( + _patch_zero_noise_plan_service(), + patch("app.services.plan_generator_service.distribute_assets") as mock_dist, + ): + svc._distribute_assets( + clips, + ["old_asset", "new_asset"], + EditingMode.ONE_TAKE.value, + random_selection=False, + ) + # 验证传给 distribute_assets 的 asset_ids 按 smart_match 排序 + call_args = mock_dist.call_args + passed_ids = call_args.args[1] + # new_asset (0次使用) 应排在 old_asset (10次使用) 前面 + assert passed_ids[0] == "new_asset" + assert passed_ids[1] == "old_asset" + + def test_random_selection_skips_smart_score_sort(self): + """random_selection=True 时不执行 smart_match 排序。""" + from app.services.plan_generator_service import PlanGeneratorService + + from packages.domain.edit_plan_clip import EditPlanClip + from packages.domain.editing_mode import EditingMode + + mock_asset_repo = MagicMock() + db = MagicMock() + svc = PlanGeneratorService(db, asset_repo=mock_asset_repo) + + clips = [ + EditPlanClip(id="c1", plan_id="p1", clip_type="main", duration=5.0, order=0), + ] + + with patch("app.services.plan_generator_service.distribute_assets") as mock_dist: + svc._distribute_assets( + clips, + ["a1", "a2"], + EditingMode.ONE_TAKE.value, + random_selection=True, + ) + # random_selection=True 时不应调用 asset_repo.get(不执行排序) + mock_asset_repo.get.assert_not_called() + + +class TestPlanGeneratorScoreNoise: + """验证一键生成路径的评分排序注入了随机噪声。""" + + def test_equal_scores_produce_varied_order(self): + """两条 smart_match 得分相同的素材,多次排序的首位应覆盖两者。""" + from app.services.plan_generator_service import PlanGeneratorService + + def _get_asset(aid): + asset = MagicMock() + asset.id = aid + asset.duration = 15.0 + asset.quality_score = None + asset.created_at = None + asset.metadata = {"generation_use_count": 0} + return asset + + mock_asset_repo = MagicMock() + mock_asset_repo.get = MagicMock(side_effect=_get_asset) + svc = PlanGeneratorService(MagicMock(), asset_repo=mock_asset_repo) + + first_ids: set[str] = set() + for _ in range(30): + order = svc._sort_assets_by_smart_score(["equal_a", "equal_b"]) + first_ids.add(order[0]) + + assert first_ids == { + "equal_a", + "equal_b", + }, f"噪声应使等分素材排名浮动,30 次排序首位应覆盖两者,实际 {first_ids}" + + def test_large_score_gap_not_flipped(self): + """得分差距远大于噪声上限时,低分素材不会因噪声超过高分素材。 + + quality 100 vs 0 → quality 维度差距 40 分 > 噪声上限 20, + 其余维度完全一致,50 次排序高质量素材必须始终排第一。 + """ + from app.services.plan_generator_service import PlanGeneratorService + + def _get_asset(aid): + quality = {"top": 100.0, "bad": 0.0}[aid] + asset = MagicMock() + asset.id = aid + asset.duration = 15.0 + asset.quality_score = quality + asset.created_at = None + asset.metadata = {"generation_use_count": 0} + return asset + + mock_asset_repo = MagicMock() + mock_asset_repo.get = MagicMock(side_effect=_get_asset) + svc = PlanGeneratorService(MagicMock(), asset_repo=mock_asset_repo) + + for _ in range(50): + order = svc._sort_assets_by_smart_score(["top", "bad"]) + assert order[0] == "top", f"质量差距 40 分 > 噪声上限,top 应始终排第一,实际 {order}"