1 Commits
khalid ... Qwen

Author SHA1 Message Date
oussi
8192834f31 V2 2026-04-27 17:32:21 +02:00
7 changed files with 5689 additions and 837 deletions

View File

@@ -298,14 +298,157 @@ Réponds UNIQUEMENT avec un objet JSON valide, sans texte avant ni après.
{"n_ogc":"","date_concertation":"","argumentaire_medecin_controleur":""}\ {"n_ogc":"","date_concertation":"","argumentaire_medecin_controleur":""}\
""" """
PROMPT_SEJOUR_MANUSCRIT = """\
Tu es un assistant d'extraction de données médicales.
Cette page est intitulée "Séjour d'hospitalisation complète".
Elle comporte deux colonnes de texte entièrement manuscrit :
- Colonne gauche : "Commentaires du médecin contrôleur"
- Colonne droite : "Commentaires du médecin du DIM"
RÈGLES STRICTES :
- Le texte peut déborder largement EN DESSOUS du tableau et légèrement sur les côtés des colonnes : inclure TOUT le texte visible de chaque colonne, y compris celui qui dépasse les bordures.
- Retranscrire le texte manuscrit tel quel, y compris abréviations et codes médicaux.
- Pour attribuer un texte débordant à la bonne colonne : le texte débordant d'une colonne lui appartient même s'il dépasse physiquement le cadre.
- Si une colonne est illisible ou vide, retourner "".
Réponds UNIQUEMENT avec un objet JSON valide, sans texte avant ni après.
{"commentaire_medecin_controleur":"","commentaire_medecin_dim":""}\
"""
PROMPTS = { PROMPTS = {
"FICHE_RECUEIL": PROMPT_FICHE_RECUEIL, "FICHE_RECUEIL": PROMPT_FICHE_RECUEIL,
"ELEMENTS_PREUVE": PROMPT_ELEMENTS_PREUVE, "SEJOUR_MANUSCRIT": PROMPT_SEJOUR_MANUSCRIT,
"FICHE_ADMIN_2_2": PROMPT_FICHE_ADMIN_2_2, "ELEMENTS_PREUVE": PROMPT_ELEMENTS_PREUVE,
"FICHE_ADMIN_1_2": PROMPT_FICHE_ADMIN_1_2, "FICHE_ADMIN_2_2": PROMPT_FICHE_ADMIN_2_2,
"FICHE_ADMIN_1_2": PROMPT_FICHE_ADMIN_1_2,
} }
SKIP_TYPES = {"SEJOUR_MANUSCRIT", "FICHE_CONCERTATION_VIDE", "AUTRE"} SKIP_TYPES = {"FICHE_CONCERTATION_VIDE", "AUTRE"}
# ─── Découpage zones FICHE_RECUEIL ───────────────────────────────────────────
def crop_zone(img: Image.Image, y_start: float, y_end: float) -> Image.Image:
W, H = img.size
return img.crop((0, int(y_start * H), W, int(y_end * H)))
PROMPT_RECUEIL_Z1 = """\
Tu es un assistant d'extraction de données médicales.
Extrait les informations d'en-tête et des tableaux "Données du séjour" et "Données du RUM"
de cette portion de fiche médicale de recueil du praticien conseil.
RÈGLES STRICTES :
- Si un champ n'a pas de valeur clairement visible, retourner "".
- Ne jamais deviner, inférer ou compléter un champ absent.
- Le champ "provenance" est très souvent vide : ne le remplir QUE si une valeur est explicitement imprimée.
- Le tableau "Données du séjour" contient ces colonnes DANS CET ORDRE EXACT, de gauche à droite :
Age(ans) | Age(jours) | Sexe | Délai dern. règles | Age gestation | Poids d'entrée |
Durée de séjour | Mode d'entrée | Provenance | Mode de sortie | Destination |
Nb séances | Nb RUM | Nb j EXH | Type EXB | Nb j EXB
RÈGLE ABSOLUE : lire chaque valeur dans sa colonne uniquement. Si une colonne est vide, retourner "".
Ne jamais décaler les valeurs vers la gauche pour compenser une cellule vide.
Réponds UNIQUEMENT avec un objet JSON valide, sans texte avant ni après.
{"n_ogc":"","etablissement":"","finess":"","date_debut_controle":"","n_champ":"","libelle_champ":"","dossier_manquant":"","date_debut_sejour":"","date_fin_sejour":"",
"sejour_etab":{"age_ans":"","age_jours":"","sexe":"","poids_entree":"","duree_sejour":"","mode_entree":"","provenance":"","mode_sortie":"","destination":"","nb_seances":"","nb_rum":"","nb_j_exh":"","type_exb":"","nb_j_exb":""},
"sejour_reco":{"age_ans":"","age_jours":"","sexe":"","poids_entree":"","duree_sejour":"","mode_entree":"","provenance":"","mode_sortie":"","destination":"","nb_seances":"","nb_rum":"","nb_j_exh":"","type_exb":"","nb_j_exb":""},
"rum_etab":{"n_rum":"","lits_dedies_sp":"","um":"","igs_ii":"","duree_rum_debut":"","duree_rum_fin":"","nature_suppl":"","nb_suppl":""},
"rum_reco":{"n_rum":"","lits_dedies_sp":"","um":"","igs_ii":"","duree_rum_debut":"","duree_rum_fin":"","nature_suppl":"","nb_suppl":""}}\
"""
PROMPT_RECUEIL_Z2 = """\
Tu es un assistant d'extraction de données médicales.
Extrait uniquement les lignes DP et DR de la section "Codage de l'Établissement"
et leur colonne "Recodage" correspondante.
RÈGLES STRICTES :
- Le formulaire comporte exactement UNE ligne pour le DP et UNE ligne pour le DR.
- Pour chaque ligne : si la colonne "Recodage" en face est vide sur le document, retourner "" pour dp_reco/dr_reco.
- Si la ligne DR est entièrement vide sur le document, retourner {"code":"","libelle":""} pour dr_etab et "" pour dr_reco.
- Ne jamais copier le code d'une autre ligne dans DP ou DR.
Réponds UNIQUEMENT avec un objet JSON valide, sans texte avant ni après.
{"dp_etab":{"code":"","libelle":""},"dr_etab":{"code":"","libelle":""},"dp_reco":{"code":""},"dr_reco":{"code":""}}\
"""
PROMPT_RECUEIL_Z3 = """\
Tu es un assistant d'extraction de données médicales.
Extrait toutes les lignes DAS et Actes de cette section de la fiche médicale de recueil.
RÈGLES STRICTES :
- Extraire TOUTES les lignes non vides, sans limite de nombre.
- Les diagnostics (codes CIM-10 courts, ex: R33, E43, Z515) vont dans "das_etab" / "das_reco".
- Les actes (codes CCAM longs, 7+ caractères commençant par lettres, ex: JDPE002, NJFA008) vont dans "actes_etab" / "actes_reco".
- Ne jamais mettre un code CCAM dans das_etab, ni un code CIM-10 dans actes_etab.
- Si la colonne "Recodage" d'une ligne est vide, ne pas créer d'entrée dans das_reco/actes_reco pour cette ligne.
- Ne pas retourner les lignes entièrement vides.
Réponds UNIQUEMENT avec un objet JSON valide, sans texte avant ni après.
{"das_etab":[{"code":"","niveau":"","libelle":""}],"actes_etab":[{"code":"","niveau":"","libelle":""}],"das_reco":[{"code":"","niveau":""}],"actes_reco":[{"code":"","niveau":""}]}\
"""
PROMPT_RECUEIL_Z4 = """\
Tu es un assistant d'extraction de données médicales.
Extrait les informations de la barre GHM/GHS et de la zone décision de cette portion de fiche médicale.
RÈGLES STRICTES :
- Pour "se_coche" : retourner "SE1", "SE2", "SE3" ou "SE4" si une case est explicitement cochée, sinon "". Ce champ est TRÈS SOUVENT vide.
- Pour les valeurs GHS (nombres) : retourner uniquement les chiffres sans point ni espace (ex: "4169" et non "4.169").
- Pour "accord_desaccord" : retourner "accord" ou "désaccord" selon la case cochée.
- Pour "atu", "ffm", "fsd" : retourner "oui" si la case est cochée, "" sinon.
- Si un champ est absent ou illisible, retourner "".
Réponds UNIQUEMENT avec un objet JSON valide, sans texte avant ni après.
{"ghm_etab":"","ghs_etab":"","ghm_reco":"","ghs_reco":"","recodage_impactant_facturation":"","ghs_injustifie":"","se_coche":"","atu":"","ffm":"","fsd":"","accord_desaccord":"","decision_finale":"","nom_praticien_conseil":""}\
"""
# (y_start, y_end, prompt, num_predict) — légère superposition aux jointures pour ne pas couper une ligne
# Z2 finit à 0.415 pour inclure les lignes DP+DR qui sont sous le header "Codage"
# Z4 commence à 0.822 pour capturer la barre GHM/GHS qui précède les cases SE
RECUEIL_ZONES = [
(0.000, 0.325, PROMPT_RECUEIL_Z1, 8192),
(0.310, 0.415, PROMPT_RECUEIL_Z2, 3000),
(0.358, 0.815, PROMPT_RECUEIL_Z3, 8192),
# Z4 commence à 0.800 pour absorber les décalages de scan sur la ligne GHM/GHS
(0.800, 1.000, PROMPT_RECUEIL_Z4, 3000),
]
def _ask_zone(zone_img: Image.Image, prompt: str, num_predict: int,
timing_record: dict | None) -> dict:
"""Appelle ask_vision sur une zone, parse le JSON, gère un retry si nécessaire."""
raw = ask_vision(prompt, zone_img, timeout=240, num_predict=num_predict,
timing_record=timing_record)
data = extract_json(raw)
if data is None:
retry_prompt = (
"Ta réponse précédente n'était pas un JSON valide. "
"Réponds UNIQUEMENT avec un objet JSON valide, sans texte avant ni après, "
"sans bloc ```json```. Voici le schéma attendu :\n\n" + prompt
)
raw2 = ask_vision(retry_prompt, zone_img, timeout=240, num_predict=num_predict,
timing_record=timing_record)
data = extract_json(raw2)
return data or {}
def extract_fiche_recueil_zones(img: Image.Image,
timing_record: dict | None = None) -> tuple[dict, list]:
"""
Extrait une FICHE_RECUEIL par découpage en 4 zones.
Retourne (merged_data, zones_timing).
"""
merged: dict = {}
zones_timing: list = []
for idx, (y0, y1, prompt, num_pred) in enumerate(RECUEIL_ZONES, start=1):
t0 = time.time()
zone_img = crop_zone(img, y0, y1)
try:
data = _ask_zone(zone_img, prompt, num_pred, timing_record)
except Exception as e:
print(f" ⚠ Zone {idx}/4 erreur : {e}")
data = {}
elapsed = round(time.time() - t0, 2)
zones_timing.append({"zone": idx, "duree_s": elapsed})
print(f" → Zone {idx}/4 OK ({elapsed:.1f}s)")
merged.update(data)
return merged, zones_timing
# ─── Traitement d'un PDF ────────────────────────────────────────────────────── # ─── Traitement d'un PDF ──────────────────────────────────────────────────────
@@ -420,15 +563,24 @@ def _normalize_result(result: dict) -> None:
# se_coche : normaliser "1"→"SE1", rejeter toute valeur non SE1-4 # se_coche : normaliser "1"→"SE1", rejeter toute valeur non SE1-4
se_raw = str(d.get("se_coche", "")).strip() se_raw = str(d.get("se_coche", "")).strip()
if se_raw.upper() in {"SE1", "SE2", "SE3", "SE4"}: if se_raw.upper() in {"SE1", "SE2", "SE3", "SE4"}:
# Format déjà correct
d["se_coche"] = se_raw.upper() d["se_coche"] = se_raw.upper()
elif se_raw in {"1", "2", "3", "4"}: elif se_raw in {"1", "2", "3", "4"}:
# Chiffre seul = ambigu, le modèle confond avec le rang d'un DAS → vider
d["se_coche"] = "" d["se_coche"] = ""
elif se_raw: elif se_raw:
# Valeur inattendue (ex: "accord", "désaccord") → vider
d["se_coche"] = "" d["se_coche"] = ""
# accord_desaccord : forcer minuscule + alias orthographiques
acc = str(d.get("accord_desaccord", "")).strip().lower()
acc = acc.replace("é", "e").replace("desaccord", "désaccord")
if acc in {"accord", "désaccord"}:
d["accord_desaccord"] = acc
elif acc:
d["accord_desaccord"] = ""
# decision_finale : forcer minuscule
df = str(d.get("decision_finale", "")).strip().lower()
d["decision_finale"] = df
if ptype in ("FICHE_ADMIN_2_2", "FICHE_ADMIN_1_2"): if ptype in ("FICHE_ADMIN_2_2", "FICHE_ADMIN_1_2"):
for date_field in ("date_concertation",): for date_field in ("date_concertation",):
if d.get(date_field): if d.get(date_field):
@@ -611,62 +763,75 @@ def process_pdf(pdf_path: Path) -> tuple[dict, dict]:
print(" → Extraction en cours...") print(" → Extraction en cours...")
t0 = time.time() t0 = time.time()
try:
num_predict = 12000 if page_type == "FICHE_RECUEIL" else 8192
raw = ask_vision(PROMPTS[page_type], img, timeout=240,
num_predict=num_predict, timing_record=timing)
except Exception as e:
print(f" ⚠ Erreur extraction : {e}")
duree_ext = round(time.time() - t0, 2)
page_timing["duree_extraction_s"] = duree_ext
page_timing["statut"] = "erreur_extraction"
page_timing["erreur"] = str(e)
timing["erreurs"].append({"page": i, "phase": "extraction", "type": page_type, "message": str(e)})
timing["pages"].append(page_timing)
result["pages_traitees"].append({"page": i, "type": page_type,
"data": {"erreur": str(e)}})
continue
duree_ext = round(time.time() - t0, 2) if page_type == "FICHE_RECUEIL":
page_timing["duree_extraction_s"] = duree_ext
print(f" → Réponse reçue ({duree_ext:.1f}s)")
data = extract_json(raw)
if data is None:
print(f" ⚠ JSON non parsable — retry en cours...")
retry_prompt = (
"Ta réponse précédente n'était pas un JSON valide. "
"Réponds UNIQUEMENT avec un objet JSON valide, sans texte avant ni après, "
"sans bloc ```json```. Voici le schéma attendu :\n\n"
+ PROMPTS[page_type]
)
try: try:
raw2 = ask_vision(retry_prompt, img, timeout=240, num_predict=12000, data, zones_t = extract_fiche_recueil_zones(img, timing_record=timing)
timing_record=timing) page_timing["duree_extraction_s"] = round(time.time() - t0, 2)
data = extract_json(raw2) page_timing["zones_timing"] = zones_t
page_timing["statut"] = "ok"
except Exception as e: except Exception as e:
print(f" ⚠ Erreur retry : {e}") print(f" ⚠ Erreur extraction zones : {e}")
data = None page_timing["duree_extraction_s"] = round(time.time() - t0, 2)
page_timing["statut"] = "erreur_extraction"
if data is None: page_timing["erreur"] = str(e)
print(f" ⚠ Retry échoué — raw_response conservé") timing["erreurs"].append({"page": i, "phase": "extraction", "type": page_type, "message": str(e)})
page_timing["statut"] = "json_non_parsable" timing["pages"].append(page_timing)
timing["erreurs"].append({ result["pages_traitees"].append({"page": i, "type": page_type, "data": {"erreur": str(e)}})
"page": i, "phase": "parsing_json", "type": page_type, continue
"message": f"JSON non parsable après retry : {raw[:100]}",
"retry": True,
})
data = {"raw_response": raw}
else:
print(f" ✓ Retry réussi")
page_timing["statut"] = "ok_after_retry"
timing["erreurs"].append({
"page": i, "phase": "parsing_json", "type": page_type,
"message": "JSON non parsable au 1er appel, corrigé par retry",
"retry": True, "retry_ok": True,
})
else: else:
page_timing["statut"] = "ok" try:
raw = ask_vision(PROMPTS[page_type], img, timeout=240,
num_predict=8192, timing_record=timing)
except Exception as e:
print(f" ⚠ Erreur extraction : {e}")
page_timing["duree_extraction_s"] = round(time.time() - t0, 2)
page_timing["statut"] = "erreur_extraction"
page_timing["erreur"] = str(e)
timing["erreurs"].append({"page": i, "phase": "extraction", "type": page_type, "message": str(e)})
timing["pages"].append(page_timing)
result["pages_traitees"].append({"page": i, "type": page_type, "data": {"erreur": str(e)}})
continue
page_timing["duree_extraction_s"] = round(time.time() - t0, 2)
print(f" → Réponse reçue ({page_timing['duree_extraction_s']:.1f}s)")
data = extract_json(raw)
if data is None:
print(f" ⚠ JSON non parsable — retry en cours...")
retry_prompt = (
"Ta réponse précédente n'était pas un JSON valide. "
"Réponds UNIQUEMENT avec un objet JSON valide, sans texte avant ni après, "
"sans bloc ```json```. Voici le schéma attendu :\n\n"
+ PROMPTS[page_type]
)
try:
raw2 = ask_vision(retry_prompt, img, timeout=240, num_predict=12000,
timing_record=timing)
data = extract_json(raw2)
except Exception as e:
print(f" ⚠ Erreur retry : {e}")
data = None
if data is None:
print(f" ⚠ Retry échoué — raw_response conservé")
page_timing["statut"] = "json_non_parsable"
timing["erreurs"].append({
"page": i, "phase": "parsing_json", "type": page_type,
"message": f"JSON non parsable après retry : {raw[:100]}",
"retry": True,
})
data = {"raw_response": raw}
else:
print(f" ✓ Retry réussi")
page_timing["statut"] = "ok_after_retry"
timing["erreurs"].append({
"page": i, "phase": "parsing_json", "type": page_type,
"message": "JSON non parsable au 1er appel, corrigé par retry",
"retry": True, "retry_ok": True,
})
else:
page_timing["statut"] = "ok"
timing["pages"].append(page_timing) timing["pages"].append(page_timing)
result["pages_traitees"].append({"page": i, "type": page_type, "data": data}) result["pages_traitees"].append({"page": i, "type": page_type, "data": data})
@@ -705,7 +870,8 @@ def flatten(result: dict) -> dict:
row["dr_reco_code"] = (d.get("dr_reco") or {}).get("code", "") row["dr_reco_code"] = (d.get("dr_reco") or {}).get("code", "")
for k in ["ghm_etab","ghs_etab","ghm_reco","ghs_reco", for k in ["ghm_etab","ghs_etab","ghm_reco","ghs_reco",
"recodage_impactant_facturation","ghs_injustifie", "recodage_impactant_facturation","ghs_injustifie",
"se_coche","atu","ffm","fsd","accord_desaccord","nom_praticien_conseil"]: "se_coche","atu","ffm","fsd","accord_desaccord",
"decision_finale","nom_praticien_conseil"]:
row[k] = d.get(k, "") row[k] = d.get(k, "")
general_done = True general_done = True
# ── Comptages et durées agrégés sur tous les RUM ── # ── Comptages et durées agrégés sur tous les RUM ──
@@ -736,6 +902,9 @@ def flatten(result: dict) -> dict:
elif ptype == "FICHE_ADMIN_1_2": elif ptype == "FICHE_ADMIN_1_2":
row["admin12_date_concertation"] = d.get("date_concertation", "") row["admin12_date_concertation"] = d.get("date_concertation", "")
row["admin12_argumentaire"] = d.get("argumentaire_medecin_controleur", "") row["admin12_argumentaire"] = d.get("argumentaire_medecin_controleur", "")
elif ptype == "SEJOUR_MANUSCRIT":
row["sejour_ms_controleur"] = d.get("commentaire_medecin_controleur", "")
row["sejour_ms_dim"] = d.get("commentaire_medecin_dim", "")
# ── RÈGLE MÉTIER GHS FINAL ───────────────────────────────────────────── # ── RÈGLE MÉTIER GHS FINAL ─────────────────────────────────────────────
# ghs_final_apres_concertation est manuscrit et souvent mal lu. # ghs_final_apres_concertation est manuscrit et souvent mal lu.

