This commit is contained in:
parent
d46df56d1f
commit
da7d05ecc9
19
README.md
19
README.md
|
|
@ -18,14 +18,14 @@
|
||||||
|
|
||||||
**TradingAgentsX** 是一個先進的多代理 AI 交易分析系統,模擬真實世界的交易公司運作模式。透過 LangGraph 編排多個專業化的 AI 代理(分析師、研究員、交易員、風險管理者),系統能夠從不同角度分析股票市場,並通過結構化的辯論與協作流程產生高質量的交易決策。
|
**TradingAgentsX** 是一個先進的多代理 AI 交易分析系統,模擬真實世界的交易公司運作模式。透過 LangGraph 編排多個專業化的 AI 代理(分析師、研究員、交易員、風險管理者),系統能夠從不同角度分析股票市場,並通過結構化的辯論與協作流程產生高質量的交易決策。
|
||||||
|
|
||||||
> 💡 **致敬原作**: 本專案基於 [TauricResearch/TradingAgents](https://github.com/TauricResearch/TradingAgents) 進行改進和擴展,加入了完整的 Web 前端介面、RESTful API、Docker 部署支援等功能。感謝原作者的卓越工作和開源貢獻!
|
> 💡 **致敬原作**: 本專案基於 [TauricResearch/TradingAgents](https://github.com/TauricResearch/TradingAgents) 進行改進和擴展,加入了完整的 Web 前端介面、RESTful API、Docker 部署支援等功能。並且支援台股上市櫃資料,感謝原作者的卓越工作和開源貢獻!
|
||||||
|
|
||||||
### 🎯 核心特色
|
### 🎯 核心特色
|
||||||
|
|
||||||
- 🤖 **多代理協作架構** - 專業化的 AI 代理團隊協同工作
|
- 🤖 **多代理協作架構** - 專業化的 AI 代理團隊協同工作
|
||||||
- 🌐 **多模型靈活支援** - 支援 OpenAI、Anthropic、Gemini、Grok、DeepSeek、Qwen 等多家 LLM 提供商
|
- 🌐 **多模型靈活支援** - 支援 OpenAI、Anthropic、Gemini、Grok、DeepSeek、Qwen 等多家 LLM 提供商
|
||||||
- 🔧 **自訂端點配置** - 完整支援自訂 API 端點,可連接任何 OpenAI 兼容的服務
|
- 🔧 **自訂端點配置** - 完整支援自訂 API 端點,可連接任何 OpenAI 兼容的服務
|
||||||
- 📊 **全方位市場分析** - 整合技術面、基本面、情緒面、新聞面分析
|
- 📊 **全方位市場分析** - 完整支援**美股**與**台股**(FinMind)技術面、基本面、情緒面、新聞面分析
|
||||||
- 🔄 **結構化決策流程** - 透過看漲/看跌辯論機制減少偏見
|
- 🔄 **結構化決策流程** - 透過看漲/看跌辯論機制減少偏見
|
||||||
- 🧠 **長期記憶系統** - 使用 ChromaDB 向量數據庫儲存歷史決策
|
- 🧠 **長期記憶系統** - 使用 ChromaDB 向量數據庫儲存歷史決策
|
||||||
- 🎨 **現代化 Web 介面** - 基於 Next.js 16 的響應式 UI
|
- 🎨 **現代化 Web 介面** - 基於 Next.js 16 的響應式 UI
|
||||||
|
|
@ -228,8 +228,10 @@ TradingAgentsX/
|
||||||
- 申請網址: https://platform.deepseek.com
|
- 申請網址: https://platform.deepseek.com
|
||||||
- **Qwen API Key** - Qwen 系列模型
|
- **Qwen API Key** - Qwen 系列模型
|
||||||
- 申請網址: https://www.alibabacloud.com
|
- 申請網址: https://www.alibabacloud.com
|
||||||
- **Alpha Vantage API Key** (必需) - 股票基本面資料
|
- **Alpha Vantage API Key** (必需) - 美股基本面資料
|
||||||
- 申請網址: https://www.alphavantage.co/support/#api-key
|
- 申請網址: https://www.alphavantage.co/support/#api-key
|
||||||
|
- **FinMind API Key** (選填) - 台股上市櫃資料
|
||||||
|
- 申請網址: https://finmindtrade.com/
|
||||||
|
|
||||||
> 💡 **提示**: 本系統採用 BYOK (Bring Your Own Key) 模式,您可以在前端介面直接輸入 API 金鑰,無需設定環境變數(適合快速測試)。
|
> 💡 **提示**: 本系統採用 BYOK (Bring Your Own Key) 模式,您可以在前端介面直接輸入 API 金鑰,無需設定環境變數(適合快速測試)。
|
||||||
|
|
||||||
|
|
@ -299,9 +301,12 @@ DEEPSEEK_API_KEY=your-deepseek-key
|
||||||
# Qwen / Alibaba Cloud (可選)
|
# Qwen / Alibaba Cloud (可選)
|
||||||
DASHSCOPE_API_KEY=your-qwen-key
|
DASHSCOPE_API_KEY=your-qwen-key
|
||||||
|
|
||||||
# Alpha Vantage (強烈建議 - 用於基本面數據)
|
# Alpha Vantage (強烈建議 - 用於美股基本面數據)
|
||||||
ALPHA_VANTAGE_API_KEY=your-alpha-vantage-key
|
ALPHA_VANTAGE_API_KEY=your-alpha-vantage-key
|
||||||
|
|
||||||
|
# FinMind (選填 - 用於台股數據)
|
||||||
|
FINMIND_API_KEY=your-finmind-key
|
||||||
|
|
||||||
# ============ 後端服務配置 ============
|
# ============ 後端服務配置 ============
|
||||||
BACKEND_HOST=0.0.0.0
|
BACKEND_HOST=0.0.0.0
|
||||||
BACKEND_PORT=8000
|
BACKEND_PORT=8000
|
||||||
|
|
@ -492,7 +497,8 @@ docker compose down -v
|
||||||
|
|
||||||
#### 🔑 API 金鑰配置
|
#### 🔑 API 金鑰配置
|
||||||
|
|
||||||
- **Alpha Vantage API Key** (必填): 用於獲取股票基本面數據
|
- **Alpha Vantage API Key** (必填): 用於獲取美股基本面數據
|
||||||
|
- **FinMind API Key** (選填): 用於獲取台股數據
|
||||||
- 如未在環境變數中配置 LLM API Key,需在此填入
|
- 如未在環境變數中配置 LLM API Key,需在此填入
|
||||||
|
|
||||||
4. **執行分析**
|
4. **執行分析**
|
||||||
|
|
@ -678,7 +684,8 @@ TradingAgentsX 模擬真實交易公司的組織架構,每個代理都有其
|
||||||
- yfinance: 即時股價與歷史資料
|
- yfinance: 即時股價與歷史資料
|
||||||
- Reddit API: 社群情緒分析
|
- Reddit API: 社群情緒分析
|
||||||
- RSS Feeds: 財經新聞抓取
|
- RSS Feeds: 財經新聞抓取
|
||||||
- Alpha Vantage: 詳細財務資料(必需)
|
- Alpha Vantage: 美股詳細財務資料(必需)
|
||||||
|
- FinMind: 台股上市櫃資料 integration (https://finmindtrade.com)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -90,6 +90,7 @@ async def run_analysis(
|
||||||
analysis_date=request.analysis_date,
|
analysis_date=request.analysis_date,
|
||||||
analysts=request.analysts,
|
analysts=request.analysts,
|
||||||
research_depth=request.research_depth,
|
research_depth=request.research_depth,
|
||||||
|
market_type=request.market_type or "us", # 預設美股
|
||||||
deep_think_llm=request.deep_think_llm,
|
deep_think_llm=request.deep_think_llm,
|
||||||
quick_think_llm=request.quick_think_llm,
|
quick_think_llm=request.quick_think_llm,
|
||||||
openai_api_key=request.openai_api_key or "", # Pass empty string if None, service handles it
|
openai_api_key=request.openai_api_key or "", # Pass empty string if None, service handles it
|
||||||
|
|
@ -100,7 +101,8 @@ async def run_analysis(
|
||||||
deep_think_api_key=request.deep_think_api_key or "",
|
deep_think_api_key=request.deep_think_api_key or "",
|
||||||
embedding_base_url=request.embedding_base_url,
|
embedding_base_url=request.embedding_base_url,
|
||||||
embedding_api_key=request.embedding_api_key or "",
|
embedding_api_key=request.embedding_api_key or "",
|
||||||
alpha_vantage_api_key=request.alpha_vantage_api_key,
|
alpha_vantage_api_key=request.alpha_vantage_api_key or "",
|
||||||
|
finmind_api_key=request.finmind_api_key or "",
|
||||||
))
|
))
|
||||||
|
|
||||||
# Check for errors in result
|
# Check for errors in result
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,10 @@ class AnalysisRequest(BaseModel):
|
||||||
description="List of analysts to include in analysis"
|
description="List of analysts to include in analysis"
|
||||||
)
|
)
|
||||||
research_depth: Optional[int] = Field(default=1, ge=1, le=5, description="Research depth (1-5)")
|
research_depth: Optional[int] = Field(default=1, ge=1, le=5, description="Research depth (1-5)")
|
||||||
|
market_type: Optional[Literal["us", "twse", "tpex"]] = Field(
|
||||||
|
default="us",
|
||||||
|
description="Market type: 'us' for US stocks, 'twse' for Taiwan TWSE (上市), 'tpex' for Taiwan TPEx/ROTC (上櫃/興櫃)"
|
||||||
|
)
|
||||||
deep_think_llm: Optional[str] = Field(default="gpt-5-mini", description="Deep thinking LLM model")
|
deep_think_llm: Optional[str] = Field(default="gpt-5-mini", description="Deep thinking LLM model")
|
||||||
quick_think_llm: Optional[str] = Field(default="gpt-5-mini", description="Quick thinking LLM model")
|
quick_think_llm: Optional[str] = Field(default="gpt-5-mini", description="Quick thinking LLM model")
|
||||||
|
|
||||||
|
|
@ -45,10 +49,15 @@ class AnalysisRequest(BaseModel):
|
||||||
description="Base URL for Embedding Model"
|
description="Base URL for Embedding Model"
|
||||||
)
|
)
|
||||||
embedding_api_key: Optional[str] = Field(None, description="API Key for Embedding Model", min_length=0)
|
embedding_api_key: Optional[str] = Field(None, description="API Key for Embedding Model", min_length=0)
|
||||||
alpha_vantage_api_key: str = Field(
|
alpha_vantage_api_key: Optional[str] = Field(
|
||||||
...,
|
None,
|
||||||
description="Alpha Vantage API Key (required for fundamental data)",
|
description="Alpha Vantage API Key (optional, for US stock fundamental data)",
|
||||||
min_length=1
|
min_length=0
|
||||||
|
)
|
||||||
|
finmind_api_key: Optional[str] = Field(
|
||||||
|
None,
|
||||||
|
description="FinMind API Token (optional, for Taiwan stock data)",
|
||||||
|
min_length=0
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
Price data service for loading and processing stock price data
|
Price data service for loading and processing stock price data
|
||||||
"""
|
"""
|
||||||
import polars as pl
|
import polars as pl
|
||||||
|
import pandas as pd
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import List, Dict, Any, Optional
|
from typing import List, Dict, Any, Optional
|
||||||
import logging
|
import logging
|
||||||
|
|
@ -101,13 +102,34 @@ class PriceService:
|
||||||
end_date = datetime.now()
|
end_date = datetime.now()
|
||||||
start_date = end_date - timedelta(days=365 * 15) # 15 years of data
|
start_date = end_date - timedelta(days=365 * 15) # 15 years of data
|
||||||
|
|
||||||
|
# 處理台股代碼
|
||||||
|
yf_ticker = ticker
|
||||||
|
original_ticker = ticker
|
||||||
|
|
||||||
|
# 檢查是否為台股代碼(4-6位數字)
|
||||||
|
clean_ticker = ticker.replace(".TW", "").replace(".TWO", "").strip()
|
||||||
|
if clean_ticker.isdigit() and 4 <= len(clean_ticker) <= 6:
|
||||||
|
# 嘗試從傳入的 market_type 判斷(如果有的話)
|
||||||
|
# 否則使用 FinMind API 判斷
|
||||||
|
try:
|
||||||
|
from tradingagents.dataflows.finmind_common import get_yfinance_ticker
|
||||||
|
yf_ticker = get_yfinance_ticker(clean_ticker)
|
||||||
|
logger.info(f"台股代碼 {ticker} 轉換為 Yahoo Finance 格式: {yf_ticker}")
|
||||||
|
except ImportError:
|
||||||
|
# 如果無法導入 FinMind,預設使用 .TW
|
||||||
|
yf_ticker = f"{clean_ticker}.TW"
|
||||||
|
logger.info(f"無法導入 FinMind,預設使用上市後綴: {yf_ticker}")
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning(f"獲取市場類型失敗,嘗試 .TW: {e}")
|
||||||
|
yf_ticker = f"{clean_ticker}.TW"
|
||||||
|
|
||||||
for attempt in range(1, max_retries + 1):
|
for attempt in range(1, max_retries + 1):
|
||||||
try:
|
try:
|
||||||
logger.info(f"嘗試從 Yahoo Finance 獲取 {ticker} 數據(第 {attempt} 次嘗試)...")
|
logger.info(f"嘗試從 Yahoo Finance 獲取 {yf_ticker} 數據(第 {attempt} 次嘗試)...")
|
||||||
|
|
||||||
# Download data with timeout
|
# Download data with timeout
|
||||||
data = yf.download(
|
data = yf.download(
|
||||||
ticker,
|
yf_ticker,
|
||||||
start=start_date.strftime("%Y-%m-%d"),
|
start=start_date.strftime("%Y-%m-%d"),
|
||||||
end=end_date.strftime("%Y-%m-%d"),
|
end=end_date.strftime("%Y-%m-%d"),
|
||||||
progress=False,
|
progress=False,
|
||||||
|
|
@ -115,24 +137,83 @@ class PriceService:
|
||||||
)
|
)
|
||||||
|
|
||||||
if data.empty:
|
if data.empty:
|
||||||
logger.error(f"{ticker} 無可用數據")
|
# 如果是台股,嘗試另一個後綴
|
||||||
return None
|
if ".TW" in yf_ticker:
|
||||||
|
alt_ticker = yf_ticker.replace(".TW", ".TWO")
|
||||||
|
logger.info(f"嘗試上櫃代碼: {alt_ticker}")
|
||||||
|
data = yf.download(
|
||||||
|
alt_ticker,
|
||||||
|
start=start_date.strftime("%Y-%m-%d"),
|
||||||
|
end=end_date.strftime("%Y-%m-%d"),
|
||||||
|
progress=False,
|
||||||
|
timeout=30
|
||||||
|
)
|
||||||
|
if not data.empty:
|
||||||
|
yf_ticker = alt_ticker
|
||||||
|
elif ".TWO" in yf_ticker:
|
||||||
|
alt_ticker = yf_ticker.replace(".TWO", ".TW")
|
||||||
|
logger.info(f"嘗試上市代碼: {alt_ticker}")
|
||||||
|
data = yf.download(
|
||||||
|
alt_ticker,
|
||||||
|
start=start_date.strftime("%Y-%m-%d"),
|
||||||
|
end=end_date.strftime("%Y-%m-%d"),
|
||||||
|
progress=False,
|
||||||
|
timeout=30
|
||||||
|
)
|
||||||
|
if not data.empty:
|
||||||
|
yf_ticker = alt_ticker
|
||||||
|
|
||||||
|
if data.empty:
|
||||||
|
logger.error(f"{yf_ticker} 無可用數據")
|
||||||
|
return None
|
||||||
|
|
||||||
|
# 處理 yfinance 多索引 DataFrame
|
||||||
|
# yfinance 可能返回多層索引的 DataFrame
|
||||||
|
if isinstance(data.columns, pd.MultiIndex):
|
||||||
|
# 移除多層索引,只保留第一層
|
||||||
|
data.columns = data.columns.get_level_values(0)
|
||||||
|
logger.info("已處理 yfinance 多索引 DataFrame")
|
||||||
|
|
||||||
# Reset index to make Date a column
|
# Reset index to make Date a column
|
||||||
data = data.reset_index()
|
data = data.reset_index()
|
||||||
|
|
||||||
|
# 確保 Date 欄位名稱正確
|
||||||
|
if 'Date' not in data.columns and 'date' in data.columns:
|
||||||
|
data = data.rename(columns={'date': 'Date'})
|
||||||
|
elif 'Date' not in data.columns:
|
||||||
|
# 如果第一個欄位是日期,重命名它
|
||||||
|
first_col = data.columns[0]
|
||||||
|
data = data.rename(columns={first_col: 'Date'})
|
||||||
|
|
||||||
|
# 標準化欄位名稱
|
||||||
|
column_mapping = {
|
||||||
|
'open': 'Open', 'high': 'High', 'low': 'Low',
|
||||||
|
'close': 'Close', 'volume': 'Volume', 'adj close': 'Adj Close'
|
||||||
|
}
|
||||||
|
data = data.rename(columns={k: v for k, v in column_mapping.items() if k in data.columns})
|
||||||
|
|
||||||
# Ensure cache directory exists
|
# Ensure cache directory exists
|
||||||
Path(data_cache_dir).mkdir(parents=True, exist_ok=True)
|
Path(data_cache_dir).mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
# Save to cache
|
# Save to cache - 使用原始代碼作為檔名(不含後綴)
|
||||||
cache_file = Path(data_cache_dir) / f"{ticker}-YFin-data-{start_date.strftime('%Y-%m-%d')}-{end_date.strftime('%Y-%m-%d')}.csv"
|
cache_file = Path(data_cache_dir) / f"{original_ticker}-YFin-data-{start_date.strftime('%Y-%m-%d')}-{end_date.strftime('%Y-%m-%d')}.csv"
|
||||||
data.to_csv(cache_file, index=False)
|
data.to_csv(cache_file, index=False)
|
||||||
|
|
||||||
logger.info(f"成功獲取並緩存 {ticker} 數據到 {cache_file}")
|
logger.info(f"成功獲取並緩存 {yf_ticker} 數據到 {cache_file}")
|
||||||
|
|
||||||
# Prepare and return DataFrame - convert to polars
|
# Prepare and return DataFrame - convert to polars
|
||||||
df = pl.read_csv(str(cache_file))
|
df = pl.read_csv(str(cache_file))
|
||||||
df = df.with_columns(pl.col("Date").str.to_datetime())
|
|
||||||
|
# 嘗試轉換 Date 欄位
|
||||||
|
try:
|
||||||
|
df = df.with_columns(pl.col("Date").str.to_datetime())
|
||||||
|
except Exception as date_err:
|
||||||
|
logger.warning(f"日期轉換失敗: {date_err},嘗試其他格式")
|
||||||
|
try:
|
||||||
|
df = df.with_columns(pl.col("Date").cast(pl.Datetime))
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
return df.sort("Date")
|
return df.sort("Date")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|
@ -142,7 +223,7 @@ class PriceService:
|
||||||
logger.info(f"將在 {wait_time} 秒後重試...")
|
logger.info(f"將在 {wait_time} 秒後重試...")
|
||||||
time_module.sleep(wait_time)
|
time_module.sleep(wait_time)
|
||||||
else:
|
else:
|
||||||
logger.error(f"在 {max_retries} 次嘗試後仍無法獲取 {ticker} 數據")
|
logger.error(f"在 {max_retries} 次嘗試後仍無法獲取 {yf_ticker} 數據")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,8 @@ class TradingService:
|
||||||
embedding_base_url: str = "https://api.openai.com/v1",
|
embedding_base_url: str = "https://api.openai.com/v1",
|
||||||
embedding_api_key: Optional[str] = None,
|
embedding_api_key: Optional[str] = None,
|
||||||
alpha_vantage_api_key: Optional[str] = None,
|
alpha_vantage_api_key: Optional[str] = None,
|
||||||
|
finmind_api_key: Optional[str] = None, # 台灣股市資料 API
|
||||||
|
market_type: str = "us", # 市場類型:us (美股) 或 tw (台股)
|
||||||
analysts: Optional[List[str]] = None,
|
analysts: Optional[List[str]] = None,
|
||||||
research_depth: int = 1,
|
research_depth: int = 1,
|
||||||
deep_think_llm: str = "gpt-5-mini",
|
deep_think_llm: str = "gpt-5-mini",
|
||||||
|
|
@ -66,7 +68,9 @@ class TradingService:
|
||||||
openai_base_url: OpenAI API Base URL (optional, deprecated)
|
openai_base_url: OpenAI API Base URL (optional, deprecated)
|
||||||
quick_think_base_url: Base URL for Quick Thinking Model
|
quick_think_base_url: Base URL for Quick Thinking Model
|
||||||
deep_think_base_url: Base URL for Deep Thinking Model
|
deep_think_base_url: Base URL for Deep Thinking Model
|
||||||
alpha_vantage_api_key: Alpha Vantage API Key (optional)
|
alpha_vantage_api_key: Alpha Vantage API Key (optional, for US stocks)
|
||||||
|
finmind_api_key: FinMind API Token (optional, for Taiwan stocks)
|
||||||
|
market_type: Market type - 'us' for US stocks, 'tw' for Taiwan stocks
|
||||||
analysts: List of analyst types to include
|
analysts: List of analyst types to include
|
||||||
research_depth: Research depth (1-5)
|
research_depth: Research depth (1-5)
|
||||||
deep_think_llm: Deep thinking LLM model
|
deep_think_llm: Deep thinking LLM model
|
||||||
|
|
@ -84,12 +88,17 @@ class TradingService:
|
||||||
import os
|
import os
|
||||||
original_openai_key = os.environ.get("OPENAI_API_KEY")
|
original_openai_key = os.environ.get("OPENAI_API_KEY")
|
||||||
original_alpha_key = os.environ.get("ALPHA_VANTAGE_API_KEY")
|
original_alpha_key = os.environ.get("ALPHA_VANTAGE_API_KEY")
|
||||||
|
original_finmind_key = os.environ.get("FINMIND_API_TOKEN")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# Set Alpha Vantage API key if provided
|
# Set Alpha Vantage API key if provided
|
||||||
if alpha_vantage_api_key:
|
if alpha_vantage_api_key:
|
||||||
os.environ["ALPHA_VANTAGE_API_KEY"] = alpha_vantage_api_key
|
os.environ["ALPHA_VANTAGE_API_KEY"] = alpha_vantage_api_key
|
||||||
|
|
||||||
|
# Set FinMind API token if provided
|
||||||
|
if finmind_api_key:
|
||||||
|
os.environ["FINMIND_API_TOKEN"] = finmind_api_key
|
||||||
|
|
||||||
# Set OpenAI API key for dataflows (openai.py reads from env var)
|
# Set OpenAI API key for dataflows (openai.py reads from env var)
|
||||||
if openai_api_key:
|
if openai_api_key:
|
||||||
os.environ["OPENAI_API_KEY"] = openai_api_key
|
os.environ["OPENAI_API_KEY"] = openai_api_key
|
||||||
|
|
@ -126,6 +135,36 @@ class TradingService:
|
||||||
config["embedding_base_url"] = normalize_base_url(embedding_base_url)
|
config["embedding_base_url"] = normalize_base_url(embedding_base_url)
|
||||||
config["embedding_api_key"] = embedding_api_key if embedding_api_key else openai_api_key
|
config["embedding_api_key"] = embedding_api_key if embedding_api_key else openai_api_key
|
||||||
|
|
||||||
|
# 根據 market_type 設定資料供應商
|
||||||
|
if market_type in ["twse", "tpex"]:
|
||||||
|
# 台股(上市/上櫃/興櫃):使用 FinMind 作為所有資料來源
|
||||||
|
market_label = "上市" if market_type == "twse" else "上櫃/興櫃"
|
||||||
|
logger.info(f"Market type: Taiwan stocks ({market_label}) - using FinMind data provider")
|
||||||
|
config["data_vendors"] = {
|
||||||
|
"core_stock_apis": "finmind",
|
||||||
|
"technical_indicators": "finmind",
|
||||||
|
"fundamental_data": "finmind",
|
||||||
|
"news_data": "finmind",
|
||||||
|
}
|
||||||
|
# 所有工具也使用 finmind
|
||||||
|
config["tool_vendors"] = {
|
||||||
|
"get_stock_data": "finmind",
|
||||||
|
"get_indicators": "finmind",
|
||||||
|
"get_fundamentals": "finmind",
|
||||||
|
"get_balance_sheet": "finmind",
|
||||||
|
"get_cashflow": "finmind",
|
||||||
|
"get_income_statement": "finmind",
|
||||||
|
"get_news": "finmind",
|
||||||
|
"get_global_news": "finmind",
|
||||||
|
"get_insider_sentiment": "finmind",
|
||||||
|
"get_insider_transactions": "finmind",
|
||||||
|
}
|
||||||
|
# 儲存市場類型供 price_service 使用
|
||||||
|
config["market_type"] = market_type
|
||||||
|
else:
|
||||||
|
# 美股:維持原有邏輯(不修改 data_vendors 和 tool_vendors)
|
||||||
|
logger.info(f"Market type: US stocks - using default data providers")
|
||||||
|
|
||||||
# Initialize TradingAgentsX graph
|
# Initialize TradingAgentsX graph
|
||||||
graph = TradingAgentsXGraph(analysts, config=config, debug=True)
|
graph = TradingAgentsXGraph(analysts, config=config, debug=True)
|
||||||
|
|
||||||
|
|
@ -171,7 +210,6 @@ class TradingService:
|
||||||
}
|
}
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
# Clean up environment variables after request
|
|
||||||
# Clean up environment variables after request
|
# Clean up environment variables after request
|
||||||
if original_openai_key is not None:
|
if original_openai_key is not None:
|
||||||
os.environ["OPENAI_API_KEY"] = original_openai_key
|
os.environ["OPENAI_API_KEY"] = original_openai_key
|
||||||
|
|
@ -181,8 +219,13 @@ class TradingService:
|
||||||
|
|
||||||
if original_alpha_key is not None:
|
if original_alpha_key is not None:
|
||||||
os.environ["ALPHA_VANTAGE_API_KEY"] = original_alpha_key
|
os.environ["ALPHA_VANTAGE_API_KEY"] = original_alpha_key
|
||||||
elif "ALPHA_VANTAGE_API_KEY" in os.environ:
|
elif alpha_vantage_api_key and "ALPHA_VANTAGE_API_KEY" in os.environ:
|
||||||
del os.environ["ALPHA_VANTAGE_API_KEY"]
|
del os.environ["ALPHA_VANTAGE_API_KEY"]
|
||||||
|
|
||||||
|
if original_finmind_key is not None:
|
||||||
|
os.environ["FINMIND_API_TOKEN"] = original_finmind_key
|
||||||
|
elif finmind_api_key and "FINMIND_API_TOKEN" in os.environ:
|
||||||
|
del os.environ["FINMIND_API_TOKEN"]
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Analysis failed for {ticker}: {str(e)}", exc_info=True)
|
logger.error(f"Analysis failed for {ticker}: {str(e)}", exc_info=True)
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ export function AgentFlowDiagram() {
|
||||||
/>
|
/>
|
||||||
<DataSourceCard
|
<DataSourceCard
|
||||||
icon={<DollarSign className="w-5 h-5" />}
|
icon={<DollarSign className="w-5 h-5" />}
|
||||||
name="Alpha Vantage"
|
name="Alpha Vantage / FinMind"
|
||||||
description="財務數據"
|
description="財務數據"
|
||||||
color="purple"
|
color="purple"
|
||||||
/>
|
/>
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,9 @@ const formSchema = z.object({
|
||||||
quick_think_llm: z.string().min(1, "請選擇快速思維模型"),
|
quick_think_llm: z.string().min(1, "請選擇快速思維模型"),
|
||||||
deep_think_llm: z.string().min(1, "請選擇深層思維模型"),
|
deep_think_llm: z.string().min(1, "請選擇深層思維模型"),
|
||||||
|
|
||||||
|
// Market type selection: us=美股, twse=上市, tpex=上櫃/興櫃
|
||||||
|
market_type: z.enum(["us", "twse", "tpex"]).default("us"),
|
||||||
|
|
||||||
// Custom model names (when "custom" is selected)
|
// Custom model names (when "custom" is selected)
|
||||||
custom_quick_think_model: z.string().optional(),
|
custom_quick_think_model: z.string().optional(),
|
||||||
custom_deep_think_model: z.string().optional(),
|
custom_deep_think_model: z.string().optional(),
|
||||||
|
|
@ -76,7 +79,8 @@ const formSchema = z.object({
|
||||||
.optional()
|
.optional()
|
||||||
.or(z.literal("")),
|
.or(z.literal("")),
|
||||||
embedding_api_key: z.string().min(1, "請輸入嵌入模型 API Key"),
|
embedding_api_key: z.string().min(1, "請輸入嵌入模型 API Key"),
|
||||||
alpha_vantage_api_key: z.string().min(1, "請輸入 Alpha Vantage API Key"),
|
alpha_vantage_api_key: z.string().optional().or(z.literal("")), // 選填
|
||||||
|
finmind_api_key: z.string().optional().or(z.literal("")), // 選填
|
||||||
});
|
});
|
||||||
|
|
||||||
interface AnalysisFormProps {
|
interface AnalysisFormProps {
|
||||||
|
|
@ -99,6 +103,7 @@ export function AnalysisForm({ onSubmit, loading = false }: AnalysisFormProps) {
|
||||||
analysis_date: format(new Date(), "yyyy-MM-dd"),
|
analysis_date: format(new Date(), "yyyy-MM-dd"),
|
||||||
analysts: ["market", "social", "news", "fundamentals"], // 預設全選
|
analysts: ["market", "social", "news", "fundamentals"], // 預設全選
|
||||||
research_depth: 3, // 預設中等層級
|
research_depth: 3, // 預設中等層級
|
||||||
|
market_type: "us", // 預設美股
|
||||||
quick_think_llm: "gpt-5-mini",
|
quick_think_llm: "gpt-5-mini",
|
||||||
deep_think_llm: "gpt-5-mini",
|
deep_think_llm: "gpt-5-mini",
|
||||||
custom_quick_think_model: "",
|
custom_quick_think_model: "",
|
||||||
|
|
@ -110,12 +115,14 @@ export function AnalysisForm({ onSubmit, loading = false }: AnalysisFormProps) {
|
||||||
embedding_base_url: "https://api.openai.com/v1",
|
embedding_base_url: "https://api.openai.com/v1",
|
||||||
embedding_api_key: "",
|
embedding_api_key: "",
|
||||||
alpha_vantage_api_key: "",
|
alpha_vantage_api_key: "",
|
||||||
|
finmind_api_key: "",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
// Load API settings from localStorage and update when models change
|
// Load API settings from localStorage and update when models change
|
||||||
const quickThinkLlm = form.watch("quick_think_llm");
|
const quickThinkLlm = form.watch("quick_think_llm");
|
||||||
const deepThinkLlm = form.watch("deep_think_llm");
|
const deepThinkLlm = form.watch("deep_think_llm");
|
||||||
|
const marketType = form.watch("market_type");
|
||||||
const isQuickThinkCustom = quickThinkLlm === "custom";
|
const isQuickThinkCustom = quickThinkLlm === "custom";
|
||||||
const isDeepThinkCustom = deepThinkLlm === "custom";
|
const isDeepThinkCustom = deepThinkLlm === "custom";
|
||||||
|
|
||||||
|
|
@ -141,10 +148,27 @@ export function AnalysisForm({ onSubmit, loading = false }: AnalysisFormProps) {
|
||||||
|
|
||||||
form.setValue("embedding_base_url", savedSettings.custom_base_url || "https://api.openai.com/v1");
|
form.setValue("embedding_base_url", savedSettings.custom_base_url || "https://api.openai.com/v1");
|
||||||
form.setValue("embedding_api_key", savedSettings.custom_api_key || savedSettings.openai_api_key);
|
form.setValue("embedding_api_key", savedSettings.custom_api_key || savedSettings.openai_api_key);
|
||||||
form.setValue("alpha_vantage_api_key", savedSettings.alpha_vantage_api_key);
|
form.setValue("alpha_vantage_api_key", savedSettings.alpha_vantage_api_key || "");
|
||||||
|
form.setValue("finmind_api_key", savedSettings.finmind_api_key || "");
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [quickThinkLlm, deepThinkLlm, isQuickThinkCustom, isDeepThinkCustom]);
|
}, [quickThinkLlm, deepThinkLlm, isQuickThinkCustom, isDeepThinkCustom]);
|
||||||
|
|
||||||
|
// 當市場類型改變時,更新預設股票代碼和提示
|
||||||
|
useEffect(() => {
|
||||||
|
const currentTicker = form.getValues("ticker");
|
||||||
|
// 只在用戶未修改預設值時才自動切換
|
||||||
|
const isTwStock = marketType === "twse" || marketType === "tpex";
|
||||||
|
const isDefaultUsTicker = currentTicker === "NVDA" || currentTicker === "AAPL";
|
||||||
|
const isDefaultTwTicker = currentTicker === "2330" || currentTicker === "2317" || currentTicker === "6488";
|
||||||
|
|
||||||
|
if (isTwStock && isDefaultUsTicker) {
|
||||||
|
form.setValue("ticker", marketType === "twse" ? "2330" : "6488");
|
||||||
|
} else if (marketType === "us" && isDefaultTwTicker) {
|
||||||
|
form.setValue("ticker", "NVDA");
|
||||||
|
}
|
||||||
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
|
}, [marketType]);
|
||||||
|
|
||||||
// 全選/取消全選
|
// 全選/取消全選
|
||||||
const toggleSelectAll = () => {
|
const toggleSelectAll = () => {
|
||||||
const currentAnalysts = form.getValues("analysts");
|
const currentAnalysts = form.getValues("analysts");
|
||||||
|
|
@ -270,8 +294,45 @@ export function AnalysisForm({ onSubmit, loading = false }: AnalysisFormProps) {
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* 第一行:股票代碼、分析日期(2列) */}
|
{/* 第一行:市場類型、股票代碼、分析日期(3列) */}
|
||||||
<div className="md:col-span-2 grid grid-cols-1 md:grid-cols-2 gap-6">
|
<div className="md:col-span-2 grid grid-cols-1 md:grid-cols-3 gap-6">
|
||||||
|
{/* 市場類型選擇 */}
|
||||||
|
<FormField
|
||||||
|
control={form.control}
|
||||||
|
name="market_type"
|
||||||
|
render={({ field }) => (
|
||||||
|
<FormItem>
|
||||||
|
<FormLabel>市場類型</FormLabel>
|
||||||
|
<Select
|
||||||
|
onValueChange={field.onChange}
|
||||||
|
defaultValue={field.value}
|
||||||
|
>
|
||||||
|
<FormControl>
|
||||||
|
<SelectTrigger>
|
||||||
|
<SelectValue placeholder="選擇市場" />
|
||||||
|
</SelectTrigger>
|
||||||
|
</FormControl>
|
||||||
|
<SelectContent>
|
||||||
|
<SelectItem value="us" className="py-3 cursor-pointer">
|
||||||
|
🇺🇸 美股
|
||||||
|
</SelectItem>
|
||||||
|
<SelectItem value="twse" className="py-3 cursor-pointer">
|
||||||
|
🇹🇼 台股上市
|
||||||
|
</SelectItem>
|
||||||
|
<SelectItem value="tpex" className="py-3 cursor-pointer">
|
||||||
|
🇹🇼 台股上櫃/興櫃
|
||||||
|
</SelectItem>
|
||||||
|
</SelectContent>
|
||||||
|
</Select>
|
||||||
|
<FormDescription>
|
||||||
|
選擇分析的股票市場
|
||||||
|
</FormDescription>
|
||||||
|
<FormMessage />
|
||||||
|
</FormItem>
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
|
||||||
|
{/* 股票代碼 */}
|
||||||
<FormField
|
<FormField
|
||||||
control={form.control}
|
control={form.control}
|
||||||
name="ticker"
|
name="ticker"
|
||||||
|
|
@ -279,10 +340,21 @@ export function AnalysisForm({ onSubmit, loading = false }: AnalysisFormProps) {
|
||||||
<FormItem>
|
<FormItem>
|
||||||
<FormLabel>股票代碼</FormLabel>
|
<FormLabel>股票代碼</FormLabel>
|
||||||
<FormControl>
|
<FormControl>
|
||||||
<Input placeholder="NVDA" {...field} />
|
<Input
|
||||||
|
placeholder={
|
||||||
|
marketType === "us" ? "NVDA" :
|
||||||
|
marketType === "twse" ? "2330" : "6488"
|
||||||
|
}
|
||||||
|
{...field}
|
||||||
|
/>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
<FormDescription>
|
<FormDescription>
|
||||||
輸入股票代碼(例如:NVDA、AAPL)
|
{marketType === "us"
|
||||||
|
? "輸入美股代碼(例如:NVDA、AAPL)"
|
||||||
|
: marketType === "twse"
|
||||||
|
? "輸入上市股票代碼(例如:2330、2317)"
|
||||||
|
: "輸入上櫃/興櫃股票代碼(例如:6488、5765)"
|
||||||
|
}
|
||||||
</FormDescription>
|
</FormDescription>
|
||||||
<FormMessage />
|
<FormMessage />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
|
||||||
|
|
@ -39,9 +39,10 @@ import {
|
||||||
const formSchema = z.object({
|
const formSchema = z.object({
|
||||||
// Required
|
// Required
|
||||||
openai_api_key: z.string().min(1, "OpenAI API Key 為必填"),
|
openai_api_key: z.string().min(1, "OpenAI API Key 為必填"),
|
||||||
alpha_vantage_api_key: z.string().min(1, "Alpha Vantage API Key 為必填"),
|
|
||||||
|
|
||||||
// Optional
|
// Optional
|
||||||
|
alpha_vantage_api_key: z.string().optional().or(z.literal("")), // 美股基本面資料
|
||||||
|
finmind_api_key: z.string().optional().or(z.literal("")), // 台灣股市資料
|
||||||
anthropic_api_key: z.string().optional().or(z.literal("")),
|
anthropic_api_key: z.string().optional().or(z.literal("")),
|
||||||
google_api_key: z.string().optional().or(z.literal("")),
|
google_api_key: z.string().optional().or(z.literal("")),
|
||||||
grok_api_key: z.string().optional().or(z.literal("")),
|
grok_api_key: z.string().optional().or(z.literal("")),
|
||||||
|
|
@ -136,14 +137,43 @@ export function ApiSettingsDialog() {
|
||||||
</FormItem>
|
</FormItem>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
{/* Alpha Vantage API Key */}
|
{/* Stock Market Data APIs Section */}
|
||||||
|
<div className="space-y-4 border-t pt-4">
|
||||||
|
<h3 className="text-lg font-semibold text-muted-foreground">
|
||||||
|
股市資料 API(依分析市場選擇填寫)
|
||||||
|
</h3>
|
||||||
|
|
||||||
|
{/* FinMind API Key - Taiwan Stocks */}
|
||||||
|
<FormField
|
||||||
|
control={form.control}
|
||||||
|
name="finmind_api_key"
|
||||||
|
render={({ field }) => (
|
||||||
|
<FormItem>
|
||||||
|
<FormLabel>FinMind API Token(台股)</FormLabel>
|
||||||
|
<FormControl>
|
||||||
|
<Input
|
||||||
|
type="password"
|
||||||
|
placeholder="輸入 FinMind Token"
|
||||||
|
{...field}
|
||||||
|
/>
|
||||||
|
</FormControl>
|
||||||
|
<FormDescription>
|
||||||
|
用於獲取台灣股市資料(在 finmindtrade.com 註冊取得)
|
||||||
|
</FormDescription>
|
||||||
|
<FormMessage />
|
||||||
|
</FormItem>
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
|
||||||
|
{/* Alpha Vantage API Key - US Stocks */}
|
||||||
<FormField
|
<FormField
|
||||||
control={form.control}
|
control={form.control}
|
||||||
name="alpha_vantage_api_key"
|
name="alpha_vantage_api_key"
|
||||||
render={({ field }) => (
|
render={({ field }) => (
|
||||||
<FormItem>
|
<FormItem>
|
||||||
<FormLabel>Alpha Vantage API Key *</FormLabel>
|
<FormLabel>Alpha Vantage API Key(美股)</FormLabel>
|
||||||
<FormControl>
|
<FormControl>
|
||||||
<Input
|
<Input
|
||||||
type="password"
|
type="password"
|
||||||
|
|
@ -152,7 +182,7 @@ export function ApiSettingsDialog() {
|
||||||
/>
|
/>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
<FormDescription>
|
<FormDescription>
|
||||||
用於獲取市場基本面數據(必填)
|
用於獲取美股基本面數據(分析美股時建議填寫)
|
||||||
</FormDescription>
|
</FormDescription>
|
||||||
<FormMessage />
|
<FormMessage />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
@ -160,10 +190,10 @@ export function ApiSettingsDialog() {
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Optional Section */}
|
{/* Optional LLM Providers Section */}
|
||||||
<div className="space-y-4 border-t pt-4">
|
<div className="space-y-4 border-t pt-4">
|
||||||
<h3 className="text-lg font-semibold text-muted-foreground">
|
<h3 className="text-lg font-semibold text-muted-foreground">
|
||||||
選填項目(依需求填寫)
|
選填項目(其他 LLM 供應商)
|
||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
{/* Anthropic API Key */}
|
{/* Anthropic API Key */}
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ export interface ApiSettings {
|
||||||
grok_api_key: string;
|
grok_api_key: string;
|
||||||
deepseek_api_key: string;
|
deepseek_api_key: string;
|
||||||
qwen_api_key: string;
|
qwen_api_key: string;
|
||||||
|
finmind_api_key: string; // 台灣股市資料 API
|
||||||
|
|
||||||
// Custom endpoint
|
// Custom endpoint
|
||||||
custom_base_url: string;
|
custom_base_url: string;
|
||||||
|
|
@ -29,6 +30,7 @@ export const DEFAULT_API_SETTINGS: ApiSettings = {
|
||||||
grok_api_key: "",
|
grok_api_key: "",
|
||||||
deepseek_api_key: "",
|
deepseek_api_key: "",
|
||||||
qwen_api_key: "",
|
qwen_api_key: "",
|
||||||
|
finmind_api_key: "", // 台灣股市資料 API
|
||||||
custom_base_url: "",
|
custom_base_url: "",
|
||||||
custom_api_key: "",
|
custom_api_key: "",
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ export interface AnalysisRequest {
|
||||||
analysis_date: string;
|
analysis_date: string;
|
||||||
analysts?: string[];
|
analysts?: string[];
|
||||||
research_depth?: number;
|
research_depth?: number;
|
||||||
|
market_type?: "us" | "twse" | "tpex"; // 市場類型:美股、上市、上櫃/興櫃
|
||||||
quick_think_llm?: string;
|
quick_think_llm?: string;
|
||||||
deep_think_llm?: string;
|
deep_think_llm?: string;
|
||||||
|
|
||||||
|
|
@ -20,6 +21,7 @@ export interface AnalysisRequest {
|
||||||
embedding_base_url?: string;
|
embedding_base_url?: string;
|
||||||
embedding_api_key?: string;
|
embedding_api_key?: string;
|
||||||
alpha_vantage_api_key?: string;
|
alpha_vantage_api_key?: string;
|
||||||
|
finmind_api_key?: string; // 台灣股市資料 API
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface PriceData {
|
export interface PriceData {
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ importers:
|
||||||
version: 19.2.0
|
version: 19.2.0
|
||||||
react-day-picker:
|
react-day-picker:
|
||||||
specifier: ^9.11.3
|
specifier: ^9.11.3
|
||||||
version: 9.11.3(react@19.2.0)
|
version: 9.12.0(react@19.2.0)
|
||||||
react-dom:
|
react-dom:
|
||||||
specifier: 19.2.0
|
specifier: 19.2.0
|
||||||
version: 19.2.0(react@19.2.0)
|
version: 19.2.0(react@19.2.0)
|
||||||
|
|
@ -89,10 +89,10 @@ importers:
|
||||||
devDependencies:
|
devDependencies:
|
||||||
'@tailwindcss/postcss':
|
'@tailwindcss/postcss':
|
||||||
specifier: ^4
|
specifier: ^4
|
||||||
version: 4.1.17
|
version: 4.1.18
|
||||||
'@types/node':
|
'@types/node':
|
||||||
specifier: ^20
|
specifier: ^20
|
||||||
version: 20.19.25
|
version: 20.19.26
|
||||||
'@types/react':
|
'@types/react':
|
||||||
specifier: ^19
|
specifier: ^19
|
||||||
version: 19.2.7
|
version: 19.2.7
|
||||||
|
|
@ -104,16 +104,16 @@ importers:
|
||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
baseline-browser-mapping:
|
baseline-browser-mapping:
|
||||||
specifier: ^2.9.2
|
specifier: ^2.9.2
|
||||||
version: 2.9.2
|
version: 2.9.6
|
||||||
eslint:
|
eslint:
|
||||||
specifier: ^9
|
specifier: ^9
|
||||||
version: 9.39.1(jiti@2.6.1)
|
version: 9.39.1(jiti@2.6.1)
|
||||||
eslint-config-next:
|
eslint-config-next:
|
||||||
specifier: 16.0.3
|
specifier: 16.0.3
|
||||||
version: 16.0.3(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
version: 16.0.3(@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
||||||
tailwindcss:
|
tailwindcss:
|
||||||
specifier: ^4
|
specifier: ^4
|
||||||
version: 4.1.17
|
version: 4.1.18
|
||||||
tw-animate-css:
|
tw-animate-css:
|
||||||
specifier: ^1.4.0
|
specifier: ^1.4.0
|
||||||
version: 1.4.0
|
version: 1.4.0
|
||||||
|
|
@ -897,8 +897,8 @@ packages:
|
||||||
'@radix-ui/rect@1.1.1':
|
'@radix-ui/rect@1.1.1':
|
||||||
resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==}
|
resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==}
|
||||||
|
|
||||||
'@reduxjs/toolkit@2.11.0':
|
'@reduxjs/toolkit@2.11.1':
|
||||||
resolution: {integrity: sha512-hBjYg0aaRL1O2Z0IqWhnTLytnjDIxekmRxm1snsHjHaKVmIF1HiImWqsq+PuEbn6zdMlkIj9WofK1vR8jjx+Xw==}
|
resolution: {integrity: sha512-HjhlEREguAyBTGNzRlGNiDHGQ2EjLSPWwdhhpoEqHYy8hWak3Dp6/fU72OfqVsiMb8S6rbfPsWUF24fxpilrVA==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
react: ^16.9.0 || ^17.0.0 || ^18 || ^19
|
react: ^16.9.0 || ^17.0.0 || ^18 || ^19
|
||||||
react-redux: ^7.2.1 || ^8.1.3 || ^9.0.0
|
react-redux: ^7.2.1 || ^8.1.3 || ^9.0.0
|
||||||
|
|
@ -920,65 +920,65 @@ packages:
|
||||||
'@swc/helpers@0.5.15':
|
'@swc/helpers@0.5.15':
|
||||||
resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
|
resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
|
||||||
|
|
||||||
'@tailwindcss/node@4.1.17':
|
'@tailwindcss/node@4.1.18':
|
||||||
resolution: {integrity: sha512-csIkHIgLb3JisEFQ0vxr2Y57GUNYh447C8xzwj89U/8fdW8LhProdxvnVH6U8M2Y73QKiTIH+LWbK3V2BBZsAg==}
|
resolution: {integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==}
|
||||||
|
|
||||||
'@tailwindcss/oxide-android-arm64@4.1.17':
|
'@tailwindcss/oxide-android-arm64@4.1.18':
|
||||||
resolution: {integrity: sha512-BMqpkJHgOZ5z78qqiGE6ZIRExyaHyuxjgrJ6eBO5+hfrfGkuya0lYfw8fRHG77gdTjWkNWEEm+qeG2cDMxArLQ==}
|
resolution: {integrity: sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [android]
|
os: [android]
|
||||||
|
|
||||||
'@tailwindcss/oxide-darwin-arm64@4.1.17':
|
'@tailwindcss/oxide-darwin-arm64@4.1.18':
|
||||||
resolution: {integrity: sha512-EquyumkQweUBNk1zGEU/wfZo2qkp/nQKRZM8bUYO0J+Lums5+wl2CcG1f9BgAjn/u9pJzdYddHWBiFXJTcxmOg==}
|
resolution: {integrity: sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
|
|
||||||
'@tailwindcss/oxide-darwin-x64@4.1.17':
|
'@tailwindcss/oxide-darwin-x64@4.1.18':
|
||||||
resolution: {integrity: sha512-gdhEPLzke2Pog8s12oADwYu0IAw04Y2tlmgVzIN0+046ytcgx8uZmCzEg4VcQh+AHKiS7xaL8kGo/QTiNEGRog==}
|
resolution: {integrity: sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
|
|
||||||
'@tailwindcss/oxide-freebsd-x64@4.1.17':
|
'@tailwindcss/oxide-freebsd-x64@4.1.18':
|
||||||
resolution: {integrity: sha512-hxGS81KskMxML9DXsaXT1H0DyA+ZBIbyG/sSAjWNe2EDl7TkPOBI42GBV3u38itzGUOmFfCzk1iAjDXds8Oh0g==}
|
resolution: {integrity: sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [freebsd]
|
os: [freebsd]
|
||||||
|
|
||||||
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17':
|
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18':
|
||||||
resolution: {integrity: sha512-k7jWk5E3ldAdw0cNglhjSgv501u7yrMf8oeZ0cElhxU6Y2o7f8yqelOp3fhf7evjIS6ujTI3U8pKUXV2I4iXHQ==}
|
resolution: {integrity: sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm]
|
cpu: [arm]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@tailwindcss/oxide-linux-arm64-gnu@4.1.17':
|
'@tailwindcss/oxide-linux-arm64-gnu@4.1.18':
|
||||||
resolution: {integrity: sha512-HVDOm/mxK6+TbARwdW17WrgDYEGzmoYayrCgmLEw7FxTPLcp/glBisuyWkFz/jb7ZfiAXAXUACfyItn+nTgsdQ==}
|
resolution: {integrity: sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@tailwindcss/oxide-linux-arm64-musl@4.1.17':
|
'@tailwindcss/oxide-linux-arm64-musl@4.1.18':
|
||||||
resolution: {integrity: sha512-HvZLfGr42i5anKtIeQzxdkw/wPqIbpeZqe7vd3V9vI3RQxe3xU1fLjss0TjyhxWcBaipk7NYwSrwTwK1hJARMg==}
|
resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@tailwindcss/oxide-linux-x64-gnu@4.1.17':
|
'@tailwindcss/oxide-linux-x64-gnu@4.1.18':
|
||||||
resolution: {integrity: sha512-M3XZuORCGB7VPOEDH+nzpJ21XPvK5PyjlkSFkFziNHGLc5d6g3di2McAAblmaSUNl8IOmzYwLx9NsE7bplNkwQ==}
|
resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@tailwindcss/oxide-linux-x64-musl@4.1.17':
|
'@tailwindcss/oxide-linux-x64-musl@4.1.18':
|
||||||
resolution: {integrity: sha512-k7f+pf9eXLEey4pBlw+8dgfJHY4PZ5qOUFDyNf7SI6lHjQ9Zt7+NcscjpwdCEbYi6FI5c2KDTDWyf2iHcCSyyQ==}
|
resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@tailwindcss/oxide-wasm32-wasi@4.1.17':
|
'@tailwindcss/oxide-wasm32-wasi@4.1.18':
|
||||||
resolution: {integrity: sha512-cEytGqSSoy7zK4JRWiTCx43FsKP/zGr0CsuMawhH67ONlH+T79VteQeJQRO/X7L0juEUA8ZyuYikcRBf0vsxhg==}
|
resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==}
|
||||||
engines: {node: '>=14.0.0'}
|
engines: {node: '>=14.0.0'}
|
||||||
cpu: [wasm32]
|
cpu: [wasm32]
|
||||||
bundledDependencies:
|
bundledDependencies:
|
||||||
|
|
@ -989,24 +989,24 @@ packages:
|
||||||
- '@emnapi/wasi-threads'
|
- '@emnapi/wasi-threads'
|
||||||
- tslib
|
- tslib
|
||||||
|
|
||||||
'@tailwindcss/oxide-win32-arm64-msvc@4.1.17':
|
'@tailwindcss/oxide-win32-arm64-msvc@4.1.18':
|
||||||
resolution: {integrity: sha512-JU5AHr7gKbZlOGvMdb4722/0aYbU+tN6lv1kONx0JK2cGsh7g148zVWLM0IKR3NeKLv+L90chBVYcJ8uJWbC9A==}
|
resolution: {integrity: sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
|
|
||||||
'@tailwindcss/oxide-win32-x64-msvc@4.1.17':
|
'@tailwindcss/oxide-win32-x64-msvc@4.1.18':
|
||||||
resolution: {integrity: sha512-SKWM4waLuqx0IH+FMDUw6R66Hu4OuTALFgnleKbqhgGU30DY20NORZMZUKgLRjQXNN2TLzKvh48QXTig4h4bGw==}
|
resolution: {integrity: sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
|
|
||||||
'@tailwindcss/oxide@4.1.17':
|
'@tailwindcss/oxide@4.1.18':
|
||||||
resolution: {integrity: sha512-F0F7d01fmkQhsTjXezGBLdrl1KresJTcI3DB8EkScCldyKp3Msz4hub4uyYaVnk88BAS1g5DQjjF6F5qczheLA==}
|
resolution: {integrity: sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
|
|
||||||
'@tailwindcss/postcss@4.1.17':
|
'@tailwindcss/postcss@4.1.18':
|
||||||
resolution: {integrity: sha512-+nKl9N9mN5uJ+M7dBOOCzINw94MPstNR/GtIhz1fpZysxL/4a+No64jCBD6CPN+bIHWFx3KWuu8XJRrj/572Dw==}
|
resolution: {integrity: sha512-Ce0GFnzAOuPyfV5SxjXGn0CubwGcuDB0zcdaPuCSzAa/2vII24JTkH+I6jcbXLb1ctjZMZZI6OjDaLPJQL1S0g==}
|
||||||
|
|
||||||
'@tybys/wasm-util@0.10.1':
|
'@tybys/wasm-util@0.10.1':
|
||||||
resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
|
resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
|
||||||
|
|
@ -1062,8 +1062,8 @@ packages:
|
||||||
'@types/ms@2.1.0':
|
'@types/ms@2.1.0':
|
||||||
resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
|
resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
|
||||||
|
|
||||||
'@types/node@20.19.25':
|
'@types/node@20.19.26':
|
||||||
resolution: {integrity: sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==}
|
resolution: {integrity: sha512-0l6cjgF0XnihUpndDhk+nyD3exio3iKaYROSgvh/qSevPXax3L8p5DBRFjbvalnwatGgHEQn2R88y2fA3g4irg==}
|
||||||
|
|
||||||
'@types/react-dom@19.2.3':
|
'@types/react-dom@19.2.3':
|
||||||
resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==}
|
resolution: {integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==}
|
||||||
|
|
@ -1082,63 +1082,63 @@ packages:
|
||||||
'@types/use-sync-external-store@0.0.6':
|
'@types/use-sync-external-store@0.0.6':
|
||||||
resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==}
|
resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==}
|
||||||
|
|
||||||
'@typescript-eslint/eslint-plugin@8.48.1':
|
'@typescript-eslint/eslint-plugin@8.49.0':
|
||||||
resolution: {integrity: sha512-X63hI1bxl5ohelzr0LY5coufyl0LJNthld+abwxpCoo6Gq+hSqhKwci7MUWkXo67mzgUK6YFByhmaHmUcuBJmA==}
|
resolution: {integrity: sha512-JXij0vzIaTtCwu6SxTh8qBc66kmf1xs7pI4UOiMDFVct6q86G0Zs7KRcEoJgY3Cav3x5Tq0MF5jwgpgLqgKG3A==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
'@typescript-eslint/parser': ^8.48.1
|
'@typescript-eslint/parser': ^8.49.0
|
||||||
eslint: ^8.57.0 || ^9.0.0
|
eslint: ^8.57.0 || ^9.0.0
|
||||||
typescript: '>=4.8.4 <6.0.0'
|
typescript: '>=4.8.4 <6.0.0'
|
||||||
|
|
||||||
'@typescript-eslint/parser@8.48.1':
|
'@typescript-eslint/parser@8.49.0':
|
||||||
resolution: {integrity: sha512-PC0PDZfJg8sP7cmKe6L3QIL8GZwU5aRvUFedqSIpw3B+QjRSUZeeITC2M5XKeMXEzL6wccN196iy3JLwKNvDVA==}
|
resolution: {integrity: sha512-N9lBGA9o9aqb1hVMc9hzySbhKibHmB+N3IpoShyV6HyQYRGIhlrO5rQgttypi+yEeKsKI4idxC8Jw6gXKD4THA==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
eslint: ^8.57.0 || ^9.0.0
|
eslint: ^8.57.0 || ^9.0.0
|
||||||
typescript: '>=4.8.4 <6.0.0'
|
typescript: '>=4.8.4 <6.0.0'
|
||||||
|
|
||||||
'@typescript-eslint/project-service@8.48.1':
|
'@typescript-eslint/project-service@8.49.0':
|
||||||
resolution: {integrity: sha512-HQWSicah4s9z2/HifRPQ6b6R7G+SBx64JlFQpgSSHWPKdvCZX57XCbszg/bapbRsOEv42q5tayTYcEFpACcX1w==}
|
resolution: {integrity: sha512-/wJN0/DKkmRUMXjZUXYZpD1NEQzQAAn9QWfGwo+Ai8gnzqH7tvqS7oNVdTjKqOcPyVIdZdyCMoqN66Ia789e7g==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
typescript: '>=4.8.4 <6.0.0'
|
typescript: '>=4.8.4 <6.0.0'
|
||||||
|
|
||||||
'@typescript-eslint/scope-manager@8.48.1':
|
'@typescript-eslint/scope-manager@8.49.0':
|
||||||
resolution: {integrity: sha512-rj4vWQsytQbLxC5Bf4XwZ0/CKd362DkWMUkviT7DCS057SK64D5lH74sSGzhI6PDD2HCEq02xAP9cX68dYyg1w==}
|
resolution: {integrity: sha512-npgS3zi+/30KSOkXNs0LQXtsg9ekZ8OISAOLGWA/ZOEn0ZH74Ginfl7foziV8DT+D98WfQ5Kopwqb/PZOaIJGg==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
|
|
||||||
'@typescript-eslint/tsconfig-utils@8.48.1':
|
'@typescript-eslint/tsconfig-utils@8.49.0':
|
||||||
resolution: {integrity: sha512-k0Jhs4CpEffIBm6wPaCXBAD7jxBtrHjrSgtfCjUvPp9AZ78lXKdTR8fxyZO5y4vWNlOvYXRtngSZNSn+H53Jkw==}
|
resolution: {integrity: sha512-8prixNi1/6nawsRYxet4YOhnbW+W9FK/bQPxsGB1D3ZrDzbJ5FXw5XmzxZv82X3B+ZccuSxo/X8q9nQ+mFecWA==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
typescript: '>=4.8.4 <6.0.0'
|
typescript: '>=4.8.4 <6.0.0'
|
||||||
|
|
||||||
'@typescript-eslint/type-utils@8.48.1':
|
'@typescript-eslint/type-utils@8.49.0':
|
||||||
resolution: {integrity: sha512-1jEop81a3LrJQLTf/1VfPQdhIY4PlGDBc/i67EVWObrtvcziysbLN3oReexHOM6N3jyXgCrkBsZpqwH0hiDOQg==}
|
resolution: {integrity: sha512-KTExJfQ+svY8I10P4HdxKzWsvtVnsuCifU5MvXrRwoP2KOlNZ9ADNEWWsQTJgMxLzS5VLQKDjkCT/YzgsnqmZg==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
eslint: ^8.57.0 || ^9.0.0
|
eslint: ^8.57.0 || ^9.0.0
|
||||||
typescript: '>=4.8.4 <6.0.0'
|
typescript: '>=4.8.4 <6.0.0'
|
||||||
|
|
||||||
'@typescript-eslint/types@8.48.1':
|
'@typescript-eslint/types@8.49.0':
|
||||||
resolution: {integrity: sha512-+fZ3LZNeiELGmimrujsDCT4CRIbq5oXdHe7chLiW8qzqyPMnn1puNstCrMNVAqwcl2FdIxkuJ4tOs/RFDBVc/Q==}
|
resolution: {integrity: sha512-e9k/fneezorUo6WShlQpMxXh8/8wfyc+biu6tnAqA81oWrEic0k21RHzP9uqqpyBBeBKu4T+Bsjy9/b8u7obXQ==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
|
|
||||||
'@typescript-eslint/typescript-estree@8.48.1':
|
'@typescript-eslint/typescript-estree@8.49.0':
|
||||||
resolution: {integrity: sha512-/9wQ4PqaefTK6POVTjJaYS0bynCgzh6ClJHGSBj06XEHjkfylzB+A3qvyaXnErEZSaxhIo4YdyBgq6j4RysxDg==}
|
resolution: {integrity: sha512-jrLdRuAbPfPIdYNppHJ/D0wN+wwNfJ32YTAm10eJVsFmrVpXQnDWBn8niCSMlWjvml8jsce5E/O+86IQtTbJWA==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
typescript: '>=4.8.4 <6.0.0'
|
typescript: '>=4.8.4 <6.0.0'
|
||||||
|
|
||||||
'@typescript-eslint/utils@8.48.1':
|
'@typescript-eslint/utils@8.49.0':
|
||||||
resolution: {integrity: sha512-fAnhLrDjiVfey5wwFRwrweyRlCmdz5ZxXz2G/4cLn0YDLjTapmN4gcCsTBR1N2rWnZSDeWpYtgLDsJt+FpmcwA==}
|
resolution: {integrity: sha512-N3W7rJw7Rw+z1tRsHZbK395TWSYvufBXumYtEGzypgMUthlg0/hmCImeA8hgO2d2G4pd7ftpxxul2J8OdtdaFA==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
eslint: ^8.57.0 || ^9.0.0
|
eslint: ^8.57.0 || ^9.0.0
|
||||||
typescript: '>=4.8.4 <6.0.0'
|
typescript: '>=4.8.4 <6.0.0'
|
||||||
|
|
||||||
'@typescript-eslint/visitor-keys@8.48.1':
|
'@typescript-eslint/visitor-keys@8.49.0':
|
||||||
resolution: {integrity: sha512-BmxxndzEWhE4TIEEMBs8lP3MBWN3jFPs/p6gPm/wkv02o41hI6cq9AuSmGAaTTHPtA1FTi2jBre4A9rm5ZmX+Q==}
|
resolution: {integrity: sha512-LlKaciDe3GmZFphXIc79THF/YYBugZ7FS1pO581E/edlVVNbZKDy93evqmrfQ9/Y4uN0vVhX4iuchq26mK/iiA==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
|
|
||||||
'@ungap/structured-clone@1.3.0':
|
'@ungap/structured-clone@1.3.0':
|
||||||
|
|
@ -1333,8 +1333,8 @@ packages:
|
||||||
balanced-match@1.0.2:
|
balanced-match@1.0.2:
|
||||||
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
|
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
|
||||||
|
|
||||||
baseline-browser-mapping@2.9.2:
|
baseline-browser-mapping@2.9.6:
|
||||||
resolution: {integrity: sha512-PxSsosKQjI38iXkmb3d0Y32efqyA0uW4s41u4IVBsLlWLhCiYNpH/AfNOVWRqCQBlD8TFJTz6OUWNd4DFJCnmw==}
|
resolution: {integrity: sha512-v9BVVpOTLB59C9E7aSnmIF8h7qRsFpx+A2nugVMTszEOMcfjlZMsXRm4LF23I3Z9AJxc8ANpIvzbzONoX9VJlg==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
brace-expansion@1.1.12:
|
brace-expansion@1.1.12:
|
||||||
|
|
@ -1368,8 +1368,8 @@ packages:
|
||||||
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
|
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
|
||||||
engines: {node: '>=6'}
|
engines: {node: '>=6'}
|
||||||
|
|
||||||
caniuse-lite@1.0.30001759:
|
caniuse-lite@1.0.30001760:
|
||||||
resolution: {integrity: sha512-Pzfx9fOKoKvevQf8oCXoyNRQ5QyxJj+3O0Rqx2V5oxT61KGx8+n6hV/IUyJeifUci2clnmmKVpvtiqRzgiWjSw==}
|
resolution: {integrity: sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==}
|
||||||
|
|
||||||
ccount@2.0.1:
|
ccount@2.0.1:
|
||||||
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
|
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
|
||||||
|
|
@ -1552,8 +1552,8 @@ packages:
|
||||||
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
|
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
|
||||||
engines: {node: '>= 0.4'}
|
engines: {node: '>= 0.4'}
|
||||||
|
|
||||||
electron-to-chromium@1.5.266:
|
electron-to-chromium@1.5.267:
|
||||||
resolution: {integrity: sha512-kgWEglXvkEfMH7rxP5OSZZwnaDWT7J9EoZCujhnpLbfi0bbNtRkgdX2E3gt0Uer11c61qCYktB3hwkAS325sJg==}
|
resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==}
|
||||||
|
|
||||||
emoji-regex@9.2.2:
|
emoji-regex@9.2.2:
|
||||||
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
|
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
|
||||||
|
|
@ -1863,9 +1863,6 @@ packages:
|
||||||
graceful-fs@4.2.11:
|
graceful-fs@4.2.11:
|
||||||
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
|
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
|
||||||
|
|
||||||
graphemer@1.4.0:
|
|
||||||
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
|
|
||||||
|
|
||||||
has-bigints@1.1.0:
|
has-bigints@1.1.0:
|
||||||
resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
|
resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
|
||||||
engines: {node: '>= 0.4'}
|
engines: {node: '>= 0.4'}
|
||||||
|
|
@ -2555,8 +2552,8 @@ packages:
|
||||||
queue-microtask@1.2.3:
|
queue-microtask@1.2.3:
|
||||||
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
|
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
|
||||||
|
|
||||||
react-day-picker@9.11.3:
|
react-day-picker@9.12.0:
|
||||||
resolution: {integrity: sha512-7lD12UvGbkyXqgzbYIGQTbl+x29B9bAf+k0pP5Dcs1evfpKk6zv4EdH/edNc8NxcmCiTNXr2HIYPrSZ3XvmVBg==}
|
resolution: {integrity: sha512-t8OvG/Zrciso5CQJu5b1A7yzEmebvST+S3pOVQJWxwjjVngyG/CA2htN/D15dLI4uTEuLLkbZyS4YYt480FAtA==}
|
||||||
engines: {node: '>=18'}
|
engines: {node: '>=18'}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
react: '>=16.8.0'
|
react: '>=16.8.0'
|
||||||
|
|
@ -2834,8 +2831,8 @@ packages:
|
||||||
tailwind-merge@3.4.0:
|
tailwind-merge@3.4.0:
|
||||||
resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==}
|
resolution: {integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==}
|
||||||
|
|
||||||
tailwindcss@4.1.17:
|
tailwindcss@4.1.18:
|
||||||
resolution: {integrity: sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==}
|
resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==}
|
||||||
|
|
||||||
tapable@2.3.0:
|
tapable@2.3.0:
|
||||||
resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
|
resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
|
||||||
|
|
@ -2893,8 +2890,8 @@ packages:
|
||||||
resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
|
resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
|
||||||
engines: {node: '>= 0.4'}
|
engines: {node: '>= 0.4'}
|
||||||
|
|
||||||
typescript-eslint@8.48.1:
|
typescript-eslint@8.49.0:
|
||||||
resolution: {integrity: sha512-FbOKN1fqNoXp1hIl5KYpObVrp0mCn+CLgn479nmu2IsRMrx2vyv74MmsBLVlhg8qVwNFGbXSp8fh1zp8pEoC2A==}
|
resolution: {integrity: sha512-zRSVH1WXD0uXczCXw+nsdjGPUdx4dfrs5VQoHnUWmv1U3oNlAKv4FUNdLDhVUg+gYn+a5hUESqch//Rv5wVhrg==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
eslint: ^8.57.0 || ^9.0.0
|
eslint: ^8.57.0 || ^9.0.0
|
||||||
|
|
@ -3782,7 +3779,7 @@ snapshots:
|
||||||
|
|
||||||
'@radix-ui/rect@1.1.1': {}
|
'@radix-ui/rect@1.1.1': {}
|
||||||
|
|
||||||
'@reduxjs/toolkit@2.11.0(react-redux@9.2.0(@types/react@19.2.7)(react@19.2.0)(redux@5.0.1))(react@19.2.0)':
|
'@reduxjs/toolkit@2.11.1(react-redux@9.2.0(@types/react@19.2.7)(react@19.2.0)(redux@5.0.1))(react@19.2.0)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@standard-schema/spec': 1.0.0
|
'@standard-schema/spec': 1.0.0
|
||||||
'@standard-schema/utils': 0.3.0
|
'@standard-schema/utils': 0.3.0
|
||||||
|
|
@ -3804,7 +3801,7 @@ snapshots:
|
||||||
dependencies:
|
dependencies:
|
||||||
tslib: 2.8.1
|
tslib: 2.8.1
|
||||||
|
|
||||||
'@tailwindcss/node@4.1.17':
|
'@tailwindcss/node@4.1.18':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@jridgewell/remapping': 2.3.5
|
'@jridgewell/remapping': 2.3.5
|
||||||
enhanced-resolve: 5.18.3
|
enhanced-resolve: 5.18.3
|
||||||
|
|
@ -3812,66 +3809,66 @@ snapshots:
|
||||||
lightningcss: 1.30.2
|
lightningcss: 1.30.2
|
||||||
magic-string: 0.30.21
|
magic-string: 0.30.21
|
||||||
source-map-js: 1.2.1
|
source-map-js: 1.2.1
|
||||||
tailwindcss: 4.1.17
|
tailwindcss: 4.1.18
|
||||||
|
|
||||||
'@tailwindcss/oxide-android-arm64@4.1.17':
|
'@tailwindcss/oxide-android-arm64@4.1.18':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tailwindcss/oxide-darwin-arm64@4.1.17':
|
'@tailwindcss/oxide-darwin-arm64@4.1.18':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tailwindcss/oxide-darwin-x64@4.1.17':
|
'@tailwindcss/oxide-darwin-x64@4.1.18':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tailwindcss/oxide-freebsd-x64@4.1.17':
|
'@tailwindcss/oxide-freebsd-x64@4.1.18':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17':
|
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tailwindcss/oxide-linux-arm64-gnu@4.1.17':
|
'@tailwindcss/oxide-linux-arm64-gnu@4.1.18':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tailwindcss/oxide-linux-arm64-musl@4.1.17':
|
'@tailwindcss/oxide-linux-arm64-musl@4.1.18':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tailwindcss/oxide-linux-x64-gnu@4.1.17':
|
'@tailwindcss/oxide-linux-x64-gnu@4.1.18':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tailwindcss/oxide-linux-x64-musl@4.1.17':
|
'@tailwindcss/oxide-linux-x64-musl@4.1.18':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tailwindcss/oxide-wasm32-wasi@4.1.17':
|
'@tailwindcss/oxide-wasm32-wasi@4.1.18':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tailwindcss/oxide-win32-arm64-msvc@4.1.17':
|
'@tailwindcss/oxide-win32-arm64-msvc@4.1.18':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tailwindcss/oxide-win32-x64-msvc@4.1.17':
|
'@tailwindcss/oxide-win32-x64-msvc@4.1.18':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@tailwindcss/oxide@4.1.17':
|
'@tailwindcss/oxide@4.1.18':
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@tailwindcss/oxide-android-arm64': 4.1.17
|
'@tailwindcss/oxide-android-arm64': 4.1.18
|
||||||
'@tailwindcss/oxide-darwin-arm64': 4.1.17
|
'@tailwindcss/oxide-darwin-arm64': 4.1.18
|
||||||
'@tailwindcss/oxide-darwin-x64': 4.1.17
|
'@tailwindcss/oxide-darwin-x64': 4.1.18
|
||||||
'@tailwindcss/oxide-freebsd-x64': 4.1.17
|
'@tailwindcss/oxide-freebsd-x64': 4.1.18
|
||||||
'@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.17
|
'@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.18
|
||||||
'@tailwindcss/oxide-linux-arm64-gnu': 4.1.17
|
'@tailwindcss/oxide-linux-arm64-gnu': 4.1.18
|
||||||
'@tailwindcss/oxide-linux-arm64-musl': 4.1.17
|
'@tailwindcss/oxide-linux-arm64-musl': 4.1.18
|
||||||
'@tailwindcss/oxide-linux-x64-gnu': 4.1.17
|
'@tailwindcss/oxide-linux-x64-gnu': 4.1.18
|
||||||
'@tailwindcss/oxide-linux-x64-musl': 4.1.17
|
'@tailwindcss/oxide-linux-x64-musl': 4.1.18
|
||||||
'@tailwindcss/oxide-wasm32-wasi': 4.1.17
|
'@tailwindcss/oxide-wasm32-wasi': 4.1.18
|
||||||
'@tailwindcss/oxide-win32-arm64-msvc': 4.1.17
|
'@tailwindcss/oxide-win32-arm64-msvc': 4.1.18
|
||||||
'@tailwindcss/oxide-win32-x64-msvc': 4.1.17
|
'@tailwindcss/oxide-win32-x64-msvc': 4.1.18
|
||||||
|
|
||||||
'@tailwindcss/postcss@4.1.17':
|
'@tailwindcss/postcss@4.1.18':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@alloc/quick-lru': 5.2.0
|
'@alloc/quick-lru': 5.2.0
|
||||||
'@tailwindcss/node': 4.1.17
|
'@tailwindcss/node': 4.1.18
|
||||||
'@tailwindcss/oxide': 4.1.17
|
'@tailwindcss/oxide': 4.1.18
|
||||||
postcss: 8.5.6
|
postcss: 8.5.6
|
||||||
tailwindcss: 4.1.17
|
tailwindcss: 4.1.18
|
||||||
|
|
||||||
'@tybys/wasm-util@0.10.1':
|
'@tybys/wasm-util@0.10.1':
|
||||||
dependencies:
|
dependencies:
|
||||||
|
|
@ -3926,7 +3923,7 @@ snapshots:
|
||||||
|
|
||||||
'@types/ms@2.1.0': {}
|
'@types/ms@2.1.0': {}
|
||||||
|
|
||||||
'@types/node@20.19.25':
|
'@types/node@20.19.26':
|
||||||
dependencies:
|
dependencies:
|
||||||
undici-types: 6.21.0
|
undici-types: 6.21.0
|
||||||
|
|
||||||
|
|
@ -3944,16 +3941,15 @@ snapshots:
|
||||||
|
|
||||||
'@types/use-sync-external-store@0.0.6': {}
|
'@types/use-sync-external-store@0.0.6': {}
|
||||||
|
|
||||||
'@typescript-eslint/eslint-plugin@8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
|
'@typescript-eslint/eslint-plugin@8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@eslint-community/regexpp': 4.12.2
|
'@eslint-community/regexpp': 4.12.2
|
||||||
'@typescript-eslint/parser': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
'@typescript-eslint/parser': 8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
||||||
'@typescript-eslint/scope-manager': 8.48.1
|
'@typescript-eslint/scope-manager': 8.49.0
|
||||||
'@typescript-eslint/type-utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
'@typescript-eslint/type-utils': 8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
||||||
'@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
'@typescript-eslint/utils': 8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
||||||
'@typescript-eslint/visitor-keys': 8.48.1
|
'@typescript-eslint/visitor-keys': 8.49.0
|
||||||
eslint: 9.39.1(jiti@2.6.1)
|
eslint: 9.39.1(jiti@2.6.1)
|
||||||
graphemer: 1.4.0
|
|
||||||
ignore: 7.0.5
|
ignore: 7.0.5
|
||||||
natural-compare: 1.4.0
|
natural-compare: 1.4.0
|
||||||
ts-api-utils: 2.1.0(typescript@5.9.3)
|
ts-api-utils: 2.1.0(typescript@5.9.3)
|
||||||
|
|
@ -3961,41 +3957,41 @@ snapshots:
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
|
'@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/scope-manager': 8.48.1
|
'@typescript-eslint/scope-manager': 8.49.0
|
||||||
'@typescript-eslint/types': 8.48.1
|
'@typescript-eslint/types': 8.49.0
|
||||||
'@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3)
|
'@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3)
|
||||||
'@typescript-eslint/visitor-keys': 8.48.1
|
'@typescript-eslint/visitor-keys': 8.49.0
|
||||||
debug: 4.4.3
|
debug: 4.4.3
|
||||||
eslint: 9.39.1(jiti@2.6.1)
|
eslint: 9.39.1(jiti@2.6.1)
|
||||||
typescript: 5.9.3
|
typescript: 5.9.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@typescript-eslint/project-service@8.48.1(typescript@5.9.3)':
|
'@typescript-eslint/project-service@8.49.0(typescript@5.9.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.9.3)
|
'@typescript-eslint/tsconfig-utils': 8.49.0(typescript@5.9.3)
|
||||||
'@typescript-eslint/types': 8.48.1
|
'@typescript-eslint/types': 8.49.0
|
||||||
debug: 4.4.3
|
debug: 4.4.3
|
||||||
typescript: 5.9.3
|
typescript: 5.9.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@typescript-eslint/scope-manager@8.48.1':
|
'@typescript-eslint/scope-manager@8.49.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/types': 8.48.1
|
'@typescript-eslint/types': 8.49.0
|
||||||
'@typescript-eslint/visitor-keys': 8.48.1
|
'@typescript-eslint/visitor-keys': 8.49.0
|
||||||
|
|
||||||
'@typescript-eslint/tsconfig-utils@8.48.1(typescript@5.9.3)':
|
'@typescript-eslint/tsconfig-utils@8.49.0(typescript@5.9.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
typescript: 5.9.3
|
typescript: 5.9.3
|
||||||
|
|
||||||
'@typescript-eslint/type-utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
|
'@typescript-eslint/type-utils@8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/types': 8.48.1
|
'@typescript-eslint/types': 8.49.0
|
||||||
'@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3)
|
'@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3)
|
||||||
'@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
'@typescript-eslint/utils': 8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
||||||
debug: 4.4.3
|
debug: 4.4.3
|
||||||
eslint: 9.39.1(jiti@2.6.1)
|
eslint: 9.39.1(jiti@2.6.1)
|
||||||
ts-api-utils: 2.1.0(typescript@5.9.3)
|
ts-api-utils: 2.1.0(typescript@5.9.3)
|
||||||
|
|
@ -4003,14 +3999,14 @@ snapshots:
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@typescript-eslint/types@8.48.1': {}
|
'@typescript-eslint/types@8.49.0': {}
|
||||||
|
|
||||||
'@typescript-eslint/typescript-estree@8.48.1(typescript@5.9.3)':
|
'@typescript-eslint/typescript-estree@8.49.0(typescript@5.9.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/project-service': 8.48.1(typescript@5.9.3)
|
'@typescript-eslint/project-service': 8.49.0(typescript@5.9.3)
|
||||||
'@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.9.3)
|
'@typescript-eslint/tsconfig-utils': 8.49.0(typescript@5.9.3)
|
||||||
'@typescript-eslint/types': 8.48.1
|
'@typescript-eslint/types': 8.49.0
|
||||||
'@typescript-eslint/visitor-keys': 8.48.1
|
'@typescript-eslint/visitor-keys': 8.49.0
|
||||||
debug: 4.4.3
|
debug: 4.4.3
|
||||||
minimatch: 9.0.5
|
minimatch: 9.0.5
|
||||||
semver: 7.7.3
|
semver: 7.7.3
|
||||||
|
|
@ -4020,20 +4016,20 @@ snapshots:
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@typescript-eslint/utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
|
'@typescript-eslint/utils@8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1))
|
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1))
|
||||||
'@typescript-eslint/scope-manager': 8.48.1
|
'@typescript-eslint/scope-manager': 8.49.0
|
||||||
'@typescript-eslint/types': 8.48.1
|
'@typescript-eslint/types': 8.49.0
|
||||||
'@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3)
|
'@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3)
|
||||||
eslint: 9.39.1(jiti@2.6.1)
|
eslint: 9.39.1(jiti@2.6.1)
|
||||||
typescript: 5.9.3
|
typescript: 5.9.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@typescript-eslint/visitor-keys@8.48.1':
|
'@typescript-eslint/visitor-keys@8.49.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/types': 8.48.1
|
'@typescript-eslint/types': 8.49.0
|
||||||
eslint-visitor-keys: 4.2.1
|
eslint-visitor-keys: 4.2.1
|
||||||
|
|
||||||
'@ungap/structured-clone@1.3.0': {}
|
'@ungap/structured-clone@1.3.0': {}
|
||||||
|
|
@ -4219,7 +4215,7 @@ snapshots:
|
||||||
|
|
||||||
balanced-match@1.0.2: {}
|
balanced-match@1.0.2: {}
|
||||||
|
|
||||||
baseline-browser-mapping@2.9.2: {}
|
baseline-browser-mapping@2.9.6: {}
|
||||||
|
|
||||||
brace-expansion@1.1.12:
|
brace-expansion@1.1.12:
|
||||||
dependencies:
|
dependencies:
|
||||||
|
|
@ -4236,9 +4232,9 @@ snapshots:
|
||||||
|
|
||||||
browserslist@4.28.1:
|
browserslist@4.28.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
baseline-browser-mapping: 2.9.2
|
baseline-browser-mapping: 2.9.6
|
||||||
caniuse-lite: 1.0.30001759
|
caniuse-lite: 1.0.30001760
|
||||||
electron-to-chromium: 1.5.266
|
electron-to-chromium: 1.5.267
|
||||||
node-releases: 2.0.27
|
node-releases: 2.0.27
|
||||||
update-browserslist-db: 1.2.2(browserslist@4.28.1)
|
update-browserslist-db: 1.2.2(browserslist@4.28.1)
|
||||||
|
|
||||||
|
|
@ -4261,7 +4257,7 @@ snapshots:
|
||||||
|
|
||||||
callsites@3.1.0: {}
|
callsites@3.1.0: {}
|
||||||
|
|
||||||
caniuse-lite@1.0.30001759: {}
|
caniuse-lite@1.0.30001760: {}
|
||||||
|
|
||||||
ccount@2.0.1: {}
|
ccount@2.0.1: {}
|
||||||
|
|
||||||
|
|
@ -4422,7 +4418,7 @@ snapshots:
|
||||||
es-errors: 1.3.0
|
es-errors: 1.3.0
|
||||||
gopd: 1.2.0
|
gopd: 1.2.0
|
||||||
|
|
||||||
electron-to-chromium@1.5.266: {}
|
electron-to-chromium@1.5.267: {}
|
||||||
|
|
||||||
emoji-regex@9.2.2: {}
|
emoji-regex@9.2.2: {}
|
||||||
|
|
||||||
|
|
@ -4542,18 +4538,18 @@ snapshots:
|
||||||
|
|
||||||
escape-string-regexp@5.0.0: {}
|
escape-string-regexp@5.0.0: {}
|
||||||
|
|
||||||
eslint-config-next@16.0.3(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3):
|
eslint-config-next@16.0.3(@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@next/eslint-plugin-next': 16.0.3
|
'@next/eslint-plugin-next': 16.0.3
|
||||||
eslint: 9.39.1(jiti@2.6.1)
|
eslint: 9.39.1(jiti@2.6.1)
|
||||||
eslint-import-resolver-node: 0.3.9
|
eslint-import-resolver-node: 0.3.9
|
||||||
eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1))
|
eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1))
|
||||||
eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1))
|
eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1))
|
||||||
eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.1(jiti@2.6.1))
|
eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.1(jiti@2.6.1))
|
||||||
eslint-plugin-react: 7.37.5(eslint@9.39.1(jiti@2.6.1))
|
eslint-plugin-react: 7.37.5(eslint@9.39.1(jiti@2.6.1))
|
||||||
eslint-plugin-react-hooks: 7.0.1(eslint@9.39.1(jiti@2.6.1))
|
eslint-plugin-react-hooks: 7.0.1(eslint@9.39.1(jiti@2.6.1))
|
||||||
globals: 16.4.0
|
globals: 16.4.0
|
||||||
typescript-eslint: 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
typescript-eslint: 8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
typescript: 5.9.3
|
typescript: 5.9.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
|
|
@ -4581,22 +4577,22 @@ snapshots:
|
||||||
tinyglobby: 0.2.15
|
tinyglobby: 0.2.15
|
||||||
unrs-resolver: 1.11.1
|
unrs-resolver: 1.11.1
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1))
|
eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1))
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
eslint-module-utils@2.12.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)):
|
eslint-module-utils@2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)):
|
||||||
dependencies:
|
dependencies:
|
||||||
debug: 3.2.7
|
debug: 3.2.7
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@typescript-eslint/parser': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
'@typescript-eslint/parser': 8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
||||||
eslint: 9.39.1(jiti@2.6.1)
|
eslint: 9.39.1(jiti@2.6.1)
|
||||||
eslint-import-resolver-node: 0.3.9
|
eslint-import-resolver-node: 0.3.9
|
||||||
eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1))
|
eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1))
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)):
|
eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@rtsao/scc': 1.1.0
|
'@rtsao/scc': 1.1.0
|
||||||
array-includes: 3.1.9
|
array-includes: 3.1.9
|
||||||
|
|
@ -4607,7 +4603,7 @@ snapshots:
|
||||||
doctrine: 2.1.0
|
doctrine: 2.1.0
|
||||||
eslint: 9.39.1(jiti@2.6.1)
|
eslint: 9.39.1(jiti@2.6.1)
|
||||||
eslint-import-resolver-node: 0.3.9
|
eslint-import-resolver-node: 0.3.9
|
||||||
eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1))
|
eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1))
|
||||||
hasown: 2.0.2
|
hasown: 2.0.2
|
||||||
is-core-module: 2.16.1
|
is-core-module: 2.16.1
|
||||||
is-glob: 4.0.3
|
is-glob: 4.0.3
|
||||||
|
|
@ -4619,7 +4615,7 @@ snapshots:
|
||||||
string.prototype.trimend: 1.0.9
|
string.prototype.trimend: 1.0.9
|
||||||
tsconfig-paths: 3.15.0
|
tsconfig-paths: 3.15.0
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@typescript-eslint/parser': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
'@typescript-eslint/parser': 8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- eslint-import-resolver-typescript
|
- eslint-import-resolver-typescript
|
||||||
- eslint-import-resolver-webpack
|
- eslint-import-resolver-webpack
|
||||||
|
|
@ -4875,8 +4871,6 @@ snapshots:
|
||||||
|
|
||||||
graceful-fs@4.2.11: {}
|
graceful-fs@4.2.11: {}
|
||||||
|
|
||||||
graphemer@1.4.0: {}
|
|
||||||
|
|
||||||
has-bigints@1.1.0: {}
|
has-bigints@1.1.0: {}
|
||||||
|
|
||||||
has-flag@4.0.0: {}
|
has-flag@4.0.0: {}
|
||||||
|
|
@ -5650,7 +5644,7 @@ snapshots:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@next/env': 16.0.7
|
'@next/env': 16.0.7
|
||||||
'@swc/helpers': 0.5.15
|
'@swc/helpers': 0.5.15
|
||||||
caniuse-lite: 1.0.30001759
|
caniuse-lite: 1.0.30001760
|
||||||
postcss: 8.4.31
|
postcss: 8.4.31
|
||||||
react: 19.2.0
|
react: 19.2.0
|
||||||
react-dom: 19.2.0(react@19.2.0)
|
react-dom: 19.2.0(react@19.2.0)
|
||||||
|
|
@ -5797,7 +5791,7 @@ snapshots:
|
||||||
|
|
||||||
queue-microtask@1.2.3: {}
|
queue-microtask@1.2.3: {}
|
||||||
|
|
||||||
react-day-picker@9.11.3(react@19.2.0):
|
react-day-picker@9.12.0(react@19.2.0):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@date-fns/tz': 1.4.1
|
'@date-fns/tz': 1.4.1
|
||||||
date-fns: 4.1.0
|
date-fns: 4.1.0
|
||||||
|
|
@ -5873,7 +5867,7 @@ snapshots:
|
||||||
|
|
||||||
recharts@3.5.1(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react-is@16.13.1)(react@19.2.0)(redux@5.0.1):
|
recharts@3.5.1(@types/react@19.2.7)(react-dom@19.2.0(react@19.2.0))(react-is@16.13.1)(react@19.2.0)(redux@5.0.1):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@reduxjs/toolkit': 2.11.0(react-redux@9.2.0(@types/react@19.2.7)(react@19.2.0)(redux@5.0.1))(react@19.2.0)
|
'@reduxjs/toolkit': 2.11.1(react-redux@9.2.0(@types/react@19.2.7)(react@19.2.0)(redux@5.0.1))(react@19.2.0)
|
||||||
clsx: 2.1.1
|
clsx: 2.1.1
|
||||||
decimal.js-light: 2.5.1
|
decimal.js-light: 2.5.1
|
||||||
es-toolkit: 1.42.0
|
es-toolkit: 1.42.0
|
||||||
|
|
@ -6187,7 +6181,7 @@ snapshots:
|
||||||
|
|
||||||
tailwind-merge@3.4.0: {}
|
tailwind-merge@3.4.0: {}
|
||||||
|
|
||||||
tailwindcss@4.1.17: {}
|
tailwindcss@4.1.18: {}
|
||||||
|
|
||||||
tapable@2.3.0: {}
|
tapable@2.3.0: {}
|
||||||
|
|
||||||
|
|
@ -6258,12 +6252,12 @@ snapshots:
|
||||||
possible-typed-array-names: 1.1.0
|
possible-typed-array-names: 1.1.0
|
||||||
reflect.getprototypeof: 1.0.10
|
reflect.getprototypeof: 1.0.10
|
||||||
|
|
||||||
typescript-eslint@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3):
|
typescript-eslint@8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/eslint-plugin': 8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
'@typescript-eslint/eslint-plugin': 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
||||||
'@typescript-eslint/parser': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
'@typescript-eslint/parser': 8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
||||||
'@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3)
|
'@typescript-eslint/typescript-estree': 8.49.0(typescript@5.9.3)
|
||||||
'@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
'@typescript-eslint/utils': 8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
|
||||||
eslint: 9.39.1(jiti@2.6.1)
|
eslint: 9.39.1(jiti@2.6.1)
|
||||||
typescript: 5.9.3
|
typescript: 5.9.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,108 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /STSong-Light /DescendantFonts [ <<
|
||||||
|
/BaseFont /STSong-Light /CIDSystemInfo <<
|
||||||
|
/Ordering (GB1) /Registry (Adobe) /Supplement 0
|
||||||
|
>> /DW 1000 /FontDescriptor <<
|
||||||
|
/Ascent 752 /CapHeight 737 /Descent -271 /Flags 6 /FontBBox [ -25 -254 1000 880 ] /FontName /STSongStd-Light
|
||||||
|
/ItalicAngle 0 /Leading 148 /MaxWidth 1000 /MissingWidth 500 /StemH 91 /StemV 58
|
||||||
|
/Type /FontDescriptor /XHeight 553
|
||||||
|
>> /Subtype /CIDFontType0 /Type /Font
|
||||||
|
/W [ 1 [ 207 270 342 467 462 797 710 239 374 ] 10 [ 374 423 605 238 375 238 334 462 ] 18 26 462 27 28 238
|
||||||
|
29 31 605 32 [ 344 748 684 560 695 739 563 511 729 793
|
||||||
|
318 312 666 526 896 758 772 544 772 628
|
||||||
|
465 607 753 711 972 647 620 607 374 333
|
||||||
|
374 606 500 239 417 503 427 529 415 264
|
||||||
|
444 518 241 230 495 228 793 527 524 ] 81 [ 524 504 338 336 277 517 450 652 466 452
|
||||||
|
407 370 258 370 605 ] ]
|
||||||
|
>> ] /Encoding /UniGB-UCS2-H /Name /F2 /Subtype /Type0 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 8 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/Author (\(anonymous\)) /CreationDate (D:20251212050229+08'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20251212050229+08'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Count 2 /Kids [ 4 0 R 5 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3725
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm=CNn5u')g+Zcn^C8Q.Z%5b@]G\))s`69Un'Z&iLXi`5KrB![/$b*l!-(DQCB$fa9nJ%a`9pX1R[ueZFU;,3Y*+3'9cq#JHr/==-ol]hotJ_^)q1P"33$n#jcAVJ.ncfs^8nb@EtQ6IL5Q\02%3PtCZKZgfnV;hf.TC#p#^6RBnE*_Pr4ZINh`g#<=O2`"6JS`X+3>Uc@)EZse:0Dfs3-b[EnG:-NG^J1Wnd[te4euI-'(+5\<6&@:H6o'Vr>EqL!&IOnE80tQr<bb6[l)2#Sgd:P(_]X1pGk_oS<-WqoP_WfkA@OSk1E]NN]H.+.2@\DAm90X/98!V)J4eVS.KZS>T^D*!7BHEg;&Z)(*Y6"Nk3':`ic:<Ufj&0?-*P9;^O<Y=0\O[8e@F#7Ft3!U9%E*kPJ+KNQL+S7Z+0oERl,lI[N5jZ_Z[F;9VnU\E#:0LQ8EhckmTJd^nh2Q/J$/!mopecQ/$9e#V"U*pAip][nH:k@BL&]r!*`_F=YV$8AF:R/!a"lkpj<<H\S2t]E$cR\Q89a/i(;oBZsTZ#FRJlC32$;WJM:k0FIB?mp!cl@UlfA18ujhkIH[g`<%11>-<"Z9gXcichb1-QEO#,J(,J441WM`CRV)+jgQ*m[8!r1B*_ZSXqJ1L<*B!0GY+sY9kRcBf#dT;P;BY9M_?,DX@O_6GHo:0JsO6=nmKoEcm)g&Q#?(dGQZ\@dN7P6E@3%]c"EeqZZS#so:4st%\'P$6ktgom=ig7k9XG0D@_flUj=9#rLT=t!Y;Y`B^fDS\?RbKqS5Ft]j/qdMC_,1B2e9_.Q]V8:P)eh(FO\8ib4!&e*c8a_\'S#[U;V^hceY5CGGGa68i0(CNaDX(!`Pj>&HA4fl]!YGNaO*5<Je0ZX?H&d=rb/PnD,QM=cVgH0?<5/=BlKdSZ4X"T@f;,H$>Yph3Hl+:[1QA(Q$(]qYhFRo<:1s.&LcHi5mq@>c:<jK_Lb[d)Af9.;+;kob$)nW3bcVi'n03iG^W:MDijCNZ"T_BdNW8;i9<k&C`uC]Fjqh1/<</2@=GB;<@TAs3fJ0<l&Vm^6EkdJK!_"75_C(k@_R'ISqOF7L8CEHWesn,c]<"8eR)L_oJ>]3i<+YQ5hbm4ggJ*g&O&GMYg&c1>,qSpmmSLnoB1K2>TY?=f57$UtXl84Q$FeA[a\?fUXWA&=ajf*!YZM`P@BmkY[Dlk)47=#<:nLLH=Mo86A[dS&:h]Oc+#&m@P,YL,EiJ3Oc.Gu^_3.I(;m6kp5eV_W&(Y]\pjd:AcFa`L8$R"c&99U(U$`<TpU^O$Fk0]/er<6L#5V7"Nag6mHio)fj*3!eM_^fo;Dr$%)NaugkY$O(;U3GLd.;SgVO<T::P$Z@Fp+Zms6V7/?Vpq^L<9V"bCTF7sfr!LoKY_3:T/B&'dAL6@W2'HMFp%m?3[T/2V0euuWC8r0djK;=d11A$7U<<02Z;-Sid?2]+'fNm'ZfFt&SK'L(8,-F_lfjLj"k6GsKlY[5s-a,E'QJT[BE\%HXs`RbHb9J'FMXOXX;]uo:PB6+LJhYts1"'@`)6af^9/P3loR.s(J=oJT-]o^4pYrejtTdPCq/Pm<T*#[mrMMhh,1'-o)P0d_r.8IDf?ebbIP-h'I$?iS97\T='*:rP*SH:>Usd>I*FW:*N^.JG3#C*1L&q;a;qMJM!+SH'l0BJ[MNRPepI[fK#s&qjSA8#A7/mu[a"d\Y<V%!=G2D4l-;i":9mRD\cHBA@DWas@'W4+SuGh-2?c60jJ,sV.gfT:,$2i>.b`&<'c0+!hU=_)Om\^t6*0MX"6L4IqXK5odkDn\*qQT@^>T*nYOh6-]XA`UE-<I4LWP%""`WqK>q&O.Q2XBG2S;23J6WPOPC"e/S<?R\HMZb%j>tdcdu.bY)\D8(Zte*n1RF9pF!eeZRHc9*c[ji-(dmD*81d7e>iHE.OY(O\^.%&'$t6nkmWdO#Aqr>ELX52D%Bi],c!K.g!-i+H;l[%i@[_O\!hi/Vdl.GK'Y4'5Q?.E:Zi.1Q?-:b`LF[3P]usP[ZP&fua'$$pM+IJ`he@_7;p[M!?ti#[YmV_:Y7A5pIA*\+5"4T#;mOU)Ik9tk+*I)^@G,9NoF?n/Zo>K24YoP1:2SWWUeAj'\u#S,=_.B'dRo-)Qck>0,A'#>ld/e"bNj=2HQJ`02^Y]kFf^<lk1Ifc`#7Xj-1ce<o\KhsX"(+O["$rgn"5q6*Ltr]QNnY<)>R`A'eGVC*OZc<6o@>7[MPtO]V2h<o;I+M\h$,d2$8]5njNs,)[sFK%*TG!F6$$lk>?BfpUrA;H;94$0:1S1Yoko>,9(a9qTb7)=d\[lP-J,9-M*/ONCbRi*&YR3+-6/#(X<k,SJB7p!BHuoB\f\,)C]Q^()*j4;sOSiSM+,O?4]h'#.m39?d8uIQCd\KC^@hF:0%=V7k^6:V)]+BD"$EXVBZdh#0a/N^NUJ#YY+#53LE`o3dD<"s#\]&+cl1XU]-$4:J;JEHX%9oGG)NM$?cobp_E9tSKB(5PQ8Y4T>+`S8#u>AWWJ(Y:HLTfhnCt_rIS[k!FY,)BJf0C[Zg"j:Zue0r60EI6=-"Z:1Qf`-,b`:KmF*#&;1<t7K2T6W!J2WD2Zuoh\r?QlN"l37ESq)8+6fGRNGX7$hApBW=lW+qBdGh(FK'Yhi'P2M>_'/p`r@P([`aN6;gjd+uZ@1ch#l[Pm:IlgrD+`8K$qo2sc?a"oAAc@pqH(K+sc34\%ou4YChc&lVu4pSSDIU^jgao,hV-51WD_kh-'!mnVPLXf^-NBtjO3"t(u@/Eib4T8<RR>LuEAdscg]oZpfc2&"nq3!ET8j'd9?([lF7"ZLBI1g`nRK+#68@#5f[F;2,u\tA(L)Z+ODl'OY>NJm8Do/]^"k-n!TkrWrf1jf`YV/KUEWoWHjBn9D4l'O08;PKh=h1E!J%L$)4'b"1/VkENJ/[e)h;O#DEIZ&NQW3<I:X7_ZcGcY=NZP7QCl1$Fs$O?O!j#][O=bd2EF>PA9@t/T3%$fPGp"n`d%sHBY\Q[M\pMl=`U#7Qg>>A(s0]>N)XS>J@]]I[<cS))/'?G">FDN&Gj%b:j7_JtHYMh9LJWE7;((GGTc@/AO%XuXZ5IgHG<])qqR(;*D_Ght7(T:t^CY-l_YAR+eO^n,*Z*hHK>[M#amY*;N"W*ip+43C&pPJe!%-0/WELBql_hC.3K/auB0f7+P5KUq?&3j4,Y9Ejc:PU.d].5%;/^NCm0:Lg_O=B[HidXgih[I1*[]4*N]KZ)+?T]rCm!HHshL?Q/+!%\t?lt2GY3QeVc.6.[4.uu<Na6k![&A`Uh`@<G/:PuG<u*+5Jnu`EMc'd@FR=:#Ms&u5$S@rSP^5^"8_0C=C0$pS3r@0O4[Zk!YR67L0u`4rp@Cn=<Y`X3)3>T!b5WNo*SqA&mY=TP27)?p5b%2:NX%U'j>tUnEU\tCiJlgeOsA)^5c1k'c[ccL<6Q*9\7k\j0']MCJ^`r;\O#Era6d>:2,uYl8EuCeC[b3AIlsAaO*EoKm.j?1X>H!dm_`PP?!u:.JC4)C$<]PSk)XIZTg9XCU=Y<!Ct5%e/l_F+L=)`p4_,]IP0je_OkRitSB[;EM[/X"7N+#if5Kc3kI$/7R.h?$8DEA3qtFB/aF.Qf+$.TTqVo\=hm[fR)CU!g$p/(_o=*;gkJQ\hkq5Pl1O_6$1^ONpOi5T0$Tc%&NHUfTbW1/nmJjFWf2_~>endstream
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2680
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm=CK&tW(]L"5TleG=A;Iqn[6&6Z6;*b*?t>d:M@/<ORrBa3#po3*\%h)g]94^TV4K+<Ch.=(p0=3P>SNS3qN4kjc]_nMQS_cT,$!&1-IO_EdX.P_g3[r?8B.3teZc@Hg55R4TtQQ[*8PL'YH2Fc%:uor5&'MdD"<&ILh+Zf(_V3k8#Sg:*7<aJVE[:Jc\.N,'12-_X%Z0k8W1iXQC/MoPA+lX1*sp8MjmBHP:7g/G;EeMIAtuulVE`$8^_t*R]#d697,tD?AKA45C8%1`<J(n-/j(%*h1p5%N`g<RJ?Pf;W"TM43os+%5R#S%,G5Pb-Wr$oX,m4`DU?6/]tH0GP%ip9t&NEg[YI(s)&><ZtK_c=fltPeLEJ)`B:9cYj_233i`G7BpIhF[+=("km(,>DnXs$r_NC-S_d6E7A_X7.>j?i]\1:19"dWNU*(B,39`9R+l;*Jrnd4ok,#m%p+ATuj\Y[.)h*`b@no6#HlS!/P5bA#*sQ<N#Yd5#kh8Bk(@qX_TfT7?'G@m;#po=*&E.'ZenL0a0%4+$F8<^H-no=%0H$#"@g3;_o.r&'nsE-50?SkL$F(oYb4?;$XK:%rZ!0o!XTAoWlsE#5pAcgb4Ih&eSl]jg9'q)G!PRMj-F?"4'31A-ZnQZN6RkWl*e0t]3euQmp>j;[q@@N$^P((gQf;ll1"9MGiOdg:O#$LKgMSi:oXZ7CJ&IE:GoR\gD,hlq]KmbR>uBdf!X#1$eJ?=0'YJlW^'Yp=LO`I[ac0@ukWW0h0Yp)n?<;qiLs#4p0#,@SE"eq%s-cVU%ab`R/j?OR^2bq#hoY/rBomgD4^#0B2EV+F),LK>"2)\]97phK>,sgf6R.&0E<_/7lsQ[Ng=sf6ZeMVL`UnnU]N`S3n4WjZOfhqR5%ENIY<T7HTE]\pLb"@M\u3aF1X^o-Va[EC2-p*'kM]j4:9rsVcOkh6rO'p[q?Woqp=%n-4P%X(!@g5rfXsWV+_F7hI%W1"+5nNM#K5c`D\Pn:l"[dBNt1\%b:1D$"?FbAk-uEgNrj&'VjJ+8kmDf(IQ)kH:AfKcH$$sC%s:YN(QaBofkr;c3>NYupA*7T+/aK:#:GO>\5s>2.p[]fdUQB,PQanjoteJ.1!F0FdV>A&5+p@M.Tr]S;@RNCNp2Y'"tuXjEI5'77VXXQV*rJZs+C:IVB_sC2/%'J2Ru&q/2Al:A?4\CWa3dllWpdS5t[`5'.bUG,pubc2HsHomRFh(.4Y=?p([.-&uiUUjVp9,_f9+J[M0,dQEAFI]=!:V'fuUfq.uIF#4$9Q-VjAsolfm%0nkn`Zh46+b[)r!NO4.;/4e6&]F4d"^08EE?FWCZrQq!q:!=3iPUs70f5p<<jfX\l5q,n3SO7'kS)1%V^dL'FN[_"jOXGf;$]EX]%64s2*<Mq2`ek[k+lQYGI0*gq2W5,s,a*Up!efg:IqSr=URlQ"YQp[`EdclIR``ZG<,[@E!c2AETgMJqX=HpX1=EDK8Q^a%Z[U7cYCC+=oKSYP-t!@X41D*4Me+7kMq$f7!W`U-qhK)+[gIn6`&(j([+>$WB,W;3HogW^F%M27RZjDqkm#,EeItoiM[^1[;/dfdB&jPb'#^9q!&&(l5ejq=G@Q$.;%U@_BefBL3[@d;B4e*1_d"W0"@QO2Y%d-0_cQDkCsS6):a1Lg.+hJ<+k7cd*6+.:+Z84cMW6n2KE8.1De.Pc_$)Pc#<)Y=;N+BrMkkifK9*N@e9*RB/Ltc7=Sat+$C"F,>!S\fd`e%1#Oi6q2p70,4S-(uZhmJ!g\j*:fK!JI^OD)9T&D2a(iSmA7aG2>\\R?\6.J_JK#2>7*M9>p33bE>k#h;=""E,O^Z>U[-RtK?a/#(OkCEXIkh9$LQ+F4)E1O"l;b?Ib,(ThXDaL&sgOKM9f'1S$R@^g`E5[h;%V"JP%G.U%,E9,,rVni&_lQJU]oUI^N11qF9i[TBa$=HOHO`L-j'%K4,S%Q<8m*7h#@r9B-S\g!Lk-D[33(tH8p/[^I>M:_hcU'"3P%5Q0o2OKgr;ClIhqKLL`(TY6.j@6<iBpr-u(lE2`f>ninFa/a-i$tEYhUc#s)n:6sj"05F+NMVU';.+CKVMSt*g"I/]$Y%_tQOMVb-Ac`^,o5kn6gni*>9MmL]!r0,0Beg0)F%trgi.MO\R()<#[<)@#H1mbB#0l_+@`O-NkDSoT"BufH^AP<CZ"YZ+n20qE-9Au.+-'B#0`08+:_nhc)\G5HJq8*MkJ#OdF.?0^Kq%Ce[h8p_$hn*l>^mcQXrh2)B)6pIeZ%jU]ObAPP[Uo@\W%\@B8+QgO(Wu2-W3'T7Albr(350uiGQ-\m6*9?mWW]#p6kPd0;nRD>bB]Z<<.bO@YKbO"Rps9bmkl;]V^\-W0=n<448h%/L%Dska`@eEIQI8p6b\'J9bk`JjB0Jj1=_>=31qgXH?#PdH+KqU*#_h`YF.],$2X)CaX!DJCY7_1BW@JTE,KOjn`kr.i6p"SVBF3aoP>D_f_/br\2XS@:ABL#+>lr`o>3nP#,TK=Eit*H2EVhg7SA0_q]1Y&2q_DD2Q8b#o:P%Dg?hc,+U&N&kaU!:H(p,?38)3^"OkP;pZOWM;N<k"f60C:FXi!&/g=8is3ZPZQ`?9SWB]]t)Zs5'WahcpjmY9G;@9`K"u#sOM"mEK<c!phrs*e!%uL~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 11
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000073 00000 n
|
||||||
|
0000000114 00000 n
|
||||||
|
0000000221 00000 n
|
||||||
|
0000001154 00000 n
|
||||||
|
0000001357 00000 n
|
||||||
|
0000001561 00000 n
|
||||||
|
0000001629 00000 n
|
||||||
|
0000001912 00000 n
|
||||||
|
0000001977 00000 n
|
||||||
|
0000005793 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<4173d21f820c032680e0bc50e03eeb38><4173d21f820c032680e0bc50e03eeb38>]
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
|
||||||
|
/Info 7 0 R
|
||||||
|
/Root 6 0 R
|
||||||
|
/Size 11
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
8565
|
||||||
|
%%EOF
|
||||||
|
|
@ -0,0 +1,127 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /STSong-Light /DescendantFonts [ <<
|
||||||
|
/BaseFont /STSong-Light /CIDSystemInfo <<
|
||||||
|
/Ordering (GB1) /Registry (Adobe) /Supplement 0
|
||||||
|
>> /DW 1000 /FontDescriptor <<
|
||||||
|
/Ascent 752 /CapHeight 737 /Descent -271 /Flags 6 /FontBBox [ -25 -254 1000 880 ] /FontName /STSongStd-Light
|
||||||
|
/ItalicAngle 0 /Leading 148 /MaxWidth 1000 /MissingWidth 500 /StemH 91 /StemV 58
|
||||||
|
/Type /FontDescriptor /XHeight 553
|
||||||
|
>> /Subtype /CIDFontType0 /Type /Font
|
||||||
|
/W [ 1 [ 207 270 342 467 462 797 710 239 374 ] 10 [ 374 423 605 238 375 238 334 462 ] 18 26 462 27 28 238
|
||||||
|
29 31 605 32 [ 344 748 684 560 695 739 563 511 729 793
|
||||||
|
318 312 666 526 896 758 772 544 772 628
|
||||||
|
465 607 753 711 972 647 620 607 374 333
|
||||||
|
374 606 500 239 417 503 427 529 415 264
|
||||||
|
444 518 241 230 495 228 793 527 524 ] 81 [ 524 504 338 336 277 517 450 652 466 452
|
||||||
|
407 370 258 370 605 ] ]
|
||||||
|
>> ] /Encoding /UniGB-UCS2-H /Name /F2 /Subtype /Type0 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 11 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 12 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 9 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Author (\(anonymous\)) /CreationDate (D:20251212050229+08'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20251212050229+08'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Count 3 /Kids [ 4 0 R 5 0 R 6 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3350
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm=q,7s]')p_%@_B0$d2.PDT7hOZPtNS#hNEPRBXATi'U!tI=X8MGrp?o$cSCn[#4kG[CIi'_SC>[5?SC@EK7BDoHcJ_KXIH<)j9ZVoGEd'3WhfMAH-s<LG)uNcWh*t^0TF"SSk@0c]EaKrcJU<Nb(%aXpL$c<O'.1-O5UM0#_cmsJLBr5,NZRu$bH4V:KO\S`apL,c6QKC)&);tZC=G)+!o`=8b[51>20)\DSs4X6;*HlN?Ou30+]Ze!3K5[rg2/C5mqT[P#F'(8g.fRR!lQ/0ua?&A@sV/,^B,+5Df/c5&%[2ie>F"1LHm\MMG8;^bf#*)PU)C!E3WN!E_T4mXNmk3`r'6TRnYZ^)$[U%J#s--3WZ7$UnFCbFbSR-^0;@Cr.ul8P>Ak.a=5A.VtR\aYKP-]e$O`mnCN@/k9i*pRbie4%uC7^Ir'!E!XP7j,?PKeL^U)J!#'h<cXLUV72eQ=m;.WBr^"1H!GmYBn]Rs:eOA4D3EmYkW'YnFE0`PeUs$khcC<QK1n$l-N6UEY4'.BQ#UTuY6dAn^FFMs#mO^FAuGZGCBKoO^c-"&d$o[>3-\;mB#:ji?d=K4DDQC;*Pu[dj67_'#5:,>J-GZ,c`Nr]16l%b9'^/)j+9?tY3Zcb0;3T9\\3jb^*_gnf0(sS2hDa3PjB&7S\o=-8IqC)A86P&MRP(Y^dPaCqi+?aK26_6[KD]oRQSq'C%"=lE=7+b%'X"E%^=n%35E$;UkJ]K(tZi^_mOnt#\t:4e_Bj=5q".i:'A_"?=;qTS;r>Z>SUMPSOjE#jOse),s5VP5@m3!B9-H6@WX@2N<f#-E5$==$@_npHO<7^(/..inEK*'a]l93/+o1&J_ef2e'V@PN\/H_B`A)^a,hHtm=05J!&*LC8Dsjp,=/UgE6C_fD;Z_ZMo*X>ZGBNf[1@(,?H[\$aX2c0*_Q<^+p$Lj+!e2Qg2O0R`p`8cToXsU*[0N'p&(=0q]/FM5QV<+$e7RC:%ind8f%UcDiRG5]L"?dqb[^$kcZ\+>it.+"tJ@$UCUmdH]A)0C:*[D4NESm9U>'m3"+=(_ei>h-(_%-&R<D,K$JqV[pV:H"5im]MM+KlaRH;0*-C.oYl'N*!.khtKsqR4<^@c;AJ5"Pf[BOsK"[tB<JHEealm,5bbHZE""?9,cjCU`0'WWN)rBa+9/dZUgd^/@kRaOD;SWNn"@Om>,J<dh>U$X*KM'h)rCbWX/jsar6h804[05(fR@:^iUcJ[UOamABo>#bA7EFD"0)qfU5`G7$@Gl8N-KR"l0J6l?&=<6`?o<k*Ag,,0o)EIP?OqU'+_=(L$tZJ6"9h%mn;@H86.9H.Kj6::9L)L1R=jGcU).7c_%=qLAG>'.>6o81E7MY@cs4UiY*MmhW>$3-%W$(t(Yk]DD_,,ZjdAJ4=d-l7Ee?Noo[%*HSg?iWfO[;N'I$LGC*][(i!Kjp3u]?u/(lu'(M#1kCk,8'B8t'1-3a/SMFk$&jMU\$89)e+@I%LW#6S)bD?ZsLE&gc;m+B7`6;FFY',MaB?dUUh@n4YIOJj?T1<Fq#!Vr,ICgci2N&"7qJK$elbMT)<o8VuV6'&o4nad4KOFVs0KaDEBBg4lbK2%Ui`Z.Y-DB4<DjmGLW6cPY"H4/+YHXI<6fiXEE'GIIN<`C7V]G)1;JP7MZ5j%,7]e5&kqd=G1j>8&:pir836n(qU)3Ws*)dE@1\Xl2(].tDUpk(\I`%5kO6#i^IKa*GP,^mKj:\tq["OZ0B4U",=a=>`$'IM7^9$N'Y91F2r6-cP*0?W!/9,%]R<Go;8Vm>lLC?QLAfcs$hQ;KBb`7PEd;I#Q/.[?SkCgRjcE4SW=Vu:q8T#1B!?Ul:S@.P/RipFfSq%eu'"&8JKs%:oa4X1cj\N,]Ti)2OD;e>O(n0P.UrYNaEXEhm78'e-0^odW(HPF;XOdX<i9SXOpMdDiW<>gh@NSpM$-eD"GLK$0c_lB2JdGT#\YP'VKi-!=3&gu-0,SpUhesk<lM9tM[OQZIJ>o%DC]&+F^_o,@G[@cmUj!imffA$?*Q*J5sGHJbX'9PTJ!hHb/pDcn^Q;a=K0Qs0f%kt0R!KQM)1,mZpVUZpr,u%20`jI9lp2FM&LO>K,W^</8a9>>r>5P7NYqit23#?<QYb3Rh`/FkbcZ"mI$:S`:"PJY4,PA=9<2_9Y-h`!2j2RoN=JE('Ah@(_qsd%Ua<:,soIgu9lAIH,2Wli85+\4:MjtUJS@_=hFM9%*drm'W^$-o^HiR-/Ti@2ud";V:1YE:eoB.%Ni<G,]lMn^KDoOh5=/niRa\`]3$C5ld\VXNm\PMq]7+(Dbmh$e8E46UYm_>.T-U]6J#C5(b;D/'pot*#d!@c$LX,KXAR.`h;gd;8p'^SK@Og$a/Z<f\1JndJ%pq6j<n"nW/mB*!.q9]`j??=Oj;V+b+(=N-IINLk#9[,?43cqu-/tok.m`@;c-V5FY>k!)5BP_m\K0ECfq!miuc41mX4OU&2hTPWam:iMHAk+<o4!N(.BmK[j2e6nqK"Ju2(R;kTl^])"Gd:'l+Aa.HRYZ+NqI7Pq]oUaU1cqFJU>>@,RGA^=Af-`F9"k94q[d*''O)E!/Y%3MXONbMfi;kmZVM"8(en!&&0ieH6*+CL+DuWD2bR/]jWSqQn2\5)4mWe6HIug-T-iS$ItOFf!=S^6$38F:^hFD'&ZIiP4Dq;C:>;-!nCOAB,nj/gZFdN&*'7AUK`1kV;L-nGa;):95q`FbX&I_X`ELZ@PT6TbH!=0aq!jnYoNQjK)u]RBJ`h<hNE(*LQJ0[V3K\qkYoI\!Ot$)Yj*!Q[`0hhOm1ei5C#Nrf6`Q-fV)1G[ouH1H%jSKTe!gGX8!%taX^M)[hI/j&a7PK`]2/c0rC?fbGU"lCWQ6#lT=283U\CD-I!EauiEAJn@F_\&c<4EAX!&.6K#Ql"6Y.j=mArf*7t69@'RLQ-oM!jj;ZPm;S4?VOdS#+b%Oq]].6M8#Y95@t,WTue-B.a)Z7(6"*;hd$CH=NGrM+l5ot[Wg\F\i0e8CO.9LljEfRNE,A<B+)6@\_1Up44$9%BD*DhSdErX6XAW5!.G7VRZo5]/b^Bs&L6`jN/M8,/QAq\;98C#qFf[n&!on*&'MP&_@g)K97o@8=*F+*ZeB\\^2t76RR%'&Cd@!G%A(eAV%Z:605LC:Xhrnlh>BENf3_'?`N&RT1rKs.S-;*9sL"-!Sje10[!`pp1I9/TnWZq\<?sH<(m5NZH<hG;#tCqlu@Z*C#V`L4MsSX6QBT?/uBBo:4Bcbkb#CHYdXcG_:<`&4U,r(RTI7I[(>4M+_G;V"!I!s5rb'-$2*=[*aEuSaOV5rrJ_6%Rp~>endstream
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3565
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm>D,VBD')q<+TfA<FF!/a)+ECJmOE4\#)8.1%*#f1dOoU&E!s/m$If"9^]^2f>_PU!e*j9a"B=`H$T74@1]Y`S;Vt&]H;H`<dC4G^[(R=Em_GsT9\fWD?\hCe3i-qP,WG5`uonkW<.P9]M*^$T_MYljioE#feEEunSFO+>l;5q/bEQ+?<YHAPYj[9Li@<j%6429krM)=RB4V>OVd`OssOYA+?';5k1JX[Qq_K7DWM,8.iMF:&@Dm1ifALf`R*.Gb5Ba@N$[oFF<pZ^Bir1ad')6V`l"5cb=j=QUM[Z^b/L$b]sLM^l1p;O^*Lo.cX=)b/&/\s%<XhbNNUK<.I\Ar?0Z!ZpqJq5qXh+a\#?j1BXi%G$;hG>K_p_muo?<=]cQ1!Y%/K5hI+GFH%\<X_Dg[kmj!^4n&]hA:>o8i*mpF]$#&:"P6!WBEZ76sVWh)Lu1ftA]'<#(*26c3uiqP[79O^-peB/mPp^-&8#5!fo>r)'[/8HP7+p9`^Yf\$buhA:,Nm>M^[!^>@n57dRlk#De8UYe6tJ^re67iYaU&ro+CEBt`W_W&=N9!W@n_0##GS-Z^=G81sD_r9G@lMPMa%.lmO&SUbp*B42XJP/#)JH`m@kbim+?a%7Z9P;%eF9t0CIbc%`Bj3H\kqI'ii,FCf0b0!/l4XXB*8]]%_I9e(4Tnd'r?e(kDD-Si8o1cp\m#`lST4>t_PGU4\:iKnc9%G.//L<'q+g3k\,po\5dt0JB>M3I4o)oGAVBYCcL0&8K,YH5Z.t+?A@"?%e#DgpY%=BW'20[Tac?KAJ.]<Y?D,)<1\'P=Icf-80ecct#D]Vs/gSgP^]P'3*KB6ch.*4M%tHeH+5HMf!lGigXQ,P!OmG0FiKA!oK6BE3'lehrj"S=.,$k`C20u%=aRPWFE>Xi<dC+$N;Y;Sea).@Eq<jf[?GHWhN7lV,T[j<OM::4kO!Wi8e4gYdY7'C>-l+0m&td=4LsP:grjWma;lO\P+a/89O5]sqZ[E05@+ic?cRBh2D`Sp]+Qt/A(C6Z*%,@3i'XN[nNMJo8<M,f9c(hN2>nRWb]Z1CO^;EVQhc[_h'-dKai8Ymt0pN&\H^?qRbXdXuA,G23'Fhf>mKef$OTU0/m?($XRW>WO^`C\,%pQ9c'"YjFR(-43pN9mlb\2!Dd)W*/C$0PqLUS%$3D]q2^.O+36B/aj>f+H87\8I\Om1)AZT:'&C&Vend0YB6,8au<Nt:^r%O:-r5%s*l/R97:VRVcDJYXYTmm"^J)0cW8'NmEg09:X$k@&3DheXBWdHAj_$oo^c^lQeqnm#]P%rd,G=3fmr"?ciAFPeBN:!1PU(?H*u_C$o>-8kKm0UBg$')9#80@QuliGbpj9/C-XDW.E)%"^mY`bZaTZqmZ^jlr@UNq!:5=--R=@RXlLglqsh@B'lCU(E]6?,R$L9\b5eFateBVemqa*/1!%.1osF)j4q^i)KFEX,5$ji,p!!0hJSgj.86VdT*ZkC7\B4F57m^Esmpq5$k(M$8*$[XLZ?%5A^aE<RoSf^"=$R`<hT5Zn>])?r.aCR,1%uhP1h.kd.;XDF=12rZO-)>^_4<#^OU_VM']H<Z*GkXJ(ku_KTa^$:g>;,Rg7s[3j6<:/69A=4[L=`3AK+1J."=a+tse$SGe#7T?IBC:ml<>00+]PdPMJpCcDc',!,)</rg*+jN_\!O6.6>q+]h#&_Gb#/UPA8.RT6BT^YPj0uC)E<a&\]4e4:!e!I(c;]045Plnb#Xc"+^)BRG.nua_FOUsS)&`&?*8)ZpHAm*nA-to->3N16$J0I06d1/c`?'73GXAK&)haMuM%.j>!sNu##Sb.@J5l*"0R\W07]58Sc0fp@1I[\Y_L\"F=V4j%d@IU6kA;ht.qr!&"VEJid$75bl;Gc"n/sFG!NCtCM'1t0_;I(Cf*?9e=LqtYk2NG2U.&Tio=;H;m//J[T]eMKKLgE%b#IF.K(okB\:Vlt1m86S\$J>9hcBsMb"84I.[bpRO]A_cb`.mfLZcth9)acMVo1XkqVGc;'q@Tt"/"&4:*6\G.SgO.oX]sk.9&NBUHR\K)b:?/-n1hki7\r].I/HYGYWe+i0Lk-lf\m*ndEqG4k88!()^DE[=@ob'_uI#,)ckA/u\nk"['WuX;UaGDB1XP]O;7A=2g$>--7<m<cX\o<G29KKkN`E$o)VtQfoUGS,B8EC'3+QQGA(dHoF1qP1UR.L%n'9&:V2#"#qn+JZ.fZ[G4pK]a7ZhgPtDG;K086GW<jF!'@"<)(I\ZEm*E(Z8Kh2^n"Vn%+[^*k@krlUaPtSgpp_3#!#>&$`.CV0:oMa(G=WF0JR_\RG.5oEpXC0G>d?\abK><VNd$N2rKeZ4O+Qdo[-i!$u:.+Gol=j@3X0A6R6*;?P5]d$EJbK'OuqU-;Je\B#D0#I:m;68VX<Qi_^?Rg;0t#6g6^lg1B=PY1pFL]VZ`PmqrZrY(W6I</n<)C`STe:3]MF$'K0\QY![MAOokh!_l%ZfZ-[2js&'T(101Nio1o.7!`Fumk)!PjDW,pkXOk_3YY\oje@ZZ#M5=hn)6a)Qd]]1Id/gSot*6BM_XUUh:s1&.=*j*J0hJNJ>7fA6X;ER:sW+4b2Md$/@C]K_;ZG*+9XHfNnUc<_q#2iJ.VSsFu00dR2oPTYH,cc*HQnI4CG81GO%^k>Bp,W@6MW$Y#,Q9gOA],]SfgWQn/Q83[SspEmWa6;7&nG`]^>_#=)u+gHa32r_m@AYHH'%[D$YrZm0g:VmCBjF>oVT@'c&?lCOX_,Z:CeMKEJIrK.SPI/9OK!ZaMhcF!1M_];rW)f<#"Y.Q+h.br$W;OUf&a@%%@1hMZ(:rke>_K4>h3JQ;[>sJ/(-[.3/T,Nq->64Js]<P$6*:FP:$5I>t]nEO\=/B.N/k:WVEPcpOG"O]lh+7=(<o9]GW\CmQn66oR*C![Ji^lIfHM;D?-s:EiRA_$&0<RkMPB"H`l?B_u,:G6#p+jE7WO`$\4h7I:kJif"XOLn0cr;:I6f:*('blX'pu*BY7j'W!!&Zp<H[<9nYL#&JC?[-IY)g&^?gai=e8;A#c];1#!QXpg_9AeRIM"ci,Ufrc44a8kr.G_cO6ERD*YB\VLmN!aA3d:\\2]7<W)10G`DUMdQK]-*XgHa'Q<<@DROi^XXrfh.n[ukL/>#.og$RVCkHkp1"-V%UfSgK]2*uAGLr+LH0YBhG']W@33^$R2RJ\(Ub56N!c9P0LLqd,&!KP9#lba^*f9\cKcCaqu>"5qC9s+V+c6rLJ"#bUW"@_@KeC:+u5L,[_I>1e[@WoI_j$WhIZh(VR1q95/@9_j-"J5OIPn`@Clp*PM3n]3HoH.a6Vf!])D\CrDiDaArAo4`,_J*WjA(Ls<O/WcSAd\$u("^BH7aI_'h_@_*,j4#m5!+?%$0EJ?Q9?tn5ujXr^@H)l4a;S;j2,%m/g#VOoYF/.CA3,p_2a?tjV0:WShn(uW10]>^(Kfur=aP#+m6)\rV6Xh<$:esQQ\tqT91)S^Uq4tp(P/1m[<;fpdWH`_X,mn^Khgo"j)]R?Sthir#aNPWNl~>endstream
|
||||||
|
endobj
|
||||||
|
12 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 619
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
GatU.9lC\2%)(h*bQ4LTV<QX(g$*ND7;tMR2!L=/KW40:Jk2pX%W/U%r:W>#VCS*)W"RgLG<PX^5<kX-a$\OO?95Q"\aB.PLg;l\'F)BR+5OQ/pTmB5bcimZ<#2<'W>nJ"KR3t8fX:1O=UuY)iC6mS!g?pC65nd>]CEN5=[ckMY29'-MZZuP'Sg:b.B+S?KotCS?1l*8YDgpIcT5AuT#6K/B+S#8W#ALgHf[M>TL+FF@6DY*1ukn[^E$LXZ0"uTcl[3;ftCk<kT?i:ebG+?c(jD0JELRo?"F_O_[Yl7FGuZE0c0V*:&(KA\I++q.Kt;Vr:0N?1ssQQ_ApC;7&_O>5UBYLPF"(Rl0*&R$(^rKUZJq4f0n'f$)C_t<FX*JYW%>M8>/eE(*g<]0X.J'1?(XLmIB!U(s>:qH-E>=8&Jp8Wc.B$-]bM3YmakIP4q&H%-nQTFp\2Z`Nt"feV@r%`4(5Wi>a4e#K]>S1BHlPf(KT))oSQ_H_W&d"=fYV_\!$-2V]i.+$jDFd.Q(X8an0]?ZCh>3C[c,.0ZjhH""B^7s;3Kh[k\RC^_tY&Q"1/AhnXoYts))@TC@EG(cnXe*[7A0jPDKpL*(6NPP5T!B2;,@f~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 13
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000073 00000 n
|
||||||
|
0000000114 00000 n
|
||||||
|
0000000221 00000 n
|
||||||
|
0000001154 00000 n
|
||||||
|
0000001358 00000 n
|
||||||
|
0000001562 00000 n
|
||||||
|
0000001766 00000 n
|
||||||
|
0000001834 00000 n
|
||||||
|
0000002117 00000 n
|
||||||
|
0000002188 00000 n
|
||||||
|
0000005630 00000 n
|
||||||
|
0000009287 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<4d67bddb1cf67be0a7733cbf65eb8cdc><4d67bddb1cf67be0a7733cbf65eb8cdc>]
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
|
||||||
|
/Info 8 0 R
|
||||||
|
/Root 7 0 R
|
||||||
|
/Size 13
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
9997
|
||||||
|
%%EOF
|
||||||
|
|
@ -0,0 +1,127 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /STSong-Light /DescendantFonts [ <<
|
||||||
|
/BaseFont /STSong-Light /CIDSystemInfo <<
|
||||||
|
/Ordering (GB1) /Registry (Adobe) /Supplement 0
|
||||||
|
>> /DW 1000 /FontDescriptor <<
|
||||||
|
/Ascent 752 /CapHeight 737 /Descent -271 /Flags 6 /FontBBox [ -25 -254 1000 880 ] /FontName /STSongStd-Light
|
||||||
|
/ItalicAngle 0 /Leading 148 /MaxWidth 1000 /MissingWidth 500 /StemH 91 /StemV 58
|
||||||
|
/Type /FontDescriptor /XHeight 553
|
||||||
|
>> /Subtype /CIDFontType0 /Type /Font
|
||||||
|
/W [ 1 [ 207 270 342 467 462 797 710 239 374 ] 10 [ 374 423 605 238 375 238 334 462 ] 18 26 462 27 28 238
|
||||||
|
29 31 605 32 [ 344 748 684 560 695 739 563 511 729 793
|
||||||
|
318 312 666 526 896 758 772 544 772 628
|
||||||
|
465 607 753 711 972 647 620 607 374 333
|
||||||
|
374 606 500 239 417 503 427 529 415 264
|
||||||
|
444 518 241 230 495 228 793 527 524 ] 81 [ 524 504 338 336 277 517 450 652 466 452
|
||||||
|
407 370 258 370 605 ] ]
|
||||||
|
>> ] /Encoding /UniGB-UCS2-H /Name /F2 /Subtype /Type0 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 11 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 12 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 9 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Author (\(anonymous\)) /CreationDate (D:20251212050229+08'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20251212050229+08'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Count 3 /Kids [ 4 0 R 5 0 R 6 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3700
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm=CKK7]')eD/U$S:c?B49:eFr=s3Kk"$_ouL"2?OgRL-Ws-Qk0la"Hr`N>BTfd9-D6$OqZ8OX4?LH<H[VN8LB&g8W::%8b->Pbl'(+WKP)(,#-f;KAVlH_7e<Eda'b@Ft1+,2mHDl[2"kmUW[L'kZaJ)It-7g7r-9BQtNes0g.lMb4%3Oi[;fB[k20H-Oekg\GGE`&5o.!b<dUu2&R+^aN)E\>r$Yf4KI=2>KuEiD;3U@h8qEgp\"nc`!Kt88_d+t!"nqn0u=EcY\gMleGcAL4t;3sM?b.,_*c)WQhZo)([tMK__W?Er,1e07%jDGAd#EBBkL`%D+#N4LcBqs:l5(K,EN*4\h6P+`7i8iYuTLl[U1F/L/3*Ds5MuB(u-cd-E`Zu>#o;E9Su<4MT:1^*L`T98t&'S>HY[`#JUI*mJnBsHnYBlJKp&iFMAC@7apWD*1iGpU7"oD+*%#`HT#SB.%N4W:!,GHe'P,EFNH)/V7&sb8!Vr80kR-'?r\Qk3W8bN0:3sp3a79I-KJ1#a^atY6IUEB]^A?;ZF*Q'XP&9%Up]iaD\7[q"jJrECl;>\P4"KeQK]kN97tZ=Mm>JDaKD@.1:g!),IR;nW7%hdldY,fW)@KmKKK*MljNnk1\uL)](?eeV9%/nd&Fg!6L04ep`O#3PdR9mr_Mij&Yc/AdAuic*at1:dUb9Zr!YrfqQKZ<h5^6oTDcRq06h>c;(9,p9.]W&S;2A2?Cjg*XpiX_MatBu+CF,UTc7]J]K0:8NUW&O6<A:6T>7.7]E&Ed&?5!!^=&Te-\uSC%JIr/XW?,]MZ0UXpRZ7npHBQn/6JRcYg=$_-;:MpDo&S$>"Gh4O$D%`ls&27fh/1:M2cY'B_,VVG^sY'19u\UT4kLR`Kl\-cWAGR0%a[6&lK/(+D,.G/tD&gkOT:="Wg]p'b"RV\la+M_EBe0Tr[KAJ6a[9W?KdE<&/=`eNVtV3,NZ'KDl>A!9\s2hsLf,RD"gS%u?)i1gNpLmkV1mC&;ECfu\"Pk@i&$U`@9aq>>ZP%bU0uhq417k8iUZ-+.1.Et3EbONd]5<tB!VJ=84fNC3D(lf*4FAFh+0"_I;cf3],t*[o^'nJp"*pc/*/^2TLVO`'4e\Pc`PB8]Sf*!_fWmPcYk0V8U1j9PJaJZ^:CWX65^S8hYNaMW`]$Ml*OjYa?Kbi*X"r1!F,Pg4tm<[;2GZOWWO^>@7R'6qjBHE%sp?WkMc`L)eP%EZh1Rj+&%8_?"D>*K0<*o6jKM:O=K0P[*Fc1U:`c:<nLR?h-O^Y>Jg$A[(=I&V3Ll_KM^Bh2D&lefI]OIq&'R8RU5Oa7UnA\uPS;04&9T%;=/(i,6GRISg=Z1;E(KEB;p=D3Lb:GreiV]>0Yb2;5hXD1[%fOfY):P9&3W$e`PW3o(a[b5]N(Z<:%ktSGo_;EsrZHPbH![SX+]>Y>,_X6q2LbH>`#31\We,"8VLJW!-*QDmnrtj."-OhtXC\1imCKmWbj*7VI`XGYBUWaDnG7eq4R[kk9<[O"`5/*h<;c8a>AoFirq7Xm?Y0Yb>p]^<4j9t0\_Y%Z14I8)Q:^5)d.k?<j$i.uaKlW'?j5.q\G2625XZq/;$_3Y0Wf!XbYr[QGF`m(tjb/cp=2T`JE*AQWY\4Sq$1epeJD+#X#F0^]+&Al'39m[:GO%]Ra1`T>2%S"t^b/NBCEZ$LV0i:V^X)"N0?GT%U@V_7RTK_J)d`'VTO_U3qNik-8d3,)*9D&nJg_sb-f#(iBYk7fHsQ?)FDM!pHA+X#EgA2B\]6>#kbnlI1`!!4XAobt<A#RAl#G_F#CK4lrEo*!/4<2d&/,S8:[`Z!]?N,[.`<:I@VjmW\hgY,ma,C`>1K"uPh^8q[jH>sXE"1aD,31b?g(GL<C8ZaGtTSu862V9Me<`Ym"hr/opUL3lV+H4!q#2kX9VJtZ;QX6QG-\$5VQq#F"-(tVkU[oZ\hupHQYO&:kMrKh.0$f/m54%]Nc-ViO(\m\CVfW*51F<kPpo4oQkm[.`I^k$c,s9's6GS#n.QuFO+`jPXEo'/-abJ#bA7p'$J-dQ6Q1"G'qPhB=FDZV[+/4(64(Z<^l*2Z?O]a(6sr*78h"\'L]"F:!^,.n&8GPa"j.rol@UV#Ad3DY5kYelE@@ZV)!6)]S[+7'#.($p]QWJAMb/1+q%iq*8C)`S!)8U'i]B2]e2i##dQk8_\"X_-##mHnA9=`%q@A^3K(:_'BID$*A+mC_KX?TS@Mt$b]^qqNofl2,S&AqOJ_=Gk'CF(5B01<Sl]Xoi7J.WhL:9K>BU317,$5'e(cNPR>qrpQ.0\9C<gds7+G&_\SSjbX;FJTbI:NJ8q,ub6RgKH70k'2TL5*(`:h)(.=bbS9@eg#W2Mnf'`Z<9!n.A7#1lM@c!p?p5I<9ZSu?to3#C!D':hs725Od^e$<m"_:AFbd9Q*>7^[]25X;WR!!LE#D<u8,Po&K9:+W`C=_];WgjXs\Y08pHG;seYhMr#p6$jd'q^6Wpb!`(VJqIHU`M5da&T2JC&l(WfNEO<PRi>=BHDi-kR&gN2psb@d9sCq@ZW^&q:Z$#SU2@cnKCcdj)RJ*UGCKJf6e!#FgrEu)+iH(;Hp5@9eEtbSclO[k<0a!1V6pL'*Jh?;%U^8d7WWJcTG^<s)*4-sh<%0K=V3%:Ol`l1Mf^CD#AfQe_.>5Z0Y,h7ZG7r3WndtT)X`5M?^X8tf7UeF`&<tuQ[=u)_tU!6V?i@7,`>l*Vdsl_!SM<aMi'aF=j_IXQkCN$;'OtI&VFP#8s'[!hCXl7I.8[Gm!W(sT.`iW;d9gYd,DKC3VM\fI>-Od5AYgg#,V`u;4f;F>43!oI+S)k'.8?qST$@hYjCpPK_s#eXOFBt*ei_`I(JUL^.q,"f0WVs<:Jn?,.LbtUe$H05@F[ohlK*p3fWY[]B4J5'Srr?]tV*?#ZQ6#L[O2eqci9`lk::nb`s8i3$EVFK;s@$!R&1<)>a!2,H(g)k.Z`&SN,St:EJT#?1^e&c&19B;Z,DKXmEU)Lt82:6YNK\i]t/UP5S%FCoV&o;b&&s0#C312UAf(\Y1J<,FTTu\mOElb'#Qf*Ofl1Dl\;;:'.U@nV(pcG?!(V`b8GX302=;;W>3Mm1aX"Hr,*t:tA<rRKn5KJb\_ipQ\gMT[.?k]=e/U\$pC$E/;FGOq6MDq/Hg/9'cV5r:#*W_N[=kn!lWiV6DuBdj6<$S+>&@?7NXq\`Q%AWH3OIWKAAE4#FcUqC>otc\Ji<p6C!<"r4d-g0+4b,kRPkl-\8;&)B7`L15Zeh=22\@WQ7<e5M)/UGRt0f29'W>n6fra1U'+3s&McQ,_VEG>@>k,nGc+U5$EJ=U:brnRGIfN4'3kj!QsZa2qt6nl!,(XuCN$Zcdsc3j]l11&/!-iE>CjQP_Gl^%u_PGPknPY;=1<;CObI9tY0E`@IR'#=8<9aMY>64+s9qs&;#"Skkg7Ciq20CuYH3ag7.A:k`SNQKM'+qjp_AW,"R-$grc9E95a*m8Zp)kq.7bp/h"No#l/fim;s:!TBL+)\K/1ZRqPu`coaW=!Qg8<`\4;aFOu[OPuUO0gO@l:UYK.l3Q&O0sL$Z\O\6tSZ(KK^U*"(>rq;0Q`S[(FpWrd(Y,CQnBE/-@F7pTM!!<LnRZ3TW>L`h>rbBjFlQ:)TPB6ETE?GZnOgD!'nNE)%g5)!erWJkr==a(_-R~>endstream
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3829
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm>CKDHF')g+Z:jgR.Ns2L)1HcAmXqN0@Af!oB$*XpRJL)QZbgTZV9n)t?h0qm>Bl*1Q-V:)$l05@Ra/rQ'OX3<n8;uAg;X%2^<-]]];O(GaP)RO\WO5cQh-.<jOD\Z0/]Y//C8I_pPS54?o\MoEk(G,m'.t'CWau/.4BS7^ACt#M;X9!Z<Mc/?Pdd0mI$P'^'FuDcMVDM5cgNutp9-Z`A4e.qEW#+*9H1C+.;e95H:*NT-?PD"RB2um.T*gGNm)(3'>s,bR\_c61R4\Mc%D*dnT>oP]ZQIp)K0m.c'O#gNpe_H2-mFKC+E5fl11<ne#fQ;gWCiL,4=%H,t%:3r@:RQ`(M^p]Tb<pA!L,4V7^!S:Jqg$o8aV-2L*lCfL@<D1Z>:Bg_;Q/AD1C0_WRcH;5s4t>-IY<1*mZK>gTbPQ/,,&Wai2W#O!YH4!/q]HGhO?DL/5*ceh0XoM0M>Lg;BgJ%rKf>1U;k**e;1[_U8^n-P)9As]pYpt3]!P!BG]RT!Qg-9I]79);>mklbVRXt>+#$HM,a+0=Li79:e@<.r)'@jcWc:!C(=LF;=aTa%j`*iU>E*&as%`%<VCNo;9DN_W^b3Eo<^2$tNtX"oMD(Pe<4_Lui\QE8=E>40`Z8/Fk`P,7#L?Ikh<RJ(?BjM94ToV+OE_^2t4#nJPf[<&sQI:mQ:"e_(fI]6tm(L1NTMTtKJ=[^9je5F#UgG/WO.<3SY]ug@oi8U(&b/acb'Mh;$V]eN'Id4ABmjoZ]ptGR?!I@"[hDSm.MBbWSF-&2;,E.i/.^WPsh!>/>J=m/_?<>-jnn;sWddi$8jFaGL'X<CX<@je)'e?5;0/c/L!K#CqmeBV+k_l)&HqlUV2,P^m:k`e!@M:)MS&n(;;2lPIdS_Hh163oVniGm':)`>slFh*5qAG2E!OQAdJIlD*@&7U0GN?/16qfPA$Y\)n=\rl6^bR'\,27M=NkU@O=ud@po,;%\pS>3o"Sc'\d#"ok9hj/qFeYTai>\I,cP:a$6_ut]QE=3ns#_XkQH/%g)K8J"PL_IAXSGOV=-;:2(m?"^Np,]SU_CFk3oP"`]sV?5MM0=Zdl-"@4hAu[@:l90K#D72F\5dPFM'q_``4$+4;Q%Z*Wnpj!#+bb"=/'@`/9eZ-uB^!)L@!YlYjG!2F>8&1YZQ2SYYUi0T7nelbVsFk'A#='t\[CrK]%LeA]G2hI:Ws%L7p0-\j'04?]C7';Sq"-kJaJbXqVT5g4\R&9iE#_.""L0at*YFKfFHZ$9@XQO+`u:4K]#k%#NY&hT3$YQ/4Hio,uSKCJ2ZeIDK*q)r[m@#mDNCBbQ_Q@F*p1<t7'*M%Gjr.&'ZccBS4Z&EXsMNqG4L'!-3S*SW`_JCC5j*VVROB7g:M#'.[b0r?_2`A(LN[%gL%Oqbu*m9uKm#$U/Xnf.Ailo\6i:iGlmeC_4g9lbTdt%ZmHi$T%*Xn\!$,G]`YPch_eU"$7kal86X/#igeDJL@`#N),OYp2[cPt$s2;$)YDfVWtA3M_t,c\X2-#rAW?[3[5Ec[E[pM@PtK6K:lK+;8qPQQ#!&Zk'8n!c["3Y=:5k./\G[d7Z\dS0NZa6MLImYpY&o\6R...i>ln1t%2=ONjaKVbTObEEhP?Ao6m\"(^I'n`e:+d+QGYP.4IRAG%%ZohFHjC<^m]RSXa%H;BMLG)QX.+IR$;F\G2Y&Q(C!g7_@+97%'BZ'\4UFTAY^9IK[%+_HaU^Q;M"H]U5`H-$G&!NdK4<J1]i#9lZfYLWH7-[X5+cNZNe;S`npHA?fcPsr'QVFlTTLZDYJ,[>WK!IFX,f*MMAr!M?-J&g[YnkA#(VXtqbm[o`_l6b[0R\]mJ#JJ"c422"_>a90q++`@/oEc;e@0>s3l.r-5CQs\;:UnFIT!8Y-jgV/$\?c(L"ZNc5TL@I3`?C0'lHd9%a-2EJ@)[U11hp>@!a,"<<fhGPpJNOJa<0h9+"uAOWS@k`Vl^J)LF?"A5QrDU>F'O@t`rla?>_MKlN$(m_kQr?Q&U+4=BWclku*<$Lc0aSQg?^-<%S&mFBhF^[^$!(QsGT^b;T!f,0$RC0Q["7[#$%\r7'.E%[cDUlBPUC?$`lG8*0lI7I/hC#28)A%Df.N2bdK40#EO++TM@RGA==c19@#HN9q3.p-^fP?>;uhA`q]Q%Rr"XWjni!J:'H*AQpR?J]VTG0u5fgBUKPdra?EWbq#P8=+Ckc)un!X&rcZ:3+J%URl8JI-!0P5K-mg]Y.iN!/i\aIZZ'K0O:f8$'4N2"o-d1$mF3[$8-Pjq/S'JF0ccUj:('\#7l4^p?SQUMHl@C2QOs[Bnqm^g>BK3XtBpo]9[:`jI:P@0bSu"`/%F.dXU@/Dg*m*`bG)eU*CbM@<WKpaO-%+*XLAFpMsk%-=$rh?(<gUX<Rh:]kSecQcjaAFcN^Aoe31.ZX4m#;f5$o%:7OinAL/Z]iSQrr45DD>hB?UR-BmecasUd=Cl^\^2[YpZ#nT_SR[o.Vjtj1[CCa,2-9(4IlTNX1rT8bT&pFnMT)kmP2c0@H"*01j')P'31&auWFP4(/#Rq.Sm9$C#gDfd0\*eQT_r'fT3pk^[pQ\@BJQ3H)D=":dG)g+c,[5SQpY^f;C3bAm\"5r$POT=]OZEsk+%sN[*\mlCct"^3N;nbb;S/h&'3,'-:S]inGd@tQG?X?pQK@ll#:=mj4co3FR;-_'Pq/^%,a%i/:Zr&F3LCaTAOt*,SRcMN'6e5HTODFP6uP5l/Erm&P^bXVgq7Ri22)8#]TMKF@[`2RS/>]MsHODPJ%=Fc?3C4b"CDPjjlr'dU2oG);C88KG]M'O?.Nia,+SK(jqan<DF2tj':PY0B'Kr!9SA0]51JFgF:JVrFG#:<qF>BLs&t'Mu-K7%q3>MSMk-Bb]4Gl=Wu&ii7`Ui:shE^K2#jl>,lEh8Y]Ge*WBN1-aN5Xk[oU>'Q/K6_elQZTbYTk>l=j?^dcW/p^$O/-W$;GOHE"-S_NRuc-J%2@u2ViRp%jpF$A62((HTm%!aho@DF>-'`'J<FI;sEk#lTU:J$mKhBMgJT!+WRFNEB(J,T<\,R^m;@q7pD'+FqCqp/Z;UY>`Vj,dMC4+<KN<IA[,]o:/iNAI`1i*CN:e5ftZ3$]CI4p^HWIVMVJ=,%&`;_.9$.9-`hIWWmXTDnm8\c-W=FhjAl%d:Q05907'+PhQb(K$3'fg5RRQMot6cs+0nHE1SiZ['hJMt=H[IIA-J4=M7e.o\\Wed9_/^4Eokd-'\"9R,,pEmA?6=dhp0%B$X23oIt-m^=4jb0r9)KPPn%^^*Bh&'#Ua2C_\o\qnAAH@>"@@7UGkcFo!GCA,j9J.&i4QAt8(So^.p@`=Z1^):H=+rD'6e\=dGR.+caV-SMP`6J8S&Dje\MH_@@)daJ8A3QujLhj#:R7,>?R+P66cu+PmO\qM8fG]YEdD8.HhXjJ:#M->C59(;>L?(FcE3FI_o/C$e=C;LYcQ_!7UffK<!^U*:%tH^W<]dc65aUpUOcDN4H)D.#HPC,$0c*c3l?PJh+,@0dM_;\[_2i4M-</n)c--):s$9;6DpT[T4"BL):8DAE^[O8I"J+;<Z1*Rd5[q7LdIhW=^q/4oSB58e:IF:FC`IS:4nUBghU:"c_tR*pnqOB'S>!<?"18'"(*/\4q%2't+JnI!&$\T2Th"A7Y+3C7/nJ%,X1MQ25M)F0I<sePF\,WF:F9_d4%R`Pi4C8G_i<8K/u)50GAX2>/^C.'j]YC#_Utn-4TF9)Pkfi_$<#@YYV/BTGf&TFh`p/Ys7@WV/A`A$it4X@?jL&AScLjBkPkN2CSe$`9pZXp#PJZB])~>endstream
|
||||||
|
endobj
|
||||||
|
12 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1154
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
GatU1CMt+m&H2$(Yu2MiN\J.&pBBrN-<6R+$O^JagWD+t(efp!d5JsG8Ek']RFqg:Ce'd@m![/BGKuU4Z]l@*8<7Cb=n\r<^,r-L3%N91Ec%-X^LYZK]ta9>MKGDtVf(^1d8Sdh6Wf,qD9g;=^DD4sTa'-&XLJ<[BAF2!&AP`'S5M-'kD>u2/_RoIgsT=\L(YGhf[2Mn%Z-&4`iLg,ZelnJ`r'C?5AHE;*ri*[ROjSU1AOYMcG'CWg%MWu,TH.18WEs?Jk6G'LP+a3%BtVQ'[/GoS8<%a_u:0s'F<C9HnU8QEd.aMCTDm:ibZnAn%\[cfR%1<8h*NJhcK[4?N@WHX9o<9n#p<Y..*)2=8"F:Dhcct`(L+!B>lVVT%m4^N/WFkrDQf?Ck6'sk/.f;1r*><HOX3@XTZl;V`Z7VP1?RMJ?Zj#"n1)XG1LDU.mM6tmFN_+k8T4IIF5M7X]RBfhI%k2#RE)6Z\^A9\gngF(idX7#2:C;5DM@7??ABU<#$gcOZS&i)8/CdX;8U*BOt"P@A,/d808#>nhaZ>P;rR)NbZ%mh&kINYI^Ab+q!sfh3tXB9nrH!eLEJc,PXg1g`=2=$2@+Gq1l>?Lr%r4(%ls/UuNkfL)#'6DBbkg3Plo8R5A8NjUocMFc'"\"NX>2k%*>]'fRZEm,$`)XDIG-qIJ;6U;*%Dk\q4)(&HF.&HA2/btQ/MA#e?"9I6S^90E.2DVWNoF7JqNMiXOTNE8g0''f<,*D,gD?c@XE/C/NZQa;"SkQOk)[WmdWjLr-J/.S\Lk(MkMGJe4ka8G(?WlaR%g3V3*)sO,.9jG'THMQM&GJ7kn16Yh#]r3O53_GIbf;%2be7jL+3)8qKq"A/Nf-0be_:h9?)S15UI/[GAgTCXol[1#WDCa#)8p=KI?+?DP&AMJOo=efG+#sF?"J@B1#&ZhqGBb'%nLQ""(O?,nXeB]U6J/;ZGH.%M^u^=O)M.6WYK!-^T.?gSfE5>9KMEI.,/2s@hDG?6ZXjrT@k(gN*8ZLW.i,^<"+RlK[<,q]PhuQseEMGK#!#kSC"p7%081![5fq/gah&)#lp0a-_Uc+mn2e9$nuNUf?]GXOe??F!Vp%1B)Of4?>MWpq>.Cl6I'[`CY=ufr[:IcMm8oBn'dDE0&$S&)^&~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 13
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000073 00000 n
|
||||||
|
0000000114 00000 n
|
||||||
|
0000000221 00000 n
|
||||||
|
0000001154 00000 n
|
||||||
|
0000001358 00000 n
|
||||||
|
0000001562 00000 n
|
||||||
|
0000001766 00000 n
|
||||||
|
0000001834 00000 n
|
||||||
|
0000002117 00000 n
|
||||||
|
0000002188 00000 n
|
||||||
|
0000005980 00000 n
|
||||||
|
0000009901 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<84d18af96ed3e27f6ef56f5ead15896c><84d18af96ed3e27f6ef56f5ead15896c>]
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
|
||||||
|
/Info 8 0 R
|
||||||
|
/Root 7 0 R
|
||||||
|
/Size 13
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
11147
|
||||||
|
%%EOF
|
||||||
|
|
@ -0,0 +1,127 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /STSong-Light /DescendantFonts [ <<
|
||||||
|
/BaseFont /STSong-Light /CIDSystemInfo <<
|
||||||
|
/Ordering (GB1) /Registry (Adobe) /Supplement 0
|
||||||
|
>> /DW 1000 /FontDescriptor <<
|
||||||
|
/Ascent 752 /CapHeight 737 /Descent -271 /Flags 6 /FontBBox [ -25 -254 1000 880 ] /FontName /STSongStd-Light
|
||||||
|
/ItalicAngle 0 /Leading 148 /MaxWidth 1000 /MissingWidth 500 /StemH 91 /StemV 58
|
||||||
|
/Type /FontDescriptor /XHeight 553
|
||||||
|
>> /Subtype /CIDFontType0 /Type /Font
|
||||||
|
/W [ 1 [ 207 270 342 467 462 797 710 239 374 ] 10 [ 374 423 605 238 375 238 334 462 ] 18 26 462 27 28 238
|
||||||
|
29 31 605 32 [ 344 748 684 560 695 739 563 511 729 793
|
||||||
|
318 312 666 526 896 758 772 544 772 628
|
||||||
|
465 607 753 711 972 647 620 607 374 333
|
||||||
|
374 606 500 239 417 503 427 529 415 264
|
||||||
|
444 518 241 230 495 228 793 527 524 ] 81 [ 524 504 338 336 277 517 450 652 466 452
|
||||||
|
407 370 258 370 605 ] ]
|
||||||
|
>> ] /Encoding /UniGB-UCS2-H /Name /F2 /Subtype /Type0 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 11 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 12 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 9 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Author (\(anonymous\)) /CreationDate (D:20251212050229+08'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20251212050229+08'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Count 3 /Kids [ 4 0 R 5 0 R 6 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3610
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm>Bm8#s(B)O^&C"_e1Po%g<+RduH=.4:1lWM'L(L)&2Jd$n!*MBWq!I\0X\rl<'mrbt!6)38<V:7cGMaTT,j:<-FmgT5T(SkT(G_.'lAm,,\)O@d>P,RXn+/^,8&jps,#a[pf#j;e6IKps]-RW//#2se0B7C9V[Ua"d`a)GL5JsSCFI.PaEH:#ZHWLJ+"-J?lt0EKS!fFK2&!ic1Sr%JT9#`G@FY<IZrhaFG2&cVdrqfmX)/8g4FM_m@/u]08+(<O#*GD5@DX@VYUutVab96@LU:unpnGYpn0R);s2$,uDW"I1QUSX0n6P;1J3\8IActdG[nNgM7KcChKE6aVMVR)M!_JD;l?L/mep`%gk9YKPjV-ZK5N^,k(qc/K,AuAb4d0Rf9X7-\Z:>'+f'/nbV+%6oJ]Ccb^:q2r?=uUD2j`uEs486[42<PY-'U=4?t^Pb0Z1"bifrAW[F@*LnPpkKfE?e!"#S^l39B$>m^KY\:$.Q]UHa=Oj!1j*Y@`j@1-3]3@rPJ7J#=CRN8QEQAtbCp[Tn^IlK7])oM`NJP_nWtR;&(24'aQC&2Ita,h@r?,]PQs%T\\OI%M/jQ`G&1m,+k3Nn#FY)II&BgInhKN0\u]N>>$21s3HOB$/*u(P>E#A1nq<Ce;i9:aj1U36])JY%$QOP6O.,^&g1&\JI@Xj\(Lb0jj&s9*P=?he@?tTLFhW[!,h`e*?4Q+9`o)BF)j9A%1KrI!IS14at1'QX_oZO.Z"j\*(Lh4eRun3'/[V+%[KB&T+)1UjXa<4$5#g*i>I5=ZjG[H,@aS\WQe/XX-J1fZ`a*!H2q(I[Ik2<VT4S]?ktg%pe-WXT"4HZKt2'DkD8f'D>E1]Ydiqk\N'f02<!PYhsRAU;dS.6qPT%Q6LK0>WR7)h7$dgIt1ohr<OOd3%LGCL&%<f2P.+(iTfkj+TW#'R)3`R_LV^XjRS)4ZOhrLIln;[U6r%3<l/p6&fu^pZC2o4[2X4&R-P=]iPg@0YtHKrD=sJfdl*V;=:#gOCtt%oaZ/-rbidVeb$Z^&KH<>=&CC:3U3AV0Aca%+[nDYK)(>m!gp5?m-'LQ,9EIh&dcm,jeS'PUMe4`(oRBA0YYW5&j05o<@;$7'P(;7+OC^<tSp>H1.[X9s$9ST]D9mE.p4tWHSLQXESA74tI+%F26]_C])(3fN(E.NhCJCnRVp,^I`:h25"G=`EN'5tUVfVTT7l4O;9^1s5&CVnW00\naBjU&d"SYGuFCL]C4_2<Z*T'rP7*Cm1-]LG3V`)<iUB=73/$^Ua5n!(YnJEad1%,;`2EW-bm(.O3)ges$:@T2oU;SJa0VOX_ljDW/4JocC3+8:.2^St.Mhq]2hRU"pGfT[(Q"=q5kdldDTk86YE0fQ4Yok_,,UgA"Ednr0a]X\/K9.oMGQptWeKQrdK+9@@"7?.XVDFlCNZ[S7RLjX%M6j&bABteeL8iA%Ud@oAZ=IrSj"WaI^eV)GXAFa7cEt`(%a@>O`aZBKNYan:04ITe?B22>E\UG\mZ>.f@G]rIAekqE-d[QR6Qb$7o6S8MaeQr:rY4IH)07Flm'HYMmepPd!bjp@16@H@*HA?#MZng%'akYa=RDPD@"q<;%\B`9P'/X1fY5&o.AmOAYHrP*l)J9:WUQ\fDU8,dDBX[_&B]#[\$=+:7bS/a+i\eP$m@p%_^J"m3n_#*Te'fP!F@uFC@F=g&Jn#NPegI"Q!pe0,ec2(0]3H#CHZ1ERAYlVTD'VVcX[Blm$&b=-QU[pK9,Pe]69N.ET=\[B7_XKGR\NNat)rnd_p?9o&V]5huUlG)29<UGD:M(Cf9UZqW1IRA_DF#WFlI11qlH!0HqDP"QA='>7rIN%Pd+<nW*4Dl7U+pAPf!:&^0pSa\+V&[Km.tnu8['(8dm/al**_!fO;>goG8cS/3@[TW"HmaZMe)TH=j)]I?c80"B2Y_CBABY33?8mi(;^8'L5Ln[#mBEq7*,7HFYKkW#n/^[cGfSFgeR.[#eei8_oOoELNCR[*@oBDGZCVFZpD72(\)K<`&6:5DP+GFKg/<CMPU:AHN1nf9p=q#k!B@[`<2-P?Vjc'm,F,\bXIRX5AE:DiS&SXCrQKEjL+2U`K)\2p]@TS6CZX$"Y8"/7tlTO7[D'+IcpMV*Du3=Y=hRTRFOoF,N1j9_6ZG#YU5haa1$ln4fI3"E:oo\Z;tU52kV!LM\?HK8dEXk(YTobuLmWaQ5sFqchQ@A/O/`&fLD3*$R9I498Wo'K$:X3"A<(7J-i]";6F2;T'RW/(VO`X6)(6?mC'Oc/2M`.o:=W/d/l-<?0%Q<978A`XKRXp.'kJ??Ip=;Gm1HO'XW(7LEM`CVXsW#g5Z]2koX,^NDU/h3-(#>&#D$M-A.3Y#HC:@Yp%Kd+L&8T\_l6l0<7i)nd5"`U)h:i+):qoc^n#F^9$N2i,Kn(E3O1#VRj&ul!hUJ.UCD/%gDm^B*<&dJ8a$@oSP@V@nqL3QMV]\,L)c(qb'!YcpO/cl+opM[7&'-,kAW,Tgn>/mA_9f/m0_LN_rbi:C=U>lo=IBId1i:*):mp+HkJO3U%\b[+R'%.Xm-b;&4R;B89-a)!Up7[Ws:B?7j$()@i@q;1bF"l*&16`=r`PSJGJs/ep13FaUZW@9D\Fe0k8:6lnG2LrjE^tj&h/]kKD.rK<1eUk`;Kr_]n_C%<bP_Wj2CjEfBKf\k]j,]WF*.hmFO:?)E`%enpY`sYH?6d`Q80kL6Z7&BnHB54'hZFmJm#_/*@*12fPM)YdF.0KCUX(5BmBT=@jd#e^-sa;c=fX7SZMK:\L-o&BONE`gk:Y8YbG7'6ZKnVA;,[-VGj"N;[q$MgH@Nk=s"cl>lInmN#/PP!>"(Bdb<*+^@&YRrW9f=ie^9i5?^CmkHn'M]>+LqRrX3;ZH8m=g[irBFcME>^[\.NRc*chM?*)=R46m-P"sE[?'/<E!I&K>[^2l>\OMnVYM'RgUpV?s3\M"XJ9>KJVi8&$m=n1SbUV\+MW?Y_GTgT"3+gX_7+!.N=hj_MLk"U]^AZ8ic'trMWCC'B\b"0/Fm"&,>"Wt^`:K8CSs0H28_m15)m\47nX$^9(sK.*XP`(O^7S4GIW,M$J59[!p\=AE:.EKcql$Olpaj[T9^$?2;_HEKFQ_tebI8.4;bbr*%N[V^7/N!n;b4IjrC[&A!E#H2P5J$Y?>^O\K$#85m%#9UR]&JEbn5o'BXp)[70r:QU$#JJP"MVoknbUrqe\Om1@Y\f/$&'!RX-q\a:*X6<l*qo/;e48iUOe4^?TcMWU0)N<M00XIe1_c:'W*Re_d>;q)%25^e>(^gQW]*!_j#f$JbY);7;uX*HQpnFD60aP+c!B,jfSHi0*<^G(l+pl6F?BVh&?@XF1(TGR0mtP$Am:qt_]o6!^Y^QRrq0jaLKt[X*N%N#0Q[`E4S2nc[kEW$tCbB>>RH[Lpc7N2U3@Ig8urqO9IkE>8HaZ@5,M/,bV;nR!.1pF_<n&<S4]HM3BN32+HXmg9No;T:pm9;'6Z,H%VWV(!]ic0tC,1#PR7F-&/qY%b(m-Q=_/;gcH?\"X,d'+j8o8YJf$_Bh(FK]<"3T\TU$n4!jW4@Aj#jo6jZp:*NbrXTa7S0J~>endstream
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3714
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau0Fq,\6_')p_%,3'Z8bJE6l]d,RU(-HIjP)p4XV+iY2%Sd'R&jVQSgSa>K96Z.Jj?.]Xm?=@7<`NLT[9R93cl\,-mXD"<d]M#jbDK8aDH`/g25kV(=.XR'I(:KhaIliKAKtqhi_WZu/0rK8f2Yg*Iud'CBG'L\e[j2bVaXU^@FjKSB>-Ph9XG@f;F9dN\t,cbT1b:P)'hhS6jU2_W%^gXNR;`:5>(dMHSdFN\"_0/O<=4cM%7BL9iX:t^Fcjbe#t6)98&J@a4Wu:/`+%qcPBGVP?+RdNMgboVhpFIGFG2$*@'VO4b=hQf6f'QI.Qlg',??YD'/8@oDsALab8A`@%$98:\ut.[M,Es\`K1/kn)j%Q&eH(otsDrmn3?%($4u<2EqsRf6^\!ob4/H5>+?pYK+6)UH:%8:6Y=/U2`H5L?(jY+#ph#T;(34!]FT,6hfX")j6d_"ol9A0iksmmI?-'BF.o)c\e?)XEr#R[sg?1D0;3=$7m$WKTYdf;/nF/6$BP^&>TF>NT6.W/Oi+,^0)Qn.d/Xid6nkCd;mCfK0IC0@r:Bm>P?TtZn5I793,WRa8+Q>jB6?r1XE[T>`D<op9(q.U.4>Or2BM?_%[2#O1lY5b3*9`OGQBXB:F0okdN4[IqA@RK*YY>g-aL&qVL=js0/5EZkeUHA;ukVcHE<[A&s^@s65Ue7ik+&q=+KA0LLdH`m_Q4f\onX`_CX$d3IMGb:4j(M\0/8Frp,Gl%$$'VE;N`jc5^h<e+o_cee2"eR<TiCf^suY;@H/@chdPX0$X2+P=cYZk&"eeirEcTC:7@?/d+9ip-&CkmGO$b:0!]FdEjZH*nP4pqUon=XCoH$tIZ+JSlpf8OJBCA%WiC\jkJN0>BK!Af=S,oG^R2K`^?<<pjV?3+I3FG6(/,=^7J.Qb6@'7i0Fb@"IY-l48?V3h]7NjOCc^>r.tqM"QJAa$YL&b73LXbpP%c'.kl.4D5&-TG4L\pt(ph`<4^[75@LW)G1)6(pYin9FiL8)]'V[I^[`o\hV3\QjL4S4RKg85>>ghcl?`90,Ja(W33.2afsRR_nZem`n=p5!G=o9,E7HJ%OjAjBP@pm^V.sK5!*BeDSf<pb2BJnmUl#tkFU^83;n(-l'd[lh^XRDfl`6GF;@hbK.5ukYUk1qe,JtsN^:/b6MdM;8T94Uee";-3n.SrUDG7,K^(>3EceBN`\E6DCu:*%9$Wb[^(C=6&0$cgBdM>;'[/<CT3$<SWeRH(&0!N^beOi8^GGM=L^58^R*fp[pOn%Nm@F-c0j+e;U-nbjceDs!TtX!'jd6j+lJ`?EQp%^<4L>ge,%H*&D_fLLkq\aE3b98OPnnsc+KAs8<=Vq>q#LUs)65H)&5WH\F^1p:;h\:LWuPea">eOJC@g<j.H60bO_.`)%J8ZjUMen`CEt#Gi+@PWHG(4S<23Ec0Fn#2C]#ei.)nlmA5\1*J>JAp(@23K\0SkE@!tgI8:M]XY76R/q5j7Cna^q8knB08`=Ae?$V2A].cici\b*2d#M`pGO!K..ASi,2W5GsKnFG`T5mr#k[L`Ip2-O%="'u5HJ`tWV&ka@1K0tkLf9?R'P=U(0T;-nD,N]nD"Ilc])D)iGZBoA2QQ28$3<U'j$6P_.A.hTrjdR+\iD;0">=,5O$S4Xo';u2[@FSE`_j40JanMc-Cj_U*B5]QjXmU/LJc[socu96\qtA5-ahu$BKp6E@'r\Vra]A^e/jRk_eU0]TRH5J=)c7?fZO1Go(KmGg&LJ0c1hrVMF87nUQ7LP%ZH2j'Lme1pfGQT&ouiR(iQkZgSL7ZPM77)Fb7Q)F@o.nMOQ:']$k,H'Lk)-U[K+P]ZqDPi.l65p/NN/p^ag2.S0;iL^hFW$i'I4W5ll^Y351>bB.c@sr^j@b?busQ3YZ"&LOh)NkTJ<&^lNfK/!4]BVXu^;9$E2t7B?HD1"2Ua$]4#0%OY%+_gGg_S0RM<d^6A>Q.@T#>d7(_/U*VSEuB#jfM7&+R:);d+&@tIS(6(P=de:@4bhe'i<P!$TVB(S<%(,R_d#nXHXncBb7b1QSe>rEXopG6M8dS\9/8mOZTOWZL2)<@!5#,UqWYR#Q\q&#:8Qp7>U-(&X!F%q)&a1if2Y9AW&7j8[Uh?i=3fK>E.tCMnp*#1F]*-AgUV7no<g>bI:CeJ2E#A7Z3\0sTM^^6j_8b.6hgS'UUBJ1/>LoTachnbJ%0*Mbqel#5C<Zi8r`*BE29T>"B8>+a=o63:tLCCnGd:8RC$EQB>jJ5?hNA$DEi&(25O;`G]['bBL&BSlHZ(r93q6/SdoQn%(HV1Dpj1PTsX,(F)u\Kkt7#q]"sDFH3_VbZ+W"F$(PDjQaG?(!08PEV1bI?#$P5W>+Z^RGL&8bp-HF^NI)/<$(6j'>Y5cp!FMY\cqAQTGtl1u,ocAgImtF4`L>Nc".atCqclpaU]Y$0@El+H#<Iha7Qip6eKt_0dKBIhG/O#:rbZui6crB875(G-<KjNFH_"2OQ\Nqqg;K0'PA?u>16?;5[fWU:*@E@A.BD`q9Bn'`=ce,h.][+"EWVserIEXEcRa!:H\VepQD#:KVU>f3=Fc0`@mN)hNj[$d6BYu$@PYZF$dDcAf`EHOiES=O`&=Q4Ysn,+ST[9`(bosi)[bZRg/3o63T)'pT<D[tn],_T*-FsY#44C!1.=S-.>S1+%;`dEiKuOYB!!E7_eHl?(cDm9S@;+o$^IQee)UQ(+]\!`%(3`'5>IlPbeF)a4lap7r*]8<FI?\XKg\/-[EgaVDW)4[?Ci5oAa\=q0:2!XP9qjt"h>>t.#uKOI+=&NJ6OX`V)77]j-;nON/"<J^tn1R$S]1q;H;=K_F]%KY6*qnghm.O5XV45)^q^Grnm.Unc?,h`"kesJW&S<],[R.4?dj'+&\lImAec`>P`q*G<b^5'@P*-MSBI!3!-gDs6OddmG09YX_FgcZ.Cg)@Q'+[5JK)IM:3I>Lcl]nc<(`_o6?&Pq[sX<D8,I.Z/R*<$/:'R[2\\MG14%cLFmZ3;/;3j>jnf&3]nqBe&Z>"f.0iG(oapZB*sEHp;BO4>MG;+C<T:JVCro&QHp]4f(7Dh>F$6C8lNnnID4V(nO^rQ"LBNl1H%sK]P*0YPO=5I<"m^HA?:m_Z+E`"f]mAeMP;#aWcc"fF!Vb75N#'/jmWf4eo(>=X%d=mmC,T>$X?aBjngR*^8)Pupi5L>\.Y5Q4hQ$Y2]*m>[>9:(bEd/sAqb*/DS!Q&\j`&N=rPuGS=-r2J&,]"kKa7E&Aj._hTJ5a)Mh%%QBTO_K;FNCZLYU9C,iln>Ku2s4NuD1>dEhL`Vpo7[WW.GNRaI"39T"c$/*aKL5Y3jp.Q;-m"Wi*YQ]S*lVq7]NUd:3%&G%bgE#c!*BrOP6sRBm%XZ3e;L`j5;`?ls@F6qK8=,e=RNd\HN1+Km!EjPA/uB8j&H,HW1&QXi^MV2$Xe!h.^pX"^'Ba*C,QksU"U;G]1OZo1b[$)lcLM%"o!JY38ZB3/L%dP)=-l?d7V7HMIb-KK8CYG_!t?POc7e&DKl,UjZ(M5>SPU\dCMma9CqpQR!)-tXc9(UTGNW#[/Mk=u^^'59^a=lU,kS_%s.!2<LDZ-(3a=rh!6AhIOX^L8rLHJ[\08NrZ65.W>Gs]OCcsHMOI</&lil*TUA]34GLphMO3k+"=b(Q+<28([lM6>>e*L>T5bY,7)PeuqTZWgT!=DL0Rf~>endstream
|
||||||
|
endobj
|
||||||
|
12 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1129
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau0BD,1g2&H9tYfL/;]Zup"n?T9p_?j&=Wde8b@2H7K?$A&UO#R#Xh1Xk3GQ=?;U.<dpmB4beJH03e3Z2=X9+.O1SPac=/?iWoMBY`/gaZl0%q97/&(g+AgRYNG)-H<,Vd/s48EXbbCn#SUg6(j2&9n'r6d:E3;&od3p\_1MqQ-7r^f(Bn8,_U-,0R/"#GFg4;m510V6D?a9(?C5+AAPEM4,LUKgNg=o5>@I-+;Iptdlh;%fcE'&jLHH8Ma6PI9=sKQ_P/[4h]*meg.LR]=Q-p7O%d81(tJF<#q$hp%o*CJ!`#2l6IIf3d"99k*F'FH9]S<c>?Tfn@%k,O%p**^_,[[s#IamOa%Dn4qb_m!4pAaNi^<_&j0Ol(r5GQqXaY`B4nE6rY"Z;c>&9=L1Qa!&MFl22/:T1C;Z=Zk5@QK9N2Ia8HImMSRF2mpoXDIfFqR8'8fnlM3@uWb[E,-W:aR*6N(S`;TEa'`YVD%q/V9`FQX$bV$J)RB*[ule'8k!M,iRJf%ffp@18jo:X(;pcjTe0=Z2&^8?Up++$($JQUgZZ::'Do?VkkDbZek#\l7p_)Lp39Bp?GLZXV@u/*<oB%';8rP5M$\co'[PiN%CR5dd>^,gaQkX[B�R155]^Rm%]2&SFjXVo0X_4tJCA.s*Nm@^pLAN.N$XYIQhiGOBH)E`$E34!#e\JDAj,uuj%B)A=5(0aPL[uD+CN%+>l=JLEAE;o&nK?(:fFt4ki=IHJ<^#SegrOAcTiP%/ACX]0I0gS(%o^(]\F3FDsM:AZ3:#)(!8lWA!BD.+X:n_/'Ga`,W&N/#73P3:<!i_>W[NXcH$A#:uQd,.^(s[tU9Y8Lc&SKFX\@_#ELIt_3:47[o>oiQqp.k)-9VX@#Fug@!r=FCHYPX:*&M?@1>T1>A&89gmH@rb[.-5h\C4ReM[mSGJ[6`r]?_iBi#68QlA=,MN+J4A9i/n+L?K_^BXgB4#s$JiLLOh40>8f<#-9!#"3Xtchh7aH+<*aR)e8k59qJ%`Rh26rdpU'!)0>CId0<a!A?50<Vm^_\lV\lD9:ghnj#8"FN:?F']g,5Hse2I;SiF4$FiaZIl0KAM9H;.?V85^*t[O8frE,3?dlAD#*!t-kZM?~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 13
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000073 00000 n
|
||||||
|
0000000114 00000 n
|
||||||
|
0000000221 00000 n
|
||||||
|
0000001154 00000 n
|
||||||
|
0000001358 00000 n
|
||||||
|
0000001562 00000 n
|
||||||
|
0000001766 00000 n
|
||||||
|
0000001834 00000 n
|
||||||
|
0000002117 00000 n
|
||||||
|
0000002188 00000 n
|
||||||
|
0000005890 00000 n
|
||||||
|
0000009696 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<5ada235c2b316296aa5009e2eb37b758><5ada235c2b316296aa5009e2eb37b758>]
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
|
||||||
|
/Info 8 0 R
|
||||||
|
/Root 7 0 R
|
||||||
|
/Size 13
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
10917
|
||||||
|
%%EOF
|
||||||
|
|
@ -0,0 +1,108 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /STSong-Light /DescendantFonts [ <<
|
||||||
|
/BaseFont /STSong-Light /CIDSystemInfo <<
|
||||||
|
/Ordering (GB1) /Registry (Adobe) /Supplement 0
|
||||||
|
>> /DW 1000 /FontDescriptor <<
|
||||||
|
/Ascent 752 /CapHeight 737 /Descent -271 /Flags 6 /FontBBox [ -25 -254 1000 880 ] /FontName /STSongStd-Light
|
||||||
|
/ItalicAngle 0 /Leading 148 /MaxWidth 1000 /MissingWidth 500 /StemH 91 /StemV 58
|
||||||
|
/Type /FontDescriptor /XHeight 553
|
||||||
|
>> /Subtype /CIDFontType0 /Type /Font
|
||||||
|
/W [ 1 [ 207 270 342 467 462 797 710 239 374 ] 10 [ 374 423 605 238 375 238 334 462 ] 18 26 462 27 28 238
|
||||||
|
29 31 605 32 [ 344 748 684 560 695 739 563 511 729 793
|
||||||
|
318 312 666 526 896 758 772 544 772 628
|
||||||
|
465 607 753 711 972 647 620 607 374 333
|
||||||
|
374 606 500 239 417 503 427 529 415 264
|
||||||
|
444 518 241 230 495 228 793 527 524 ] 81 [ 524 504 338 336 277 517 450 652 466 452
|
||||||
|
407 370 258 370 605 ] ]
|
||||||
|
>> ] /Encoding /UniGB-UCS2-H /Name /F2 /Subtype /Type0 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 8 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/Author (\(anonymous\)) /CreationDate (D:20251212050229+08'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20251212050229+08'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Count 2 /Kids [ 4 0 R 5 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2959
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau0ED,]1[')nJ0U!;HE!XiJo1h5A/m8gNXKNo:ON3bdC,<:QsSD[t0f\&O2Dnk_3d>UQ'J5gOm-!Sg1oZP]ZGE7$di/c@[G`j>5qoS\5SoBhaLC%%]9)?:K:\kUI+)j/:Fjc633_t^nWAKRO4F!E;##BNmr4Ek0J2OmpAdqe4^`F[3$MP)5GMpK:S9Jp;s39?RV;5#f0j6/_0Lrg>0g1,lm-r'WV#N@;Y9[oRI#tgf^I9nNO`n)YR26AFbRX]M<+>ls>-LU*B.+Bk0U#*PC.d"5/qMeOi'mJM_b5TJ:]?jQ0BcVpQSlEps/^D0/J)jWD?6</<9GHD[=HiP%m[TBOf:H7Kp#]0,fQh*jp^7_au-0R6'[r6909!"ltR3(Vno-=K!NoZjmllin+$Cl/%'<C;ot71WS@)V\KC=Cp"ZR3i5I//CtQ63TVLEL%</fG=Uq-j.G61u-8RjdKGTLDDb@'(-#RV\\WXCEgN:T1V(eW'H!d:!KENkP.lM"4J/Z^V9/,%".@'fA>d>u^31ceOX1RIkZ%;m?4W1>c?'UAl,FHRAa\K5\GZ>Z,Wa?6D.s:Hh/7DpeXRomlZ-0_JBK>$&\+NOab[EL"_qoccp#"0EMmon2\?M]X`RnRN2M!H"rtj8m(`I@EG%YGHV9n5uGpGZ:KVgU:8tj1c4t`[>?'le+dZm_?6S^uZ6!VN'e>!bC&'QF<"n3\(P3"ZY"b[E5IUosCrBL;i[Sir4B)3&tlf0+?Qdj@,MPnFs1qAujXo48gE^7Y61V5J<`H,b.%UT-0PL1Lc+9,3^Wd1Ai"8L5D'W-*5\XYi':G+iFrkUUkc#2UDiWEr;*I?#GK85j4_Abk0+V7*+E)%cn?&_D\)W\Or"Rm!-C5O+_7>M@2ObUm#UT<$4"BC8rcUW5*5+Gn@6X8Qol/N.^PM%=AlGk0?Kb.>'ZRqE#<]EL<pCsb9>%lFgYo'SEThK&GX0gR@*.^#p(;S_<r=1*a?H)%%_6N`OmP!WHk'd+J@*@C-&4'#;(ocrZR/0sJ08F2<h]JUN5GM"'AG0pc+`Cd0_,K13>"M5,9_JD>'.-99@N(mf'W:.%UjolGb-2SSd^4q)Bg:MkcHP]BR?n`'Ek12"*jPoXnDk4"Fg3_#o,c=0O\2Hg0fHPO)K:VA;LUXDHO'\]U]aCE5o&GMR)O;L*b4;02'F<1:*>o*Y0+V*]g@4V=smW8YDoq?Y#9iSi]mMF"p`1t+5)2BcuK1QIZV;i<cLgUZXFJD220=h'uE\5Su30rf#i?_drL9r5b,U\N2#G3[N%#n^oSDi-5K^DGu=6>FImS\!O#,:7m^DNCq-%:Lir!E$km#E(>ND@S_m,[<"NmnfP@)u0us-4?8KfMEd5.llr<q7Yb:s1]A-LT<?0PA09RQZL-k86?FKC0iuD.B_rFuhi`5ECWJ,P,_qf0Ap60;fn='QWBf02o)Y527&X1JM@6FA`F%,2X1oOLf2sVTJ^arcM/bEf#6FikFf/;W7g7dO4gYo=q3IHll"KBZVLa;E1_m6%9D2`/i"s@)6i%(3HU>)1)0k_]5`nLT'#bg$H0S.SR/V;:ADsj;f#5'i0m>V=#bn'Th$s/")FT)dJ.4A0-rM[$%67.dq.$c?ee?nZK^[i:FZ8%!S-tgXbGaq&kV/1ZV*eB_J7O^K4NdrG!QePVMg<ai'@aSa<[Amtrp%mlEp/l!:&c8rO]M6O^$VDrTOZ48Fn,feB!7o;k67_P7-)d`aiX&-\O0jn%8CXb!qWN(5IBq:WA?;`U;b85$Yk_8(NI/G;H%o=um4Trtl#)2tAB\2I74APV`4btpLet5='YrEe'3+f4#jfBO_,&2![kXD<"=kMDoqYM=hit33GsPO"iDqQO^'>8d]#uS_M?S25ep&tKXg\TU#ZGC5HUKQOW<=tkNF:/UrID)RW3CA1K7VYMjO"[tkP2@fSQ?$Bc1p+h$^7DjkNr^8/ER1b/c#0fMGj:qda0;cOF]AX'A&_fqljQDN((<n@-6aJ3"H3U#[D-ELVkKZ,*\'@+m;=]SarY^"KWA-(`khcJ.L3=m!p!c5U_+1Y)HEpHcbGfJO&mulhI`%o>OJ4fb#]6h,8m6Kupb2UGAj@*&Jk%",]W`,,N\Jd1B")JmrRXMd@s-AecgQT2<B*<jO%Z`sI=qC]hkXK1NJukZ0.V&P8JVY-.,5@Hk.m"?4YfZ"QXM3#R8Afm9HA8Y^KQ*5gGjleJ)X#kl,8VtK);hPS2:W0S>M.0cqU_Bi>0q#nnPf#_dJ/C_D@H`50G@)n8hZ3CW;IUoX/EZ%ojX^&ZU"bT6A<O(LoYJQI.1ND+(1@lK36s-NjE3>HJE/X?Nrt5s6&+KDAc9:Do^=[_eD"_V_ECa2OfjD%qo"NL5abn[C^gPksm.ED$n-'<YhtV;-Nt?8)]Shf=kS9]]A/+X!&,V_U&)dONqSfI#B6'bI]*L?_q"8NI(fW,s73IG:[5ji(!u"<MG)^J]bj#DS_>;Gm.WXO4TLP6Or'=k+]+n)G\`NU(0iK1PDT.Go3RqYHl-?Y*/&!&3Q2gJ"ETJ68QXA1@n;KXO"Zs(XP\WMAs)?-+WTN/F[f+Z^fWk)JG.5\@-d?_:J,A39%KjGR2P:^W.`83L*T3&dAGO&K^iNCQ\?:$1dogT&2%-6c+8H[VH!RW7I-A.fcrZ@4:If[*E\`;]]lg_+['57^f?t_1W`g6<-op)9<4*/oi!MMo+0AGi7JQS'2h',J>8'%&>HBo0-r/L5NK,bX,1'UfOKLp:CoqlV&_%GbL=Ua(%Ll(AlqX\[SQB44/AU059,X)ZY4UVRRESPK)$E*2S`q0afESl$Vf!tFhq@uX]FIA[j7He4Ib"f`,@UXU!]$p0()4&TjsiNf$3C`u%qjk'/Vu]"a.q_3qAY*Kr@)NuY<._BGF.`lF2b\r/aFrMfojLH$:,.:DC3I9e=Vk_s1htBaAbGgpHq=nb``;3"6B)Kf)~>endstream
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1987
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb!;eD0+/q&H88.TqO^R39K)DJp(>]";lmGO_pP/E[?h*(mB1eJ-2SV^V.60l/Ybg7h#7B8`lb6^!kiEcbA1h7gsi+NJI*RH8prQ52m.jdJ,-LWiMlaZY4EmG.P[L8_*-A*h,-p4kmB'ojHW[;CS98(H>^dE\"MSUTRFV9,i"n'KZ(E?%\2YY6TH#%Q]E%)q(F8)O0^Bs)_.2jr!+`:'g4i=&(OJ_SM[[,N%C9`c%XBD:C_J;,<W5P?c`*08(,ArC)tMQ5.u]_JtH9Y4'g+q@;dJEPe_]croftWQ^bD9Te=$nKI7SPLQrA)mZ[u-:$'%]fZ%(Eq_FR_qhWDa@X:p\)?+nZqNYZ*TJ+o^aj+$34;,+DuYDF70*k#F0>U.XOi_,Lg#1"XLu=Zie&_#*4g'7qk1Lt"?0pYO7"$`XbZ>q8&3'WLAe0$9r:./(Nq_:#WjiHD=44Xo*>..^gqi&!5&b^64+961a0nNg:>k-3?[8UCjSLQJf&k/oj2Y?pf_hAX%?KCnq=`G>9bh']!P"F.(.]Q$tAApCqb.KbCMNQnq=6^)Jml4>n`.+*c,?!5RUs-!h7[R!%,!CBE;G9fL83,mf3\maiSHK5[.BW6kQor\4&q^Iq&H[neFEI<0Zkg,RJO[)MVIbE@Wh4C6QLSPIh.LF"fdI5f!ZYdX5d%Na#!qkQB(</^Bq.4^;5r+OpR(m(u.5M9)F.*kW$h-?Tt+$GM#qGY<?&U<'fc5'W!Ml3';mRbA,.)ACQKgIc-4YejF'DJ1Rm`WG:D4`IRbaNafARUSoa'Z_i!oD!mh$?g:5+/4r>HlY=hme>3=h"B_ZJ0aWtga(pL"b>M\>15(+5i:eaE2*s1d:bDsb'ih'GZ%_,_l($@UASO?DWHPhD8rdUn4,S_YV86R*Q6#Ro^X<GPn>S:HG+l?gcD*V!0p$\;BB+"(Oq!OmAfsaTU!kWJ&Z\aL^..LC(*15_s8.DCfA&ehN_9d>/"Zc]g1>/12ml5PC3fAiVS+Qq\;'_k%aRsk0)KW8E;56O2e"Uo<5o$4OkYuTpWUCFYcG7)4rT'*+o;ai(eQ'G`Dgm#jc@GJ0X'^^qn?8X;jje?S22*S(dpYB%t0`c0Zk&@Rq`/r/i>)$CtZKeD`<#k#YQ'Z3]*3>"S.BB4nL!NKW']*=SKdmkE4t<6\YWQKm_C^^<I&jo+BS)HF0e0.0ii])j(cHLHX9=",5"LlMt\RG"rg#f4drbp7auj`LZqN,4bYZT0.N#"_OjKT#ZnR5u0a#]$O^_8X)-X+`&SXY1EuLCb-Pk]$^+<,7n0NlAsE:)*pu"->o<OCSHT5(3L6nj8,s8]h0X5%m\@hJ-*D`*jU?;&6G%K,#!7L<ca_j9gF68$A4a"a[`ej^Te2WNoG"/3O#ASsNhsTicVk`QFERXTaFDeM,.Uh11">W0j:SkUJ]Q?!!:7Ka@EhXJK8WjBrkE5f(DP?qZ0s%_)u;Z`W<h:k7RDGJV$9_BRQ65LbQ);6Ml.'^Xs^&-cd>ID"e(abfj>aX/#gKTX)/)F19+9,$"#Jh#0Zn5kK\<Ho3%Z4>DH+geP4SY*`uRa-iu%blMn%bOfIec7#L>(Xi@/W:BIM3Y/];cuNts$DDBWal\O)^3MGiO5m-.8F&&Ce).Sr^_$.:2\O3UB-=T^%@EjjQYn`*lY*4ags#<)`D,X;P$ujkST@P;<b6dl+R\NjZ_K4G5Y;[C5,HpX$IH5eriN7.k$NGnM8a3&GecuQE0to2?t%oXgH.M>>0XiGCH.?M=:"CE4/e1Ge(H<!3[SK`Ds`('JUZ9>.fe1Y0=?;>I+JjP`sA2[63^X-oO>l=U1TsZS/mcC/$e%I/NWM'36Zn]Vo*pp&>=HqH>*plgoSk'OPI-`AA_)o&O?Z["#EnrADHRO>X^X_F")#=>#J;f,'6GC3Z:q>sX:9Hi`H,#b&/J]@a97Qo"2LGXj+E"JBB,ZFJ[emSNXH;KkUMFU^Lk&$5'27;Mo(Kd.o'~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 11
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000073 00000 n
|
||||||
|
0000000114 00000 n
|
||||||
|
0000000221 00000 n
|
||||||
|
0000001154 00000 n
|
||||||
|
0000001357 00000 n
|
||||||
|
0000001561 00000 n
|
||||||
|
0000001629 00000 n
|
||||||
|
0000001912 00000 n
|
||||||
|
0000001977 00000 n
|
||||||
|
0000005027 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<4d217adb6ea6011be900d22f9d372c49><4d217adb6ea6011be900d22f9d372c49>]
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
|
||||||
|
/Info 7 0 R
|
||||||
|
/Root 6 0 R
|
||||||
|
/Size 11
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
7106
|
||||||
|
%%EOF
|
||||||
|
|
@ -0,0 +1,127 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /STSong-Light /DescendantFonts [ <<
|
||||||
|
/BaseFont /STSong-Light /CIDSystemInfo <<
|
||||||
|
/Ordering (GB1) /Registry (Adobe) /Supplement 0
|
||||||
|
>> /DW 1000 /FontDescriptor <<
|
||||||
|
/Ascent 752 /CapHeight 737 /Descent -271 /Flags 6 /FontBBox [ -25 -254 1000 880 ] /FontName /STSongStd-Light
|
||||||
|
/ItalicAngle 0 /Leading 148 /MaxWidth 1000 /MissingWidth 500 /StemH 91 /StemV 58
|
||||||
|
/Type /FontDescriptor /XHeight 553
|
||||||
|
>> /Subtype /CIDFontType0 /Type /Font
|
||||||
|
/W [ 1 [ 207 270 342 467 462 797 710 239 374 ] 10 [ 374 423 605 238 375 238 334 462 ] 18 26 462 27 28 238
|
||||||
|
29 31 605 32 [ 344 748 684 560 695 739 563 511 729 793
|
||||||
|
318 312 666 526 896 758 772 544 772 628
|
||||||
|
465 607 753 711 972 647 620 607 374 333
|
||||||
|
374 606 500 239 417 503 427 529 415 264
|
||||||
|
444 518 241 230 495 228 793 527 524 ] 81 [ 524 504 338 336 277 517 450 652 466 452
|
||||||
|
407 370 258 370 605 ] ]
|
||||||
|
>> ] /Encoding /UniGB-UCS2-H /Name /F2 /Subtype /Type0 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 11 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 12 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 9 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Author (\(anonymous\)) /CreationDate (D:20251212050229+08'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20251212050229+08'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Count 3 /Kids [ 4 0 R 5 0 R 6 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2250
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau0E=``%_&:Vs/d*!1*CbbZT'G&l.3O4S13&-n!44qBh$/nL,>jK9)p?c`hUE`Y\$E$FS/SgC7YIhR;*dGKY+/a,P.1#ni"V73qJ;[fW&9&Aa@.YXf10XR\`m^>*$8ml=**CBOBc2\Kn2fV=IcWlgoBY?Rm)f2\?.erdS07s-n-gK0"<PN*k7LH+]tNu[II%daHYOK`bb5]%NUPa67dkuW]qAS9$DJ$h?_+])KTRu7DZ'^SqukA:"j(+O!LCj"@RLh9Aj\"862oluFc`(!*2FYn%KR'srAW\Bco6qO(C0AX.m/+\b(ho#?t'k>=N$1)R#(PEJ:Iog^FB:G6Qf-o"BDNcY5dej=,pJmT*E:%9H=fE[?F)H3%<&Sb\3mnLQ6@<E>"KNS3+R^r:6tR;BQD-S!2Fi](H^aXOq_`ZPfiU""0md%[ODq:ZnrQ9jqG6"5CqGA<2fNU0TOIY!L([O9oWiOce'f5[UueWu/'<P"QaI3!t';..?HV&2[7=<:Td1kA]a;Q=2/I71YUuTY1E_%,`<q?1"FWKGcmfe2\@pK_^qb]=YFC'/V:;@CE-,YIFZU3-S87Yd^tff>BY)+.q]`NLmuW7p:>IbW;&`e4MW&;X;t2=LBIPR6!GVX<YMeHj&p#/L4C[1m)Yi>fC^VrYf9;ftnZ8*[eH$n)=KIkW))g!IQhm(jcs-i)q&;e8Bl4>jOS"pW0lS$8HIsA:;3#k0aTG>T3X"c6:s.iT!4rhFVEpf?&(BIIM?(G.uf(99`f#L6%0[Q4FbE@kiG<FN(`(,sm]g/%u1mo*'#VW@gGr`9HE^kZh_4!s/I4KuE6":\1eWjYY]r8+VsB7IH+13$BuL(_]GT$rg(@Por<#^fFGh@$$&^&-PWc%H0]oItUCT+6(>6mg[/ts$o&V1XUJ9G7(41Q3_TDnIIq]/47g'A:0%bT0B&8+\GJt:Op,)49"[lZ*uF\*5I*3MfbHRL\--i+%Q)8I,*JK2II5s]?ceaiJDG`CXQT'CV%,P3+LaRe@7M1>do!=R)h1X9Z]E7b?[q7OpbWi/WRdYA/@LdJe%"+_n:=QkfprqeaVcC.%D;FY)^9G!?LY>oH$J\40]G_6S[bjM,SEi$8@Vf9Qd`3r4@#'>:(L.R?2E*Ri+I!5@O67"VrKNWll21KU40Qb$7;@:gIWGIPI78F&VQ2WM.%9:0`5KaTWk!>+!FVEm$FGV-%#q\?A@(`0*%5]fk3l&=jd<^#%3Os*]m]UTm:;PF2&>-`,RJDe$lh,m45@);aS0P85iTF#u)+ja'[:cOH!Il.1q-Lq+h,W,6.>#,iuSOgb>\V[9Ji""&1"`,8b/UXeYGaV.aQ$J*6ok*&V%_iQMLDK4h6)gl=jl%B]uaW:S1[Q>8#j48U:1uCVi"g*?`U+sBUV"YO'!.r;P)[@i!I`I"upF!66HdJ0V/1EnWH&C:UKe?'$;UgR[=-J*(pe.\Q5$UpJ1d@hIaLEl9GI12IGW)K'#RrgHV5<-XTt"XFi!nh--V7N>.C]+]Q7'cNA]E4`oh-AABk_RM"9mjA.C#\2B<M;GJ[flQP$(4!D@tu6b,Br=lVYC9,7o48#mREkBZ^ep7lX=6LA]-Li:,.CM=nK:15&6\?a5L/47m;=7+S=j[aXGo?J)4PN&GL'\RDPZ*4g2C;[Q-sZ8Y^.9^AaLM\^$EY7k!Zr$ePLXK3De9?oq/0<fJ3Tq[.9PhG1l%"YO,3ai1/a>+?EHS=&'Q%I)X<+^$V:kA4<8m'D(>u*WfOcq9tZpCN_aKM%qk+LKU!K3%:l&nM%Ur`[LUg?l;hf64K^sVKrR0.C"D@`?HQU[Q,8iWYYPUZ2njF=5jk$mjIH^3;>j24'YTVSJVH`ftV!F;$(K;XM!YZSNQLk/<bP(1Rj&5>14-^@ON-1Jl>hIKoE\?WMqGQH:#1!U07Y"(nsg^UXg43<0^9clrXlFVL(Rkj1Nc$W:D'2'qnfur?<"<GsC9":1\PYq%S+.'7)YQ@pIis/^GSQ*)fcl8Yp[?-g2<Jjc!*T#roq/UpaF7luZ#>.r:9^tk$/LhCuTk`ua5,A?jMZ'Y90D=j.dEjPaRfS=&lE?u;,R4[L!O>_=`qUcEo,3u#kk6/0pCO*:WkNj;$9rY22gbP!mQr:BJFk1_=LpH$$Kg@.=3I'6Zgp!SK*ZkW+.Sm\UXogiVs(@dfcVJK85RD)>#9[HCU<4_$h=dQal6uLSnW&^qtU0m95JqJn!r=$c+pkJ=2:NOs-k68q]Be++DU~>endstream
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1856
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb!#\D/\/e&H88.TaW?2%$&JS>!kJqmC'18r"aWnJeBftfPsre7@,j1]/9EP]-AUoQK4E#A70@C>LJYHHg^=4UM*'R6g]-g+c9TdU?B;<LpC]9),V!(B_6ZDo4[<j*L]TXFt@@%P"9@+F%n(,K?#^s9St*QRGa=q.)qCkk^'rFCJqnV/GoOW?kHC^M`,HL^>A/o67FXB:rAYWS.#,S[sc.Om</,tdJIVL4mFnT:RuB$a-r)Jl;fP\\/,/,=lfS)g<*+D`8Qh->I`IX4eI=H,Y0LVS(\U]+U9tppT6&sUCP1@(VK_J#E"0'K,hP0U3lkWSHI<Y?g='<69=&*+tONJ)G[,;'`:=_rJ".aRoZEZ`Gd87*nM&m(n%jf0C6^URk[f4Z5nl@($dU6f!J-g=lY/=@#dHuYUW]cT#t5"pbFatnBZ'IdTt.,W]!gl_^#\G5jL"U$2Wsb#UBnU#_BTtD1;BY!Gl>W%\FW9mBfpg^cEAL<9tWu9WV'pX\-M7@VK\V.S7:g'>ZX_SFIhC)%T;>`S+%'>bA+.3ie:&rYKi*(@AnQns->7,ZY%k@Ghp,'!HSH_JR`0Id;-.4\+"FnAu;c1Hs>oAZL2Jo3ACd!;=jF$dCr88;$sdgL<g,P,@P++I%)U&!R+rI@`$si]0+3[RHCI/&p/;UZBQ*1gTd86!%rVH&C^[B?^>Em4:M:g5]1MP4_E\i<>h<+WHtE%q]7]M)K-cCEFN-$5aWfUB@&\fSM"GD5m6lEH8;[^_Ju1bnqhT@(@,c]fYKZ%7&>;ke\Z@'h19[/A$p](uk&)BiNp.?HP?C&B%);IXL4L_mY-;$qC#H;??gE7Z?^uT:iDBS!QBY=AS/=.[P<:#/IB4o<9lk++P`kB#(Il<jdf#C9U2F)@R1m1f3Z"+`%1;ElAjDgdf_%8M%=2]3b4?0f%l[!$8edNA._)N6se:A#A0TF=]LuB;r7q930P7*J=k/:;p*^VS*I5(4>aY?C];=dg=eQVf_WJJ@S@n"T5Tl&Hnq:i/)^6JQgtaVuXZS'AcKQg:bp<jQ`i6.TVt1Y+0A^Mrb-e>:<jFo[1iYc@rc]6\&rP#'4nIaIWaqO)H/VrV?Q!.D6bS+FYDd:"I*\.DEM.p.<S2Vt$8Z#-K9*ru3bA.5JOl.)o",L1^sm$8)e'8BBpJ)F.[tU&tpIf`a^b3R;l,5N6'*ph:46kqt:@j=RlD\]goJ'[iJse3EKAh50t-j)dR,"-cE8-\NK<bEl9#*:DRakYIiTTl.#ob^LA/a$W&k*)9ur"^an1S8'_Hj@0/K7M8e#-+aD)WU7nflcBdmQl=h<BBVa*`[=/X9to=#IG8<o(3WEkjD,g<3'>B_\(<pgcA=ZZ[huc`rS1l6XX`mACXs-;.CZ5Cm(AKOcYV*M,Rqg1a;>^'"tPbZV7UYWg]PpS]Qpk#'3bs-+b.J]@9s[abUsq/C1=s12\Z6`$+Ysi:MjPURu+5o@\gW'B!N2U_:<@il5+u2Us5Z5?s?tJ/Ep<nD2XS^.C>b<?^MP(<Y(.N\#4!de1mpldSWqZ1YD3)K0fXUE"N]m>fWkXre1J"4F>rW!GJp3U5Posl'jPfY>_U,%Q>mIc$D[TV`8Alq\%\.Lo>)r&oER,/be+!B=@.KQCd0$.keUD;QEMV>l;tWW;]c=L.q5Z(ci@Rs'JM/5`bMkd(=l,;RY,X;7=FC.B=2:d[\P-1Yi-A0i\i*lbI>5d)\-^(%l[\ej`^A.lLGbIb1]dOV@`N`H&E?<]DseWC/RRCgL.p/C*!Y<qU5$%_0<]Fc24Z%r*]r06Sl%W86R,[DHD0>,u4n6fO(Ya=T%"e5kj-+E&Q<(KIn:h\]@"G16R)mJI?<q)'Z~>endstream
|
||||||
|
endobj
|
||||||
|
12 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 725
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatn#D,1g2&:hOi=0.5b0-4\;Am`(C8J)\IgU+&e-6%hZnKJ0*,G?:Ohjp/cV`@BO8TX:ShX9asc8.+]/3feJG&GOIA9M=4!As&!!S;H@]f-1qo:lC\9t/aI:kmE:=EZ,si-i8n78s58<ZO("NEpJN3SQr#egA@DlZ4jdCO773LtEO6Wlc#@7Rk>bB(ScM(XWs07C;`j+="CTcLO%<I[eGq0kZF4dmehbV*0[19F_jV,I5&]e\6<l&RikY1R#6N_N:Bi+FIEALlmK<&VhS$B&fT6n#[=$6F3aib#M7j13uPM(j6H.U5jjM/?8*@=#ZOpCi/KN$[D;u&YX$HRA(cEe0Y5[MA,f.E`2qqPXFUa"bVJraKE;\:!V7`iI4GaRN31p'\SB"]4F&`kd?XeS5@'R1((O"(9h1o'Nd@X^jDaIHd>at46YSXi]btnWKdEgT4G8"Mhg85GKtbUo1Ra\e4G`.r8d70-TF\[ia[Q^8m%S[b7J@Noem5o3OoCPYarNQYc/4/!_sKrMM]*W5fNkI[-SkSEc8?QZn:m#]d+3bNdoY&as4!iH^a,DE)hi?]t9L]2Ut,_i&60(Vp\F/FViflQqLPM**pj6e;')?;&-)]6,mEc_m);^eF6]NLpmf2WN-Ehm7'mjdQbcCK8jMK5;9aaO<u^pN$fQj*ii`*CWJue=HF^?Wk8o<Xl'P']`]T>.mNdio>AB/5qSV(o*7kZLqE~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 13
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000073 00000 n
|
||||||
|
0000000114 00000 n
|
||||||
|
0000000221 00000 n
|
||||||
|
0000001154 00000 n
|
||||||
|
0000001358 00000 n
|
||||||
|
0000001562 00000 n
|
||||||
|
0000001766 00000 n
|
||||||
|
0000001834 00000 n
|
||||||
|
0000002117 00000 n
|
||||||
|
0000002188 00000 n
|
||||||
|
0000004530 00000 n
|
||||||
|
0000006478 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<eb6ba06d9be1d2291e54e6c1e80098b1><eb6ba06d9be1d2291e54e6c1e80098b1>]
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
|
||||||
|
/Info 8 0 R
|
||||||
|
/Root 7 0 R
|
||||||
|
/Size 13
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
7294
|
||||||
|
%%EOF
|
||||||
|
|
@ -0,0 +1,127 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /STSong-Light /DescendantFonts [ <<
|
||||||
|
/BaseFont /STSong-Light /CIDSystemInfo <<
|
||||||
|
/Ordering (GB1) /Registry (Adobe) /Supplement 0
|
||||||
|
>> /DW 1000 /FontDescriptor <<
|
||||||
|
/Ascent 752 /CapHeight 737 /Descent -271 /Flags 6 /FontBBox [ -25 -254 1000 880 ] /FontName /STSongStd-Light
|
||||||
|
/ItalicAngle 0 /Leading 148 /MaxWidth 1000 /MissingWidth 500 /StemH 91 /StemV 58
|
||||||
|
/Type /FontDescriptor /XHeight 553
|
||||||
|
>> /Subtype /CIDFontType0 /Type /Font
|
||||||
|
/W [ 1 [ 207 270 342 467 462 797 710 239 374 ] 10 [ 374 423 605 238 375 238 334 462 ] 18 26 462 27 28 238
|
||||||
|
29 31 605 32 [ 344 748 684 560 695 739 563 511 729 793
|
||||||
|
318 312 666 526 896 758 772 544 772 628
|
||||||
|
465 607 753 711 972 647 620 607 374 333
|
||||||
|
374 606 500 239 417 503 427 529 415 264
|
||||||
|
444 518 241 230 495 228 793 527 524 ] 81 [ 524 504 338 336 277 517 450 652 466 452
|
||||||
|
407 370 258 370 605 ] ]
|
||||||
|
>> ] /Encoding /UniGB-UCS2-H /Name /F2 /Subtype /Type0 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 11 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 12 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 9 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Author (\(anonymous\)) /CreationDate (D:20251212050229+08'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20251212050229+08'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Count 3 /Kids [ 4 0 R 5 0 R 6 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3596
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm>q,\56')p_%,!HM]%YVIdP,RCYoml($ZB-1_oLgk]6'f=]"@3n&gSa>K9.rj=*^)ifl+Tg@=&iU-h'ae*r^g@MP=jqZ\$EXr.oKBYj,+8F6)FIPZI40jjajc`K3C-sor)2R@p.?eO>N#)=/DRfZ;UVuHiF,K.K).t[.8nD:_a`7*_Pr4Z<"/$=lTP=]rAJ:)G=.gQ?k\+,2,hW'"rcG<4[jMmaK<VIO^3.VLPqjeZ)f2,)A=-J.d;2kn@%?:Jh/OjL5sl67(Wk<[o>Dp?`NV>:@4!Ih@(-nE#0!:AG^9$i.*H([7Q'rq$KW2_RZDWX%(QY3Mhh6oEp.&-Ak@IYnDa%Y;32&lu:,k:DOrd*MLX#RYbg*JpgSH5@kg"sunj:ru&mCSIX"Zq4>i-nQ&H$HuMD])Hq<\tOmF2\D4E9"!%\>I+.(KBO(EU:;\;Nlj*(g(.REO&[%H$'g%JM^qfAWc/:hn)Q5*-oHcWp?s@<Vk<lllR/.n<Dq6mWLsP3qIRan(rP2*J^IYYMtYUsU>k+hS0/;O#5</!B#XMk<eaTp#.ddg0LuH(iW0`=GItZd\+R/'Od1eq%ru%uZJmXlUrR5"&MO"N3iO9lX%gufd;"iYMEiiq*VT4@FpJ9GLl3>$GeCB%l\4507*rZ$Rri!(n7TfjOW]5;Q.2c6Qkl.'FB^RjKB>TmFAFO$5d!R\\-T2-V95-T06>d?_i#"-Z6-GBYWM;"UEQi9nnrj?$rTLUp^usJ8L#6c[H$!/.P3rm(7QR:\ANK]]Nfs0iu5U!"jr1\:UJQ3F7X87`CKW_UWXhm.6pM.m@Fe#)93^."ET6uJ3Gtm?ePtD#OG0J?UfOo&i$i!cIGJhY:K8i(/[?t%!N!%aD@jK/ccma#7Z];3+i&<<o@t+j#mhYknfK[bi)c\MnpFJ_FnNh"kp9Ws4h&tep1U)f4or_cI!<nc7rQ4l<hZMl$pt58:*^U8`iRh+QQ+=nJlk;8fORP"M&Xp+q@1[+R]Fo92m0-"VkG=$/J0'"+Shu5'+c\#u>"u_@Bqm'oSFf8/oOJn\F2:<eP0k\P7:V2Mi.LM[[jX&Plh3#3Z6X(;e<'oU7+pW-;hZej^i']D^\=$NXJ0oV9&!cG#oA3B8@HA;>k-6mF*n:[(EP`V7V7KJE&6i;3h;UbCD&>Qdh!0j0YJNsV22^c:3Up4r9$k^a;.IpH>?-VG>-8'*%0]4i:i>B5;q<$O/N.RS!]0mo=B0Ct6ZK(*,!Kir[-Gi#\$jN:SiD(Ncc@[1Gb9UMDi)uE&tJW]fSI[-+$.-nJXr]FL^H(`QoO&G,WY/U`&(b\[;a0?Q'UU*-g%!".PMY>LNej^^ujk/HcYkQtA,Lj";e\]bQ&_(=brqC%sdK(sseC,q#KF`q`_uc4$;5tIX#hd8hMO%X3'4r_g]W(@nI6`JuR34+`5DoAh?`]d'q$E?S;.HBJdJGjH2W^rlHcR;/.e1h:k**Xm\4(kKIo:iHm!KDF^gHPsA_/A?R8L7Y^_aS?%jkX85tYbIaX^^1=8cT:HaWh7kb;Qa1-'g.qTtd\T-n]A$M\.YhRSV5Sghl/6P/)iP61^dR=;&HL-r-\Z,"Wr"A3dH--JhmF:"T;nuuV]4*Fm.eEkT2d7q'Jg,-J1M@M6k/>jgW&9O0E9$n>fB'X\Im-r(3XW``r4>iq4U@Zt3f_HU!SeDS`N.X$pc-SO>YqY5=]gd`$([*'^YVduMn_li*?A]E$gOdTB0LY3AlVq32Rn2;1TIoV`5#!4qCEShCp(qelbHgM2\j<+;3q^!@g9HiqeKc@^=IYY%2`oQq)lV&S]ea%UMDApNH>9UB0"9bG,kAo;ficq%C)"^g1qn)Tr.,E>;hp'\#MR''Zd(RO5'6to3683IF7@6`CWH('Xg)YpaN\cSJ=Ft;m9(M?WKI#3A]MNUY9.Pt95Pmjp@oI/s`h@I*oH?@F9,Pt<kM/=LScN3CRJ%iQL`0W;@]%/h164$K]oUAW?P')sFbA=IH!RZ;BGsEC3qu,Q'6<'.^\pD(j\.G0Dts#P'Aa]jW3d9J#+eR]"\EhJ0tg$"3uJDladqBJHNYR`AKEP'X&9Kl\3$iN<d*YCAS1&?d-8=s7;nK!j:/$#iG/?IpQ21IIRoPB'$_<q88"L<7/=Bj[BQpO`_^,W=D/AR;7$6A?3njG?t\/I]*9nEZ3a>?]o]WL1eF.U%,'Qbs67qXq1EaBX"*cIJT)'\l$$gO&+0`H)m`PY5:_@Hc.UYM/m/H^jtDbdNBW&b$E]lPDOg$l\%FA2WOPPD?[a+dZ0MYm.W(05TTBDck"gC8or*0h)Mbtl'ZuO>i[(4l6>s0+HnZKuBY@tFQI*DlV@K_PUG=^6@gWq2KY34OK3Ia1Y#6^W,a=;"^8WiCii"1&\V:rQJ,XZ@S?ZYR)ORkT96Stn-q70d$W#-!nZ7Ab9SPJP9()U%22`$D9I!0rp1(n(2,)^I/)05mZ.O#,9-.><7'cL2'Hb$h(bN4b=']8=-CukgA1aFs+:D2263XP70AGcF@-?B7Rl\O<!g\Yidj\-8=tKS`j1,J#+`2U<%L-=aedLi32WHUKF>")O_mBjlNaP=X0S[`AT:m,XY6A[7/CC6T0]rUGP#U,A^#%mm26$b(EMTB$&JC49HFl^VWcJ0!8rk;sDSdfT=rD.r=!-mI5n)ZQo^>@2<(U0!Y*GXQ;T%c)r*gb74imM+I@O4.C)#4AcYmBrrIA7Xo83n!3+h)p$>%?<,?o*r)DK7q3nfs*b,YqZVPec>'U=+PK"EG#B2+=&+*rnBip,goXD'...r,'V"Dq:FP+m\\iX%PHpaQ1ZF*e-.05X?ghN0O_m%<^Bls@[%WfUJbGWu/f?t,KCV,"DL=IPbI[O]+gq=\>B8%k>O;P7H91]g26/lpH^7N9ZiS^hRiasH57^2#2<A!\@)VND`R=55kfSroc'F7p9sAV(TOWLZ'BZkViTFlZUmN>JtZj>ttab7n,sgUBm!6.g)+*Ql!qOe,)\(Zn2s=8VV2HOPYAm,!tjH$u%W?.I7Zfq#&(cJWP&:O&+9l-o:oeqcIk/$/46e7dJD%KI$UalPRm']J72D9oc/fAu$kh33G%,g+e5"M^j#SO$Q,!Vn5P&T-T4;t_-!Q?&[^(@]fKCK<-:H$IQ@:jRF?6RpZ^(e;IQl\l0/?uSD8HJ*cCPbu:R9%rHg?i+b<L]D*k;`\M**1G>NV?sWJGCRS`;II(#YYB4jJ`._m_NhebHti,I6eqiGe@&g!k*lq>Ij"6!3!nrsn'];$WN792P=<LZ=ejYV6&So+1X#U'YE9V_?^lG5G\9d^73e!a4G@B(ipG<C.ueuc`Npp-*uSeS5?ERno5E,u)knV577jr4rf]40!s3a)mBm.GA:]JQFOiN8R/D2s3tILOW2E8,4H4uSYX?812<>f#@-dZdEYe3=]KJ,#&l2t<B?,`hs+/]0H%pT^(AT:&2J7F"%,kIRpot7,afCS7^;=l]@oLREL7-u6E/PLV$eK15,]s!&nG\5N3A\1Qiq=;q-YS!Q8$(2T(WNt410>JK?Z:N8%0=P3:QbpZXK^U)5ZL"#9r(E>h8c\^]al@="dPT%[f8(Yo&0O[c^6Z~>endstream
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3389
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm=CKD3A')h7%BP3Ba\Bs<31:'VDO2DrEB;OJmm*p.KCm:iL#i`G1I3WWA]t,Yo))u@;h3jBC&N:nO7*11V58)<0UIJa=fN<GK)cAPJPD5$b;.KC0nR?b3o0!sl7]iPMZ&K^JaJO,IdQ[N=W>bd)l/"Q9+u?c52hjgJ<&J,<P9j!&qQQ/sD>m(j'M$LC&g>3igt+rNk\Hop8sHdV]q$^6'C?41P)3)F9ag<<(5T"+rggdPSL"#q.&VA5^5s'-DQ1mtpn(lBrSOqYU*K3r,t+r!8@P':lW-GeL"E9>=bems?N(m.hFpZSs1tF2NY>t\J$^nP+C3?N,Y<YG,g/VuSs5F,n>AV"4b]U>o(:]$ZgVh8kXU!280@DhB"g"TD[[`4(o*X8Bjd&dQA4/cA!%jFoEEiZ>Hp&gBSe&DO[LdIYBu?,Unbe,l&P\@gnZ66GfI?rBq,+OV2Z+s+9?oEX<EbqY)a6ujCIMN`OjZf\,,to3`<N9"^-G,+u^p0YH\o;.sg_JH,u>f:#H$8d0dA_n@HLrl*(QkntQ:J2C`WA6!`]k;PW*(&ces!2[^%a\ckglH@rNp=6Zm(<f@hhB*JP>AGiRUNF%S"+;)a_c1G6JM]Vi-/i9qN3ms<]j8&pOB+&U5*E+2)i-T#<1f[#IZ#/PF'IKjm(>)l\'j(%BoSV/F6&I!,`)Q#0A",'[V%0Qe+r0*-7tuSnqIF?QkP[^I5[[kT2b4T<3=-jJXlc+KUg3*(C\ubGl<OW]*rfJ\gJUad\Z467[^$(Ge2lfVV5WJ65/SoB(Z1V>6L0(UcdD'-OHsK?$*e"P;#GQgh=K:7Nu.`XnmfK/)eKIXmroV4ZBhcmN-Cm$ZLHpFN!KhBiJJ:kFd5Ea(7G/4"N2DC1j_]Tm/@h<c,2JI<5\DVC>)e/e[CN,[c"<):MIf&*Z.!DQ=^Pd)F-NK?`_QFZ?:$QlIatUEc873?4LkW^!2^RD;-Sm'NA_GD(g%?i6H<1Md&N?.!l'ako2uU*R/gOWp9[i`rgVcBn_i:_4qfhXI_pn?)sGSDJBjL8unGIaVN[[l;ZpkEPR[i@sZ!&*AV6(_:,CIL1Rc]Nb<h=CC6$>V$6X*90F:tSD#Z(ga:2l4O$(-UR>EI5n1^mfsImHg-m>_^V@Ud19OW,Y@1QtI&W@$J*jG(!Tqi&8p-!!M!n$<Y[R!_k<nKSe`HYH*)N<bc1pZr&nL-*K&mboO&/N<7-c6>SZTWk]^3#qfh%h<66/5\Zr%,8p*DThJB5Cbb$J4aO,;^cYdTa7:6G:IC_1^91?#@0BgIS-VB\XLK[9-*ml.)t+eZj="K&1_lq"4+pWJr#":5kmrI!MM)..4Oqtp!@l`KBu%gij40R^`FKW9"5I0JVZ6<Zfk1BoR,=K*8,RM_;HXqI!31TI[0?n!*nm?iDABrPC5a\QJ[:o[ET8djsn;NqrHIu%n[H4oq0QL$X=Fp&KD;##d(2^[@(@h.l66(l_^p"tCerES7$&QO^)FVI;7A.*8oL.,@bcQt_VZ.t8ln$_,\dnoY,?AH.ci-m/_=pj]r+R"F"K`Pq3QZi-,FA+-Qp2pH#RAsEHF=7cNZ'%Vlm9]5-.[@G]oP)5P<HDg$]0O-_gIqDU`P%U[94!1'K5KE#".nO?lF"@9Y0j3U\Z,jIRk?'r!gj/(H(Q?O6"9o-rFB^UfNW_*g(Hsf$)(;rR&No35rti..ntBgrL`SuLkVp!qdXO5obKl`g1dB(]Mp\C,&Nh#\S?^;M,q(Cc9YG;"JG#b]5qJ"S[6s,Vi<_cJ3,j[NX4boKDipBio<n'3!]fmDYP[%IlM7-l>j9-qB7hEND5mfh\o-NU1A#<MmWVGFl(fL^seKcO$a(KI"u^q<2[ui4.H=kJIF!TL1&?F%/9X]XMPl*6QTWLPri57Ci-i?R"N#%Ebtr*]dsOGlj;,c],,LRo[t!L`+N-cH$V%\F*NMMY_V*3?Og+Nr'9:6asjs0h\$9]oVtIF*k+51+j9\qfOC-bBSm\(iJ(iSL2'U"Z8sm<_E`6NUTM]Tg_R1O[<O#/?B_Hk?ZgjHc]C?#`1@tRbpJ'e`*Eu!9hFT$0o6O!<Th,E4?C"1r1hV$I:HT6VBs3>>hM*i@UjcBEX2e+ch1TPQ^]f3ZS8,p#6=.2@EeG::^mQJFb?@pTf%G?Mf<F2q!V+`<.kX[bF&rf[(gY*m%TF3L5QAsMB&A@/t#F,Q'*'jHN["e$]oHT2qt1N"soMT+[u*3eHMGi9s%XMN?"4nCr'D;D(G0eE#8FeZBY*I.I,EUZuUCmS9EaOE;\ZXTa@\_))ojdQiZV<`j=FrdJ_/&YT*J6SO+>u:K]?Grq$(<e/cubVY:jdcVmh9G#ONKZCU6>ELK.4/T?nqej\hB.\DPK5UcEYkE&<bX-sE4hXV<a+-Y=EpZWT2(5lXn>k77KSaV"#%K$i!Ha8Tr@>mO'YrLj;-c'plX/rkX/AUVmpuAB5q2(MCc,`_dCK_ZY2qo%lfn-i5hjdu7/7ds7G5RFd6%['T*oZ+6,0<Tq)0[Yi1lJBOSKNCe_h7CcIS-$pi0GHgA#=Yk7<\8W%OFp6n9\.k3Ah[Fk%c@mWJ_m$<ba$mOY+),l?U+8QSW=(=W)IMlcIpV?%_;\Mhij#cV<<C3'\;r\J-+JM6%)38coQknYLV4+Oa2=T:^dFe7HJ#]?D0p?U6q#SJ;cV16:o1*\4W5E92606b,4uF%gN@o6mF<Wc7=rQTJmE=m,9<X[G$31\d'0hCR>J"JER#_<,tOk/i5*(oD90Q;:"+:_i+^fK]36rd^3`d.=8iSJ'H]-bse.A*&5>="*#/jBG51?tb3%aIsI53aa*l'"MQ`\I;n`rj"'q9@QX2dSXLaacMcI[jkU$#N<n[5(rO\.<u0\)PRF9"g]fdF7e(:=jg)cXCS`%_Ia0nb>))$,KSoeQLCGqOhUB'4ASK74hQJT!*YJJ&+5)#!?Sr#ASXC6G_.Y;W][du5/L<jmH88uhfJ=5kX.>07dsMGC7\Smi`BAJ0;HY[c_WmnZ4rSd)'5->0qU!uKm8Y'o#=TVf_hsJ)p\R49B:qFgZ$!"_j7/Bm=5!6lb\\L]e7]L*kc_YSnMoe&`$e;!a!OD\58\_nZ'rD0S.:L8b-u$aSp&sY2i;UiIuP"EJ9DQ.:es@#KdHbq8V$SoZG/)*P&LME)ut8FIKECT!*/9YF0TDl5,\"<RW-.k6p^07Y'B,AB3#aGW)@]jLJ<aI-@-AC_3MXM/V>5ke(BoP%$8_1t1_6%(g1WbW(7A(QOQVGQ,:jL'mGrdO'f?[c"WSWV3@FF3GDbGFB&RrO"6c\Fu/"@]7=I^rBc-QRF2gE7s#U=Z5-pu#YjJ!C/CF-V*n6sGJSSBO"',QNX$>ZN.5EED1+onKIdl6^n+8L]'XT~>endstream
|
||||||
|
endobj
|
||||||
|
12 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1401
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau0BCJPmN&H2$(Z2'J2UsA\Zgm?hh<ReC4R_fu\L:GKnW<(&A$#V..2%]b6BBJX"G.`YXLk%q+4*,&\R55@E'`EPeO3a!MV`aeC3@',Hr\ae@RO$ccI`YgW/LW/E-ah<Dh8FMblBUXr?`Urm_!B/$]Tlq=J,c(H-jiq)D3CMg:e\GT-:_=OIIo3AV>)_&$h-UVV8F*pnYCJ>Wb8@3N;n;J:d[Ki7j$rpE*t0qg9pX3Yo\T1'\H:0!&s9r+IE^8AjL-Z9EoGNOF69%TWQqC-Vd@Bo(3KF7er@S[?]h%,_+#Xp)@\Nn?lu9CM6o0YFoS_TMb^moRr-=ZkF+flru:FE0gi^hTc<2Z2:p@@M;)?/-JrJ;,F3'6$k6b3*eTH]Us$@"C.r`fLEup:8]lB$rZ;,!;6!Fk$UC8HseU@/O8%e(Hm*&run'b&bF\:U;UbR%ZoVi$`t9,K[f9CQEai3-8"fs"`iH=1092,T)mbopEb[j[kEOr-XUm^DeuP$+l?lG_TIl3Ht2MIdZNd*nc=qtX:;CDMPl2>K^quoP2tCWjQ.WqSOfZR7f$:G-!)>Q-OLS*A\qK9lXaNg%'5$LPg?T9F-#V7Nd_pR0_>sLJR;0`o-VutYrV&D<<dZ3pEr+W;hEr*%r.NPp*A^";HF5B_V+?AgS^kCPoRb!ha^*Ykh)T)1,bfA\C>Z+gJ!7>b2D-Vr3+BhI=#e@Z!=,cQ[2h@p?iS4,$FN<]q&Gl'PXWa*D=i:#..E+hm?ZN;"kK!KIuu%-uY-G=\#:\^hKBCN)XO%NEES!W*nC?(/^LmgJHOl"jc`^]0L&jmE7UoC3B9r"#haD<4p)"oW.fV97W>?IZ6e"eNj"nDQFBoa%m3n*'h*hl%:bD#,o40'l)?&"kGtNE(=)&$ANS^`j5Ym'EnhW.V:pe"QR\X[Cs0J\7$Obj&9fSDMA/Ib2CQ4N%3'ceNh6Lae3pPJ30IFR`OB\7]cM6%g.-07[ar5gZR"L(,%WrdBBKD>rc#EY,I,oNVf6T"?u"I@lM%?cn'/L;8m6@J(-lcPBrcSGr<i%FX+q7lNe]\=j`U^c<23L=X?KKEa*_,A$T"on>a\/22su#5]+\PV#`(h`)$([C3N];%CVdgJW.Qo-"Y\Hq3IL[30@Wnqf?(?mXHfk=i,RYPc93PE/d_0AH,*R2L(#lZX&W(FgEXQE\Y&0DZnuM=[NWUV@M,RFMgC[PtbP^H+>]eQgaAmbN&nB2j<q8ns;*CMk/dKUl-!2[(Ke/jt-'E-CnTYP=Ed;";r'1ThMjQAP]<8$Y@QO=mq2(D'U-b,2.E,/8SLMl&J^-HKXbmb'GDD`M^ZUFi\:SrM.^%^Uq3?OD(\9??Z%jD$<Vd5mFXj^(W=tHBT%Xd?!^U=E4,9Vq.\#C&JR>:eiG~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 13
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000073 00000 n
|
||||||
|
0000000114 00000 n
|
||||||
|
0000000221 00000 n
|
||||||
|
0000001154 00000 n
|
||||||
|
0000001358 00000 n
|
||||||
|
0000001562 00000 n
|
||||||
|
0000001766 00000 n
|
||||||
|
0000001834 00000 n
|
||||||
|
0000002117 00000 n
|
||||||
|
0000002188 00000 n
|
||||||
|
0000005876 00000 n
|
||||||
|
0000009357 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<2bb5451d77f322d520bad4e5a0c8f79d><2bb5451d77f322d520bad4e5a0c8f79d>]
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
|
||||||
|
/Info 8 0 R
|
||||||
|
/Root 7 0 R
|
||||||
|
/Size 13
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
10850
|
||||||
|
%%EOF
|
||||||
|
|
@ -0,0 +1,108 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /STSong-Light /DescendantFonts [ <<
|
||||||
|
/BaseFont /STSong-Light /CIDSystemInfo <<
|
||||||
|
/Ordering (GB1) /Registry (Adobe) /Supplement 0
|
||||||
|
>> /DW 1000 /FontDescriptor <<
|
||||||
|
/Ascent 752 /CapHeight 737 /Descent -271 /Flags 6 /FontBBox [ -25 -254 1000 880 ] /FontName /STSongStd-Light
|
||||||
|
/ItalicAngle 0 /Leading 148 /MaxWidth 1000 /MissingWidth 500 /StemH 91 /StemV 58
|
||||||
|
/Type /FontDescriptor /XHeight 553
|
||||||
|
>> /Subtype /CIDFontType0 /Type /Font
|
||||||
|
/W [ 1 [ 207 270 342 467 462 797 710 239 374 ] 10 [ 374 423 605 238 375 238 334 462 ] 18 26 462 27 28 238
|
||||||
|
29 31 605 32 [ 344 748 684 560 695 739 563 511 729 793
|
||||||
|
318 312 666 526 896 758 772 544 772 628
|
||||||
|
465 607 753 711 972 647 620 607 374 333
|
||||||
|
374 606 500 239 417 503 427 529 415 264
|
||||||
|
444 518 241 230 495 228 793 527 524 ] 81 [ 524 504 338 336 277 517 450 652 466 452
|
||||||
|
407 370 258 370 605 ] ]
|
||||||
|
>> ] /Encoding /UniGB-UCS2-H /Name /F2 /Subtype /Type0 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 8 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/Author (\(anonymous\)) /CreationDate (D:20251212050229+08'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20251212050229+08'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Count 2 /Kids [ 4 0 R 5 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3406
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb!#]CKK7]')eD/U!9*!8-V3TOBOQqSRaKg!b;ssY_ce`Yqu0oEsX+Rn=&5u<O]Rd9-D8Xpoju7[a^B'>?/-RP(B8JM/3,F#[XrlT3o]*Wh;K^A694lp7("7p4MB1dZ"\$[7E2L,D]i4e$4ukNuloKTXus-s$%AcTJ^;hblY"p8:.:#KtN1=]S!:EC/WW.5^RJ1l.dsm7\iY4mWp@9)5g)`mS?W1p0Q*p)CuS8PI(Ypga9:,[CS)Sq"=_\A-;$d@:4T.B+Y%J%OMI\6sS259cRU4ko@es'OPs*&UXo[Eg;&Nf`QVZpp.[ORGFA-RNYM_]G^h"#]$<2)O1Sq]#Y'e!\1FhAHX3<5f;:^+0kH\DPo3[[8qXR$J"ge1K%SIlZ)\7&,?q2gSn$?A#a#2+]XZG<SU3S&JoBMUIfS:bgK*+djNdWbb).9^)8L6Dgt<cL^rVmH$BPL'Wau5'2"a/X<O2E\0G%NPMTp?S$N!=#,-17VP?sh$a$.>^`A-SV&X<K8kSq.B95s4R]/fB!_-&JT21S&N+W]`KSi^1A/"Z&(s5I@q=:0<7s#scBt0C3O*BkPZ5-/mBJN=7hXE"QoL\WGA/VhFauH71VF,EHP9-1coZ9kFRuuOm5KLnTh$n(*Sabd4<(fTf_l-3E!Ll6L;)(lB2d]OQDY.X_q%kV&Z?$:2a71B\*XhPa#u>,&Lel>Xir#.o$`lcP.()gJNi]k"k[1]fP0.cfYFdRL4d&$9V/9nRb8#Up`&*ZSU(8M=e>DEg'4GKTW'@E%iF@p&N-OM\$!]`I01p"2[Ok70&FtoP9"R8=oIN#Ws+a#V#8@:d\`l.bQDS'$?hq!JFp2Qd&d0M#2/Nmk[pA#n/0d2ibRYoKgZX"sldG#sFEZ2Ga57<SPb30<2(:d$T-)FZ2(P'9a3#@#.\%VF%?dO,aI/)g)loX)B:&4o*UL=JiKL'`&b#C9BnG2fCj!b364]:][WF/P;LF*M21/$[)CE3Vf`DYN.(am<PrLg3/:d)2ZguKc%U)a<:6=5^(LCM8)P"lD5ZTDeBUnFNmC])`,bEH+R$]\Rm:nhOGFVi+'a+bEp!@Ntls[sOkZB+F@9s\O/]MiG3":G>8Nf\:OXS)<U\j:bG=LkX6<0cuEAbk:H8a]A/D*&Hn3UU(3EONL+lu`c1t=E"7eLT5?$WXo8'0mWHfAN+>lYUNhO,<QhmnD::%f=5-$J53a]Yq@R>+kZ?<p=T(HlqJ?GhL!8T6)^BCrIRG5Ik30Y+$;n6[4!D:7c,LH#sKk">?LBT5_roJ;ClB49g7JP@F;a`0_t_d$dRn?IJg:/PSRgMHhhI.Z5^CN'Gp?Y-MB,_;?]2>n>_"hMoHNYg?I6hT]l\L:C@L)Z#[B*n588^@-KL<mJZH3>6DqoCT1Yc>[lmcD@QLWA$JE?R>UZ'1-=P)-tK/EjY!dfKV&LX.X2XjJs]jNTs_Ysa2NIL7d^T.<4ei(!;^K%:be$u55b"QObY"%'O9)tR`uLdoCXj,(8NLb)q+ljn._Bud!"LQ`iZk1G&)F<ZlHa2p;J"7*6('_FC?<+HYGK::q(?SRam_&U5n.9dcC&5QJ&%`MX/s.0DI2N[lhc[E*\4KSgDBG+O@S?Mr`G&#W=eu+UREdmQe[,>Yjd#6-0MVmmF\gP*U'V?qm2u1<)lV,bT\MBn]3#*%p"3+9caGs\"76hin9((+"H8a^L3ES;;irk1oH"?qU'OP54Zd-l5S#e_s2fa^2*FQEu0Ln^-S_([Hec*?.M%(.<dYR;@AdDFp*-i#a0(s5ee2k8,s0*Q*5>7\4PAU`K8+BreS)KbjX:Z>M*paA%LhnPR4MJt4LkEV/O<#E0Q2"iH9e?ZR3_&eKobbnS8hs[c?%4ps!ZmS.BQ;/Q^-Y6uqV9b/(0/EghUr$u!2Y<.=0n%)V@Jo;OM-1V.&7O"Kk>o_*)!^k^Bn#^"eaoj#7<+)\dGGDmK;t:Hgj(;W2%h=bD@Fk!sNO,p#.VJR@Y&Rr57L6ZUpd!gU:a_B!5SWNq3WF<@;?o@Lb.\#_4as1D*h.3-;kiS?%<j`'o3Q\I6$QNJ\Mnh/oe,X"@C9#edWnouW@0VfVcQU7=uM-Hisan'ej_7[>2PC;fAeXTknM2IHm8BKZI@'U%kPc)n[eM`8^qP:pF8Tbg(6b8,_r=^_,Bs3-9F9BsJ+H+2D4o6Zi%hl:pEa!P^,FX$G2Z[!*DMsY?)kH6i`q4*]#onK(t8Tp(IE$OA-l[gUUk^kY?(WZoE[#L\5$h,K$43OSn-630,dF#c@/tb+L>m!2n*Rr&I7Mku9(K`2FAE0r)j=gSd`,"kn`[`0Hb>-Q,gBdBII0bTK:ET!G[b=uXL;RR.jRPj.HY"ZU'S#pE7V<]R'tC:OQ\1XWlDnDLreo^'clB<N47]JE+WE;@ld^t@b&FZfGH=Q^,R-id(V_PtC<2huNTrur$6.ZK]=MoUXT_5?$]uA\D6%#aRS_]jNOS^tTa]E])sQ%C%I5ktdq4NL25quJ\_lQWH0N*9g$YGU>&N;GDtC*_phhX"Wt8UNDNi8pdP^1rn<)j"Fc`@ea7C<2p+<6ORNu!ra<22B&`V!!GO/5Z!H-9KMs3lG:i]-kg>GZtHHe2_f*Uq7G-=+7S<l2bh""11>I&`hl,_J_<8BI:q#A_h=0=N4Dd)S:N`i#1nD\ejrObo>C!_SFI9!Kp,];AlKlT+Vkl.r+[;$<4j@SOrHt<nO>MY5J5HTdDe@3lm=knC46V*)<'HP@7U_7fZ),]38OiCo6mcrc0&CFc8[H7"W$+-*BJFd(W]'rL0Rh?!PaEO-"ZF&iS.ec'E/f<8s0GG&Ef&aNm+nRT/43O1t@`Ji7!V.cU+8Al;hA@cN`P=1r\[)5(U\?n*Kk@p$R@9rk3#hpL\`73[A!I(AO^/;,Q/MN)b&qM_9Usa)rJgg![%P\6\nb+Sqp)'[[(RO9J`f1c&D$_#O3n,.^aDg471qn;YXdS;>9+SeKN's&+YMdSkiKUg9YE&1ZB#1tSA2_E*EKXMEk'+fW\?eYdUrFc5$N7#pp0a<5P=DCOHQNldYg*6jn_Rp&:XRpO0L;kBTqHVS*L2+(CJ5,+cN/D[m5I$)b#Ms\2#:q81NJ/E6@WrJ(%p7d*lF6-XKB9?(E_nkj2p.9K^WK-KFja,Scqa_(YPk$%aag/LB1t"Z-<29&1:5RG6&,.D<Cms.&etcCFuY.\uJ?odP=HS$0kM3ROo]c:.GK@Y&5&nm%4Gq_iPhCl(@OQHZ\/&X+luI)ij\)A]1%n(TIX^h`@#jUlah<ZM!mH+.nk[_cJmn`B]tXSf(njN2*/lKpdCjL_@+.r5H-^5&%I^[m/B+$"+8Z'a2,0,,qt[_6?/Tq"61\4>XKk2)>$W1p0(FM(BQh5Lba\!c?[k)FSOe(j0a1f[FOnDJ4D"6S/~>endstream
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 591
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau0?D/[lg%0#*j@0sm/g1'sIEf9\o77.KgDJKc"+0;bjUmZb4""(s:rHIU$(IU)*4q&`X*8C5_jm`qU5*Y0^"i)P&ithj:O;:*1kTRWoS^dPdUK+,I*X4*P&n3DI/gBO?FUo@YpN,.h&8H1eU^P.P-lY\Zm/4!o,!Iff].`O+WAl)1G5B1so&BgnJVg#$`[7q?Jr,$bC2JS],]j$`iX5UtV^Vsmd9-lPO2dX#\/*,L%Do%IKW%`rm#0W^+1o;2rMg'EEY.EH*j@o@4u[==;5>l],[PL=s+`Bn'B^D%,F+rI2B]\gZtU3ol>maN+l4.IWs0'@.rCpJr/5=/J"D*8cA.ld<?+qqi(`:NGkg&Xr?]d59\F/j_TJ)$DG.0jB%T+Q]?.4W.QuTG`e0I4;e1=Q1c)*-<aB"Q.^*[dQ(<E_`.e*J"J4]@FoRiWX%VEmQ#P4@/2,Dh.^&B+g,*D&;HE5@jh$'^C%'+OF[*q3W/0W]X9b`WG,+[!8_4Zk$*p0c1n6dnO;E[u%>\kh(Sg9WakGL:Zd"u]2%d7-F`$b3EPTdNLJ10%T694rY4?[N^Mii;Ec>ZYd/+!K+V6%~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 11
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000073 00000 n
|
||||||
|
0000000114 00000 n
|
||||||
|
0000000221 00000 n
|
||||||
|
0000001154 00000 n
|
||||||
|
0000001357 00000 n
|
||||||
|
0000001561 00000 n
|
||||||
|
0000001629 00000 n
|
||||||
|
0000001912 00000 n
|
||||||
|
0000001977 00000 n
|
||||||
|
0000005474 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<a197145670e5cfe071d19a7922172beb><a197145670e5cfe071d19a7922172beb>]
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
|
||||||
|
/Info 7 0 R
|
||||||
|
/Root 6 0 R
|
||||||
|
/Size 11
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
6156
|
||||||
|
%%EOF
|
||||||
|
|
@ -0,0 +1,127 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /STSong-Light /DescendantFonts [ <<
|
||||||
|
/BaseFont /STSong-Light /CIDSystemInfo <<
|
||||||
|
/Ordering (GB1) /Registry (Adobe) /Supplement 0
|
||||||
|
>> /DW 1000 /FontDescriptor <<
|
||||||
|
/Ascent 752 /CapHeight 737 /Descent -271 /Flags 6 /FontBBox [ -25 -254 1000 880 ] /FontName /STSongStd-Light
|
||||||
|
/ItalicAngle 0 /Leading 148 /MaxWidth 1000 /MissingWidth 500 /StemH 91 /StemV 58
|
||||||
|
/Type /FontDescriptor /XHeight 553
|
||||||
|
>> /Subtype /CIDFontType0 /Type /Font
|
||||||
|
/W [ 1 [ 207 270 342 467 462 797 710 239 374 ] 10 [ 374 423 605 238 375 238 334 462 ] 18 26 462 27 28 238
|
||||||
|
29 31 605 32 [ 344 748 684 560 695 739 563 511 729 793
|
||||||
|
318 312 666 526 896 758 772 544 772 628
|
||||||
|
465 607 753 711 972 647 620 607 374 333
|
||||||
|
374 606 500 239 417 503 427 529 415 264
|
||||||
|
444 518 241 230 495 228 793 527 524 ] 81 [ 524 504 338 336 277 517 450 652 466 452
|
||||||
|
407 370 258 370 605 ] ]
|
||||||
|
>> ] /Encoding /UniGB-UCS2-H /Name /F2 /Subtype /Type0 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 11 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 12 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 9 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Author (\(anonymous\)) /CreationDate (D:20251212050229+08'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20251212050229+08'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Count 3 /Kids [ 4 0 R 5 0 R 6 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2890
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm=CKK7]')eD/U$O=]A;o_r>>/XP2f+Xg-BW.a!ZX%a!4Kci@0-I])<SD(<HY>gb8,=u3"TN/>MZdSEGq,Z,6gB&Y5=ickX@F6HGq*]U@'/`.TTF@:%YagkfY4=B<#RFH")rX=rp>[3'7G`0k]u-O/d]UL6#_:*k#4)Ps<)++qb7W&-@%eN5qGIEC0D-@W^R5`e579hI]*qY8Lj4C",;']$FclYm1;C#C`P$Pp1)a6XZff&1gM*e#:@d<oLA)]sj(nDdt4a$%7)@!<=p,(E"h60+hOi%%fp)TMHIZMg44>]@(Q<!p.\m/RT2+Rm\O0(,1Js$0Y/8Zq@&p.*8<F@_<%2@?BDBDWo/94EC+D@6Kg/NS]9e9I;?Z+KMnCp2gfll:c/^8S1af2t&\NpXf>]G8sJ[nd._FI]JQQ%QSMpSg,lD0&WW*9I`3LR'_ZaH('e;^(qc@R@G#$o^iQZ\TgZh7>_Z=#t)QmbG8bE"4KgS1EfJ0]P+(XKSPSS1q,82cj-%Z"J.o^cN%083bTi*@7qIbI&Ff9M":6CfbLX&O+8qn38p-]@J!B(2^n;%2oh=?H?]?E%^]s8=R=A]j@aHS3J&]m%I(`6DaRXk+ppC^1K]8WZ"`K,@jiSnnN1Q\ljUn,aM[L>+ioW=p`*$ZhR1uN*)`@8n/fHTF:1GsP7X"t#Eng;@F8[2PJS<T2fupVY^q'qhnoPG^a)c#P)IL@prprD>X<oE\_;T&`=VERpNgul]YIaT>-.\8MtorDd;ELs[ZD,=cLiKbT[(ni++?R)#S5U`Jcq67d0AMFcIT;!CRK^t0U7/.-qn\`<3:0NBYa'<U-\9Es&lsaFUZI&Vk*F#_j>$Fo*s$V%I@LOPYr?bFPC.`E-m1N>-GpSl(DX5RU]Ge!lf:`gOcuCV6Kk*=^ZHF^ug;(D"O&TBWb(^+.a'Bk(mDMM[KZJAlD2aFKX=Oc3]$Z(B5tKWNTacOP)N3V,Nm6]U08]MrOn-W4K<5MXEs)"^tKb;)=P(>&5AeIKIP(l?A$gJY(_l<,A,S8h$3;#I0uerZJ`!lJ1U[IVE`q$r>>XA"AYp/^>&f9L(?!r5Ojaj^8U6&2LsJQ6u'`QcR0!T*66<Y@46o>uRKHBJn1C\sR?QeMe=K0'ZX@;I=5D41XU_2OGs6L7<f:3i^JCjR@1F+C^;;FZ9YPVVu"s136,:_?jOu!)WT*(%uXc;g=CL$;+1Wd,8pE^/3_g>]*L%_+Y%p54ETm)8sT+bi.mjVXF6t"R8hpSL8K138K<Ln+#'U=A)ZM:CH#THqL^^U;5>9+#dWF_lFSU1=%eLgK^n-6G+DQ9U[]sHTc5hV@"!N;o?a_7nM4:<C3EN*p1tY49L$?Q)(g^*kuBC$$Y<oEqTSL+Er:i#P<t\R<"^+@4HE[H%*DqU1jsp^>1s.,`=pb>`ip"0&7O<JC"Qr'O(##3XuRm.@To5QF;V/2k"uC.RfJJ6gVe$pW$r0."?i83+UtfbDG=,?J9X,Y9hUZJaN4VWjC^MnZR1Ti`12!<[Oq.@$l!m3c.US3;c`1@<f)&89\B_<]49JL*'d)45P,rpAFB-JpJeUru4r=?QPi4=h@K#)LuYR\TCH!O3q:7W99>bMHCTU9jXRJI;jN'",4SF5LH_omA3TL1.J%df+o,43Q9Jc0#I%?0#UW8nFe=\8$G1NTO[ooAebSWM*4dN4$\6"l^*9Q+!/I[#jc-`PeP#E^7oW;&)q'VH\d?5Ck70=$8&BNU3I%Y;3GW?!nA"kg@iTLU$XV+Q,eOY_kH^jHWkVG:4)/:2fK]')N*mSF5h=/iZ[FVnr.AnBb80Oot@8:g+_Iq6K#roK]#KJcY;5FA89Z.mI?^s5\6mkF1klAC/_*;_rp(K(,*;k>H!qd:5-@,6?nWD@0H..3H:K>EsG@o-^Es*^].C)6;]jF.]?r^Ik.&kY1e.m>j,0mIe\l,apDnLCI\#0enWB:.];Dj9K)SkI561nIYM9BIBCG!JcWDJ=uTr!#RenECt:P56763Y6R^bm_>I,U-^9XN8a:Xt_.8r&+F9@rUTAc?b5WSn)+ou(+=4"!/&H20j?L<@>`CLVXg8&;Uh_Tm*I%DY^dpGuVDf`ZMTSq<jQWu?])B;"6/ODqO<ohD'1Ld5qS+'0#hMIC]2t=r=a!+<>o24M(F./56?^AfUtQKamuk3R:"W*l%4MJDEl6#8olAbR=4hULIo?@NBk14(Pb'Lp;!off6:H#M0)MtJ?`ne!$BqM9&eOhp=#H<]ChnL_,rKan`OVqA*pbn"@[L@uTDI%_d/'j8L=Ui]NZ4lMDC'6Bi7^KPfGLl%!t-VN/=9N0q"L$N:E>jI]0JjYVAn\:.bh+mID]3plSEPf:KVH8EcYTiq>X"/(lA$_#aXn/"jAUo?0&2=`\f*el2S%H:MnA[gNod,dMAnE'5_gF5(n@GmQ<nC0kZE8B8,[de^37Flnpg;DbaW?T=<0[rEhh61^Q\T8g&3][9[##,tJ)*!e1'+&LJELK$'qI;>]WFVMF5oQ;&"W`BpqR\=KD#RF"u0kD;HArU8)(:fV5B6aac4BS=!Z&ba:<nFcW),q,MCJ93En]/0BUR'cMdNDGi8=G]%?l<I40P%GIU(6Dc5];<A]FBB%-O3,cAkg!sAbo35D$$`A^-08$Y$/__)+.GEL5=tEb4NrLr7QKK1g,B*aeH&AINB]s+NP,B=6/J()YXA+p5&@a?pZ3/'\aprg0-pe+CJbA"+Aja,DZG380]`aOl2>+s@$+kH[Wquk&hNs16":PnAEE6*T:a,*V(UFJ_9hL$W(WD!YD!*4T2=Yj!PRupKN'?hTfU.;<:7RYhA>4o79s%nm,c>XkKX78<7dGn=\\@.W9n/4Hf*(LI$=F?A&dT8brA8pMi69PdGI)'gRJ~>endstream
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3272
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau0Fq,\NW&cUU9Kf4c$i5*ca9>iiVI>5]q\rZqWAq`5jRG6@"ZXVV&4]U#qh(t2u["1?`BZ0O?oi9OD<B]IZ#!\W\7i.H5C8\AM`[b:n3rKCeM5k[S=5J+,?,,BJUoGc1f1`;UX\P['*9P)tKNk-MXc`r9\[7V)Y<l=)%UQu?4DY*-?bdGO_@:?Z`=9i%cdbt63D17MkG.qA7Ok2t:8JZrQ-O*?Z[`[ri+JKXg*W,j.S;RHJ<F=@Lb1+Ehmf1;PI'D5aMc;NSVqN>]F;bj.qe?O[aY%jWF-Kjc%fUTX?%5Z;Q8Uc;SW:`fYkUa46t-Mg[O$hh<h(;^cWe%hX4-"f2tBGoDjV;R*"I@\$'ahDL\,V!m)'%\LrTO<3'HC,7mC+!sXCs?/Bjn$817<G<fj7*A.u>J_UU?k@ogr'VPR+2-t$B8arJDnp:)->E(>m_H6tWao8Io"ITLlY[Qj`i<MO_G[]RVFDl,:["K(tQK+r$12Kb(QGQ_7]Z0%iD>bmu"uh-*YcNrU7'Oj'gd0lTlisS4PR>YRXM7F]0O5/&>AV"=hIHg18$WD]P8\GIh7)Gi.*b%(j>TO'X!I_r^Jc9U,=1A<\LhbQRrXE@QlS"Z2jK9.;^To2Uch,R#)e6jc9.1(l$O(\[k7FH0BrBd9NV*>>Wm"AJqXaREc>J+*?[r:nB0eN5N67LJ,=@/,UJ4*?`h4$R_gECJQ$eaM_'GqL5e+M]1Jj<:$%]gh!m-f@3#Qu220RgTb!k9[,G$^h*/sNpF)AaEljA,rrtsN1jA$QA)`C4ndEM=rZG;jpo\ZU&6rqT1!'d&)b(s6o/I8V"[NMJqTJifbX<P77bISmH(=!YHiNBJ;ro@TV]nqD"(;DTPPD!-=M'1j@Lon(`#p<pL&agSqkD&t3<\%-"YT&a%eqIA4K/H$n7dV3<[E9K-taC7_LQ9^lo'H?G"h1[OXigE`#W80Zq/YeE]E'1q@`V3HY3$R>*+#*G%:V+f;6+<D0p?iqK1UX`bdJcJR9YDYeB..KQ*+-BE_2YXj=N@@1*&O]..jBQ/`@9TSnlPDeB5WRDdTCXW2"'_LNHHB#:h;au9kK!#-"BJm\H.!DPO:"<W['elio>nSI/*1-8V)/[q7YT#rdUPGbj'_9GbW]C66tp%Qi^$\fNAiO+?T`)9.5[:-jlZeI?nDGMn)?jJl\`4XK$C]/o]k!C*A;Mu]j16I9I7!TOqP+2+3#lK,*7[1*+(t(MOCKX9#J:$SqM;0n<Sj_5Wjb>=]Opu,dBLi\bMu"&`(?huXr_K+XRR%oe:MmIM)$s*3pAi%0O&?Ks%S&p=3B%i)W]2:K=<l<Yd?QslM3LQ_O_%r%P?WQb17qq0=>[)%:;,aMHLaGg9,1JASX*u^J5a?RaeDQuNcIl--ZGSP!VTN8+aSm#X:2uKbd8C$4gd'X4OZ\F,9Qc@0+\_^'.A8W%NZtm!uh(2T>kSe7V:(<-;l?s*emRJ!KVmWYPl9Wi!Rd'?SKB$='RkBLinHo-2D"m86H_a_bpUsmr:YV(S'IrAII4.6,NYDTCPsV*pTE^"g<>V3P/ca;TGemiquEee2!_%f/.Fhh,B4&WJT%tRK$eP0<f&]V4aF8[np6V1TS1m:JA1/VpNY"cX3uYEWNe8.i5D7s,?epQerstV&1aC`^5RTHkgEubdZq%GeDC+2+0l<X9O%OKM^%nBads8-%N9Q"[Qi7#!=j;OL[Uk."o!bFe$pE//L9/1bFXsrtLCJq-c=N<D'N\^>JF:VRK6X3mHc60tn#;qIh0U1:a@$>Rqq+a7f!hSq"O2P$Z2P<O`HN72gQg!I7+j6Sh%"=YBe&Z^*Lc@Ko/Y](LL$H\6p76nU.ha31ffd*QuXkl8@C<0V50U5lt@XT+P8`6i7?irdTS,e99%TEhRBW<k,[;+YCVSUY+8T64.&nf`JOh;CKqBlY*I]lB4AHt%srTd(QGjVa\U_O'e_%ZA9m?;IH"HtjR8d!R.&j(2,@>5#;Z--VZ@_+2[dEbS'KeEi/kK0'h/1dO1bb(gkU9Z_#NIT4U)8uOH%`TR`BGfh6]%G#n?:CinR/3jMr4UcAr-('SoU23stB*K)298p:?/XeNH0]9KH<A1Nbn`)3-RX!M#J=7B6A.>FWULQK#73,8VjYJ4o/gh,t`f<D7gL^iLB@4/D4^Gm>K"I-)fIW.`&UaY$_$>n-=:`5s+s&#Kg=\<&Urt@C@?s`"%Y+0mruf\"oqfZ?mk-rT%*^)U<Yg'Bo+K0-A.F;?#qdUK#!-mcj3Q7%9&c8^T/^^oL]5rh`-q3Pf(ULkWgEc8GY?hp;#]o+9+MeJRnMj@*Hc:JnAQ]KVaLn7JLHJ`kXSmP@*H&$9CYg%Iu+neec<YD<sI4rWo:6.$g1LnUQ_=[o:th*/fpZSZAedFd>@V;-bL_-5[Sf@Fg2E=).m;@,>1V1'CaQCjr`Lg"((g,T#ceJJPDhUV!4#b5tpJ[6tajeaD-!a/ul<5i0a^@5"N@-eMBpD,XrnlQ]]CT\N.QKY>9YC`7)q&9,Wq_G9AN(p<Z]:1*6AVljun:T%7%HSJY9UmtcY&@DHqGU3Mj.P<2iG`Ip55eMZgGnT<D(#Q@>OK_@H^#bfc#Uk<1XO^RDk$3A0oaQCC$O]%+D\Fh_[3QC>YrJm4,LNmj]&GK"6%14e&ei:X+6ki#;'9b'Vg?U?7O@9P8U4ka-Pd*h:9oiSWSM!=Cb6d,WcF[>Bf-@k3J&&]-;LRuhq-u]<_Bb+>UPB<U,u,1X'b:V)am<9sC(H7t4jB80J'5[iL/NM.m,e0rU])_Q'`D%1VNe:>fW6V,2/]rp$haW&9P<I/5'lE4e$T@5(r"l-%s%E.1`aluWLa6S:\UiaSj>AKJ;.0O8&oI(%!Z[6;VlgWE-(<#(dbdO&^KD88?/`ihc!hCOP5"]+\h37]Z;Qq`Ou@Z0RWm4FFtNiMmM9I=*ILr0h&?PE\AnCI_I^/@9T[3U*8#=GO@mn'IjaaCFEbqD.YH+MiiJ'4m^RY/$Z#Hf`%m(aBEMg)ZR'oltOf.7R=?=jfo3DC`)Zc!7'FR&a*ZoAl!o4ISTDpK>=5X@e+'d:l4SZ%a%\p0/!.tLa!XKi.P@a`Q2$OBf/7nU%NKfn#&-["t5"e?6"jMk/m+B"(BCOc\8V?cT1so[?#+9[_Zt6k;SL_%DD7Y5<Wps8bQjHC*KY-5_ek0c;BQ'Sr"28^BP1%3$h0cDg$Cb^8q4F2?432N%V6WMocb%85+Zc,-g9A@mZAiO&\lfI#)\g6C4Zl-.8/uPumthn"u!j~>endstream
|
||||||
|
endobj
|
||||||
|
12 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1235
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau0BBlaqX&H2$(0fc0Lb$Im<>[!:i+Gl:;"gX0-2Y!"P,RY3g_6JhN#4^Gn4Y*XNb77a1-tun4bdRA]Ibd/_1d7.?s%'+r$ao[5.:Q:>;e.\bMMGr[=Sd5u-7`pXF-QQ,KofpoBYo+@S?XQY-c75iTusQ;`=[L'b"J)\nB0j5e69&5;.<')\"Y3*K[HQ.S:;-YTiNun4hY(%ZXTFA?$W./?MU8m>PDH7FuTnjJ=AipnnhC>:rOFUfZ*)8OPXP7l\9r&IY"2-!Ec#1cK='$)DXTi@bK"g_Ga@R-Q3n%<\@]32\E,+=;9HPa:8H%r,P"?f'i%XL`\V[EUMua[B:9m@2>=s7OEdL+)X^(kC`H$Z)CbS).Z<>0;C8!'5sKe]$Q;N.PmGL@1,jBUUECb^l::>`H/'tNHIr-UKjt?Lf6N@S&DcgVBr,:jG1GAZuf4l>6D,$MZh6[^gc_ig"6I3mNH&FdHE8h)6C5C7bi:Y$M[I/KXq.a8XX0R'N.Q!9]D-U,D-&"j"4>ER*6VaqL,"n;^25G:Xk)V3k1/T,]7Z(2hceWr3g-E%j<+DRU;u*T<)inQ0c".Ec3"<%n5U#CP+Qj`&P6i&Yu+h.<l-=Ql>1E(Q$G_cu&)'+IU&!LQR5">%QMS?f<Ap&XU+kV`oDGj1Pq/iRC;bX&F?$!?Un:="gsU?k`h=6&6J.89igRmC"7h*=EO9iX"DnI@^P-2_sE]DsTQg@B0Q=8CC$gkp'S$A!Eeq)Ds*h?*E]Vc\mZl2Ta<d.&?YB_S`0mr5#4),aBWdQHEf;FAO;&N`=PQ+/NZ*s6TG<Rfap`2X6H3D`u'(coI'LSu,\WO\%Fg>.o0jBtbKq+VL\G'V8JIJtj_afX)kd'(c"tNS1hOfV0M#*D5ed`6[PBeX*m>V);XYj(lHCONZsY9bLk/mooh<WCtOP9H2C;li:#8fR;E-Ih`7%\sn$$V+hXup.E$(r(2*:0cim#*)!Y1Sm.>jIK%\ROt4WH_m/"R(EM*me)8I5SDVs4XL$H/s+*gg%D9TD*@`*MUMT]6HElY.Z#'Hs+C79qH/C,rKVcHoceiXeJ66>u+]\D?P5:WFfh7ZG=;k$c97J+a8kO.;P9]0gW3ED=P#t0HO9!RZT4@6MXF5h*%.n!U?(6)YA`loprnulsB+f?-Mp"9RZ=?ZAVK?51-b(lQICZQ3VpA:3k^8HDHo]fUR@07,$9Y";3@5t'+)e#noMoV*V,-=;_>=~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 13
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000073 00000 n
|
||||||
|
0000000114 00000 n
|
||||||
|
0000000221 00000 n
|
||||||
|
0000001154 00000 n
|
||||||
|
0000001358 00000 n
|
||||||
|
0000001562 00000 n
|
||||||
|
0000001766 00000 n
|
||||||
|
0000001834 00000 n
|
||||||
|
0000002117 00000 n
|
||||||
|
0000002188 00000 n
|
||||||
|
0000005170 00000 n
|
||||||
|
0000008534 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<b8da1116033bb64258f9f4b4800843be><b8da1116033bb64258f9f4b4800843be>]
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
|
||||||
|
/Info 8 0 R
|
||||||
|
/Root 7 0 R
|
||||||
|
/Size 13
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
9861
|
||||||
|
%%EOF
|
||||||
|
|
@ -0,0 +1,146 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /STSong-Light /DescendantFonts [ <<
|
||||||
|
/BaseFont /STSong-Light /CIDSystemInfo <<
|
||||||
|
/Ordering (GB1) /Registry (Adobe) /Supplement 0
|
||||||
|
>> /DW 1000 /FontDescriptor <<
|
||||||
|
/Ascent 752 /CapHeight 737 /Descent -271 /Flags 6 /FontBBox [ -25 -254 1000 880 ] /FontName /STSongStd-Light
|
||||||
|
/ItalicAngle 0 /Leading 148 /MaxWidth 1000 /MissingWidth 500 /StemH 91 /StemV 58
|
||||||
|
/Type /FontDescriptor /XHeight 553
|
||||||
|
>> /Subtype /CIDFontType0 /Type /Font
|
||||||
|
/W [ 1 [ 207 270 342 467 462 797 710 239 374 ] 10 [ 374 423 605 238 375 238 334 462 ] 18 26 462 27 28 238
|
||||||
|
29 31 605 32 [ 344 748 684 560 695 739 563 511 729 793
|
||||||
|
318 312 666 526 896 758 772 544 772 628
|
||||||
|
465 607 753 711 972 647 620 607 374 333
|
||||||
|
374 606 500 239 417 503 427 529 415 264
|
||||||
|
444 518 241 230 495 228 793 527 524 ] 81 [ 524 504 338 336 277 517 450 652 466 452
|
||||||
|
407 370 258 370 605 ] ]
|
||||||
|
>> ] /Encoding /UniGB-UCS2-H /Name /F2 /Subtype /Type0 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 11 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 10 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 12 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 10 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 13 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 10 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 14 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 10 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 10 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Author (\(anonymous\)) /CreationDate (D:20251212050229+08'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20251212050229+08'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Count 4 /Kids [ 4 0 R 5 0 R 6 0 R 7 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3281
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm=q,c<A')k%DKeftcO>WaC8Sp7dhG!L]YnLp]S-3.4Rj5AZi=PEmR(n'LW\6rP^tJ2Wq,"-'cEFr7Gei6mdrfjK">;gPi[Z'h&Te3XO2<=/]F.b$:QD&dZSJP90lJ=s5UdaH`Afsb[mSI!>99#9:PMY1-?n2qJE.=/+T`87*^\cpK(4ro3\KWD)7qts$-=q7_k0KX<SYD0H'U1NbQj^;T^rT1(*nFM.Julf>)KPU,c(+o"bO8g?re!*hm+9HRUKH4bYXuI,%jCEmMmY!"C@n90Y@O5q9-GbmKU@_nZmZ]m_6kmb]t>GH*mm?7MI0YdAZ\&Ota?F"04g021eXmP"QOCGSTb96X3lA671=3jRVKEoh6_!AsEEH'tGHfoLh)L%fC/j,#3\2ie"cYLGu[a2L+D7edM5>*QaBLR8fY-)K#SC/HYlT[PP@82KXdX1NOZ$:of$lUDUA&$8l+X'\MiA%jS1:b^ZFdV_AHer^](O]@p>U[_s`PK`qf8L"e/B0md$Y\043W8$XlSESPL@*]s%`f)**f_-K,9>\$_X;s5=n0WE+Cl3h1l5B8SWa7je>9p@Y2blq2L9&lYo6=!HBj]#*N_idI_/t8KMAemUo9t?EEM1dAMj<,+-]J]Qqe<Ol!!tTIKj:#@0OG%VdMp_E*mq%[HQ*"'!RCKiVCKo_apjCOjP883HJ-5ZT%^G/X$s`5<Vl6)YK<jAVp-dCA+lfi-%"H4\DS\KM;U[U`M@M6ol4>^Y5[+ZIk5@t%4s<5-0S]B'a=>:X[:'NLOn)`Gp_2d`$%U>Tf&/\ahP8F'I)r(Dn@][i@"m>!WAP70>H_53rOgsl8Old&#rQW$Y+uG?.Fqk$[.j]u8+=P2+jSu9TT7cVU&]2/obC/ZQEpu9++S=@QHc&="3LgYX>F`])_S6;*IC(TUC)PnrSc2?=$W:i8md`nql#>F*POuU?K$r"`+6q'q"+m,:<50An==`?lP8KSMWl9<]SUMgK2cGjKnq.n^7bb<&&er$.JVIF$63;L8,/'A'`u:@ote]#mH5QFJd5@g^QPBG."*%OV8R>_%/QVMRp?$%7#.;3c.OR"P.IG7DZ6fN@\2%$*4u8S0rEkE\<SQMScm#0j6e?[YWZ/:D($R6m)r[]0*?=1rG^Vkoh\TE_.3T2,<:%qkh'WZ(;o!_=SF4\$\=il-f?'Ge`i8g[t'diO9-]^7\!mFOs-&t3rR\0"Y(h0$P/l;E,R+VGZ:H\7gLi4)KS2IN711[F1M(-ndFk1.5nO3]61UfnGSs8b-(J0#c%_h8J).Gha:l27a1$>QTCG.-:-eOn7=F*2tP2>Ap("V]a1VAPuR"><=);Hib_MGqrICHD*s2"PM>h32g8!>/)_@ajDUhI.F&'*L"jc*-<6^1:hA&J'6mWRH.WI1g3?bUcC'k@$s!dP(Ec#*$]AJ9i%\Lc::8F+;fV_W5Ze%UI"W6[e$#"1<16q9fY%T>``kTjNp<800Pn2]H/-OtX=l=RI?qU`])Z&MW#He6a1\Mnq_=QjqC&?6D8S?Z#7ch+$4(Y2r[)J#Dm;[5j*M.bbm!ALPQVpNUXo?%H%63E^0-!SgUH)@/`(,.>bs:se!`Cc@csL5ZOuU!OFh/L5MYZQS<EqWWnAFM;RbTSaXRGFOB'P#Z*)t&)DHm9OU)Vs7()T[mM>^GY:K881(DV<CBX0pTR2NVV1FaXm,E!jBiKM*'hZ%@pXgeR%iRpe#j\*K)d!30A%(9flMi;QN\tX*$$.@4Qf*S=aP4PYiNF;hM'c(Ah44/Sf'\0bm9`0LK:)!50s]i;=T8ee.TV?4K!P3\7KPd@()p7RGG<#:L8AX'<78F+[LT.$llmY0if7\aL[_#F=cc>Q<5$$o=m4G0naSK!"Ac9r*s'<m?7I[0K4!>ba@(/4Tp@.<GBJY$&]e4NC_@*p`72jgEFA&=#=q`E/=lfMebo\el368$oKr;4Oto,1f0LB7d#1:G5-i`h5u(3Y#]KF:I!2_eg'-F#Lb8gLRrA9MG(kh/BPrRH,?akti]BE3N2o6aRIHF+P@`@a1ZXlJ89_G0Vs*C7#*pM^$_X\R"9J7Z5L?(sP^k1OE%^J,',89Y>B!C*7;@_66T.SL7@h$uCo@)l^pD0(<lNYVVT[PIB*qoI.644uiZOu_kE`h\,#XP%j`]s382:&_gNSm2/b+6K.=B,ic/&^6)E6d=l`F;^K7cfj)U[HlAKaaV0+\AG<kWkRruQPEGpK!>`!K4De)BJ+roj4r"kAu5>(1nKd`3BpP)2T-@QL/u6));nnc5FM9iXf5KgR(K3M8B!/ar5;hmQrt2$+qk@,t`aE&>/o/i-9hS1$Zln[k:l'5=S'&]/10',KN;qEST;6J<51!'PF$U2g>=_X"$oL^cGf($5[&oY.fs]OWOurDk/?,A6to'G$3CA>iAB=m[qi#*WdZ+"C'%Arn5DeYW0h:kgV6?YmMN]XsCmB*1ZNmD9HUG[dmZHI+!')+P./+@?uZ9R6kQGd'>_n!,*J8)9.)7\`t7WDuhU9BpFrpWgD7ZaQ!(<28p/`p[Ka]R_BN%k.rO5XIlMU%*AkdqNqsK]D_pQm@[Vq'9%H>O[iXWGqG.&_9pMG"olCGZ%6=JO)C&<uN/k'JM*teM-qpnC=Y9SW#)T/W#-7V/&knNc.orZAZliMj_)NQYhi(mm>8VoO/0;</Zt`5;SJls.q/?..$21GTZcYC>[qT"o@!L07+qm4Y/lRd,Rd/^C1Q*[cS_`Ok_:s+&pW5cCM6Dc:7/VBFC?l-=6tn`a`K>UKg6L^6[/r?VjK.)REm6g8=/FC_Sm(l)_";RHSKmksN9kZQ'8G*2hX6V(\kh=.l`4o`THCao'_Meh#tITcd68D#$O#jqORU@moNchnS`(''ZX5F6%[1ofZ/8`)_,=oQ0"GNtPC[#;ir'7q[OIl6^2nJf%.2KsBntFj0&5Ik7%#1TL6u9p.(oo/"H0*&EU:ePqVrJ4\3Ll9Btd5C(<b]1e`g^/>8,,k1Tn+nk[&SaV[eC-b:"W$kYF-$cg.%soib>NlLFO`/l_o_N80NsuWZckod(@?+BM($8Z+^:Vh[_8.HW:au(qg`Qh2h"$\>#H-1cBL;a#HaYm0HeG]mpsQ^X&@,oo%=1Z;V]9;FRT);kS6%P&@@@0i3d.@GLo5OJ0i%?uB\7U9qMjdePdpWdV``^)W6b7/C%_ah7s-;t*`?07V8t$N+=FI_9=Mt.Vo=>Pl_h^iR4NYJ8+Jdinb%rh"-c0td#$Xp>FB&j*]`ML'<8OOabqsaH\PqEPCEQQboZ9~>endstream
|
||||||
|
endobj
|
||||||
|
12 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3617
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau0FCKD3A')g+ZBP3Vel9LQ:b,XU64-%UB3mqpMQeH=`%4WKQ!\0)BI3KjW<LI.C[YON(eW7kqb_V4fpI8cd#(qDqY'VOU`e.]0jUlEMd23o]\8&%`n6+etiPO7L[k1V29R'4>)JPKq;oUS;DP:.b+I0[Wfg8Uobl;mB$SVq^""0)e#n/:%/Me`6(k'%[HCkSjG#&#=00GS[j[/6;_OocGH&(Ji^:HJO)/&.%?>ojqhkYLjH]-D3cCMuE9k/Da%I2Kf=gKH=4K18sB>21jUSRf/X"JJ0<#]Gqo6gSLq`:'KIXZ8k0kS,A`aH+-K29-QNSnRmg@jk0GQ%Hb$Zl]"6-p&Y28K=SRp64Vb40@u+2?sCP7I-Emp)Z_&)HcX>Uka-7IN"XTo8!]/:_+0f7OC>QZf$9ZA%G62,Xgk5\+'u`?D[Fqb"@5CbN[HkU*!'>+35\GRsh;5q\AN/QV3qD#QM&Soe?O\HC.:d(=s4AfS>i-HL;7ZB'Y3Yn=X"6+Il54[.Sp=U:^^@#bj^#:mX=NOA1;EoGEdc!1TIO-8bW+^X4V5/rY_]ltQ(RWoG*8=G8PErbObj&FAF,e:Ai=.0m5L@.=Q6M&,V,>BQK@sG&%TBeL5e$j!/o`fmr]t4qkWJZD/o:6=JY_fEi\P,p8:XD7L4;n&5D^<kKl5mkBgETflN>!&!n/XY]Ng_31Qtes8LtW9d>5/:\c*5J<T4=F8LUFsUE62H(&7Ok]jA8t?OYmF)I03_"d+*F]>al_'G1U\5Q@ggZp,]j;`R^8oM9es2#a@XDTe$(Rm,KG8h^*#JQ<m2-<+./mgN]?2(KO4Kapgr`R3imKD'*oE^XFEd.b:BA*5)<-_<+Y=L)P,KR>tn@=jQiQlp$qtT`3mB3J=DUdkP"E-2I$m(RfoQKIS<UG#MFdJD>89!2brf-F_$HOaHRClN]&F2HV#07bR#DkO$&Dkn(P22LHnigKi[9E&j6%)_JYKHe?A$-&=arobN+/i&H<kaoaC'd2SfMf:s0Vj]N.9!;D!DVtf)[CTsEl?Qs^s+ArV=+HaqUA4#a-4;Zu:cci3p;.]Ya=EF6=fVd0>@uA2bF&p1?h%HjdS<_5U\09C0_`SZ"A,fooOhu`,VC-VP!T2C%01fB^_+c),@K>AQa'*"`%HEKcYho?en`Dj6A*6^Jmku0Ae$RKX%^J#H,;0@k?0$*4/7'_J$pFHY!q,oGTb%,X6.=(;2IkQb)*UN[2MFk2"M-"G$u6br^csD"Xt7C)4Am!]QjbgV.7W!FcMYU3`_ODt3_TnJVoGL2FWM,aU4gm[?S9\X<%<j0>hbcG+`K!Q&d_9r>`J`aA7MuK_@1D:"VQY+@#XWb?PCk(AW"6Kh4=?&(BjY)/lV&\F;uIF1fBG0NU@rU<e[n;N-d$4B$RbZFOHD1P4a)H\ShIn`D_nt(1`^4rL,X5GSS>"RL,<l>a):X9=+2%P@kU#na$R>8Pm]@!gcWPe]W6gC:X4#`%A%<VrPc$fP6u,%$oHi(^,%C8PL'6Mhb13N6`o`+:ggD/"4[\ql!1I+e$i*B1_5)bj^ojkA]%l,qup"@a"(M9%([L?NGnE^-2<H^s_68`KcPj-3ZKs2IT&FJ_YsnomJ.C,6b)!%dlEX5q#^3qaiY^i?2?o+L@T<!0!#<S)d#Nda3e^3D385["dX!YF9[-@%/<nq(*PpL6khgTb?a[0TS6Z?T/N%(XbW3T:b2Y:nkgB<u[^Vd_hp'8e7cc*:a\E73,).=Bn9-`n,7`Ko&?*.!E"9TKAFTK#S.`,imN_mr1s*(^.h;p7h.ffrpZMRp_@*9"qa]o'13"-#(%&"3pLQeV$b,#[*OSc@`Z/9Te<m%6.m5K#TU$^kg'#HLQFr%e3nDm@!%U8RQ!='5g-0l"Vr;&glD5-'[%2leE^H$grr$`m!P>MVLUpi!t:i</)aAB>DcKY)`cr`@bI$+Z<J%B16atY\!hhlTM&#>iMu+:oYITV$U-TFelIHe@N2!]66l,*i7-_.0>Yc,]aB^EtY;.\d<hhV\bb4^;15rjK1ERZZ882M8b$<82/prmHVPGoa]ooWL-]GP-959U-p^D8KoSL\eu.0P*%Ffc%L([SX56j(GLQU5/cC<JqQp.CY.iNJaGWG0?,.NKT[rX9O/2koV:'L\oQk/AQ)ER*ip&;#VfUe[7fQ2mgskJ36Dr8YV`K>=oh=j%=XPs&Z2pArUpEr<NTWuJO6f*+h3`Z04thgksW;I?GWp<!_%IJ[1_^#[XY,GS'ZA-TaPYu)r.f`r3hACgR*s:ZN\G:ed5UtDh6TY2c4"IUnS0@V,;pUiNjif<q#)PWYIqG&VAK_?APR[hoO!EUtK%Q)s#(?1FcBYHP7fkU_3pBVOpnkI//Sd:!WU-fjPZ\Lq8*/fPP<P-1Jan(R-)pBA:0tRUOS1`/8Bbs5+#X1;crXdA2[!dgETp#YA4Y7SH^u/bsSZFEDDQJ!8ZAWckBZ=JESr?F)cN42X'sqA"t3geo^g3i@EUO%R&L#E/2Xc^6;^;q@2knEK+u-='?!%#&UNmn)J+i,?ipV%!p0+sj],R-Y=V&btNW7F?]2<G(p96UFH'i.mM<FZ`)c:B'k,?e3d_%i5kuL)1mB&4OmX7r=iU]ME<51N5r@NklpDQOD%$4e.P3ONXL9i%,d"Zp@+>h[J"<SN+mj1Y=huT,$8$`^7)%>.<d@:P;DhK-.Pt?rYZ+`PqQ8/tO'qmf3XeSe2_R-*JV%Mi\dsJtMsiNN;[Di=lA1K"I>"^Mj-<bW$<r)>h0FDDdk%k>5,F9\>?9:js1R7)6!P%g+cd,`6nDKAO-H4$/*+0g4'65Y_FmY>:mHJLX6rK@AkQMfPfTKl_l3fQZcrN>M]s=_;b+hB-;jIut2PHe<Fi`j%tBL#=O7Lo0BYm*oEf]Oa#%N*C+RcE)!b\Z/T+*ph@#VF8GaTfJgdjJ-od\0;DMV&389BrP,d2A9d'^#K-ZglBiCVO?U'K@l^(Y2'8dPk6b=Jm8,6aE7G2mJ5&p>e@mkNK'rd&'T-?.k\nqVBn74OOrXH&E_J<W,eSkJ[fLNOSC%dlsZ7n)"cWuUa1^1k?AtX]gom.[5fTSEXfE3(g!?h1@ks(3"9*Tc.r+Cj_gLa4>.N(>`sGOn"E_2>.4SM+/'LK[Z\"Yn#Vu=<SW+M+k_?+k/GX/Y2M"";.N=/%L;AHG"eDu[Q2=?_7!So53a>Xo$,1j<&R2+feSd5H)If)07ZJkE%l.A$,=e2g%n?Hko!/9.@#0MS-paE2-='%[@I$s2^Ipg>8GM]:-9*GabnUXTI$SujL=/SUjdO7Z9$Jc$nE-NjV/B+?K<KQB"#O-JB4MC#uqR_&U3gXGtU)#/Z;2)O,L?=_2VC,Cce63@=l2X);J3B)ee?Va.R6"/mS<rnDFWq-pSC`C=:u-**?AL^0B=D+XauLGF,!GX<>\"RJ\t[F)8=Y`t+mRn_W*Yj5T5pLJ&TK0\1'h([6oi/G@HoHN*@r1?[YpU0;]S#HGtonj.aF4ONVW-n]2'P7MqfT.4g6#Ac%TgHHcL,@Rf^Atm*^cC1:fO$ojD%<uAL1d%QSXM#qZZrI=0cBf<H$+k`]PVQMpiI?mkS?n-[-D[%'$o;Ti+Yk!pNJ2i^--=*F~>endstream
|
||||||
|
endobj
|
||||||
|
13 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2610
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau0ED,V-=&H;+$=?fp(e?R<rgfc%%;NY&n%QH^&V`9;M+SZiX&Yd$'h*&*N1O$=6L9oD&p3(VVVu,_VT:Y'HK0Pm/0A[D^dUmL^+YU>R2YRT^8l][k0)jM9n_jZ_,?;M.]J<JqD,j3O34oKW92YK!ruBgE8U-b,(Ro>N:/Ou>8t9k[G/4L$S`FtXQnV9SYr,pL0m<9tqr4E7j540)@AOX#3MGCRNmcph'2#>dC&&P^XmcdZQUSRZnT#!j4XZVIC%UK`_e#3$bFt-R_AEJ5C$-Jrn<AJi7\.@?F6&_L[*1!^P6:_8%$3G5a,>nWZh<3WEA\YngCUiPc(eb>BCt4Fr0cY>UIttQUG$6jco_fJ[^1$.XF_6'>_EqRGNor)==a7p\4!f0CFTu&I)B,:4.(qD'S$JtmUhZk_uFoSjR<5d,@Lt)OiGm:#Np09Ig9;3n4U1t)hkbSL)Yi-hbeKUiDsj+gF)KUh1cjWY576,HK51`g9K>iE!(`hV/K-0$cZ[Wn2CjXU0N*ESK?b!/'m*9KdSRPOHR<uYdJiMe^ot#)t!"ndU<q3lqk22]*BbFLf"*&#^?!i$,aiu)SMWIS#&/.dp_?GO(Du(2VT%jj#0:"'=WK:9[&`9%?Yr:(UebmdsuqpXpKW:QrGWN3K<sqI<)P'oW=nPaZ*r,8i&huWpY&_13o?rPg95RiJl.cIl*m=dB+)eG3M`Zd28MPK87op#=9T;]K30WiIaI<i+R(_[t*K?CmAn6AqQ@AFQl:4DVDunT!E.W]n?^ad:gF66S-dH4g[IZ_CDQ1/""%!V%KFbceq_b!:l(QTiD8aVB?mq;;tU>WO*=]eo='3pZo1Zmh[Yka><_oh=G4Bou6$9#Fd"i9dQf_S%4@XY/t3]#\R)#J955epu<7SnOlP++LYR33'NPpWNc0Fg`/[po^e^3!nnos5m-c_7'M^&0@1GhI7/o63EV,P`"Kk:g[s`*7M-<Lm,18Y9.$HKFe\;*EPOH&8=!`UF5!=3!c]RiWfRE_J@!:+E%+$LPC.S^rS$O7C*hX%=#LQ`LAedM;U9+H'"8XC]iAO)1r+B]h#c,biCU@=cTPTT\7S3q7sHb<d%B;[>)1lM@H=,E!2ep.L=fiUeML=n0;[_YifXo\M#1ZSdM!&/#dH&,1F06SZ]16X5ttuoDMWNd"30I3$P]`A*l9<p=EhLUifiP#4/mLh:NnEDC(i[LR$P$7rH>05RBE1.!sg(U!q#Ls5WFFfBs/D[nen[Y#fia.?=7J0Di0sC@0S9EQe/M#j]KkY$pl66QhL?qS./$kS7?Y'IrYDn.ZQ\XbqZLC@"\gY%"gW/"u/EJ59?"p)D9M&^EN)o,=i6k0DNQ0@!*PA;L>deN/ljsPpi?Kg",pJUZ-fL"B[P_cH3R>BcgNskpQ&ZMbq>Yd!]R0:JXf3QtqNLes.3s4M],b9JB%%V<!i1XY/$/fRE#n5B@>;\4BcUKXXta8>?W7RSNrEBXO1!k=mnQ`X'C.b9/U;844(gJ_)1e-qJsS(k)q%>HnAtD1R.qYQAWL6J"X^Ca%c'>QH1OXc\U"LQSQLdB3JtXH^l7'8-uB%[[KO<!+9&a<NBAm5dY$]AF1U,Y4(Lc>*7<,G<LRHR<KP7`hTCK%^W:q.PHP8nL[[lUWd/B\JYLTBh<m>C#DRI>qZE$^/EG()Nq[PYgS!;S^rljc^9`@s#EZn]TniDm0MtM>\`PkMBhqWMa%0Y@@IY=PL!,AYnC:CJ(6Sp0)"`T!oW<L1I_n6,E&'R)p;j*@6g6o+LuSY(NG3`rXf!5P,ba0eC@l/HR7ZPmHb6,/FWkM?sl!J9(f;pgb\9QDR\pO;rruM_=;[)l;`*opB7.'i<-gFB0KQ-"p[r4:K[!R"HHZ-qI([cup.:n6->?;1"2ghut9RJ/9us8Y=3ZOnuYug)i?EV`Y>r`]+d<M"_"3FQA.1>Yo4/CTeou$3Ot(,R44%@61oS<MbrYp-)#H3Y&\!)'hOnJ*@.5-ZIYup?=Ob6&DuYBro<NVASm@h@3uEP#<f.F);JX.3hV1Z&lOB;0Pcn-I//u7Oc>V`-+qJ/CU$96#Wtg_cRj)n&WcUfZfe`]tkAtDY8N?"NI(J"DlbdRrlm:\@$7'U(T4#23hF><q`1T__\(pEqf8(]m#V.5mZJSK*-Y@k-_sk]V-q%4,:H)@O9Xj"=)+YL3b[n[,sU\4sf+=A83E^PD_t=bsVjLK%i?]!D%%pIL*eS3KIQbML@59cL=(ch^J!4g:b#rreq8fROmd=J&^Zds8;@7Q_\nr_l$2",u1@\maW9:rUq<X\5kiR`"C<u<KO>s^I9W,p'j&fUb(?<C2'=^YkE7)@lFu(>Vf^N$*RtbB[fb*VUYK^PIP1ZIb=K<K&NYX%9KYn62:o7kFmAMP'gIjh6t>So57mV^;"k$ga/VO_+o_28,i2WbPordiV8qq%bY,`T=OZoaX-a+"a\s]K-$SVpfWh,5)3G1?r7q\Fo<%MbgiQ3=]B.rZr8dR28b>Y/nHVDGFb'pT%*aMB(BY>I-O)W-nH"IoA./u6A%KuY9jK><t!C.!4H`>rVt\/$"BW?3`o[;eJsU2GIL%`c9er&q5r=FDT(M9=fs>or!.)j8WE~>endstream
|
||||||
|
endobj
|
||||||
|
14 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1580
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm;Bi>s@&H/b=YrS`aQRpHGg,L/e,r'RP":KgC0SR^o,`#!C3Jp)_hk&H5X'$UQ7O_3MYWHLlldn:<AKpUg\NMuLP#`rUogU9+-(U5fRYFBpmusA)[>UJ)At!>Lb1*8EDu,2)U5=$#Cutl(j+N=o6RDQsa*nJqaEXp`3p/J%-#%fTSN-;R]G\)^#J]$sD=g\%`ZG@-r)jS7i^&7Z5D#38++t=o8KY=Kq!X5gE/!"a<g(a2dWn.(A/4f!dD1LFg*,M9KEWA?PM#L32$qLYH8DX-"ss1I:emZR)>KlpVm_1RNkJgbpAfc_TTQiA)t%3$GI[r74>eSk5iGLB=eD!uY7'Wt@rheVD0\Ace+B8WP*cKq"TFX!o,\i-G4TD]0.n[??m=?%ho*X2)mmRVTf()YZj\U:+(L=+;fgm!b]CY#8iXq,Z=,gC$erLKS.ObXAeT60XT5Vb.Zo/'T^+7,c[3.AE*b]CO<"8b';;"g1/bc,-F1#F#Z'(iRqPOr"W`Ud@#.f&UClE_o-,R3F!@MTjP$eYR"X5s9^9tZYI*ftHLFi<<"rtO(PK.()gnmZaUGujOb;]T`]JdM6f,'Ehc$jNc&],JQ(#Hse#-eK9s5i:']N&W0Z4rGjo$G'nm]%IM7:#_I.c(PFuQTNG`s583"eQ7_:pu4G>7UtaI<ffk0F4(oKB[5[7_CXeY#2'F0(k$^>9'ChF%K7M#cSDN]=QgC:JS-!([SY_PZ?;*O4Yd0B7S>I3SPs?HAXPBW"g@=`mca#n(5=.'3730V*/eX.4#SXb%#^l^De(fl3o_X8P=i)c'S#,=UBL#b<tiEGfMEDZ4KO0*a<qc+Oj8J-Y^\Q^?sR[g_*8+-PsT+"D\O?ZbOQR+GQ,Rce^'9VmNr*G;O@k12rOYldX<O0?>H9)/VMfr6;OIbHT9<.9#:fL")j,-N=V.hbGi$,d<Sjo'j:F*ltq6XY<g1TaF4K[7.Ze+loO2l!bGUc55Gbn)"])PJ]<l="\[AZ6S)+Y?*r@\)tH3bjthf>#;\o8/fa(lZ66MbEdC?'hSkYB2Gilcf,;m,2c4U$AI^O!pqpf7e2"-lYf'mZ><=>+IM!`\Wrj`i2=+@o)Z9C:eK\AoX^d+dk;:01p:$=fZ@+>GJ5d04gZXE)FcY.1>YXRFs0F.Yi9$R^9Age2LX=>&G:GNlMq^lf!&PB#r,F:BD:="KsJh3P;u]+l:nbQqFUc-"dG>Jl%IWP^":R:tm:B+hC,WC.Sf<q),J.H):cPEj][HcupXq;sf&s-E_A;VluhAWYS[3Z*P8">>G!";U]YGQD$=1ohtd.3b3lXM;%]H(-?$m;=V'TF5hrVjbL3Clm&RMp`!Z<QD?Y0h%lHO5JY9RX*;O7+-I-`MBg](oK]a5FU[kt<ATrRg`u&F-^B\1=-g5-RMVtA-S.lKjE3)hlFX@n1F$'DTFnal5M]-r@Dt9B&T\d5$u83H2<dmc.?nk-dV$-bISY[Z]=$+'f#8W^4e`n1mU+E&6!ail$ZG'L<k]*3`+_2UK.fAXjcHOn,PL\c6Peut*p"\nb.`IAMSq7rF]q5(K6G)"=]%n.rrMOfb3f~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 15
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000073 00000 n
|
||||||
|
0000000114 00000 n
|
||||||
|
0000000221 00000 n
|
||||||
|
0000001154 00000 n
|
||||||
|
0000001359 00000 n
|
||||||
|
0000001564 00000 n
|
||||||
|
0000001769 00000 n
|
||||||
|
0000001974 00000 n
|
||||||
|
0000002043 00000 n
|
||||||
|
0000002326 00000 n
|
||||||
|
0000002404 00000 n
|
||||||
|
0000005777 00000 n
|
||||||
|
0000009486 00000 n
|
||||||
|
0000012188 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<e84b3dfdb44544a27afc377fc03c6def><e84b3dfdb44544a27afc377fc03c6def>]
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
|
||||||
|
/Info 9 0 R
|
||||||
|
/Root 8 0 R
|
||||||
|
/Size 15
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
13860
|
||||||
|
%%EOF
|
||||||
|
|
@ -0,0 +1,108 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /STSong-Light /DescendantFonts [ <<
|
||||||
|
/BaseFont /STSong-Light /CIDSystemInfo <<
|
||||||
|
/Ordering (GB1) /Registry (Adobe) /Supplement 0
|
||||||
|
>> /DW 1000 /FontDescriptor <<
|
||||||
|
/Ascent 752 /CapHeight 737 /Descent -271 /Flags 6 /FontBBox [ -25 -254 1000 880 ] /FontName /STSongStd-Light
|
||||||
|
/ItalicAngle 0 /Leading 148 /MaxWidth 1000 /MissingWidth 500 /StemH 91 /StemV 58
|
||||||
|
/Type /FontDescriptor /XHeight 553
|
||||||
|
>> /Subtype /CIDFontType0 /Type /Font
|
||||||
|
/W [ 1 [ 207 270 342 467 462 797 710 239 374 ] 10 [ 374 423 605 238 375 238 334 462 ] 18 26 462 27 28 238
|
||||||
|
29 31 605 32 [ 344 748 684 560 695 739 563 511 729 793
|
||||||
|
318 312 666 526 896 758 772 544 772 628
|
||||||
|
465 607 753 711 972 647 620 607 374 333
|
||||||
|
374 606 500 239 417 503 427 529 415 264
|
||||||
|
444 518 241 230 495 228 793 527 524 ] 81 [ 524 504 338 336 277 517 450 652 466 452
|
||||||
|
407 370 258 370 605 ] ]
|
||||||
|
>> ] /Encoding /UniGB-UCS2-H /Name /F2 /Subtype /Type0 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 8 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/Author (\(anonymous\)) /CreationDate (D:20251212050229+08'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20251212050229+08'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Count 2 /Kids [ 4 0 R 5 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3677
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm>q,\6O(B3.),4Ea$UEUtkFB9-Hk;ER15lt1/i6dam,m^f4as*d6qn)U'Wikbb)KH>VW.B%l=5EP]hn?.n$2Pn:\U.S^^$aDhDe)SB>&RB(;*CrPhU`Nh&'c4e[kaDUa0KEJ[3UlWSHqg5dI"LZFB-o75JQPLTKQk0bT-"t9P:;mMYIUVp]P<j\s2g!TXQk'pX/`uWD&IS7F?T`V,XJ%9!sO;W=W[6Y)*(@a0jc4XZ'1J.rIeM\*;3an[5CC)[#UX02Nis5l*o,qmWYgnG5,66"2.'\lL;Y:]Bc,P$9@6d+O34NuENGaF7(@%K%"5`uKTMlrrgmAqAt#eJ9j`W,A'(=_Rmm0<tal!EHIUb8,oI"e%>_=N/_?8#1hOh,G>5]hAnlWD9+0>%roeEM%]Yok5l+,5t15<l*\ZZM,/R.D=0=BGo.r^Qbr(#:]@FTd_Hk9`H71dn*m3J'33bkm8ejbD*!Vk[F=bN=M:&Y(B6B:cF9t6>9Bc<%YE[pU!H6CFXst%S.U4:aoPL.E%JcX)Xpc`JpXsi"g;]:%+CW*.LR-,dN(AX(68\_dAMdd9,c.hL255b_T::_B3cTAYctt%XBX*emo4tP87lTL[bt74V#uVl(U26USFsAm1Xq$`X[BM_FP)Y7eD5*Za=2*W\p7a\[Z@u;'a'l?^MjtO5mLs.3Hl/>L0rD8:QnHd`3:kkm@TlbV5f.WNB+UBV@d(`&=h+:R:f+4f=I=q_fP(VYt/jI$cCI*KQl_?Z$.ZA_BTS"=2@nbR/2V7ciru,l)WY*p;(Mh1q#8`?1#5M_B1V9)-TWlN-7ED5O7-H_]3>G/ra?N9F;o4XgPeR<Ih16F(:h$s&JURY.8/;Aec^79V"`96O+\3H+GN.^N[rK9IEih#9,$$"Y,I!<bTm$<-`0UF:!5_\*.beED._^TZ;kZjG>Q(X%_=fqtrf;QP?G6DeV)WIM&p8P-cDJeiWrW`Yn"LComh[`V,D&GeXB%=T6h,t/$&na;S@iiIA2fqRgl^2*D-0g-BH(Fj:EI`g$ET'c%9]Nlr@.A8-mP:3c:%@NmJW6tM@+3lUtZ":Vm!ifAlcXt8?4XM!"Cnp#(R$7)!AtVqC@%ZC:cTj6-,+gFOcX'G6Ra1Jkb?C^?L5_s>YeHe!]"-X3/`eM*XM^V&eJd=hOC@/UB]@G`WA5P'UV;*t:j0hirbbDi[B?"p\/LNAe).oa!MMo(=<WkE0NBO);b/B3SXc!FMAjGX>B#M%;)3j0[f^X\^'Y.XF\;Fug.Wb,EEOg0@3ADai04;F[7MZ<CMmG37n_OD\U,,4_kmiBatN!4\;9l]6s8&(YXj[%iNenRMeJG?UB/2YkS8LZmorEj^[(!6oBKl2!BY:'@e'?s,U+:?V1r6AN2&X0-g_'%Pk;^*f6ZYb.&C$f/J!>P=V2XX4?=M0\adWLQ\9e8:(n=TmJLG+,G=r`k91QR'+];2N).O4_#\1bTq[WS''7F!Zo?+SDqJNO6rBFq_3?F2(Af1SWpOAYb',TW5M4[3$Q&mP*-!jE!+]lI&H+E]9mSA.<eTj0mh&sH:tj_mX[CGN_][;/Dnl7WiDkffPY*tP>uJ>Upuq\l(_bK&UV+u?c["W"#1iB^XP"YICH02%8>YSJ;]F9,I&KiBh(X#[rM3jtYWFjkWUr/+9SmnS2K^%.C9Z1:"8N,p7?G-=HiUu?Xu\ah6UaM1hdO,_]f$NoYcDbU/%FYc`W>CTk0OQkn`0Otm7#f'lYVN#M3=V[L_i4m0Vm#^C2U]]nJ*/I#1S),AT3`+@Lsp,.Zo*pSo6lacau,o%#(2g9Y9@=G&9tl<dEe$5OYPV`R^gPc2J,<JPNK6+q3jbbU7T`a"<eG,*cFgAgt+iX&6d8F#uAfoLC+E,ZYsnDX\75M`(@)3M-;ADg*)/G=8%A(K%%+p4RXDCjFmF:,d<N9chBDc\53EG8[?&QMBmS?a%Cb#"!_L^n$!!+Ls1JkW0R7A%%+\/KYiigto*jM/bk9F9eIK2]n=3RgN"\jG%a1H5"@S@T)dql1kKLV8/f]!_.H#e0GY"TS!$rQPBGQB(5(-"5\tV'oQp4R<Yo=WpA][E(6+pS2?ONHGpWdW%E:!i"&Z/2^O.?,`0j[=7bA3C.+*"+n<o=<Q!M__'Wq[D!YSh0QTR<BQ(_"GSkPK_#SOl-2e]dU,m3[*l7:g(%0((_V2Rm&ljp:H9PPP$g,Rn1_fE3nZ/p`9<*DP"25:F#GK-YOrFqJZpB`!HaYTSTl]]uBFtW:"4ed%`lSRcG1Of!j#tHs2K0#J,e0B<iTsufl_-93-/[OSh+[#pZRnc(;.E>uAAfA"+=(C^ATl$U"Y1KA^X)F]<EoT8!&!)o&EA_eT1)rk5U4dsE6@9Vql%[EKp^PcKak:+/-2j8"si&1GCa?J>nO,eq!<XD8f^aD.41IV]:UFq<*UfiX65C?FKu)E+%8cc3f.,;3[X$X9fD1jii6TgVoZ'5S.VU?(>L+:el0ZU?oDOM$:MVO6NP?UG7%':k5i<Ai26f_ohpfaHVP>`U0_`.>!f=HXJBlm6oWN7,MWGS[A',!1E^<;J<]8:BNa!eh?&/"jghll*Q#2&bo::@=?RuI]Rd\jiVBPLF0B*`P(qGnbHk[7c)C<e`PT&M#)cNDIuZ'gGf'\:`+l&'!o&`qNO=RQGOjO]M7`7_J,2n)-IO"p-\o<_td$KW^DQb#,L(>8)Tm"S]SnZ]b>84)Wd1jT=pN>c;(M'q-#`u`,%'i5r#B;Sp9L-?0m%,HmN^"+0t'*sO<#Ahcg<$36OleHkLika([&&_Bj&QtfF9XB&f9^60smT]4m*58@RNj$HO3p,V0!L6-6&qT!#*qBmi&+r)nPLpkoW+H@4?jW+CLQ0R*oT@<'E5pke-gNWCDnb.@l"sRH^/M2q/:!hMc_[Y/gjtosl"/K4m3P`.6H=R]ce66C;uLu;"Lt3@d2LXYgqX5rL>Vb`N55NkH19+C4E-*1R@POlKW'hTH"VPmVOVWu,'ILjlM$n&pRq$jDcUDCW*5&CfpL85>B&J?2IHn.lA-Z,"n=ec^-BT<59&h1Q5Wg`3or4@6Gli0"W\^rL#4(G?p+<B=&J20^2R%g0>Yg4>UIa8$Z/`)e-R7)5^2i[eAE_$P_h?2AQkDM/X8%O[[f"2Yp^\Pq:.dNMF5'1Yi=)8P[LF6ONQO?S%j^f5fLuWSk#MKm`u<2Ft.1mPZ8"]A\G:g\kcQD55d!r'J-!8*MhIo8/[@1o%4IRP,9lC#?A4dk7s\RXM!dK_o/=ipj<S3N136Cb/pi9+C.LqN=JcnlQNoc'V3%d^r6`e\,>P9f/MiJ9,LaU9jf"+j0g6JMBch-BT\I(1IF3)ri^t\p[@ClVTRUtoAF'nBk5+1`8cOCE!%>DQ['Vh`NIl926aTp;rOQA3MJmI0B4U`%Y4B=MQ^,C?P_-2qW?<bV24c:4_jJ29>H\fnC8QbJh7g*_*V#0<B#8%#lr%K'Y2q"q$M*9I$8%p)m#sVRCLSQN#g6t5iOuW"q<?Xr5&IGVR_8],.n/(c=uOoE-H+*AQb@L+1aRLE:/OIY<,uO0X2M/4rd8a'8g^?\Z+k5\I"\hAep)O9Bp.SQMH)!@oS7H5JO^N+B+(+mRCX"p.'k+9?tAAOS+0gH@.'!>odlTS8[$TZ5ZoV7%GM(NMne*FLKH0g4TD+pZqOK~>endstream
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1001
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau0CrD+=t&H/07@[kkL)oS<#0.nD^C=4">"U`l2U`8e2;1_iU+/FblgH2arJf]+F6n[[kGNY9;Dr84`"!Qn2+eDsIZ($WApE0H)H6GQ*Zq(_G]<j>m^u%gkY8KlI,+M;@b"88hBY&pBrnIr5Zj=n,2'T`22,PW=8R=+Bn#N<UeC$tra'M@/i"b6ZHL@%bO!$)/)d=L,M=`ZlnrZ+]j]GH&;V&CKqud,.KP/lJ6)>e(&n_p7a@c[X'dGCs]J;Chc*IW'FsAe2\F<Ei/rhEQl$A2Pr\,CQm!,@HT""n<R&h#O#J"qiPWW:aQJk9DodaG>NHQ@7Z+@tc7sZfH+HF8p]>kUB#K'u*")s@.n0kiXID"6NYq2'%AnLH7FcD8]?F"Iq*j-\#>;tlGK1^9)=MdIV*JIo)+A-1jUWtb%#;tON,GuL[#Q'*\>OK,,JUe^98m$oMX%FN8@pP4LM+7rafRn!>NWn?o5ooHL&ok@jS\r7uI\:o"&nkR&%=0;]U5%X&9,3X)_mmmB4Wlq!!VRmeaT2i,[:=E!-.&l&7uZ!lYIjpZ9nlGo5SGgf4Zgg^;=S(eIYX_s'>L]a">5S950s=<_UGR$2+\ZTGBR`ahNk.N6d`nPlfl@d?,pm2q(D&%]<IFN2"jjo)AZM*$*^Q8)]R7o$Y(AfIHS:'\`r:7R9DCRamDQiSmsdZ$R-%dJsc"GGOL:$AgPBm']4d57XQ![k(V*7_bK\J,a]14m(O:)(h)UVN-cF6]LWGZV8o92MQ']_D@&4#M2"LZ4eeZ%"8Eb;GUS>hhfE=M`jJnq70d&1n6kSRXgWbk\[aA<_\-4q&q#_W>7UO]Kn00[#*3u+U_=/j*cE[c*J(i4c5OOb`7F,rD@58$F<,!#cX^Zj4bE=D/Rr.tp'!)h&s<7,g@NJWTr)_R[or!OT6XgHAI;4i$,G#g2NZ`K7\6e?\KOMT3hl&TjE3G=HAG?.-(-iF][j1(CI`W-#Y#_>1LpuJU@JQOqA*i~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 11
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000073 00000 n
|
||||||
|
0000000114 00000 n
|
||||||
|
0000000221 00000 n
|
||||||
|
0000001154 00000 n
|
||||||
|
0000001357 00000 n
|
||||||
|
0000001561 00000 n
|
||||||
|
0000001629 00000 n
|
||||||
|
0000001912 00000 n
|
||||||
|
0000001977 00000 n
|
||||||
|
0000005745 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<7a19995b34843c88f1785d3d9a794353><7a19995b34843c88f1785d3d9a794353>]
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
|
||||||
|
/Info 7 0 R
|
||||||
|
/Root 6 0 R
|
||||||
|
/Size 11
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
6838
|
||||||
|
%%EOF
|
||||||
|
|
@ -0,0 +1,203 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /STSong-Light /DescendantFonts [ <<
|
||||||
|
/BaseFont /STSong-Light /CIDSystemInfo <<
|
||||||
|
/Ordering (GB1) /Registry (Adobe) /Supplement 0
|
||||||
|
>> /DW 1000 /FontDescriptor <<
|
||||||
|
/Ascent 752 /CapHeight 737 /Descent -271 /Flags 6 /FontBBox [ -25 -254 1000 880 ] /FontName /STSongStd-Light
|
||||||
|
/ItalicAngle 0 /Leading 148 /MaxWidth 1000 /MissingWidth 500 /StemH 91 /StemV 58
|
||||||
|
/Type /FontDescriptor /XHeight 553
|
||||||
|
>> /Subtype /CIDFontType0 /Type /Font
|
||||||
|
/W [ 1 [ 207 270 342 467 462 797 710 239 374 ] 10 [ 374 423 605 238 375 238 334 462 ] 18 26 462 27 28 238
|
||||||
|
29 31 605 32 [ 344 748 684 560 695 739 563 511 729 793
|
||||||
|
318 312 666 526 896 758 772 544 772 628
|
||||||
|
465 607 753 711 972 647 620 607 374 333
|
||||||
|
374 606 500 239 417 503 427 529 415 264
|
||||||
|
444 518 241 230 495 228 793 527 524 ] 81 [ 524 504 338 336 277 517 450 652 466 452
|
||||||
|
407 370 258 370 605 ] ]
|
||||||
|
>> ] /Encoding /UniGB-UCS2-H /Name /F2 /Subtype /Type0 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 14 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 15 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 16 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 17 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 18 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 19 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 20 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 13 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 13 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
12 0 obj
|
||||||
|
<<
|
||||||
|
/Author (\(anonymous\)) /CreationDate (D:20251212050229+08'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20251212050229+08'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
13 0 obj
|
||||||
|
<<
|
||||||
|
/Count 7 /Kids [ 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
14 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2490
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau0DqbnFm&H4hB`Qe#edNKE@V3?:t[PK5YcnrQs`W`9S6?j>\#ge5i;A/i8GPBSNc9=316TQ([TuZSM]DM!\FJAP+A)'7AP(d?8k_W%k-,\P,gXIRfkK,BpHZ/?:Ei&0!REf*0Gct'+Q0*KWSSH-YlD47TG4-KEW@K\6q;ao/5m^\V5pR(6RoJ^6//[e[R[ra[AF49.a:&Gdon-fM.N*]UB?b7&24+.-.THqS*Ts*\eI+oJ$eQ5aKND)t'm22"$+_XZ)PS\:Ve>0"V%h$ZW^4agaRH2*7+DE(AMQB46!(fqIB=*K&`/OubAHNbb$,Hs:/q\?S";C)-Ri2nNDEFi.D#^Rj\5&LE^rf@I\0gnN)Sn4"d(<o#6[IG0#`IsgM=IL(SoT&*dFqjV[(WACMYkOg([/rX/UF]FjEFV8(FNOcIE7q3:O5e65_FKIXdX+f&,!fg(S&`YLn72br'nuc*%8T&?WqU3QJj1Kuk%DB*B`,ZYip;VgOqKNM+L,eUfFp6/;gSY-$@pnXF.PoduE;S0jX]XiajT0=V43Ar)qMhp6KR@q[B#X)2:0Isq<92.D%.Bq6h1h.Q<=8.U1`j6$*uRm-XEO=(/pBaHr!/f(;dP.]ZOol"!?/]^K(Bg?-lP"7G1$s?*S*O+;)QhQPOU5u-,C%mUG[,9Qph*qJ!SMJc;,/lJ2p[i:;T9]9oPIs[q<m/tKHuqai&`2c]2Z/*Of"EFoec0&+OU*]??9s;_0[W7#B7.!"V[='7SG.bLZ?Xdb%=dqu*M0Jh$".(+qXA-(/G\H>Gh*:\#:KG%T6u/"!9'</cOEWP><\pK"ir'PG(;Se01U`_B&G[lFJ"6mRVG'CPP)U:1GUGOc=KOXY^l:?`f#Ao_0a"Yr]32TF*n\Y>JbB^BO0a9\,L8^Z2__A5]OS/YlTMC@2q%S4K&RRAAc_K4P`/LrKUJ%9Omib@.DBUo$[cC,Sjui;C,'s!JVe@gc7KsXVR_!?650c$4b>T_)oqAoVRor_eiV3p)X7XH\I"*Gf2=i*+2<?^<nK3e%^rrl:u8TpRno^78`Co<$2uc(.A4*+KjF+>CI!0b;NLThO?_C60p81'oGuda[l\IV0Q7i25R>Vjs/HC63'FL0_QH%(e]l@n!B/(_%L7h3)STZL\N(eQ;n/OQro[XiE>b2_Jk5Ki"?>B`1bLh@MF8VC*Uhfk*?rol*`k#WfnAm3c4h:nofO%Wn^&Cj!ogI6Ci7mk^+(_7-ulXa.gDg!C=4MDX=W3g$+D0iJ<kEa5_`<%uY?Q@d?_Q3a"NT;]b,:HjsMs6&EIjPBW[m>A25<R2tKq<Ao-#>&_NVrIM<$StE-)[[,#Enctp[-7fm%(NQkUVINP:^NRCQ/?/m*BQ)*He8MI6+K4C/&>4Rr@%2H<SkUr['OqGV"!n7b8@^GnKeDcpX!?3<XdDNdP&OD@qAbMr"Y/QuM>4\[0H-c1<lnL-6S[k\Cm0i>"+;BEl`,QTr&Ba[j6]BZ,98;XFYr!&EZrH8]`3Ssm^<4kf?DsI!.OlP=W5J8`W(uaYK&3L+0r/S`[,(2YQHK&QEEb5Kp;:]Zt0U)/ep57Dj;j#SU4TnQ\E@I%"eQhV*6Z,dAao<=PNpi4H,i!oU7+hW5`f@Ya(QRl'#-tWlf,%h&T>^VH>tqA%;>J3q)u/6m<Kl7PFK."52"b/<dVGN11$1bKgbIX4)USP10n_;Wg3N-Q1g;j+9?j7'->RqgO8JJ4KZH!^N9WZd7V<V,Il2p,aID;_>N!%%VmN*APMWa%<u?j3>&(Wu(N"m1.@.$0R_@?S,'X5DB0@\tQBnodtA:#RA*be_P90@,.2]dCL$2iML*U.4[N[+Z/2mAM6pipV'_b<@.7T%o>rD-#"tL_g20%72Q#q4Q"eu"2>tjc6NbOEWaZ[\p?ba,gj>J;624Ho]-,6*[d\.GGTr\rSCMK(RdVN2?4%]@<Z-sZ#1GT2c3]\)6HCO(>.Nm'Wpl_#E+]S?8'5Lku+:OX);++q$AsBoq<*NRqAfPcAJuTQ^uFeXjFk![1[JhW(P(S.6q%-)UiE8jH@cf"aA2OZB/GcX,;/61aSnqkOS>YXR>0"K"I?@Z6R3Y"VHSh]7(q0D[sLI6L%S?Bo'Kk]P_OQ!5`qBU!3kXB$@s]V,S@6p`+Rf,tYQC7L3i6%jHB(2H2S]*#^&jm07<VotC-V6c_X3N4.ieluL@PcY1"0m,P*d,`VTK_;QkN?I%lnHqSGC53tHHD-,Z[ZC.jK2Q1CNWjgJkYo+dZZEa`:5i?#OfX?_&.nVcH2Y^tHjW7D[o>'j'#E>-X'!==5`LuiN/e,!BjACPDqK&*QkK?MLA1t=lFAgrs\`G>nTCIj?W54O+)b&0W!Um;K82n/Mcdq4U>GeLqmFeKkrD-4ai,5CWVei!sJ5R%>j]m@?p!+<7p&C_5JZ#\rTSEIOaIeU6<O$ZBm_Z#aS'CH@1fH_goi&=p^#6&(H-NH/lBdKkZiVBaRS91*q[`'>fSK~>endstream
|
||||||
|
endobj
|
||||||
|
15 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2040
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau0ED,1j;&H9tY(d=%6b<"6\rO,'M0cDq3`+@Wp/b[!e=n*UQ4bVkWoXA1-FjJh1%*Tb[OHJ5!l03MoSuS]8AKpV6o(Cp^P!#0[^HIj=KOjp6OZM%7oL8=]](0],7S>m<NQc4)\=lQd&4:h_A_^s,ZGPPS8d\/bp\3VR^-rejQ<?!AN,OCq$SS>XcJ>XM!512[i:Q9ecIPO&huCSE$ST2T`e1M!G\m"m[,luQ"2(rAT+S;g=1"(C/)eiQi4.adG.hpH,O4S6^J7Qr\nJZW\r`bu=!,M.@/P9?0MDk3VZuJ,1U;cH?:d^A52Gg<JH#*@`:7X[8!WfZY?mjHG_oMJd6a4K?5#ja6!Hj'JA^da/adSnT:M`mZr$TVHh9XF<_g:_DBkPj-.?4jn.P4ko9s\=%-+iD;VJ!78^e_Q"bjcMTemc6Gr9h<rr;IS6!U5kA\Cu""E1Vs>g[-8((1^a63$cR_nd3W&'%uWO$`e"^6RHC0(es/#>h5[bNE=P#t@^"BZ8Z>T?q@I6tJC32K@\JmJ)YSbQ.C.d[+759N>Hh02*kf?!51#I;j:"Mq^+Z964^Oa^?4^c5tuIpkD_ZRGIi@Q@S*6+RjP)T92rIUTN5Fc'[/Bn1HDO=ceg]SL'$tQ5rX4o+!"gX-=bp<'@[$2QX1Hpl)H;^\0;l60XE.FOW+@HrO*0"/,t[a&lBLSM8D)._l?k45f+?MWG+I$"U.d%!j$-6H')]nXp'9L[-rW7tu'">g";!bEa?3<PuQKlp."94#QS43Vf-!0;:&AUaV&80FYIS+ssLt5[0gG3>7%IG&]R$%nQ9oLWtC21V!^]FXX=lgA^'0#/,RCPdBE`RoQLYg""Y'A/`s#;J!cj_/bhm`=2jIbogf`L;BUI)t_N_Uh"B0`YOR(2'QtRF`Kb#@)e8NqK]DC`nJ.m]PO%##f)8\F8c*r#GsTdm\7n!9`,7`,Io`met].%chdgio30IS8:'n-P29m.5<(SK4btPp4Ftc*3R2Ouf^dJ$0*.en=]ce5KW%WNZ]P$KC9dsKN0:0U'&?:akmE&IJp)_OE9EQ-abWA^^'KE"XY^igRiN7t<2tmXXc(fKX>%0Giod-5-+3`o#tr:ueN\PW:n$<>W9**+e-AC&;np&!$"6$qc3dtZJt6H]$J!BG1Gi/M:IA=h90.JnPC.a76:.'gG9#G\ZcgNsjEHj9g6pG#gJtW31*9#NU][AJ`(?_^/kP:7AcXa06'IUC)Wmtun(0p]ZS73G*"*kNG*/Ztk$im-"]7>U#Wfp1\TT>l2FiB]9]Y.$p+u!rpF;\Oi:pC-594/ba=e7r"j2$sJBG*WCYKn622&i>T++[lhnlG"CL+\D%8*J*7A[pU\^2b#f/d;)'"/kubHd0*>YFl@?LXP0&(ef2Cbel@Po1=lnR5Rjq1I+f!faj[GAr78lJ9"fI6&2(Pb7ELh>e92'gu\E^dRV7glQ1hZLKC3k=*!$]HcgXs#)Q8\gaV1dIcT(L?=FufUOqh!1("jK=+g5MBYKfEKfKln!RGZ>^R_-#M]"=;C;NGkYe'*mp+!O:W*VYkL5/PE^9EdT"K?7Z_Ot#/it.D1=s)1/Kg/!N<]>t!>eB3'mN-L-5\CM%rbhVAeqa^3%YKN:tjS#,*Y?jCO6eE1aW6,B4&3_lqThh"l0\-2c?m-o/`dC=UlC+FJKkBV*Hub@'.GE<BBnJU:>,kUL'p!oZ[RD?]3.Lqles@&^3IA<0^[bqZFrBiS+$H5Vb59gsSn\_ehNMD:^Eu<PSj8[0_:G+Q9dE!*E2-`U7meB`KE=eZ`?49+o:mi3p9/B?'JWm,OkOp]^+H.6%E35NO#ITCC,<_HB-:pS;q[XhN$6qSHVZUJbisX>(cK]'i.9,R?Hte>5)%YFcVYb&t%r"eA;bb1abB!^:F;6p0h3"%J[).;];COE]8fm5m"Y]ZUb%lXj'/$0TJ$kb3=$[,aN$LQ'CbH.)TC8ktOaZ)ha!`l$k(3cmG#lgV<6\c_]d[^JmtX5hb$HRa2s[FOe^6P1l%B9mV_MNFCNb("@Q@^Q~>endstream
|
||||||
|
endobj
|
||||||
|
16 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1796
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau0DCK&tg&H0nX&CY%p)+V6LpLTI?9kZjS'5S((,jc%7!CIL@PNFSpaD^P8l=Cj6(:=tla]PUeT%uQAk?`rYrIA.6haZ#2@<Crm7"E\S1]e>[B_XE11gKme"IZ+N`YK2R7,B;rp'U"HH5pFZrqgfG7#O=8Y)S0SBhaPLF@feXlIXR:$A17&mOFl\m@ZTFUi1TG.<RhK)sDf[K*F\D&@Bpa#l#U9O=uJEGH27U4;_o(D1*uS^57Sg(t*q`B#1de2-@CFd12jJhZA,19h:ql--f0cEJ=9?I-D2E:Jn@eAecDA8=@b2UB)-IDZ^Am4$"Dp)E9!!?EfquB)MIF)=YklQ]tR\S"o<Y54ZsGJ)%hbK\.g*A`m\F-smfB>_&c)[Yb]M!$(kpb6J`1UlY?S],XlK!OY'79.Eji6ERnb/)s(#%eeRT/Cte@RS->U1tYu^Y,_n^"Te=Lf(Lb;;2LpO@0fO2'@>0WFEGQu!8^WUd2u16\pj*[(i?`6#\=12nb'l)a+7rr[1''"2#TNAlNR/a8lb@erB@$_<=PJMY'oI<G6Uk:_eRSo9ZcV:7ZY0S1cq\N0p,(@*M\1t@+oi!$b;pR_A_74HP:)k,/-r//'k0"giM,]U`-LeT:#&WbauNngXPs%SgtOkLKM_&gNA4dK$_MAY<O\]!I@H"8uimc_)g$\KGu_`0$4<4Y^P]@Jsi?b]g`/C3&Ff@%m2c[S41uBZi@iDR%ZVlgusO_JYjaem\eN&6+KSi36K2m_5*A:`a`FBGep.4#pD4V4F@k7(%!mRR)9.VJ@di@akp/u5&_D_XnL1a&SX?]7@O"p:DB?@rT:8kkCYP@`X9,S#A'P^=>5S=a^n+=dJg`K.GaT(+o-37[.G4Lj$j/18A`am>n76`@BctBd?$8a[%8Q<FereFq:J(ll3(:3Z_3@=8lG<)O&mm-Ltp8j?9[;j+/eQ\IQ??TIr]nqfQ/Rl7/sYf_W\2%'AKnCje03%ZD(9j9)B_b=PP-J-V]_6F=-<qg;!5\mF;"BK&`$fK2W7S&_4(V87X&/@jQh=cM0>>qG7m6bh40kjXssfhe@&aPf7R\:i6,IPQ=QS<5QY;j/+:IY=fA*K>;,=%kdT8O6!-4RbF!m*Q`5LlTH:O.L7"1Dl:4G/-ad7\dFXA.k^hB9!rl`AIKN28aG#OlSZ>0,_*O9'[N,fIuX'!Skm`/c=>j<Ec,2<fBhum^#]%Vbq=*P"G`/7c8@N@-jP,N:aNrr"E#c^dG*5>;-WEV+kioiSZ:q7Cth.gW.HXic0$7=KC)DD3E?cs00_eUCB3!qXMF\db!l/k)_;hhhVEJ;f2X8Us)SC>-BW.M4WTZm@:l_dW"RACDlK\T;K5Lufbs'onm!ZGM@ffCQ0nhG"F!DTgZl@YD*ED>\o#86b?.1-"d.K!m[_Ej8KGqn9_lqh8\`#c7<OK`pSgf`)_JX:a6L/h1@K)c)%*\4'Q6kfW2ENQ,?$[.;U!*,0EY3Af+aK-mA'OWm.2W,&EbEP&Im%.%7o0KV/%j8+FgT4@BnR:Er3HJo7:]n;64K\BQO>U7`E[MqX$D<.h!1X\[,YLKHP+$7f?WKFIY=*WUeFNMQkL\"D(bXIpuO(4p0-X*HF'Jal?o(-!dg;:(rO\2OXaZ9\E:KDTgqkEi_gk.jkRbGNh6]A'dXS!OOR%B#PlUl2P@-jc5/<c]J`E1[SR]?BDTQk*.3q*p%FJo/EcRH\[3Q4GDrrDfRCOM\n5b5J,AU-o>GV&r^0.?8G8'd;Yf.h3,KmMCW/>YG@BLDN;b_APAeUQMq%efuf<~>endstream
|
||||||
|
endobj
|
||||||
|
17 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2137
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau0ECK&tI'`H=\n4]`a\s'^ObNV3&>GeTlP2MFfG0qROdLZ`h8fnc"ZG1hV]s_K6fGcX::8pd#=k5V-gnQC9!s\cb[F=.YGVT[K52uY[_/MWs.TF7R<Ub+?G.,E>Sgk()n!\-%,9'h+,'[uWY3]Pmmr5]NMBM`j4C<`ME;sAf%$0AD,3UBB`&B;r>p"J83MF[-PM.!;-M`skQM3<YA'D&bbHVX`Nc@(7L=)RhfKQkg$kJ!LcNkbuRAjU<%'&We.-!Cj#\=6Q/l%oJB$X&GpJ5j,1g:J[@2!(eif+*)W>Ie;:D0/DGIj8oD1GQ`[UA#D+(,au4a2L9#7"!ph/h!]JoTkIPQQ.0M\F<@4/)>sV8+oGednE:cF]%H^hE4A]S;3c>8Ylj=`?mbg$dP.'m+t$dR_]Kp1"E'X#QF'RsV'd./J;\=W;99TT"a$.GJuCR4fZcF#YLuI,n!3@/8SO'SXs@;(Gj\Q1(s:j:<sj&/nr;YpIQ;6/5:SjHU\?9"@EL[ZE%=/iJcqH+AG$nIG3<&0^g%!Kgc2'I%7,RDKVf0Wp#D)&F$>bdA;,)gTa6F@atH*VHEH*`NeQEYFnEkgldI;C_":ioKj(0MPOr4UA5`$EiH);4HQGg=-^M$dYq[FT>&YbIm?Sgd+B.hhn_fH/Q?J,g0_eW4_3#0s49IJIC\AkuuN->73U=%ZW5pZ.O`XU%?i,!E0V/<i/IkqK14NIJ$e+\'_K^3b4>P[9D.Oq[P<*DM;+sR(e_gg*"=7kSmVlL4pS8I?]:3IU>l-MLh%L'XsTZO&7'3liPESIF>,Ab(W;BJ-`NLJi)i0/-i,b16bta>(Fb=I>8Q41P+5r$p!(fJA?1X77GbEdk#>iIr3r/?7qhf:b4^.Z+)V%!0pNUR<`&9gfS0UA38+#0"6;sMO7$"P+Y-6$ADW1k8tO<j^i6=hPBl(Y,"p-=T'`"n'.B,lKCCEUB*YY[ndRbYQip6]u%n\K,;I$Hn`1JR6t7DJ.#t08T+*b0QmB_o^MV9Ea_7*T-/J!3<Gh7X5Jl2&cD6>Oj")JN(SImfeL#WAh4`&VE#(Q:=5NOa3%8PqF&@Ch@19=Z,Kq3K\c:"#/kT954M,Vb+#R?m9@09/X%?2l/;-[G?>S;3HC^GTK50FJ-ZKc"(7c0Q0bJ2A)s']\IB'QH:1qB>&n:2a^2`P&D?H*-E>s5a[g(=gXou[3s>#LeWeY34RqDA]@/UI4H[)21'+Fm92fb:6>7Y2:2p:mBj0ju9<dE:QqFY&%gA>:#L\@-r?nEK+:C'??f5)u)fJt_2G8CpWktJ2;2VhX<4*V:IMkCZU/+%Qdb!T+G%\6N>kES.rTtVS2E,uYeKn0/dcP7`rkl:u%06!;l[UKZTY<%S^mkB>g`&O&CPf<t?9>u^_77[4E)0qkZ%Lq?&kT>(E!EKo=94_8K)>`gdd.3DQIfbrp[XKO!C=q_!63UDK'3R!@9!ZX3\Qgn'fAR*-7$eMPG'+fgE_EUX>OP3D$,1@YcCKM$ZX&SO\tmPY95dGmNPSBF1dII5:'duka(I:nXj\RVVQ*tUInd#$jr+sU0O6Yps_?aeY[A@H*R=ECauaE;ueH.2//Uf(>EZ4NR^`*E5JsmY-Nq`LuZ*oUSiC9r^$bsd:(ObA*#KZLa(@bq=YC-=)OtFJ8MjVgSh8=IY-b-\,gP$6J00*QOCGFq$sJ&!Yh-Jc9&@fK]!2K8S9k[Y-?8uHg_B0L7-0X^Ol.L@^0>N_6%D\cZ1t;jP?A=Q<$IS!^bg/*)f](oEqF6r7KU$/2&I#6i-,(M*l5_)CN4&1L0Ik@)4iA:o@=je5\Rq3V@<.A!5R2VlV]Z.]n[@7[RqL%[jc0g!9*\=T`bD[#_A9,>g)rN(`+Dh8'a?.KZC7Ud>#PKErbjVam9IX#.hMEhNM9*ehVfqBKk&Pjbh#)fM6#lJU8Vd&Hio_/gf2q.q:,F5cMtEt9)Frp.dR$An)4H(:E>F=7Z6],/f6GlF*ZMmFDRj:D0@(seB9gJL't7h[7!PAI3rmScqrA&'s=qF8S""oI*5d$O\A9[N#>5V!kem'u_IRUY?n@BShDj?]cn!$GO-?Y!_;p>fVfn-?lAU"orD`;=h:T+f_(7]_QRrh0p4j!6V7flV^pT4%%n04D<c~>endstream
|
||||||
|
endobj
|
||||||
|
18 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1901
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau0DBi>s@&H0nXfYg2r;IZ&@[(+7YZ/ac06RTkf;c5S#&KsnZ!Z:L_e(q?c,daCB]Tf@WG,KQJfDYPL*\dA.>*$s\i*AEHrLF0u"RUZR<N(NCB(2M-E4*Jk8Q?3WO%^6i)hl]q%aVt7-j'Em4]m5%G^?M&g1PB%#U4aD*]S;Qj;;AW\--s;NZI/klNC9a0]AhUnBIJ"]^DTW%G9(+5N1lQa`&Ve9HJS%;Mo==C)\cO*a1Q(6,(fb3[ln<];fl1KWp6pYcI)/KB$89J.Hb[@(RDcLI(eR"Q"[T/FZ,aQE_okT.M12.KJ&Y<bN5!I?`g@"sL-95;STrN5Z6oVj^_'r-IT`@$I<>j0o"f*eA1pYhLu<e-;6pa`Y>ON26S?kgUY7Ti93849CN0d)#89't88lDQtHEKP`Fd=6%R]Y&!XVR&UIh&L&$NYp'o2JYJra83EH9,k2SQi=7#=KPG_%aES*Ib0s>lQ%acPi@U/Ek0P3k=c8[#><R^Zk,hLr&=Sl@dtcrI;5a9H8Z$Yc363DF&QJUbV%<&05"-K-]J#qfW0XWs',#-*,[#UpDpg2*U%]Cs6@(Fd^>;YQN\[GHgH?pcR\bAk4lnQZ$fjLpDBC\2,^F>m"s&QI6mBd5*c7sW5RAQ%(-McHOBhlbgG>Ci0BfXDJA@3,"VSpj701roU9`,_F^/aC,/Kt\.2,/d*$]T$iB4r\N)q4:>`:Ch[/R[f_GZZ&0`6FI73G04Ip-nV)%=iV:?]\mmaq:OUK>.<^f/Jc@,[i-/?LGN?>)&'A1V&//q>ofG2Z(&.[4`-Y1T_Yq,gT1Ka\I8%2`*qWPB$rD4a'<U<K.eM)Bn*qZ!J9W@SRV<\bbS[])O&Q1G]ZQ_muaJA6*@0Xr@35Y=Gm!g9!,M#0\QLje>;qNm73IjMO$NI=;m(/5',l8#Vi:4fCN+oaY*0f?P#cO;V!5,6S[^0!X70$@>M#6\Q6R#5NkX!b;$jVQrbneS,?CP!L-7TOW^)fkFq?o$^p"UlUrH@.0@a.JbFF9W"kK!C^'2TN-knTl[e%8A^p[>#hNfe9h'ma@aq),\P)Co%XONDG_j6)D'E5WD@75Hjk?o'Ia1)XtH-]2D9&GVu/`JoJAu&S$Jm'5h3l:%kfX79c2?U-U.A0+iUNEs^eFor%le_"3m>8&OYB+MK`7_2VfAftuj[oH%<3E4NgH+Pg/?jW[tA3u`J(C$SZ?mXfkFn:X<.>9]K"\).bgTdo-nTT/OrAR%GAP@L^@T*hGY*@AB7M@Q)Kj&4>-e$=b2ERoZ!fE$^DiYdd0EJ6#Q&*Tk+Gr@U#">m-85RA3i=la,UH2pLuHH#L>E._I3*,PCH5st0+"H2s&Lq.YVJ,L/3"dm*?3^DF+.S*!\6<I88ZK\<$geR+S`.dZdj+0'2$)0>;?3['QlL:ireIrisH%Wc<p[RchL7eq9<lR-.H6Xk@COLf4Z@BX_S>Yp5);*%^:!AtIV/:PA;n#"n/"f7rb2h`3:b3@V60ll?<2:BW_)#W!kMZAR$O)3XYr;W9$HJPh(+?XDUbW%+#V-Y(eY?$D&91eGmLmB#DVe7d*cDhW_r;5>-#,TbeNIYLj"u[QI.\"U;%CSE**e*[d"=p]m)6!En.efsX!\f9@Pn]2repDYRnm(n5YgG1lbsDWi^?e!?[V<bk6&,@G=b_5TkLGdGDV1e*>u[PRD)@&\RD@>!!79,i:6`s'3t$+T\P:egWtA?iKWYT-HR/JZ[eOK3)5=S<m/aHX\V,PHTofd,Za2L"i2f+MgN%2_eGrqbpJ],8rDN]d\,I78)g$m?FKk:%r$hc<WF97\`EqKH];b9Y((f3:=s$a0Foh?RiPo50CfJ6"Z5X3*"3<9L>=+6e^cDVld$q<T8G9OM;uuFh_6QUrTTQT_8<rnbI^j~>endstream
|
||||||
|
endobj
|
||||||
|
19 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1767
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau0ED,91]&H88.iI7GO.[]&F2nP?Tp8Y/m'`n^#%Z(q2,D8nM>'_/g$gM[!bkU#1`+aT#)1+NTkBV6BRFt"5!e2I;Vmet]AfU18/-?3pp`be\eA6AgGWY?LpLJ$<UX7*7`ds%Qk_+c]\_cgE"/g0lqd'Ooo)%U_LL62>LJ9J:`K*=s-f:^Qeh/mWVPbKBIIp.4.A")L(W'I'Td638^No43F=2<+_U6)jZ2W!4:[dN$K6+@(2VXtd[p-]D.N!Y&Y_EUY>7okq9f"VCF+Z?DO\6*,UdK+\6&?KU/CA[$:usF'#p?l>?@bZj)49H?9#(sU:?c6):Z.%t+\u]05G<Wa00kJ8fZlX189ef6!U)-JDDO8B-)F([lOtI_)6-oEN5u4D?:^&fTH?9u_.SQj&aD_O@U"(0TR5#Rd<#':m3f*-72dKK-#\:W+Q-TH1%8>s%0"*LFXK-fp4HG`hujCt*.a);pB[?=Q:M52qfD4gB>XcA0-,(]J^E6q@;IC3&t:$,VM3&;lJ?"\B-l?G5MI&"YJ?hbV"f=cYquBjcuofsZjr?)BG@gR+ue]c!#1$^_co/Ad,Apcj2>8:M5l9m,3mU]K\=QD*93Gc#iusTdePPoS9!V"3$LSnV[mkm?b#2m+)6<TT2>r1"4flKHa#&!b_J'j"rKo]K8G(4YmNi9E^7+eH@tMhhEs.^nbE#QF2p`4!!hTa*l!>?Zir@g^BCu5&L_O94Hh>TGop=WOClfa7kH^X_IXrY)aiDZ)P_+dciGIn;@TMM]aqlMH-)6P8Qou1)2!oALMl3Q47n-iY<>\;H[ME5:E]h>H4m)*:(MQZ,cm1.FUVWorBpgMcY85NW*&e$EL/E73Tk9'_-&$i<l@K:/ic?V1"sh39h"oQ"Z@0P!gIO1.;_dsYV,\pLZK/_RZ)(+-;YX!.\g"MX30N.lauG\dUGX'[aqg'es'B5>a]E:X')KGX/i)]$q*s"0Ik;^/":K`C&<e%Ne,t_f]=t9bY`1Xqr1L;VM5k5=U[f<b%C>a^Li\d<k6XO3Q/&B?c6=((m#*WC,n:(<o&sl;^Z`Ygr^9j$e&f#BS6E;ApsamGPb6tXl.Fa@q,3HZc48M0MRC5&OkFPN[LY,'e!<+26VfMl8H>j-<#QaX;>#2"gt9@X%NJ-km5-E8uOZm01l65n?Rkm%3-ZS"+_fLM;Fq($Gl.qK;M+;&NLd^fE'Yc40M5L<U:NA^0SDaQ"0hW53VcGS0`EjM)r8D<=Xj[(A4d5&(m!(g;u3%!FhT=XBcU?/5,TL"S#C8"&>Gop^]35A:::SZF3q*.JRjp&A+,5e7upBJP;.lPuS<CT:uKc&S\Zl?Z$Up!-Z\ZPOt;QL6neKb>b6C<DB<!'WO0d*<RJ0.PehT'.Rh\RUmZc2aD\b"/B?O81UZE&CM07!aCbk,q\^%ATX3@2[;=?R[9rVLl42O8ARW?M9FudA;$uhkF2,RU_C;TRM5VKk6Rr<:$[^Q%!Ro6SD3Z0I^;/#Mp$+37W')93\L!X*PM4JogLd=7CAJ,ee,85G)OB#`I5OZ>WK_ern>4fYhaXuHrku0RhV(:RDU,PkSj#p8q1$H/*.D>,Yc>4hmjelN5@BY^NZ%3]sUrk8tij%?N^aT..I*,=D++Cfh.Am55d7q$s^n,)'q_HS\F)u_L'kW@Dt"?G_he]XE0(]#Kl(4Y6F#><E_tVWij$E6]JN*>,ol8c<sX%L7r`&moqpIhi[OH[enMQ+Jcf2,s>eC?6b'bG_UoB-NqqL#/1$:9&&`W~>endstream
|
||||||
|
endobj
|
||||||
|
20 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1014
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau0BD,].R&H9tY\1\k<#L^6=HQd5jfs0"Gb);Wj3o!OH,:I;27EaWAhqm/u&@!ub#Fpn#jg)G`Zd8&\-mA+WCjQsbCaJ*6#:5TMab`h@1*ZN>[Zf.cP+$]cC1L?2@c;_TJX6`$_oIlTg$bqJ_F;t%>q;'G>Z6P?>ETbLFSdga.4\rI+?g88HADc/@IlNnl1*9ud$)@*R3n?8FNgmR.m1L@8%/N#3su[#1OrPdg87Ed7.Q5pho4V)%+_U(6RRD(.E5m[]l)3:*Gf+s#'r9&4[R"O;W+/dZ9XKU+tmMmJpc9<a)d"N;;@H&5q7gf4,hJpK6EPG"ia%hi-7/#h%<pd+((/OOp^,t+(R1g]1M]j]n/&ucR3r64=C25qK65hR:128:2*"E#-Y&/G0dc[&)VUY6`U7Jf931MMC$/CYG>95-3mVlA4\7<q$BQY"(f5b&CSDu];f.$<pgk[G+k2@=I%?q;3mT(b5`A8_>&WKH%s.\peBl`aatj>`"?V!2+'@C)`u6cc*.1-#L<VbA+mK0%/?U>Bes<CHcQ_S#*B+FQOQW=-0c0HC"-a[g)\]o"ld!H_JZbS]?c%t4074cqo%'8Fe@![P-U5%Dq9'@Nr?rq7]N6[=_DeQ(@4AC>JQ]3rMB$`IX5q14*jFAe_f:'-QH'153ZH&Z7D%&h>U.Fn#1*)f,s[ejJ^+7#N+8QQ[>ZVIeQ![WQdcEh$7dK-_FY29A[Zp0OL?$LF'"_.4\=)NMKl<"i,H[Hsi;!#G46_R]!sH9ob8VPRl/AYthS)&(=cc$6Z].!iP_>%^\^O*EGjbGg#mZjgId)ILtEuEa__)=i^b%f0;`kNY8oB'E+-Lq;2q@6F<#jmF-O"mFcMbdF?/s?a*P*lDMT:P"`KNDO[[,;P'Z*KGlcbB*RfQSMqR8IGmh$8eTQ,J)H+sJ40JoSPV,o9Ob)pDIE6"5cV2CpolrI#[X2)41Z?@=NAV<5n05BXN4//_S+jL.I#gZ,mPMpm;e25'XT:e!QE62;?~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 21
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000073 00000 n
|
||||||
|
0000000114 00000 n
|
||||||
|
0000000221 00000 n
|
||||||
|
0000001154 00000 n
|
||||||
|
0000001359 00000 n
|
||||||
|
0000001564 00000 n
|
||||||
|
0000001769 00000 n
|
||||||
|
0000001974 00000 n
|
||||||
|
0000002179 00000 n
|
||||||
|
0000002384 00000 n
|
||||||
|
0000002590 00000 n
|
||||||
|
0000002660 00000 n
|
||||||
|
0000002944 00000 n
|
||||||
|
0000003041 00000 n
|
||||||
|
0000005623 00000 n
|
||||||
|
0000007755 00000 n
|
||||||
|
0000009643 00000 n
|
||||||
|
0000011872 00000 n
|
||||||
|
0000013865 00000 n
|
||||||
|
0000015724 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<61c149ddd04bc96e94cbfc104f656c62><61c149ddd04bc96e94cbfc104f656c62>]
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
|
||||||
|
/Info 12 0 R
|
||||||
|
/Root 11 0 R
|
||||||
|
/Size 21
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
16830
|
||||||
|
%%EOF
|
||||||
|
|
@ -0,0 +1,108 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /STSong-Light /DescendantFonts [ <<
|
||||||
|
/BaseFont /STSong-Light /CIDSystemInfo <<
|
||||||
|
/Ordering (GB1) /Registry (Adobe) /Supplement 0
|
||||||
|
>> /DW 1000 /FontDescriptor <<
|
||||||
|
/Ascent 752 /CapHeight 737 /Descent -271 /Flags 6 /FontBBox [ -25 -254 1000 880 ] /FontName /STSongStd-Light
|
||||||
|
/ItalicAngle 0 /Leading 148 /MaxWidth 1000 /MissingWidth 500 /StemH 91 /StemV 58
|
||||||
|
/Type /FontDescriptor /XHeight 553
|
||||||
|
>> /Subtype /CIDFontType0 /Type /Font
|
||||||
|
/W [ 1 [ 207 270 342 467 462 797 710 239 374 ] 10 [ 374 423 605 238 375 238 334 462 ] 18 26 462 27 28 238
|
||||||
|
29 31 605 32 [ 344 748 684 560 695 739 563 511 729 793
|
||||||
|
318 312 666 526 896 758 772 544 772 628
|
||||||
|
465 607 753 711 972 647 620 607 374 333
|
||||||
|
374 606 500 239 417 503 427 529 415 264
|
||||||
|
444 518 241 230 495 228 793 527 524 ] 81 [ 524 504 338 336 277 517 450 652 466 452
|
||||||
|
407 370 258 370 605 ] ]
|
||||||
|
>> ] /Encoding /UniGB-UCS2-H /Name /F2 /Subtype /Type0 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 8 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/Author (\(anonymous\)) /CreationDate (D:20251212051549+08'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20251212051549+08'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Count 2 /Kids [ 4 0 R 5 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3205
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau0ECNgF^')g+ZR$/MU7qB0&dh99^KQ(%ZLF$KSJE)JsA0ep@(s<,9q<_C/];Oh#O3sP\@sd:)mcgmc<HY@B,niR/'%cNG,l);E/H83e;C04`,#-f;_e7*/iJg'?a=u(bg/`CGDW71&CF:C@8&K0mkc%8@T>s#PBMBAR=e_1BBFg@V_g<fN4311+/S0\b%,Y;.^&9S46=`[p[@.DamdRudTC*uBrFC.3=fT21dLPL(.Z(QJGL@0<?Tg]33.Y$aM>s^D+EA1u9Ft).f@EQZ<%*ga-FnilMrKZTMr@=GQS7knN/IBPhH8cqN6b,*&V960bm:+Ndn[NTgPA,K&TIjqTG%9/8&46mFM4<NMRD1CUTrVKq!oYOmUt7p9PO0QDmMp#Z9.5"Hh3SlP+$"3ZBghPku3"Z0qT4CjH*W!JaIh<'oQq,UkddJKQ^5/\g^,sL#H^B'ZDZ\Y'C,MFe3<H?NG\("e95tZJM7fe,mc2gD3DZbm'Li:>dODb*jsA@;';?[/$`g-#d<)b7no;EcfIu[sL+:EjmhOnTF;mA#OZkIbJ9X%^p#nABpF[82ZfLqI:7IR</4HCP7WF[Z\)"gY*S%W2*G4KPO7VJcBSV(EPY&?!YR:8Csc-Eea4Nk%.#$mBg!haY>ltkniR`S/g(\AO<5ocr4ZQKO,D.A!F5pq_V^+=`$f]qN"<SZ#P\'[APk3Cm+7V9KG\9Bc[A_9Vpm=4lc36?:q?&n7$EZRpgceQfia!MpA/o6adC&)a%5n1[`B$)*sjW5H7\eNg\JTJ8q`Fli'HXDOU-K:0btA*PR^VY)_Fj7La5!Yg!?gRl'9*f^">n?d8"d+LPL?&.4hDZFjCp"ed7/OMTg9ntIVUF4E;PPVU<j':L1l5`[[3dLk`2p,b*#*gZqj!Oa,(..?YZ=/Q<KdjV>r+5`0oMNP<Qjk8BBW*gDS'X>^e['1R-10`TsqYE!1i&s)UfX`r6<EW%Ck20@qkegeQ6Q,G+m:6l>@g#A`KIa;8Jk)a-<*>X+/tt+Zp@'TRWo:Mh'QUlc,BurKPiNEZ`[\m>bFX]]A%,(Ra_>simrHALpt3'`gYHS7_n.L*4O!;4e]/%/VaX>c3sP%XYZH08OLF&a9VLUH,Q;q![TJLsiX,io?Ba)\m__Z.a%[D6M^\C`<)Ja>*!b?+5Mfn57;usm[U:9P)5:9Y:;_(8rRuV`F,gIIXb)[tQR:[^YRZ=uV%f,?O&^Inh1"HKb=`t'!DXP^4[pA'kiE8q:eQ!K\?.pbIa1faNTr+_^h(gn_lU.3YfVZ1o#CV_%r5SHJZP0c[XhD)s'Y_`RNUT1IB[r0eQdF;@W+($!QIj*[WQA(Skk+IKqIgpH.PQJ@f[&Uh0.MWN>-9#c,[SKRNeL1B)m$B>">lE6-AHI*=F4O%L,f(S:g:*M6UbJLYfK@0N=?74Leu+P_g'f2[#6W^^!FkfZCaa#`Rq]/9\EC/>0%7gY/IJf%-gW'<XpZ>5qq9)`$"Xj""4[W0_)]L_u`^HS9=Afak`-YteW]r>1R/a.+-^1a;/*HLS^?:nD#N$DPd^,U&s2b1!`j0Wnfaajg,$Hs(i.k0>Fc6!XK'Hj<!.E3;>HD`,)Fp+15KQG+7-;4dQEm"f8UHp'K-&I2=hJ>r#q;3nZ!iZaY4^W\C'%O36R$PiK&,OjV#fF?So:4Q3d<dSm?4sX\Il\`VUpoTDZ=XPD&6YUUThL`1G<W`]**1Hn?W'][Y8d'aC3[]5IXW%@M,1q+'`(n#'j:!0jb\k)d$$LClr))2KWXZu/i(`0N"d9bML4*BS5Id>P%+g))JoE.do#\Qk(l/dI%_7O'cV(!i>sjMBM>uKCA3kC9/1XSeDsc=#49S#(aQumM[8Z6fF0LQtSFBU4]on$LkGWGqOlfD+Q,5tQ)."H/qD<$0RA'K](O95o2Bo],5UgG7oNf,R9<S3iiq^>OKT>@0jo42\)%1LC._+5+Z]#7'lsN_%<i2&0q5WWL\0t'Og>cN!;OPMoiMI\M\ATpB(XUci/MET_guA0NqDHC]L**'0"c.9QbXXQe)E]Fur2nAu?4X:X]t7P[\YK%SBeGEY'sU%$JA.\5VcoFc6cKu7`B1*r-70$\m`dDK8#2.hBT8qY%"/JKBoFnP$A.<.-JC3CT;u;[R&,&.b:D1(Y#J'H5VdnJ2h'CGJKGc>aM'WY5U![G9WG74P@$2>"0#8>$%GIM;7L!(m=*=/]=5*7XNH5%S0&L9fMP1QeEr;5^qf0Bet(ru&McbEn5jmlQ'CJG+X/l:i\FTsK]II^UWY7>2>@l@"N-l0$%\?rlo])c^/p?j_;Q<q`lZ]d&r6s=5!jWdQZR?/4-:ncPJEt/Thl]?4Rmt%d#s1*od'd)n,*me,WuO;Y8#<eiT*r/H%DhN-gYTXSNch:'D2]s./3)YK>G6H^DCW'0&ihB6\3An]pt_)e!mQYX=0>g=u2e.;#g^[g(`6=(_fbX1MW(RQ%t7MPg;(CkLa`90^==Mh2Tg0ZfdfDh[Bl]Xb@@Wr7UL=SR*EF@*+#VK)lmI&(!.a(Po7c:;NhBG;La8W9D.&Cgg2tjGbf\T.Q792=IBnHgG-B*kPEuD90e\>AR=[),Nt`eb7$f\,;-7*\rL'aC_a<g1f8X56$hT)^el(ag/NT,^XGnDjO%o*(iAD0#5TP+Td*AO03opF,UTPfq961H0:_sV.YE0#K6MPorL/?Dd5n>DQ@eI"j"IV]Af9nL8J*:R#_LV2UgAZ9)Wd8U7p8NgLiGb*'NJB#8nJ(LNC=E_5j#p0$pg56Wh"Rd$(l%^'YApbd]-4;NugiqD!R<Oe/Zg`um9h=hl=W1TsHNriWW*95+j33aEg$mt"eOm*:+54.<iEr%XG`YlIj`VX6!Y`>!16?XR#:9_a'b1QeB*!a853q]W-\Wmsm=:[E9ulp5g5cZ%'B8sCZdQ.=.%M->B#8T^KFkDrJqjbL<)clKImilNVDXVcM9N%YXsFoi*h.=kITBhap!q:=o;o7JQRH#"F->-5u*!U&^U'r!PBKG:5$>8i:c.k%3`DMeIbb2o%'G'a(BA!Roor%1,A]\GI7G&bsCG;Of8\"`CcV'sQ!`sQ)kpTH!eI0QhpD=DTL-<fi;d\XTu%:"QYXmtUf)&OTG^XHhdo1i03Vsor[EkOMg(.9?I_kWZ^K3^jl>G]7$:mD/=>@+qfW^hp[O0F9J2=F?)T8NBHMRVZdrrE$JA$#~>endstream
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3220
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm=qc=\-(B3.)U-5hC:1b7+d8^?13La;e9TGSJJf&T-",I"U0ZFqO_.!?:^%^*Q!H!RtH=C(EY-.ZumW\+OGf&A\VsEkuP&*%>i`i!nOYln@:CCmbplK;L<\@I`?^[2eMO/HG0dTaPN0W>7Q.hu@<&lS@>UbKIrHoQcJ.s%.o5`8=#H8mr4/"'Cma%N-@)=[2C,^cG`<miMnBR_UfjlI2MR74HPKYeR<o=Xt6>BVfp,@1IPIuB"qIor59.RO*`aoMV@d=d,FGN#$XUqdA]tV<endZsnJka/m4A6:@G!b$%-IT^,9\d@bD;SNre@Cja/]0^c84Z#K"#k1i,-`5l9\EL^WKnRJKHau)KU(!M/#@EhdB!%=a<FkkV>#BSeO&*1bG9-D1k'`.TtPXm)W"Jq%akL5LVh_ToB+@L:_G<e*&JF\=K-Spreq?s?J*aR;ZmlRNDe&Rr[)@agStj5&0Qi$4UaZ5'Ig8Ao#MkSG[r*:*E\jjfe(p1:2A9VOn)d[_T/V8?&J+AH,9+;78EnGCH2YoFTK@_nfc.E>Q>>s7]<[&+AF/K-7RkQW!A+n!O,g-!(m9sdsmR.acZ^3P-aj2fIr<5Z%!?XkeB#.C^g:fJ-Gi?Wf<'Qc%ThJNQ2N16N4[7\ssP3(*_@<X[HEu+=F!j-7;0F./FW#eH>.e8q\[Aiq#'+_Y&hZ:<)K*87]A(XU-NZp\c<7nd^:0!aeGG)4t@.&>)e);!*%+9Xb<F(#09Vd7m;0GR8=Bp]Q$?*M-tS&8MlT"*hZa#4(2s;sRFA.*qFs*QsH<1AS$a/6pMQ6`HWqZ]7+kJ$b#Em([0U3q'Z+ARI)=7NbqrAMQaVIAAV#"\0pYPU]8=G=rtKA]P2uo8j326)kX$;@B&\:_lm;iNa=;#B#VM+DXk#2ku@R&Sn.[g<N!92<s6*nORQGrbCje>EKl;@f-KWR)Tm&rSX"l7Z=c#Fs@RK"s+*c'^&rbQ7mK@/qfo>lBpa?_F+SMcc6Lu?O!nZM)[u)bkQC>KU*l"/P?7Q(?PI!j")g-HMrJ88.(`-MDOt6&"_.+N(%rIK/DN;#BGV(F/Bf0^]eJ?<16'7_"[\E0+HEZN*3I\%P!B9(d;"']i6It1M+&ImGY8-$!%@f-g1.]=XA_;KSI8MIcK\nAEj-sDn;>LUh]A.X3XYf=t_PgNtmW0WA5P`;;%p)P3?UlY1?sSQ[>1LbJVnA%Du.Z2D+ddC!!p-OV->r4[MJe_PeGG/VtlU2?a:;bXIcE1+mh>EeS3rd-"J<1B^]u#0%eo83dOB<=D&NMR2o(OeE7O3c.Q<Vh.=-VG#R0We+3LbdWe*\DX?S1T`RTl._U&&5K&aAq?WKl9[liQ"'89j5gG)#GXqmaZ'0/)B4^tqSh/o'BtsU1dR`%X?k#W(&1?Dh<J4WE*oXI2Qrf!"'A]QoH&^VXjSQ[ebpukF@%"]pO+AUG(b%GMAi%W4$I"qfrpndf(-Iaknc_Xj%`]_`!.]u9+"N(bSW7<\i'U?%;UA&*A@k4VD6gfDF?/*T._>U;5\.V&37+e`sAom6'eN*6$Mk)KgtN`;lM%T$/WVAV7"YJ@dD>pf!Zp(/11.krZ\5/PJXS<RGtNo`ahB%nls"2oC2[WNRB?\SO6Yj-p^u%3\Y$[+oe5<G4>&E]_mYRhhLk231$9@J-tG-,C47-'f'-2K>HZTn&r8_kbn88\?tk8"/S@u@^12"^0D+XQGC1u0"ANWo+@I1Vn+V#j*n7MB\MZuVnS%3(`p.YBZk$IFA2?YH%8"^qaAMdXTqfWJ@"?:lDY!gr'5ZSK2'qu*(6Hg\2jq=r1RccOt<(a18@)G^An)XLI7)-JX`3bBI50IM`n1$@<`3LOLN=8U"Q2"m^Fu4`""cr:^sR(X5fE'+n6+n;Yr,8?8UOOho\Atfok8hi=f=*o$Pd*>jt_f;p&al_UjgIMW$(*+6t6BV$_VYJc1$:RheH642^%)cc?U>LWtoOe4Z#$g!VqN'Fg]@Q'?K:mL_Z`N#YlGC5h$)DnDlIa&[K:V6gN7#PqO&_K;Q92?/mG^9_.UR>(KV^Q&:dLT@uQN3hDg$K&e4g@]Q#D0M.oP'Z>nrpSfZK:rD;pE+UYbPCss9n&s=mAqI,P`I<Tc;-DN\_^5q@g:j'MbgYPW3bVTHaO.53cmb)(DWB>j@h]V(VD#C)R0PCTrA28Pr`gc)VFfjDX!+%npGNUqUSjFR5mX%XXOLR)'?96Fkud/,kKVP^JM_>NW-M"NlWu7b,N[i&CQg&Jd"0/Q:MT1Q"`a\?3`f<Sa+2XVejMVCde"u>*(r%]9hNR6_=+YJ-&3A8<@DR__l2R]/\EjaVdg]":8N[ROr3mE;_J]LJ]gtcsbV5dh/NTd)P.=7"B8s_/o@Va8hCUj2-d%OA71EaAm"[mRR>u(3&:a.T/[Re"f>ELp\U3hs0ps'#ntUbF-Ho"[u#%"]&uKOZbu$cO_9b%W\ROfKMXgKqT0C"6ppL4d)V[0B]GJUfD_3=sS$rMNe_9a_]D_Lp+DHc^bFn<o*:*L%]O'I-J[pPK*:TTr;?)::iW*D1QS"PaZC-1F(IbE'6RgnSn\_PXr&LSNE.iptH.EEE@Z",ssk'cXr1b+IZVnkorF,MKTf1@\f%Ebf)]+2?';)!%tK#k>Zq;Zhp3FT0=fk9;\^C]HCc7J*_iYN!l3Z]n"-nd+c.K6?TXLDCIecVqiHD-QFtA_No.b!LW,2=nH8+?kHW/_pt`7o`)[%o3DKIhI1cP(p]#ILIc+P4o+T\GQt+PSBKboFB7rT/,YDbL^VcFCa7q28(:YJY+"g,0nBpqAXR?U0krU((J1I"A9Z62EpASJ><7H^43+7Sn8$^P'HtU&XipN1$p^(t_6YgNkDs"3CVZ6fFm(P18361/ZTF09H8Yk-S2+^@oF]DMghqB#Ac:jM<'PSCN#POcIGY7bp`Z:/RL.#ocuG/n]0Kt;Z9R06ipMsh[pL,?.U/H$]%r!!;!*7)[>ta,F<A=lq-PgrP<MA&759pf7ZqNqeH\-OTn#gZ[;cg&a3?`VdaZS>j-+0YYG&S-aN!1W[Sll62OA4/+BL):H:B\uAX5QunPmO4:\@Rm[q)^l^`3<MU,Ljg^%Q)<ZUWc#]^B?D\7@OHhfFmj;[T9hS"[(^;X$8Ca"jne45$:q@'V<j?S;1Y5lm&bgaCb7;aYne,=MJP^6m6&Wi"GmHMmJZ7fV,MpbR'XY2)+nA$JU+rWi!NF\M~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 11
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000073 00000 n
|
||||||
|
0000000114 00000 n
|
||||||
|
0000000221 00000 n
|
||||||
|
0000001154 00000 n
|
||||||
|
0000001357 00000 n
|
||||||
|
0000001561 00000 n
|
||||||
|
0000001629 00000 n
|
||||||
|
0000001912 00000 n
|
||||||
|
0000001977 00000 n
|
||||||
|
0000005273 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<4e647b92f1e1cf2bd8034db8fe473f62><4e647b92f1e1cf2bd8034db8fe473f62>]
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
|
||||||
|
/Info 7 0 R
|
||||||
|
/Root 6 0 R
|
||||||
|
/Size 11
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
8585
|
||||||
|
%%EOF
|
||||||
|
|
@ -0,0 +1,108 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /STSong-Light /DescendantFonts [ <<
|
||||||
|
/BaseFont /STSong-Light /CIDSystemInfo <<
|
||||||
|
/Ordering (GB1) /Registry (Adobe) /Supplement 0
|
||||||
|
>> /DW 1000 /FontDescriptor <<
|
||||||
|
/Ascent 752 /CapHeight 737 /Descent -271 /Flags 6 /FontBBox [ -25 -254 1000 880 ] /FontName /STSongStd-Light
|
||||||
|
/ItalicAngle 0 /Leading 148 /MaxWidth 1000 /MissingWidth 500 /StemH 91 /StemV 58
|
||||||
|
/Type /FontDescriptor /XHeight 553
|
||||||
|
>> /Subtype /CIDFontType0 /Type /Font
|
||||||
|
/W [ 1 [ 207 270 342 467 462 797 710 239 374 ] 10 [ 374 423 605 238 375 238 334 462 ] 18 26 462 27 28 238
|
||||||
|
29 31 605 32 [ 344 748 684 560 695 739 563 511 729 793
|
||||||
|
318 312 666 526 896 758 772 544 772 628
|
||||||
|
465 607 753 711 972 647 620 607 374 333
|
||||||
|
374 606 500 239 417 503 427 529 415 264
|
||||||
|
444 518 241 230 495 228 793 527 524 ] 81 [ 524 504 338 336 277 517 450 652 466 452
|
||||||
|
407 370 258 370 605 ] ]
|
||||||
|
>> ] /Encoding /UniGB-UCS2-H /Name /F2 /Subtype /Type0 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 8 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/Author (\(anonymous\)) /CreationDate (D:20251212051549+08'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20251212051549+08'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Count 2 /Kids [ 4 0 R 5 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3775
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm>Bibu&')h7%LsO%\GS&0I6\>%qYBh3c8][R?V%"#-+p;G<":R6gp/eZJd+s6WhU85YV#0dE<P,8S%8iDorK4VX*0s2Mg82d?Z6WGLh(QmC*0f/!9!?tC:@:]c18pF)=cKGX30n+r$VBg7j0BA@=-dHJSdt29T$e^e5W^(9)60J65!pb_5ut!s.4`'(]mJl*U[plESL>@&=p>e":r-\t:37U#QeM>5p63okIKL4m6%?$N>,uZiMBMQa$^C,g8?8Corm%MeS/)khaJhR4ek0M\a?G$:#U)OK.)*WI$2@EXb<Ptb4;IiS]Wo6gl0i1IH3Eeo(F'JkK5spkeNsD5MXUuZ!ECn)B+YCi!`e81XQ%IE]\T#%D_t"L&tONYkY$;K!4D-/b=$(;N^"kE80s=<48':%bG.JS"56bO#HZ,B3sWt=847H#-lj$I&Sf)=(Qi*^HDG+38;*#:qQmWuS>DOJPu=D"nb.pRU`*#7&%rI7Q;U,$emre+.!2ku_a##*+[WqoK0<7D:aIds3]8UUq5V:^aS8l(&[82nBX46PeJnkcCLrE7BD^un%fit9(TW$*Y^7?8.b(((*N<m"!3sP%GfBU;iQqP0mj)(p,bYC9oppPphgA4A*,TQMY'sK0b>BQ:e39,rq$hd<UiF!kA6`EFPleKg;TcD#JjkG</c]FID$M.r%(>ARa9P/(nJo9Hl(90U[>8")BNIbB!#iLJnLg-1B%W,CkEYco/1U7fb*P,iJ:KrjD8*f(f18juTEct'mSuL"JtV_86V9c5DV`,Brm;eT:0;[\he]*%,;$[XVf;*CZCL^DV^52qDQ*59\3oO';_T`1RoY.h(];,&D&,Ha?SM_Cq0Y_X;#*[A!]UB)(7t-RYd[_e:XJ>`#kO$.$?.dB-9@/$=QFGhE,M:do'."J$9U9\<]Hedia1+SdDJM"LJtEF%%6=%_Bb'?S;otJ.G7EI6E+B3hLb@$bN@8,["#`R^7h8>Xc?:<YjVe`.9q1_HjIeGD?%_`aVqBnP\H1&f\g5G)9fYk!9j).G"E&da`VsX3t*ZS*+rW"Y5@6pc;C+&LHGIR1hP3U`Of&PV&L5K5KKh!&;K+;<qu6U0/*.l(F"9PfcjaT[E&V7P,CujCU>8$.H=ta>9Jk=FC@KM/\WblN/:StECr2!*?X8U*U*?8S,bZA,Y=]=I<hIV@=h!b@r:p+&T([S?5)^MHllZc5u![[*#Ia-Pb`Do!(:=):_$'3X[;2-#R1d$@rnH&h>%L\R\$SnUd9o'5^m%\+<U/-\34Ar`f**c*UYhX>+6Bk)Dl]^PP_+bGWH>Y&h&?[LSPC\kiOAGf<Vq'N2&^:*2IDG&>%D-G_gEc"4_]RR;e+j)aM8%d'F##'[LbB56nI_$\!SK,2hC1BbWVi;^KO%1n7Gs,;@`c[Dlk=cD?B`)"s2L`o`>sdtTS]CX\u<a.2ZX,blI=%S[M716FkBl3_XP0DNL)-Df<no$4'V":pKLcM8[Q+M=FH1lbS0n2_,0_%"9%GHO@dgRIbAL>Y.+0UgD6n[%qG;>WI9k?.T5RT'JQCq/eOO:+4bS.b4.fD,g9V]`3s9-mB#H,),.dQ!rj(2k=rA@%BZD'iBhp=L=$4N(.?X%F%@Wq\@dN:eG^iFj5kQ_]uj.Ea9(!.i8\7DXA^]X`+*eGG*r'%>:[$'tY1<cKT1Z5$oO0o\KhR:J>VaKK`:%aI_`_K)Z9FD,,U,NMg64M6_":]Y^a>*f$,fp"g,2%>*_>/dL"=.!X]k)RF'gG1X]jocY\?CGbA\nLopYjLHk%dcoFHC!5oSet^ce&:r(WFs9rfJ9?eof4erFK&jCAQY%4$n?G$CsqH,9JZS1,a"S^7,lZ/Y6_\f]W%*H!&'I-KX!1(OREXE3$i*2e0rNZ#IH<'CShJT(h%4b'd%HK"NNffA_l-e'T<D%_CKr8?HG)`[W"!Ei0cgQ4)#;*3;JaeH:@<FW0.VG]hqO)?TP+D4ND9WR4iZpV7ghuI#cS[CT1qmYPTtnH(<WRn0C=DD"cdt_"gZlj9aKd'AtW&ksEL5A!&b=SR![0R?G'Hq>\W/S7-27%LaKt9cGC0[c)9p@9?WRP.gT"3u'r+*EhcQnc%&ZnB1!RgsQR'EMa(QJMt%Qhi;LS(&\q&)K5r%oT'J'TZ#TJ/om?/,1JXBg^^$.%""G0b*@RW-(!pjltt^ZYI;tP)703ZDrdr?;r22e3bOJX;(WPL`o:.ISaeWENPs2CI!H7:\mq!mP[1/:-m$T/)<2P2@Of]j+<ima.Jm57!u)^Z+]M.!>kapH>U6pl7t&!eW`gui>q$i&.$ZF[eJ?meJ=/_sX1sd4NJ3:Tp=4WDGmA*9[V9[h"`bD"S&[!t9QkF6maN,Q]gI:pbT'FUO)kQB2^"OU0QOh_?VCQb;\+5O3^pI'IV3:"e:YQU2YbsEGBDW>==6#tV[22\E_J[hL<:NaV>qeMDUD36_@eEH(tX.>Jp@M:cc+.O'h0RNS$'[\@Ch9hn+Y[fiU5"BO[#K,\bLTq-Rb0/Of$')I_*,2,Hf`e0%uE\+O0D)pL,^ioY:q/RXOK/2.14J$X9O.DS7`Z,:?4q^It)2\sP!G0^lQl;"U>bIS.^'h!UQaUgp^PdI%K)MeK9Sf^[\6+C`iZ1IYq[7no?Y:DXpFcs<C89[%GVd<go$TlmR,EVHuX#aX?.rD>9&<mu0@R<C<H[%ip,q1ZfH54:P%m.5\a/<7)#]O5>>6#,M!EY%&\Mrp*f?\EfB>>GuB9JE(LCfAR,!M#B[c]oT?.@\n&QZ!#<b[s`>oDWQJg>pQk_GbkJ^ToT9ZNbdQFVTUud5>6N,p'JLh>BZkEIR3nW<cs8nT48g?[m5([Zt8]MQ4YE>a!Jfpr,pY!=BW%$u:KsL!IXH`S?PKad):VWC'HddldSe3E=k;NiZ1e23G384&UgBH'ln^@CGU<;-!(!<::cK/O*hkg!s6odhof07kjU>Z3rk:"?b9t#%'&6_gXt5XK+Y3'/r:fTcu^8Y0::E)d'W\1M`I3G!T@eN,3QG"`'4&a=3\0-9qc25k/PYf3IP^@7195F7lN[A-^Vdc&;t=Y2g-P]ab.R`?JaI:MPiVZ5m/DAEEA#Tf_/OeBNa"huj<E5%%H#6AX^=PS9N2!*B1#*i!`CnAFE:pCFc-ln.W\aLfYd>9UBTHqnFa_R,HlJkN463NSqHPfsc7U<:qN[M%dW2D3Fo.C9uHkq(ulW/+Y&W-7uNe?aleD6Q`Pk=gU4Qh"au/kfIj*+A^ma.`B7r7`13"IH6?KJ=M1)(F%eZ,)S*Eg/[QrDXl,a_P^)BgoPjbMD\Q=C]O%eEn$$&E&*G,^bq%Y!sbI.a_c1H&`iN+%r#fQ@2bOs+D:bdH=doVV#D5$mf%G6(49bT!a=CF7[o^RI##>fu4oRkQA'.%mHT^6"*P_#NJ@1`prqaH_\S?NQiXqgdi\pin]/:76lR6.%Z])"eNop_#:aOK4r]uQ%Glu)_`#/St#;5n@Do=324>;KAr":rSeXKTUr7a(B'b4ZVq9m68<&+3X76SEUgPVC;pYeemIkd2?mhepn7od>@PY)FUB)Ng^k2\O!DjSh9=nH@Dp9u-j^L*Vf,[qKlf"*S!pa0Ra,nhkAm]^2TGOK$&0@X;>Bmr9/2(1YH5CNTo)<Eof-U8(8,;q^J)iX2]CCg6AY"4chFS%ccgln&-d/F:?cu'>b3HY1$%8iBY?4&T4KN]P=S#mZPuL:`PslMIQ/l.F]>3nLPAa\IsmgGVeIU=fI^kHDF-gm8F&WPG!oZJpHPTjSko~>endstream
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3251
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau0Eqbn0M(B3.),.d)lXsEt9::BTIFfc#Y]-QIR!l\u-!>6-/LBJ1-^\sbqFn]Dn,ap3,$YrG5H[<ut45Y<OQ3@.X>k_#dV&,\#AOVo\.WkqAC!*=&q6RH`H#WaJL7P2F[^)4K8hRA[m=_:uBXt3:rnk]a!?EAjF(MK'3MAf?WTMOf'.:LHmOb5,M7lCW0NHD'VaBZI`Ll6lWeBWdp4jh,6D[;S_-X,T:#Emq*ElF[<,'fP[?:)IXUQb-PIAPl<Bde=:PDF)5tgrh03'pHR;]+=<"%NTL\0n39=_Tb1Nuc/<1b6dYNdBh`?N(l@R&C8huV[`q4dYiP^P;+/GbG\!\`NQ=RJn4/NlWs-pc&1na>9]QA%l;,;J^Lh'GA"W7S#Wp.;7TY1.`CcZB88<g3Jap,7bBEK6-8(6n^k9CnP=3jFr&N`Dnj:&g.J;Nt(OD9smQASCVbSn+>6/^[[56aEq?A7fcV1d-SsBS@_@@dntU@i]D!/C8oBEHU,t2q6NNCe[JKB[rp_Z+0q&7_K(<:&:=`1b6aELaiLDq?H2i%>7.6PVk>8U<ulN;OO`2h?0X4\<I<D=cL5@Ip[lUYeqp+7Bdq70XI'e7g?37Q'uQ`'2gPn,Q6&g%EWH:SP)n9dMUBJTPQ8_3MeTW6E!H;0SU-M6*HnpN22nQ)nlrNG)iNFa!('UY5$I$?T.]-hM0%O%\oI:OL,f))Jh&OJZMf#?1u'B6Rf&?FB2;l;J3=Vlq!d?CNHLnDs:rYGia/(DqcXZWiQl1B%og&fnQ]_a1+,<FEA)M5,^;V[Q'<*h(;MpIImm/r6/nT]`,oq4tG?mHg.Y(T+PYI7m*sS"<M$`ZKK><jhMsAYagfTrGqHhMDC)9)#c/u\heBNjBIE+'+SKBVK-mMR">fDG.XB63CSl",_:?2=8>B=<VLOn'QTG"2eGn&HY0OJIt*US-tk#&l:W8b7NKK1]K(B$WJX+L<pmZkm3kekkH$!ppOOsTDR,7Xd'VDUZ;q/_$?h'.r^+-CLL7[:i*;:BiK0.1g6dWjmP5gg),LGdmnk:C`&'B5R2YSGiNk&Cf+F^pN%I2kFF!U=5;)RZCVf"l"YR3-+jq.\!oR8JHgcut_L[%B'4P+@H7\0iO>`qJ0BlNr!n&XADNe(^4[)\sE,J!D@#pEj]N3O\hM^Ob7H@nk5:l2]J!MVt1:GMs=:6_f/AO?)KY]UnLe"PUCS$FaCsHp4qYC^uVc3LLgSg^Ep,Qu8!Eu:VNCW)a(t2:=/j(TgPp(Y7ARPk69#Ic,[[Qs$S`,"A(HH-:98"cB2-$,;@('7`2Z,'.+(@d':R"!;^#rQ-B&p`==d&2d#nL]`p(j)m7q]Y'>/75R.T#r@Y(Pe$bl6dq<,S6YPAQN:QB8Lj_tR%h8ZJ(Zr:P[<9`cgmq@JIBHK5jQS_+Hph[s5Xm<JT%qU2%r1F60imBXl9I--,a*/6N6BL6B<#;?BjiPB#i#+6#:$jm)+;4$7+:`'h*GNjX2/lnST$ToFZ5AU[@Q+XB.crqN]63o82@rlgd844U7]"),07j'oK/QK@c1W>dr)NE063;e;:\q`e)K+LQM+[1:90\3ABfQqlG0#;*q.3*iXI+,E)W982(S[0t<]oqH3H76'3fB74ELH!H#=.b'"`X'<-%YQ#Lh<5G%2XVUn!Z"e3p\rsHcSF'Ug8!PEWH\)$7_/k^.pmr/9s7OZ&!,D-r@]aR>d8@*GP42IY^jU(lS6-g3=!,mRIQMl?rU58Ps-!!C^u0.U;)MAT]9^g6srD9.21`aMPaP-nV_dEII@jt#3@!'T[H#bJR7=\EJa8+3cB3!6Gts':*A3?7L+7;kI7q\=Lm$Bl)a-Th94rb.""SB^'tCCHc6^;L&IOl!_lGYk77l)(+&/$F&K@[eG3:CB+gE-a_\l0;hKS+EQi(O-F,6;O_MNin[;<:!Vi-bNaGK.p7)8&S1>u;fr^'-19UXuQ*r&JB0UC[mju7.fkfU42W8[R%4ZQCT$$a'B[(M#9Cgn'!HN.*quc5\T&coVd,g#)RP'P#F'J'W9%FcUUl0Y.77bgdPnP>gjA6BM:FnhJm6+%9YqULR6.P0fVQ?hO0=n)14%/V.5&%>0i'LDdZ\")RlicG/7DUHVc_7Ws@Jk7^b(B%f,4#P9(GGToHL#GFr*@Y7EIYS,g\LI0Hs$W>.-iKlFu^Uf\$rneouY-NRs1$%"Wu7)o=0kNJtE$<E_ri]+-2menlBAk(U9E=6'Inq>F;(0cP0_XIc!Ch,>F;OhO],jmgXd!j^\$#ZB<;p!REg"l1r6E)0-q_7_nIKB=(ln&06i^KV5b-.Mp6Tf;J4F'81n%3J?B<H)g'mLEYjiL]`jLf=I;o5pr?Lm6jH%b;MQ5$F)tXR91T@)36Jm)<hnDN\!g<3\F0=)Qf9j0jhFqlc"utqTj0"7/mns+H!OAAu[bMQoah6P)Q?*8PM.-Z)BY'2Z2$f,jmI2XJ0k)FhNn-]A1)/&-nL+.r9lA#]q/#4>Ft/c)8ffhq">L<i/3'2Hsrsbr0t<4;X:.^),@I5Iq>!I2ELjo&:\S!>IYRGK.eCY@H&NBL6[u9:&gO4X+AhQh?_S+UmDbcQc%:c00XnqBL^l\KE/PIFqHt!sjrj'P2c&+n-:L(^]3$Ps.2kL_QWOBSWk:`>$oMP2WMoFGem)a1O+P`lBr;Ad)FJ%W0k](]o(gmD\%;bGt0.k2R=UTsAO:cP\GOT]O,&g#Fnh9sP5cM]/bRrIf=J'_$\l2eV)S.)9@F*]*7J%X=_6)^MP=.PsI*F+l0?k";H)jIuo//=?<h`TtQ\8ZD:RHOLQ-R`L"8A0RX4VR=JA,aE.b[INA18-H2ZbnB7Xc[MV?oNbd5"fNgPa"7.IY$1.Z1=[hrA?]`eDgMS-Af2Kk_dltImI,H8Ag[6n-5[E@#rLacR:&.(m%KB_2LI1)`hWG5#8](\F"8]I`"gAjU]*Q^/"$l",deT_/aR^/o+?>jkA7iM:ErDVLTbkHjp&Q`_ttS+&\%RE,"KW.Lr$AC^h2?XA+aZ.5QWn7_i4`:*$#)XVn7TqBX-UN2.*@]21eOmT6R@b^KqkaVl?m%eR*`B7N;n!CI+&@Zgc]Scc.Yj8.*7d=AmBO'2>$_Y0NUF&IDte^9dJN522Bo23]rLq2,=Z(+'Eu=,?HVm(AtHd^n9n)i]m@IcPe8"1WCrSK08T5:s6e=eucVe+_krL:_[-X!`458CI>h3cb_m0_:]g=:p%8dEm[QjKG$^1!Klu#QG$V"%@n~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 11
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000073 00000 n
|
||||||
|
0000000114 00000 n
|
||||||
|
0000000221 00000 n
|
||||||
|
0000001154 00000 n
|
||||||
|
0000001357 00000 n
|
||||||
|
0000001561 00000 n
|
||||||
|
0000001629 00000 n
|
||||||
|
0000001912 00000 n
|
||||||
|
0000001977 00000 n
|
||||||
|
0000005843 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<a9ce85721dd684ec30e14da37a0df48a><a9ce85721dd684ec30e14da37a0df48a>]
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
|
||||||
|
/Info 7 0 R
|
||||||
|
/Root 6 0 R
|
||||||
|
/Size 11
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
9186
|
||||||
|
%%EOF
|
||||||
|
|
@ -0,0 +1,108 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /STSong-Light /DescendantFonts [ <<
|
||||||
|
/BaseFont /STSong-Light /CIDSystemInfo <<
|
||||||
|
/Ordering (GB1) /Registry (Adobe) /Supplement 0
|
||||||
|
>> /DW 1000 /FontDescriptor <<
|
||||||
|
/Ascent 752 /CapHeight 737 /Descent -271 /Flags 6 /FontBBox [ -25 -254 1000 880 ] /FontName /STSongStd-Light
|
||||||
|
/ItalicAngle 0 /Leading 148 /MaxWidth 1000 /MissingWidth 500 /StemH 91 /StemV 58
|
||||||
|
/Type /FontDescriptor /XHeight 553
|
||||||
|
>> /Subtype /CIDFontType0 /Type /Font
|
||||||
|
/W [ 1 [ 207 270 342 467 462 797 710 239 374 ] 10 [ 374 423 605 238 375 238 334 462 ] 18 26 462 27 28 238
|
||||||
|
29 31 605 32 [ 344 748 684 560 695 739 563 511 729 793
|
||||||
|
318 312 666 526 896 758 772 544 772 628
|
||||||
|
465 607 753 711 972 647 620 607 374 333
|
||||||
|
374 606 500 239 417 503 427 529 415 264
|
||||||
|
444 518 241 230 495 228 793 527 524 ] 81 [ 524 504 338 336 277 517 450 652 466 452
|
||||||
|
407 370 258 370 605 ] ]
|
||||||
|
>> ] /Encoding /UniGB-UCS2-H /Name /F2 /Subtype /Type0 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 8 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/Author (\(anonymous\)) /CreationDate (D:20251212051549+08'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20251212051549+08'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Count 2 /Kids [ 4 0 R 5 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3570
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm=H!_6,(B*,d&]^NiAK]LN?(L2+N]Q2K3[>sRQa%oH9-@V1d0+"MZd6=_QL7L]a?8X`1eZG@QZLJ9<KS"^s!42jUIsW^Vm>s,X@Q@U$n=$47[;7@Q"QX,T5R7Z19+>a=Z?"GP/sXuKVWnc\gdm^<E?!3+77pX2.bEPO]EON*ibqYhEraK6.Y=$.;M&=ZSV4HmVs_P5#`o/:snO'PNk]qX*"%cSbn\ki`%\@7K4tr=0$)\(mo[G!%#J^ngCHis3hG`Dnh2B/6!gmC8GtEkMP,jKb,t''L*4Z7/X"Qj#m6m[j(a')2nESiGZ866Ni:9QUej@UT1;oH>*LU9nWN]!EHE)V]ucM#h1FsfYsgsIE'uOWS("2'&B25kQh$q"c&S;`DgREP(-2!A!GhkC\:VkaMV!+T4kpndVi^[V%:Q\hOC;jPW%X[a#XY(61<L$55?#`VEuZHn`fsp^Ll/pO]#`)@eLL(16540/bN>$k<Tjq`9A<0W9/njY#f`cl1/MD3"4a1:/i4`.39)gS5cNd<:NY$6?,YNE7B8Wo"X(!pc-@.>*$nZWKJa]aq,OdWp,E^HV]-N;OJg&S_oNmYo':Z7";&eW:aJdVBA>9(o^2\0FXQ@pJ0tNA;t%h9@F_(om6*'TZ"76C2.a&9Oa^oq^VZ0b_(ucrSpIrAa=?9KNV+"a)(M$`B&M7VC<n">FX!_Ln'TImtGhLUF2hQ&k,^H1.q,lG'X\P+*0ErWJX)^CPsT>@"CX(H(J2dNX4'(9jlt../K'm1G-(ua.ic"5>uH_5-e,I7l:up#3oBMSl+h*pA!QjNUoPLCBSuVP;-kSCVAh7Ij)^mYR,>q)n>CJRLWQrCN1E(eA2n@9Y9ZnV._l48W(1^D/3;saJ_Kdg^Qaf!A+hj!M!146$&5&KT>#4*3/dBCN=CC,EDM!Pc<:X+$*i#nQ*4obEsnBDjiP08'*J(]A%pU"j7^DPh+]I%HP%f1`-M=WK&!A&.WsCLSpY/?K-;Hg"`BYgAHaq[OI-/a]ZRKiM\;Rh]H]VE52"A)gAM]0;/Y>MVtFC2Lngo66DdN=D[L3DoarH])ZZ-5BUbDqr:Hem_sFX="s2.Y:Z@9A!J-O*61gqM@)q\"P<JbM&qe[Jq.Vml;?PR`g=oV!;Sr.)%1g<JQfn]ZrdY+io7W'!>Ep6@74Y*1@YCI&]&ut!_$?0^#4bV$eL#Z\$L<=M!`Pm-lWK\U2^uSS;@$.,BDJ4#5-%$9Y'On_^'2Xltal]jpq_fd3n42$DaOJ;bH:/<ZEY6;d9/(gp5fVEg(`X)s^IaM:#X)=,,ao3@3co3'(X1&]52eC,X5S)*=Bk"!iB8B?M;B,&YX;.&kCE^5W>pAPq7<I<UH^@_flklkI'f;=kO4qHrSuK0p?n0AufF:A\INkDKCNiF%#:7,I(2$<,>&On9+.mKGVF$9i!NaLO?X6B3K$ACD6pes=sa5FlfLVRUKr_>?ARkdg.gXhJYs$bQ/&>``_S]3edSV6FE).HBp3`<N`j"jY&P6O!fM8mE)cdj.2m#9hNA]>81b[j,G8GJ'k,Wg&%0[,j`]#m:0T)*gJXoJ<MlP^q9,O9*8HpI@`THm\#aB(hb/Q665_&K+'Rd2Y8ugC?dPU4'e`?'Q`ipZ*=!dC$!79Xu.!<"oQ7TO;l4FXm!s#^RI=^u/Z:<P<B"CCG8D,"^?5M(3Y$FC#f'Kd0IcO+bd>iaLD,[)]^6"`itJdD/d59,8`q.+&Y=V,L]CEmFHSQ:Pk;8i?.B:\_3MI)*20YP6C-2^u1/\sg?k/Ach4PR1KnZ20,f(f`Po0RjBZSQ^BqgpJMm4u]=X,%O00(LUc,JtH9G1+pZ%o@iesUb&l3S76'jl7s:<fs5`^:6(qG`U/ldbG$5YS16hPI&*m.bi5dVjF^2-:[g`$XC^h's).YP.\lH.L:e3?bVI@9Km#Kqs27(;L8tn;?qOC7ifS(mcpYfS7\b,1lZ"FW0@Q:nmT?G>7[\Rm&rs\[3fSBl4ESRm->_@?l(<4c+:</c%OQg*5t6.q8-*[hcFJAG-p(U[,FU-\_q1FH#"sLU6`7iPrbN7W;1NBq1>g-cE,GLX?uJ#),rN?E,A.@V/7L#d)1?P=Jd'';-"CS1G,X_kgSen@XjN@D"WPbeGJV7O?.#>&K-Y\i`uUTI^oNGVXC!N>bh;Fj_,Z(Xq%\]d8JprLSDIaDjlK&5A;?EQNp.4[R;!7H.=U*0UAIdLF8.#'<U3ia`<J%c)"@>V8tWCRkOjd460qr0g#Q:%q%%"#'&*;q7^t/,I&&toQ-cU&r5o0AcT4A:c13OjMHi!;'K`b49CYN9q/\N1/>hY:B[VM)rXaM=MU0G,_=M;ln`4H2Pm2]4j;dT@KB@dgk5TBsnV5VQgg\SV5\jLW19o]rm&R?g4>jlu-7V(]'d@\g>Q<d_S!ddS"g^#/acXbBCICD*cpS$_>knnd:A]4+q"J^T/"%M\=MUI3<2.Fth<_?[lp3V:gW:^Z,O=\ujUH8nPO.2n^HgOnUnPaNk*/:FH>e"YHWecTC%2>f:,'3;Lhp#Hk,^S/&WKjUAqk<GhS+!RJhdM(9LS%W*esS;,ag])i5PX.FF?Dt_t+Dcjq`$51</uig0,@F($,?KldUQ(J#H2id%,O=,KUX6gmnk_Io75OHET_<hr"X"e'f?u,327,kCq95F7hU7j3UD4MA%(>#ca(:[*NPCHhd+'$0"98ZU:8WeQk2+T%Y,DV=!rHPm"+#fO@,Es*:c@o1@K"HMR62;Y;a%#C4%&'et#Tbt1+2lIgKB5k"40"0Q_-E(cM'4JClod-n,&Vs[Wf9Ba^^8b&@]qRXXE5j<DaaS_md.[Zg`LTR:Y*j'9eOl<h'E$\s$Cm-l[o*(E8YkR-.l4P66Qi((NB'U9opjA8]Z3ns1"+"sA;t'Z#)uknOOhZi-5LP0m<:2*NO]8$IrE[P(LKj1C$?)JL-pRbSK`]iM`P&*Kh.8/k8A23LhAl9L4an[7/;)9l-KeV$%btB0ck[/*"^[gI$2PR,mqrG=^#/PSAeg8Df9ZZGgg@oI#+c%,:_kLA)>io<VMapo,(kW`odsX2Q"I,;EdESqfhP9&Al%BUZJ\nU/nm+#/i#+ZSjnW(fO5<E.tb`fRrU\.$'B/2%VQ"Gn)*]I39(KmjsQkoN=FOGH*On/M^p5!C4khYcGRGPrA]HU64jb=bT=-)CX!&%>,JC`jBWW@P+&-C5"TK(#5fV4qA<&(mf.>$](ZO%iJdfTk7a&V4#jP*#X4%.Z:5jceh6oKf\l^N[j5/'@san$LJJ!YLFX=!RH/E3SNns(\KWV#4\mqQIT1n5S!DA"aNIe<IR3.jVdH/JTsNP`&8m]J"Dc#@c/[&3*-+>Eg!'\^;TJq&jXnPtMf0hD\.'lXM-P\Z['q8)/RMe-Fh7H1#WqnaMShd>G'SrcYYXSQYM'C6=:3*$<I8AP7+[lde_F"[,;--=pJK'\51JP=MWK4sF8.Ej+4PPSfOO5oeckIL>-qTM"Oj(04pr>77:`^aF!4>ImQ\=@'RW)`_M0Z0'c]]t!`=U!mk/"JF-Ct"S>C.'[9b5*f_VT&p_s?r8Fu~>endstream
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3634
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm=D0OIK')p1[E&fMD*66_K8S^[h0;YN#p(BB7Th-lJN_*]L`2%s;3,'N5p<Ge4X-IKOQsNODE3.UXbVLoubXg:frCC0(:270arS#8pZ6iSR5H`,,&_6a(CJXhOhVF<3A^kP7ZB_e3`l&='KV[epG!d/_8$,r^79XG)C[b?C[Bmsqg/I.Sd)IGTKW<,s7l:$lq7lBrR?1<W6HIVL$]uka<%l]UcBOXeNP)%j3`G[)Q4a)!19D2#R:Mb8Kb+d$N0_DW9H!*`+4<l+6^qfH5N^!>%l+lXdFn9%rc,(?J5u!`cSBWQdkF*F=l&0I,+UB3=&q@oV.J^fD6]rIjo1fF_O#GjI9,9DVHE@ZDIqPCs(+5gVi#C`^,5Z6i(Jt]hsmO<q?p>Z1aFV][CaHD8&ori\ui5O/JBVNAU<QK3P+FukV.T[WtRNfXT4(k%70-T"=$LTJiPLtq1WLHC^l",RVAXo\:i4?VW4$Xe`Kg?T!kul/Zi"DOO,n3r7=<Oec(j4MOopI\&5]89I8akoLqmS-CrhOm_n0<EQmW7B@$A8rc!kQ;O*8SD^+5W6,tja*cDI3fhQ)6E1::,e?Qoion$7Qfp.h".]?us8/hpC8I!hp>@S_?5$:`(cpQr_Fb!S2Jd$>q*SW@_059aNoD1cpSUC:=HU7EQJlbc"#XfMiVe8T$35P.=E,>"Q4Wl$aS@!Wqe]3#,,SZ`#6qe$M<[.P4gIjRg_:L_K_mOCUr@WrG##J+-jCV'7]4!r%a9I@*6OIW2>Ur7?;l!(KTiQ!s75q_eCJQoiYT\d%5^?WX^aj^L.\D\k:q<.QIn*%s;)/C$pdpdnQ[Ht?DH'\ZhN1$^JBbQPJCT"m+M,Hr,^YGQVL8*/"cNQ/#_(cElJP_9D,KfF]81PSWDi,>,_m+c9Z>:fp'<#bc+jS]"+<]C!VSJf(7ia&a1"*JWc3Q1]]LYM[eS;*5u+gr@Xt`h#cXX7#4-2%I2c5<Z"#Yg_irMHQcgsQ.KApYLJ0uEOS<J[gZrY/,\@aB&!3@:Y[`]re^d(t0:A#RnD7n&>QPTt>NS#3AVr^A@_9r5obklPVW=Y;;bW*J&q6'm_Wpt]MggR?;M5<c71f"]Ykn^u[M+ok)/gY:NQE-\]9G#aa4_l"[b1Gma'WJ4(#C@q;HUD(iPj]mQQb[AdnC:l)pXN=/^dZN4NJ\6fI\-CT4`g&8fHd#WgXO,aqoF?HDJ_2?[h"Xc[>P"qOr]6Ah+!JYh:BL2Y#@m@%EuVM(VfrK`n=eKO?NtJ5H(JTpTYSp>u_7aCZZ2WE(<'E>019IC:Ec3Dk]J)_nsC]j?S&+:fk(1^XfN4X[Y"dU*#PJg]!u-))]!,?;Ssl"^=\4=,qF3`k&U`8O+VSr[*i.`7kl7QY.k8u_h9E=C:]E:*5:rQ"lgQTbr0Qh^n.WesQLr>m&8bO"6mCJ*R1faZ*K3)*`'3*fX(+<Iq\s+E_LW,0!eE69YmJlLnNeDH#+H,<&U2.lK0O]Un%Z%*9gmZ?S?3BdLha:YQr,#_?njii$J&?NSSh`"8?r-.$t_=`O7:JW<b;.^tF!r7')UJ3$N1In5?]H.rP3_?piJ97NJKa0lA_\YbsbplQl27i`1poDSq?I8haCbRmR']:Om:A`:Fj]og^gCgu:P%)8(W_WMq5-Q*A(oS5g2a3leWG`H>KSW%#ELX01Hd!$NCk0_O2CKJVHE^5M=HC.5i"Pnus).=H-Fd/V&[K&hJh"HT:fN9H.:e#;S]MsqTVt7j8Xt)aRHlEpJ"X8l7e=X_[@m7BVfuCsb;WmWUX1,eSLL>1Hd:s`>c#@aI5V7G\(@0EFp4]SqpmJ,A%(Te)XW\4(7gMW%T88uX6;chP8FYZBl==N:k:#?>i%P50^5_6^'aL]o#(P9?3hSK>,u(.;l\_j$8qcR2qlNC0?2$ab4#Wb@[-i1CC)c36*j+g=S.ii<fE&Z28^865j+`A1dS#>A[B&=Lm-F-T30/;aAcis5"9AuOBC8\h'GG;6et0mih^I-2rQ]3/sd\f;_l[L-B;P!#O=p0-eJ<4?iAk#<&QI6eer.fQj>ZMT\go:uG#hs(o">q:_^$o1:`9$H&NRk<Munh8CY:l1)^Nq6Ado*&i]W[)hU6_dW"qViDT**A;>C-pU6/cm3PHNpQ@#Q%('>o!2E@/rBFhY-E;9;ot0`AVcX%At=8M<^'h6jetcc9^g*T+,:coH*p`>35)9\V,?'Nu!%p;LdeI5`((Z((q'A:t]>p3dC_&E0Z?*1u\TBZH/M^MZW)_^'tK8nZDtk&`sm21XajeK@ML^\iXQ"gf^XU6=g<n'`&S-a$gb!D!)F/L3&,c:]WD)9L1]Hc-`G-Bsklp=6"7BO:9`moHcPjZ$F[:!ULd1l,q;2.[W9i-0EWHYk>m@'.<tj&`n8tYRXRE"JsKZlW6gLq.rora27Y04:u;V8=J'2\k$Las(`-`RAW>`Z4rP=T!a'k\j,8qf2WL8h(Z5Z6ZX0VH/]3mcYKPM8V=H+Q)`9;q#\u%V"H'N[#/qkJV?'LnfE1s'@Ec(BMM5S)adThIAdfJX)T'$QT<hsu#+rRQVqVQg9"hir.KA<BY`+4OK_(BuVed@9ZXctT?f*g$pn0c_X=G*#HHLHsg5Mcc9"lFG;5d;@>@I?UENkmnLN1hf_!ohA!"g)%8n=ig4jl"o6SsD@s"5cITaKe1ohgD_1Ql^o5_3KjR#<Ck26=69)gX`F`osE+-`$8lM'6I?TPkdRC-rN\aCpX%F\V,[ofu,(u.JI6Ork(MA(t-W([?1>DY7S5P.b?:M\?TrjB;)jZ&fW,$Pa3=^k[J"/ki7QbM9:fI@SHI)LqG$@0NYAjrIrdjX1;Jt?>s-,\,TNd,Uj@cfp+uFL'_s@MF+64Fo.?gIeXtL`V-VWIW*2;rl$3(CJKIe'F*9iY!WZ3$`c\(f7ti@?#5q$g9uI<"[V8uD06(`-oI8d`SRdJ(+s4T9q^"mbV_'M[+F)9LQ<o!:.VdFpF$:B?=C._QWb9N7fKC?q&/&DR1R!A3N"H[$I`5'S`tTqK)p8U"3!J^b&hT8&mk0kF1h?*TDnF?Ki)jr+roh0c2#<5`JQT'N:S'UShRqo0iT+G"dMLu$`XF"*CbJtYXgLEM_"=<>h55FIV3\Mf!XoZ1g)JETR"M:=;?X<FAZj]<etm`:e*!/p%VJ-<kdK-U9\e=)57K,MjHb`YYQ@OOX16rM0#;4gb"B$L^a%fK^%U#H,1Y"\0;"UTebE:$*W0rS)_t4"'*"E:l%G'lK9Z/bdE4`LJd4O(f'V>gku4T-A^J85B/2B1IO`j+Qo,4GrkmNN0:1\DR``iBm-(['@Z>//Qn&!hIHR4a!RngIRk`MJ*u8):a*)MEuMWIEdlNK1WP3^&a#L_oHR$Ja%s:*qe1JYN<B2if%Kd#\\PU!&rmcN"1kY?a*<Qf\;e5?^)H"[MM2NEU/e,oQatC54NC[Rco0R.UhfTa]_1\2?F5`qW`rl\27CrLXATA/fW+HlieF<[]/"hH9BHW]cN8Gkhi[lp6">_Q;cMNB$?N#r>b-;fc0A'2eV4722ifSOD:5j[q76@fE#hC*@Pd3!#G:Pjc9g]k?F7Z\ci(WsOK/2[Im4O\G6QXSj*=Ab"s'gIWS;H]+_l6##2JL@.K~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 11
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000073 00000 n
|
||||||
|
0000000114 00000 n
|
||||||
|
0000000221 00000 n
|
||||||
|
0000001154 00000 n
|
||||||
|
0000001357 00000 n
|
||||||
|
0000001561 00000 n
|
||||||
|
0000001629 00000 n
|
||||||
|
0000001912 00000 n
|
||||||
|
0000001977 00000 n
|
||||||
|
0000005638 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<5217e5cf013dd0edc079a44300d80fa5><5217e5cf013dd0edc079a44300d80fa5>]
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
|
||||||
|
/Info 7 0 R
|
||||||
|
/Root 6 0 R
|
||||||
|
/Size 11
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
9364
|
||||||
|
%%EOF
|
||||||
|
|
@ -0,0 +1,108 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /STSong-Light /DescendantFonts [ <<
|
||||||
|
/BaseFont /STSong-Light /CIDSystemInfo <<
|
||||||
|
/Ordering (GB1) /Registry (Adobe) /Supplement 0
|
||||||
|
>> /DW 1000 /FontDescriptor <<
|
||||||
|
/Ascent 752 /CapHeight 737 /Descent -271 /Flags 6 /FontBBox [ -25 -254 1000 880 ] /FontName /STSongStd-Light
|
||||||
|
/ItalicAngle 0 /Leading 148 /MaxWidth 1000 /MissingWidth 500 /StemH 91 /StemV 58
|
||||||
|
/Type /FontDescriptor /XHeight 553
|
||||||
|
>> /Subtype /CIDFontType0 /Type /Font
|
||||||
|
/W [ 1 [ 207 270 342 467 462 797 710 239 374 ] 10 [ 374 423 605 238 375 238 334 462 ] 18 26 462 27 28 238
|
||||||
|
29 31 605 32 [ 344 748 684 560 695 739 563 511 729 793
|
||||||
|
318 312 666 526 896 758 772 544 772 628
|
||||||
|
465 607 753 711 972 647 620 607 374 333
|
||||||
|
374 606 500 239 417 503 427 529 415 264
|
||||||
|
444 518 241 230 495 228 793 527 524 ] 81 [ 524 504 338 336 277 517 450 652 466 452
|
||||||
|
407 370 258 370 605 ] ]
|
||||||
|
>> ] /Encoding /UniGB-UCS2-H /Name /F2 /Subtype /Type0 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 8 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/Author (\(anonymous\)) /CreationDate (D:20251212051549+08'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20251212051549+08'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Count 2 /Kids [ 4 0 R 5 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3904
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm>Bj26T')q=&LcQ%25WDu?PAhQ2N/e9\'!fS6ZiL4790b+#U7h;9VlJ%nh9`r"qWMd[oNA3N;p/Bf0!?u(_s+^[<2mOo<T[Z[$5\uaW5;P7<I,`:YBoq<mVt0`eZ&qZl[$Me?Bp7bQj9gqSADDA;Z-92pE$EX__uS?ne(43.RN)86Jr?d<j-OM_Z@HA.rQN=;CRh&<,gD[):Q3s&?Pnm-^EOSV>%>PQ_+`8[c,PT&kc*(Bh]4I5<uG,!)ui2qmWL+o-u_e84^Qj<=4jc+oCsfaNY?F#^dJ:."#"`nKWFU[k)p$)0>T2iO@%_J3\STEWgJi<HVTs9+fN.('Xa?U14-<&P,"cF_`A'@c?W_4>5RJbFTOX]mu0!UbEdhii/%!*I^^U0hS'+"'C,0KK1Ru$2c/-r%#K7:PNj2O3.ncBN&J/l>d^S)$^!_$rO/NW13.N9U^K!n[SI/nShn^BCRLs/m&PII?@,S=-[&hE0X%-G%V,cp0RW1qs>E^OS,VIPUqTB-"-eb\e0e!"!@rZ2O,aU7</R&i9=J[*]4I(pA<mILOejD2F)MD#<Y$pGSXJ!l.Mt6C=.K!3-IU@A5o8]0[?KB,YRXb7>jFD2qMYrWA*UF"2DO[*J^G&Wk+L\_N=9VrW]-Jn8Z'?7+6(,6*TgW:j`E\&\G@lX;S*kL1'LKBuFGgom/C\1f=?>_*HG9?s-6Y<\T(L/k[eE?7Oo=&(QD1@e'O#'2A7^K,JUr!pX#1MdTjKHrTW5a2as,6^it=_L1!>iYNW41A=P\r_csuh1@d`mgDfc.t&+><KYXB$=D$F;\7Q`?k%JiL.a;u.8Dn=)5mem"Jb!gJs#g&K.LKchA^o*_AL[STb]RRN,^_Zd,?KC(Z.+>nS`ff`5dAIhpJsTj7iWK!k=K8f!LmsgpA6`/C9Q,k],k%#];t[$\T>HgDFk4!05@#ZPEomM8VKWQ.'3UJEm29UDF.S(,$60^Pf:!?g&V&n>kiGGZuPP7e<GFYsf$93-oI^-N2+16OO#[fIEF3aY.?484McZVe>?&"Jb]3(a-qX^+YYD%W>O&K/>$;ElUqq#g.'.&>[D[W5(KE3%tppAOf<<8]UAQ0'[n+J,!l.+/^]N?pT.>h(Pmp)jBr]F[?^iKR`[:IJgH;Mmj4**CK!F$R^K+"bgc=bssG0Y\A!JUs^.i)1<,B2%,gSL9HYO6h'G1O11#JM3Nm(n(_&qU^0C3B@U]\Sc%#aNP`\F-J0>H<gq-cXM`<&,`-eT$a"\0*R0XQZFkk\*;7f3*[9W$\CJIG6Ks6Rq8(4U#/)[BL;M6mZPE*;>iNYGYX:mDof4e^.3@I_+n<Qj9gl4hn>"6_a.iTki424.AuZ48R*lPJ$k!/dJ#38dF/]D*7)QdtZ4J%6LCFTc3QJI/T\-k7ZXS\$Cr3\i_<F':6u8_u,e'PA&lFA,:nFVMXG$\i87.7S;7\*>ZM'`FcebWUL*W=EbLo(Pi6-V!Z5/R0q@8AjTWc@k;T43_KE8iVU5P_0-dJeJ\hijg7+Po7ACM=OA09fuc=Y-U71=4mD:J4l6EgT]oB`DYE'u!*\.>3+%"mbGHaKWq!Z6jf3l[3o0J#$0bXhu#jgC^RBp=:8_E"0!)c9/"Ri$D6*8O^07.i1si4d!'*LOmaS^aKg[<(O_V+f?H=n&qS_$X=r2&%kN[Pm.s!fTV&3%H=SQT[gYLC[7E`=5"W&`=9(a>k@R4Xa5&5mp:oVq[k+UPo27PK.hY%3c%K'Eq(7$ARoN/V;2gre:LoPd3l^e+:k[dJSkJ8&QJb>7291PN=s"mSH@S(aCOtc/n+,$!dbX5Wcu>?p\U5>!tAtT'2=fD$11BeimJlAQmsN*;L]%\'[,T%q1[,e^p2IR>]G$T4ouIA'LU.9.gs-KhojS(a4`V!<Y(YAJ:Ci3Le(`hR9A%.k,j6rsX[fMh[4P-D,J;H1s%WXfm%fb-5tk!nEKh]S5;>%',i=K*Y(EIVTgX,UXlZJMMn#k"5:O"n`l,XgMMr/.4u&jXTTJ.]V3O=^V5lqV:4=oOI@YJ;-hEn[HT>bb>KYN;\%0"G2T\HfoPTL.5V47$DJLQU<&J'Kq6oQ]o?LnE097B\pk]hXr_"M$Dp`Y$Ak2oeRG>`3@-hQ6?"5g2_'5NX>jk+2]H`g`C/"k"aq](jFD:'YUY\=1@?'fVo4?WkA9RKa@j1Hf@Hn7/K28BKGAkMLhJ>&toBeO\>h`M:k@bs,#2`B=<oG68[;<TEtUB<Q\KjQNM8')"=TZnn(%*.RWPbLEknkFSeR90'OP,@._'lhYKB$Diql\``V]?#1c^L=^lK\8M=!'B_0LCOg)cmQJ8Y.CP0F?-P(N2A<_goQHIjC"A"'m/ClhL,Qatdn(;s0o@reSRFiV0*Lu^kgg8Y#_8)luF1Pa$*X4G&.'c5rrSbV%9Mlf\K2?B:$u4?0f-,8OX`8ir2H,]0>,c>l1ieaCL1$rR7n7t#-THU4[X]P0\IlY>*k%\=#.V24!OWL+!Z.#Flh<F+>1:TYP^(KqB`;J56@'McFC>($f)&]$!_!Z?#RdIVjtuf(ggrtu>8.blpM^Nk<u;I?;]0-i$`QAon>bF\AVN_R1I#/(Z>"mQ.nC]]Y\f^SNog&9q;D8A/QHl1?e/ocC^rr$RjBGBBV9-PGEZJ2\WE"k^"WEdm^1+j?$_,/c1TD!6@tW/*-l(r9/,G*o$pXRmgi!O6u6#/<tqq<db=+?PYYO\ppVkEHXOf4QK*87d3P[tPMh>S2cmetLS8H3?`:ug:(Rmh"sI,+2]n89oq=PklCV&q*V+BbgFqqE?rGcHU:1?`Q8d:7KDhQ3oV(q+&%MV%c?3(RR/)E6=1,2t[s.qc0];\lN1>Y/Cal^`8$?SQjuY,t:`3_T5EM.9Snu^5lBs_IccSmMY&;F4b5B$),+Ri\"h3T&:mpV1F)#0X4(1BKqOXV2%2tf1*)g=_:0Xp.h:#$hf?4c239!8'b[Ff/KoD!]#@t!-^uaG8%@`?SVf/Na8LKX]C6>/^npZ](&(IjiMq)RjZlAntpTmKjST7>:*Als/nTKh*)t&?O5SKgY?dn\"26d<XH8DaGC`5D!qP)q`B59_cm]am0(XBS4jUY_nN\/hOhARh]9JKo/MHX,o?0/bDaNfaH\"(*1Kak<,DpHai7QfdkaiDJG%GZ1?PVn3SoC?YMAYe!pQI.Dh;$(ee8Tl(P74rgr>P=KG9fcuW#>IYD,T#5D<H&?!#UM%%XKW8[*fQ"g[]BM.8Z;VkF3]Jk9\hY3FhCH#,j<dUb]q1K!?Xe#/fAV8ER*R0@Pgm*aE$DC8SJWNK5*[+TY73aSg,PVq-4l2FF^0SDp9s6pCR4JZ.]7o"iht/k01YiGG!!r`tjTaYrRH)i/Y(59*$l@PrD,lYD!"l3OUT):LIul>d8ZTX[`&CVo76?2f/?.?_4KW^7F@Ha*5mn.7d8X7VU>X7dk9]rS8ok?b("uD[O]@J(mC8`Wom$4$HTq)F`XQQa\J`kgV%Z@eAh9]&.VaP]]O?bdBHYkX/=^F)i(EDC_9Eh/t'YWM"sVW^Rg5JZBu!>&#Y(E2(=@2:ps)TpMErr,%"soZGsf1#8A+cD5!0W>)EDY_/O**E;M2[k(iYMD>pu[kg)$G+V73\%<P%[51m-ri1Xk?[nX0_4p:+Yt:al2r&'].nX/BO^`RO#'f.h5"#q)M^Vl@NZ.G<S*orM^/B.k(Q[[d2iME"fD'3kf!_I)J$kH=S7=8cs!O(%c1er>(c;-sN<^9s`BqqZGl:Y8NTV%"?UAoWgohVCfb0D]D*;sLPaTNhgnm62p@O0h]XtSF)S"i<U'PE@hH;5tIPosg-A@EdY,GPlq+2'F%d/%P^VFPP7^51O7(Q&D"Y4--<PcU.A#ZkBd$J#ABm;Q67`\6%\m*d_N68j6!?[RGgA~>endstream
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3142
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm=qbu6?')nH:6L8%(8IFg0O1haNAM9Nh.bL&,!8$LPA$?CZ!eb4EI"2$9pWQ165f?aW8g<$<BVqD/J)0&qK0Pm/qkm;ud>_mjn;*"$4,LJIWi5e<HIH01=Q+_*W`M&rQptWP[V?\\_g<p(P7+Hc(L4%@7HFGsT!#jX4?Ze:h,?:46k+>eSlkd`1(fZq6Gl#ri);JkMb4gr5P3naG1GhqSO<fJXA%TX]hbHTM-pB+g:n9:/c=XcAF(cXL:%XCoaO#bs%0#Oo8@%RGegAYHQ708UZuiUG(s"bjLSTEVU>XoW3>P#qHr-%2Fe&e$kubMKEPkrD1b:rX[&akGZi(FF[&1,27UF<`UOH9&?n^r]nCC[]u1(9?l7PBfUG8YF`\Y]gaDMq[%G2u_:W.kejk4imSu<iX8Dc2mYXZIR)oQGo!4#d#AYhE1/0_pJt9=&7ir.)G)`!]lgKj/-YFga_msg9I8BT61UH#:3?0Bl^eK!"G5r^o#ibA+>XrG?$N>;b.&:L-B3q[ZDdYfV_anhA5)?(-cZ(-[Do"SX$7ct\3s+4`.&dY)NOES>_)`GUorke:BiqTN%r<Y+X!Aq.NBeGg_[1!M_QC57_*R%>08E8L15<+EM'TWH-cl@\&)8AF^AkD.7J[j.Of;:PCj!*VCSfRf;-6?*[a7&`b'T"Q.EmM!62sX+kB9g>XTVW)jg9/ns7&(iZ@pAU9q$">`'IVCVbAm^JF\k1@0K4a46Qi<;LG'a_FN&X[=p9'__X+SLE"Z&ft>m?Qd2r/p2iQ<;oF6;OqL$U=[:k<s!i]ga2->2fG.ch!b+O4_2b<@XO+Gm9eFrqkrD[.@\GYf3UEd!p^0_*ql+"8(HuBMl.!`*:D47KK@2#7QhBLcJb,"eOB5&8E(aHC[u^T^:s>InZId^5a>@"!)Bh_XaCpbi!%d,1B[m)>;@rFXWo@%B8'iL_13#[IW!@"Ys*fg(c7+h#:ic1K7KFD3,!pm]dSTp/l5=SoQuMCIbc*Y)FLJ+Bee3;OHIXi?UJt#p([6Ni`S=.VdpE[:j?78"eK'/A_An)(jlkEPJ>B^8`FRW?T][[YN0/1/%HE)FpkL\"X-DCRRS,b10>R7VL;Cp<06Jn63++4$-lMaB\e"A"Mq)$j.#OG*OGAh[)ELIi[C_X87-mhi0Oaln!ZoI"F$5,N:isOtKA6OcK$,]d,*Z[EL+_SkZ\B,$ZP2<7L/OPr.D4&C(=nZDH/#t(A9nS5GYBe3:r1mROq#KYKkM]QC_D>p=Vh(;M+,3!es@][k6V#Gg$kgHPOem%O7qs#KeUETE2DPKp9=PH259"?.s)#dW!U`4r+Bgo>]#<n[a7im*53&tID;e0^g9DA'd)jB-us)8MK+OrT9*%EY;/YmJJK5<mJ+iSp,+7OdSAC$nXg]2+Bp<"g94TB^U_7I=`M]upGsI@6ea0M!Yl$i@J[RZAlQYUaV*LuUmXLM%t%[E/hNc1]5#HmK"4\AdV_XdeYZ2TJ8F=$Uj0K/)&V@m-"(BfJZE%t0rd;_[3i;E"NaRQa6O]bK8"b<*ZQ?Bku40#^O!\)m+a<3%fu*H_<JX=Q$4s?^^Pn'O^tELq='n0H4+M)Jbip4#0WO41:SEdF>66^Vu`(NXR?44HibtDG$7he-%m)X_P2J5^*S6nXIr^bVjhr,%55KVj^5>!'V<YE-T,h7Qtd5apEg*UhhEoB`KV`SbW$)1oE;Mj9aJ0Ch!fcKa"Bk9Z,3P1JG2'[KG8\91*UlKk2r3VZRd>9k4lp$i@8YDC*cNj<Rl6'i0ePLo)Ge[Un8#8p=WMCime(3A7Mf7WgaRX`rk=P`6F+NZ=0q'-&XgAA*j(&crN=/7%qO>^mM@r>$rI`,Dn2lG(fP5FVh14#NG#Q3f9ZsUeZ]bYN'i@;KD)R(=*Q9QZV+%_(L<+RH[!K8>d$rU+AXE5@'qi2MhQ7hh?U`9IaNZ/DD`9s4^)E5j1J,dB]/sXtO#k.GO,ViFo7_iV_KA4=)BIm7!3-_WdceO;\Le03=_G@BX5a[]d_>4=7K+08CZLE:8D6P8[F8g'AZeIa3$a1SEXI'`_%N-Q>cJ+sJT>/Z)@V,SCd25TZ2_bSlLigDZpEHt.[r]J(s#]AS",=a@GZl>Qg,PBuiF.>$6pGm9p/J-"%h.F-Q:<`r`dp$r-9Ou>H&]/fhu08YW$o\QG2-Zf"_RMl1/mr;C"0;4M9<A91[<Ctnj]&6eTaC-PE1%elf(/L5=,37+s8kr-*Gou/s).-jHRfPjrbih^tJbDgmoP=Mkc!t)@E]b:8oIAfXD:M3aSK4AGIs0<JD!<sG.tU1feqnD^gsJk0$GngK85cumM;09A"L\VFJ8hDu#@YHa!=+`1(*AS*b-LILRZ31]mHM1i*3/d:;&`;E,Cq*84%D]FYdqkA*pAh3n?<OI=]C$=W0(LXL>BQt1jskIh%U7[)$.]ER\M(.,.tlcQr@Fk,gXe3H?2?c4X:=^nRiaW&=KFmRX1]kkJ:Q@+c931]WB-T\AO_ePL8uoa[X:#Hnh)>B)ACmao0-NP2HA+YUYne7h7%:]&7L#[4r.n4aC;RYAJNW^7__I*F+*\?qMpT+e)u8d&<a*6V5aK.$'=YRi-%F+9!7Aa/QblG_:eA3un#e.RtZLC$/'iqbM7hpg'0lWDI?ojQX>Ma-L@F5_T8;UcWMnl?[DH>3pi(;$7CnA.=lVN]P;$h/gBl+XBT24E6dKK,48'aF&t&l$8+kBM8Z=9sI24ku*XU#=oCG,5*[6hKmU?^?QQrC^\;KKk(.BZdc*raBHRnM_c4-4%ONa6C+%,:0fce=M8IN/K_HY3_L9:C]AT\+#j=c,?E<SGM`0e&%,jFdH0>'oL)F#-+W0?k9p0;1O[SJ*:-9A^^l6YTd01LBVB>=iu`n)Tk9afgXN(3ee*Zi`&7sqN"f%Q4;pGnSpF68nM2JI+VI4,F]O%[f_H,GbXMSc<JNf$Q?*b+Ao3ac_Q\uj?DC9O3SA`#k^d?M$5$W/`"ZCP$bl02bp")%7+8PLhL0mFQ:rKA40FQJoJ1#(+jAI1]PQsV]Ad+M*Do;+Bq+n%!6b]6=Gf'+2fUJ8#^?<3L>-.8'>eXI6i/Kjb8hA8c9FE^/P>&sJ-95`I=V&K<#dl-b=@1FC+S?,a4?GKEjYC%&%2Q/~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 11
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000073 00000 n
|
||||||
|
0000000114 00000 n
|
||||||
|
0000000221 00000 n
|
||||||
|
0000001154 00000 n
|
||||||
|
0000001357 00000 n
|
||||||
|
0000001561 00000 n
|
||||||
|
0000001629 00000 n
|
||||||
|
0000001912 00000 n
|
||||||
|
0000001977 00000 n
|
||||||
|
0000005972 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<abe932c41923c8d42bf0a1609112b894><abe932c41923c8d42bf0a1609112b894>]
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
|
||||||
|
/Info 7 0 R
|
||||||
|
/Root 6 0 R
|
||||||
|
/Size 11
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
9206
|
||||||
|
%%EOF
|
||||||
|
|
@ -0,0 +1,108 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /STSong-Light /DescendantFonts [ <<
|
||||||
|
/BaseFont /STSong-Light /CIDSystemInfo <<
|
||||||
|
/Ordering (GB1) /Registry (Adobe) /Supplement 0
|
||||||
|
>> /DW 1000 /FontDescriptor <<
|
||||||
|
/Ascent 752 /CapHeight 737 /Descent -271 /Flags 6 /FontBBox [ -25 -254 1000 880 ] /FontName /STSongStd-Light
|
||||||
|
/ItalicAngle 0 /Leading 148 /MaxWidth 1000 /MissingWidth 500 /StemH 91 /StemV 58
|
||||||
|
/Type /FontDescriptor /XHeight 553
|
||||||
|
>> /Subtype /CIDFontType0 /Type /Font
|
||||||
|
/W [ 1 [ 207 270 342 467 462 797 710 239 374 ] 10 [ 374 423 605 238 375 238 334 462 ] 18 26 462 27 28 238
|
||||||
|
29 31 605 32 [ 344 748 684 560 695 739 563 511 729 793
|
||||||
|
318 312 666 526 896 758 772 544 772 628
|
||||||
|
465 607 753 711 972 647 620 607 374 333
|
||||||
|
374 606 500 239 417 503 427 529 415 264
|
||||||
|
444 518 241 230 495 228 793 527 524 ] 81 [ 524 504 338 336 277 517 450 652 466 452
|
||||||
|
407 370 258 370 605 ] ]
|
||||||
|
>> ] /Encoding /UniGB-UCS2-H /Name /F2 /Subtype /Type0 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 8 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/Author (\(anonymous\)) /CreationDate (D:20251212051549+08'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20251212051549+08'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Count 2 /Kids [ 4 0 R 5 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2871
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm=Blb4`%fPg&0lcT`AZmrU]/d,TM6j$`Nd-Dpb-O,W;\X('4t4J!._e+H\u0me3('sn.a'%XBJfPdGQ:o0@IT?,o6?iP5E:ooT6S4A1-/":8l[YC4kU_/q/D+98_$BicV0X,b>W*mLNW*/ar,TLPPXa/dlX4dLMaIbo,RH8M,:^;&@_hO2W_T(!i+@?hekR&V%qJ(>R3D4k)>]W]O^p>^7UA@,bkUd<cpRX4+MfT2G90UN$4[["U#27E%%!]TDC!=E<m'hR44LtV%BIjPeZ#S]:$Zo^k]ma_FK3=s+a\J/ISaq`>1X^poO*G+Agn,*<DA'e79b=7DO"I&-)i$idU.ukQ6=Z71(*@p3,KXom&1F+ZIG%'E!?j1u]F$-hhX1bQ0c3$R4_50"@?tG2i!H(Q&`E.J`&NfC2EU*o[i$JU*i*][)9HLUkdu(ppMR/u6__S8gHVPD84=H,3"cOe)W\'d+B`1*K@R85]WmN.!4`aoEb7\[4qc:SF+/$_blUU!tMV/&-"]PJJ+:Am,#Iei4>pWROPKT8E(\n<K#(M^Gu6HC?W]-ht,![.cf*5b=_Mi`fT7o:`P9DTh0u-_^GC]J=$:%H_<>E_5/lCUqill0)/dBZZ2$D`ba^0[1_?"=0IjUh"6X%+TlJD-JSm\e>3Ipd3XkSC*Q'-ehr)%9-bt"np=0pW%4Qq<P6e/>CW#E/Ye:!+K4"A#9nYpu;tpFWZ2tLJKpLO#1-I%K?lVN.hcFn;0J]C*Fb\/Fs$/K3*Z0F&F69L@<W.:*QKVE.Mg"jm3`ITM7X1NIj<5)fki<)o<OhK5+!("fME<TGfY&ihk1`phlO!,RM@:](Y*)B(BTnUcM\dKIjYWb;a42#8oKUB]9<4lJNlr7>VIoUn.NHX[9=;?bZ1up0a^\c;>l-kaa)HYOCZ]S4P`Tp@;U^gR')8QhO%<QlNQsLb8/1A9MsZ'(63!)HS[8TVK<Inttd.-a2HsRUug"24eB!:>`Hf(tX!tFEjS^5@$a4[.Zu:r4i5`5ja;K)*\$kZ2b$Z-](@3a33DWi]Y+4InYE4Gcrg2;?E!J@C\G3=%8ILL.(H*^;#!V@M=Zm5.W^7>nmced+uT`0uF>Gk>*+CUnggOrQk`c=oJg<"Lob-1<uQu"1na%+@@TqI%";l(X:"&kH)/I_g6e5HUsJb7:k4Ugmu^%>L4C((L94q8t"a\XcN>o<8c5bZMfJDr=ME=VBDQ8g&V1WC(2SVenbGQ;Q3WmSYR!56/^>KJ8u(:icMNW1)$Xl<jZ$>/dh_f9@TRt63%c02T/?!=NaUdNm%EEF[g?%&.$QV.G,-s&D;X4d2];Wk'OkRCsP&_N*r)(08\N"KO=QU+e7^n1U*"17TpO)RbhWkU4^Jr55P',$Yt!0TlF=&CE>C'4krKDq5`OeZPsj<7^LiIO!+0R'rQXS;ej:>_Euq[0Q7&=$Ub'k0CS;s`3L-!9h'm/2<&B"T=[u$]sj-n<k(2XYn^]YhBl!3-s.sd:>g9;B7:5o&lAE-\D+7)"M<-OnSLP?Sk*;aJR>sdWm`gO7AMe3eR3Rkc[W+KeTt62/Qk6K.Qt^l'A=O>LZV9-]1U_%RiQoZ\Y.lU2',%]rY@Sd*k";<S-'!tK0@MJ2O]&JUkHHs/Z"Y<#_L6&J$LEK8cdrdZgC,ZkjT_!K!M1WVme2jlZI[]0Xm5]Q1jI>(S`Il3:BWIVfX\qpdOkZ-:J>:=UrZlH$?<cq<<m[-XkhOpYZrhl+4\j.SGXWdPfaoAA_^tQ8sG"8:P&iWC7ELCnUdR<4b?'Yg(FgODH7fpVDrY&j.Sf_IfAfnhW[<;;C-c&%1;;iCdK#q_'(og`5"fa4p'7H<(3\gp6&]]ohc`.d%?9`IN[G/%OHE(Bc!720-674Ta*Bl]RuZ"(r`oJaF@h4T!O2K!QZ\7*O$3KiZ9HoU%i8A'Q<N*>VL;+BG1JA1V34#H&u/gq!49LI'>7]gYgH4q!2g9:H$]b,'f:m0mE3*$&.+>:Bn#>IsSQ&j!Y;H:E4#HrJ'^!/Z)TM;ou>X`=gcNA*bRcrbq9)-W8NhP+EN\na']0K,3%dsf1:(^>PpDN`0$1On1L2Gbn1SXOf&Ic>a.D#SEC'b-^(XMFF_'SD=U$]NNqLrMU#>sXDtMEk$M"]nBr<>k4bIlJhX?<50$.p$;3ETR"['\-pErn<YPa&pS:<Udf,"$l2n.XSkEH!lGm&C)1==?"SL[Vf9!@R*_E)bjI0*66`]+`1*Eq/.0!kpCK?kPZDFmV;J-H*1,$=&5'p/RJNnI8Gs^(3Et*"hG'$6R[[A`?Hb)^1[Gt"XdO>YU[\PpFef3Od*X`RW)pu/L#"fp]k\[5[*cGb#No$gmp%V5T8=/%Q(%5K'I'=c`i:r@sG>7bU>)i.`<Ubb`g`.rQ-SBPok-!V0oj7fd8LoWaCt6G\0laZM(>)DIa<gm5_SpqN!>VT(^a&9t>"O>gCi9[!+nq<#jpE>19)XatDBI]SBR:peba)U'mQSj`0-RNnJfTdDbXX1@CF*/a!)5dkYd"0nQS_Ta%ED`-(GQKTJ+0h'.ZK\[&j^<eDjN9DYmmLr*eX1e1h3hBFsH/lE.=a;f\]*WDphet,(*"BZ[9%o*pUXX&3A>*%B^(%,;ibN]pDb0m1Pc/rrY3<2KknA'aiNjk=As,\-)?f;GFpWPKL1bh?II2?TD:n`)!6X/$dd<K1"(58kRkCXEH7@+q(X^;Eq6lYr<:<6:$j/i;Z_rPI:@V<@86>,89/i:,'`(ma2s7uh9X2m(<2eUQ]T=hcqYJnEK*uNcCj$PBk%=]\p(G$,gU0dG25,5NLmFR@uJZ@^GJU&7F>*Fdu##,c;m=/Kn-48Nd'3-H0ht9TH^9:\1h"_nB1M$I~>endstream
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1979
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb!;eD0$@L&H88.ERSW96;3JADn_Oc6AJ;D-&E9;@A5(lO;LLsKTP\phqm1S:\$Mip6jd(%R`MX<r;ISUXe0mAci!(*hNqKlukV*reJ]CAGsD>l4ol_s3C')(JYb,85aY5N6H.1\ZT.V6?I5(6Ea9P-@qA7(!+8l[t=jk,,8QsZi1N<6C%kOA9-\qiZkWH*-cFKeI)[)V";`d%53ATGQ<:2U-jR,!GHF/B^[%5iagdg%DAf%;gW*6gk3tTFjRu#DZB+E>n<66s5ZIs=%]!sh=+&c-rA3*i3/%)aL,%!!a9K7Pf2I5#D7M6nWSB`]+499aenT_oEs[K(@!*qgnttCCkG]nR\bXD5<ks#co^+&3T<1_Ba.llf,L6Q'h:RH6_.TlLIg+aa'UjtV6'\PlX.>Y)keReTC/?e97hA$=JoR@7qoEY%>tFe3R%31!"-TUJ%a+CZK>$f4]o`DZ?HNS&EM"R9F2-1Y+[NBr!R!4G`O(ZA3Zdlb<bOB=.H&B"AR=+>muWJ)uS4+(p=5'j5:_fP^L%6\ap@Ye0kY.j1lF$Ef*&B(T<r)9OIr!J-Q$'Eg`X`]\^D$LKEsC;p*r#-$\lK;Y>,%#D,/d7-O6VQd3:].?\q4cj;RM6Ge@41!1o4jjXU1T"J5g$VYZ2*4*tQc$J".1E:ced!*^F$J'D,cRo)*aXXaO'LkZ[2G&u(PZ@Wr"(s$*cia-,\b]dV+3a`?'-]WOi&F58.^(S@<6)I<1p%p@*JS(*IMbtaj?9r]L0r1`EJJU6MKY8+(`>gr9?ou"%RDr>iX;Z=Dm2b4l*BW/g-LKC^4(\T80jSb^_7ulgrA5&eJD;]B^^>8-En:>L)2ele/KR;-J!+"dm@g&^N6,9/TMh$*s_=r.NA7IkhmEe8!M))r@1ba+:\qtPkVq4q?icqXEuht=QgKN9<Yd3>:6-F(2W6NkT!7(<`6JEKgmb_l8KF=>?VN5>L`-3mu,N(]*P>b'i)oGH\jV?er=o<3s)JU\:\ocMJ9;ge2`,;b%UP_YF#tI?C;g+NVG:E-siH<=:s/a3:KP0Y[SR;A9HL;aJ62:4`@EMk8j/b3DMeD0Cc7I_uQo*>X[%KR)#Wa[/#LWOeE!$&u)L=(#(3:mehYD:T*saF96[GQ0'AX_[?!\l3rr&*+r5&]]CQ^,.o#s0H1_d\o!"=7*ckm!IuMqa;C[$6c/rc;eObXFX#lr<(n"j2FYU;[S]%R33#*JdIf4)lf@UbVs<?/,;LU/AtOf:1n6I[?+%+Xn1p\mW$U;bk9l"CO<e:7O[%*@#`bFd^m</978m[:edDBZ3-G-iCL_0dc^)bPng!P#F&><fX]<_DB[ZCfiK,)pk9q9-#*;kQ"&?pX_P%I.]F)[`d+Hq7BE:XE,9SUr1$[%rKUg;C:;f\P,=-EeFd"A:]mg91bUONF;mg`U?WEcIPRL9q%h5Y+d#$B;nA[k%%"3;*^)$dD4&\tEi.R+XQ(0:u<*MhU*&IgiZrTXplXucCURTMY8-D^mK_Q'u%A#da\$bLHnOrBnIeI'RGk5qqBq)2e;rr8)jM(/(;jl4ZAC9WYS/bCiF6j4.d3=Z`heO=Y;N/%Z/eub/pC3tQX-hil*=F2r_[V^=*CQ6B9lX3N%hfIPW?bLN?]-*\&oOim7*4"PkO96GJ>XTR5[[Xs[s=moYngOk[p36OA&>Q>LV2GU9C@@,Fs@qX&1C&2;EgWiY"gV:&kU_6>Ths.X.%*18Z*G=QOXqJ"dS^H2B<N=Cu)(h,^)'$5XDk]7mZ"hHTf6=55_EEc%Pg8%eK.Ld-T"LjpaZ"p`L[uFLG`[/g%Z`T3Y/2K;I%_c-UM@LCOEtGsLNs7ItRnp5]#o=0F`u`fTSC%7oKb.;>Vg+W)4Ym%GWp'tFKT4XeQ,l473OhY98S*fRR,%mE+n&)`1jEEKW^ouJd-h@:!=;#fIeckS5,i'U.ei]N4>\AbV\Q)X>crqVc.d?.(%7m(#N(O<Wa[f~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 11
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000073 00000 n
|
||||||
|
0000000114 00000 n
|
||||||
|
0000000221 00000 n
|
||||||
|
0000001154 00000 n
|
||||||
|
0000001357 00000 n
|
||||||
|
0000001561 00000 n
|
||||||
|
0000001629 00000 n
|
||||||
|
0000001912 00000 n
|
||||||
|
0000001977 00000 n
|
||||||
|
0000004939 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<7455c0ceea57ebe142f69810571ecb49><7455c0ceea57ebe142f69810571ecb49>]
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
|
||||||
|
/Info 7 0 R
|
||||||
|
/Root 6 0 R
|
||||||
|
/Size 11
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
7010
|
||||||
|
%%EOF
|
||||||
|
|
@ -0,0 +1,108 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /STSong-Light /DescendantFonts [ <<
|
||||||
|
/BaseFont /STSong-Light /CIDSystemInfo <<
|
||||||
|
/Ordering (GB1) /Registry (Adobe) /Supplement 0
|
||||||
|
>> /DW 1000 /FontDescriptor <<
|
||||||
|
/Ascent 752 /CapHeight 737 /Descent -271 /Flags 6 /FontBBox [ -25 -254 1000 880 ] /FontName /STSongStd-Light
|
||||||
|
/ItalicAngle 0 /Leading 148 /MaxWidth 1000 /MissingWidth 500 /StemH 91 /StemV 58
|
||||||
|
/Type /FontDescriptor /XHeight 553
|
||||||
|
>> /Subtype /CIDFontType0 /Type /Font
|
||||||
|
/W [ 1 [ 207 270 342 467 462 797 710 239 374 ] 10 [ 374 423 605 238 375 238 334 462 ] 18 26 462 27 28 238
|
||||||
|
29 31 605 32 [ 344 748 684 560 695 739 563 511 729 793
|
||||||
|
318 312 666 526 896 758 772 544 772 628
|
||||||
|
465 607 753 711 972 647 620 607 374 333
|
||||||
|
374 606 500 239 417 503 427 529 415 264
|
||||||
|
444 518 241 230 495 228 793 527 524 ] 81 [ 524 504 338 336 277 517 450 652 466 452
|
||||||
|
407 370 258 370 605 ] ]
|
||||||
|
>> ] /Encoding /UniGB-UCS2-H /Name /F2 /Subtype /Type0 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 8 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/Author (\(anonymous\)) /CreationDate (D:20251212051549+08'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20251212051549+08'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Count 2 /Kids [ 4 0 R 5 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2535
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau0ED,\qT&H9tYL``c04Z:O],aN(g0;>&D$d3j(?&hp(=TOd(!KiQBmFU0XbTrZgN<`N]_ijZ9F?eU[FO)M!)#S=kG<\LCYG5cVKh#B9UV2Ja=@Ju$dGrWkaTBd7<>')=RP_=9a3l^QoAFc8)*I$.m,-:V!j'NB2Eb1<"7.0TTl:McE!Mu11$8iMN8E.B/oG<\M(LT<5A$>j_7"j))iY?%dClJ[SI2C"_bZK-;T+DHUi*Mh?sWj";3CaH21QG<k89>9K%X65;:<5WFqO@Y)@(hG`BiGoiUGBIU:8?rU)?*6\:7QUf-=,J]H%$:Wn=*kD+25cbR4CP,'(H)#j;>@e--/I3:lUuX6Y[;3$Xc51+)eRR5A@tPJW9pJ[PjsRdjH+\=/rT^h3infuE+DD'l)E=N%+2>-jVK*bW?If9stoK0c0c$Q-g[CIX58fsoX/L`9No!,`9E`l:\CduKZW?3"Km$E[4A8kCXP']UT`%6,I+g^mFVJR&$N7AmcW?f!Yk'MJm8D=Q!q*K4I9XRf0!)n)>K;X%o8,\_J;.>kU\6Hk$,BAm3drGBf%.V#HCCitNaW>E']GOu8aGg8YQhuW@3PDj_4>k-Gl\lEa8VT&Em/s3Gl:RZk=;J!H#0[F''nr2rI0Ge+2(E6-mN\k>[4el89jHRYGLst..&,`5g:MB,SaBad(Ubl-q^b6F_OR09tl^YWU=/4Ra+#A@';MSj*M=&@8=\bC?MoRfQ3;c$Ur>CiATa9cd9mIqb^=lq`crrkEXhdrMM[o[j\`O5Wj&c-70NJM&=d1k;>U(2]?ksk\]IFZhZb(n^"PAUp.L66c,trl6a;)1$D0].;@qPOa;9=j4h!b!Yp(<H>D-M#J,r-g7asCJMPg&uS#'`dk\%"jQ"2N^(N-%pmgc>Gu-lASAr9FRVVoP1;H[`Vu9HFrgOKM",k8/#Yd-m?dgBE)3!SARM@)iS$L_>p5\":Yo^uK%:>&gW2<u@Cr-U@p9r&e*GK+]"8k+sk6!6e?H".5`>*c8c,S&8C-'nl1[R@GFc);7DrF-m9/4'!&\R$_l1gR1;706$e&#'!BPel4dn-neROQ'k!LcoMmC2_6P+#(-S]b3P8[dZU$N==[R_PX]qLP9u$TdAUSG453g,[PN8brlu8s4U*?lQ=:VVIf:rLS]=/lUSf_e+aDmT)00;(&Z@J-.i8CQl;7Tuq+Ng-PS#\h8ESS@Lj"T$B[O8)5J.(Z_'Tro2ouY3Y4.Vr5:'MEmYjI),$h%t"9J<,)o,D+@ut7i1fO_:4O5I/V@kIST"b3Ol.o+N6i<]>%0]T$!m/M*gTZ(p6=A1t-V!9QmrmkVmU%/#p*/;fo,Q=4Ki6%99hp>m;X,mR$*YD7Ge[:iq^>.m3`?r_?HU/n	Wa-5$c]G.k>F`G29qer&P+D\^[3*VgSc*(.rYT8fL+G_$f3*%H]]#13mtZV%]YI>L)e(cjL?;F"G;PP.q48@TJGNV9ZRo\=U5+ZE5f%%/?Ni`5=I43<,mQ/P>Oe"LZ-i^+DC&*XV$elJh.emQbBmNhqUjXUb-;"O][,:^BiNhZ,=!G3eT"e<9$a;qE]MB.QO3Lht_VODoo*FemN/]@>9(3iqBnjM:=/$7R6AMP\p\QjJH>n"+5(W_V%j3TRBc,msM#D8s$%1YPi#1e91&Tgb.oNpbLkQnp%%a@+Z"c7O0iL3AN`W[b+luF5o6q7pR]\WZrBq?j<:_F5?8K)=^X2:[4<8*.=agO?Sba82q(]e`mmF;bY`a'dq6,2M60e-=0$+L"ZTk%@tXoTPPA(()2XO,B'g]H*/ip[<c^Z"[/q0&RpeIIHeeuCN%PM;h"=ado'c/Igp]Okn&Pn5D"7uHrH'b6\\n5F"6fI#)o"8.YS_o_E'0?&<;<Qo'(M5$G9iaghJ4<;W[ZjP;^n`U9iM!m`(M3-1)cqYtpQ(W2^XdttB3iqM,nqfAbB3V1D6I"&WJrj$'1n?Xe;L6epH&BL0*8]WC*XB9pI,RNXmA*E2<KN>/SfQujJ@19:4U>6q`X9H>V8^$N4/Fi@i>bUSQ/kHrXRb/<&#DN7mS4t(3U4]]hJtn"e=4;VjP[)>\p&5gMBWZ#-&<=t7"n7s?BjNLl^m.+5fTVPM4l4<:)e6YC;gmP^a`Ke#_<s_+Qo\$Bd%[?mXh<&eITiUe\X5K<#9::#?nlcRGQ-1a9P]#QP#_t%4BVOb5mq@bT.Rc-ZC2nXSk!#/b9$&AC10Q8N:a4cr@oVeA+taRYo#kbgDZQ*QbYdqI\kNVN_.'YB!n@4!ueXAZ)[QE"PAGlTZc2W[$'LM^]`s4\rkpIXQ=J]:HT9+0j:1U.@=V$nt0:qd)X3;CfusICe>C#p?:<g\U%YNZ"dicYUp#]O`[eUe3Q*&p1SdB5,s0<Dis7Q+!B_!&>P+(1PXo"#rcdZ.fT.&M?\FDs,pr_lbd[l5!["1Ld3L^N./hh0Y,R&/c7B5=G&omN.8"SE8Y3T`(U#@WE3]WG)<p/Re;Ns152m"J@91;PNpH3I,2?g>NDPM-m#(H!_==r!Q>9_tO~>endstream
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1855
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm<=]680&:WeD/6-Zk%`i^P(B!+/E?%lL$cS4u=>E30Nen3r1+4LIpN6/rc5o%!10^CPmEYG!nb(Mi_]o@MSCZ.b;=nooHM/kM\;9uo&Q]DVp%P4_rO%.+Gd:7*)k+eoNi^V;Bc2]hi-%IUrqC0=#"!QrbN#Q$$&"0ap+fKSl0H@Mg"6VIg'<Wm[Y'LXKh\(:qWRUcP>[(79jD/=mt<N:cWiM>`SFS<d5A`M'7oq,$Q"h]Qo`7ORO5l"VbY$VBf4c*PMa*kG<Ssg@sT:)Fb7e"Hq'X0h`E/R,5K;sTHJlFo"(X?G4C;>BR9FTT%<CnV!A6+[n[8?)G#5=,_p^d[C,WC*/k]UGdg7j9_&.V:%[(sqB)L3dlEI9qM@nRZ7f5*Tg;'71BEA(M2K/=-#T7&VK_OT8OHhF6$Vf,W<@I"jrf5g,DB&2!CgAi=Tg%q)]&'2-nX9uD:l&oCUsSsNksJU#HGodg+4j3!(H(!i>kMAGlSCYh'A?\^0hqT)o.K.qZA41!=8fQ'YN]h;b1ICLM(mg3hR!(^.[aRn%(I@lTrA"X&GO"RMTIqiN+mVN^f$8p=;fc,mBO$bRFYQ2+g1m(oY#&8g\.Y"%7uMTiDM@;NaZl2/j:V/ncF<)E/A-AfA)TpPh+>'Y/mXd9UVPmbW>Z4KPopU&gVrbE^Z'Yi1_k\cpl)MWueO5lM3FVYo.^@k+%Dnjk.u8a@nZ+HI6t*d8/.J&::n0#)KOn\m@:jpWN')8_+.G(,3gJ7@Fsp]tJd^j6'D-OmhBa9".P#Vf_'%i,=NoIP4kOgkAYA3+%Q*bKSVZqP]UPP-aXc@cH+60rK-#b1H;!AJup+Ft@lWe"K0je/-P,Rcq`o%>7Y`.B2Q<WnjgWaT?K09;N3@Da="QD/)D*lmJL;T(%5adRA:&<]$tN-KgE:A"<ILMspr8i[uQiN@&?TY"2P1ig=WK^o1,c4q,&oZi:`:_k;u^`Ik\"MA7+fnocKIFWD.7/n>02*AN,?:ID3'cC">J8UhPSI7&+e/b35H1rZ<VJANg%etQ!hgi[4-t6b%j>WA$f([ct6d-^4X<eAm;CF%Lk^KK'Yj@>tK,;m$=tGIId\I4T5VX5;jXuBb/G3/)Pt3]?J"a-;6S^]U&uFqDfNg?r[8HV;joUs/1i@jo$<YV58-"'G8>rhJi$<a)b0$95Ra&gJ&0)D>8q"0;Sg[!^&4=*']+/1p^LF>GF/JlVpYUVsqA[OO6gk,sR\aPm\IBMCY,[]=(u)msERoSXp>Np\LXfE[cYN1j'P+3%4@*YT)o;b2s7u#PFe4pP@@7$:5ZH+^`-(;`:g7AMCKo]Y$K`gBQanqk:aSjE"@aj2p]>jm@a4^*.rAS4Pc8&AcufP/nN9s[@+fcbLV"NBFkZ)=jSODYn7.K=?tk;oSl@D5aZ@[Q1&mMT?Sr</C_ur6qStg?)TI`l^@1uRr@CenFg_gM.@[`m8#^`F'pTu9aD>3&QXNpL-tS/B\UD"t3OB[qj66SF!u;`gK%[_9(7OP"jpfNc@_kYXQJ?'jmF1TWlmkdE.JnpqbC%lB0O<8O8BI)jg_<6FH0\PVosq3,h6d1C:BrB%`,"D3P"k>p13t^dW%LY=<]KP?%Z1a'4D^(7lQ`%gOFskI0mL)kac%U:!DZ%q:J.+?ZqHjl$?k(UfS*'qW$b<.Dd1Ylh==K2aZOJ.:90BH\3KAFcK\FYY%m!PBU9F$DB8?Jmr[tSno]im;8PRRU3UYq:._bmGeB$5*ZX-m.3/DIkR;J3qd?(iAf%J'&GKS(l=5?WGQcFkN`t<+2-FG@^&<o72%:r%J"ZOqr(%+;.@En"hVsV`gSbjBP*-fT:s7I&MgF]&m=4Pn0o>~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 11
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000073 00000 n
|
||||||
|
0000000114 00000 n
|
||||||
|
0000000221 00000 n
|
||||||
|
0000001154 00000 n
|
||||||
|
0000001357 00000 n
|
||||||
|
0000001561 00000 n
|
||||||
|
0000001629 00000 n
|
||||||
|
0000001912 00000 n
|
||||||
|
0000001977 00000 n
|
||||||
|
0000004603 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<734af0f0fe62a8330776ee2caa8641ca><734af0f0fe62a8330776ee2caa8641ca>]
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
|
||||||
|
/Info 7 0 R
|
||||||
|
/Root 6 0 R
|
||||||
|
/Size 11
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
6550
|
||||||
|
%%EOF
|
||||||
|
|
@ -0,0 +1,127 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /STSong-Light /DescendantFonts [ <<
|
||||||
|
/BaseFont /STSong-Light /CIDSystemInfo <<
|
||||||
|
/Ordering (GB1) /Registry (Adobe) /Supplement 0
|
||||||
|
>> /DW 1000 /FontDescriptor <<
|
||||||
|
/Ascent 752 /CapHeight 737 /Descent -271 /Flags 6 /FontBBox [ -25 -254 1000 880 ] /FontName /STSongStd-Light
|
||||||
|
/ItalicAngle 0 /Leading 148 /MaxWidth 1000 /MissingWidth 500 /StemH 91 /StemV 58
|
||||||
|
/Type /FontDescriptor /XHeight 553
|
||||||
|
>> /Subtype /CIDFontType0 /Type /Font
|
||||||
|
/W [ 1 [ 207 270 342 467 462 797 710 239 374 ] 10 [ 374 423 605 238 375 238 334 462 ] 18 26 462 27 28 238
|
||||||
|
29 31 605 32 [ 344 748 684 560 695 739 563 511 729 793
|
||||||
|
318 312 666 526 896 758 772 544 772 628
|
||||||
|
465 607 753 711 972 647 620 607 374 333
|
||||||
|
374 606 500 239 417 503 427 529 415 264
|
||||||
|
444 518 241 230 495 228 793 527 524 ] 81 [ 524 504 338 336 277 517 450 652 466 452
|
||||||
|
407 370 258 370 605 ] ]
|
||||||
|
>> ] /Encoding /UniGB-UCS2-H /Name /F2 /Subtype /Type0 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 11 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 12 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 9 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Author (\(anonymous\)) /CreationDate (D:20251212051549+08'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20251212051549+08'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Count 3 /Kids [ 4 0 R 5 0 R 6 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2915
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau0Eq,?(g')p^:Kp"P"G!O87&s]utP/<5Xc[3Gg5bT_ea0(!O$Ngl&rq:I.N+O=Y_)h&mQsE9H1Hf)pI0lK!pu+'tSKu<1ULa04:UiqbPD#u9-):JdX.t#[mr:"[Z;gGNjGC9,Q'QEW#EMg/i%@foTC8ZO?qh]N=b;o7?k8A*KmO)V47Fds3R:N0["%3%6>u+oOBeq'N1"B'"<7A[58bIfUBen=I4D0VKV(/FV+<CP8DSFi_1DZW7j[T4GlUn1mkH!q"gb0BU8!/1klU(n1_'QlMhAki_;S>f7Sd1^7Pg?Li8J#(1*BEN]Ggm8X462SmmOs%/-l4W,&t@l"E]JcmRVq"Cg=DO%$b/8iB')>^Q=<h6Aj[jZKT6*\3E//"D9AG@$E?r'gfg10^pMTrc*)]pVjI&gZ5-e92)Jh_:XtYBt?UW1'lYJ"OuW8NiAo[P;\rGC$+s_BN1)S/7-ck##c_C"S!h4['EsC,le6X8B*dg*gdg1Oa/FaP22cb*<aa@XjAO&=;:+2P8$N\Y@&&LSJsmA.m^1A0D%jrprdIY[$Tl'^t,BEn418O%)3,(&c=;Lb]Qe@GY,^0D1\3W&WD2hKJfrPg,WCf`(f0?16Z(*G&Bc>B/VW8mK?$Q?9Z,Y0Zq\VR-55skA*jZ?h4]iD&$a-eOBQf:D`PO]>FkdDs4]Z2Ycgg65kE]!%gU%CHC_ji+0:S55-*t!f@Z1CBlSeEUn(h,#r"qH[,,CiB&=;3T*C)FH9hH1L0>M#`3ERlhNXe\-O!G]oC4-4@BFFr4R\33J=q+=>#rnKeI*R[S@(CDf860cq:,XR[B2UV;qmb++^@W-fM[%:D`7<T0Y`nkjNdmX2745ZdJ43lid75Cr<+*-l*(ji`8I<E#Sf&I.3mqW`3SWF2Ptp`Vq*#(YD)p&p3%JGf8j!5+:gD[Ao<*'G69j^t/F.ou(:SKIQS(%Xd?FPXoJmrqQ&I'F1J\@2%c?:?P*_5rVhTItarE,7mjL^KLS-0!gOFd]1kYMQm;]B*sCD(D&q.g%f0H<nqc1jUU^e@F"<>rpTr9W^:I`=AlL)e)'iorS*L#YMf3HK;UIl>8g!q#[`%c$)f49_e`Er[$"H'^:iu"4oludr<H5ec9rB@kdg:/V8bpM'$j*edLFKG%DS:_7>!]-Z!b*#9DF7'aiYs3N)`&p8:Hup3f#f.+GRW.D>4G+9RFj7Wm;aRJ,qC;3JTjY5l`q3KP)I.SV"MJR@"Zs3#VKjrhARc=!RO7/P(n$RN[ja/-Y6RB.-]H$3GDnkJ7]n7(:2,MVG<#]-o#:3%h"'[4kBY>bF<DDqo_VAP<H`G"6MJ71ctGiIh,&/<)8%1\M6gat,F$MJc][$NerDb4?L8Xl]VBT^n8t@N47+0q:fVC,-fe(Dc;`XF@@=\/.*oC:sDRnF[d)cfJSd3?n"O1"'I/l8Mr20uNTG@"WTq_8VG^)N,LCJ&RIK*!SC(e)kuo1#Gb+"qGXFJ:%J-FkE>q-8]R^KEW4g'W!Nh,bdPs]YV8-),*Ym=:7l*!3G>CrhJNP8/+ZV_o&VPf,152DinD^9H]`jJ]hkRPqPiQ"E$l*iH[*;mhYhbRXM3(&C9"($s^uA%Z+@$1k$O0AS(O"-PIDPV/WCS)%(=P.%f+_U/1>sb[;!19>d[4ar^OS1&PN0*Uf?:78WsM/'0]pd@$(MOO$7hP-9sc@40cM%^:JT(5FYfP_l'uKjD?kOe2\_bfX9HYc\_.(Z!6"q%V0*nDsg-N/@m2Zh;dr_6&Ec8SacS(mC#HPNhGopL@=0'6P3K#P4[Jb>^)^576PNHYO+ldTV/E?OCtW3_hPcPX&)dUj:uRDnl)]h9o<>1Sd46TnAJ1GMad%%0Cb4(0G^DDW)]]$k>J6_GZXo&MlhVm-$FCh#&f8:F<:Fq@7A[a`/^B`[[ML.2FQFG#V!aN_DGq,P+2Ld2#nO?%H=&20hnIFb[p7YR&,j>=nCQcP'8B[\9-HVam!.ifQc9.*NAehN+).&MV=C<8DZ$Hi<+?#\$Y=`V#?mFO8!>*8'$AWN8UF3>*MUf<N,)8V.GSS!2A2[,Wo!-L^B(7@ja84"*8GMuKn/5f>ND!mBFtQQ(6?N'VWCffk/F8q6mbNKjCg#ke_6;u>[>Lh5bA)SP;'/sVX^lN)b.,S?MLcu_J1pS2sdN=<G-OR3HgM(=00F\o2K)#.t+XD"+r7$"1boD)R>HI]b4[oJulhI0fsCYEJ-mgCZt7].ZHYm34lg/^C*=M9I&ki(2)0:deOHl$A&k-ld4;ST+TbouD8PK0!"(/JD_lRSOr.YXe.s'QpNW<I#G=A5)GB?eL$<1(fu=q]:g[?s'YhCnc9DM[#*?AfutlFmtC-HeK:@QEC;<qRF*T=U2]OXt!1=c+.V8lBR/$28g+9d`$:=N=JRj3s".Y%SttIFdlJECZF'/C`q1W\9q+h"l,_6Zc7;NNKj\+;t>3rLV?e_X(2o*iUjp3QDY6V@37#WGpB8ATo^SnN^Ho1LoL"jrO"QlgAoS*'rMKOgi`?`e6;B)d&[tgLjp)/oA.!6/\'_6L?.+Y_dXVluqLH<a\XFPr5fSpEshFkm7kM)adN$<EI%hC#&l9=n0K*3]ADLpf<q$MuP_u`0K;8o,FC_ZEB"WaYOc(Mn?hiW0YABl!IFOKE1f]3Ff`XO4.UJl,oUHGAG1r=Eh3=7l0'Hg"k\.FA0e%A3JBSZD*Z\m"iaZF;\KN7&1tg$R./!s"L7Mk@UYbCA>.]`\)X,ICa+MK/%RB!UdD'aUDU"e!mDA",Z"=V4HY!Y=X&"A/<O*r6pqe$q)C;hMd"#Bq>^hh%/^#$JZ7>Wc!kPbY[JYK.LB;1>eZ&'Y_Oo*-$Lr)?19fA*[BeoL$gopkko<cF]r,[7lVrd>bcI9olJjC:hMI-MdAE])#:9<[/scrW-j'\(q~>endstream
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3556
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
GauHMCK"/)(B)O^LtD3#1$R<SPBa4/4$$Vd8eM2&TK!Pe&s*5n0n:D@\'Np3]?__DJ_\)0&e?8PFRNPLp=bRn'g_jFSpSMCb0+\!rhlhg<TsuCdaUseqmNf_?21uRrCGD97C$WsQ+.FX@NcZ^]nObU!O5B)HsN\MMYm3mYX#81FQ'1H4f1YJV<QRl'dm<O:6ZBJd.1ZjADB=BPVDF$M2ps14X>NW2U!&RI6b\ZIcq5i?]I=0^Eb:0oTnPskSljEC5ZCfM;nP9[h<QQKh/R/*M-[5O534DnU@3tRl4,I,UsEh"8u9mSt_)$UE3,\oPPk;32i""69V;iO"/t`N*<+^(b9@.RA_)cA^^[5S;^HYRY76Z;TG%@5?0NDU^B@Z$g8K0ao(JF]Q;2L!Y*kglk;ST67U\@D,0\lQ=%BgE4?;G]Lu$&%$(]:rfk0k0i.Mr=e`#*1X(E&B[l5RWY>]m2!KNP1?^"26@^K)s1jJSeP^cBe*YGUE12:*IbPDkgJlF<q]h@9\A<XIS7;X)Hhg5-OZ_d(`1KiVaVWGmPr9NKp+M66>$WiT[trnL7BEo[0.K@hK?*74R'=!=?XDdu4Ca?m'n0hF0J&ra/ttD1E9,&rNl5]'KKV'P&#'qo+*a)CIUBcu")'YS=W@VECa[BX<D]c\c;7erSKst+a5aY"VrKETo,0rm%t;j5XPB-;q+lIP)?9EpG]5FLTC"V.h[CWmgq:X!D&Ps"B_Ch;P!CDKoLaU,1rM`0DfOFn&U-&6W7T*ZibSo4B`j#c.QUq5:SW#i7>&!(GaA[3<@+W%NL^?3Ldak@#TXuZ51-q[^sRqEAd"'nSb"_I"=qiXd(Yb]F,H".c'fbJ9?A)0F?8=aZC6"JZ5+Eo2HuAu4mmK:>eOS.)\smoQ)9K:efOl4gWlQ[rB6if=R$4"L_$WUO>A4.qrBO%Fr[1hFKLb&c]g+ko[_$.o(W<.I.IsMZ8a,3EN%D2++mS[5)T@QQci,rA*k-e`6$]Y+2eA:-Jm1$K@P<P:lsL&m94.4*1*q;s4n\OP=0HT@6VV?Mro/)gKDK';W-Mq2;:EC)4o"5"etMB&%nO[i[V"P)T+P5!,n6tN!.UMBSKH%U^l:8_o!S;;&F6ujGDSsbX_#:5(X5reZRk;liU"QV!*bNkuaJG@siI<@pq@]2Wek7Po%4XQi]HqF=W$).Dq;?9\EFCa36qZg-aVs[NKpMh0$>r,`*!b.DCI[kkN(C#hsuSfI,hjABY0UbGe+IilAfg=,aCP$8SR?N/)c7NW+.#]5X0p48V=WTIHJ;$lZ#d14I]95!>$Sn,lEdp%%X@F.a9)Clc>k7qW.K>)(Rd*?QKKRT!Z>gT9Y\k]2N:U3+0kj*@-MEJmQhFn%RLZ=Y';Biu^(q##U`bs?R#9ud/.AH&"9+D=bE\FCI/+cYZC:pkCOOa8SM+*qX,g8ErtlZXo&r2->r:lG%Q$^-!oM"C-m'&==]X&iQK[8doJ&g8KUh\KbFq^lNL'bh_n6n?E%)tQB$p1UVM8Xkk\.P9ghdpB'&3%@<6O)l!fG<]1k]q'>i).V\mh;QNfJs_"=X-Mm6<`j0X7U;,4filj_6Pp*lbAbCN^;JcTSdik`%cV+7Ep(j#6XYUi_?kgMOj`l($=LuKNhcdZ5N^#;L=9!&18g[T?I'tHO<nnGCD^R0!WS5AJadS$4nq^&Y*BBP7kX?H4_8sPj79a2&Do+:O0)%0s3%6J*9!_s6!iO\kSZ/1iB8R1aiMFhG*2P5T+Q)IjpP7Pf"0WoT7khj?*"C@,(u?tD@'`hEMu>)f\6QCYK;b`o+<&u(]0B[*9KpFe=u'sG<9`P@.55dg65^aOX2.Fm=dr__nUDF8&SlU>=c$7c-]1;%#!<%ZT&YQE.rp:<Cqigk8b4^#[eHWE"sd!S^%?srlB-5aX+-=Oj+h>cg*A^5!R<naka':2-Po"O8>*_CPhCSD1Z6I)o+liij(K$Z@S*?@%-KS(^UV*K0C(Ol_=7fU3Q17c-U+r6k3Ih5!E1Vc57+U[mHr+%M>ZM1ukXMTF+:Q5cTO.(F#?65ar2P!NSPY`-Abq@-9+:31NTa"t-Dj28H>43ZcW@/-a=t9h($ZD5o^7l_[A]r9A/,V=[sg:]`gOEK5Lji=_C@-iImZ_"rZcQnEUl?61hheMA:9`9hp%EMI.+\@c<<PYMJ=[HE9Li"ftFY-s`N/;%<lfKgcu`.@KN#uu67J330!Yo'l26HU1t9[g"n5_)_uac];E,iJsh:m11;IToO<pr[KK$ODPXr":aDlM\5RA"Ni.V/'6nb0+eTOQh97E6rn@+Gu=4VgU5]d[;4BE5cV2Gp%u%AYE%U`lYsH2*\rDQ#Bbup"N`^r;-!4V(=+;+cBmY5!?eISi:;XSnTHG"o00W(,b6*n)7ee@3a4-CL;#9W_]-PWA&;,_4t9&>lG-46hb'Z&rmIs"rr,S$3M*:jBZi=0#[j\1t+>sZ5D]Wei<bcTD"U<_Jiq<qtW@S$C5%>'!c\LeV?RYT,!\FOMHM0lgO@JQ>G57'J9Ht^j't9:Ne1ZAP.B2HigiB*6D'UauQuITJ@5%S+pT/Gp.maK"n3^4se;P*-d'RcciFuLJt?S<pYlg7N)Wb2/A]CorX*n3oH@'0..%B?Z5koP,jNi[ohH50_6->(>KG_#8iuCR0d,99QRb`YD2e]>'KkU9om]**n!rN"&]K_?:pAF_F94SXkd0WiF9c5Du;1A-8Le9MXp=-7Q)9+fCJ((g2a#7`t2siTe&j,67]RA9ck$OD(;=,6P?oJD,Pl$PsKc:%;+c.@_+$1e@Q5Q9IcsFgfk+'9ig5!7h<a0J%.l4#K=gNW%HCogpWn_F,)]l(b4dOr5MrDkP!_N2k-H+)WJo6MDP]%Np'EqeG>=':MQ@K@QQB9@'b5_-oK-X.pp+,%VpfJ(Cht2aG1OhZ_,/6[6O5uZ'nr)ps/-s!1d"9S%!3Y0<]hDS'2E6>;enXUDp]/>GPh7c?=P%&NY3k\\51c4gLYA7MH8F6b_dZHEY]\gu0.TSQo!g`;qY;CDKao]C%6c3(orhOtF#uYsios;L!rn&/GsjgSaA@_(LNaHu#!o7HoI];OJ'.Z*gfP(%(E.)Hgm4c31OrNYk!C6hiW'fbg>;X@]08C=/3@lDGQbJ@f1Lo0j!JPTFIp`#d0WXHmpp.o!/!<:YduF*rF@'V6grcA:pN:CP!'TqB)Y$645\*Cf(l625G=c"kHjU:h[r+;pWQ&`8&+cE#H!:a+!Kn"CVLMu*-frur[D9)Q?Nr:L_k;=8mSp4_`_C7E]OU/%Pe1(]p.GWH(t(\3.iVSWIIPkO)G1g7ZSFsH13Yh:Z8QpP`:@*FOp97=.^"(`?96docDBMoF_E86E=n1q,$ms8*>=9?cn7r,aQj0#g-8tSm_RU,2F]RN'<SNk>T6KI&Rg9g9K1>=RGqr.o^=:lK&_pi>kTpOR7mc&?"0B;a0X?JT@"XI?5&h2p596r*>#LYTAk_M[R=_?d<)b.L[DY.@9O"XG8hLr$kHI)oIIN=q,:1#%0qe\'g[-0&P*^=QN\lmKS214t#=niL\f#F6~>endstream
|
||||||
|
endobj
|
||||||
|
12 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 360
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gar>B9htgF&A@P9Qm3GQB;XLe)fI'L0FD8=&t*.S+ONH+)D2U$]<C>VJE_6c1N2.9Rp@2WOrW?p7$j%]Y(]7m^6A??;nSs-=F:jhlh'@O,u*2lW2n>M(@V<j9&&NU<^9%_]$aD[5ZF`9C*popZpbeNbV\Vo-/L1IK8tFTKdTZPcIB+5Krm5h\f%TH%j9@X<&cToCNJKiIUq^Y'J[Y`4jDO,TOW$d!H.]@2'7g3]*L12A[5qKWm+s>dTYtKO&[As&%-/:r8_s4/N:(EE;'%PrM2YbD[-$G=88d.!7?=<8A0B(d4hH!JAVpN<9AIp2T8IL-iZ@D">l+&#&,F?PWnfH.G[qlYPM@#quITrE>J~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 13
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000073 00000 n
|
||||||
|
0000000114 00000 n
|
||||||
|
0000000221 00000 n
|
||||||
|
0000001154 00000 n
|
||||||
|
0000001358 00000 n
|
||||||
|
0000001562 00000 n
|
||||||
|
0000001766 00000 n
|
||||||
|
0000001834 00000 n
|
||||||
|
0000002117 00000 n
|
||||||
|
0000002188 00000 n
|
||||||
|
0000005195 00000 n
|
||||||
|
0000008843 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<d92f3e57e5fb9d0d15eb360f44c4ef72><d92f3e57e5fb9d0d15eb360f44c4ef72>]
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
|
||||||
|
/Info 8 0 R
|
||||||
|
/Root 7 0 R
|
||||||
|
/Size 13
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
9294
|
||||||
|
%%EOF
|
||||||
|
|
@ -0,0 +1,108 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /STSong-Light /DescendantFonts [ <<
|
||||||
|
/BaseFont /STSong-Light /CIDSystemInfo <<
|
||||||
|
/Ordering (GB1) /Registry (Adobe) /Supplement 0
|
||||||
|
>> /DW 1000 /FontDescriptor <<
|
||||||
|
/Ascent 752 /CapHeight 737 /Descent -271 /Flags 6 /FontBBox [ -25 -254 1000 880 ] /FontName /STSongStd-Light
|
||||||
|
/ItalicAngle 0 /Leading 148 /MaxWidth 1000 /MissingWidth 500 /StemH 91 /StemV 58
|
||||||
|
/Type /FontDescriptor /XHeight 553
|
||||||
|
>> /Subtype /CIDFontType0 /Type /Font
|
||||||
|
/W [ 1 [ 207 270 342 467 462 797 710 239 374 ] 10 [ 374 423 605 238 375 238 334 462 ] 18 26 462 27 28 238
|
||||||
|
29 31 605 32 [ 344 748 684 560 695 739 563 511 729 793
|
||||||
|
318 312 666 526 896 758 772 544 772 628
|
||||||
|
465 607 753 711 972 647 620 607 374 333
|
||||||
|
374 606 500 239 417 503 427 529 415 264
|
||||||
|
444 518 241 230 495 228 793 527 524 ] 81 [ 524 504 338 336 277 517 450 652 466 452
|
||||||
|
407 370 258 370 605 ] ]
|
||||||
|
>> ] /Encoding /UniGB-UCS2-H /Name /F2 /Subtype /Type0 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 8 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/Author (\(anonymous\)) /CreationDate (D:20251212051549+08'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20251212051549+08'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Count 2 /Kids [ 4 0 R 5 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2661
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm=qbnG(')p^:`Q#HYSK'3P*f3Lc'&QubZctiJa/7LQ0Hfno@g<>#)#s!TrQX\h,\r+:TV.U!bkC)_m]UsQR0i_P3$)=8fop<^p8cE5b.>JaRbVH0(YQR8&)KO4EM[C1<]45>o3US5$VBg7j'2r&/$mpD+-%D(9Ne>t--6t!6Y4EE%]*9[Cc$2^)n_hjpsmj6K0hRq-m<p(63qd7-ma3>pce#8B&+Q7e`jQbg(sY2ZWO9@i>aD?^HdWj!P)aHn2org-s_W__+5l"Y*GGp@IiYmZ<LEp-pDl>(d;JXpfsBKWMn,3`[W'@F`69F6=<uB4T_d#En=:8=p/(t<!rs4Q%e*u"Dio[1ZSkS3-4n?[ntKedX1iVf\CE=$_cX2$glFQ78S18X^%LDr$KD6D&(dG6>?+O(DjK8(#P'd\N/Yj,Y#odB[joJ*A&-tok0u3HUYf9e>s<1r)"lGp'PBM>Is"+H1`MBgSEB.-jh-:aT]&qbIlH4q[C>7p_VlUHnLY,olt7X/`7iDb*jY#DR@nWbPA+'=7B9K,TQl'Pk\$\5@,DX3\Qh=:tf/YU[&p7Z<D4fKOTiDjHHFeCRDk#Y@MsGWBcJ'Pj&g!cW"3@plr]h6liQHI+OU]EhDm4%ER9)ZONP=L98G<>$X>,msIZ'5($)t5e[Q8KYcC(6<[`3Youjk(G(BHek:ZU@8=ggF%^a(_Mb.:?YJg3Y!&L?QMTsJ_^lHAeqtM8_?u(/b@cf8&VF\mjYo0u/$4;1q3XR6!6HD8Q!0="17cbnAZr,38;t1oqAf_3/dZObrZpI:Z2sfD[9Nt0r!qA5=KCoF6t\897tuh0&6dE-I:_@fjR9Da!:R:E;G`[DELd9CJp!qSCa]bT:Z[tKl!2jI#3"WE7U@0,*4:$8]m_$(+>uBUg[Y`eJ&OnEgpG(L^;@#BkG!2-T?[pj#VgFRQ.C4._TP3CQc-oSC7'X9Sl-5s)i'I$UP%=\kX[b`6djt?Q[c,RZ@^m780iK/%^R47HYpRY[P^7Z+L&4hD[bNs\GNuMS3IAK)UsgMgA)CabgBm+\G=b7iuuNAL]Z'RFNtB+J\;KM;B'40apNdHM*0a/W#91n3ZLDmA1KCaRC.&-b[HI2(>Liko\T`dm<t_P,tq@!gj-*g9r86'>]@aG:_CKBd0'<6!:7Q$)a`>8Tu8QLIYPEM0mrr4Ui!GAE.?q-_f4!^S:a>/aTci1,K22\(6loBP.X("UH,;aa-AF[\+u:k!jU$SPRf6EnSt="9Viu`Z-GU@@&gN8OmC,M`.r3W3n`4(Hpi*_Y@"S4BCr(#X4?-E0[=SIHD%CDW-/N,ml$To:il$%TH.SY.QKNj\qeiH<O2$u&ku#OB`f?^9CFqR0\uj;L3XrhPs>5E1s92/p&G>_]Kh2>p$VOq`TT`--C>"QIV!^1.!>Q]kd3K&A(0V]3"4D6M&-mkGSNpX_:2mn&eE7,<^hK.dI:kU@_Eh(&BmofH*e2f"imVg1ZS^l:iIT_8`g]La[]U@91,knlh/hRs(<*T;gOZZ?.!N5(VBt1LJM(r)R<P**i@M=OSUQWXP]+3M0ocV/Y6kmj:SW4DbEtYAOWbEUOGf_S#Z^:jJgngh+X_V4Bb;:cq2/hYYFT-m2q[69[^00Re>.?o!V_@=8Ehu[0Bhcc8Q(1a&\7/ol(@K:&.bSbrrH5WAY37mrIrfW\g;cY0Kr^arlX(:4jJiCPNI#6=95"Z#p*86iPF('Cd'l4@PLP[J&LF;er:iaQBJ?pE#S[4[j+X:3IMT]gm,o[DR)*[j8PT(J!NZ7]\*Yc&=-_(W'+I0a69l*%>QOHn[2;(HP9UF$g!9kWJ0:-8mH5F&6*YQU,np+XluS('1f[HU0amM-4\^M6%2dI2@R5Zl)$nJg7!_1R*K6kX3bG^]RLAZIqa*@ULfQ(IT,-!Pp(t/,15a%fUku_uAbq^ii>C-]e_e:PP#(CC?_8g+:?/b12PCau&O;ERKq445RlW4[Qs@cl/1js8SUPaBPB/;85Pa9iWdT/'ZR]?G>+q/_J<e#+ck%gl+IY30I6%$g,L:D]XDjlI+lkcoI@pBkItdR%%V",=0g^D(Ngj]o<b8'acA_573]G$O1V#PnV]J17pI"7^+r-=J$U2SE_uAdP\Zf^Q$M2/27%7o5>iSVG:E_ji&lYB%4'`)j^n9"7R"ImPNpr'\aRh,uBWNgUb2f7mCg`;TkTG[o'P[!1:9(@8e0h;^=5#g-B<`1r6LJBr:GI9R:@`TPWI*dafWT+NZJ&$bcXLXJ-T#l3o,hhiH5dfP[J56R[c!o+Xa'RA-#.([5WEk/cN8g2s2qE7`ct*;Y@"s%0b+Nah4<Ik_M0LF3l]X_G_#[tFuejNXR%s(X2UUKVV<FuaH7(/r>IQ:((uWH8?(`$@_ah:dZ:;lUAu5)L$0AnrEXlM'=-\AXG&@<;ja2#`#Rb%dRP.AGbA3hc;_H-9L.FaR>@UC%TX`LF4"YY?8IS6WMCpMcP3<p/^O8j6dLgj)k#.BgV_o80[:S#`K$fQkQ%+/.V(RP>#JMd4\VB(F^V);e%Q(9g%7VWkIj:^YjUTE`k(PJ'KUGWnPL:Rg:6SXW1L1m3G^Wkj5SZW54WE,3[8:!eMrZld8qE64Pb>5i//A&1ZVR24TPV]>2rZ6ILA<e4tgf4V21*rHPr+05\~>endstream
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1644
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gb!;cBi>s@&H/b=Ysi,C'U!fh/h*TZ.T1G!Q][A3$nfO$"HmR2Es)aT-GM_"4hE3fUnB]iLD2H/d51Bk]AMp\PlUb2)%TK+A2R(f]MaU',jco#<(rIh9jX]nMiu469snG1c.*G6obA!6V0Sp"=9E%@K8WV2PPBLX0@;DPfN@Gb4f)F=WPqSWbE:P5AcN9a!K@GbI*ehgoYbqU3X?#<%Z%i_#!hk\4oiB=4_SF&.Gp[!D.,YZo(:Se3aM!#R\j9b6V%1H*PI%$K[%9l+Y<,]jDqO$nVSsk4W3RlTXE[Skqij#@;O<]Sm_chD>/g4\s7QaD&REK'JNPk-<Vf&`7*a,p?(UA(sr0JeL3&A\2"&;&J/(giQ/*blePhFb\NGS+]-NJ+]KN^#hli.,X"cJV+4k*/CR`%cH0'/G^%6HfQ"3q#$3IA?]FB5>M\sW8rj[W9k/g!-f6C@Mjm4]ZbtX]5P5'%pEM'4q$C`1J?BPZ`=]pBguUtCk`';lqY-U"NP+-/*T=,.bh&cmQG=>oD1@uF@d+<U07,A#k:(b.,N_Jh2KA1;\7]p>+&Bu@PR6>L0.3J2o]Ws[mdAmV^QG4%5B!c96D2Tip"ZHD!IhJ`("`LM*0OMd561:tLe,bs>gZXS9%\u2Ej]Xj5\*b6Xf2o'N)nX['ctadiYL\+;GQ.OF)DHE0/-5W#batq7R#T&dst^=.bZ%@#-=kZ_7sR]('>eaHR!eK-,@>&qcb'/IcMd98V84gQmQ`<f_h"8E"\cNAoH;/Y-ZfD7Qa+.l2Y^")S;NboT3En@7$I:e>Ph<4%\M1OAb4>-6d.3H9C-?5@ZnITB"_$V81s$ISYW0Osp$M.kJ\e7f43:Z5#OdSXk.Lb7!^a+^?@0P"L?DFbB`]6L^0p<K:\3X4de>7)V^0nhHoEaI/^!4^:sl`iFO).kW<8VC4U#fQmgF%&1@V7g*/[/9Q2-cqNle`Yp;--5/d'8^jDU>p!^a_'kmBW$D]E`E]1p=:<:KcP#rsn#Z8pfp0fdj<PhRKEISjj]E8O@@_1&p(-K2&h-RT%lmEg?r$8JHOkk;X*]373gg@KVT!"A?YL)rSLJE6;b#as^a8-J'I]HQ-'a5O%*Es;_]Z^mEf=!X%Z`X<%RcZfMURH\qVaC_ghabsKjkL.Ei'.]fTWL_Q)(X'8t#W,Fj6VZ\/NpFb(Ql_@5)J&)sBY[),k2=G->@X+G'Oe1jnW50Y0h"AuF"[+YYE80p?M8Md5(ciFYB"\N^Z8(jVaO-[-]bH%(a?80rRY=*H;CZ:p$DbGj,;$1HF$r"S!A3%Jn]S=4U<LAl[jqm?f*&IF+n7REn9C&j2GO(/YDaToeM/`<\h=h-5k@hu$6:amZ*YZ-l\WbMG8H!u<WD!,TW@aF+Pql4mpKrA(1/(rq8aPOrBYmGpToJqnSh!fD>%(0\'$AR&PBj?[A5B/t.D'*@1LdB3>]$jLQ"F4jh`JVBc)jTfop$WTtoknAera^(/o^t2m>lU^--%14jfB+iR24+>g!o',C\O8K@UqaREdPp?Z=+B,'&),^S17+doC%_AoOk8:E&#`7)B*pQX)1@'O,JE7lL!-j;Pt#;/PLpFZ]d3;P]>*^Wmn1;H5A6IkQM9pi[e)s*q/gJgT!_,L3hE/>(L+3T0)~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 11
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000073 00000 n
|
||||||
|
0000000114 00000 n
|
||||||
|
0000000221 00000 n
|
||||||
|
0000001154 00000 n
|
||||||
|
0000001357 00000 n
|
||||||
|
0000001561 00000 n
|
||||||
|
0000001629 00000 n
|
||||||
|
0000001912 00000 n
|
||||||
|
0000001977 00000 n
|
||||||
|
0000004729 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<330e4452cf6c305bc1751a92723cd5c6><330e4452cf6c305bc1751a92723cd5c6>]
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
|
||||||
|
/Info 7 0 R
|
||||||
|
/Root 6 0 R
|
||||||
|
/Size 11
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
6465
|
||||||
|
%%EOF
|
||||||
|
|
@ -0,0 +1,127 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /STSong-Light /DescendantFonts [ <<
|
||||||
|
/BaseFont /STSong-Light /CIDSystemInfo <<
|
||||||
|
/Ordering (GB1) /Registry (Adobe) /Supplement 0
|
||||||
|
>> /DW 1000 /FontDescriptor <<
|
||||||
|
/Ascent 752 /CapHeight 737 /Descent -271 /Flags 6 /FontBBox [ -25 -254 1000 880 ] /FontName /STSongStd-Light
|
||||||
|
/ItalicAngle 0 /Leading 148 /MaxWidth 1000 /MissingWidth 500 /StemH 91 /StemV 58
|
||||||
|
/Type /FontDescriptor /XHeight 553
|
||||||
|
>> /Subtype /CIDFontType0 /Type /Font
|
||||||
|
/W [ 1 [ 207 270 342 467 462 797 710 239 374 ] 10 [ 374 423 605 238 375 238 334 462 ] 18 26 462 27 28 238
|
||||||
|
29 31 605 32 [ 344 748 684 560 695 739 563 511 729 793
|
||||||
|
318 312 666 526 896 758 772 544 772 628
|
||||||
|
465 607 753 711 972 647 620 607 374 333
|
||||||
|
374 606 500 239 417 503 427 529 415 264
|
||||||
|
444 518 241 230 495 228 793 527 524 ] 81 [ 524 504 338 336 277 517 450 652 466 452
|
||||||
|
407 370 258 370 605 ] ]
|
||||||
|
>> ] /Encoding /UniGB-UCS2-H /Name /F2 /Subtype /Type0 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 11 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 12 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 9 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Author (\(anonymous\)) /CreationDate (D:20251212051549+08'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20251212051549+08'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Count 3 /Kids [ 4 0 R 5 0 R 6 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2716
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau0EBi>s@&H0nXfHb#Q-s5W''hP5OG)V%e,UA$pMN%a@#=oD7C`saLIs\bRAe.HaW!ZG<kh)Jpf@T>[JHlU43/o"5K&BWRf\#0a(I=f4E##CGnQ54WZ1MaeHV"s+R[6`/Ya1'm1(Np6EQB#FbCeL"X8Wa5ajY+X@H@mL6Nfa7*^\cpK(4ro#R)-;\Yl:-0b`j7qCWOMIYepu.m[YV1fe%mWJLV^#!_j5Pp20G+gC\K#aPgJ2C`[\Zg_+LhHS'r\"OK[LHbaF"Fuo[6/Z-j:cJS;r0tEqV_!6d1Y-R(l$'\!3=Fn,0=HB[X3d)"\^1DtYZ(W$Bn]UL+;@FgBnHseU#uiI\s"(23C9!D5F8CT<'1po]L21.Th47/'C`8e"]qs>pAF(HI?QVH--AEESWY-0dM-IEb,GAS-Na$(X,]s).D#^R[)m_I+egS;V#)m1KRNGUs0]ROh?$9oZB$hh-3R/s/APuM3Es:3(/)mfYQrdRe4LM16Us6RG]%G$&kd0Hh._HJi-`NdLTQOE9r*\EX)de/M,*C^`k,;_<Uug@Z@#pQLoA^*jJ]J(/.>06!7p><'YG4i/apIc*;q%LC&u#D#oV@':b`]i<8[f%P[-O3MBWn5C/EOh0(u@8,"sO6#F-j\mm%W:JT!rG'L[*@CGShD@Y3o=Qm8mV*adNC^n53\f2CO?Y!0c80E!bqBhrKEj3-^gQ0nSAG:\a+M^?ugi*\R%hE!8pO&lf6I0@jHf<C\fJ:a76fN_qYLbrP],O?(o[9Z]QH`ot:6,G,Y>/CW1p;&h)I@)l$#Qk41>sr_dMM3f;5\[517OYp5\7(BFoIHqi#\k<^6gYlM=E]<1Y1Dn=JY^nt>I:V2Hl&CG$#&SE@3f#p;Cs(466+--]HHOihN0`M!"I\811u?4`&+jnM-Ci>U2BG4*?9OGiAD+[%rW%$\qZ3YD:ZP,3i=@;,eNr4'J4D@Wd[Oo;nOL9knTSdaEl_u:]QU9Q'Z1Pog<i<DB&af(d$s(6+_%*WC$uT/:<C9DmpnJR-qfaWWuH2R5kQS'^r^RZjH*'KCObe$/7MZh.ro%Qm-HdBFhR)=1o'#570n;",)2_GG.G=Z]q'm_(:I%Tu]E$:=@"]PDaL@mNN&2?GZ3"7Y^X0Wmk)JcJ1IUUV.[)(W_XNKJFm-3%JT)"V"-LnGIYCQ=VZ]*%t]MCjQOA!$3%IA$%-`%rn3I4H[+pr?H>?-Ot(L%(('b,ubu"n2PM-fau6"\17X#9Eh"[b]DEP',Pq_)?`cfiY*KUcQD-Z`Kt504OoVa>t>q=+cV2W^/Ml=FblI1LjXAc5l+jtHmdAY--SE5g2$9ZL#_?]c`jRCDUL<!(F8hp@$m`8!cWC;M'j<,l#b#/Bk14DH_&Q!*:M?3BB-EH<Bab)AKH@o8Bp[B7f*P'X,aT)[p(p?8q3L]9J`rBDV?9FYs'4(p5gAo8kfJM+g!Cl$FF?$9\5HldOu56Ok[fnWTQl&F`1>?ali+gX/O=K@rNUMPuZD5.Z^f(n;^?SN.3t%k`*l;EXG!3aWlnM?ZhY&,OEPY=9T(\<m],E^Agfsnd*&e8'B_J:/YTQW+U7T_L2*Y?/nR11[$kN<4`([Q``;;_6]%cq[C[kl(ds\X7,[M=_b`Gpf:U;#2EGRMMmBtk0Pk2aMjrEeu9?$bGQ(T7B1Oenigr[FX^%d@kN"G>GQZAgIPSY+Pf[#LGg"b+'0_OWPER/-J;RS50q0:,(`;>P`*j(i/1Ll=a5!oKA'jl6+DiXoE]SK1HO8-,Rd$0JPeMNgjZW#X9G00(1ZDc+)ADNYFQ5U:/A.o&Ek],')AC[UE2<>70h_uK<6>SXJ@ulAg6=k,q`b))fSEt2.%GQp_Ip<DCs1;P_h!A[AeP3#[C3`nLa7G'+\bF)Gm>!e<"]g@=RS/h1nGp'i+dZr@Xtn[V'TG.h)tZ`]RBK>hn:a#'0OBPcIP!8dh@<2Q9_^QY('1m57Mi2KJ%:#[,rpM,gpe'6_l:,jA!n/039;`)erG8+ebGc@#+B,_ackWWj,J&JX6:I"^WX::W'\:$D@E7mGnr#$A?J3'\i"4%V`5fs'#*6^uK6^$E4g%*fGXG2,rF9=Tp8;oQcn(H_EN4[sOUfnNj<dIEh]csg(iF8KLaN!`3+,2+lif92;D^>dsQft`M>(S9hqWnh*Ghg=Mn*i9[,#=\aDn?g>I9Q>s&/1>_C'T]%T&$^W=KG(6%M)gF'on7&hR?a;.YEB9Z#2$AO<7u=,K[U4JJk;^6@6\1oa-#mI*'ki#^;PQN:+G`57O],R3H\UnFFUO]&LXAL\`*!$1/dOW1g]<?eiq:G@E%S\Q>b!Fc@Ri8[-RWPBr3I(Etn#fU/PGJ)FmpX3m6h(LajYTG)@$7CVGSR>?;BB]7n,5"11sj;'Q*3@Cda!K]VBB]#"(iV\5iO<(!0\Ur6Xu7U_e&E^Y\1,Sb;MT=L')>s9D"IbQ+L(r3JgP;o!,_(2DB4"<A'.'cD23kZYAX);?=4gWBb>(>hP"LCQ"jO2W:'$JW_e:#qLCOc,;$@2O[q3'`Nid009>o\R=V:ce+XClD8(-'id#aYluB?)o5S-[lDGPtOq@aN+KQarCYX&Wt?Z00-*cH&67S>YYU>CJl(iR0u<#50IhAL:<+s5AEooCRJKNu=CVr&F%6L#k'dIIY'l==3N*Rd=qeb;$RF^;6R4;l/!hkrpmRq/k7n:^^"tZ&-+/_:!hNEeN?~>endstream
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3542
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
GauHNqbnG(')p^:Kp!o%Qi_Q)]9;QWm[Q)A00p*O#*(j"!V$d>@p=IPjM*k6hotG#,o/"dlcNX%g=`'hmf'qLCh,u]5De_*H):(PXn$R:<huas*EJu8R`a>+Puha^/g!["daY9tertD+9l*h-6IKps];d@K^J@@\8;PLOb'IXdS:mn7h8s2a'-HCU(E8bRJq"OlV+%74rMYBuX%c08ag6GnQ2,?q'1GQjbqd!C,sS.[7F*G.>FA5tQNSQbampb>MrKZ1pKAp\]O$aHc!Ospbq0c>7:N(_$BY=*D!Ns,V3]\GA+>9@,ZgDBa_<*/gUQhc;Uj-Urg9Za:$s&T9DK#Y]dl#%"0,94A;7uEE^Y+FXtO>,r:.gTH/;d9RVn3JlA--UkoQq6`HRnQekR`2$WG'#_1`LlFHUa,r^umS6)Ed1`/SK6jGIY"2X."IR3KUK3jnGO,TdeCD=94[DO;%=d+1,(dd4Ujq-pINloIlM^MdZSd8m'WjA8EOHr$'o8o@;@i9H3L27o7lp5CVA4a-:*.M;0a-9kAo;<4uiTf*?$Jt_t6>;'1)AcoUIlOm=Ro^=EJ=BS?Ieeg)b0+df(_**V&H:C;V!1n-W7kn5-^.l0EO)9bU_@=&9m_OVf<qJ'cs%gB,`g;2JDopO-P3(@@%?d)nQ9c')qlpZ"qhQd5.K,mm*/U<PiZ*;5W0<jpY%!%DC`rWPZt&qJW[d$8J1dmMl1!ddgnn(lZiD2TH\`.XXE0NOc"57R_nFKO!%m,R`$%5/(XE^hd,eAWQXPL?:QBB^2UHe7o/[%No(fe`A\e&nnFg.Op9P"2%;`H)>TR-E)&m`mS"fQW?SHnq_j=GS_DJVr*sRK?^4[2:`nmK($-Y"'A^NC6lOKP4`72S8hV]Nkq"bC#fK&&r"0j#0F)3Hh0[aY]3R;bQA5m5GAuXRrp+Bg+$fDH[GhW*i^XD=3f[lm&6stKd9M%CH'(O[R0I><2$[r5GQs?/$,I`D`C+h:8WcVkm0e$$b@<21mQZ\h\R\=_pH9bU?DlY_>?!q_<<-.@g4srZC'Kgr[DE-L].2\5aa.:qGe!Gt6(NaI_c9dNYHeKoSj(HR?4a_7"`rQ])l,b%JjNN"%p-@_+PIY(nNZpNfA'Tpi>3>aC$VY`71gnZWkJTs3AW5)5H>Ce.OlK^q!%K6'(Z&'Y:tR'GVWI>!h9Kl%bp*sHrk7n,+.n)/_[^KmF3XX<heukW"5%Bc[PoF6@!<+3DfVR33HnrG("H(H-obEH&V?(O89B'UmZ]c.q_5oVX*IDdYrSL=_0@$a0/G1\>`u/9?EuW]3Q_*"ODMBb$1?RF[nNg6F+cIs7MUEI?oS8*C68of\g1lB`Y#?g4V"7SIAaGB^-Zgk6]oT0<Zr@`C9cM.Np*!`9k<\s9XqPE<.hki\:_LHn$kt.W`_W*7$U)?Q%N<fq1<rYDJ-aE9[m;Ph=!/mFVrdJC]`Z<J9ZtSA4WWMRq;ltV5bkb<A.A0VBTC::l^FdXaSc/8;n3^,`q`:i1m304bn)[kAW>;W=J]U!!!Aqp0tL#Y+cmBPi41YOAK]]S>-.Zhg`Eda<&AT>d,No(%2&'*_.1YY#\U2q$)5sIYAaML,l?*HJXb/+(GI)1tW\,Vb,'J)V6N:2GJ=84g-`q0^"s<G;$`9TaHqu5X$(\apo;ha2XU!JO_((-8+5#8Fba[D_Q`E<2:qEVbg;7_cSNW'F3Kml$Vj.MhngV^[oUQ:<#^,YMTf2[@!nk[\\sEX?r>G]VnY0`sUI!-f\NITD@-eNbNO*.NJ6\4R_Z(ZKO8;qUgVsJLC5U6N,Z2hqSm`rK-C>cEabn[A!RdKP[+N-1AP3cB^LhU?Xq^nmq%>RY.]j0%WO<7c(F/XU;'tbCOSR^>T%->JoFDUh*Q>W_'s'h+]KG(Hdqh#Qe2bZIVQV%G-oM3tj>K6o`c/KA@H)g%KRWl%.%:^5$sPQWDs6+=ZS;C+\!8%<:S]g!K2A_TWc3>=Pab:BW0+b\Al*E91rh8ES7Lo6h^m]$EMg.3!"^C7VSQ:k*IT5n+Qo@h&WuhPp^%P-TLp'-a9Y<O@\*_9Z\[4uk:Wh,kJd06l6!`^FFr*J^_Gp<mBPi=!8.*T>mXMH(?J0M2OF-/>B(:,)3Im[SQm_rh/;;)C-d9/stHBWe!PK!=q\!gd#Oq\UrbX@<22lf/I6ePNe=LVC#DWVXk!.3C.7p21u0Qqd!/OJt6nQ:@_$/$//4ZFrIh(Dk``$U2E7CN#pu!glm(JA+Fo.jiXDSItTCH'TpZBl&I#>H[]%Bd'[&hi..6C:F1n:M@I&r9.9WlMCA^f4cWR4^n0')m'AE)QoS=>5oHM@rhN3i(^5P8ZfXf1:eOp'AR0!XJllk%G<A9<;EQ\'`(f0^J&&)>!W,_kBZJ*EHZWCk+L"g:RH=I^ifq$Q)`7edrN]%/RS!4Q::B!GF3TBfU"WO8'OQM!2.iR\WL#7nNB>tmr3p3q>LD;h,LB=.!LZZ.UV[A.ZP*rp`u@U$ne,rU1H[MEo["PN-\..*cR@7G#qtki4b4-dJ,+<KF`M23)kspnC,04;@QWfE[-^OC<0D-,,*9/);ggU6r2oQ^<#lPB$BH>0nn&VNcBb.:#g;Si)3;E7L@P1[.in;*-;1^@A5M\Ja(1Df<Sh'0\_/^M^Qblhi-'i\.dT6bkEtCCFfeSo]1sckj5thZdg#D5Ci^$/"l,;4O:Y@g%.OpH&^_;=PfYR'?.ftUh&31%^qC5<'$5^A,&hXOAiJnIiQeJ]r,EG`JMI)hZ^fdKm<KRX#piS*K_;C""ZCu5&63fE-tJAk#b\_Nkq-$4V-;eY!.j]V]8t_0,*mc>l[YW8Y85LEiPrm4)3$]elp\*8XbsS`)MEN$Q_ib^4jD]]1@.`iSO$:BC=cmAg<Ap#jKAcPFe"=Z=J70XHInDi5^u:+]f^!LGhj&iNM"F?1(),i'mc!%+'oP3DN7fp,Vf[l0l7sM&Zeaid6lQh2/C_IkQ<l.Wf";p]c'=^>dqc;#\P1,&5>9FOEPE.b*lkFRYhk/d!b#JUg"X0?W1^Sb=LX(t8A6QYX,Y9.l<N3"9EmILVf08bZ[tAit>UT;,a[A:qbE\1I&27s2K$V-dnOUO+#8B$5r_gV,32fNmUUs2Of$6B,4T('?$NZ6rd3_7.TrRZGr#iV*`\L"Mh=O(l30=60pJK:9Y&rS&uhDlrRJF6mOO*O$3*<f(Y8HW]ia^>OQ11S-Ff>i>_[LM4dIFB*$48a>D#.uD@a4A]+T474s3CF$>B6lRMqB8((4c!ceX-mkf^O@r%;K.e%q=*U!"%>)p3Kc\dN;rj@]2l.YI8e!+sLgPobXko,COssSV:08s2:,s'E;.b(<F(M?WU<?XtP[uZ)P1h)]K.-1WUoi_d*bn\io):SKH6W!be8<U5ab3[)pubJ:iZ6?\O'c^"Q=1[HIg"g$Ri'N^A&-(\m)f8<6.`g#EC+0K3NIuG'fHBOT[^nXj9pEYVqPO'q3b#u/;:(Jf4X!m^TOU03gm#Gom\PGGW;D:/n\'ls,LcIpD9%pPcB"g/!'Z2nU-uU~>endstream
|
||||||
|
endobj
|
||||||
|
12 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1321
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
GatU1D,VB4&H9tY\29c)G)VQ,V%`jTc8;*!FUH-$/r;#Y'4,L1fT:d\+\dH5T3^:K+L+)RF:>H$X]Eb3]DKYr"s9o+d:nb+bEMVVCgnj87u;@_QfOXXo6fZ[MCgF97ap*mg.Ht+9b,2&*4D?$`4tp6$Cob:?fiUuKi:TIdAM6e@etL=C^ZuE+H(/jIl7IU'A#?p-n%o#%!F>O\1lM#'PqK:?g6KH<\rS3=>5M=g;1AXKe$&&L()@H&<hjOZL`$QT)OWu?$=YM4fd>c_(0olC?'b@4Ii^I<<l59]NjX*?T[7=DWBrm.)^uo\+d+jc7iIFhR`h/>g>e`\gc;/#cq:NG?Wi3eCFY1(r2[Y2L=j`1:`g@Q1<e&Ze^4c"Y2e7OQ>knr5UfS_ifZ0LCm2SEj\A_edtpJcTE2uAfGi1UV'rG1jQA`D-,VbS;uH%T>E"`%q@ZgAKcCNfjdT@_'TSe'KU"pBQsNY&hgBG)#9TAc_#dG*[7YBlPCGm1"SUZrslb*n+HQ[:@GXZV<&V0F@Vur>a`?fV1?Lt"S!+[dYaY6Ns,N(0ucY@*_,^s)Nh#:KlsF]h:Dc>f8h3g]66u?-s"T#SLHr*qO]hu0`8AQ"%Wo%:F0M2qZY/2dhCS[%lW=H:?5SHlh&1d?"Vbl)Zq&k$-$K9S[==;,enqU3P8AgRGH0)"#_81)*[Z1JO;41ZQ\<^hgfr`YXCYP,K)qNAP"CS,IFI-98*9MSCTM+:+X>OVAh=Ds/U/R?jit:WZ\Y9;LpMhkluru8UF<%,3;`KcX]sR7B!RBS)uBH*dS[,eh%iI-['f5?a_R`*MKKp_.C;<>0jt\N&jBn#RW"aB"P`6]TqWB.eYg+`<EddWiaCoT%q?8C*carWeua]AN]UBr5#!56rtkcC='SnKBLe<`R5KLf&("!20nl!mgfEL*oV!8X/b8YD!F8(ckh+WYCr2uCIR2;7EeMM=3IJl\FD`c<hNr^pC@^`Xh/_5o*tlk>eGeJ$%HRY%"693\DX)<=`ZGtaJ,H+a<29rV:+DFCMLIu\M?)uOccDedBl>qIVS2LFg_>4EHISf,Wa\hZS5%c*B/`=R7OS^8Phk(d'eiVl5N"1_XpuL$SPFd[<mZglm(%)orcCcdGcdSFCqbQ$Z52A>rZ`oD>lkah]`h[GE!@\Q<,KJQ5BS;@l(gqoLbm4&\D<=E?i-0Vhugl<`uPN#gZVWRQuVM@YONpA+qW&;JE+:2uZWhqJ20n4s$$TRcnU"El$hYD<+on/O'e"I<R:a&!_sV6=6K@drY%[CT[?u:jZ2O>1.44[XtZ)d#mS9D)3i5ai])cML0g~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 13
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000073 00000 n
|
||||||
|
0000000114 00000 n
|
||||||
|
0000000221 00000 n
|
||||||
|
0000001154 00000 n
|
||||||
|
0000001358 00000 n
|
||||||
|
0000001562 00000 n
|
||||||
|
0000001766 00000 n
|
||||||
|
0000001834 00000 n
|
||||||
|
0000002117 00000 n
|
||||||
|
0000002188 00000 n
|
||||||
|
0000004996 00000 n
|
||||||
|
0000008630 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<831906e146e24214ff1bc324bdf309cb><831906e146e24214ff1bc324bdf309cb>]
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
|
||||||
|
/Info 8 0 R
|
||||||
|
/Root 7 0 R
|
||||||
|
/Size 13
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
10043
|
||||||
|
%%EOF
|
||||||
|
|
@ -0,0 +1,127 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /STSong-Light /DescendantFonts [ <<
|
||||||
|
/BaseFont /STSong-Light /CIDSystemInfo <<
|
||||||
|
/Ordering (GB1) /Registry (Adobe) /Supplement 0
|
||||||
|
>> /DW 1000 /FontDescriptor <<
|
||||||
|
/Ascent 752 /CapHeight 737 /Descent -271 /Flags 6 /FontBBox [ -25 -254 1000 880 ] /FontName /STSongStd-Light
|
||||||
|
/ItalicAngle 0 /Leading 148 /MaxWidth 1000 /MissingWidth 500 /StemH 91 /StemV 58
|
||||||
|
/Type /FontDescriptor /XHeight 553
|
||||||
|
>> /Subtype /CIDFontType0 /Type /Font
|
||||||
|
/W [ 1 [ 207 270 342 467 462 797 710 239 374 ] 10 [ 374 423 605 238 375 238 334 462 ] 18 26 462 27 28 238
|
||||||
|
29 31 605 32 [ 344 748 684 560 695 739 563 511 729 793
|
||||||
|
318 312 666 526 896 758 772 544 772 628
|
||||||
|
465 607 753 711 972 647 620 607 374 333
|
||||||
|
374 606 500 239 417 503 427 529 415 264
|
||||||
|
444 518 241 230 495 228 793 527 524 ] 81 [ 524 504 338 336 277 517 450 652 466 452
|
||||||
|
407 370 258 370 605 ] ]
|
||||||
|
>> ] /Encoding /UniGB-UCS2-H /Name /F2 /Subtype /Type0 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 11 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 12 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 9 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Author (\(anonymous\)) /CreationDate (D:20251212051549+08'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20251212051549+08'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Count 3 /Kids [ 4 0 R 5 0 R 6 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3221
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau0EBm14N(B)O^W*UT>3u)V/ZI9d'!s9^:NpUiq,UYJ&pLSk?G/A0ipTC<lZK"R*-Tq]r':2>>]t3[H-Qs^#IjEamj!]6(O/CgW8?/W''1ik,W;frkVZ5`C'Bsk4At6r.D+/.gA"<run'U/t$Mmdm_k/<g:M<F)9J]*^+4D2Z;MO@2MJ#aP`_n_*6\"FQe+$[WOfO07.8-;uL47M,F!9m<e3AccP;MXA#diTMret$g<cQSlXEnsn-&N08b=(de0Fe\&GcElb1tG9!?rWbYdt1$*NT);H`c)T2o:u'e:IXdehO*:l(>i,@XY<SB]Uf/Y19k\q<\4F)MP:2kCoS,sMIL/(e7fV<X--\?'`0@3+?(2/nF,D.>T68hWS[7+o3+cWM;^V4cBXOEo3Ld'oBPQ)qW"=:^CLJ&J_90g-uJ8^X&dW!&?EnN*JTpaLb0D`!Fb*AEF.$NJP9aB)L,j`mHMdfEX/SA']lNCHUnp2FW$-G^fkJj#K@dca<]>ndC$&$9j)T5Vfg>rI)l;"P<bp&h-<O:CVn%UQZJ_=p%Ba,A!TBDgs21]=/<qq.>AO4rFM$U4$k3B$FOR8k9.#j[`tV6!n/Wjhk:E5Mu/3ZXeA4R55(IbIcuSGUEVt&*8XZ[5er1#dUfTGT7V15'l"$/p;IeqX&d%=ERi]Y$o1s6+jXk_U_7o71Q+hQTm7AM.SY9TH>[s.U0sP,kq;O^4Q>eN!GPc0d>H`/,F5Jrge])+r=q8@\8Z@b(P=(ugRc7fLVN=V#`H3a$QF8Y4$Qb0_5gHK#64saj]eldMtLsK>qpQCI8\!<.rp3;jeS&XFn<84:L&B3h/5IS8=D;%$?+,gM_m21X9!F=nh+V\H+:\[BX!4D2)MF/kqdl)9;0h[?dI,M,5K<LHGFptqmj/(VjH)n_Fs`ghpWHkO^PR9QRan[l@p-PF\Efn0e&a)1D\JP1LZF1^#gfH>5*JY&C-ZK,N9p_kfrZql,EnU8RZ7J2L5.Q?;r75hoHZ:/aBu=J.jWZd$U!AgH[T'[iHSXoNA</.86kc:!?=iS#?90]P<W7'>8ZpK1pH_",9ef^#2Hi'5a82p#_$Pjs>:Dj-VTmaMN$f0l++UYJC+pMm@TTX,\&kZL^8"-kpNTd]d2giP8*k!;<qo4?*<"ju#*t5.kKX15%<j,aOC/qN5KimBg>$cbpsJ2#%k62"u55:=(WYbL@CGl[F_qg-6$TF\F,38EesplZ@FB;a(]U*F=,^m64$I(.RlF0%.DD`'tb;-CQtF@5`ING=c*VMSj2\)14?1]d!X-N(0Fp!8;:7`>=>d_j+upGhp1eh&<XQIAi*VH@n.N&_#=-oaYnVdG^]nEeG.3?aY0Ohh[+LT*1fKapQ#$^5beW(6Lk1]QGVj6('nh3&5iq5C`aaN%(4a89%VjLCTBHI6P9i-)D]u-ulij"efAhd)k!D#`(:FJq]O%5XH[(BrYp1OD]sdO3Q5X:lmrC0'SS'bCHfJUQHfmaOrR3nKs!KiiPlM_A+o@Gpm*h1R*DQG.Ca(auqm3TN1\(.MrHPg?<a4$,7[8Mm'MAFPHLaI0+K00PJZW@f^2F]uP*]Bsr)b4k_YKGb=Qkj,,bAesXCs'FZ:(p:$5,=8'qnnAKCH`Fo2/'6:t,XRO>^?W%ueH>LP2&JsLA`ieg\SRsSG*Tl$TeetF&BH<\!J-`dVIcWXHMK?l!T.`;R,(p*@^c+6tq-&UaM)$C=@*[B;=fh17k$W>(nE]$g+GbT8SIdMI$4pQ]eZTq=<IHWShVcf.ajQQ3B)4HBPG/od`rM?9ffQZU3A^#]oKMD6`a-o15T1=DGgG]/CC_I'`1Z:.3InEnP+EQ!@0&4/JF-_U-Qq8#Qj?H4(7!LV/$LL]/%0r#IO$n&AnP'\"td9gkSoiHg/oAD90CNI&&cH(,.MYS:;\.>:AT!-YQ)'iJne12QAS!/TM]8!A;j8EIpP(<B36t48Y=q):7LQs-1!mnKG*LTW\'>k?MZ@n]H,CJm_HncH[8YjY,[eAC6:IP$Xf_\XeX.-X)>%F?gmRu"&;0OneP`t?(6FDG]gIQ9t84/&n8\/\ZDr5&?)H2MM(iJN>B`O#gsKUK;Jg.9s1*3IJ>TA'jNfebs&??TJA$pi2FE^TZXe.nAm/:63g#;ROe`]GrqQEQMP4[PUu$rq[of>/(V:7J#AuNg#93hDuc%_:-t"o>8A2Tmp+05//VpZX@)LQ9BZq=JHtnSLDSBM)VUU^YEZ:-GZ8sa@,#+:(3\5TrGX3WL[-=HJP3H$lW]`G#[\C0_c;')(Za&bfgNNu1El21d3ta2glA9!kq.^D^Z8TB]-N^`7hsKqpel,*j,2l3PoTq!-lXXa\:Njdq%PnlCO6.q2qmH3%TD@[e1%`dKC\ZdrF;Aogk!^]R^>1:QW%B]kB9$2r>+sd^Xc:-jb-$B3E&FZHSmnRc-qLneSAZinnhC;aK))1X\8+e_P,`kYVa[g(C>d%VDT^11q)t0ZA[9M5-Yl)<j:+.%^4#cHTQm\hls'h<*iXGiIL8.HmM<ZAueqq&tW&ub1U-E6m2ZB$3>K^6Xau=b*OOqZ*;s_L"VmKY&G^$^\r96VB+0Llmj_=<J3n`pe0lKRtr:*)BtRHrok.jBoUH,PaC4<NO'_)]]acu!RZ&D"h1e!.108?am))X9i>:gXGsL9mHsbG\D%iR<JO1ch4;Qb_U5Zt'(^<GYaM0Y:SKZF^iVs*@Vfn^rb>HAAC9@ul)$Ud`T?=R$`nU7)f'jb:uTVaWUf``5pjQ2%\nC>m`-O#Aj)*"YKXER3tMtj)+trW]E%E7oGMr1F76MsE&EW]r<4enrE7o'0'k]s(L<N9)VH"Z(N'n+ZjEXQnS>$s`u?8?N?+9;<"NV*(sOZ9>)d&7KOL3,\^i4Y?^Xk%SZQ)S,4XqJg`0?Mf0E93[*cj^];a-oc"EZ2j^&eH(/?PC'Xk3Xa:+Dq$7T$9c5,Jmk#&iu8A]#"+VB*tpV_+(>p-b\?5+=G>+KH^cJY6;O*bp#HWir,c?.&"mPA#`C2&%N=VSrhPM$oT57ukAJP961BARpEG/knt>MS0QFHp_3Y^>E#Z1g@[4/h34oYG:g51$:);H+s"qYRO0'@5e?ks'asJ*@A_!=j=+r+>`@;Y+=ajJ4Zr,^ii@M,?!U57OS74-lcCDCMi%LIW8+c,*?>!U\]U4`hXXPrjnO.>joM=23bS:oC9CGXBp>W;.,09al"T4o$1FrMcj~>endstream
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3731
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau0FqcDOl')nH:_JO3$U_f8D81U/fpU'02,e8mVR.*)62Sg44L/>`3"@E+]47hiS-/"T(%d?Or7bYoL4MLW'A6BN::ZC(iX]/W.=.[*i'r`\K#8J*\@:fD`b0'S9q4)OO_eKb)R]0<HC)k/Y<,(2oCZ9juncR2#!`cN*57Zgh([3m0]!?cW];eKJDTZ1Dr4.n;+VGO4Atieg9p@Pm&0g+,bSS57JbrW?1I^>8U5e<i(g=<LntW@%:rmjV*t[q<`g8&cWjD74/YS>\rf.4J2e]^8*AnKRohM\Xdb#:p'Ad%eg(.uJ-;"[ZU#YP9cH7S!&T,*jKH3QI3fN?Ol!33KDn!TM-=>JSWUL(s<EjtBY@M)/D4Pj94$ERAq_JKV!35]^I1,B;>Cdls=_p2kSruJu<JnCV.4B-)Bk@7QZMsH_euu7.hA.ro\rb>:6q]OB]V]%NQtR5k-R,J1cu6&aY)?>G9%3%4kU.hi>:48kP1E[.hPM51kNcAr/iHe;6Xb\4n,j-+)Q`Pt4rr*_K*H^n4kA]qI57?d^>$NrF4r;8)dYV[LA(3SJnPV@r7)^R's_IX-PEn14Pda8S$0XD*E')g9KcB]lRW8/D)U%]NbQ&.r>T#eqU'fA)3sqdQ1INB=n3*?EC[DH:nmh\$[s*VAoX-*bT>05Yd<?6Ac*8.o2+oW=Xr2tPR0ordY*R&ag7`odL/aEh.kN'XYU:V/l@a^YNRr41ao=8,V?U&0'Hau<lK(Y10l*q/FnKC:?R+7@7cP[6nptTXAuC?p3R(9RY7?6<J!\D"bI4_%Tft$#>B]LBI:)1+&`dK2@19NEedKX2!]65k^E8k*Gd<QH9ip=i@Mm9buJf%ObqZ[f3b]5=cZ\JQr-fkbU0sb#\P0ud!F(WYg='L$o=hSKE4NB.TM`gaq&_RZDTZG!bY:/Y")PBAe\4QR4N_4kEgPHLSXN&,q;E_oq`oo!Q$*;No-\IkV*.22uM0;39oDfe&jq/Zd6h4IK%SR]"2HSm,,$)'WG-6:6kN'L7$8aJM,^-=YZOnZp3<.O)/Tg$l(=jrF2T;'F%1ME0i>AiVX8SObhSPh!sCa+8W0k%1jG/`\'Z87=TMFcnVbig`_7!Sde+?ijF8IfXAc(7@uoVQ%ZIV/70\2d.sotWK&@3Jm!tfH.8K+2JttY4KkOhn#V!k=H"Efhtfc`c@'+dZA/PUHO>smF/%`+jbsV`3h_H_dp`Ml!%sa@o19ep^n4-n6NpfYQngInbT/$)`)q;*H8"PS9NWPb/XbA?32^r0UpT\u1K=+i@M+cUEN=`rAEEHlaVarDLZ%)"1>9g[QAS8uac*05k``!F=ufRGck#oL:mG\r@_ng*)i=J>CqO>-rPW^<_I6JebsHUYFNo+"%-VGj$j?AkWQLsFjp-8EF@@2Jc569;Itr5b#)XqN!/*Ei-UGj'9J_.Qi)E.c26d8(%_KVZ8/"QP$B>b6-cP-A(@1m:l^CilM_i]t*s,-uU<V58@'P]2[tA$VQ*%@@b>%<ji?YNM(8[QW"Le;0s4KTn/3m:!ffF:u'0[]<U5ciAA?hCb/?ZaH\>.S&aH>-tmd5XuV$CS@@gNun$'m#g=k,1Y4.ujP@saTeiBTNJPU7dcB-'!OP;0@f9R([G-B$4a1`1P0@jBbkrI'YNM0A'CXq1nV=`6R,mJ.cULm-H]_3@q=^4k9oWOhH2)C^TePj&hR]o?F%2Oup=a#jI.Jkc:GjCU"n1.pD+J`ND`bG#%n9LME)&m0mO2h.#P%^0*pX/X?(Y*>PbbLo5C.D?c\dKh"@(e#V^"iLF`3Jp5Q&,9dfQSf,:>e^()kk*g"j<o-@f6_]9[mBD_7(2qd:`JXY0\(3d+')tLI#<fuGXe>0`kH=AZ]@TqLM;$^o"mirCI4D4TVdN82Ye_\A=4r;?Wo*=ZMBq2Xn1@M,@5G1rG`RgN-V!l(m%W0_dA$ljIfAA<oh=Pp2m"XE$Q%M%su6r3Yrc&mgE7N3ol`(kO;'dqGPqB"++sjfRJWZ02ImfrtLa;Gio^0V#@03g&DSVGpH[IE5_dFh/#`e^L<-<@g>ZWa8G8f=M-gsS#-2)a=O&"<$s(iAfN6u1,S%tFTE"61lX"bnZbSr(R@W_[R8GS7f`IH1\JDjBr9!SSR];o4g=b1r)5rJ1,;5^/#h`*b4.f&UhJJYOU+G(p4XjXqt&WhnB>=e/T2<h)#)@#k0au7&lTZAqRB-m)YFM=R(RCH0ueoHeh_=PP[VdCI&?:V%.%.Fi3fDkk9+[8;b&?:2m_uJnE#05[[@`=6W4G-mC4.%U<jEq,]luIe04Zd@hD)bp9#QN&2t:(Bl498.cUar;I$"3ZGtsY"6MD8_^OFa?SlHG2B3c4e*$]D4=A3`-6PWZS?iL/1n%;>gj`+%`CsKIXNNAAWN<ZZ>=s:l;H'D145c1'r&WLZj&`V,q@%fr<FFgr]M#'$TcYu-04\oH$=`>X4;F\Tj1=g\!'+7o0\mY+jb4\G!O70,+GZ_pQ[)d+=7f4F[*a-[0!^;FKap&FWpHabV(rZsTb;I7pM+U906qSb><o^W5!%<(pNnD\V7UXeEL.SRqTmLm6)V+!XaodY?gOi%=%$'EN4;;T"3Qqk[6CE75Ca.p@hj\T13lD7`g)(X.N5Y.9$K!u,d!s;ci7jE!W3M[]ROpAHagh`QIk>8m^Z-&cct_ZWJZJ)K72rFWkdj:c7!IZf%'?NS2,a>n49d9V;M>->ag-U>GamSBg@$V6ldgd///<K'gREC>qohQWS=mU698lRnBk6qaKVY/<tm-cq#QQD9<^E%W":?2Yb$RM(WSnK>Qh)SaaQ$;erlr8BNE`+77^Fn/#%<Ck\fF\%sPNf7(+a"B"Pmr(UrFX,;(1D-QK6Qm@+J\?r906_@H4)cs#/^^aDFop3FG,/-JLNW=XBm?;-K%)s1g6DF7aE/A);KFEFqX?,9-[=EQ_h>m'/J,`_!"CI388()QRRZ&-7Y,!:+db[Ce_Fr'VmN79O+L</,nj'QME`A_7&\qB<,dhZ:V-!':O-M4FXPL/P@;uOXO90,XngG7;kieY[5j7YtbV<<A#b2OK&\p(*umWud="=Dm1?#Ok_=M'l@(KtYl+4mgD[qh(0H*[g[ZSLT2PPAua9V9mk<"H_$R0D]^PpK\0GmN,ADtj6d,,p*4NOfXkS7ZDg2,P[8(?K@:)WM&b(=nRh5-o$LOitIeJ1sc'O)b$q8i^Ok29=ThE]OfkV)Gt4CLXi@pfsJ]/rU7X*!an%(X,'nVShFr?ksU&"B`b10djHrXGZPNo720++8Iu2Rs6I#XeK7MeX=uM`3^<nk]9M"_US#O#Y[u^iTY:>-bqO<O$`(-JKsXY1'`L=UD<l>:`RBI[K.Kq]V-2oJsr;2Yfg;%[mqaHTe`;h]FE3DZ$0^0l6]nHPONj72%TM$E;Z7(R8Ig>TQ<u-j3:TV#qh,pNM'6d`jL09eE2UDFcd+)*,ps_6(Do4j&B'pN0ZpE(7c*5o._$dp'X%%U>PO2h[c%O0Xh6Nm^i*Kk<$UcrTj'^G@d9'9)>^oNODM%`YfXk3FkZ^V)T^#I_b\ia*!+>pXV7CGC*R>YQs)3bLRDlIAB<oN1Z-BCM&<r;.Wk1.9Uu(Wkn;qd;)MI.05Q7c6E+F;ZXU;1Wsu*!j,FE8oqY2%="\aZhiS_YEG9"pC\2MW\Q@1P6*]/Eg$&Hn7jk^$0AsrA_<gbCtZ9djP:-b<D1MGk4S/e4+Bsk:TX7>F8lL896p1~>endstream
|
||||||
|
endobj
|
||||||
|
12 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1014
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm9gJ/\R%"6H'N)Urd"j;kfQ>QMP"DTA2";XVQPX)a39;p!5#XlG@a'Npf"k"SlJS'+L4SJ=8Z"'$<T949b9W>Qhbq9iE8/6p&\BLp]8^/'2o7hOtFNr%!4QItM@huIiia/DOX?j5$_0I7M<W6@t)i.tg^g7ag#YHR"@rfMMmH"4f/!4g#m3f%/]:3?%h+Qhg*qo+LBksSFEMA?"%(7qr:XBsfrHQ,DC4j8$2Yd^lT-e>_5A?l1Z0,\Q(W2.p5QZBb=WLO'!TY#[N?6EMJ"Ea$#GEq%(>3kWqe@pL%@;onCpsle79;P`^D";V.7gN^@)Bbg4Q25i[tZWV'V7-#h>s3R]3Og--;.[Jh,^-)$[07$L.(d?pMF`+'S8Z9-][M3%$khFq8Gj[ClIHN`,HDtZc8oTILgrc?kR/"<Dc9>KaW7KBp/N$38>mVfAJIYL8ao)nD]0GQq[8b\3iT3AOB713l_Yl]`reu#;LcFD7"omX4cL:'rt])'jgN1q1TJ:2"LscfWsK/.EA+uB\#!r)i2LL<kI)D5;X6m<]/P_<+'krW_AF:rYo^qFV]#?a.a#oC4k,]R+)Z;lC]&;M']NRb;iZrj=]1QLO"!&[]RkRY=FS<eZ)i18qeO<N/)JF53f!CMK"+f5YWh3flW5YY.ZCALp+q3\'icP+s/;BHSFWkkF^sCUc*d*Ec&jc_Bo.D=V$p^OeuVG&"QY`]JEYWH<MYI#Y:/tgBP%#hCiC@!2QAr\-6h)k9Ji"l)j"uQuTgInqgWfp\[9'QBBne8*@`A`W2N%=6nM25+%TJa=-HXLju,,K?H'17N8NH1:=r6eY7^&eXt\T`SsZmSjWc.giFY&*Z:Cs=G7"*=Pdp\QL".eLUk7WrJ'M@a4;!,TZ7p?d>U+r]mu[4Y`UEj/K\=U3<fmq0;CnCgR%iL>Lo^qbcZ=,:5-g4[nO0(Kg(5E='`bMJW2bf0H<2q6\]_hTMiiUprZ'VR.*2Qdki-oLL'o@V=h9GY,\Ml)dTf<g&~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 13
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000073 00000 n
|
||||||
|
0000000114 00000 n
|
||||||
|
0000000221 00000 n
|
||||||
|
0000001154 00000 n
|
||||||
|
0000001358 00000 n
|
||||||
|
0000001562 00000 n
|
||||||
|
0000001766 00000 n
|
||||||
|
0000001834 00000 n
|
||||||
|
0000002117 00000 n
|
||||||
|
0000002188 00000 n
|
||||||
|
0000005501 00000 n
|
||||||
|
0000009324 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<f55fc5a4a8907d6e2e16a196a910b596><f55fc5a4a8907d6e2e16a196a910b596>]
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
|
||||||
|
/Info 8 0 R
|
||||||
|
/Root 7 0 R
|
||||||
|
/Size 13
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
10430
|
||||||
|
%%EOF
|
||||||
|
|
@ -0,0 +1,108 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /STSong-Light /DescendantFonts [ <<
|
||||||
|
/BaseFont /STSong-Light /CIDSystemInfo <<
|
||||||
|
/Ordering (GB1) /Registry (Adobe) /Supplement 0
|
||||||
|
>> /DW 1000 /FontDescriptor <<
|
||||||
|
/Ascent 752 /CapHeight 737 /Descent -271 /Flags 6 /FontBBox [ -25 -254 1000 880 ] /FontName /STSongStd-Light
|
||||||
|
/ItalicAngle 0 /Leading 148 /MaxWidth 1000 /MissingWidth 500 /StemH 91 /StemV 58
|
||||||
|
/Type /FontDescriptor /XHeight 553
|
||||||
|
>> /Subtype /CIDFontType0 /Type /Font
|
||||||
|
/W [ 1 [ 207 270 342 467 462 797 710 239 374 ] 10 [ 374 423 605 238 375 238 334 462 ] 18 26 462 27 28 238
|
||||||
|
29 31 605 32 [ 344 748 684 560 695 739 563 511 729 793
|
||||||
|
318 312 666 526 896 758 772 544 772 628
|
||||||
|
465 607 753 711 972 647 620 607 374 333
|
||||||
|
374 606 500 239 417 503 427 529 415 264
|
||||||
|
444 518 241 230 495 228 793 527 524 ] 81 [ 524 504 338 336 277 517 450 652 466 452
|
||||||
|
407 370 258 370 605 ] ]
|
||||||
|
>> ] /Encoding /UniGB-UCS2-H /Name /F2 /Subtype /Type0 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 8 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/Author (\(anonymous\)) /CreationDate (D:20251212051549+08'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20251212051549+08'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Count 2 /Kids [ 4 0 R 5 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2981
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gatm=CKhIo')q=&R,'n4\e+_pM.`Hol`RBc8;mqXEtU*[S$9[85ns7a>P30cA0t_-kE/8OR$kZf]iF`+<@\_KIjE%9_^,&gQRk:bM,[&b4-?CKP2;,X8akNX4W.n$B#DcWCF.i\LA!s^3r7WnK&4X\o&i5!pLm?**4&0t+4;#V;23CnMGK>Z2Pb0[K\kI_YO`RfB@?ZN)=pq,Pff4kR9$2S$/p'kNTblh0^7sP]gp1RFXn*<6[u6P?`QZF3J`1`"=8p3Un:5qharMiY"utE&hDo[>,dZKjfe8$\$.tC*]ssfLP1H+i\u6"`G\k`aFc&#Po^;9We]1Ni**#:>,kS\J8:$O![45"n95KGRj68e:;\PV4O1^`PVg44d]p:iS!d+DJ!kKFMCb]]N^f@LiOXX'fM"<=QAdRFb`I:OG=(r,M&)]>BZ\&gpR1_m-(CecR^^,9a-lL54]>DZc'p?Wm$&#TBf>?0eb^kJXo#cOW`c5om1m0r)S=M!loiB$3Nb:@l$PiHmHT8P\sU:,ifuAQK$n>3IF@%NfdU0a8<FBQ2KN9Lch$Nt)p&]^S2JN*I4KYhMm>/&.=>9X0Cahfd6j)SmUSXOeAp2:IK+EUjYRX:O,mC+&N\scq4B5*9onNhEXiOs=Ji2Wp:FUQgX6OJNNP.D[B3oT?(3gunW788m?.8Y&P=glO>FsrAA^9AXn]mPhf#_MOl>])S_YG\Hr%<V$VbnZmrnp/2Aq=\6&VLdScP+a&0$+@ko=NMYe@t>IcB<hq_;=)rjgd\20pLrN0)K[;l#>-q,ar6+41J8S3fdn0ZaeXhe`j:F,bJ6[V2Al,keIL7OZlbB1^hba-^MnP4pDD$>5UmV3=Sg5BP_f86_UaFC:T&[W:Qgjjok'N`6\(cl$#PG@Stdn_7Y'Mt!-LO>Qc`L!D>Rg-&*^[lXhjWu(6M?STf+jLKjG(`:su"CNZbKP&EtZe[_@r;B,doRf/5^dj_?WufLgI0Q9Z5e8a%/*@GW_;PLM_<hd,#[sH;V/4H2.FU$fdP>Cg=dBP*![?`Ia@j:I1e>Ud4+l.-Gcb7[Z].0t0,R1^5W&WS3##]/'"kEd*5i<?IXJ\MQ4"^RNNa_4NF$V0>N@5aN,l^36]'6#d`gp&'?G7cJ,pdSh*0kUG<d!Z8s*H.09`:"Qh"^KV1Q*o>(/FX>j#EUQ!)EOjA%rUHmT%2_@<ksV#!mF3405tCs>>B)Q<DN-8oVU2:"fJ'lBcHU^7+nP!g(gR]an$&]$.uGU]["Gi`u`Xk9:b^(Pq5e%DcO@Y-1XiHq*JF8(C-.sq?-qMm:>@)^abFDN7t8n\mp=G7l95NV\.A)ILMf&naOT8WBQ@#O@O(8uirqJ@;pHiqc(R-gNN`U^7Z#NO>HLDAShi^(U*Yd5?(/-Elm%_FrmZ.^n?fq8e&4dRZt9Xst!6kCOWZ+p5;)iaIV%)ND(d)OT`,2H/9KJ0D]FomAX,<PW#rr^l'jB4,+4]d]b9RJMG9RiTqTMT4[8X'K`p(j%r28nl3C>Whemo@&Yc4gr+:rSN)"(`[Q12FptNT?W\X[4'<HDgd3*DX^b#(;:GAe<Sh)<=5(\>GW$K_:)Cs1AdX>quqD<#i7&\.PBeAgtB+brB\G"pj"HAK5cTQEN%m6UglC)iK@^ZZ(N;MZP>.=m5UeK.hDP"_!9t\<!lXT2qjW/6ts$+]fKXMX84=J)5[,US.k%hq=rgG.K?S0HDkpVi1m%.!3%f4oi(aS"V;_&k\;;Od!qu4OBdafWW_+UUVSt*H#`*RN,W7$raMki-$6P`[QMN5$'n$#"P8a[1'32-KhR!*8q8J]\kWTaY.)l<>kUe-6ZTRh#M4S4U\D'WCCHkSj\T?)g6W:oMl2>E>>)rA^c/Mf8*J$"HB!AVBO*d3o]E83PhCOS1L>Efu(4Z-P:]?r<U4"=cr5SYIPk$CS9I#5SS\'(#`iu5976IP"A3h%.%W"S%[qs>'GH`WWO9S)\,!KJu,A^(a>bs:koc8a.5`fYW?u+'Q1IoO9.-P82TC$FrRA["Bcuo-JiAH$"X)aFU@Tik7BC.+EoER8"qZ(0e97NoqoUX?Y3-d=%p+Ken$u&HEl1pX=46J10A8mXiO5R%;*s]Zt9nu-3gV!?f\i,\J^=\c9^nZR^.jlYtE;WmO8]^g:r?3@h=p!O.TOsD2\2a1.8%lJR=$X<7QGD2C8bD-*G[*Z-m*3&@Udg0L(<Y2pq(jBcEMb/9ktW=JBNq_?<;PE;FR_\O's=e&A&dV&J@6aS2OEYC>m#2CQp;`R2BF`#C1Pk(Q\D8[U!J>89=@HZfgGC4$R5(5=Xa;=*j;.p,Q0*Cj?"ejeABqLP938\)<^KZKG5#rlr/#oCjF$H.r3\dg%]'@qi&->%o`kCNT8<l3s(d/WIu]gJs%]Dl<.pQ4BtXabK!4pOsgWC#^OY6GsKd>I6PckINLWju6,U$hgkDAl<k#nUA.pV/2`B[3[1AVHLu_0]8=K-#(lD8S);;ocSgd[SdP%!SEEL.d'DcU8ks5t2"rKO!MW<6WFAZ=OtY2s]oZAQ'?Xm]%1j+hKt/DY;?h?bW(C7W?)I!l;$UaI6YTF*@'keC69gU%SFQOg:WN%t6"c&_u6njs:/N)qb_G+<7oi>mp]Fg58uS+;nQaqe9\2Fbt*`W,F=(f.IcTT)drFlf'd%^H&k.h%dC-<<[@)0mu1r]@0n8!QkQVh^T'*e@0Ba`#D&UU@dT/2d[-73Zf%FBBM%W>e-/GVc)AQmRk!c<^7gHGaQi%IfYq`H^).WafYogc?\Y,VHV>8hb>3Z4<cl76'po\)_]e*2OSbr2^UjSGEKZdWg4U_4g?E:L&gQK?EJ_kXqUT7[5i3bnAB?n8$8jD8ute#!qDD35$t&Jg<+2G5(j;+f1u'SR`X%/A<NJB]^bqo8C4A_+nOt4-um03El<-nQ*@'&37k1FBl@bc?Mq"V?/N$4]\Ni6%Hk1+6c+@8"mosuc_)D+EpmA.UB,]~>endstream
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2599
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau`UCJtm<'`II'R,(qI71&p_-L+dHDRhr'&e^p03@6."TV.qZ@XS+I^$#+]]TSE110%Po0U_1GI@bf^7RhuY,[YcP7a^$X[.99:Ul#A?8=Gj$#*5O+K1kYda`O=]D->PPgQBsfV4E])O']:pjF9D\?(sbu[]XVti%6O\U:+DB.oni?4[&,7FVAV&U9o62-m947jEdPk4JP]LP6e.J<2-0_Zut7=Xjq#-<'5EpOTrdVhO@6N;gUG9V;*T&F0D3LAUgE"C-0h[dO_5@n*-*/FDU`kS'gOi97<B[LXgYT/7s03qGTo==%8%Pl6K4]M'[hl;u09f#\C`u9J>FNk>cng27lE]H0kSud6M[R6:nYNC=2pc7lTuZ]s<j^CXM'71g$2$$*X1$mIr^&Q!IQnKO%N5fg]/6#q7HN'-8F+gq#8R8,)OW\'q$JhDVnF%UnKedR^^9kN3dkV<ZJb7JbJLW6Eu$.Tj:rG&b#8KudC`So26;!KQ>=<d;[se"2sQ_+`^V/P?VHd&O@;gf_CDe3e8!r/$0m4tG(!7HI9hj)%PD27A4k8rs4aX#"&6@ISX40o$!loa:;NiTT&647l!kVo;AF!(HFSnR%nT2@)K1cb6K@bs[fBG?At^BQ#?d3Mb#ZGsrdl(V!]="tTk"q8BP+R0)qr+L8nK&Il*[?Us`^ViLF.c=NpDE/\lL,6T2t64CY'6QSkf(324AqO+5%=$Es<G1Ba!Zb-NgfM]W;i2+s!&cn`)P2E.N/U.C2r\9tLleuN67'"E-,.Vl=/CN/^.YpA5e"`O\5biGE$*ai1R6)NtD.`qVM54)$ZjDX!jb\n!\10QB9Iet`N*6&.!)1AX=.`AQ5X>G2_.0:G(2e(SOcIr!nm_E)Vcr-p>;*`sbm+(G8SnPP-)f73RXhrj4X>&3QF-GXoQ8=6Gr#5DEsiS?ChI,4CnR+L/KH?AYEt3S!C+q([MpW<Y`n'-O9@Npi_bm*qM0mO&kj!>pTRdO%LgPdj,r(]#mmi%!@FQUK6rrdR2RS.Quef&(nSpjgI3;!kg+t/P.`ru)U@paTS1aV$]hK=,fX3$4RCo-@+_CS!G`57<cG(R[R5(kg'eHd]YV-2KRW_,aREuSK@%t:ngAr9mLp!7876]@!":E&<b@HPZ/a!-dQ5d./K%Y.qZe55E&4&)#[h.2?]`f;mf>]6ES-VS6Da=N*/L:*>Ht/%iJV-bj5@rg,?Wo`WuMB6F838SmfaRn1K1q6Ri:)o:1Bo#EEfhd_q)gO)t8Kae[e'!<au2-3r+00'Y/p\W[HOT*s:i[\$n'Ip5ug/Yo+]o#5q+mUaU;9NWKSgBaOu,2\kJ:HTflkQlJEK<t^GS_-IAB5fc88A?e`1MYYN:I@em%mn!mb'p<:%k>+=Q[KSVA`G_^g10;=2l`AgVmc<e/P#HB*c1&GM,3NGD;68QW_M(fLZ,`!))jJ6Ff0VeG:;8paoQ-Gm'L';rI-t@5XN[fFS`M'qH$q^s.r%Oak"j2:8ha8N*g^o!-<49<o2W4J-Z`%99pqQ3aX2#(+T&h=YDqN2&k,PG3j%GtpgaLZpqk-rHIf^CSJnb)<a"HdUhsA/<O//)pt9*f*&N=08=SX;6KO8@dC6Rf7.N0qTZW/*V(P$J5j$)L]/X.3!&T\,;Aq6e8'5NUO\`?MAWn48iOok6llBstI&-j<Tp'Q=S1`r[*!.<3MePWq1T8)13CE(@"sS&C.?9LB0h3'n.R)_s69YccMOhe3BGW1%,S!IS#)j'M*7e_iH&7pNl0D8!K6ETfed<iJ@?2$9B/nVV6>/*E2N:%3>M:!$)hl;RCqudE,/om-OXr4?W8X.6#V8=8rVbIeCL`;T$MuWlE/+fd3#\I@;O1PL4qTDSq/1SoI_5.V!:f+hd!EtF'V#K.IKNl3`%OXtCqomT/k)c>VnifN,ik[.1rK>P;a=llYK1!5?C0Q/gbAtNp$!<a&2[K;Qj!I':Tr@]`k2n)YmIdQ0.]R0Fqh8tMm@"6[.eJ@S`b5mAsX9/_1a-5nk@\_]t8'fX71,$fG]b[$3\L*LRgr#)VE!>7HR<1_Y9_\j-]9uqU[-+1UDo(;Dh*cl1DLVL`9q2j9.8ZI<6Y'HIb>u]eJZ>YP.I]:1na^c?/3\eV6-^P9k=r:MdX&4H>k`^K_UDeg=nsoNW0&WD_H&Xir7*$n(S&j`!1(1^IX8(Hs-<KUfZ%-0eiU%Fnc%*p,sjpd_,\&9FoTh;+Q-k!XpF6:6u)6\EIJhVU-9aY@.Vc4c6\b(M*U`E[65[,]oV7e$N\ZbUG*,7Y\lWa"=f\lo?+5'$rO9Weff/5Hk3leQOF/\aKeU&>A]EArMETN'k*bdZaTSd1;pfYoBM1iliHE>*[of^uJR\N#5!kI*\rflp:No;po-0-$%--Om/M(5AOS^-7qS:=]/I*mSG$q!N[b`cH"trP/bSqgJn)?je''1b!P2)jioB$s)se?Hl?KU.jFUW4Z7$Nb4I9<qo95n%`n#-#NJIq7W#h(TT/i(P\W12kJ.-,QFT*;PBH4RG.8^VKDam>t._q'tXt&7\sB(.5ptS2gcpld!UkVC]Clsc=q%8fnf5?$t&=BqdkQ/.pXmu]GOrN(Cc,T[/~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 11
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000073 00000 n
|
||||||
|
0000000114 00000 n
|
||||||
|
0000000221 00000 n
|
||||||
|
0000001154 00000 n
|
||||||
|
0000001357 00000 n
|
||||||
|
0000001561 00000 n
|
||||||
|
0000001629 00000 n
|
||||||
|
0000001912 00000 n
|
||||||
|
0000001977 00000 n
|
||||||
|
0000005049 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<8959b99a91133a70485291ae748e5f10><8959b99a91133a70485291ae748e5f10>]
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
|
||||||
|
/Info 7 0 R
|
||||||
|
/Root 6 0 R
|
||||||
|
/Size 11
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
7740
|
||||||
|
%%EOF
|
||||||
|
|
@ -0,0 +1,127 @@
|
||||||
|
%PDF-1.4
|
||||||
|
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com
|
||||||
|
1 0 obj
|
||||||
|
<<
|
||||||
|
/F1 2 0 R /F2 3 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
2 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
3 0 obj
|
||||||
|
<<
|
||||||
|
/BaseFont /STSong-Light /DescendantFonts [ <<
|
||||||
|
/BaseFont /STSong-Light /CIDSystemInfo <<
|
||||||
|
/Ordering (GB1) /Registry (Adobe) /Supplement 0
|
||||||
|
>> /DW 1000 /FontDescriptor <<
|
||||||
|
/Ascent 752 /CapHeight 737 /Descent -271 /Flags 6 /FontBBox [ -25 -254 1000 880 ] /FontName /STSongStd-Light
|
||||||
|
/ItalicAngle 0 /Leading 148 /MaxWidth 1000 /MissingWidth 500 /StemH 91 /StemV 58
|
||||||
|
/Type /FontDescriptor /XHeight 553
|
||||||
|
>> /Subtype /CIDFontType0 /Type /Font
|
||||||
|
/W [ 1 [ 207 270 342 467 462 797 710 239 374 ] 10 [ 374 423 605 238 375 238 334 462 ] 18 26 462 27 28 238
|
||||||
|
29 31 605 32 [ 344 748 684 560 695 739 563 511 729 793
|
||||||
|
318 312 666 526 896 758 772 544 772 628
|
||||||
|
465 607 753 711 972 647 620 607 374 333
|
||||||
|
374 606 500 239 417 503 427 529 415 264
|
||||||
|
444 518 241 230 495 228 793 527 524 ] 81 [ 524 504 338 336 277 517 450 652 466 452
|
||||||
|
407 370 258 370 605 ] ]
|
||||||
|
>> ] /Encoding /UniGB-UCS2-H /Name /F2 /Subtype /Type0 /Type /Font
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
4 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 10 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
5 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 11 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
6 0 obj
|
||||||
|
<<
|
||||||
|
/Contents 12 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 9 0 R /Resources <<
|
||||||
|
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||||
|
>> /Rotate 0 /Trans <<
|
||||||
|
|
||||||
|
>>
|
||||||
|
/Type /Page
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
7 0 obj
|
||||||
|
<<
|
||||||
|
/PageMode /UseNone /Pages 9 0 R /Type /Catalog
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
8 0 obj
|
||||||
|
<<
|
||||||
|
/Author (\(anonymous\)) /CreationDate (D:20251212051549+08'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20251212051549+08'00') /Producer (ReportLab PDF Library - www.reportlab.com)
|
||||||
|
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
9 0 obj
|
||||||
|
<<
|
||||||
|
/Count 3 /Kids [ 4 0 R 5 0 R 6 0 R ] /Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
10 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2655
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau0DD,V*>&H9tY=KW!".]i5*M.]t8HD$dk9gSt6p5"C2,7t)*'F+6>?['iab\kKgY/CAgA7qd;qs!OHH^7/1IQ3>aVc!*!)a.Nh&Jn==.,l^W;>3eld[`Ilj4R%)O#:jC7V"*3V.CY?_0!m=4QXuOkNCkcONIGUb96Tpc4H+7G_QcSK&AEH]T*B2#<-62S#K6L-tP_g;lTPeW&ogH9-C:B%Ff43cSSXuM!N'BWm_aijqiP".WW:fb-P@I$m2B/Z`t4=TR1[%0kH;X*!?`e#DGNu_`.T;bqf;@m9%AZqe(Vd!J/\XeHhOsMG6Gp.M4@hq$#tV/$s%ZYu$TV)oXcDI01&L9Q%r43gr2,I5+$cV*^'S;>IR3P4VUjoN!H$9a,0J@"<BiNJ>!o\!SUEd0^Jrhat4uY'.^:H*2;KlXE]K&Cf=P.?gRlPA/n-]a2>47V0J=g-+EaBkD8!!A"u&TY2APK6YXKYi%6l0pR4<FmBk![pPUb$9X\qYRM]4CrYpE?COD8[?B(_6[n2+DK2S[1\gQ'!33WoRk"JFNA!qTK>QhDYQ:A1[LXEGK>cMtHs$h34M'm\_fGAB0GRX)/6?5n'ur0CB)Ctld93cDYh%9Q!#0ug;CU9O#W*L"jSC:A4o,e%.+k5%(-gpE3gG4Bp^3T04B8aQ^^eOKl[UhT48Ytu$4\X-2LJIq+,OtC]_2_Rc"SXbl_KTU^j3AYH"$4E/^6F:$/HCo!`0LlQ%HJ6$ZtH9OtKDUD&?:M`<hn]qg^NXL'N#0i%mfh%Nce.Vo.)(k*.sj@)"i]SIkj<=:QJ!fDSjPS:L;!<6$Z((Y](&4tHRil(opj_EmEji+KTThuCW'/V/[t&+o&K(AJ$.V6KF)"?$Gf-2E]DF:PN/$3Bu;MRUAj8-^\K6?W<F+/A-i'saHb[lrBp#l4_)Zj#07jFY`&>E%I^Z8i^bc8piup.>S(R8ZdT#T7%TW&\FgM`6Aso))PS4&^)Q3XVL]HZ08L^P:>Z%N^rnjC[C.(F7c_n;UXB$Bfi6qP43!C(`)"7cA!jpBen/Lig_b@cFrbj;KpY5mCa9n/QA%5L\\s+0\Rmre<?R<'cQ8QAJmuJ@W3WZ)oj:%"[pK1NUq/&:V#<rkQZn<BB:K-j%n`RV/tYCHYdm2\GleH@F3C5T*"m(`n&A?Z3Bf+V_t.WW6.ck8r]CS:;M3Bl\HX15N$/:r?IHhESrWD<s+^R04-DA+FIe3rNq7<fKRblFN.4Q-oF*rDsPL(i^'QFEg+.T0Zu^&$34).SC]rgep,)iOc^@9IgoBlb_*(N1u5Jm5Kmh,2>[UM1U9t7_bLa2OBX#1gT@I6ZNOW>Y&A"_o,bu]IDnK:,pPP"V7)3qR;:rp*$s`Z.@%]O(T0S']AF%P2&6%)6.%r*ml_XXsjg<G.ibu2PWg[N7Er=Kt=rYUaY<b1s]2&7?^`G<)Lh5c:a+1gICC3;(]if2J*d*0Z:kk75Z*[a5"(27Df!KG#tti.p2OH:9BXa;Vkg3,(3dLqT+lKM2/pP0_%Kn_eIR$0g'%GGYA8]Ws85*X#MD>l3:ru4Vb94$K_Ik)X^CQKX>NN)pA'm$kD)?OZX,ZosBu0c-/J-*e[/)&6N[%F>r8g_Vs]upH]I>R+B_-L:SUT$rW`P,,2m8=Ya&VH'UGW-&OX\7C#NO9*^S4O$9;norMjO$,jR.bV%PHLS//mfdTDm2pQK[-m^X_DD/D)"oa1$-Z/%C;jB\O]%g[MF)23mS[F*WRj>feWc!pkaZ@PYhLoJfaIQ@6-7"b'K3l!b/;345CW\!H793"b]df,B/<RJG);4t?]'mmG/#6#s**uo%TMtFiI_gGb'3"E4df8KR.(P.n[A$QE!G*K_E8Sg))c<>j..84mZ$0so>tka1XhMXS^\S*uH24;p_RdO\7_e7`BrZlFI$^98,*W[K7G!:>?lS:8W6Q><ke;uJ"A@kpFD+oU46Xg[Ss!&H>Xs\9F?WK*7RZSkUBANA^>j7XBBDh>kd"006FV.h\`\oF'<3aKZ2V`bH-p;7Z]M+:RG"smq\Y@PT<WCn_H)-<GLapBh:ciJk]u$q>#$s-oaep)M!Gs:>f1j54d8'of+YgZp+kK.4aKj)WC$6l&k(UP]PM<gLkVqK^`Ts"j\+$=2].DoZ3/7+G4"bW"d,*@GhFAX(rL^].<g90]T!mpHhVK<5.XY+kd-a+ddA)3.TBB/8<JmuXrYAC%U+&@Z)GihE&TK-Z<c+In%B3T`4Me:2f($V^%s#bY=lXg-Sp*Ql#GrM*qs"dFs\J,de'Z9%-]oj;KHD^d<_[ch?:7:=7dYM'O$Y]6AVo*4C4<D.`qn503+1:%lH_9Xclh#qFB+=b&"(3m;_oXoZf4IprR/D%A$2jN^CkJ?I#8+nr\V*mnME2:K(-frbn6_r2,?sH;Z-Yq?k`RMA7lbnG-E65?U0Hh,&D1p8Q8tF4sVZHs4,0)[snB^Q$N^lgJ&)Db00sHi)4&S@J1B<cG$._T2(E[L_3-*4_cYKj!U,>T[i'JsV[O/CS:D$uLfMb?H2EEjura_.aMmOA#sh[lc/c8/WAqW.$O[=8$"o]"Zt!#iDUlZ0<m:Ftb#pR?jPdcZOp!j5#I@X.(hB^B_?FBV=d@b>EAaRc?MX:K?hUq`%7;q`8tqT#u3'gj^TD>Hn~>endstream
|
||||||
|
endobj
|
||||||
|
11 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2896
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau0ECK&tY(B'h3U!tX"aVHf5;ThhD[SiO9,g6J-E#)Q_An,ZK0M*St9Gf2(Dr5n;9.e8ON&%V+,-]S^^5m?\^"o!*THB$VnV8633=N?FQ@W#OE#)!n1r8Zun7qa^o-9Z^1p(@<gU8+j2JhYL8:$=<2c\f8I5uR@P=RpAC^7ig1oUi9DGHdCl/Ruf=9ocp+_#$D4P%Ys@jO"g't=O`2#(PX`sob!p4&!cQEefH(M-CSZ.@ma_:MdZ2HEGuUlq>uH=1D<XaZtu,1`IOmds9ZoZ22b+m&*7LY`>_P%V;`*rWF_GG_X&@"RK5ka*O3[A=UP.B+6!31eKdGl7K"3V8r4UDq7OXeSu+rA5@_#K+<YKJ[afQ[VAY[&@6*'AD699.Pe&Q=farTpeb:E]^ObU5qFofoRNlUIuLH^!?a6s$@;R+WIE#Yu#U;K0u*NOF[uS=-hX8-dql5N\2c%_A%_+!V?eYViDAcqXd^@^ecp6+^0i?nc:fB"4f^oXF\`fZefd7R*6bkJU>gZghp%Q."l+h3D.%8#kXY(Y+bq[6AFNu2>e&lNk+mq<(<QN&]B],"ig17cg`MMY#0l!7O>/:j?pXQ?mbAWROoT!:\34f[`iLd[`8_WX]EgV6B$EoqLtg5OKWiT"'^YiWgp>Y]h0[aCd+]nC42Yen[t#tG:mKc*gY8[+CAo_fk53>VVPSjn4pku8*R&VDa]o=NC"]4Ns>5,Hr&ghbX<=TrAn\!:sKarXJ'ut#cG%bdA:AL#@TUi&e@6PgM/U"Q=2)uD.NQpq\"A@m&H<>FH>CU!GfruIh;0T<QfKdmmm@l(9`mN]i`cl4d^Le6&AicU`uS$aO,%T()0@%jZmFY&BAp<5d8el!hLpEKQ<:gWn8#',:Z375P)pL_*udh,Sd^HKn@GU2QHOZUj7<P\:0R=kZYrUP('&`TL-)c\dCuEs"0CifH[;n`%79i51!<0`$#DK*od0*X=`O+MRQ#3A/:7ug1j^?*M8>Ze&lE.&O?D!Z;09alh4-',WOD/^s";Ye`3"IF[4+_Q>9Lm>4kKF/*h$8U.e&E"-,7t8`WOn7b0gjlorguE'`;Qp7uA:X&Pq^Kou$183:@X6IR:S0LVBYB_#/W.oN*>-'8s?CSapls.%WKVZ/1ANA>"i.0,MD&4rb3UNO9bhsFJ^[[OY,g=:Wiis4@<cG,L`i<bnlA]?)g:9tC\UCN!NEK[&nNcKoL<QE6cD4>1K-sdhk5tN0j/(%7g9loNP<Y>hK6$KP/E7LmU,O9$A'W/HM&mq-28Q8f2o.DG>`jcX(UZjuQrlPQqYm,tP:>[>c!PQV4lh#&f'!#I\Z55`6rX/NTC#0K1nulY26\/6?D,KYi7<p&XI@:j0Zml)5%2&C,isY9qMY<6"6rm-HBUKG+3n*Y#M9rOQBVKCS,jg'BEj@iM&u_lmA?DrTC=<Z^K''1'^M-8(i1B0$1b,3&I)+#$6f498Net0:hg:@&@?6-A";i/SO84E.F4u)`HKqP%<@%cAU%t%6YHI*f4`brD7G9I@7AoMZ(IK/V+E:\,Ro3`P7F$kSZ6Pr7]]'<V__)%3kk-XI/3^N=5@'Y;i0;;AN)WEF)I;dK<\i`?OY9k<*1#,L/GtB('Mbim)9>70A=Sc^Cr"46&kok^i`U5jSD5P]-.,4bpYnlc9#M&lOCN_'hMFH\cVING=FMIjgXlTlH<<CCE[V'tQOW5SA*;X?:BLM<)Ke'BAQ+@R=*%P7I_\*,%5U<9bY38uE23G;GFPX;ZApg8.T\s(rWOSm&pYBo,',U+!uQZ]NgF*:D'M']DJS!Hjth]URb@pFV9nUA5V0L8r_HZmL)01ZkDj9XM6VjVOh3fpN_<#`?me91OJ[[h1P+R6on_n**Dp`jI?0k$SS[EmYCXA,R$MEQ"5q=n@SNimMrcJ89)7_kEDl;Tr1e)g,=5MbrRD$'[J<POWnpinXjcJ5hZa`c$iC$&G(<PsEBGQqUO`SSCUbg1PGX>>r=mBb\0jLZ2fXpI3uQ:lkS^:4BqnmX1uuid'>>pUGOMqh\P@"=i7)bCeq$/.DG;=EiX.Ofl).."Vb3SYQKjJbDVrgWk*[/T2oM\;;Y2FsU.:I8gh%6oQJuY>R-%.X*F,o0Nn^DBYei^W44uIr-7`A9\%<&E<#n.pWhTHa2/CIg,/rT#q.013*UDW:'Q"f6[Y@"55K5=@'&?5<`dTf"-2ibnEDB;gX!tp0[dolIiJ.mTC`9k,Xmjs\9^/$M`'=\lUYH`'Q]l6bs*hh!bf($ibndE$]N2uZ=g'8h9"17"@(!"sGCI=0Yakgr[P-LJ,M!L1QS_*j(Pg$J4l)R&-Q[Ci/u)S[eDb^V^^CRskG<jo(%,lnXA47p<cmUlJqt8*^d3muU3FU]WW*N#'HX;O?^lK$:3uiLj$O[c1V<Q"<<(3%hQ\%O$>g<?q%3<f?,T2ACQ;aeY=cq!8/&N9nk<j(BBcm`GCRjA7a/pP1g_hK:F\qBUIl!cme0GSf3nKr3"_kIr^aW;"dcuPrdZ&_E&a?Z$AD;"/15g65&q*,osSD=rRh)C;7^DaIiY!]VCHQ@SV"YnbMIHMg<tkUNM>]*0km^2n.;F$8s&r(3Ua1S_XNGkN@NiIoK#.%fmTKe!SnpmWp*Aa?0Y'[a1^s,h(sdu2*'"GX??,N5hODDF+UffS;Aq?QdXPYS%2WO>Nejq0@OcN+pioPo]V!1Z7%`G-ikjfauM,*k$>U/=*5#E8Y2LEaUoAS\Lu9]]7[;KCSg7/WMFt?!_\*E\(`a)-jh?j5ig0mk=9J.RoJa*!$@^n*PG%f+eON1,qU4Xnct\0!-.6"(9%;X!OkW&kMPB6FUgS($keq`K78k7o[J?Gdb0YL"O:%jUMP'2i1Y>tgj?Q[H0uD)>5[ueJR(#mGk=5#%P[n~>endstream
|
||||||
|
endobj
|
||||||
|
12 0 obj
|
||||||
|
<<
|
||||||
|
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2787
|
||||||
|
>>
|
||||||
|
stream
|
||||||
|
Gau0EBiEbW&H0nXclO`0$I%:gZT$P^A7HS3:-o:&-3dlkF"H:+f7a(qmHtjO,\)BR.[?76<mOG]n+AF)JAFHFceY?==R-3mJ+8&ITYDRfePJR3Aaj>^iH0W48JO*>Djk8L7U[NP/:r!PnQZ)H]til!K82doB$_)]EZ#&jHjUmA*%et"h!4tg++XnGi.c?0:kRHINtTI"_FF\M*$7HjKMJ=Bn5EXu-;qtA7&Y&@?A9O7-Mc\prupSj6$qSuQ)/2FTWY^p#VQ09M89+_2*tqF1p%iU)[[Z/SV""QC=:3Fr$$00d?`k@30?<C-&aYXXRWRT9k>bEds&po]8\S.WM;7fekirNQLjfY+uS\:5!0ET]PpojL]&$fh_L"-=JOiOJQF1Z`kR?9"j/s(rS0`$@kI!JE/?IuHCY>DE@"a0`UHjsZSjk<%;U[j"F>sS?CQ2n=X$s-]@2"khP'M4L'\Nh&)TQ$m'(nE]c>Us'ti!f-b,\Zn0q]q@$*^^ZDc"Dc\G>]N<TVZXsO;9d,S:k91dTq?DRf@'DPZTT>-"[]_hXC#/n9cT'9S.QVoU)I^DUa1JWVNfpaNlE"Hj.O\apoSL?>\Jp";VL[.;9'qI;?gL$^3\)=)S@:O_nga93=pHJimapG_7*AM/r?&Zm>2'<lrL,;4ro$ZaC$TsN;6aBp8ejI?1F,AR7+S3V1eE3D8FnD`R_6QNuQJ_6&$m0u["P[;Ns$6)Q!nJb=<<4e8L0IUCf8=GCABgcTQ?VfWUPFnQg^ZH`7%@F75ZY`25eQh1AHU#cG2l=ZV(fdll*37dOEnDR<l%'a*jm_FN1RroP_q8AQtprIXU/PIm]BloC"_,f^&c)uU,oF2LhM/N@J5fahiikH$H<^DAq2V,io)BnBJB[!;FCKgQpIo!7mkW)SRhG34-!m/N<I1*!plca-:*(\T6.%:VQ5(-a%e/D@<bIHJO;drfYqsJe)u!'+bRmuhUrk;0H.`5-4.b-H8co5iU?Lg08gaG.@QO_eP5-/*_p%8>r=rfP8/bu%'u4H(.,uqg[M&P=*<%SWhXqnAqQ+?//d3ZZ@JWa"4T[5)Eq=oghko7T;dDdPB\1l"tu/M2YiB]!C;J6I(QcakNjhP2:nm3XDbcG5=*=meDau2$Rl71FR\0dJeEE[oO751;.bqJ^oc#MK$5-`q3%[>i&M6j+`Xd"4E7o-Sc[p%._9p%+KHs(n`U^P1Lie#QZ_*X@$u/(n6TDu],eRjg;7ZfD*^[Wo>dmA_pg\e%]=4.m8>lg4ImOeB6I$@*\H!p/B7G9\sSlD4)MI^<0V^&$nG8?G$=,7K*5%G43>1O")2uLmJA,#rt8LoegCT;cEk,_<D?ahPC%MP`<8jO0mmIO*SInNe\ufa8@VhnE6.&Fii0lC:kW,.jI87qZmC`*`sDcd'81]KHkqa.doD8@e_gJ4:RCR=j3[I!Fr>7!o(EDVJ",p0-`da4Guj!mCOcJ,RF@JoS*Ei5XC!&OQ'`[b_\NFq>kX;uX%76<?8,o=_8E5>T,`=3K<mopIb("D]"o.E>+>9d,unR/&:DU)ZmDiKmqeVp=o09J!e+t1d(e=]21Xgf4J[s9&T:4BA0iOd$GF7,*Ee(8=jc&6R%E'^+0s)9<6*`OL_a?.Fsfjr(atg^'31*sMX0X-!uX=!?eb/37-E^$d1[^nKo3[36e9<_12PN<Z=ZDIS'@F4QRhf0JdO*qc1rlFif3qnLcDZGPbl[N;N=R_?i[VcHIrh\[A]1cK^'[3#2$s2AlSfI[HXMGHDOl)(1!J"`cTp:4$YZdNb50*hV!l4Pum?A8kW<H@PlQC9!#%7XeRLo0cr6CMnaZ=;Xj+!mnb%RJjR>*II&YQ(7B%,R-,0QQqQ9)@SQh(7N2o#Y`^)+$SV!L#i^7(FCpi+f<uKnQWm/CVN/Z=fockAjXZ(cfk#Ym6@&E%DIh$%G6n7*RhUS/k-J\4Mmjha"*368=hr?'Q01h>Ui9I.cm;VRkm\iQ9dRF?Ytfogb8'SMN69lG_Qc*mDroH8K&3).rG/UDrRA6_8Z\`(Xn-90D;N(o+DM_<'5-J`j]J0!F^3OCUI\.rrmp.,FA4*ZA'W*H?.)#O.&+_XXB(6T9Jg/Wl?X\La:!BdJn%1@FGlSN2a0M^20]AIj:6>M4`o<3`X"0]k^("T",o:7N&SUG1W@"MC9YU?<-ik?n!p2g?G34m-Yk?6_4rNqp](CI1LALsPW+_9TIgq^6QH\FY4HqIrSq_c<+<m?R=^@"A"t1]D\##Vr2rh>Q84u@Zu61']E$/[^^]&8=e4HC\t`iZE\T';p:?+^m=DrW<K^#n]"*^3.g>Ya0<sBHb:SXE`6[C]8^7(/]GJ&`Q5b?iKO;S9+,8<IN'\pGn.i0DLO@$\.1Hr$-8_k5)X9tlJjemg#p)NXPeT/e]q/3\rPclCP^u_KC6W`t:!OC/@23kElpXuXL1>pf^+"$/St;jDbX]>J9Qmbi?eB^F5<Ie7SJhENp(9c7CnT#FL<HNII@FM'`%N_(>iqqA+Fg][naF(-lu^9^Fk^FG27i]60njAa^'1h(Q;[l`"5W%&ro+Pt!c!Da0VH?^'B;3.3Lb`Q2f[Vl0CV5c#=$Xi1KrYrr>5+H#&p^H"(BP0>VGq-OKn%q+$WK(=e8s^o6$b8*DWeE;m4k3'M'uBhltk0ZiQY]RW;#kS*D51&Fc:qd5'cgUCMaiW*Neo@AT06=CKYb*Di3E?(5(oKNYM^h/,G-C;+Jql^tc9_;S<^eJC,K8h]\Lk_uGp>K]B#1\SY+8jG51OHD=k#7LP6Mshk`~>endstream
|
||||||
|
endobj
|
||||||
|
xref
|
||||||
|
0 13
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000073 00000 n
|
||||||
|
0000000114 00000 n
|
||||||
|
0000000221 00000 n
|
||||||
|
0000001154 00000 n
|
||||||
|
0000001358 00000 n
|
||||||
|
0000001562 00000 n
|
||||||
|
0000001766 00000 n
|
||||||
|
0000001834 00000 n
|
||||||
|
0000002117 00000 n
|
||||||
|
0000002188 00000 n
|
||||||
|
0000004935 00000 n
|
||||||
|
0000007923 00000 n
|
||||||
|
trailer
|
||||||
|
<<
|
||||||
|
/ID
|
||||||
|
[<730f7c5b502320dc9445f5e11cbf45a7><730f7c5b502320dc9445f5e11cbf45a7>]
|
||||||
|
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
|
||||||
|
|
||||||
|
/Info 8 0 R
|
||||||
|
/Root 7 0 R
|
||||||
|
/Size 13
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
10802
|
||||||
|
%%EOF
|
||||||
|
|
@ -3,21 +3,18 @@ import json
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
|
||||||
def get_fundamentals(ticker: str, curr_date: str = None, use_toon: bool = None) -> str:
|
def get_fundamentals(ticker: str, curr_date: str = None, use_toon: bool = True) -> str:
|
||||||
"""
|
"""
|
||||||
使用 Alpha Vantage 檢索給定股票代碼的綜合基本面數據。
|
使用 Alpha Vantage 檢索給定股票代碼的綜合基本面數據。
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
ticker (str): 公司的股票代碼
|
ticker (str): 公司的股票代碼
|
||||||
curr_date (str): 您正在交易的當前日期,格式為 yyyy-mm-dd (Alpha Vantage 未使用)
|
curr_date (str): 您正在交易的當前日期,格式為 yyyy-mm-dd (Alpha Vantage 未使用)
|
||||||
use_toon (bool): 是否使用toon格式(減少token消耗)。默認從環境變量讀取
|
use_toon (bool): 是否使用toon格式(減少token消耗)。默認為 True
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
str: 公司概覽數據,包括財務比率和關鍵指標(JSON或toon格式)
|
str: 公司概覽數據,包括財務比率和關鍵指標(JSON或toon格式)
|
||||||
"""
|
"""
|
||||||
# 從環境變量或參數決定是否使用toon
|
|
||||||
if use_toon is None:
|
|
||||||
use_toon = os.getenv("USE_TOON_FORMAT", "true").lower() == "true"
|
|
||||||
|
|
||||||
params = {
|
params = {
|
||||||
"symbol": ticker,
|
"symbol": ticker,
|
||||||
|
|
@ -88,7 +85,7 @@ def get_fundamentals(ticker: str, curr_date: str = None, use_toon: bool = None)
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
def get_balance_sheet(ticker: str, freq: str = "quarterly", curr_date: str = None, use_toon: bool = None) -> str:
|
def get_balance_sheet(ticker: str, freq: str = "quarterly", curr_date: str = None, use_toon: bool = True) -> str:
|
||||||
"""
|
"""
|
||||||
使用 Alpha Vantage 檢索給定股票代碼的資產負債表數據。
|
使用 Alpha Vantage 檢索給定股票代碼的資產負債表數據。
|
||||||
|
|
||||||
|
|
@ -96,14 +93,11 @@ def get_balance_sheet(ticker: str, freq: str = "quarterly", curr_date: str = Non
|
||||||
ticker (str): 公司的股票代碼
|
ticker (str): 公司的股票代碼
|
||||||
freq (str): 報告頻率:年度/季度 (預設為季度) - Alpha Vantage 未使用
|
freq (str): 報告頻率:年度/季度 (預設為季度) - Alpha Vantage 未使用
|
||||||
curr_date (str): 您正在交易的當前日期,格式為 yyyy-mm-dd (Alpha Vantage 未使用)
|
curr_date (str): 您正在交易的當前日期,格式為 yyyy-mm-dd (Alpha Vantage 未使用)
|
||||||
use_toon (bool): 是否使用toon格式(減少token消耗)。默認從環境變量讀取
|
use_toon (bool): 是否使用toon格式。默認為 True
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
str: 具有標準化欄位的資產負債表數據(JSON或toon格式)
|
str: 具有標準化欄位的資產負債表數據(JSON或toon格式)
|
||||||
"""
|
"""
|
||||||
# 從環境變量或參數決定是否使用toon
|
|
||||||
if use_toon is None:
|
|
||||||
use_toon = os.getenv("USE_TOON_FORMAT", "true").lower() == "true"
|
|
||||||
|
|
||||||
params = {
|
params = {
|
||||||
"symbol": ticker,
|
"symbol": ticker,
|
||||||
|
|
@ -141,7 +135,7 @@ def get_balance_sheet(ticker: str, freq: str = "quarterly", curr_date: str = Non
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
def get_cashflow(ticker: str, freq: str = "quarterly", curr_date: str = None, use_toon: bool = None) -> str:
|
def get_cashflow(ticker: str, freq: str = "quarterly", curr_date: str = None, use_toon: bool = True) -> str:
|
||||||
"""
|
"""
|
||||||
使用 Alpha Vantage 檢索給定股票代碼的現金流量表數據。
|
使用 Alpha Vantage 檢索給定股票代碼的現金流量表數據。
|
||||||
|
|
||||||
|
|
@ -149,14 +143,11 @@ def get_cashflow(ticker: str, freq: str = "quarterly", curr_date: str = None, us
|
||||||
ticker (str): 公司的股票代碼
|
ticker (str): 公司的股票代碼
|
||||||
freq (str): 報告頻率:年度/季度 (預設為季度) - Alpha Vantage 未使用
|
freq (str): 報告頻率:年度/季度 (預設為季度) - Alpha Vantage 未使用
|
||||||
curr_date (str): 您正在交易的當前日期,格式為 yyyy-mm-dd (Alpha Vantage 未使用)
|
curr_date (str): 您正在交易的當前日期,格式為 yyyy-mm-dd (Alpha Vantage 未使用)
|
||||||
use_toon (bool): 是否使用toon格式(減少token消耗)。默認從環境變量讀取
|
use_toon (bool): 是否使用toon格式。默認為 True
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
str: 具有標準化欄位的現金流量表數據(JSON或toon格式)
|
str: 具有標準化欄位的現金流量表數據(JSON或toon格式)
|
||||||
"""
|
"""
|
||||||
# 從環境變量或參數決定是否使用toon
|
|
||||||
if use_toon is None:
|
|
||||||
use_toon = os.getenv("USE_TOON_FORMAT", "true").lower() == "true"
|
|
||||||
|
|
||||||
params = {
|
params = {
|
||||||
"symbol": ticker,
|
"symbol": ticker,
|
||||||
|
|
@ -194,7 +185,7 @@ def get_cashflow(ticker: str, freq: str = "quarterly", curr_date: str = None, us
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
def get_income_statement(ticker: str, freq: str = "quarterly", curr_date: str = None, use_toon: bool = None) -> str:
|
def get_income_statement(ticker: str, freq: str = "quarterly", curr_date: str = None, use_toon: bool = True) -> str:
|
||||||
"""
|
"""
|
||||||
使用 Alpha Vantage 檢索給定股票代碼的損益表數據。
|
使用 Alpha Vantage 檢索給定股票代碼的損益表數據。
|
||||||
|
|
||||||
|
|
@ -202,14 +193,11 @@ def get_income_statement(ticker: str, freq: str = "quarterly", curr_date: str =
|
||||||
ticker (str): 公司的股票代碼
|
ticker (str): 公司的股票代碼
|
||||||
freq (str): 報告頻率:年度/季度 (預設為季度) - Alpha Vantage 未使用
|
freq (str): 報告頻率:年度/季度 (預設為季度) - Alpha Vantage 未使用
|
||||||
curr_date (str): 您正在交易的當前日期,格式為 yyyy-mm-dd (Alpha Vantage 未使用)
|
curr_date (str): 您正在交易的當前日期,格式為 yyyy-mm-dd (Alpha Vantage 未使用)
|
||||||
use_toon (bool): 是否使用toon格式(減少token消耗)。默認從環境變量讀取
|
use_toon (bool): 是否使用toon格式。默認為 True
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
str: 具有標準化欄位的損益表數據(JSON或toon格式)
|
str: 具有標準化欄位的損益表數據(JSON或toon格式)
|
||||||
"""
|
"""
|
||||||
# 從環境變量或參數決定是否使用toon
|
|
||||||
if use_toon is None:
|
|
||||||
use_toon = os.getenv("USE_TOON_FORMAT", "true").lower() == "true"
|
|
||||||
|
|
||||||
params = {
|
params = {
|
||||||
"symbol": ticker,
|
"symbol": ticker,
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import json
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
|
||||||
def get_news(ticker, start_date, end_date, use_toon: bool = None) -> dict[str, str] | str:
|
def get_news(ticker, start_date, end_date, use_toon: bool = True) -> dict[str, str] | str:
|
||||||
"""
|
"""
|
||||||
返回全球主要新聞機構的即時和歷史市場新聞與情緒數據。
|
返回全球主要新聞機構的即時和歷史市場新聞與情緒數據。
|
||||||
|
|
||||||
|
|
@ -14,14 +14,11 @@ def get_news(ticker, start_date, end_date, use_toon: bool = None) -> dict[str, s
|
||||||
ticker: 新聞文章的股票代碼。
|
ticker: 新聞文章的股票代碼。
|
||||||
start_date: 新聞搜索的開始日期。
|
start_date: 新聞搜索的開始日期。
|
||||||
end_date: 新聞搜索的結束日期。
|
end_date: 新聞搜索的結束日期。
|
||||||
use_toon (bool): 是否使用toon格式(減少token消耗)。默認從環境變量讀取
|
use_toon (bool): 是否使用toon格式。默認為 True
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
包含新聞情緒數據的字典或 JSON/Toon 字串。
|
包含新聞情緒數據的字典或 JSON/Toon 字串。
|
||||||
"""
|
"""
|
||||||
# 從環境變量或參數決定是否使用toon
|
|
||||||
if use_toon is None:
|
|
||||||
use_toon = os.getenv("USE_TOON_FORMAT", "true").lower() == "true"
|
|
||||||
|
|
||||||
params = {
|
params = {
|
||||||
"tickers": ticker,
|
"tickers": ticker,
|
||||||
|
|
@ -97,7 +94,7 @@ def get_news(ticker, start_date, end_date, use_toon: bool = None) -> dict[str, s
|
||||||
print(f"警告:無法總結新聞數據:{e}")
|
print(f"警告:無法總結新聞數據:{e}")
|
||||||
return response
|
return response
|
||||||
|
|
||||||
def get_insider_transactions(symbol: str) -> dict[str, str] | str:
|
def get_insider_transactions(symbol: str, use_toon: bool = True) -> dict[str, str] | str:
|
||||||
"""
|
"""
|
||||||
返回主要利益相關者的最新和歷史內部交易。
|
返回主要利益相關者的最新和歷史內部交易。
|
||||||
|
|
||||||
|
|
@ -105,9 +102,10 @@ def get_insider_transactions(symbol: str) -> dict[str, str] | str:
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
symbol: 股票代碼。範例:"IBM"。
|
symbol: 股票代碼。範例:"IBM"。
|
||||||
|
use_toon (bool): 是否使用toon格式。默認為 True
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
包含內部交易數據的字典或 JSON 字串。
|
包含內部交易數據的字典或 JSON/Toon 字串。
|
||||||
"""
|
"""
|
||||||
|
|
||||||
params = {
|
params = {
|
||||||
|
|
@ -125,7 +123,16 @@ def get_insider_transactions(symbol: str) -> dict[str, str] | str:
|
||||||
if isinstance(data["data"], list):
|
if isinstance(data["data"], list):
|
||||||
data["data"] = data["data"][:15]
|
data["data"] = data["data"][:15]
|
||||||
|
|
||||||
return json.dumps(data, ensure_ascii=False, indent=2)
|
# 使用toon格式或JSON格式返回
|
||||||
|
if use_toon:
|
||||||
|
try:
|
||||||
|
from tradingagents.utils.toon_converter import convert_json_to_toon
|
||||||
|
return convert_json_to_toon(data)
|
||||||
|
except Exception as e:
|
||||||
|
print(f"警告:toon轉換失敗:{e},使用JSON格式")
|
||||||
|
return json.dumps(data, ensure_ascii=False, indent=2)
|
||||||
|
else:
|
||||||
|
return json.dumps(data, ensure_ascii=False, indent=2)
|
||||||
|
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
此檔案為向後相容的別名模組。
|
||||||
|
|
||||||
|
正確的模組名稱為 finmind(不是 findmind)。
|
||||||
|
請改用:from tradingagents.dataflows import finmind
|
||||||
|
"""
|
||||||
|
|
||||||
|
# 重新匯出所有 finmind 模組的內容
|
||||||
|
from .finmind import *
|
||||||
|
|
||||||
|
# 發出棄用警告
|
||||||
|
import warnings
|
||||||
|
warnings.warn(
|
||||||
|
"模組名稱 'findmind' 已棄用,請改用 'finmind'。"
|
||||||
|
"例如:from tradingagents.dataflows import finmind",
|
||||||
|
DeprecationWarning,
|
||||||
|
stacklevel=2
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,214 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
FinMind 台灣股市資料整合模組
|
||||||
|
|
||||||
|
整合所有 FinMind API 功能的統一入口點。
|
||||||
|
|
||||||
|
API 文檔:
|
||||||
|
- 基本面:https://finmind.github.io/tutor/TaiwanMarket/Fundamental/
|
||||||
|
- 技術面:https://finmind.github.io/tutor/TaiwanMarket/Technical/
|
||||||
|
- 籌碼面:https://finmind.github.io/tutor/TaiwanMarket/Chip/
|
||||||
|
|
||||||
|
使用方式:
|
||||||
|
from tradingagents.dataflows import finmind
|
||||||
|
|
||||||
|
# 獲取股價
|
||||||
|
stock_data = finmind.get_stock("2330", "2024-01-01", "2024-12-01")
|
||||||
|
|
||||||
|
# 獲取基本面
|
||||||
|
fundamentals = finmind.get_fundamentals("2330")
|
||||||
|
|
||||||
|
# 獲取技術指標
|
||||||
|
indicator = finmind.get_indicator("2330", "per", "2024-12-01", 30)
|
||||||
|
|
||||||
|
環境變數設定:
|
||||||
|
export FINMIND_API_TOKEN='your_token_here'
|
||||||
|
|
||||||
|
可在 https://finmindtrade.com/ 註冊獲取 Token
|
||||||
|
"""
|
||||||
|
|
||||||
|
# 從各子模組匯入函式
|
||||||
|
from .finmind_common import (
|
||||||
|
# 例外類別
|
||||||
|
FinMindError,
|
||||||
|
FinMindRateLimitError,
|
||||||
|
FinMindAuthenticationError,
|
||||||
|
FinMindDataNotFoundError,
|
||||||
|
# 工具函式
|
||||||
|
get_api_token,
|
||||||
|
format_date,
|
||||||
|
get_default_start_date,
|
||||||
|
normalize_stock_id,
|
||||||
|
validate_taiwan_stock_id,
|
||||||
|
# 市場類型判斷
|
||||||
|
get_stock_market_type,
|
||||||
|
get_yfinance_ticker,
|
||||||
|
is_taiwan_stock,
|
||||||
|
# 內部函式(供進階使用)
|
||||||
|
_make_api_request,
|
||||||
|
_filter_by_date_range,
|
||||||
|
# 資料集定義
|
||||||
|
FUNDAMENTAL_DATASETS,
|
||||||
|
TECHNICAL_DATASETS,
|
||||||
|
CHIP_DATASETS,
|
||||||
|
RESTRICTED_DATASETS,
|
||||||
|
)
|
||||||
|
|
||||||
|
from .finmind_stock import (
|
||||||
|
get_stock,
|
||||||
|
get_stock_info,
|
||||||
|
get_stock_per,
|
||||||
|
get_day_trading,
|
||||||
|
)
|
||||||
|
|
||||||
|
from .finmind_fundamentals import (
|
||||||
|
get_fundamentals,
|
||||||
|
get_income_statement,
|
||||||
|
get_balance_sheet,
|
||||||
|
get_cashflow,
|
||||||
|
get_month_revenue,
|
||||||
|
get_dividend,
|
||||||
|
get_financial_statements,
|
||||||
|
)
|
||||||
|
|
||||||
|
from .finmind_indicator import (
|
||||||
|
get_indicator,
|
||||||
|
get_margin_data,
|
||||||
|
get_institutional_data,
|
||||||
|
INDICATOR_DESCRIPTIONS,
|
||||||
|
)
|
||||||
|
|
||||||
|
from .finmind_news import (
|
||||||
|
get_news,
|
||||||
|
get_global_news,
|
||||||
|
get_insider_sentiment,
|
||||||
|
get_insider_transactions,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# 版本資訊
|
||||||
|
__version__ = "1.0.0"
|
||||||
|
__author__ = "TradingAgentsX"
|
||||||
|
|
||||||
|
|
||||||
|
# 便利函式:快速獲取股票完整資訊
|
||||||
|
def get_stock_overview(
|
||||||
|
ticker: str,
|
||||||
|
curr_date: str = None
|
||||||
|
) -> dict:
|
||||||
|
"""
|
||||||
|
獲取股票的完整概覽,包含股價、基本面和籌碼面資訊。
|
||||||
|
|
||||||
|
Args:
|
||||||
|
ticker: 股票代碼(例如 "2330")
|
||||||
|
curr_date: 當前日期(預設為今天)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
dict: 包含各類資訊的字典
|
||||||
|
"""
|
||||||
|
import json
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
|
if not curr_date:
|
||||||
|
curr_date = datetime.now().strftime("%Y-%m-%d")
|
||||||
|
|
||||||
|
start_date = (datetime.strptime(curr_date, "%Y-%m-%d") - timedelta(days=30)).strftime("%Y-%m-%d")
|
||||||
|
|
||||||
|
overview = {
|
||||||
|
"ticker": ticker,
|
||||||
|
"date": curr_date,
|
||||||
|
"stock_price": None,
|
||||||
|
"fundamentals": None,
|
||||||
|
"per_pbr": None,
|
||||||
|
"margin": None,
|
||||||
|
"institutional": None,
|
||||||
|
}
|
||||||
|
|
||||||
|
try:
|
||||||
|
# 股價
|
||||||
|
stock_data = get_stock(ticker, start_date, curr_date)
|
||||||
|
if stock_data and "error" not in stock_data.lower():
|
||||||
|
overview["stock_price"] = "已獲取"
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
# 基本面
|
||||||
|
fundamentals_data = get_fundamentals(ticker, curr_date)
|
||||||
|
if fundamentals_data:
|
||||||
|
overview["fundamentals"] = json.loads(fundamentals_data) if isinstance(fundamentals_data, str) else fundamentals_data
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
# PER/PBR
|
||||||
|
per_data = get_stock_per(ticker, start_date, curr_date)
|
||||||
|
if per_data and "error" not in per_data.lower():
|
||||||
|
overview["per_pbr"] = "已獲取"
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
# 融資融券
|
||||||
|
margin_data = get_margin_data(ticker, start_date, curr_date)
|
||||||
|
if margin_data and "error" not in margin_data.lower():
|
||||||
|
overview["margin"] = "已獲取"
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
# 法人買賣超
|
||||||
|
inst_data = get_institutional_data(ticker, start_date, curr_date)
|
||||||
|
if inst_data and "error" not in inst_data.lower():
|
||||||
|
overview["institutional"] = "已獲取"
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
return overview
|
||||||
|
|
||||||
|
|
||||||
|
# 模組說明
|
||||||
|
__all__ = [
|
||||||
|
# 例外類別
|
||||||
|
"FinMindError",
|
||||||
|
"FinMindRateLimitError",
|
||||||
|
"FinMindAuthenticationError",
|
||||||
|
"FinMindDataNotFoundError",
|
||||||
|
|
||||||
|
# 股價相關
|
||||||
|
"get_stock",
|
||||||
|
"get_stock_info",
|
||||||
|
"get_stock_per",
|
||||||
|
"get_day_trading",
|
||||||
|
|
||||||
|
# 基本面相關
|
||||||
|
"get_fundamentals",
|
||||||
|
"get_income_statement",
|
||||||
|
"get_balance_sheet",
|
||||||
|
"get_cashflow",
|
||||||
|
"get_month_revenue",
|
||||||
|
"get_dividend",
|
||||||
|
"get_financial_statements",
|
||||||
|
|
||||||
|
# 技術指標/籌碼面
|
||||||
|
"get_indicator",
|
||||||
|
"get_margin_data",
|
||||||
|
"get_institutional_data",
|
||||||
|
|
||||||
|
# 新聞相關
|
||||||
|
"get_news",
|
||||||
|
"get_global_news",
|
||||||
|
"get_insider_sentiment",
|
||||||
|
"get_insider_transactions",
|
||||||
|
|
||||||
|
# 工具函式
|
||||||
|
"get_stock_overview",
|
||||||
|
"format_date",
|
||||||
|
"get_default_start_date",
|
||||||
|
"normalize_stock_id",
|
||||||
|
"validate_taiwan_stock_id",
|
||||||
|
# 市場類型判斷
|
||||||
|
"get_stock_market_type",
|
||||||
|
"get_yfinance_ticker",
|
||||||
|
"is_taiwan_stock",
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,585 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
FinMind API 共用工具模組
|
||||||
|
用於與 FinMind 台灣股市資料 API 進行互動
|
||||||
|
|
||||||
|
API 文檔:https://finmind.github.io/
|
||||||
|
|
||||||
|
注意:本模組僅使用公開可用的 API 端點,
|
||||||
|
不使用需要 backer/sponsor 會員資格的功能。
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import requests
|
||||||
|
import json
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
from typing import Optional, Dict, Any, Union
|
||||||
|
from io import StringIO
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# 常數定義
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
API_BASE_URL = "https://api.finmindtrade.com/api/v4/data"
|
||||||
|
|
||||||
|
# 可用的公開資料集(不需要 backer/sponsor 會員)
|
||||||
|
# 基本面
|
||||||
|
FUNDAMENTAL_DATASETS = {
|
||||||
|
"financial_statements": "TaiwanStockFinancialStatements", # 綜合損益表
|
||||||
|
"balance_sheet": "TaiwanStockBalanceSheet", # 資產負債表
|
||||||
|
"cashflow": "TaiwanStockCashFlowsStatement", # 現金流量表
|
||||||
|
"dividend": "TaiwanStockDividend", # 股利政策表
|
||||||
|
"dividend_result": "TaiwanStockDividendResult", # 除權除息結果表
|
||||||
|
"month_revenue": "TaiwanStockMonthRevenue", # 月營收表
|
||||||
|
"capital_reduction": "TaiwanStockCapitalReductionReferencePrice", # 減資恢復買賣參考價格
|
||||||
|
"delisting": "TaiwanStockDelisting", # 台灣股票下市櫃表
|
||||||
|
"split_price": "TaiwanStockSplitPrice", # 台股分割後參考價
|
||||||
|
"par_value_change": "TaiwanStockParValueChange", # 變更面額恢復買賣參考價格
|
||||||
|
}
|
||||||
|
|
||||||
|
# 技術面
|
||||||
|
TECHNICAL_DATASETS = {
|
||||||
|
"stock_info": "TaiwanStockInfo", # 台股總覽
|
||||||
|
"stock_info_warrant": "TaiwanStockInfoWithWarrant", # 台股總覽(含權證)
|
||||||
|
"trading_date": "TaiwanStockTradingDate", # 台股交易日
|
||||||
|
"stock_price": "TaiwanStockPrice", # 股價日成交資訊
|
||||||
|
"stock_per": "TaiwanStockPER", # PER、PBR 資料
|
||||||
|
"order_book_trade": "TaiwanStockStatisticsOfOrderBookAndTrade", # 每5秒委託成交統計
|
||||||
|
"indicators_5sec": "TaiwanVariousIndicators5Seconds", # 台股加權指數
|
||||||
|
"day_trading": "TaiwanStockDayTrading", # 當日沖銷交易
|
||||||
|
"total_return_index": "TaiwanStockTotalReturnIndex", # 加權、櫃買報酬指數
|
||||||
|
}
|
||||||
|
|
||||||
|
# 籌碼面
|
||||||
|
CHIP_DATASETS = {
|
||||||
|
"margin_purchase": "TaiwanStockMarginPurchaseShortSale", # 個股融資融劵表
|
||||||
|
"margin_total": "TaiwanStockTotalMarginPurchaseShortSale", # 整體市場融資融劵表
|
||||||
|
"institutional": "TaiwanStockInstitutionalInvestorsBuySell", # 法人買賣表
|
||||||
|
"institutional_total": "TaiwanStockTotalInstitutionalInvestors", # 市場三大法人買賣表
|
||||||
|
"shareholding": "TaiwanStockShareholding", # 外資持股表
|
||||||
|
"securities_lending": "TaiwanStockSecuritiesLending", # 借券成交明細
|
||||||
|
"short_sale_suspension": "TaiwanStockMarginShortSaleSuspension", # 暫停融券賣出表
|
||||||
|
"short_sale_balances": "TaiwanDailyShortSaleBalances", # 信用額度總量管制餘額表
|
||||||
|
"securities_trader_info": "TaiwanSecuritiesTraderInfo", # 證券商資訊表
|
||||||
|
}
|
||||||
|
|
||||||
|
# 需要 backer/sponsor 會員的資料集(不使用)
|
||||||
|
RESTRICTED_DATASETS = [
|
||||||
|
"TaiwanStockMarketValue", # 台灣股價市值表
|
||||||
|
"TaiwanStockMarketValueWeight", # 台股市值比重表
|
||||||
|
"TaiwanStockWeekPrice", # 台股週 K 資料表
|
||||||
|
"TaiwanStockMonthPrice", # 台股月 K 資料表
|
||||||
|
"TaiwanStockPriceAdj", # 台灣還原股價資料表
|
||||||
|
"TaiwanStockPriceTick", # 台灣股價歷史逐筆資料表
|
||||||
|
"TaiwanStock10Year", # 台灣個股十年線資料表
|
||||||
|
"TaiwanStockKBar", # 台股分 K 資料表
|
||||||
|
"TaiwanStockEvery5SecondsIndex", # 每 5 秒指數統計
|
||||||
|
"TaiwanStockHoldingSharesPer", # 股權持股分級表
|
||||||
|
"TaiwanStockTradingDailyReport", # 台股分點資料表
|
||||||
|
"TaiwanStockWarrantTradingDailyReport", # 台股權證分點資料表
|
||||||
|
"TaiwanstockGovernmentBankBuySell", # 台股八大行庫賣賣表
|
||||||
|
"TaiwanTotalExchangeMarginMaintenance", # 台灣大盤融資維持率
|
||||||
|
"TaiwanStockTradingDailyReportSecIdAgg",# 當日卷商分點統計表
|
||||||
|
"TaiwanStockDispositionSecuritiesPeriod",# 公布處置有價證券表
|
||||||
|
"TaiwanStockInfoWithWarrantSummary", # 台股權證標的對照表
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# 自定義例外
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
class FinMindError(Exception):
|
||||||
|
"""FinMind API 通用錯誤"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class FinMindRateLimitError(FinMindError):
|
||||||
|
"""當超過 FinMind API 速率限制時引發的例外"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class FinMindAuthenticationError(FinMindError):
|
||||||
|
"""當 API Token 無效或缺失時引發的例外"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class FinMindDataNotFoundError(FinMindError):
|
||||||
|
"""當查詢的資料不存在時引發的例外"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# API Token 管理
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
def get_api_token() -> str:
|
||||||
|
"""
|
||||||
|
從環境變數中檢索 FinMind 的 API Token。
|
||||||
|
|
||||||
|
FinMind 使用 Bearer Token 進行身份驗證。
|
||||||
|
您可以在 https://finmindtrade.com/ 註冊後獲取 Token。
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: API Token
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
FinMindAuthenticationError: 當環境變數未設定時
|
||||||
|
"""
|
||||||
|
token = os.getenv("FINMIND_API_TOKEN")
|
||||||
|
if not token:
|
||||||
|
# 也支援舊的環境變數名稱
|
||||||
|
token = os.getenv("FINMIND_API_KEY")
|
||||||
|
|
||||||
|
if not token:
|
||||||
|
raise FinMindAuthenticationError(
|
||||||
|
"未設定 FINMIND_API_TOKEN 環境變數。"
|
||||||
|
"請在 https://finmindtrade.com/ 註冊並獲取 Token,"
|
||||||
|
"然後設定環境變數:export FINMIND_API_TOKEN='your_token'"
|
||||||
|
)
|
||||||
|
return token
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# 日期格式處理
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
def format_date(date_input: Union[str, datetime]) -> str:
|
||||||
|
"""
|
||||||
|
將各種日期格式轉換為 FinMind API 所需的 YYYY-MM-DD 格式。
|
||||||
|
|
||||||
|
Args:
|
||||||
|
date_input: 日期字串或 datetime 物件
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: 格式化後的日期字串 (YYYY-MM-DD)
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
ValueError: 當日期格式不支援時
|
||||||
|
"""
|
||||||
|
if isinstance(date_input, datetime):
|
||||||
|
return date_input.strftime("%Y-%m-%d")
|
||||||
|
|
||||||
|
if isinstance(date_input, str):
|
||||||
|
# 如果已經是正確格式,直接返回
|
||||||
|
if len(date_input) == 10 and date_input[4] == '-' and date_input[7] == '-':
|
||||||
|
return date_input
|
||||||
|
|
||||||
|
# 嘗試解析常見的日期格式
|
||||||
|
formats_to_try = [
|
||||||
|
"%Y-%m-%d",
|
||||||
|
"%Y/%m/%d",
|
||||||
|
"%Y%m%d",
|
||||||
|
"%Y-%m-%d %H:%M:%S",
|
||||||
|
"%Y-%m-%d %H:%M",
|
||||||
|
]
|
||||||
|
|
||||||
|
for fmt in formats_to_try:
|
||||||
|
try:
|
||||||
|
dt = datetime.strptime(date_input, fmt)
|
||||||
|
return dt.strftime("%Y-%m-%d")
|
||||||
|
except ValueError:
|
||||||
|
continue
|
||||||
|
|
||||||
|
raise ValueError(f"不支援的日期格式:{date_input}")
|
||||||
|
|
||||||
|
raise ValueError(f"日期必須是字串或 datetime 物件,但得到的是 {type(date_input)}")
|
||||||
|
|
||||||
|
|
||||||
|
def get_default_start_date(years_back: int = 3) -> str:
|
||||||
|
"""
|
||||||
|
獲取預設的開始日期(預設為往前推算指定年數)。
|
||||||
|
|
||||||
|
Args:
|
||||||
|
years_back: 往前推算的年數
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: 格式化的開始日期
|
||||||
|
"""
|
||||||
|
start_date = datetime.now() - timedelta(days=years_back * 365)
|
||||||
|
return format_date(start_date)
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# 輸出格式化(toon / JSON)
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
def _convert_to_serializable(obj):
|
||||||
|
"""
|
||||||
|
將 numpy/pandas 資料類型轉換為 Python 原生類型,
|
||||||
|
以便 JSON 序列化。
|
||||||
|
"""
|
||||||
|
import numpy as np
|
||||||
|
import pandas as pd
|
||||||
|
|
||||||
|
if isinstance(obj, dict):
|
||||||
|
return {k: _convert_to_serializable(v) for k, v in obj.items()}
|
||||||
|
elif isinstance(obj, list):
|
||||||
|
return [_convert_to_serializable(item) for item in obj]
|
||||||
|
elif hasattr(obj, 'item'): # numpy scalar types
|
||||||
|
return obj.item()
|
||||||
|
elif hasattr(obj, 'tolist'): # numpy array
|
||||||
|
return obj.tolist()
|
||||||
|
elif pd.isna(obj):
|
||||||
|
return None
|
||||||
|
else:
|
||||||
|
return obj
|
||||||
|
|
||||||
|
|
||||||
|
def format_output(data: dict, use_toon: bool = True) -> str:
|
||||||
|
"""
|
||||||
|
格式化輸出資料,強制使用 toon 格式以減少 token 消耗。
|
||||||
|
|
||||||
|
toon 格式可以大幅減少 token 消耗(通常節省 40-60%)。
|
||||||
|
|
||||||
|
Args:
|
||||||
|
data: 要輸出的資料字典
|
||||||
|
use_toon: 是否使用 toon 格式。預設為 True(強制使用 toon)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: 格式化後的字串(JSON 或 toon 格式)
|
||||||
|
"""
|
||||||
|
# 先確保資料可序列化
|
||||||
|
serializable_data = _convert_to_serializable(data)
|
||||||
|
|
||||||
|
if use_toon:
|
||||||
|
try:
|
||||||
|
from tradingagents.utils.toon_converter import convert_json_to_toon
|
||||||
|
return convert_json_to_toon(serializable_data)
|
||||||
|
except Exception as e:
|
||||||
|
print(f"警告:toon 轉換失敗:{e},使用 JSON 格式")
|
||||||
|
return json.dumps(serializable_data, ensure_ascii=False, indent=2)
|
||||||
|
else:
|
||||||
|
return json.dumps(serializable_data, ensure_ascii=False, indent=2)
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# API 請求處理
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
def _make_api_request(
|
||||||
|
dataset: str,
|
||||||
|
data_id: Optional[str] = None,
|
||||||
|
start_date: Optional[str] = None,
|
||||||
|
end_date: Optional[str] = None,
|
||||||
|
**extra_params
|
||||||
|
) -> Dict[str, Any]:
|
||||||
|
"""
|
||||||
|
發送 API 請求並處理回應的輔助函式。
|
||||||
|
|
||||||
|
根據 FinMind 文檔,API 請求格式為:
|
||||||
|
GET https://api.finmindtrade.com/api/v4/data
|
||||||
|
|
||||||
|
必要參數:
|
||||||
|
- dataset: 資料集名稱
|
||||||
|
|
||||||
|
選填參數:
|
||||||
|
- data_id: 股票代碼(例如 "2330")
|
||||||
|
- start_date: 開始日期
|
||||||
|
- end_date: 結束日期
|
||||||
|
|
||||||
|
Args:
|
||||||
|
dataset: FinMind 資料集名稱
|
||||||
|
data_id: 股票代碼(例如 "2330")
|
||||||
|
start_date: 開始日期 (YYYY-MM-DD)
|
||||||
|
end_date: 結束日期 (YYYY-MM-DD)
|
||||||
|
**extra_params: 額外的查詢參數
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
dict: API 回應的 JSON 資料
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
FinMindRateLimitError: 當超過 API 速率限制時
|
||||||
|
FinMindAuthenticationError: 當 Token 無效時
|
||||||
|
FinMindDataNotFoundError: 當資料不存在時
|
||||||
|
FinMindError: 其他 API 錯誤
|
||||||
|
"""
|
||||||
|
# 獲取 Token
|
||||||
|
token = get_api_token()
|
||||||
|
|
||||||
|
# 建立請求標頭
|
||||||
|
headers = {
|
||||||
|
"Authorization": f"Bearer {token}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 建立請求參數
|
||||||
|
params = {
|
||||||
|
"dataset": dataset,
|
||||||
|
}
|
||||||
|
|
||||||
|
# 添加股票代碼(如果提供)
|
||||||
|
if data_id:
|
||||||
|
params["data_id"] = normalize_stock_id(data_id)
|
||||||
|
|
||||||
|
# 添加開始日期(如果提供)
|
||||||
|
if start_date:
|
||||||
|
params["start_date"] = format_date(start_date)
|
||||||
|
|
||||||
|
# 添加結束日期(如果提供)
|
||||||
|
if end_date:
|
||||||
|
params["end_date"] = format_date(end_date)
|
||||||
|
|
||||||
|
# 添加額外參數
|
||||||
|
params.update(extra_params)
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = requests.get(
|
||||||
|
API_BASE_URL,
|
||||||
|
headers=headers,
|
||||||
|
params=params,
|
||||||
|
timeout=30
|
||||||
|
)
|
||||||
|
response.raise_for_status()
|
||||||
|
|
||||||
|
# 解析 JSON 回應
|
||||||
|
data = response.json()
|
||||||
|
|
||||||
|
# 檢查 API 層級的錯誤
|
||||||
|
if "msg" in data:
|
||||||
|
msg = data["msg"].lower()
|
||||||
|
|
||||||
|
# 速率限制錯誤
|
||||||
|
if "rate limit" in msg or "too many requests" in msg:
|
||||||
|
raise FinMindRateLimitError(f"超過 FinMind API 速率限制:{data['msg']}")
|
||||||
|
|
||||||
|
# 認證錯誤
|
||||||
|
if "token" in msg or "authentication" in msg or "unauthorized" in msg:
|
||||||
|
raise FinMindAuthenticationError(f"FinMind API 認證失敗:{data['msg']}")
|
||||||
|
|
||||||
|
# 資料不存在
|
||||||
|
if "no data" in msg or "not found" in msg:
|
||||||
|
raise FinMindDataNotFoundError(f"查無資料:{data['msg']}")
|
||||||
|
|
||||||
|
# 其他錯誤
|
||||||
|
if data.get("status") != 200:
|
||||||
|
raise FinMindError(f"FinMind API 錯誤:{data['msg']}")
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
||||||
|
except requests.exceptions.Timeout:
|
||||||
|
raise FinMindError("FinMind API 請求超時")
|
||||||
|
except requests.exceptions.RequestException as e:
|
||||||
|
raise FinMindError(f"FinMind API 請求失敗:{str(e)}")
|
||||||
|
except json.JSONDecodeError:
|
||||||
|
raise FinMindError("無法解析 FinMind API 回應")
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# 資料驗證和處理工具
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
def validate_taiwan_stock_id(stock_id: str) -> bool:
|
||||||
|
"""
|
||||||
|
驗證台灣股票代碼格式。
|
||||||
|
|
||||||
|
台灣股票代碼通常為 4-6 位數字,
|
||||||
|
ETF 或特殊商品可能包含字母。
|
||||||
|
|
||||||
|
Args:
|
||||||
|
stock_id: 股票代碼
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
bool: 是否為有效的股票代碼格式
|
||||||
|
"""
|
||||||
|
if not stock_id:
|
||||||
|
return False
|
||||||
|
|
||||||
|
# 移除空白
|
||||||
|
stock_id = stock_id.strip()
|
||||||
|
|
||||||
|
# 基本長度檢查
|
||||||
|
if len(stock_id) < 4 or len(stock_id) > 6:
|
||||||
|
return False
|
||||||
|
|
||||||
|
# 大多數台股代碼為純數字
|
||||||
|
if stock_id.isdigit():
|
||||||
|
return True
|
||||||
|
|
||||||
|
# 某些 ETF 或特殊商品可能包含字母(如 00878)
|
||||||
|
if stock_id[0].isdigit():
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def normalize_stock_id(stock_id: str) -> str:
|
||||||
|
"""
|
||||||
|
標準化股票代碼格式。
|
||||||
|
|
||||||
|
Args:
|
||||||
|
stock_id: 股票代碼
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: 標準化後的股票代碼
|
||||||
|
"""
|
||||||
|
# 移除空白和特殊字元
|
||||||
|
normalized = stock_id.strip().upper()
|
||||||
|
|
||||||
|
# 移除可能的 .TW 或 .TWO 後綴(台股在某些系統的格式)
|
||||||
|
for suffix in [".TW", ".TWO", ".TT"]:
|
||||||
|
if normalized.endswith(suffix):
|
||||||
|
normalized = normalized[:-len(suffix)]
|
||||||
|
break
|
||||||
|
|
||||||
|
return normalized
|
||||||
|
|
||||||
|
|
||||||
|
def _filter_by_date_range(
|
||||||
|
data: list,
|
||||||
|
date_field: str,
|
||||||
|
start_date: str,
|
||||||
|
end_date: str
|
||||||
|
) -> list:
|
||||||
|
"""
|
||||||
|
按日期範圍過濾資料列表。
|
||||||
|
|
||||||
|
Args:
|
||||||
|
data: 要過濾的資料列表
|
||||||
|
date_field: 日期欄位名稱
|
||||||
|
start_date: 開始日期
|
||||||
|
end_date: 結束日期
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
list: 過濾後的資料列表
|
||||||
|
"""
|
||||||
|
if not data:
|
||||||
|
return data
|
||||||
|
|
||||||
|
try:
|
||||||
|
start_dt = datetime.strptime(start_date, "%Y-%m-%d")
|
||||||
|
end_dt = datetime.strptime(end_date, "%Y-%m-%d")
|
||||||
|
|
||||||
|
filtered = []
|
||||||
|
for item in data:
|
||||||
|
if date_field in item:
|
||||||
|
try:
|
||||||
|
item_date = datetime.strptime(item[date_field], "%Y-%m-%d")
|
||||||
|
if start_dt <= item_date <= end_dt:
|
||||||
|
filtered.append(item)
|
||||||
|
except (ValueError, TypeError):
|
||||||
|
continue
|
||||||
|
|
||||||
|
return filtered
|
||||||
|
except Exception:
|
||||||
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# 台股市場類型判斷
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
# 股票市場類型緩存(避免重複查詢)
|
||||||
|
_stock_market_type_cache: Dict[str, str] = {}
|
||||||
|
|
||||||
|
|
||||||
|
def get_stock_market_type(stock_id: str) -> str:
|
||||||
|
"""
|
||||||
|
獲取台股的市場類型(上市/上櫃/興櫃)。
|
||||||
|
|
||||||
|
透過 FinMind 的 TaiwanStockInfo API 查詢股票資訊,
|
||||||
|
根據 type 欄位判斷市場類型:
|
||||||
|
- twse: 上市(Yahoo Finance 後綴 .TW)
|
||||||
|
- tpex: 上櫃(Yahoo Finance 後綴 .TWO)
|
||||||
|
- rotc: 興櫃(Yahoo Finance 後綴 .TWO)
|
||||||
|
|
||||||
|
Args:
|
||||||
|
stock_id: 台灣股票代碼(例如 "2330")
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: 市場類型代碼 ("twse", "tpex", "rotc") 或 "unknown"
|
||||||
|
"""
|
||||||
|
global _stock_market_type_cache
|
||||||
|
|
||||||
|
stock_id = normalize_stock_id(stock_id)
|
||||||
|
|
||||||
|
# 檢查緩存
|
||||||
|
if stock_id in _stock_market_type_cache:
|
||||||
|
return _stock_market_type_cache[stock_id]
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = _make_api_request(
|
||||||
|
dataset="TaiwanStockInfo",
|
||||||
|
data_id=stock_id
|
||||||
|
)
|
||||||
|
|
||||||
|
if "data" in response and response["data"]:
|
||||||
|
for item in response["data"]:
|
||||||
|
if item.get("stock_id") == stock_id:
|
||||||
|
market_type = item.get("type", "unknown")
|
||||||
|
_stock_market_type_cache[stock_id] = market_type
|
||||||
|
return market_type
|
||||||
|
|
||||||
|
# 如果找不到,預設為上市
|
||||||
|
_stock_market_type_cache[stock_id] = "twse"
|
||||||
|
return "twse"
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"警告:無法獲取 {stock_id} 的市場類型:{e}")
|
||||||
|
# 預設為上市
|
||||||
|
return "twse"
|
||||||
|
|
||||||
|
|
||||||
|
def get_yfinance_ticker(stock_id: str) -> str:
|
||||||
|
"""
|
||||||
|
將台股代碼轉換為 Yahoo Finance 格式。
|
||||||
|
|
||||||
|
根據市場類型添加適當的後綴:
|
||||||
|
- 上市(twse): 加 .TW
|
||||||
|
- 上櫃(tpex): 加 .TWO
|
||||||
|
- 興櫃(rotc): 加 .TWO
|
||||||
|
|
||||||
|
Args:
|
||||||
|
stock_id: 台灣股票代碼(例如 "2330")
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: Yahoo Finance 格式的代碼(例如 "2330.TW")
|
||||||
|
"""
|
||||||
|
stock_id = normalize_stock_id(stock_id)
|
||||||
|
|
||||||
|
# 檢查是否為台股代碼(數字開頭,4-6位)
|
||||||
|
if not stock_id or not stock_id[0].isdigit():
|
||||||
|
return stock_id # 非台股,直接返回
|
||||||
|
|
||||||
|
if len(stock_id) < 4 or len(stock_id) > 6:
|
||||||
|
return stock_id # 不符合台股格式
|
||||||
|
|
||||||
|
# 獲取市場類型
|
||||||
|
market_type = get_stock_market_type(stock_id)
|
||||||
|
|
||||||
|
if market_type == "twse":
|
||||||
|
return f"{stock_id}.TW"
|
||||||
|
elif market_type in ["tpex", "rotc"]:
|
||||||
|
return f"{stock_id}.TWO"
|
||||||
|
else:
|
||||||
|
# 預設使用上市後綴
|
||||||
|
return f"{stock_id}.TW"
|
||||||
|
|
||||||
|
|
||||||
|
def is_taiwan_stock(stock_id: str) -> bool:
|
||||||
|
"""
|
||||||
|
判斷股票代碼是否為台灣股票。
|
||||||
|
|
||||||
|
判斷邏輯:
|
||||||
|
- 4-6 位數字開頭
|
||||||
|
- 或已有 .TW/.TWO 後綴
|
||||||
|
|
||||||
|
Args:
|
||||||
|
stock_id: 股票代碼
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
bool: 是否為台灣股票
|
||||||
|
"""
|
||||||
|
if not stock_id:
|
||||||
|
return False
|
||||||
|
|
||||||
|
stock_id = stock_id.strip().upper()
|
||||||
|
|
||||||
|
# 檢查是否有台股後綴
|
||||||
|
if stock_id.endswith(".TW") or stock_id.endswith(".TWO"):
|
||||||
|
return True
|
||||||
|
|
||||||
|
# 檢查是否為純數字或數字開頭的 4-6 位代碼
|
||||||
|
if len(stock_id) >= 4 and len(stock_id) <= 6 and stock_id[0].isdigit():
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
@ -0,0 +1,626 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
FinMind 基本面資料模組
|
||||||
|
用於獲取台灣股市基本面財務資料
|
||||||
|
|
||||||
|
API 文檔:https://finmind.github.io/tutor/TaiwanMarket/Fundamental/
|
||||||
|
|
||||||
|
可用的資料集:
|
||||||
|
- TaiwanStockFinancialStatements: 綜合損益表(1990-03-01 ~ now)
|
||||||
|
- TaiwanStockBalanceSheet: 資產負債表(2011-12-01 ~ now)
|
||||||
|
- TaiwanStockCashFlowsStatement: 現金流量表(2008-06-01 ~ now)
|
||||||
|
- TaiwanStockDividend: 股利政策表(2005-05-01 ~ now)
|
||||||
|
- TaiwanStockDividendResult: 除權除息結果表(2003-05-01 ~ now)
|
||||||
|
- TaiwanStockMonthRevenue: 月營收表(2002-02-01 ~ now)
|
||||||
|
|
||||||
|
注意:本模組僅使用公開可用的 API 端點,
|
||||||
|
不使用需要 backer/sponsor 會員資格的功能(如 TaiwanStockMarketValue)。
|
||||||
|
"""
|
||||||
|
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
from typing import Optional, Dict, Any, List
|
||||||
|
import pandas as pd
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
from .finmind_common import (
|
||||||
|
_make_api_request,
|
||||||
|
format_date,
|
||||||
|
get_default_start_date,
|
||||||
|
normalize_stock_id,
|
||||||
|
FinMindError,
|
||||||
|
FinMindDataNotFoundError,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def _convert_to_serializable(obj):
|
||||||
|
"""
|
||||||
|
將 numpy/pandas 資料類型轉換為 Python 原生類型,
|
||||||
|
以便 JSON 序列化。
|
||||||
|
"""
|
||||||
|
if isinstance(obj, dict):
|
||||||
|
return {k: _convert_to_serializable(v) for k, v in obj.items()}
|
||||||
|
elif isinstance(obj, list):
|
||||||
|
return [_convert_to_serializable(item) for item in obj]
|
||||||
|
elif isinstance(obj, (np.integer, np.int64)):
|
||||||
|
return int(obj)
|
||||||
|
elif isinstance(obj, (np.floating, np.float64)):
|
||||||
|
return float(obj)
|
||||||
|
elif isinstance(obj, np.ndarray):
|
||||||
|
return obj.tolist()
|
||||||
|
elif pd.isna(obj):
|
||||||
|
return None
|
||||||
|
else:
|
||||||
|
return obj
|
||||||
|
|
||||||
|
|
||||||
|
def _format_output(data: dict, use_toon: bool = True) -> str:
|
||||||
|
"""
|
||||||
|
格式化輸出資料,支援 JSON 或 toon 格式。
|
||||||
|
|
||||||
|
Args:
|
||||||
|
data: 要輸出的資料字典
|
||||||
|
use_toon: 是否使用 toon 格式。預設為 True(強制使用 toon)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: 格式化後的字串(JSON 或 toon 格式)
|
||||||
|
"""
|
||||||
|
# 先確保資料可序列化
|
||||||
|
serializable_data = _convert_to_serializable(data)
|
||||||
|
|
||||||
|
if use_toon:
|
||||||
|
try:
|
||||||
|
from tradingagents.utils.toon_converter import convert_json_to_toon
|
||||||
|
return convert_json_to_toon(serializable_data)
|
||||||
|
except Exception as e:
|
||||||
|
print(f"警告:toon 轉換失敗:{e},使用 JSON 格式")
|
||||||
|
return json.dumps(serializable_data, ensure_ascii=False, indent=2)
|
||||||
|
else:
|
||||||
|
return json.dumps(serializable_data, ensure_ascii=False, indent=2)
|
||||||
|
|
||||||
|
|
||||||
|
def get_income_statement(
|
||||||
|
ticker: str,
|
||||||
|
freq: str = "quarterly",
|
||||||
|
curr_date: Optional[str] = None,
|
||||||
|
use_toon: bool = True
|
||||||
|
) -> str:
|
||||||
|
"""
|
||||||
|
獲取綜合損益表(TaiwanStockFinancialStatements)。
|
||||||
|
|
||||||
|
資料區間:1990-03-01 ~ now
|
||||||
|
|
||||||
|
返回欄位:
|
||||||
|
- date: 財報日期
|
||||||
|
- stock_id: 股票代碼
|
||||||
|
- type: 科目類型
|
||||||
|
- value: 數值
|
||||||
|
- origin_name: 原始科目名稱
|
||||||
|
|
||||||
|
Args:
|
||||||
|
ticker: 股票代碼(例如 "2330")
|
||||||
|
freq: 報告頻率(quarterly/annual)- 此參數保留但 FinMind 統一返回所有資料
|
||||||
|
curr_date: 當前日期,用於計算查詢範圍
|
||||||
|
use_toon: 是否使用 toon 格式(保留但未實作)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: JSON 格式的損益表資料
|
||||||
|
"""
|
||||||
|
ticker = normalize_stock_id(ticker)
|
||||||
|
|
||||||
|
# 計算日期範圍(往前推 3 年)
|
||||||
|
if curr_date:
|
||||||
|
end_date = format_date(curr_date)
|
||||||
|
start_dt = datetime.strptime(end_date, "%Y-%m-%d") - timedelta(days=3*365)
|
||||||
|
start_date = format_date(start_dt)
|
||||||
|
else:
|
||||||
|
start_date = get_default_start_date(years_back=3)
|
||||||
|
end_date = format_date(datetime.now())
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = _make_api_request(
|
||||||
|
dataset="TaiwanStockFinancialStatements",
|
||||||
|
data_id=ticker,
|
||||||
|
start_date=start_date,
|
||||||
|
end_date=end_date
|
||||||
|
)
|
||||||
|
|
||||||
|
if "data" in response and response["data"]:
|
||||||
|
df = pd.DataFrame(response["data"])
|
||||||
|
|
||||||
|
# 只保留最近 2 期的資料以減少 token
|
||||||
|
unique_dates = df["date"].unique()
|
||||||
|
if len(unique_dates) > 2:
|
||||||
|
recent_dates = sorted(unique_dates, reverse=True)[:2]
|
||||||
|
df = df[df["date"].isin(recent_dates)]
|
||||||
|
|
||||||
|
# 轉換為 pivot 格式(更易閱讀)
|
||||||
|
try:
|
||||||
|
pivot_df = df.pivot_table(
|
||||||
|
index="date",
|
||||||
|
columns="type",
|
||||||
|
values="value",
|
||||||
|
aggfunc="first"
|
||||||
|
).reset_index()
|
||||||
|
|
||||||
|
result = {
|
||||||
|
"stock_id": ticker,
|
||||||
|
"report_type": "income_statement",
|
||||||
|
"data": pivot_df.to_dict(orient="records")
|
||||||
|
}
|
||||||
|
except Exception:
|
||||||
|
# 如果 pivot 失敗,返回原始格式
|
||||||
|
result = {
|
||||||
|
"stock_id": ticker,
|
||||||
|
"report_type": "income_statement",
|
||||||
|
"data": df.to_dict(orient="records")
|
||||||
|
}
|
||||||
|
|
||||||
|
return _format_output(result, use_toon)
|
||||||
|
else:
|
||||||
|
return _format_output({
|
||||||
|
"stock_id": ticker,
|
||||||
|
"report_type": "income_statement",
|
||||||
|
"data": [],
|
||||||
|
"message": "查無資料"
|
||||||
|
}, use_toon)
|
||||||
|
|
||||||
|
except FinMindDataNotFoundError:
|
||||||
|
return _format_output({
|
||||||
|
"stock_id": ticker,
|
||||||
|
"report_type": "income_statement",
|
||||||
|
"data": [],
|
||||||
|
"message": f"找不到股票 {ticker} 的損益表資料"
|
||||||
|
}, use_toon)
|
||||||
|
except FinMindError as e:
|
||||||
|
return _format_output({
|
||||||
|
"error": str(e),
|
||||||
|
"stock_id": ticker
|
||||||
|
}, use_toon)
|
||||||
|
|
||||||
|
|
||||||
|
def get_balance_sheet(
|
||||||
|
ticker: str,
|
||||||
|
freq: str = "quarterly",
|
||||||
|
curr_date: Optional[str] = None,
|
||||||
|
use_toon: bool = True
|
||||||
|
) -> str:
|
||||||
|
"""
|
||||||
|
獲取資產負債表(TaiwanStockBalanceSheet)。
|
||||||
|
|
||||||
|
資料區間:2011-12-01 ~ now
|
||||||
|
|
||||||
|
返回欄位:
|
||||||
|
- date: 財報日期
|
||||||
|
- stock_id: 股票代碼
|
||||||
|
- type: 科目類型
|
||||||
|
- value: 數值
|
||||||
|
- origin_name: 原始科目名稱
|
||||||
|
|
||||||
|
Args:
|
||||||
|
ticker: 股票代碼(例如 "2330")
|
||||||
|
freq: 報告頻率(quarterly/annual)
|
||||||
|
curr_date: 當前日期
|
||||||
|
use_toon: 是否使用 toon 格式
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: JSON 格式的資產負債表資料
|
||||||
|
"""
|
||||||
|
ticker = normalize_stock_id(ticker)
|
||||||
|
|
||||||
|
if curr_date:
|
||||||
|
end_date = format_date(curr_date)
|
||||||
|
start_dt = datetime.strptime(end_date, "%Y-%m-%d") - timedelta(days=3*365)
|
||||||
|
start_date = format_date(start_dt)
|
||||||
|
else:
|
||||||
|
start_date = get_default_start_date(years_back=3)
|
||||||
|
end_date = format_date(datetime.now())
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = _make_api_request(
|
||||||
|
dataset="TaiwanStockBalanceSheet",
|
||||||
|
data_id=ticker,
|
||||||
|
start_date=start_date,
|
||||||
|
end_date=end_date
|
||||||
|
)
|
||||||
|
|
||||||
|
if "data" in response and response["data"]:
|
||||||
|
df = pd.DataFrame(response["data"])
|
||||||
|
|
||||||
|
# 只保留最近 2 期的資料
|
||||||
|
unique_dates = df["date"].unique()
|
||||||
|
if len(unique_dates) > 2:
|
||||||
|
recent_dates = sorted(unique_dates, reverse=True)[:2]
|
||||||
|
df = df[df["date"].isin(recent_dates)]
|
||||||
|
|
||||||
|
# 轉換為 pivot 格式
|
||||||
|
try:
|
||||||
|
pivot_df = df.pivot_table(
|
||||||
|
index="date",
|
||||||
|
columns="type",
|
||||||
|
values="value",
|
||||||
|
aggfunc="first"
|
||||||
|
).reset_index()
|
||||||
|
|
||||||
|
result = {
|
||||||
|
"stock_id": ticker,
|
||||||
|
"report_type": "balance_sheet",
|
||||||
|
"data": pivot_df.to_dict(orient="records")
|
||||||
|
}
|
||||||
|
except Exception:
|
||||||
|
result = {
|
||||||
|
"stock_id": ticker,
|
||||||
|
"report_type": "balance_sheet",
|
||||||
|
"data": df.to_dict(orient="records")
|
||||||
|
}
|
||||||
|
|
||||||
|
return _format_output(result, use_toon)
|
||||||
|
else:
|
||||||
|
return _format_output({
|
||||||
|
"stock_id": ticker,
|
||||||
|
"report_type": "balance_sheet",
|
||||||
|
"data": [],
|
||||||
|
"message": "查無資料"
|
||||||
|
}, use_toon)
|
||||||
|
|
||||||
|
except FinMindDataNotFoundError:
|
||||||
|
return _format_output({
|
||||||
|
"stock_id": ticker,
|
||||||
|
"report_type": "balance_sheet",
|
||||||
|
"data": [],
|
||||||
|
"message": f"找不到股票 {ticker} 的資產負債表資料"
|
||||||
|
}, use_toon)
|
||||||
|
except FinMindError as e:
|
||||||
|
return _format_output({
|
||||||
|
"error": str(e),
|
||||||
|
"stock_id": ticker
|
||||||
|
}, use_toon)
|
||||||
|
|
||||||
|
|
||||||
|
def get_cashflow(
|
||||||
|
ticker: str,
|
||||||
|
freq: str = "quarterly",
|
||||||
|
curr_date: Optional[str] = None,
|
||||||
|
use_toon: bool = True
|
||||||
|
) -> str:
|
||||||
|
"""
|
||||||
|
獲取現金流量表(TaiwanStockCashFlowsStatement)。
|
||||||
|
|
||||||
|
資料區間:2008-06-01 ~ now
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: JSON 格式的現金流量表資料
|
||||||
|
"""
|
||||||
|
ticker = normalize_stock_id(ticker)
|
||||||
|
|
||||||
|
if curr_date:
|
||||||
|
end_date = format_date(curr_date)
|
||||||
|
start_dt = datetime.strptime(end_date, "%Y-%m-%d") - timedelta(days=3*365)
|
||||||
|
start_date = format_date(start_dt)
|
||||||
|
else:
|
||||||
|
start_date = get_default_start_date(years_back=3)
|
||||||
|
end_date = format_date(datetime.now())
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = _make_api_request(
|
||||||
|
dataset="TaiwanStockCashFlowsStatement",
|
||||||
|
data_id=ticker,
|
||||||
|
start_date=start_date,
|
||||||
|
end_date=end_date
|
||||||
|
)
|
||||||
|
|
||||||
|
if "data" in response and response["data"]:
|
||||||
|
df = pd.DataFrame(response["data"])
|
||||||
|
|
||||||
|
unique_dates = df["date"].unique()
|
||||||
|
if len(unique_dates) > 2:
|
||||||
|
recent_dates = sorted(unique_dates, reverse=True)[:2]
|
||||||
|
df = df[df["date"].isin(recent_dates)]
|
||||||
|
|
||||||
|
try:
|
||||||
|
pivot_df = df.pivot_table(
|
||||||
|
index="date",
|
||||||
|
columns="type",
|
||||||
|
values="value",
|
||||||
|
aggfunc="first"
|
||||||
|
).reset_index()
|
||||||
|
|
||||||
|
result = {
|
||||||
|
"stock_id": ticker,
|
||||||
|
"report_type": "cashflow",
|
||||||
|
"data": pivot_df.to_dict(orient="records")
|
||||||
|
}
|
||||||
|
except Exception:
|
||||||
|
result = {
|
||||||
|
"stock_id": ticker,
|
||||||
|
"report_type": "cashflow",
|
||||||
|
"data": df.to_dict(orient="records")
|
||||||
|
}
|
||||||
|
|
||||||
|
return _format_output(result, use_toon)
|
||||||
|
else:
|
||||||
|
return _format_output({
|
||||||
|
"stock_id": ticker,
|
||||||
|
"report_type": "cashflow",
|
||||||
|
"data": [],
|
||||||
|
"message": "查無資料"
|
||||||
|
}, use_toon)
|
||||||
|
|
||||||
|
except FinMindDataNotFoundError:
|
||||||
|
return _format_output({
|
||||||
|
"stock_id": ticker,
|
||||||
|
"report_type": "cashflow",
|
||||||
|
"data": [],
|
||||||
|
"message": f"找不到股票 {ticker} 的現金流量表資料"
|
||||||
|
}, use_toon)
|
||||||
|
except FinMindError as e:
|
||||||
|
return _format_output({
|
||||||
|
"error": str(e),
|
||||||
|
"stock_id": ticker
|
||||||
|
}, use_toon)
|
||||||
|
|
||||||
|
|
||||||
|
def get_month_revenue(
|
||||||
|
ticker: str,
|
||||||
|
start_date: Optional[str] = None,
|
||||||
|
end_date: Optional[str] = None
|
||||||
|
) -> str:
|
||||||
|
"""
|
||||||
|
獲取月營收表(TaiwanStockMonthRevenue)。
|
||||||
|
|
||||||
|
資料區間:2002-02-01 ~ now
|
||||||
|
|
||||||
|
返回欄位:
|
||||||
|
- date: 公布日期
|
||||||
|
- stock_id: 股票代碼
|
||||||
|
- country: 地區
|
||||||
|
- revenue: 當月營收
|
||||||
|
- revenue_month: 營收月份
|
||||||
|
- revenue_year: 營收年份
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: JSON 格式的月營收資料
|
||||||
|
"""
|
||||||
|
ticker = normalize_stock_id(ticker)
|
||||||
|
|
||||||
|
if not start_date:
|
||||||
|
start_date = get_default_start_date(years_back=2)
|
||||||
|
if not end_date:
|
||||||
|
end_date = format_date(datetime.now())
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = _make_api_request(
|
||||||
|
dataset="TaiwanStockMonthRevenue",
|
||||||
|
data_id=ticker,
|
||||||
|
start_date=start_date,
|
||||||
|
end_date=end_date
|
||||||
|
)
|
||||||
|
|
||||||
|
if "data" in response and response["data"]:
|
||||||
|
df = pd.DataFrame(response["data"])
|
||||||
|
|
||||||
|
# 只保留最近 12 個月的資料
|
||||||
|
df = df.sort_values("date", ascending=False).head(12)
|
||||||
|
|
||||||
|
result = {
|
||||||
|
"stock_id": ticker,
|
||||||
|
"report_type": "month_revenue",
|
||||||
|
"data": df.to_dict(orient="records")
|
||||||
|
}
|
||||||
|
|
||||||
|
return _format_output(result)
|
||||||
|
else:
|
||||||
|
return _format_output({
|
||||||
|
"stock_id": ticker,
|
||||||
|
"report_type": "month_revenue",
|
||||||
|
"data": [],
|
||||||
|
"message": "查無資料"
|
||||||
|
})
|
||||||
|
|
||||||
|
except FinMindError as e:
|
||||||
|
return _format_output({
|
||||||
|
"error": str(e),
|
||||||
|
"stock_id": ticker
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
def get_dividend(
|
||||||
|
ticker: str,
|
||||||
|
start_date: Optional[str] = None,
|
||||||
|
end_date: Optional[str] = None
|
||||||
|
) -> str:
|
||||||
|
"""
|
||||||
|
獲取股利政策表(TaiwanStockDividend)。
|
||||||
|
|
||||||
|
資料區間:2005-05-01 ~ now
|
||||||
|
|
||||||
|
返回欄位包含現金股利、股票股利、除權息日等完整股利資訊。
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: JSON 格式的股利政策資料
|
||||||
|
"""
|
||||||
|
ticker = normalize_stock_id(ticker)
|
||||||
|
|
||||||
|
if not start_date:
|
||||||
|
start_date = get_default_start_date(years_back=5)
|
||||||
|
if not end_date:
|
||||||
|
end_date = format_date(datetime.now())
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = _make_api_request(
|
||||||
|
dataset="TaiwanStockDividend",
|
||||||
|
data_id=ticker,
|
||||||
|
start_date=start_date,
|
||||||
|
end_date=end_date
|
||||||
|
)
|
||||||
|
|
||||||
|
if "data" in response and response["data"]:
|
||||||
|
df = pd.DataFrame(response["data"])
|
||||||
|
|
||||||
|
# 只保留最近 10 筆
|
||||||
|
df = df.sort_values("date", ascending=False).head(10)
|
||||||
|
|
||||||
|
result = {
|
||||||
|
"stock_id": ticker,
|
||||||
|
"report_type": "dividend",
|
||||||
|
"data": df.to_dict(orient="records")
|
||||||
|
}
|
||||||
|
|
||||||
|
return _format_output(result)
|
||||||
|
else:
|
||||||
|
return _format_output({
|
||||||
|
"stock_id": ticker,
|
||||||
|
"report_type": "dividend",
|
||||||
|
"data": [],
|
||||||
|
"message": "查無資料"
|
||||||
|
})
|
||||||
|
|
||||||
|
except FinMindError as e:
|
||||||
|
return _format_output({
|
||||||
|
"error": str(e),
|
||||||
|
"stock_id": ticker
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
def get_fundamentals(
|
||||||
|
ticker: str,
|
||||||
|
curr_date: Optional[str] = None,
|
||||||
|
use_toon: bool = True
|
||||||
|
) -> str:
|
||||||
|
"""
|
||||||
|
獲取公司綜合基本面資料。
|
||||||
|
|
||||||
|
整合多個資料來源,提供完整的基本面概覽:
|
||||||
|
- 最新月營收
|
||||||
|
- 最近一期損益表摘要
|
||||||
|
- 最近一期資產負債表摘要
|
||||||
|
- 最近股利資訊
|
||||||
|
|
||||||
|
Args:
|
||||||
|
ticker: 股票代碼(例如 "2330")
|
||||||
|
curr_date: 當前日期 (YYYY-MM-DD)
|
||||||
|
use_toon: 是否使用 toon 格式
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: toon 格式的綜合基本面資料
|
||||||
|
"""
|
||||||
|
ticker = normalize_stock_id(ticker)
|
||||||
|
|
||||||
|
if not curr_date:
|
||||||
|
curr_date = format_date(datetime.now())
|
||||||
|
|
||||||
|
start_date = get_default_start_date(years_back=2)
|
||||||
|
|
||||||
|
fundamentals = {
|
||||||
|
"stock_id": ticker,
|
||||||
|
"report_date": curr_date,
|
||||||
|
"月營收": None,
|
||||||
|
"損益表摘要": None,
|
||||||
|
"資產負債表摘要": None,
|
||||||
|
"股利政策": None,
|
||||||
|
}
|
||||||
|
|
||||||
|
# 1. 獲取月營收
|
||||||
|
try:
|
||||||
|
revenue_response = _make_api_request(
|
||||||
|
dataset="TaiwanStockMonthRevenue",
|
||||||
|
data_id=ticker,
|
||||||
|
start_date=start_date,
|
||||||
|
end_date=curr_date
|
||||||
|
)
|
||||||
|
|
||||||
|
if "data" in revenue_response and revenue_response["data"]:
|
||||||
|
df = pd.DataFrame(revenue_response["data"])
|
||||||
|
latest = df.sort_values("date", ascending=False).iloc[0]
|
||||||
|
fundamentals["月營收"] = {
|
||||||
|
"日期": latest.get("date"),
|
||||||
|
"營收": latest.get("revenue"),
|
||||||
|
"營收年份": latest.get("revenue_year"),
|
||||||
|
"營收月份": latest.get("revenue_month"),
|
||||||
|
}
|
||||||
|
except FinMindError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# 2. 獲取損益表
|
||||||
|
try:
|
||||||
|
income_response = _make_api_request(
|
||||||
|
dataset="TaiwanStockFinancialStatements",
|
||||||
|
data_id=ticker,
|
||||||
|
start_date=start_date,
|
||||||
|
end_date=curr_date
|
||||||
|
)
|
||||||
|
|
||||||
|
if "data" in income_response and income_response["data"]:
|
||||||
|
df = pd.DataFrame(income_response["data"])
|
||||||
|
latest_date = df["date"].max()
|
||||||
|
latest_data = df[df["date"] == latest_date]
|
||||||
|
|
||||||
|
key_items = {}
|
||||||
|
for _, row in latest_data.iterrows():
|
||||||
|
key_items[row["type"]] = row["value"]
|
||||||
|
|
||||||
|
fundamentals["損益表摘要"] = {
|
||||||
|
"日期": latest_date,
|
||||||
|
"關鍵指標": key_items
|
||||||
|
}
|
||||||
|
except FinMindError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# 3. 獲取資產負債表
|
||||||
|
try:
|
||||||
|
balance_response = _make_api_request(
|
||||||
|
dataset="TaiwanStockBalanceSheet",
|
||||||
|
data_id=ticker,
|
||||||
|
start_date=start_date,
|
||||||
|
end_date=curr_date
|
||||||
|
)
|
||||||
|
|
||||||
|
if "data" in balance_response and balance_response["data"]:
|
||||||
|
df = pd.DataFrame(balance_response["data"])
|
||||||
|
latest_date = df["date"].max()
|
||||||
|
latest_data = df[df["date"] == latest_date]
|
||||||
|
|
||||||
|
key_items = {}
|
||||||
|
for _, row in latest_data.iterrows():
|
||||||
|
key_items[row["type"]] = row["value"]
|
||||||
|
|
||||||
|
fundamentals["資產負債表摘要"] = {
|
||||||
|
"日期": latest_date,
|
||||||
|
"關鍵指標": key_items
|
||||||
|
}
|
||||||
|
except FinMindError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# 4. 獲取股利資訊
|
||||||
|
try:
|
||||||
|
dividend_start = get_default_start_date(years_back=3)
|
||||||
|
dividend_response = _make_api_request(
|
||||||
|
dataset="TaiwanStockDividend",
|
||||||
|
data_id=ticker,
|
||||||
|
start_date=dividend_start,
|
||||||
|
end_date=curr_date
|
||||||
|
)
|
||||||
|
|
||||||
|
if "data" in dividend_response and dividend_response["data"]:
|
||||||
|
df = pd.DataFrame(dividend_response["data"])
|
||||||
|
latest = df.sort_values("date", ascending=False).iloc[0].to_dict()
|
||||||
|
|
||||||
|
# 只保留重要欄位
|
||||||
|
key_fields = [
|
||||||
|
"date", "year",
|
||||||
|
"CashEarningsDistribution", "StockEarningsDistribution",
|
||||||
|
"CashExDividendTradingDate", "StockExDividendTradingDate"
|
||||||
|
]
|
||||||
|
fundamentals["股利政策"] = {
|
||||||
|
k: latest.get(k) for k in key_fields if k in latest
|
||||||
|
}
|
||||||
|
except FinMindError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# 轉換所有資料為可序列化的格式並輸出
|
||||||
|
return _format_output(fundamentals, use_toon)
|
||||||
|
|
||||||
|
|
||||||
|
# 別名,與現有系統相容
|
||||||
|
get_financial_statements = get_income_statement
|
||||||
|
|
@ -0,0 +1,654 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
FinMind 技術指標資料模組
|
||||||
|
用於獲取台灣股市技術指標和籌碼面數據
|
||||||
|
|
||||||
|
API 文檔:
|
||||||
|
- 技術面:https://finmind.github.io/tutor/TaiwanMarket/Technical/
|
||||||
|
- 籌碼面:https://finmind.github.io/tutor/TaiwanMarket/Chip/
|
||||||
|
|
||||||
|
可用的資料集:
|
||||||
|
- TaiwanStockPER: 個股 PER、PBR 資料
|
||||||
|
- TaiwanStockMarginPurchaseShortSale: 個股融資融劵表
|
||||||
|
- TaiwanStockInstitutionalInvestorsBuySell: 法人買賣表
|
||||||
|
- TaiwanStockShareholding: 外資持股表
|
||||||
|
|
||||||
|
技術指標計算:
|
||||||
|
- 本模組會從 FinMind 獲取股價數據,自行計算技術指標(SMA、RSI、MACD 等)
|
||||||
|
- 不需要依賴 Alpha Vantage 或其他外部服務
|
||||||
|
|
||||||
|
注意:本模組不使用需要 backer/sponsor 會員資格的功能
|
||||||
|
"""
|
||||||
|
|
||||||
|
import json
|
||||||
|
from datetime import datetime
|
||||||
|
from dateutil.relativedelta import relativedelta
|
||||||
|
from typing import Optional
|
||||||
|
import pandas as pd
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
from .finmind_common import (
|
||||||
|
_make_api_request,
|
||||||
|
format_date,
|
||||||
|
get_default_start_date,
|
||||||
|
normalize_stock_id,
|
||||||
|
FinMindError,
|
||||||
|
FinMindDataNotFoundError,
|
||||||
|
format_output,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# 指標描述
|
||||||
|
INDICATOR_DESCRIPTIONS = {
|
||||||
|
"per": "本益比(PER):股價與每股盈餘之比,用於評估股票價值。較低的 PER 可能表示股票被低估。",
|
||||||
|
"pbr": "股價淨值比(PBR):股價與每股淨值之比,用於評估公司淨資產價值。PBR 低於 1 可能表示股票被低估。",
|
||||||
|
"dividend_yield": "殖利率:股利與股價之比,衡量股票收益率。較高的殖利率可能吸引存股族。",
|
||||||
|
"margin_purchase": "融資餘額:投資人向券商借錢買股票的未還金額。融資增加可能表示看多情緒。",
|
||||||
|
"short_sale": "融券餘額:投資人借股票賣出的未補回數量。融券增加可能表示看空情緒。",
|
||||||
|
"institutional": "三大法人買賣超:外資、投信、自營商的買賣超情況,是重要的市場動向指標。",
|
||||||
|
"foreign_holding": "外資持股比例:外資持有該股票的比例。外資持續買超可能推升股價。",
|
||||||
|
# 技術指標描述
|
||||||
|
"sma": "簡單移動平均線(SMA):過去 N 日收盤價的平均值,用於判斷趨勢方向。",
|
||||||
|
"ema": "指數移動平均線(EMA):加權移動平均,對近期價格給予較高權重。",
|
||||||
|
"rsi": "相對強弱指標(RSI):衡量價格動能,RSI>70 為超買,RSI<30 為超賣。",
|
||||||
|
"macd": "MACD:趨勢動能指標,由快線、慢線和柱狀圖組成,用於判斷買賣時機。",
|
||||||
|
"bbands": "布林通道(Bollinger Bands):由中軌(SMA)和上下軌組成,用於判斷價格波動範圍。",
|
||||||
|
}
|
||||||
|
|
||||||
|
# 支援的技術指標列表
|
||||||
|
CALCULATED_INDICATORS = [
|
||||||
|
"sma", "ema", "rsi", "macd", "bbands",
|
||||||
|
"close_5_sma", "close_10_sma", "close_20_sma", "close_50_sma", "close_100_sma", "close_200_sma",
|
||||||
|
"close_5_ema", "close_10_ema", "close_20_ema", "close_50_ema",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def _get_stock_price_data(symbol: str, start_date: str, end_date: str) -> pd.DataFrame:
|
||||||
|
"""獲取股價數據並轉換為 DataFrame"""
|
||||||
|
response = _make_api_request(
|
||||||
|
dataset="TaiwanStockPrice",
|
||||||
|
data_id=symbol,
|
||||||
|
start_date=start_date,
|
||||||
|
end_date=end_date
|
||||||
|
)
|
||||||
|
|
||||||
|
if "data" not in response or not response["data"]:
|
||||||
|
raise FinMindDataNotFoundError(f"找不到 {symbol} 的股價數據")
|
||||||
|
|
||||||
|
df = pd.DataFrame(response["data"])
|
||||||
|
df["date"] = pd.to_datetime(df["date"])
|
||||||
|
df = df.sort_values("date").reset_index(drop=True)
|
||||||
|
|
||||||
|
# 重命名欄位
|
||||||
|
df = df.rename(columns={
|
||||||
|
"max": "high",
|
||||||
|
"min": "low",
|
||||||
|
"Trading_Volume": "volume"
|
||||||
|
})
|
||||||
|
|
||||||
|
return df
|
||||||
|
|
||||||
|
|
||||||
|
def _calculate_sma(df: pd.DataFrame, period: int) -> pd.Series:
|
||||||
|
"""計算簡單移動平均線"""
|
||||||
|
return df["close"].rolling(window=period).mean()
|
||||||
|
|
||||||
|
|
||||||
|
def _calculate_ema(df: pd.DataFrame, period: int) -> pd.Series:
|
||||||
|
"""計算指數移動平均線"""
|
||||||
|
return df["close"].ewm(span=period, adjust=False).mean()
|
||||||
|
|
||||||
|
|
||||||
|
def _calculate_rsi(df: pd.DataFrame, period: int = 14) -> pd.Series:
|
||||||
|
"""計算 RSI 指標"""
|
||||||
|
delta = df["close"].diff()
|
||||||
|
gain = delta.where(delta > 0, 0)
|
||||||
|
loss = (-delta).where(delta < 0, 0)
|
||||||
|
|
||||||
|
avg_gain = gain.rolling(window=period).mean()
|
||||||
|
avg_loss = loss.rolling(window=period).mean()
|
||||||
|
|
||||||
|
rs = avg_gain / avg_loss
|
||||||
|
rsi = 100 - (100 / (1 + rs))
|
||||||
|
|
||||||
|
return rsi
|
||||||
|
|
||||||
|
|
||||||
|
def _calculate_macd(df: pd.DataFrame, fast: int = 12, slow: int = 26, signal: int = 9) -> dict:
|
||||||
|
"""計算 MACD 指標"""
|
||||||
|
ema_fast = df["close"].ewm(span=fast, adjust=False).mean()
|
||||||
|
ema_slow = df["close"].ewm(span=slow, adjust=False).mean()
|
||||||
|
|
||||||
|
macd_line = ema_fast - ema_slow
|
||||||
|
signal_line = macd_line.ewm(span=signal, adjust=False).mean()
|
||||||
|
histogram = macd_line - signal_line
|
||||||
|
|
||||||
|
return {
|
||||||
|
"macd": macd_line,
|
||||||
|
"signal": signal_line,
|
||||||
|
"histogram": histogram
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def _calculate_bbands(df: pd.DataFrame, period: int = 20, std_dev: float = 2.0) -> dict:
|
||||||
|
"""計算布林通道"""
|
||||||
|
sma = df["close"].rolling(window=period).mean()
|
||||||
|
std = df["close"].rolling(window=period).std()
|
||||||
|
|
||||||
|
return {
|
||||||
|
"upper": sma + (std * std_dev),
|
||||||
|
"middle": sma,
|
||||||
|
"lower": sma - (std * std_dev)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def get_indicator(
|
||||||
|
symbol: str,
|
||||||
|
indicator: str,
|
||||||
|
curr_date: str,
|
||||||
|
look_back_days: int,
|
||||||
|
interval: str = "daily",
|
||||||
|
time_period: int = 14,
|
||||||
|
series_type: str = "close"
|
||||||
|
) -> str:
|
||||||
|
"""
|
||||||
|
返回 FinMind 在一個時間窗口內的技術指標/籌碼面數據。
|
||||||
|
|
||||||
|
支援的籌碼面指標:
|
||||||
|
- per: 本益比
|
||||||
|
- pbr: 股價淨值比
|
||||||
|
- dividend_yield: 殖利率
|
||||||
|
- margin_purchase: 融資餘額
|
||||||
|
- short_sale: 融券餘額
|
||||||
|
- institutional: 三大法人買賣超
|
||||||
|
- foreign_holding: 外資持股比例
|
||||||
|
|
||||||
|
支援的技術指標(從股價計算):
|
||||||
|
- sma, close_N_sma: 簡單移動平均線
|
||||||
|
- ema, close_N_ema: 指數移動平均線
|
||||||
|
- rsi: 相對強弱指標
|
||||||
|
- macd: MACD 指標
|
||||||
|
- bbands: 布林通道
|
||||||
|
|
||||||
|
Args:
|
||||||
|
symbol: 股票代碼(例如 "2330")
|
||||||
|
indicator: 要獲取的指標類型
|
||||||
|
curr_date: 當前交易日期,格式為 YYYY-mm-dd
|
||||||
|
look_back_days: 回溯天數
|
||||||
|
interval: 時間間隔(保留參數,FinMind 只支援日線)
|
||||||
|
time_period: 用於計算的天數
|
||||||
|
series_type: 價格類型(保留參數)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: 包含指標值和描述的字串
|
||||||
|
"""
|
||||||
|
symbol = normalize_stock_id(symbol)
|
||||||
|
indicator = indicator.lower()
|
||||||
|
|
||||||
|
# 籌碼面指標
|
||||||
|
chip_indicators = [
|
||||||
|
"per", "pbr", "dividend_yield",
|
||||||
|
"margin_purchase", "short_sale",
|
||||||
|
"institutional", "foreign_holding"
|
||||||
|
]
|
||||||
|
|
||||||
|
curr_date_dt = datetime.strptime(curr_date, "%Y-%m-%d")
|
||||||
|
before = curr_date_dt - relativedelta(days=look_back_days)
|
||||||
|
start_date = format_date(before)
|
||||||
|
end_date = format_date(curr_date_dt)
|
||||||
|
|
||||||
|
try:
|
||||||
|
# 籌碼面指標
|
||||||
|
if indicator in chip_indicators:
|
||||||
|
if indicator in ["per", "pbr", "dividend_yield"]:
|
||||||
|
return _get_per_pbr_indicator(symbol, indicator, start_date, end_date)
|
||||||
|
elif indicator in ["margin_purchase", "short_sale"]:
|
||||||
|
return _get_margin_indicator(symbol, indicator, start_date, end_date)
|
||||||
|
elif indicator == "institutional":
|
||||||
|
return _get_institutional_indicator(symbol, start_date, end_date)
|
||||||
|
elif indicator == "foreign_holding":
|
||||||
|
return _get_foreign_holding_indicator(symbol, start_date, end_date)
|
||||||
|
|
||||||
|
# 技術指標(從股價計算)
|
||||||
|
else:
|
||||||
|
return _calculate_technical_indicator(
|
||||||
|
symbol=symbol,
|
||||||
|
indicator=indicator,
|
||||||
|
start_date=start_date,
|
||||||
|
end_date=end_date,
|
||||||
|
time_period=time_period,
|
||||||
|
look_back_days=look_back_days
|
||||||
|
)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"獲取 {indicator} 的 FinMind 指標數據時出錯:{e}")
|
||||||
|
return f"檢索 {indicator} 數據時出錯:{str(e)}"
|
||||||
|
|
||||||
|
|
||||||
|
def _calculate_technical_indicator(
|
||||||
|
symbol: str,
|
||||||
|
indicator: str,
|
||||||
|
start_date: str,
|
||||||
|
end_date: str,
|
||||||
|
time_period: int,
|
||||||
|
look_back_days: int
|
||||||
|
) -> str:
|
||||||
|
"""計算技術指標"""
|
||||||
|
indicator = indicator.lower()
|
||||||
|
|
||||||
|
# 解析指標名稱(例如 close_50_sma -> sma, period=50)
|
||||||
|
period = time_period
|
||||||
|
indicator_type = indicator
|
||||||
|
|
||||||
|
# 解析 close_N_sma 或 close_N_ema 格式
|
||||||
|
if "_sma" in indicator:
|
||||||
|
parts = indicator.split("_")
|
||||||
|
for i, p in enumerate(parts):
|
||||||
|
if p.isdigit():
|
||||||
|
period = int(p)
|
||||||
|
indicator_type = "sma"
|
||||||
|
elif "_ema" in indicator:
|
||||||
|
parts = indicator.split("_")
|
||||||
|
for i, p in enumerate(parts):
|
||||||
|
if p.isdigit():
|
||||||
|
period = int(p)
|
||||||
|
indicator_type = "ema"
|
||||||
|
|
||||||
|
# 需要更多歷史數據來計算指標
|
||||||
|
start_date_dt = datetime.strptime(start_date, "%Y-%m-%d")
|
||||||
|
extended_start = start_date_dt - relativedelta(days=max(period + 50, 300))
|
||||||
|
extended_start_str = format_date(extended_start)
|
||||||
|
|
||||||
|
try:
|
||||||
|
# 獲取股價數據
|
||||||
|
df = _get_stock_price_data(symbol, extended_start_str, end_date)
|
||||||
|
|
||||||
|
if df.empty:
|
||||||
|
return f"找不到 {symbol} 的股價數據來計算 {indicator}。"
|
||||||
|
|
||||||
|
# 計算指標
|
||||||
|
if indicator_type == "sma":
|
||||||
|
df["indicator"] = _calculate_sma(df, period)
|
||||||
|
desc = f"{period} 日簡單移動平均線"
|
||||||
|
elif indicator_type == "ema":
|
||||||
|
df["indicator"] = _calculate_ema(df, period)
|
||||||
|
desc = f"{period} 日指數移動平均線"
|
||||||
|
elif indicator_type == "rsi":
|
||||||
|
df["indicator"] = _calculate_rsi(df, period)
|
||||||
|
desc = f"{period} 日 RSI 相對強弱指標"
|
||||||
|
elif indicator_type == "macd":
|
||||||
|
macd_data = _calculate_macd(df)
|
||||||
|
df["macd"] = macd_data["macd"]
|
||||||
|
df["signal"] = macd_data["signal"]
|
||||||
|
df["histogram"] = macd_data["histogram"]
|
||||||
|
desc = "MACD 指標(12, 26, 9)"
|
||||||
|
elif indicator_type == "bbands":
|
||||||
|
bbands_data = _calculate_bbands(df, period)
|
||||||
|
df["bb_upper"] = bbands_data["upper"]
|
||||||
|
df["bb_middle"] = bbands_data["middle"]
|
||||||
|
df["bb_lower"] = bbands_data["lower"]
|
||||||
|
desc = f"{period} 日布林通道"
|
||||||
|
else:
|
||||||
|
return f"不支援的技術指標 {indicator}。支援的技術指標:sma, ema, rsi, macd, bbands, close_N_sma, close_N_ema"
|
||||||
|
|
||||||
|
# 過濾日期範圍
|
||||||
|
start_date_dt = datetime.strptime(start_date, "%Y-%m-%d")
|
||||||
|
df = df[df["date"] >= pd.Timestamp(start_date_dt)]
|
||||||
|
|
||||||
|
# 只顯示最近的數據
|
||||||
|
df = df.tail(min(look_back_days, 30))
|
||||||
|
|
||||||
|
# 格式化輸出
|
||||||
|
ind_string = ""
|
||||||
|
|
||||||
|
if indicator_type == "macd":
|
||||||
|
for _, row in df.iterrows():
|
||||||
|
date = row["date"].strftime("%Y-%m-%d")
|
||||||
|
macd_val = row["macd"]
|
||||||
|
signal_val = row["signal"]
|
||||||
|
hist_val = row["histogram"]
|
||||||
|
if pd.notna(macd_val):
|
||||||
|
ind_string += f"{date}: MACD={macd_val:.4f}, Signal={signal_val:.4f}, Histogram={hist_val:.4f}\n"
|
||||||
|
elif indicator_type == "bbands":
|
||||||
|
for _, row in df.iterrows():
|
||||||
|
date = row["date"].strftime("%Y-%m-%d")
|
||||||
|
upper = row["bb_upper"]
|
||||||
|
middle = row["bb_middle"]
|
||||||
|
lower = row["bb_lower"]
|
||||||
|
close = row["close"]
|
||||||
|
if pd.notna(upper):
|
||||||
|
ind_string += f"{date}: Upper={upper:.2f}, Middle={middle:.2f}, Lower={lower:.2f}, Close={close:.2f}\n"
|
||||||
|
else:
|
||||||
|
for _, row in df.iterrows():
|
||||||
|
date = row["date"].strftime("%Y-%m-%d")
|
||||||
|
value = row["indicator"]
|
||||||
|
close = row["close"]
|
||||||
|
if pd.notna(value):
|
||||||
|
ind_string += f"{date}: {indicator.upper()}={value:.4f}, Close={close:.2f}\n"
|
||||||
|
|
||||||
|
if not ind_string:
|
||||||
|
ind_string = "指定日期範圍內無足夠數據計算指標。\n"
|
||||||
|
|
||||||
|
result_str = (
|
||||||
|
f"## 從 {start_date} 到 {end_date} 的 {desc} ({symbol}):\n\n"
|
||||||
|
+ ind_string
|
||||||
|
+ "\n\n"
|
||||||
|
+ INDICATOR_DESCRIPTIONS.get(indicator_type, "技術指標計算自 FinMind 股價數據。")
|
||||||
|
)
|
||||||
|
|
||||||
|
return result_str
|
||||||
|
|
||||||
|
except FinMindError as e:
|
||||||
|
return f"獲取 {indicator} 數據時出錯:{str(e)}"
|
||||||
|
except Exception as e:
|
||||||
|
return f"計算 {indicator} 時出錯:{str(e)}"
|
||||||
|
|
||||||
|
|
||||||
|
def _get_per_pbr_indicator(
|
||||||
|
symbol: str,
|
||||||
|
indicator: str,
|
||||||
|
start_date: str,
|
||||||
|
end_date: str
|
||||||
|
) -> str:
|
||||||
|
"""獲取 PER、PBR、殖利率指標"""
|
||||||
|
try:
|
||||||
|
response = _make_api_request(
|
||||||
|
dataset="TaiwanStockPER",
|
||||||
|
data_id=symbol,
|
||||||
|
start_date=start_date,
|
||||||
|
end_date=end_date
|
||||||
|
)
|
||||||
|
|
||||||
|
if "data" in response and response["data"]:
|
||||||
|
data = response["data"]
|
||||||
|
|
||||||
|
# 欄位映射
|
||||||
|
field_map = {
|
||||||
|
"per": "PER",
|
||||||
|
"pbr": "PBR",
|
||||||
|
"dividend_yield": "dividend_yield"
|
||||||
|
}
|
||||||
|
|
||||||
|
field_name = field_map.get(indicator, indicator)
|
||||||
|
|
||||||
|
# 格式化輸出
|
||||||
|
ind_string = ""
|
||||||
|
for row in sorted(data, key=lambda x: x.get("date", "")):
|
||||||
|
date = row.get("date", "")
|
||||||
|
value = row.get(field_name, "N/A")
|
||||||
|
ind_string += f"{date}: {value}\n"
|
||||||
|
|
||||||
|
if not ind_string:
|
||||||
|
ind_string = "指定日期範圍內無可用數據。\n"
|
||||||
|
|
||||||
|
result_str = (
|
||||||
|
f"## 從 {start_date} 到 {end_date} 的 {indicator.upper()} 值:\n\n"
|
||||||
|
+ ind_string
|
||||||
|
+ "\n\n"
|
||||||
|
+ INDICATOR_DESCRIPTIONS.get(indicator, "無可用描述。")
|
||||||
|
)
|
||||||
|
|
||||||
|
return result_str
|
||||||
|
else:
|
||||||
|
return f"找不到 {symbol} 的 {indicator} 數據。"
|
||||||
|
|
||||||
|
except FinMindError as e:
|
||||||
|
return f"獲取 {indicator} 數據時出錯:{str(e)}"
|
||||||
|
|
||||||
|
|
||||||
|
def _get_margin_indicator(
|
||||||
|
symbol: str,
|
||||||
|
indicator: str,
|
||||||
|
start_date: str,
|
||||||
|
end_date: str
|
||||||
|
) -> str:
|
||||||
|
"""獲取融資融券指標"""
|
||||||
|
try:
|
||||||
|
response = _make_api_request(
|
||||||
|
dataset="TaiwanStockMarginPurchaseShortSale",
|
||||||
|
data_id=symbol,
|
||||||
|
start_date=start_date,
|
||||||
|
end_date=end_date
|
||||||
|
)
|
||||||
|
|
||||||
|
if "data" in response and response["data"]:
|
||||||
|
data = response["data"]
|
||||||
|
|
||||||
|
# 欄位映射
|
||||||
|
if indicator == "margin_purchase":
|
||||||
|
field_name = "MarginPurchaseTodayBalance"
|
||||||
|
display_name = "融資餘額"
|
||||||
|
else: # short_sale
|
||||||
|
field_name = "ShortSaleTodayBalance"
|
||||||
|
display_name = "融券餘額"
|
||||||
|
|
||||||
|
# 格式化輸出
|
||||||
|
ind_string = ""
|
||||||
|
for row in sorted(data, key=lambda x: x.get("date", "")):
|
||||||
|
date = row.get("date", "")
|
||||||
|
value = row.get(field_name, "N/A")
|
||||||
|
ind_string += f"{date}: {value:,}\n" if isinstance(value, (int, float)) else f"{date}: {value}\n"
|
||||||
|
|
||||||
|
if not ind_string:
|
||||||
|
ind_string = "指定日期範圍內無可用數據。\n"
|
||||||
|
|
||||||
|
result_str = (
|
||||||
|
f"## 從 {start_date} 到 {end_date} 的 {display_name} ({symbol}):\n\n"
|
||||||
|
+ ind_string
|
||||||
|
+ "\n\n"
|
||||||
|
+ INDICATOR_DESCRIPTIONS.get(indicator, "無可用描述。")
|
||||||
|
)
|
||||||
|
|
||||||
|
return result_str
|
||||||
|
else:
|
||||||
|
return f"找不到 {symbol} 的融資融券數據。"
|
||||||
|
|
||||||
|
except FinMindError as e:
|
||||||
|
return f"獲取融資融券數據時出錯:{str(e)}"
|
||||||
|
|
||||||
|
|
||||||
|
def _get_institutional_indicator(
|
||||||
|
symbol: str,
|
||||||
|
start_date: str,
|
||||||
|
end_date: str
|
||||||
|
) -> str:
|
||||||
|
"""獲取三大法人買賣超指標"""
|
||||||
|
try:
|
||||||
|
response = _make_api_request(
|
||||||
|
dataset="TaiwanStockInstitutionalInvestorsBuySell",
|
||||||
|
data_id=symbol,
|
||||||
|
start_date=start_date,
|
||||||
|
end_date=end_date
|
||||||
|
)
|
||||||
|
|
||||||
|
if "data" in response and response["data"]:
|
||||||
|
data = response["data"]
|
||||||
|
df = pd.DataFrame(data)
|
||||||
|
|
||||||
|
# 按日期分組計算各法人買賣超
|
||||||
|
ind_string = ""
|
||||||
|
|
||||||
|
# 獲取唯一日期
|
||||||
|
dates = sorted(df["date"].unique())
|
||||||
|
for date in dates:
|
||||||
|
day_data = df[df["date"] == date]
|
||||||
|
|
||||||
|
# 彙總各法人買賣超
|
||||||
|
foreign = day_data[day_data["name"].str.contains("外資", na=False)]["buy"].sum() - \
|
||||||
|
day_data[day_data["name"].str.contains("外資", na=False)]["sell"].sum()
|
||||||
|
investment_trust = day_data[day_data["name"].str.contains("投信", na=False)]["buy"].sum() - \
|
||||||
|
day_data[day_data["name"].str.contains("投信", na=False)]["sell"].sum()
|
||||||
|
dealer = day_data[day_data["name"].str.contains("自營商", na=False)]["buy"].sum() - \
|
||||||
|
day_data[day_data["name"].str.contains("自營商", na=False)]["sell"].sum()
|
||||||
|
|
||||||
|
total = foreign + investment_trust + dealer
|
||||||
|
ind_string += f"{date}: 外資 {foreign:+,} / 投信 {investment_trust:+,} / 自營 {dealer:+,} / 合計 {total:+,}\n"
|
||||||
|
|
||||||
|
if not ind_string:
|
||||||
|
ind_string = "指定日期範圍內無可用數據。\n"
|
||||||
|
|
||||||
|
result_str = (
|
||||||
|
f"## 從 {start_date} 到 {end_date} 的三大法人買賣超 ({symbol}):\n\n"
|
||||||
|
+ ind_string
|
||||||
|
+ "\n\n"
|
||||||
|
+ INDICATOR_DESCRIPTIONS.get("institutional", "無可用描述。")
|
||||||
|
)
|
||||||
|
|
||||||
|
return result_str
|
||||||
|
else:
|
||||||
|
return f"找不到 {symbol} 的三大法人買賣超數據。"
|
||||||
|
|
||||||
|
except FinMindError as e:
|
||||||
|
return f"獲取三大法人數據時出錯:{str(e)}"
|
||||||
|
|
||||||
|
|
||||||
|
def _get_foreign_holding_indicator(
|
||||||
|
symbol: str,
|
||||||
|
start_date: str,
|
||||||
|
end_date: str
|
||||||
|
) -> str:
|
||||||
|
"""獲取外資持股比例指標"""
|
||||||
|
try:
|
||||||
|
response = _make_api_request(
|
||||||
|
dataset="TaiwanStockShareholding",
|
||||||
|
data_id=symbol,
|
||||||
|
start_date=start_date,
|
||||||
|
end_date=end_date
|
||||||
|
)
|
||||||
|
|
||||||
|
if "data" in response and response["data"]:
|
||||||
|
data = response["data"]
|
||||||
|
|
||||||
|
# 格式化輸出
|
||||||
|
ind_string = ""
|
||||||
|
for row in sorted(data, key=lambda x: x.get("date", "")):
|
||||||
|
date = row.get("date", "")
|
||||||
|
holding_percent = row.get("ForeignInvestmentSharesRatio", "N/A")
|
||||||
|
holding_shares = row.get("ForeignInvestmentShares", "N/A")
|
||||||
|
|
||||||
|
if isinstance(holding_percent, (int, float)):
|
||||||
|
ind_string += f"{date}: {holding_percent:.2f}% ({holding_shares:,} 股)\n"
|
||||||
|
else:
|
||||||
|
ind_string += f"{date}: {holding_percent}\n"
|
||||||
|
|
||||||
|
if not ind_string:
|
||||||
|
ind_string = "指定日期範圍內無可用數據。\n"
|
||||||
|
|
||||||
|
result_str = (
|
||||||
|
f"## 從 {start_date} 到 {end_date} 的外資持股比例 ({symbol}):\n\n"
|
||||||
|
+ ind_string
|
||||||
|
+ "\n\n"
|
||||||
|
+ INDICATOR_DESCRIPTIONS.get("foreign_holding", "無可用描述。")
|
||||||
|
)
|
||||||
|
|
||||||
|
return result_str
|
||||||
|
else:
|
||||||
|
return f"找不到 {symbol} 的外資持股數據。"
|
||||||
|
|
||||||
|
except FinMindError as e:
|
||||||
|
return f"獲取外資持股數據時出錯:{str(e)}"
|
||||||
|
|
||||||
|
|
||||||
|
def get_margin_data(
|
||||||
|
symbol: str,
|
||||||
|
start_date: str,
|
||||||
|
end_date: str
|
||||||
|
) -> str:
|
||||||
|
"""
|
||||||
|
獲取個股融資融劵表完整數據。
|
||||||
|
|
||||||
|
資料區間:2001-01-01 ~ now
|
||||||
|
|
||||||
|
返回欄位:
|
||||||
|
- date: 日期
|
||||||
|
- stock_id: 股票代碼
|
||||||
|
- MarginPurchaseBuy: 融資買進
|
||||||
|
- MarginPurchaseSell: 融資賣出
|
||||||
|
- MarginPurchaseTodayBalance: 融資今日餘額
|
||||||
|
- ShortSaleBuy: 融券買進
|
||||||
|
- ShortSaleSell: 融券賣出
|
||||||
|
- ShortSaleTodayBalance: 融券今日餘額
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: JSON 格式的融資融券數據
|
||||||
|
"""
|
||||||
|
symbol = normalize_stock_id(symbol)
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = _make_api_request(
|
||||||
|
dataset="TaiwanStockMarginPurchaseShortSale",
|
||||||
|
data_id=symbol,
|
||||||
|
start_date=start_date,
|
||||||
|
end_date=end_date
|
||||||
|
)
|
||||||
|
|
||||||
|
if "data" in response and response["data"]:
|
||||||
|
result = {
|
||||||
|
"stock_id": symbol,
|
||||||
|
"data_type": "margin_trading",
|
||||||
|
"data": response["data"]
|
||||||
|
}
|
||||||
|
return format_output(result)
|
||||||
|
else:
|
||||||
|
return format_output({
|
||||||
|
"stock_id": symbol,
|
||||||
|
"data": [],
|
||||||
|
"message": "查無資料"
|
||||||
|
})
|
||||||
|
|
||||||
|
except FinMindError as e:
|
||||||
|
return format_output({
|
||||||
|
"error": str(e),
|
||||||
|
"stock_id": symbol
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
def get_institutional_data(
|
||||||
|
symbol: str,
|
||||||
|
start_date: str,
|
||||||
|
end_date: str
|
||||||
|
) -> str:
|
||||||
|
"""
|
||||||
|
獲取法人買賣表完整數據。
|
||||||
|
|
||||||
|
資料區間:2005-01-01 ~ now
|
||||||
|
|
||||||
|
返回欄位:
|
||||||
|
- date: 日期
|
||||||
|
- stock_id: 股票代碼
|
||||||
|
- name: 法人名稱(外資、投信、自營商等)
|
||||||
|
- buy: 買進金額
|
||||||
|
- sell: 賣出金額
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: JSON 格式的法人買賣數據
|
||||||
|
"""
|
||||||
|
symbol = normalize_stock_id(symbol)
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = _make_api_request(
|
||||||
|
dataset="TaiwanStockInstitutionalInvestorsBuySell",
|
||||||
|
data_id=symbol,
|
||||||
|
start_date=start_date,
|
||||||
|
end_date=end_date
|
||||||
|
)
|
||||||
|
|
||||||
|
if "data" in response and response["data"]:
|
||||||
|
result = {
|
||||||
|
"stock_id": symbol,
|
||||||
|
"data_type": "institutional_investors",
|
||||||
|
"data": response["data"]
|
||||||
|
}
|
||||||
|
return format_output(result)
|
||||||
|
else:
|
||||||
|
return format_output({
|
||||||
|
"stock_id": symbol,
|
||||||
|
"data": [],
|
||||||
|
"message": "查無資料"
|
||||||
|
})
|
||||||
|
|
||||||
|
except FinMindError as e:
|
||||||
|
return format_output({
|
||||||
|
"error": str(e),
|
||||||
|
"stock_id": symbol
|
||||||
|
})
|
||||||
|
|
@ -0,0 +1,387 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
FinMind 新聞資料模組
|
||||||
|
用於獲取台灣股市相關新聞和公告
|
||||||
|
|
||||||
|
API 文檔:https://finmind.github.io/
|
||||||
|
|
||||||
|
主要資料集:
|
||||||
|
- TaiwanStockNews: 台股相關新聞(主要新聞來源)
|
||||||
|
- TaiwanStockDividendResult: 除權息公告
|
||||||
|
- TaiwanStockMonthRevenue: 月營收公告
|
||||||
|
- TaiwanStockInstitutionalInvestorsBuySell: 法人買賣超
|
||||||
|
"""
|
||||||
|
|
||||||
|
import json
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
from typing import Optional
|
||||||
|
import pandas as pd
|
||||||
|
|
||||||
|
from .finmind_common import (
|
||||||
|
_make_api_request,
|
||||||
|
format_date,
|
||||||
|
get_default_start_date,
|
||||||
|
normalize_stock_id,
|
||||||
|
FinMindError,
|
||||||
|
FinMindDataNotFoundError,
|
||||||
|
format_output,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def get_news(
|
||||||
|
ticker: str,
|
||||||
|
start_date: str,
|
||||||
|
end_date: str,
|
||||||
|
use_toon: bool = True
|
||||||
|
) -> str:
|
||||||
|
"""
|
||||||
|
獲取台灣股市相關新聞資訊。
|
||||||
|
|
||||||
|
使用 FinMind 的 TaiwanStockNews 資料集獲取真正的台股新聞。
|
||||||
|
資料區間:2019-04-01 ~ now
|
||||||
|
|
||||||
|
返回欄位:
|
||||||
|
- date: 新聞日期
|
||||||
|
- stock_id: 股票代碼
|
||||||
|
- description: 新聞內容
|
||||||
|
- link: 新聞連結
|
||||||
|
- source: 新聞來源
|
||||||
|
- title: 新聞標題
|
||||||
|
|
||||||
|
Args:
|
||||||
|
ticker: 股票代碼(例如 "2330")
|
||||||
|
start_date: 開始日期
|
||||||
|
end_date: 結束日期
|
||||||
|
use_toon: 是否使用 toon 格式(保留參數)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: JSON 格式的新聞資訊
|
||||||
|
"""
|
||||||
|
ticker = normalize_stock_id(ticker)
|
||||||
|
|
||||||
|
news_items = []
|
||||||
|
|
||||||
|
# 1. 獲取真正的新聞(TaiwanStockNews)
|
||||||
|
# 注意:TaiwanStockNews 只支援 start_date,不支援 end_date
|
||||||
|
try:
|
||||||
|
import requests
|
||||||
|
import os
|
||||||
|
|
||||||
|
url = "https://api.finmindtrade.com/api/v4/data"
|
||||||
|
token = os.getenv("FINMIND_API_TOKEN") or os.getenv("FINMIND_API_KEY")
|
||||||
|
headers = {"Authorization": f"Bearer {token}"} if token else {}
|
||||||
|
params = {
|
||||||
|
"dataset": "TaiwanStockNews",
|
||||||
|
"data_id": ticker,
|
||||||
|
"start_date": start_date,
|
||||||
|
}
|
||||||
|
|
||||||
|
response = requests.get(url, headers=headers, params=params, timeout=30)
|
||||||
|
response.raise_for_status()
|
||||||
|
news_response = response.json()
|
||||||
|
|
||||||
|
if "data" in news_response and news_response["data"]:
|
||||||
|
# 過濾日期範圍內的新聞
|
||||||
|
filtered_news = []
|
||||||
|
for item in news_response["data"]:
|
||||||
|
news_date = item.get("date", "")[:10] # 只取日期部分
|
||||||
|
if news_date and start_date <= news_date <= end_date:
|
||||||
|
filtered_news.append(item)
|
||||||
|
|
||||||
|
# 取最近 20 筆新聞
|
||||||
|
for item in filtered_news[-20:]:
|
||||||
|
news_items.append({
|
||||||
|
"title": item.get("title", "無標題"),
|
||||||
|
"date": item.get("date", "")[:10], # 只保留日期部分
|
||||||
|
"type": "news",
|
||||||
|
"summary": "", # TaiwanStockNews 沒有 description 欄位
|
||||||
|
"link": item.get("link", ""),
|
||||||
|
"source": item.get("source", "FinMind")
|
||||||
|
})
|
||||||
|
except FinMindError as e:
|
||||||
|
print(f"獲取新聞時發生錯誤: {e}")
|
||||||
|
|
||||||
|
# 2. 如果沒有新聞或新聞太少,補充其他資訊
|
||||||
|
if len(news_items) < 5:
|
||||||
|
# 補充股利公告
|
||||||
|
try:
|
||||||
|
dividend_response = _make_api_request(
|
||||||
|
dataset="TaiwanStockDividendResult",
|
||||||
|
data_id=ticker,
|
||||||
|
start_date=start_date,
|
||||||
|
end_date=end_date
|
||||||
|
)
|
||||||
|
|
||||||
|
if "data" in dividend_response and dividend_response["data"]:
|
||||||
|
for item in dividend_response["data"][:3]:
|
||||||
|
news_items.append({
|
||||||
|
"title": f"{ticker} 除權息公告",
|
||||||
|
"date": item.get("date", ""),
|
||||||
|
"type": "dividend",
|
||||||
|
"summary": f"除權息日:{item.get('date', '')},"
|
||||||
|
f"參考價:{item.get('reference_price', 'N/A')},"
|
||||||
|
f"股利合計:{item.get('stock_and_cache_dividend', 'N/A')}",
|
||||||
|
"link": "",
|
||||||
|
"source": "FinMind"
|
||||||
|
})
|
||||||
|
except FinMindError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# 補充月營收公告
|
||||||
|
try:
|
||||||
|
revenue_response = _make_api_request(
|
||||||
|
dataset="TaiwanStockMonthRevenue",
|
||||||
|
data_id=ticker,
|
||||||
|
start_date=start_date,
|
||||||
|
end_date=end_date
|
||||||
|
)
|
||||||
|
|
||||||
|
if "data" in revenue_response and revenue_response["data"]:
|
||||||
|
for item in revenue_response["data"][-3:]:
|
||||||
|
revenue = item.get("revenue", 0)
|
||||||
|
if isinstance(revenue, (int, float)):
|
||||||
|
revenue_str = f"{revenue:,.0f}"
|
||||||
|
else:
|
||||||
|
revenue_str = str(revenue)
|
||||||
|
|
||||||
|
news_items.append({
|
||||||
|
"title": f"{ticker} 月營收公告",
|
||||||
|
"date": item.get("date", ""),
|
||||||
|
"type": "revenue",
|
||||||
|
"summary": f"{item.get('revenue_year', '')}年{item.get('revenue_month', '')}月營收:{revenue_str}",
|
||||||
|
"link": "",
|
||||||
|
"source": "FinMind"
|
||||||
|
})
|
||||||
|
except FinMindError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# 按日期排序(最新的在前)
|
||||||
|
news_items.sort(key=lambda x: x.get("date", ""), reverse=True)
|
||||||
|
|
||||||
|
# 統計新聞類型
|
||||||
|
news_count = len([n for n in news_items if n.get("type") == "news"])
|
||||||
|
other_count = len(news_items) - news_count
|
||||||
|
|
||||||
|
result = {
|
||||||
|
"stock_id": ticker,
|
||||||
|
"items": len(news_items),
|
||||||
|
"news_count": news_count,
|
||||||
|
"note": f"包含 {news_count} 則新聞" + (f"和 {other_count} 則公司公告" if other_count > 0 else ""),
|
||||||
|
"feed": news_items[:15] # 限制最多 15 筆
|
||||||
|
}
|
||||||
|
|
||||||
|
return format_output(result, use_toon)
|
||||||
|
|
||||||
|
|
||||||
|
def get_global_news(
|
||||||
|
curr_date: str,
|
||||||
|
look_back_days: int = 7
|
||||||
|
) -> str:
|
||||||
|
"""
|
||||||
|
獲取台灣股市整體市場新聞/動態。
|
||||||
|
|
||||||
|
注意:FinMind 不提供全球新聞 API,
|
||||||
|
本函式透過市場整體指標提供替代資訊。
|
||||||
|
|
||||||
|
Args:
|
||||||
|
curr_date: 當前日期
|
||||||
|
look_back_days: 回溯天數
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: JSON 格式的市場動態
|
||||||
|
"""
|
||||||
|
curr_date_dt = datetime.strptime(curr_date, "%Y-%m-%d")
|
||||||
|
start_date_dt = curr_date_dt - timedelta(days=look_back_days)
|
||||||
|
start_date = format_date(start_date_dt)
|
||||||
|
end_date = format_date(curr_date_dt)
|
||||||
|
|
||||||
|
market_news = []
|
||||||
|
|
||||||
|
# 1. 獲取整體市場融資融券
|
||||||
|
try:
|
||||||
|
margin_response = _make_api_request(
|
||||||
|
dataset="TaiwanStockTotalMarginPurchaseShortSale",
|
||||||
|
start_date=start_date,
|
||||||
|
end_date=end_date
|
||||||
|
)
|
||||||
|
|
||||||
|
if "data" in margin_response and margin_response["data"]:
|
||||||
|
for item in margin_response["data"][-3:]: # 取最近 3 筆
|
||||||
|
market_news.append({
|
||||||
|
"title": "台股整體融資融券動態",
|
||||||
|
"date": item.get("date", ""),
|
||||||
|
"type": "margin_total",
|
||||||
|
"summary": f"{item.get('name', '')}:今日餘額 {item.get('TodayBalance', 'N/A'):,},"
|
||||||
|
f"增減 {item.get('TodayBalance', 0) - item.get('YesBalance', 0):+,}",
|
||||||
|
"source": "FinMind"
|
||||||
|
})
|
||||||
|
except FinMindError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# 2. 獲取整體三大法人買賣超
|
||||||
|
try:
|
||||||
|
institutional_response = _make_api_request(
|
||||||
|
dataset="TaiwanStockTotalInstitutionalInvestors",
|
||||||
|
start_date=start_date,
|
||||||
|
end_date=end_date
|
||||||
|
)
|
||||||
|
|
||||||
|
if "data" in institutional_response and institutional_response["data"]:
|
||||||
|
df = pd.DataFrame(institutional_response["data"])
|
||||||
|
|
||||||
|
dates = sorted(df["date"].unique(), reverse=True)[:3]
|
||||||
|
for date in dates:
|
||||||
|
day_data = df[df["date"] == date]
|
||||||
|
|
||||||
|
summary_parts = []
|
||||||
|
for _, row in day_data.iterrows():
|
||||||
|
name = row.get("name", "")
|
||||||
|
buy = row.get("buy", 0)
|
||||||
|
sell = row.get("sell", 0)
|
||||||
|
net = buy - sell
|
||||||
|
|
||||||
|
if isinstance(net, (int, float)):
|
||||||
|
summary_parts.append(f"{name} {net/100000000:+,.2f} 億")
|
||||||
|
|
||||||
|
if summary_parts:
|
||||||
|
market_news.append({
|
||||||
|
"title": "台股三大法人買賣超",
|
||||||
|
"date": date,
|
||||||
|
"type": "institutional_total",
|
||||||
|
"summary": ",".join(summary_parts),
|
||||||
|
"source": "FinMind"
|
||||||
|
})
|
||||||
|
except FinMindError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# 按日期排序
|
||||||
|
market_news.sort(key=lambda x: x.get("date", ""), reverse=True)
|
||||||
|
|
||||||
|
result = {
|
||||||
|
"market": "Taiwan",
|
||||||
|
"items": len(market_news),
|
||||||
|
"note": "FinMind 不提供新聞 API,此為市場整體動態資訊",
|
||||||
|
"feed": market_news
|
||||||
|
}
|
||||||
|
|
||||||
|
return format_output(result)
|
||||||
|
|
||||||
|
|
||||||
|
def get_insider_sentiment(ticker: str, curr_date: str) -> str:
|
||||||
|
"""
|
||||||
|
獲取內部人交易情緒(透過法人買賣超資料模擬)。
|
||||||
|
|
||||||
|
Args:
|
||||||
|
ticker: 股票代碼
|
||||||
|
curr_date: 當前日期
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: JSON 格式的情緒分析
|
||||||
|
"""
|
||||||
|
ticker = normalize_stock_id(ticker)
|
||||||
|
|
||||||
|
curr_date_dt = datetime.strptime(curr_date, "%Y-%m-%d")
|
||||||
|
start_date_dt = curr_date_dt - timedelta(days=30)
|
||||||
|
start_date = format_date(start_date_dt)
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = _make_api_request(
|
||||||
|
dataset="TaiwanStockInstitutionalInvestorsBuySell",
|
||||||
|
data_id=ticker,
|
||||||
|
start_date=start_date,
|
||||||
|
end_date=curr_date
|
||||||
|
)
|
||||||
|
|
||||||
|
if "data" in response and response["data"]:
|
||||||
|
df = pd.DataFrame(response["data"])
|
||||||
|
|
||||||
|
# 計算整體買賣超趨勢
|
||||||
|
total_buy = df["buy"].sum()
|
||||||
|
total_sell = df["sell"].sum()
|
||||||
|
net = total_buy - total_sell
|
||||||
|
|
||||||
|
# 判斷情緒
|
||||||
|
if net > 0:
|
||||||
|
sentiment = "正面"
|
||||||
|
sentiment_score = min(1.0, net / (total_buy + total_sell) * 2) if (total_buy + total_sell) > 0 else 0
|
||||||
|
else:
|
||||||
|
sentiment = "負面"
|
||||||
|
sentiment_score = max(-1.0, net / (total_buy + total_sell) * 2) if (total_buy + total_sell) > 0 else 0
|
||||||
|
|
||||||
|
result = {
|
||||||
|
"stock_id": ticker,
|
||||||
|
"period": f"{start_date} ~ {curr_date}",
|
||||||
|
"sentiment": sentiment,
|
||||||
|
"sentiment_score": round(sentiment_score, 3),
|
||||||
|
"total_buy": int(total_buy),
|
||||||
|
"total_sell": int(total_sell),
|
||||||
|
"net": int(net),
|
||||||
|
"note": "基於法人買賣超資料計算的情緒指標"
|
||||||
|
}
|
||||||
|
|
||||||
|
return format_output(result)
|
||||||
|
else:
|
||||||
|
return format_output({
|
||||||
|
"stock_id": ticker,
|
||||||
|
"error": "查無資料"
|
||||||
|
})
|
||||||
|
|
||||||
|
except FinMindError as e:
|
||||||
|
return format_output({
|
||||||
|
"stock_id": ticker,
|
||||||
|
"error": str(e)
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
def get_insider_transactions(symbol: str) -> str:
|
||||||
|
"""
|
||||||
|
獲取內部人交易資訊。
|
||||||
|
|
||||||
|
注意:FinMind 未提供內部人交易 API,
|
||||||
|
本函式透過法人買賣超資料提供類似資訊。
|
||||||
|
|
||||||
|
Args:
|
||||||
|
symbol: 股票代碼
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: JSON 格式的交易資訊
|
||||||
|
"""
|
||||||
|
symbol = normalize_stock_id(symbol)
|
||||||
|
|
||||||
|
end_date = format_date(datetime.now())
|
||||||
|
start_date = get_default_start_date(years_back=0) # 最近 1 個月
|
||||||
|
start_date_dt = datetime.now() - timedelta(days=30)
|
||||||
|
start_date = format_date(start_date_dt)
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = _make_api_request(
|
||||||
|
dataset="TaiwanStockInstitutionalInvestorsBuySell",
|
||||||
|
data_id=symbol,
|
||||||
|
start_date=start_date,
|
||||||
|
end_date=end_date
|
||||||
|
)
|
||||||
|
|
||||||
|
if "data" in response and response["data"]:
|
||||||
|
# 只保留最近 15 筆
|
||||||
|
data = response["data"][-15:]
|
||||||
|
|
||||||
|
result = {
|
||||||
|
"stock_id": symbol,
|
||||||
|
"data_type": "institutional_trading",
|
||||||
|
"note": "FinMind 不提供內部人交易 API,此為法人買賣超資料",
|
||||||
|
"data": data
|
||||||
|
}
|
||||||
|
|
||||||
|
return format_output(result)
|
||||||
|
else:
|
||||||
|
return format_output({
|
||||||
|
"stock_id": symbol,
|
||||||
|
"data": [],
|
||||||
|
"message": "查無資料"
|
||||||
|
})
|
||||||
|
|
||||||
|
except FinMindError as e:
|
||||||
|
return format_output({
|
||||||
|
"error": str(e),
|
||||||
|
"stock_id": symbol
|
||||||
|
})
|
||||||
|
|
@ -0,0 +1,250 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
FinMind 股價資料模組
|
||||||
|
用於獲取台灣股市股價數據
|
||||||
|
|
||||||
|
API 文檔:https://finmind.github.io/tutor/TaiwanMarket/Technical/
|
||||||
|
|
||||||
|
可用的資料集:
|
||||||
|
- TaiwanStockPrice: 股價日成交資訊(1994-10-01 ~ now)
|
||||||
|
- TaiwanStockInfo: 台股總覽
|
||||||
|
- TaiwanStockPER: 個股 PER、PBR 資料
|
||||||
|
|
||||||
|
注意:本模組不使用需要 backer/sponsor 會員資格的功能
|
||||||
|
(如 TaiwanStockPriceAdj、TaiwanStockWeekPrice、TaiwanStockMonthPrice)
|
||||||
|
"""
|
||||||
|
|
||||||
|
import json
|
||||||
|
from datetime import datetime
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
from .finmind_common import (
|
||||||
|
_make_api_request,
|
||||||
|
format_date,
|
||||||
|
normalize_stock_id,
|
||||||
|
FinMindError,
|
||||||
|
FinMindDataNotFoundError,
|
||||||
|
_filter_by_date_range,
|
||||||
|
format_output,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def get_stock(
|
||||||
|
symbol: str,
|
||||||
|
start_date: str,
|
||||||
|
end_date: str
|
||||||
|
) -> str:
|
||||||
|
"""
|
||||||
|
返回台灣股票的每日 OHLCV 數據。
|
||||||
|
|
||||||
|
資料區間:1994-10-01 ~ now
|
||||||
|
|
||||||
|
返回欄位:
|
||||||
|
- date: 日期
|
||||||
|
- stock_id: 股票代碼
|
||||||
|
- Trading_Volume: 成交量
|
||||||
|
- Trading_money: 成交金額
|
||||||
|
- open: 開盤價
|
||||||
|
- max: 最高價
|
||||||
|
- min: 最低價
|
||||||
|
- close: 收盤價
|
||||||
|
- spread: 漲跌價差
|
||||||
|
- Trading_turnover: 成交筆數
|
||||||
|
|
||||||
|
Args:
|
||||||
|
symbol: 股票代碼(例如 "2330")
|
||||||
|
start_date: 開始日期,格式為 YYYY-MM-DD
|
||||||
|
end_date: 結束日期,格式為 YYYY-MM-DD
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: CSV 格式的股價數據字串
|
||||||
|
"""
|
||||||
|
symbol = normalize_stock_id(symbol)
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = _make_api_request(
|
||||||
|
dataset="TaiwanStockPrice",
|
||||||
|
data_id=symbol,
|
||||||
|
start_date=start_date,
|
||||||
|
end_date=end_date
|
||||||
|
)
|
||||||
|
|
||||||
|
if "data" in response and response["data"]:
|
||||||
|
data = response["data"]
|
||||||
|
|
||||||
|
# 轉換為 CSV 格式(與 Alpha Vantage 保持一致)
|
||||||
|
if not data:
|
||||||
|
return "date,open,high,low,close,volume\n"
|
||||||
|
|
||||||
|
# 建立 CSV 標頭
|
||||||
|
csv_lines = ["date,open,high,low,close,volume"]
|
||||||
|
|
||||||
|
for row in data:
|
||||||
|
csv_lines.append(
|
||||||
|
f"{row.get('date', '')},"
|
||||||
|
f"{row.get('open', '')},"
|
||||||
|
f"{row.get('max', '')},"
|
||||||
|
f"{row.get('min', '')},"
|
||||||
|
f"{row.get('close', '')},"
|
||||||
|
f"{row.get('Trading_Volume', '')}"
|
||||||
|
)
|
||||||
|
|
||||||
|
return "\n".join(csv_lines)
|
||||||
|
else:
|
||||||
|
return "date,open,high,low,close,volume\n"
|
||||||
|
|
||||||
|
except FinMindDataNotFoundError:
|
||||||
|
return "date,open,high,low,close,volume\n"
|
||||||
|
except FinMindError as e:
|
||||||
|
print(f"警告:獲取股價數據失敗:{e}")
|
||||||
|
return "date,open,high,low,close,volume\n"
|
||||||
|
|
||||||
|
|
||||||
|
def get_stock_info(stock_id: Optional[str] = None) -> str:
|
||||||
|
"""
|
||||||
|
獲取台股總覽資訊。
|
||||||
|
|
||||||
|
包含所有上市、上櫃、興櫃的股票名稱、代碼和產業類別。
|
||||||
|
|
||||||
|
返回欄位:
|
||||||
|
- industry_category: 產業類別
|
||||||
|
- stock_id: 股票代碼
|
||||||
|
- stock_name: 股票名稱
|
||||||
|
- type: 類型(twse/tpex/rotc)
|
||||||
|
- date: 更新日期
|
||||||
|
|
||||||
|
Args:
|
||||||
|
stock_id: 股票代碼(選填,可查詢特定股票)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: JSON 格式的股票資訊
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
response = _make_api_request(
|
||||||
|
dataset="TaiwanStockInfo",
|
||||||
|
data_id=stock_id
|
||||||
|
)
|
||||||
|
|
||||||
|
if "data" in response and response["data"]:
|
||||||
|
# 如果查詢特定股票,只返回該股票的資訊
|
||||||
|
if stock_id:
|
||||||
|
stock_id = normalize_stock_id(stock_id)
|
||||||
|
filtered = [
|
||||||
|
d for d in response["data"]
|
||||||
|
if d.get("stock_id") == stock_id
|
||||||
|
]
|
||||||
|
return format_output(filtered)
|
||||||
|
else:
|
||||||
|
# 限制返回數量以減少 token
|
||||||
|
data = response["data"][:100]
|
||||||
|
return format_output(data)
|
||||||
|
else:
|
||||||
|
return format_output([])
|
||||||
|
|
||||||
|
except FinMindError as e:
|
||||||
|
return format_output({"error": str(e)})
|
||||||
|
|
||||||
|
|
||||||
|
def get_stock_per(
|
||||||
|
symbol: str,
|
||||||
|
start_date: str,
|
||||||
|
end_date: str
|
||||||
|
) -> str:
|
||||||
|
"""
|
||||||
|
獲取個股 PER、PBR 資料。
|
||||||
|
|
||||||
|
返回欄位:
|
||||||
|
- date: 日期
|
||||||
|
- stock_id: 股票代碼
|
||||||
|
- dividend_yield: 殖利率
|
||||||
|
- PER: 本益比
|
||||||
|
- PBR: 股價淨值比
|
||||||
|
|
||||||
|
Args:
|
||||||
|
symbol: 股票代碼(例如 "2330")
|
||||||
|
start_date: 開始日期
|
||||||
|
end_date: 結束日期
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: JSON 格式的 PER/PBR 資料
|
||||||
|
"""
|
||||||
|
symbol = normalize_stock_id(symbol)
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = _make_api_request(
|
||||||
|
dataset="TaiwanStockPER",
|
||||||
|
data_id=symbol,
|
||||||
|
start_date=start_date,
|
||||||
|
end_date=end_date
|
||||||
|
)
|
||||||
|
|
||||||
|
if "data" in response and response["data"]:
|
||||||
|
result = {
|
||||||
|
"stock_id": symbol,
|
||||||
|
"data": response["data"]
|
||||||
|
}
|
||||||
|
return format_output(result)
|
||||||
|
else:
|
||||||
|
return format_output({
|
||||||
|
"stock_id": symbol,
|
||||||
|
"data": [],
|
||||||
|
"message": "查無資料"
|
||||||
|
})
|
||||||
|
|
||||||
|
except FinMindDataNotFoundError:
|
||||||
|
return format_output({
|
||||||
|
"stock_id": symbol,
|
||||||
|
"data": [],
|
||||||
|
"message": f"找不到股票 {symbol} 的 PER/PBR 資料"
|
||||||
|
})
|
||||||
|
except FinMindError as e:
|
||||||
|
return format_output({
|
||||||
|
"error": str(e),
|
||||||
|
"stock_id": symbol
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
def get_day_trading(
|
||||||
|
symbol: str,
|
||||||
|
start_date: str,
|
||||||
|
end_date: str
|
||||||
|
) -> str:
|
||||||
|
"""
|
||||||
|
獲取當日沖銷交易標的及成交量值。
|
||||||
|
|
||||||
|
Args:
|
||||||
|
symbol: 股票代碼(例如 "2330")
|
||||||
|
start_date: 開始日期
|
||||||
|
end_date: 結束日期
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: JSON 格式的當沖資料
|
||||||
|
"""
|
||||||
|
symbol = normalize_stock_id(symbol)
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = _make_api_request(
|
||||||
|
dataset="TaiwanStockDayTrading",
|
||||||
|
data_id=symbol,
|
||||||
|
start_date=start_date,
|
||||||
|
end_date=end_date
|
||||||
|
)
|
||||||
|
|
||||||
|
if "data" in response and response["data"]:
|
||||||
|
result = {
|
||||||
|
"stock_id": symbol,
|
||||||
|
"data": response["data"]
|
||||||
|
}
|
||||||
|
return format_output(result)
|
||||||
|
else:
|
||||||
|
return format_output({
|
||||||
|
"stock_id": symbol,
|
||||||
|
"data": [],
|
||||||
|
"message": "查無資料"
|
||||||
|
})
|
||||||
|
|
||||||
|
except FinMindError as e:
|
||||||
|
return format_output({
|
||||||
|
"error": str(e),
|
||||||
|
"stock_id": symbol
|
||||||
|
})
|
||||||
|
|
@ -17,6 +17,21 @@ from .alpha_vantage import (
|
||||||
)
|
)
|
||||||
from .alpha_vantage_common import AlphaVantageRateLimitError
|
from .alpha_vantage_common import AlphaVantageRateLimitError
|
||||||
|
|
||||||
|
# FinMind 台灣股市資料供應商
|
||||||
|
from .finmind import (
|
||||||
|
get_stock as get_finmind_stock,
|
||||||
|
get_indicator as get_finmind_indicator,
|
||||||
|
get_fundamentals as get_finmind_fundamentals,
|
||||||
|
get_balance_sheet as get_finmind_balance_sheet,
|
||||||
|
get_cashflow as get_finmind_cashflow,
|
||||||
|
get_income_statement as get_finmind_income_statement,
|
||||||
|
get_news as get_finmind_news,
|
||||||
|
get_global_news as get_finmind_global_news,
|
||||||
|
get_insider_sentiment as get_finmind_insider_sentiment,
|
||||||
|
get_insider_transactions as get_finmind_insider_transactions,
|
||||||
|
FinMindRateLimitError,
|
||||||
|
)
|
||||||
|
|
||||||
# 設定和路由邏輯
|
# 設定和路由邏輯
|
||||||
from .config import get_config
|
from .config import get_config
|
||||||
|
|
||||||
|
|
@ -58,7 +73,9 @@ VENDOR_LIST = [
|
||||||
"local",
|
"local",
|
||||||
"yfinance",
|
"yfinance",
|
||||||
"openai",
|
"openai",
|
||||||
"google"
|
"google",
|
||||||
|
"alpha_vantage",
|
||||||
|
"finmind", # 台灣股市資料供應商
|
||||||
]
|
]
|
||||||
|
|
||||||
# 方法與其特定供應商實現的映射
|
# 方法與其特定供應商實現的映射
|
||||||
|
|
@ -68,33 +85,39 @@ VENDOR_METHODS = {
|
||||||
"alpha_vantage": get_alpha_vantage_stock,
|
"alpha_vantage": get_alpha_vantage_stock,
|
||||||
"yfinance": get_YFin_data_online,
|
"yfinance": get_YFin_data_online,
|
||||||
"local": get_YFin_data,
|
"local": get_YFin_data,
|
||||||
|
"finmind": get_finmind_stock, # 台股資料
|
||||||
},
|
},
|
||||||
# 技術指標
|
# 技術指標
|
||||||
"get_indicators": {
|
"get_indicators": {
|
||||||
"alpha_vantage": get_alpha_vantage_indicator,
|
"alpha_vantage": get_alpha_vantage_indicator,
|
||||||
"yfinance": get_stock_stats_indicators_window,
|
"yfinance": get_stock_stats_indicators_window,
|
||||||
"local": get_stock_stats_indicators_window
|
"local": get_stock_stats_indicators_window,
|
||||||
|
"finmind": get_finmind_indicator, # 台股技術指標/籌碼面
|
||||||
},
|
},
|
||||||
# 基本面數據
|
# 基本面數據
|
||||||
"get_fundamentals": {
|
"get_fundamentals": {
|
||||||
"alpha_vantage": get_alpha_vantage_fundamentals,
|
"alpha_vantage": get_alpha_vantage_fundamentals,
|
||||||
"openai": get_fundamentals_openai,
|
"openai": get_fundamentals_openai,
|
||||||
"yfinance": get_yfinance_fundamentals,
|
"yfinance": get_yfinance_fundamentals,
|
||||||
|
"finmind": get_finmind_fundamentals, # 台股基本面
|
||||||
},
|
},
|
||||||
"get_balance_sheet": {
|
"get_balance_sheet": {
|
||||||
"alpha_vantage": get_alpha_vantage_balance_sheet,
|
"alpha_vantage": get_alpha_vantage_balance_sheet,
|
||||||
"yfinance": get_yfinance_balance_sheet,
|
"yfinance": get_yfinance_balance_sheet,
|
||||||
"local": get_simfin_balance_sheet,
|
"local": get_simfin_balance_sheet,
|
||||||
|
"finmind": get_finmind_balance_sheet, # 台股資產負債表
|
||||||
},
|
},
|
||||||
"get_cashflow": {
|
"get_cashflow": {
|
||||||
"alpha_vantage": get_alpha_vantage_cashflow,
|
"alpha_vantage": get_alpha_vantage_cashflow,
|
||||||
"yfinance": get_yfinance_cashflow,
|
"yfinance": get_yfinance_cashflow,
|
||||||
"local": get_simfin_cashflow,
|
"local": get_simfin_cashflow,
|
||||||
|
"finmind": get_finmind_cashflow, # 台股現金流量表
|
||||||
},
|
},
|
||||||
"get_income_statement": {
|
"get_income_statement": {
|
||||||
"alpha_vantage": get_alpha_vantage_income_statement,
|
"alpha_vantage": get_alpha_vantage_income_statement,
|
||||||
"yfinance": get_yfinance_income_statement,
|
"yfinance": get_yfinance_income_statement,
|
||||||
"local": get_simfin_income_statements,
|
"local": get_simfin_income_statements,
|
||||||
|
"finmind": get_finmind_income_statement, # 台股損益表
|
||||||
},
|
},
|
||||||
# 新聞數據
|
# 新聞數據
|
||||||
"get_news": {
|
"get_news": {
|
||||||
|
|
@ -102,18 +125,22 @@ VENDOR_METHODS = {
|
||||||
"openai": get_stock_news_openai,
|
"openai": get_stock_news_openai,
|
||||||
"google": get_google_news,
|
"google": get_google_news,
|
||||||
"local": [get_finnhub_news, get_reddit_company_news, get_google_news],
|
"local": [get_finnhub_news, get_reddit_company_news, get_google_news],
|
||||||
|
"finmind": get_finmind_news, # 台股公告/法人動態
|
||||||
},
|
},
|
||||||
"get_global_news": {
|
"get_global_news": {
|
||||||
"openai": get_global_news_openai,
|
"openai": get_global_news_openai,
|
||||||
"local": get_reddit_global_news
|
"local": get_reddit_global_news,
|
||||||
|
"finmind": get_finmind_global_news, # 台股市場動態
|
||||||
},
|
},
|
||||||
"get_insider_sentiment": {
|
"get_insider_sentiment": {
|
||||||
"local": get_finnhub_company_insider_sentiment
|
"local": get_finnhub_company_insider_sentiment,
|
||||||
|
"finmind": get_finmind_insider_sentiment, # 台股法人情緒
|
||||||
},
|
},
|
||||||
"get_insider_transactions": {
|
"get_insider_transactions": {
|
||||||
"alpha_vantage": get_alpha_vantage_insider_transactions,
|
"alpha_vantage": get_alpha_vantage_insider_transactions,
|
||||||
"yfinance": get_yfinance_insider_transactions,
|
"yfinance": get_yfinance_insider_transactions,
|
||||||
"local": get_finnhub_company_insider_transactions,
|
"local": get_finnhub_company_insider_transactions,
|
||||||
|
"finmind": get_finmind_insider_transactions, # 台股法人交易
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -213,6 +240,12 @@ def route_to_vendor(method: str, *args, **kwargs):
|
||||||
print(f"調試:速率限制詳細資訊:{e}")
|
print(f"調試:速率限制詳細資訊:{e}")
|
||||||
# 繼續到下一個供應商進行備援
|
# 繼續到下一個供應商進行備援
|
||||||
continue
|
continue
|
||||||
|
except FinMindRateLimitError as e:
|
||||||
|
if vendor == "finmind":
|
||||||
|
print(f"速率限制:超過 FinMind 速率限制,將備援至下一個可用供應商")
|
||||||
|
print(f"調試:速率限制詳細資訊:{e}")
|
||||||
|
# 繼續到下一個供應商進行備援
|
||||||
|
continue
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
# 記錄詳細錯誤但繼續其他實現
|
# 記錄詳細錯誤但繼續其他實現
|
||||||
error_type = type(e).__name__
|
error_type = type(e).__name__
|
||||||
|
|
|
||||||
|
|
@ -19,16 +19,24 @@ DEFAULT_CONFIG = {
|
||||||
"max_recur_limit": 100,
|
"max_recur_limit": 100,
|
||||||
# 資料供應商設定
|
# 資料供應商設定
|
||||||
# 類別層級設定 (該類別所有工具的預設值)
|
# 類別層級設定 (該類別所有工具的預設值)
|
||||||
|
# 可用供應商:
|
||||||
|
# - yfinance: Yahoo Finance (美股為主)
|
||||||
|
# - alpha_vantage: Alpha Vantage API (美股為主)
|
||||||
|
# - finmind: FinMind API (台股專用)
|
||||||
|
# - openai: OpenAI 網路搜尋
|
||||||
|
# - google: Google News
|
||||||
|
# - local: 本地資料
|
||||||
"data_vendors": {
|
"data_vendors": {
|
||||||
"core_stock_apis": "yfinance", # 選項: yfinance, alpha_vantage, local
|
"core_stock_apis": "yfinance", # 選項: yfinance, alpha_vantage, finmind, local
|
||||||
"technical_indicators": "yfinance", # 選項: yfinance, alpha_vantage, local
|
"technical_indicators": "yfinance", # 選項: yfinance, alpha_vantage, finmind, local
|
||||||
"fundamental_data": "alpha_vantage", # 選項: openai, alpha_vantage, local
|
"fundamental_data": "alpha_vantage", # 選項: openai, alpha_vantage, yfinance, finmind
|
||||||
"news_data": "openai", # 選項: openai, alpha_vantage, google, local
|
"news_data": "openai", # 選項: openai, alpha_vantage, google, finmind, local
|
||||||
},
|
},
|
||||||
# 工具層級設定 (優先於類別層級設定)
|
# 工具層級設定 (優先於類別層級設定)
|
||||||
"tool_vendors": {
|
"tool_vendors": {
|
||||||
# 範例: "get_stock_data": "alpha_vantage", # 覆寫類別預設值
|
# 範例: "get_stock_data": "alpha_vantage", # 覆寫類別預設值
|
||||||
# 範例: "get_news": "openai", # 覆寫類別預設值
|
# 範例: "get_news": "openai", # 覆寫類別預設值
|
||||||
|
# 範例: "get_stock_data": "finmind", # 使用 FinMind 獲取台股資料
|
||||||
"get_global_news": "openai", # get_global_news 不支持 alpha_vantage,使用 openai 作為主要供應商
|
"get_global_news": "openai", # get_global_news 不支持 alpha_vantage,使用 openai 作為主要供應商
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue