From 2f0c3445d32a209d540d8537d2d3dd0d478e6811 Mon Sep 17 00:00:00 2001 From: Vila <124278082+snekkenull@users.noreply.github.com> Date: Tue, 9 Jul 2024 01:50:33 +0800 Subject: [PATCH 1/2] Add webui App (#30) * Add webui App * enable indepent model for reflection * fix * fix * fix * Use simplemma(mit) tokenizer for diff to support multilingual. * Update UI * update preview screen * Update UI to use pure CSS menu icon * Add: Export func. Export the final translation to txt file. * Add: language switch button, RPM settings. * Add: Translation progress bar * Add: Stop button to cancel translation progress, llm error notification, fix Readme * Update * Update to use base url * fix * fix * style and formatting changes * formatting * Fix the components error * changed default text and error still exists if OPENAI key not found at start, but traces back to ta source --------- Co-authored-by: Joaquin Dominguez --- .gitignore | 1 + app/README.md | 89 ++++++++ app/app.py | 392 +++++++++++++++++++++++++++++++++ app/image.png | Bin 0 -> 113637 bytes app/patch.py | 161 ++++++++++++++ app/process.py | 263 ++++++++++++++++++++++ pyproject.toml | 13 +- src/translation_agent/utils.py | 3 +- 8 files changed, 918 insertions(+), 4 deletions(-) create mode 100644 app/README.md create mode 100644 app/app.py create mode 100644 app/image.png create mode 100644 app/patch.py create mode 100644 app/process.py diff --git a/.gitignore b/.gitignore index b5844af..0d68f6f 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ poetry.lock floresp-v2.0-rc.3 *cache wmt +outputs diff --git a/app/README.md b/app/README.md new file mode 100644 index 0000000..1d84349 --- /dev/null +++ b/app/README.md @@ -0,0 +1,89 @@ + +## Translation Agent WebUI + +This repository contains a Gradio web UI for a translation agent that utilizes various language models for translation. + +### Preview + +![webui](image.png) + +**Features:** + +- **Tokenized Text:** Displays translated text with tokenization, highlighting differences between original and translated words. +- **Document Upload:** Supports uploading various document formats (PDF, TXT, DOC, etc.) for translation. +- **Multiple API Support:** Integrates with popular language models like: + - Groq + - OpenAI + - Ollama + - Together AI + ... +- **Different LLM for reflection**: Now you can enable second Endpoint to use another LLM for reflection. + + +**Getting Started** + +1. **Install Dependencies:** + + **Linux** + ```bash + git clone https://github.com/andrewyng/translation-agent.git + cd translation-agent + poetry install --with app + poetry shell + ``` + **Windows** + ```bash + git clone https://github.com/andrewyng/translation-agent.git + cd translation-agent + poetry install --with app + poetry shell + ``` + +2. **Set API Keys:** + - Rename `.env.sample` to `.env`, you can add your API keys for each service: + + ``` + OPENAI_API_KEY="sk-xxxxx" # Keep this field + GROQ_API_KEY="xxxxx" + TOGETHER_API_KEY="xxxxx" + ``` + - Then you can also set the API_KEY in webui. + +3. **Run the Web UI:** + + **Linux** + ```bash + python app/app.py + ``` + **Windows** + ```bash + python .\app\app.py + ``` + +4. **Access the Web UI:** + Open your web browser and navigate to `http://127.0.0.1:7860/`. + +**Usage:** + +1. Select your desired translation API from the Endpoint dropdown menu. +2. Input the source language, target language, and country(optional). +3. Input the source text or upload your document file. +4. Submit and get translation, the UI will display the translated text with tokenization and highlight differences. +5. Enable Second Endpoint, you can add another endpoint by different LLMs for reflection. +6. Using a custom endpoint, you can enter an OpenAI compatible API base url. + +**Customization:** + +- **Add New LLMs:** Modify the `patch.py` file to integrate additional LLMs. + +**Contributing:** + +Contributions are welcome! Feel free to open issues or submit pull requests. + +**License:** + +This project is licensed under the MIT License. + +**DEMO:** + +[Huggingface Demo](https://huggingface.co/spaces/vilarin/Translation-Agent-WebUI) diff --git a/app/app.py b/app/app.py new file mode 100644 index 0000000..0107536 --- /dev/null +++ b/app/app.py @@ -0,0 +1,392 @@ +import os +import re +from glob import glob + +import gradio as gr +from process import ( + diff_texts, + extract_docx, + extract_pdf, + extract_text, + model_load, + translator, + translator_sec, +) + + +def huanik( + endpoint: str, + base: str, + model: str, + api_key: str, + choice: str, + endpoint2: str, + base2: str, + model2: str, + api_key2: str, + source_lang: str, + target_lang: str, + source_text: str, + country: str, + max_tokens: int, + temperature: int, + rpm: int, +): + if not source_text or source_lang == target_lang: + raise gr.Error( + "Please check that the content or options are entered correctly." + ) + + try: + model_load(endpoint, base, model, api_key, temperature, rpm) + except Exception as e: + raise gr.Error(f"An unexpected error occurred: {e}") from e + + source_text = re.sub(r"(?m)^\s*$\n?", "", source_text) + + if choice: + init_translation, reflect_translation, final_translation = ( + translator_sec( + endpoint2=endpoint2, + base2=base2, + model2=model2, + api_key2=api_key2, + source_lang=source_lang, + target_lang=target_lang, + source_text=source_text, + country=country, + max_tokens=max_tokens, + ) + ) + + else: + init_translation, reflect_translation, final_translation = translator( + source_lang=source_lang, + target_lang=target_lang, + source_text=source_text, + country=country, + max_tokens=max_tokens, + ) + + final_diff = gr.HighlightedText( + diff_texts(init_translation, final_translation), + label="Diff translation", + combine_adjacent=True, + show_legend=True, + visible=True, + color_map={"removed": "red", "added": "green"}, + ) + + return init_translation, reflect_translation, final_translation, final_diff + + +def update_model(endpoint): + endpoint_model_map = { + "Groq": "llama3-70b-8192", + "OpenAI": "gpt-4o", + "TogetherAI": "Qwen/Qwen2-72B-Instruct", + "Ollama": "llama3", + "CUSTOM": "", + } + if endpoint == "CUSTOM": + base = gr.update(visible=True) + else: + base = gr.update(visible=False) + return gr.update(value=endpoint_model_map[endpoint]), base + + +def read_doc(path): + file_type = path.split(".")[-1] + print(file_type) + if file_type in ["pdf", "txt", "py", "docx", "json", "cpp", "md"]: + if file_type.endswith("pdf"): + content = extract_pdf(path) + elif file_type.endswith("docx"): + content = extract_docx(path) + else: + content = extract_text(path) + return re.sub(r"(?m)^\s*$\n?", "", content) + else: + raise gr.Error("Oops, unsupported files.") + + +def enable_sec(choice): + if choice: + return gr.update(visible=True) + else: + return gr.update(visible=False) + + +def update_menu(visible): + return not visible, gr.update(visible=not visible) + + +def export_txt(strings): + if strings: + os.makedirs("outputs", exist_ok=True) + base_count = len(glob(os.path.join("outputs", "*.txt"))) + file_path = os.path.join("outputs", f"{base_count:06d}.txt") + with open(file_path, "w", encoding="utf-8") as f: + f.write(strings) + return gr.update(value=file_path, visible=True) + else: + return gr.update(visible=False) + + +def switch(source_lang, source_text, target_lang, output_final): + if output_final: + return ( + gr.update(value=target_lang), + gr.update(value=output_final), + gr.update(value=source_lang), + gr.update(value=source_text), + ) + else: + return ( + gr.update(value=target_lang), + gr.update(value=source_text), + gr.update(value=source_lang), + gr.update(value=""), + ) + + +def close_btn_show(): + return gr.update(visible=False), gr.update(visible=True) + + +def close_btn_hide(output_diff): + if output_diff: + return gr.update(visible=True), gr.update(visible=False) + else: + return gr.update(visible=False), gr.update(visible=True) + + +TITLE = """ +
+
Translation Agent WebUI
+
+""" + +CSS = """ + h1 { + text-align: center; + display: block; + height: 10vh; + align-content: center; + } + footer { + visibility: hidden; + } + .menu_btn { + width: 48px; + height: 48px; + max-width: 48px; + min-width: 48px; + padding: 0px; + background-color: transparent; + border: none; + cursor: pointer; + position: relative; + box-shadow: none; + } + .menu_btn::before, + .menu_btn::after { + content: ''; + position: absolute; + width: 30px; + height: 3px; + background-color: #4f46e5; + transition: transform 0.3s ease; + } + .menu_btn::before { + top: 12px; + box-shadow: 0 8px 0 #6366f1; + } + .menu_btn::after { + bottom: 16px; + } + .menu_btn.active::before { + transform: translateY(8px) rotate(45deg); + box-shadow: none; + } + .menu_btn.active::after { + transform: translateY(-8px) rotate(-45deg); + } + .lang { + max-width: 100px; + min-width: 100px; + } +""" + +JS = """ + function () { + const menu_btn = document.getElementById('menu'); + menu_btn.classList.toggle('active'); + } + +""" + +with gr.Blocks(theme="soft", css=CSS, fill_height=True) as demo: + with gr.Row(): + visible = gr.State(value=True) + menu_btn = gr.Button( + value="", elem_classes="menu_btn", elem_id="menu", size="sm" + ) + gr.HTML(TITLE) + with gr.Row(): + with gr.Column(scale=1) as menubar: + endpoint = gr.Dropdown( + label="Endpoint", + choices=["OpenAI", "Groq", "TogetherAI", "Ollama", "CUSTOM"], + value="OpenAI", + ) + choice = gr.Checkbox( + label="Additional Endpoint", + info="Additional endpoint for reflection", + ) + model = gr.Textbox( + label="Model", + value="gpt-4o", + ) + api_key = gr.Textbox( + label="API_KEY", + type="password", + ) + base = gr.Textbox(label="BASE URL", visible=False) + with gr.Column(visible=False) as AddEndpoint: + endpoint2 = gr.Dropdown( + label="Additional Endpoint", + choices=[ + "OpenAI", + "Groq", + "TogetherAI", + "Ollama", + "CUSTOM", + ], + value="OpenAI", + ) + model2 = gr.Textbox( + label="Model", + value="gpt-4o", + ) + api_key2 = gr.Textbox( + label="API_KEY", + type="password", + ) + base2 = gr.Textbox(label="BASE URL", visible=False) + with gr.Row(): + source_lang = gr.Textbox( + label="Source Lang", + value="English", + elem_classes="lang", + ) + target_lang = gr.Textbox( + label="Target Lang", + value="Spanish", + elem_classes="lang", + ) + switch_btn = gr.Button(value="🔄️") + country = gr.Textbox( + label="Country", value="Argentina", max_lines=1 + ) + with gr.Accordion("Advanced Options", open=False): + max_tokens = gr.Slider( + label="Max tokens Per Chunk", + minimum=512, + maximum=2046, + value=1000, + step=8, + ) + temperature = gr.Slider( + label="Temperature", + minimum=0, + maximum=1.0, + value=0.3, + step=0.1, + ) + rpm = gr.Slider( + label="Request Per Minute", + minimum=1, + maximum=1000, + value=60, + step=1, + ) + + with gr.Column(scale=4): + source_text = gr.Textbox( + label="Source Text", + value="If one advances confidently in the direction of his dreams, and endeavors to live the life which he has imagined, he will meet with a success unexpected in common hours.", + lines=12, + ) + with gr.Tab("Final"): + output_final = gr.Textbox( + label="Final Translation", lines=12, show_copy_button=True + ) + with gr.Tab("Initial"): + output_init = gr.Textbox( + label="Init Translation", lines=12, show_copy_button=True + ) + with gr.Tab("Reflection"): + output_reflect = gr.Textbox( + label="Reflection", lines=12, show_copy_button=True + ) + with gr.Tab("Diff"): + output_diff = gr.HighlightedText(visible=False) + with gr.Row(): + submit = gr.Button(value="Translate") + upload = gr.UploadButton(label="Upload", file_types=["text"]) + export = gr.DownloadButton(visible=False) + clear = gr.ClearButton( + [source_text, output_init, output_reflect, output_final] + ) + close = gr.Button(value="Stop", visible=False) + + switch_btn.click( + fn=switch, + inputs=[source_lang, source_text, target_lang, output_final], + outputs=[source_lang, source_text, target_lang, output_final], + ) + + menu_btn.click( + fn=update_menu, inputs=visible, outputs=[visible, menubar], js=JS + ) + endpoint.change(fn=update_model, inputs=[endpoint], outputs=[model, base]) + + choice.select(fn=enable_sec, inputs=[choice], outputs=[AddEndpoint]) + endpoint2.change( + fn=update_model, inputs=[endpoint2], outputs=[model2, base2] + ) + + start_ta = submit.click( + fn=huanik, + inputs=[ + endpoint, + base, + model, + api_key, + choice, + endpoint2, + base2, + model2, + api_key2, + source_lang, + target_lang, + source_text, + country, + max_tokens, + temperature, + rpm, + ], + outputs=[output_init, output_reflect, output_final, output_diff], + ) + upload.upload(fn=read_doc, inputs=upload, outputs=source_text) + output_diff.change(fn=export_txt, inputs=output_final, outputs=[export]) + + submit.click(fn=close_btn_show, outputs=[clear, close]) + output_diff.change( + fn=close_btn_hide, inputs=output_diff, outputs=[clear, close] + ) + close.click(fn=None, cancels=start_ta) + +if __name__ == "__main__": + demo.queue(api_open=False).launch(show_api=False, share=False) diff --git a/app/image.png b/app/image.png new file mode 100644 index 0000000000000000000000000000000000000000..ea7a587c4d09c800a5aa2a5b763bc7d7b2a6d72c GIT binary patch literal 113637 zcmbTdbx@p3&^H-Bq|ai(u)@_P^CVKDZh9DxBUEZLxg{>K@984 zfBu1SR+jwmqI`sS_xTT;xrm&|ix*YV$oEFCp8vmg_^9Rl;ssjwKOdNW`@&BzUOeSV ziHWFs=pQU2cwj+D5l-w=^O0%2L2qKH?+Hxp-^`Oy5Q%8L{6h8(v5;3$LN%XfNHkEBh;&02Q+5bhCe|QKKIO2v6T+~Q; z3jhGl@c$03bnC1$Hmsj{X!&aG;MD^DXG)4cCHp*aD>Ie7(9HhcQW<{!AQJ0um!|K7 zB0M@U+^0MouU1L}ZMHZA?fK_rd$@^V=l}3G zoRzs)gB@@DBI+;86ZCS+GBwQyZUXTsK_;UW2FC9@jPOs!N#{HbC>3b_745+QrI5&X ztJ+`0F__D2!-480;!(tW5tB8=J3AI0o}L65$7X=9rAxM#TFy6DT{|^9QE4xwFCJgZ zta|Coo8l4@r_JH`std$T#_6({T-J|{>oOID(LNA|bTGIbsgHp2- z?~WNjtW&OFk|5;Zjf+Z=YM%()l33-iKqE6|L0|*e=4+blcVdq!h)f|S84X4E zsGM{5EKjU;s-3#7g-Oe`Dh_bYi}0r{7j?s0mKsvqw`z`YPAg#~aq+rIF1W$q{Ae$X zD`*~X=S8{GVTttExXADsALHbToNyb8@)Npkh7S?VZ9UbC)%K(}raijx){ia0j4Ma!0R+1MQJu25p)F@5e|SVS^9ops^7;o+a^GSr@_-iksvMJ5-nm`mZFo2gaj=SGR zx@)}F(fi3GNCiCx0Q*=H zuATXb9dkqWs7d4rQ=6)+>3%DjsjyG%mqmlz81{XHr<~LN#%mQFKBJ6_?H|5%L>+an zdq+|X*1&lM4#FenF@E6ls6Hi&qm0gT0AP;xv;B< z))qf^O}F>C@da&rt#@1m#+uK*^f^1EIA}`oS?;?)yMxPcXMz>>{9)_Z*yzWcf8Pq) z@`6jSe<7{m^?G^bC=%!zu2niZjz^cv$HF}HA^a%ZQAIvq!V?fN6CrY=aQW-Cl-0H# z*0=6(zwX>ui;hPkXAf#OxbO3lyf<=U^%P4g9|lT?ohHxd6Mb%Q%szUaj`5do?1n2} zc$@q*_Z_DSx@g{jSMj8HrdOVp8r?Tr=jh&Q6}C8TF)1t zD(n8+Uiy67`sP}~429(Iy6vBaZDt9_&K7h2*zJUxs}GPdm@xFCtJ9vfV_zjbpxt-% zzPHgoWIlc%m;=9{tn9!%f(Hqif41^pp7)7LQW-!1mN@9j^Su9cW?_ zgk&3@D|`Zqg%LD_Tvs0g&**cn_uzF{ltX8YSGAeyNqE*`YezIK^Yq&R18SYHEbv}g z%QE@{sTu>|GbaU+LTGyy(3;`L$Y zhC#01b!1q=cEGB2oZzK^;u;&ULO%C!9v%0AXBrSzo>0`u3Ae z;@KeZu0fOpO&9S;NeS!DVaFSa0u>i;STh?RLmrPjY)=pVTUjA96N8^s4m%F_e$%II zs%krt=-T;9b|Z-{!^k|7X(>Ty=>;YVNZT`C9$#PjEFzHPr@QaqUoqaJ(vWyc6+XUA zM0r9)UdB0Zx46v;_?M@;LI8mC{V z*Teb42~R~({^Pc4&(h1{A~IvU4Td~zCWY&dCZ~8V8;Ym+MLi9ap&owzx-+T+eEYeT8Xpx5mIt^Z}ME4(_>lLD`CwGL=bO{G8$1 zZ(ZP;lkg_bvPZ80wB!=v?p?ucClGt&O5a7Z$wdzI(yr#!6_M=;zFy2Q7d%|UA1dh8 z8aa)%N6}_O+-=uJ5Eq~M9QHHqgkl7Se4~0-|3(x4wIq{o&<(9OEDFhy4+yyrSa%ja zgWK>2aWj1FqMq1_+hQ&2ZMr+!ko;C!C_HY8fdd=AB9OM`ls&>;8w5=|wSWyq*Fq`! zNOL+A*$E)ss7TmyW$83HZV(9)0LjjP7cz2KeImh3ld7JeOz7As=Iq^Q1dN5sR544= zBX)c0rbh|K9p~KTB)e{mO7=n#$0t@yXQgFq`_^oaukE$V24)#?SZ)H^Q5YFVH7NRF z&_&}Hep)dufSHF&@)avhG5Vq}`ptF`l$VxK>w~e#j4wTl1rknY&U<-%=5)DvOiEPE z7|&#!Njf5*y2BbOyeRCOxIL~?cQwtIX6LU>EmW`@_+K@f)UdJT43euBY7DEk_teZE zwD+o(^sY=A_rR)IQ(ttS7Z-mJH<^-)?xs03zrKMz(~*&pS(KR>l8a9Fe`~l3OIP6J zk-cp$gg@U)WSZw>zY?eL8E?=1v{wVGO{pXEJj_B6cU1a)p};D);G<5dWN8LMv(IMW z>jz)OT|S)qNQR5A{s0zLD{8r?1tLArw|*4-H`PKgQ2AVShu@|}Xq>b47!x^6GBm{E z$}p~b6&7``Bq9)>C-urat zXiC&XZ@ig7RO$YU)920)-Q{=!mSs?{MR6T90x*T_%x(AnWVCxc$IcRaaNGLFb}AlZ z@3N=iiMcQL7L;gGg{a*o3Q&-f=e)C`u9x0Fnyszg?L{}W&gz$}sq!{riLa;Cnyuv9 z0SeeTd0rWbYlvoQ9{;*-vNlb2AODz+9F*sJ`E-kZu>8Q%Ze@iN>k$9$?88C$%_}@l zaWRpuzCl*TsBZFSU~s`u&ye%6sTe$|_GJ7^vLaJo3)(D`vyz%&IJ^~fU7N_Rh#zz~ z>EA7aK=G+qxvkO$YH)pdm>9NSHskWb%tkk?D3U2Kn$5f3s6pVUI@C3}MXGg0d21Hi z-fe`MM)u{M+n1&tB=kp}V8fRF?5=t`XNLg_Uagl8TV>)WwJ;V+T)P7CC3i@D_pQV& ze!CWGZ*7rpoZ%mp+V!TBHEP)MJzw|A$oVMg(sOXk+=rcV#epJ@`c|*4QYdZb1e9)v zS1Y}5Xz*9+aX|!Eb?n-$4_x)|z7b})T3F$Ssc0Z@oC{0H+n_zK>_U90tnearei*zS zKEx9-CWr}k+f*S#NALNRP+7XVu{JTkZHINyrNvA2Fxs*LgoUU}ajgB1?aH6=Zritm z&XnDD?5(R@3_vjKZRe&FKFR3X*iuI6`uY}ZKZ%AT?QdAu=8%R}EN`U$Adgg?Ks$1t z3q*9D<&O{$BtSvA_@uy__P9 zl-g}6P0eiw+4QBUfrJwLEV$j+ zZw2hlGp4D>w?o{=WmD+Tc}&JfRI}}XPu=~{V6Z>8Mk-$VThtG>e5Tmm@FCxS6gE+P z8b=~l)%AO2up5;)v&b@zM`@r=EPKE`l$?5f3B!O;Dz4XTy8NNX839aZ9{ua zTnAG=+FeE(YZ#xa02q{|MUGRPH`l8gt#@}Z(J{e1tJ*c!sh-swPe(yj*pb-}qodRS z_drt^rvRK>$lazr z@8MAVU~_YuP1XmzR=q`i&d%4=-#)ZAaEFDlyWU7EDYY)-1RrJwl**$v6@_bkL}VV! z`Oy0#VVxx!+33mlvxHv9&r;M7M>@_4R6RnyHD&$AUn{V<0d$+b1cCh8_3$!pGnwG) zRN#3`s{Es?Ix_T%gDWyavT4lOVWt%y_&k?(gv#~4OX_9K2UtQA7-%E)eVGEK-&)lk zOv3jCi&rB*F?K0=F8vGw^OpN$1RIF9j?cTj&@B3NET0G?ZhduW6wN-Ov1jU{&fQT% z?QdOM_BI+BPhMo4c^F=S^JwB1MWZ#7`!Id}(U_UL{YJ6C4@c!)W5TjtHn8Qz`{@NK zJsB)DmG$2@bq=l^rrZeWOgFxB&3v6|i1S%9!|a*#O<67ygb2j)xiKr`p`;U*i-^Bj zLW&Q^icldDW?O;(3|r<8W~8!1ZKe)trIJFOusKs?v^nLY;f3-+E~^8L>-LkI{qw}I z!fN)-jl@Qo3uiY?Rf}g3A!Q*m9qXm7jY`+usycfwMss|uxPuz)t83|&wKXs z;(HaMPh^Nr!Hr55tJO^OGI#1tMhLb0SJe6C9igGM66+I8EKA^Dhj*c|{gK70;v}A& z)H7Yfm5PIQtux;eJjr_v=@ii*g9AAdUKW!vR|@J6fn?&JWz|ZMZ?&;ef(Ql2OG*Wp z1(re$X6JUwJrCa=J(J!b<@+%q!l)_EQxsc4w)8YNS0Z0on3tq!qS&&HXJc%;>dID` z8XCnjWJp)GejuQ&f$>^adHtbas+aRN6HP;$ktu^_Z^36Qn=sNknSL2rvaBWftt*o+ z`BF@74+cq55J7_t4cyO97>I#Mr@yfb5HUnZ-rB`s@g_h1fI?Df@4g-RR1N43K=|ZGK*e9#u`52 zAcLZxXK^1G>qqZsz`#7}^gtAU6$>-7hVUW)LNrl?o=o`6W%ZrY_iuFqaXBDtE_-NRrp=G&8G7gmo}r`)=s93;74FTtP{$xkvOth%~KWmKj$kO1w8XnwI~iq ztF+`2h=~R3b83q6s2%h9*?b32j+$V+74|R7txeOMVI=G9=0)6SvR!Pjb~uY4;SF_! zLRWg&o1AHuUnI~c)C!(1aaW;MmGvC{av$qE)T%88ZS@f0BgppyAgP9ezOgh0Qd4#- zaAl0aXSjN|?5dCX*KS~Va4MOBy&_-~av8L&n7swy_7lQCwsYAOxj@pQVgV&GGe`4D znmh!@Y=6s&7r3pptiKQHC<6?-c`jdFf7)np3$brlNlJ>>(~9Jq8O3JM`^oNr>4wfj z64ob?)|V1b_%g9dyP_&>Q$(mBxOD&$tiPHPn9iI(u1(xTAt9htW{1@E^o?E>4_$1M z$U%18{r1`}y~?`C+!AMx%6cn*GeF(MhxHWM9KpV}0Z+@@rqYIb_XYGy-3d5A+2Kxg z9#w`go3|0GN)<^782IjWZ1G!fL0^^#!_MMoW?I}Qh%Uqg44+__E{`Uu+fUwm?-s zPm!ut#H*cs&}$8aIJe7Z$U^1~-?m)o2({50WX0bqnB{(CG^p*a9xRmstY;X^u7{KHkXXrcfXCT+-|wJPrW=YPA}bA%3}a`L*2@ESwQ@+5i%WJk@ui}e*Nl661>JC^(F z2^>~e?)Ypb*6Z(oKw4jw!A1aS-%9S1>dh8hpTX9-b?gqtkM$I^PcYAC6OP$&2saY`XH;0C|daT$Szt%=a*EcpM~W5{^B>> zh=OQxB*6+-3xh1EM`gE&54ic5<*0?xx1f-sUc273sSy#kq|)#rv_o6^P-*RQZ;{u7b# z2-`l<)Ja2f1c!(Nmh*&tDhZ(Q7mRr_`f!_-9#Hy`^ty*cxq>+~Dmi{T8vkd1it-ad zr3c%lbHzqk{@Jxkp2*41$QU9-0-S?OShNKj0yAsPCt4V-mnbgY=6mbs7 zpxy;f)#l;sSmx7Jat9dYXsOMdSpMJ|)}*EV+g8T0=pM=U4AE8KG>%?cFCYHragi+C z#rn+GT|dbMS#5?@5J&Q4_-gY%biY?wwmvYv{YV%gLW{1dP-I=C#fMW2(vyuom<2bg z8b-1;V7DX|kCmp-h!JgFPimJo=QD0vy1Tc)za#Ntssg-AvXUzsf2nFw>?2bqTMOqS zkFBxS|x5Fq(;}eX4sljDxJ(-ZvFI3VCBIZ-J zciaMl1G2>h74stsI16(f6+FBP9{DsHl1S7%x~eNCvNC9lZ+uHCMV3fxQZC*0o~1oF z+?&j4jU#lpfHcjI(v8;vXY!Qb-AGDzY_7|Dl(zJhW##_0x2#HpYQV*qBEVg&c~d-y z-9sP1<<&?Cra9`#tK_wyAYJRZJw6Sr83lfai@JG3Qua~`x@r@i6g>QM0(Mq5AoqI< zoBx7E>(q|zP)8Pu#HLt(RiKiRyr5dNy2+!uDRS$?&h(Z4StF%W*6h1h4|D^6eTz2H3PpsSRe)FRDM$y9jQjR@>%=9GBxNuR6`e zN-z(sc_}KuoQEIHvo=xf!T5buOs74a5F(e8h~$|iLo#_PelWY%!liAZ$VR>3{W|%y zMqXfI7=LJg0u-=D{aa~FrFL;$atdhN8-xXi|Ma4 zKqWffxF$c>+VkHluR125Z^JBAhaPW=O=C=+%1sWP!ae2G;Az%&s!Z>FX&(`)DV9(; zS9ZIYBJEG(OWOP@)sCA%X|eJGZp$&3P$lO+wIU0cR(;Hea$_o>U$0pJSWn{K=y%K+ z(?{D%8SReby?KAZb9%R9;5ZWx!rxUxD}!icHQ!gZSkKD!r)rPM7Jaf+nB-U}-*p_B z8)B+!NJOHqB|QqFH>RwDFHOddrVGb%pr+W>N|!kG(w%1+zT<^qD93j=T7@H4>GLjw zC}nv&qpt;^2}eZsR;1Q?7-CR!keyk*e7t5y6F%T<%i?l(<$~v|Zs-6O&P@`r5Vfok zzQK(DT$RypG^xczQ8w$X6D|ieJ{_lGVh;B`KkFH^FH#ymf^Po_dz3hD+9gyInw;db zfOL8cIYW_Jq9?r-Hk>r!j3JsL<$Y~qy&Joy1mv>K(IdO6JW7S(nNW9O6IoLlSee~8 zyrwa0kjLOrtfd zd!)Dj*gT+->u}*zWeva=wS6-qpYXT=OG@0V5d%Ov&3(|aa9y>JwOKH2gqunt`1(lr zWN=JFsm0~R{Xx8#>qwl%*;avOi#K1pZL9`xFU{pw_`U7v;+`e`{7KX1-O+QXgsC~x z6o&7R%5@$0AG@(MeF<4kTBlvLbBMw~8xKVMCl;t#VPmP9iMnF3zOVv0T0$)&@sufQ zeq+^k^IF|*IXE0)#_+BWa#jgX6J^_1PMwiy&bPYB0y-Hq5>DQ@6K<_pGa%Mvhp(8e z)U(S)r8M7d_OL!P;BB?yB;=o3o*15}BBrNyV@u#A=9JkC%CGzGR{lY-U*{KjC-QRN z_1a)8{S^HXj4;OZ1nhV$yckU~?kU4&*p_eW>BDS$;rH3t3Qh&pBS?4=xOJ>G8=*BX zdIt+7G=7E-_-kwTFks^e`co(4##k4xA|BSx?Ad|B-lL#jK;z^wIGK=pxEXWhx+iA9 zS#>}p_uG>)A0z4WrLVX{-U&XC+;MFGVrBI@M_ad9YLIo#xe5Ke>347JaNte)t9cYv<@5WpeTtnj4YPDp-p*OZtw30v z$NF|oG~wK)fwYF;XH^P~9upCepP(r~YU&{(ULx0z4pBOrEg`x}_~TVTgI@-QWfCcI z=gtRKwasMqZH~$@%`2Z-z{0!V5-#GPAC;V3Dwh)cSobaYZ3c$!5Oh58OrcbfSfpc3A1ak?D6C_Q;1OeAA`028;0NH&oI@- zEQfuh(5KG0;Uq_4c@~8_k=9=|e)h80r7SQ{1`umX*4 zFfA-WgDPKJ3&%3qLFSV@p15k1Slim~}&`^ufD8>%aB!fHb7$lotIT2$2$$qrbd*+I2|L|12K^ z<2hRd+oc9C22+m{3lnowb%y*>>!5`RrTs5~k~ZIR+td>M&^=1+^|c2Wx?GJ^RbiYl zd}l8N_`Q~YzTBl$u9VqAJJn=mBiLdR=EHok?}}0C=@9;h!eQqy&uoJ!f2->rSA{J! z2{W{VA~{dJB+?#Etw{B(0LWZrpY59J5uEDzoRSjOu@w-&^S8GXO+ldDRtLprQxYEz z^sUY`&-sEb;`bZ~lkp|e^*ca7LC98Yyzp_!>pkCVA5`SZxNVIr(g)PLudW_X_W3tw{neF^cwHB0L=4BJ~A0J~eo%CYApsz)YkrezB8I$xBEjfVKT^D`O|9|7XL`8KLn{ ze-6s?l44W;*ID?#N@e=r*-t6|+#+Pr1u63Op9?}@^yzU_C*F(2C+xcLTjYt@pL_;Q ziUNNKY5M<}Ur=z@@oBq0Gqo!-B)Xv??fLH4-@w9LTaOir4AlCU$P{qY{N%hyLS>I1 zM*B`?lt1c%=J#GGZLODk*K#5(iy@=h*CqYayIo9=W>3J~=t1iD+T;0}z>h3)B0Q%k z6!l|d+2&z|P_gAC^-|$K7XW)h?aEUg-OgLUt(@3-siWj_|LylbCID1suubR37rPB6 zZ!xh^LiZ`(|2lQlF10*&%HNQq#1ITzQo5>o{F9dfx}R`5PTazy`!7`~mik#+|CXhp z=Nu#O8PBGa81bFU1Gi8Qfbat68I;J=$UquGx{1Xa*)Klbz1){*~D(? zyQB?ojQ}Q51?V+{r`4UYp>tiD)A+cBPm^|tz{LY=wjANCsYnQ{b50c<9PPqS(!d|Q zKWMyq#CI@Cpzotv={*Kj4(Zgy0OZ-SLhe5cXI(i5xLiESw5 zISZBn_q!rqU5ZWf3l*yNu=^#GF?pZGz-#<`PLpURLlvU@Y8td^L_k+hA1u@S& zvz0G4_rJ)8yu-tEP}P3RUr^ijV}Z=k@QQ z-+ZHS{8X(zCU-=!2i_03=7rdKXUfv}w*qMGcrH9DdElX6&O>>IIobW+vhA3;>%9*M z_QPM2wr%!|{MH?pf$2au!^;rs?`em{T2KZDk(pKF37dzT4i4LB7#W}M#GSQ2v#wXi=HdAZ11e(38 ztNuZ1u}u0ARhEQ{zOOvFAQ`g?Kj;;#u~=JjKXTv-RFb(!KD|vM1mD!!v}lB3cAQi& zubB@dVDRH$dpiJb+-Z0gOYZJEC(QBga_)6A-JV%ptd|AQ>T^1RvSL z0__VWfRc`yw9B6*t_#P!G||rOw!v?bKH(T?1=Lh+BgXMy>^8_(m`CugNVS24^GHsZ5 z^%doboV>H{79TyzB6+N?_Z<$h0S$ncb+En|b4ysK{dJ8bGJ>WS$CV&L~TEZfh=Yyc^pl)>U(v!>B=GD*r zocr;jyrLrkf8CI9a~ImBPNG)=b-Z5I&ZoV?bsBpXKEd(> zJl8xL5Y5bY?SnL;kQ@v^;j}Q#t^0|1w?uyP%^VvEidvgeekh?SDj~5@S$6_HEWl2# zGsQxoRX_ki|NP>E+TYzId*02omi}0aHSl%KbigYaB zcrL_AOn4}Fx40Wvyy|5STueopnAPk^YyG7J6c<02Y;#S3IC+UEhH10Bj+a?PecTBr=ehEA@Zi-V~O1Xd?VQKdg# z=ODR$ZKs}#FF4NgNEcmF}jQ6x2*;u%Wuh% z?S>7o-~73Qj?--@j2*ZA1HzE&b61GxM3CB*A`r#uigR&Uhf+Ontr{oUY^kCQ!R4`i zKZLc5#-?lEYJ@Y+9j=bA{1g9kI7eskY|$44By9nr5iFR;Gume}xk!~(y_gce1Ja(oHw%5p=O+C5@jY2rQM za0au+GQA29sd+(cRGvz@%Q({j{t5%+6UeoH1*L>lrM=27C~CjF6ze^!zl#22x(I%% z&eU1JVKQy*YIY^pKRuujEdOSP&%MO=-LTn{V*-3BMM9BVB@mRGT4PL)jlf#8rP)4Cmc%Pl3xzP*i<7FV3HbD%Yu$JXzY=`oE*(z9CqQ^!4W-ViFMN?Hi2qq=*#6K60}ot+IWH(8qV|HTQod0 zTc0-5rl+8D`!$9sa|$HIu6eTR`exLFSfE1uQ!8NoDwqFURp1NyZtPml2k_+zt=iJ( zmJruQPq}bs^t^|t3FD`Z3G<_uE0DJFymGv$llKQ|sO3wu;0ad}7eXeqr_|3T=wgi{ zl#pAwa`%c5&6yT!9&3kl@;7r+$b^=U(qcFOm7UQSy*2x5 z?EK;$bwU1acgd_@Nm%~Q*}xDKQ<(~TZZY~O*57e?o5_sw^mpczr8HB)bUEmy^9?iJea zlb>UJU(Z!?z(~dq?}mmFXVM=>ZaqQ2Zd0m|)QJ=iiV5N*Nd~zE-YcrP&|N@98jOSr zb##kO6fAR1IeDRowCbw}qTaUy%iC&&i`@tbP?+&qIoItQI0ZQM7=ykTilP;gqYyV7 z!8gvs=ku_$D2RnSk?j>XosvVOdm%GnP`Nw&1ks>kQxYwIrx{mhuptw(q}N)|p8mw? zj>Ew*FR|Z2fON%emV`W+c_xdt^rDv!E1FEyk3H?b1~pJ%1B2CGQ_JHC1X@IR>O8E02=@m99U*@)#ef>YLL29%kfDR8 z^(Zqsdgdo1J`u5$4-)PyrVlsgm1w^`YF_oGVMlrLD<*Lf{|D=x&j*6xganNY)kGH% z9P<9HaZcjF@XIfqLYdW^z7SKK$!ro~2rg>+3z7VVBx(eY6hU7+J-|D(u?iH=k$$+D z41#c1*57C$PdvE&qX-=ZVQ3U=PtDG?!wJi;VbgA$p`o7`s z*{Zkp9#&P5pWnPOHC5pF3snhdWLn$e|E_dLtMmWY3pn#C{;^*IDpn}7QMSnSl~N>9 z*2R(jVmIYW&f_Pb_SmpbjfL;zKXYeQICeZw_{Qh9*47Bve~>L@7=OR+Q)u(YDXFbnx*Fqu zA?#*rf$viixd_iQoWq~8;mb_8(c6pB)~7tgD>W zuJ9P9xY^8@u5nEhIPBRQuGsquzd5G3@*sTXd1gY6IG*?Yct~O>Z4K+yzJ_{h%Ip6~ z26pZ`P!9F!|G~xa^P$bZbQMgw|4L_xhVuAnf@{Z22$3z6mO{t!jglGF-dpICOL9no zTocQGbd=9@?6rAB7)oXdTKjY}8GrELQG(Ky7Qu|m7oJG5_!QGE{%`*R`q;ZqQ-bQj zbuN??paXUjz21Mp_`n1EhCajd(prtEvP-ErrnUY~F`?kK>U{cZ=|7mvBjy*^_M#XfiYuXvu?a^s9Z*i6VV}U9zCkY!)@wfGGpFp=vur z6fst%{!-2Pn0MymD!EL(-utftl-7O~J?lTYcX=P@zqav!H!T%32HL0RoK@sw7C*K7 zMD`SAGV$V&({S-rnk>@^#C<2A*btaONbkquODSh}(xIy=-mWR8F|Rj#NcqT@*EOw| z>cA+994)90;eYpw(NvR8bg*XHKJb8yBW-d>v-|)wu>X!@+B!vY2D$l_Z`2QyhG!tG zu?4OJLLH^#&04)R*>;^#qbcA>!b-lIH%^Wgm~RI@y(%-f!wAU^*jY}k6u&)9;Ofwz zsB-h5IoEl7Pl(>thic9t{^ooj<2&0`VH#P(FP|GPy#4l!AXoRz&43#Z^8?P(Muq~8 zpXr7^P+!)emY6^5E!?gtf46VGo_ewM(+RFd=$bgAqMfE7<86skditkC_R{z)$oyG@ zNPP^!h@}~$hMVc;MS99!-4NyetK|)flbx{ir|B874I@peS|@fePS^9Z!*MUw%W0v_ zt!y!n{#f?sfL%JP(+A-xl|hcs(0F!N!IYJW1^_d+A)uW28bxl?#mua&B8l5h^qzs# z*tkO;pVtVEe|z-nD#NyUwp2+9FAa_DV)T=nYNz)kLY8@hNHQ<)n|pqrnX>-Rc&q*N z&pCC)Sr@E^b!iSs5*h1LyPo*Es`4#b%?C9HOH;FBpZ3K0#Ahai{rA@IV7;rn-ed5k zlkmDRnMt6f+lRF045YJ*3MK$A9A-8KF49T%>uLvAmSqk(?`mxpY_r2qx>j7BG!ph> z$L4Il5rtG@<=gSf)Tc`%yC_(6WL|^f}7VhZkS7&o^zFn zM(CeOO^i*YqB*>>g3CZ`SmvTVa+_c`@2#S3QgOl`<)%LNUzkR>a{ta45xIZFBcKNL}GBbUS>Y?tUE&E2-TV;m#l;`$z+`0;Z$v6R}w6BSzFcLt^Y` z&W&as)KP*z33nMoY1miTg|kX{>Nv72+dC<-%FoL>&Z)|sdeE9(`w&6 zVS^{M7HCbuVsm7VbVHx`w2gnXCUi*zom#2aFnQ8j8zG-$Ph50(yp_qlF7w40MNhwku+br!>0~>MrP(6y(WmIXM%O! zxGh%zG`(;nwCUkQo8@lmgm=)#IX?B4ZOS}oI@R4f<*cRu)_anQu7l(b;I#Q} zKyyU77&k2x7F@FJVVu&WSY!FuoQ zQ(*J$ZsT$}ZkWTpi`1_sml%1(uyuN!@(JJPByEoZ%+bFUryokfzqdg;I_`0hX z47Z$npN;l$@ID9b*Sq;>YfM@2z#xzGeY_+2(jnRLgG} z(@{-t+O8OUYJZ*~dk;pF8ZROE8+D{{f71+%7JB#X>kB^H&4q2Q0)LVHw-0QVN!9Z8 zrHjgOn&@|T8wUqhtd6N_>G|_fbUEA`UUqo(c?X!77!gKtEye@c$T7u=CM37osS1@M z#c^fncSU$FTkgqx(LcVfN=Ns~98@@~z!~PdUuuK>;Ya0QPUYKUW?8&=hs7s`iGrk>C(lIM%)!I|Q#ed^~#61mmEtZj8en~+3{hwo?p zJ2hPwTkk#VmZ_(T!@qCAKN8QuxFY=WbadleNjx(?neCurXeipYCTw(g&{DjgVZ8Q0 zUmJ%UB1ZXEZb~^})-Oxr&s6Ulb0M`}UxW?~s*^^^huO^H< zyvv6MjQJ){wJ=D)=V9|zPRb450=qS7==~QJx*3@IJDPAie;snhFLksNh!4FX99#p}8=TIVW1Z}a@Y!OAnP&J0KAbjf zx=84)CSGWNd)80tf8PHt5w$w^Y7;4$CfopnQOC!}&!#wUuLMPlG}_r2^)KzujQT!` zMkaEgm_x)-x6SYg878Z1RQQPq6`BmCLrq^w;wK7mQp;hY(B!*t#21|djq=z?j5PUj zQ?gDsYbJ<;LiSM}_NU~ulRiOWnu8yoK(D)Bb#ErRq9(wXbJJ>MR9d!XDR1~SHQW8_ zW(~g}#JnUDvKSj?y{JxWXB!w1Uq}q@gsaKpN}MJn zyw^Qr=*(OEK!!mSN|$(drl_rOF#<)Ijil3AwJ!IQzs>Ev%IX=ps;4gUp^sL1)304r z6W{+$@FRJKm4bkg^tVGbE3=&%fuVTrX3OLirQ$$B1@;4#Qs(teD$&C}6_gN2Emv$( zp7x_5Z`ROPq7EW$jl@eeVB$puPd~`IdX+&Uaa%54a{tWmBd>MxQoUdGK3|^xP)zlyB8+0{_A)=cBqN{uu!9n)591+4~G}N>Hd!`nGN64c4Q5}P>)eb$Z z?GTS{2`~~#X^u+EmBXgCORZh~sh**uJn-WpQY|x9{xOhVS*xm1LZwYVtr1XqHMr|U z!(Ln;n+@wzd|9Au$fx_n83qVXUf`mY2|ozh&<=$33$_xq`%OJtVD8~aIMb+4y{Io-8|xjonE)62|eomNQQ=X z1w6*p@%kl+rH3LC&S1#ef#u}EJEDdSJEDD)!SFs3!py>3z>F=5XbB)76e}YkWXz}R zRJuxZ&Pi53jg|ywAOn5y@m8F^fn`7?F4WQ(s2MyFUWo8v+_BP>gnBQ7P0zQ|?LvvH z5>G$+8V?HL-d9j(>>W?^Wo=U7I?%*md^+A`8Zy8QswW92Qo&7oxIZF;OWF+u-TLM0lcuu!Dll$c ze=*Q}-LP26WCdDZ758!+O}Q3lfx26MHQUpw9W7v~CD2rV!s29bBf%>V{eP%?%b>Wn z=Qpwaxo!Or+No56IbG|{jSeYJ^l!3jBlU{++;;Jzo(eh)9djjY zn!t8ki|%VbfB~II%oER4KE&Jyky0LrjoCnv?>3;7u&M4b?J>sryY^{cD3o8Yw|=pU z)vYrYo*s2O<@JrD3kaU3Z(WNL&$j-lgbw8g9(gL$rKq%V&%=gR8SJd zF}>hG(HjkG7cNrhHN4yq8AT&3-n*?Mg!cMkeBq`)qRO|@-nVi?XS zm_+J!3|;rWr0O+mA&Tx{q+0zdiq4LT@@>Xp&=BUd-gnqMU(1f12JO*dMrIKOwFW8mVtJA;-IlfZt9}ZZ4psqtyl)%u+3;Z)p~B{At%syUbShti)4Z<+yncNA21A?G_et-Y zyp;1jo5@vcY$cEohY+U|&%l$cJJk_WPC9vwQBVJfbLft@X?I7HI>!^3*4dz7U{iZ* ze&f4(IoB{MrIDHFRp@ ztPB8-Tf!eN28ct|r~50hP496+3k+RkmlJ{Qj1qs{!FXnpgBs~WqtY`}O~&D`_3dxM zw+ZC%9$YcIyq=O`KA4v}E*jNZCS>b~0B&LkunB)+*)489|Z;8fnqc4@5DNL7z5dycGr z#E&VkDm+-Sdv`gCT!a%sav?ls0zaiMDebaaWOFvXdS%7T+qcqttLIyF;G3{(yuG~o zHV&u$aJj8n(=O9S7wk1;G;m=>nZ4XR9JjwbCY{T)WJ)&re#2=jTPt71h#OufwQ#uc zgG=?A*N2z#1#5spEq!h1g|-~+DOp_GxPrYVe-Iy@NXT-$;p~9TNdfTstw&$~Pcr%# zF9K)T)T(ifOlGQ>(Twu~-QLtnJpb2yAt*-wplIE>9m<-@mBay&*CDW+SMo^QEhp-93}c4_&<6qD7|r-f>vBt(*B?;FrvmC+OnGF0d9)G9Uz!tZNe*UnW{oU~7O zcj=hR=<5j=BWZn`$?<_grFiFKj@s&$8}9 z(weJCN+l%?ZE2n3!}Dq`2`vFt;rU@QGO_g&N04WOV~_-x0MYSB#%X$(nlZj3{A|zx zaY~|q)?+b;BUXLk4{_n7u9LgrOhNT=SC;HK{hSOuQbeC0y@VgvW^ACGCqdRfhR1%U zNCYfL%hZ>@S|%{}ZDt*knY*l@%X>fUq~1%go#>3PNzmwb6Oxjqh%^o=m_0CBP_KIF z+~F)+9Jj5v&R4Z>KYWoKy7=qv#CIr|K^tVY0C()_DNb{>Ox-Sbd5PsGzYGPgMvHB0xN6jQD+S}0c;&VfD8BS~;%Q$O2IgxH^NxAA- z?hh(ocU|+FWQ2l`jsif_)E?d5}5Rg+zGLS{D)4(w8fbon&hr#rY*2Xv%PZ zemD?LS>k#3)Lo$v;WSc|?7LG>mFX3a=AAX<-ef@7Kt9>q&Nm-YzZv`yHOS|uu?Dx+ z4CRXhh6W*64EJknPxzxiBFBxVY1#EEW|+rzVo1fJQtj9N^4!3E4DYxDxdwcxFzy$d z(EaO0tLUYh(Y-UC!wos?c*!g;&MFrH6}8;rM9%TmBL{QCDvo!??hJddNj8buq?ce2 zjfZY6J&rJ5f{%@Y`+I^4 zUx}RRbVJ)$b8tcDnyzx!xXXLK@Tmyx^4l9miS<7h_+Dwxpr?WSa(SP|c?)>pta|F< zB=`wUI1@kuMD)~v1G`-Xqtkw#SEWmw+S#v*)ykI~*BG+0y-k?LYb`hGt48>N{Iy?< zpgNupJX&6+(%1hK70z-<+Vs6l@>bbe1^o!o6EP$@wqUsIzNvAUEk7QqyV+jKyvoM+ zYo)HistC&G=;o^l+R@BM`2jC4S_0=CKS=hH%*UIh_DGA-^s|i~9<9-7KHYB$;XwDx<%gaL`9z7-ucZ?=W4~n;m={TZ!YJk zSHTv~U~5+-GF)zX!0wYg!TeMl^YqY^*tt6TNtRgcP!RmaE8O>pUi;V}nKe&67dk&9QTGqh1)WGHsns=CWg{676tb0?K?+nx^8lx6NDGW1MGDSfZK!n0o~yUG1Ch? zzxqwn@rX4m3YO~~a+qCw*U=y&!X>~gxmz4HhPMABUP_uSG0ByD-5=cj<1^Wxu zgT6Y=0d06XdV*K^vhmfiD~VXf+K<+p2kSGIs&0rZ#X+1#ay!lES4314?T!CV)zf)) z&Lp7X4wf%oCkVrUYs|!gmC$G0F;R{C3g8@Zb$oe1nMXyd*w`yKQ0aN_qy6uwx=e@| zSv%a69c@vQ>AW$Gs49?L-3p=&`*{GC9R%_jdJhwtDoEm4z$uyCFulBWYO~Lo6}`C| z5d5lK>-uC&D79Sy=oH zC2qhjoi2kFg4wT0khQ=Tme<51N`$1vSK1TBBvaIr+0y=cm0s`rX6sn-?yXjeIfrSl zB6l=oYmct7`Y&u}1-?CQ;)j|M4+XGy5qwi`@B=%ihje7ZzeGByHbWa}50LW}MA6#tOA6Zb>t+ekUCKX$#7KZ!~M54eL0-qQ`+u5or6%{H1_jrk>l z>-V~}rI1jej)wx+6i%#E0*fz1JYyJWlEaSAnWsjacexqBd0>vUzCJJzp*~=}ze}&B zEeVVH>kBqwi9sP6tdTd`q1qFK?}_Q&UC|x2u$9QRr?c9mu|Zi2$B36^CkjJczc~79 z%mSzV?$~brrmem7_7#1ssjROV7wUL)mYRWnAx`@9wReFRl%ajnx}DvGPNIIy&eAfF zQ-~y)84C-fAThJO>fyYvwS=nLul>TXAv)_%3)pXD8!Ze}?nfsk)?6!o?{fH-W~K_p zSob}?sQ#Gr zcFtQ7#g360-4=)3~RMB^!dywy!_z*BH~$ znq6%SU=;G9Qs$;GN>d;fX@-$K?YDjJnTQz8x9Ch}Y;`mN?W;%nZ1w-}BqawtL8yGm zMrx9508{3B36hKfu?gu-SE{?Z5Xa@=wmL35M!4Fat~jC|41{+Z=aGEmhKKSTk#j(N z?NFds%2!l%fhiu@o#Dua+5q%u-fpg+5j{H<^*=o^n$*2iWq719PqcHJu6Ir0ksApu zsziIo5A1g}fVon(i|Pb!DjPF5<;8@(90PpB#1b|;I1Wt99l@>R3`MFB4gz`}J@-mU$YYZGi28xE{?MsQQz z)t&JW(ch#QfHh57!o6;$5%Ge)DMHz9H=mskRa#@PgM;Hc_NR@?WbM7~bG-rrgGb24 zbnPFBvtG+#{qW)SYaf9WA>s4$Us(WspEavcFvHj9h1n`5VR>=Qs`sS!2Zhu~XbpeX zC)9>~`|xi1(uT3vV(@W3FxG_Hj992t_3+Y(n?@$Z{DAeckjqcZu5ZBUs?iot(;1e? zU}8~w^4*y+>ZOis3Y&O0F?cb^wtqd0J>o)O>*N)%h7ueEY97>{jpC&)y31*FM_%kw zA=x&7&!Dqrvo;9=CdU~-jL4a#T0pSSOptchaLFv8H!K&q`i9NvVcb~lwb+m@^kAij z_?Do&f6QJ)Qz?{1ctGMi49g-#Db274=Pz6VQhVjx@i@XsEcos3cHHL&8L273(&g5E zPT}oUS=`#?2i^}x>(=D4DBugS;@nRl!`#HQ?J47dkgS`_aLJ^0vc2JT-~x*!%MfJP zmNhFpYTKvv=W7S=J%q;SZgN++@dSdOIQ+S4A|ARt%14u#!W_lM932Jv;y1vP-{@Q8 zQP4fG1-d*wrVQunL{r8^Obmx*PZV2S#b158$Rr+)x8y>op9C6c=gg4f_RsUdjBOS7 zFB4W(MfZ7TIV?rTciyqrm=hMy^*DjA0v5{?6nH)*dwDl#mua2a?OA?*Pn=<*?GL@! zAzg%}M1`J_kukFt7MMaM4-@n!v!njiBJ;Cz^_mA@tqhxS@(&mJh1mM4fJ$qz?JJKF zlrIlkD|!^j9v-x!)qB2l&B>B)-v`nejGL@3hBq?UjY10t=(Kptx@MSnFVkwoa%=Fs zMwkoh_WlXr-{zItT_PyTrJjnW_$MASqCEmbyXkQC=nbLa%mzZ7KyIczgZr%X25WeI zNkIa@CgHq0OB+e}92QRWg5PI#5A|&Gx}rF5)Y^MTEko$|YFky##B|Jk;Y}CY@{|7w z{(R<@tfuX;YXz`;yYF)G3U#DBbLZ!O78G@nwgWqp339?!N>Fk-pr&b0_1tXYMf()> z%jg9AYnizK8O19iGywZgQ*Mn0=GO&o5rf&S zWj!xbbG?S z3ea>f3w$IM^L%{ewG8{UOPH+<`x_%5*53MHl@s24fuIDt|MSf9j!V(#-u0%#DfKYX z8fPNpzSr6PG8%HZ7USTOuY*MSW;uDYPAI9Luo;`2mI(#UDTR#yl1EXU?Jk|8G$gIX z%~qAA2&&E_B=H6mnyJF0fau7CoCiBBtaw{rQ@TY1ri}WJ`;UiAFLqQ6dF(tUKUJ8H zz%5hueLb*84p(mHO7F}Avl}+37-uM=c5W%mMkqBiMa6cy!!83}kZdkSVKUVF-K^(g z@6p8f|CqcA**tf5h`RKsxPJg0=dR{GoMOUCXhq`ozd}Lb!G&bHy;g-06KAV_oh)NA zVwyGF*^O&pU;rN(8QImWQKX_197ypH#3`l@6T~S#A)OKa&M`LAax!QLJ|E?d_)>Xa z*TJEJd-BDbdU%pO2UaQW*!Qx?e+{gOXK%x-?_$;iK^bCDaYMW!OmeBGF?!#vRM}JNcVC1VZL*<8Q9&GO3CBrds*m(}zzPK;A(!xeByi z3`ugu8hDyUlr~W&KBKdg$p~S&5Coj@n#(Q@m3nfbuk<=Xti}*S5=%CGqF6N}bE=&R zj^wEv=hSZU7Ity}4kIwkLN+lV317Z@(?tG|j{HC(F)8hQnUr-ctA*CY^Xdp7En18^`t z92P{8fDCJCBfAl@tg`6*9`d!=cDRF1bxeHq^F@eIjPm@_FFR1jYI*{k{7+z{?0xt6 zE*L8auKbjSzzr;%23X5>4f>ft!*KlgvVF?&u_^+M6w>x~zFXWr_<7P?ts0fWlBAmQ(A8a?c+Es2)?&e*BS4)$aIT<_U zmbJFBHB^d9V7@axDO^9guZE%fcXw4-7?N+m)3#0rl#@I?)M^j6)R1ua4B!mZM`<&dA>V z7acuR<{#(!^{Po`7AnKZ#edK+4jQ zzOaQ}r$Q}surU{gbwObGV9dNDR3w`bXNF0WnE0J5Ie{bRR9jK9n>20f=~nEiuutIK zrXi(YFj&a;vI2?_MbI ze(ZjSYpmnN-KR_ycxKYUp^$ljTLg3*Raijof4jA1=;XrIu)Hv8{~aatQ1bZU95bOA5Dp~r&D`dRGkQogV#PpY6(&uVEthw2*J(~Pq` znd8M8#Jfni#XF_;O_6!93Ku!RS;YDrpYI>5GJ+6r^296p?oCY1)$EQi4ri?owO@6U zvTBaA7>|FuIu~1s>bghaT1b~Q`G+5!v^j_-Ef_oPtT+2=%i;iFe6rw-k$mNAy92WY z`>gs*U8Yccqgq){7Jogx+Qn;|YHk68?-6TvB=AM9uZV}-m$HbMbuAhc_K~abqA|qv z`S2cxO6mB}@ANv{)N2M zxV{F+88kWHmmwCf^(;sSTd7&?$K}p8y)n_e6t)0+L~sQ*yqOKPDZISs57U?^iRqp} z*p)xVG*xNFeC-j->{aPFLeqS}O{rBA$Q`EwlCQ|)HdlN_Y-pqZ;2dnofT)?4ulVAo zvw{BA@ zi_8?5(P|>8gFzE(Uh+Fx<|EGz!m-qL#L=I;KRALc}+{5Tg|_YeaV%!-f?hQ zueM1a9M!u!s|DMG9r96xRc$l#8Y0uTHq#8x$476ixsRGt?2yq$wRy7NCr1|E2Yz(j&Eb3pui5hIuuXb%n)sR z^V!0>Kn}ip`ERM8}iqkWkR2>mmV1jlKjyM&#w$LPvqviGyJt#=PaL#?3 zEk9O`u~b=ELRcMTeO#=+gd{e)b_G_8V?Uxkr=<7d9d~&F4!KKfwe5T)M}$}iQ-gZ{ zhbS&Exqr!cNTd0MOAOP{45Es^hk^F?yg_&*QPCef65k`3SHcERgzJ;+>h0aLxENS+ zOux*m+lboY5X5VT#{22glxq9Ozi>9H!x6E#?22!G3R=9YTHo-3TH(55y8pIs+`t}; zSz66^1qLdDn%!ydw9Ki06jbUl^FJ_Za6+gge zhTbUSCgU{^Si(I*EpK6kYWI6daXw|@ws{;eOE2%W-qf`}D9~>mM#+QmkExe&)|-;U zRu(mFt&bv1-8V==b?JvIoc6FTNke*)JIa1`$~Ac>Nr}39nabZzme34;=Z25%uWWqy z*bh>z-Vc}-dSd3qRH}$V#Nvi!3A0~NQt5Q|Z9E$8j+L*^NP?v5+X+I_?q8iD6mwh~ z<9}v~uwQBU;#2>6k3W%d=7YZ_nJuz^{5_H(@3Yjt$qghwS)Zw_IUvtX7Y%T(BXQ^o z_+~%4uqESDkNaWm%;#Cd@79dVn{V{{Ld2JG)Icq6;}TLICZY(2>7Rc$gG0Z(5D1Wr zE%M0n*j0eJdwj&|Z|5@5(|~$crL^yJ)mPYQYqVra478n+>V$(`gLn;Q-G&i^Z6$YL z-$Zn3jen|3v{)$A7o?x%E0=HOU2u& z3MpD;Om(Jg`uoFo$TPW_B5)CTffOJqjl0Gt1`lP0V{y6a{h*=gxb<~e%r#(qQ(k;w zr&Lsi-`UEki2ap5uy75FN^g+7&oHokR2`K;cOG9Tu|IljTlARf6}1jZ{!ldB<7rLy z4;SZSd$lA>FW&CcyCBT){06>nVMM{F#kJMggi@T|qCRz`RRj66O(=p>oY-cAw)4l?15;9xkVkZa_1*q;sS!<)qy@zP{Vd^~>sgk$| z4k+Y+%o3%p?0b}M`NkX41*~>;2hN1RU1(B!TjZ#u{8o)Ax8jB7JbY6nON8No4-$8pKX0&- zisxT#x|q*#*zvqFI1ex?tEkQ|Hhb*#G-R_1s8MpBK_0V*p=AJTPEOnY@i(e zm~04M096$qoYNoi`?8`X^17odhZ!ka)+4FJrTF$9Y(N)+k9@_U+K$x|Rl2zI6soy+ zy%t~u&gwL|O9nL7uDVw)^N9O&A29M3*$!B<;iGxH8qQ(<;FvkPQ2_m+%JYE})ImW(;`=B@)_IZdAO%q=8qWn$#C@(qMLK>ykvN9V<@Aq3L96Xpw!g&DazBCR z*X_Q(=ADbaKAj9VJ-2E z_Vr~BPeL5}{pglzAoz4UD(W|jguVz{8^U$2fsNG8>kUZ~(d1jD#+?FM@zG{EaGk3N zxF=V9xTU6hMx;H_Orr2~N3d~KjRYZ6Ngdkxg@Xu9#KZO^&Rf_J;rY24nak2{J8fOR z!DDxNN8Y~iCdP5Y^F>%r&mwrLiMXS8_9sU~OVwWG2D#|GZ@6A>$b6JfWI3vt4y8%&q!O#~Hs=~1m zkSrPG+}L9R!7?<=r%D2tn0{Dh-XCsxi)X&sd|FDSz6$Hl8Cc?#7$@ndV+pK9^&U47 zv}NPG=~I|PI%}HalL=aEfNGdD2ho5%Q09YNu3@W%2uap}kP4(J!z99j=(ia|22G&l z=%e_GWLQf2P@|0xhuwYAgIOLJdkh5AEFzK;nm2UPA%PN~hsHm@GMh(XJsojzmx+b! z!x0JF`1H?JTb3hlxWvL!7B^FwTWFtQsk8N;YBvf+Md@$HJ6oqU<4RQ122K&ONiAW5 zU-A?w`3z)rTh^n7GfO!LP#mEJEF#wYO=LFY#n$^G6>HF-I&RQJW7i(XUIN&gLDWtQ zm;C&nF^Nl3yB?{_7&_cCg|jny^ff|yAEMQ2FQ_UWIab$E{HO!y*W_CjC^pHb$`H7Y z3L^P($q96Mzi6v|VKh2z#pPV!Dn+-D6>cMsAasZ*HaJSxl#8Vadb!kR&?qYfHaj@W>KPq#2;XfAAX;I`;PD3B zapJ?*>hjlm=V;4Bjq&=guGD3+JKy0Hcis|5$kG(!v3ncJ-yE;m6GupOmmYqixj(xR zI9qvliI3!?0<%#-iXTwnYo;p%yfnaSu#@ZtJrO$*G(lCKuoqn_KVg|5rgkU`0UG4w zlJfRu8V)f|vCg=_9^x)8xYLK+9gFPf_s9Wi!&+k}EZV2~1q5SBs2Ko#Y)= z!>fH47BvO^LBt}bB)N=njwk=9q%`MYza@px&(eSf3UpxnK6dVpq{!1afAS6FVK^ zkIxNbyi{icr}v~>T^)w70l8|`CkqRHvODj3Y_O{{b3f)z_Zt=ivmTkT;JXCqtt73` zEB=6nrcIe~TwGmoV33fI*1tZ_l#IOFIdH9qP(X_5EcjE2^=45VD6=Xy%y-)rIt7ty)R-bh2BR&UKL0> zfC(=0wvHG|YFQ)>8zly66R&)*64B_UQxd^6BMc67i~$jVtO;8IgJ%@DZtxa#TLSf} zFXdGdR4ZI4V`x*5ZtOuqhKBP-Yr`bl!DdgHHrlOb+GY+m>b=a(Qa~3SF8_iQu>6N* zp8X{UC}>?*Y=r(zv2(rVT(&@py-qw_dhE41X+|KBAZ^dtvEhUcc$frc`I&&Vsv|Q6+a*>pUaC+4iGYUI%f)Ie+*3+qyOHF=jdll$!>kwa*vDd z1MOU7b&Xda+krP)+`-sqTpv0;D8Dh$zwKOT<%sE${6a?a(%L)z;+~v5`oOI->8cED z8&iPyr_ zK-WzfyC@Jo{e|hBg!H)k&cX%~S6F65NSXqGa9w|Fy!(&u2SJ6(3$RTm{Kytqn6+?` zt6|oW`##o0A1B&+H*GsR<8g?1=nED-DL<7W@lv8l(IkKoJmeF7BqmGOA{MJ9?xByM z2A61I?4Bi-8H~T!=Si73I2md;-6quS+N5OYAYIQ5Rf{lsA{Pg0npr@e1aH7r;TnsdMC?ykh0VNsyi;Dp?o4u|laZ+= zjNsN}WDcv=$0qiEmB$bddW;9;pu|gh3UDH~wNQA*aQatnL?F!@oCR*ZAu%&{*hHK)~d^!HvCmtY8C#3iYdH4AA-bSR(J96o1QleUq0ytx1mzwX5F?) z&6(H8jUu<^m8Yu+U^e%?oP@ykio9F(xV-Z(6=s*Js$~t1`^FWqqZE5~pa`+_YK`$T z)-8F&q%8X%c@ta&jZ73d?i->BedsU%D)Ob*HCQ02obklV;dwY6)+=RBAy2z8?*|WH z+~7Ut9ik1X)f`Eu_ugvyH|p?CF8asZf$jvBksN91nAm^2Ji3PUckSr!9pQ3Yge<@W z$9(6zQ-~$h0jg9jTU}%e0)QB59G{;sM`S$Le7kSM{YZHc3Ca4<1Us@(YocrT;fGS| zNFEZC=!joNa-zGxJWc=P_mnQL?&Ztp?)?r7MUe3N!Pq3KX*hIo*Wc4Wtvg%_AZyO z=M6RGfuXs3Ke|YGqDr^zwnllJwrp`y2WY28in+%A7{?$umY>K>w}0!cbX7?%@!Je7 zaga9?H%}T9>y>2k;60xMbVNvu?ZIH`nwp*O+J+U<2E%41^F|;9T;=?uXiSTi+&edb z;1VaN_5tfR?<_`;n>Ror<*u9Q$-J$SAyS_6pV8vv=qGpEJf%RkB$D`B`Uk;WqHMbRhokM_2P8zFqY&y#|JD{E50DZ zc$@WGzn|>bu}BwtF(N7MesW_5_^P%{L`Z#cJ#d6a?k>DnhIn%zw1A;+n~NtD{^sDb z7OvcjEkR^$W@Ib#4S*9R`mlKYp2dxVZlhJAG zWm2`BFCm_r@{-YL#(WzyU{+R=dvx=@R79Hlh-9etf@x7<1~YPC&#${XVzs4`i``2x z08?V?=XM5lN~Y5X9o}Yh+?ylK7Y8_TUoRzT3Kyyn`W&&z_~I1fQ(Eq7-?`B7&xLHe zvD+`hD2LL^e5FX)iCg3Nn4k2qpm!bpi_o3yx~Aiy3~&oZYHMUEV)`0rE2re2~%LgHb*oKR&$?(u5_3>SuH=NNF30YfkV0}4?eiP z!=BzxRR#`gW$Fl!TKN7f5%YQHNtA)x6?^xl+mvSo?N{q-f?x*{Gfy`a(@mDOdeHT1 z-SVp);JQ;E?pE&dhOVvJaqwmvQSR8JI`iIDN8Lj!eLMH?Jl~IoyTG~aQ2Y$`I(d5K=oEHm8|&!qEqwej<}59kPtxlriJ6^r~;3csoOH~M5HxR_tJGD;b zY|RJMR!B)^Dd~^p{<&L~u*(|^R{fi|F~~+I`v;B?bMu^aBNq61etH=!Hfo?#W3L$k zFC!i2q2fM}3s19GPCsOjQkLzfk%uRT} z#>UN_tbd%a zX@+0eZJr7T$Z#N6(BZ7Ey4Lz>zCfePV0^v6i}S!R%d~<~)EC`Ht<6$XckJQt-Sutl z(==iUf@Q#AB~@DB!mf19$vm#hg{iFNV9~OsL(6_hI6Vr>m_Q`7V_^l6fb)XtkY_JcaXE{wh2# zQJl93towybo2Fc{XNW90KG2qP!M1{34L%thf0WBKPn^nIfm@iZL3f@%SA4bL+px|3 z1J#|axZM-<_8uo)*MLD>F4OT02e#I3Hm0IF8REE3;G1+N&tF;imt{slf^yw3A}lp) zw#Ru|G6gl&brRf@lEyfT`~#A|V-n+H!rS`pstX&+QY6@QHIeXbnw-93%fUJlLG})9 zu4vP6y1<>l_30H~*^?>5<`h?`^O8;=S0KNz5;NlC1yoZ~A>QUMqlOYE<(CB~v%y+K z`JG%g;)C0~e7xvR+i8uqpL~fX`FRD_hKjZE;ezL5 z21R~oE;d+@e@IO@__Idvo@-$J<&tm09PeN9s*yZIN5MD|j))Ko`5c-bwDeHVX$V(+ z%#aK?;BA7%n}n+zPHB;k5%pu#i1ECjzUMrf|I|LhZ*~H4W={99@cv96Y&0yJx8wYP3`M@+7X@#=EjBL(ro zWpqP@SoSgj|65^!xX^Q9!Dh8RgXa%OMZndXap;XD{b7PCsx!3x5`Gw8@jtsxHu@_* zvsjEr5^M7uELW`SKH_2{rgE6wn%2;WZO2hh>Q-B%o_O^b)ejpEu6B?v5nZ1pbFiBa zK{5-gye`o(;`f89h4}}KQ^fafR|rYZ4?-|bNmbGQSP{v%VO{6(f8*fj{;zS?`Or&o zG@;Coj>5r6)de$zs0li49VxW(`7*c@mJ_d)U(T;Q6eO2ARJnZPODkr4`6T6m(&{sx zDdA!E{lEP0RP{K_WRpk#KiYYgljkP7eyq8rz&;&=>!+kP? z89x@U#rWIF>;t9zdHhtqL!UIzA~;^2boeKgG;iBdj$)a$(wxrcum4KrL&_H)gaB9m z+&+JMjVgIn9Ut6!f7w`l#|OLtSwU9*wRli1>M|XXw+-d%l^&iBO;NFDxs{&`0*pR^ z?2r7bsVi5xy5-M+fXI!@4vouM*M%h50)J=P^NMVXk--I=L2hR2&9Lg_L4C{0O^UL@ z>(J}Mi(3k)Jo|M1CasUP(ujY?A_`@;#g#(qLZ^~LG^2CuyXPI*1_##r^b)Wzi{^#x z`Rt?l>@A*Q*4t)(C0IxZIPXBu0@E|_f(giPUdcJTa&TaUXE|v2-wxm9QSfd#i5$nq z)|DTKgNf5VJkH?^oDK9d{Q+e`PFP*U|JC9vqm@CuieR; zMVC?CNtk~T#I_)$6apk9emqY^-S_VUxFZ8ou-{~yO889d%K9h)AY`j;2*0^f4h;O*1BrgO6%rO-S{tv`be#OXlTeIIN2Iyi zX}S6jyT$$V|^Zcgj(A5?Np}fk_pqUOOj(;09&>xWNte}4O^ZrPOD+5Fx%P!JYF~|A|9ms!ph%xPz&vxBiXm^;_l)Z`F)VYEXO4Ts z46(0v?DcU9Hd3(;ZNDHtb)c>zf5Toz_F6I<%!)6?kCh3bQ~z!o-cpzjXP2xi+jB0y zy=Fw_Hr$9jm!Bg_xLawc5G8X&4G$F%!nH?M*H94Ro-o38yt>Jtw=>=yFBfJR4ed*| zc<%t&2}p+HMet*J$)%rcsxjDXc7QJ0c*Y)te#yNrKmYwCVaonb0&M6wZ1GMzDX$Bz z`VJ-y)=OOz33QAmOwW_dqJj`%;y$b>6vFgXoORF8zhqcd^s1oV`|>U1&9z&i%Vh$= z)^z832g!RceBIC+C5_FHB$uBUY4TMDZfGIR)7!}L({MK7NG&jgn{6{!jq;+m_u-Rq zFZh24ERe5w;!|CmwI_o6Xbr5bg&3Yp*Dmmp524tcN50vI{(i$K)PRMZddXW(Fl>6) zwN+C}@n34`7K;l!Eu9YAKaV=5<4d?rRApbuC91AO^gd&;1vRD#oRP>Wt(IXTW;$PoCE6zRX(PfNJ4`(Fz=Qt=7UoUo8$C@34 zN!0Sl<;NoRVb%L-oC&ng5gbd6tS)1Z&Qx$Ay0MBHPAzK)gIv>$6$$fJ{N@mp#-d#J zA9&tUS9h!)$6?*yD!#O)T#k_I#br5zlJ8z)*ek)>=P=cn9#+gK+b}J6PX8NRpkz}- zzg{HuPoP{4=q8tUAY$Kltr!u`VonB({Ljllo_ z0LQ1N-V)i~xw+)r+zQsVUG`xCE7sr!%Lermk!|H z{-L~qpy1CGUWlAQf$YC~E303Cp$wWkA4ArW|F_xnI8b&3YXg`IIvac;d>$$>VhRRK zXQ_DMz`x%9e=wtGjS&w_LMVVX|4YXg|F@3+k6Os(gl^V*0t^}9m`DY;k2xgQe`eoj ziAN{v7!spH^c%;KFah>w{NmdQ2!8Q6?2nE590R;wjA>;B>!pYa#}LGPdH!va=C9>i zo@0sa0NIhDV=#-I0{FRj;rJa&t>6S7@mI3P1Zvf@75M-DGxTlUFV12sD-e|uQ3f8e z?}ohSJIC9ticHK8{FZ+oJkt6d6PIQuv*&-=jqjIR10d4`U7m z*v_O2Ikvl|tb}9KziBpp_pyEnW%Fn5MSSKdE=&aDYK^M?1}ZMAzFzvX0F6-z)yD_J zO#H62VVqX{GnE{EE&g>-EMe+*Rd$d{n2(T3m^karKY9=a?H_hxr)%)De?^@X;4H(o(|@Qxrk+3a!PU=DXD355W@|&ufbiRyeZ|DQGcs_X}=7^+~JLU4DFv~!%mA8zHYMp z3g*(_;xn-wC)plgrSqyxLdGcXKdxVYc;S3ll$9oNHFI$oZ1)#4)RWvs6*rWMI)LUJ)o` zo0SbbA}9i=p6KAWnNc(qg6f0rU9ncXSUvyc4>GmY=9i@RPK4M|(YBSD3+smR&7&zk z-C>Hc(sxbViZK)>D=k^YRzKvBk6}V(08{-z0|JCE_d$$6(Vs)klT%IP^i4Z6zX=W-C+Jo zzicIy+AuHbERS&M#fK{&s}nQMxMy8F2GEK=Gw-b$XE^Ax+K(K&J9_Di_&uEGgemCG zsBitkgjjlfy$z_<2R9Eo#F0LJS4cI207+SV!1%J7NmlY_l1 zM!lm;eoE{ePAob-fs~uk{7Vs(q*9DCIztu=RXlJgt8`3(U@iLk=L1<}&{B27(n0`% zbv29ZHsa-{L?N}IdWqW6=yw?0=!DBV{$xKnGhKOgTiED-T%~?lp4V#GNR{oAoJS2e zGBgoja%JsOmhXpPLVvX$?C-4GP8-9$*N1xm(*-LWC;yk}TbqV*nTS|bxBomt;2OO+ z!$-D}3;$NBp!)E~Y2yz+Ou&87_GBoA8pSMK@gdkgjpnE`4%nvRwBYn_oPf&2Jm}1a z$pvIfL&{L}IEI8J3u>EQk|a2{e4boAg(>7Hz5mVBq;dU30N=KW$(7;uIVo;qpB=9x zH92?~QA4D5=qVWKsxg$l4jf6|6SJuGr&L7U;l-HsdxvSMhN(?d%Rsvp+e8RI=wAWV8q;kfrVoVOYT-? zw1bRj$=k@GUMReKGj{X;i?_dws;d3ofKd^o8|jj6kZus^2I)qS#!Yt$NQZQHcL+#I z*G3vdq+?4r((x|B=luTT9pjAi>8uZaz_r(2`;K|fIj?J8)8!iKD&37Fqm5;F*c%P& zn^yX>A!j-KI*e%tXnz0GY{wu}b+=N9R{f7l&3446gDNpVer=L0X@`?&qIoU8@aZIs zo_Hun37Q0sGXM+V?C$F$%*oA#6h~_D=2c{?4w53%V6Gv=Jd|G0PjNfypi?VibRr)c z*nHTi=6S1N@LCQub6<1fc8%TDt+{>t?$(-za1ip*slg*UkkA_+OjB3$>X_GE z`}5m`3o>(MY$L>uA40R8SLp(~?8l{c_8AQDaagXnEt0sq4otUC1E)pX}||6H?u zRSQJs_U5jwU`%&dtyKjFML1CY(yeS2P^zGKpZNX*@t{4GJV)BEsxe!kpK&!pupT6` zZfcPGq6vF#*A~~J?8^PGwQRmM6KzTFrcSFZJV*f8y zH|_g6-}|eE1rX9=13)Btm)($((1nj%rhk>N>PG8=YF;SlPZq1AyMVOYqTkSlVv2WF z-6o3v^5E6o>s`;fFPq4*(!0GL=K{n=?-Pi!qUM|SMXooP3WLYxyv;4<`L$byoQ~EB zE&Q2H!~Ew(CvE4}*~R&Du~P;{>ceDsIyCVWKL11Hm)%L(e%2sEuTi<95f z>@nJ|4`FU3xMF_dMQp@rvlrz3l(L??MiMGUx@K=7)>d@sJBB>Kzd?{_X`$q&y_wSW+w^IXV_tLR4|mdTtCZH zyoE9#2#RQ69FZTMfr$V3h=mFZs7-N2G2!yb5y4*zAXt$S_k0tUcz-^<8_uF5rM!f< zqdAIo+iaR+Gs{)<@)s1)8spmq<7=dg_&(;{+0BcM@iOS9C{EHrwDVoxo7*pD>eNhU zkhMA>>Q#JM^AbscyZ24lQgPX%Ae05(Et$98Ig4|PH}t+dm*6DR)L#Zl22mVc7E-#( z>BwO7?zJDumu_E;u3SrHF5n)Nm+&1^mM+el%{5NgojaKPV#Eb8u<3-O6gNS%dsh(O z9JsGki!H7dn)n>%!tiZ37t}4djO{pXI8S??mznT;>traLQhE~BR%}h#?fws08H# z^b>O}VL?Yc^l=gcU(IaA6!^dkhY4G=aB5t)ktP_?n)L_Be5m_Lc%xQx4Fr)d;AlKB zx+3CJZOiSDf)+qwIiHnYa}f*+fFhsPja-e}=;X{UT%^0ke^#!AE|7Us#_la%=w z+RD|GAa9v_mT{TV;1XHD^Kkjbipv`q*cen%(qRi%XcHRqi7E1@M*BpXMPYeK{~X@ z#J*Z;#pO2sVdjB7DAjkmXMX*DXOI44jXBiZcl#Mf=6Ad_@a93w#BZyXx<(F+T_ur~ z9l3|+O(Pq_CDvmYU|Gd#Q}XSCV0KpkuB@wDn)YigTnS-RKFU_B z0~CrjEq@l@Uaud7XQm~nhfteo=SqK=-K}U5IXAhw#grDh_>;o4%iY7bEV=J(fq_Q^3TT5v)d8RPxRfCp@jz zXK069FWlxV9wEB_BRk>atrd>&HC-o5zh2~p(D@o^D*)7R|@1&67liP38u|KR(=WR zp>w+6p~Cff{2i_1Xgo*jo!~&e{CIr5g~i0k>@-DV^x(XM%ZS6-?(rO*=u<>j-v#iq zuw@Vs5Y9IXFEktNsei#j^KTyWpMi>v-WpQH!Kb=nO* z-2xp+tj0>U=3{cCDNhSHP7MgRm9w*_EdN4%D=Lx-ClMs5sHlKPMO80&%CgL$`h&z& zX#s$jrR~}X#}*5!!D;*FVe(V*`-21Ugy?x$Ik`!=ITAtlJhX*@ok@6OfRQT>8$&(yUM+S_n@>m^@kTnYS6Wj;r#F7!Xd;_K$Y9R z``Ttf(bmO9w9VV=@9}^6|N1yHrg8wo~4cweq;&@LOE(IGKePd6m z`SPEgvRC-U<5zDA|#Nw{2uC5*!0i2{7 zY~_mU!@kS`sBh%rp&QU3G!g+R)P@io8w3P`a6DEb`gp{)>zZeUikYlPPfbQKfFXMj z5|CPv&=BZPV_FFAPk1XTit+Mg-u~My2;}pZFX%U}tc=fXjZ(CC0Vor{7_D8e*;$V{ z$Z=z0eQNCp=ob3mp8?+=1QWqEJ2ad&r2sAr55b`&4|$U+mBWxIMgELt;T7#I6*-tr zc{mAnIK134Vl^D{MIu+4*+1L|`8Di(8A^*qZ3wt})<1lL zK52(}gBlOorZ-i3!bcp~z4E>7Db-4xDD@$6*#FW?*mBPJj#%LxoW@y0N#U!(!S?>u z=$t4u$&rKf|8hNu)Xl)e<>Q(gFGU1f57j&ylCByG{+Ckn8`$#)Ng&r?DC-aYpT8H6 z!T{|V5y}61OhF4`6EFSUe`(9;i2v!1`N8<#D*?ZI1`pV5|1PfH|IuTK_@5-%|Gz$h zia=1F=Q+$~Ru_9jx1D3;o8d1PK5|38{90H) z>EoItC#OF@;@F_hSeDo{zWtY;ez+HM(75Uxb@9)vejo+zQ`a;|F=YDluLW(iSO4+< zG}@fue^}tVrS}V*W_u1*P3QwH#uaYgvJ}sOt_#{p5eNepIihPNKjgK~Od)jWRq1GL zIa0|L?J?o{u}kl{h92@NTg<{WA5%R`a9=VW+~nSFWF!c|;`)0u1s|Gy_u(Su;b<3v zO}L|fCR@*&nR;{Vrf^5ezZ~kNZ|NY=7!a!zqEon$vgbyLB}%%;%nc!WcM9aO^c-Lly|* z)sEqF1p(F{kqt1`a|NO~Q3Qg&P0K&O`Zx2~j28?WI29emuiEodfdAvorld^!9s4YQ zS359`p-8!|=$h=UpIWOXdyZ^(h{@qE>dG(!LX8$veA~frFg`I~$x_bP`@SZaZZd?# zX)9aK1*p2_CQV1)e@Gp}+@4%xUyy0h5C?w6;YpB0lCvURCM3fVUuZO<#GS}koag=A`n((TaG+c%xqDD^;( zu=+4eT}z%^t9;Mt+<%mUU~9%ZG2ayq9(yf6V>cR(zZev%=D);Vtmjb@{VpCGF{0)} z=!@zl9KY3MOilHD<5r*ZH|;QuO}2h+atj*t_F5dpc}{xVXP6Hg=o!>Ct=!qT8xm}* zp6#WPSPSj?Zy$ZoIFcXT9qSN-2{~5}#u27t>ic7@Fz&+SWv>txmf$7Vg?YG09YOX{ zwmZTcF7D%>&`)|37RjbeZo~qX4ThSE*t#*4L>KI+h2xeMiM{Oe`o-mP>_>K@K}~_& zhH)TBD6IGi>A#F^|1cyfE0q~)7L5jq9bz>=ET!G^j!b@%kU*i_kRG$d(Do(TnS^w11WdjYgdb@uxCq3hl z_$bp}5sn7un*rRpcXcF$cb||-_@LkSaW<6ys9az3HR?%29*{L@2Bm^fWtN5k39sf{ zSt>Zn&ooB!T;&%?#CtR=i)}`X?-+*#)C-<+_JA)GkLCx`-r-LRpp=xHwAsrGXV115 ziT#b*9xJvZoILc$bf)0#&25GG3UmNzXrFK&mdbM*#TZ*Er9}GqD3$+t5adhN7{LO; z7nI>G4!;lh4a6m${SJqkr^&F~abynkj;ULpF2SP{>e+EepMsA#BYx%#df=F-d&|TG z0Im;!jZ;!nch1l2B|lk0UJOD)BpMnTplLb}A75uj$AQ4@$%nJs$}ceUh(Me2U_{ve zbK*c!za{>6 zbHJn`ZVy6tJBRJ!UcCB0790*Ruj=oF%#ztNuNB2U$4R6Xd4e;3fEA@n< zcZ)SNH#4X_z8@{keYf$oH5h;&ASo%y^I@EvvH8r$Z2uVIRKq#=e3BN|6{=bPh>DHcM|MxxmY`0 z^?%>2Y6~O{SC_kjXm#q#yzcL`UNL=V9rvq!=N?!x38M88dnJ2q#i$!W$MB!qf`^HT zdGCB)dbC#?_q}3fW>)kAxt)@~m@rIj2zg0Jg9#8$;u6J@jTwE!v?#%p#uraBc`BYe zw$w+uPR7TFXw&-F2mGrgnnr|s!Z%gQvM!~Ai`>0L44)EAZrs@2{%EzMy)dA@WqPMX zB_+||v6~`?;xMHY9u@(eThfa;v1dTQS3+XKB79DGEm%!NNl_qdkm8@j_b#M*a(M+3gND_weZn8n@gO?=~#L-Sq*y_}pV~~?0GtG&$f4sfU{Am%@n^O-Us&S;#YjI^Ir^t=bX$ipr4G&u)6Y-z}$NuH|cl`aY z_JoVpKtpsidEm|{d)0FLjrK_QOZ+0qVu^{1E1^8-VUUYPvChPOt`E)Z+smb*$$>b` z9}X=B8kEzc^VScRLIOERCcl%Vjj?@m!tBR$P~$!5n&bHc&lXEs_2r64mi6Hy-uYR} z+?>|W&+kM}3g}OVj)|E=$`UC4OhHbiH2rXxp8^8#R5Hc_K`X z-`3ozw(9(Jnd8*tQ7eCxIOeguOy?hc%Zo5`aq7#nu=WJb7ghgR4+`Z-g28vjZuBug zPytJF$nr22%I_)mV&(Q{yQ>U|%vz$x%{d0nlzMxSdp(4#pltw`>7Irqm0;ix@}rfF zfLLe`Xg0zZWInDlM68J`okSF)T=0ebUoeJBxK@IkT&7*$o6EV=BEkPvG=LQ2E~2z3p-bcN-{nJ3JTbV9xmT zlvZ$)oeK-`V6(GHn7{!^ct$_Rh-R!b$a`wZej339yy4Sj{lAsYg#XKg>-}dLf!$EU z`tN81KK6e>iRD(wNvFLV3~G#!+(@Rwiq)J?hZUxcGyL^ zJ8WRwxbdN_dS9hlRLSR+-QUHQD?dp_CM0spjlrka;ZYVS1A(uL#nRQ)Tl1M=xF-_O zmfpu$c>Y$sZ&EGVht63rqRa99Eek}rChWBC>s(9#B`i&^s-dZ#7sJe!MMTGItW8|` zvNC?uB4OtNFkT1cQW#I6z7_=#-$`t~_Af*AZm8%nRLJ*Qx;`Rvi`E?Ey7YRvov zK!m7^5z|o*gEMzO2g)MOH$3WP^C_mkJ@kH{hdR(OFLnQ=xt#g<=k_DeA>1x8lLhAe z{_oXMo2IFk+)R3652dfnYdi(B76m->XqSu>l}@9*s^29Cbd+Bz@$*UyhmGXCvl*dOW&lqGMl*rN2#xPI|{4!r~!IvOf= z>`!`x>noq{b;kU|7P-}KayH0XRK0T@3BIyg3)2r{?DW6+hLGSQ+cERw0sn4jwB;y| z`~%Zjvv>@*HH#Zi0mx{!ExTy662FAjxMmn<@C#&GphlBL&lA~*G-!D)nV~@^kJ|kk zEmFL<%%6(gg#f}4M~S|zUYlRE`!O@_ZjIaTU14O-U#bP#uLvWTHe>0H{CKN)Q-!1a ze!0QT6Wcqf8CGLUq2qU@c5Z{Wwq3dWz%LO0 z{Q=#oWyPQX$unEEWN+bm-}*3C z=fg>=S1ZFzv7j#naz|1>d^Rywx_NHu4Z7yx0ln$wu-}p-#kzt^n`ewEE=7?sXO+uk zT2Y!zD{sT+B`Ko6cqRpd@}|)V7|3qNw%=pZ^Zhj-?n2|v$`?@e=!6>EdjApuC7!T)l(l*h}H z<>xN4m{beu*n5p?k1pq(7E8}z6}(8$T;N~Hy(K&HEHBIe=u~Gz9Yg!IiY0VC0T%t< zy}Q%*cM($NtGRZ&lR}J(j{1v#huhhr#^3+cn~Xf_mx4f{IU$qaUj=TFEG4zb-=+Kb z@@yQO_ez&7y5ecn9C^NBNWkz|#Z#{k4s}4o^6kc(6R5^5bAQbmU zGdABL{B)d1B8X|M#aoR7G>_9t__FIp_LIyjFmB!NdWp=$lq|blaM45&uR9lANO0-& zfs}BoZ%A;UPFMZL&nD)r$;zli_u4m{L9;x>NfHc&Ir+-1?skB;{C$dHFq0wII;C}E zhcOC9580@;;()$@w7uM)24iRTnIQjU-|-YmpY*gProw(}u#{_dSsM3ukgpDcsE``V zdcJ{N=#K<44^Iq!1uLae2alG?GU}4)iZEwA?JNsk?jnKmIozh^UoNj_LoE18Aj(iv|>_98bW=m=YoJFfH{ zj(C|@m97%}+t4^span@;C;P}%*O?t{1y!ZhpFXdSWmpYd$U`X)MCV~f9jQukMh1z8 zR0fZL7w74kXY7AZhsu4r-+pu#xpJ_H#8aY}Ewvw_cac#_C=ef2uhM?pV=f`L0j zqGq&?B~RRr8p5`)AGwv{@*qRC{e!=1fxErNWmo1H%r2hzde#Tj527?+!TW(wwv^^Gk0Es{ z5Z?&Vd9mN9G4lt}B~eo>06);N$#KEfg4->xlRaW1P}4$s@$BWq+5$ zZXPWUQkqB@(UPU8P%y0ry2}|)LO6baqQA%THx`3u#t(__i&>yyw|LJpvgJ3UUQ5oj zD$cR}!qHLW!Xd%dIbtXrrFdZ!+uvyC(ax6A`q*iUrC|+@H zh&iiCzv~H8wp4H@%NG&l7jF>~2|Xj327_|BC?0=IhNzze16}6VA6mP4o;CV8o=kVI zo{wt&6~F@{nq53^`JmiB@H5pogs^6^8!zdL%%2u+`@Y_H7)h8L&kD6DBd z>|=QfUm=_>s!04xtt)5$dGJ};bMAfC59zbn;2;iNP5cO7La^`WoCsakhH`Cua6v5V zxluZ*cxvN&$8{p+!EjVboIXP<^rh(qVo`0aR2u2vD4Dlu!%!qWs-xG_VkM| z^9oE6oxR(>zlWeK!%kf;_&2Bln4Sj~A8zE`n9;V29S>&q+i%4rMU~;4g+0ThtF}v@ z(pdB(X;;^M8w`o}grSJMCh<6WQM|!v34px=>+u3$L#jG?jqqnGz>gFYQ%(ACM!=H! zVxDO9Ljw(8g1Uq@rk+?OO|~YL*-H;bAEELtV>8J~iygnM{2vrf1a1po`)V6*`=P%7 zopdGB_pg-m2T>2w+Y3YWDbR?h%wbGz=j-D*^35SlF69X*%3)lb5%A>7;A5+T*BY7; z8f?)HN_YL(K-68FX-nuI&NB)c5J$KjB*bm1cf@psOL{u=wC6(O6Q`#TOqPPp2>HAE zs`@`P^~0n!l)v@oQvmN%8BIr3|GI038j^5d>2dV40?Yt}SqEnR*Smm+Ij8j*9B9?) zKy0EbpVHMO{(^4P^c(eHe>3uSB&b2Y?yEhH*M#5f=FD6UFdriqY zvi`r6BzM$VV!2cwsh)UEY)-lau^y{cUn>t4CO$akHZyzM7Y%WbhK*&dOR0UZR77EBIKTv&@6}G zZ6Y^>_(ZHhc|Bv+_Y<#F!9u0AIJM@HbZulH{klAGfya2sfDxsqy214u`mcDK`hQ=X z2z)Wq`ZYbz7POHIG*%XScnsCDgi_4W%v>uHfvBN83qpsPQ*ewh_Fpxqe6<5Cq~_eN zp198YELlq zrxUGbWgUgDn;J^L$Jb$7<;Y|rIZd!X{h$4`m;7$EdAgB+s_~p@yu4PYIA1;j7p^f! z+6_*iF(WuVwU!45M%9W+zu}Aa1+3-EsF%kURd>3Ws^1k{FNnESRdOu6i3MNhg(2#* z@)6AxbPS8~b-S02S~S4v%k49js+Ua6;NOZ4Otx(UmL4%pHD? zbI??#Kb8>Xv_!{xa5sAt{D=3AO(X#64!=Fx49UZ+bw-x@r$~QCW z{$nc^aPvUWZ|nHM*yLde<%CmGQIRPp#=E>oVt73-D|nAilmaK&>Ck|5kMC1L8@szT zwjs!!;OL}cXs~M(G0Z-y-ynKK>_g@W)7-E4xQBu0w_G8SnUjUo3EcI>h~v8sGLajI z-(p64VUBz>M*621f_3)J?S^qjpv?n|>9YH{H`I;5Pt3Y1nw|VkOepmF<;7*3wj8E1 z2|A1XWBo(U&cL=uiGbIAo~zZBfaRSMe=*z5pqwf)Iu=^+)F8J_SV5tj-&cBNA#Y6O zoTOB?2hLs50fr6R6!lgd+4jq%d(>I^)a0ct*55!^(UVp4E}a~F+uWC^qZ^aK(zac# zRpylDHO|owwX+{scD~;?Zkbu|hZn7ipr!atsTd#}svh`g#<}k^9jfgQ*m!iEqisi5 zpB?z|yoTW18&yP}Lu77pD{0i>QA$eM#{^-VPR3=}%WlyfATb}qba^NoflHUC@dtK( zoqdkhYSJ}$JYVMN*3Xja`w;sh^3R2UdI;<+qdy3_6G#AQ!Onzt@gjVO6lTrtDnX#5 zhF2*>Jp+`3R4Am^rMc zi9u#+wd`$Xl%UeG9J04&x&NWG@sz=FXX#WtR4Zk-Bo&#$`m-n_dL9Pj%z`hz=8SwW z9Qb=7k@@k_$)f_&V&OQp$M)lJ1b;z2E6r4ZW!ehxCT+?MW#fC8ZNMStXVWjKbtA1<+ubQf~two7W7c?Z`vGrK(ThbKw8~;c@A5!VejJ6|K?V92iq*M{c8`7K7l&G^RX zoK#Z+%oVCK9jqwHWxjy92{IAr$&zyQ0)iyixsqw6!R@$<)1VCL_V_+jbB z$GB^goiF4|X_kk1i9v8%2UT$doHF1+_q1S#X~)qf{%qGY*uE(075gtRPSV(+=8o|4 zQg7$##L^m*0^sW?u0tu8m4jivvC%g$w82rXG@UOvxsjAZ>k7skQ1T!!U%GX3pn$re zsPe?peiKG*D-0JcWdswhW7%4_U8mw=VbHPU$6comw3>B64%h2~vGg?esSFo~VTcl^ zRUqYW2gnQDUR928qM+_8wvS3AOk169or zfAyL9&p;9YRK;FT0_5VwwlVE;WyMZvL!PBd0h4rXO_Z7Jhwc~_4uiQu>A0~IN1#oF$cpiUc6b`y;)7kK9d@EgskA&k^I1!j5|`@!BZjS~F%6mVsF9Be^A z)EpD65`<~D841%jjyZfo64iQ90n)=V}(3YDZg)MX< zYBJr7{S`Z=J$L@>$jp8#H=TrDqnSOiIWOA%uN#zeEk#|){O!j_^%jhNpffJvj;L)c zyIp6@oE%D+#mVIz45qhXyxHo-lti}-P&8dVQP3D7Muag-x+9TZk{K>O#FIFL#Ye*RTw6g|;_v{*Zjig-8y5|ZaR1u2(W>t#Q67M>h?aZXPGqIY$U$0rVN#_We(8!HL5zuB`g?&qbEMty3E z&{g`HjMTD+cT_Q8%YwZ1{)ey$VQ49`2=~RWa}Q~9628*WO=7f`u^w!uj6`(LcR|~U zYk!NGw2!EkFW>VD8~NrOIinH&`4m}>GV8XhkJ&k&rc|kW>BRAGd?6;ILx4ykYDlV9 zG?4HA50Ca(*?E4lw;Bl&oIfdE+zxy-IDkbEAS~DUWtrsiM(1HpMM^hcZ?dUp+tBZk7%B8xX6R|D1oJpX08^n{8*@ zB}<({?tt_1!I8^JlU*O~;CevP6DW7oWge0A^7-%q{dA$?9_g{qM-`}H-XUX!SbZF> zz0(p9hX&L$BZv^Bz$3v_s%^AI

mUbFKuZv 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�KlAZdj=ZDX>ueyL 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 0: + time.sleep(left_to_wait) + + ret = func(*args, **kwargs) + last_called[0] = time.time() + return ret + + return wrapper + + return decorator + + +@rate_limit(lambda: RPM) +def get_completion( + prompt: str, + system_message: str = "You are a helpful assistant.", + model: str = "gpt-4-turbo", + temperature: float = 0.3, + json_mode: bool = False, +) -> Union[str, dict]: + """ + Generate a completion using the OpenAI API. + + Args: + prompt (str): The user's prompt or query. + system_message (str, optional): The system message to set the context for the assistant. + Defaults to "You are a helpful assistant.". + model (str, optional): The name of the OpenAI model to use for generating the completion. + Defaults to "gpt-4-turbo". + temperature (float, optional): The sampling temperature for controlling the randomness of the generated text. + Defaults to 0.3. + json_mode (bool, optional): Whether to return the response in JSON format. + Defaults to False. + + Returns: + Union[str, dict]: The generated completion. + If json_mode is True, returns the complete API response as a dictionary. + If json_mode is False, returns the generated text as a string. + """ + + model = MODEL + temperature = TEMPERATURE + json_mode = JS_MODE + + if json_mode: + try: + response = client.chat.completions.create( + model=model, + temperature=temperature, + top_p=1, + response_format={"type": "json_object"}, + messages=[ + {"role": "system", "content": system_message}, + {"role": "user", "content": prompt}, + ], + ) + return response.choices[0].message.content + except Exception as e: + raise gr.Error(f"An unexpected error occurred: {e}") from e + else: + try: + response = client.chat.completions.create( + model=model, + temperature=temperature, + top_p=1, + messages=[ + {"role": "system", "content": system_message}, + {"role": "user", "content": prompt}, + ], + ) + return response.choices[0].message.content + except Exception as e: + raise gr.Error(f"An unexpected error occurred: {e}") from e + + +utils.get_completion = get_completion + +one_chunk_initial_translation = utils.one_chunk_initial_translation +one_chunk_reflect_on_translation = utils.one_chunk_reflect_on_translation +one_chunk_improve_translation = utils.one_chunk_improve_translation +one_chunk_translate_text = utils.one_chunk_translate_text +num_tokens_in_string = utils.num_tokens_in_string +multichunk_initial_translation = utils.multichunk_initial_translation +multichunk_reflect_on_translation = utils.multichunk_reflect_on_translation +multichunk_improve_translation = utils.multichunk_improve_translation +multichunk_translation = utils.multichunk_translation +calculate_chunk_size = utils.calculate_chunk_size diff --git a/app/process.py b/app/process.py new file mode 100644 index 0000000..531d4f0 --- /dev/null +++ b/app/process.py @@ -0,0 +1,263 @@ +from difflib import Differ + +import docx +import gradio as gr +import pymupdf +from icecream import ic +from langchain_text_splitters import RecursiveCharacterTextSplitter +from patch import ( + calculate_chunk_size, + model_load, + multichunk_improve_translation, + multichunk_initial_translation, + multichunk_reflect_on_translation, + num_tokens_in_string, + one_chunk_improve_translation, + one_chunk_initial_translation, + one_chunk_reflect_on_translation, +) +from simplemma import simple_tokenizer + + +progress = gr.Progress() + + +def extract_text(path): + with open(path) as f: + file_text = f.read() + return file_text + + +def extract_pdf(path): + doc = pymupdf.open(path) + text = "" + for page in doc: + text += page.get_text() + return text + + +def extract_docx(path): + doc = docx.Document(path) + data = [] + for paragraph in doc.paragraphs: + data.append(paragraph.text) + content = "\n\n".join(data) + return content + + +def tokenize(text): + # Use nltk to tokenize the text + words = simple_tokenizer(text) + # Check if the text contains spaces + if " " in text: + # Create a list of words and spaces + tokens = [] + for word in words: + tokens.append(word) + if not word.startswith("'") and not word.endswith( + "'" + ): # Avoid adding space after punctuation + tokens.append(" ") # Add space after each word + return tokens[:-1] # Remove the last space + else: + return words + + +def diff_texts(text1, text2): + tokens1 = tokenize(text1) + tokens2 = tokenize(text2) + + d = Differ() + diff_result = list(d.compare(tokens1, tokens2)) + + highlighted_text = [] + for token in diff_result: + word = token[2:] + category = None + if token[0] == "+": + category = "added" + elif token[0] == "-": + category = "removed" + elif token[0] == "?": + continue # Ignore the hints line + + highlighted_text.append((word, category)) + + return highlighted_text + + +# modified from src.translaation-agent.utils.tranlsate +def translator( + source_lang: str, + target_lang: str, + source_text: str, + country: str, + max_tokens: int = 1000, +): + """Translate the source_text from source_lang to target_lang.""" + num_tokens_in_text = num_tokens_in_string(source_text) + + ic(num_tokens_in_text) + + if num_tokens_in_text < max_tokens: + ic("Translating text as single chunk") + + progress((1, 3), desc="First translation...") + init_translation = one_chunk_initial_translation( + source_lang, target_lang, source_text + ) + + progress((2, 3), desc="Reflection...") + reflection = one_chunk_reflect_on_translation( + source_lang, target_lang, source_text, init_translation, country + ) + + progress((3, 3), desc="Second translation...") + final_translation = one_chunk_improve_translation( + source_lang, target_lang, source_text, init_translation, reflection + ) + + return init_translation, reflection, final_translation + + else: + ic("Translating text as multiple chunks") + + token_size = calculate_chunk_size( + token_count=num_tokens_in_text, token_limit=max_tokens + ) + + ic(token_size) + + text_splitter = RecursiveCharacterTextSplitter.from_tiktoken_encoder( + model_name="gpt-4", + chunk_size=token_size, + chunk_overlap=0, + ) + + source_text_chunks = text_splitter.split_text(source_text) + + progress((1, 3), desc="First translation...") + translation_1_chunks = multichunk_initial_translation( + source_lang, target_lang, source_text_chunks + ) + + init_translation = "".join(translation_1_chunks) + + progress((2, 3), desc="Reflection...") + reflection_chunks = multichunk_reflect_on_translation( + source_lang, + target_lang, + source_text_chunks, + translation_1_chunks, + country, + ) + + reflection = "".join(reflection_chunks) + + progress((3, 3), desc="Second translation...") + translation_2_chunks = multichunk_improve_translation( + source_lang, + target_lang, + source_text_chunks, + translation_1_chunks, + reflection_chunks, + ) + + final_translation = "".join(translation_2_chunks) + + return init_translation, reflection, final_translation + + +def translator_sec( + endpoint2: str, + base2: str, + model2: str, + api_key2: str, + source_lang: str, + target_lang: str, + source_text: str, + country: str, + max_tokens: int = 1000, +): + """Translate the source_text from source_lang to target_lang.""" + num_tokens_in_text = num_tokens_in_string(source_text) + + ic(num_tokens_in_text) + + if num_tokens_in_text < max_tokens: + ic("Translating text as single chunk") + + progress((1, 3), desc="First translation...") + init_translation = one_chunk_initial_translation( + source_lang, target_lang, source_text + ) + + try: + model_load(endpoint2, base2, model2, api_key2) + except Exception as e: + raise gr.Error(f"An unexpected error occurred: {e}") from e + + progress((2, 3), desc="Reflection...") + reflection = one_chunk_reflect_on_translation( + source_lang, target_lang, source_text, init_translation, country + ) + + progress((3, 3), desc="Second translation...") + final_translation = one_chunk_improve_translation( + source_lang, target_lang, source_text, init_translation, reflection + ) + + return init_translation, reflection, final_translation + + else: + ic("Translating text as multiple chunks") + + token_size = calculate_chunk_size( + token_count=num_tokens_in_text, token_limit=max_tokens + ) + + ic(token_size) + + text_splitter = RecursiveCharacterTextSplitter.from_tiktoken_encoder( + model_name="gpt-4", + chunk_size=token_size, + chunk_overlap=0, + ) + + source_text_chunks = text_splitter.split_text(source_text) + + progress((1, 3), desc="First translation...") + translation_1_chunks = multichunk_initial_translation( + source_lang, target_lang, source_text_chunks + ) + + init_translation = "".join(translation_1_chunks) + + try: + model_load(endpoint2, base2, model2, api_key2) + except Exception as e: + raise gr.Error(f"An unexpected error occurred: {e}") from e + + progress((2, 3), desc="Reflection...") + reflection_chunks = multichunk_reflect_on_translation( + source_lang, + target_lang, + source_text_chunks, + translation_1_chunks, + country, + ) + + reflection = "".join(reflection_chunks) + + progress((3, 3), desc="Second translation...") + translation_2_chunks = multichunk_improve_translation( + source_lang, + target_lang, + source_text_chunks, + translation_1_chunks, + reflection_chunks, + ) + + final_translation = "".join(translation_2_chunks) + + return init_translation, reflection, final_translation diff --git a/pyproject.toml b/pyproject.toml index db621f6..26fb0db 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,6 +21,15 @@ icecream = "^2.1.3" langchain-text-splitters = "^0.0.1" python-dotenv = "^1.0.1" +[tool.poetry.group.app] +optional = true + +[tool.poetry.group.app.dependencies] +simplemma = "^1.0.0" +gradio = "4.37.2" +python-docx = "^1.1.2" +PyMuPDF = "^1.24.7" + [tool.poetry.group.dev] optional = true @@ -64,7 +73,7 @@ priority = "supplemental" # Set the maximum line length to 79. line-length = 79 indent-width = 4 -exclude = [".venv", ".env", ".git", "tests", "eval"] +exclude = [".venv", ".env", ".git", "tests", "eval", ".jj"] [tool.ruff.lint] # Add the `line-too-long` rule to the enforced rule set. By default, Ruff omits rules that @@ -89,7 +98,7 @@ fixable = ["ALL"] ignore = ["SIM117"] [tool.ruff.lint.isort] -force-single-line = true +force-single-line = false lines-after-imports = 2 known-first-party = ["translation-agent"] diff --git a/src/translation_agent/utils.py b/src/translation_agent/utils.py index 67dfd5a..549dac3 100755 --- a/src/translation_agent/utils.py +++ b/src/translation_agent/utils.py @@ -1,6 +1,5 @@ import os -from typing import List -from typing import Union +from typing import List, Union import openai import tiktoken From e0fc605acbb5d78cb7a58a98bc8bd8f0056df49c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ralf=20D=2E=20M=C3=BCller?= Date: Mon, 8 Jul 2024 23:12:33 +0200 Subject: [PATCH 2/2] remove redundant line (#8) * remove redundant line the line removed was redundant - the `source_text` gets already replaced through the f"-string * Update utils.py --- src/translation_agent/utils.py | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/translation_agent/utils.py b/src/translation_agent/utils.py index 549dac3..7a48969 100755 --- a/src/translation_agent/utils.py +++ b/src/translation_agent/utils.py @@ -92,9 +92,7 @@ def one_chunk_initial_translation( {target_lang}:""" - prompt = translation_prompt.format(source_text=source_text) - - translation = get_completion(prompt, system_message=system_message) + translation = get_completion(translation_prompt, system_message=system_message) return translation @@ -170,13 +168,7 @@ def one_chunk_reflect_on_translation( Each suggestion should address one specific part of the translation. Output only the suggestions and nothing else.""" - prompt = reflection_prompt.format( - source_lang=source_lang, - target_lang=target_lang, - source_text=source_text, - translation_1=translation_1, - ) - reflection = get_completion(prompt, system_message=system_message) + reflection = get_completion(reflection_prompt, system_message=system_message) return reflection