View File

@@ -140,6 +140,19 @@ def _normalize_keys(flat: dict) -> dict:
return {k.replace(".rang", ".niveau"): v for k, v in flat.items()} return {k.replace(".rang", ".niveau"): v for k, v in flat.items()}
_LOWER_FIELDS = {"accord_desaccord", "avis_dim_final", "decision_finale"}
def _norm_values(flat: dict) -> dict:
"""Normalise en minuscule les champs textuels dont la casse varie entre extraction et correction."""
out = {}
for k, v in flat.items():
field = k.split(".")[-1]
if field in _LOWER_FIELDS and isinstance(v, str):
v = v.strip().lower().replace("desaccord", "désaccord")
out[k] = v
return out
def _get_cat(key: str, ptype: str = "") -> str: def _get_cat(key: str, ptype: str = "") -> str:
k = key.lower() k = key.lower()
if ptype == "ELEMENTS_PREUVE": if ptype == "ELEMENTS_PREUVE":
@@ -210,8 +223,8 @@ def compare_extractions(orig_list, corr_list):
ep_counters["json_non_parsable"]["dossiers"].add(fichier) ep_counters["json_non_parsable"]["dossiers"].add(fichier)
continue continue
o_flat = _normalize_keys(_flatten(od)) o_flat = _norm_values(_normalize_keys(_flatten(od)))
c_flat = _normalize_keys(_flatten(cd)) c_flat = _norm_values(_normalize_keys(_flatten(cd)))
all_keys = set(o_flat) | set(c_flat) all_keys = set(o_flat) | set(c_flat)
for k in all_keys: for k in all_keys:

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -107,7 +107,7 @@ endobj
endobj endobj
14 0 obj 14 0 obj
<< <<
/Author (\(anonymous\)) /CreationDate (D:20260421112058+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260421112058+02'00') /Producer (ReportLab PDF Library - www.reportlab.com) /Author (\(anonymous\)) /CreationDate (D:20260427123928+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260427123928+02'00') /Producer (ReportLab PDF Library - www.reportlab.com)
/Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False /Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False
>> >>
endobj endobj
@@ -118,59 +118,59 @@ endobj
endobj endobj
16 0 obj 16 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2001 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1990
>> >>
stream stream
Gb!#]gNM:1'Rf-po[^Bb`K?0u2K-:U:-),''%3\Z`?N.?d(quW9W*A)OtFiiYq4gI_?s[m[*RU?SW+cuWs:)G*t!\XNR5X7JdA$s,9e[IB_2H;7_Rt+0p)MMO[2Huj>%mHaAbCSN6CAV;bnPJ$`^cS$4mb?2'@F(,EMmudo<`9VW_hU=fn"U/XjDB/10uGRiG.D[*=NZ#2K;No_^4Hd.;bLIA$N;r*d=p9ja[C:GdBMc@%+[o=K=UEMZg&/$6;oPa0rqWb7sl-moE$[+8#dSg,?oQsB[rJaOpbI7YN"T;OQG/f*5N6-q:Xs1+J8X?InCs)n+9[jVgq`'foeBr5Ied7k/n+A$iN2101iaKQ*ZN<6RF7a#42b@)6&nXEf]Nks1lGs@]%j[te+#f7.n_F^(*$(PQt9c,0UU-q3Jf*&HSP,d'LBu1aakSt;A*'M%#,oOl[+TJ;+,$MUWeZ0a6$p,LG%Y2Mg_m\n&:ttYbJ[VWN5U1$d%1hlq<tjl##bcuUl8<R)V'gc)SiuO_BC;<e8@*sUf(A_lRHM2i'C7?^]q+j@/#tA,Qc8p74;+O7c"<9F2e]gpbdQVbN:AS=KXM,c#h[J/RQT[]`H(:Hn5aY[=/J9*>Xa%mQ%qk9_5]>qnpcp\L[AogLa=bej=a17-3B&.9(t(UbMW,)Oe[h\fHPT7Io^M(bTVQuoUnVcR*I5j_OJXcXOh47Qmp*d;f"MR&?)"lGOso`3O&uJFEb0bCi_G*'l"W"N[0-GJuX)qQE+$"T'fFh5a1Rn?`4Yg>6NfU]/$#%W^+qWY0)iF<B]VgZY4Nl^=4IG<fXc-rtmhK:.P@U+1,pLE130O`1/1DS%raTIM6UfHoVZCT7]MIBAa?jo@ro!dVA,kZb<=1ILfF[QDo'W%i/4nE8>tJD>d;&X-;4AD526sFq*u8,*pP7)E#=+Z?'S@TOUga#W"ed7PW*+=T+@m21:G8FQL?-X@X`BPA4Ck^",VM)4%/l.(*oGe16G8-AF&oNm--)aNE%%O`@G)#]eKGe,u#=WZnsc<MkOE>;aAhU/e!r_#^C+$I0B:W>Bl/hs\#Q8Z9g^YVT+=84fVrcu/_#ZZAsCE1b38JUP%G0$89OS<("q8Mj+bT*C*8iQ'>Bm^^:JS4(IaAHes#j%.Pf>WDW331^"'HQWIo,`YMn\<FW`6F3e?GB`cRci%U++:j*Lgg"C<TeUmt/?:3[Bd=*&3Jr@2*:#;J.`3reS39PPR_ls%(cYFOoXOQ:Lr1HJ9Fp/kT]A`^)<&B0lhsRMD%Q26Bn=$<LSs2k0ZW:XQHWRn'H_M;DI/k?-^*\:Osrr!:5o-Qm3HE5,ZVBu9prRTbXpO(J<P)*3o$a<l(6!"a(-s_A2;29$K#A$a(5$mE'klA=C_jIl#Ddo"n",'%0>bUVbVP&H^u-A<:a,$cha@WUS.JeMA&[n%,+K"W=:iP%[UrqocE>;9q_@RU/TSp&2;?/:]dTrojL1@IM6^#STeJq%@60kg?hiUC:h+K5hitO(MLFgg9\;[+m,S^l5O#:M_eYtP,<!&J#-["iT8>'-@#00'aQ.#RK*R?p9LFnfs=/r7'/?3F;mVcA5JjEP[`m!\_0`dSf?J"/(?QnR5?TC1(6)1j5p/&#34\#rU&P69D<B^i5'b5oaisR"dOXH/)CI`rsl86jkGGR7$e?F6C7(,+Ju1G/P&j-%1_\:`.S9]_-(&%n7M1clg8Y=p%J7Uk5Fdie1Jpg,<R<tL?bBG,0F_<km[11Sl<)8`3G+\)`[UJ\/JV5DT:RgKA.K#DKWB(ff/^[e2<p'KN>:AB7n)8#PEQ-&S3l)>**Ye>[:ZsaZ-MbCLsqUBTZG+2A-?<\cHQ"g#.m]Ag0WZUUA0pR&mmJ^'B.ucg#WdSZC>Jj05#+f%Pg`;Ra'?JH9Q\^UIDUb\WRZlALBU8Qe&l]"*:I["?B!fdb6MIF5E#cDinQmIm8l&"5L-'2dJtOI;:V+a(SAFg&:PV(h8q4+8VH^&J';+F9F~>endstream Gb!#]bAnL]']&?qg;QXKgX=WQj]roQj%Seb(h_q[$CeJZ$k4%4PKD^Ce.8s?>:j5?V@5;m3qjW-m\(d0lN\l2mrO0=NR?ELJdA%>"!T:)B`&#Ca+L8jW?VQl6@g=OEg[IbPjYH=ES8!M*,#Ia6$;p,!s0[G!<b)q";5*VRd0V:%%W?Slh,!kT\6C1Ek;&ES=s)?MC`+!UK[_TSpk6DHMYtI*%8Q`]jIkLZe&mg'91nB;]eX'r2q,I>cEU$V%m'`<2mR,HLg<dEj@Mt)tS^u)$5)<fbn0/ka"![(XB!@LU85Ta+?B(#l:Ct57\BeonN\;^5bAdQ6ekXQr$AC.O0"cY(Q3D8]jtHi&_$o_DWMn$J`oD/VbK$LLF`35B$.6$m$4c]BLLf=6_%t&;E.[::c*Li(P:W@?aTF'(ZOe&25k2W`KS+$"oKs;p`H<o^HIS.&J[@s/"s(3kOV+Wuk%E3uf%0JAhc2G3e`r]CkfIG,t4",AP@1&+5n<'C)Y)Tncd>20!YN-GS3WT=1.DpJ*-4.Udq:4ap'@fllBY]1[$SVnL0o.ZCE.I^^beK\>YdH(JlE;6cP7MfM,'GgmR`FU.1;fZg^n5%ZjpWpj&6-[OT-`BeTN7=<aRLIYC]l85]MJ$k+0@_Q$cP11'4(EkfT!Q>,:4.5ZimqfPYcri/@OZ[c9Plh/1LgU]KBTWF?B9L_#R%U%RiF\jO9g&ecCm+*Z_+CS<l.ofk?VW0TKl0[Ediq/;H*.t3lUV)5,cI0PA\hP_S(SQg9/J5XCoL@sC_?F\h3Ie8ecgYSp=4nNlh]#!S9_`ec(uj%[WXJ:rl<XtF@$$ok,<ElK[[m;-K[.9hZQ[fp7$$UjNDO6p`(7\4p-RjTAQN$PZD:4RdEP=pNrjQ18Wm)4BPpX^eO]7eb):TZ;0Qj]ob2n)`GWiMHIUHe*$fZQ(]`"!M+aI8!jm?'u`j@Yl5lhHM.oRlIps"=VE(bPBpO&]Ja>!>F)_mBXM-Be16J9-AF&oNm--1aP,67O`@;%#dW_0l2f('<=rKm.FZ22SXO"4d4*MIiIK?Q%HeY&Xr(c!he`c$,W#]JfGQ)/Ua4At(r(KVfr7/p$.a"kS><c9rEQ_s2E2fAbG/b#h0g3#SmuaW%IKcL/AY2JC+-r>-D(fY6-Fo>jBHDCG3eLd*,;,K#D$hAIHcIJKmn5mo(C>bEkEc\)Y#L&8iefkO3:N\-V'/Ll?!=E!`D&8@6W/#@K%sqT>'rOqf/Rn8<+3c%tZc'6JcfK%Q+ro3E:is@+9=Ka5jB8%\!RY0Dsc`\SIQ7kJ-BT[e>UQgO-W3:5'oaoR"[o,h$DGm]5l@[.0<j@(Wj@?gd)'D.(.P3^>iWePp\;AqFMKR;XmL@l&gW1PK<pI6G*:Tfa*j,p>D]ZDG?"#.u6I^&6AOmq6R%",L^+9)mRL1h.6lT0RCJ$(!p[$7*"[#MnK^%B.q^kA_H>^V6(7N=Q.c'`^iK'qdcbW%`-6SuVN;9Xi"3>YV]$l9jt4<uu%aS*C+C2HMse[l:*H.AZr<(YI`kPdmM@S)%F$R7MRJK<Yk,s'>q^8X_!A_25khWBg0YOYkI$NB5mMOdd5QV[92%3aJnHC#Sm(h)e!;6_S$"6R'EU"$^,)s'n#+%H$%O0>@&h7ggBLgL>rRL9_eSDOXbu2L+n=J@2Q;FU1BWft[]3ffg[+hlP4:6Wq]K9U?1ulOp!'Tb1Qgn9Xm*lcj*`q=a+9qYfVegb6oqMbf`MKcG>2RLKa"A$d,RLbp&1r%bo)?B)-9haYMQ+2`P=[MN@,ASl)jTjb1JCiEJo1jbKXPhEie0u!U*H#Y\bPJA)SPhBC53O>D9\eo9tcR):G^FHnO@i_QlVQ/mfCOKQ-Z"=lnpK*]UrU(5#<u3bcrN=EM#$g!ahJ"^CB="D\>dV.8b0"ucc-?-o'niT!X7U,N7GCQtX6.L1gP_plki8I47-XJ55#-ug1]^D&NSa5]_Q\U[q4S?/rW=KbH(+~>endstream
endobj endobj
17 0 obj 17 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1684 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1667
>> >>
stream stream
Gb"/(>uTK;'Re<2cm.odWkN'97YBs&$_\$,:X!@T1be/,@"Xm8rqhtqY%>YZ@deL(lt/#7R!WpsYB4WP*%3#n7C1l1CP:QbkhR[VPbIjf;1Sn.cVP=:rYX#aW>JYZ$RsLr@N)8nN&+n*Kf=3#_a&d;UNgV]3MJ>X9^*$>5)^)?!IjlkqZb$s;#E5Bij3o1dqF=8V9Aq=KJa2K[1\q&k.@&V+WV@'84\c;i#Ecc!,\%cp8oK4?R7$AD&=A$@X_o4L+kFFB-sa'H'lM#6>ONN[42]jCb<!5b?JcQX[HreG%\KMALPV\M%u"a[@8uU3c2BZPA;f8D_Hst>t&6b#;],[el2_V,>9*jEQCgRjG9c[.[tP9\X8[WGtqEOK@20&f@/[=Lsg`d8=D3Rb9gMZ,t]5B`VjgR8d,r:9DR?r$(a9c%R)K4QHqu(>7<Ti:_9UTdo0sT^\fn@/67W'FFA,ulh-`5Gnc43=!"'DdTG<g4Q]j'BI+!<eggclpJee15FDYg/g$8,mHS;GX<%W>BL,/?,j<hjMHY:9qf+DKLOtDcL$G"Wa?(j)CmH`D6!I/>OC$DA]Q)fc5Mfpf+BUU6mXh=ngj.'_-]-OO-+\A)^YJ"uKRl_UI)K@(oDno)I_Le\^pGdkN9:$(_[(>U*KKH.oup2bn'P\^,'JLdr_+l9"`Y*Ma1WK#.^J\?[mT9j6KT]*6fo"Jk.J,ijq:"V?4X$`#]!Rr<>)m/K<A+6[1$T2!3aYnXm,/XQ]j5&o)20ZJ;\H-4u\-2kW<JmRUfTu_Q+\"'EC5sOJ8uEVYk[6(9;fSPhcF3IMF90[cYGcn;oAX=eM.J#]l8[n0fb+MNF2k[C:%)<RWelEiP&*?!YuOgU0usBtL`e8DHs2nY@ihlFOr'HG\Y+e>tkT!+kjgPNET>rp.Z,VEoa#A/9@:E<*h]7WWBlNEa:Ea*CMl8\\DI::)n>10Gk[2-AIp[!O5g?-lEo1'$fc1B&Sgc_Br01cal.Nf'>jH^4Z);E1=G3^=d:GN<QMmfL?g<<4eWC4%`V8$htMSm4tP?R@-tGC;0V.1s#2"6;=Lg/B)$1DR<>oqtXl"cdqe"Q3k`n`":A5<k`G?&iQ]\@Xd=7Z"<2JF65T?p3TXNa$Yi<d=\(cD'oD)ILcSc(_6lT"TbRPkh<]-u[84Xl9?GmS-a=\C+:l!;#&04uo6/kA9R"l*;oY7CfTSJ;V]T(I1(M\H8IP[p2R+e5qpl\J7a_COV8t^<bM*Z8A-u-=<P8)XfPCkE\cs)@q?.NVCof0#<G4bYfiBWk<$gZAhMpjl\,9<1*,TVV91N.aFm3pF)$=72^<L3^FIW60K#*JdAH0dVY1['@Y4o&G*,g-H.)]U67bC/bD.J'n(#H;!mHa;KG$$7I2VD]k-sGQJhhImY=o!ieR_%JS!K_T%R>&kW`o%DFr"&YRI#lDf6N]/OQnS$jU!k<"!NV!GJCB2!Y<q+)Ml64\Df**-YVAs!r!uglib[4i$ob4b35]p0cCq^)i7.B=;..h<aD9os"*=EgIlRD%+fLnJZ`SG+/ouYP=&>!"LdX.W`\s2ZRq)lO0p<lO2J`T<ed<Ia29]&\7UGgEYFG4MZ9c.ub@;Yufq2q0M-FQ_h*$'FC+OqemBAcJpNA^u5gkkB@$cU'"`Fn:Ag;r#Q-PgH?*cGC)YcS]>F92ncC:Yl~>endstream Gb"/(h,E&f&:`#5Th!fS<.2sLN<[j)O,l2d4u&6mBjf@6^]cO-qsR>[P%;V=@eWds^gnQbG5%ojeU"X8_#W^9cMq7T!-k,dGK1P.!g4LQ).XjM!HBmkH\>$e6(h%B@3>`/=:(hc1`>E9p$G9p?is"eZI47;?sE\DE-pai`W3osD`;T"nf8uoZOK+aQeb%R(^Znh\R<]0:eAJK#0hA*m<p=Z,/?0lS5BXeE<Oi#E:[+_B!7(>6>\h.A3n)RN"&'",)hIam0Xu:<^UZ<ZIPrT/oNVRL.b`f$@/Ar82m^.*>9"GEC@sRFFoKf!1APqhU*)"q!3"d6rt8W?=?/TPS-WA5nFY*M!YlS'foap!/W%-[k9^P1S!Ler?*sinV.tIJ=q@+E*Tp6H(?s,!RcaFI^^/i;@+XMQp(+@K'$cTn'h2XnPj8-JZtCH,nT=M4m(&`Mgs1JI$s7q=*s+[?G.5P7u>ko%j`5RQFHT!`K:T"7#BGI(h=4Wa^XqA(&55I:R=#`lZp'h(_i_k**sfB0-17>oZ5A=HDh<"'OP:u:Bsog;S6<hT%AUTTLA!f"Jc<npNI/"Go/60L?r3_oK<+XjtKO&_(WUsoBQ.Sa9_s6-pu@(??UmLe:6@G0Hu\EN7!$FIMb?XI[KGIATN=/]E8s1$+U1<q\hJR%Z:Q?]C&s&AAPQ5h'M<^+mH&_-0_6Ll200\l(oPs\in-7Tk[aZX+[S=+KZ!`V?+.5d+\KKftP1I[5fD)33Q!ZZ`&9D\P[U>lAkHAE[!qQGdT=]@2K(-*sTkW;fOsuoAq!;bb'H=E#$G<jm3-WU5BK^8L0,Q!)er-kcR^S@L?h;g084#dO6%r=j!X<6LK2:Zr.UlMl?Wj)(+b!]\56UahNlX?5uCqE+2rt*?!Zq]TPU0Ggo@)T);ea:`Te*,&&>UdWo"HY3I;Ome-_@,n(9n^b?g*`dbq5Bfs+g-R[`aYi+RkhuL[;<_Rb*NU;Jri@g8CL!cAI_1l*uB%>kfl/ZYMAfdqoY"FN1OBG&4ArX6-PAE%s8`1S&I<FOe]XnL*S"i$n\)D,KhER.f(b)#G"',d3La/441S\!C%?UorGVDpWe\[CsB8,(qZ<<E&D\?V:JiHZb*6P(-,-%)9Y2,PW^Z4`=cIE7kOj;q,.*r1EM1tEQTP&h]<JsU3G)U\5csJm,Qfufn\&Q&DcoF<ur8g$4NU6\G47o,^P+?aZrQ\jW*BNW?U@"mHa3D3S,s([18bUl3^NSi![6l%kTbH6\kaGb&X%PdI@G#^XNY-L/$?YL'MQ3^GpCp`;R\mcgl9]?kY%jWElSLobE8-Ee/9?'-@!R).'Wfs<'*ToWF!Ci7[i?hFfmff*_1Ns9_b*rdfRBmPrjt?l:ts80<6_T9q:Ra!-AT_(r+u(<EYJb5$^EPdcLEik$PhtB+Ykl]W-Io#C>fOt>p,AZ1gm.g]SJeD?VY73LM)qij67iR2U@1r'L<]#=k:jT1cF\Vbl.]$,;Zdq\1^%&:ZJeB@eOLS?[`;$S<6\m_lP',T1Srj5/164)TDkk2+Dgp%_M'=06glZPm!/K`s>Io*k)ocn?sRSE#LH6`-8<_k6S8d=R*'Y%&9`;qsCGep0jZF]5:_bWU8_495gF=<ci7SV^N5k`nlkR&Vs*V/d@%SEo;9T$q8pd&<-SjhJpf+~>endstream
endobj endobj
18 0 obj 18 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1684 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1707
>> >>
stream stream
Gb"/)>uTcA'Re<2cm-.YBVd6$Z?Tl3fk/FJ2OJo%-Bk`daVFsfB%m7]b$U=&aB%X/jWTfga1b&FpKktid@!g!oS;T/Y7lRQa6:u,72/RGK.+b[`@!'k7t6P4M3J-u5sRGnS7/E!V;#]?<a65%c-,BqFKZXg!-,iZi/F@X)PYa`h0d]^ZVLnT:E:"0pSf<I=;$NS/h!LCO/oKE!g-V!ZmS&1pa:q`Xs4!!notW5GV]7ERN3H?:<mH*"*ZO>L):'G<oK5]#a/UmPZ]7s$^?JZ1Ie0o55`e@FHNn!"J2]j,:VnNWbOqi0<#9bd[-/>V3K5sYPR_N#RdBeV.ffgrA)4urKY\5Js'Tsgn>,S^s%c(\[aG,dX4g6@uYHfo`V<5oNg,\PdSa6<B$cq%=)9ebZ]ER7L2sjW6B!oN0suY<$sJkS'q4=rirY/!'!fd4d(c`:kUBH`EE6EZP&qg6)!V2eJX,b\^7`i]BU<(Ep4.Q:k`Jkg&`B_c%#\7XJ!/Ifk>jreode-U63-ZHfnbULe3IGJ)&PN6*hN:PR&JuBdaj<WM<e3<_J-eXqb`q$#sC$SceJ/k'VttfO>.4cFc92Pr$gBA*M4[j&\4hD"r-+lb5u-Z-WR[gQm,Y*QWVR3P&[Orr/EG=/0SuBPe1SFcqn[ir]Piqh4EjcAESqIR(bmGMTOfjWRuPQhQ-L.%@Do&KVM70+@eok9YC[AOTapoHBd_/I$o.\mgNS:]5lQq*M=[D19*A.O3U8YZ1t*US(ug<7JKdr11"Qb>`u'g,o?-lGK8S8rpVd*(nf!=Phn!'LOXS&u@8F'n@jt<4kaCFT=WApZ_6\Gs+ri%tj"Xl&I)9kVjRb>)OUIO6`JoPcc.flf>qs"#"7aZs#&Q=+c7#oK[_F$cU'[I.qTN:BM)A8Dg85IXN#2jtKO&^b=(-F7O][X9eu]./]2T2j\=C)2?=GgNB''WR+/i$MJ+`DYdFYP\p.(6>)j#H[=MDDiI>,j`Qd$2(!!5a6_BE82D>s_bc=@PRTr;@ZWJNd>1'W_:02B.)md8T@HY9UK2ugQ,5hc>59HTAS(V_5Dk\r9?$%`cBib=0n098r#@CP5FAT-&>h^b,9[I\$A;QDIIY[`Xts`!]4qlq2j`h#lD@SkVf!^O.`Z*&.@5n:j0IOuYh_&tLJ&#8s*8D]=(b-`STO3^)[B'k/8Eih2GT^La[J6d)cX&.EhLW2fM`")4Ch6_nRXO;kq7a6/pq;J$V`&>*OD%&SDBD><-;mKBa:Z#fD,8[*)5J2G]J6kq`[#t4<d,BRSp>H:dM8bUeaLZYW7VFZqXEB%S@`4A8-SA8TYlA`>>k!e*-A7-Tff"T:LORjVp>bD'(pdY`jTTjCNiXdF\!5l0S'3m.+UJS]'?@R:bd'DBgfegg\bAeh_&ZV:PH4bsL0L]ltjU[8!i![Eb8i$`J1gA>u'W6+=Z(r`PRl0XPi3'LQYY98;$cedO'U/#Ql^@O;A!-$>.S*0u-,&.KN(RfEA]+koaKUd43ZlpSa^B_[(5LAfZ6f+8BO*&-&!N0b=iH,=a!iD)52Mh^Qqj3:"[Q9`bV\J#ErU>\j(ll_[`lp='6gtE#\--Q?q>;cn7XXfHKfZ$'8<5\a=ZU#+i%CT?k@$&G6]eq]m)2W37Kl)@U-FZ2'>Bu4A`NNBI?cNuZH-<ht'akrY$^e@Z/H~>endstream Gb"/(?#SIU'Rf_Zi+#t6*5<ru/Tm<'>s:;>ku.T"9:`k(Pba=kDZ>0]5-?/8'J3n\MSUtZ>NXo+\`=KNFA*9$0:MjS:(V^nUL0$1U(#""L^G\0I"J);oPHu(UaA&tM@(U2MJ9"Ue'Bl2:b/4gg3d8bNp^c!0L.sF/-Y5#J-K]#6oXR.;#;^s!GTIH+tMf:/B!Xk9_fosf"=,-_q%3pJTYa/T")'`bskspRZhY:>*C4772SQr1^jOjc*3pOba2n_8/"7`3'hJCY.19W4K!*pr"[3>$Cn4XB4o45es^?0_$EsE6l[oP'cBY)(32392]#Du2U:jXILqL5H^t?]'/?A[*t:g5.=#7S8Qhe[+^NkT#>ls;"UPi<rCE:Z[66`+DO4-&K<5D@;()LFI`#)e)h.Ta\mDI9oBGPbq/9>Q#Os2dp+(trf4_7'miV*H))N!q/D?#4c>+n9-BEnsQfWY,\li;ldac7.)D/hRKEV8=6.$U3Cd"qVE[X9=KZ\``6s`I4HG+]4%pFQ/6GND[jb<=*mbp2W"2Vht@i&SMNLcE[@@EX=?_ZlLjS:Fc'*aW@j,s3!f`V/Iq>34i!RnpP(n:!#%jT<GG;uahC<sAUGN^5d,4u/gpmT]_22EK=4mqW15o%V8l1HBE#u0P1Y;_kBBJSan]uaMG'5?Sr.N2`J79G]!%1]tD+<(`"7=[>:kI'9<UR-ThVXjDc']>^UUYiCZ-+jr0.V,6P(G2n&>$9h7%T",Fh\sOW#rPt)M:cPMX(oe<kB*u?6]]n`0Wl-eP74BT_*r2lbQn^s6^S%7Bo+NFp4Gk4iD>3GFDAI2$`o)[BpVb(;;9W$,A=]Tl3c5tXYqGB-`#BD1mY:K>hB]"=/TYOG6!lE16^i83<&g&!N&/5R:J2A[,V.<]gd'ZC5piV7?6u6m)!=a3@DDhjW\!+%5lefPdGce6=#8<SnS2_nT=>;1nR4#b@l4M4WROAroBIKJ;T"r$F$Yn!W;GbK=*_R$OH@b"i*7(anaU8R`1'Po_`P)H$U0IB*c1"ojnEU/&nqD6,7)!C?[3F,7k2%pLFTGMs03sj_TBlG]n?eR8)`0oUm.7^@WmgiWMVt!-U#gi+53!;?L<K&tML)n\tFT/@tcG=ZGU[q@]ib\<[u[!iS14<o1:5P84/i\i`)9SY"*Zgel@.>0r0??X<_DXsnn6!8;G-'aWp5h-.+Y^9$tP8\m$RI6"]Q+Z4s$M;`67h8Xe/iOQp*\&&6?6fJ"9W_9R*3AV$(7E(`#,$R%]>^ihZR0rQ9au!=J;71Honhm`?E)F&*24\+pdi`a)3l*4F60YdKZ\We04/=tiUnJV.7T'jAck;q>;[L<b$:]C#kMBUD(sbE?&D%U\I_"ua75N?!,kcuOhD"ldL>a8QmPPD?CL%/E[:-!HdF05l)i!R+D&@.Rm/1h?:aWiQM7khVpP.Y`0^K@;1o/bd!GJCBUun)Y"MD0OVuf$pr+t^S$sdVimD?P%._12G5UU\VRkH]&_+`S!$O!Qg$3Y#q-P1UkC]m(cQhc/sOk%c2gW9[?if^Q7\t8W)D)/RR!D\j)#6`s-+0]e#]M9h>GOPV6lgY"lGk1Z\0/UlM2IPX4WINAKo9k+/m,r:fG+$NphR:W*el!$jbi]&9fk"J'YjAam>iKqM2Lf%^'t;C=#7;J=4?A4A"jtY/M#ld?9+4uEQ5Htj/2:%(/SObek^GuI~>endstream
endobj endobj
19 0 obj 19 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1680 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1710
>> >>
stream stream
Gb"/(>>O9='RoMSn09_%*oAW`0dY%eQHO(No7U(cR=[ImJLs0oqsW-.*'7l*\1'`eD,m6'cKCC4HsE;i*uH-l_StEu"TY/nnECbl9L*n+0S9e0-QktcIh/bP8d(CjQiWm;`*-h1cBt;;)A1>D>M]kXbohuGitQN'.G2ZJ/8*o'UN)[9/4>X4Urt3";5[CcF_X0m&ZA7V5j[i.aG]:+G&kgoC3CGU3k$`W*r,faT-4*BM@bjce)l2$UZ$.5A9`P]9ZH=*3]]KpHlj@TiSdlf83$.70n'HSM565H9Ki$*&/iJcXrsQ3HL1S'ra@gV[H%;j[Q#2IdK)"aYNM84am%d;ji)1$9"WPn_rBo@kQ^93Ca;/5/WN9JF26i^3DIfIMoiGJEqqjr4?!Vr=EY1s<=@;&kF`?8[H0i%jXlX^"."l:nE=t92SkTC2-o>*7`DFjTVN%^noE+N]VIuPfQSs0'o?L%%DjOi9ri;tZ(,>QV0nL*C4:XB+@dbb$s)9+?NuUD?c??*^nTUgn%aXfiV'DO^:S>re@b6glScE/P%t8C<>j$+>;MYIb$aqtR_`6/#.'NE%-G]e9Pdjh&?6*S!`lCis4ge+G"*Zt3Tms'>rXY%XISM0ln5C8O5f8*RNPF?1EHfNU#Lsl/Zf1!+LM3uo=-5<?8AI8ADED`jkZ0Ec+F?[.BS+2+lo8ZRf@]kWM!jho7cf#fZYQmRrmM@p<LD]!EC+'rj\r0W9.SplSc#ue'LuHBqepZYBloQ2T8.``@BO"A"H,nlSgu5@%WL*-Ge9joSeBI76J>8bB3T/!M/JHM%(:2!NM.*E8s2!44V^njnR0bXLYUtFJs=9TbpCYV=Qta&c7CO'9a.l@,uj\<Hm9(R-gU"^?>5pKjfb?KHUjCm2(NQC)9h>]Z_a7#-s##H8jS.,jU=@OEg%,">)N`]l2BSfoqD'c,3!o=@]+Cj"[`#IeHRGSB`q^l"]\bpT"g/`IWZ+.h[W'[4hqg=-R6rRBXCrY5i+DVUF/Wd0/rKG+[#tk1A'urijok[I3McnUBdii*%*h4g)8R_7HA!29m(rJX%`7=Y=@5bH4BE4eQ,B-0<#>I.qSc/-AB62UAgLqE;Gq15B"E$9nXEc\ptuE_k=CLsfX_C"?s+43qlQ0Q5QcZDCQ[!L?.%"2dg<mO3#J%796KjZU:p&tV&EXh8O\SiPs3\o&]LmYI>-+S?eS.j:Xg=$]'OMe\8U#ps.%$Dgu&V0POAO3g*"ZsQI;F3^ZS47H@"!tO<1O<Wg/"UUol&-.P"6ui:,a?N)V<2YllAlfF.'BW1u?Gk9miA=6(\t"M#eI'(YK\1.9;\q4V%JlA.3N%1BqX7o%\2p4-m&6]VXIWAiYb\*uX;tLCOGdqD25jn9M+kMpF^uD4o=R7^L6p$GUjG/8EtUR;4"+7Y2Bg'dYCf@=2jOBr</,Uor:Q5m]^Q`&`dB$m<]gV(04'.MYFhQR28?(Jk+EZXc!_i.H^XF@e]?OE[Sj17IlLW><u1e0Ei.X%@W!Dn4iG$gnCKsl\f%(A[P5@<capuFToV:2(j]t"1A(:EAm!_j3??K];N=j0WAD:c=hng/L.'+Os5'KDBl"`FL-jrsTmA()mR4rO'Fjr?Ffur,Ebp3]=u9atZq:@CU>c,S1upeGjO]J%fD\@QP72Yu+kTA@Rn8?Bn/k^j$T.~>endstream Gb"/'hc&8h&:Vr4Th!fS<9q$3)\&[2?@cE:I:=OeUOc!t!#NNEm_;!>QIg;AX>lG)*\nU(m/=<F?*0pYO.aF?8Fc^pJ^DFGI5iR0:m>61_D+R6(R/Na^B_\#<J%WCKHhcL-:Sn8cAJmc-D@C:[CdC4jb#DLJmlJ56i6Rc3CDEe#>(W96JS(<MdfTLVR3P-3I*&YTKW)\ANs#bIN9Q9-u>l%a.qU3l/_?tA99jU'C$Z.[)Q'A(e!S_+%R-ae.;gTaob0]1hJ:9J@to_!R.>6g&Cpe@$+Q<$!R?MIi;^LIMQ?bd%Us*/NU?o+GBQ;GQ;a3I\4DkMt#[cFWi8i<=^3!RMW6NV:BJq;JF9ujAL4&0b_2.68!ut-iTn9eG1@=QH"qTMArXNApHQD!&h7q?kZ;f0]h93ROTq+#hQe--m:(k7'2Gl;$e+*Gsd';4Y(2t=MC^UNifX`g`^sKm[\bE,%boWiVRb-[G00G^(HSeh(VHAAZ];9Y-sA\mN%I'DnWgs+"!jfd^Wo7\'[l\>]\ot/#(^A*Gm6+?EYQ!L"FS8?KUo0(5WJ15)OIGfFq;:.Sc,$9.%`P:TO2_PFn;[_3>P5'N(NU-<0C\I%T+ojFAK\6EdHU[`'9u`R-`]gWBp`I*E(@^ls4ZfWAG4jCt"eAVO7[X6K"f/!HJQ^#7tVT+S.a#kku-De>'UJnGu[1;PE&rMCs:1&^I2eT*]XfjC(mB>7ffgWC#(;=q03W.l2]S%JQ<8[aM0dm\R#TZWeIAr?n0_"ZO<C48=\R]bfI>NMe^-Zm+>OJH;RYo6]u>2WAZ"^eH%+u\pGO4*-1p9`Ui!M"mn]9/CnoC;PRW^m1dbr0W)2>uYi'BX8AZHGF!=&4aPg[[bbdYLe.o&qaZ_GpdSD#%Yu/@A0Y2KL19M:?bZ7JUNP.d%_(T"WO@,5VWiH]^6Up(9^d[Vguh,D_Mk5=o^HBj"kZ,?2hj<LY+7(5UZEes`5Q=Q)lO/D$pN5-'Gg7`"Xn&;?r=_<OoDU68$(5CuS"9BF^:Ra,j!6a6_'iY<S7ZCVEPKGeN/-E8@l!b!GI+-C$4Zeb3(<ipD^?V,BSobUX\V>`6M9<#\+>,uO&+mt`]C``!*L?f4'dQuIBm,*Qu\8!"!m&8t4H.GF8_pZ>3nZ8:_LRbQFX&^CrX,f0clUJa!g7@jq*F>P:0AYTcPp`h+)PDI$6==chGamqU5@CM:4@TmLQ=%P9dpY;_%^XR9l/^U_.#fnaAn)>PH:b)nOTcK.W1dgs'XcJB_m,#a!'F%AT3[C'-\nT9kJQg<lZNen`SCVEQa,WSBR'>4X0b;8"(:sO4\8GUo?#U(HLWSmCbR>L/%>aR@:F*T2!c![2Q_eF"i+HW'o\"`<rf'o^AuumgKq\8d7r<(occLh`j'1]rW4jXUJ0sUm/S!%mG<6('d*k"DD+oodK!8Qnc2bTjM>Sk8V*:#Gd*]JP%!_XY<`pZAfCMmPD*1V7MZW6Rr7T6_AueSIuoB_=h<3-$`Q<tXIgB65o'g9,7A^+iEIK6qe"oL/DQAA40l)c]X0%<-JFc&U%4@C!eAn"$RK^b'ql#m.Kp(%ncfLB@,hA05^W$>22SOdr<=KQ`kKt4HTs]%,PDSdKKB%oA:Rdd./DGH%Z#.D0;@=Y@'qF8YR0b6Uttm0"2X#t4L3q"s286]HVXQIe$?kR^5a4ere;H3rdN[[bOZDWrW?'c23\~>endstream
endobj endobj
20 0 obj 20 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1741 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1664
>> >>
stream stream
Gb"/(hc&8h&:Vr4Th!fSFOo`D`>]8(0>.E5Qp*6ga\fsO7t:e"^&.7o[UiT:/LsT[%+AWuS!`%1G#p1uT>)!QkoWh&HaQ9*?&JW+:CmPk?6d<@6g5t_UndB'@QXg%Tg028-,gk"cuGhe:'X(d_tR#-RTDEmSV#Lq'W&u.UFHpDO`'XOP&c`3(UrU:IZlphK/Y4WL=3P"+_Ro^1;^:-KHWXtab:n4$34Lj"\=Y-'ucL`qcsd=!\pjYB9]-=&u/H]Y2>8D@OfelXcGLgMRu4I9'IGXUS=H\&qZdH%0`T!c*]f.Il$15!$j:;L8($k)&u"snA;h+H_9tiS,p0,!ct)hEh(VY*^%^nN\PKlHm`:-]6nV3\=2T=qn)8Ed$ml#2<oi@s5pBXPs9rm(fM>E-fdC^k>/YKmV^TbGP3YCOp6XDQGGVrT8`eDB%(:<O\@t308GNaO+A$Zb#f;8EONPbkPK`k73edj$O#1hN`B<De!"c,9b5^pl,i;8j='82cpj3Ie=h#u"H\0=Xmb93mXCGsFsni3;5G?DFD2cAPE2UXe(O9Mai4(#3_B5'ZXMhdXQp)X=l2JkN#FnrB[8^dT9A6q,X%cJSgG7\!lM?A"@Cp%Y04oLCtl;Arp:$bc-$3[=iY9(*Zc=t:1e&!g!t4X2G/]BZ_!D7g9RkEGFe78Tpr3[.0qeB_1Qr8II$bgD0)=lF]9@-+8+N0,KqB</j\fqdgmZsd1:RD0:N'C\@b8nV($Eo;<uhrj64!tJ;WsQ2<i<<Ufp'aaeDRDa.TVNK0GJ>K>+>p[+,G)d^QR7aVgI[Q6k#s:#.(,jkL2arOoIf:t;o[Zb:&=Pd>*oL#$(bp9QV+ASIV6Jk<&VZq_0d7:k(EMsDN%_o=E%`q=l654tT9+E`N\XC<tV:O90g"5c`iMaP7RW?l=Br@g]?`VAEXFdOg[`LJ9>'MRe\f03uYUr(oJ`#eL$O"A-NO>%1IlppK@\8C;E:)cIdB"9MODH\!pm3]Crghp^C>)CNOgB8$`m%\c0"3C$>=2'sth4fa\*I<?h&hG>k('>`lq[qQfh,SR4M>jgkf3aGb4HrY?`SFR+R..L=_uUOhb0W(j\KjtO@SnnFhrjUcCo`^-'O,VW333BXmJFr!WSf.WNCkli"4r'B-[f%.F=_J2m;h[fYKJk/eNl6q>+c?OSMEeq=H6pmPqZ;oVuTufWAIgCkQ6(eff#nI^^]*/JiHb@Sl`_P.PO\@al?eeY\G7+X&\l#g1gTl+W?R\Wbq@qpAV)I":Wd<\IHcegsq->b]>r@$sc"JT5L\W_NmViGV.M2O@_[WBZQua;_8`&81(I6LJ0`o`F7YuEt)5kU:Vc"Yf>ZFG>50tNBI^FAJ/&E;9c/;T(POc7UBh$@tcf?QX4Q$V6g`I=u$3r41SZD_cOtLGEWHQU5Z,jqLjl1c#@mOE0.#1UOnYI,;(U"KuRbrrSnj"((M!FD:gnSnuIH`N6V2'`jV@G(_kS<<)?kI3Jq6A#*kYfXEJ.?]_thbHqr\o+r*J<!fNEW0<G?!0ej0Q68Ja2*;lM)+cFubU7kt4(BN3g>IJ<g.NbYV8)Aeup&a\J/UMKHAsYkQ3ht[#,gmQhS^fHij(p6o&cP]Hj<,WOCm\7:`11JekR>mYM9]cp4"GCWB@n&[N:VGnS,jTVcS8LsgejY!=Ms2[,O7IY49saC`8*s5H4G?uf('gI+;=Ri(df&)D`h!-/Y[l=r%>"0l*NMNdHH&jpb/o~>endstream Gb"/(gJStN&:O:Sk`MYJ7J@1.`!fd]"(]Z<-`UEX@OPkDY\'j#rr$SLdYs;XSgd3RCL&PJQYs4B>FOuT'+BuuiSraq'`d]$nEq+q9L*n50S9e0T0SR"rZ'lh;^//n^s(S)LpbTAS.S-51a8T@=l52+bTKIWitQN'.G2ZJX;BgkXYH4C.M^6V.U>NCL`/-h4Y!B9`2HY?9#uou8JS7N?,t*<^q"Ojp?3HWIKSih9aq,KOT__PHqI.se+A%]H(%uc8c6K1;NPkW7Uc/Wf-HMGU+pM0U&q?Z.nD+P:A+UIJCf>!8qf^nZARhea0U]gm,[[.id<kZUtpUT@3K9#>ZR'[=Bnla*#ISA[7FP'nTZhg-(,bpSP2dkA4F/JZD0+6`FW%@BPD<g<](k`X>E<j/Equua.eaOY#VSp==b`^M^U5&+3i]P&`h$CMo"OuqI'LUpg/?]#cu2&E=:(:$i;75n*P`BU\9%F?Q0Hh^*u&OJU+7!VQr#]k,B,`'%.>YVogen-,8rBI]tV:`JQ50de_f-M9ogKF/aSl@`hiAcWk9..e.GrcW+RCT[7:5&=Pu*(!S7M5f$R&'MRcR-KFpE5XcsYAi2KLAlWZ!NJgDC<@'WcJ8#YAI^@t`W[>pbrciX'nqbIqPF(1?ZO^P2[=f&tY8\FY4cSho\MK4!ZkQ1PY;`V,1XOurYgG.d^C><i(@hBY=eNTR>:*Q23TQ/M@Te$[D&N%km>,%t+)fj*2sscp[V4b*W)+`%`dfTIda9B&q"L\f?,(D"&0+@lL/MJpD%K+R5%=E-]YXnA*Dj=]Y1jak*f;/T]Gop$28&;\AI"1dF2NCZ77s0&Gu>D#]?fWKMa8sqVSii+a*pe1U(H[>T&2(?.hA4SfZJojOQ\Vdk)JUAIq@sA1,F-@HY:*"^)>u:p&^>3+'LSX=PhihQV0(^'9t0)b5kc6WH>Ck0FiJ9gh"[pjjcIth@J>8PrZKDS#@t!LVO?`MY4Itl9f-?YL"TtMtk*1SWp5-Ml66@-)`Af?IP'Xj1N.?^FHYm,C7GdQ'm)BQWrT+bKRgV^t$p!l*dZ"".^k-Tgq?D$f_YRrpk6g"C#'KJ6n'KSY@2[2@\d8^'3_jZ+Qtn7De$']TkEEbTY$>?T1ELJK7TL*ou,'/MHaWKW]uaEkMhT=[1Cr$3EmJ-ko8YnYKC4=rr6E(hgCFb3#5=QabnHp]:rb(m#BiVLeqJ9aH8;#pMB[<9,tM37Yu'"OL-Vd.jlqItnT?.TMo#,Xb=QK<AcT:8:QErVIb2>TZ;'m\HWT4?J_;@7d+p4?K%D+m7N@CI,dCglSZL\N#`Vh*.*"POV'sq:(rFB:Qn8j]7YJn0\!X(;0@4bhHBTY3j3L#2P/PI!.PGVWhMM3BNd[R2eZ*00<?,Bnom`Oq8KU*bsL46nL_eF9&StNrX7F?AL+WcKqh"lFdP2f8HmR5jT@"(h1[;*46S/_&Tk<[\ic^c_gE1K]Vo-`+hb#i<sUO*C-SCh-%\s])1)(/jEM&r:[CL:?n_bS_VO-f('rTUDQA@&ISY$MDS:t_J9^;7.H$1re.!!N\E<c1p^#l,7JdLiQi_W#;C;(5o;@t^j>R;02EFb(#!K542UK:9Gm>lo^U,RKsLH5gsLg;\o:.UG/-al-HF9%[buX*9.PKh\e'i"!B#MhoD~>endstream
endobj endobj
21 0 obj 21 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1695 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1690
>> >>
stream stream
Gb"/'gJStN&:O:Sk`MYJX]fr=7a*.D/=49`H(rIC-&-FU"#3/Sp[;1)dqG9!aEC+.:m;@S)4bYf95<_T!$_+=`W(i"6>ocoa'1eo;0n(L@ueu)Pb`r8"/q<=?nE[DUo;(:Up5*O)&jm4!jqg;]GfR-42DLF$k(>tg'*J%1N`HHqTM/=KZPi;`37.&(m-"C$RsMt8/Kt+.Mquf:.?AO:qAnRa`9Cg=PgeZknfSuY#+pb"AL<IX;%Ve"'N&!m?WXHkfref`UmngO#T#OoNf#\XD_+klt>#<-C^]eLW.1(3>4+$2Mfd'nHU^S0(82bQN>Z:EFJ$Ija6oCJ/S2a9Hlc\Ef"%r;u=F+B`?jO\7X0<:Y]`Dkf2ABjYb\g]"p!9YJEDf%@#!jZb.OW:c\GUI%#AC'MCfQ/IX=8:aP^ZkQVU[!+/rG["d:2o<HMph)*$`F-'0n2P"3M]4/&3GpD,T`YGCJg?T,F_@37H;_=s]#W%nKE(*.sV8j%M7]ilJKQIu9X.TpTe>o<@Vqi:`T@<4VV<,(2(NGP:V!RH%C4RT0J]hO#@-=Io7Lg`L.!Ef=SGm^K!/&ji$L2%iT5DEi0BX/#Cjp`[D+,2WG-*LF/GV5/:+sI29PDWe;4bmD2U*9u&)Q/>TmnJLWn]jM(``&4B_Z3q)(3>.A9?Hg*6q%27n19;l%2/#luI=.gOB8j,@tV>OgH+49P\ln4A<cZIQBMMSpVFs,lJ$1CDfdl+jVT;Oo-2BIW]_DS:q_,P#1+>,Y857%[3[K3'Eg[(aisg,0;hq'2-Uo3Jl"OK8/QLZeAV//I+C4hOg<t-V+'SB;`Z;..,@(R/r9nk+HM6R_qU,NRie6,3_*q\MX$kN^h&&3XMnO3]gsXTfR5I3@G9cVb><$HV1FnKil<:A-K6>gb-R@Ki[@Nh*sGL&W[>,@cOjAB][tr6ht0WP7f?T]VhQ$%Bu<dq2Y$pgM\:i249bmBmR$sZe&TW*h@Io>"rWA6N,9L%@S(HQT*O2RoV"53ElZ$WumdR-?qO@H+SF%gOlS&8;0@!+K6#P@&`HbOKaq9:Nd97FVAIVeCs,$,"(1-B\`>[`r*n205Ul*4F&kR*!"lE^5TBe`eg$MjMkcjbR\fGqXo3$EV]o&_#O6oG8&c?kAEa.n_DB/>E6<emI,@.#$kR0MEAr;/X!X;KsC>;$'i,Umo#Vilk.n1Yj/AU(:u^Dg]%+_X"Z$pPq^]/=.=nP$bI7=LLkalc>KuQok^[j.T^XV<p<sB#fbZej1^CY.ljAJ,WG$1K\-/R^N.OSqs/XmjKJ/V>K$W6N%GZt;-k(CCFZ2lX-'?.d>\3(jdJeSM`VkCc])d9D5D=Zhd9e9ECfTYQj'XClbu]2&du"fP[:`)-a0Z6a0e^ON*_]C3adJ5HB.RV^.%6(BDIt`2p$e5k!uu>`#Ijk_h"F,FmW3<lS/a09?%+C2ZOS'Q]*[)pt:fR)".(i+rS*cL<iRLN/CB%A16)K-lK&J//cIH-O1A`n``VZL*;9BH"_q07FXV;8;V\>RUL<\C*X>?jGRXFCc+T,p6PshdQ5a*T`Y-#eI[E)r,42,ZLq`qao*bsKX*3Ri(%lEof2eIFar:H-*+-%5lfXaRq[#q:&Y_]ZHAA5^a_cW:D`e7KoC0r0P^ssO!g!fn#4??\j15\/l)]GUAJ>#_06kQ^Zs*]Lpo=<_>b,"9o/~>endstream Gb"/'>uTK;'Re<2cm.odWkN'77YBs&b==LY4u&6mWF=5o^nt^epYW/j9<oP=-k>SPD4.ajc9:pe?<tZ64r>F@_=c^/!eC"_G^"rE-6To%QpCq^,EQN4^IHiu-%^sbQiY#P`(DHFVp1;GWX&We,_APs+;NECYe2%5<dmF:VB%Xk'^Xf^/9>e'Fp&OY83:rHecd@J/il#k0c5V!7[55;Pd@&LBlA!^TQkl>ot1q\+g38bQtb/:gNdE3@pYQ2Yk)RXS\G3Y2it^Y71%'$VR5:JhtmBj-OD&gGhC-ir3fj8/M?5JipO84Mb"23_UNX"s!a<+bHMB9$)A8,cfM6uQOfnt7lAjm"^XD.8t%Fn1(=_<3#Va^cDKk$4ImIoT+:%Z^.2eN+_ebp!:4HEi4D2U8HYq#KLEt'^o"4'l,boUB)C9BoORZ@EfdFWd!<f:JIZrkLlBjHY`%i%]4E$eTKlmHBosS[0Ki$he!'-7p1]teIuY6+]V=5'86iA1fN%+MiU/F8+=pEX".l>2:X>rFj8G25Zgi.#XfosZ-*bT4P42RZ%N;L.fKID&FZEj9.eaI6-RU]*$S5moQLhsM<gSFO'!'2AfBbDJ&@'L2;\b<mjW75H]#X/\#dq(r@=9G%-hBk,s4[g"V";Q5ofE%*Je\.McJbK\M5o;LE)rHiDa9kcOU(M$JO%c%m@3aM25uV"C.H[lZ=hO.et<O`c_0a.JT_BohXK@KmGNqjG1J+pRl52TYe"h>fm[kA7&ZteQ.b!#G03t:UWW"BXSn4VdrHj&TMRZN&.HI0-a_l0!<@`$!&VgW\rB_%@6u7"]#?1$h.kP6SRdn^`3_:a!#AmgrsZ>44k%rUHZrR4p^JaT:?7tp%qEBdKD/`V][bXT`c4GEc[Du*,mBJnl]nNI8h*U6E"ZQ-lQ_<IqnjsMs40^.kI99grId'A\Y%l)!r$ci8DJZ[gPOZ\CL]0J>@a)V&Wh[U*S1=&rKKCRTH&IGE(!&&K?f-Z-mb03#!kZD,.:,olFFsV*i#dpf&rbL&bVoKEP#3h`k@iGB7$[i.[GhGg@^[m/?;@a6$ZPWDt:#.181p!4fda_/.5)+gW+N%_P7AUj^8.H@DcUC%A-_**/d^E]@].BrSl(&H/N"8'?NU509)Fdeih]$-;5sQ-ir!PW[ogkFTQ@8fJ^phK]B*d0Tdmhp9MaA07]O'?p\:$YZ2/I8V/f-.:"RtLZMPW0G2[)@7deChV[*oeuO<5[E[>Nbcn@A'sh85]'hYhHmg%RRV0L'8Moru/CgM[@@kkE9%>4m.bTn]3adJ9H@`*V^-h2>@+C\5RmbF?X/"H/Z'IPUiP@12^(MWYIanSNhUjgq&kn#o'T!1f9<+eq8*D$!Wa/9BiEXYE2rMF,!IJer84:l9odUclb(W'L>Sr`;*)[J!Uij>mKg1)m84#-&,3?\O"P)dk"ceoBJeZ,dNb\g9BNZuW0T</%V\e>o^$o+P$ON/]El<QWNc5IA"8G+Q_WnP&NB^Mu`-=)O:l&j#W]&<6?WFc]5h31Rel,O2'B@2TRaIb9<V;<_T*Et9qVNtIa3%3(U$A%BZCh;2S;s'2"AR4\)(+Scl08!X4f`.2ULZNGTP(+&D,dV"'(ejW>Tbb;/JpY93@$as?Z[>$YDqVF-O>%hOet$5c3il/L>'.E!n:i$UPC)m!lC1iKSIU!d=7ME3M$~>endstream
endobj endobj
22 0 obj 22 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1702 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1722
>> >>
stream stream
Gb"/)>>lJ"'Roe[cm-X@l5nd#)_k"N1dGfA4>Gli`%Xq@&@5'aIpZnCZIW?alm55;b':^fopqk!FEI?P"$h]g61OhmNmO7(rGi/L#g0:]0[*Ae*i7QJb5a#f9X#-2(_RH8BVCEVl,Hm6-3:6_0<PPheh0gUEJccO'^^K=M^c5`D4K<]L!`I2,iVphW*dhrpn]2"(Ksa0MKpt=@O_[^`CuG0*mL&E6uo(Lb3!C#_o;<@!R7ccmhY)N_t;n&b!)TeFbR<t#Wa+CY`p8G?Y%]q1B=B^UMN!+2Z\;phWD/Fg#YXd]=[GD6fj?/[1#*k&E#u3r@;5[>kX/MElI1V[Yo^a_D#7HVN6XA"fOO/>7F5M@J&^Em]optN9EH8=)PGc]3I&eH#Cbg7@0),a.$Q6oaRYfQhZbW:Q9S\kOS[(+rN>OCup*CG(;%<>3r-ic)[&f#+_3$gubm_Y-I=hRN77^g-PiV\m_>"2Wc"L3_ZUB0W0]X@9Rf/3?c$FdrN>b8$<.F7$J?r6ZA#G\DN4rnsC-p$Ve#(+?8LO$@C"*"7/Pni(N,*WM(Y>>8pd9]e&3hJLu(p0tTaG`T#YD.b>*KSb\d0D_+QpWX1tY-p]+KQjW`,SWBT>%)n\"`#(Ag^;2Z=pA0G(,4)]2"lUTS(6t8Bp(g!q*-6<s1q0;K$-\<cGR;[p^(5`[.82_kYbR5"hedC*Yutkl1J7fTF_sIU_NZCq1HE]5o#KO<2t'B&SdI&"2\;A]#<Wt8In_<NFEj+3hKMc9dQ'EXVSGL>S0S->9AY6grX;23DU$mB,VKBRo,=2?&(>O,T8cU+-Qbh`Bm5<W>/h1saE'[Y,X7&9kfYfi6I!JSiFjK.#>F$Q8*P#:3r(I)cTXg]F&ijPLs+(0fd]Em9?oi@`FH:K(<O`#:XaM8BB.+]rpe\+E'2:S'6@dUFm5P<Pg*V]AL$m!jcT0TY[![p#=kQL#ttCn]$AT(XYRo(j;a>;k/$0ATH.7>6AX9SCIsE%P*2<s<!0+UV:9gIGiX`0-<rp<<o/7FAM7PcPn4O;;&(*m^]5DH*'I*S`CO"R,)!P4N#NH]l=RZocc]W=FBP_t[FL7J5NSuJOmR@P\j+:$3)C#U#>#p@^d?Stf%^te(;#2f]0_qtQ-uZ^A70YZjO/H(A[GNfW<F!+n`9)abTY%$T<@0idEk35M24Eij3/$5+,'\_SGiQTUCdV7DUWYgUQ'M9kI:uAmA)Z"\"2Y>r3l4NfM"D-$3=-j4r2HiIl'^U`Xe`M&!@L/S$61-Z@Y64HO6dbl]+Du3l^-[QNg<VYCn(m38Z=s?A]U*O/4C\o"4hZB%ec2aq^Ig\t(GTP^46J)*op$Uin#l)]lLJI%_"oEqAOCkN',D=2!UD<ke;-<9dk_XE'@DY18Xpj"FTlIncuMf<nD_FB"L*kbO6;H_)I/h)>V1VsoNID7!$h`>Z\B2I0CO"$]TH)NYAM6o$"pY^$;36$?sfC^p0rOs.'J)s]pJI$"he3ls)Jr4Xd$_OR\?YSYFNRn8@h8ScUFD_)cDOIa9YZJ/\Fge&-#<`'US+_dmtl`+B<Ac=*o0Np8fKFme/$&35FZOSI>,V!*7.#'sU@L,A1T`B\?%Z&&"!PX>$#RU2%D_E$obsXq8r%.jGJ't<ff:F0[<A'jm#g'!C;Jji!8bT[Zr<O7q<TPr#]2&GG4\`A2-DLM-6%aXe2>0bg~>endstream Gb"/)>uTK;'Re<2cm.od>3Y=qif+/ORk>f=@/@f8-;+H)/ccm7m-_Vqfp620=B6'u0#KB:,du"3^/t%Y3]`KL@U?G>IBc'$6\^'c8.c#i>p@EG8(f%XZb_\'[7E`*+sl>AEJCHYg=Vg%XHhk(U=K#"e_nI"0o<DJ=E):,/ks]5L+_@&T>eu?bhWa7.3E=JARp=S1,,q@R@A>(!eEVi!ptBF^:fn?c0c/Kr=3Dr;>/j5Mp-eH^aN6@WnInb[I&CN.W+nNI!1_"d)Eo^iVK&N3nlQKare1gCl8pR2ZLK%Dutn)1WM$7j%fd$csPmN'""U7r>M5q)fB8GqsM<1PP0FaDAtu&hA"$M0NZd)J?0A3r4*2NpNu^N>"Jd])RS`XVQ^%HMcT*IJ8g#\Xe)Jb-IcMIMV6P)m-Yi-<QM*0CNNYO`1Ao]m9j1+$SB&)@3A5G+:O)0,nO[opu%SV3ZB#RY)+lJ^""I*ZdDum6'G$V.Yp,#HrHqIY?D19/'!l5eFFSV.WDfX^6fhH=,TG6RZq/;%647J/c_b?JjFpB*ITa0Edg$`R-+"pRr0`Q%%CR5Slto6^78M_9peI*@mkShVti0!a?=eF$]OdTKiZb6ND+s,IN/fH9detCGa=@"qkp3/0('r_i1PH`FTCckGMq4?"&U;>/Hd8C3FJ-(nDnh]NjJ\#FE0M>3]]h/1N_1^@Mq5j3Ilu4kcjZZS(m$Ue=oK3Mdql#*ABWMO4*(TFRj"5SpcT/kH'hKEXp3&XEY3n/tUbZXg^i)%X=Fk4ujQXNqSO[:5@k,et89b;mEtT&pPr\#7]i"opQVX]H".jb5HsfdI@>dJR5M.E`V^BFAQAM]H":kYuua=XgO1jBIk[AD@b;`(/:e"lbd3oJs^Kdb?9,bfhSd]qfDt8`2;Na%Bu<Eq2U>\gE.Vr)q$;_h)r[Cb2.ZZWX$aSlj]>_D$_!`>KnpVqP&h9-G6Ea0jK3G7R?=>=s[IT0:Hl-GZCMJgg/Fi5s?Y/JSCj2FA=(ibG7<^#ZJ[9fKHUm(".c&,W`2a$p@q\`dKLC/2mCjUf4S<P>=Qa.DpAe0&o(!khd_Dro4O>ER%(<!9rhD/E=[0nc8:IpY8J[gRc$fCrCBR]59RrVR$lLh#t4K\!tdbB&]d;;jp\K\ahTJ7uJFkI3Pb@!!0W'pb!9HE0$A.]'?F_(A%2qId><u[L0p@\&4kL&&`'gR"\g@ahtDF.-J)8oQmrG8CgeHGdMn=Jmcfn476qgO$'KYJor=tHTW&"j(H>>A"K/ck;t'+S\No/%bf$<,&q;XKi)mGZ6WZ!K_;`U:TCFmZJ"6_"OM3j>>mY`gsH:.V2:<o,k^/a"V-%J`F)uN"^P]IOVi>n8a17UHWY/c!pa8N!UEHBoBE&gP:`?,8LGN45US]b`HL,_FH*V9:\TWT_]+N9g`PMbF6ql$09`tjCPDF$"j&&HNm%ep"kb3^e,b$,=9oVRB>'.UDdq\+'+70*9:&a/U:SQA'FW#u((90U3N*5J_Cne=Ui^IaOG=O[s%Y2*$>[p:WiWlR[4nV3DQFU?W*A0/_H3cR![1YmPQhF7eJ_?op_eB$<Pn@BZ!_5\fij!$jF.jVals,EYLi:XW8IXS+$B2E<A`MXU2@&>W@)CnW_5ZgC_&F&:#rW0B\!j46EL1&E':VgaT<C<7R)OgQHrqXp$<R8ZcCeQL:Tfue$1tOM$Oe@WcYm9_1;<4!?1kDG>:aI~>endstream
endobj endobj
23 0 obj 23 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1249 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1605
>> >>
stream stream
Gb!#\9iKe#&A@7.kQoC3e[MX:+IG&$!_jY0RE8u;_h?#4Jhq9DI3i*`mDQG(:7VgGb!)rae#p%c(a/dng$_?2^dSAi?X\HkL`QS/OFcU"KMh3?LFlCJ(^P[1&6M9#K[TJ!)(I)&`*i>MH0W)1H%H%9.HHFcn-K>-'8+=]mF6Lj$tE!KT4]AGSl'H[B8+!YAYU`9?f!3;k*Iu@o'Ji?8<h(f6aG&O&7gnL2Qlo",-W%pN^8n[PKW?*8i_nt\k_Fhp_6-B+?HiJP9-hi#fTV4/=e;W+Srh<TUUUHDe@kPTAk(<@*c`G-s0"!YiRUC/0Fm`2tLU\hkhcFhl!ABnZX(f5s1C5cr`KFXRhMn[1h+-3J`2bfq^#k?8[;+nOpH@>V>1'ErC"e#O;jI#To?C!`sVWnQ6dS_7H?I6AKPgGp\679t]:%'a!\%*OIB>'B`i4?=[ccLcT-blfPFZo9;72;]YWM/@NZDQ/;m<P0!UPp>+5_C]3k[K)q*.h\`uOdFTG8i-0@V+ct>;Z3"P7NP"J7_$s!uWZ.&sg-AhRQjQeMl(Kot1/g'pTekru;Dm]I@8\rmW[&a'*+VWlf,4"?!3NA!/'HOG0,>p'j?%9.\3Zh^8+nC4\faftU@\i5O:s':<Gr"ZV&\Eq<a?'2k%]Kbnj8UeEH5da-_2nli&/^?09oM8PAr/Ydr4>OO<CP/!K[G98.HaWk/GdT5fFGcPA60H^7\MaS%F2'YK]d-c"V5,d,hXF,H,fHh.#`=Q]SZs<b?(]/F-[AS3)sc4R;l:E:in4"cS'6&l'q/5t<AD[t^\Tk8LHr$X7NJ@LD2tU_LqnP]8`[[qQ"PDhW0)<[_\<@*^_ji74M#/Y%g;rZiK=FDj\6I('aUD*\J&n8@LG'CWa&?S/@%+gqsAdH,nhY5[7]+-*)eBQ,o#4U`s\DM;u:?_N*I$'?9[%\'joEEe=cCWte:8#6<J_s=qVBQe_dS;d??6.@L4:%QPLck"3==H>R6@:N6H-dMh2S+&<U7cW2#.%EDEK'-bAeN#%C^>sC_p>dL<g#X8\%[\X,q;q!O35`(gS1\oo=d\u+3@OF_EmTh6B+`")jr.22T;l?u)q"5L'hPb/-e\JRCJn-rf/V3#Fe?,6XS-EM%9#o0Aii*[D!CHgqp(*3)pO=.0dq>-J7W^Vk2O(]&u"l0AURc;..*8*4@[?Y#)0auY@Cg'*2qGsNc>@o;#E,)lQDX(G;SG7OIBViW5&Vc/.[(,!6C2i]D~>endstream Gb"/'D/\/e&H;*)_2i;]E8isIDlKLRmdedd8j<J5][R8C=`J3"kk=I88g6\aU)85*Q?IhAf[N'.]&W>%LPJ-h5H+L0Rfi.4"2C?MJ2#(4!2>R,ljT]Ci9LBn8<H0Z3MM$s"d.e:lY/(QJl@69p@mj$n=]GR![o:T;*r&AP$g-LGAjl`o;Nl7G<mEr)3*>rHk3h-f:eFnF.a]<1gqNM=i0hOl%aGF(_@$b3B5)lq;WC;5L1C.q;(sl>0N<DDa=""A8c5u1Yk>YQlmd['%S&F0j\eap\M^gkJuqm@PtjTf8&&o7QK/L#tdh7FL@QS<_l\eoBt=!ZI<SD/!\sCQFG??fc!\gp3Ck!B")uB;WkP<FQR5oG*?h[2h[mX^.qZ$&qBIG9n(H=?Ns>96()&t>MnK8"%^5:E^_>uYNg'-Y4Mh*]$5:TE8m\l]QpSFG[8%T5``!3Q`):Y,:h,pkm@"'$?Wt,!^3Od)"VJpN!jN"]C:1CBsoIN+]he1+&^k0Jt$VW)^(4EHu5.YKka]6m$gDB-;b!q-DAD#^&X5UniH>^drrauR>bVD>nAAO@149E*")rniT>pMK5b5]U+4P_XY6`<FREA8rNLW!m^(W\1Ui<dn&'QC]=6mfdI'`]60]X.OG0]i!e_Dlb4h[V;7l<;MF1DcA.:Nqq_8(?;F8U3LE6&(m]MKPJU4F1:G!%B`E%[H#mj1VVfGd2MbW0HgZK16T*clZ1FP!f%X:#QrgHU%l0p_SSb5cKA"9_I;p[d@N`?)HU3Gh_T)lFofiUU\,VTJ)!ZPHP%+B3>S;f-S-D*aTBn(q6)j+6Y%XNc4L]lqGoD==)C)1!JqXgn0,SHpU?DS_rYK)juj,<6(iHUU[LZd.uMM:5d<5d5JT],N?@]`'#F27E!4\m`:X3&D%HMo:U2Q)72/?T2GUM+0J*0(H^_I\kN*3`V6a!^&FM[>gTf!C@[BuOl56(]j?-ZM.[:VkQe*ilc1W,O:;Wta8*RNf(<+3J@t@U0Rkm"m%B?-ShH^4#]cc=3E0?lgOb(#NbVh1Ws1A.ENbPfT3,\dW'tZWXkI#E@V3dP>`1Ck"BAbZ0q1P-`h-,:AFN3APV6Yjrp9A""/XWIgY#@0O3K=&Yu[BTh1=P?fB?Mc)#2)HPO&5%0HH?H-YRr9>b;;T?oS6ZW9YO.Yn#A<A.e$R0Uu<H7#RA:XLK>NTr!LM25;oipkH[r'=EK_Dh.d(X?@=ksV3/'/kbNqhr[VR:sgbRYA5LeSm2&TWQP[^gioGh&iSSaY*?Yj,G1W$<j;F+[K[MNc;b\p,%7@_.roj\frQkK3Eh)fpTBGPP@m*phGWY_MpjY=Hf`IG+Re(])b._<#SoDt``(FY]DA+%gcqPWZEKa^-c#gY-L=I\1KtPQ,bYNoeA@;13<#^%bWu3NRY/V;sGSU]UhBUh@agp+8>W(c*PN0B*FV1^CQEU()&-@DFO[\9>=hm2Q;/,ut@fr\&lY&kh0`hn*6OoG+6Kf5&.j[9r^XoaC#jqh7!W5@V5YhT5JaF:63Oe1D+)qQsDHU+Nbhe1-D07Ycr3eQtkG0\ZK45S@8$YFWP&[Sr"S)WMI(+Itla5u[scFfu>brW1'-O$*~>endstream
endobj endobj
xref xref
0 24 0 24
@@ -191,17 +191,17 @@ xref
0000002175 00000 n 0000002175 00000 n
0000002459 00000 n 0000002459 00000 n
0000002564 00000 n 0000002564 00000 n
0000004657 00000 n 0000004646 00000 n
0000006433 00000 n 0000006405 00000 n
0000008209 00000 n 0000008204 00000 n
0000009981 00000 n 0000010006 00000 n
0000011814 00000 n 0000011762 00000 n
0000013601 00000 n 0000013544 00000 n
0000015395 00000 n 0000015358 00000 n
trailer trailer
<< <<
/ID /ID
[<901f406f6cfbf9b640977a323bae9dd6><901f406f6cfbf9b640977a323bae9dd6>] [<9e7bb413baa63d67c4d12e6c10106594><9e7bb413baa63d67c4d12e6c10106594>]
% ReportLab generated PDF document -- digest (http://www.reportlab.com) % ReportLab generated PDF document -- digest (http://www.reportlab.com)
/Info 14 0 R /Info 14 0 R
@@ -209,5 +209,5 @@ trailer
/Size 24 /Size 24
>> >>
startxref startxref
16736 17055
%%EOF %%EOF

File diff suppressed because it is too large Load Diff