From a08a75451ffbdcb5f13fc5f1d9247c9dafcc0f46 Mon Sep 17 00:00:00 2001 From: Laurent Sorber Date: Thu, 26 Dec 2024 00:04:28 +0100 Subject: [PATCH 01/32] feat: add streaming tool use --- llama_cpp/llama_chat_format.py | 652 +++++++++++++++++--------------- pyproject.toml | 3 +- tests/test_llama_chat_format.py | 131 ++++++- 3 files changed, 473 insertions(+), 313 deletions(-) diff --git a/llama_cpp/llama_chat_format.py b/llama_cpp/llama_chat_format.py index 17575c7..ea95a57 100644 --- a/llama_cpp/llama_chat_format.py +++ b/llama_cpp/llama_chat_format.py @@ -7,6 +7,7 @@ import dataclasses import random import string +import warnings from contextlib import ExitStack from typing import ( @@ -28,9 +29,7 @@ import numpy as np import numpy.typing as npt -import llama_cpp.llama as llama -import llama_cpp.llama_types as llama_types -import llama_cpp.llama_grammar as llama_grammar +from llama_cpp import llama, llama_grammar, llama_types from ._logger import logger from ._utils import suppress_stdout_stderr, Singleton @@ -3373,6 +3372,155 @@ class MiniCPMv26ChatHandler(Llava15ChatHandler): ) +def _accumulate_chunks( + chunks_iterator: Iterator[llama_types.CreateCompletionStreamResponse], + chunks_list: List[llama_types.CreateCompletionStreamResponse], +) -> Iterator[llama_types.CreateCompletionStreamResponse]: + for chunk in chunks_iterator: + chunks_list.append(chunk) + yield chunk + + +def _convert_chunks_to_completion( + chunks: List[llama_types.CreateCompletionStreamResponse], +) -> llama_types.CreateCompletionResponse: + """Convert a list of completion chunks to a completion.""" + # Accumulate completion response values + text: str = "" + finish_reason: Optional[str] = None + logprobs: Optional[llama_types.CompletionLogprobs] = None + prompt_tokens = 0 + completion_tokens = 0 + total_tokens = 0 + completion_id: Optional[str] = None + completion_model: Optional[str] = None + completion_created: Optional[int] = None + for chunk in chunks: + # Extract the id, model, and created values from the first chunk + if completion_id is None: + completion_id = chunk["id"] + completion_model = chunk["model"] + completion_created = chunk["created"] + # Extract the usage if present in the chunk + usage = chunk.get("usage") + if usage: + prompt_tokens += usage.get("prompt_tokens", 0) + completion_tokens += usage.get("completion_tokens", 0) + total_tokens += usage.get("total_tokens", 0) + # Accumulate the chunk text + choice = chunk["choices"][0] + text += choice.get("text", "") + # Extract the finish_reason and logprobs if present in the chunk + if choice.get("finish_reason"): + finish_reason = choice["finish_reason"] + if choice.get("logprobs"): + logprobs = choice["logprobs"] + # Create the completion response + completion: llama_types.CreateCompletionResponse = { + "id": completion_id or "unknown_id", + "object": "text_completion", + "created": completion_created or 0, + "model": completion_model or "unknown_model", + "choices": [ + { + "text": text, + "index": 0, + "logprobs": logprobs, # TODO: Improve accumulation of logprobs + "finish_reason": finish_reason, # type: ignore[typeddict-item] + } + ], + } + # Add usage section if present in the chunks + if (prompt_tokens + completion_tokens + total_tokens) > 0: + completion["usage"] = { + "prompt_tokens": prompt_tokens, + "completion_tokens": completion_tokens, + "total_tokens": total_tokens, + } + return completion + + +def _stream_tool_calls( + llama: llama.Llama, + prompt: str, + tools: List[llama_types.ChatCompletionTool], + tool_name: str, + completion_kwargs: dict[str, Any], + follow_up_gbnf_tool_grammar: str, +) -> Iterator[llama_types.CreateChatCompletionStreamResponse]: + # Generate a tool call completions + tool = next((tool for tool in tools if tool["function"]["name"] == tool_name), None) + completions: List[llama_types.CreateCompletionResponse] = [] + completions_tool_name: List[str] = [] + finish_reason_chat_chunk = None + while tool is not None: + # Generate the parameter values for the selected tool + prompt += f"functions.{tool_name}:\n" + try: + grammar = llama_grammar.LlamaGrammar.from_json_schema( + json.dumps(tool["function"]["parameters"]), verbose=llama.verbose + ) + except Exception as e: + warnings.warn( + f"Failed to parse function body as JSON schema, falling back to default grammar\n\n{e}", + category=RuntimeWarning, + stacklevel=2, + ) + grammar = llama_grammar.LlamaGrammar.from_string( + llama_grammar.JSON_GBNF, verbose=llama.verbose + ) + completion_or_chunks = llama.create_completion( + prompt=prompt, + **{ + **completion_kwargs, + "max_tokens": None, + "grammar": grammar, + }, + ) + chunks: List[llama_types.CreateCompletionResponse] = [] + chat_chunks = _convert_completion_to_chat_function( + tool_name, + _accumulate_chunks(completion_or_chunks, chunks), # type: ignore[arg-type] + stream=True, + ) + for chat_chunk in chat_chunks: + # Don't return the finish_reason chunk + if chat_chunk["choices"] and chat_chunk["choices"][0].get("finish_reason"): + finish_reason_chat_chunk = chat_chunk + break + # Update this tool call's index + if chat_chunk["choices"] and chat_chunk["choices"][0]["delta"].get("tool_calls"): + chat_chunk["choices"][0]["delta"]["tool_calls"][0]["index"] = len(completions) + yield chat_chunk + completion = _convert_chunks_to_completion(chunks) + completions.append(completion) + completions_tool_name.append(tool_name) + prompt += completion["choices"][0]["text"] + prompt += "\n" + # Determine whether to call another tool or stop + response = cast( + llama_types.CreateCompletionResponse, + llama.create_completion( + prompt=prompt, + **{ + **completion_kwargs, + "temperature": 0, + "stream": False, + "stop": [*completion_kwargs["stop"], ":", ""], + "max_tokens": None, + "grammar": llama_grammar.LlamaGrammar.from_string( + follow_up_gbnf_tool_grammar, verbose=llama.verbose + ), + }, + ), + ) + tool_name = response["choices"][0]["text"][len("functions.") :] + tool = next((tool for tool in tools if tool["function"]["name"] == tool_name), None) + # Yield the finish_reason chunk + if finish_reason_chat_chunk is not None: + yield finish_reason_chat_chunk + + @register_chat_completion_handler("chatml-function-calling") def chatml_function_calling( llama: llama.Llama, @@ -3402,7 +3550,7 @@ def chatml_function_calling( grammar: Optional[llama.LlamaGrammar] = None, logprobs: Optional[bool] = None, top_logprobs: Optional[int] = None, - **kwargs, # type: ignore + **kwargs: Any, ) -> Union[ llama_types.CreateChatCompletionResponse, Iterator[llama_types.CreateChatCompletionStreamResponse], @@ -3416,18 +3564,21 @@ def chatml_function_calling( "{% if tool_calls %}" "\n\nYou have access to the following functions:\n" "{% for tool in tools %}" + '\n{% if tool.function.get("description") %}/* {{ tool.function.description | trim }} */{% endif %}' "\nfunctions.{{ tool.function.name }}:\n" "{{ tool.function.parameters | tojson }}" "\n{% endfor %}" - "\n\nYou can respond to users messages with either a single message or one or more function calls." - "\n\nTo respond with a message begin the message with 'message:', use the following format:" + "\nYou must respond to user messages with either a single message or with one or more function calls." + "\n\nTo respond with a message use the following format:" "\n\nmessage:" "\n" - "\n\nTo respond with one or more function calls begin the message with 'functions.:', use the following format:" - "\n\nfunctions.:" + "\n\nTo respond with one or more function calls use the following format:" + "\n\n" + "\nfunctions.:" '\n{ "arg1": "value1", "arg2": "value2" }' "\nfunctions.:" '\n{ "arg1": "value1", "arg2": "value2" }' + "\n" "{% endif %}" "<|im_end|>\n" "{% endif %}" @@ -3438,7 +3589,7 @@ def chatml_function_calling( "{% endif %}" # Assistant message "{% if message.role == 'assistant' %}" - ## Reglar message + ## Regular message "{% if message.content and message.content | length > 0 %}" "{% if tool_calls %}" "message:\n" @@ -3465,35 +3616,55 @@ def chatml_function_calling( # Convert legacy functions to tools if functions is not None: - tools = [ - { - "type": "function", - "function": function, - } - for function in functions - ] + tools = [{"type": "function", "function": function} for function in functions] # Convert legacy function_call to tool_choice if function_call is not None: - if isinstance(function_call, str) and ( - function_call == "none" or function_call == "auto" - ): + if isinstance(function_call, str) and (function_call in ("none", "auto")): tool_choice = function_call if isinstance(function_call, dict) and "name" in function_call: - tool_choice = { - "type": "function", - "function": { - "name": function_call["name"], - }, - } + tool_choice = {"type": "function", "function": {"name": function_call["name"]}} + # Collect the llama.create_completion keyword arguments so we don't have to repeat these with + # each completion call stop = ( [stop, "<|im_end|>"] if isinstance(stop, str) - else stop + ["<|im_end|>"] if stop else ["<|im_end|>"] + else [*stop, "<|im_end|>"] + if stop + else ["<|im_end|>"] ) + grammar = ( # It is assumed the grammar applies to messages only, not tool calls + grammar + if grammar is not None + else ( + _grammar_for_response_format(response_format) + if response_format is not None and response_format["type"] == "json_object" + else None + ) + ) + completion_kwargs = { + "temperature": temperature, + "top_p": top_p, + "top_k": top_k, + "min_p": min_p, + "typical_p": typical_p, + "stream": stream, + "stop": stop, + "max_tokens": max_tokens, + "presence_penalty": presence_penalty, + "frequency_penalty": frequency_penalty, + "repeat_penalty": repeat_penalty, + "tfs_z": tfs_z, + "mirostat_mode": mirostat_mode, + "mirostat_tau": mirostat_tau, + "mirostat_eta": mirostat_eta, + "model": model, + "logits_processor": logits_processor, + "grammar": grammar, + } - # Case 1: No tool choice by user + # Case 1: No tool use if ( tool_choice is None or (isinstance(tool_choice, str) and tool_choice == "none") @@ -3501,316 +3672,179 @@ def chatml_function_calling( or len(tools) == 0 ): prompt = template_renderer.render( - messages=messages, - tools=[], - tool_calls=None, - add_generation_prompt=True, + messages=messages, tools=[], tool_calls=None, add_generation_prompt=True ) - - if response_format is not None and response_format["type"] == "json_object": - grammar = _grammar_for_response_format(response_format) - return _convert_completion_to_chat( llama.create_completion( prompt=prompt, - temperature=temperature, - top_p=top_p, - top_k=top_k, - min_p=min_p, - typical_p=typical_p, - stream=stream, - stop=stop, - max_tokens=max_tokens, - presence_penalty=presence_penalty, - frequency_penalty=frequency_penalty, - repeat_penalty=repeat_penalty, - tfs_z=tfs_z, - mirostat_mode=mirostat_mode, - mirostat_tau=mirostat_tau, - mirostat_eta=mirostat_eta, - model=model, - logits_processor=logits_processor, - grammar=grammar, + **completion_kwargs, # type: ignore[arg-type] logprobs=top_logprobs if logprobs else None, ), stream=stream, ) - # Case 2: Tool choice by user - if isinstance(tool_choice, dict): - tool_name = tool_choice["function"]["name"] - tool = next( - (tool for tool in tools if tool["function"]["name"] == tool_name), None - ) - if tool is None: - raise ValueError(f"Tool with name '{tool_name}' not found in tools") - prompt = template_renderer.render( - messages=messages, - tools=tools, - tool_calls=True, - add_generation_prompt=True, - ) - prompt += f"functions.{tool_name}:\n" - try: - grammar = llama_grammar.LlamaGrammar.from_json_schema( - json.dumps(tool["function"]["parameters"]), verbose=llama.verbose - ) - except Exception as e: - grammar = llama_grammar.LlamaGrammar.from_string( - llama_grammar.JSON_GBNF, verbose=llama.verbose - ) - if llama.verbose: - print( - "Failed to parse function body as JSON schema, falling back to default grammar" - ) - print(e) - completion_or_chunks = llama.create_completion( - prompt=prompt, - temperature=temperature, - top_p=top_p, - top_k=top_k, - min_p=min_p, - typical_p=typical_p, - stream=stream, - stop=stop, - max_tokens=max_tokens, - presence_penalty=presence_penalty, - frequency_penalty=frequency_penalty, - repeat_penalty=repeat_penalty, - tfs_z=tfs_z, - mirostat_mode=mirostat_mode, - mirostat_tau=mirostat_tau, - mirostat_eta=mirostat_eta, - model=model, - logits_processor=logits_processor, - grammar=grammar, - ) - return _convert_completion_to_chat_function( - tool_name, completion_or_chunks, stream - ) + # Ensure there is a system prompt to attach the tool metadata to + if not any(message["role"] == "system" for message in messages): + messages = [*messages, {"role": "system", "content": ""}] - # Case 3: Automatic tool choice - assert isinstance(tool_choice, str) and tool_choice == "auto" - function_names = " | ".join( - [f'''"functions.{tool['function']['name']}:"''' for tool in tools] + # Case 2: Automatic or fixed tool choice + # Case 2 step 1: Determine whether to respond with a message or a tool call + assert (isinstance(tool_choice, str) and tool_choice == "auto") or isinstance(tool_choice, dict) + if isinstance(tool_choice, dict): + tools = [t for t in tools if t["function"]["name"] == tool_choice["function"]["name"]] + assert tools + function_names = " | ".join([f'''"functions.{t['function']['name']}:"''' for t in tools]) + prompt = template_renderer.render( + messages=messages, tools=tools, tool_calls=True, add_generation_prompt=True ) initial_gbnf_tool_grammar = ( - """root ::= functions | "message:"\n""" - f"""functions ::= {function_names}\n""" - ) - follow_up_gbnf_tool_grammar = ( - """root ::= functions | "<|im_end|>"\n""" - f"""functions ::= {function_names}\n""" - ) - prompt = template_renderer.render( - messages=messages, - tools=tools, - tool_calls=True, - add_generation_prompt=True, + ( + 'root ::= "" "\\n" functions | "message:"\n' + f"functions ::= {function_names}\n" + ) + if tool_choice == "auto" + else f'root ::= "" "\\n" functions\nfunctions ::= {function_names}\n' ) - completion_or_chunks = llama.create_completion( - prompt=prompt, - temperature=0, - top_p=top_p, - top_k=top_k, - min_p=min_p, - typical_p=typical_p, - stream=False, - stop=[":"], - max_tokens=None, - presence_penalty=presence_penalty, - frequency_penalty=frequency_penalty, - repeat_penalty=repeat_penalty, - tfs_z=tfs_z, - mirostat_mode=mirostat_mode, - mirostat_tau=mirostat_tau, - mirostat_eta=mirostat_eta, - model=model, - logits_processor=logits_processor, - grammar=llama_grammar.LlamaGrammar.from_string( - initial_gbnf_tool_grammar, verbose=llama.verbose + completion = cast( + llama_types.CreateCompletionResponse, + llama.create_completion( + prompt=prompt, + **{ # type: ignore[arg-type] + **completion_kwargs, + "temperature": 0, + "stream": False, + "stop": [":"], + "max_tokens": None, + "grammar": llama_grammar.LlamaGrammar.from_string( + initial_gbnf_tool_grammar, verbose=llama.verbose + ), + }, ), ) - completion: llama_types.CreateCompletionResponse = completion_or_chunks # type: ignore text = completion["choices"][0]["text"] - if "message" in text: + tool_name = None if text.startswith("message") else text.split("\n")[-1][len("functions.") :] + + # Case 2 step 2A: Respond with a message + if tool_name is None: return _convert_completion_to_chat( llama.create_completion( prompt=prompt + "message:\n", - temperature=temperature, - top_p=top_p, - top_k=top_k, - min_p=min_p, - typical_p=typical_p, - stream=stream, - stop=["<|im_end|>"], + **completion_kwargs, # type: ignore[arg-type] logprobs=top_logprobs if logprobs else None, - max_tokens=None, - presence_penalty=presence_penalty, - frequency_penalty=frequency_penalty, - repeat_penalty=repeat_penalty, - tfs_z=tfs_z, - mirostat_mode=mirostat_mode, - mirostat_tau=mirostat_tau, - mirostat_eta=mirostat_eta, - model=model, - logits_processor=logits_processor, - grammar=llama_grammar.LlamaGrammar.from_string( - follow_up_gbnf_tool_grammar, verbose=llama.verbose - ), ), stream=stream, ) - # One or more function calls - tool_name = text[len("functions.") :] + # Case 2 step 2B: One or more function calls + follow_up_gbnf_tool_grammar = ( + 'root ::= functions | "" | "<|im_end|>"\n' + f"functions ::= {function_names}\n" + ) + prompt += "\n" + if stream: + return _stream_tool_calls( + llama, prompt, tools, tool_name, completion_kwargs, follow_up_gbnf_tool_grammar + ) tool = next((tool for tool in tools if tool["function"]["name"] == tool_name), None) - if not stream: - completions: List[llama_types.CreateCompletionResponse] = [] - completions_tool_name: List[str] = [] - while tool is not None: - prompt += f"functions.{tool_name}:\n" - try: - grammar = llama_grammar.LlamaGrammar.from_json_schema( - json.dumps(tool["function"]["parameters"]), verbose=llama.verbose - ) - except Exception as e: - grammar = llama_grammar.LlamaGrammar.from_string( - llama_grammar.JSON_GBNF, verbose=llama.verbose - ) - if llama.verbose: - print( - "Failed to parse function body as JSON schema, falling back to default grammar" - ) - print(e) - completion_or_chunks = llama.create_completion( - prompt=prompt, - temperature=temperature, - top_p=top_p, - top_k=top_k, - min_p=min_p, - typical_p=typical_p, - stream=False, - stop=stop, - max_tokens=None, - presence_penalty=presence_penalty, - frequency_penalty=frequency_penalty, - repeat_penalty=repeat_penalty, - tfs_z=tfs_z, - mirostat_mode=mirostat_mode, - mirostat_tau=mirostat_tau, - mirostat_eta=mirostat_eta, - model=model, - logits_processor=logits_processor, - grammar=grammar, - ) - completion_or_chunks = cast( - llama_types.CreateCompletionResponse, completion_or_chunks + completions: List[llama_types.CreateCompletionResponse] = [] + completions_tool_name: List[str] = [] + while tool is not None: + # Generate the parameter values for the selected tool + prompt += f"functions.{tool_name}:\n" + try: + grammar = llama_grammar.LlamaGrammar.from_json_schema( + json.dumps(tool["function"]["parameters"]), verbose=llama.verbose ) - completions.append(completion_or_chunks) - completions_tool_name.append(tool_name) - prompt += completion_or_chunks["choices"][0]["text"] - prompt += "\n" - - response = llama.create_completion( - prompt=prompt, - temperature=temperature, - top_p=top_p, - top_k=top_k, - min_p=min_p, - typical_p=typical_p, - stream=False, - stop=stop, - max_tokens=None, - presence_penalty=presence_penalty, - frequency_penalty=frequency_penalty, - repeat_penalty=repeat_penalty, - tfs_z=tfs_z, - mirostat_mode=mirostat_mode, - mirostat_tau=mirostat_tau, - mirostat_eta=mirostat_eta, - model=model, - logits_processor=logits_processor, - grammar=llama_grammar.LlamaGrammar.from_string( - follow_up_gbnf_tool_grammar, verbose=llama.verbose - ), + except Exception as e: + warnings.warn( + f"Failed to parse function body as JSON schema, falling back to default grammar\n\n{e}", + category=RuntimeWarning, + stacklevel=2, ) - response = cast(llama_types.CreateCompletionResponse, response) - - tool_name = response["choices"][0]["text"][len("functions.") :] - tool = next( - (tool for tool in tools if tool["function"]["name"] == tool_name), None + grammar = llama_grammar.LlamaGrammar.from_string( + llama_grammar.JSON_GBNF, verbose=llama.verbose ) - - # Merge completions - function_call_dict: Union[ - Dict[str, str], - Dict[ - Literal["function_call"], - llama_types.ChatCompletionRequestAssistantMessageFunctionCall, - ], - ] = ( + completion_or_chunks = llama.create_completion( + prompt=prompt, + **{ # type: ignore[arg-type] + **completion_kwargs, + "max_tokens": None, + "grammar": grammar, + }, + ) + completion = cast(llama_types.CreateCompletionResponse, completion_or_chunks) + completions.append(completion) + completions_tool_name.append(tool_name) + prompt += completion["choices"][0]["text"] + prompt += "\n" + # Determine whether to call another tool or stop + response = cast( + llama_types.CreateCompletionResponse, + llama.create_completion( + prompt=prompt, + **{ # type: ignore[arg-type] + **completion_kwargs, + "temperature": 0, + "stream": False, + "stop": [*completion_kwargs["stop"], ":", ""], # type: ignore[misc] + "max_tokens": None, + "grammar": llama_grammar.LlamaGrammar.from_string( + follow_up_gbnf_tool_grammar, verbose=llama.verbose + ), + }, + ), + ) + tool_name = response["choices"][0]["text"][len("functions.") :] + tool = next((tool for tool in tools if tool["function"]["name"] == tool_name), None) + # Merge the completions into a single chat completion + chat_completion: llama_types.CreateChatCompletionResponse = { + "id": "chat" + completion["id"], + "object": "chat.completion", + "created": completion["created"], + "model": completion["model"], + "choices": [ { - "function_call": { - "name": tool_name, - "arguments": completions[0]["choices"][0]["text"], - } + "finish_reason": "tool_calls", + "index": 0, + "logprobs": completion["choices"][0]["logprobs"], + "message": { + "role": "assistant", + "content": None, + "tool_calls": [ + { + "id": "call_" + f"_{i}_" + tool_name + "_" + completion["id"], + "type": "function", + "function": { + "name": tool_name, + "arguments": completion["choices"][0]["text"], + }, + } + for i, (tool_name, completion) in enumerate( + zip(completions_tool_name, completions, strict=True) + ) + ], + }, } - if len(completions) == 1 - else {} - ) - return { - "id": "chat" + completion["id"], - "object": "chat.completion", - "created": completion["created"], - "model": completion["model"], - "choices": [ - { - "finish_reason": "tool_calls", - "index": 0, - "logprobs": _convert_text_completion_logprobs_to_chat(completion["choices"][0]["logprobs"]), - "message": { - "role": "assistant", - "content": None, - "tool_calls": [ - { - "id": "call_" - + f"_{i}_" - + tool_name - + "_" - + completion["id"], - "type": "function", - "function": { - "name": tool_name, - "arguments": completion["choices"][0]["text"], - }, - } - for i, (tool_name, completion) in enumerate( - zip(completions_tool_name, completions) - ) - ], - **function_call_dict, - }, - } - ], - "usage": { - "completion_tokens": sum( - ( - completion["usage"]["completion_tokens"] - if "usage" in completion - else 0 - ) - for completion in completions - ), - "prompt_tokens": sum( - completion["usage"]["prompt_tokens"] if "usage" in completion else 0 - for completion in completions - ), - "total_tokens": sum( - completion["usage"]["total_tokens"] if "usage" in completion else 0 - for completion in completions - ), - }, + ], + "usage": { + "completion_tokens": sum( + (completion["usage"]["completion_tokens"] if "usage" in completion else 0) + for completion in completions + ), + "prompt_tokens": sum( + completion["usage"]["prompt_tokens"] if "usage" in completion else 0 + for completion in completions + ), + "total_tokens": sum( + completion["usage"]["total_tokens"] if "usage" in completion else 0 + for completion in completions + ), + }, + } + if len(completions) == 1: + single_function_call: llama_types.ChatCompletionResponseFunctionCall = { + "name": tool_name, + "arguments": completions[0]["choices"][0]["text"], } - - raise ValueError("Automatic streaming tool choice is not supported") + chat_completion["choices"][0]["message"]["function_call"] = single_function_call + return chat_completion diff --git a/pyproject.toml b/pyproject.toml index 9983ef7..1f0aab5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -45,7 +45,8 @@ test = [ "sse-starlette>=1.6.1", "starlette-context>=0.3.6,<0.4", "pydantic-settings>=2.0.1", - "huggingface-hub>=0.23.0" + "huggingface-hub>=0.23.0", + "typeguard>=4.2.1", ] dev = [ "black>=23.3.0", diff --git a/tests/test_llama_chat_format.py b/tests/test_llama_chat_format.py index f031bf7..f4f919a 100644 --- a/tests/test_llama_chat_format.py +++ b/tests/test_llama_chat_format.py @@ -1,14 +1,28 @@ import json +import os +from collections.abc import Iterator +from typing import cast +import pytest import jinja2 +from typeguard import ForwardRefPolicy, check_type from llama_cpp import ( ChatCompletionRequestUserMessage, + Llama, + llama_chat_format, + llama_supports_gpu_offload, + llama_types ) -import llama_cpp.llama_types as llama_types -import llama_cpp.llama_chat_format as llama_chat_format - from llama_cpp.llama_chat_format import hf_tokenizer_config_to_chat_formatter +from llama_cpp.llama_types import ( + ChatCompletionRequestMessage, + ChatCompletionTool, + ChatCompletionToolChoiceOption, + CreateChatCompletionResponse, + CreateChatCompletionStreamResponse, +) + def test_mistral_instruct(): chat_template = "{{ bos_token }}{% for message in messages %}{% if (message['role'] == 'user') != (loop.index0 % 2 == 0) %}{{ raise_exception('Conversation roles must alternate user/assistant/user/assistant/...') }}{% endif %}{% if message['role'] == 'user' %}{{ '[INST] ' + message['content'] + ' [/INST]' }}{% elif message['role'] == 'assistant' %}{{ message['content'] + eos_token}}{% else %}{{ raise_exception('Only user and assistant roles are supported!') }}{% endif %}{% endfor %}" @@ -87,3 +101,114 @@ def test_hf_tokenizer_config_str_to_chat_formatter(): ) assert chat_formatter_respoonse.prompt == ("[INST] Hello, world! [/INST]" "") + + +def is_accelerator_available() -> bool: + """Check if an accelerator is available.""" + return llama_supports_gpu_offload() or (os.cpu_count() or 1) >= 8 + + +@pytest.mark.parametrize( + "stream", + [ + pytest.param(True, id="stream=True"), + pytest.param(False, id="stream=False"), + ], +) +@pytest.mark.parametrize( + "tool_choice", + [ + pytest.param("none", id="tool_choice=none"), + pytest.param("auto", id="tool_choice=auto"), + pytest.param( + {"type": "function", "function": {"name": "get_weather"}}, id="tool_choice=fixed" + ), + ], +) +@pytest.mark.parametrize( + "user_prompt_expected_tool_calls", + [ + pytest.param( + ("Is 7 a prime number?", 0), + id="expected_tool_calls=0", + ), + pytest.param( + ("What's the weather like in Paris today?", 1), + id="expected_tool_calls=1", + ), + pytest.param( + ("What's the weather like in Paris today? What about New York?", 2), + id="expected_tool_calls=2", + ), + ], +) +@pytest.mark.parametrize( + "llm_repo_id", + [ + pytest.param("bartowski/Llama-3.2-3B-Instruct-GGUF", id="llama_3.2_3B"), + pytest.param( + "bartowski/Meta-Llama-3.1-8B-Instruct-GGUF", + id="llama_3.1_8B", + marks=pytest.mark.skipif( + not is_accelerator_available(), reason="Accelerator not available" + ), + ), + ], +) +def test_llama_cpp_python_tool_use( + llm_repo_id: str, + user_prompt_expected_tool_calls: tuple[str, int], + tool_choice: ChatCompletionToolChoiceOption, + stream: bool, +) -> None: + """Test the upgraded chatml-function-calling llama-cpp-python chat handler.""" + user_prompt, expected_tool_calls = user_prompt_expected_tool_calls + if isinstance(tool_choice, dict) and expected_tool_calls == 0: + pytest.skip("Nonsensical") + llm = Llama.from_pretrained( + repo_id=llm_repo_id, + filename="*Q4_K_M.gguf", + n_ctx=4096, + n_gpu_layers=-1, + verbose=False, + chat_format="chatml-function-calling", + ) + messages: list[ChatCompletionRequestMessage] = [{"role": "user", "content": user_prompt}] + tools: list[ChatCompletionTool] = [ + { + "type": "function", + "function": { + "name": "get_weather", + "description": "Get the weather for a location.", + "parameters": { + "type": "object", + "properties": {"location": {"type": "string", "description": "A city name."}}, + }, + }, + } + ] + response = llm.create_chat_completion( + messages=messages, tools=tools, tool_choice=tool_choice, stream=stream + ) + if stream: + response = cast(Iterator[CreateChatCompletionStreamResponse], response) + num_tool_calls = 0 + for chunk in response: + check_type(chunk, CreateChatCompletionStreamResponse) + tool_calls = chunk["choices"][0]["delta"].get("tool_calls") + if isinstance(tool_calls, list): + num_tool_calls = max(tool_call["index"] for tool_call in tool_calls) + 1 + assert num_tool_calls == (expected_tool_calls if tool_choice != "none" else 0) + else: + response = cast(CreateChatCompletionResponse, response) + check_type( + response, CreateChatCompletionResponse, forward_ref_policy=ForwardRefPolicy.IGNORE + ) + if expected_tool_calls == 0 or tool_choice == "none": + assert response["choices"][0]["message"].get("tool_calls") is None + else: + assert len(response["choices"][0]["message"]["tool_calls"]) == expected_tool_calls + assert all( + tool_call["function"]["name"] == tools[0]["function"]["name"] + for tool_call in response["choices"][0]["message"]["tool_calls"] + ) From f1da6e9d0fc8fdfedee1d19c44cda94b0e281c92 Mon Sep 17 00:00:00 2001 From: Laurent Sorber Date: Thu, 26 Dec 2024 00:28:37 +0100 Subject: [PATCH 02/32] fix: remove strict=True to support Python 3.9 --- llama_cpp/llama_chat_format.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llama_cpp/llama_chat_format.py b/llama_cpp/llama_chat_format.py index ea95a57..389f3b9 100644 --- a/llama_cpp/llama_chat_format.py +++ b/llama_cpp/llama_chat_format.py @@ -3820,7 +3820,7 @@ def chatml_function_calling( }, } for i, (tool_name, completion) in enumerate( - zip(completions_tool_name, completions, strict=True) + zip(completions_tool_name, completions) ) ], }, From e9fa51e8bad66c1bfdb2f4274fae3e5248d60395 Mon Sep 17 00:00:00 2001 From: Laurent Sorber Date: Sun, 5 Jan 2025 15:47:32 +0100 Subject: [PATCH 03/32] feat: improve tool use robustness --- llama_cpp/llama_chat_format.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/llama_cpp/llama_chat_format.py b/llama_cpp/llama_chat_format.py index 389f3b9..b9b1f51 100644 --- a/llama_cpp/llama_chat_format.py +++ b/llama_cpp/llama_chat_format.py @@ -3453,7 +3453,7 @@ def _stream_tool_calls( completions: List[llama_types.CreateCompletionResponse] = [] completions_tool_name: List[str] = [] finish_reason_chat_chunk = None - while tool is not None: + while tool is not None and len(completions) <= 16: # Generate the parameter values for the selected tool prompt += f"functions.{tool_name}:\n" try: @@ -3726,9 +3726,12 @@ def chatml_function_calling( # Case 2 step 2A: Respond with a message if tool_name is None: + prompt = template_renderer.render( + messages=messages, tools=[], tool_calls=None, add_generation_prompt=True + ) return _convert_completion_to_chat( llama.create_completion( - prompt=prompt + "message:\n", + prompt=prompt, **completion_kwargs, # type: ignore[arg-type] logprobs=top_logprobs if logprobs else None, ), @@ -3748,7 +3751,7 @@ def chatml_function_calling( tool = next((tool for tool in tools if tool["function"]["name"] == tool_name), None) completions: List[llama_types.CreateCompletionResponse] = [] completions_tool_name: List[str] = [] - while tool is not None: + while tool is not None and len(completions) <= 16: # Generate the parameter values for the selected tool prompt += f"functions.{tool_name}:\n" try: From a41d86627d21d88dc6e51cc5e3b4282f008c5bc3 Mon Sep 17 00:00:00 2001 From: Laurent Sorber Date: Sun, 12 Jan 2025 15:14:50 +0100 Subject: [PATCH 04/32] test: skip if insufficient resources on macOS --- tests/test_llama_chat_format.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/test_llama_chat_format.py b/tests/test_llama_chat_format.py index f4f919a..42bbac1 100644 --- a/tests/test_llama_chat_format.py +++ b/tests/test_llama_chat_format.py @@ -1,5 +1,6 @@ import json import os +import platform from collections.abc import Iterator from typing import cast @@ -155,6 +156,10 @@ def is_accelerator_available() -> bool: ), ], ) +@pytest.mark.skipif( + platform.system() == "Darwin" and (os.cpu_count() or 1) < 8, + reason="Insufficient resources on macOS", +) def test_llama_cpp_python_tool_use( llm_repo_id: str, user_prompt_expected_tool_calls: tuple[str, int], From 72b0b517a1bb1fbbbf7e421d64cb2cd03b689f57 Mon Sep 17 00:00:00 2001 From: Laurent Sorber Date: Fri, 14 Mar 2025 14:30:10 +0100 Subject: [PATCH 05/32] fix: apply missing _convert_text_completion_logprobs_to_chat --- llama_cpp/llama_chat_format.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/llama_cpp/llama_chat_format.py b/llama_cpp/llama_chat_format.py index b9b1f51..1f1998c 100644 --- a/llama_cpp/llama_chat_format.py +++ b/llama_cpp/llama_chat_format.py @@ -3809,7 +3809,9 @@ def chatml_function_calling( { "finish_reason": "tool_calls", "index": 0, - "logprobs": completion["choices"][0]["logprobs"], + "logprobs": _convert_text_completion_logprobs_to_chat( + completion["choices"][0]["logprobs"] + ), "message": { "role": "assistant", "content": None, From 69dd5740066881f2f341067d3f07c421be65a526 Mon Sep 17 00:00:00 2001 From: kossum <127719370+kossum@users.noreply.github.com> Date: Mon, 31 Mar 2025 04:15:39 +0900 Subject: [PATCH 06/32] feat: Add Gemma3 chat handler (#1976) --- llama_cpp/llama_chat_format.py | 89 ++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) diff --git a/llama_cpp/llama_chat_format.py b/llama_cpp/llama_chat_format.py index 1f1998c..2a89785 100644 --- a/llama_cpp/llama_chat_format.py +++ b/llama_cpp/llama_chat_format.py @@ -3372,6 +3372,95 @@ class MiniCPMv26ChatHandler(Llava15ChatHandler): ) +class Gemma3ChatHandler(Llava15ChatHandler): + # Chat Format: + # 'user\n{system_prompt}\n\n{prompt}\nmodel\n' + + DEFAULT_SYSTEM_MESSAGE = None + + CHAT_FORMAT = ( + "{{ '' }}" + "{%- if messages[0]['role'] == 'system' -%}" + "{%- if messages[0]['content'] is string -%}" + "{%- set first_user_prefix = messages[0]['content'] + '\n\n' -%}" + "{%- else -%}" + "{%- set first_user_prefix = messages[0]['content'][0]['text'] + '\n\n' -%}" + "{%- endif -%}" + "{%- set loop_messages = messages[1:] -%}" + "{%- else -%}" + "{%- set first_user_prefix = \"\" -%}" + "{%- set loop_messages = messages -%}" + "{%- endif -%}" + "{%- for message in loop_messages -%}" + "{%- if (message['role'] == 'user') != (loop.index0 % 2 == 0) -%}" + "{{ raise_exception(\"Conversation roles must alternate user/assistant/user/assistant/...\") }}" + "{%- endif -%}" + "{%- if (message['role'] == 'assistant') -%}" + "{%- set role = \"model\" -%}" + "{%- else -%}" + "{%- set role = message['role'] -%}" + "{%- endif -%}" + "{{ '' + role + '\n' + (first_user_prefix if loop.first else \"\") }}" + "{%- if message['content'] is string -%}" + "{{ message['content'] | trim }}" + "{%- elif message['content'] is iterable -%}" + "{%- for item in message['content'] -%}" + "{%- if item['type'] == 'image' -%}" + "{{ '' }}" + "{%- elif item['type'] == 'text' -%}" + "{{ item['text'] | trim }}" + "{%- endif -%}" + "{%- endfor -%}" + "{%- else -%}" + "{{ raise_exception(\"Invalid content type\") }}" + "{%- endif -%}" + "{{ '\n' }}" + "{%- endfor -%}" + "{%- if add_generation_prompt -%}" + "{{ 'model\n' }}" + "{%- endif -%}" + ) + + @staticmethod + def split_text_on_image_urls(text: str, image_urls: List[str]): + split_text: List[Tuple[Literal["text", "image_url"], str]] = [] + copied_urls = image_urls[:] + remaining = text + image_placeholder = "" + + while remaining: + # Find placeholder + pos = remaining.find(image_placeholder) + if pos != -1: + assert len(copied_urls) > 0 + if pos > 0: + split_text += [("text", remaining[:pos])] + split_text += [("text", "\n\n")] + split_text += [("image_url", copied_urls.pop(0))] + split_text += [("text", "\n\n")] + remaining = remaining[pos + len(image_placeholder):] + else: + assert len(copied_urls) == 0 + split_text.append(("text", remaining)) + remaining = "" + return split_text + + @staticmethod + def get_image_urls(messages: List[llama_types.ChatCompletionRequestMessage]): + image_urls: List[str] = [] + for message in messages: + if message["role"] == "user": + if message.get("content") is None: + continue + for content in message["content"]: + if isinstance(content, dict) and content.get("type") == "image": + if isinstance(content.get("image"), dict) and isinstance(content["image"].get("url"), str): + image_urls.append(content["image"]["url"]) + elif isinstance(content.get("url"), str): + image_urls.append(content["url"]) + return image_urls + + def _accumulate_chunks( chunks_iterator: Iterator[llama_types.CreateCompletionStreamResponse], chunks_list: List[llama_types.CreateCompletionStreamResponse], From 81bdaf1bbe5cd0c3a38745c25eacb4519de39a0d Mon Sep 17 00:00:00 2001 From: kossum <127719370+kossum@users.noreply.github.com> Date: Thu, 3 Apr 2025 06:25:21 +0900 Subject: [PATCH 07/32] resolve the image embedding issue in gemma3 --- llama_cpp/llama_chat_format.py | 101 ++++++++++++++++++++++------- llama_cpp/llava_cpp.py | 112 +++++++++++++++++++++++++++++++++ 2 files changed, 191 insertions(+), 22 deletions(-) diff --git a/llama_cpp/llama_chat_format.py b/llama_cpp/llama_chat_format.py index 2a89785..96d88d3 100644 --- a/llama_cpp/llama_chat_format.py +++ b/llama_cpp/llama_chat_format.py @@ -2834,24 +2834,7 @@ def __call__( ) llama.eval(tokens) else: - image_bytes = self.load_image(value) - embed = self._embed_image_bytes(image_bytes, llama.context_params.n_threads_batch) - if llama.n_tokens + embed.contents.n_image_pos > llama.n_ctx(): - raise ValueError( - f"Prompt exceeds n_ctx: {llama.n_tokens + embed.contents.n_image_pos} > {llama.n_ctx()}" - ) - n_past = ctypes.c_int(llama.n_tokens) - n_past_p = ctypes.pointer(n_past) - with suppress_stdout_stderr(disable=self.verbose): - self._llava_cpp.llava_eval_image_embed( - llama.ctx, - embed, - llama.n_batch, - n_past_p, - ) - # Required to avoid issues with hf tokenizer - llama.input_ids[llama.n_tokens : n_past.value] = -1 - llama.n_tokens = n_past.value + self.eval_image(llama, value) # Get prompt tokens to avoid a cache miss prompt = llama.input_ids[: llama.n_tokens].tolist() @@ -2937,6 +2920,26 @@ def __call__( ) return _convert_completion_to_chat(completion_or_chunks, stream=stream) + def eval_image(self, llama: llama.Llama, image_url: str): + image_bytes = self.load_image(image_url) + embed = self._embed_image_bytes(image_bytes, llama.context_params.n_threads_batch) + if llama.n_tokens + embed.contents.n_image_pos > llama.n_ctx(): + raise ValueError( + f"Prompt exceeds n_ctx: {llama.n_tokens + embed.contents.n_image_pos} > {llama.n_ctx()}" + ) + n_past = ctypes.c_int(llama.n_tokens) + n_past_p = ctypes.pointer(n_past) + with suppress_stdout_stderr(disable=self.verbose): + self._llava_cpp.llava_eval_image_embed( + llama.ctx, + embed, + llama.n_batch, + n_past_p, + ) + # Required to avoid issues with hf tokenizer + llama.input_ids[llama.n_tokens : n_past.value] = -1 + llama.n_tokens = n_past.value + @staticmethod def _load_image(image_url: str) -> bytes: # TODO: Add Pillow support for other image formats beyond (jpg, png) @@ -3434,10 +3437,10 @@ def split_text_on_image_urls(text: str, image_urls: List[str]): if pos != -1: assert len(copied_urls) > 0 if pos > 0: - split_text += [("text", remaining[:pos])] - split_text += [("text", "\n\n")] - split_text += [("image_url", copied_urls.pop(0))] - split_text += [("text", "\n\n")] + split_text.append(("text", remaining[:pos])) + split_text.append(("text", "\n\n")) + split_text.append(("image_url", copied_urls.pop(0))) + split_text.append(("text", "\n\n")) remaining = remaining[pos + len(image_placeholder):] else: assert len(copied_urls) == 0 @@ -3460,6 +3463,60 @@ def get_image_urls(messages: List[llama_types.ChatCompletionRequestMessage]): image_urls.append(content["url"]) return image_urls + def eval_image(self, llama: llama.Llama, image_url: str): + import llama_cpp + + img_bytes = self.load_image(image_url) + img_u8_p = self._llava_cpp.clip_image_u8_init() + if not self._llava_cpp.clip_image_load_from_bytes( + ctypes.create_string_buffer(img_bytes, len(img_bytes)), + ctypes.c_size_t(len(img_bytes)), + img_u8_p, + ): + self._llava_cpp.clip_image_u8_free(img_u8_p) + raise ValueError("Failed to load image.") + + img_f32 = self._llava_cpp.clip_image_f32_batch() + img_f32_p = ctypes.byref(img_f32) + if not self._llava_cpp.clip_image_preprocess(self.clip_ctx, img_u8_p, img_f32_p): + self._llava_cpp.clip_image_f32_batch_free(img_f32_p) + self._llava_cpp.clip_image_u8_free(img_u8_p) + raise ValueError("Failed to preprocess image.") + + n_embd = llama_cpp.llama_model_n_embd(llama._model.model) + n_tokens = 256 + embed = (ctypes.c_float * (n_tokens * n_embd))() + if not self._llava_cpp.clip_image_batch_encode(self.clip_ctx, llama.n_threads, img_f32_p, embed): + self._llava_cpp.clip_image_f32_batch_free(img_f32_p) + self._llava_cpp.clip_image_u8_free(img_u8_p) + raise ValueError("Failed to encode image.") + + self._llava_cpp.clip_image_f32_batch_free(img_f32_p) + self._llava_cpp.clip_image_u8_free(img_u8_p) + llama_cpp.llama_set_causal_attn(llama.ctx, False) + + seq_id_0 = (ctypes.c_int32 * 1)() + seq_ids = (ctypes.POINTER(ctypes.c_int32) * (n_tokens + 1))() + for i in range(n_tokens): + seq_ids[i] = seq_id_0 + + batch = llama_cpp.llama_batch() + batch.n_tokens = n_tokens + batch.token = None + batch.embd = embed + batch.pos = (ctypes.c_int32 * n_tokens)(*[i + llama.n_tokens for i in range(n_tokens)]) + batch.seq_id = seq_ids + batch.n_seq_id = (ctypes.c_int32 * n_tokens)(*([1] * n_tokens)) + batch.logits = (ctypes.c_int8 * n_tokens)() + + if llama_cpp.llama_decode(llama.ctx, batch): + raise ValueError("Failed to decode image.") + + llama_cpp.llama_set_causal_attn(llama.ctx, True) + # Required to avoid issues with hf tokenizer + llama.input_ids[llama.n_tokens : llama.n_tokens + n_tokens] = -1 + llama.n_tokens += n_tokens + def _accumulate_chunks( chunks_iterator: Iterator[llama_types.CreateCompletionStreamResponse], diff --git a/llama_cpp/llava_cpp.py b/llama_cpp/llava_cpp.py index d9dfaf5..46ac508 100644 --- a/llama_cpp/llava_cpp.py +++ b/llama_cpp/llava_cpp.py @@ -7,6 +7,7 @@ c_int, c_uint8, c_float, + c_size_t, c_void_p, POINTER, _Pointer, # type: ignore @@ -141,6 +142,28 @@ def llava_eval_image_embed( ################################################ +# struct clip_image_u8_batch { +# struct clip_image_u8 * data; +# size_t size; +# }; +class clip_image_u8_batch(Structure): + _fields_ = [ + ("data", c_void_p), + ("size", c_size_t), + ] + + +# struct clip_image_f32_batch { +# struct clip_image_f32 * data; +# size_t size; +# }; +class clip_image_f32_batch(Structure): + _fields_ = [ + ("data", c_void_p), + ("size", c_size_t), + ] + + # /** load mmproj model */ # CLIP_API struct clip_ctx * clip_model_load (const char * fname, int verbosity); @ctypes_function("clip_model_load", [c_char_p, c_int], clip_ctx_p_ctypes) @@ -156,3 +179,92 @@ def clip_model_load( def clip_free(ctx: clip_ctx_p, /): ... + +# CLIP_API struct clip_image_u8 * clip_image_u8_init (); +@ctypes_function("clip_image_u8_init", [], c_void_p) +def clip_image_u8_init() -> Optional[c_void_p]: + ... + + +# CLIP_API void clip_image_u8_free (struct clip_image_u8 * img); +@ctypes_function("clip_image_u8_free", [c_void_p], None) +def clip_image_u8_free(img: c_void_p, /): + ... + + +# CLIP_API void clip_image_f32_free(struct clip_image_f32 * img); +@ctypes_function("clip_image_f32_free", [c_void_p], None) +def clip_image_f32_free(img: c_void_p, /): + ... + + +# CLIP_API void clip_image_u8_batch_free (struct clip_image_u8_batch * batch); +@ctypes_function("clip_image_u8_batch_free", [POINTER(clip_image_u8_batch)], None) +def clip_image_u8_batch_free(batch: "_Pointer[clip_image_u8_batch]", /): + ... + + +# CLIP_API void clip_image_f32_batch_free(struct clip_image_f32_batch * batch); +@ctypes_function("clip_image_f32_batch_free", [POINTER(clip_image_f32_batch)], None) +def clip_image_f32_batch_free(batch: "_Pointer[clip_image_f32_batch]", /): + ... + + +# /** preprocess img and store the result in res_imgs, pad_to_square may be overridden to false depending on model configuration */ +# CLIP_API bool clip_image_preprocess(struct clip_ctx * ctx, const struct clip_image_u8 * img, struct clip_image_f32_batch * res_imgs ); +@ctypes_function( + "clip_image_preprocess", + [ + clip_ctx_p_ctypes, + c_void_p, + POINTER(clip_image_f32_batch), + ], + c_bool, +) +def clip_image_preprocess( + ctx: clip_ctx_p, + img: c_void_p, + res_imgs: "_Pointer[clip_image_f32_batch]", + /, +) -> bool: + ... + + +# CLIP_API bool clip_image_batch_encode(struct clip_ctx * ctx, int n_threads, const struct clip_image_f32_batch * imgs, float * vec); +@ctypes_function( + "clip_image_batch_encode", + [ + clip_ctx_p_ctypes, + c_int, + POINTER(clip_image_f32_batch), + POINTER(c_float), + ], + c_bool, +) +def clip_image_batch_encode( + ctx: clip_ctx_p, + n_threads: c_int, + imgs: "_Pointer[clip_image_f32_batch]", + vec: c_void_p +) -> bool: + ... + + +# /** interpret bytes as an image file with length bytes_length, and use the result to populate img */ +# CLIP_API bool clip_image_load_from_bytes(const unsigned char * bytes, size_t bytes_length, struct clip_image_u8 * img); +@ctypes_function( + "clip_image_load_from_bytes", + [ + c_void_p, + c_size_t, + c_void_p, + ], + c_bool, +) +def clip_image_load_from_bytes( + bytes: c_void_p, + bytes_length: c_size_t, + img: c_void_p, + /, +) -> bool: + ... From a107bd52aa0cdb468b9f7981ba534fa24dbb9810 Mon Sep 17 00:00:00 2001 From: kossum <127719370+kossum@users.noreply.github.com> Date: Thu, 3 Apr 2025 19:43:58 +0900 Subject: [PATCH 08/32] fix: added n_ctx check for prompt requirements when embedding images in Gemma3ChatHandler --- llama_cpp/llama_chat_format.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/llama_cpp/llama_chat_format.py b/llama_cpp/llama_chat_format.py index 96d88d3..07c5f8a 100644 --- a/llama_cpp/llama_chat_format.py +++ b/llama_cpp/llama_chat_format.py @@ -3466,6 +3466,12 @@ def get_image_urls(messages: List[llama_types.ChatCompletionRequestMessage]): def eval_image(self, llama: llama.Llama, image_url: str): import llama_cpp + n_tokens = 256 + if llama.n_tokens + n_tokens > llama.n_ctx(): + raise ValueError( + f"Prompt exceeds n_ctx: {llama.n_tokens + n_tokens} > {llama.n_ctx()}" + ) + img_bytes = self.load_image(image_url) img_u8_p = self._llava_cpp.clip_image_u8_init() if not self._llava_cpp.clip_image_load_from_bytes( @@ -3484,7 +3490,6 @@ def eval_image(self, llama: llama.Llama, image_url: str): raise ValueError("Failed to preprocess image.") n_embd = llama_cpp.llama_model_n_embd(llama._model.model) - n_tokens = 256 embed = (ctypes.c_float * (n_tokens * n_embd))() if not self._llava_cpp.clip_image_batch_encode(self.clip_ctx, llama.n_threads, img_f32_p, embed): self._llava_cpp.clip_image_f32_batch_free(img_f32_p) From 0ea0d58c76f73d5bf4a8208b5d1dadb19a64564a Mon Sep 17 00:00:00 2001 From: kossum <127719370+kossum@users.noreply.github.com> Date: Fri, 4 Apr 2025 20:17:26 +0900 Subject: [PATCH 09/32] fix: modify the gemma3 chat template to be compatible with openai api --- llama_cpp/llama_chat_format.py | 17 +---------------- llama_cpp/llava_cpp.py | 3 ++- 2 files changed, 3 insertions(+), 17 deletions(-) diff --git a/llama_cpp/llama_chat_format.py b/llama_cpp/llama_chat_format.py index 07c5f8a..60f5534 100644 --- a/llama_cpp/llama_chat_format.py +++ b/llama_cpp/llama_chat_format.py @@ -3408,7 +3408,7 @@ class Gemma3ChatHandler(Llava15ChatHandler): "{{ message['content'] | trim }}" "{%- elif message['content'] is iterable -%}" "{%- for item in message['content'] -%}" - "{%- if item['type'] == 'image' -%}" + "{%- if item['type'] == 'image_url' -%}" "{{ '' }}" "{%- elif item['type'] == 'text' -%}" "{{ item['text'] | trim }}" @@ -3448,21 +3448,6 @@ def split_text_on_image_urls(text: str, image_urls: List[str]): remaining = "" return split_text - @staticmethod - def get_image_urls(messages: List[llama_types.ChatCompletionRequestMessage]): - image_urls: List[str] = [] - for message in messages: - if message["role"] == "user": - if message.get("content") is None: - continue - for content in message["content"]: - if isinstance(content, dict) and content.get("type") == "image": - if isinstance(content.get("image"), dict) and isinstance(content["image"].get("url"), str): - image_urls.append(content["image"]["url"]) - elif isinstance(content.get("url"), str): - image_urls.append(content["url"]) - return image_urls - def eval_image(self, llama: llama.Llama, image_url: str): import llama_cpp diff --git a/llama_cpp/llava_cpp.py b/llama_cpp/llava_cpp.py index 46ac508..8a382b4 100644 --- a/llama_cpp/llava_cpp.py +++ b/llama_cpp/llava_cpp.py @@ -245,7 +245,8 @@ def clip_image_batch_encode( ctx: clip_ctx_p, n_threads: c_int, imgs: "_Pointer[clip_image_f32_batch]", - vec: c_void_p + vec: c_void_p, + /, ) -> bool: ... From 77ea8165f3a843469c1fdd1d1568841e9e14e6a8 Mon Sep 17 00:00:00 2001 From: Andrei Betlen Date: Fri, 11 Apr 2025 03:28:20 -0400 Subject: [PATCH 10/32] feat: Update llama.cpp --- llama_cpp/llama_cpp.py | 268 ++++++++++++++++++++++++++++++++++++++--- vendor/llama.cpp | 2 +- 2 files changed, 255 insertions(+), 15 deletions(-) diff --git a/llama_cpp/llama_cpp.py b/llama_cpp/llama_cpp.py index f3985ad..710bd83 100644 --- a/llama_cpp/llama_cpp.py +++ b/llama_cpp/llama_cpp.py @@ -165,6 +165,10 @@ # llama_sampler_p = NewType("llama_sampler_p", int) # llama_sampler_p_ctypes = ctypes.c_void_p +# struct llama_kv_cache; +llama_kv_cache_p = NewType("llama_kv_cache_p", int) +llama_kv_cache_p_ctypes = ctypes.c_void_p + # typedef int32_t llama_pos; llama_pos = ctypes.c_int32 # typedef int32_t llama_token; @@ -228,6 +232,9 @@ # LLAMA_VOCAB_PRE_TYPE_MINERVA = 27, # LLAMA_VOCAB_PRE_TYPE_DEEPSEEK3_LLM = 28, # LLAMA_VOCAB_PRE_TYPE_GPT4O = 29, +# LLAMA_VOCAB_PRE_TYPE_SUPERBPE = 30, +# LLAMA_VOCAB_PRE_TYPE_TRILLION = 31, +# LLAMA_VOCAB_PRE_TYPE_BAILINGMOE = 32, # }; LLAMA_VOCAB_PRE_TYPE_DEFAULT = 0 LLAMA_VOCAB_PRE_TYPE_LLAMA3 = 1 @@ -259,6 +266,9 @@ LLAMA_VOCAB_PRE_TYPE_MINERVA = 27 LLAMA_VOCAB_PRE_TYPE_DEEPSEEK3_LLM = 28 LLAMA_VOCAB_PRE_TYPE_GPT4O = 29 +LLAMA_VOCAB_PRE_TYPE_SUPERBPE = 30 +LLAMA_VOCAB_PRE_TYPE_TRILLION = 31 +LLAMA_VOCAB_PRE_TYPE_BAILINGMOE = 32 # // note: these values should be synchronized with ggml_rope @@ -630,10 +640,19 @@ class llama_model_kv_override(ctypes.Structure): value: Union[int, float, bool, bytes] +# struct llama_model_tensor_buft_override { +# const char * pattern; +# ggml_backend_buffer_type_t buft; +# }; + + # struct llama_model_params { # // NULL-terminated list of devices to use for offloading (if NULL, all available devices are used) # ggml_backend_dev_t * devices; +# // NULL-terminated list of buffer types to use for tensors that match a pattern +# const struct llama_model_tensor_buft_override * tensor_buft_overrides; + # int32_t n_gpu_layers; // number of layers to store in VRAM # enum llama_split_mode split_mode; // how to split the model across multiple GPUs @@ -668,6 +687,8 @@ class llama_model_params(ctypes.Structure): """Parameters for llama_model Attributes: + devices (ctypes.Array[ggml_backend_dev_t]): NULL-terminated list of devices to use for offloading (if NULL, all available devices are used) + tensor_buft_overrides (ctypes.Array[llama_model_tensor_buft_override]): NULL-terminated list of buffer types to use for tensors that match a pattern n_gpu_layers (int): number of layers to store in VRAM split_mode (int): how to split the model across multiple GPUs main_gpu (int): the GPU that is used for the entire model. main_gpu interpretation depends on split_mode: LLAMA_SPLIT_NONE: the GPU that is used for the entire model LLAMA_SPLIT_ROW: the GPU that is used for small tensors and intermediate results LLAMA_SPLIT_LAYER: ignored @@ -681,6 +702,8 @@ class llama_model_params(ctypes.Structure): check_tensors (bool): validate model tensor data""" if TYPE_CHECKING: + devices: CtypesArray[ctypes.c_void_p] # NOTE: unused + tensor_buft_overrides: CtypesArray[llama_model_tensor_buft_override] # NOTE: unused n_gpu_layers: int split_mode: int main_gpu: int @@ -695,6 +718,7 @@ class llama_model_params(ctypes.Structure): _fields_ = [ ("devices", ctypes.c_void_p), # NOTE: unnused + ("tensor_buft_overrides", ctypes.c_void_p), # NOTE: unused ("n_gpu_layers", ctypes.c_int32), ("split_mode", ctypes.c_int), ("main_gpu", ctypes.c_int32), @@ -1317,7 +1341,18 @@ def llama_get_model(ctx: llama_context_p, /) -> Optional[llama_model_p]: ... -# LLAMA_API enum llama_pooling_type llama_pooling_type(const struct llama_context * ctx); +# LLAMA_API struct llama_kv_cache * llama_get_kv_self ( struct llama_context * ctx); +@ctypes_function( + "llama_get_kv_self", + [llama_context_p_ctypes], + llama_kv_cache_p_ctypes, +) +def llama_get_kv_self(ctx: llama_context_p, /) -> Optional[llama_kv_cache_p]: + """Get the KV cache for self-attention""" + ... + + +# LLAMA_API enum llama_pooling_type llama_pooling_type(const struct llama_context * ctx); @ctypes_function("llama_pooling_type", [llama_context_p_ctypes], ctypes.c_int) def llama_pooling_type(ctx: llama_context_p, /) -> int: ... @@ -1810,7 +1845,19 @@ def llama_kv_cache_view_update(ctx: llama_context_p, view: CtypesPointerOrRef[ll # // Returns the number of tokens in the KV cache (slow, use only for debug) # // If a KV cell has multiple sequences assigned to it, it will be counted multiple times -# LLAMA_API int32_t llama_get_kv_cache_token_count(const struct llama_context * ctx); +# LLAMA_API int32_t llama_kv_self_n_tokens(const struct llama_context * ctx); +@ctypes_function( + "llama_kv_self_n_tokens", [llama_context_p_ctypes], ctypes.c_int32 +) +def llama_kv_self_n_tokens(ctx: llama_context_p, /) -> int: + """Returns the number of tokens in the KV cache (slow, use only for debug) + If a KV cell has multiple sequences assigned to it, it will be counted multiple times + """ + ... + + +# DEPRECATED(LLAMA_API int32_t llama_get_kv_cache_token_count(const struct llama_context * ctx), +# "use llama_kv_self_n_tokens instead"); @ctypes_function( "llama_get_kv_cache_token_count", [llama_context_p_ctypes], ctypes.c_int32 ) @@ -1822,7 +1869,17 @@ def llama_get_kv_cache_token_count(ctx: llama_context_p, /) -> int: # // Returns the number of used KV cells (i.e. have at least one sequence assigned to them) -# LLAMA_API int32_t llama_get_kv_cache_used_cells(const struct llama_context * ctx); +# LLAMA_API int32_t llama_kv_self_used_cells(const struct llama_context * ctx); +@ctypes_function( + "llama_kv_self_used_cells", [llama_context_p_ctypes], ctypes.c_int32 +) +def llama_kv_self_used_cells(ctx: llama_context_p, /) -> int: + """Returns the number of used KV cells (i.e. have at least one sequence assigned to them)""" + ... + + +# DEPRECATED(LLAMA_API int32_t llama_get_kv_cache_used_cells(const struct llama_context * ctx), +# "use llama_kv_self_used_cells instead"); @ctypes_function( "llama_get_kv_cache_used_cells", [llama_context_p_ctypes], ctypes.c_int32 ) @@ -1832,9 +1889,17 @@ def llama_get_kv_cache_used_cells(ctx: llama_context_p, /) -> int: # // Clear the KV cache - both cell info is erased and KV data is zeroed -# LLAMA_API void llama_kv_cache_clear( +# LLAMA_API void llama_kv_self_clear( # struct llama_context * ctx); -@ctypes_function("llama_kv_cache_clear", [llama_context_p_ctypes], None) +@ctypes_function( + "llama_kv_self_clear", [llama_context_p_ctypes], None +) +def llama_kv_self_clear(ctx: llama_context_p, /): + """Clear the KV cache - both cell info is erased and KV data is zeroed""" + ... + +# NOTE: Deprecated +@ctypes_function("llama_kv_self_clear", [llama_context_p_ctypes], None) def llama_kv_cache_clear(ctx: llama_context_p, /): """Clear the KV cache""" ... @@ -1881,14 +1946,41 @@ def llama_kv_cache_seq_rm( # // Note that this does not allocate extra KV cache memory - it simply assigns the tokens to the new sequence # // p0 < 0 : [0, p1] # // p1 < 0 : [p0, inf) -# LLAMA_API void llama_kv_cache_seq_cp( +# LLAMA_API void llama_kv_self_seq_cp( # struct llama_context * ctx, # llama_seq_id seq_id_src, # llama_seq_id seq_id_dst, # llama_pos p0, # llama_pos p1); @ctypes_function( - "llama_kv_cache_seq_cp", + "llama_kv_self_seq_cp", + [ + llama_context_p_ctypes, + llama_seq_id, + llama_seq_id, + llama_pos, + llama_pos, + ], + None, +) +def llama_kv_self_seq_cp( + ctx: llama_context_p, + seq_id_src: Union[llama_seq_id, int], + seq_id_dst: Union[llama_seq_id, int], + p0: Union[llama_pos, int], + p1: Union[llama_pos, int], + /, +): + """Copy all tokens that belong to the specified sequence to another sequence + Note that this does not allocate extra KV cache memory - it simply assigns the tokens to the new sequence + p0 < 0 : [0, p1] + p1 < 0 : [p0, inf)""" + ... + + +# NOTE: Deprecated +@ctypes_function( + "llama_kv_self_seq_cp", [ llama_context_p_ctypes, llama_seq_id, @@ -1914,17 +2006,27 @@ def llama_kv_cache_seq_cp( # // Removes all tokens that do not belong to the specified sequence -# LLAMA_API void llama_kv_cache_seq_keep( +# LLAMA_API void llama_kv_self_seq_keep( # struct llama_context * ctx, # llama_seq_id seq_id); @ctypes_function( - "llama_kv_cache_seq_keep", [llama_context_p_ctypes, llama_seq_id], None + "llama_kv_self_seq_keep", [llama_context_p_ctypes, llama_seq_id], None +) +def llama_kv_self_seq_keep(ctx: llama_context_p, seq_id: Union[llama_seq_id, int], /): + """Removes all tokens that do not belong to the specified sequence""" + ... + + +# NOTE: Deprecated +@ctypes_function( + "llama_kv_self_seq_keep", [llama_context_p_ctypes, llama_seq_id], None ) def llama_kv_cache_seq_keep(ctx: llama_context_p, seq_id: Union[llama_seq_id, int], /): """Removes all tokens that do not belong to the specified sequence""" ... + # // Adds relative position "delta" to all tokens that belong to the specified sequence and have positions in [p0, p1) # // If the KV cache is RoPEd, the KV data is updated accordingly: # // - lazily on next llama_decode() @@ -1938,7 +2040,48 @@ def llama_kv_cache_seq_keep(ctx: llama_context_p, seq_id: Union[llama_seq_id, in # llama_pos p1, # llama_pos delta); @ctypes_function( - "llama_kv_cache_seq_add", + "llama_kv_self_seq_add", + [ + llama_context_p_ctypes, + llama_seq_id, + llama_pos, + llama_pos, + llama_pos, + ], + None, +) +def llama_kv_self_seq_add( + ctx: llama_context_p, + seq_id: Union[llama_seq_id, int], + p0: Union[llama_pos, int], + p1: Union[llama_pos, int], + delta: Union[llama_pos, int], + /, +): + """Adds relative position "delta" to all tokens that belong to the specified sequence and have positions in [p0, p1) + If the KV cache is RoPEd, the KV data is updated accordingly: + - lazily on next llama_decode() + - explicitly with llama_kv_cache_update() + p0 < 0 : [0, p1] + p1 < 0 : [p0, inf)""" + ... + + +# // NOTE: Deprecated +# // Adds relative position "delta" to all tokens that belong to the specified sequence and have positions in [p0, p1) +# // If the KV cache is RoPEd, the KV data is updated accordingly: +# // - lazily on next llama_decode() +# // - explicitly with llama_kv_cache_update() +# // p0 < 0 : [0, p1] +# // p1 < 0 : [p0, inf) +# LLAMA_API void llama_kv_cache_seq_add( +# struct llama_context * ctx, +# llama_seq_id seq_id, +# llama_pos p0, +# llama_pos p1, +# llama_pos delta); +@ctypes_function( + "llama_kv_self_seq_add", [ llama_context_p_ctypes, llama_seq_id, @@ -1976,7 +2119,44 @@ def llama_kv_cache_seq_add( # llama_pos p1, # int d); @ctypes_function( - "llama_kv_cache_seq_div", + "llama_kv_self_seq_div", + [ + llama_context_p_ctypes, + llama_seq_id, + llama_pos, + llama_pos, + ctypes.c_int, + ], + None, +) +def llama_kv_self_seq_div( + ctx: llama_context_p, + seq_id: Union[llama_seq_id, int], + p0: Union[llama_pos, int], + p1: Union[llama_pos, int], + d: Union[ctypes.c_int, int], + /, +): + """Integer division of the positions by factor of `d > 1` + If the KV cache is RoPEd, the KV data is updated accordingly + p0 < 0 : [0, p1] + p1 < 0 : [p0, inf)""" + ... + + +# // NOTE: Deprecated +# // Integer division of the positions by factor of `d > 1` +# // If the KV cache is RoPEd, the KV data is updated accordingly +# // p0 < 0 : [0, p1] +# // p1 < 0 : [p0, inf) +# LLAMA_API void llama_kv_cache_seq_div( +# struct llama_context * ctx, +# llama_seq_id seq_id, +# llama_pos p0, +# llama_pos p1, +# int d); +@ctypes_function( + "llama_kv_self_seq_div", [ llama_context_p_ctypes, llama_seq_id, @@ -2001,10 +2181,39 @@ def llama_kv_cache_seq_div( ... +# // Returns the largest position present in the KV cache for the specified sequence +# LLAMA_API llama_pos llama_kv_self_seq_pos_max( +# struct llama_context * ctx, +# llama_seq_id seq_id); +@ctypes_function( + "llama_kv_self_seq_pos_max", [llama_context_p_ctypes, llama_seq_id], llama_pos +) +def llama_kv_self_seq_pos_max( + ctx: llama_context_p, seq_id: Union[llama_seq_id, int], / +) -> int: + """Returns the largest position present in the KV cache for the specified sequence""" + ... + + # // Defragment the KV cache # // This will be applied: # // - lazily on next llama_decode() -# // - explicitly with llama_kv_cache_update() +# // - explicitly with llama_kv_self_update() +# LLAMA_API void llama_kv_self_defrag(struct llama_context * ctx); +@ctypes_function("llama_kv_self_defrag", [llama_context_p_ctypes], None) +def llama_kv_self_defrag(ctx: llama_context_p, /): + """Defragment the KV cache + This will be applied: + - lazily on next llama_decode() + - explicitly with llama_kv_cache_update()""" + ... + + +# NOTE: Deprecated +# // Defragment the KV cache +# // This will be applied: +# // - lazily on next llama_decode() +# // - explicitly with llama_kv_self_update() # LLAMA_API void llama_kv_cache_defrag(struct llama_context * ctx); @ctypes_function("llama_kv_cache_defrag", [llama_context_p_ctypes], None) def llama_kv_cache_defrag(ctx: llama_context_p, /): @@ -2017,7 +2226,15 @@ def llama_kv_cache_defrag(ctx: llama_context_p, /): # // Apply the KV cache updates (such as K-shifts, defragmentation, etc.) # LLAMA_API void llama_kv_cache_update(struct llama_context * ctx); -@ctypes_function("llama_kv_cache_update", [llama_context_p_ctypes], None) +@ctypes_function("llama_kv_self_update", [llama_context_p_ctypes], None) +def llama_kv_self_update(ctx: llama_context_p, /): + """Apply the KV cache updates (such as K-shifts, defragmentation, etc.)""" + ... + +# // NOTE: Deprecated +# // Apply the KV cache updates (such as K-shifts, defragmentation, etc.) +# LLAMA_API void llama_kv_cache_update(struct llama_context * ctx); +@ctypes_function("llama_kv_self_update", [llama_context_p_ctypes], None) def llama_kv_cache_update(ctx: llama_context_p, /): """Apply the KV cache updates (such as K-shifts, defragmentation, etc.)""" ... @@ -2025,7 +2242,16 @@ def llama_kv_cache_update(ctx: llama_context_p, /): # // Check if the context supports KV cache shifting # LLAMA_API bool llama_kv_cache_can_shift(struct llama_context * ctx); -@ctypes_function("llama_kv_cache_can_shift", [llama_context_p_ctypes], ctypes.c_bool) +@ctypes_function("llama_kv_self_can_shift", [llama_context_p_ctypes], ctypes.c_bool) +def llama_kv_self_can_shift(ctx: llama_context_p, /) -> bool: + """Check if the context supports KV cache shifting""" + ... + + +# // NOTE: Deprecated +# // Check if the context supports KV cache shifting +# LLAMA_API bool llama_kv_cache_can_shift(struct llama_context * ctx); +@ctypes_function("llama_kv_self_can_shift", [llama_context_p_ctypes], ctypes.c_bool) def llama_kv_cache_can_shift(ctx: llama_context_p, /) -> bool: """Check if the context supports KV cache shifting""" ... @@ -2547,6 +2773,16 @@ def llama_set_causal_attn(ctx: llama_context_p, causal_attn: bool, /): ... +# // Set whether the model is in warmup mode or not +# // If true, all model tensors are activated during llama_decode() to load and cache their weights. +# LLAMA_API void llama_set_warmup(struct llama_context * ctx, bool warmup); +@ctypes_function("llama_set_warmup", [llama_context_p_ctypes, ctypes.c_bool], None) +def llama_set_warmup(ctx: llama_context_p, warmup: bool, /): + """Set whether the model is in warmup mode or not + If true, all model tensors are activated during llama_decode() to load and cache their weights.""" + ... + + # // Set abort callback # LLAMA_API void llama_set_abort_callback(struct llama_context * ctx, ggml_abort_callback abort_callback, void * abort_callback_data); @ctypes_function( @@ -3701,6 +3937,10 @@ def llama_sampler_init_mirostat_v2( ... +# /// @details Intializes a GBNF grammar, see grammars/README.md for details. +# /// @param vocab The vocabulary that this grammar will be used with. +# /// @param grammar_str The production rules for the grammar, encoded as a string. Returns an empty grammar if empty. Returns NULL if parsing of grammar_str fails. +# /// @param grammar_root The name of the start symbol for the grammar. # LLAMA_API struct llama_sampler * llama_sampler_init_grammar( # const struct llama_vocab * vocab, # const char * grammar_str, diff --git a/vendor/llama.cpp b/vendor/llama.cpp index 7841fc7..6bf28f0 160000 --- a/vendor/llama.cpp +++ b/vendor/llama.cpp @@ -1 +1 @@ -Subproject commit 7841fc723e059d1fd9640e5c0ef19050fcc7c698 +Subproject commit 6bf28f0111ff9f21b3c1b1eace20c590281e7ba6 From 597b16234d529e6f6afdf7b10c007bb52ba41891 Mon Sep 17 00:00:00 2001 From: Andrei Betlen Date: Thu, 8 May 2025 06:52:52 -0400 Subject: [PATCH 11/32] feat: Update llama.cpp --- CMakeLists.txt | 2 +- llama_cpp/llama_cpp.py | 33 +++++++++++++++++++++------------ vendor/llama.cpp | 2 +- 3 files changed, 23 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 64a0304..443d1ee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -143,7 +143,7 @@ if (LLAMA_BUILD) endif() # Building llava - add_subdirectory(vendor/llama.cpp/examples/llava) + add_subdirectory(vendor/llama.cpp/tools/mtmd) set_target_properties(llava_shared PROPERTIES OUTPUT_NAME "llava") if (WIN32) diff --git a/llama_cpp/llama_cpp.py b/llama_cpp/llama_cpp.py index 710bd83..63de3a9 100644 --- a/llama_cpp/llama_cpp.py +++ b/llama_cpp/llama_cpp.py @@ -235,6 +235,8 @@ # LLAMA_VOCAB_PRE_TYPE_SUPERBPE = 30, # LLAMA_VOCAB_PRE_TYPE_TRILLION = 31, # LLAMA_VOCAB_PRE_TYPE_BAILINGMOE = 32, +# LLAMA_VOCAB_PRE_TYPE_LLAMA4 = 33, +# LLAMA_VOCAB_PRE_TYPE_PIXTRAL = 34, # }; LLAMA_VOCAB_PRE_TYPE_DEFAULT = 0 LLAMA_VOCAB_PRE_TYPE_LLAMA3 = 1 @@ -252,7 +254,7 @@ LLAMA_VOCAB_PRE_TYPE_DBRX = 13 LLAMA_VOCAB_PRE_TYPE_SMAUG = 14 LLAMA_VOCAB_PRE_TYPE_PORO = 15 -LLAMA_VOCAV_PRE_TYPE_CHATGLM3 = 16 +LLAMA_VOCAB_PRE_TYPE_CHATGLM3 = 16 LLAMA_VOCAB_PRE_TYPE_CHATGLM4 = 17 LLAMA_VOCAB_PRE_TYPE_VIKING = 18 LLAMA_VOCAB_PRE_TYPE_JAIS = 19 @@ -269,6 +271,8 @@ LLAMA_VOCAB_PRE_TYPE_SUPERBPE = 30 LLAMA_VOCAB_PRE_TYPE_TRILLION = 31 LLAMA_VOCAB_PRE_TYPE_BAILINGMOE = 32 +LLAMA_VOCAB_PRE_TYPE_LLAMA4 = 33 +LLAMA_VOCAB_PRE_TYPE_PIXTRAL = 34 # // note: these values should be synchronized with ggml_rope @@ -891,17 +895,18 @@ class llama_context_params(ctypes.Structure): # // model quantization parameters # typedef struct llama_model_quantize_params { -# int32_t nthread; // number of threads to use for quantizing, if <=0 will use std::thread::hardware_concurrency() -# enum llama_ftype ftype; // quantize to this llama_ftype -# enum ggml_type output_tensor_type; // output tensor type -# enum ggml_type token_embedding_type; // token embeddings tensor type -# bool allow_requantize; // allow quantizing non-f32/f16 tensors -# bool quantize_output_tensor; // quantize output.weight -# bool only_copy; // only copy tensors - ftype, allow_requantize and quantize_output_tensor are ignored -# bool pure; // quantize all tensors to the default type -# bool keep_split; // quantize to the same number of shards -# void * imatrix; // pointer to importance matrix data -# void * kv_overrides; // pointer to vector containing overrides +# int32_t nthread; // number of threads to use for quantizing, if <=0 will use std::thread::hardware_concurrency() +# enum llama_ftype ftype; // quantize to this llama_ftype +# enum ggml_type output_tensor_type; // output tensor type +# enum ggml_type token_embedding_type; // token embeddings tensor type +# bool allow_requantize; // allow quantizing non-f32/f16 tensors +# bool quantize_output_tensor; // quantize output.weight +# bool only_copy; // only copy tensors - ftype, allow_requantize and quantize_output_tensor are ignored +# bool pure; // quantize all tensors to the default type +# bool keep_split; // quantize to the same number of shards +# void * imatrix; // pointer to importance matrix data +# void * kv_overrides; // pointer to vector containing overrides +# void * tensor_types; // pointer to vector containing tensor types # } llama_model_quantize_params; class llama_model_quantize_params(ctypes.Structure): """Parameters for llama_model_quantize @@ -918,6 +923,7 @@ class llama_model_quantize_params(ctypes.Structure): keep_split (bool): quantize to the same number of shards imatrix (ctypes.c_void_p): pointer to importance matrix data kv_overrides (ctypes.c_void_p): pointer to vector containing overrides + tensor_types (ctypes.c_void_p): pointer to vector containing tensor types """ if TYPE_CHECKING: @@ -932,6 +938,7 @@ class llama_model_quantize_params(ctypes.Structure): keep_split: bool imatrix: ctypes.c_void_p kv_overrides: ctypes.c_void_p + tensor_types: ctypes.c_void_p _fields_ = [ ("nthread", ctypes.c_int32), @@ -945,6 +952,7 @@ class llama_model_quantize_params(ctypes.Structure): ("keep_split", ctypes.c_bool), ("imatrix", ctypes.c_void_p), ("kv_overrides", ctypes.c_void_p), + ("tensor_types", ctypes.c_void_p), ] @@ -3812,6 +3820,7 @@ def llama_sampler_init_softmax() -> llama_sampler_p: # /// @details Top-K sampling described in academic paper "The Curious Case of Neural Text Degeneration" https://arxiv.org/abs/1904.09751 +# /// Setting k <= 0 makes this a noop # LLAMA_API struct llama_sampler * llama_sampler_init_top_k (int32_t k); @ctypes_function("llama_sampler_init_top_k", [ctypes.c_int32], llama_sampler_p_ctypes) def llama_sampler_init_top_k(k: int) -> llama_sampler_p: diff --git a/vendor/llama.cpp b/vendor/llama.cpp index 6bf28f0..8733e0c 160000 --- a/vendor/llama.cpp +++ b/vendor/llama.cpp @@ -1 +1 @@ -Subproject commit 6bf28f0111ff9f21b3c1b1eace20c590281e7ba6 +Subproject commit 8733e0cf6eefc7c7752297cc22d0836706f4222c From 5f7cd9cf5f40fdfa9d88fbda944982b8be0613c6 Mon Sep 17 00:00:00 2001 From: Andrei Betlen Date: Thu, 8 May 2025 06:59:55 -0400 Subject: [PATCH 12/32] chore: Bump version --- CHANGELOG.md | 4 ++++ llama_cpp/__init__.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 605370e..affbd5d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.3.9] + +- feat: Update llama.cpp to ggerganov/llama.cpp@8733e0cf6eefc7c7752297cc22d0836706f4222c + ## [0.3.8] - feat: Update llama.cpp to ggerganov/llama.cpp@7841fc723e059d1fd9640e5c0ef19050fcc7c698 diff --git a/llama_cpp/__init__.py b/llama_cpp/__init__.py index b1a8b9b..2c9c527 100644 --- a/llama_cpp/__init__.py +++ b/llama_cpp/__init__.py @@ -1,4 +1,4 @@ from .llama_cpp import * from .llama import * -__version__ = "0.3.8" +__version__ = "0.3.9" From 73ac3bee224a3edf28cc7c2ec94fb040fb6e14d1 Mon Sep 17 00:00:00 2001 From: Andrei Betlen Date: Thu, 8 May 2025 07:02:20 -0400 Subject: [PATCH 13/32] hotfix: Disable curl support --- CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 443d1ee..b9178e8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -62,6 +62,9 @@ if (LLAMA_BUILD) # Enable building of the common library set(LLAMA_BUILD_COMMON ON CACHE BOOL "Build llama.cpp common library" FORCE) + # Disable building curl support + set(LLAMA_CURL OFF CACHE BOOL "llama.cpp: enable curl" FORCE) + # Architecture detection and settings for Apple platforms if (APPLE) # Get the target architecture From 99213967d1b7333e541c4322d42ae8c404ced5df Mon Sep 17 00:00:00 2001 From: kossum <127719370+kossum@users.noreply.github.com> Date: Wed, 4 Jun 2025 13:03:58 +0900 Subject: [PATCH 14/32] fix: add compatibility with v0.3.9 for Gemma3ChatHandler --- llama_cpp/llama_chat_format.py | 3 +-- llama_cpp/llava_cpp.py | 46 +++++++--------------------------- 2 files changed, 10 insertions(+), 39 deletions(-) diff --git a/llama_cpp/llama_chat_format.py b/llama_cpp/llama_chat_format.py index 60f5534..8cf4fe8 100644 --- a/llama_cpp/llama_chat_format.py +++ b/llama_cpp/llama_chat_format.py @@ -3467,8 +3467,7 @@ def eval_image(self, llama: llama.Llama, image_url: str): self._llava_cpp.clip_image_u8_free(img_u8_p) raise ValueError("Failed to load image.") - img_f32 = self._llava_cpp.clip_image_f32_batch() - img_f32_p = ctypes.byref(img_f32) + img_f32_p = self._llava_cpp.clip_image_f32_batch_init() if not self._llava_cpp.clip_image_preprocess(self.clip_ctx, img_u8_p, img_f32_p): self._llava_cpp.clip_image_f32_batch_free(img_f32_p) self._llava_cpp.clip_image_u8_free(img_u8_p) diff --git a/llama_cpp/llava_cpp.py b/llama_cpp/llava_cpp.py index 8a382b4..0ce0b3f 100644 --- a/llama_cpp/llava_cpp.py +++ b/llama_cpp/llava_cpp.py @@ -142,28 +142,6 @@ def llava_eval_image_embed( ################################################ -# struct clip_image_u8_batch { -# struct clip_image_u8 * data; -# size_t size; -# }; -class clip_image_u8_batch(Structure): - _fields_ = [ - ("data", c_void_p), - ("size", c_size_t), - ] - - -# struct clip_image_f32_batch { -# struct clip_image_f32 * data; -# size_t size; -# }; -class clip_image_f32_batch(Structure): - _fields_ = [ - ("data", c_void_p), - ("size", c_size_t), - ] - - # /** load mmproj model */ # CLIP_API struct clip_ctx * clip_model_load (const char * fname, int verbosity); @ctypes_function("clip_model_load", [c_char_p, c_int], clip_ctx_p_ctypes) @@ -192,21 +170,15 @@ def clip_image_u8_free(img: c_void_p, /): ... -# CLIP_API void clip_image_f32_free(struct clip_image_f32 * img); -@ctypes_function("clip_image_f32_free", [c_void_p], None) -def clip_image_f32_free(img: c_void_p, /): - ... - - -# CLIP_API void clip_image_u8_batch_free (struct clip_image_u8_batch * batch); -@ctypes_function("clip_image_u8_batch_free", [POINTER(clip_image_u8_batch)], None) -def clip_image_u8_batch_free(batch: "_Pointer[clip_image_u8_batch]", /): +# CLIP_API struct clip_image_f32_batch * clip_image_f32_batch_init(); +@ctypes_function("clip_image_f32_batch_init", [], c_void_p) +def clip_image_f32_batch_init() -> Optional[c_void_p]: ... # CLIP_API void clip_image_f32_batch_free(struct clip_image_f32_batch * batch); -@ctypes_function("clip_image_f32_batch_free", [POINTER(clip_image_f32_batch)], None) -def clip_image_f32_batch_free(batch: "_Pointer[clip_image_f32_batch]", /): +@ctypes_function("clip_image_f32_batch_free", [c_void_p], None) +def clip_image_f32_batch_free(batch: c_void_p, /): ... @@ -217,14 +189,14 @@ def clip_image_f32_batch_free(batch: "_Pointer[clip_image_f32_batch]", /): [ clip_ctx_p_ctypes, c_void_p, - POINTER(clip_image_f32_batch), + c_void_p, ], c_bool, ) def clip_image_preprocess( ctx: clip_ctx_p, img: c_void_p, - res_imgs: "_Pointer[clip_image_f32_batch]", + res_imgs: c_void_p, /, ) -> bool: ... @@ -236,7 +208,7 @@ def clip_image_preprocess( [ clip_ctx_p_ctypes, c_int, - POINTER(clip_image_f32_batch), + c_void_p, POINTER(c_float), ], c_bool, @@ -244,7 +216,7 @@ def clip_image_preprocess( def clip_image_batch_encode( ctx: clip_ctx_p, n_threads: c_int, - imgs: "_Pointer[clip_image_f32_batch]", + imgs: c_void_p, vec: c_void_p, /, ) -> bool: From 63fc30916a4995c87e78eca3414e4ba92b979220 Mon Sep 17 00:00:00 2001 From: okaris Date: Fri, 20 Jun 2025 07:03:44 +0000 Subject: [PATCH 15/32] feat: abstract context creation and expose for recreation --- llama_cpp/llama.py | 385 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 290 insertions(+), 95 deletions(-) diff --git a/llama_cpp/llama.py b/llama_cpp/llama.py index 7e9a6af..fd52fce 100644 --- a/llama_cpp/llama.py +++ b/llama_cpp/llama.py @@ -302,60 +302,9 @@ def __init__( ].key = b"\0" # ensure sentinel element is zeroed self.model_params.kv_overrides = self._kv_overrides_array - self.n_batch = min(n_ctx, n_batch) # ??? - self.n_threads = n_threads or max(multiprocessing.cpu_count() // 2, 1) - self.n_threads_batch = n_threads_batch or multiprocessing.cpu_count() - # Used by the sampler self._seed = seed or llama_cpp.LLAMA_DEFAULT_SEED - # Context Params - self.context_params = llama_cpp.llama_context_default_params() - self.context_params.n_ctx = n_ctx - self.context_params.n_batch = self.n_batch - self.context_params.n_ubatch = min(self.n_batch, n_ubatch) - self.context_params.n_threads = self.n_threads - self.context_params.n_threads_batch = self.n_threads_batch - self.context_params.rope_scaling_type = ( - rope_scaling_type - if rope_scaling_type is not None - else llama_cpp.LLAMA_ROPE_SCALING_TYPE_UNSPECIFIED - ) - self.context_params.pooling_type = pooling_type - self.context_params.rope_freq_base = ( - rope_freq_base if rope_freq_base != 0.0 else 0 - ) - self.context_params.rope_freq_scale = ( - rope_freq_scale if rope_freq_scale != 0.0 else 0 - ) - self.context_params.yarn_ext_factor = ( - yarn_ext_factor if yarn_ext_factor != 0.0 else 0 - ) - self.context_params.yarn_attn_factor = ( - yarn_attn_factor if yarn_attn_factor != 0.0 else 0 - ) - self.context_params.yarn_beta_fast = ( - yarn_beta_fast if yarn_beta_fast != 0.0 else 0 - ) - self.context_params.yarn_beta_slow = ( - yarn_beta_slow if yarn_beta_slow != 0.0 else 0 - ) - self.context_params.yarn_orig_ctx = yarn_orig_ctx if yarn_orig_ctx != 0 else 0 - self.context_params.logits_all = ( - logits_all if draft_model is None else True - ) # Must be set to True for speculative decoding - self.context_params.embeddings = embedding # TODO: Rename to embeddings - self.context_params.offload_kqv = offload_kqv - self.context_params.flash_attn = flash_attn - # KV cache quantization - if type_k is not None: - self.context_params.type_k = type_k - if type_v is not None: - self.context_params.type_v = type_v - # Sampling Params - self.context_params.no_perf = no_perf - self.last_n_tokens_size = last_n_tokens_size - self.cache: Optional[BaseLlamaCache] = None self.lora_base = lora_base @@ -376,39 +325,45 @@ def __init__( ) ) ) - - # Override tokenizer + + self.draft_model = draft_model + + # Override tokenizer self.tokenizer_ = tokenizer or LlamaTokenizer(self) + + self._n_vocab = self.n_vocab() - # Set the default value for the context and correct the batch - if n_ctx == 0: - n_ctx = self._model.n_ctx_train() - self.n_batch = min(n_ctx, n_batch) - self.context_params.n_ctx = self._model.n_ctx_train() - self.context_params.n_batch = self.n_batch - self.context_params.n_ubatch = min(self.n_batch, n_ubatch) - - self._ctx = self._stack.enter_context( - contextlib.closing( - internals.LlamaContext( - model=self._model, - params=self.context_params, - verbose=self.verbose, - ) - ) - ) + self._token_nl = self.token_nl() + self._token_eos = self.token_eos() - self._batch = self._stack.enter_context( - contextlib.closing( - internals.LlamaBatch( - n_tokens=self.n_batch, - embd=0, - n_seq_max=self.context_params.n_ctx, - verbose=self.verbose, - ) - ) + self._candidates = internals.LlamaTokenDataArray(n_vocab=self._n_vocab) + # Context Params + self._create_context( + n_ctx=n_ctx, + n_batch=n_batch, + n_ubatch=min(n_batch, n_ubatch), + n_threads=n_threads, + n_threads_batch=n_threads_batch, + rope_scaling_type=rope_scaling_type, + pooling_type=pooling_type, + rope_freq_base=rope_freq_base, + rope_freq_scale=rope_freq_scale, + yarn_ext_factor=yarn_ext_factor, + yarn_attn_factor=yarn_attn_factor, + yarn_beta_fast=yarn_beta_fast, + yarn_beta_slow=yarn_beta_slow, + yarn_orig_ctx=yarn_orig_ctx, + logits_all=logits_all, + embedding=embedding, + offload_kqv=offload_kqv, + flash_attn=flash_attn, + no_perf=no_perf, + last_n_tokens_size=last_n_tokens_size, + type_k=type_k, + type_v=type_v, ) + self._lora_adapter: Optional[llama_cpp.llama_adapter_lora_p] = None if self.lora_path: @@ -445,22 +400,6 @@ def free_lora_adapter(): str, llama_chat_format.LlamaChatCompletionHandler ] = {} - self.draft_model = draft_model - - self._n_vocab = self.n_vocab() - self._n_ctx = self.n_ctx() - - self._token_nl = self.token_nl() - self._token_eos = self.token_eos() - - self._candidates = internals.LlamaTokenDataArray(n_vocab=self._n_vocab) - - self.n_tokens = 0 - self.input_ids: npt.NDArray[np.intc] = np.ndarray((n_ctx,), dtype=np.intc) - self.scores: npt.NDArray[np.single] = np.ndarray( - (n_ctx if logits_all == True else n_batch, self._n_vocab), dtype=np.single - ) - self._mirostat_mu = ctypes.c_float( 2.0 * 5.0 ) # TODO: Move this to sampling context @@ -2359,6 +2298,262 @@ def from_pretrained( **kwargs, ) + def _create_context( + self, + *, + n_ctx: int = 512, + n_batch: int = 512, + n_ubatch: int = 512, + n_threads: Optional[int] = None, + n_threads_batch: Optional[int] = None, + rope_scaling_type: Optional[ + int + ] = llama_cpp.LLAMA_ROPE_SCALING_TYPE_UNSPECIFIED, + pooling_type: int = llama_cpp.LLAMA_POOLING_TYPE_UNSPECIFIED, + rope_freq_base: float = 0.0, + rope_freq_scale: float = 0.0, + yarn_ext_factor: float = -1.0, + yarn_attn_factor: float = 1.0, + yarn_beta_fast: float = 32.0, + yarn_beta_slow: float = 1.0, + yarn_orig_ctx: int = 0, + logits_all: bool = False, + embedding: bool = False, + offload_kqv: bool = True, + flash_attn: bool = False, + # Sampling Params + no_perf: bool = False, + last_n_tokens_size: int = 64, + type_k: Optional[int] = None, + type_v: Optional[int] = None, + state: Optional[LlamaState] = None, + ) -> None: + """Free the existing context and create a new one with specified parameters. + + Args: + n_ctx: Text context size. If 0, value from model is used. + n_batch: Maximum batch size for llama_decode. + n_ubatch: Maximum physical batch size. + n_seq_max: Maximum number of sequences (distinct states for recurrent models). + n_threads: Number of threads to use for generation. + n_threads_batch: Number of threads to use for batch processing. + rope_scaling_type: RoPE scaling type from llama_rope_scaling_type enum. + pooling_type: Whether to pool embedding results by sequence id. + attention_type: Attention type to use for embeddings. + rope_freq_base: RoPE base frequency, 0 = from model. + rope_freq_scale: RoPE frequency scaling factor, 0 = from model. + yarn_ext_factor: YaRN extrapolation mix factor, negative = from model. + yarn_attn_factor: YaRN magnitude scaling factor. + yarn_beta_fast: YaRN low correction dim. + yarn_beta_slow: YaRN high correction dim. + yarn_orig_ctx: YaRN original context size. + defrag_thold: Defragment KV cache if holes/size > thold, < 0 disabled. + type_k: Data type for K cache. + type_v: Data type for V cache. + logits_all: Compute all logits in llama_decode (deprecated). + embeddings: Extract embeddings with logits. + offload_kqv: Offload KQV ops (including KV cache) to GPU. + flash_attn: Use flash attention. + no_perf: Disable performance timings. + last_n_tokens_size: Size of the last n tokens. + type_k: Data type for K cache. + type_v: Data type for V cache. + """ + # Create new context params with provided values + self.n_batch = min(n_ctx, n_batch) # ??? + self.n_threads = n_threads or max(multiprocessing.cpu_count() // 2, 1) + self.n_threads_batch = n_threads_batch or multiprocessing.cpu_count() + + # Context Params + self.context_params = llama_cpp.llama_context_default_params() + self.context_params.n_ctx = n_ctx + self.context_params.n_batch = self.n_batch + self.context_params.n_ubatch = min(self.n_batch, n_ubatch) + self.context_params.n_threads = self.n_threads + self.context_params.n_threads_batch = self.n_threads_batch + self.context_params.rope_scaling_type = ( + rope_scaling_type + if rope_scaling_type is not None + else llama_cpp.LLAMA_ROPE_SCALING_TYPE_UNSPECIFIED + ) + self.context_params.pooling_type = pooling_type + self.context_params.rope_freq_base = ( + rope_freq_base if rope_freq_base != 0.0 else 0 + ) + self.context_params.rope_freq_scale = ( + rope_freq_scale if rope_freq_scale != 0.0 else 0 + ) + self.context_params.yarn_ext_factor = ( + yarn_ext_factor if yarn_ext_factor != 0.0 else 0 + ) + self.context_params.yarn_attn_factor = ( + yarn_attn_factor if yarn_attn_factor != 0.0 else 0 + ) + self.context_params.yarn_beta_fast = ( + yarn_beta_fast if yarn_beta_fast != 0.0 else 0 + ) + self.context_params.yarn_beta_slow = ( + yarn_beta_slow if yarn_beta_slow != 0.0 else 0 + ) + self.context_params.yarn_orig_ctx = yarn_orig_ctx if yarn_orig_ctx != 0 else 0 + self.context_params.logits_all = ( + logits_all if self.draft_model is None else True + ) # Must be set to True for speculative decoding + self.context_params.embeddings = embedding # TODO: Rename to embeddings + self.context_params.offload_kqv = offload_kqv + self.context_params.flash_attn = flash_attn + # KV cache quantization + if type_k is not None: + self.context_params.type_k = type_k + if type_v is not None: + self.context_params.type_v = type_v + + self.context_params.no_perf = no_perf + self.last_n_tokens_size = last_n_tokens_size + + # Set the default value for the context and correct the batch + if n_ctx == 0: + n_ctx = self._model.n_ctx_train() + self.n_batch = min(n_ctx, n_batch) + self.context_params.n_ctx = self._model.n_ctx_train() + self.context_params.n_batch = self.n_batch + self.context_params.n_ubatch = min(self.n_batch, n_ubatch) + + self._ctx = self._stack.enter_context( + contextlib.closing( + internals.LlamaContext( + model=self._model, + params=self.context_params, + verbose=self.verbose, + ) + ) + ) + + if state is not None: + self.load_state(state) + + self._n_ctx = self.n_ctx() + self.n_tokens = 0 + + self.input_ids: npt.NDArray[np.intc] = np.ndarray((n_ctx,), dtype=np.intc) + self.scores: npt.NDArray[np.single] = np.ndarray( + (n_ctx if logits_all == True else n_batch, self._n_vocab), dtype=np.single + ) + + self._batch = self._stack.enter_context( + contextlib.closing( + internals.LlamaBatch( + n_tokens=self.n_batch, + embd=0, + n_seq_max=self.context_params.n_ctx, + verbose=self.verbose, + ) + ) + ) + + + + if self._ctx is None: + raise RuntimeError("Failed to create new context") + + def recreate_context( + self, + *, + n_ctx: int = 512, + n_batch: int = 512, + n_ubatch: int = 512, + n_threads: Optional[int] = None, + n_threads_batch: Optional[int] = None, + rope_scaling_type: Optional[ + int + ] = llama_cpp.LLAMA_ROPE_SCALING_TYPE_UNSPECIFIED, + pooling_type: int = llama_cpp.LLAMA_POOLING_TYPE_UNSPECIFIED, + rope_freq_base: float = 0.0, + rope_freq_scale: float = 0.0, + yarn_ext_factor: float = -1.0, + yarn_attn_factor: float = 1.0, + yarn_beta_fast: float = 32.0, + yarn_beta_slow: float = 1.0, + yarn_orig_ctx: int = 0, + logits_all: bool = False, + embedding: bool = False, + offload_kqv: bool = True, + flash_attn: bool = False, + # Sampling Params + no_perf: bool = False, + last_n_tokens_size: int = 64, + type_k: Optional[int] = None, + type_v: Optional[int] = None, + ) -> None: + """Free the existing context and create a new one with specified parameters. + + Args: + n_ctx: Text context size. If 0, value from model is used. + n_batch: Maximum batch size for llama_decode. + n_ubatch: Maximum physical batch size. + n_seq_max: Maximum number of sequences (distinct states for recurrent models). + n_threads: Number of threads to use for generation. + n_threads_batch: Number of threads to use for batch processing. + rope_scaling_type: RoPE scaling type from llama_rope_scaling_type enum. + pooling_type: Whether to pool embedding results by sequence id. + attention_type: Attention type to use for embeddings. + rope_freq_base: RoPE base frequency, 0 = from model. + rope_freq_scale: RoPE frequency scaling factor, 0 = from model. + yarn_ext_factor: YaRN extrapolation mix factor, negative = from model. + yarn_attn_factor: YaRN magnitude scaling factor. + yarn_beta_fast: YaRN low correction dim. + yarn_beta_slow: YaRN high correction dim. + yarn_orig_ctx: YaRN original context size. + defrag_thold: Defragment KV cache if holes/size > thold, < 0 disabled. + type_k: Data type for K cache. + type_v: Data type for V cache. + logits_all: Compute all logits in llama_decode (deprecated). + embeddings: Extract embeddings with logits. + offload_kqv: Offload KQV ops (including KV cache) to GPU. + flash_attn: Use flash attention. + no_perf: Disable performance timings. + last_n_tokens_size: Size of the last n tokens. + type_k: Data type for K cache. + type_v: Data type for V cache. + """ + + current_state = self.save_state() + + if self._ctx is not None: + self._ctx.close() + self._ctx = None + + # Free existing context if it exists + self._create_context( + n_ctx=n_ctx, + n_batch=n_batch, + n_ubatch=min(n_batch, n_ubatch), + n_threads=n_threads, + n_threads_batch=n_threads_batch, + rope_scaling_type=rope_scaling_type, + pooling_type=pooling_type, + rope_freq_base=rope_freq_base, + rope_freq_scale=rope_freq_scale, + yarn_ext_factor=yarn_ext_factor, + yarn_attn_factor=yarn_attn_factor, + yarn_beta_fast=yarn_beta_fast, + yarn_beta_slow=yarn_beta_slow, + yarn_orig_ctx=yarn_orig_ctx, + logits_all=logits_all, + embedding=embedding, + offload_kqv=offload_kqv, + flash_attn=flash_attn, + no_perf=no_perf, + last_n_tokens_size=last_n_tokens_size, + type_k=type_k, + type_v=type_v, + state=current_state, + ) + + # Reapply any LoRA adapter if it exists + if self._lora_adapter is not None: + llama_cpp.llama_set_adapter_lora(self._ctx, self._lora_adapter, self.lora_scale) + class LlamaState: def __init__( From 5fcd220071e4ce21d6ba794decf7077363723521 Mon Sep 17 00:00:00 2001 From: okaris Date: Mon, 23 Jun 2025 07:24:02 +0000 Subject: [PATCH 16/32] feat: add usage to streamin response --- llama_cpp/llama.py | 187 +++++++++++++++++++-------------- llama_cpp/llama_chat_format.py | 33 +++++- llama_cpp/llama_types.py | 2 +- 3 files changed, 140 insertions(+), 82 deletions(-) diff --git a/llama_cpp/llama.py b/llama_cpp/llama.py index fd52fce..1e57c20 100644 --- a/llama_cpp/llama.py +++ b/llama_cpp/llama.py @@ -1057,6 +1057,50 @@ def decode_batch(seq_sizes: List[int]): else: return output + def _create_chunk( + self, + completion_id: str, + created: int, + model_name: str, + text: str, + logprobs_or_none: Union[Optional[CompletionLogprobs], None], + index: int, + finish_reason: Union[str, None], + usage: Optional[Dict[str, Any]] = None, + ) -> CreateCompletionStreamResponse: + """Create chunks for streaming API, depending on whether usage is requested or not.""" + if usage is not None: + return { + "id": completion_id, + "object": "text_completion", + "created": created, + "model": model_name, + "choices": [ + { + "text": text, + "index": index, + "logprobs": logprobs_or_none, + "finish_reason": finish_reason, + } + ], + "usage": usage, + } + else: + return { + "id": completion_id, + "object": "text_completion", + "created": created, + "model": model_name, + "choices": [ + { + "text": text, + "index": index, + "logprobs": logprobs_or_none, + "finish_reason": finish_reason, + } + ], + } + def _create_completion( self, prompt: Union[str, List[int]], @@ -1383,24 +1427,20 @@ def logit_bias_processor( "top_logprobs": [top_logprob], } returned_tokens += 1 - yield { - "id": completion_id, - "object": "text_completion", - "created": created, - "model": model_name, - "choices": [ - { - "text": self.detokenize( - [token], - prev_tokens=prompt_tokens - + completion_tokens[:returned_tokens], - ).decode("utf-8", errors="ignore"), - "index": 0, - "logprobs": logprobs_or_none, - "finish_reason": None, - } - ], - } + yield self._create_chunk( + completion_id=completion_id, + created=created, + model_name=model_name, + text=self.detokenize( + [token], + prev_tokens=prompt_tokens + + completion_tokens[:returned_tokens], + ).decode("utf-8", errors="ignore"), + logprobs_or_none=logprobs_or_none, + index=0, + finish_reason=None, + usage=None, + ) else: while len(remaining_tokens) > 0: decode_success = False @@ -1429,20 +1469,16 @@ def logit_bias_processor( remaining_tokens = remaining_tokens[i:] returned_tokens += i - yield { - "id": completion_id, - "object": "text_completion", - "created": created, - "model": model_name, - "choices": [ - { - "text": ts, - "index": 0, - "logprobs": None, - "finish_reason": None, - } - ], - } + yield self._create_chunk( + completion_id=completion_id, + created=created, + model_name=model_name, + text=ts, + logprobs_or_none=None, + index=0, + finish_reason=None, + usage=None, + ) if len(completion_tokens) >= max_tokens: text = self.detokenize(completion_tokens, prev_tokens=prompt_tokens) @@ -1521,54 +1557,51 @@ def logit_bias_processor( if token_end_position == end - 1: break returned_tokens += 1 - yield { - "id": completion_id, - "object": "text_completion", - "created": created, - "model": model_name, - "choices": [ - { - "text": last_text[ - : len(last_text) - (token_end_position - end) - ].decode("utf-8", errors="ignore"), - "index": 0, - "logprobs": logprobs_or_none, - "finish_reason": None, - } - ], - } + yield self._create_chunk( + completion_id=completion_id, + created=created, + model_name=model_name, + text=last_text[ + : len(last_text) - (token_end_position - end) + ].decode("utf-8", errors="ignore"), + logprobs_or_none=logprobs_or_none, + index=0, + finish_reason=None, + usage=None, + ) break returned_tokens += 1 - yield { - "id": completion_id, - "object": "text_completion", - "created": created, - "model": model_name, - "choices": [ - { - "text": self.detokenize([token]).decode( - "utf-8", errors="ignore" - ), - "index": 0, - "logprobs": logprobs_or_none, - "finish_reason": None, - } - ], - } - yield { - "id": completion_id, - "object": "text_completion", - "created": created, - "model": model_name, - "choices": [ - { - "text": "", - "index": 0, - "logprobs": None, - "finish_reason": finish_reason, - } - ], + yield self._create_chunk( + completion_id=completion_id, + created=created, + model_name=model_name, + text=self.detokenize([token]).decode( + "utf-8", errors="ignore" + ), + logprobs_or_none=logprobs_or_none, + index=0, + finish_reason=None, + usage=None, + ) + + # Final streaming chunk with both finish_reason and usage + usage = { + "prompt_tokens": len(prompt_tokens), + "completion_tokens": returned_tokens, + "total_tokens": len(prompt_tokens) + returned_tokens, } + + yield self._create_chunk( + completion_id=completion_id, + created=created, + model_name=model_name, + text="", + logprobs_or_none=None, + index=0, + finish_reason=finish_reason, + usage=usage, + ) + if self.cache: if self.verbose: print("Llama._create_completion: cache save", file=sys.stderr) diff --git a/llama_cpp/llama_chat_format.py b/llama_cpp/llama_chat_format.py index 8cf4fe8..eba1970 100644 --- a/llama_cpp/llama_chat_format.py +++ b/llama_cpp/llama_chat_format.py @@ -347,6 +347,7 @@ def _convert_text_completion_chunks_to_chat( "finish_reason": chunk["choices"][0]["finish_reason"], } ], + "usage": chunk.get("usage") if "usage" in chunk else None, } @@ -431,7 +432,7 @@ def _stream_response_to_function_stream( created = chunk["created"] model = chunk["model"] tool_id = "call_" + "_0_" + tool_name + "_" + chunk["id"] - yield { + response = { "id": id_, "object": "chat.completion.chunk", "created": created, @@ -450,7 +451,11 @@ def _stream_response_to_function_stream( } ], } - yield { + if "usage" in chunk: + response["usage"] = chunk["usage"] + yield response + + response = { "id": "chat" + chunk["id"], "object": "chat.completion.chunk", "created": chunk["created"], @@ -484,10 +489,14 @@ def _stream_response_to_function_stream( } ], } + if "usage" in chunk: + response["usage"] = chunk["usage"] + yield response first = False continue + assert tool_id is not None - yield { + response = { "id": "chat" + chunk["id"], "object": "chat.completion.chunk", "created": chunk["created"], @@ -519,9 +528,12 @@ def _stream_response_to_function_stream( } ], } + if "usage" in chunk: + response["usage"] = chunk["usage"] + yield response if id_ is not None and created is not None and model is not None: - yield { + response = { "id": id_, "object": "chat.completion.chunk", "created": created, @@ -540,6 +552,9 @@ def _stream_response_to_function_stream( } ], } + if "usage" in chunk: + response["usage"] = chunk["usage"] + yield response return _stream_response_to_function_stream(chunks) @@ -2120,6 +2135,7 @@ def generate_streaming(tools, functions, function_call, prompt): }, } ], + usage=chunk["usage"] if "usage" in chunk else None, ) first = False if tools is not None: @@ -2160,6 +2176,7 @@ def generate_streaming(tools, functions, function_call, prompt): }, } ], + usage=chunk["usage"] if "usage" in chunk else None, ) # Yield tool_call/function_call stop message yield llama_types.CreateChatCompletionStreamResponse( @@ -2182,6 +2199,7 @@ def generate_streaming(tools, functions, function_call, prompt): }, } ], + usage=chunk["usage"] if "usage" in chunk else None, ) # If "auto" or no tool_choice/function_call elif isinstance(function_call, str) and function_call == "auto": @@ -2217,6 +2235,7 @@ def generate_streaming(tools, functions, function_call, prompt): "finish_reason": None, } ], + usage=chunk["usage"] if "usage" in chunk else None, ) else: prompt += f"{function_name}\n<|content|>" @@ -2262,6 +2281,7 @@ def generate_streaming(tools, functions, function_call, prompt): }, } ], + usage=chunk["usage"] if "usage" in chunk else None, ) # Generate content stops = [RECIPIENT_TOKEN, STOP_TOKEN] @@ -2299,6 +2319,7 @@ def generate_streaming(tools, functions, function_call, prompt): }, } ], + usage=chunk["usage"] if "usage" in chunk else None, ) is_end = False elif chunk["choices"][0]["text"] == "\n": @@ -2328,6 +2349,7 @@ def generate_streaming(tools, functions, function_call, prompt): }, } ], + usage=chunk["usage"] if "usage" in chunk else None, ) # Check whether the model wants to generate another turn if ( @@ -2360,6 +2382,7 @@ def generate_streaming(tools, functions, function_call, prompt): "finish_reason": "stop", } ], + usage=chunk["usage"] if "usage" in chunk else None, ) break else: @@ -2409,6 +2432,7 @@ def generate_streaming(tools, functions, function_call, prompt): }, } ], + usage=chunk["usage"] if "usage" in chunk else None, ) prompt += completion_text.strip() grammar = None @@ -2448,6 +2472,7 @@ def generate_streaming(tools, functions, function_call, prompt): }, } ], + usage=chunk["usage"] if "usage" in chunk else None, ) break diff --git a/llama_cpp/llama_types.py b/llama_cpp/llama_types.py index f647822..67772b8 100644 --- a/llama_cpp/llama_types.py +++ b/llama_cpp/llama_types.py @@ -154,13 +154,13 @@ class ChatCompletionStreamResponseChoice(TypedDict): finish_reason: Optional[Literal["stop", "length", "tool_calls", "function_call"]] logprobs: NotRequired[Optional[ChatCompletionLogprobs]] - class CreateChatCompletionStreamResponse(TypedDict): id: str model: str object: Literal["chat.completion.chunk"] created: int choices: List[ChatCompletionStreamResponseChoice] + usage: NotRequired[CompletionUsage] class ChatCompletionFunctions(TypedDict): From d214754bf095ea760c364ecbfbac3b83611d91d2 Mon Sep 17 00:00:00 2001 From: okaris Date: Tue, 24 Jun 2025 09:06:05 +0000 Subject: [PATCH 17/32] switch to llama.cpp fork and llama : expose C API to get layer device type --- .gitmodules | 2 +- llama_cpp/_internals.py | 15 ++++++++++++++- llama_cpp/llama.py | 7 +++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 7edf097..5cc3e08 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "vendor/llama.cpp"] path = vendor/llama.cpp - url = https://github.com/ggerganov/llama.cpp.git + url = http://github.com/inference-sh/llama.cpp diff --git a/llama_cpp/_internals.py b/llama_cpp/_internals.py index 343581d..2e2d23c 100644 --- a/llama_cpp/_internals.py +++ b/llama_cpp/_internals.py @@ -2,6 +2,7 @@ import os import ctypes +from enum import Enum from typing import ( Dict, @@ -24,7 +25,13 @@ # Python wrappers over llama.h structs - +class LlamaBackendDev(Enum): + # CPU device using system memory + CPU = 0 + # GPU device using dedicated memory + GPU = 1 + # accelerator devices intended to be used together with the CPU backend (e.g. BLAS or AMX) + ACCEL = 2 class LlamaModel: """Intermediate Python wrapper for a llama.cpp llama_model. @@ -88,6 +95,12 @@ def n_ctx_train(self) -> int: def n_embd(self) -> int: return llama_cpp.llama_n_embd(self.model) + + def n_layer(self) -> int: + return llama_cpp.llama_n_layer(self.model) + + def dev_layer(self, il: int) -> LlamaBackendDev: + return LlamaBackendDev(llama_cpp.llama_model_dev_layer(self.model, il)) def rope_freq_scale_train(self) -> float: return llama_cpp.llama_model_rope_freq_scale_train(self.model) diff --git a/llama_cpp/llama.py b/llama_cpp/llama.py index 1e57c20..92d8516 100644 --- a/llama_cpp/llama.py +++ b/llama_cpp/llama.py @@ -490,6 +490,13 @@ def ctx(self) -> llama_cpp.llama_context_p: @property def model(self) -> llama_cpp.llama_model_p: return self._model.model + + @property + def n_layer(self) -> int: + return self._model.n_layer() + + def dev_layer(self, il: int) -> internals.LlamaBackendDev: + return self._model.dev_layer(il) @property def _input_ids(self) -> npt.NDArray[np.intc]: From aaf1777d158878546d650763db94e4aa9609e003 Mon Sep 17 00:00:00 2001 From: okaris Date: Tue, 24 Jun 2025 09:42:42 +0000 Subject: [PATCH 18/32] chore: empty commit to trigger rebuild downstream From 00c1baecfdfaf465981ddb538a10e0fe867a4574 Mon Sep 17 00:00:00 2001 From: okaris Date: Tue, 24 Jun 2025 09:52:40 +0000 Subject: [PATCH 19/32] c definitions --- llama_cpp/_internals.py | 2 +- llama_cpp/llama_cpp.py | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/llama_cpp/_internals.py b/llama_cpp/_internals.py index 2e2d23c..1fcc43f 100644 --- a/llama_cpp/_internals.py +++ b/llama_cpp/_internals.py @@ -98,7 +98,7 @@ def n_embd(self) -> int: def n_layer(self) -> int: return llama_cpp.llama_n_layer(self.model) - + def dev_layer(self, il: int) -> LlamaBackendDev: return LlamaBackendDev(llama_cpp.llama_model_dev_layer(self.model, il)) diff --git a/llama_cpp/llama_cpp.py b/llama_cpp/llama_cpp.py index 63de3a9..6b655d0 100644 --- a/llama_cpp/llama_cpp.py +++ b/llama_cpp/llama_cpp.py @@ -1395,6 +1395,11 @@ def llama_model_n_embd(model: llama_model_p, /) -> int: def llama_model_n_layer(model: llama_model_p, /) -> int: ... +# LLAMA_API int32_t llama_model_dev_layer (const struct llama_model * model, int32_t il); +@ctypes_function("llama_model_dev_layer", [llama_model_p_ctypes, ctypes.c_int32], ctypes.c_int32) +def llama_model_dev_layer(model: llama_model_p, il: Union[ctypes.c_int32, int], /) -> int: + ... + # LLAMA_API int32_t llama_model_n_head (const struct llama_model * model); @ctypes_function("llama_model_n_head", [llama_model_p_ctypes], ctypes.c_int32) From 3000f7d12b7cee404cd6359b64f7a408e056bd30 Mon Sep 17 00:00:00 2001 From: okaris Date: Tue, 24 Jun 2025 10:09:45 +0000 Subject: [PATCH 20/32] chore: bump empty commit From 54691ca4379a5e345d5af2d27e6a78c3b6c3c31c Mon Sep 17 00:00:00 2001 From: okaris Date: Tue, 24 Jun 2025 10:38:18 +0000 Subject: [PATCH 21/32] change to inferencesh/llama.cpp --- vendor/llama.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/llama.cpp b/vendor/llama.cpp index 8733e0c..1db1d5b 160000 --- a/vendor/llama.cpp +++ b/vendor/llama.cpp @@ -1 +1 @@ -Subproject commit 8733e0cf6eefc7c7752297cc22d0836706f4222c +Subproject commit 1db1d5b1111718fe460222a9c5d80f74e62d2b2e From 1d23ae0069da15b5d8ee82738a2801330cd8ee52 Mon Sep 17 00:00:00 2001 From: okaris Date: Tue, 24 Jun 2025 11:09:28 +0000 Subject: [PATCH 22/32] migrate llava to mtmd --- CMakeLists.txt | 30 ++++-------- llama_cpp/llama_chat_format.py | 42 ++++++++--------- llama_cpp/{llava_cpp.py => mtmd_cpp.py} | 62 ++++++++++++------------- 3 files changed, 62 insertions(+), 72 deletions(-) rename llama_cpp/{llava_cpp.py => mtmd_cpp.py} (72%) diff --git a/CMakeLists.txt b/CMakeLists.txt index b9178e8..47073ea 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.21) project(llama_cpp) option(LLAMA_BUILD "Build llama.cpp shared library and install alongside python package" ON) -option(LLAVA_BUILD "Build llava shared library and install alongside python package" ON) +option(MTMD_BUILD "Build multimodal (mtmd) shared library and install alongside python package" ON) function(llama_cpp_python_install_target target) if(NOT TARGET ${target}) @@ -135,7 +135,7 @@ if (LLAMA_BUILD) ) endif() - if (LLAVA_BUILD) + if (MTMD_BUILD) if (LLAMA_CUBLAS OR LLAMA_CUDA) add_compile_definitions(GGML_USE_CUBLAS) add_compile_definitions(GGML_USE_CUDA) @@ -145,36 +145,26 @@ if (LLAMA_BUILD) add_compile_definitions(GGML_USE_METAL) endif() - # Building llava + # Building multimodal support using mtmd add_subdirectory(vendor/llama.cpp/tools/mtmd) - set_target_properties(llava_shared PROPERTIES OUTPUT_NAME "llava") if (WIN32) - set_target_properties(llava_shared PROPERTIES CUDA_ARCHITECTURES OFF) + set_target_properties(mtmd PROPERTIES CUDA_ARCHITECTURES OFF) endif() - llama_cpp_python_install_target(llava_shared) + llama_cpp_python_install_target(mtmd) if (WIN32) install( - FILES $ + FILES $ DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/llama_cpp/lib ) install( - FILES $ + FILES $ DESTINATION ${SKBUILD_PLATLIB_DIR}/llama_cpp/lib ) endif() - # Fix for llava build: Add include directory for llama.h - # Move these commands after the add_subdirectory call - target_include_directories(llava PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/vendor/llama.cpp/include) - target_include_directories(llava PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/vendor/llama.cpp/ggml/include) - - if (BUILD_SHARED_LIBS) - target_include_directories(llava_shared PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/vendor/llama.cpp/include) - target_include_directories(llava_shared PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/vendor/llama.cpp/ggml/include) - endif() - - target_include_directories(llama-llava-cli PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/vendor/llama.cpp/include) - target_include_directories(llama-minicpmv-cli PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/vendor/llama.cpp/include) + # Add include directories for mtmd + target_include_directories(mtmd PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/vendor/llama.cpp/include) + target_include_directories(mtmd PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/vendor/llama.cpp/ggml/include) endif() endif() diff --git a/llama_cpp/llama_chat_format.py b/llama_cpp/llama_chat_format.py index eba1970..9e54652 100644 --- a/llama_cpp/llama_chat_format.py +++ b/llama_cpp/llama_chat_format.py @@ -2714,15 +2714,15 @@ class Llava15ChatHandler: ) def __init__(self, clip_model_path: str, verbose: bool = True): - import llama_cpp.llava_cpp as llava_cpp + import llama_cpp.mtmd_cpp as mtmd_cpp self.clip_model_path = clip_model_path self.verbose = verbose - self._llava_cpp = llava_cpp # TODO: Fix + self._mtmd_cpp = mtmd_cpp # TODO: Fix self._exit_stack = ExitStack() self._last_image_embed: Optional[ - llava_cpp.CtypesPointer[llava_cpp.llava_image_embed] + mtmd_cpp.CtypesPointer[mtmd_cpp.mtmd_cpp_image_embed] ] = None self._last_image_hash: Optional[int] = None @@ -2730,7 +2730,7 @@ def __init__(self, clip_model_path: str, verbose: bool = True): raise ValueError(f"Clip model path does not exist: {clip_model_path}") with suppress_stdout_stderr(disable=self.verbose): - clip_ctx = self._llava_cpp.clip_model_load(self.clip_model_path.encode(), 0) + clip_ctx = self._mtmd_cpp.clip_model_load(self.clip_model_path.encode(), 0) if clip_ctx is None: raise ValueError(f"Failed to load clip model: {clip_model_path}") @@ -2739,14 +2739,14 @@ def __init__(self, clip_model_path: str, verbose: bool = True): def clip_free(): with suppress_stdout_stderr(disable=self.verbose): - self._llava_cpp.clip_free(self.clip_ctx) + self._mtmd_cpp.clip_free(self.clip_ctx) self._exit_stack.callback(clip_free) def last_image_embed_free(): with suppress_stdout_stderr(disable=self.verbose): if self._last_image_embed is not None: - self._llava_cpp.llava_image_embed_free(self._last_image_embed) + self._mtmd_cpp.mtmd_cpp_image_embed_free(self._last_image_embed) self._last_image_embed = None self._exit_stack.callback(last_image_embed_free) @@ -2764,10 +2764,10 @@ def _embed_image_bytes(self, image_bytes: bytes, n_threads_batch: int = 1): with suppress_stdout_stderr(disable=self.verbose): # Free the previous image embed if self._last_image_embed is not None: - self._llava_cpp.llava_image_embed_free(self._last_image_embed) + self._mtmd_cpp.mtmd_cpp_image_embed_free(self._last_image_embed) self._last_image_embed = None self._last_image_hash = None - embed = self._llava_cpp.llava_image_embed_make_with_bytes( + embed = self._mtmd_cpp.mtmd_cpp_image_embed_make_with_bytes( self.clip_ctx, n_threads_batch, (ctypes.c_uint8 * len(image_bytes)).from_buffer( @@ -2955,7 +2955,7 @@ def eval_image(self, llama: llama.Llama, image_url: str): n_past = ctypes.c_int(llama.n_tokens) n_past_p = ctypes.pointer(n_past) with suppress_stdout_stderr(disable=self.verbose): - self._llava_cpp.llava_eval_image_embed( + self._mtmd_cpp.mtmd_cpp_eval_image_embed( llama.ctx, embed, llama.n_batch, @@ -3483,30 +3483,30 @@ def eval_image(self, llama: llama.Llama, image_url: str): ) img_bytes = self.load_image(image_url) - img_u8_p = self._llava_cpp.clip_image_u8_init() - if not self._llava_cpp.clip_image_load_from_bytes( + img_u8_p = self._mtmd_cpp.clip_image_u8_init() + if not self._mtmd_cpp.clip_image_load_from_bytes( ctypes.create_string_buffer(img_bytes, len(img_bytes)), ctypes.c_size_t(len(img_bytes)), img_u8_p, ): - self._llava_cpp.clip_image_u8_free(img_u8_p) + self._mtmd_cpp.clip_image_u8_free(img_u8_p) raise ValueError("Failed to load image.") - img_f32_p = self._llava_cpp.clip_image_f32_batch_init() - if not self._llava_cpp.clip_image_preprocess(self.clip_ctx, img_u8_p, img_f32_p): - self._llava_cpp.clip_image_f32_batch_free(img_f32_p) - self._llava_cpp.clip_image_u8_free(img_u8_p) + img_f32_p = self._mtmd_cpp.clip_image_f32_batch_init() + if not self._mtmd_cpp.clip_image_preprocess(self.clip_ctx, img_u8_p, img_f32_p): + self._mtmd_cpp.clip_image_f32_batch_free(img_f32_p) + self._mtmd_cpp.clip_image_u8_free(img_u8_p) raise ValueError("Failed to preprocess image.") n_embd = llama_cpp.llama_model_n_embd(llama._model.model) embed = (ctypes.c_float * (n_tokens * n_embd))() - if not self._llava_cpp.clip_image_batch_encode(self.clip_ctx, llama.n_threads, img_f32_p, embed): - self._llava_cpp.clip_image_f32_batch_free(img_f32_p) - self._llava_cpp.clip_image_u8_free(img_u8_p) + if not self._mtmd_cpp.clip_image_batch_encode(self.clip_ctx, llama.n_threads, img_f32_p, embed): + self._mtmd_cpp.clip_image_f32_batch_free(img_f32_p) + self._mtmd_cpp.clip_image_u8_free(img_u8_p) raise ValueError("Failed to encode image.") - self._llava_cpp.clip_image_f32_batch_free(img_f32_p) - self._llava_cpp.clip_image_u8_free(img_u8_p) + self._mtmd_cpp.clip_image_f32_batch_free(img_f32_p) + self._mtmd_cpp.clip_image_u8_free(img_u8_p) llama_cpp.llama_set_causal_attn(llama.ctx, False) seq_id_0 = (ctypes.c_int32 * 1)() diff --git a/llama_cpp/llava_cpp.py b/llama_cpp/mtmd_cpp.py similarity index 72% rename from llama_cpp/llava_cpp.py rename to llama_cpp/mtmd_cpp.py index 0ce0b3f..06e08ae 100644 --- a/llama_cpp/llava_cpp.py +++ b/llama_cpp/mtmd_cpp.py @@ -35,18 +35,18 @@ # Specify the base name of the shared library to load -_libllava_base_name = "llava" -_libllava_override_path = os.environ.get("LLAVA_CPP_LIB") -_libllava_base_path = pathlib.Path(os.path.abspath(os.path.dirname(__file__))) / "lib" if _libllava_override_path is None else pathlib.Path() +_libmtmd_base_name = "mtmd" +_libmtmd_override_path = os.environ.get("mtmd_CPP_LIB") +_libmtmd_base_path = pathlib.Path(os.path.abspath(os.path.dirname(__file__))) / "lib" if _libmtmd_override_path is None else pathlib.Path() # Load the library -_libllava = load_shared_library(_libllava_base_name, _libllava_base_path) +_libmtmd = load_shared_library(_libmtmd_base_name, _libmtmd_base_path) -ctypes_function = ctypes_function_for_shared_library(_libllava) +ctypes_function = ctypes_function_for_shared_library(_libmtmd) ################################################ -# llava.h +# mtmd.h ################################################ # struct clip_ctx; @@ -54,82 +54,82 @@ clip_ctx_p_ctypes = c_void_p -# struct llava_image_embed { +# struct mtmd_image_embed { # float * embed; # int n_image_pos; # }; -class llava_image_embed(Structure): +class mtmd_image_embed(Structure): _fields_ = [ ("embed", POINTER(c_float)), ("n_image_pos", c_int), ] -# /** sanity check for clip <-> llava embed size match */ -# LLAVA_API bool llava_validate_embed_size(const llama_context * ctx_llama, const clip_ctx * ctx_clip); +# /** sanity check for clip <-> mtmd embed size match */ +# mtmd_API bool mtmd_validate_embed_size(const llama_context * ctx_llama, const clip_ctx * ctx_clip); @ctypes_function( - "llava_validate_embed_size", + "mtmd_validate_embed_size", [llama_cpp.llama_context_p_ctypes, clip_ctx_p_ctypes], c_bool, ) -def llava_validate_embed_size( +def mtmd_validate_embed_size( ctx_llama: llama_cpp.llama_context_p, ctx_clip: clip_ctx_p, / ) -> bool: ... # /** build an image embed from image file bytes */ -# LLAVA_API struct llava_image_embed * llava_image_embed_make_with_bytes(struct clip_ctx * ctx_clip, int n_threads, const unsigned char * image_bytes, int image_bytes_length); +# mtmd_API struct mtmd_image_embed * mtmd_image_embed_make_with_bytes(struct clip_ctx * ctx_clip, int n_threads, const unsigned char * image_bytes, int image_bytes_length); @ctypes_function( - "llava_image_embed_make_with_bytes", + "mtmd_image_embed_make_with_bytes", [clip_ctx_p_ctypes, c_int, POINTER(c_uint8), c_int], - POINTER(llava_image_embed), + POINTER(mtmd_image_embed), ) -def llava_image_embed_make_with_bytes( +def mtmd_image_embed_make_with_bytes( ctx_clip: clip_ctx_p, n_threads: Union[c_int, int], image_bytes: CtypesArray[c_uint8], image_bytes_length: Union[c_int, int], /, -) -> "_Pointer[llava_image_embed]": +) -> "_Pointer[mtmd_image_embed]": ... # /** build an image embed from a path to an image filename */ -# LLAVA_API struct llava_image_embed * llava_image_embed_make_with_filename(struct clip_ctx * ctx_clip, int n_threads, const char * image_path); +# mtmd_API struct mtmd_image_embed * mtmd_image_embed_make_with_filename(struct clip_ctx * ctx_clip, int n_threads, const char * image_path); @ctypes_function( - "llava_image_embed_make_with_filename", + "mtmd_image_embed_make_with_filename", [clip_ctx_p_ctypes, c_int, c_char_p], - POINTER(llava_image_embed), + POINTER(mtmd_image_embed), ) -def llava_image_embed_make_with_filename( +def mtmd_image_embed_make_with_filename( ctx_clip: clip_ctx_p, n_threads: Union[c_int, int], image_path: bytes, / -) -> "_Pointer[llava_image_embed]": +) -> "_Pointer[mtmd_image_embed]": ... -# LLAVA_API void llava_image_embed_free(struct llava_image_embed * embed); -# /** free an embedding made with llava_image_embed_make_* */ -@ctypes_function("llava_image_embed_free", [POINTER(llava_image_embed)], None) -def llava_image_embed_free(embed: "_Pointer[llava_image_embed]", /): +# mtmd_API void mtmd_image_embed_free(struct mtmd_image_embed * embed); +# /** free an embedding made with mtmd_image_embed_make_* */ +@ctypes_function("mtmd_image_embed_free", [POINTER(mtmd_image_embed)], None) +def mtmd_image_embed_free(embed: "_Pointer[mtmd_image_embed]", /): ... # /** write the image represented by embed into the llama context with batch size n_batch, starting at context pos n_past. on completion, n_past points to the next position in the context after the image embed. */ -# LLAVA_API bool llava_eval_image_embed(struct llama_context * ctx_llama, const struct llava_image_embed * embed, int n_batch, int * n_past); +# mtmd_API bool mtmd_eval_image_embed(struct llama_context * ctx_llama, const struct mtmd_image_embed * embed, int n_batch, int * n_past); @ctypes_function( - "llava_eval_image_embed", + "mtmd_eval_image_embed", [ llama_cpp.llama_context_p_ctypes, - POINTER(llava_image_embed), + POINTER(mtmd_image_embed), c_int, POINTER(c_int), ], c_bool, ) -def llava_eval_image_embed( +def mtmd_eval_image_embed( ctx_llama: llama_cpp.llama_context_p, - embed: "_Pointer[llava_image_embed]", + embed: "_Pointer[mtmd_image_embed]", n_batch: Union[c_int, int], n_past: "_Pointer[c_int]", /, From 525255a45f2687bb89aec9294f6f7ba5a6eb92c4 Mon Sep 17 00:00:00 2001 From: okaris Date: Tue, 24 Jun 2025 20:57:57 +0000 Subject: [PATCH 23/32] port kv_cache to new memory --- examples/notebooks/Batching.ipynb | 2 +- llama_cpp/_ctypes_extensions.py | 19 +- llama_cpp/_internals.py | 20 +- llama_cpp/llama.py | 8 +- llama_cpp/llama_chat_format.py | 2 +- llama_cpp/llama_cpp.py | 354 ++++-------------------------- vendor/llama.cpp | 2 +- 7 files changed, 72 insertions(+), 335 deletions(-) diff --git a/examples/notebooks/Batching.ipynb b/examples/notebooks/Batching.ipynb index be7fe9b..b1992e9 100644 --- a/examples/notebooks/Batching.ipynb +++ b/examples/notebooks/Batching.ipynb @@ -230,7 +230,7 @@ "outputs": [], "source": [ "for i in range(n_parallel):\n", - " llama_cpp.llama_kv_cache_seq_cp(ctx, 0, i, 0, batch.n_tokens)" + " llama_cpp.llama_kv_self_seq_cp(ctx, 0, i, 0, batch.n_tokens)" ] }, { diff --git a/llama_cpp/_ctypes_extensions.py b/llama_cpp/_ctypes_extensions.py index e88ed38..cf56aae 100644 --- a/llama_cpp/_ctypes_extensions.py +++ b/llama_cpp/_ctypes_extensions.py @@ -5,6 +5,8 @@ import ctypes import functools import pathlib +import logging +import traceback from typing import ( Any, @@ -18,6 +20,9 @@ ) from typing_extensions import TypeAlias +# Configure logging +logging.basicConfig(level=logging.INFO) +logger = logging.getLogger("llama_cpp.binding") # Load the library def load_shared_library(lib_base_name: str, base_path: pathlib.Path): @@ -110,11 +115,21 @@ def ctypes_function( ): def decorator(f: F) -> F: if enabled: + print(f"Setting up binding for C function: {name}") # Print when binding is created func = getattr(lib, name) func.argtypes = argtypes func.restype = restype - functools.wraps(f)(func) - return func + + @functools.wraps(f) + def wrapper(*args, **kwargs): + print(f">>> Calling {name} with args: {args}") # Print right before C call + sys.stdout.flush() # Force flush to ensure we see the output + result = func(*args, **kwargs) + print(f"<<< {name} returned successfully") # Print after successful return + sys.stdout.flush() + return result + + return wrapper else: return f diff --git a/llama_cpp/_internals.py b/llama_cpp/_internals.py index 1fcc43f..e0b8548 100644 --- a/llama_cpp/_internals.py +++ b/llama_cpp/_internals.py @@ -289,20 +289,20 @@ def n_ctx(self) -> int: def pooling_type(self) -> int: return llama_cpp.llama_pooling_type(self.ctx) - def kv_cache_clear(self): - llama_cpp.llama_kv_cache_clear(self.ctx) + def kv_self_clear(self): + llama_cpp.llama_kv_self_clear(self.ctx) - def kv_cache_seq_rm(self, seq_id: int, p0: int, p1: int): - llama_cpp.llama_kv_cache_seq_rm(self.ctx, seq_id, p0, p1) + def kv_self_seq_rm(self, seq_id: int, p0: int, p1: int): + llama_cpp.llama_kv_self_seq_rm(self.ctx, seq_id, p0, p1) - def kv_cache_seq_cp(self, seq_id_src: int, seq_id_dst: int, p0: int, p1: int): - llama_cpp.llama_kv_cache_seq_cp(self.ctx, seq_id_src, seq_id_dst, p0, p1) + def kv_self_seq_cp(self, seq_id_src: int, seq_id_dst: int, p0: int, p1: int): + llama_cpp.llama_kv_self_seq_cp(self.ctx, seq_id_src, seq_id_dst, p0, p1) - def kv_cache_seq_keep(self, seq_id: int): - llama_cpp.llama_kv_cache_seq_keep(self.ctx, seq_id) + def kv_self_seq_keep(self, seq_id: int): + llama_cpp.llama_kv_self_seq_keep(self.ctx, seq_id) - def kv_cache_seq_shift(self, seq_id: int, p0: int, p1: int, shift: int): - llama_cpp.llama_kv_cache_seq_add(self.ctx, seq_id, p0, p1, shift) + def kv_self_seq_shift(self, seq_id: int, p0: int, p1: int, shift: int): + llama_cpp.llama_kv_self_seq_add(self.ctx, seq_id, p0, p1, shift) def get_state_size(self) -> int: return llama_cpp.llama_get_state_size(self.ctx) diff --git a/llama_cpp/llama.py b/llama_cpp/llama.py index 92d8516..cff875d 100644 --- a/llama_cpp/llama.py +++ b/llama_cpp/llama.py @@ -581,7 +581,7 @@ def eval(self, tokens: Sequence[int]): Args: tokens: The list of tokens to evaluate. """ - self._ctx.kv_cache_seq_rm(-1, self.n_tokens, -1) + self._ctx.kv_self_seq_rm(-1, self.n_tokens, -1) for i in range(0, len(tokens), self.n_batch): batch = tokens[i : min(len(tokens), i + self.n_batch)] n_past = self.n_tokens @@ -889,7 +889,7 @@ def generate( if sample_idx < self.n_tokens and token != self._input_ids[sample_idx]: self.n_tokens = sample_idx - self._ctx.kv_cache_seq_rm(-1, self.n_tokens, -1) + self._ctx.kv_self_seq_rm(-1, self.n_tokens, -1) break if self.draft_model is not None: @@ -985,7 +985,7 @@ def embed( data: Union[List[List[float]], List[List[List[float]]]] = [] def decode_batch(seq_sizes: List[int]): - llama_cpp.llama_kv_cache_clear(self._ctx.ctx) + llama_cpp.llama_kv_self_clear(self._ctx.ctx) self._ctx.decode(self._batch) self._batch.reset() @@ -1056,7 +1056,7 @@ def decode_batch(seq_sizes: List[int]): output = data[0] if isinstance(input, str) else data - llama_cpp.llama_kv_cache_clear(self._ctx.ctx) + llama_cpp.llama_kv_self_clear(self._ctx.ctx) self.reset() if return_count: diff --git a/llama_cpp/llama_chat_format.py b/llama_cpp/llama_chat_format.py index 9e54652..040e0da 100644 --- a/llama_cpp/llama_chat_format.py +++ b/llama_cpp/llama_chat_format.py @@ -2847,7 +2847,7 @@ def __call__( # Evaluate prompt llama.reset() - llama._ctx.kv_cache_clear() + llama._ctx.kv_self_clear() for type_, value in split_text: if type_ == "text": tokens = llama.tokenize( diff --git a/llama_cpp/llama_cpp.py b/llama_cpp/llama_cpp.py index 6b655d0..ecadff2 100644 --- a/llama_cpp/llama_cpp.py +++ b/llama_cpp/llama_cpp.py @@ -782,7 +782,8 @@ class llama_model_params(ctypes.Structure): # void * abort_callback_data; # }; class llama_context_params(ctypes.Structure): - """Parameters for llama_context + """Parameters for llama_context. NOTE: changing the default values of parameters marked as [EXPERIMENTAL] + may cause crashes or incorrect results in certain configurations. Attributes: n_ctx (int): text context, 0 = from model @@ -792,7 +793,7 @@ class llama_context_params(ctypes.Structure): n_threads (int): number of threads to use for generation n_threads_batch (int): number of threads to use for batch processing rope_scaling_type (int): RoPE scaling type, from `enum llama_rope_scaling_type` - pooling_type (int): whether to pool (sum) embedding results by sequence id (ignored if no pooling layer) + pooling_type (int): whether to pool (sum) embedding results by sequence id attention_type (int): attention type to use for embeddings rope_freq_base (float): RoPE base frequency, 0 = from model rope_freq_scale (float): RoPE frequency scaling factor, 0 = from model @@ -801,18 +802,19 @@ class llama_context_params(ctypes.Structure): yarn_beta_fast (float): YaRN low correction dim yarn_beta_slow (float): YaRN high correction dim yarn_orig_ctx (int): YaRN original context size - defrag_thold (float): defragment the KV cache if holes/size > thold, < 0 disabled (default) + defrag_thold (float): defragment the KV cache if holes/size > thold, <= 0 disabled (default) cb_eval (ggml_backend_sched_eval_callback): callback for scheduling eval - cb_eval_user_data (ctypes.ctypes.c_void_p): user data for cb_eval - type_k (int): data type for K cache - type_v (int): data type for V cache - logits_all (bool): the llama_decode() call computes all logits, not just the last one (DEPRECATED - set llama_batch.logits instead) - embeddings (bool): if true, extract embeddings (together with logits) - offload_kqv (bool): whether to offload the KQV ops (including the KV cache) to GPU - flash_attn (bool): whether to use flash attention - no_perf (bool): whether to measure performance timings + cb_eval_user_data (ctypes.c_void_p): user data for cb_eval + type_k (int): data type for K cache [EXPERIMENTAL] + type_v (int): data type for V cache [EXPERIMENTAL] abort_callback (ggml_abort_callback): abort callback if it returns true, execution of llama_decode() will be aborted - abort_callback_data (ctypes.ctypes.c_void_p): data for abort_callback + abort_callback_data (ctypes.c_void_p): data for abort_callback + embeddings (bool): if true, extract embeddings (together with logits) + offload_kqv (bool): offload the KQV ops (including the KV cache) to GPU + flash_attn (bool): use flash attention [EXPERIMENTAL] + no_perf (bool): measure performance timings + op_offload (bool): offload host tensor operations to device + swa_full (bool): use full-size SWA cache """ if TYPE_CHECKING: @@ -837,13 +839,14 @@ class llama_context_params(ctypes.Structure): cb_eval_user_data: ctypes.c_void_p type_k: int type_v: int - logits_all: bool + abort_callback: Callable[[ctypes.c_void_p], bool] + abort_callback_data: ctypes.c_void_p embeddings: bool offload_kqv: bool flash_attn: bool no_perf: bool - abort_callback: Callable[[ctypes.c_void_p], bool] - abort_callback_data: ctypes.c_void_p + op_offload: bool + swa_full: bool _fields_ = [ ("n_ctx", ctypes.c_uint32), @@ -867,13 +870,15 @@ class llama_context_params(ctypes.Structure): ("cb_eval_user_data", ctypes.c_void_p), ("type_k", ctypes.c_int), ("type_v", ctypes.c_int), - ("logits_all", ctypes.c_bool), + ("abort_callback", ggml_abort_callback), + ("abort_callback_data", ctypes.c_void_p), + # Keep the booleans together and at the end of the struct to avoid misalignment during copy-by-value ("embeddings", ctypes.c_bool), ("offload_kqv", ctypes.c_bool), ("flash_attn", ctypes.c_bool), ("no_perf", ctypes.c_bool), - ("abort_callback", ggml_abort_callback), - ("abort_callback_data", ctypes.c_void_p), + ("op_offload", ctypes.c_bool), + ("swa_full", ctypes.c_bool), ] @@ -924,6 +929,7 @@ class llama_model_quantize_params(ctypes.Structure): imatrix (ctypes.c_void_p): pointer to importance matrix data kv_overrides (ctypes.c_void_p): pointer to vector containing overrides tensor_types (ctypes.c_void_p): pointer to vector containing tensor types + prune_layers (ctypes.c_void_p): pointer to vector containing layer indices to prune """ if TYPE_CHECKING: @@ -939,6 +945,7 @@ class llama_model_quantize_params(ctypes.Structure): imatrix: ctypes.c_void_p kv_overrides: ctypes.c_void_p tensor_types: ctypes.c_void_p + prune_layers: ctypes.c_void_p _fields_ = [ ("nthread", ctypes.c_int32), @@ -953,6 +960,7 @@ class llama_model_quantize_params(ctypes.Structure): ("imatrix", ctypes.c_void_p), ("kv_overrides", ctypes.c_void_p), ("tensor_types", ctypes.c_void_p), + ("prune_layers", ctypes.c_void_p), ] @@ -1742,120 +1750,6 @@ def llama_apply_adapter_cvec( ... -# // -# // KV cache -# // - - -# // Information associated with an individual cell in the KV cache view. -# struct llama_kv_cache_view_cell { -# // The position for this cell. Takes KV cache shifts into account. -# // May be negative if the cell is not populated. -# llama_pos pos; -# }; -class llama_kv_cache_view_cell(ctypes.Structure): - """Information associated with an individual cell in the KV cache view. - - Attributes: - pos (llama_pos): The position for this cell. Takes KV cache shifts into account. - May be negative if the cell is not populated.""" - - if TYPE_CHECKING: - pos: llama_pos - - _fields_ = [("pos", llama_pos)] - - -# // An updateable view of the KV cache. -# struct llama_kv_cache_view { -# // Number of KV cache cells. This will be the same as the context size. -# int32_t n_cells; - -# // Maximum number of sequences that can exist in a cell. It's not an error -# // if there are more sequences in a cell than this value, however they will -# // not be visible in the view cells_sequences. -# int32_t n_seq_max; - -# // Number of tokens in the cache. For example, if there are two populated -# // cells, the first with 1 sequence id in it and the second with 2 sequence -# // ids then you'll have 3 tokens. -# int32_t token_count; - -# // Number of populated cache cells. -# int32_t used_cells; - -# // Maximum contiguous empty slots in the cache. -# int32_t max_contiguous; - -# // Index to the start of the max_contiguous slot range. Can be negative -# // when cache is full. -# int32_t max_contiguous_idx; - -# // Information for an individual cell. -# struct llama_kv_cache_view_cell * cells; - - -# // The sequences for each cell. There will be n_seq_max items per cell. -# llama_seq_id * cells_sequences; -# }; -class llama_kv_cache_view(ctypes.Structure): - if TYPE_CHECKING: - n_cells: int - n_max_seq: int - token_count: int - used_cells: int - max_contiguous: int - max_contiguous_idx: int - cells: CtypesArray[llama_kv_cache_view_cell] - cells_sequences: CtypesArray[llama_seq_id] - - _fields_ = [ - ("n_cells", ctypes.c_int32), - ("n_max_seq", ctypes.c_int32), - ("token_count", ctypes.c_int32), - ("used_cells", ctypes.c_int32), - ("max_contiguous", ctypes.c_int32), - ("max_contiguous_idx", ctypes.c_int32), - ("cells", ctypes.POINTER(llama_kv_cache_view_cell)), - ("cells_sequences", ctypes.POINTER(llama_seq_id)), - ] - - -llama_kv_cache_view_p = ctypes.POINTER(llama_kv_cache_view) - - -# // Create an empty KV cache view. (use only for debugging purposes) -# LLAMA_API struct llama_kv_cache_view llama_kv_cache_view_init(const struct llama_context * ctx, int32_t n_seq_max); -@ctypes_function( - "llama_kv_cache_view_init", - [llama_context_p_ctypes, ctypes.c_int32], - llama_kv_cache_view, -) -def llama_kv_cache_view_init( - ctx: llama_context_p, n_seq_max: Union[ctypes.c_int32, int], / -) -> llama_kv_cache_view: - """Create an empty KV cache view. (use only for debugging purposes)""" - ... - - -# // Free a KV cache view. (use only for debugging purposes) -# LLAMA_API void llama_kv_cache_view_free(struct llama_kv_cache_view * view); -@ctypes_function("llama_kv_cache_view_free", [llama_kv_cache_view_p], None) -def llama_kv_cache_view_free(view: "ctypes.pointer[llama_kv_cache_view]", /): # type: ignore - """Free a KV cache view. (use only for debugging purposes)""" - ... - - -# // Update the KV cache view structure with the current state of the KV cache. (use only for debugging purposes) -# LLAMA_API void llama_kv_cache_view_update(const struct llama_context * ctx, struct llama_kv_cache_view * view); -@ctypes_function( - "llama_kv_cache_view_update", [llama_context_p_ctypes, llama_kv_cache_view_p], None -) -def llama_kv_cache_view_update(ctx: llama_context_p, view: CtypesPointerOrRef[llama_kv_cache_view], /): # type: ignore - """Update the KV cache view structure with the current state of the KV cache. (use only for debugging purposes)""" - ... - - # // Returns the number of tokens in the KV cache (slow, use only for debug) # // If a KV cell has multiple sequences assigned to it, it will be counted multiple times # LLAMA_API int32_t llama_kv_self_n_tokens(const struct llama_context * ctx); @@ -1869,17 +1763,6 @@ def llama_kv_self_n_tokens(ctx: llama_context_p, /) -> int: ... -# DEPRECATED(LLAMA_API int32_t llama_get_kv_cache_token_count(const struct llama_context * ctx), -# "use llama_kv_self_n_tokens instead"); -@ctypes_function( - "llama_get_kv_cache_token_count", [llama_context_p_ctypes], ctypes.c_int32 -) -def llama_get_kv_cache_token_count(ctx: llama_context_p, /) -> int: - """Returns the number of tokens in the KV cache (slow, use only for debug) - If a KV cell has multiple sequences assigned to it, it will be counted multiple times - """ - ... - # // Returns the number of used KV cells (i.e. have at least one sequence assigned to them) # LLAMA_API int32_t llama_kv_self_used_cells(const struct llama_context * ctx); @@ -1891,16 +1774,6 @@ def llama_kv_self_used_cells(ctx: llama_context_p, /) -> int: ... -# DEPRECATED(LLAMA_API int32_t llama_get_kv_cache_used_cells(const struct llama_context * ctx), -# "use llama_kv_self_used_cells instead"); -@ctypes_function( - "llama_get_kv_cache_used_cells", [llama_context_p_ctypes], ctypes.c_int32 -) -def llama_get_kv_cache_used_cells(ctx: llama_context_p, /) -> int: - """Returns the number of used KV cells (i.e. have at least one sequence assigned to them)""" - ... - - # // Clear the KV cache - both cell info is erased and KV data is zeroed # LLAMA_API void llama_kv_self_clear( # struct llama_context * ctx); @@ -1911,11 +1784,7 @@ def llama_kv_self_clear(ctx: llama_context_p, /): """Clear the KV cache - both cell info is erased and KV data is zeroed""" ... -# NOTE: Deprecated -@ctypes_function("llama_kv_self_clear", [llama_context_p_ctypes], None) -def llama_kv_cache_clear(ctx: llama_context_p, /): - """Clear the KV cache""" - ... + # // Removes all tokens that belong to the specified sequence and have positions in [p0, p1) @@ -1923,13 +1792,13 @@ def llama_kv_cache_clear(ctx: llama_context_p, /): # // seq_id < 0 : match any sequence # // p0 < 0 : [0, p1] # // p1 < 0 : [p0, inf) -# LLAMA_API bool llama_kv_cache_seq_rm( +# LLAMA_API bool llama_kv_self_seq_rm( # struct llama_context * ctx, # llama_seq_id seq_id, # llama_pos p0, # llama_pos p1); @ctypes_function( - "llama_kv_cache_seq_rm", + "llama_kv_self_seq_rm", [ llama_context_p_ctypes, llama_seq_id, @@ -1938,7 +1807,7 @@ def llama_kv_cache_clear(ctx: llama_context_p, /): ], ctypes.c_bool, ) -def llama_kv_cache_seq_rm( +def llama_kv_self_seq_rm( ctx: llama_context_p, seq_id: Union[llama_seq_id, int], p0: Union[llama_pos, int], @@ -1991,33 +1860,6 @@ def llama_kv_self_seq_cp( ... -# NOTE: Deprecated -@ctypes_function( - "llama_kv_self_seq_cp", - [ - llama_context_p_ctypes, - llama_seq_id, - llama_seq_id, - llama_pos, - llama_pos, - ], - None, -) -def llama_kv_cache_seq_cp( - ctx: llama_context_p, - seq_id_src: Union[llama_seq_id, int], - seq_id_dst: Union[llama_seq_id, int], - p0: Union[llama_pos, int], - p1: Union[llama_pos, int], - /, -): - """Copy all tokens that belong to the specified sequence to another sequence - Note that this does not allocate extra KV cache memory - it simply assigns the tokens to the new sequence - p0 < 0 : [0, p1] - p1 < 0 : [p0, inf)""" - ... - - # // Removes all tokens that do not belong to the specified sequence # LLAMA_API void llama_kv_self_seq_keep( # struct llama_context * ctx, @@ -2030,23 +1872,14 @@ def llama_kv_self_seq_keep(ctx: llama_context_p, seq_id: Union[llama_seq_id, int ... -# NOTE: Deprecated -@ctypes_function( - "llama_kv_self_seq_keep", [llama_context_p_ctypes, llama_seq_id], None -) -def llama_kv_cache_seq_keep(ctx: llama_context_p, seq_id: Union[llama_seq_id, int], /): - """Removes all tokens that do not belong to the specified sequence""" - ... - - # // Adds relative position "delta" to all tokens that belong to the specified sequence and have positions in [p0, p1) # // If the KV cache is RoPEd, the KV data is updated accordingly: # // - lazily on next llama_decode() -# // - explicitly with llama_kv_cache_update() +# // - explicitly with llama_kv_self_update() # // p0 < 0 : [0, p1] # // p1 < 0 : [p0, inf) -# LLAMA_API void llama_kv_cache_seq_add( +# LLAMA_API void llama_kv_self_seq_add( # struct llama_context * ctx, # llama_seq_id seq_id, # llama_pos p0, @@ -2074,48 +1907,7 @@ def llama_kv_self_seq_add( """Adds relative position "delta" to all tokens that belong to the specified sequence and have positions in [p0, p1) If the KV cache is RoPEd, the KV data is updated accordingly: - lazily on next llama_decode() - - explicitly with llama_kv_cache_update() - p0 < 0 : [0, p1] - p1 < 0 : [p0, inf)""" - ... - - -# // NOTE: Deprecated -# // Adds relative position "delta" to all tokens that belong to the specified sequence and have positions in [p0, p1) -# // If the KV cache is RoPEd, the KV data is updated accordingly: -# // - lazily on next llama_decode() -# // - explicitly with llama_kv_cache_update() -# // p0 < 0 : [0, p1] -# // p1 < 0 : [p0, inf) -# LLAMA_API void llama_kv_cache_seq_add( -# struct llama_context * ctx, -# llama_seq_id seq_id, -# llama_pos p0, -# llama_pos p1, -# llama_pos delta); -@ctypes_function( - "llama_kv_self_seq_add", - [ - llama_context_p_ctypes, - llama_seq_id, - llama_pos, - llama_pos, - llama_pos, - ], - None, -) -def llama_kv_cache_seq_add( - ctx: llama_context_p, - seq_id: Union[llama_seq_id, int], - p0: Union[llama_pos, int], - p1: Union[llama_pos, int], - delta: Union[llama_pos, int], - /, -): - """Adds relative position "delta" to all tokens that belong to the specified sequence and have positions in [p0, p1) - If the KV cache is RoPEd, the KV data is updated accordingly: - - lazily on next llama_decode() - - explicitly with llama_kv_cache_update() + - explicitly with llama_kv_self_update() p0 < 0 : [0, p1] p1 < 0 : [p0, inf)""" ... @@ -2125,7 +1917,7 @@ def llama_kv_cache_seq_add( # // If the KV cache is RoPEd, the KV data is updated accordingly # // p0 < 0 : [0, p1] # // p1 < 0 : [p0, inf) -# LLAMA_API void llama_kv_cache_seq_div( +# LLAMA_API void llama_kv_self_seq_div( # struct llama_context * ctx, # llama_seq_id seq_id, # llama_pos p0, @@ -2157,43 +1949,6 @@ def llama_kv_self_seq_div( ... -# // NOTE: Deprecated -# // Integer division of the positions by factor of `d > 1` -# // If the KV cache is RoPEd, the KV data is updated accordingly -# // p0 < 0 : [0, p1] -# // p1 < 0 : [p0, inf) -# LLAMA_API void llama_kv_cache_seq_div( -# struct llama_context * ctx, -# llama_seq_id seq_id, -# llama_pos p0, -# llama_pos p1, -# int d); -@ctypes_function( - "llama_kv_self_seq_div", - [ - llama_context_p_ctypes, - llama_seq_id, - llama_pos, - llama_pos, - ctypes.c_int, - ], - None, -) -def llama_kv_cache_seq_div( - ctx: llama_context_p, - seq_id: Union[llama_seq_id, int], - p0: Union[llama_pos, int], - p1: Union[llama_pos, int], - d: Union[ctypes.c_int, int], - /, -): - """Integer division of the positions by factor of `d > 1` - If the KV cache is RoPEd, the KV data is updated accordingly - p0 < 0 : [0, p1] - p1 < 0 : [p0, inf)""" - ... - - # // Returns the largest position present in the KV cache for the specified sequence # LLAMA_API llama_pos llama_kv_self_seq_pos_max( # struct llama_context * ctx, @@ -2218,58 +1973,25 @@ def llama_kv_self_defrag(ctx: llama_context_p, /): """Defragment the KV cache This will be applied: - lazily on next llama_decode() - - explicitly with llama_kv_cache_update()""" - ... - - -# NOTE: Deprecated -# // Defragment the KV cache -# // This will be applied: -# // - lazily on next llama_decode() -# // - explicitly with llama_kv_self_update() -# LLAMA_API void llama_kv_cache_defrag(struct llama_context * ctx); -@ctypes_function("llama_kv_cache_defrag", [llama_context_p_ctypes], None) -def llama_kv_cache_defrag(ctx: llama_context_p, /): - """Defragment the KV cache - This will be applied: - - lazily on next llama_decode() - - explicitly with llama_kv_cache_update()""" + - explicitly with llama_kv_self_update()""" ... # // Apply the KV cache updates (such as K-shifts, defragmentation, etc.) -# LLAMA_API void llama_kv_cache_update(struct llama_context * ctx); +# LLAMA_API void llama_kv_self_update(struct llama_context * ctx); @ctypes_function("llama_kv_self_update", [llama_context_p_ctypes], None) def llama_kv_self_update(ctx: llama_context_p, /): """Apply the KV cache updates (such as K-shifts, defragmentation, etc.)""" ... -# // NOTE: Deprecated -# // Apply the KV cache updates (such as K-shifts, defragmentation, etc.) -# LLAMA_API void llama_kv_cache_update(struct llama_context * ctx); -@ctypes_function("llama_kv_self_update", [llama_context_p_ctypes], None) -def llama_kv_cache_update(ctx: llama_context_p, /): - """Apply the KV cache updates (such as K-shifts, defragmentation, etc.)""" - ... - - # // Check if the context supports KV cache shifting -# LLAMA_API bool llama_kv_cache_can_shift(struct llama_context * ctx); +# LLAMA_API bool llama_kv_self_can_shift(struct llama_context * ctx); @ctypes_function("llama_kv_self_can_shift", [llama_context_p_ctypes], ctypes.c_bool) def llama_kv_self_can_shift(ctx: llama_context_p, /) -> bool: """Check if the context supports KV cache shifting""" ... -# // NOTE: Deprecated -# // Check if the context supports KV cache shifting -# LLAMA_API bool llama_kv_cache_can_shift(struct llama_context * ctx); -@ctypes_function("llama_kv_self_can_shift", [llama_context_p_ctypes], ctypes.c_bool) -def llama_kv_cache_can_shift(ctx: llama_context_p, /) -> bool: - """Check if the context supports KV cache shifting""" - ... - - # // # // State / sessions # // @@ -3493,7 +3215,7 @@ def llama_detokenize( # /// Apply chat template. Inspired by hf apply_chat_template() on python. # /// Both "model" and "custom_template" are optional, but at least one is required. "custom_template" has higher precedence than "model" # /// NOTE: This function does not use a jinja parser. It only support a pre-defined list of template. See more: https://github.com/ggerganov/llama.cpp/wiki/Templates-supported-by-llama_chat_apply_template -# /// @param tmpl A Jinja template to use for this chat. If this is nullptr, the model’s default chat template will be used instead. +# /// @param tmpl A Jinja template to use for this chat. If this is nullptr, the model's default chat template will be used instead. # /// @param chat Pointer to a list of multiple llama_chat_message # /// @param n_msg Number of llama_chat_message in this chat # /// @param add_ass Whether to end the prompt with the token(s) that indicate the start of an assistant message. diff --git a/vendor/llama.cpp b/vendor/llama.cpp index 1db1d5b..162ce47 160000 --- a/vendor/llama.cpp +++ b/vendor/llama.cpp @@ -1 +1 @@ -Subproject commit 1db1d5b1111718fe460222a9c5d80f74e62d2b2e +Subproject commit 162ce4786b5385b62dd995218dcbf11eb62571f0 From f65fbe7079d22a965f5849514b9096aa93bbe80a Mon Sep 17 00:00:00 2001 From: okaris Date: Tue, 24 Jun 2025 21:04:12 +0000 Subject: [PATCH 24/32] cleanup --- llama_cpp/_ctypes_extensions.py | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/llama_cpp/_ctypes_extensions.py b/llama_cpp/_ctypes_extensions.py index cf56aae..032e983 100644 --- a/llama_cpp/_ctypes_extensions.py +++ b/llama_cpp/_ctypes_extensions.py @@ -5,8 +5,6 @@ import ctypes import functools import pathlib -import logging -import traceback from typing import ( Any, @@ -20,9 +18,6 @@ ) from typing_extensions import TypeAlias -# Configure logging -logging.basicConfig(level=logging.INFO) -logger = logging.getLogger("llama_cpp.binding") # Load the library def load_shared_library(lib_base_name: str, base_path: pathlib.Path): @@ -115,21 +110,11 @@ def ctypes_function( ): def decorator(f: F) -> F: if enabled: - print(f"Setting up binding for C function: {name}") # Print when binding is created func = getattr(lib, name) func.argtypes = argtypes func.restype = restype - - @functools.wraps(f) - def wrapper(*args, **kwargs): - print(f">>> Calling {name} with args: {args}") # Print right before C call - sys.stdout.flush() # Force flush to ensure we see the output - result = func(*args, **kwargs) - print(f"<<< {name} returned successfully") # Print after successful return - sys.stdout.flush() - return result - - return wrapper + functools.wraps(f)(func) + return func else: return f @@ -143,4 +128,4 @@ def _byref(obj: CtypesCData, offset: Optional[int] = None) -> CtypesRef[CtypesCD ... -byref = _byref if TYPE_CHECKING else ctypes.byref +byref = _byref if TYPE_CHECKING else ctypes.byref \ No newline at end of file From 8524429627b9236c77acadc250418a10ffafad69 Mon Sep 17 00:00:00 2001 From: okaris Date: Tue, 24 Jun 2025 22:04:56 +0000 Subject: [PATCH 25/32] fixes --- llama_cpp/llama_cpp.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/llama_cpp/llama_cpp.py b/llama_cpp/llama_cpp.py index ecadff2..b140ad6 100644 --- a/llama_cpp/llama_cpp.py +++ b/llama_cpp/llama_cpp.py @@ -10,6 +10,7 @@ NewType, Optional, TYPE_CHECKING, + List, ) from llama_cpp._ctypes_extensions import ( @@ -649,6 +650,12 @@ class llama_model_kv_override(ctypes.Structure): # ggml_backend_buffer_type_t buft; # }; +class llama_model_tensor_buft_override(ctypes.Structure): + _fields_ = [ + ("pattern", ctypes.c_char_p), + ("buft", ctypes.c_int), + ] + # struct llama_model_params { # // NULL-terminated list of devices to use for offloading (if NULL, all available devices are used) From c66b6e94564153f9b8e0061b499d1bd42d1e5d78 Mon Sep 17 00:00:00 2001 From: okaris Date: Wed, 25 Jun 2025 14:19:29 +0000 Subject: [PATCH 26/32] migrate clip to mtmd --- llama_cpp/llama_chat_format.py | 531 +++++++++++++------------- llama_cpp/mtmd_cpp.py | 672 ++++++++++++++++++++++++++------- tests/monalisa.jpg | Bin 0 -> 541958 bytes tests/test_llava.py | 80 ++++ 4 files changed, 887 insertions(+), 396 deletions(-) create mode 100644 tests/monalisa.jpg create mode 100644 tests/test_llava.py diff --git a/llama_cpp/llama_chat_format.py b/llama_cpp/llama_chat_format.py index 040e0da..27a375d 100644 --- a/llama_cpp/llama_chat_format.py +++ b/llama_cpp/llama_chat_format.py @@ -2675,7 +2675,7 @@ def generate_streaming(tools, functions, function_call, prompt): class Llava15ChatHandler: DEFAULT_SYSTEM_MESSAGE: Optional[str] = ( - "A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions." + "A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions." ) CHAT_FORMAT = ( @@ -2713,71 +2713,242 @@ class Llava15ChatHandler: "{% endif %}" ) - def __init__(self, clip_model_path: str, verbose: bool = True): + def __init__(self, clip_model_path: str, llama_model: llama.Llama, verbose: bool = True): import llama_cpp.mtmd_cpp as mtmd_cpp self.clip_model_path = clip_model_path self.verbose = verbose - self._mtmd_cpp = mtmd_cpp # TODO: Fix + self._mtmd_cpp = mtmd_cpp self._exit_stack = ExitStack() - self._last_image_embed: Optional[ - mtmd_cpp.CtypesPointer[mtmd_cpp.mtmd_cpp_image_embed] - ] = None - self._last_image_hash: Optional[int] = None + self._bitmap_manager = None if not os.path.exists(clip_model_path): raise ValueError(f"Clip model path does not exist: {clip_model_path}") + # We'll initialize the clip context later when we have the llama model + self.clip_ctx = None + self._params = None with suppress_stdout_stderr(disable=self.verbose): - clip_ctx = self._mtmd_cpp.clip_model_load(self.clip_model_path.encode(), 0) - - if clip_ctx is None: - raise ValueError(f"Failed to load clip model: {clip_model_path}") + params = self._mtmd_cpp.mtmd_context_params_default() + params.use_gpu = True # TODO: Make configurable + params.verbosity = 1 if self.verbose else 0 + self.clip_ctx = self._mtmd_cpp.mtmd_init_from_file( + self.clip_model_path.encode(), + llama_model._model.model, + params + ) - self.clip_ctx = clip_ctx + if self.clip_ctx is None: + raise ValueError(f"Failed to load clip model: {self.clip_model_path}") - def clip_free(): + def mtmd_free(): with suppress_stdout_stderr(disable=self.verbose): - self._mtmd_cpp.clip_free(self.clip_ctx) - - self._exit_stack.callback(clip_free) + self._mtmd_cpp.mtmd_free(self.clip_ctx) - def last_image_embed_free(): - with suppress_stdout_stderr(disable=self.verbose): - if self._last_image_embed is not None: - self._mtmd_cpp.mtmd_cpp_image_embed_free(self._last_image_embed) - self._last_image_embed = None - - self._exit_stack.callback(last_image_embed_free) + self._exit_stack.callback(mtmd_free) def load_image(self, image_url: str) -> bytes: return self._load_image(image_url) - def _embed_image_bytes(self, image_bytes: bytes, n_threads_batch: int = 1): - if ( - self._last_image_embed is not None - and self._last_image_hash is not None - and hash(image_bytes) == self._last_image_hash - ): - return self._last_image_embed - with suppress_stdout_stderr(disable=self.verbose): - # Free the previous image embed - if self._last_image_embed is not None: - self._mtmd_cpp.mtmd_cpp_image_embed_free(self._last_image_embed) - self._last_image_embed = None - self._last_image_hash = None - embed = self._mtmd_cpp.mtmd_cpp_image_embed_make_with_bytes( - self.clip_ctx, - n_threads_batch, - (ctypes.c_uint8 * len(image_bytes)).from_buffer( - bytearray(image_bytes) - ), - len(image_bytes), + def eval_image(self, llama: llama.Llama, image_url: str): + image_bytes = self.load_image(image_url) + + # Create bitmap manager if not exists + if self._bitmap_manager is None: + self._bitmap_manager = self._mtmd_cpp.BitmapManager() + + # Create bitmap from bytes + if not self._bitmap_manager.add_from_memory(self.clip_ctx, image_bytes): + raise ValueError("Failed to create bitmap from image bytes") + + # Create input chunks for the bitmap + chunks = self._mtmd_cpp.mtmd_input_chunks_init() + if chunks is None: + raise ValueError("Failed to create input chunks") + + # Create input text with media marker + # Get media marker from context params + params = self._mtmd_cpp.mtmd_context_params_default() + text = self._mtmd_cpp.mtmd_input_text() + text.text = params.media_marker if params.media_marker else self._mtmd_cpp.mtmd_default_marker() + text.add_special = False + text.parse_special = True + + # Tokenize with bitmap + if self._mtmd_cpp.mtmd_tokenize(self.clip_ctx, chunks, text, self._bitmap_manager.c_ptr(), len(self._bitmap_manager.entries)) != 0: + self._mtmd_cpp.mtmd_input_chunks_free(chunks) + raise ValueError("Failed to tokenize image") + + # Get new n_past after evaluation + n_past = ctypes.c_int(llama.n_tokens) + n_past_p = ctypes.pointer(n_past) + + # Evaluate chunks + if self._mtmd_cpp.mtmd_helper_eval_chunks( + self.clip_ctx, + llama.ctx, + chunks, + llama.n_tokens, + 0, # seq_id + llama.n_batch, + True, # logits_last + n_past_p + ) != 0: + self._mtmd_cpp.mtmd_input_chunks_free(chunks) + raise ValueError("Failed to evaluate chunks") + + # Update n_tokens + llama.input_ids[llama.n_tokens : n_past.value] = -1 + llama.n_tokens = n_past.value + + # Cleanup + self._mtmd_cpp.mtmd_input_chunks_free(chunks) + self._bitmap_manager.clear() + + @staticmethod + def _load_image(image_url: str) -> bytes: + if image_url.startswith("data:"): + import base64 + image_bytes = base64.b64decode(image_url.split(",")[1]) + return image_bytes + elif image_url.startswith("http://") or image_url.startswith("https://"): + import urllib.request + with urllib.request.urlopen(image_url) as f: + image_bytes = f.read() + return image_bytes + else: + # Handle local file path + with open(image_url, 'rb') as f: + image_bytes = f.read() + return image_bytes + + @staticmethod + def get_image_urls(messages: List[llama_types.ChatCompletionRequestMessage]): + image_urls: List[str] = [] + for message in messages: + if message["role"] == "user": + if message["content"] is None: + continue + for content in message["content"]: + if isinstance(content, dict) and "type" in content: + if content["type"] == "image_url": + if ( + isinstance(content["image_url"], dict) + and "url" in content["image_url"] + ): + image_urls.append(content["image_url"]["url"]) + else: + image_urls.append(content["image_url"]) + return image_urls + + @staticmethod + def split_text_on_image_urls(text: str, image_urls: List[str]): + def find_first(s: str, substrs: List[str]): + for i, substr in enumerate(substrs): + pos = s.find(substr) + if pos != -1: + return pos, i + return None, None + + split_text: List[Tuple[Literal["text", "image_url"], str]] = [] + remaining = text + while remaining: + # Find first image_url + pos, i = find_first(remaining, image_urls) + if pos is not None and i is not None: + if pos > 0: + split_text.append(("text", remaining[:pos])) + split_text.append(("image_url", image_urls[i])) + remaining = remaining[pos + len(image_urls[i]) :] + else: + split_text.append(("text", remaining)) + remaining = "" + return split_text + + @classmethod + def from_pretrained( + cls, + repo_id: str, + filename: Optional[str], + local_dir: Optional[Union[str, os.PathLike[str]]] = None, + local_dir_use_symlinks: Union[bool, Literal["auto"]] = "auto", + cache_dir: Optional[Union[str, os.PathLike[str]]] = None, + **kwargs: Any, + ) -> "Llava15ChatHandler": + import fnmatch + from pathlib import Path + + try: + from huggingface_hub import hf_hub_download, HfFileSystem # type: ignore + from huggingface_hub.utils import validate_repo_id # type: ignore + except ImportError: + raise ImportError( + "Llama.from_pretrained requires the huggingface-hub package. " + "You can install it with `pip install huggingface-hub`." + ) + + validate_repo_id(repo_id) + + hffs = HfFileSystem() + + files = [ + file["name"] if isinstance(file, dict) else file + for file in hffs.ls(repo_id) # type: ignore + ] + + # split each file into repo_id, subfolder, filename + file_list: List[str] = [] + for file in files: + rel_path = Path(file).relative_to(repo_id) + file_list.append(str(rel_path)) + + matching_files = [file for file in file_list if fnmatch.fnmatch(file, filename)] # type: ignore + + if len(matching_files) == 0: + raise ValueError( + f"No file found in {repo_id} that match {filename}\n\n" + f"Available Files:\n{json.dumps(file_list)}" ) - self._last_image_embed = embed - self._last_image_hash = hash(image_bytes) - return embed + + if len(matching_files) > 1: + raise ValueError( + f"Multiple files found in {repo_id} matching {filename}\n\n" + f"Available Files:\n{json.dumps(files)}" + ) + + (matching_file,) = matching_files + + subfolder = str(Path(matching_file).parent) + filename = Path(matching_file).name + + # download the file + hf_hub_download( + repo_id=repo_id, + filename=filename, + subfolder=subfolder, + local_dir=cast(Union[str, Path, None], local_dir), + local_dir_use_symlinks=local_dir_use_symlinks, + cache_dir=cast(Union[str, Path, None], cache_dir), + ) + + if local_dir is None: + model_path = hf_hub_download( + repo_id=repo_id, + filename=filename, + subfolder=subfolder, + local_dir=local_dir, + local_dir_use_symlinks=local_dir_use_symlinks, + cache_dir=cast(Union[str, Path, None], cache_dir), + local_files_only=True, + ) + else: + model_path = os.path.join(local_dir, filename) + + return cls( + clip_model_path=model_path, + **kwargs, + ) def __call__( self, @@ -2844,7 +3015,6 @@ def __call__( if self.verbose: print(text, file=sys.stderr) - # Evaluate prompt llama.reset() llama._ctx.kv_self_clear() @@ -2945,168 +3115,6 @@ def __call__( ) return _convert_completion_to_chat(completion_or_chunks, stream=stream) - def eval_image(self, llama: llama.Llama, image_url: str): - image_bytes = self.load_image(image_url) - embed = self._embed_image_bytes(image_bytes, llama.context_params.n_threads_batch) - if llama.n_tokens + embed.contents.n_image_pos > llama.n_ctx(): - raise ValueError( - f"Prompt exceeds n_ctx: {llama.n_tokens + embed.contents.n_image_pos} > {llama.n_ctx()}" - ) - n_past = ctypes.c_int(llama.n_tokens) - n_past_p = ctypes.pointer(n_past) - with suppress_stdout_stderr(disable=self.verbose): - self._mtmd_cpp.mtmd_cpp_eval_image_embed( - llama.ctx, - embed, - llama.n_batch, - n_past_p, - ) - # Required to avoid issues with hf tokenizer - llama.input_ids[llama.n_tokens : n_past.value] = -1 - llama.n_tokens = n_past.value - - @staticmethod - def _load_image(image_url: str) -> bytes: - # TODO: Add Pillow support for other image formats beyond (jpg, png) - if image_url.startswith("data:"): - import base64 - - image_bytes = base64.b64decode(image_url.split(",")[1]) - return image_bytes - else: - import urllib.request - - with urllib.request.urlopen(image_url) as f: - image_bytes = f.read() - return image_bytes - - @staticmethod - def get_image_urls(messages: List[llama_types.ChatCompletionRequestMessage]): - image_urls: List[str] = [] - for message in messages: - if message["role"] == "user": - if message["content"] is None: - continue - for content in message["content"]: - if isinstance(content, dict) and "type" in content: - if content["type"] == "image_url": - if ( - isinstance(content["image_url"], dict) - and "url" in content["image_url"] - ): - image_urls.append(content["image_url"]["url"]) - else: - image_urls.append(content["image_url"]) - return image_urls - - @staticmethod - def split_text_on_image_urls(text: str, image_urls: List[str]): - def find_first(s: str, substrs: List[str]): - for i, substr in enumerate(substrs): - pos = s.find(substr) - if pos != -1: - return pos, i - return None, None - - split_text: List[Tuple[Literal["text", "image_url"], str]] = [] - remaining = text - while remaining: - # Find first image_url - pos, i = find_first(remaining, image_urls) - if pos is not None and i is not None: - if pos > 0: - split_text.append(("text", remaining[:pos])) - split_text.append(("image_url", image_urls[i])) - remaining = remaining[pos + len(image_urls[i]) :] - else: - split_text.append(("text", remaining)) - remaining = "" - return split_text - - @classmethod - def from_pretrained( - cls, - repo_id: str, - filename: Optional[str], - local_dir: Optional[Union[str, os.PathLike[str]]] = None, - local_dir_use_symlinks: Union[bool, Literal["auto"]] = "auto", - cache_dir: Optional[Union[str, os.PathLike[str]]] = None, - **kwargs: Any, - ) -> "Llava15ChatHandler": - import fnmatch - from pathlib import Path - - try: - from huggingface_hub import hf_hub_download, HfFileSystem # type: ignore - from huggingface_hub.utils import validate_repo_id # type: ignore - except ImportError: - raise ImportError( - "Llama.from_pretrained requires the huggingface-hub package. " - "You can install it with `pip install huggingface-hub`." - ) - - validate_repo_id(repo_id) - - hffs = HfFileSystem() - - files = [ - file["name"] if isinstance(file, dict) else file - for file in hffs.ls(repo_id) # type: ignore - ] - - # split each file into repo_id, subfolder, filename - file_list: List[str] = [] - for file in files: - rel_path = Path(file).relative_to(repo_id) - file_list.append(str(rel_path)) - - matching_files = [file for file in file_list if fnmatch.fnmatch(file, filename)] # type: ignore - - if len(matching_files) == 0: - raise ValueError( - f"No file found in {repo_id} that match {filename}\n\n" - f"Available Files:\n{json.dumps(file_list)}" - ) - - if len(matching_files) > 1: - raise ValueError( - f"Multiple files found in {repo_id} matching {filename}\n\n" - f"Available Files:\n{json.dumps(files)}" - ) - - (matching_file,) = matching_files - - subfolder = str(Path(matching_file).parent) - filename = Path(matching_file).name - - # download the file - hf_hub_download( - repo_id=repo_id, - filename=filename, - subfolder=subfolder, - local_dir=cast(Union[str, Path, None], local_dir), - local_dir_use_symlinks=local_dir_use_symlinks, - cache_dir=cast(Union[str, Path, None], cache_dir), - ) - - if local_dir is None: - model_path = hf_hub_download( - repo_id=repo_id, - filename=filename, - subfolder=subfolder, - local_dir=local_dir, - local_dir_use_symlinks=local_dir_use_symlinks, - cache_dir=cast(Union[str, Path, None], cache_dir), - local_files_only=True, - ) - else: - model_path = os.path.join(local_dir, filename) - - return cls( - clip_model_path=model_path, - **kwargs, - ) - class ObsidianChatHandler(Llava15ChatHandler): # Prompt Format @@ -3474,62 +3482,59 @@ def split_text_on_image_urls(text: str, image_urls: List[str]): return split_text def eval_image(self, llama: llama.Llama, image_url: str): - import llama_cpp + image_bytes = self.load_image(image_url) + + # Create bitmap manager if not exists + if self._bitmap_manager is None: + self._bitmap_manager = self._mtmd_cpp.BitmapManager() + + # Create bitmap from bytes + if not self._bitmap_manager.add_from_memory(self.clip_ctx, image_bytes): + raise ValueError("Failed to create bitmap from image bytes") + + # Create input chunks for the bitmap + chunks = self._mtmd_cpp.mtmd_input_chunks_init() + if chunks is None: + raise ValueError("Failed to create input chunks") + + # Create input text with media marker + # Get media marker from context params + params = self._mtmd_cpp.mtmd_context_params_default() + text = self._mtmd_cpp.mtmd_input_text() + text.text = params.media_marker if params.media_marker else self._mtmd_cpp.mtmd_default_marker() + text.add_special = False + text.parse_special = True + + # Tokenize with bitmap + if self._mtmd_cpp.mtmd_tokenize(self.clip_ctx, chunks, text, self._bitmap_manager.c_ptr(), len(self._bitmap_manager.entries)) != 0: + self._mtmd_cpp.mtmd_input_chunks_free(chunks) + raise ValueError("Failed to tokenize image") + + # Get new n_past after evaluation + n_past = ctypes.c_int(llama.n_tokens) + n_past_p = ctypes.pointer(n_past) - n_tokens = 256 - if llama.n_tokens + n_tokens > llama.n_ctx(): - raise ValueError( - f"Prompt exceeds n_ctx: {llama.n_tokens + n_tokens} > {llama.n_ctx()}" - ) + # Evaluate chunks + if self._mtmd_cpp.mtmd_helper_eval_chunks( + self.clip_ctx, + llama.ctx, + chunks, + llama.n_tokens, + 0, # seq_id + llama.n_batch, + True, # logits_last + n_past_p + ) != 0: + self._mtmd_cpp.mtmd_input_chunks_free(chunks) + raise ValueError("Failed to evaluate chunks") + + # Update n_tokens + llama.input_ids[llama.n_tokens : n_past.value] = -1 + llama.n_tokens = n_past.value - img_bytes = self.load_image(image_url) - img_u8_p = self._mtmd_cpp.clip_image_u8_init() - if not self._mtmd_cpp.clip_image_load_from_bytes( - ctypes.create_string_buffer(img_bytes, len(img_bytes)), - ctypes.c_size_t(len(img_bytes)), - img_u8_p, - ): - self._mtmd_cpp.clip_image_u8_free(img_u8_p) - raise ValueError("Failed to load image.") - - img_f32_p = self._mtmd_cpp.clip_image_f32_batch_init() - if not self._mtmd_cpp.clip_image_preprocess(self.clip_ctx, img_u8_p, img_f32_p): - self._mtmd_cpp.clip_image_f32_batch_free(img_f32_p) - self._mtmd_cpp.clip_image_u8_free(img_u8_p) - raise ValueError("Failed to preprocess image.") - - n_embd = llama_cpp.llama_model_n_embd(llama._model.model) - embed = (ctypes.c_float * (n_tokens * n_embd))() - if not self._mtmd_cpp.clip_image_batch_encode(self.clip_ctx, llama.n_threads, img_f32_p, embed): - self._mtmd_cpp.clip_image_f32_batch_free(img_f32_p) - self._mtmd_cpp.clip_image_u8_free(img_u8_p) - raise ValueError("Failed to encode image.") - - self._mtmd_cpp.clip_image_f32_batch_free(img_f32_p) - self._mtmd_cpp.clip_image_u8_free(img_u8_p) - llama_cpp.llama_set_causal_attn(llama.ctx, False) - - seq_id_0 = (ctypes.c_int32 * 1)() - seq_ids = (ctypes.POINTER(ctypes.c_int32) * (n_tokens + 1))() - for i in range(n_tokens): - seq_ids[i] = seq_id_0 - - batch = llama_cpp.llama_batch() - batch.n_tokens = n_tokens - batch.token = None - batch.embd = embed - batch.pos = (ctypes.c_int32 * n_tokens)(*[i + llama.n_tokens for i in range(n_tokens)]) - batch.seq_id = seq_ids - batch.n_seq_id = (ctypes.c_int32 * n_tokens)(*([1] * n_tokens)) - batch.logits = (ctypes.c_int8 * n_tokens)() - - if llama_cpp.llama_decode(llama.ctx, batch): - raise ValueError("Failed to decode image.") - - llama_cpp.llama_set_causal_attn(llama.ctx, True) - # Required to avoid issues with hf tokenizer - llama.input_ids[llama.n_tokens : llama.n_tokens + n_tokens] = -1 - llama.n_tokens += n_tokens + # Cleanup + self._mtmd_cpp.mtmd_input_chunks_free(chunks) + self._bitmap_manager.clear() def _accumulate_chunks( diff --git a/llama_cpp/mtmd_cpp.py b/llama_cpp/mtmd_cpp.py index 06e08ae..9eb2ef4 100644 --- a/llama_cpp/mtmd_cpp.py +++ b/llama_cpp/mtmd_cpp.py @@ -1,11 +1,14 @@ from __future__ import annotations import os +import ctypes from ctypes import ( c_bool, c_char_p, c_int, + c_int32, c_uint8, + c_uint32, c_float, c_size_t, c_void_p, @@ -15,6 +18,7 @@ ) import pathlib from typing import ( + List, Union, NewType, Optional, @@ -29,215 +33,617 @@ ) if TYPE_CHECKING: + from llama_cpp.llama_types import ( + llama_token, + llama_pos, + ) from llama_cpp._ctypes_extensions import ( CtypesArray, + CtypesPointer, ) +# Define input text structure +class mtmd_input_text(Structure): + _fields_ = [ + ("text", c_char_p), + ("add_special", c_bool), + ("parse_special", c_bool), + ] + +# Define context parameters structure +class mtmd_context_params(Structure): + _fields_ = [ + ("use_gpu", c_bool), + ("print_timings", c_bool), + ("n_threads", c_int), + ("verbosity", c_int), + ("image_marker", c_char_p), # const char* + ("media_marker", c_char_p), # const char* + ] + +# Define input chunk type enum +mtmd_input_chunk_type = c_int +( + MTMD_INPUT_CHUNK_TYPE_TEXT, + MTMD_INPUT_CHUNK_TYPE_IMAGE, + MTMD_INPUT_CHUNK_TYPE_AUDIO, +) = (0, 1, 2) + +# Define slice template enum +mtmd_slice_tmpl = c_int +( + MTMD_SLICE_TMPL_NONE, + MTMD_SLICE_TMPL_MINICPMV_2_5, + MTMD_SLICE_TMPL_MINICPMV_2_6, + MTMD_SLICE_TMPL_LLAMA4, +) = (0, 1, 2, 3) + +# Define whisper filters structure +class whisper_filters(Structure): + _fields_ = [ + ("n_mel", c_int), + ] + +# Define mtmd_context structure +class mtmd_context(Structure): + _fields_ = [ + ("ctx_v", c_void_p), # clip_ctx* + ("ctx_a", c_void_p), # clip_ctx* + ("text_model", c_void_p), # const llama_model* + ("image_embd_v", POINTER(c_float)), # std::vector + ("print_timings", c_bool), + ("n_threads", c_int), + ("media_marker", c_char_p), # std::string + ("n_embd_text", c_int), + ("img_beg", c_char_p), # std::string + ("img_end", c_char_p), # std::string + ("aud_beg", c_char_p), # std::string + ("aud_end", c_char_p), # std::string + ("slice_tmpl", c_int), # mtmd_slice_tmpl + ("tok_ov_img_start", llama_cpp.llama_token), + ("tok_ov_img_end", llama_cpp.llama_token), + ("tok_slices_start", llama_cpp.llama_token), + ("tok_slices_end", llama_cpp.llama_token), + ("tok_sli_img_start", llama_cpp.llama_token), + ("tok_sli_img_end", llama_cpp.llama_token), + ("tok_sli_img_mid", llama_cpp.llama_token), + ("tok_row_end", llama_cpp.llama_token), + ("tok_row_end_trail", c_bool), + ("ov_img_first", c_bool), + ("use_mrope", c_bool), + ("w_filters", whisper_filters), + ] + +# Define bitmap structure +class mtmd_bitmap(Structure): + _fields_ = [ + ("nx", c_uint32), + ("ny", c_uint32), + ("data", POINTER(c_uint8)), # Vector represented as pointer + ("id", c_char_p), + ("is_audio", c_bool), + ] + +# Define image tokens structure +class mtmd_image_tokens(Structure): + _fields_ = [ + ("nx", c_uint32), + ("ny", c_uint32), + ("use_mrope_pos", c_bool), + ("batch_f32", c_void_p), # clip_image_f32_batch + ("id", c_char_p), + ] + +# Define audio tokens structure +class mtmd_audio_tokens(Structure): + _fields_ = [ + ("n_tokens", c_uint32), + ("batch_f32", c_void_p), # clip_image_f32_batch + ("id", c_char_p), + ] + +# Define input chunk structure +class mtmd_input_chunk(Structure): + _fields_ = [ + ("type", mtmd_input_chunk_type), + ("tokens_text", POINTER(llama_cpp.llama_token)), # Vector represented as pointer + ("tokens_image", c_void_p), # mtmd_image_tokens_ptr + ("tokens_audio", c_void_p), # mtmd_audio_tokens_ptr + ] -# Specify the base name of the shared library to load +# Define input chunks structure +class mtmd_input_chunks(Structure): + _fields_ = [ + ("entries", POINTER(mtmd_input_chunk)), # Vector represented as pointer + ] + +# Define context pointer type +mtmd_context_p = NewType("mtmd_context_p", int) +mtmd_context_p_ctypes = c_void_p + +# Define bitmap pointer type +mtmd_bitmap_p = NewType("mtmd_bitmap_p", int) +mtmd_bitmap_p_ctypes = c_void_p + +# Define input chunks pointer type +mtmd_input_chunks_p = NewType("mtmd_input_chunks_p", int) +mtmd_input_chunks_p_ctypes = c_void_p + +# Define input chunk pointer type +mtmd_input_chunk_p = NewType("mtmd_input_chunk_p", int) +mtmd_input_chunk_p_ctypes = c_void_p + +# Define image tokens pointer type +mtmd_image_tokens_p = NewType("mtmd_image_tokens_p", int) +mtmd_image_tokens_p_ctypes = c_void_p + +# Define audio tokens pointer type +mtmd_audio_tokens_p = NewType("mtmd_audio_tokens_p", int) +mtmd_audio_tokens_p_ctypes = c_void_p + +# Load the library _libmtmd_base_name = "mtmd" _libmtmd_override_path = os.environ.get("mtmd_CPP_LIB") -_libmtmd_base_path = pathlib.Path(os.path.abspath(os.path.dirname(__file__))) / "lib" if _libmtmd_override_path is None else pathlib.Path() +_libmtmd_base_path = ( + pathlib.Path(os.path.abspath(os.path.dirname(__file__))) / "lib" + if _libmtmd_override_path is None + else pathlib.Path() +) -# Load the library _libmtmd = load_shared_library(_libmtmd_base_name, _libmtmd_base_path) - ctypes_function = ctypes_function_for_shared_library(_libmtmd) +# Add core functions +@ctypes_function( + "mtmd_context_params_default", + [], + mtmd_context_params, +) +def mtmd_context_params_default() -> mtmd_context_params: + ... + +@ctypes_function( + "mtmd_init_from_file", + [c_char_p, llama_cpp.llama_model_p_ctypes, mtmd_context_params], + mtmd_context_p_ctypes, +) +def mtmd_init_from_file( + mmproj_fname: bytes, + text_model: llama_cpp.llama_model_p, + ctx_params: mtmd_context_params, + /, +) -> Optional[mtmd_context_p]: + ... + +@ctypes_function( + "mtmd_free", + [mtmd_context_p_ctypes], + None, +) +def mtmd_free(ctx: mtmd_context_p, /): + ... + +@ctypes_function( + "mtmd_default_marker", + [], + c_char_p, +) +def mtmd_default_marker() -> bytes: + ... ################################################ # mtmd.h ################################################ -# struct clip_ctx; -clip_ctx_p = NewType("clip_ctx_p", int) -clip_ctx_p_ctypes = c_void_p +@ctypes_function( + "mtmd_tokenize", + [ + mtmd_context_p_ctypes, + mtmd_input_chunks_p_ctypes, + POINTER(mtmd_input_text), + POINTER(mtmd_bitmap_p_ctypes), + c_size_t, + ], + c_int, +) +def mtmd_tokenize( + ctx: mtmd_context_p, + output: mtmd_input_chunks_p, + text: "CtypesPointer[mtmd_input_text]", + bitmaps: "CtypesArray[mtmd_bitmap_p_ctypes]", + n_bitmaps: Union[c_size_t, int], + /, +) -> int: + ... +@ctypes_function( + "mtmd_encode_chunk", + [mtmd_context_p_ctypes, mtmd_input_chunk_p_ctypes], + c_int, +) +def mtmd_encode_chunk(ctx: mtmd_context_p, chunk: mtmd_input_chunk_p, /) -> int: + ... -# struct mtmd_image_embed { -# float * embed; -# int n_image_pos; -# }; -class mtmd_image_embed(Structure): - _fields_ = [ - ("embed", POINTER(c_float)), - ("n_image_pos", c_int), - ] +@ctypes_function("mtmd_get_output_embd", [mtmd_context_p_ctypes], POINTER(c_float)) +def mtmd_get_output_embd( + ctx: mtmd_context_p, / +) -> "CtypesPointer[c_float]": + ... +@ctypes_function("mtmd_decode_use_non_causal", [mtmd_context_p_ctypes], c_bool) +def mtmd_decode_use_non_causal(ctx: mtmd_context_p, /) -> bool: + ... -# /** sanity check for clip <-> mtmd embed size match */ -# mtmd_API bool mtmd_validate_embed_size(const llama_context * ctx_llama, const clip_ctx * ctx_clip); -@ctypes_function( - "mtmd_validate_embed_size", - [llama_cpp.llama_context_p_ctypes, clip_ctx_p_ctypes], - c_bool, -) -def mtmd_validate_embed_size( - ctx_llama: llama_cpp.llama_context_p, ctx_clip: clip_ctx_p, / -) -> bool: +@ctypes_function("mtmd_decode_use_mrope", [mtmd_context_p_ctypes], c_bool) +def mtmd_decode_use_mrope(ctx: mtmd_context_p, /) -> bool: + ... + +@ctypes_function("mtmd_support_vision", [mtmd_context_p_ctypes], c_bool) +def mtmd_support_vision(ctx: mtmd_context_p, /) -> bool: + ... + +@ctypes_function("mtmd_support_audio", [mtmd_context_p_ctypes], c_bool) +def mtmd_support_audio(ctx: mtmd_context_p, /) -> bool: ... +@ctypes_function("mtmd_get_audio_bitrate", [mtmd_context_p_ctypes], c_int) +def mtmd_get_audio_bitrate(ctx: mtmd_context_p, /) -> int: + ... + +# mtmd_bitmap -# /** build an image embed from image file bytes */ -# mtmd_API struct mtmd_image_embed * mtmd_image_embed_make_with_bytes(struct clip_ctx * ctx_clip, int n_threads, const unsigned char * image_bytes, int image_bytes_length); @ctypes_function( - "mtmd_image_embed_make_with_bytes", - [clip_ctx_p_ctypes, c_int, POINTER(c_uint8), c_int], - POINTER(mtmd_image_embed), + "mtmd_bitmap_init", + [c_uint32, c_uint32, POINTER(c_uint8)], + mtmd_bitmap_p_ctypes, ) -def mtmd_image_embed_make_with_bytes( - ctx_clip: clip_ctx_p, - n_threads: Union[c_int, int], - image_bytes: CtypesArray[c_uint8], - image_bytes_length: Union[c_int, int], +def mtmd_bitmap_init( + nx: Union[c_uint32, int], + ny: Union[c_uint32, int], + data: "CtypesArray[c_uint8]", /, -) -> "_Pointer[mtmd_image_embed]": +) -> Optional[mtmd_bitmap_p]: ... +@ctypes_function( + "mtmd_bitmap_init_from_audio", + [c_size_t, POINTER(c_float)], + mtmd_bitmap_p_ctypes, +) +def mtmd_bitmap_init_from_audio( + n_samples: Union[c_size_t, int], + data: "CtypesArray[c_float]", + /, +) -> Optional[mtmd_bitmap_p]: + ... -# /** build an image embed from a path to an image filename */ -# mtmd_API struct mtmd_image_embed * mtmd_image_embed_make_with_filename(struct clip_ctx * ctx_clip, int n_threads, const char * image_path); @ctypes_function( - "mtmd_image_embed_make_with_filename", - [clip_ctx_p_ctypes, c_int, c_char_p], - POINTER(mtmd_image_embed), + "mtmd_bitmap_get_nx", + [mtmd_bitmap_p_ctypes], + c_uint32, ) -def mtmd_image_embed_make_with_filename( - ctx_clip: clip_ctx_p, n_threads: Union[c_int, int], image_path: bytes, / -) -> "_Pointer[mtmd_image_embed]": +def mtmd_bitmap_get_nx(bitmap: mtmd_bitmap_p, /) -> int: ... +@ctypes_function( + "mtmd_bitmap_get_ny", + [mtmd_bitmap_p_ctypes], + c_uint32, +) +def mtmd_bitmap_get_ny(bitmap: mtmd_bitmap_p, /) -> int: + ... -# mtmd_API void mtmd_image_embed_free(struct mtmd_image_embed * embed); -# /** free an embedding made with mtmd_image_embed_make_* */ -@ctypes_function("mtmd_image_embed_free", [POINTER(mtmd_image_embed)], None) -def mtmd_image_embed_free(embed: "_Pointer[mtmd_image_embed]", /): +@ctypes_function( + "mtmd_bitmap_get_data", + [mtmd_bitmap_p_ctypes], + POINTER(c_uint8), +) +def mtmd_bitmap_get_data( + bitmap: mtmd_bitmap_p, / +) -> "CtypesPointer[c_uint8]": ... +@ctypes_function( + "mtmd_bitmap_get_n_bytes", + [mtmd_bitmap_p_ctypes], + c_size_t, +) +def mtmd_bitmap_get_n_bytes(bitmap: mtmd_bitmap_p, /) -> int: + ... -# /** write the image represented by embed into the llama context with batch size n_batch, starting at context pos n_past. on completion, n_past points to the next position in the context after the image embed. */ -# mtmd_API bool mtmd_eval_image_embed(struct llama_context * ctx_llama, const struct mtmd_image_embed * embed, int n_batch, int * n_past); @ctypes_function( - "mtmd_eval_image_embed", - [ - llama_cpp.llama_context_p_ctypes, - POINTER(mtmd_image_embed), - c_int, - POINTER(c_int), - ], + "mtmd_bitmap_is_audio", + [mtmd_bitmap_p_ctypes], c_bool, ) -def mtmd_eval_image_embed( - ctx_llama: llama_cpp.llama_context_p, - embed: "_Pointer[mtmd_image_embed]", - n_batch: Union[c_int, int], - n_past: "_Pointer[c_int]", - /, -) -> bool: +def mtmd_bitmap_is_audio(bitmap: mtmd_bitmap_p, /) -> bool: ... +@ctypes_function( + "mtmd_bitmap_get_id", + [mtmd_bitmap_p_ctypes], + c_char_p, +) +def mtmd_bitmap_get_id(bitmap: mtmd_bitmap_p, /) -> bytes: + ... -################################################ -# clip.h -################################################ +@ctypes_function( + "mtmd_bitmap_set_id", + [mtmd_bitmap_p_ctypes, c_char_p], + None, +) +def mtmd_bitmap_set_id(bitmap: mtmd_bitmap_p, id: bytes, /): + ... + +@ctypes_function( + "mtmd_bitmap_free", + [mtmd_bitmap_p_ctypes], + None, +) +def mtmd_bitmap_free(bitmap: mtmd_bitmap_p, /): + ... + +# mtmd_input_chunks +@ctypes_function("mtmd_input_chunks_init", [], mtmd_input_chunks_p_ctypes) +def mtmd_input_chunks_init() -> Optional[mtmd_input_chunks_p]: + ... -# /** load mmproj model */ -# CLIP_API struct clip_ctx * clip_model_load (const char * fname, int verbosity); -@ctypes_function("clip_model_load", [c_char_p, c_int], clip_ctx_p_ctypes) -def clip_model_load( - fname: bytes, verbosity: Union[c_int, int], / -) -> Optional[clip_ctx_p]: +@ctypes_function("mtmd_input_chunks_size", [mtmd_input_chunks_p_ctypes], c_size_t) +def mtmd_input_chunks_size(chunks: mtmd_input_chunks_p, /) -> int: ... +@ctypes_function( + "mtmd_input_chunks_get", + [mtmd_input_chunks_p_ctypes, c_size_t], + mtmd_input_chunk_p_ctypes, +) +def mtmd_input_chunks_get( + chunks: mtmd_input_chunks_p, idx: Union[c_size_t, int], / +) -> Optional[mtmd_input_chunk_p]: + ... -# /** free mmproj model */ -# CLIP_API void clip_free(struct clip_ctx * ctx); -@ctypes_function("clip_free", [clip_ctx_p_ctypes], None) -def clip_free(ctx: clip_ctx_p, /): +@ctypes_function("mtmd_input_chunks_free", [mtmd_input_chunks_p_ctypes], None) +def mtmd_input_chunks_free(chunks: mtmd_input_chunks_p, /): ... +# mtmd_input_chunk -# CLIP_API struct clip_image_u8 * clip_image_u8_init (); -@ctypes_function("clip_image_u8_init", [], c_void_p) -def clip_image_u8_init() -> Optional[c_void_p]: +@ctypes_function( + "mtmd_input_chunk_get_type", [mtmd_input_chunk_p_ctypes], mtmd_input_chunk_type +) +def mtmd_input_chunk_get_type(chunk: mtmd_input_chunk_p, /) -> int: ... +@ctypes_function( + "mtmd_input_chunk_get_tokens_text", + [mtmd_input_chunk_p_ctypes, POINTER(c_size_t)], + POINTER(llama_cpp.llama_token), +) +def mtmd_input_chunk_get_tokens_text( + chunk: mtmd_input_chunk_p, n_tokens_output: "CtypesPointer[c_size_t]", / +) -> "CtypesPointer[llama_token]": + ... -# CLIP_API void clip_image_u8_free (struct clip_image_u8 * img); -@ctypes_function("clip_image_u8_free", [c_void_p], None) -def clip_image_u8_free(img: c_void_p, /): +@ctypes_function( + "mtmd_input_chunk_get_tokens_image", + [mtmd_input_chunk_p_ctypes], + mtmd_image_tokens_p_ctypes, +) +def mtmd_input_chunk_get_tokens_image( + chunk: mtmd_input_chunk_p, / +) -> Optional[mtmd_image_tokens_p]: + ... + +@ctypes_function( + "mtmd_input_chunk_get_n_tokens", [mtmd_input_chunk_p_ctypes], c_size_t +) +def mtmd_input_chunk_get_n_tokens(chunk: mtmd_input_chunk_p, /) -> int: ... +@ctypes_function( + "mtmd_input_chunk_get_n_pos", [mtmd_input_chunk_p_ctypes], llama_cpp.llama_pos +) +def mtmd_input_chunk_get_n_pos(chunk: mtmd_input_chunk_p, /) -> "llama_pos": + ... -# CLIP_API struct clip_image_f32_batch * clip_image_f32_batch_init(); -@ctypes_function("clip_image_f32_batch_init", [], c_void_p) -def clip_image_f32_batch_init() -> Optional[c_void_p]: +@ctypes_function("mtmd_input_chunk_get_id", [mtmd_input_chunk_p_ctypes], c_char_p) +def mtmd_input_chunk_get_id(chunk: mtmd_input_chunk_p, /) -> bytes: ... +@ctypes_function( + "mtmd_input_chunk_copy", [mtmd_input_chunk_p_ctypes], mtmd_input_chunk_p_ctypes +) +def mtmd_input_chunk_copy( + chunk: mtmd_input_chunk_p, / +) -> Optional[mtmd_input_chunk_p]: + ... -# CLIP_API void clip_image_f32_batch_free(struct clip_image_f32_batch * batch); -@ctypes_function("clip_image_f32_batch_free", [c_void_p], None) -def clip_image_f32_batch_free(batch: c_void_p, /): +@ctypes_function("mtmd_input_chunk_free", [mtmd_input_chunk_p_ctypes], None) +def mtmd_input_chunk_free(chunk: mtmd_input_chunk_p, /): ... +# mtmd_image_tokens -# /** preprocess img and store the result in res_imgs, pad_to_square may be overridden to false depending on model configuration */ -# CLIP_API bool clip_image_preprocess(struct clip_ctx * ctx, const struct clip_image_u8 * img, struct clip_image_f32_batch * res_imgs ); @ctypes_function( - "clip_image_preprocess", - [ - clip_ctx_p_ctypes, - c_void_p, - c_void_p, - ], - c_bool, + "mtmd_image_tokens_get_n_tokens", [mtmd_image_tokens_p_ctypes], c_size_t +) +def mtmd_image_tokens_get_n_tokens(image_tokens: mtmd_image_tokens_p, /) -> int: + ... + +@ctypes_function("mtmd_image_tokens_get_nx", [mtmd_image_tokens_p_ctypes], c_size_t) +def mtmd_image_tokens_get_nx(image_tokens: mtmd_image_tokens_p, /) -> int: + ... + +@ctypes_function("mtmd_image_tokens_get_ny", [mtmd_image_tokens_p_ctypes], c_size_t) +def mtmd_image_tokens_get_ny(image_tokens: mtmd_image_tokens_p, /) -> int: + ... + +@ctypes_function("mtmd_image_tokens_get_id", [mtmd_image_tokens_p_ctypes], c_char_p) +def mtmd_image_tokens_get_id(image_tokens: mtmd_image_tokens_p, /) -> bytes: + ... + +@ctypes_function( + "mtmd_image_tokens_get_n_pos", [mtmd_image_tokens_p_ctypes], llama_cpp.llama_pos +) +def mtmd_image_tokens_get_n_pos( + image_tokens: mtmd_image_tokens_p, / +) -> "llama_pos": + ... + +# New helper functions for bitmap handling +@ctypes_function( + "mtmd_helper_bitmap_init_from_file", + [mtmd_context_p_ctypes, c_char_p], + mtmd_bitmap_p_ctypes, +) +def mtmd_helper_bitmap_init_from_file( + ctx: mtmd_context_p, + fname: bytes, + /, +) -> Optional[mtmd_bitmap_p]: + ... + +@ctypes_function( + "mtmd_helper_eval_chunks", + [mtmd_context_p_ctypes, llama_cpp.llama_context_p_ctypes, mtmd_input_chunks_p_ctypes, llama_cpp.llama_pos, c_int32, c_int, c_bool, POINTER(llama_cpp.llama_pos)], + c_int, ) -def clip_image_preprocess( - ctx: clip_ctx_p, - img: c_void_p, - res_imgs: c_void_p, +def mtmd_helper_eval_chunks( + ctx: mtmd_context_p, + lctx: llama_cpp.llama_context_p, + chunks: mtmd_input_chunks_p, + n_past: llama_cpp.llama_pos, + seq_id: int, + n_batch: int, + logits_last: bool, + n_past_out: "CtypesPointer[llama_cpp.llama_pos]", /, -) -> bool: +) -> int: ... +# Audio token structure +class mtmd_audio_tokens(Structure): + _fields_ = [ + ("n_tokens", c_uint32), + ("batch_f32", c_void_p), # clip_image_f32_batch + ("id", c_char_p), + ] + +mtmd_audio_tokens_p = NewType("mtmd_audio_tokens_p", int) +mtmd_audio_tokens_p_ctypes = c_void_p + +# Update mtmd_input_chunk to include audio tokens +class mtmd_input_chunk(Structure): + _fields_ = [ + ("type", mtmd_input_chunk_type), + ("tokens_text", POINTER(llama_cpp.llama_token)), + ("tokens_image", mtmd_image_tokens_p_ctypes), + ("tokens_audio", mtmd_audio_tokens_p_ctypes), + ] + +# Helper class for managing bitmaps +class BitmapManager: + def __init__(self): + self.entries: List[mtmd_bitmap_p] = [] + + def c_ptr(self) -> "CtypesArray[mtmd_bitmap_p_ctypes]": + arr_type = (mtmd_bitmap_p_ctypes * len(self.entries)) + return arr_type(*(entry for entry in self.entries)) + + def clear(self): + for bitmap in self.entries: + mtmd_bitmap_free(bitmap) + self.entries.clear() + + def add_from_memory(self, ctx: mtmd_context_p, data: bytes) -> bool: + import numpy as np + data_array = np.frombuffer(data, dtype=np.uint8) + bitmap = mtmd_helper_bitmap_init_from_buf(ctx, data_array.ctypes.data_as(POINTER(c_uint8)), len(data)) + if bitmap is None: + return False + self.entries.append(bitmap) + return True + + def __del__(self): + self.clear() + +# Helper class for managing input chunks +class InputChunksManager: + def __init__(self, chunks: mtmd_input_chunks_p): + self.ptr = chunks + + def __del__(self): + if self.ptr: + mtmd_input_chunks_free(self.ptr) + + def size(self) -> int: + return mtmd_input_chunks_size(self.ptr) + + def get(self, idx: int) -> Optional[mtmd_input_chunk_p]: + return mtmd_input_chunks_get(self.ptr, idx) -# CLIP_API bool clip_image_batch_encode(struct clip_ctx * ctx, int n_threads, const struct clip_image_f32_batch * imgs, float * vec); @ctypes_function( - "clip_image_batch_encode", - [ - clip_ctx_p_ctypes, - c_int, - c_void_p, - POINTER(c_float), - ], - c_bool, + "mtmd_helper_get_n_tokens", + [mtmd_input_chunks_p_ctypes], + c_size_t, +) +def mtmd_helper_get_n_tokens(chunks: mtmd_input_chunks_p, /) -> int: + ... + +@ctypes_function( + "mtmd_helper_get_n_pos", + [mtmd_input_chunks_p_ctypes], + llama_cpp.llama_pos, ) -def clip_image_batch_encode( - ctx: clip_ctx_p, - n_threads: c_int, - imgs: c_void_p, - vec: c_void_p, +def mtmd_helper_get_n_pos(chunks: mtmd_input_chunks_p, /) -> "llama_pos": + ... + +@ctypes_function( + "mtmd_helper_bitmap_init_from_buf", + [mtmd_context_p_ctypes, POINTER(c_uint8), c_size_t], + mtmd_bitmap_p_ctypes, +) +def mtmd_helper_bitmap_init_from_buf( + ctx: mtmd_context_p, + buf: "CtypesArray[c_uint8]", + len: Union[c_size_t, int], /, -) -> bool: +) -> Optional[mtmd_bitmap_p]: ... +@ctypes_function( + "mtmd_helper_decode_image_chunk", + [mtmd_context_p_ctypes, llama_cpp.llama_context_p_ctypes, mtmd_input_chunk_p_ctypes, POINTER(c_float), llama_cpp.llama_pos, llama_cpp.llama_seq_id, c_int32, POINTER(llama_cpp.llama_pos)], + c_int32, +) +def mtmd_helper_decode_image_chunk( + ctx: mtmd_context_p, + lctx: llama_cpp.llama_context_p, + chunk: mtmd_input_chunk_p, + encoded_embd: "CtypesPointer[c_float]", + n_past: llama_cpp.llama_pos, + seq_id: llama_cpp.llama_seq_id, + n_batch: int, + new_n_past: "CtypesPointer[llama_cpp.llama_pos]", + /, +) -> int: + ... -# /** interpret bytes as an image file with length bytes_length, and use the result to populate img */ -# CLIP_API bool clip_image_load_from_bytes(const unsigned char * bytes, size_t bytes_length, struct clip_image_u8 * img); @ctypes_function( - "clip_image_load_from_bytes", - [ - c_void_p, - c_size_t, - c_void_p, - ], - c_bool, + "mtmd_helper_eval_chunk_single", + [mtmd_context_p_ctypes, llama_cpp.llama_context_p_ctypes, mtmd_input_chunk_p_ctypes, llama_cpp.llama_pos, llama_cpp.llama_seq_id, c_int32, c_bool, POINTER(llama_cpp.llama_pos)], + c_int32, ) -def clip_image_load_from_bytes( - bytes: c_void_p, - bytes_length: c_size_t, - img: c_void_p, +def mtmd_helper_eval_chunk_single( + ctx: mtmd_context_p, + lctx: llama_cpp.llama_context_p, + chunk: mtmd_input_chunk_p, + n_past: llama_cpp.llama_pos, + seq_id: llama_cpp.llama_seq_id, + n_batch: int, + logits_last: bool, + new_n_past: "CtypesPointer[llama_cpp.llama_pos]", /, -) -> bool: +) -> int: ... diff --git a/tests/monalisa.jpg b/tests/monalisa.jpg new file mode 100644 index 0000000000000000000000000000000000000000..782ee4f9fd210dc505031abef6549681cbb13b9d GIT binary patch literal 541958 zcmbTcXH*kR^zex^r79hyNta$j7es2P(n1NnCy>yj3kpcD2|YBC4hhmi=%VxzkPe|K zRk~6i#Pa&z-Sh4_`)POY-1#(j=G@=RhdXoU{$2X}h3J944p4{a&Ye3%PX8Lw-xVTF zA`)Wa|IvR!`cKL3k&%&-l2P8hOMZ`82@LHJ0$<+kdjf5kx?+xP|+~{f0n;}M0EGasK|Rs?(h;3)7>GVyYqK| zh?|J$4%t6%|Ht9~OYRW=^O5}SJqk*ye+JkGM8tPUNQg;E{>STo){+0liAd?l=y{|y z$QewX@ACRH%0wf|?(scq`p9H9{heRdB_M`^l9`2-?V*66&|_f{Ie@%^qLQ+vmbQ+r z9#G%h!V+X>2nr4f4GWKb6BnP5n3Rmn%FfBn%P&B^E3c@ms;;T6 zYi?=9w&B`4IzROf3=R#CjE>FB&do0@E-e$jZfc|KYkr zMDl-P{cp1W2N&HxE@Dzr64JZ>!*z!^-n@`8l2M$w8#V0qjZdY|Os&O4nzF zzeEkatS!bAu7w7&??;lm%Y)QD)p?x>OrdHS20NOmEWK-O#Z8ZSe*dC~i6r+1F{9Wi zo@w^#JQ~_qV~Y7NF?T2x*7gNbR`Y3XJS2JI~bh3%+?ZXhL+nt{x^*WwK+_ z=Jm6<-(F`2e*DKhH3$!PF{uG3CE@0tkGr$OmWmXxe30O_pId;pQXh9Dm^HIz8lc2B zVg@y`>)Qv9|PihC%u|Fq16QPj(gY5xs2opMLlQmRx+GU&1kcmtgn{RSVhW z+U`uP>d7}>X1p4qW}0%|?6SHAEI(>mZ6r5tf!k?uLnptX!!+^xgspE^vpj4P+n$HO zssoRo2fLq6*0qxIsHDFdLn$PMX054?AF&Ji8I5zLq4p)5aP2KT60)3q%Xfx#uIhFe zD?Ilz0fh$MeyZb7mw*g!xppg14^Yk6in=J%Q!}rlGn-XNKpULTsm#Rcx(?TAC;xK} zzF4|EeN0rtX=Ic-nf5*|DG9y@q#pLN{IU=^I6#Nqael>LBpXbQS%mbFv1NMGf ztj+yQ-h0m<5h;JNe3I_wx9*5}Bo-QCEPtDZ9%0LG5<(M?|4lCj6gEQOV zEAK?kvU6H~l60)M3GRb8cqkc^!*&L3O9%p-Kfw-!wvirB8D3Wurzajcyy;maFq%AU zcoje+KDUSjKgthlO1P(gKOA*3Icp-dQYT69{7YoEHat^*;OIRKvxIxNrR6IC^tB8E zcD5l9e^RM>vFDjLPY$M*2nXACCaTc)$k?j8Js@n-d$ce7q1jE!wfFDY1L0ixyb$>Z z{Ec~;lGG8i9x|&LCi7)2vvB%VW@k~jQ^0-IIhGlN8tY}1sNLnI8|R%wV@(!BkU zJbHSb>^(R2KXc9us+X7g;X+;vuD#(!^Yw?2?Z&njf^wesMxKan9;zz7N=WxlUHA<{eA3h9w)x}i#I}gII4oMbp=@+~3`YQE_{Evi% zmDsx%Iy$i5NsFEtBCZ+gL7j82zNf^uI|_UXvwJXKR%@rK+^X^_STi6yrB(p7KJ{YV zX5(zPqFm*9)9sVa?&^t@VAaao<;xn^bZh1?p5KJ_8@gdYW%c?;zoCO2jf{7@^#``t z;(A|d96fNrKVq&?HX(k|v^DI6m7u5Py@S?Ug zQlBaX$6)_ZYU_ID&YJFG)&hyEzzFVNS zd{x%Uojry;k{(YeD(zZ{5@JUpT=kw{Ecnv^TL7o?r)o4f4Y(o%5U}6Uy3YZ{VTG=mWWhP!U-H%f` zSK8_^h64*oUGb3gA%xnu>zWsH#XbTBM@?d>;E>38>_v~Ne5tPh@~ePLg(S4sX-8xO zytHoHt#EfQWoObKg__wiZccdNNkr4WW_j7Zh5RY%*2q7W&o$2FJK19?1%B5o!hISXd0agU)SgJ~bCbDwP{`mqaKPz*Otm;%79z zB$x1cEcnFW*(|n#=vF71$WjAjRqS+etW+ibda!p1BVN1DFpH?P7bEmbY}{@W{;99- zLn|@5WNAgh)E({|n{5%yZ2-Zhc$#M{41${-ho);ZYNEBL1b5^`)n}&8t!gHk-a?uk zbcoKD#9ImJ=Xg(V|DY>_2mu8V1-4<+Q@gE4*jZl*BslGW>u`4^-RjWH9%6L|A;E8h zw#uVR54@}|h2$Bbs0?CYE7gSiHct-5!=6L3-n5_3kN(2*ELC!*<=ozH64fORJm;7T zv>t?^ZCG?7e7L1*tG(K$s`vRORAh##Gw~4~-#=BxzG8g~ff`<$eX`X_Dk0l>mhNw{ zb=Lv{UuJW1{#1gMsISBJrcr`F6v*l~NpUv&K_^gl-*4oT{6@wnSA+0(WY95?GV9~d zb@xvx;bqhwo9mm;4Pxq}L50Ve=*${-KR+5xS5H-(p@cb#!`uH7u=>A1C zM_BLo4ce(Ixz91r-@5YhI)!{N)0Hd71ss~Ix99r0JIhAbUz#l0fG_LXdN+T8Hi?Rd zI|@C@o=>59ovsbMs=&sJ|7!D&ihrVydoao|vdmuR9U{)g9_`|%ixpp+GXxpSK)ZS6 zUB(4JZAk9f^rSI=^`_<~AbE7Wc>CQR8a=b-&q)oQX?=924gN4YROn18Fyxk><58JL zm|TNdcK1IT1w=R2&~E~A6fL>Os=eN#7;`1;|6BufyhmD>wC-p~to{L%QTq*gY>M6G zi?-3D;KOD1k5ik6giSm((@)M`S=FSJr*en(6wQK1A9;PZb~3LL_R&Y54OxFjTrzE9zMA6fe!uVQM(Y;?lL`8@?UV(11v}FS!qbEodig{n9Lp=OB{o)NuHH|`zeJNLFClt~&w0MR~o#2~AN<8ZeS48nz-PkbWiW_C5NcJCBpXVLgtau}cYUVp0yUgVV zD0)GKK8*Q$3WDE9buxS=GW%m3DVZ|@WHhs`_qF`CDpNm?g_Q1fjkcEi+lmHx#c}Wu z2~FR8MB=u4*u7O(Mb;`?$%1xtH)YAAK0WGTZ!Ygz{cpQFb3DZbhF$Ezt7a>Ppp^-2 zmBLtq>e}2N?;yc~{YIfQrTH-dW2=wRl^xx#WyYL<{*j6P>x3Zt_>EKJs4IC3Z(qNO zw^>vA?R5)hk_8iZ$0a$K?^U^P0SFxiE@Qo;GSw$kGQ^UQ?p&k z-4?cXAMAKAq(IW@Ql2hz*c$aM9AItWE2Ui^edhKXYHa~zhdV0$CF-$aa$esJ>JD6) z`1a;sz)lwl#oXrP3_EA}ikFZ9q>^fh)4xtTQGZn!9-WHMI*DgrE z&$@*bpH8fPKFe}<17j2<7ed3~er2aS9zLrv;j#hFAH@~!t_LD)&Gis?ZnEb(L_&*9 zPx{&rS`FiTx*zeHe$4juk3L;8Wn;OemKKl0SkkM^1CW>Cg@vqyC zcWS;aO3o5ys;|9me(o|=J3MNVW_Gv4NKpHYx~UMLfCfikac?cr zaz)n9u2b;_D3LpE;m^8^gU;HmMDu(Tm8KttdJEl1vbc5&zH)xf`C# zsWuO18!J@|QrfJDIkR>Rz2?|EF_)GvOCm@%y({tm_0%%pUde%y#OM6@2QTnXJAIsG zOt=T9!t*zPFM^j-pOvod8+Ll&9EI3qUJm@UILoy1$Z<9Gy#@~Xqr$U%{b|1@$u3mI z*|IBsF}9OG$l7k-==QKa6e2N8n@6iGSCXx@TpL+oXWr$GY4Wz_{vaN0y{`Z11rdC; z8d-K@-y6G-(r(*7j*T%(#Glt3(P*Rbyho{rDxoJ#APSJ;>dS*YR0k|fa(T^6-tw8o z$N`z9{8esvYw*>HP;MZyH^=vSViLW3_v7=N_KFiT@Ru1m#K5=eGWf+Zv%z85BT8p_ zjsosV6`vH?6{I)f36_eZMg+K6Kk|ZzfiuDO)@}&m#lg*QGWSK3^bFg?%A$ zDEt0tvDG24T328efYRK3MD}ar1l8kNeiPi1{d;F1me}~F0z%(YL~dZSjab}`9Iyy+ z^Z*B+Gmad{Voem^Jpm1|4Mqnkkka?}Y6GckF|{2|n1Jmeh7VXrsa1UgKr0HUXS~rW zDV248ABqHY;Aa0Us*dm_CN6L|CziR!$c1<_#UCrJZO8#Rkosw=QE;oB)W1Z^ldjK< zp5Tuf<<#4oJ^JWr12<3@IazxLyA_>heV8PYSKKodUG3@~dV-~6FH~~5Pj2T^z%@KA z-UX~-h+y@znU=&64@+EuYcyN>s_Z4}i3q-@D1zo-!w$%%D(1#SL%SG zui;g#&&*?(XXfj(<8jd2=SFh6^be$=<%o5RougqFh?St-N8&XpqGA=gCF`JXHgb`8 z0q~eP*d%vPrs+x;yK@x&uuMksXn9UxV396Y^_Ww4Ar~fN5Sp4N*4)oCHEKXxxP8;S zwnl$OOP8SE=qAI808ip9ZxWomn#e@!MIXa?Ez`DMJNLS-7y7&4&en3$a!h`eAkdqdooY(ywLw z2w~KvUIcF;-Sil@J?G44cDB1h;a0Goj()ue3oBI2R7!-3hCiEE(b7&8mwprs5VI{1uB7Npx?DZ!(#frAR-7mGp z0E$pyxkjo5h=fz(zeM*i7=MR>pE>ib4>Ub}*?})uD8~ZsHb7;|R>Z=3)F6C(&cgta zni-?+lzX{0v;J9~5f~~g{(Lx`ig9QvouS2KU+6Sa+{JC9CvKyRPj!Ks&a*vyV5(_0(jNY5!lY>d&75Gk4xgtkAEE7K#VxG;(n2PVh?$n{-txIvgyzQb1ME- z!78xaPNtW5C~UWY-)|W+kU=C?pTl)&JnhkrL%_rvXF2h_e~Ip5h4nYZp`d1)<&=?j zps_qxIY5V1B8Uf`Arlt7r#S3b32wJ>OB3JeayrnE{&{Qpl~fU%#>adzOp`v(%*HwK z%!t=Uh@BKpXYpMRJ&N|hY{j#C6&W7qxdhw;Kxy=;4wDAX!x~p`c{^NhuF6tBcttln zy5;e_qfWSB3}|EvsnqoL=P(?+K#e6YifCR|7kcVx2z_yqFXm*0>xDq zVM!z5wP@5%r}Hq3Tk%BJc9u8`yd>MCw^sSacl|!Me$0X%40hV^p0418_Rz1I12h;{ zw`84@OSCdNk?;X)-ei60osziw#s{n7G*yj-5^H+oS&5wZQx11aM)tXxVFs%(m6MCr z5@QyR6~&K)<)%4z2AY8i%QI5uz8Fi?%5Pp_UM%^&l>qhYG>#bddKt8tN^CAQmPRyLl1%j!6PQMVyBW-LkrhngOuV%S9!VYUZ1*>?CGKGvHEi&>y|#GhPik!Qh)x7?a$ zfW=?@@8mOYqHKPC7coj$0!Nk~wFOhU%1|5PN2&pZgD+s1se*^Urf?v2!oTWq@GhlR#HLhk10XQV1Ef@|A< znDkhOa7ZdJg1y1R&JrBgi^Mk4}7uo6AKQ^m7rf-ui+@#YVrF8m+E> zRdeLYIaQC@{j)fWvFA(q&FRluvRfd7_ekjo6O(Gc@mAOUOQh4$mBt65_n5rg2UCbo zmO)u2KyI%(()~pD8eU}9Kk3;BCR{97S4zB#pJ?-Xol1xWkpt%q9URmgj2v*iZSj+qUIZmU*0dadyqg?S23>Hr zBu||-%T((h!T?$K$;+H{X0x8HZNReUGyYOOGZ7dtZ(COQm7t0M1+gV8qnJ}78uTJN zenaCfFp+4;jIGXsf4=c`R6$L*9%?Ab+h+myc>_Eu!A~cs$9YqSjhoYHL+u$_((D;L zy0M(}w^g?6cYvJwMsPUk_B}Zh1z`0qZgRa}zW|AmwEjK;!I^l6O>2ELO;8sf* zznV)+5sQ-Qd>SCV5^bmT;|BWvHCjpTSfjgxIP%-b5bLVq_cd+5Gk&AwFi%KMk|VlSt1hM$TG+F(LQt^zue zpOi_zVcTPx{7*af$*kX)GP<zxNaY8JEoz=})u4?v{Ql$f_8`1hKMgJc&P*de1DqH$>@p5J z@%|Tr4LW8nUqHahK1X-6)_@0rHq0rREAK{d&||UD32+A!S5s)vxLc0SSH@&c>u|16 zjKR`oQ)~9}uN2lBg+SDxjje%T3F}zfk-`TIvDdQAyIw9>!_F6SLnnWOszYg!)fIQ# z9@{X zyl_%tMjsr!B+>co0Re@R!fLZmhPE^Lq16x(XwD#J0RdfD@ZI?oOSkRG6bexhb4>=$ zp9l^V#(9wdx&X7sTXZ9nlVO(I=Hku~!L8|nD`IPmMNvTkoN9X8KC44EEWtFUSgZCq z{#?*a^q7LPWusyWO;L-zo?x(a1CalkvD3~wBq&6*W|`N=EVAxP`>j(bkJEjAT+hRx za`6txlJ3rSoGOD!eu-ISk;{TBH9e4ziw*p?{z~LZV4gVh=B5X4J_}ckt+7`%Dqgll zEqwjb1`$$Ry)nH+Z>xc<5V`E5<%NOkk4E}Netko2`ZkWz%(vfaRmeF?XmFl`a^m;h z^v3N*q-ab+YVF3_##ObeljIxjLd8}}lx25oR1elJrxaT9%*7~Bb6ARo zxzD|)>&{MReL6`lqieg=)sFg_DoXP7Bp|gv)f7;4^*v7e{ z`LYgLSbIqF8hX_0tu>|mu4LjvcvTN-ng8^e9=U9a=tM2=rv#S=H>@wGQ~MJK~`g zX991&9eU9NVjp}&84qCXQ*~*!dgj|Q*mmHx4HC!!?+{~sRfpz~g6^g`|4q~)v64L> zd+rw>(%|b_s(hR%S~rLriRfwmJ|lgTW)kKe$*1k!;|k){;c1i#U(~J9%54iC6R=v! z58@28aarAf+Z4LJb(6k0HuW>i8;$v-hbb`x3vWTH9D&5kLgA~rp&A%^j{Tk5mFz<9q`2$R)n}kg{ROv#D9})=@pSsA!EjnQBZ_>wB*OBE z1Pd-5T)^VfOniS9Ywz2(YL8~4ftOz=aKIT+2?QZT8NGybI+^=~slJP3cg{P&Abd2Kc8)=lyVyPvARxgTdOkGoj?dETw97y7LL*W4*0Lx(HJ3rv-GWoQ9@Pu>3U z*Z$kb(A0;MjIViga*THmix!GLbQQSBxX%_Z@3u6^jlip{og(Y1UkS}%@Ktmo;~dci z{{h}s>DCx7Dr9mOTe6TwFBFsY%bl?XxTGo2{|-F_O3m@)a3&%JwxI6;9E-O?-Y>8S zLHC>U-?PTsaXlA#pI7Zav5Yw**<=5s)as<+4HL0GzIhW%0w4{C5Vrl+44q*;%%3xce;=&8TkxT8Z#B$oydJdu|k)uv@xaHmzPNQbjH4ud4CJJLUziU zP{G_dYj^ywaQ*(>dhYDUpSA-H&(?u_0v5GOyXeSTxaGSN-v87^gRkn2rQ`Jm>H@%w z@}BPg@H`o&JE0Y&CUJUX$!#*yvj7MNX(FTj#iJM_-m=`^_~$lYuVkL4ixE+}4dfRS zf^SI5?clsawO;3nNXeQ_?u#Bh4Tx2$kFskKGZp5RIrF#9HOES!Q_mXCtWs0YL2MtU zf6Wu=b=Uozqha&X&G~5cu~u~(wfQ)>_~xTr0`J_zNIU`E3~Y2&32~`7H(3TxQnCf6 zweHz8+>=<*diD5tP~mx;6?|x`2f~Qg0BT@-|9eN6OphHH;_c(Kyu%)^wIG4;PP7l_|+xbwc zr!2e=_4w-4-2vQYxAD7+@z(VpWqUZ^*V2WwwkdW~3OdZF6mIw0vPx6nqYY51c3_2J zAsh|guKlobFj4Iuaz3FGI=sh4K9cwL@dKWu0taJmLZv0XOOtI)BJ8rdjWoB+`Z1yj zZ{ke3AD*(Rr%=t8JUtr7Abv0RqmSQb{S##b&*^&nI%Y51ehuQFBw@d%W;v=@tJ=15 z?+I5Y^~l$>21ew7dzWS6wMM;i@|_=xBSM z@v$eZjav={IW?WEm4pIZ1T8cBAMDR96ya!H8f;o{Aq8xG7XXL{LnF3`F1lSN{Zd5= z!pz8SldxWiWX7d>?gsd`Q`XFO&?7)zhG@QTqo03H*NliWt5W}n&9Fs!DBK^<;C2a!#E)1Gi2m@mh*>JJ*d3 zawzBtnjkgbTvgfW^2b;vwY_Uos!L7G967%iOhV!dMWf0IgdN^fXDjW; z4UeNai7pH*d3Y8>&!Nvu2-k~0UUq)-`_eqN{nj$^sL8uydxO?^m7{3hJ5pt`Bcvnp zs(Y8|OV-ld^a|DE?E-#c7IqNBb*-k3IX&bAU1sKD!{dDR#ci`;|A%JS?Z~J8;fWsF zs2oRwdBJGiViJDuYr0{lo-&YNTS-vPdy>o2&WWculR@$u24XJwr1U)j>tt8wvo1wvvFTOJNX4y zq{T&jfWys$R{yjyosImE%6O%y6@Kb3A4_`(7__PVC-Sv=cKB*IM=*wZg{KL^Jj9sB zq@S_jnf{~>!rvOR+~HY}!QoLT-oJh`PHja0_$L2C?y$yr=9u1t%O~wMQ~0?)Nb5kG z20KGYN_-Z$be{bF3VAfm%kkmo(6Ii8tM^AE{mkbMzB#7hsWV}L%fma2zmFGRMiTm# zA3%Hi zxd|4fv3@z6!yU43$iNegG)T$Mgg@v;90B|VawVzM%tS$4Yx zlu0$n?n;j+)`G^S#n-Chfr6us(%>ER(XcR`c(+1Z^El%X{kNdN7%bDyXO`UW)=3-{ zp&mJU+|l)=OSyTrPN^fj9^9cNWI&qpH5s4R7))oFk)WdMA<8FPVbr9hHMK03T2{gI zq5?_aR4_?PJO{Z?y!1S;dWBA!Yd6rm240?mVAlN{bVz{|ZXV8hK>LtJ5L0?3Hvv%@ zoUvoy@%+AiiuurKsbAWEzdujy*#=)7Kh!(VJeT58{3g<>{!M}3l<1|QPJ=`4 zpUe`c#+=$BDd2DX#DpF*ZiOtA)(l&h7{GcCk{u#N5>Q}+ zdrQ0CTVk4W()LLcjLPfipgT$rlf~qd6@>Cu=lsyKc)8L5rC0M;e7}SjXQ9_K{IX-s z+H~~v^{E;9B`Q-Fi6=%~t!yKvgjzkX_xv*84ecwqu@qj2V>Za-;t5a-DTgyAT47sF z`4(EeYG(&sBxhhtP%U%*C1(vz6R+~W-3|H(Z%0?juwFFr=TX|@q;JN#L?S*-PK$R# z3yJQMuvI;qg*v!79Y=?%25jg93~C#Y0!`6x)9&dYI@r*kY3CX;MoER6DsJqeQn-xXA9Wj;LnSJ>klusIROiCdbqlA#LdNilD z=n6&H@iGYhdrL%{PqrO>t`jM_0~fKErzf@&NiK9C*~=}Gl#oyh} z%+!ykuCKFpYwzQ*4s@%W8XJ_uswe7?>w;Ts`~7B(71rqDokCX#1^!_YWqe>;cX4nM z|AF)+TB1L@6$S2=8M6uOdMmfW$thsPvrYe(hz_n;J@Ia1O#YmtkvhGjRtR-)gWMEm z63?I+u4HjL%h@;ze<{-rqOm$-9*tGCE9XHPn6joabxwWu${)QhZVU+!*G&1LvMCp52l zo9nSW7$LH(K(2qq-i^)&!iQBXUQ{30>BuQ4(DQd$Dc#**3b-k2kGFm&L-8X2Y$*~w9r=1CjB3}-Jts_UxBk#v7Te0aQqc_} zjsHgG1!VhtypuWBtcO2)Ez&j%BiRT`5g3StXe=@YQVzoORYuv5#`wHD{tGrolwyot zk?hw~IMpTRM-~T~+N`MtV*r>UylT19Ve-o<`LZxZ!NxBsUbvBf_TbOB-WwZr9+?!u)H8Nw1!VI( zF_;S51xq@Pl9x2M2u;$e2g}+l;2f7D3i{Ox4rKhGbM=CyzWgUzHN$+wW${W?Ib{8{ zppP6cn2NAmpBk`?riQh!_8}QrZd>HA8S}%Ji)OmLHtaigo@^J4YaynQoczi6e$7e| z*mU(h5kVeel{vXU{tR9z6^lZh!61B3pN+}swi5My)+cuWoWG}&zpRXw%E-paqp>JHqj!SK`kbBh-s)b6^Tb5hw;={-Fe{+||WS)vTxSq?Hle-6LClvdI$|6`O} zUS4k7NEM^actDMM0@nURx@e6H&RzaiPtZeM_~W}x&n#Fm$vT%dBy7r?rIhc^u%^ZFk>P^bD$uVf#+Y&T znQ%XhQmDXhBHpB{rP65k$zYe>_-*1JyL7C4F%&>$abIMUD++7N+^**1-trFK8>Y1iR%<6Vq!8H#xy25?ZOUI8-su!En>DIR9 zo@cSSp5<&YVO7AZc7rfD>o|w&DQ!E`*|jpNaUs~5bc(0_*@l#_ev@y-is7trCfdi? ziu2&Hn3V;6MZ~)f(-An!cMP*zQ(MwKPoy+%?b-UwbNnKsq0|$Zr6mx)k(mQqK0g5Ew8%DmR8XoKHmw_Ks zI-^t@FRrQ`hc*s)9R=iLo5CZ#4Xl&4Qzo2QQS`(S$p(cf#ag<`Xz2?>`Mdf))Rr>@ zlNPZ=zCT+b(3XZUZ+Ffj*q=;$aJ5rd-CrU%e$-HQwrCW^egCs_BiaREfIDK5z$au&@APX{ic?A8h3h4NyUGBlm z%Y_}BXX@4hcJt57EX?7nYLeN%-_DOvpEs#_I0f6CZG?j=eSLAX{}hvf!H3Rdh}`dI zOR5tCNvvlUs9b|Gu4|MRKljkR7%fV=XfE4rP7M+G9x_HOoYcsu%eD~)o>!DHDg~#h&&4A2OAER- zE3q=eSrIroc@2jzX7#}LP%}rcB(j{$BJJ%=`fl@53r*L`%9H|uZNihw^cz&1YyH6J zOj}mDiO<((E_2}3d6uhQ+V6m!UlV?!B=79#7>pJVvnt@h;B7S@+SxP?^7cUvt2i6y<_(LGb4dJL6mX z;4SZfSCnZ5TJp-Rc`SKtC3;fzTamW&0_T#CqK8KMKs7L%lZIU+qjkA!E)vU$~&QDPIZ)Dc0`640O}M3v!~>GB=4AuboAk^ znrtdiLtwO16_C+O0wmBDzud{d_=($8#=Bc3AlKxV(f3j(>W_|5Co)f~^ zlV*-fnLyeIQX!QUDoMna>eg(s#OrpQbJVbTzjJ@aO(6EKGoXARNsdUxLv!0zyRcN= zAwKmka?AmSoZ3YQPX2^OeqA0so?~N>NWOIp zI)NkCSxIGd@Mqr#%stMU>CAo#pYtOD^g{!S(YjeX zSAC}@U}W8fyW_gTI;|pk8K~Ijhm6~)&<=;0TQ)pbNkTp3tXBOI3C72+CIv{WMYL_v zWI#69E&nZcA}eNT-zXwXC|_He`0>!)Ug0Xm?DAB(l(Tyle~BKP0vWyiBlu+|%m9jO zhRA~mKYkI)T!N1BecQI?M@=PWYKESQH?_G2l<}_gZ$-Kjewr!^%+WPR3ohIa)jI%% zmR-HoH28wUZ|A23baR`&CvZkW-6lG7c5|)8-7MccSfho4y`?1+Xe^!^dZ$TQnfA_;3#x#KFtclBGIbeoGQ`W8$o&%$7KK;HXb z6>A=2#A}h~Q1vXXRb($VU{Vo=YfSTi&v0QK4nBcx-e}-d0vA;uqS)Wd2>VbTBc;=p zh7YaYJ~5D%879RDO;~@w53LTNiYyX+iDW=%L0b%SyV8%`ihf$8PTMsJq(6T#RcYo0 z5)ShjCkCF2{3Sx;^_!oyHS4k;XO<9M)G)gN`4KqhI`6~Kc{8^u!#RDu_A8N3r=5xx zVW}7-jR_+IV7t;>3>=5o!99?p{>G}Oqip%S1+55_=8ugr(Z{z~4-rx=Jy3f5MhOBf z1`rN4|8~i)v6}*a1J6gvj_U!x@s2pJ?Os~ME=BqxQ81=90$sp%9WRP`Mqx@qLH=wm z4|Gg6J%M?66Sk!MqLx%x?z(N6;=xOuzM95INm*Oa%J{`xXFE7nr`gkPx z#*-Jzhop*o0g;^wuk@Jm(`=h_9IKG{w5>z@<(dg)HCMpAOET%6dVEKjvf=FB!sizH zI~a27uL)sJz%7h+{xW6}9(K{tdLi5L=-yQKopbJdi`??463+H4|GWEU25Lu%L#!Nb z$-shR*s`9T)Mmq06Dx(_3?}nKcwK*pjIDkqQdUs0wr!}fk5{w)OPQcteG*(ybkl#ujU+>wo?tP7BB9$U>3WQYRZ)zj)djIR%Ld6`@0@+8RTPsPxHokUfzz@$De3T*x&ce+U zGy3q*GhD}O)ScVJMOT7Ib1rLNBsxS`rmY|qcPo2*UbG7~IHuD#vRUmOKbI`v9mOVY zA_?ox?1Lo=KW9(HN(9{zjncma+mc4b<>}ly!A4E)BZqhh13Gu-rr0pI&TKN+;#lXaO@|JQd%IPMubBJQkFH8kx=M!BsMK?- zKVgfi?{WtR5i2&UH=ouIbn@u93p&$9QkPreS&<$gVgZqn_4>@o5VjWH4zhq%a~E8S zX4<;RhHBCM%|U+oF$KIBQsXS_c}+iJJx$XH)R{~tokpA_Pg`(^>foQD0wq8Zf#)RY z+Rr<%$pF1=2$zfQhc@N@CArM#XZO2LXS`I_a8nTBX#8%q z@tk3AR4&UwE_j^s%jlzifG>Y?vM|Kz6V<-jG^ z>`pYUcOx&xqId3_0-aiM1 zLbm`H_CQ+6jlDRhs3S+;;$NzHu`pA73adcV$IO~nBv z|E#!gj#eOFH>$oaKT&vF@kX$)8OYxvU;k#DEn?fet*>iDgQZ|NUpe`Ofxy6!H4%~E z!q4k!I}N#Dd8A0Jj5Lq`$Di}>Y{YvSk*mWTRT}HYmy%ihORaIC8P}=(J^UN+lHqH} z!`zR4<)o1!{hFk~{@CtRc6GJ$sSjT*JjRY+uKUGpor(XHi*2v6twsK7-Fm5C?F4@l zK0EI=@B1dyGG=vK!DwU4aGn6upnS?Kml`KNQ}mIyRhFmo+#+lcoO)G{%QJ6{iL#k` zT$1CU*WJEV2wxv6gb61fuT8pU{)%Y?e3M^L6gRW}6<53?K+rj;o_W`VRPiVldLx`NYcyFzaR2O)M~d_a5=YOj=X!O~>079rE;zr%78`69pE+PY$x>1Iu;g2GAO~ zF#9z1TR9DH4(%UeeJa%7MfM2kS>Aw88OpjD37SXPrawBn;_cb1YrcE4w+7im5?&Ib$mia;YQ|4vU)?2&xEOW6$ zM?HE}GLap}`aF>7URal7Zy@{DlzM=+k?kY0NhJpeGI*^06;jFxWsoyZC?GVQeY(}# zJB9l^lH85HNAW1+(ir)tn%Td5AI?T`o`RUHvM8EJmf|nrX75mGs}7>FT*}gJ+*McF zpCrS~O*+^TQ03XWVAg`Lx7S8xSZyFs@5l@MKGka8;KyRka}bXl89Se9gGrh@Nv@-C zeC2E@Jvvc!D_`l&3XQWPnFu_5qL>)XZ+&?;n+?pC7J2>K$NYZPYfiX^6qzpNH*#+I zWRP+yPwnWYw2IjxV#kFceq7a=R6}MYe=Bg~0~yUBkltQNX9Q|aC6Tt{Kf-EL9E#D$ z9Hf@vqwFe{ouC%fn*ROW@0oV2agt*T*yGlvn(ZugNYDps_HW%TGOB;t^r;doU0&>w zZKED#!Co7<_Nc7ZOL%9B^?uG3O9tz^+NO@;TUC+dSj)3~&5nfnQzN&E8{;L*NhGWW zhBw#z$sV&y( z&fWx^tM1I3+Xo)i9n%dK)DfAI1NpoMV33+Ma|NF`-A1l)Agt$SSdJNnr=-AL1Q!#ozW_m{OSukiS+1R2>iE*HZnP3 zMcu>dZ55ON#<~6L9u5sMOJZ1Lk4uI-R7py6AnJLjt}PZzya>VoK4uk35B6@oXBFP* zAh*iEVdRzn0BWskTG5&@XKNYzT#gPl^RSw}Qa20B>peEen8LKU{o8kDtnEI|?#kM0 z=9%s#or4IQqWcQBbEC93dUDD0Br$V>sFA9miml3KA&lJ(-6ut<>T+xZPFR16Gb~U)W>p(|LFVgNkC=*(_#BVOO`e;x=LT zg%_48v%LD0tWq(!EG^0WD)q&znw71D%eE^iS123hIR5}@vjB-w%FxPxa$D|!=z3I3 zyX-<)p#(V~HA5})M);N|krRQjNgPvc=aT+;-anQSzbJkO;Zn*&^=nrC${CQZ;0Rio zEZwa^lx<~9gZNaMlnUBxNhFHzjs$I-eQ7QgE#X-0ndB^(JC1S1A-MByXU6liX^U03 z-NG{(Y*$wo8s)T8CdO1CbN6YB_Ny2e07wwMHW7{i|o~ki%hR6j6<>!YxqI(0Ou5SN$!4LRfsb{{R}Zs9r~;+S&;fUhMtF zL7X3dN<(D2go5%lvhozW4d0bTrkE}5ypb=JGZL&9u&TaY-L1Pavc1&Jxm!634{vI1 zwWL-zi~XzSIc#lfepf!^P?;7an$CST^)9TYYtJm@;%)(}%Osk`n_R4aV?}+kLY)t( zt4C6`vy;t4c?xt2G7r|X^?9b!;rmd*hI6;ePDtIxaaI8|kgS3&EkS?zX&Uedt5Kwl zv`-(9gYQN;2Bo#Kg3Co)Q=a}R^4?GCIuoL*ubmT z7QRdo%8pv$`mIBz-wR}U?huyTLZBb6D#VuZO(I?3fpBqy(SO3LKp>w^n^3eqWQ?17 zimM5GjXhxz2Pr4aPo-MbA(TWcn}mMkkS+GyZwTX+^$AmT<~PwQ8%Vu~naogKX8J8_=X z$un4$tm1=7jzEzth}i;e`ShySL2iU%X-baE>r3V|maxGJupVYlm^rEMEkd+O(N9tQ zRnbJ59KNv}aIuaEl*&}&>FZxAe$bK46t;-t1I;9URrO4OiKLmcg*ygo=C9gqlwVo} z{{Wtc{{TU+prfiF`fOXap>whb%d?(Ydsd&?6=zB8?c42{;MdEYk}JcjiLS6=E4Qn9)`pimD&4^}Eo`?9xh0dK z6wk8TeVt-sv7F&t4r+U?w)SghB#kS!HZu-D_Ns>GH!(JssT~?gtsWM+45az1(*~ft zdpmn;X`@_8oSuI5H&y#hjm$vAzClIH=bn_ysVtRZkzBu*&c+;9Nt=3-YSShBaEoY} z<=LN<{oiV({i$a*lOdiWE@H_8K9zpnMz@tFSk+a=cs{j_uSFfL;FjG4(NBb6++#gW z7aAL&wcW0tCaE3Lpt&22WO6FgeUkd$_wp~=N!%K%oi=?ZPPuYJz*qNbPZYAOD)==CoVTM4;!;IGD%n;2pc~Yz@r=xS4!PKC3hARm9xQ)ESCwv~2 zp=mX}oR+a(KLmX5jG96q)S{Bqq>XaEabT;*J4vfrq?1^}i3Urz5@XV;>q`yxsSlRz z#x{&`k6NDU;(HxY+E~_DBv7o`&e7{hfla*otJ^5%A1>dPu4>OC+pu0XjAs>6CT(i@ zytgS7Cu*?kic6h7MsFkSG7=8spGt;VJ%Ze}gAxPhGXe(D_h~e%TPSSqV$_*oyk{O$ zxyA)ar`yeMA(32&V&o`18X>cS?QU-F&hR7{EHjGE;8N6cZtz1Z?Q-Lj-A!KAH2(my zNA{Zuf|cc?9ZeeMny+zfak$8gRYvaBXI9*%D|Dyw>=*cua$4ONZ^pYIKSlSD8@a-CK-$RegP}Rx}Y@IGb?!aoV}%CT$d0 zw=rHhY13~!^OE@ln!0U~I|~h@ zm+-S(OcfAkpKjG#Um1T1i!g?3X$ z5_$~RW0uZ4TbNMGb0X!HdV`uJ`?QNPX2f7?ABq<`Kv(+t{ zKQcBqC6jN?IviJ3j&Yyb5f3;N^6pe~AwPbJ7CTppacpLdhFq`rscmgxm^3qxw-a#> zxuWhFVO4>o!l?j-Ip&T~2fA4%nV^8%PSNe=sTkz9hTUQLZ&-fuy-hn+)CQZaLuy9g z!B3ca^V+Y05Y(COU&&1TjyknFSfo*XQsUkQj#!#WG1OICdsrUEE0vW+#`E&`UwXe4 z>@r+R?ehi7jyly1HC}7$lrSo*FUyL-?pZRk-AtxWo>lv@4h34c)gMRGNx5JNej6D4 zDu$hMt2N!1%xB$&IO$Bfx?9Xgc$<+AOlOfzNTf1NLQQx_7=@z*^C9V4Gg=X5Ez!h< zMmG-C6}{X?Zpg$)c=<(Hia{RnAI#0pD>bRBRw0i|j@H$lTZL&DZ4K#E^sO56N|ElP zyIFVgpaWJmJ>eU`SodQUJcQ|!IgPy4?2XV?yCPkh62|Tu%X^!P*%c;@_J(S?V-6z{ zt9g)voQkWXM;-Q?eAC;YCQN{Sl?AP=sgraayX~z@}{8CTNDuu!S@dMH8EXG9!gpG1OWdrVgYfJ4BrNom1wpimIAn4etc1aUWCZ#)hZs%}O{2s!r zBiyB>+KoQuc$z@qt7ne*rfK?Vx{V6ls8wQGt<1}LBb#*_aB}?(MGc6K(gn7anVE=u z@x^Npl!jbsNj1i8l*Cu>OnC?1mKbfKx8LRYkGpAn)}*n=X80m6jTDX#ledw@L#t^kd3cKqjR%#3wFeFLt9ot3RudTHIClOK(A8X$ zJ0A_{vO->BC73pF4Jz8j9psZ+!rNo#u4!KC*GI5>mU7ZdDUV?t0XWTBSXRo)28u?1 zF#OwwGfv=AxR^&OzTYFvUym$zWH?7B)XJF#eqWI#YZ*0q?0^}Ga||N(MJZR^Q|qk zsg`CkoxmpH&{F0ELkw*)`H%Cd<84Z|ip~4RA7=jmo_^I9l4OS5k}|ALGfN|zk2?nf zKA!aX%VnrxjvYWeEFy?TM$_J*R%?x#pDv}V zdt)5NU&f|}-ZtE1V5)Q0pi=V`w`1k*=)$D9M~PNA$C|krV^XDZxojfo(Z?iAt_q`O zgqWqoqCes}rmGLOO&lc1RDILZq=wc>pU)~2%iyRzYJ^v{l6Gk)knWXpf$dC^QzS2Q zj7;N^R^_)a{`O`uD{waRnuTmn+7ss`N#T1MkSQ#S6D+X}(&OgEUbWK&-s_}8=;ocinIGeDtZ>LkMGXaI8N60DSsXO678ym#`|?#Vje3&PNptkvWHX7?pnLt5K|m z#31A&7Cyt)tIVvZB}Os^xxM;;q}-ywX8(vKZCd057#~86;;TCi^koT-=LCnWKDpYI!wnHq8ia;@&nN>RYbr zou;0~?&TgZ%I%%R)GMaQ(D~ng=inaIZdVARzmi1O_VPGFTO8GiE!Njijy9Q85P3CU zP?6VCwDTjz$K{98v@f7VQ9FL{pS!!YO3)<{W3_|KFc}t1eEAh+RvURBBOfuS6nQbb zG+|t)1XH1rX3}5ERJCK81?!qQu-`G!ejDUO-%Qdw_lC6RK`xY`G&y<3xP=^PB$Y-4q3ngX0x zi8aFoh~x@MQfr8$Xw&h3}|P(`zy7= z?ujtmR9DhVakZ85s&IJpt5Zz2{&Ii-4UG4w+89xS$15>EHr#Ps*EZ!SGa2rP4lt*h zwI!I9M(I^owrUH=cKNa@gmKAH-lX|thB(W7%r|G!rYlfd6sEH_afLDmEP8uZg|(i~ zAg6w`H6}jH9p?zOL<~dKs!R;kjod2;@O7JEc%*_vaY*Ze>mJaRP7{oYc0;uV$OEW;tljbt9D7ryx{gb5+Z9H3)E27~dF9!*#51!T8m&m> zD_dM$EwS<@4y(r16@Jd`YPtu~*zjYMn=7 zy0y$#63QgX_32ES5j1Dcf0&)$g-)}fM5I_ek~?h-wBAy0&RIeOy*|}-h&JPLwDus@qWx9?jQ_5)@Zymkr;!dcsG-4^Eh)S=< zFgsK>#w%##&ogA;)rYf+EnEX3J90DYR4x3~k))C#x6C1P-lq-lQBsH?vR`BlULZOnEdEoB7n-1z-!!M=-W#Oj4d zEP4u~rpVU!mkDqC=vf;q++fr;@Y_RX(K#;je5i5vkEJHk15Upl_7}lbHHQ#KT62Zs3D%}X`)y1t@jdG z^x~lgOO5bHD0KsZ1z%gupv7+(mM}KEH}|SbSfPg9JjD>m7?ZcX7eus011*K9OnHxw zn-s9!Nivpbm;p{~+ukgV7e8t?Mw z-(w}#8;IAbt23%esBeuHGEd95xvLs~+F`t5(h_qdndMKQq-vR;4fEZ}G)Zu}bV(6D zOoJte9V)hyB3v!28)lA0KQl3_x7L=oSD$ar+hjX)j#-CnRGWP3h^|q5wV3|^svQLd zT(fl?H%_~F3&E4HtldG-y4hP?DUm*RBeMF|j;V1DpJvj;1dM)D80nMVvEb3C(xaDp zi7uyKnTg~ndv`^hZ z7{t>Ly^mUD$CEURZ*2ZlOUWz7@;jP~lu4+_E+Ym<5jh7C5-0{&!ZxKe1i>?+(_+Nya`78`bOe_ESMwHEDmSu$BZ zS-To;p>Mj{D`-?KxDtjPPC3O>zmeqAU9M+)C&mPE@+$5OdjyhIR~|_p^3l3AO&r4F zX`V=0*_tB|k-8o+RPA(|vuAA}KWQwvQ0J)ktF0swOd`9Lk+$F>jEvK`jLj|vu(URB zB7^)Ak;OJ`Cv<`}yGfnCV#}T?^pFCi#xuGSe)0!bO*Qfc;vCcD(GZdT^z=w(<8Z8cgIy}xE#h?WwpM&&(5YE7`+ zT#GoRWJpdWDn9ShngZ3yv}<7ynM<(@SH5Zsol$LWq}giIIY7Q@o)5J?_fFI8q>d$> znr0adx13X+WR3}7iZLUF$Yaz~kwiLkO=OZ@%!P}5%O7!4=<>FqtbMZf7FiWaq;1@G zHCp0n+Rnx(KYuY?NUVAqpHw$m9gH`!AZvo^f;{JfX+&k`(nam#$s}eK9G7l@deuuc z5$kC?DY~_{J9n>4RQi?G#q&c7Gejl8lO2UCTeY2(*0$J@RN&uePe3^$83D-w&3M{@4Z#b$Svcw zv$_%sq`JC~k12YJS(-bkWx19HXroQQXQ34=mT=kIMRKsHm4;-HbHyFYt;B02cQLfl^5hTU6L-AXpt#&PFkmd8#i>~@yY-y67OK0pJg#&K4NC~5cC8h)fNE+J{{ zwQQ~eSlW5<{E9~d``=1?9Y)qNvqZ0KtGp83 ze+sJ#OX3f+GdGnJAN64HDJd0WTHe8b;T@ZJ@}rrAjk~=;rRtt-yGL(m^FVT&7x+*2 zs$02?Z62R9;@=;9a(Jt@{{Uyv_p%+avf(!W025ZrR0eu!Zx&D576}LXypELH13VVf z$f`yg1-(zLHtNZ>2qn0h;oy8_QF~OET7qe71%ym)CzV5OZkXM2h7Ts85n}Rui zb5U?*3p=~7B6y;ZAlyh|KI(t^syUk84L%l0*5LyZr9X`N3YPI^hgTNTM6g@Q9(SS1 zKGh7`WwpH4Q9{{8lPH97nyZx^hOgPIW8Nb_Xt??I=alxV+Kv6ajk3L@M=S!f1Kjni zI@XpXn%Uq`XAAQuy=N_-_Lbz2%zn!nMpy;tSPCvO7^6OAkP|CBuY$enPgPq*wQ)Sl z1k1vftksfOqO*-4R=o{`=c)SCy2po1kcPOKq`H5Y#N7e(u6Z)iL2qsr$s=2L#{U48 zPTyK`>GSC`eY)ivQkq_WcgEk&u16wGIzw?Gx0wLMDaw)9)#s-{(g%=wx&>J3J+E8pB&K_E6z#w0!WdWv?ax^|x!mQR{y`4x8c&l#s_+I{Yd zsSVYvWK42o&Q8--q)9fPC8W&*!6MqH_gkIR#HPBb0Ycj94^)C^{1U{`$ER% z&NT9*kuZ<_(@Sw{ad~ST_ZF!Vf)@&NQbirKa}C&xuR;e}e2=)SWBr=rP1DV-%%5wT zOfs^JV-%}*J4G4awF6+rdg8Y1Y|Z`Lm!JoZ1Gfj>vhOT^v@blk4%Sn+fkTT!EkQ82 zd84(D$|r*-QB?IUE@adoXzrG16+e0ubZXGCQ)bs}<7+74dscI9YiZZc?zH26p zk`wz%8>`PM5+#)eM&8ve#>JHSmXX{rRi6R_L}3_L&TqGY{Ry zc>=Ykp`4Cl>S%5*C4w>z?7tq>@~`b8;k7$__47ZaeLyY$0DUgOi7>-Hp4IYq?Ga&c zx}+vYV%}ln@UL?Y^cN}iR)-@-*LE|!X*?~qIk*b``R`hmw-=Z2nD2yXIyP0+a0-gZ zn%>^?NyEd7h(;9mHMYWQt4Lkclu#FU^skoYOz4q3>bC;f_aNBW09CoX+xJI4TBIXx zaf-~fSfbPxNg>?{KP_lVV`%44+hJzT+SVs4+)K!FU?i4gk#}KLPFpof?QLGh8+Nyw z&Xa~c`kX8jD! zJqzmBH%wHkAVtr$Oxi`Y)P?7e2JClWQt9h!GRqF-k6|oZ(vnLUq=mw;xs3E-Q_SuJ z5V6!XNh6t~5yt~<*}*s*R60$>KiTT0Ig6Gd+FYJL8kTJ&EMi!P*`{CP_VlegHCv4> zJlOD(Wm&yzOM#80+3su8Zz{ni{{WSxI8()3`yJJ~%_aP>&4|tnA4+A-oJ|`i*}VAU z;Q;ieTZfJ1gdu2}G6MVKr9)$|cz!7_H27U5U5rjaJk{Gfb!aZFX2=aDK_1naXJTyh zwOAzkG~@55aa#*;Zkp0Hiv%anFR84X3l;Uo3#Z##wn6hi&!DAkJ{vT5jh)K>02yrN zw6EibP-RmNc7Q+n^kaE+Ne zo&7;xv}u+`JtgdzDqS%ytVTNYs=gt(yt}&d3N&Ue0X^#0nW`=He`&gl1P?4oPo-R$ znnrK-P0CGY72M0Z7V3?IR$|bnh|2NYE?Dj!V`i4&zR`8(h)k(&cW><_GD#)Yt=%Aq z#NgyqbDAVqvw<~@MeTJTnrm_9ZjX$P)h*SGI+fxl??Oa>cgg)}%WEVs#W$8=xn|h% zAL3t1mrcC?0Ev~%4F3SU-H6RDa=AuX&1ym0IChA#Ms!E5xsQG3S*G!m4*t~W<`)c;r_3{)R*t7}43?{G zBHJ4tKBlVK>8+;1V_~y*0<@D>GP@AFF`voYvu?c{Pj zuaqu#rr=p|R<7f?`$Sh3poq$<5Isd)al9BxYP?|a9Q6anDi^op2R!DA9!>s;eH_OLhY9uujiFHk4 zYh5%)ZWrw=FvlEHURy zjcuCV-a&6=Fu*;SRI-ZJx=gx!!sa)^=EkzBN%Alx@mg?PTUzOJ zNf8oUqik45Rvxtln_Wj^8%b)&?&K9dl>=oZh$T$tApYtL5!gEss$^iCW(9w6{&=i6mSF$4Z9I z-rmblwDSWzw*a(~bwoeXudb(UEKILDiMHUktx`p6i&@bVF^{}Iz3)^Y8g83?td@~v zc+qzar{&x#-Q=yQ#__OJiV>CCFlw%aBo_L6`IjpUo?#mgTvYN)Z4*8&lrA~{0BhQ) zEKz7~BDHB%hn6@LNo{>+rKifS%=?Mko(){Jwwh}>gTC0EflT^QeI@fEtak)PxZ@pb zCdQGMaUi#jHdx4ccp!?gs7E#ao{@xA=zi`hDImSRy|UlAP&Wdu-kYf8^3hp<^rGl? zGo_N~$SsD^8mK%9lF~d*fc?ckKfN^?d9EFb6>MM%u_`6JF*8aQY<%(eG@OzU>&t)i zlqf%Ojz_&*x3P*i+bxWaIid!d7{kwO%NZO4-`<<{Qqm-?FUqGoX>%qtS4m20)~P7O zL#d}LJaS0!^A=BDX}63%*sVCqAG?~4Wu7>ZBVr?I0onM~Ey3(N`#`2j#KENCw%VRQ zE-Oh2OS)F%uI$z8n~Qj3ZR99Xork?+Ev!wtYh=sFbCLW$)v1{*HwpF=CHW+8+JSiI zwONwz$7G2z?UGI+IL9>>p$rpRh^0^&M)lA4t1>IAi`ZgIrY|gi>VfJFND{-N%%Sd< zKxGZljz{HM3vu?xMR=KJ9AuA{iIPvSgBp=0M&#~&>h`5R=q=hYv6O;MBScl(BVHAg zOE<&#?5c#%!kbC38c$La@gG2 zfLN(X4%76j5yu6js2CQH^QK7^?9CL7F?a)g+;#S=Kf9S`{npYC$sJ_((4=53#EW?+ zmZepR9XlG*vPDK)dDw)2??MhTO;2@hhTkwQ**as>-k|bLybz0|^UF2_p0!cE$dKE~ z4fV#wDi=L!-MxvowJ5Ka>&eYmyRc~Fi^zbeah#6TJ(S3;B1^&8de)`KVmO&0jhav- zkdK!GG`DK{m6r>!sU1cs_I6@Lx0oHF8zpMp#82iF-}|{a1Ja9=BD~&NRYv)kDEq%k zWOmBYlwLP-8tdhLaP50G7j4$=6=8W6v@Jr>JiQJqh>W9{j zaI-62TCLQRPb-B`-*-5td26|2QS%OWds7}bq_COpSS5(Z;u~#q)U7v^*C7UdII6c&MRh6|xlxarr1J{Hafim=)|;rWsa&jN(KX;u8))ik z^Fr+!#19pjZ*;b}^Bgm=$X@k&ZAF$waUM4e0a|-Vy@`|x^T^R%MQZ%U-D=g#iN=U#)M19Y_W}h?AN)`>)<~2u+yw&J&OD5Zh@gS26{o0yC z6l>=KIcjZlh-2 zsxRTmWGRM4&(-n3yvn#_Hk!77eL%RfY8K)_@RS`PvWjo7bsHA(P zTUmgQat7h5Hq|G(gi7*mk2_0yR4}lQe1=JjMBMajRcn1dY2C2FxQ^x2FzLp9X=A$bCU-HPwCDX{A0}#eibT)mCQA%% z^r4}iWe^EG$lI`|60C~$l0vr)CDOE$oR#wa?Ie?NS{!ZZ zP)%wZY?H_3i4Hd&-u0?zIeE4o7CGjF4fC+cIipax7xunXNsXtH2d8?C5mm7ie=K}? z!=*=XjUxeNd@b|$z#T_=$-AI)-N9E8cct9^Gy4C6p22~Dj3ENR~h%MCWg|| z)+UZsEIAB2(l(%GmNN4BtQP~@+O~=8%uh6DQ4 zGRRipIu&1+HI?VxEDCkzOg+VOb2lLr7R_e5n(FY# ztnHY>k_IZ=F^e_wW{-Gdoy26|`_z%`yOKF>WeaPM;^>}&q`PV4VR0$)t%u6F=y6@K zl8V$^x7d=i_3W6 zgJ6wvr_}n@Rab>g<-y*~^Lc)ipE<3GVV2g;5a8~Ypj`g|Iz_WLgiUhW70xg?sOCse)PwhN&nDH3?jY3NhJ%{&IhIRgAG(C?+<(TQo?#8HBYcK9JoAcz z;z(mzmM09C2Ox@y&fj!~GQMh+C(QnpH)u^Emp2yncEoSYYs&NUW}hCTX7+0%I~KfS38z=&g1GcRW0>In(AqUa-;xZM4fkkg)&vQ)O@)wlpA=)7AEiLYI&whiwUJC zb1D^$ew`_E6p?ns9ZuF(xhoPd;~y^XrDnsWwbXLksoNlZ%Gt-tI@Ed%wanUWz22*J zvmu2qW{7Y(RNbh|=6<z=&Pt6RgP_;TXd zvrTy_{{W)xIsEEPI^N$vu@>Q#r(#&g+~%c*-YYqiP}J}O^KOs-04&F)D~ygULiwV% zW{dqGMicJwj8daXH0CRq%S|6V4l3H}QcD}Wb8hNXkI+_k{3SPb8|S*xPURKhhRPjBy`u2YS$gyLe9C*56XPj_stroiGr}NX~l-vEl1@uQdIz5gf5$ zW>@>{-mC3NaL`*vZ1&ckbj1Agsr$b5mw6@S#<2vNMVs5)C_Cj|clw%vnp%!wzAF;A zjHm^VZ(6UW>K8HHT_vD<OI8|m4g_)h zryugtsAF_>owY`q>?x6zjC^nfOCfk|omrz7jz|OfQ!f&Et^{zul{g&ZOWrx;;0_s}ylWB1@_O6CPLaHVhRZZ7$TE-v@hC!d+_55n) ztNo*6uS0QpaAvb4VMyV9>tgLq+>11cm>ZbA9D0hYh{dz;{j4kJOElhNaz~hY{{V$( zSzD`5F@Y7?Mu{|gd zx@;+9rmH)vnTO1g9%@a{$*DoHWQ1%ZbleJpODOH|&=CZ&^N;S-y0yL87VW4_n|4rq z#vD|PO;zJ>FHesXFm2K>=jA^1>!{mPiVZbYZS0^MSB<5I*S$K<+6z1B+7bvc3^=8h z=tC8>w@sD)7By&0xo={s$s3h0AmtbD98+}&ZSOB5MT%&nnCx6+4AX8IY-3yH9%*bU zGLf2{uio__UmIbv&ehff}4(sI`e*w!tU zkyd%7l4z!uMG^2BGtcEw&1|>2lt>Wf99A>A6)f(nVZXxre*`G3tGbfiE4G~z^ zq`i$#F+*)_?X7HXC7;Zi<9OJra&b#zEH>Z0B1v4Il@B;R;-|Ip#;CJKKXn?FbJ&`W z#z<`Bns;C)lPV+c?OQ@x63Y!7nx)dp?ux+W)p#G3RkO4G^s@P}vn${`9N>CY=)^JU zvy`{leIVt#=CdZ#)@!IV>u5HKK$=oJu&Izl+SIRNlErOcjrYm&v*V0YA(HCO+S<*$ zv1*I7wmxI{)tl>t)1rwI95Z~LUvckL*=4%Bw~laPgm6PvcPOI@OEufiFk%xRf4fYY z>OD&0DJ|8P?CrP)^{tzw9&*~pa50U?>FHFW)7nehxvj^MY^VwJ9`&5AGJQVX;hIfN zpATj2t3as&wlT-p2YPu z(VGZv=ax4%QS5m+EbCe}lWH?6ysrx~afJgE*)G3!Z0$b$oCaRh*zeY#EHOHk`MDpBM;(g5OTxs?8!U6hS-+F} zHrg2@J7z1#ttpxn$V@~TbLM)trD&bZ^+h|&sdWphSR+s*Er&Sbqng%Rh~{|;s=(VY zIL&ETz$3Pn;C}Ao83*2|T15BOcT&qYmKHz^XZXG88pcLcjQW%zEtdu}mh%QqJ*xZ` zaQP8V%ukdu%EzC=l&FU0Pbc?bQzgB9s=TqyHL02?$#xmuDWciT%W)i+(?tp}Cv$UO zDt^+@+@`5-azNQ6g+RxkHT9MDqir6c91&W1Q{{qtJ-?EylAn?NtEIZ~*2*%H9e{;p_pE4j8|3n>U`3JCVM?ZPR-ldrg_X-l z`P{)zMz4{Hq>T$X%y-JOM!rUVQ`W9diyKQRU)>XsDxI21C7a69AzXZ;ys5=4M52m1Ry(<6Q;xzh$~8%%&2U0Cmk( z`xTU$UEqN2)Bh5)BAk|AQ&jD3-%UvpDC1=Sx6FC1 zJ86!gZ*Ex_O#*prt=#&Gs+LyGs7)N(q z9U?WILIvbg^j)iWC9wdioGt}s zGLvdIkz2A|+eWtdz>!W{+O+I!WS7IyO9t135>E4j`Bi9U+cc{@Own#Vs?@gen^?`U zWL)&m6+mR#>G#Vllc3!ebGI~&E9#g30B5mGyldt;Jap?@+8bPH_v3pb!5}1zbgWx@ z!((xAEvzihBeIqQAOdQ6ZZ2Zgj3#e3;KrxS7;xRH-IdzL&2KD7rMX64PAUsn%$Cwy zv~En}Xl3bEEaA3oQq=~3aD^R-<1~9Qa|twX!3s={=3V$HjxkJyt+hMp<-U?jWVhu6 zOPtYtadD?>vlWlbw=r-6=bE!)aH7U(=i9Z0Oj!A-l5Ogfa=yf=9d1(=`<`*~Bi{1c=*{V8P7=7G$-aZA2TT zNTH1IBW&iX!@EtH>|%DG&2KX=*m_dkTgxScS14L3)MT`WgGn92$8i_RT1H$Jssl!A zcw@GhG7OdMDy5cgtbCZGA1J{+>h{OAc_VSS75m+*KTeYF&92ro-Xv^>3z1hBVp#i& z6Fq{mJ1Z=h^sBaTt+dfJ_YdYsa65{~n^L>F)E38Yl$hRFt_Evb=E=N`-e75B8NjMi zAZtd=aXh5?kfUL@QfikLx?QYl0BEFOK2e@cXWHFdtQQdDDtaT3dz_M6d@tyVN(9>bD6p9Fl%u4M`omah8zhEyx+I zU?~J`AKC(+o)9n_zUs9ltKMB&E67xD>s}t*iZIa?xWR6zo zPZhr{%=t@mY7y#JQmw3G$+mAUR>nSRu^yz>_Tm_nNUC>a)onid9WzguqTpPe?VhC7 zZ8qVpK{6?9u_C9H8YN=H*DF25QrxD)ob6GZ)aE$#2$+dvjzDmz2N?CN{ZmvkUs^K4 z*i*{mt!Z8A5hF&iVJ;myo`6(x*cvIxJ3|-Q%&jcLliw9zPiXCRTXJK|NOI1?pAMfa zDH9kTrQtsNff8Jbs##BX)-vXjk8XQZ~5aVfZvG%j~_sOnN7x6)<3XODK< zFf+-)&weR>$88G33}uQZOp1}@lTp2Ctxn5m*Om3hT611QByQ}bH~qyuXe_AfYik=A z*tNlNg~u4JRw7B+o>md61|M3=x=1W+SSqyFQZQxObAjHT^Ft-QxRG8W?X;FStb*f~ z`5Ne4$TA^6D92iTz1_XV%gV`y+J0PdiqZbhwYX?}vGUvSMt=2Cx>#+|4{+#(1e>-DhVI zoA-mOd345&G`deN2$`8;RmMQ;QhmA&;t*VpyNc0kaUJwaw`^*>4b>&>#B(SSs)+|3 zD>+`nD>}H;BJ$Xn)wrO{@!l4Y@y$;R4;sYm>gBoxsy7lW%;X%EY#da_VTI5eOQT@X z9MS!rAnE2x!|xGOTtyG|dXjKS#&cEv(6QUcZxZfz7+2~lxo#s$X{NZgSAXHch0Qux z-a!ZeDJP$$LFNUw5)Yl1~R_)QkOm@3)GsP}j0X)+|_N0zQ++*NzoYgZY_N{LJvC4|AWgNC*S>qvOlx^C>nwT-XzP4GxASn&EiqV;g zN2%M-Z7sdbai&z{E_&7bOLT>v-ZD#a*$1^nb>+E*TRUSs^HRzkZ+S9EvrihRBkqHd zL6d3)n}E&7<4u)P;^HfGI9407eW~}6`I9P+k$`GSBi$XX#tCd^(w%WQdnbL&vhM(K z{52ib!b}9we(|H_m3cKS_2joJ1W6ZMF<`t8V@$LX-9Z#h9B$+V&m+B8v%C^A22;3n z9|8;x3KEBlWrcJbf6KHf;p-Mpo6vHjzY4Hhh~aRRN2%^Zg%@JFRlv%X7Pl#WI- zrg+`XD$MH_mpESx-!kQcM%xBB=M>!zAC=l=48)O> z%|&@2ZzBP+%g!omc$(fH-MH(VP|YH=B#e17UB}r+6ux1&MfFhtp+H{0igaQM50AbO4

(vnT= zWDmR`Z=Dl5P$-CY^DqYEWC-+#9AW&(m@L02wGQ z&8$p3^w_P1`Gq=7de~e66~YmWec{%=Tea4;3!^*ln|M8PYP())a9f#{<$>SOvGuBz z59KG>A6>(!hqq`NNXtktK4DVFt4C+$pz`Eo8(3z(O^3zWyna;PYp{&xf_beSFXASq z{{U#YhELxse;*)LUc#Wgk@VbvPZ^RqGZu1Iq_Bo%jpTxM@(B6k&u^uC(|PfuThn1j zjnrkZz@~HST?d9fI?I;0l;dwDG1i~4nV+&f_7QOzXxuN^+-Gq;Duj1N-Y>I8e8p!y zee2Kk{{W2ocCDveCCW&W$tc^-IIfre62A|^u-m~dC2SqdCPy_65<%>al-&=K-gEYJ zhk(&?TAJ4oEP%mrGy6EetaGbCvuqbowAuMidezmMc~~vXu>W&6T2j8oX2Lvlx%<=n&& z7qQJzy;z&dGEC#mZK|Dts_^O&i`7egz~i0gH9n#Cf0kJlnrM#T%6?LPs~VEB&~cA0 zrCBW9W-DqD#RkfgI)MGWWV+ZQ;;dPqWCC=sh9E5jyv&02!NA@f!|o2Fh% z9DqA?Q;9$j!JgJngEQZLF8qPYvh#sE!LS0jpMhk+775 zGN9NJKDeMPWZ&;et?l9)?IUc5J#*f*KF-eRECVdPGsRY2MHRS#zRW)Ak@IGyk5+k~ zFxyEArvNzXNs%&LH_l7xC%Heo*il^uD{19784ZYk6D(>6;CID3!|lIh2_LoMp$ia&n7tY#Xb#QE5vK9rF8gzcBdSZ*pXA| zVkWgQ%Bh7PH_9?;(lxTAfTx#jgOxmF_M}k-wDz*b^UMQI+zbrhb~RCT2q0-9ygqu! ze|8vW0-?}hhEF#Ek((fgJw|&}`b~wTy71i_;ugW&c%%UE6Kd1i50jt`#tk=g()fLC zuU95)s+9SSE&i<$SuJBY%)fMX#%bv@==k!YW>)B|GDTS|T{_NabkMHj$hR9Yo_{LS zj@2)0_9kF)^BDlaE9qJG8Z57H*N-}(lrc^TifY@#{Hn=RcIrRP}Nc>NmNGWMI6=0ZYS3~*I$wml=-@l zDcW=~+If)Me&Sw*<>wVQ0+qg-EuH+Y49z;^scB9K&!rcIt!0AG%1fAc?q)po>qXVj z`)BWSJex{xhlS>}{5NZ7;k_l}z9xC5EzWXRJc`i)nXTWql=k{)VJdL2;|W%@=`TFB zD`^lRGb3lGtxUn>o*3;OH|(PsKaEz^Z#4;mY5FvgtpOwy;Yr+|mSJ^k~S=<@c+18f}J;rle{6w2S9so=NY`WNGo- z>k`SRUb>50Q;TKBGN<{|u>xrJX5FQhVZ6zbH+mk`d&#zf)fLlWlZ90o{OMU3S^3OB zg=>}No{4gu+<`u=bA*qGahqP?5%H` zNo##ci!w0T&Uh8EB#=hX`7@+2#(Ca;_tKJQOQ{tRgO=>Rm6=FoywTpm@$Cq~ag`L! zJ|lZHR(BDPCO?!r4ryd&({*OGv$v8%urYjOb5yk{wVC9Xbg;(^eLzef&b1MJZY`v| zWZdoLdP9BD=15uPbIO`RUK05JL{#e zvyJl2iDf4$RQgohMC&r^H+yY&7;Vnk+>99yuf15lYuPr%5-f0V4%0+v@W}6WsFGp5*@6X8&pqfDQk~o;Mvl(THIXgO>Djm?PxGnl?=F%lW3jS> z%LkWZgH5%Op-Fs&DJqQ1zn#O-R4u6`y0W6QZ!aVs^@H5qBCYMj*9(}}Yq8kHY1a1b z9Ff{ItkP!#y((S{8(*-PBn-{wd5k@Ir&({a`$fYrX2y2+KT44_Sduv5lk6;ZnLcvK z$>ObA+QmJ?eUdRd?Z@v1G4D`YNo8iH+%j-MI^nb6pYG zlE$ItY4SlEu4Zl<6x(@UN4OVKsA*e;1D*{}d3az+rn^noJyAgFYCAaI3&^IKOrh6s zPU40l%SZN!jm!T4tYPYqsNGM`@hJ3x4z-gX!y6ucK{3d1ZH4Q5Pu@;j>VA zHqqLo@*|9ly90{MWm|c!8f%GcqFKOVGcOnw74^i>+QMXG99Ilc_8jqAmU6-5$q824 zRIn?@YRQs0uI=DuA!E04`xtWG!ljJ4e3oC?alvHnUl=5=4M8TJtFjqxWLSU>O7c&& zS+tZcZhWRAx?_<}TR68g^6o_=KQa9)CNVzOZDk0N)Fra>Zpbpk_v5uumP_l)8;6uE zaJz<58 z`0tk9S!0euXJTE5=rPxtZLYm%twMrUm&>p=kwbE@g`$GcmGP>`QMr{1p zsPx;Xx6w+Vk0IL!Xy@9g5?RyXYrENRK=PmmbX~GOl-uj*>~k9~8b;~|txstk%#hp9 zc_Ija%EW_fW8SPur^7Y!NqdHiZ_0{reT`U|4A!#4r<-9CBnUS&ihgDWs9M^ap&MI# z(Z(_R&M{i^B=X%T{{WXS`DVSz^!KQ4t)*!h5;k0)x}yfDlBW4)JLPtH0oXTm6|D}Q ztM(}_W-Jx5=Q%j4dZF_qhfjcQ3Iwew>58fvRR_;@ot_KIQ)@{ww%v#wF=T_$))Slv7 zlzz=Tk^b=ceq(Lx+O6Eink|aLWoF|ZwO>+_O-bX2Yd|6)vfO5y9ML7gTexJE0pPEC zX2&ISG;gXIN&W&W<=@(3cArqS&nxB}epU41sJqlITmp!tfDKamgE7 z9lJt?{A=gA4WwO(qy5dg+k{eUPVrVaR&a7H#?$RpA=t}iRB^xWFr~ZG-fKJb6AjWn zK-?=-a=pnf?Bl$%OQc=Qq#eGvq_?`Z5&g0BrHQ)k&swLZEYa!ik~UY6FmugIYW{7! z5XyLr^R}W?`JKrs$8mLat0burwTy#?9qKJo>L_kmZln;-26ms~6z>vWM+|7HSwJJ0 z$31F>zkN0>t}Wq;c-LuWlkZ~{i;pV;O=|Hi^!ppwWBWX6H#r^Zhlu33`xUkccxEcw zdmNg(B&p)BB~%Dh^o_nye+rWN!b|6g$xtnZ&5C_H;ettf3h#tpE(W znTNkxlTUa*vTl6k+Ri}*hAEnPxU+@Pf@Sl!p2ww9C5_Vq$s$H1F^GxY)sgSID=ApIJo-H+*qbqR4XK4KD$tBa)Mw#Qea%4_$eJU9& z;%2_NIQa%uX>};=SDmrGX$sBgGK_fhj3H{=MkwY2{b5ZiGZG<)(v$rH4 zdS)v8*KV#KJH_5wzoq&5W9B zo1H^QCPgb5UMMp|9jZJ?9z_5gRojhVNg~>$07V}S^44yfZeHQlK44g!R%I8)q_>)D zBhBS87~N55GhHlmMI4PL4itZSqK4w$Jy!DGRADEUFrj#>uz_gs`2hUG=PWUgr57EF z(nsgavPk<}HVFJ{M&iw)X|5xE;fDgUH3l*2Yv<))Vb(r*t!SaOwN;Wi=5V}~ew7V^ zL=*XbLa>wU?T?&#nq)WD%jL`VktSPd6n|{TsQJ)I2u07z!FyCT(8C;T$f3|==N;*m zkxmPc~ZyP?9S8c@eMKlp1Qhs`yQn;0^_lT3sQUG6C z31g&=>OC?j;gzrsSPx3ixV{kHSisGZA;7H|Z?87tp-^0HBONO#ZX=Jx7QT8DI`Fjte3bSzx5ZE{&LvG_9wa^7k*0xdz zRXvdfP$5hDA-k?$`T(#U&tWiS7 z9vI`MX_~}?R9j1LD-5Tan@?+ti7pV}6LUU|)p$DO(2uOta2thW*z7Hol0d5;W+;%`g^9R4`0l|k5g zsJ$*p^nV@R-D%Y zuAOUrYiA2PA!f2~lC%GzyKbe=J_R1(L%B$u}rnt+{G5Tt%y)5kdLTH0oxy3Q%?2pK1P zXSGRX8|ZDc`*PNH%J(PzR^GU)kwA1Xdy3JzyiYF$ zcF22UiVk*SK9VE06Gw0Md6Swa(?v9fR)`qja{h>%Vr}gM7@PW|LnXz;X)U-@jt);WatxbVdzrRK&=r1-^sF|F={HF}-zjDJnX6vvOSv6` zZO%S!dRA?WCsvZ>E?5X{&fX16gEWrA%$Drmyo^s7`Lca#jjZwN7uS$&5W=c4S4Fvt zOJIX>^Kc7#W~-ZJi9Aq-9GYrrcFl0_=E^r`A$khTWogxQ88IB&Etjf}neR`AOL)PJ94TM8Y4O^}rdm8O z6E4zSi*>=M)vfPz@gP=7K>2vaX@MQ|lIfNPIEMM;aN`|uR-up1w-=YEF2e~Mb|bx6 zx3gww?j*x9CIYoBt;82sGkL(S7v)esP-p_3^}H9BTjT*@QTx^G)qYF4BZefkgKF&n zI{H*`tbTY|Nb(Qf0~ zKf~!-HrR$&TZn@(2Lz1M%tjSQUnqv`NU3PDsD#Hn7ic#kCJbJ*OtLbIuuMqDX^Nz{ zmPlb|lqios^33Ga7q>HCeV9gpEjNLa!S}7B3!vs3aFN-^y4ifGu0HTyrmx1V_9`Qn zW9}QVRQ|)|>KB3*^8i0Dn0kFHM^>^+dw3y*iJ8E2iq1=wmZhO3^{mlcZD3m6R2FXD z^-}s9U9`J82YR&(6mI~FaY4IFG^-^C@hscgF)fHz95 zGTh~iKXFbv)}PtDMBU?R`fCt z-IX{!su`HgLfSyzDsB}4h$0Fd-*Ou;uigAL;S#as`*xyEEnVA0o3aQWMUV^2es-|^!z9el*GaT{x zl6BloV9hK}%(8%zAGl9rP+P3G*N&)m?NUZgDJ}H(xO=ZPzI9x$HM}Y4U$Z59O&;!O zj1nNZjYyS;UDcZ^+U*0(Sjc<>?^CqiObrw$o@Rb$_xja#j!j8oK^i942X{=Gr%ZgM zwpka*`$VQy&l#&q_SimbKqsv-@uzv>fzmZ)KDA#`Taudyj3=tFtzn>8y{G+)Y-e(` zLHSy>d#qZ2X&}?>mN6OSl-D@&eV>G7)xLd`R~O(Qe`F3-_vHc zcr^sKxCB7KOoP2uyuY-)V4y5Y1`oOQrSPQI>@T9a9$a%aRH*rn6`LAb86{@ziT72;jizF98zXPcRVLGoyldvM!u1GqPVyn4fX=q9 zbfmCC2H#3-dezJ~!tz%!#GrhKrxmHC+G&@%Wx<-_Xv(te-$rprio6h&gZvie-tfk@1K0?k1~W3X1hyYi5gXkDkLdA!+rU)%O6_#j?E#p zoc{2E2*Rk~}CK-=e^yY4HF zSSPuIqgg`C3cIL?vB;T^vz0#CWj>HyPEoZme%@y7B!rp%%ALvwIp%dEO%xx zIAQWf>6%|PZDV_TsMLL+Y|I07Rhra7fXO3yDZ&i%`A}!bNXGrIK4_R_LGwKYNUSX` z0fhakMn5s484dK(TU|3mM0=H^^zD;Xt|W@i!Z;!?BjW}|8U1TMb0!nZxgIFw`#tlx zA~Dx*b6OVxG__QY>+M(91Iv(iLF-lIk)gAUtZ}sG7%4P1}^)0TOJQ})3=9nNc7J0q#(xSJ%9&D0?ZPOgvoOAyG0`#J5rnQ(o z%jPB-24RN$ zYGk)Mwpl3(?dS;HmInQ+Wr-5YPVds2-#p^`B(mJ%Fc zPH|J*UnKT#XKJNXFx=S3BC?Re>4m&7#T*!!pRasVCxFLw7@LI$_nD~RxSknU%Bn)I z%5$D+BfV>hn8-I4>IXQb6gw8}SI${v&zut>6ZsmeYbDULYpKzic?m+ts)5p<0acOZ zh454nwT=Z>x4ND?cb0vm%aue^k(%m3VY-rBM{N}6GMr@%Q?-O&f1^XF@1Ol)gbu@; zR-6;u$qPw3ATV%=*wtGbICV)Rng0OMLgz0Z2aeTXP;E;|v(_U`N>mdD0U>V2tgf{T zmlsf}9!tL-f~viZgf~*$sPJ}GFnDtiDKG5QiGQFG?>iYO3quEBZV$b z<|8Zq&04wt8Enwqqobn?m1h2xlVh-o+m_kd z95P3R`czT1lwxTamRZ?KsPCGqsWjHG#X7o|lyJMa8K`Z%J8`7llO&5S<=zJD<2=@F z6pOaImepdC5A>%P_svnfnT_H@beOjblBcHb)h)ymYFBX=Zzt^M_)ZC@+Ua9_o86r` zC7-dVu|p;MK!@!X_9VtSI6X1mnKX?ChjVhW?bIe4qfYNlYg@}}Q*g2?K*X-V-_oU$ z#@=XcJjao4B^g1Flzn|E*avBvJUVrn3&;f8jD$)iZ@jD56=qwLb*QVU#A-)AwVyTJ z#jV1^>e4Pg{xkShnRVMc8+_cOtEVu8Ozv+(Rwi4Gf3x*3?HiBusG~nEyL7>&)bFht zVJ4k&FZBlG+OJsG*YK!f^EH^Fzr7wpsQDv{_<{8mYf4BV*4}G1jhMri{uE6Jz52Qj3r`@H*_n*n<1A+c!Ug2V{{j!+(=u4#HGv$}iTNwagD zh>-44>?=Q6)ue|~8fKn6>1G?)^;J&%`r@pYA#Sb5iLd_69GJAX!^w4PW3H(m(! zskv4%n$F7J^4{I<7f}VUv60fZX0w9cNY>qjwZ`9?Nzl|oLHD9T-;1B%zD&~ zYZQ8uT+Jg$$e@Vxk!?xlNi9m-okBhFXMI5koc8CxrVv#gtCl&D;u-qmaD@2Bb; zEz@woBo9MTt*)UY(W~3RmLa!ir!}FfZ_u>^b8uAoiWCJotQO)VlKG;zjiiGrI`dH5 zM%Rrc-Q)Srxe0FFhi3dK*BXK@ob$w+?q8VE#|EVGZY^!mA_*jua@jpI)KW-wc#g&|p+%?3~9lIDVdt_A~1>75TxND=CH?|}`nc}x*g;vGJ z{Jf+xjP|6kj?_ZdZ-DAImS2B*>5jw|Z{$g=?x%D1iPUD@k6imztDiZoZNAP4xn&t~ z)qQFM1Ul2lX>i|Xv$x?Si-vLiYSP_Bd8$PO8%I{%QJgj`^eiQ;*miO z)bZWSzEKG6lSr|?r3q`fjBz7mA?R^hFg$q`&HY@%^_^<{^zwa z3wgfM#HyG;`9^skO10)osA~2wxLBZ#Ncni(?rKRW!m`C;?Iau9e(ai;Pr4DAXSn6& z8&^GzPjz!_l6hO4;raoQ)}MSM+^7_O^M%0aPCAe|e8#bsHb1;$ly7RJ(?=|31&kzP z@6G(`<1?9Jx5vsC4BnJSEKo@*y5<16$Qe1UgvjQ0x6`fQupWGJapo`Z)j;}wn!w>+ z0yBNdFxgR*-`_m+XYuKf@CPTe(`BV%ixw?$U zpCJ!!l!MNWM-oPaw@tj#+sSQjr(c<5k!DfCsH#OA&C$1e>0&^rFvR25zD@n4q**m9 za@?OVkI>iE*FkR8f(A!C?jr{k@{jE)3~_39>Kk{@*YK}j3TSaHd6{%aeWv1$cDZdzw@`JK**@eX~qA zDxRyyYP0>DWNqTO^MGkrcHPyH4bi&OWP)j$aI5m}t9H6|#PQoZL$=-|!D`!=Q<06* zWR3-r+D;g;A&*XJmN)e4&BqWSmwL!y`-B6s!%wI+mF%(oH9H#f@M`qDM9mr#K&e|E@zYSz>( zY_IIG3j~%nA1aQZcdYqKMrHP!Z(`7xt)`Gj-Bq|A^>0tITRWG-g)$uc{Nkp()fOEt z2DWcLMq+?^VyWpitEjcexw&ZPQ|b3=EK#NBLveO(q5vpT%;%+65v8Ou$!{u?DB63~ zO%lw1X5JOKX(w421CDm{R{TA26|IZQEu!2WcB^{R0oPNt{*tzLFghFnuhVz9sc$Vt zpZ0r)luDo~g<6VgSJUUdF(tfzAYko|!@U9<_QM;{{rhOOGYug3tGnlZif*U){j*go+gtFYu1^5>UBYOLtf!Lma#J zmUEGVQeVg+)3qC`c+AEn+}nAm?bUoic=AX*lNw`ht|}X)7ScrmT{XND97>8fVed=^ zX!iC}ST*dC$c2a9-H(`xOC3V*Pt#1Z#kMA9QI)9{DDR_aV}C9r>^tMVXG3>$J;e6K z+WNv3-MRV?T83y4NhQk8%XbWMNy!X3sPxEhG}d_`nIr`E8LE>dgqIL3Q)ABiu>r+u z7#cO-Y~L!b3J#xI#I%aPXp`;J+_4+V;2c$@y1c(c*t^&cc8Z4HYj3d+v=ARBCYfgE zY|>iaJYXIIiju55R5QcnE05i72a(Qd>fgsA&l!cCw*1>_JB>D0w2fZr?j$ZB3@M9v zG|TISxP(L}0ad-}2ur5frm#p^Pj6bUrrb4+hm$01f!O@b?^h;<;A!&gW}LGEtbc@h zQ69-uNTO{#8(8O9?jyqt4{C1gO0vwGw(+=hsckJSnjs|MTfb<)>qM5X z94=h`^JXS1s zH`h9o8127wr-sc8G-je)3yY@-ZemOo+(l*S_Ng89#hj9fgwd zW2o&@$kz+|kfq421VweeDHc!loA^+@sz%YH)FT3Tq*q~(*}$gTw9(BVo*k;ADbIRY z?{2Q4XwpWFx+xunNEy0@p4N8gwlA{}`^=o>d)3C$;4#5+LHj#$5S~Rv}#PK?is9t?i+STI%9GU2QGxo5`97^B-~TR@2M1l4&3J^0~+>&{lnf z(5=+BUuRVFhQat%_|!ohlCb4^4_a}0>S#0M60nqQLZ!Vqs6N>x?vl31j5iXheJZ+4 z`jxp^K1LFM=2Otu9nNnBz@cKUkRX^N&>sS|>|uzS{ysbphV=9q_8 z!fjp%HBLKsU1}?bK2^f!ZaRv+J&dZ%R^hK#?`>|zmol-GjO{|!3rJcd4dyt<-lyB? z%+bXYFbY?8Xxi-{mUZP$SRU0q>a=mI$0;n_s{2+EcVZi7aTk_;ZP;SFLFSOy`SIOO zTMZb@d8?4eX>R8cC~~Rhjw|UUfeW-CUo-HJyq;YnKiAP5!^>L+7eTt&lK%8NY)F3Zg5P5^UXnZ zbtUE_3G#H^RwL7(ju!H63LT`KqrNG|O60W2Ss7O1SzI$nxX7&AeHr0}rbqqD^CJ4z zt)-kZXll=LcVzR5W|wAXvAd0KS%Q!P`qG?@BAtp;Nj%mCVHg3hIIR1~?vl<3SbXkr zFCD9=n&urpN*3V;%cBo-k+V)wZ zlp))<<~hl$%=YtXFMVu_9IJq1Uiqqa(c0L-d=XX7`M7A7Abg`(mqd45J6CMCw zX_H5&!*KS|NU#|jacLJkR`r$CdVCDWu0B@vqG;A={{XZmeZhWRr{0nqD6PB}b4#{m zmQx=%H7&iQcUJJq%)6o-fl2mMjha=rUzlSxC7+WI@o?Q%hSDUVE#oxD2+HGtdt#jt z4Ih-KPX00~#jW&LS5B`As)9!9wG45?aNBr^MnikibXl7Z*|ga_n~QlQW6^=>QbwlI z$h*osx04GWeoqx)N0}wX+^fA10K^J z%%14aB%9>HR^!XZ%suLyx?Q@+sVs6aC*>i&?OcOM7P1?wjZR4?KPQsFaqmrAD~nm0 z>PgyYr0A{uHJfNs7s)%ODxg-s%O~Ds($D^nwU<8MVVY9ZQ3_;iafPCqmVc)!ur+iH%N-= zc`l^^ZBP|u?Yp&IMy?#C8!H&${qp8XLEP*Q3_S%h*7+Il=17?cZX<3@U$kbkPcb47 z6R}V#ui4BpUEGw$PC`^E1Y%c$VLCMGjT?iE8i>c{E8GEz*kcBrZ+IS0nKm5#+OZ^P zw?c0-9z3jgpn|c-X#*RnBy$H^HM|RmlC1!hH;jvk}NkD$tKYW9Wh!~QY>0~ ztCxKf+n|qx~DkYs);vS{0O_`mR(`gQ)f=|}D zJw7=jx{~H6BG~j-IXUmmS#L0|0(_gWQ?*{3NR?VJpClX>1EqQqii}R$ZF1^Yw1@3i zQco`Ci#gkx+0f#;v$>I7g2N&(0FJ~}TSgGeC`1haHD#J;<544$?Bi(mtof8#t*%?K z(Og)(7HCJ8myw&CgH&w%GZNn{zF_koo=-~BglcyBgt1$*EPF?o6#oDXSZz0QlN_YX z-705S-O-Ii%+xf9tjanEYaxZfJAWscSy){W$BvatmWsv3X=a zvF%hytBEtsKF;Bzyom&Z3VQacnuJoU5k(;(Gm%i(WpxFO#zP!dh{oiyO%yZDx8`PJ zk|=2*j>iqarUqcYv<3eux2i}!m9r5}^$ zOr}L7NKapSwcx)x>snDSDW3I62TwqXyt2%kx%bxFPi<7fi|Ke5>tF*Col^pXHI11#IUhnvzvjxZJAS ze~TuwAk+*qF()H!Piv?Pi#ygWf)^sAl0|b8-NOqm5w`9*BBH#v^CZMB0;-JEHnT$` zCg#g+=~_BVTNy56ayOJXtr9Dl6;|D2)25m!F)ECXX=7V)a|_PEvnMz>t2R+WwiBbC zR8>i|*zTDeHUjaAnP^8gx)x^9?L6rui1D|cYdURRw4FZgHDzxz?hfnqt(~!2#(r#) zF^aC%cG`x>&ARXIeQOK0^)|kSezcA>i+OKlj^WvtZ+-zW7Vy zBzH=(i|D+w(iY{umFXI9j4Ul19SEjD0KOm=YMSr8b~Nr} z@uNi6q>jS;M-{^SqGO!rrFu)-!m>eg9KUFdPFimD=SnUcqlM9B+lJnXQZ|xIWQFZj z*v~brHxZJNqx{O;^r7-3=PR;9O#%bMHI1=dB$8L1a+tR|Y>V-kF(PUGID zhT=Ic(lhhN9}6MwDUi`wVOxti4@C|@6qgLkrmek{Y-VhL-El(Pe)-`=z$Y~o%O#sO z>*lm|htWrYS}=ec#>|6eFa;!v%1wGRCsqQ zuHi0uZ+eC(EgMNzzeRc0VyhE-9t|6^OOxNjq}jE@x0$eHHh8E~;gdy{Xvdf?Bv;Cg znX3Zc380ZKEtIA|)SjP8WHCH(`41o2q9-w;^u=i|Uc|(CiYAWUJQBNsCp7Fqr|TGu zZ-txZ0+DSdx49;9=L;+gZnRAyF%JT-FvWq>z2OON53th-93#N2bYbYZ*xo zn<|{BQ{IJ=<5K?sRPALSc254(=^D=8%Z@ZtC_gm4>V!+FOEuCXC9IxsA1MQhEp~rq z6L6%y{1sjeESJ|ZU0cU#GdTkWqqVxQ^5<#pzV7UjKa11zr_3Uq=Z9ftnpMu$U)`MW zrlqov?S=@ZV9~_8OAeW)SnJYV#R1l2a6njTjO0(W;bf^P-`)~*+AOHdJc zrYPc2?TW609R;uUlX=E;j#&Afk3m$mEka#FF{jwuNgNx&lIZfM2l~{vOQ+px(2Gmc z9l3AxrBTGA-lv}NZLMXsvTrgLZ1LKaghhQFwTyAc0x*qvUB@GLdX5#j)UF}7$OcZ0 zikeu_ba)Y8?Jd0SbJPm63}O|7$bXw0N!@9r1!!*C(#~X-NWn+P%sS$!#S3bi@1|T^ zMe{=$9PX)Rjvot(lr_!c+4w&N-^r4R-fdZwixlxA$@9pzl_id)=t7Z;N(tuReL*+*1Mz zeKsq}X1I~}!h41`1Z$E%zwBy-zlYxP87?Kh zdv=iSh5$G#MS!DjlHS@23mD9HA<1d6oz2{4w05S7k=j`)XNN2GQB1lMd{7YdZaF_9_gyAv4!K>WrCtSk)Ixvh&(9@#8V=?%tKm$EDmy8P{)qXO!=PF6a+x(3elX zxVLHN-0`Q)6{CICKBBDY>m}rI$*D?Wi3iIGyKP?`qi5_W4iNhF6~Y#oH0md8;~D+*h>-9A_z3sjKAB!!&6kf40H{wmF~?QyGlAI}tPu~(+< z^we8_v$_z$*yrz4V_5vQc`&js@Y2Z&%Xl!v?Z) zxz!R&c2v^dF&SC1Shs3qVPMfx<8V92Dc+^jSIdG6c#i45Uo+|6sZR*|YDE*5hBNm& zQ5UYH$hO-p?NaJ?^EkqyoPIoV$scs>QP?8%+kZvouWFnl5o^w&&GHQ1=(7Jx>p<%`< z87>vBnM@)v?NY6rivIv>c??$2{pIY{VzHStms)Mak=sbE2vT}ynyaG8e(}BZjHh=| zx1J~$QRmW#fiE+(CtX?Ix z)L9;O)frg*s_2qi=+YZ?@}i7kre3vD-qu|{>E*n&S0rF=@9$7p+dJ>I+}vGdZSB-$ zQO6>p-0gAZw9&|o_jU|mRH0$Ic_I;oFT+RaNOa}AnQdSnW(ub)zSM?M)T6nNQ2RVL zv9?qaK+ZExZ4xN$S>9y_AH0)18h(bhQOP~Zk$JQfC5AZ_6EU7m&cEoA^ozDBft@9+ zTC~Y&6mmsuzcVu)7>?q#F6~llRa-^{W9!_Hda~ArJBXItWj6iZz*T)t>I@~8oB~}r z#GyS6GzA#eYo?FPxKpRc{{SBe{7yZOYTUMsVPWM)$!=HWR^Bxpu)72-AX+ZMiRwQokPloB<6Cs6~;%}BBKY;q0 zisKggpta5h%>7MVm8H_{qY;lb=HTr_{^_Mm&67hYTNkpGgIvq=7afSIT7K}-7WsDP z_l?u(R}$VOjYA#R>@vf;p5mH}jJ{j^k!PQ+Zb=kyi^Y%umXKh`y#*^;e904`WefhX zdJ56CwOcijl;+++@*1V~xwQ!zD`fuwM^lGk>qPWGw=xmd#^H=-&yeso^NN+U=wpt1 z>xot7ljboF59Lzc6t$Zcuq=<<(;79*a?FFw>Qb|VX0|y`-`;Bv9JmpAO|$`y+*ivV zw5F8}tac1R^O|-HbK4d5eeKVatce2Qb`f7Ie${t7udIL{FPcdI0KRM4!M#go(pPg` ze`s1r0P-Xmao)N+ds{n~Mu`btGm-pNjT?!zow5y)lk#WMw|qNrhQ?@-b1#^2UQHB= zm6^2+BW$p;sBO3#X_6Uc(KA5VB3wzK<`!~Yk4Hv)~sE59R9T(<-NuIy#7?n<>Qpc zHLI3{S(%!Bjn1)mZ9UOGYQ{`|-N(I6b({NxG;#S?@$lSXHjb62rs}J4rZg)NigYeNNhCbGCj*PSwrKSysl~@3m`DaLTew-H#P&d9Gu;mMEi4C@Gv(4N}HSG}G=D zP$aeGt4`uc97OTBMr7T%`qZ{rM?i=BJ??GaYflpSp=9aJE|aKDGhfPMK_fO#992u( z!D{ea-6=OW59KrT;B>40P}6Rs8S`!C8bspH1kHL*jt^c8+A1WyrDHC<^yps8D>+_eJSV$ z&j7qYL%-T4wvphKP)48X**di{NqoIp(&7aM6^w~|!TeQL<6eeqk>y&jwt(k3rI97N zwtp_=X7gA&z@z2@ks@jf9mCCy(8;us z0aAJCS(Y)&ZELDuB;wZ#x;WpHNM%i7mfrfxDBeJgAMZ+@jaTmcjV9f^x6CuH&DrNY z>a6oY9g>Lu0Mh21hIT{uN$W|fX>i%u!n01M*-r4?vU-Y^YKiUa2NFUC@0YbXwFoWr=f7E%cecWPGgz{NPm&09-R`^h z5(Y+1GU_+Afk0JXv<=Ju0N1A|hTls@`$99ZJ8Dadc{L3qd&n8$7*SBhiDcC$-3(h4 z%YpYt7^|9;BW<JND&Wujo|_p3=-+72jl zc~V>|$np?lBzknH>|-)ms;J3kAh&!}u*jEDkjQ+@V0|gAZ#Aurui2l=9%1uOqSUE0 zSf62wOSpooN-p}l7_Imj^jQd8@WELq4~9QFpX$`^ELC zY{WwG%#OPP60hCwxJ5#YbqfbJa1*_ zN2Oen-rnBeptod9{M_}a3z;@Bo9C4X5i+qH@sV1K6c%1kknU{!y~s5U!wo}HK^3FL zwQxD>?^asDA-ax9qGysrfzL|DTa<~sxR+D6nkH@dITCcK^#+SiwezEt9nXR{Q!$}^$#_8w~*miKX#?l?(Od`W^J1`HUksZr7JNbLOEMdjG5zDim@5SI2BszXku^N ztb~u^0ORwgN#@OP66RoF>@kXM_3@7uI)Bd$pDd2Ng%z(b%JGHgZ7|C@Ooe zCYMgP`z(_w%LZ0&o9Rn#!f4FSF*@=gKX`jpvl)gWuOO012N><1)tqGci?z`OhnBh- zk;vPYz#VF~lN$?rl73j_A%;5Ck7AZKD2*UuN%=h~mW?NvyN{P{y-Dd>Jw>*J{&Qcd zq;Y`C-+9J36)nZY`=*T*StDPWSW_XmW{2m9kR;&xjMcllm=+t^!3il(lReE!GcmkD zZ~djErL}_jCGgS~8%9T^Lo_In#L?lIKvG-OR;-?&A%{K>Ach&gk2P0SZZm3sFd+bemYxLFQxTt4Q}-W7_{W4S!`Wrw~pdK(LaA$iLuybtNXYj zF~=AL0B{C#Rg}jit6Ru$*y^<<(<Q+imEisrV&2zm17pZw1Lo(w7Z>r(a$4pFk(BVgGg3*Y z8#@+Q#!=j6F7%})*+{JltdabVPndR*o}Tpki+Qd5xWg-j;B%b)X|{IWUadPv10|u1 z9(rfJPA0dL%}5+gai84Z?1*Ib7!zpLK1uMa{ep z)As=S*Hs!ZkHmIHJfzJeuFXBp4;aAas;;qAPHtY+*-DVYtdk+hP584OR}q_H6iq9RBkpZah|G$`??% zC`Q(ivyPd~Z0MG&s%utoM!&q|3Z?y$Ak-&P!Qu{bzWJ@AE3k^!QiP1_B8ZVU#&Rnr8md*)#jc5W)v zdbC#djTl|>G0568#d5Z?O?)S7y!o zK`xq4Ep3Q!c=?yp>s1#;OKZoPDFc!@%VxBp)xOmk+`CS8bLm3Z+S>^{wcPm6TE|EM@gZY~`XSH36j}TdRIjy&BcnrG4dsO8_Qti918f` z!d^a?!}`=yS%yhgGQDfrd;#%#((>XfZF&b~k?<~Au)NpH;;?e2+ldxE-*wHvbd1A> z=oE}oY_G1Ym8NBm;^j`oU%a4JIfhvaVY{-K8rdTM~KF-du9e~Td;~EGR@kdqLq-?>~}AmvP6o!j4%e4#@TJ;c>yH3$!6*K)J>t%0%WlTo#uR2ES!A4nXA^GQeHzN;1xm&w_{YVE~U7+c;fx?4qI=fXo%(us9@ACpn}yxtS1cE z#(x@-R=isu zGTbV>(k?g|RnLEFqd2)+7qy6Pc?KkqbRR=fuAe2vnV#N2vdffl)PYtkr27mI+B~bb z7?VBdxCtekk*s#HY>hT~k0x=P4te#g=veC4iwtH+ts*&B`qtzBPRv?&Q@4umNkxZ^)s zt*1zy8@AMZh|R?Nz+Jstj-sdg4Z7NktHHiWP6utI)eMF>#qOd~HvPmWA)Nj1udQ6P zoV3!F;zT=CH{HjzRJ*hm(c4=>-fXfQ0=?bu>4Yu_8ol*PVw#~B~QJK~#g_dX!Fj@sTfv$u$0nTB^` zy;;_#`x07(jLaGKnHQq_)`(XplH6QP97kX>bO*Id9rIf232h)*KX=!vip={wvfqXc z=RST(7oe-!gmCF9mZ(12eLe|j{{V$gT-6d6HxDJnp!*M3dXu*u_4p@q8)|XN=QF+S2jvE8DVfDXmVZ(U%PzCz05i zw{dSB>o1t*IHLn@(}GB;wV5aW)UvjOZd5`WXr+?f7C)T{Y}QiP(K3QU1gz8NY}`Z_ z`qfx2&DGOG5M_}L-<)E$ByTKRN#wVg8OUDsnRN`y=3Rm1%e#S&d9HGcJdo{xwt}tZWDKETWdI_gro7E=e;{5Xo}6J%Wq<4j#Ybxa!%&Y$wN2T z11UxTQrhde9-`V(R3EMv!~50Y+7j1XLTfC zbgCB08rST%5)`>v41s~{PaM{b-NY==OCt!K*DV?Anuh)xJG->Di9G9-0o~O901ag9 z9H^G+>fLO_F6K#CV}qKf6JHD1rH(aAbzB|82CYe_*v7;}Hr)@pN$*ax)UI7wZ&11^ z+8Y=Gw1Q7_BJ_69R@ms0LSlbH2=~KPbSGUb)<(-T< zkRCa$3F1Yy`wVg}$i~pr-hgIn7V*U-7WUyoGL9qk_xGr!wjOkL(evaT(gy2;P+i_d zXLz#O#%?50w3R*T%q(vqy1jAa+_HZ0oA`&ND~`h3G|)*fj~+|5d8n`MW4F3TR+3^d z^8MjavpBOx`$DP__j}c?J*`=HTd(g&Ui5}m)h?dm8K#CmE_WXw+m32Gdl-ehQcUv; zoxe8B<27#jdzmop8y~`@vcLWGXwj8Yr}w9zsbEup-F=f{MH1VVJq8=`r%5Ch_VO$$ z#p547@yFp-EcE->t=j5Y!GWBO*yF8K)^DS@^6hM*H%-z>Bj`T0Hv+xHmkXw|eaKmc zU!x5ARJQg@9h?zD1HS#uCsx7tsqDzqHrigDw#vN5+;Tb^j9mW!XU!$0tWEO_Eyq>o zwOU|LsZ7@Te9*y}WpU0qG}$DJO4H+zw&LU|Sk6x4>M6F5CX+O26fJRoH&$Nf=}(H@ z*Fn7VwF_pNIe9$bE1rY%t4xcGkL@~L+FdwViNO*5@6wCAkL`82xt2L0ksIX*q*U@; zygHGUAZB&JMWX8R`rhC*!WH{h%vT*Mw~bi%V9Eb@L6=N%Ju3GwoEN z65VQBW>rYOn5&w6^UHA*1sXe57&0D)i^$n-{O6E8y82PgsFtKNHr-jEP0a*n<^KTd z(>~8XnD*(iI3)R*x;ANa`oE; z*PYm=i#YBy`JPEgC_lZ;Uy|p|m68-Cae~6AEsTF?B6iyw9&=L*7h{l(jpXvE2jwIN zZl9fe$@@}Uc~4-het$W${{Vc~)soEwjV*)`{`Y?Ik3nBFe%5x8E9tIyV<`lGz-!jR zJ1~*-mGy{OmQZpa;ML78GxmixtCD#=s)QD^w}-B-A(}U7Fu*a%tJ*%REHWW@zk_Ki zyk@-Ge(5qdTKLC2unum>!5)=r$zqb;Nf{K}#lZ)?Qn%X+J;SLi!>uDKw5c-g2d)9@ zReedhV$$MUyHj!HEN|u*{-ZTBK_U=U(sZb#8;Qz{7MjoSjlg!TLP{2$3npW01i9U zy0@Hc;+6$hm0uDojQq8cLdkV&uSs->ND_47sOh?;rR}ZKO)E$Ca$-^kd~s6Uc!CRg ztWq0hN##E)Y{LFELe|7wYA+dR<7Xy9P6FnWWfm=V-uOT4*HQ1jjz@7LbpZ4=FNUt5 znQd+S!*?trYpag+V&hPn#?=;Rkh2}E=)W#1m5s0VJ=5R9$vv#6biP^KSNtk2D;6|% ziLGwnpHGKtOvHY5ej9bL)8`RJqD{PD))Ggm{f=3!rMD?0ydlAC6HWUa{kpti_ii69 zPI;w!1&e+gy!&i-vA4-|uZ3Ulam{5(t39WP8Y?)y(1t&q&jcRgtxWf;bzy5^8pU+T zeAbb03D0WV)9r?rx>=DL@wh)IB7#iI%}yCD?JVMmL}zWXFdZv?<3U7@(hFHkQ+a!Y ztJjL9s!asK(kqonrrrD?EnJcqrc{dB;}eCzEcI&Qv6ZK@O>*}}=7$EW<_EZC+^VOk`co+tz9)R=heq7Pp4wou-ykxS(vWpea0R!}1k5|ZL`_l7G%ds}Or5(%b% zw2_=NgPK_3Yg>kivc6|U`qS3JG?3ZcK4XiWsCnj z!x(YADd*C)q_u*0wlFCYkCcuN<5^ZQTniR>9a=c#E%O}oG&P{pFY4DaEt_1M7}&7S zTA>}xS9W>1g<}}(Gg^&yx3&v(?4hO{FYx|VlO4sz*&tsm?&M?&$pHqLr%NZ9_It?^ z0h58nHp)%6H!(VSrH>BXO)|&(N*jMInkD(k^sCX$Hk%|*A}om~ELC%g(&H<`nDs?I zT7}w1DcYQkZw#<)07x;M`qfP~{vAQ?kC!Og#|?v3r;)C0tx|p25}uuL??8=BCd$Ed z@d_}K;Er-T)VBIuB^jDE-JA-D>GrYO$WlU#-45(ki_1B5y9AO6(V4N0&6?Uf63Tjo zt-Xuezuvgr!s4I(pK&H`%>p+ZRwiO)vgvhP^Gs@1_G($@}@H| zM(e0FVSL=CaBAK4)#Mg-mhWnj$DAtz%^Dq@%rlZ%K4G7quQh*AjV8Fa*}0^$ZO8kj zi&=@8aqNMQnP!r+1M{|WDlI0~KQWnZ}2J} zFyK;Zs4UhfZ3DFI00i^$_ogAR+O^~}OA8p<5L~o_8%&(cr!c^E}a*+n@)UwQ+HD*Ab-qKF^Hc3RW1F)^Bkc-!mB)Z3|A*_!<>zNewAK^uSnQm?53+1_cvBI`H zRjXKS;nXIUR9C(+j$5y_SAn9jh2V}RWR&@WLNZ6=RD6>rqb2LJERrZqxyMgxBo;Jd zDROSS&>)*Xd3iNoPGI+h?`ai5-$=PFBxR&i-^Bi{_68gwN}&Y{D)TB((f7Tf@)i)mfuh}5d6@do4Kc9 za*=JGO+wZ=If^tY3G}MX3d*Hn`J)a`<4@J3zFWv08Zi`#OL~fJirwkb2<>)AjCT^l zcV4xfNph9SUoZ&mV0DZ!J#$mr-OINhXHav2OLVvMMuZr6>Hrk!wG$gfZt3$8oT#o& zd$FjHv)#6)=wb^PKuHI+M3BpKa_r9EXN>;sy{kbbG2YE7We8&chU;0as7*9-!vsV? z+%YT9;ac+Cb|BN^lHTfBH5A<+A~tS*lqk8mXxv4CyZ68DRm-dPyVKGMLaQqct&DW+ zYFq2;$)SqfqEtpZNmRk85eA`sBVAfUY`B07ao(%kUs-s5Gxn&!W^9f#$>~}$MgqeU zuMmx;h^n(PUCHNSHf0+?kOC^BxQhA=)7)R(-b*6{xInQf=nXn2l1ZnETV$R9*mh&k z)r)nwnq+&E8l-0+MgXet$k5(g$rvoG{rMHw%gjlw1d+!HNK|k$v!E43$7?zBo>ucC z<)gdt@_}C8NAo0US z8clICB%Wa%Gn&70vi*=-fXK42ZQT#&Q{QRu%&8Xd-NvE!XQ`>NWm~&eo;f6eLv7?S zI5f-4S=!Dyts+_3a2PSiG|P*4X9(*f?EWQ2ru~j3v48Y}!*>dg^He5MFUHMlu*lgm ze61g9t!tyj=ic0x`y{H_fG6=)RcHAv-#cPE%O1Es^_Ai+TIT73qXe{vjl+UR)}plZ zRywJ}nA*SA7UJAn$!Q&=s&ZydrF)v;HH~6F?d3~2*5<+@7~H=EdepaCwbr4epS7|@ z3~~S%e66&5*O~a+U%b^XE-ZA7zuEDwWOW}lJM&RWE==lFjV~2=!t(w-Nwnk-1-tEO zRk`V2Jv1{d!%WOwnB=kkRnT}}P!@K2os=G9nH+915_?rRA!m{N@sYUjwd%zvtxe$` zQnjqk(9B!+YDYm%w6T&F1tn(^bI)qM{ht!e)Zw_sYQfyN3OG(WR&^g^bXES%`yIh@ z=0aDgtpRQ)u_XFYYiA_QgPq-Zt4(Pnf4h+29tJB5`I@9bYh$zmy>UWXwg&DOJk*O6 zk^b#Z9dc?&=9*2);B3cXNwY+WtZihH`XOcWK7N&JOSq0Fo;Hn4+lW6}JRM@!TF^+_ z1)GeTzv2BqeAlli1*4gVW=BA1kSCQ^rc_(NUlO@AS5GU^t9!ae^t`;d+Y$ZzL zrB{WaTXrQ#By_J{GP*I5O5zzIXyik|6$GAYY%G3K)x5U$azc!E=N&Uyax#z?Y1_Zj zwz-K~;z<_if<_s0!K(U~(`ZreBS3y!)my6=qw_M^JI7O7#z?)2nv_CC zg_%IyK&sNiC9T3u96`LZn$^^yStN~n3}UMUmd@jF8-{uwYfftuy1AV!d!+MSFi$j= z7V_#h7tiGlvBjFTc&%$NiKAv|M*f+rT6LYmtn;=bhi6WN)y76`nSLFVX!_N)^G2XA zHA?$*8l3E-bIMvkov?Y$S-+CreWwy-dTr@Y!yJ>$R$@NxRF1fsy)0T+91( zt7;>P-DYjv?llbRCXjjYh@a3^tEf`d)FJt^nv(6A))sXGC(^f!tY^w%-dcu*gltM@ z=BVzHD~&D-KP)3dCzzxTrmX5MB8{U34?ig8qqVw%H8N~$k+r~{_C1tq`s=&+qBbw-oe6}-j zWk$RcNL651{aI>AZUQh^XJ=uqZc0S+Ytcyj&a!L5oaJZG?bhi3}jW2ZV zmVPD~FF+m94~+X9RQ=t)yyC<-e7Ha8K_m7emb3+OET|w8onG zm=cShyeiZ>a|=0ezIX?#Qfd0Q)Mbi0sMr)gc?JbrlTg`fbpXefUyOCBSAf-|U`K0l zJ4g_hRRoYv7_4ndIRtUMQ2-B0+`QDJvE39akjvK`)_YE^1Pb5l8>p_Dbs3b`DN^Ql zD-6&s$3+U*t8nZ0Gf1|`G8djtL+eoL7VW24v$*A$5C>dUNunPu#0`MlFz;OxjA|`W zh0lNZNAZGh3n{nOE}C0Jz)V3 z2^hlX_qlGB-grymwyWS@5Jx7PH=Ak~V=Mf_o-4$!fm^02HDm5QCdDkRXNiE4bX~$m z>z_(=Eb=P(ZqFefyi?E`;XWVyM7Qy_j#@c3UIoi!;=3&-@^&i;mJ}Tsn*;T)o2gDv zk;x=$THQk{W?|;C{{RDY;)|H?H3;M|4R`<{Y|=gLai;HN5h%Qo{{SlH$>s5K7BC;aFq%YDK*Jb)hH}CPw2R z?^0@7mYbOV(Gy8>01NhU`DYZ9zTnZL+z{g%xmi}#lZkYj-Jz8Eyc=&f*8&KVYP^-uCX18v)REk zfxc2*cYMdvs4huwbiQnNH%Kk+;X9HQGCby ztR`Y}8R(&yZnm(=X>Bx)Vs0mB+n>(2Y~it*-O|@?-0jSmEsw1` zfl>7cwD<}{O~u1@BlM#&(isj3hu9gO0wH1&o%qa!6&kXU8CsL~Hxzf!RWB+_?3sOpaVE zzziRo0h-r=qR-pqbdMN_z$?e0=XP3YupUvpC#r@XjSjT2;i45;RkMKJ0J zRBt>22*?#KIuw(+Qv3Tx>r!D93JRZ;14$*d#l@VF$T4sj9l7n^t~KPAI>X5r+!*tb zoK&-E`{9=HCQ%_dDqH$jJ&jDQDU#z-mJDEQ$KzJ<{hxf6hn>d)n{S!p4xv?Zg1}(a z*enIBJ zoB~E`K_pd?XNujU2P+p1Qpa(+?lTt(6mFwPx)$ws=MCGNp{eaGMZsxPj%ldfT(Uh& z?GoKb=AD*oaTw1T?@zs9Z5RllfEXUNTK+ftba6R2X29mEY7n-aeH_fi)i?{BkIJBN zE<+(j^7iBSu~#i)NPp6$0wBEc{8eJ%Eu^s$%E3n5j2s-|vEgRCg-IktoQlQCqRU8R zywnBb+pDSq5f4H=YI|AjCAowH?R;kO*(uGo+4_79!q6sRrE zD_EwCY)LJ;*pDJK1-kjY`Rz=O(oH=~*DOx{P<72R(M|I-lCcbW^NNn%;!BM|)?RI` zPS8(rS`}ixrwDWwmMgYt4)WuI2YM#cPM@Zwyth(0UR94*K8B=O_ek<^8#rI3TA5eu z@yT-Q`{TD6=|zIYDXrMp!TY5@EluTH1_-WgrBvK@jf?)_auOE$oSEtVfnU?rQbLtaf`Ku#70U;ieog_o(eHSZUEK zw$QTfC)SNeQkLfWKd_)v3H~+U)N+w>2yNYDYe!Jc_q^lRj?}T+mW8erxQ~*ZxbI1I zV%lsiaWt7SoVFW~Po+T*nf6$0?HyE?%e1GlrZH^A&BMLiWUC%yeDa@4zj-f}GEI2D zXhOS0FUZ__H`g^2Fw^ht;Xl1)I38CZ(`{yg4SUYIB(aQujClO2?arD|QG!{l3o=0^$64Oh~xWsX7-6(9?RF1(Z4rdi`s@=49( zbsxe%3ZWCoR(m;Frf7DM6&IluPFQXXsFDq_9DKRs>q@GYt0TlrlDW$+asm2MS;o^$ z$uk|8$!z|W&nISICABWYwVGRWMTsHm%ULaHC4`b-Z&?oQ=cuGf8LsajwG3@z`>c6m z_|x?bK*tIKGT>lwSvd@k?MtS@qaQqtimj=9^1zaOq3CZlq(gDErgApYYXVD@#AQkj zgZQeT%MCY6g*78~sJ|p^r2ZB1Z|!Lmmp2v{A#n>%%A?#ZeQ}~Mopd8|REV37ovY+; z+WO{Yn@^7$RcCB*{>^<37A9{~=`9jVXj*$kwIvYk51uO4i*Oow7F(rA!6YH5;F(#b zAypNQcMi1OC1JagK`Qxek_HD_^5RsY&YsPNq+T=|qXXqN6ze29rK~E4XhXV_MYuM% zOKgksso}k9)#}{Y>Ox5oO1a26r_{>ETsOt8riyEJae@?k)Y@!mBsVK_39+8ta~}TY zq`o1qV)E1}$Rvure;R$MU;SYx=Fdt(uvqF3sz{fY7Xm455X6k#!K${m5?ou&CAs@V zgs>%jDxRdR3cbyuhn0BpPY6eIS=P3<+P;?z)^GN2-w^&=V?LsR*tF2y>Xx%%yt|u0 z`=ukC)mglmG~vE4E=7?H%_#H8uYeGHw%H( z=B1ZoM&by?nA>o-wyd}@uhW{r)HL}tIN)74`8IchbdUmQO#)T zQOO>cc_quThUOBy?H<*b>=rT&8aHzZoywEPVTz8|#n#5w8=Zn_%N>@${Mi+wqu9#^ zlfHaN&G&M0NHvqF>1%H_oz!;fj*@P41Ar;mlK!Cjf=O+z84G!9lV^@sJ*wQ^AUdX+ zE)J6=wCHp55tEMfbHtXi>H1xr%kA>+)65E|CmHmr`i7wtb4TP2>d^(-eQ{PviZw;n zuk0tg(p|}ayh!w|E03|q=g1-ZEUJD+W6)JQ8<)~Ag5EA8nC**iJ56lcByu$JOsgfo zKQnddM#3@@%xc~lYp1zcN0`V*u&er8T3YEkL^gKWDffz+tKm3fk}IoMVvrK$M?uLn zjWTFf7qP@ltc&uTbft2T=@~UCCjQSqW|?1W_s^|Zj>79rvzZK@VA@DH?@!b1e48|# zgmFBhe+R8kbqn6w%Hm?KtCdiAH4TifrrNdUmz%kKsR;RZcc$Gz74j{!L*=TF-f8G@ zRpFWEvA0XGV3kG_Z+hB~$&Gj2A1*H}fLENHaal`il!}rxSCB_<4C;v)%~OW&?0;ww zk2+;IR$6MzR?jg+4=3iwH6^XC=uF>r&nFd!Gd4(*OPcEX_jaO<6o7n^Kc`_=uQc?x zoL)4c<&&#aR<{XvAY7J}c-xLKSEiB}P6#pQJPmGp)f~Y+8McmdhowPID_JM(W1J6~ud_Eh7A@Ty~!&y}iViPlV22aqo(+ zYYnWLjnuC)$rw+SJq<;0(5|U#=WkeAJQ)J>lUj0U_O|m~1dy1_VCNjwS(TwuZ9dxg zMnsCLdsNftzHPD0;gtqJ`c!ggGJT%jNF-vLc+VNC_w!#^I@+XR-N!jSk6O|FjMV}{RKTN!Mkx|-(c1MF-flSx05Z*Qeqv}&lblO&(Tf-24CnGMzA2tH`L zWMe;C& zbXhH}Z9dI)BO93dp&U>QhQm#V`!UvNzST2)#Yb9`K#z2jrJTYfMJ1!6_TAx`ZDe-0 zOM$&*kEkA%BH7#6X5A%plNs|Aa@p)@kXe&t)?m2WnEA6+VQF*rsMNbh@-96p!z6I& z6ReEI_WZn54}Eo|*rZQxfJ=?64>&bK6*UX^Qdg4NNp0p`h&>vaXLT;Y3t2i9;fbps zXVk5tXq{E9)px6I$pq7E+HbPTN6yXFo2?cHqAOVK7E-*iVZ7W7`ev=o8akw~f2>25 zQPi49Uwm%8?SmSQf#V_!KTCkk9=qD)laoGk@nebx-6TgWy{eVu%^6EcA_^boEWGroW{6d3G}wHIu7{Podti1nnuW!z zHmM{|vqwMhuWHeW;8|>S%6KyaZ`~{P?7zr_Q72o+QNW+ z;nu3EokC@tACw$@aavk^rOfuy2}a9x;05P3Qr^~EXw&f% zCn~jXPq*?cNJzICK62ia#JEeHT3IgQ{{TmUzjJ||X>kQ@*(WM`3eU0^O>KP}fgCZg3$W)R zm=|v^?(Z5qriFw95&r;6l1ZNKbhnG;i4Jo~6e$Et3eNK@a#Z#viJ2^KEMQZXXTu-D zqU;2@vwMq#hiNO0TCG^$TU)}GQNy}o_$)omLvbAc0Bn^}h+O^b^rzd#eCXCV*M97m z?^slj%bJ?DpQu4?{;Zb4_o{O|l4}u=g^^T(YVM_UW7Tc^~i>XQ^MF(KyQrRr93HG*Gx^vdL zHAo5Iu!`#9D?5e?+kDo~ayiXUajr!^pz(hUU~T%-wF@SWIIfuOxWF8LcfD4)n#yae zGWlCTD#*Wh`Wl59T$Vv?HRa;pfQ_?v4e3wREo~uKZPAtIVyr->ub9^NggJ=kLruRJrj=9T-k`NL^ z=RAz9wl!hKDbhzO!xXnIwTt8cbM&lU#jT19Zykh@TZRhH!9JBj8#{S5BJi-a3y{R~ zxxH##LR&#~dn-*bnT~dB;eM4YrYmS8oG522jkxvi^{i}EQ3d7m+etiEFfuOAZX2Tt zVe79FBP;|gOXmd!okCHge)Ob&oPc>>d)sjG~)Z|k<#aS3_A2$^}yieu> zkCwQnBG9o;F@zYG`_!^SHr?{RPinOsLfQg$1DK4yu@=C{oE2Hr3wY{&} zOzaD@oc&E<_<7ITE!h`s%zYyRf@@~h+{1iU&+vbb`S(0+h1vXF zYTHb+C{#Ejk4kIC791G}ZoE}{!qBHJh=OGP@HLxtrg0VK&Yp3vTr=bJJsz%87-9>MNo~#LCs`eu#(bv0}+9MYo<4P z7`?PMlJ3nVNp8>=*@Pyt*HRK{QbTs$Rhb_sZib`PbtSyEw=WW*i2{wi{pyF9*UX{g z`A0)tF^syH*nIF?L3eP#2DRPtw_qzSYj@maNBK#>9@TP4W@NZU0HT~=nuYg?M&Je$ z8&vVqwT_jm87?DHj=sGwu?-X zrOZnjmn*%)b*9a9)592Ul_V0%6_Cap5_vS{3kbsw7uvcmK~MK_t2&P{vCvc+U9a|r zm>O70e)YQjYWiG9f{~ys-lCK2Q^uZHZL#NZ!LEfPCYhCYYL<5!p!(yjC^PdK)-p3?DJ|ofrc;Sd-Z9#REJuxFgrc@(Qa z@(xk51ya1UBUpu{lEEN1e>5ZbPijm1t7E7mTag{M0^_#oVUkO$;!ZrWe(5|_D}b=v zg&-8pK=-H09OqMOdG>wryeAAW9-?NB$(i0j>c{TaIsK(F-8=4P^7#mQ8nYIlw@tmr z&Hc=ASxy%>jYDapTawNb9CfUVi!@t^r9UywYV6m-K&x$>9u7t;I%$k|4H+bu`e(gm z6w}nvyOLjD8SW!%fxaYNxT=xa>{98>P1>hf3*IZ3!$c5*8>VWrdC|w_;e<@YV;omP znp>H&ympf<>I-c7avz@*_;*{~6ovj?tiJVj#{0{+o-m*@ea7!u_ZIIAfGOp^Vsp)D zWl?Bk&fCI1KECj+$-1?6iUKg;9-vp%o(J(poACp}@!#8Br=J3WJV5eT*ToidM{ym( zPTp8V$W`cTxcEck={zTKEy4gTQHPlqX5-SloK_E-H;N8hpKxgUzYG`2=5P}-^FOx-G@Y>VwLY%x58=TXp9 z+b7i)DPuliiFPzBepByQ#xjoN6|Gt;i+!km(;F+U-5B)Ow)Y0j- z_H!)pNa|SaDhB}8uA6Q4i^-#Lxm@twNv@t^S)XxrE~R;In2TFN0_U;CU1&twt=y%2 zi+?C#Pw<~wW%Qm_V}UT}-*+4kJJB7}UrihB#7uUP>+EW-MT++}g5KuRZ?-MMFv_U! zNWNW!k8sPr<-tHZfNA#{f7-P`0oWrrMP7od-iY+}^R8K#gMgrBtWgnFZ6Odw|nkFv*gEVG}T%MZKi0rsdGAMERo++yt`=0}sNk7{WE zk2sN)qF*-oK2W2sJDQJBv9g-!WV{P-*cg7BO)}$Hb&2G*w?Qu8H*`4fQEOAfXBEHM z%TKw1khtldwP_ZILvUL7MvwOo?vws{eJVw`omxw6IZW3scRb1e04&FKG`DFEp>GOV zkgP||FyW*36(!7rM)Iv~v*t*-X;-N}=8;8tE+<%8-Z+{wkD0w`ZFKKFV1h{kw1e*- z;j6L9b8Bv4@)A&=IgyViHJNtkx9uaa>?`+JisJ!X!f>qL*~Y%T;%7e6*h}v zx9cVQIBPp`yg}`5+A#T27t)=;tqaMkO)b=i z$kWvE19ugxVQ?QQ6N_|@=L&n`u|LzT;StRWt)xFLx0es9-O3~h^9bqk+*|6IVHV4LgnT5}t5F>CNzO|F8Lv1@j3*Dl!wnBHUOIu6Hu6R}Q z0-Uybny(G4Yb#4MDASX-2cnNrQY(|(X;!wHdl)S~)o~!pl|AZqx3IT{Ih9t!$g0kcO>k?`^0_DOPokHOU)lt(v9P^vaH20N-`GQXPveV+za+lPJjCt5mO~`P~mJ z;}xeJlE}v5XU5-^R3A>2m3*ui+{!ku@Zz(Vk)(Gdg=MvkWkHgI6$F>xXJ85waOVX3 z8Z7+HM*08=NVc5gy-R$-ZZ@oH%)iB1>RpG)0$B~xuqH~1`p(kc&wAV_XCvjSA|Eyt zxpE#gHNQ!3W{8 zJl1xf8eBsJXzcI51z1!RLus~4w|P&=o>bPAyFZ(<6+3$IP|0F#^)H-#)5?yOuW=b$ z#gfb^xAO4JP6#-s&7kaN>RWdt?l&0Do2KVMQnmpg-Xf4fDLCCb~IbQwT4TvWJXX%BnR-PM`O0vYH=1grZvXxa7xSa7{q^# zNpp4O$#HKN%usafDjIFrqAQC>vx#0gImba$*;}H)B$o^GmEfAAfXDjVjrge>?v_CYHFPWN;Q&W4V8Bwj$pp=2 z#B7~o02TDD$gw@GyoPY3?ceg!YTvuKk4k`i^Ki^6)ww|?`COtX$YIwtPwkQa0Byw3 z{`j%Z_ZT99kCM_RxQZi%+M_4wRo=!uYg?M#+z226mpv+YTI%ZdM-ZV<2+nF9K1rJD z;}Ig28Qq?=t|94aMAAiTCJbjAg+nEp-ChaiZ!TpULY}7`>g+6j&u~BqBOH>opKEm; ztgk%9qy!Zi8NsP-lG9|(HQ|@{cRyzl^T_K&lf8op8ex3$a&1?F{`DT8sanN!cb1Wy z;43c_wzmkHgp%wHa2xk)*b0>`buDO%e`mSW+BTdvoeHo&XOpd5)FV~8wiYn&=bg1n z?N<$`dD8sq2h6$71v=|eH*-AD<_lEhy6`~u6|Jsf*qW0KQgwnz4itRL{?MvgjgQ&w zEsH{J3qmg{EB@lORJ*_%P#^sS8Q8)vw9kZ zR7qx$U9nFvWT@vAt9^|5S#Bw0)*%uB_Iqg00QVxVZMR!jxpmBpIeKgmg-!7P0LPlH z4(<+ql}PNqlVFjOA4A17^e3pc@_A6m_DklopP84nTiqRqTSg*NFDLzyd(uF!8Z;Ks zsEfRv4MiITyKFC+DO`NjjFGL;qRR%KYb~v_k2yvfas2Bh<^dr>S1*oF_r2;@j$3%{ zG6Oa~e4do)6|JC(SNntxy=xcP3eI3+h>RVxf(L4+sjNCf8P-7Zb@InrwRFF3)Fh7H zHI5k2Ig_FHs+SPNmgeI=cmpSQTG9&7QJWeCq*vDscnDTlTaUuNF#WEtjog}h0gx^n zXYe)lPlNR4xcf}LYa~8X^!gh3{{Z%>f;H1LuPko=085iBdi~n^JR?R&y+a%7SdJ+^ z?_O(HMgIUwya1~OLA0N7SoSfU7S8f;aQVuL-_b9E>A6_5JHCDSuOcYkM@^_h3_5%d z3Xv+DvsHPoeCcgcW4JQ*t7&n+N-)U}?=i!A)@(jsn;9x3bQmMjn=lsQ`Wri?^1*HR zL!NP(v8ci!i6gg^I{yF@XEmKLiK7x2z>|Io`(~^)k%r!TsL$?|av}Bhphatzx_y?G z<8nC5wln(ESyw}jIip!WvmLgyK>Xpqi2W-5jX#kDmlL;;=ahv101)-4VQ=kgSzadd zqa=X{^`;{4+pVpvq`b0OBtSB%TXPDew+BkpBD^s-mnwY2A2v-wu(WX7SlhSQu4MUS zQPoX!kjreZ6{esA%ohW9R`;n6VwJ>KLr;6FUo6{@O9x!OKD8XyzuMj#5f9z@%kr12 z_g)>lo;%1bbq2MKs35G6VIi#pK&JpixK7I^)#$5aq!t4HW;KOr!lDcQ0Jvp z)HUI*Lp;{dm@ZL%b&+_-(zjkY64;A%*i?MXKU(GzCX!2o3-5celFf^&~r(uOl>b7vju`Gy228LF0%XBL~PPZh>3 z+4o2R?hiDHE9;S8L$2B)yl-VA;eK3^$E{qxj@VhtZ4ULhcL#B9D%bio_4T5x!4)4N zYW>!qYc8J=ERbd|Pg>8_8TW>U%Mfk_lyuH|)Yva#^lKG?NMhQXxF$|PsI0By zdG5$?tgVg2{JkpUC9U)p@=Y4P#>)fRsY=$Z4e^6($GCi=rNpHoeJx_MndFHxyDD?d z7gw;`-9(Ix?9GCDim#-}EZXDSl`uq>=1rcs8L6Yau+*%X-)vV4)6|-99Eq;l8;Ox| zmc~F@j!9eXzGMr6ss~DKt;BFhj?e=xFrKE8*h_VI~e(@k^; zpR8x1=jlnRX_gmv*6~WRG|an%kv0@ogqm!BVo^MJlnxlyb(}KC9J`#EcVaQ^R|uwt zL8~UMrZPUAJ-H);y>}8lDwXD!sox|wFElA}an9Yi1MsZ~!w55uoeqRW*1m)+nxFaPsa5RC;>R%2nA`?i+1NXl7XCK?`mnk6OCEZ`mej zT_Y@VyQrB^G-YSX=av5VwO6{hi_Tb7jJG)S_N=ao8Ebylss+lK4(_qkS6)ol?&>_* zWITC)!}Y5X-UA%L?6yV_g_Av76;DZtwA(b9BhAg<0C%K-(30Zf;#h5N)JWlfcF4HE z9gR(O8%VN9*jbe@x%TN$*uisjBoa!{UIX$D_^Q&{-bZg7_g4+LNsX=CRf@xfzNLAi zmU&`F+rT2M*+%+~pR)E?_eMYjanh08 zlld_+ysPGJ+nTX&Zw!&k1dh0M#&cNLO=%jLu9ahmH{Nery$$W9?Yhfv63C6fVcw^i ziRm(6bYCeH6bJj*;}ve+Nv$++ z$!cSLytM+m8*hE7TB$Kf3C~q4n$EnjmhvT@X*MWq?anf5P&6XcO2kDm@7|epGJS?N znl0>%SSjyGjIA}o#w=DC!>bS83}lb3REF_x8dPZ89E^chJUedRY`wXfZHsc-qqjf7 z?NHj>K$^sms|QRmEB@6M8XuwaSc~{b{}(w+gzK3}RQo&(fa+^R?9M@|Yvr z@~5pqp|#^pezAsVUGm_4C}^Q{_iZNXRhRdkU^{WnGt#X6o92Ma^GNOTuHi7sRl zec%Wgt8oWe?cw`8N}gWk9&dcrNoGa3U)@Ma8Orpj?)2DSRGEx|P^Tl>rI96*2H2KF7;JW? zqi3L8r)Vd*StZ;M0nz&6q_LGGytW%#0Q}WrOigZ{Qu&!|GY-`Zas8f2jBmM@?$+uz z4r1NrsRiZ0CO7iXY{fzzHI8UJPmot-Nm`j!A;E0{Hi;?P->0U*5BPt^UaM zr^{ftvqK%VyewPHD!(?Z{KM9) zX?Aw@*0bCtn2uck0Isf%RD>{Em5<3*1Y_ns{pnuD+Qu7avyjTu98H$pflkue-E|4e z-3N%qeqVa471g!8-c7Ou^N!NPwPrgKP4;wS6tKI7`GYS(RF)UMRGhxwE%;VGm9Y%M zM=-Gc*c{34RBhsEBb7q$b;;Z4J!>fxiu#79BvJ{4amc5aP=K1`z9D#`4+}vXgSzVB zaItp*xXvr2zM9*^))MO%vkxr>{{SVs`&ZB2EYu~{^~TmOF2xl zKfzs8Vy~&`sHBaXjUQG20EBn@Za**V2_S=R-B)sgN?T}Qj`1Z2_h5|kRzI^HzD>U&?^-%Phegox8F94awPiWR+mwfC zxNi_cJ-m5M*&`I~Mlt)@T%7Mc>!;8(+bur%V@rj0Q-Ug{r(+u#Lnq45!LL0_-p~$Q z2qm*JgY)yjJk>oLRD#xNQb^cJ$K`I-(BF7#%88l?_r5YzS3f1P+&0M}@?=g6dRKia zmSP~()vb#|Df1ovbtAAflWG{TE=JK>^FcX%(q+gSN7AV_p2SJcIOS`z+M+C1y0Z+P zWM>sgV3_6lfm+f)PM%7gsJs@aEaY`kReaU;tGXo5^COTQz^iu^S5SdhW*Y?H^{e;R z;kQbugVvzAxBEwwe7=ia5t0;$ugggcDkNUL>oVpURcCF=aauRl>*dB!WGUvT+{ylr zIT7VpaBBIz?FG<+X!lzwXI$}7{iv%$5l@;%+L#^bvcx90325sdeyyRVS9OVAs-~|xV2JgLqZWb+G*;+ zq=8MDO0+`1dmN?DSYZ1rFd8*Of%^Z`f5LaQvPS(3*J9u%xs?tWW=0=w)cr~gs zkxNgCJBifDcJt0nM?JW=ox~>~_owZSNt6TSrhfG~qY*~pBj)qeR6WUxlxF5Qon=Hh`=_lp zM}}E1B~qlO)?rn}r`s-fftAf`4H+_59UZ7?2It&=*)<%tkx1XURuZYnEOIeRa^e`E6qf>d z8>Q(a49yLOy<`cYEtSdMERx$v*zW~bndVmOTI`gEr(r<@c20PC->d^_TcT}swF zyJa##Ao;-LfnT25Z<~EGrkrrag3l+jvn9dpJj!^GedUeTjS z#Yp=8-tyW=-Qig_o~lkwNoi!Zwq8Y+^CP)u+;fFJYY)RZ#h#%YE{?DX7jZSG7NCE% zCGsZwG4k+n{6f4L`W}GEE^BH@0bjHrRA<_Yov36~ZgVctIEef%mAP(q-I2xjW8d+J5NtH8q`=+FN)V_HtUJ)Be|}Tu&Xk zG%-flcNLdWF=W%NtR!n_WUwN$g!?IhD!&2X_?Tnu?$MmG0>1WiQ%|f-iAmk3` zuQfH~(a8)zH=TB?wmAEh?rIG>7&MEkl$}J<2={<}Pikg}&(mz$-%-1=jfspMpysu0 z)@WmUIHZpx@AD)X#ye)Sw7WZ>K3!%>&9Z&c%$ET(fb?$Op8rN-pJ?or*?D3D>CNC%VZZ<9(B1rTcE3V zf$i<%mePF0qi2@A!KyPWU0T~oGp3y@c__P>Z_mx%wX{gh)}I^7%8`NdcC3Q7J{rC@ z?iMKKK;CDoHzZZnk_<-xoJNvxvHH^$jSEX{M%LctmT1}%NlrP%Rnu+elTV6khfzDq zRF7(#TGXFSwTj-{Zm8g+p;AzzY?uC8ho%zO@o8 z(9`S<<-oUQVIrpdlgAZbQ-)3i&aRoj+frIB#50*i!7}XH(f7tVrU-u3JODOh-O{tU zTMuicTX@#oZFLyQsI6jYWRS}1ziv%Ot+Lr>CFZal(YF&kTi2+J)|L{JA(F;xxXQ@? z03!U|YQ446TZZxxq$$<9)$697>OyUS5s`*L=}fm(go|5vHay%G9qXEA$gd5I@OJYV8hN+7Q4(dJfsXagXlLR{uP1)quDk-Si72-?g281vjvt2 zRo+9h?d1HNLH0| zAD|SMR_Pzl5G#R_8mz|NZMZvfqk?NcQ@oSy0whz64E-x|ZdbgG^$9GdKfAY1WF0an z)Kxy+6}6iNc1_!}kUgsWU|d_IP0Ug7-t|t#);N}Dg@1j!<&btBl&)AoX*09^p!}G} z98|X#R+gd@3YL-)gNhbOTHZuyOn?mTqR&f@>}F__&2lo>?M~tn8_8{KWss@)i9J1O zbf}i=Pgz$e(h><{Py13$YR<n;g&=4Y~8v&`>li(_7mtlY)hiXB<_1 z9^QC7>+6R=WILl`H~`gY^!rtg@lth`MqCA{lJYt9GZd}n2ynh#XVe*H#wS=BUo~gB zk%&7v0dwhEGo(<%W|K)9w?B?KFwyON^gt z>W;@ekyBJvxYjN0qHT)N7Ay`w3ZbZJaB23?-0x=+NwBW$n$WN|DIAhXaI)MhV0wY+ zRqiK_Yr?B<=Gx=r^xfX3Mv*4+V*5N!7`z~S>JKC9QAZ3-8MtQi7k0p^dBs${hDEuG z+S)?`-2VWr+uE(qdt;~GL1qzc*r+Whuf0k|SS;)oO?edO?3Uz6ipQbvnz5^@E~zEd zf9VnK$ymAD?N#*)=_9G8*F6ju>R_H~$UnFn)QM3%?f$u;z1 z?&a6)sCKMT@OKWGspeZMVWcR9i#H9x=bKmi`9#TbC9Tc8vjLB@o$b?)4%CCQ8P;Ir2DFKK*$Zi|GTw8gs74B{U z`%1@wA?vgb1stU!lHEseo@C0>+)34A?e!F&WqbMKn(@b%7s{x-aqm_%Pc9pIr~5bW zSbWdvP$j&V%PYQrA%#`I{`Fk7iN=>1 zkSuS!ebZd`+U^rel?w=@mj!nU-LbQpTc{FQ(c|*N9lo{YLT0l%7>sSPSc$W=UwE~EQ4t!nm)(L9PtFU~5+=xOP8 z@!VWIas2L}mfg~-YT3EnV;qGfm*pEz6h|z&4Z)BRaU6pVW9^=`6}{b~Yf-dtNML5+ z_i;#qT{iym$Sfk-IsBj9mXfBpTbnzn4V+2lNS`!gqUXImZWZ!i zmY*)cobWo-dVCjpJ@C7ch4`65$YC7?S<-F{-XNY!I9eNh{{Xx)4Cm=fVWp`Qvq^7w zZf=2&2mR1k#(MFSQP{jzy43n;5g6119Hfq?-n6coXr!I)WAm-bun40EKDEz7rfG|( zi>tEMzF{E*kAlb0R5_a(I`@%o3^Tf!PezP}s=wGjVw>&LIg}XojmJHyTTauh7T!T` zG|cOiJM&r%G#A=?`EDYXFi)1}o+@r5BSX8kywoOFiId3WkdHtm2hbeCars1E{6deD<=QD`*-yH-e>xMk+v|c@LctG4GCCWCa+_MW)9+v>9~) zL z(ym`ywbDs$#}k;qO~(N7#bsORmbVwhrH)C~6SPXLz%_SJ7gus`k|*-W+Y>0qH6;sU zF|@R{wbVAGmg8yi4(!w8wQGhm#&Z|l+T4CPs+vxgG`piMz-y`HIVz{6T8B_0QZY5G zsGCXNe(%%kO>RVp@0B#>wudax%KKTd&0G5%R=e%&)JYu2EYH+aKGhA>%M_5fML%@) zrYp49`z>3^NX`mBB-Jq)n#P@Qvn2M9^9(B-5-AxcYG$$Zq?^H)~SFqTln)^_JfC1G=+uD#UzuK(>w%Jv88Dlv(^vy*M zsWq>Nk`22|z>;y&w(RX;(JiH(@EP7hKxIC?sByfmNmZ|{^w_0iG?SSJ3f%3e?ez#` zLJsifmHBA0v#~c1IaUUL^=Qq~r;;|BLo95G5O?%EQZ$MHDDu1_ua&IGZFkf zxu$B@g6i(o3hZc308z)|Nu%4`Xz|Z-w-FnuK~lKw+lp0=No2QTN1EU3jynA*+>%iM zkxMg`n-~~9t2)b1hQjHLj^cSZZG$5frFm*fe(kV>lTNkS_89LY=W`Xo0Ati8X?Tm$*;qDzI$@vvWH9~uc^(hUdyna?b ze78)B%i1xbCX(Mz(^@iQk<@2#8L0HRt^Bca&AEq7)g`lCCCAw=6MS#-?hD0BaiZ9$ zc+fL8azeE$lp3st;h?ut6e|gSQ^D_wy?Jpgl0_s@#5Nr5&)uqavg!90XAww`5#iao zk=nD`3I5Rcq>z*KkGP|l4S8)|NLqh4WcmIUsAklE(jv8BB-%q9^HM`)6~(DxxpCEr z;-a&$MZA{p1=Uv>9@P1Ywaa>*p>J_-ExZtcE-{_Bs;jIBZ5G~SCS!o7Zy%jLOZaEC zmP>f^I}R~ZMW`trk=Wk*3 ztF2=Mx@>VWu*(nw9&0^pF230fx15av@DvVL>qYJ%*Xb40K^w-VGqkrAX5s~o`Z%m3 zUnUY5j)J3>)#1+fTn+_K3~wEd^>9qTD|+IX#zwby7tZg5T>QRS?N;QoS*;gj&*tyv zam7%MON)D}Z?iZ6FU`1Sufrdh8cTz}IUg?-mpMcqXM|nN4*bfaf;-b=zgu$l_c1A$ z@Qse&T3c&0u%21uI~Gs%dyi95UPvzPqb@{SRDjLig}EhYZQj-fw|)s?>Qj@=S!)}| zvkDzR$IKb=iib$Fx`~?ddD2+-6;Pwzro5ioc5yUPVo&vfTN`SJVYW80+(;pr`5)cp zs%l$KtS#c+@WY2E9et|ICOcavp50kpTVn1x;MA7#&t{*zDhJ*ySE#E3tV=E1-d0_+1IW4Nk%beMbA-pGvk8+!DuFSI<1EzRJ|Ml!r(eme@z(dLeL z@8?LHGB_oFxyM65%a)f36J|9o-mEJ^-brV?^Ce6w^Tk)S+cYD~l_Pxr02OHIzi4mm z0VTvuwKKr?u6b?+IBtVnTn9w}x5{bu(Y$f;!G`RCnyAJ-q&p4Ap{aDcR^1_Kl&Dfg zT7d&2j^a&5;!>(2@6B4bZKamn6T6e1l*)0MiZYu|E_zXG5;M&5 z<7gQ+_ay}~1h+*9ti-o-)}yu5jk3J#hTu2L@>P2o#-TOLf+mR+^lE9?YBwy4SV3vy za?&r$gHXdI;`yQBL`N6|ROTrt9B*V3Nl7Hscz*cl(cOnR!287 z7fk)kxz!!QAO02acrVDJOI5ZV}kDL^_i6uOnuuB#jt`(;*a zGbqTZkwt|#o6cnlt;k;0pEE@z(~U|-v|MBxZb|yp%gc!_7s>=}P6~m|aeg!LHMfSe z(AN;jHRQ}=Qm3b<6`72@#|CB zW6LT&_pMFjqOX<)NvUIp$w0W|Rjm%ljIoAc8|35W^{ddv3B;VA;qOuTZr1+*FWt>s zw}e9oW##J`J2LD~;n^j(@h!L~0|ymrXttJjVYsuf_3CNbEK4==890}x?a*Fbz5c((8}4a=Xp2Q|N^=(akSm11!Yt#=?NjNnTw2=RSwu2S=0V1OP-s%H9Mt+>+0};6n2dC;PVd38+(|U5yfMvt zL|SOP(~{;y`IwQ@(xID47J6jv%lC*Y#cHcqM~dJ0CiN9eG45;*wFSS1uOmy1*63Sr z7426=~KSyP++Uw-nLgxULwyfG!V1S}aLCr-Q$T?&O9*P>c%CIz7~G2Gf8m=mDZf zB+{UZ2tBHY{3G_VEV)1kIIe|^4pYLK&4s!vqjLPFTa7VRzhlsouWQ--c zHtd3NSQp+8bhi0A*P|R)F^?g@A~c(U=~ZU5dx%N4KfG4S2Z4dsx308VtyqRr`Br4m zO=FR?jr?xM9M^0sb7)T?4eY}5${5uGvY(r6QM!TF6_YrL1`S;D=CzDNZ5g| z$gay6mCOZY5|=n{dV5%;mh7P94r$jhi83Q$j-XXbJE;~Ka&y5Ip$w=YSffme&1rnL zIV=>lYMD>jM&vEDcBto$3!OZlErV_x*F-ildlaNgWs`Eq+n8dYh7@~{j?GfsS;mZn zDabV#khIMpL;JH^M8%O>I>l=4~Sas9|%DxvSRzoz)VJ%_AbzdGm~N zF`N6$+~T30KeTSxdT~Y1nWrz7REB@NO;@*HC9}J)HI!AEqjxEVHWy0se;LIs`b68@ z;HfzkHnhKLMaTTJ`Kvcg3329$&&!@GsV=7^iS92JD}{~$gR?vjYSPhlX>ImC=0b-p z?^N$?e#>|+;u(xbwyVcTR8!i>3H&!_$k{7SN2O41ENc2LWO^sj%8 z?l~bLLY8rre`C_WKlE)#%_J!rJX0qqN%XI%{ttXXZxdR_Yj<$5&kqW%)Z>9)Cyv7V zCv$eW^*y%NO$(>P70k`PVTDq7u8&7|y^$^DMHW#ZMq%sPx$B7D{@MnbCs`NncILIT zHj$LsDcoG{Aa&xtYOOP!qe?3{wA*ndyz)-W(*e)a^ZW?Uz*!48o8T9!sjpMA*mHpDjFhQ$u zt)!N)M$kzZxLwb<@_v+&41#B~u(UE2Un$PO$TG$K>nd$6B4}p0MT{}!dym4j^-CLQ zU`gzQI>y;pGnNcLi|JAS0B6tQCW7x#l~#P`X!%0@MQdVAc=c;5ONU5=k9b@6d((`4 zYfAAiE-lp-7(}hroZ#Tq`&~B0q>^id^Jj-E8BQxI*3S1>)FrvQka=h@k*L8K=}5F_ z$73C?n-#73+anA`<@2AdQPb_e;SE`!o!aGY36*x8?4#3)n%QniHa=DdupNz6zs8Sab}j9uI+K0Fob&Xom=-2Qv9%E@thYS~Jb_ui+3c%} znVC;jAoZ;^k}G>S%SPX9bp?Sw-0@IY!ycnIlX;&lxZj)w_cQ@iTBV*YWNh0f-#tx5 z6~x+=$+~!#>_{*-eeOM~=h-5>y?Y^(WdYiG`~Kk5Z>LLJwUor)XA9+sM_)|Vs0GN@ zCW7qE?VY9|9v|+|v&$Nxw2Z?WedTeIDbH&<{_P}P(w*7GSXi&A zY7y#@i(Bh-h^flR2RZuDb#*>y{nUB+g)&V22F}w()B@a1Ez@~y9LP6qY;+YhjjUy4d6j&UPs}-C zNi#)hY9tId$Vcwa-sX`Z`yJCtTzPJwc|XNcB#hhEiW4kWa@;b>(TF(}rTv_iR`Ie( z^MV5yh!Aj1jd!&pj!XVzk#fmZ1_eq;}vR;5Z~z%WIKm zr_QcFc*J4*)tlzGy>L$(d14L#6<1MIy0=8P{{U3HGxn&E$t|L2P`Np080+g#7UCO! zD|RJb^Xj93oz@sEW5*|akPTlHjJ6R{i%Sdya1tz4D zJ8wNddacJi)8dH^sfgqTB7k5X^&mjANpXED9zs?5CNa$z$MDl^?ULV9yZ-=Ytdchu zBd1E%G6JzzjJhGg#%XRO5-o&r3{In#$A7IpXxeR#!(k@}HG27Dj@sYsgLL40$E|ak zi+yn3Olpc4@Co;*bqhO)sbYN^sj;3!H!mvXi3&cHrLjXb zD~EPiRkxb!P4g$hu#+HX-j?3@tamEkG^}~3Z?2@(E*3asRaIU`(zEDN zBfPkhONfi8bd2S5R+&fIBe^*Q4%HjR%WoK0S7bSCRCd2_zL=qv1X;ivd8}6DBJJat z?8K^bxwi9DLglQ|A1My*H+oU3TE}Z5S;_my3Lgtm+1weL;v|i&!VX$a_0qO8dzrV_ z6G-3Lwo8?MUPHzR^r@|_#htl}{cDa($=B&h+JU!b@-3b`95jqF82eNzlj^yV0k^`4+RmV{Tg1`Z zkG{+}-B40Bw0k|xaIAAC%$4m@Tf&xdAPoDPs*aTl>6(R{#6fc!lDI5KT54Tf;Ksxm zqu{aC84GTcpR_Jt5``FCXWth$tK-iy1D57^?3 zA{Zp+6=}4;I!Gp-=qjFFRmEbw*YUJ=NjewZ^I(4sThw$rduv;XTg;MW8INn8O?0h{ zS|E}b^$8`qiaoH~x0FJUz3)qSMU9(H8vgEKux{gN^{37+G<`lNf@tCM046CHEJ^QF zZnV8(`Jft|%u8rnJ3?(Zs5OaaL(q!Y$t*K@^2##CR{Ov1)H+S(pKon+w+Qpx?Rm5SW|k#rCCCJF{{V=l ztVwrm<;KTkocoHGPP!JCS2JD4({39;UWcC5THiKOU0?Z3sLhp#^~Gvp%X(FuH&=d8 zW?0dAlfFl4)@4gyH^?N+!voNtdaI+yB3Q{7jfjw!1P(zpZp(C5tp&>nrg4usxLU0Y znNr?W(&3bZ7Z;MY=2jV1_2#YJYD7ik#F=IpIUO@g3^w{scYNyHlb^nQMGzKsmRDaW zkV1wXyHHUbj87f8Rs)gFDjTbbA-G6{cz~%a$~)DaCwkjT&fxAGRcS9Set6k25eMfZ zic;95X2b>L(`|Mt7muwbrEvN_jI+oVY%WUYC-SPRaASpIv_`d%x!okZf-1nZw>H-+ zB!TW5q?!41^sHcjui@M2O}xHwDduID*kZm`{jSyzD@#)4oLn&{{sUiA=xQ~HXIA1! zvY_-F3i)65xYOXZwbFAaHwNLubK7lum|e`zc-AzjZFHz*yi$^)@(*ger4+s~&20EZ zP_2q{Yf%3HXIu-f-tYUL#Y?B#jSfVFeaXh*_}7yQ9a1(dY}VfRwY;8m(|o0UDjScq zd6yH;3~y@t0{;MeJ?Z*|vC{s`VBTkTX@OqgC{k-871ZCl&g&jb%KQ~l9OOg`Ui#-nEtr5i68+^u7+db+%Q&D?3?XD1cpKJaao(SNx z)sCfjyW^TM673ns){|U?yvu2!F-dI!$O=K?q|p-D*rkn|7rHPky~VxV)N5?P6{H_7_}HxM-$=J?_oN`!!o$lJ#_Sf)$7rkOp9Tcc|?&o7A@#5J~bd;|LY)jh)8E}F(EREH#e z?rPK2%@u8Kq4MFG;~9^U{>@K)s9PgI) z=C5f}ZP8Zbq-?u#cVi}o(2V;V$lBIO=6(ny$>?#?q0@CJZS>^Ahln}P(x_EJo|`z?Hu&_R^8U46})R}9@PnBzmTbre!4W6-MG|wu=p;YiaDKrrXnrT?> zB(WaCptsX)ty)Oic3A!ubIWZeR%oO1BQcZHJmR28n^KuoZ5}x@m*%4K*56Q$Q}U~V zPrX55a5ZZ<7DX{Su{@2m-AdJCyoe-)h!{UMY23RJ*e>;+B!EdCS%Z2SlF+M066Q^( z(A9`o*>Zq+WOJHLwo}Qu*@5<;EJmu2DS>XvM8KW6;L_O1JbG)uu>8!#6Q0!_zmsuv z%K_TUk-7LEofe{LCg+I*V1?<5q%>R7;(=7d6ifDqzW)HIsID#G)O93yU&xgP)@7yC zE$p<}8QHE2-2VWq^1(Qyx747vwJMQGzi=U$4sq{V63q#8nWgedT`|LYR(v+Ijaue4 znYR}E^`UCB-b`*3?SaP7GmdG{$aLG{ux*k_56{1xA8NG8DP3sOc{mr3Je#wyj@5b_ zJGrgkjvH(!KQRWKaeVg5)4FFTZ^|>)n`>kCuP#TLScY;{Nfg`AE{6!?wi5?XuC0%y zGg7cB%l3PM&9pz3D$2MXd|xX>8UMMlSTsFjE`!dmaQe9mbmg&%Q0@g^)~3D7XDdpvbSCRhqV_A5q#Dx zzGuvh%Ax5}-8IC_nU8#O9ieKaoQ1C*L%EqrR1Nob)vK$vo>mF0O5hD| zs>0u6j@ZW&aI6nXmfy&RMh?NNB=p#|d+fKD)`z+&j*&K22Qrg?BaQV2x_o)-?(#F%S;1`fF zjMXP__(y*JSQPC0GAPCe@fu{!c(6hk8)-Lu%0G;HQ{}anR8%bD6;cZP*v=}&#ih>S zb#hd!VUe$!l<|8RZsM0pkw^D}Y@ zJ?dbtdsJe%6DUs+*CaRh6B4o=$WQRpD;migBTcnb@YQ7|)8mb-<9Rnl!4;Pc$DGne z0o%K-E28Qs=}5k2Fsxx=4U>;Drt=ybsMx2Phpkq%(r)f1NCzW5L9a^ipMcU6=1sar z9d~joimhc6c%zcj^jp1IK!^kike&5fVaDRuav;x zReerPHWiY{D*_*IZM{JEr_2U&t6S+sF}YVPDW^&EETXxR<)*hQmyC`V+P5_QO4*?i z6A)Q`LA;91w6$mc)V7*bFnO3?ErGzrLzo=0q>ZOZEaT=9l}!HtcRW>(Dm>O0l_VC=us-HM{DWHHV;sVwxkV3uoPD&t|4WrtJEYj8RHT|Vz)kcV;U?^(8% z1MN~pdVb1SoOjK2Rxz81Zc=IEh^YO^-Ud&-WX%fM>XAWzENo;_QIUbF<^u-fL;Ee$ z?UbG}t%|SxlP%rNB=c?;gxmtS&1Zd*-rnDGyR$tJljbQL-1<5V z(+SAi@}4@^E2?Ph@}DiRzJj~En^=Q+f4w`o;2Ou9OPwc`Bihlb=PYZrRB^EEk37_T zK7!s!WNpPihZW6gRxoN7-)8a^Fn4*MO7=}p!wDXr6~izlMcm7p;cu2NE#-|=0Cr=& zcTueFE>q2;)8f)5d7!vHXRxkzOG9~eaMGtTw(ZBgdK~Hn}ftsjbnU>)c0M&*HYNcnYW7$5tQMSb*AngcYn)_;+EynBW=oZJ*qhIc@ZcGZ_2tO zu_F0qGFTto`cp0}{L6A;>D(`7gf%#NZAc=y>YN8{uP0yn)*;**mK_Y|oc(EK(JJ zH#rrj8!Y?$^M=kB=}}x;`Ef*%9PND3%(en8LQA=%e==5+>rR?a^i-FA(g<8q-$!s^ zYyrKxRV_WBAG^AC4V?Q`M$D_&(q>!D(5TqJa^AI%C7avKM(xU{ky;m5(fN$9?(LbpHUeeDbQC?)uktq~2RwLiZN; zTjysVJ~_edUlaT%_>A5XyGOW@q_)W1hmnt^eRbjOa?@JSmg*(MQsMqZ>0c9xqUr8u zBdyhBQzg*zysW{NVf3tB7C75YR=1OLqVfLSZ0T1?c7b9|-I&Tck4kmrtTIf{p-9g_ zBOqhzT(PO8j!7Bme-+fBKFqPYj(y0hZE|jvBbh#Md1KgBnJv-dSzF6U6nSNV0k>9Z zg5twc7Q<`CxMKOw2i~nTW?qFYETl51S@!+uPgJJ0$J?B^Y(Tu@u_CL+9!tr=LM<7- zV~^!h!)EpYri`nh;3+x%D!`!(%d2X^E{ECRjOTY;*3`2@CE6jAbW!}VpHW%R)Iixhl*xKFAs6h#l zfn$VU?ol!(pDe6ya;n&N_w=ZATboU5RKJ-dnkXS4vmB}a0D#q4bl1G|^&6+zr^7D5 zx%u4oIPX$gF2@{qGd`#GgJ%vg7SaB(hiY})_jeY;{;|4(M@p@KH1cVp-p0&LESV1= zJgD`n%WH0=-O63dAyBW%f<;qXc=Ve%uU1ECU5}iZ$W`{F1WlyN9Ck1nn%Z5TGY+KG zcQ}r771Lx!yVhgXi0CSNcmCA7QpLnC%D*E5p#H-eqP4J?`BA@_<}+ZDJ7$+PiW_G4 zx|NO1!^B`xzq_xg=R_1Hv5GlT;#oIs^&fZIq;+eXh;@w)s_; z=L_DMw(nGi8Kc4i*mWlyR1;}86I}%|`D!@(*r|GfJ6OvNxB^xKcOsYiIKaZb2L zjap%i?%Bm&y0DvMWiik(`c@5^#T2a5?GJSCDM=V`eQLtkzmyTDZO7&mvtGd1RYDnl z_61nHQ+&|*9Boc}Q|1(rN`JK8D2dd;xA=#8w{H|ssyMnLMEm0%YArpP+`vGTOBCWY=(^)j(HrJ2K5Sa*QI02pzmU?r5oDDe#$q=Ck~_d2dztQ zW@EELmnCLllkHhre9xlpx|m5RxcOa3EEIaxtE+~)RQo7wu*k^8XUnN^k*yqZO?C0?zE(31QwKhw+?wRz!sPd1NMm<;Ytr8+k zZNxV}*l?qRmkM`PxI{+_=I<(?)E538dqpxEhLMzDBR)k_k5HNmHZ#SEOAt0MYGjpl zB9mPgSu)w={{VK48bfa*#AhNVJBxeOojN!jE+v;co9|$Bt20Lhow;`yg!8)`)Ru{r zn)TyE8C7hvdsZx3>Mw|siK?oxxVgF!?CW3Y(jS%4wGm0GPZ<4aX8xUqngdLkXl_lGD-G{(<-66 z`__ewWhT9ei4qn4-`6!pOKI)zBZ#Ugak$9czZ$__=7idF8#648585xAKYOTN)g{z7 z>m9A*mQcL3IpgU}X{NclKowOuQzHKWjY+F`aiq7N>N}_M?Z)D!PPN#KSyxolBEQxx z4a<2*vHo2tb<3$WsV%H6?pgM*CQni6S`nK#?chs@nWbgiq%KY?FI>8{zLE*_{n1_9 zKK6}<-N1WyrDH_P8up6Xc9vpEOI~9Ly~(ZC(Al);5^Kh_ki-~~&uZp;iF{cj>Q|Dr zyFzj!R@?cC*cwQURmI_v!sIJSk&n)^24^mw9cENv{U_Lg}TE*s3H%*e53!&06#07bGqVOu?EmpiYd zZ?zmmoTxo2&Vs3`NiFmK>d7K#z;Bo41GQ3(ZZ8rz-~cMO22KgBIgDB?M+(h#ZjRn; zA%0ML3WHdt4NTg^0c>JycTTjo>;2lAy(NUlOZ z4BI2ec*$^KDq9%u#eALnT><22PDc3+%Yx^r`D^Q+4XwT>j^MI0D>Cix#eA9jTphN0 zND6WGm&YIM*Smw<%=X*scr30WL}0N;$Cghu)GGe~XwHqW$kD^OS$kk-6_aTUV(IR$ zE!E3W%b}D{g zI2BUrDH}tHS`a0VETh!Y+TUEYjCg^3)fnqq6Jge?4wJ1;TzQ5_$lebFG))^?#{1K$md@7y0BajyME(=)Oq&+;yUU}fZ=T)D z0CxWXvONtgywb_6J><&YWCH=aWOk~$O|9LPqFb%hm$#P~k&K)b^%Z+qx`uU!Pl`_~ z%OXcr=zVHr7BnWlu{QUY)2E$k2H^-ik?B=*`7WW+UuLs}Ykw-+sLVTk#7 zT!KeYQt3A_O$l8^Hb%V*agTbA^5EFT6rc@?L}b%-d)S)RWN6pRb;38jYz9GwCf7~c ze)iH6jmmiDr_?Veu_5M(u3}^I%)ABk2kB5-%x&$Wuy}+}+zrN2)MA%ZoLbpJkxbW6 zw4qrWr(S6gScg*ATBH!D;#KNvD*jI~ zUOeqpU^DAkwgvXKw}(k~W%D6yfC1@QJ{N}BW_x!=5KF@DJt|#d#^K_N$eDyk7>sl# zqx%-457|Q6s_Z{84M`d!R?flZyOIlOlx@ie*iu{|R*@`^$+*+}Ql>CvvKw)M`O~juGkB0J@VA#E6B~32D(9F) z%^YpMR2kbzs9X!>i+YG9j9{|$tma%w8kNO>gvOSx!*&`#+*EBek?G!Dgn~HOVROw( zG*;_tGAreF7Tu2csyZFzvuH47zk3-Zj8wDe+vucj&CWoO1IaZ})WhX61LSbP zf3;Fs*x6iaMtS7SP03O?s`uM(HDPZA%&UhtY3=m`K6L$6A--g=~Z-FAGJ+$ zG_EAL-<0;PE8EGgG`oXlzj=AVsup^C{{UsYsWU@x2+rE8*pmFv%X4FLbq5bF!Vq-& zRXsE-cvXW+JnMA-09W3db#HRoTsLw`&4(d}u&HCWhUN(V&T#hwkxt^VpQh^98Xdb@ z$!zkZ&A)o%0-NVO_OMkDpimeS+PVuoEP~c}mD?N^Jk<-ErqQ*5AK7DekcB+-tYm7o zE5{ta>FYGhB%8iW3cYWtPo}QRfw?yD*yE>4XWL+!OTe(I+#_LE6uP8x-&w^D%s%Bc zn9?fw(q2m(jl@iF0OFsBKG+rr8sWc*l=P`}2ANjc!EIJGjk%dmCyJIx{FM<{W6o|} z#|JewD2{uChfP$H-K2Jt8-eLk+h}mfu#_qnlEm>$zPK{M6gvX^<1RgF%URq+tiF2` zlweh)1t@G*;@axnEnWWrdI)tsl=8DKs4eXnE20A2XNs`aQ$w`c-N-Pwa52`R(X5&& zn&GEsxRm*1A4+7FA@g@$lEO&`d{b@bPwe?6oCjdxc8)3R#?M$53O6*ZwcEI-O9i!@ zj~vnv82Wdrxg;qy+P9Z%e9KfDzESzq(P?3>V!l~HC+2ATio0v}eIHGD(n8H3AaUzi z_O^1{%@cX7eC|s6RVFJFeWG1L&7n`-6_a-69dLS7ziVlx;x zWL?ap?mc;@Tj}d-2iPsw1bm^oQDTbvkd7%8ZAcL(%1@;%)6Z??mxCnyKk#Yda^<+QaPi_f(hgf^;bb+vnaKZjkAT0LA9gws@qcH z8PLYe$Z!}M)M)M3Oo=o8mh3^}nvTvtEcqJUuf-&>{>$%g-9DkL-rXVwS`^G%E$PtNXF{q*s3?$#6Hg(M;~H&t?PNE zT@ANPxng@(ZOn2lu~Kk53ZB@O(DxCaoQlQ5Osf@C80_K-yPLVG)g`@zM$NT-2&A+V z7~)e90ln(`!q)gCV-t9q^8IRN6q?8F}b4(y!dyEITAicb--oV^u$Oy=oZM8YX5@!(y!5akfi# z!>=HES6w*ksm~<37}1SFOUXs*wDU-Eih~|sv8P(eZqt&Jub!s`d;KaI_H9pmnNXIT}-U1a~xxW4NlkS&$-w`{m|X( zKHX)RrIzO1O5^urp7fUL_a0@{o(xnWd6zcjK7Jec0+fD-PP}u9r}~ zapWf4v3}gug_-pUWJH~!h=QYUucdka0L1?Q8b#rKDjfzF^Dbx1cM^9|*FU9UEl)~~ zD9dxtel2*KEkjdk*BbQlcP%-vjW zIe5Z~=%*FSbJUDfRgoNz=3N zj1P3GU&{yP0=SMKNV1XN10!VT7_O^Yxwn%|nlR+evm0?# zG`J#;_e4V@JdF|DtU4Ujv7GOR^ki#`smzMft2ALpTxYFSO%mSUTzOswVox$>itIGh zXfLjntfP!J;20i$wVK*&i$3Eac+};y=~9GqJ}S~|WYcDljm#Wv!RRS2yend+-u5{I zEQqn36UPPb%oe~H zqz!;;CsXjnmBy!KDSeTwcvogP9M@|$jk@bvK{FWHKvW}&k6zMJ8yiR#C3a;7pEC;_ zW~rmcXQ@jf&E`LpGC?@SQ;ybOv!sG`3d1VCmC@>2b<8@1v%_pBMu;xP;0`*|VbHGb ztYXcw#8`2IR~EM!%L(t}v6@hK5ZedKSZj583f!Y9cPaOPuJ2ONrM0jsvM~9wK&+T; zcgEzVSd3Q6T-%J|ZZEE(vx#mZYn5gDtJ=AVEMjSzSAmi;f7O%DeQVLAU$d;gpBwN{Q-+#ds_b#q&*yt|_S?IO9B zu)2qcW591p^{B}`%v@75*3B+U=l4AIYNaG^r_9kbfzufh4wa>Pw;RMJEx8=Gy=C06 znZC;@*m{<)N-~Q%WfMB%dwH^M1~b#%v9GPxI5#R6c43TG)z!M&tJ}pPl}8yhO5!%R zgbpkJII7PA$8Qu8 zjP4z4vYJ*hl4f3^0W(D;Xi5bGidb4`_Z`_xecHQmA-9ALxn00!tK4plwdFLamF1CPK%G2_4lU6?Q1rCwsjow zPmye*YSC4D zc!5*q2>TjOE_m%7j4F2=_3cv~2P9)!n4`3jgA5UcPUO?A9$^?wrB%Bg)unX}v*@-B z3@i45DJ%tNO>-Mfjua6p7;VR(($9n6$BdE2UiF%BD*xV4l*{=&Q!t*PnX&XJy(MwyYCNcRS`8m!% zt!mim_V0NyMLXp`J7=wVXTyIMFOT#EcrMz~c%#8s``}}}clsQ%2h-wNSjaeY>t7dA zn~SlHNTso}C7q1w-g9OM&Pr#i3Z)3U)b6e&f)=*2RKg>SlaG1`^Bz`}1aK>0k=)e# zXO(TdtA>sO_~N=F9$1{DwrzDVRFL8n;HEjK?yjSbMf)@iNg+-SY1Z*e9;G&BXM{I; z(i&w(_Bm*-XWBX zaA|I*yq4XewX=+F{vh1_X}0mm+I_B^sj}xdcO7d|85Om}w|;fKtg93Sxn>#KX{&Dr zlGDL_>vJhh%Im=ApsAzNtk&9i8u6`UR?9Mh$rV{-7dGE(k~NaqTVR>K@yE4Dgwk#; zg^ZbmrUx+R=9k!1zh(Py4|6iXY7PW##yu(4QZ2>xpOJ2|d58BT@tSSZ$EQsoy!qU} z`i`shq*-R_TZjJp7jLMGg`D3$M^GepQu{2_QLLE@?~U)~ii{{YBBc|KM1J1ObXvXV3+(`Q&!+Tu1yn11b> zpsVp+O$D6DBwR?_la8XZqn3Nid0OHHL{XHFJXLn{v{+VamNG1)7}dXo9>SqSeGAtY z631^9&BV(jjQc#WFhKRIR&3XwZc;{Z`?be42B5K9-b1lI(-SJOX6>4qFn-r5gl$GY ze0HrlNhsVxZPZ)ZpY*3-3P{;`}aF ziY0cw7cKU8`BibjB9_9jYVn#pMQ;-nevCQ_qjPn>F=-S{B-svddk(dJOL^qA^W%1m zV<81Zu*0U@EUhUMI_>G}TE|eZk=@)oCdgU^=mT~&CDoadGbHn?Fzh&`m^@67tc^5^ zcO3iEwHw&wvoLu;PHTHB64zp+I%-?$OEMByXRT^WA-pLlJ7bHMTCB4@y|QkIXMlc{ zEUtWzv8E%Jg4L9TsY***i|dW?Hek<8bgeB)>f**oqK*9KU;!#R3T?HU*sjPWE+3W@ z%Zq}O2+U)6`I)_|np&L^8?h~9lrZxiP6jGT8dy+86snUj$Wl4QLv^ZJ>Gro;l%N%X zcgBaK`&2fPy~;;=>xrft<6lKRs8KDenp!LiCBqw!l#%l};1N|<$%kKzBwRRw%MzDL!tDEW9Y-m_Uq;y`@6Sc;rGCi|{ z6fL+F9et>|p5{F@VBXOdAxjFe_Bkx{+j}cKtdX&IanyrM2_yaIpEb?QXxYxz9Ezo< z%`T-hlWH-s2nxhc9XcAYnp|4aNTO1*#lwNz`_$Lh38Th>KqQGk<)~H>Q_PhiF~|n# zzEQ;{n~2?!hR2NHW~g3k)9QC6>}{4Pkl0Bh2=0DB+55Dt z1MhW6^yP}!sg~+x-R3FbeXA}VVr9OX3y8>w$CY9@&05jz#@9y?B64xQ$nvb46Ci;IRR>MC>p01~@+t>KI`&NCtJn&)2;WU@&#R%vYo zyGaV1?OwGGt2Nw_*juHX*0%B-N?)T2(2DA0+Z=0&8{VVUwL6=;i)$C+NKOdNb|V=J zuT3?#*#uCtN+a5m4uDk~Jt1svt~DFPH#h!Y$Pe_nCEADg|z#VI1>KiRSV$(^P+x}UR#Z3@SR25J!tDq6sF!qjx+NOgmF?>`B$2p-+CpFI8>>R%>0p^;f?z{o0*>DG9M=;T+rsc# z$>(YExtcy)O4+RFtnKwH=@Le9aG8APjE-xeybGr3;_uAb%rh(c)_twLygJM}jLxRX zp=D^lyvMyED-VxSxYRV5=9M6f7cuUQKx2=3t)}U-$#p9Uq*I@h<{*AFmrVmrXAA^E zXXj;8u_m+>OJS&73FQk6jhJ)TQ@M=y(3;j+uVQ;g&&W&eJvgV?UrT(^Td+b^x%Q$v z*zPRlOKFtPlhe|u_}oA98DVY#R_G#`@kz|@)rRHz* z5t)RI-c9^6&*8D`mI zx7BVh;$p~9V{yphsA^YJY7#pY*d#d^7|m4B)>KuodHlf}7Gdma)yq!TzzKIGd`BKT zS0vu0L`_N?yG=eJ8%9R)xE@YB)vH+IxSAmfq9Hu)00U9j-otrkB$LON3}eAHEu<0c zMR>4~ox+i&%xiU7HH)T|Pm>gzO0QG&tvihmPQ39EHoj^D0NuFbw>2EMw(w5nBl+0m zb5^b4xJ$_{gW$Y-arjc|1zXJ`>c-aK*s`=SkC-vZBBZvG(&8BH&hazGOJkrosiw8M zwYRotuEy#3WXD>R*xK2`X5d_7mF{Tf5tF1Z{7R>=X586gHy=|{X-w^CEk?zX)MIh) zR&;xG`#iUgY|^xuK%n&ZrO|Y>oZd?_h|2P@w^2+AvuQZjppxc7pu~RbVyVHRN22(m zZAeUK6RMy|Uv}Jg!RcBSS25~R$k!k1B5jBdrA2uh7kYxMacqzgxaYMdGF?*bEOiKO zV~5Ok<&{@Crp>D?H$cw}n^|{!tJ0-bXeK3o{AcB)OXGDbyN{452kTjlG8uJFrT{ku<$goeMGr2a}PSw9J}I0}FkmP4h5cTBCh+B-aTF zM#+L1$NMzEpU&H;Z&YJF@%bHx3;6b}AF-=8E(Yf5xOAxXNX^x)r`Y8Q<@!=;7Poe~ zdN{iexqvtn#bLKra{1B5n^_@k`Rku*eeJ;99#5Ch4lzk2(%S8YGr5#*KaDbIgx2jm zyq>!|ngojXQ5&mqBT7Ns08-rIl5Ju=A8bO}NeKQRnH0K;BQ3nXNr{6f+Ix)FuAy|x zbrOA?`7&XCyj0w?4J5nOmPvSuJn$QewFQi@s|hfEQg-*nXiExQEQ;h?M;X8kR4ie+ zxJT6FzEdKT3NAUo;8k3LwV{GGNXkhX%65Z{5%sBJhBr09qC5zjXG7!xP>S^2xQOO3ic;?S~G-ErQ;2c!Zwymp7ZJDj(kD*`y zZ_b?!i!8|25SSp41oFKbxuWHx(XUOk)2X_I;g`N?+@hQbXJK;ow!UPyEPi)$xk2yE zK1l8DX7U`n%HPMFuRVdOtURdhnMI2#%a$@{f@%#*$+MLnSyV^6_i>)h>qUa&{{XZD zt6LxjdvBF6Is9tX)80vI_FF}YJBD56M;Q8y)l^$+6_ZecFEa8^nacXr)x3}@hqq~( zL7n5adsbHqjPSjRv@9O!k)rwdwBw#m|WtMO^z#= ze92cbj)t<9*B;_(5?k6RXpxwgz}z!SeQ);VwcbjN+=V!(H5NAV#;@}(;6l{8qg)${ zcZp0W&HX7ttF?t<4O&R-_9x6nD(RKu@XC2n5XM8pEobVURC`uu5?nVbYf^1t=F{T0 zNXoj9OZ!%y(Tqz!IjrGnf`U2#IjMZco=6#IsX86-ntQ#k%x5*aGNVhH$D8z z^7m2ot5+6JYiupyZ<&ru6V81z=~rWh(Qg*+dD2(vKiI0*O(&Snr_FK%0wZKSi2Mqhszs5J&zBo`#?ynav~ zwT!Hd;|q(^S9?4TkUB{(e0%Krd`dJn{{X`#`@w6Eme zi8qElaoW5_^6LKarc*!KE-nV$z*Z4%O!g?ll*^v_=j{QDy`1Caj~UueJ$n} zPKHEN{8A~!Y}xokUR%j=c=rt|a#dXI`~`HnRlHXEZ`s#s6&tbjty>#}j?ed#Dn_H` z2fcj6=V=`mAky@>X3_!sI*qOr1yCBcw7n8-KTw8v!kxr?kIDQ+U9gJM&dpjqLN=Y8 zFi;M0Te>a3+q_Q`$l>8)0radB)RKmWV|jI{>NgWd9wV0vwR#L!L!#)d{jc_jTWDq4 zLmo3pqg^~2w}_#NGb|C@U@H9uYU!#O?@@BvssSg2hUYd z6YErTw}#)u7ez#%2P11{uWLGN>*A)lv7C9kfoRloMx}Xar(DHy%(L8N2^4h-OhQywWb9h^R&;M)j^$s1V#jB$F{Lj?p&O4U$i-N2zK?OUX^VX&tO_f_JC{p5m@* z_mkP`*3#NPmlV;G?b{}zy0M0PM_FBDmNDi((zB56V(7YhzK7x)>$hJn;|&6-`-AD) zr10jO=IQTlOo=9Z#axk)JJzH&ur`}-95zigoyz>hPZ+5**#qh#VBsZ2FskQGI&x^Z8SN+7yg;Qx2%UEP{-&wxR`52daT7C_i~hcoR%DQ7sxq(~exawe=bjJBbJL|^Y7qYbXUY(& zx-h}xHQ8NEt#K(47G*t0dg66h?_OeA854JU?1Q+hVCpvO43aD$CPx{pMbqU_%`0=B z0X5v-X>iX1O8DI$%~)E!xs?^u<>I>`Eo>%n`j|Gk0x-n-E^8{{IkwvrR9(lN!nzyS zW{n-U^cm??7AUn1JtUGrzpZ-or(zCISB`n6@^K#H&gB(>sCay85vVy?3BhIJy3JU5 zI&8)`8_f;^x2UYW_Y%b!LQsSASD{X$W>QBZeWa$1wjsHkaLjqEyR~mDkT-i*QLi)k z&Aj>O-*+9WpSU|G3!Rx$*1dW)G_jW{k8$S7ZW(rioKq+HtXFc9>NTB&T1HSRo}iO!CnqUS%z;eA0|%xb5v*9Z!lE;A)4!qlQG!2c{kgb6!}68 z-kCLCW^3qFkKM5Ao+-L}HOAoMVE!EX(q2J0Rr$9c;sTw@dXJjnB9bNnn`+>Nr^X|^ z`O#TVe$`0a{fz-J<2+`xteKYG-CH|{N*g6;PiN)HXMByg5%*86RkUw0i@Pz6eq3gs zZ6}>;GBL!fz^DzhwrWQI0KLsX+qpD$*7qKB#AFDIk+}D&u|ygvE?b`~ji;?yvzy7& z$o}q4R{J!vTgxDq0#0#?-ZQbCiLB#}`%ifn<#5O4=~=L`pIEoIBVcF8JXMQWlF&u2(HAaJ|b`c(zs`g3rzm zTD2PamabxPo^lw}Y>>wy`7j&jU-@dC1xE4>&E;CManCfN8{ZZY^$9#0FLo)xD?@QtL&w zm`7!GGqShu8KHlhaQCNOTf=cVxRGQ>jRMC4WGTl&SKg#~qfJuTVzX~DNXs`p>U3MX zStPuf8s_DO(HP*M>}o)Q*Uq}r?j(WZg8ha{z87i#0AzNlH2(mxSm_eS^GeMid0KCn z@BaW~p44gnA8U!urE@Qw&UZY02&BBXwrMdS7VwXob96ZENr0<&f2c8+ftuPXi5ah0g9E@anZk8BNXrv|{!PCA-!Z?s0*e1E#PUz9gz9-^doD=d*4 z&pJkFCvH5v<$3RlyK>hou-n3lw-BAcAG`Abu59Eu!n!1ay{{ybP$Eq>|~qgc@&mD zhM~QRRJ}3HCJ^!$+M$(lIWIS|`AfFgADeLHhqXd2=GC_o2*zXl>eY?q?xeC@>9QMmqvUa#cNu2#_89ch1=N4U6cryeK3i*h8#ti* z(W&1U9G%D3p|`ac(-|%s&e{oP{{U);S>~}5HM<2YP)Xa0k&-K2F58KAvh@g`;Z_6@ z$-4UOkRmC&>ykV2%(D4J+P5aeRVA!Y>Tfr#CVJA-?+h zQGg;)a8FJsd*`*YWpo7?VQ@LB_GacwnR=~|&OI|pB*sOFK>0ISJp@>W-D9ybqq9i( zIL}Is>T_!!mmma@lHSIrjt5R*=hqcRZPyX)V~1AB&!s_eb|ab_Yl}Ec>c-wKRR>o3 z`qjJn2bBbo4T`CSTw_H1Vy z)N)6E8CC^aQTM|4sr7VQ8;D*%-j*O`YRqpWcS|bChR#Uzphk7Rr4;w8Wqgmcjr)*e z1bftzc!6#81&_;ijj*Uxb*t7|7us&xR=8Qg$v7Q7slHTgsZSJ8XUI_Tk^SmGL8Zu= zUB&+Z+SWz;WA03Gjwow3*MECHL{YZ@agZxO-9vo=ZALwkrvr6HvCg(`$u7kw<>I6Y z`i;P~`!u$2s_k#OSMPol%dKheB#X_1X(J_7F;hopJBM`wBM;T(ZF8VNB*#M-HvJt z?MU0$6jAoMZU)tjda0`dTU%RpxJMzpEUi7f3!0I zpD!N9r_pq^wUAGAS?_20U4hEuwG&4AwdbB&FvNC|>56~$k$I;}SdG*XE=0-EJ?OCP zLp9&_hOzc**HqKtJ6IvXHD^=4Fy61&ws|`O;k_|b>@@p(sBThW_PMSbc$I(UpRuI6 zwJ`Z+D2e%k6YW{cV#>GiSk2{2iH-7{sma@#z2->MTS!;#t{Wq*J6VD~+H@B9NhE!z z@~OUmGwiwZC0;j=;T3{HMB8(wIl_Xs^>i_u9F?UwRtu3i52DLdkTrPXd^}P zWD+24(kl1$6|JUEWpg}22U|O6PcfcwD}G}hTa`6Pp4m4vfPV-8{M^-h8=HM8Oc8me z;ko(ABbuL0jy-3@5?#yt%S&?6`5)gsnyG5dJ9vs_j@gF);-wd0(dwZ=?edNnFan>L{{T}>wT>-P3wbpU-D(Cy z=CgI%+O1gF-A$}ATTkX&#M?ut;0j#8I`2)K##(7UaNoe(VyYxi#?0}VJj3_56N6g1 zq+-V5R9_|9HUlDq@{>^BG%F-FzyO)%PR6b#a?payPiu%}lI6%C{GM6uRb-AUoGEr# zl=LT@)~&QMTr;FkQrIO*z z(Mxg+S;l+RvusN_!SkGBM^UoGQuThxbIjte2s{Pp)6~syen|=+{QEIj+C0Fo2gtI zc)X-Gl8w^*-AMMT5M4w4xhuG2OPnM65dH~ zCB4j$z?)E_bja&cYBo1kx`Yh`rPfx%Wc90hP14!1j&d7&k;l2F>M*bNqsEL%LUK8* zWX(+LqjhoOs~DuTi|qbU4EgVoTDMj<7J7xuQZXB$%zIZLF{w2DEZ)OE+8hI%rVb59 zE!-M!hvgS)e%T>t)tl3`5!Aw^`W4n|dmj#gsJlMY;A3|0t!K|FYLY_-`k2aYP(1}E zoXomZDKn&kHRVqxq13isScZ}*5><5zvyYav9pHI^5AzLe;9h5jOx#tx%{+_ezGD~Z@ZSEU(*$#gyo`&mHW>PzJ+c&w2 z1upHd40`cU7%t(rf!Z{0DYxw{*0sNQwlevE6jDIqxxYE)lHIb!Rr4qZ_-ih7Pa}z< zrcG|(eV~h2{{Xs&gI2sZ9irVmirdE`9G%WF%_a7oZ+$hqmd<00Db8B3Y;Pr+79`_j zr9oZ~2DOf=<54g{zH<%%_BkP_KA=BI+s$&s$i!F=Dp z<~Leypu05-Rx&Ty3KHQ@InNb})!4GemuDuYeCsr>suw#uQ{jztUl2s4cf}*&bK0-k z&Tf&K0QwKVxWo5d0m(d`0=Y~Xu>+=l+~JX9NQW7Q>&219JI?#UVE zv9_gHn^Cq){YZqBqEtU7+G?$Yo319hlXO43DUPSsnFM!wf_c(Q5~}i;;L~liLl&U7 z6P?2chc zqXRW>O@;=0^qiPcj|}G-sJQN9NoE%MIc?75RQbKlS-0JEi*%8yxi}-~PtoIbq%XWj2nUoFgVMhb89I6Fs5r5mzJHnGj7v5n(d6}eVp&MHfN(@%48BC3~=mW z7Bk;!Hm+tsvBpN+{{T9pAD#W7BR+hD891U!%%oY;=8hdYcwO7gRl=NeQ(Z`~+Qz0v zkTC>Wj#3)nfDPw$jD`FB@Q<^sX`+%c#{o$@j8=2L@?_tQRmUfZbMjBhW zCJWEa+v!nVY64paxbg@^ZM#C?{b`oUl4-WrEjkZ5imYV(!|PH|zr1^=k$-yw9Q^(1 zmXcoHJBGE22vZ~lZn&kI?P0h`Ufx$;?1PGy`sN#@jS(bEoPmMIA4+60qR006+Iy>q zxAOUgQ;PYTM~&&zsH%_hTRqG4-f5%Q0U_!YfEc5wLNd>iw!wbx+tsC=#dR419E+LV31u-$s z;@v73Rj-!dVXfozlaI=$ywS{>U`Q?mZMZWRZlk^{4xl?$g<9|xmm%=D2a3#DBv~hl zA}wep(e7G{tr<2_Ai z>ejajaUAUUg+6VWsV}W&iU?7JZy0ra<0h)!t;Oc3@*{riV+&CjBr-i_;t8XP<4xBb zZ3K4BY3mXjYddHnjeO_ZxP#CUQOT#ERF+3XU^=$|RaDxn(gJ5V#^pH`Rsricx41TV z-WP(#u3Fg$p_NeJxy?ml(McZn;a8GRQ&;17Eunec9r?oTJ&kD?nail1kg}W$CW@&DA z#JC`AIjq*Ul~~CI%#wMBX;wHGqG(bJ6&aDP2?TOT+e>jEk(JmGsmg`p2i~{kU`k^$ zL*y(=yBK!wS=yb^wbRx+W@$fq0|w(9^IA6ZER#nxrw!B*z^XU%O|h;JBFDRC7S?3^xW@zU*UiDfO;%S=0`zZ$0Y2koNxoDk$SQtsQ8!#Lx$oL5a6@K(M=dDn|I$&Z?KX&A~_sulUT?Ob)9p%$EvG;=hP0g=Co zqjB*B$hQdLWstK3Vln{jT$@XEbugOk!$x@mE-SvC9j(sjn>U(;-lK5wMm)nSZZ1zN z?Ole2rm{&KcF?5P92N|5isQ7F5y_P~2lKB@@MVp(Y$g%R*D`#ac&u?3im}lR&qL5{ zW>&CEi)iC-;$=BC-|4niw$iNVHx1iJ$8%h-hjiArnS`6NItH%d&Nh!^5kTz=A2GPe z$gh>eRMy9APN^)-w2LmqIRoW2t8WBTC}y{e?*9OmeXAes3p{B$MJsLlzuY_@L*T>Q8@dWxh5XN2_Yiyc!`g2er{7MJ&vPIjJ^ z&}p|RC7ZM`t<*33G8*=ACc#XWXu;rS8><7|a4JM^zvqPxHVUN#w!$!xc0-@Bj`6BTky|s~KlHIq? zq~v4$k=m_j)-!mMP`S9dB~eM*tHJ42Q(!06uH^d;pLHZjZ7-Oy7L4aAFfmuWM&H^N zQ><;ZVjnLxgL4>f3Y$5jl3Ad*X;qi&#VzCl^TDxQHOfUSiI!5>HIi0BG<;1Q%cWQ{ zBH${5bMIEQD_K9XM%dL^ml8NUmBm-PwVM0G_KO|FW;I18o^mSGaLsYy^CP(0a<09| z9+itIhA7Rpo2OgaN@NnRPwv)Mm*>N$+}+HIB}x3X=ijYs_#Vb6S>{PX!5>AKmu{e%=S@qSsMU&m-E&O5)Wyz#S36$=Vy|kB#%a~1wYi!$ zTwumJ;+b!xqT1g{Z@9X!+N^W>QDG0&p`ZII7El-=SLFJ0Sr?brT9wY3aU5Y@Suxig zt4mV8NwhR@t_PSS+uwIj%BbI^!+&K&6J)m1Z_Y3|6wyTbm6zFdi+L7ix0tElv$>{Q z*!_>hmn-J9?DpBq`--2$FuaQl@*KWCY<+5)$uaR9jr<>G1N5Vy>|{(DO+wNzOmA-4 zP&yj39CATzbYw-AXOkc?rfM;_+AJnXBT%iLdj2(D^3L`hNf=6!d5TyC=CWukQkvR! zxROhts~av8obyznwVP6o;u)qk;vNRWRyAu$WN4zpt47<{oZ_=lid|kamMbawcADBR z-LQ)H0!w{O7W8@6>lp#tlkHiOLYEAZ#7e6+I##8`imkPgixI}}N{yj!vP7e3UBuH{ zfq``)gwN&17^&v6?jvidL6HKCbgqW^e$29k84_~UK~~-E+>~97txiN(!qgRwt1*p2uLIxSxp@M_yF;9@ z=DPiIF=-kWIZ``UD|=!*vn971y6)z^3QgR~MjoLW!zR#t!P_;1salC{mw4JX^%d3L zMu}q)P)v$BtXa2QFePz;>0ZSfnHYG;E{{ZuF|lr?iVU#sgyH?yiK{%_L$A zb-ZLrUjT3gGV;}}=kieeyK`1=DT<`If0OQaz|kcZN@vLQs3sL%Mm20-`W6?@JA^ zv)%&|=ljPro`XZCa*)bbhi-H-X{u3d zR~;i8b|~E#V-)*ah}l{)&GPY#aZz7S6w{*++eb>A-Yjc?tFZOsno^4wGC_XpBq}2~ zY}F~$tdXS01&$V_^2v}1Ki(foCbJh;aJ*!MR_Af5i)jki8*!$yLSN5f7og20yppx5 zENU_z?@@hg0*MRA-FgP3vAK>t(8rWOG7O!~XqCfa<6=dbXCFQ~^{kZ4H(h>Q8q&3p z3(H?P=gn+ARMd*C%!CdDV0|iGH_hZnQ*XjI*|?f11|Vg?KK1S20(@g7kBS$=bA)Sc zLBw!K$LW6fzt9mbJsYk8;Kfq7^$TXs%s$;DyQO`Y+Sd2D`& zXekpzB3@!uk0CS2IO$f_OS}7cyx;UV5y=t6cs0QMGw~AZ-wy5WV14tZ#g&-n=EpVL z>32fn6AjMc85mq}L9dRKT9uDBqSV~C)F6gPq02%W_>gs|?-E>*8#Wug5=<;o*4-oX znTPJ#MsfA4kV*DAHr--SMs~;4R*{X4R#wyO&AbvBCVXS3rC)6}&TB-G)ovok&*l#G zS{ui>x@h2uk~ZM)6$SU6_bYBb=Y6$J*d|GLLgTA zqc{SyHEUbjrH{;DiWn|H#}y^Um`Yx6^JdqMqVOoukgoWE1aK?bcga_cJVwC;GHs;ruHe8-b?ym+THj&DF{@ zf`7dnWBaGj(9sqy{g+d|QnN)JrMirSiSjY)PtzfI<`*}BMQdxq6*)2wQYyXTrj=?T zWVpE6#hAoN$UUiA;wbdLw_S%Ypv}FqoJo&H9nEGlNrYDt8?`=FhfD#8R}{Yu%UEic$p_NK|b;*%dY9*0;;O)uRvcfV>pL<%N&;Rj12NxuFo>X3~M`&v=$A6{n}P2ZI!GEJAJf% z?mk@OITb3x`nAhQfJ0*!%AK-1aZ5DmcXe^o;ej`b-UdNfaD*)+NYM| z<|4r`DmpNo6VIDyZ?Z0>=j(>Gw>lW>r)dZ@k`>X=aYic8HtHZUAA;SJfkt zbm>0M$f8UWzpY#w0vm;zDC2@Z^=AxDY1dv~*+gJ%ao(-V9B}FJpm65^oE~#kf+Jfq zPsDinK;W9*OF`I<8+(gcperF|WF(B#T3m}X>~2QHRy&&=vr=iu>kQXfC1X2LPh1*X zsf2Mgz6bBd)?hjVSq!IrYMPd-Dp^1JD;!4MGg?tYbM}a>q*YL9^~d6{H!^o z`y^B8%W|^paBz1wCmn@0-rz}Y%F#&3!{%1x(PGO>XBCC2-o9%HZ+P)!XKZYqdT`S{yTwy+sxRTZ3b$UM!hATavqY zs$q@tx~5ShJP)N@wYXc0hL+ti7I{)RrMkLh88P8EVC`I1Y-LM3rC&U`Id#H}ReeU{ z9X(r6X%%hsOc_dzay2OMS+cg}p{h~XGX9GLFT#hJOh%K(7vbR_undOPj;?6PG zwN$ere-ODuUnbSJ1M6DxTEQ-w(a!0G`G(VjRkU3)28w6P266I|de(_pMfs$LLm*}= z6MV-5jMiKiw-&;3n;J)TaChT% zOAB0OpYJsWXGM-_K38S*s4o7{x`ej2N6!S|nU6}IJ2`gTs!E9EKX<#X>VrozX!i0X z=GM~&kXTfPu>H;#bdKHzLp!K>JVQ%tb=56f=?LSM^RML zYfH(lq<3p%m#B<%`c>H`g(42I6`lS=v|v?chBclTr(L-?2cZ0EkZ4796gq{nS_L1u zBhWXw_oqG8&73}1g(hcXz4M+cGXDTeu?zNQm86>Sn0YlO7WP{lh)>I7k1@}x`XJee==6ZebEdxsyDQH`OI zT5$x?#>e=&XWD=#wbP#8PnK($OI(n039CA6nuePUOKlpsx*LgR!4+C1{o+03puoog zRN#-TT{lMiQ?~mmm?E|XLrc+zsHI>uW`^3=Nn(S|yk^S=9S3@;r>cl!n&=NLkICHT zs%o0T`GNMa0PSeU-ae#NxNYLNSneTX66Y~PA^Cy#710D`Bu!~+ESFC!6CIv;$M{rJ zS-hHocnL^$^c;RQp>;c2!ja6rbh2_55!31^l1SEf>nx;6Zz>4F$JJQ(HL(gdE6EUB zTZq9j78v=et;Dlh*d!4_7-k@uRQ$rWW@xnh+kxj70eL`$&t#jP|!6qO7jS0o-}%P)BDi?WADtcO(5W?ogMBcR&TY*h{5Ud`d7b#lGx*WpH%6V<4UuV z%FE|VkNIN0)k9LVbkq0EfA%I4f#i|bn%YaNc3U5_gZ779rbY+jS-P~6-AB4uP^vg5 zx!~8&$KHw9UwuB(_eFwM3N9k~qi*@FO*Rp890@evzblXrT7_OcLqPjP0TatoLb1kc zLr0nkEn&KKB6Lg)4nI2Uf>DF9jrAb3vy06a4-cHG`*HL=YE`(3J$n7V!{(%z1KOLT zNp#XklEk9dabVr^nz1sv>ehc}Rdr|m=1)OhY-P;Lx+9unF0*S5yg14dP*oojSjRS~ zkzcq(Pzvt#tyfaI=xab8WmeCi{A(slc{Qy@NiG9^>}P@LS9cxBW`3olqe%$U$ZUVC zD_5qnyGxsQkr|*7?JMtE&1ClWF}1qJ#^7@wZl;Pf$Cjy=B;y2Dk&}@O$+x_h zOTLmRN!c=lL_W2ut#b^Jtjfu^?gLntQ2n=5NzUz&5LfCeOHi77=*`zFBp-E0LsaCt zgm*Mb%p}v}X;kBA&IWm|M*1@MisvFY&Qt-< z}@k&S<|9T7{y~Kj^K~Hy=w~5(@Bx7Oh0L6P2Ojt5nUy|p#Zn@K-|hcWns-? zD#d+q_O{GX?%UHG=C^{-=jO2#q9)Vr*81oP5RxHor`oG)4kCM5o-If1 zb^(Q@!ws(|t!8X_;fz5a+2cd^lx@vu+3Dl^Le4;TtnK^9?kk&`@;2oqv4S{N;hN-J z#;vzL^`@4w+bDgZVN@tU5&CYtad zjST0a=Ze9$i;umywzj)c>l1aSO*fH|vrniXO0tn2-zbcyILlm~= zQMq?~{rIkkPEy=*T)P=b0>f*EV8rzHr#{^|nF8N zSwk%DRhKRR`_7*bT^$OKz|N)t|wJspbONE>g=qoAalOo7%GQQF8F<@ZZ4+!*%us?Rf9>JwYa zn1)2c=e}zEE{9E9clon|BtLk2R!*SPHRKB-uHC~8-khDrjeBc2Ei{(4Sj1$mH+obu zKrUcZiVe)9e8bwWY-f^aq}n6s8$8x^osHP@nOKN}V>!X7D8KfpVu?3el5>j8z4OiL zNi;?~QgZp}R~2DM&^*%bjP7BM)VCJ*w?Mf_&5WF@7Uv&Itpqya;W~)1ZRO){VsTlJ z={6Hs!E(;2D>2y@bUw9i^W;@#ASl9tnv&LN^!1hHjbweiDC7!y46`JSZKrVioMNi| zm|SXtSmfCti-YfqOFMaWMr)vU!l&k3)t9_0YN29PZToi*N`n~`6HwGIn)2K1%_Q+J z@2B+@A&yJ9V+kfCjc`_+w~eRj5{QT*ZXA==s@+W;)KgtV(nll>u&Rs$n!aWPnqS*B zD~+ZGirr2Gy|-4i#huED-sW@mSUGtQOjcd3tjA6f!6_2R+^KA1J?Xc)UHz@9Sjjs{ zZ7|z%`?5gxt(Dpp%eNCO_ty8Pn^@!W!uD+RH58Vy&u|P4`^EW!in=UPIN)ecnG|WW zYj^jmrt&*k3Mn2&H1KLv?v;e{5o% z)w>M;03W?grrSqpY-6`zs(VBTY^0+QW(U=E#Ym#HNnTIs<)b_*<^SGO2$5q+|%r#TNxH)b~DO1ZS7h{ z8raHjOO29Gw64~R45xumi&WI47LvE#;OF=&S{a%axGfqM*_Ha%WxO&ir1H2TTY;7< z{2xl}RIHA5JFy{HuHA|d;s9gM(y2=u$K`HZn}_nsdVAH`;TkTV=Ew7+Fx-3O)oaV| zy6y*>dIjVUdWP+x*%hGyhjg=A4t$feEoI(nFRDT!@(gPnfED^4wSO`*G>OAE-fw#5 zZWih!pY5NxJe4t?G3!w;c&M#RzY*G_-&;xM>bl zSFiX}PrtRihC~eUt_^Ws3$?hnnGnGon}$m_YV{8fLp9Fj%Oeqij+Nu%B(*wVk4DmN zB)z(hMztyl`}N!Ddc#@I(5vzudC$_m zGZ533hh$EhNNMfkbio2ljlWvzEasO_7L9YCv#8{rg1CDaI}+X7`CCeW7yv_d z&2C>wKbLmN_LU^ipE$#6fxh zMR3s+n`~?CR_v#fPt`+2zH?`S)VA}-9;I;iOv`yA?nu*=$9((H-hhV7ZGEHJT*)ol zOkOffc=e`RXtw%?fbFj5gi7W->@|N@zOkA+sNJPMx$CpOD=SOTJpTX!3BKDh#v{yX zr}@;jtRq(5)h%pcjiU0SWXNBB)pJer+e(rX8EKAo{{TwK)U74A(QRfDmrxZl$JV9O z_v!LpTFEoCvBBo<&U*S9=NTV{50^HlX{g1rO~5Yh^+&@O*1A2t=9(iHQcG}TS0BUA zO4abq#k7_;G9B{Vza+@KgH=2-u*;&}xQ$Hz0BhPDjz={>$)U41UL-3mui0)eq{w=( z>?yXh+-bVDrvqFSW|Q}SObU}$u(-a|tZf!jk8dE6o!e5U1r zz{%~}s;#K|LrTZyjQrfwC6uoKy_B?ZebcivUTKMEr>5hU$u(wZ7M5@2OUZb@^D?ZRnYDuoRY+-Fo z>sCqRR09XKPTF~v;|z8HD3Uqt=ZGXx?sJ9ag_`17Bn3w0I5@3tQI_!wW+Qe+aZp`D z9Bz&V{MPigFC~eP#fHi4S-)qK$wEybu*oShZJJT1%~)eq8jaWw(=hi12pvOkcFe zIC2+0$28ly47o1Zwzf9oZB61D65s+Gsk)==!!7!=9){9420tu!KrNRV7O<9u=5mgRc4Y; z?Tmn|yLR$>(-uct>Bilp^dh(^r+bu(7U+@Q5iR(PFB=Uq^3LAk;}Fgw+w*yXpcfli zqiB_!pS_B+r`W}Gw+2Tj>V*4OYLI9)&iYxTb72v^dr$S(3H(0hs$0orq?w*@t#vc* z5gw$T^xX#HYl$Wnfn$Q({c9=5nf3LlUsi$}jn@z(w(J9pkSjt5qfdQGOP5*pLKF9m*~g_@wU|t@M$w}#?Zm&WST|B#D%-~j zM-rdByl(b2n`Kyn!rm?R#cj7k3hfd90MAc)x^$s$c_sF#Z|1L-L~8xL1yyUyi-K3n zSXSTU487{zo}J{|H`*@VUHQO~x@M*_*2P$_9rRFHiRF*VcmDuTr`Ot|wY-qY{*`m( zUBCLJZo7NaBDHum1X%!;V{EFPMMrSL?^hRcF4G27DCt((4pLoO)_XNbeC^pg$@CTI_d|{!y_qS&T&jtS)e{=%&Ny5stODEQEf}^-2fjd z`&E{EMUoS06iMasMP=MF!*1bNyEolN=~m&6d$?nXAyhdBaNyLkOA=;AN1Nwje&Ov^ zrZ7!(u}g%E`qsV0xqu>_rQ3teXUNcfqweLS;kOPdq6BhBV;ICGT#rhpsawl&9lVi( z$r;IvRQA4Hq1`}G3H#htwPskBY%b5?QQzt-q3lsY3CmkLh4Qx^R;yn_Cz_G0MVEqP zqW0&^^BxcN+2s!crHQWW^!4+VOp4pjIXJAwDz2w)voh~Cs4}Cms}RZOD#>~_Nso{> z_iBa4w9`i`BOTWR2^Xi~Q_l_8_BQRRTOb|B<{wXLXpolPJyPlzp^wS7iT9};3wNn? zYlhL|y}xJJu>8e+YQNd#wXuyEwv{`{Q_W3jWBtE8O?JdtDdZ319^$BFeKT9R@`c0M zwaAl|eDnscHRbxvxLUMvNx`W!mQ}x!$7UlLWjNz#s+ZRy<54#8OD~llDoDmpr2{l9 zCK_yx_~DL9){gJBD;7<$V|8a~`)%YRalg#xrfUA9sEd0M08m~-fw$1s6Sd3eMdn$_ zZ485M_Bb_8@x+kGul}zi9`$0&Nk~7@=4KKfyY)3wTE>%oZ4+id!=M?ehU69`wzQc@ zi)y!*`r@l;P)MdIrk}_~JQLohzqp!Jjw@IYN_f4j|TbU|X) z-pI0w`>x=hm(2mo|EXOKB3Vsa$MLpo-cNVQm^eV~vE4@#)gN2XpZg))*H53OEi{nqs!a3>ABs5MIBIYrz}A}O_r zw-S2PzF-qwWRex0W4(v^xc#ekXyJm^DJF-kV*vdt8&bWqxSBRl&ByN7Zy5Kf=4;EV zQ7q~fA@Z)%OJ1WXtmo~SOI*ZFT$reB$;xn$OpYGjm^E(kC%L@CxOLR)GmgxbS!P% z!!g^OV-$e7rs-DE#L|6?ME#`ps&KN~UdeH1apkPT%8)OmKJN2VmipgGmMGy>kBJq! zf$C}YHt-~pS~D*A#`YkLessW#Tu39)XNzFeeqY^@{52BZTYyJ*K9ndk zY94H48(VYp4#t~*WA=+uA)TO7;qZqP0Xpfa4Wz4bJmzKKp468XS9ccHL9Pv?5hfI4 zh8d){hUWdDjzhI$Ib)tkt@e%!7EyHN%$&fB$i-3um6eC$Ek~?TGBe~qg-UZx@-OX=LLRmG7$#E>Q+phb9 zaxv6Yc5sK>#kc&hGiO(ne3#{hd|0#U)+LdLPo2IdOfwg-Oou8fj+;Y&HCnkVy! z);aaJIYb;|_Ll85DQ?|o_owf@nLc^S+p8)I~RYogxcF#AZ% zomSRKB87Jb7-xJ<9OL1)^mX|I5&f4j$e|dDRCE@$HKU(oV2%TLEnx(z9#igaZQOg_eJC5!RY}mEf zu=^4+Bx3_}En#XCNpE!pxMD$UES|NuZqh7~#Ljsf*3{+A26LM-O(mVsv&zj2L=I4N zVkz+2!DSLOO}g$+^_=G)hiav|;@()-?D#A|^F6Bmt>oF>St}rcnXvMD@my5bEXIt} zBIvr1jtJcn;Y-US@;84M|jB&M_$fzTlL6E-0R@7DCNloE`BC*6ogZs`KMGaBFgFf#q0?{_`BxbtBYq+zTq`EV0H`UHSQjc&<%aB-K3Dx`kPe z0=0MVY6OBL9&Y%{5%^b~>zXVJc1l~TT*P-3?^8_LWi3kJS>DSzZ~<<=!%KG~I>Qy; z@1bHGc_VEt<-Mk*6jt{vAd$v)R)yAvZ!M6+DTN{f=26!b*$;%|_=nrTt9FxHA(Gw` zx z%hfDhFQT%zmNZ-|aYoN5#xK zb1P)7YC9Vyx3Noi`^j5aSLZ3TlDC~6)34bS8DVE3^1QIAwNEiwA}mx%!8FUOs253Xuf5U2 z(am9~+`0CFZY3cLZI3)vI~5n`AIXtkes>eVt57`g!t$7Rqoyio)_?3-3T7g!`>;D# zG`;3K6t5$^z+`1bjO`?fiuq*JAwrB45511{V*cLu`vZJz(!ZFyhx4Yr=b2{|aoUJm zJh<;dg_%QUM_nbNU8~1jQc0!RtSZ+VqYN!TGlH^{Uot%NEOvF>s&VYOuC4d1uITY^VNMuS(vW zQH+drYk67cc-*pb26|Mwm4>Z#3@1&!wzjr$xTb5RvPhm#TOJPZgiy6iXY3*UVX>ay~@+)oT*9n@a3n zHE_ERN{3Lgu@VVP;cg@WQY>^nv@k_!t$y7Ij^$b_1Q-K2$okf=*<@=ltEpQhxENT! zjQUnY*7uTmcGBE5z;Mu>m3m7JI`I}IRfwYG+yTn4?Oe}BG4R@@rHjXS8a0p*g^n_P ztDUp7ZEpHV<4G;j&9(-R{r>qCw{IA_x4BEZyWwvE?mu~eWhNfHFokHP7v^$+ZK%Dh*D|;f*)huQ9R(tJZ6nBAhFzrkR8Jb}7V=uV`PQm2 zxb($8X{CsbJ#IlA<-gfwQhw1KjhrdzP{n5*vX+rp$0rJ;@+!}lW2VTqw$Z6}T#Qqs zR*neF{{TFtzUl2;(tS>-qbpF7OM7>Y23AwmK<2!s;|Gqetl=7Fp32h67~O%AGC8iJ z#$G6gLXvcfZ}iCz$q#d0N&Sm|s%npSaU&b&1PG5^hrMUbW2P{<=k|IH&W~Yvbvp^= zxl$Rr?B_YJHPxWa!@?W`AMsI3+Rc*9msm#Ie9 zZ#A{o*_1cjU*}pbF*c-|cM7Ok|vKSxaJ0 zmK&>mL;FfNpdnV>hSucg9c!4-q zewxcafZpC;`1lcGV0zS`uuPI(cwQLuzBk(^9kEs;j(d$Y?(NubRl_kE;C7|ZwI_!~ zkru>F8Yx`o+pT2iy1liphi@gC`^pmUM2EKQ^r_w0MyG~vALN={tc}YB7{xcj_R`$j z-lRlF6I_@1hkVpJ11z2qkb&gNQ~hA;Mv~5&JhwLYEKz0J`29^&RswamzK_M1?$;5v z*p#*hQSD2pTE}s%Y1i znRrp^DzsM%YNiw!xsc(9eW$%5NrU50fQAyR9F<aj-TR*i~ zg~XB#p}WznNg-Gjr6i(b6afoJsK4nVwXh$ zO~hyET>>Mzks8fYCwLz>HHSQc>hC}D%~v0YtsPSS8-L$y8)x~2V)@=p_mZoYblw(( z1#LnW@=L&WOD6+&HH9Q!xqm&>$fpgrj%%R5D>vDE**?l5eaveH>dq+VxOJcH3oC9> ziq<1A^$S1r;L70cPzd&{eO?Id?k&QQz&8X}M)wIXn0$aGRUnUQ=Wf`%X(+Y~iOT!e zWJodfE1l@TAyeyEqdD@7ZIXJ|MRjTner3eIP;Nr{RyL#M{kk=V>mcB672OTWdl@&{ zc}6>1?)3(!Gdo_ai-EQ>xy5eYX|C5-AubGr9(d_lR`x9=rNeJKm9bu(DQICMl)jPG zcR36T9@UqqLn}>dBrFFN(_iT#9VdK`{6?_Zpb2WLH#o0Ol#C8~@*BAuCHG+ZRVlpR zJLVu7>8~u_7z-dj;dCn`+r7N?YnKQeuo17e;IH=~I_h1o|OXU`w5v1!$ zHNL?AS2YS2c_ z#=8aes@tq3HvGq@HP1*ymlBV<8}9p3{jxtl_644e=+y0S%kAFF`ULuGg^9;<22^ZL$qMz(=Dvp9XcdYlxHJ#cSmEATa=-+@?&C+ zztnZ6U08`N!Set+hZ(C&Zq_qgZ99;jYLt=r%bzo8-Bv+iZQWIY>9_AyX(5uv>fO=2 z!642DHFg_@joBqROn0WUMAtExq~S*kR}xvBaeXUFWH?XZh%9?K`-O!!h_3R(BPO1L@ z2>$@YiS47D$!B(}9(!_4czEg;g~0n3-ewJN3^ETjht{@lC6nx`TjeT7b5u2}7&QB+ z?kzARkGj={X%^fY&Pxo9)$+90y<;gvwPSknf2vHA-xbo$H1@w_CP>j*Gq^CWLdN<_ z1xJoQl%6Y3R=sUP)eC%*nrGE)S=|8H`5<5G~^NnX!EX;#ad}2SuwyPlT@zt z7_|GOnV}L*fVuBaX}`4Y4EH~{Mdb&rXBb%&MK-4GBt|9MkCpN|)vZH(mu+cce5mA% zd5qlWBbv&wxmhpWt{2I*R@=L=J*#I{wU$W#0MW^cO}Pboiii@-{VF*0u|Az{7%};G z6P^D6N|x&K${n&iOp{0Q>|@D3wFZxQac6T2O=suJ3F^kI>iT&8(2h&kytyPEVkz{k zZbqiwiFh@LqLSj>(Iaf_#tEpkRSBsXt>xPWa?74q*wbw8q_~JIE>k})MP4@c?1^pV z26p0S{_*#$q-`CDHrvl)Sfez%zWSUDQ@+~v_AMN7GYH0fz&NH!YRj8sZy~yc9-g&I z8!M?=;@|s0;k&shZ+65)6gtYHN?O>I#ZOq^br!ZaD8%w7Yv4QAP1t z(jGUx7uviRQk$qCRDnm97#~W(=)@w(_P3D*m40J`x~^&ZdAgc?-P<|sT+}fAzVb_- zv=EW}*sYnoLH12Nt+?|iBx4*r# zqg7uucEsv853gF=lJeR%@~v^QAHBA;tyb#cq)9x-+71D%-A426Ot!G8S56(h z>c*RS9lSnmx9@k179FcP*5G}z@z?Jc<-ZEJp$o1LwQ7(HX4;7w?jEFdr>wGD+zCPX z8;z!!43Nh=F9uw0{3*G6#`AOK!4J$&sIG^w%8hE*+Mn7Y1vVd;9`$l->8~$L>A+Oj zayU4qNp#`E+l{a{-f>e$8(P?_EPiscE~{?aCm%D$$2s~6u=f&OGEZ>f z9am@_20oQbQifehRCTy*E;tTZSCIbIYF#us#Dd`6Z(ZAuY6eATCfnJ3z|tcw1}kq& zkIRls#LF1yO;)qBirzh~F6lc}d3-?8nQfXv0`Ns=%mv*RL=#T#%Npc?yR9bVRsH** zRwOFp4VtRgmdp^si*m<MvZGsDc_wKXFwc6H`ruqc6N_+`q0|=aPHJy&&<^8+gR-FVm?qaF#s?1ropHEre7q%zGmZhdWX1&{IK6Jc@?AQ zZVg5-w?h!I=Z5W9UdG+zSQrG6I5h^TbP>F(X)^f01J;9lw1(;w@(|9<&(!1X7c{t?#2g#V9H+`g*oJgD|Ig?%tsZMF+>*He75%uD3vxgcs}(O zqMl`|$NsTYWtn{{Bj(L648cK!pjl!<6(zyK~>HLXsu(nwt;-2V|B=5+OA$Z z{hP{C3S%RRky-9-V~jfh|G8S{?Zaw!Z;do3V*p{c)q9OL9Y0K1 z7T#yPkN~ehP`~0w4g4mwb-Pb4$?h$`d3>${AnT7>p>GxXF}t|Ee>F$X0qmlX7j(@w z*)-IJa| zaf03tXfW+arU#j%xr)TD^}_mJn4^^N=f%?J5;kv z$Q6n6JiG$6)6ecRAGD52>qx!we8-(5wcJ=K7&N{>lEtI79I*TSMO^VbD11&4<2%<3QKAm`|7;@{fi#1_(Nnl-Ez>I8RA+4Z;+ljt;<+g%q}j$c-Mu;996~LSs9yG z>-Kj?-@P{s1vxmUYbgstm(sat2P9`KK7y)wC(JidNHD`_PPnJR1b5nf{Bk2T#A))$ zo-?0H=9C&@EH(7kma*9BO068r<`Z$j;<4_o7f_jE$CWCbuAK%2OZKTDdv|#P%M^P< z^Z-&rYaPVPs!D#?lAkDuxW+rwrLLtS)sByCZ)>VLGdCY9uOhTGxxQ6?yH^;h?J&}$ znIaxdyq!1m#YJQLsW!(VxRCB7SD_gDx*7EyB!>G`OMQT0fyfomMHs%B?2~Ac6SOho z^{nf&7MnG_$-$A^2Cl@`^4>X5l3Rn4*{*p(l#44Z{{Y&SYkwt{G3B=AAB|PkErLid z5GkHs8C#`Eqv{qmBI4Ru9(jpkBv#;8Cwr`2e`-ISn}v+!0&$8_g@1fFMSiG0O4 z;B=~&T9~nq&Ic+^!o8|XF)Z4LnC*z=JDF;=^{f(Iy}J#mw{XetT0Ie&xur~|7_MVs z@_fpjkKt0oeH`NA-sOS`pMK>$istm+HW{sL))%<>u$w=F+}4!OWvE<92ic^zyNuw< z&BlI}=kr=;R6Y{5{nU@DeUdT^F({E_C*~*9=~6B9e{QyUc%9pY?O023BI{GPn7&+b z=Re-ZYE2sIO@8{~@vLT8ZBFRVYT3SEXwba4X)nxjZ7NPiI#ss2l2as11|vmro$zLtn5k|mn1K0T|-cTWLsv4qGN{( z$vvvgy}Yd?mhr~MJmGz+yt50t;ca&jRE%y6c;s}fd2Ruw+s_@ukz9ZykYQWBXleLU zb8e?{D`O_9rPaovB;H^##EbG0DqT5R#tGTZ?=a@KghUY8-L2cVnH#3lkDMG-YcyJU z^R8ugE&M2VQEOU8(cckD3Wwat3PcXK*%_Xsz_yD6Ur} zxDAef8m%Rrotm;P=MtUgBQ*Qy+T&7*8fBIc-*tOaTILAsZg(zSUutvOvy_n0J*>!@ zOQ$3@R8&^FYl{%VYzW68n-rE388oC*84j*n@TfH?(^P~*X>hU5cy-Tu#m3rI(=rI?ut$+Xn7Q-Wx}P+SK7$vD52L zv$L~p&`UDP@`EN+;~v$6+$>hSy0)=~Qz`xA!)NY!AEjbgNp&>9NRgt)#4Np7dYas^ zx6`wKYSywv8po8G+l=O^Y4#~-L)}idQIGXrUl4xX!Al7BMXms|7IGI;C+uEw)v8CbI?rinr z8ZbU)SaZOu%OtYTAi5T-l1BL0ZmM1lvbkoSdzpl&KI(yj1}VCKhwSA0MZ%-cBC`;x z-1V(vGEIzF!)oz3CDeSZqcu?f0Ip4-fwwuNhY`hRBU{L=G5M7Cr)qy_nnX6}Kwp&c zTPlWDyCZ)u?7wJ}Duk6_zLgZR+gQVHQ_VK_BjjzodAaG)mbzNFN#+Prr5 zF-q!DMk9|Limqd!7%gul!w}57snd&X^|8CnP5bsP<~fE2p^S4F=-i=a$We7QaYBY9?N^9z7|pU zN57>{scH7_CUn{4XB;y~ae?0zakZG5(QJ}b`#2a1I;ixjm)fSCV`9QMS{c9Rqc;Y# zlhE#`6Pxi=5ovl^oup@wgNDvceC6V0`*x_)LU$be!ToF7d`+!1I&H*~znZM1Dvs6R zw^FU)@lI*J~lo8$%3gvIZpd%{xhm$E`EUxDlN2DvgvYv&|9*e>1W7 zt=m5`T~Zt-e8$7qqd6{7K<|7lAC-Eo4njzG7H%)vdWY_cuw?@|uRYR$R!eaU z4a4tOqxgQ(#>N=S#!Ip5n)xhj^*ZAd(e&lHk{A($LKFAMBQ@CA!zHGkR5Fw&BWcOS zaykrl(gMs0i~G5*qTPfFvMesJgN&Y)^K~8BwT*j!D(V>0G!fwPSZ%F?4aAaLM9XdV zbr{{aRt?mxBCM_ck!}6R_%*3!)|$<)*{$s*w~!1dX34HeEk<-&O}a+1Jf2uw6~dAE z){d8H9-g*>5*=O0ZT$z*vNRnmU$ZXli5itVk8xcEy_74aqzreuleNM7r`EF>WpxC% zYvn7u508*!(_+4k#fzeDEIN_LKi0Bjx4P2pt}bD@K+4$KMtA#)pHR3OUxq|dMAs9@ z{$MHCnwB#DnS9N8JiBI2ehQ@CR^p)JchlCRx}R9HwVnl? zUeZ)3R4+W%G#8JgXbEp6tdpBn{{Te^>-}hfb~QU`mcMc4Yu{j;_Sh{|(1)Zj` zr@f=eBvCYxlMy2%p7^QZlKevr^eT4k`P2?np49yc>h?`rSe|>hW4CKfs}m;UoBS9rL!^k1KP>@ARu$1lLjNPvu0WIS%3&aafWD-FmOHq>PvM!$=n&CsS!Bpv0HTLtQhT_?9z;n1_tk^{mzq*Z^%rT&F zpw$t5J@xCyBrO~&aHNjaB^ItP46zG|U!9vUr`nrps@i;5MJXmg4OJ{H7R>wboYoyWk#`6qgNe z4aiwkw2z)DDX!kq$`cgI1IPiXfst)YPH#Bv$he zX3b~GewS9U+@ul}GLsY+4yQa3$WN-QSW0gGDO^Fj&V{PQPR%KDhVbY?J zt?rd(QsQ7S!0lQZlRl+p(Y@4hIOEJ=!K$`!ExzWG77h@A=b_`RF`4&q{khN#f)DX< z4Q562;M<$^x7(Xo@<)W6hWlG5A-Y(_Bb zqmx;zBe-y@xdt=yaaQfwmrIqBB4#7y6;oJedsyVyR!~4Sv>Hg3u015(g>H6pNa|yq zBtXA6I5i#;BX03>%-DaWEXo?GN6z*nJ3^9@SQx#em z-b)Yx`IbW8tw0huXycroPB^OeGAXzOj&VxY4>L}+RyB0EP!Bku4OpdE_c0xK6&%H6 zk8U!}-m5ChA_1Oz}$!8nBx8QFOAE2i)_i8UV$YfuD8$u2iPa6PM? zy0}KXiNfx}V+-q6tmJ59j_2(uBL>UFy+E#fMzq);qZ&r7Yjfaz8tqKd-p>Z_nMqP| zde*I~nBiIOn|#NGjZR19UPtg(#@8Mp@LX^u)M{;!QaIRT;=PK_I4o>Npk!I3QH~FK z_=~8`lOky6x1H54Pn6^MSBl2Dc_fD-D8(mAST5Ur2<=y_RbB;w#CyI!U zNX4tMmz80PxWUQX;*_k$!D}(QXryrKw{UFdnx5V}*l(eC0NWP%`RFU2@aDLGwVEru zqGXWG!0Xbj_>;v_TWfIISxmA=Gwm^`$u$)q(JFU3$I{@rn1quE$9K#?t1+z6GsPUK zBQot7U~3Zk`rc@5;})`8&$kTBY1({n*xg3ki%pPmn&VmWp9vaHdAbE@}@}(Tvnl|#B#)WQo7)?bT!rKx`d;{ah!(olMBU7MP^(b z(0#k@k;!nulVBpLvH!KtDTYV(;jQHPisH3x?HgW^ zZLOQhk8hgAxzBS?mgL;CrJ3)nVz!M!#5j36998Sf$YPBlg?AXfR$?l?mM4x&t5`US zCHvUop`Fq&$q(OdT=mJSRQYumF?`6E_I$C-wlYBh76x7gVL8$np-(zD;fuJlj&FGv(A!`P zKb2CRL~AsA#vWEaR_Th~>L{p*V|JF3Net*7cS6cgZt5w!WxdnZ1_CBI2OMUo*~dPM z3toV3+D6!$2S9pOvfIn{cy1?cvJ;ZM2&i+=a@41JYxY}M;N8wU8ot+3+S#lUBJJuh zIjZ;ZB+^9S^s5?;y~NI~6M?k{Z)(L$-bUQI6ya!HnkfU5Hv@{ZsM6&aU%cE_zve`{>e#F0A@ z8)cZDXw&}I+K3<(kiyIxAH$AnwT#yK!q07NrZ*Yh#OFNL2nW12-(j9vcNiDC46&>C zP`##=2#_b)U6haSbM0A>EU>AtMgfP)2^ptV_ET&6~$=2i#xU0qmY0Y68 z@!SnY;M_`BPCh_`?%;H**Aq2@+o)wX7e{Fda##E-HtItJVt9XW?ffnL>MJ!>xNFIq z&AONF;PgLAr7MAc&f-fSK0A?@X2^5T>sBF!e)@o9>N8aJYvoNm{iSzGSZxD}X6fza zh4b=Q=FSV6NLF-UmX!i4I<{4&Wd|^mxwRv>5u`HlwNe;k0J?g#InzsKn;=}t0MEfB&Q8y_ix;2s;fsjSsiiE)&EF;Se(pzR_w`D)U%Eoy_h_2#mh*Flzt zmaMD}5je+ct$i-$LdY62z;Y;CaMp6LJZFlHuOl{Q85bw9s6bTIq*SE>KOoNnwXfpLD$w#{;&2r+@X?|xO6737+v zgUcl#gQj>i##gzF8C08PISx8hwwKmXGwpSdAG@^lrXr2A!F8`BG0Q37lb)HYn#?Z& zlm=F1T#ycODz=AZHPm;r+adD=yf!n%URAb+!fUIERNgo!P@Z_I8J%ya>J4KFNLS0p z8;1g@e`ejusU(xgxjc`Wx+^JeF7!o>2*6wciiT?|c(%C6!@l(Peyo@qol+gHl5oP1A1QEdKyL<>)<) zHpOI))GVWF84m~ROrBy(6?H2ic4g{A8jk+r-WXbP?ZW_7ed>A9zR>W%FgjLc#Btfj zBTM_qGs2HreE|lwZ*L{Kzi>BU`qp)8Y#QOt&h_ZOiP=Iu5n+KkbEaWBr$+t&C+t-8e0rkGo$*figWa!*+KKt=Sd* z#k_gMYthHOYiXCwHmxksK(8XPjHhg88LXcT-ff+lHp<3un~zaiu+12_K2R$w9&ztp zM4;qtDOl@m zMkwenE|xo`g3i?*M@`J*sP(RPOMTk0w=QE694w=$K9!|oBHPT;AulmfpmpM_Up%WE zG8Dv+HvXM!XiiLtMJoHMk6Ps^V5PhPdSzLF(D5ML!;Ovw;ouOq>2N8JCj^qo2pH3d|S(3IdXuq{DdC=09x(*I~c>qyD})>yFR_M zTk?qMY^IXVZIjH=mgvK^RDDX`Mv`)T-Ho^A9ca7M-p1BBRaRL*>5ayux{}^FQN($Y zMav?OUusscp2clLT3gF&WrajaUj(gb=@${)FY$`A(;mF1LTgie%n@2 zbtKWQVb9C}u8905T+EsYQVaPkp?@wH%WfUX?NeK%dv5I^iB@%AorhYEC5lU>xR@}5 zw%)n_019l=NOfzO?U@S30X+8ir4vFcy(OW!w3^%HkyGYT{72N&H3=3-G7z z$Y2@2IE*IN1%_!?}p?=jIgE9P#unmLhP+93Q+sXEl ze7RWXj`Z1;B)SfOh2T}jxEO1BMt5+Vdez-qQJ6Dc4GuXc&zfFPyU$URTW8B_h-Ci& zS-S)=?@(IV#U8lxHWz+q6&HPQrF(iW2ewvaQ5=Br|<>O*<{j$+F0Mm-H%vyR@~ zywMW;+~TWhH&3WrL*}Z+bJ$|9TFD))x@`U90rjYYOeC3JNTix(kp>~h>s79;W@|m^ zJ4`YDtn{r3HBolW14dBo{uRKg5u)3~Rf`Zh){dGMwkg_Ji>Fy-UnHj+7oqp5W>t>i zoPafZftp+O-M+gn8&y2*sy)BU=w zXKN+J%!t!6+KiIDvs$fZZzR!47?d<8KQ?e_?fcSY5tW2|t;RX0Xo9*cpRmWL^BTJ; zImqenRIFu!IS5o$7aXs>Ni5dZ4q-9K;Bs3T9Mn)m_nL$S7t4vi)s`6Ir;<0g^%q&S zoLTuwq8S;pg+IgVS*!m55|y@sMmHAB*bd$OYD?Wdds&#=PrgFfU9XX})TtV;lWa&~ z8OoODtyPc-b*fuNtcFtx=L$gSQb(b?-y%Kqo@qfK2OO_jw{;3MBu^TBoA}*8$Uj=C zai-rripaNC>Q%D2a2sgoDS8dtFVk7s3hd+fTNd=yc*7}q}YnGll7k2i>YCjRjBsY+a#6%bp zy|Gd08hxghc=E|D#J3YRG=G?d0Y}-cyd7o1S6nRRjM*jf1q~q4I zWeaMO$qn`+7ZFJw-<$Y->X(P!&O3XQxnZ^=v=jV1Rf{Epd;sLq4K_D?mn-NxPO+tFC|9M(pYX%>-dsf(M2Xyr^Rk@q?3 zE1=VDBel}q?#-qvHg9{yLgn7UtVf zx0$VOTH1Z>l|j^Iw0tFb9GYd~MQl_C`L`z>J5)Mww~?e(Rg4xOkO1d25=j~~FnQBV z(g=AwyHqy!DodMthMA-}+D0*27g|l7zMkctR$@CGgHW{=97%%pw%N?TLEP_~k=jmR19;Gu!Ce~je zobJi_`Tmu?I(OXksl!3K^w&4hh}Px)%%|p))K?oNxi<}O5%blL`oq*$V+1z(wbYt= zGa?}S{jXxdze^QauUZ+RRSa&Zpmud(&bonZy_6bV}N}s zpW1|${{SlOV!1qGx*r4he$x5H#IiQ=&)%x7q+N)nciLW?b93e7nA{JPj^e!w!xr+r zvLS(PB@NEwT-J-E!xhAHnOMe)j0Ud5L4;e(v&A4)X4~_(74dkfU7mza-%DvNVPN*E zsydw4Ule!H=;5Td4+F3ulU&p*K@`HIF5%kNQ2bx9H*c@@>rbGMBBE1i>A zOYaYv{Huh58Mcfm3`jr9rHt$>Y*{RIV>$xxL>eg%T;x_gj-Ni2YTAtQGr;T%7VJ$x z+LFoP_%4dvB3**A76f1l-I=1)w0mn6Bq5J-liwAThK1DZWSS*$aM8uIGVT5&=~&ix z16I~7?c{H>wX^)uuSWXQ?C+$S%*P;Snie?=$l5BlpJFwQN_pcC9FB7bQP2BTRQj4C z{jQ*z9p%QCJP};!;4xI}$~t#|`w8 zKbEd?NJ^+7j$I>mz)H^8A45{;_OdpocJRv|l#DX0Ba%dQP725ou&+1J|uG z-r`HuYYVU3t+?|^KPl$A1UFK(w6~0T&9q~L#zCqLG_ps%oS1>Y`c{d8(s?0Eb0otb zdA?y(yt!r5qo4jNL*@bjA={TofE2>bU#WjddEy4YG*~ zC_gj$*7l)(Z0?a^iA=H}Ml&xMKAEcU*iUNnq#jcS9EZXDt7wepA-9$(UNaE#80S8< zQ7z$JT1Fo%J3rLp<;`@BrpYv^Ht z_BhC6Tc(+m@8f`KmE$Fyy9rb;H8!PdE}t^G94nt%t*uCsTg0u)FwJ|kS<56*nc%mM z21HUzim9kB?P5m^N=V%MRI);>`$^8#-AQk9jTEd`Esi*^O-WegzPDDIQ@OWn2ZL1>o77yTr;rBn;h2W)iiX6> zuOm#qX--GZY86+9Nmc{*g?gH^G$Iv>DBmT(cIWe}mAVUJCbireRQXi(1NeRFy}+6{ zOQV)m{x4d+BF3Ih4iadvJX3UFb}Oqe5N)IF@kYU z!z1~M%)tOGDzo{K+(quaYV>|eq6Q}>t6m~7%9D_AIj3R?*UO2Feqr86N|H8_Rgu%> z>}tOCMpPIw9_Fmb*B0tCv9tKmVU=VbyvUHL?fw;ZJ85Ett|gDi^9J0nIieOxiCMO< z%1G>UQ+Rga03T~5kx$AA%|%G_Lcn|H?6I!{adiyi%ZfGuTi1&B2{r4huQt}sMtB33 zEz`eB`7`0CiD$R*fPx^gTfCl_uc&Nw2(>FX!s0f_Q@4U^kKaN4u4lPBJZSFx(s&2z2Xg?*tA z^^c6=wshGo^wwdS1NT$VR8*2_lNh_Bt&N`NPbO$o$fOT2o@vb;n&0g6h?8I;vEH-N z&gJdIQ8>ipNw}X%y{uZ#92WD%Ex($i1_g$2E5^R3smi(0oLXDc#Sut*)Ndm{ zg>%)`MbpwF_5E7kQqp|85x(sv3RDiGJeplL9Y)qGnB`Lx7b&qYdK$Q~of^!ji6n|+ zypW)_j@g&k_zb|Alb5B8rRdDYR`|o@xt;=hJ5hgCT!-*z`4|tu2Kj z4;5UaU93`Z8j?P>mErwB-fKZpFxJSVZ};@5^{r597kkuj$2cRUUGVqrTgZ+hhC7Sx z{p=ljzSBXKQ`z$b8%_|VRd55h{HN3ale2~TRAYuE!dBs(d?&DCs zmL`k^UWaWq;@U_8sgSCZ*{bBs>|C{wCAf|#!`rFiPwzKzQ~jbyxEp&frAaJy_V-rt+eWs` z&-1!=q?w(bPR&cG0&x35&)T)tfdSQ+xoWv!eylbO+*Ww*$88caehw39N) za>Pcc2jT@!3qcaBqvl^yKJ8PEY2w6EsVZNL4%w@BciXO_wh>|o&&~4kMQ5=D)7gEp zFSI!G6-e3*Xv5{o-elk;J9dw)DMf!Rk(4N01kd!U-dMGLvz)@+FnP^w88^7be9_GQ zQu&tZe=$;mFD=?YJff!%L%Ue5>rN98rSNEs;rk3L0bYeK; z4o4-b#E#amjW{-1Zc78x9`#abi%4U!IRS9~XJ33%Kv#})8(b%p8Hm6i-K_ck(ZEqhXMN=px+${E=bU{FP#5j&Ls+{R57~$+Bkj7VX?k6m zWlt?)VfThQRPtM!81rv0n3>Mf+2*R;J=Mj(m=ppzZG)3Q4btw7n7g%x;iBCxa=w)7 z#m=|%5$D5f^Ts$UkYlz zb)CJnqzf}B#lx||LsV~NmPw?A({SIN#MFAH*@m$KD$NjM`{4j1A6!&ggGnrkvBx06 z7|1yz-n8Xp+?s1RZXPk_m|4yS1zeiW);o)6AeT1^Fwz0eYP_C8?li{DUGFZ>uK7+knn&?eq6}m#Xhnbt&so38olSmm( zA2?t;pL(<+DW|a*GBEkQ>!9b|no!6V%ts6>E3nGeb(y`qh?|J~sH1Yhv)2cuUDD-m z?5SZx53%u(qrGL`#zLfwyXKP&s%oaS zZFah=-=oGXLEN$Dl0KDV!n&cjypra1{rVD-tB;py_NbH4wYi((D={3AUSGy8oyb&* zPKtXGRrMJoxLZg90L{Z=_$zmivlDM6(}hmJ?dxA*_*TZ|O&a_ALBVLZ z4iBI;@?Y&r>o3wopIsn)*x&F=+H%C(4rDe53Yp2*G3Ct--HHV=y@L*^bYY z`uDCMMO)kHpmNO`FW-%NHE*_?J(HtGqHXLmlhZZB7h%peI`}mUroKdhSrG_gYpMHm zw>K8XIWa1XeQOrS{v|qmMO7!7UJsaYR_t{T?Dr<>HCZI(HuHf*pE1mL6I`;x6vf1n zj0VT0Qt<|)_fSP7O^uwO9jlZ3b;{}jAmyWPo3E{ITicl=oXGzGxlxgWn&;(6qeoD@ zvz|K{#70M0!pVdDRV~cP9L7YsRBeOhJ^ibn)io&Y>|WPST+g_2Mk&^c`b=V5z$Pv> z@^iP|s@%lL*|ChrD@aaF_uh-S_N_}BNUfx3u2XWKnMb8^NpWxerD==VH?w~2am96Z zGG8^pk>E+3DGIx@pL&T$OA0Si?6-{?+U$HNll@<%9wJEPn%?C|o@{4o^;(|RH?`AX zlJW#wmym*h=L4~-y0)cmmr&ZERc7IvxUW7@e8+5Fg&RFVwB1=|Xjre8(x<%EB-9wZ ze6MgSRk*hZ&cI8LmnO3AFCp?-ZN}2va4V)TXo(sy-$QL~N)fpIZh58Bt!^!J+v#ORkxK$M8mBbcgwh#hj65p5lG!0^bc~G2H3ajoWs(+_+9k_K z4+=eNQ%mtYR=O;=Q`;7{+yXX7Ls^#}Wz?-C8hf+DFxx7TfJI>VisItWP}3n~QKckU zkrd=-JaJOdM_D{F%W|?v+7qDZ zS+jYOSgN_qG7LRbe9aMJOT~u8ZR8n^@K#>K(z+iDyztHTcDWMm8@#|cAoi|OJEqho ziUA6kkvQklwe(pnqrQc%Ze)SxaT-R0Aez#4O60S(($-_EO)IwemAG2eTgai*8J<1T zG-VY#@-dohnqafIh+9Zym-ypu1z5ba53EMuC`E*peDV%DR~w$TA1%?Jr`bKa+*(O6 zJBE6F+|_#(yt5XV1(LR$kM_0jAU`U)~v^Q zX4V$5OAuM)Vgm)_RNT0Ur|I#>GA!;Qhz<)>M$hdUv(D}#+L%>6@zB+)sO_Yh8*@9h zM=V7qq#D-8FsGX)ak;wUr<%;G69r!_71wLaz++2eb2X%o3&PBQg!+nQg004%Y3E2p z{fE6zc@5s4$vHtF=rVn3C05~KUg3O@%L&eCwT@4W)%q%UoCb>iQAvtccooQXJ{kYo$7h6h|22Xu}bF3Y9_Ve=B5T<|C;Uv8UL)+Gz#1D&rCp$*kv#%hVgnQReNzkG4H&>cEm?dE~48 zq&pw^W(PEvO{rSxWk_a;+!M!2l>Mt|TYGepR{PtIHhn5<^paaO{p)d!>)SN70;624 z*8c!yiX$^)CS~Yz+Ot`%?&M20m&!2ws0giAwHHyv9kclW9$9#*+K!mEvqy>9rSARe zgQ1IY582~kG@|BU++(#YcE`&XCQPv9;qC=%u+wd9OmjOl`?u~Z&(ff^k#C+`h@)RA zMoxI#D$uNDUJL8{IXtVO4xgXiKu0a<%~2X$`lhKK?bdK2j0f+I_0xT#;$~1Rp^nS= zn|3I=zK#ZGyG4pJn-Hfw_NrQiiLKguZ#Fi#2@oG65ye-yhFdtz%#(=;;aq#xC5&ku z(erO*lu5#)bQQ5@9G3d5OLhC(CPG5DBR#5yUDB-tHm~-sH)Xdsp{ojP=C?@J>OUn% zAMI6JEjmlfBQ4zT68VfauRkt${VL3UAA$*@meu^*c0Ve~$LUCixg2V=CuyE4+tib-YL&Nq^G*_{hwkt66Gu+~?X_|JSC8{*?mPTWb zn>eJh((YsXcqa#c?)IGS81Gq>Ni;V0dLNh^N}hJztJ|7otSL8~VmnuF$}0Y!Vif7kK6|e5?L6T#`D+~ejq%%`PNutqj51gas`$8F2joPpAvY6sH@RHwqFUs>9}a zLF5tCSCf2Dx|>w-0kwux<->yQo}#)a>m$&o8=M@O)NZDo-_Bceg5#pqT^`vk8cA`J zxUPMwOY6kAycSjfDn@qP5ynrwF)e1ch?q$mjtCX*s3eiy5t_G^Wxgv149&!hy@g<{ zyb>!0UCE!`NuB|%jd2pz#wg*!`N{Zr7 zD{nnQcQw4W-gME~jWR}9+jihZW@suUKWav3rHt(gy~TP3jqBarK_n3d5y48^$V*1V^wOw+VzZQ59^;b9P5u+K`=S!`^6#d!lNDvZe4`@dSNscR55 z;DXlOLn?zV0qIY^l07$08k{!iacvmPus_}URG>6exkJ|zOifT z(j-)5h!r{e$Iw=7#4^Vm6UC*&wphc3=L0mhdgKv*qugom`P~Z;b6oP#fvpWpjNUvjUCwH9Nxp z0JGAijG?Jtz1N0xJv+`_mrl{1I`LX?+KX0#+DQgtjH>+qkH)q2&$6s7tNE-WRtp+qhX=W+XbhbuYojKkC9F)jiIg{79(k)i9ktZ7?H1DM z+}+I}%Y_)L+Jax{x*fTS-Wb+r<(2s$_N%FIG|O8CjF**q!TcxMvDIu@pB=^P>(NTt zX*{OE$KCd(UT?V4+wBX6c4gV#rLvCdPZvile=;;q%^5rjO-9wV53^kf40h4Ym&dnW zDkB!9aonq?+Qk!C6Z?;|3?0=B7B;$GrE#@|!c30El<)}^a_j8+h2_J?BM3?T-UkF$ zR;^%kR#vi+?;1|4Aix=|-mH>;495+u5h}!Fk>n!))bPl&YL}L`97JCQPw?^5mrb|T zu96tm${0L`-{vdwYQ~V)Ci_rpi%6IU`JZ-4;+=>aV+=~gqqtb(R>n{As;ew|wzaB2 ziM?V#cP~!0Cx>RW8ePO!SrdJwh+Jok)V7wPwQJcefQel|J9y1fLMUjqDGk)g2h7ZJ zz*98ViaY7NsE?b-HG4(9hRao&Q^-at{{ULC1-w#fpSlW;$8%%Q)44`v@0o9PZ*;e7 zy;~+6aw|W?P}NIbEew?SBzejj_;q>35ZG?@H= za0MhIJ5UyOdP$ZT_*s`Po->-Gtw|Nk@?P9RWcxx0_JfX<(CK~{p7O@>%&N$-v2IUN zIjjqdhfNHN$QCI>GOjtsJJ#0%D-#xSazl|53m*cX!|>U{Wh`w?PpD)#~e`E zNfAVqcLqHUE2D2ZJDaJZ{pv=!nON`^v*fXZRGKS^FQkhD_h_SlDuBhh(;HBPT-_Xq z&z7s{jsdFHmMIO>Pb}*!ZT_uAbQ4(^^9gd%u*QF_X58tPcAsX7JBcJQ9ycyC^{N@1 z_62nf@SV!Qk_T$YyjQh_09~P^BQ?LNTSnT2zuE32jFdZqjx$wt7^ApTW{g?TZwyCz zxb6(eywTR`+?$!yu0HK^_j*0Oozej^#)W(5n(8g|O+q_)Bq}Cl93wSDsYv%0Lh9ne z6j(@zh3B7I(lT*&GqKCuTg9h{%3GE@vRG9>w$oh6BQD&Y_0Zmf95&KMf@1H2t=LpL zuA3(4z_yM*JCTE3ag$-tPPJ-0#hmn2 z+4$EpeQi5OAP40GBbxMRyEC3gBdc4qF#N5uA=Db?H7&7BWhZ#sjiS3vM%9`Wjzhx^ zYm3(7*>phrn8kZ^9ojQ{9A}6R+XO0y13cC)r*0#-w;9}_4o!7hhMpsZUb($UAD08Q zeGL|IRBba2Hpg`8TyG;AYej8hwT?3);I~@Jks3SJVuNCxvw-3Uj)$W>YQZx!MaHr`~u7_l0 zU58j)kM#@Cdeuf{iPl8<-G0G*xsv!qzh*=It=PTgxJ2cA7r8>14sr*hwc^XW z%Ci0lRQ#$v1zyHCxtS{YY)EHwN9150AJNL4y{^%&mvegXC zn;u`6(oatH6~t*Jsxfdz>{Qy7tm@Il5{7phgqi0RS!RanAG5#i${doTy=a6rV-1`k zKA!ZqP>iC4$;L>gVN)^*Ut)98rh9Yci`A8xM^Q|Ifn{b*(Us>L>sAYhmUz|I%wKAu zbN-d(%%c%*#y#oYSr>7I=*EFxTNm{!Rg&^KVYX+FZV6M;lkDpa!jCMvjz&9DNpUr< z%&`f)XY;Ke5dk5$`#A`%KrE-8loloR$M#RzuI+CU8T#$-*1oUsYkz1*VLy_|2icUg z$Dw>z$QE$5rT3X6YkIM_-IVcPR(w9!BfPM;fXHJ{EFUd-0OGuSb*zk}cb-kv#%KEsGX%#EFKmiYaARoVZBD8FD^p@kvWMAL>{%3wGQO>;k?T^WzNRJ$=Ctft?JO(M{p&1m(80Ih_lXp zY6j9_)AS&+Owrxm0X$_#MekK(nh7)n5D&IqJcSxrMjA2w;qEKS`&K&8w#u4n-=)Rc z*$8?GJJhpU#~MX*6st2fK4tVZjcMWQU+sGpIX0Qme$&AH?WnS2_z`R z_#h8z%D2@HgQ#j3SXr#(e8;%`(d;TMc^TNf4!z~+qB$o~bR-dmJ%>zFmhO8yo0!r3 zxfKI9`(x6uX?zy1Tr%eV{R)~lwZM3H zO_x%S?X15m{KC68G)gc{P=v+9HiS)WZVmc+FzzBHk$CVlu4X zcReX@ltZLHno2y9_V+anj-7950BP=ShPPl9`8}GMWM##Y; znBiZsscx*JW@zUdpE+NAQb#OTaoaReEJD}j2)*fMi6&Q;NttK<74#L&&3#P=X;VoA z*H=v2+(orl(-j_vstdU#x!L7j$HKd2XS(T-5WHR>RuE~2ftkT=YreIeBMd?-6P_OozNEMEDlj)kf3oo0AKX>1X zBP)u-H2po67iVzS4fk8pn{T9~mxkI$^Kv(wP~<~1$g;NF@lp$RwcBy#o$f;Z2DK3* zX*Sw+_h%8S3<7Gcyq3+R->hl#ZwG&^Pc^AJjxL>=+;TgLiv2BY;*>(fqqj^{HVu%a z(_C6C*xD7gkHVHqhWk~vM&mPJinTV9_G=K&?i>OKxu(NrE%hlHcEF6~D=}Dt`pNCC z7V&PEVtl3!`87Jk(@5!XepXMHJ*th%%=g6X+`F;|Vk<{d)T6mfqU<3+$R5>kW3fsv zwAi$8MUxuwxOA)bvY)hVo-&}1ylTFe9o&}wU{KNevF4pK!FiPP-DX|_fyE3gE#Q&% zz&TCbdsK?3%^YO&9|Eg+lG^!6CoQ|JTAdfmmPJ1}sBsyKc=JfITB+Eqd4AZdT3jPc zvX0&<2bUSooH`n0Fu%_7cLY=MQ^9- zmUjZ#ZiLdtaLN~&-iu3HJE<;Oc9kAIsL$D}DYV(r{sL}fS*AZTsm&b7NUy6xx}5RF zaSJd(^DnCks@iKRz3j6KUnFKIpRVCo7WO%(mN3M$ZMCGwIjrmH7f_jPqm`vG9q*Ca zx1#U3q*u58(vAy@r<--wq4UPr`?YdU?K`cEFV!Vg!E&_EIw)_TM3v+YenlgM`c<7z zO~2Ej1It2^5Zkx&gIzL9p@|B3ddF0^c`u!0y~q0OkRRAotM<6Q$zU&)toGo;jz_g; z38#+bptMi4JB(qvC%CDRZY;z7odwm(pWkmk>d&C5jC8o}bo*ktw-7^W#YY5#-`1Mh zg`kB`%L`?X_x-4~wU<#<@+N@VNPMuJCSSbOO_G(3SndSYbD$nv zjKHHF!mMw9?AWbB7LUx_Ti4pLt!>S-f&@+XFKpK3s5k|-e%rkhONybQ=KHWHqJySxMdXF zS6qxV&ht7D&+G^yKSur`^st7N#)FW@=sIkRAGi)9vLT_{TgTH6g^F6 zDt_^_B^@fbX|*fZF>%zDOZI`jK2f)tXTeA${W(T(5q*C9DZmsWAUmc#`%a|UT%3Yw0*>Eew3Fwv{w;cSd@?$ z#syu7{K0SY`@<3u2K)P$7>^{+PfD6XV$f}wPub$6 zJBg*m^sAQnxXotVUP!yes>se;2RS@S zRGMzIFRf*UL}MH;w6Pt>y;RXw*3Qo2VuBY7lwa>s-D)=aJ)yQSg*TtQKg;^o9OJSg z*EO*mlNd|1a!0UW)@O&-Tg!L0BV!Xg|%2;F&D#pNl{{UKCt|-|_F_)81rid(}%flk%ZRC%} zpj+sywFyCnN4WCAECyErqH&hXJZmY<+8|p^Zw7hYZ^{l2Qi;@rrh6IO>gFTkU1GJo>rfAr)icc918MX z4WpHP*l&8WzJG`Q+iwnHhT*a#?TVJqNwe_Yi6zPfzm{hwE5-@`0QJ>6P8*Au&bQIv z+cd>wG9b#3c&*DDF*UmVqD2`QQJfmcwbFG-E#$p@MA|^ZKV~DZwO)BFZ>{2ZZxQZd zU8W(_n!@GW(2jR7KgqUL&d|ey=~*{6SK6dMY`eIQ86f$ijx)DEg=<-hr_;&4MiT;d zvwC)_*ASVZhE{~i(elQwI}*gT^4jVF98!yeA1wa>cB<;ST#(*DJlmy`M+=Bg-S;)B zr%_1N*4^JD^cuhU1}RB^&3e}pZ=Si#}0XOT31rR97!d`+Qj4lBRyBzxiz@#R`9KdnPD=L z-)F)382sX)u(AHhlI+_%Fp;tZhj!Z6vo`4jq6?Kvkhv;4x1g$eIBPL`EbI2eBjm45 zp47@L!x6W!-wS1#x!iNfsP5f9%Hr)+jAJSx7;na=yR~~=H6&k=UQzgD)h$V_QoTPSB(U|&ezwhSSPU((IRmgQ2msC{?n3Qel-kED{EOEu;w)2m?D%{dV^=#a zMB5`mNIh1(+`;Ho1K4~gZ#>s(mn|8Izq!SF43>5}eY`fX$1zg-iv#QLTwjCrD;tJb zWVRM^bq>d<72n$4SzURO#dwAgn|z_zj;6j35v#f1eM!F1nq2V+qw~`}ak;-b($M@> z95*jHw2+m`<7YJ&hhnnYtoNvfPxV=?T`XA(TbFxkG@_1iFlHqho53)Yi}THQtjg$B}uPcuxQh zF+yT1Soo7xb%lY0Y!TgyA0L|-gSrI*Xc@p{xc z4udwOYWEZC%G0JxDIBP*CAi6aMR^vVq}|@St2#IUDC3&w;kmuiZ0#eySS4B2U0yU9 z0e~PATz;jdrlH}jS~GSfb&*1@Kh}HKOQ+c0Y8Egwmu1;wR1o8k0LE$tN2fbk_>)*$ zU|K7MRhac$W}?(TwRMd`Ee(9Nw~%>?cJ^O-v*C#DEcGpN)>I}XjDGO+>r?n&GGE+k zHy7h=qZp%%kKrPKD(g0|E{|<;WtpXhZKgfvoxXy$G~GztHNDr_q>dRm5y-zaW9rv% zUtLC;b}p49-qI)V^UZWmCC`W^v9*fh?DFRk&)4y#WCaVRn%l&YT}I$dtRlFXE(8}WpECEyrDnj- zwYZAi7Q!@V6Y#CnuhiDvz0`NXqMKqE<0=aPIttD3?wcjOt6xnvR#CZ0?N6~qyt;Ri z+wBn?uI|*50W{l#ExOuG4#ird$YXV{* zG9w+cS@wEtYo}|od46n-C?UVO$4amzv{;tS96Vvnpd90-YQ5&CYh&W3jP8;*AOjiV zm2B;8S}`m^qGbgAYND;5_SL|)wHHc&9jn@lfSPaE;@0ltDN}VxSv{fqi=1cNo!*b z;;vf@ieo0Y(`AlJWl3RglPA`oo(0;n4W>ZYV!oB3E|ngiG!yxPe5cHP%|&w7)=;de z7;w#oQAA#&xt3vTd+)TP|bj7*FbJ$G0!~K2BjU`%Flqf?TYE{ucEg@9|gLT zTRVH!M#a^vpTy+%hB zO-v0zNw-OIyZ6*dbt6MQ@)QB`_NyAiZf)a{AR#wnG`f6tmloG?-0f)y{nDS|uUeYA zIUUgzjBT_^%mZfwnuk=7!+OpbebIyOQ151ua&{za7jLMk{6id3UWr6`w<-W%_N#70 z9NH0HDQh&Dq#k1o@@lrBBh7gWOuJcQ;{zEK*`yMAIgiX=;f}0pzJ1li4;q$bhz~4w z6|7)p*#_3UjV>dV5NGB_J*rJc+8FGFs7p%2I0uS#m7R;&&nuNlcJcM9*0Ilai?IsD z7{PB^ZZH<5h1lekUthF;aph7hrhzV__qwvEJs-ajf|F}s1< zk!49FnWdT}Wda7+tbHnsaiZ>x)ZvbIk6*1^YjVM!SB-j#1pk!|jpSl2884UXoj;!5Q! zhI^|}g?2KwNCOoWius*B`t+&Kob4%fD(5^OO08|W7c8d@S7RwFGHB(N?%r70c~j{{ ztd_A^#@7islrh1{#axCKWHKY|0a&oI{1ngGU;y?!rPe2Pu9G=YP?Yl_S;)~#niXm zOAOZI2N87@uFD0iyVaOUCo%lp1#_QjTN|$?)xOdrIhB|AhoxwJuGa1|Jhv+o$NsJ( z)O%OTRF0=Cv}RtRs9ssLzIaH{vIh0RtUWsEt|on@k)Y=}!ngRz(V+dsfY=ycR2}%VtF@gLnaKC`{rda7#n!c-R4eXNwhaW4Drn%WQi<`*; zT7#$Qk~vho>ZQAiZ`-ddF9Sm<)IQ2^WL`H^+gptt7m2kWw%x9cqbs(-x#oYFLXM+8 zxT$9p>L;LO%&~DCu6y>{qEH+n`Iw{Y!BM+6%tJB zk%m0u{n1+U4#v0IBe%7_OLdT$Bn1l`*6P^b$RSsjH7tYf@xc{?CaLz#BWc_aM@OE~ zbQYco1d`>sGO)qLaNZHMwXufc`C}2qykWZx*M1>_`%c~F ziHS#dAd1hfB9fblA+tYZ(p(aawU|eoD(_Bzw2;rxjC8mK&#AcZ+n0 z*$e1>YQT-9*8(xx=-AuoQz(^lPfBZhHE6+Ij0+v!wNby)r*fnpOjAiINU`JTy$|$9Ry2p_IV&w84|`YdE$!;6RSBdAPR%m9V&ee#yO^uEt3|q1nMs6qKp!%6K> zPX&V6qD<=w;BVqSlAdZlM_ix$_74ZHsDF$MsVIsEGF@~4xO+9YM;Jt-`uMABKE zeAOfo9cE2>^V~*S60vT^Duz|GxV%ZEw~>JWLHT4nRq3{^=lZ`j7y+7Yt);9o zTHFXQ0Lb>KauG^-ovp}>WQL|gaM3t%$!;-IO$5tsC4dxGU}uPDsBzDxYbN22j?za187;@%k-l%%ogLTNY}VOrjCO7O zJ+~gFh6>TgWJj2t1YWgqi@1tv$C%>SQc=Cw4s-Rac&`nN(#2?-=a_6}VVnxnk4_dh zE|OgfL|{(BKT63NwYZXKUv58$e;2iNZLu;fv^QFPuh@i;{i5h#NWgrbk7}#pDWbJl zqPdz&huA)7T#=fROigCjS8IlGl`UDihNY$0MvD|{cPo+dsp+2ey*GW%R$cJD?68TQ zHm8`oN18eOD*P8SY3(yxfh3b1&ZK1Ks5QLot0LMokwx?Q-Gxu)J(Sk>HuHIs&NmEy z4RpPUHuPKREv;p_bN-OoUOwmt+t#57CVNS~^Q+~Qe;2hsRzxYmwHrIARx+rl!|TDXkw0mV^nDjeRT%#OOOyWqL9eC3t7>D+ zdt7=f+FX)K@hi4-5ghSXRc+qsR%Un~X6?#9O3JzTgKedyrL=#&mR0%t^Hi=pMRlq& z!!Qx1;N#`N#dy(#qq)3|wFz}`C(KMZ`Ac=C*i8CtlOHgVyX6_D!EP^^8Z>Q<#~rC# zN_Dybo)?UI){M;{)Gn{u+|I(?gWa;tWTwFq;R-QS|0dvT$yW7i~d4;A2kW>;% z){cc^0#9$`qZL!jbpoO2I~yJz@V&u>-aUXR!{xDBx3?q0IyK?7hAGl`+BTL$$S1BU zq*vDZUDL!wmnkk-`7O}aKD#H{w70Zq}MmD@SUSxZ#P$R#y{nj z!<>JGbh?h9);8iB2{RuX<<1**VCZs3q}t1Bk`$gR(Yws#O*KC^bJ_S1Z+ z&Rc`&TxOGa`j)9BxsXQ)4V~RHU3QPENubYd5t=#vf8D^HLH86?S2m_~YpKnBbA2Qc zD2*h*AI14qg}Ro~HCvb?j`feo2SN`{eQKmL9S>Ii)RG5tIWF-i@6)ASh9B*nE?2sl zCYm>CqVo779Dr-ca%r7b8LQf)_RzKKn6(AwIMa~F(3-=WPlsHYA-j!jE|7eU4{`2k zi{dZsXFqI>#-P7@upfmgUBMzeu1Y*-8;Px=<+zG^o{y`l7PhpuYeeCTJ{yjw6<*zB zz55U_D26lFy=+5pb!mg){N9a&@|7OdUr^MAjqi~SoXrk!8AlbYUBqHtTBnEg$k^gY z3(U;Wg~8#E0=vhHk)rLf?{sTSRaa`kK;T32{fSXiP3VKDO=@U9#kp*w!AOG_lWd z3qu*5Lmk=AA6mw`@k-4kzh>NiY<#Ak*V5SAW(E&&ClB21HNe(~LOR_(SDQ$lc~L$^ z%7AMv?_#_{Ziw>~e4X)GxB8@dc8_7@v9{fxH_bhMm5t$6eR>^2dFNI!&9*dN2_Ci2 z%c#iiZ?1g1f>cP#4l;i#V(at8;TwT61b2^$*@nockX;Ol@@-jadt>;ccMb9#r{FSW@ak|^T07+_;=d8ieo8hx}|Da<4d);)Q~|lv}uMp9sAQfChc+-_Wjm33$_q=0Z(J^QYOm{Msz66 z9^J~o_ch6FPNc?PYLMP)4;1^>3q#3O$!d4@mX{^K^8CVq2`#gn)^+B&HlHApNYn;7 zC|8!NmfFR%vMd(%%(BS4%di9wYVM~OVq{VN*|pTI{D{&)<*_nIP=Z&|t}W%A{+!T8 zr^tk3aa9CPA!y|tRs*I`i zHPub%GAmV%>f6u0+_JCyvQd#u)HM6eLNtobG#08uvoXQ+vfjiZ8UTaQtZO<|}> zY7A=>tqA?x&i?>7{{RZxvuk^RlU+ir5jHkPes5amFCmq6$q(-!((cSo?ONIz;?w(+(9dQ$T)(x%I-JR|G$r_tcCnb43D@IFr zrkV8Cj!BtRFlf)*C%N{f=xg>hzKQ3KK@)|~Tyfs9dI5T0nWIoy;2=2+I#nyhXxewS zg(gV`3pZN3b#rqvtPnDD$!)#8Dd}r1n#YCx$v-e7n#N-*T-y0M5AG1lD`2unFr(>E z&6(CeG9|Zc4Ea^iYZsDzo(!lq;c>M`HG!*7<;urYfCh?nm1x0m-tBg!lcoD*0x2-{oIl^6^2O3s60bz zFE1>jxXVu+j$nD1RQ(z(`==HC`ItwT-l+CyoGt;C3Orw6a4c;ATcC)YfOm9q>d za2fAj$MKg>xQ9&=yo)-n09eOQt$2j%B3dCuA>E3SdRM)LioS;M+|{+y=edR%Vw9pV z&siXOI`xl-dVIQuBuU(e#zK>TYsqgVdz+*)uozGQ>0Y_;)!i)i zjL5j-%daaRA9b2gJ>IZkZfSQ?XS=A9gjsF9+zhKUuG8;@WF5V4;kjQ?DSvk=4s-M zZlm4OO2yIct)tVe;F%3@EBv zeTlcVkxj!Z%O{zIJPvvaHMn4s-uemHZEv{Baf*}dXsvG)PyYZcfyqA9(8boSEp%VA z%qNmrCvA2^E#TQy?NUB*_EJt?cJX7^4Acsf$Kz;6@ZB;!! zwL&AhYrC-tmNi5G1A|e+Xa4{bNt)d3Mgw`y4l3@UaVcAWJ<)?IkPu?1&2a_2`?1_l zv8>n()*)E+OIf`4iZoKCm%rAeyisdzzGl{mjzP{zC)Trd9YQ&wm0U4KZ^pAVT}5pq zD2nY1MgUyogO0SdWg~Y{w@IxnS~z0fox!LsCxSVlSujq|t`DVh);HGzC5fDXzjT_b z4ycl}sgg*3PJ7m{)Z(yXgSnrnu4-=)7;jn!T#};)wNtmh zo?T1G+Hg)YinNJ4Pwg+UgEGj(xA6Anppx+osWJ{$|l~E}k|? zG6YS+sp<_?i7qVm+ff5BE5{;(aW~r)qQQ@D3C&_$T{PEHspNx#R;)3S8-FT38}EG7 z38KSI_KWM4fk0?iaXm9trGh!3YnC}>Jc?LYLaQK&_uPDpXjnvW+(sdjCAyxKXhe4! zm5j-WkxPMv$nV;#T-;gSSVoNs{jwfI5#Q@ou5Ik&zDQ-Vxp{CHI-i!ACdn>uA&?Yh z9G;a)3{}>lwz`T4%T8Hx;fDbFRhx_G?;v>mxYT2{Wm{XDJwYOce$Zq_IbL?udTp3n zYmYS~`$Co{p4qF6RltJo&Jkkm9n^+JA9uAzZzh@)ifKy6x7MkfpD=9@NIglanuOvV zN(6Ogh^HZX*GytSUrlc{iGn#KE~K87OUWx8sR4H==bBAI`|N8Vf)*(2j+w0arP-y7 zMIy{c3{Mr)6e6ogeCdRdCP-{oGjSOfk`0O0Ji7aXi-Geb7gxb5C<`aSJ1<^9LEv73|R=>||Xm zP}-}^a^1Vu1^1bAGBT*yj)t`L2wC#3+k*O59n{l~V_~&;+m378qK+w%Utddi0^3az zL=f&CUo}!2c|5zTn9?G!jPiM_F!^B0?hfLF1wC_Fw)Uwdo!(?HzTcTyzW36-nr!8k zrhLmco46n<{FCWbu2O61+9zx(4a1t(x@)^#JX`rDE!bseUZShb9lL3;PGfbQ+^KBw zT_z<5npRjMi4?jFZmY&eI(tamFgtg5`h6;l61}w72`~Db_5T3t)w|&%6dq!vC4S-R zYgm%TY12jad${FK-ZF84!1@}3&g$w58DNc2o`93hNpW!2`f5W2WHwGq4DPB?uaeQT zM<(VOZ)$H-H>Tt6E#+AjM^x#~4Ns=YG_x?;p?h;x;INuaE?c*K$|Ncy{wlAht;CZj zm6Z&8)Ht$~k!H`=5B09X#yIQrDh8N5&;ZG}d8tnF>f zT9xhNk)oYsz+ygLdR0F#+bLu@A+Ub6qkU^EaKpV>+HMBU)kYgsYoP&FTg*%@)xoUmi=$(vz5dqo zMgqiowtM2fQlix3o7C9Sq2GK-PU;q6@ah^|)B6K?@B$lOW0_-j%<9`Y>> zF8tLKG@Ha=bRBwEIM;64mF$-om8AeS(fq3+BWgVs8(#~yryb0aT}D(0B;ihKZ352s zS+z}8_TosPX7bIfZIl3a#bs+6nVUxfXAzjd5y#Mx{c6X7b&I(z<=l+XObkH)`@Zz- zS<=GVQtJ@K8mk~|1>3_@-L17)=C+4($R+;(mV+1_!1ky#{T2;A@(1$dl4#Ei4neD5 zXj%O6Jbql9g&=L>v6g@uiMO@er(495;AImTP{+MzrKF4ITEiOsvG{c#bRVr&v66i} zyf(_kfh=W^ZUa8`rE2p;-fgoivdPTu21b9SBp0xd%J+(GOGuI+XP0%Nq{_s*H_Od)C;g}*3kQCNCX!H5bUSs8L zFOAi0qbE(cZT?(1`9mH>V%}X&jEE)^s|;p7*{r#AB;D}s#8O+Sw~x(ik@E^oS!KI< zA(;|2JxDz%nq1T9vD#YNr!u|^5u9eY&x_jS{+)kqWn|c%U`&mS^O}gQOIsQiKV_dy zdp2g=v+fQDJ!;;iC+-^B~BG)wVu?vk>h~y8F|fY+z6XUl%q6dcvb_FJ!>xR=H_dA zTYINm9uxtBKD73d;_Bik5!VWs#w(X&eM7_csC1KgoCS9I{{V}MeS$}GJlAtbQYJZ9 zU%gc1w`e1l2#Je=cCqhQv>hfNv)h}e*cfsN#%g5B7f;kQ*i6uFGD^gd+jCXpY2u9v zoGgq$=8_#I(#P!+TLvJxA2H2Zme0)6;OA_J<&J7l%L2l5!^J1>{{V-YwG0uqUTL;V zw{OaO)ktM&t@f%rOa>IMdWAGtVX@siv7F1h0ggb;J%m1MiEZI~R#4-he)Sv|X=50T zpj(G-LdZCzzr9wvSm9xX_2)HcTv`T4ksEjzsg}D8W&G0WFr?`kM(BUlspA5vNegPX z5k0~rV?2d5d?YsPS%W*CM$^SpYe#Q3&R-V|uvefO}aB+-PW>Ff)xCM4>9FEjKcXF&&f=KV1Tc&;Zzn6pYc}fGN2!?O%EC?+v;AvQ8Es^^^Cvek zq?6?B4018`tPQtz-e#i`q>#;++Ba+k$8bGreM0i?NZKgWlvcqw=BVlx?AECMa)@I) zgn8ti_0dON%;e2A)GZ!6Rxa)keDSd2x&89U=Vh#Wnql}Rc|Vn1f^mIj6)oh6cS4#!cOCI~tU?LX1>% z&lP^o>q9T+*^hsrl@s@CCdEnrw%Ww{)#amUiId_}2GYXZd-ftEj= zo2Vnwvn};0^=&R|i$?NfjAd27i|8p+qSUoVLY>Z|O}d>D@;hKQg>X)B*w@LQv{Z7* zp=lxCFZQ`J&$WFy;oV8C^jp?;2IYe;&isSTe5LW*O}||yPLk&8GrHxRLaYnguZ|6;CXk=(6KfB|cR$}N~ z(e(RkdjoSLhJQ2f8q)s9hFwApP8-iAc5jhD?kbhuxRGg=_E16$h|2A`dV$ue+-mdq zt6AM-s}I<*Ay2vwY9!8zXK!udO-{ylmi`vHi4F@n>snT_JU5A`S&f=|V{l%ZyNc$t zopd_PZewS``P43XtCn^j+cE}*;o`B4x0NlldsgpR;)|++ZvJ z0C(Q8t|x}p>Gb&=Ts+UYN%pNf=_l2%qlU$iBaHt5%SPHwL3eL|sZ1cZhTqSNjqE@? zd(|aq*v93pN(sC$(A^uBj7%0W7vWWIwJk-~M~E=DkCtrlirUj*ONhty z9A>liWfnF!a7gRr%(x7U4MHeo9^sxVdV873hr+G3rMJ2}9z(!2w{NOC!!^GByGh!9mCFd^ zj_MnSJTE^lHK{e_toG{Bd4-jMVx#k^nBr|%YBy48srHM;SVJF_^fl7xt8=edO9q`| z_Mo^MlmM|nPQTX}FDBIplHN2Hk$lV;VB^0P(nGJky}h&PjpU8LykEPMT+Fjl(`Bm< zw@Zn)d1f~3I#zwoiKWTniBT-$pUl8hSa%*FNw1pbeco0!lB12)C9*qB4fJw8*$)Js zl$ep#>la#PjH_*LXqNX_#uurqpAXy^^?)vCB39^!(Dba1Z*_qqNxhdNImoG2+TFFJ zyOvoIov)nQd}El^o9|W+h_ulSwZg{Ue3Es3 z=Cj*UXk%DjRxKg>=uI!YUrx>jPLm#%SF0?~1#`*pR%?Iu<;#dGsE)>01Q zSP#~;TH*^`9_kJ4mB207)*Z#nO*C$s%78i!_12b#H6(O8u#(?SNTF@5j@1T@B>Gf& zW;^5=2CCfZUUjz4t%|Lxquc#~x3SE5ARPCl%5#^ryLql|B$DaNE=~h|YhKe!)Gy|k zTNZ{Gx%qq6UYgA}x{C;_^v6#gS4Nd2p@CAJ(goT*sto*0W63OEiW^(m$C` ztzOo=L8V0QqWx9kP1}7jUPUL38v9aM;+9z9k1EHIb6H+2@mw*-cnzrjV(v* z4x0PL5^LJT7Z&#h>N|GGgmiCe*0tAXv$*>+xsF+e@g{!Y^sX1fc)8QoKvpGDmSs3K ztEFB`9FnTyVaX2skzR~x^2CW%yF2?^#kKn)KB#VPgGa!#-Oa*9@%Pj=0C&xv?d}>K9)=p|&{V zEEDJ|7S%NPt*tIzC3!B~#80L>)q7j1Zz4BAU|7J~Mn-DoiB*Xl#S`1H!sn8w)Koe0 zXbl!drlR2z+J8FEJ|}>5&ur0qc{JWzM5G2_qaVtt+-k++oo(%avyFhA!hHGdirrgu zdD3-g#0C%mEHVx{{b*8E2q2nEy+3?PTGg@6KZD+?+W9w2CC0&YV>@0`>+4q*SYd+U zL#z#5LV=Q`xr5u6QD|nmcQ4?U1?mcNVkx03x+z4+bU$+?S-{TlZt>PVn3@%V5*QBWWXI8_Xj-Riw8w+?)8sLPk5X2&a7o)S;%e?D803wl<+o zW!v3_N3TrRcb3Z?x7yw}1)u(T{{Xd5`$YEbGsT}Iwq$Pk_V%h8h2*UjrOlxI+_LPG zcLyEoE?#X*WtkuQLgr{LC-Y$k4H@YrXh|5-Y)9E*@|}nQSJ3yYdmS?J?^wB$P72UO z-@G%NR-NVaF>IFWpSe2z2(2zm&rxkt+yhk zn(^eg@?Kr1u&R*Rm}6#LxZS%MsIE~~>dxXu`_IT;waX&SooUw2-UMU0S#o~0$7&Ku zHOMKEDd2(q+Us>jjc0&Le{$$ZCb>aB*>7G}T<-ZsM{0yfnv^Z2+uF|*y90gYAH`mE z@qbvlheQzBS{be-D*M#(2XS7beG1KJvdDjNjDg&K72&@Vp}5vBP-)X*Xok>^+d*FD zw~A)4G9c8R>qm|Jud>dZnEwE+WZYdemsa<3Py5t4E&bZDs!wrm;gFX8Q^-kHJBIAn zF=+&U*()5fxSmD%!96QtVKbBOSX1;~i zriRwb?J+LrMDoaC)DhOa6U87+sc%J58E!XmUhWU#ElS32pLlIRdFR`oyPE0zC!JGE zytj_y_s4tVzA$;L&2H39rrI*BV5)Ojx^Ag1lfBmiDpc+3gI>x;iefdK_Ig_*&eBGi zB%bvD01w|=L!sY7(WzNn9p047rAxge-9+wTi!Ua7ig$K<$|9juGc9`(X_A5XcK;7=_7 z0J@jv+Rw#$--hks)8u$%iZN~%aA?3Sn*8GxqdiEDj>+vVAtCpS@$Fmi_@QnsU(Few zKap~I#b$?+JK^?a4GqEl-qZIFA75 zBA-3{?{bns7uuvJmHzEv>N=#6%N#IA5oW{w6<<=kxtT^CB9L_0*!=5})6~${kzH^B1JHq7lIv62+nHokd86QW%{CoRPHTBC9(m)tAn=2V zIRP%J!#S1HO1oFZ`>0E8mnV9s%fgI z%%hC)QCi-{+LJ5+w*U{!F$ne?gVk)*ne$Ps`% z`%+!p3xoD`0aWvqrinCl2^vcnihlAr4%}5sm~7Q;tzA~!y8Oe|s$Ne%pJ!zhWmpLb z`He-W>XNjv%QD53A1>3Hp%GtSM#n2A?=0;fg#}H6pa!MrL)d`Dbe3si3`l_ zm+QBYOW6|H*~6+wG!1bt%tP%AYQ%R*b#XK;aktA&z*jR4puR|k3^J3u=ci4nHM2=K z$+_2WTFy|h9LGVYvZ%QA#3%PHoxPy?u& zRF`h=JeE_pHIs2PUul+k?tW=H=DFznNRaAHYBw+|kXTl3tFBKC^lD?=o4MLDD_GNH zorGGHT0l28cN^cK3-4Lq+cMp1QnhD;T#ZEH}P-qsd?N43BwCZb(#2)CnvBvjl= zinUBdtBqhoe764pY{m{B+OoAj6KSyODjM}(K%`=;TWXe93pC&}P1gl$I&ESVz5v=r z*;Dfru9(x%o0_xhb3L?8Zx5Q1HqyZK6;o8!86YU!?c)`hHl-6rLl%gs%7x%&sC~LQ zGG^Yu^(rzerkpe;G5KuV2Q_L-_LngEQLa0v=7`tJv$=N*AyLNeO?pw>=OxwF@B20vd$zn~ z0Z~t7tjnm{OE{3R!nW<6m1U;e6lo*oHUYj`AQ>BQNl{(s$(fUEmJ=F* zaU*{R_h~P$#r3jE)?zk4ta2eoPL(T8*yalGRua7=lJS)fuv@O8SSH zCjM5e|bM&n!ubDjP;EFKJxI4xwGk9%$oWzB|=%Y1g&PwKO#By2O z7{$YRY`H7%L=EJ^8E(ot^NO_ob6qpKDI0PtK4p?+cM73jjwzX_*xs5e+shc;H%Z4@ ztuudP-Yin}We1;nu^U>wrMh|ZBO>8|=uKNqHb&Eo_*t+|%;zT+l+Kut%W-oxn>l4;5Ai7#m=n!$D@nFOMmem@t?suj zt@NwuBy&T(^Sd~x?b10f5+9puoE|G!Zf4`D4wDFW*zcc|u@uR!p^`*c*cDdb`ukO% z5166VCTUA;1&|6>wYG~`xP?P)Wg9r)6IC`Gr5KcX)6blMa(%0<@OO%hliSA(IGv|a zka@;ynVLVdw3fhiKRK&fJ=fWFOJEgG?-UQNYnv3mc9@(`uC;AS;Ar}G0p7<9KMIq? z?Hqb7t;}oZUB@5G4|7$tTY(;zWcSKkf3i1Yii6?~s~mcKf7xo%+_1{44l$bfeqLtL z#Zg(5v|kWQ;wv_v?TrGdF|zt&gHT;ZZkD$u8=SJPVwiu+Q%_nX!_0Wfu_RJX+BlFpCG!= zQ(T6n1bW5Al(wxQc%$0Uj)eP)=xi=Q#YbF)HD zL9JMA=WVxlZeAwr-t~uc+J2v{!)dC^B0Q~tw*LS!iqX=n;nf7ut;D`cN%G|5fn4<> zJDRsk8mjG+$c|r^AKvz>77cHv!1j=+N0+$oRVJ~wTb3eLWZD2$JdbcIO4%IRpRmTV zIu2T4ip6Y864u^G?OHdK!6yCr^;*=ohTmF;$%X}KQ=P-9q|=z#!ftMqNg??*jz=`M z@y|8Fv`VosIXie2l9NnG%(K$&bZd)~F6@^1LG4-^W}upDN#;N%m4PBN+uo+tF0U-^ zqPLnj-DexOj%z!~j^gDCGhi^uJ$|1`?Tq=Ah>+#i8&tZ6CyRT)*(;y9QtMa7OWS!O zi_8eSSo%}uwl=!Nmkc9SY+xzm{uMm_Wy=LrMONoMD#2`I-7v6_%IT6!(B?t&GxZ-zp`y&U7m^iDBg*nUDw@!hx!GyT@!UdO?sOoP zHRoP54Bj&PRLiqZI^KP2tyLeY7Uj7|$Hm(v6V|b6-u>7S6@iWbeD_K-$wPuH*#gaPL}EUd>}>^E00@iCwwlZE#Io?t!nP zY7%O?toPSf1lz!OBDX_Y>wdbF#q1>VWDSh1dGzd&#imOftg9hDVuSrEJwozZd6H{M z8)}ibDfg~PBXrMGyp7|!X1SD^b_{N-7N_kWXA}L^=nZrB_p7Se$9C-7zytCXrEjYL z0HGlx?v4oWShGUxcM*ApBZ!lJcT~Exzi7CXE!!!u4Z@(XXtfB~T#qgz{75;?BpP|O zl68&Q?bUKwkIhlc1)Vl)i#N7d*vi0i-jwY!!ds0-Y40Z@J*|amg3Y0Ycf#yZxjttE zeJGnxnl$qSyfNv!){ERk*0wgjaGh0OY00SXBwMKN3~+@ZxWzZllFeOFcVtr|zMYrL zF)Hr%#ZB5R>`C*-33fO;c&g~vceZHcGe;jS>?+ijFFb``<%>*OKoc-KZj-RKMh>LVqg$Cij)~ZXh z&NniArZdQnwM3bzV=1?1k&6XwrH^V@Z0(?qX;B5#n}61K6?O|%5}2itg}k3Q=bZKw z+pCzgnB)tBVnyL4+_l8#Tf*c6y%yyx52<|Q0%x7)` znyDqN#{08!V^wC)%6S#ELg*~?*ype;*PGQz!sDet)~_m~{iw1pBagdQY)*VTyzKzW z$}!fn8LzpBDhP+&IqUVVgp3(h;^J!^&Sg6Z+xgag#jGuH3LDM~WQ=;%twQp0p;|R6 zI6PKfuW(JgI~9D@Y?|nSoSCJ04b9c!>6TY)%PHC!f90JrcT%Yn zTG`z}1h*FQ13do#H_YF6=~m#kwXwB7Y7V!O9vxS%ed~B`4QM6gi8Ku*qwNYlZN2JS zSj5)QJW*}9$1FP4a;2erNf%?pH~gLRTYeQ=nJ=vn#GXhTv96gb#>RaMdX}VC1cbNm z0s=?jTz%EonSE@qzb^P-J6B1oOAFmRtM|bv?O8Kin^?#Y#%695nVmJ` z+v+}hPCv$7(y?^gON*G^R|pXf(iqn8&fo%4ljJsjZ|Pb#u(h6xX(hPccKoV4)r~_-ia#=0%L{$HD)MvmrP5)MboOXfisSbp zL5k@#fkMg~uiol=NJIr0ee37H+A0R0P15ewxRT-5Z>AQ$t+bLjbjkOoP^sJ$WNyWL zoBKmUBzkU|%Hzswm)ZgLuG&8dMavt9p5id_tZDw$S&rdsbx$YHNfFaLd(}G`k)e(` z?bmvY6PlnG?NiQ-SrX+B*4`SC>9_?&EL@=CN&*PO&Qu zub-Ny*L3@hHqA}EjIc?DaJ>yT2y%;Kw$Zf+WRV_JVFyL$_^W<9<9&TPi9dB0C!V#* z==avGX0a3u88D#sY;~>OKE&x3_VT;=kJfc>O7g0trJ-AzdS%mFwCyR~9_%XnRqZlC zHN#t&m@54B&B1Xc#-PeqY%F&#wRE-(Gz!ZJm#2)pXsoZ~SUwPKe<;15gwvs!`2`|!Hc|K^+s{lWWg+<=xeAX88 zPlnd|QE&?;!L$R8YHNFRwrhLN8Z;RR-m{V$sV=3txn`0X2G!l#pLuHbcBH*qNr% z=1)3Co(V9e8=kobs*ts@epyY6{={Jlr%Q^;?Ahe*i|v8&s>F}!l_`K8awYFn#& zn>D(cDTI?o`$pc?CB>924W-SU+d%pGAyLDhO0lS3M+-x1ItwW#OtY^gkF9gbS=bD? zZZ#P#{HX(6+p+%umSY%dmODFpbXYI<5WFBQf@zvc>Y6;#Slg+*h~_~f9ChtXlHoP2 zMB85Osh0@to-tG;(?MplnF0qp z)=vCZj+de;hg*w=em-5osXGamwA&3X$L$MwcN4`S;d6sg>99v<4a8B|$Rm-7Ne?3( zs;$~-vD(XTEJ*Vxz+yS4Ug{T`qQP$qwX7(k=1*!*Q5LlOX>Fk!$c$v~1a_>Aa_;UM z#9K&SK;L&~rD%BAdcm?L~>0Q8E#!YH2DJCgBq~Q z?m6bNFYb-hkf@n+<^fhD)FimJogIjM*bUyYH7y*&91}$|Z&?EoRmulXBPFMu6tgPH zjyb9l>S-#ANuz0^W0FwdaaASN^!YBKlI_E7IdVr@rE4|K<PM=U^t!n<#dsu9tQ?xE5Iiy(D-^&rop>~Xe%~G|7Cccg`0b7nsdQ?)_ zz18C&n8mOipm)V|Sml#0vnt%lwFw=oVA{nUv~x`0IUEMcjB%n10y-dD%?In%=q6)=3%xs5pq{JPx#_QCh~3r+rF3A74Afv9vL{x84g7cZ_&9!7k^{ARqz!hR-L=7P}ttv4mR z*QLpKWpx_B8RULDgJbhk22B9dttOCFq>RnukDt_`8RM~O}j zGfN%h@+&d4QE$}-c+agb_Iun~{jx#j9A%9tvdJzrDOw|MZbOCZf$3DPBbQRKwen(X zLb8+QNzuK9OKbLMlwBTco#}t~{-6Kk4`QrIoBktB`- zg1x<~%e+qk%Vf*BK9NJs_NRb&8E+J2_`+K3)_nI zaPjtfnj_A2E9ZjW%W%xe!~0cOWiiG~$jTgG6YpA9GA5+^E+PT$j_zpjRlBs2LL(8z zsxU{jdNHYYVys*6x~=YwscDVLjx4G5$*lE+Swk8j$%t(@?OHw!v6*6?M*ZGbhW_QnN|+%s~p21LiDiuJFt@$tAMx-6no_&lSs{n#E6@ZX$LZ z4^Vm<>ii|7-Cb$2+(T|0s^_h9Vzq&+G(Lv#m8)Dw1Wg;w9^9;mcop2~Hu|reBsU8T zOTup+mE~Gbi>J}-ELIb<_m0S(fo~wZ^2E0Y z*9rc$mwupMJvrQY^B1W=sSXUz-h+&IIjz}X`yODDKxv1pU3)>W(0u~v@Ys~gc zqo=>s98DabXjx&;J8Go2hs(Q{a4^VntKSvM$FD_erTHFOyApXdQcn{_9+NKT+R=;^ zs*M)PxxD(;?LlU@MpCJ;l5#4uYLNY+c9HkXw~!5Sw_Ye~sC>I}B0Wnfs!?lp!WjzB z=G~F=de+K-a~-9|u`W}~ZL#B(Jxx`**BVF^M1}?p%RhSKEqp|)ArniPKZOl8&sLu5 z7B`RN$L1ZaocH3bQ7K6DOCJ+7aNTbrKbQEce?{>UO)a}eD!c9EEqOaie|$XCa0vb? z*U)tZg#lC$GMsK&%BCEpBj^n`P>)h2Tx^*aa0J$~EH}$%6v$*QaQHnd%Jdyzo2;zG z-)1)+wcO~pqHBnerz;~KaoW6kvE_Ct9U9u(JCPl`m4p%3(x~Y23+vhLVoxt}>>2i` zwELE~j`fY>k{GTr?NxMDk~<_2%*^6eX8LBiN-xR23yEQtPz;CWt8I&QM(TT39Bnns znzYj{{{St%LTSRC5T8* zIb%iUr6=0r3vQ{D&fseOgG5~4zLI6PiJo)-w<8?Xi>OIsrQAmV+-4kcn&o8GE$*a& zCb?kY_)K-HmUmMB0Bbrkm4RCUdjVQ1Y(|B>y07|3{{UEcBiz+nxgOogkYR@>igcGH zVREAwekm?48sf)u#3Yfp+)p)pyr5!VIgz(3s&40zS!I6E%&g(Y2*TFH(S?LGu>rJT zRtsCYv$S6?Q^j=0VKbZ6?b^Ufij7#ZL{{H~JKLJ+brUSnv$@=TO>?Ux%`0yEy#;$z zHaTW<@rdT9)TI%%lr%KFJk~py2aXY~ewxT?Cmzn1%tTT`kx4h1;d5ojk$=lhUW~>=CWq z>rV=qL|IUMeJjwpiz{Gr>SuHd7008Os-=6tdVK=R`YIBT=P(BTBO%^Oq?Jsi?yvToysl@M}2kS1?${P2)QagLVNme)ipM?!yTedB!S*#mn2p8nOmC9qUt2 zxJLfZKW1IcCJTNP>IX5GG;D5&mPG~45kj_l)u|2UCiOgecYB zTFyBmnmMCSv@)=5t;RdjtsZJa=Fs~e!tDZhR^EB>0hxA_Cw`qPl-B%FZDFgzmi7{? zN(gJVAjT^z!#ec-A@KH>8WS^aAiz%x#a{6Thh?*pFFxg&9Bwve8%=!QFDq>Fs!Hsn zZl!qVoo-R!U~m`KqO$u`{u-5`#3fTER~ZJ9IW*gg-zEnT$G2&PM;pCrTgw?_SoF(l zrwR97A<&8>BwO&*K1>U7X3Cc!eC4?geL$|hHj?j8wVqMuTr}HUMlrR0YcoR8jlH3s zH2(ldw;oux?Edv)#`^nBw^nQcYrMV>{9o$T`hk(QX<$a?2o3 zoC?gmytuo#Qxtwux%rV#6v!moCLH-;PD+mWtm;QWMe25I_IqtwS?=R&o$;uRV>rWl z(p&5I7I$)siId7>@Ivv;p@#Z-5hqC%t=REw2hM%7UR!-}b*XCc#}F}Wk0)vL zuCv2Bfww7fG`Upd1KZxJRQY1a=DELjb#--h82gdYKH8{h z?&%{32vBZ}vyWsVzInor(tK2!IQ`c|ydG;ze%GqkrrVdLqv*Ie~zo7k6C(^lS3 zAcD6JFl26+H8q?gPis3EmptN0J5(QNnkz#0f9W?vpPcdqL#15FcvkSgG5pOBW9?dU z7)nOOHqWSPpJfVu&9s(1i4_1M#^AvWf;iCU4b5q3NM_w}9OXIrqa7-qy<(SBG`53x zA2ur})6{Qb+0>O(JIJm5+;K*O9mT`Sun>ibIU=!E;KLjttyO}Kd9J_14J+F;pJx!{ z;1FtRN1)(awOOOmq_LiK;2tsSUUjZp$(bRFKw?9N;=BE2f3xhjNHTIufTba?87h%9|^}=0AIyjn7n2(in>0LID za~#%idE;v-$oHbYkrXv&QEwWvL|F_*L6(uaX02;hvdI`8YRIU&zEM=JBfY%1w1dm? ztz8RwfYpsY-r{AQ)y&Z%kV*EhE?b?^DI_0gvx4vLh2#TUIu4l<+sPz@{bOgE$GQ_; zY4-8LHX!@hty>d4<(Q2=M2ujttfdmJYgpV#V{~jpZE#XfkP_H9BpeT=OhK*{VXt-Yv<;&*FhjojyV_p3_I+(M<6Frm00d)H4b%u2AIwM!$T zDy)32Y72|_?p!KD#zoq%j9a9OyP&|SV@AH^hRv;W)mGr6?*5=?u zf&kNFufy69M1cRMYs4XYiD~%WGSRo>AsY zDcDFoYj4gLu(*f!JGySH?KN#0M|O>F83s{Xv8vjQ<>K54CbbD~>zeLL?#CB3kqz~! z@<{taJG1AC%!=M-x|JokM)JmbQ?D)r@)v|)DBN-FS=Mg1O?7$aut!`E!n=8SQG<5` zG7G6g9m$^6wPz|vVnioyNy$9b8#^;AqAPAP43BzupZ%X1v@t8Y9;e=_0%d8ez?r9( zWntASyw<6-A&_})cN}`wqUf?}QR8mW4>Pm&iZv*R@CCIacO=gKI37ziA{JVlw$ZFszwwq_w)1FhDJmG3i=5MdPNEbfLB< zA1!8SRi-%@Yt5^&nQxn|q$Tnl&_8rAt-LzlbPDVZJ zBS^nVq;K4pSw2yZ;Pq;y;hR?_9QR` zWm0yID@*M2J&bC=?^VE|*`c_M{?z+C-($1{vvNxc*tL+}$rYo5Wq|LHu;T`~%Us@S zOC6#Wl?GV#>DIM1ORLExh3vAk$lGRcGsR%yTnSrAZBtX4*4pD^vvIlb1$Dj+)2;1c zlTU@wOnH^$ByvYln&os$I6l`c#P>*r4kVE0t#rB;ixs`&$ivLjnMo`U1e)cWaCbT* zt0KRWO+#2ot@flA&A9d-g-F`$pYV~|z#>^pk+Iz(=s^S|j) zCA5tscIt(1aq_otJBq=+ZA)f$wAz$cgjye!jt@MKrEh6=R_S63khdUy^`$r`>6)qL zPY$W_p_!FNV_v^nt*h#hEVmao_HH9yb`y%8R>yQ}>H8+Lo?C3Rk;(>T>5po)t!fag zcGnN`Z*757jzw~j>+(dX;@zxt#~I%JGuo|5G%v$8`x6iXib{Z+uQ0l z(84mZ%z0zN)VC5#ZwUlPh}&q})YdJn^w-v_BoQ&55yT_!S3tJ1-1!c+uC2!T4?*fE zdkGG=w7R~H?m)zGjmNR2iLLBmZ9?;NI%b2==`5%R0X^;z9m?S3V7wNONy=&OLgfBX>eZ%|3C#7*qb7E_) zQLGvfC{pq!Lt~H+y(!Y#?g-^sp=Ffg=5dFk5mM^6kz8L}oz8?H&fY7Q@c#gce2am5u+G;9 zdx88vTGcm6KClXn(YoZfU{7k(k=*8H?VhV+_WPqbnWIGo02$__ZAoLfj_2lBK>0>H zS0|}7);Cu^Ou?d&aHI;krlsxFaecPsR@^Q&uIm*6cDIa>Wns=bRefG|lf(AwYXfCml1I>0Js#?NxF2n+tkCcY z??Tv%d&Jf-J@%;NF$|!L1I20E%q`8rmuV#{$a9cBl@EktEpag|wqKhd^`>fP%V`W; z%ts_v??kL5$KGq7+0n%^F4+)uBZ~G9hJG&|Bk+?MBSpIs6a=mgE5UUcA5j+8^FGiQ z<_EocAHnO?yjd0>m0{hH>xwE$m_Xz z9VsO8^$R0(PQxJO4^vRzLmWDKOk3{Y2G8C0t_vMI5?R7-HX}X}TQARVYJ*Sg^iio>CSSe zDhGPo4P&O?2qfPx$_RM=Wy$xf)YC4let2VM4Z(~KMr%!=I(>z$n6-FhX>#(np{D7v za~b+=oxFY`xSB`eN6HNJt=l&u@<^37#_E1&7!`%6Slf+BqK-ha=j4;MY{z`kK&vy0 zwN5rC2C(IKElT9jLTv56!UlJeJmcFw^-5hfsuHzBI?a`3#EAs(KJUc6CqptYsb7nmiUzc6RCl1@i8V;Dg(3YjR^XXz zt?zaxB0T;z*%Zx|=Pj*h@=1MdCAP?+POgsO0y!2Zo$SyYfL57p@K`M z+4BDHK9x88B^MS@J(9*`wc1Hxj<~Lfs~u5}gcd9;^ztNS48sZ(_pEsqX``ArN6K3+ zWcBu|UQ`#h`gP1l4d#;Ro@({OAeEqX*pnUEHQ0>WGl81p_tyb;ZSuhFfyHfjK-@ub zEO9vjF_kBSSXYuUxNj-9K&!?*YoPFQO?uE6Mjt=Ctg&ARMD$+|>IH6vt=K@asbI&o zU(*`?7~0y(XjylbEjtY0o`W^c-ZVB^lnr{mb+|*g4lruG+O!c}8Q?=DxfoPa(AUmN znwi$5k~_J)O)b5-vX|v3G3E}3@uysPvO5Tor<-}k2G-4ST9&ab<&+_jl`;4K0K4_7 zHg-SolSnM>o67)hX-^}H=2%VJ1uLC?rQ;`f;Yh)e-S9lInu_aB@fNM8+(!gkV{YUS zYpU=UgRE@y*e)3b!>gUrj)N8JnoH^JXCf@|Vft4cX-1m&QK8{hKMZ_FC9Fa#7!e@azHM9Yt(fQirNju#EA(<-gAX&n#adlJ@vT> zYE_4Q!}G0wc!YSA(CRu(<-}JJu~i*V6IvEJqOHFhgJ<}w(WSYxzq^}ytfEdh?OcYr z;js*_BnySkaYwx|y>>M;+sl<$oG@NTdh}lc_>tk(CEf$_I*j7HGUHgii%^OsaQ-{+{+R$%APUBIdv<0 zxZ!}nV%)p8lf^7j&uMWaVeu0#2NmK;a=Q#xWnC=ecb_u+!?kBy`F3nUX7ZS2j(Oc$ zcTBOhnDbQe%~QU%87f9mhV1*)tGA$;iG6h5du%7lkLIp3U)3ir&xP3BsmD03uJYkp z&P#P)-vD=?YV)0YTM@?4n91_KT-ULNr>Y`b9HzB-zT!n^IM{plt}D!tME?Lbaq4Sk z@YCneH9vL#A8OVHs_ELC(KkHY8h@k*$SXLK>TW~u~=?*)XJ{kC5F1hBJ9z{|J`@~mi;je}E`YC8+MV$v7 znX9F@x?c{TE=kc4@^UJ%@x_jxd}M}2LQYm2v${uzD6Kid7oXq zYFqCI*xgGYYkj*HBMDpvt??I4(fmf5-L!%4l?;28x`Wq>t9$!MCB4kSqinL{sI8Sc zllVn@9d@bUTPv$97_b2BE1A|j3uE>&f-j%kcCLEs_JnJQcE(T4I2jd|zZ;hF84Tyk zZd7g}yJJSWS_rSMcoNm2vjIp%a$jeqaK13`shaW=Ww=Kgk&|A9qxk;LOLmS@C29Uq z&q}MS-a`~&Qy6}0(WO$QHE9smhmc$~^2TDgJ9hNjRcz#y-{{Xbr>6*TWX>|yY zm0XJR&0E9iZ>a8xz+Bg_MoOW_E20Y>Lgkj`*^c4Aj^djhqb;jxZ#w$BvO6Q4iDo?HmxC=EEXkKZ{bkh zNRw((yipak2ls2}D2RoaNY?CB3Wo)2ly65RwX8`o1(+P3GHYkU@LhPiX}-*3fmHRB z?KRBWO!rKS_GXP(<8kOKt=y*7+9Yo4F`^kgC$@6nr*Ppr@Ir77{qQaplW z!uHK`6KqKz3H!X)u|`KM&O-9eR&`_~5P9a4?9yMBirfJG9lMXEYibG>_1-oHEuE`B zPrMpLv)nf-{MWNc=QH%TnJ(nAx67VOnK|iDEYZb$vqUC48=ek0_4ccF^E7u--CDRt za&kR$R&Dh`XKgZ@2a-tv1dMU-U1^Y2)TAu(-NFisgStg-7x1j8L)~zF@)_iO=CyX45eyw=k^58G&WS-0@RMwY2+WFtX3L8=Y_u z<5sShZpi@3Zsx6cgH%m&Eixzv+0xoFj>o?w)uI`NEsHhL8_)W@o_(rI_qAOkPlY_x zn|a(w!2BvHBzA?QhCn1!w>350#CIA+oN_R0g=3#;=!&_46`m4crJ21s%_Pk7Y7LfP zyKn-UT`8Iipd4?=Jk^^SV28}Oly1uv1M#IOvFKM^+pDWPfhP@vOp7q)L~O7a0lg~J zl0!L@b_b?vJBZ*CMiGbI=9Q3$>}}*&Uvu%v>q#>iV?bE^zJ{&GZWSNq1#wWrBoQG8 zl4?1746Efs_M|eqkQY5`V)AHa(d_QB*+~gF^c6>KyIrZBe{@$Jd)20zIP6x|G4c{| z_|!PJxa>u%+(mgEz04bk11-9Xtle4SAC%*&@lq^M$D`cAvvcu*QQFKRwb+Z3R~4g7 znWt?JRQM}>EP6kYGXTJFbI9hqO9#hbPK3(~FYj4-0O!4URnm)gI3*o*IDIvfSkxqzHTyEEpY@|*BzeYzq}3Yc)(3_BxFP^P zP8gb(#2zI3Wtz9Mnq55{l#uyUR+*V#T~VjmaLd6?Sr3s zLnQN~)BeiSZ+T?usm|Z8rA=!rR{m$0tnx^HTnvB@tv1fi;@n3xh;AMybn(fnBucHmGlI%KU(ThnnhUEv-*Q)C zt&`At)^ysGw(l*qoGiso8ezyj^x+p08K6=()zzS8EE5D~hP7=z{qD=Q2>$?9Pal;t zM^8HSXSQG71;elNHGjo2M%IzZ5%Vrd#?|XuPAW>s5!v`!;k8RQxRYw6e|1}r(yi*6 z(%tD&K(GXi5(^Z^#?#WLxzr$#TE^DK zN!c>4G4hJnsuMGH3wd5Gt0IME-20oH8mFV!ByudU%tf>SxPL)pHX(YIk?HH(# zY}m&Gk7{?F6fPvOgsAD|^&*>ik}CYsv}35xt#hry~Mb##{bAi2XgVO>O*%__$f z(ghkBpga-ox+2 z!)m(>{>udW65bXSrS%x$jjPeT6Mbx~8oy z^w2Vphvi&!72kMeWLVTb#@I4D*AWhz4c4U$az&W7i9F83zAL%Ygfdj6RQj*8}X6h(g_s}rN zW$9AeLYCo)VdVp`L);%)@?{N9&Sdr~YZiBFr(2j^LZ7|QHKk!AL!^C?BmtzuGco3< z>M{uKY*ffRr)(6bTwBL=mxcVDr)Cd&mk}D8O{j)Aj_t|6i4^6D^v!qeB&}}?Nb(q? zAH+^;h0|h9KH}2OIaS-t4sq{Zf#x)tm)WO3xO0s5uPU~N^p(fm7+S*+466~lj%p1q z+Gd$!j!>4Wa>ho(d)1qEvo{Q}y2EUzYfQ)G&!tT!mTs;dD|lM&+>iCq{n1?Ul1D>K zu)kt!(GoPWIX@!|mHbUf6Fdrh{O>Qc0qIqwk_{3#?X9F)C&mh|QC95cmr^S%ibl@I z+O<nE8IH-m4&1>cnxbcx&IcOqn zHfdYUV5%1+435Bavfbxy4}%5p{j`dzad=9*6j= zilR)>Y(Z^t6Do-n)uJ1BV;THwYR2VKF*GTe812K3YNFY#>@y*_NYWOZZj#vR&S{{SS7({C875BtK3+?Dk2SEY+@4Zyfv5!yK|H@+1fOCtjV47WVy zx9%de@^Nsvbm`Ap!M?tZ(h`{5jz&4@RP{iSm#u11+OmWgR&Bi1b-H;lh&HPI;yP1& zO{XdHWu8@7q#z<6T78r=C8Wt9^6jGg%z9#?5jMGU${UaD+m#Btj!0rXjeM8;NG-&A zc9^qdk#hX@>0e}M+poMcdO^nB+gsZPzBv7(^>&j;(yiSKG-<4+6gqvq+MTgR0Fp7#oYy>Twu81Bn|4Q^@vR;_U* zu|^Qa*kb)NTvZG#cb+0kE2Gw@wYRi}>4Pg|BCB=CtYmV%Sw4fOG?2?Aza`uQB{SZq zw-%7t+_kODpKaZ_quYUw{M23?wb|$DnuNHwf0?63!wyLSP zc)%5G#9}y1d(q53hdF0`ErVQMLm$Y@(TDHNY{6$5_+_SR$ByxV-lMSXNcSIR)6JZ! zhBlB9v<%cbmX8?wF@@YV?677y#WX^8Cbx#tZ8F~48Cp>)gK;YkLsxaC+xd{i8JVNB zP&ggUW9j+|q%koAYmAm1D#e^~$*kO4Ox{hJ+m;T;19m-XD#cA%8p2k3n;&huk5-9b zg>G%3Y{ag370X>~)31w6wWGZl}1C8pRH!;o?VUf;_!*g ztXt*eud(#5KWE7sBUw#7i&|cxJ*<~kv7fX^RfZhn1J`A;4Rdab9INsG>%m`I z#>JYpakMf%PRVieu|}NX`)xg{3#B)A7aPC?^p=8cDE8LqPdKh1g?0hYQwp=qS#&CED_%Bj78JFK9zl1%JHQV zoJA9DIUP@}HpfuZH9H$ilrYA}mIXkkO{Usw(Xs`RWmfsxGlj_dRx%J++pbxy=WtI2 zdjac74uu7}Uo&3F^4))U3e&Z>iWuaHWJge#!k?P5?(AOH-|aHVwg57UPtEw(KeJM1 zw;6A!TuCso^20`}!)LgvI<)ryK@|2;lFx=2?N5(Vbe&9bkehS3kLy%!b%(jU2&jHj z%P``)qZJY*ut#faq&%zTjLveX2MhG4X_HN)#Vkezxbq2M?bK(rKHpX`%_(?HsE6-u z&1hM)@>$6H6>>=%mz-ATEzBvdn)R*ii1Nz6%tdOevmsfSi+H|W)sZWh<})Y+=e1f* zR%El6attvCm89Wwc-fa^h8XnlVVRS2_7xVLq{}4k@!UMSc`DpdGd!M4M!UHL?Hp9? zD#NJ~2?k@0qLsN(KWfE|K3QgIotJ9Fb`~9K9ZKdKdo?EEw=?6Kyq7WQ*9#({DtKT< zd8&RU(JXamwlTY;hCp$<0HI&Di2!i{{UxsE+o}vy_6;!bV>;4sll$=mgG6%FMRgd zH1d4oorW==FSStBujGeGYk4iy#_St-qmtj<|p|#&t-|h&imGGf$GECG=bflMwf)SBw=X8cu;D-*IITI67I!LnWNH>L5xQmLC%tRK zJ+7N_cM?txR~_p&P`ZD%M6E0%%RI_4kIt+?b2L{<@d)OGj1#msCb_hftaU~$YES*L zo?^Vj#}0l>RCi5x44d(oZa!pe^%Za|Y|^d7SwOj6qm0!H3%OOUB9wmYx9+k!3em*7 znOAcOu0mYK0)BMqAhj}iXrMClS{IQ=HPSg;F9Y$cJzh_<>qay^`L1aTn2LLd<+#1>oThF%!lkF26 zy0c_{0=N%}nj-68^3Qbpcd5r=TEw`XbEM9?UW!%R<(;2*bDnWj=7t#T?k?uQX+~pT zT3btjbqTeR7!+a%$2F7UTd3o)k`uTXMi6GbDlthOg*}SwTF%AAu-hz-56kFkw2d8% zldaV3suMDC+N#)UpJI#|9d;f@?^>neEn&5Uwnf1~QfrNB()!s2 zqZuQNVHk`YR%Duj!2>FO@Ug)S?@YDW_i`jDwIDl39cqoiH;mT|jI4)l#Te<|6ylDE zy$*-K)`I@}^3!16iV6eMB-3@71UiF3bbPmqDmL>>&~L5dp1_UqwZxkpvyLhc5Ph20 zP`r;4NUZ!mbNbg(LUt?LLebl@ugs;3ZZ*5$+xaYRt~T(54t*=1f@T)y0OPfEeg(LR zbtu+oU6i-Xam90DpSnUj=;4Cu*AlmyWalh8S2ugI$54Aaf18cKdz$RDSZuDf8DpB> z;Rz?penJ6RI>wT8ok#bONZZZ?fMg8x=DY~hQD*Kg#%7>pvePZe%dsE4kF|C_2(XUc z$L+GB+b(cbPf%-_x^J-DMt7vC+;zn}SJVSrD&|Fu;Qs88D_Q&NK&KlXnW*^VPSfnx z($-HcKiM5gu1fpjRos8LvWq)-$R@C~eFgPsV|bERIq#ERkKz9She1|3WRDKqkixv` zwCTrI&V+gHrQ%J0TC+Y-kw`p{PfqpAy~X257HgRuNy3KpucoHZ;IY%*+B;<>l=HB9 zSAh7o&OJW*>fMm;1LX=i2C;=&eB7wBnYz{_(_7_Z=Ju$e@n)}Yb+v9JRV$n;Qr|}x z*jMFaE<4l^GTBD+C+``QpwB#-_GwX#MXApzOQGCoe-SSZ zv?MB!a?4&VXsg^VMR}*fs)2{jy|Gyrb2~9jyaB~^H<7>g(elca-O%$~{;6=$Ur2#h z?i13vqS|^A+2{JS#@^yt6PY9%O4pS5qfuCm(Qc~WHF|ctb(?u-k$&z^0=#p?*Q+hP z$$)bq%WoO4qQc$ShI6ssOZMZ1{oAew)YV;MN4dARHxjPZ>MGTSrjgtsDjbXs25V2n znyfb(TO*?*?cs5X_aRZlgOJm7*O}I3l)Cp*T^^gHwD;ScNFjYH9|`zu>K9hdH>`Vd zMoo7&cWI)?k---CIA6P(n)sI?i=(7=GorWrwm2(_==EZ4%6AlEx2*K$d? z+mnv!ohtT=;H!;!UBb!Q@wPmg?6qUxR)g$%Ko zV~~b<9P+-xxqIbC3$AZI5q8H zswpEHiu)X-gj=dSZdp`wN7*F1k~sGeNe+IMFW5q**x2Wu1!!pcT)LI&Ng6V$E)IRG z)|F(mv7MO|?Jl3FGus{UL;)G%v?K9_&BU>+@dY^fdFxB6+WB{gstzPOO;}r4B(stk z6KsItTNtY3gyV80Cbl&!^{=-=%0L(unRM2z2`vS+nZl6 z0~p-v{cDvt!(%qvD_h#c+D+BuUpq%2U8mlt%Nz~mvmf3$$Cr*PL_;m5td^>!mPQOn z9A=30ndZERBzeIHrF2H6IO^FpW?jaXWLuclMn+Bm6>c3iIds1=Dc$5&3c!x_*u&s^ zyUV7WfT2!VdS2TLYvo-u<<(V_8%eK9oSBnXXCJOaCoWTkUiHae zOtHer)aTN={Z2UmC0%f96Hs3&-*NKW@D=W1-OhTENaU`9`C>RpW+yF?jw>5fQyRq( z8_~Em&}vs~zfjyRzWw5S}8wa|!8VI(_tfr^gq-p%ycmVan56ePn`C!7gci23 z!j|dt;Fs^sQMl4wneJoe3}-%+`7R?vlDve#2kBaNvm^Lj%eT)WkVmC7?#(9 z+T}(!sRx>J`Cr)rK;_@gCvH9JT^4nM>Nr9P10g(&)lDvDhUR5(Hil-}!``M+A-gik zx{gFfF@PJbPjB{nnAk_mqo84mu`@&DM|%qH$2)PK(w!E~PZE^!NEqq1ve2@nt4_$^ z#y0fMY6f(MR7OBt_N%u_O}R+U8F@7t+(Y&_cZ|#jT6Y-htwJFX#k#ps-jd#EwJT`c zk0hgH?WMK2kIHp)_sJCnoa)RG1{9ohqT{)vrr$+pdQX-v5s&dy8cRncmnXSqA$=rh_YJ=;um7gDnfZMWn3R~?RX zN;|t{y0y8ywT|jIqACoXsncqUW2CmAT*$I9K^f?S)K*rttyyV$eZ0>clg$!@i6ZCa zKBKv)to0_kv3aJqbcK}djh6>MN_?a?Tl21Ut1C;ZOQ|AAMt2T3{c66UtP49|n&INQ zE(X=-aPDg5&Z4q-Js?>8jnUz7Hk!_{hA7fDmlAxq`MIc3vmuVVOUW7uZPiu>ATb8D zBh)00-djetSj%veFIM-gYvqULSY&9YQMhk!mbZLAB$H|C*WO!72gp=cR*ewJ?XH@| zLO_bLk;`-@ogLD{aR-|kvzG5rL1r&3+2@&7MVsXc*f`Bzxv&d&4a0n@PXN{)^b3ks z)VUqC&cEUdXj0vLv5js#O6jzsj-guQyyGLGnmP-lu7^TuJ8%!%E*b z%)Hhzi+YgViF~;sks2iiJpS{Z)oxD^+lWrc)XaxyKGm0fELv`xy$q5`a5kJA;m+@JavI&NpJ^A( za{f+nv3bRJ_gbX3cL~H&iN5Ov1y}1_Ji1Zv?bXG^>~15Ub8S<&4EhSuD-eh-ZDI1` zzgvcsFC_@!ao(SEe`%~)hj(PRLG!Q`jUD6K!s6LjK-t`~jGR@NwR>?4YjC@5@$)K- z8r^6z<&TV#&fm&5>m&@`P?&>}o-3)-@2%j`?=9A5A_(_6$EmJ9-r-}hl3Qp&fRY!? zT=Pq&++JTKLQ<%$O+h2?s0A?yjcz8Bn~hpG zVpd#$0Iy3}!D6yGHwXP%`q!Olx1L;yDcY>BoRMCGWqal{7iG}zR7c zVxdO}-Ro5rXC{o*Hy&*1BtvF6Ii<0K$zvPw=5hsJzIBX*w-{m9eP+jfG& zTufI1$I2@toy{~+G9EJo$kLs$R~T8Db26+pF!`}bBWy4JwLs}xJDM0gnUE?m+?ejZwVIIQSav5Ujl%lW zx0M({MXX&GVrlfvyB=CgIV4Zf1DB^T-6cn3XKnqG&y(gqC!X~+nT@o#?Bxt5 zjmwtyJu9u*m|2%B@gC`BP#SJ=*jF=tuv`m+7|cMO&5noCx~tgYx6xT(Z=KhMW1Lqn zsa!!Fh;tN&2Wu1@X1AvsGbtjUg`z5{<^KSwX2(72M^v-6Hw`Ay8b)x;qnggKOPPzZ zm5$j)V;I5BS)F9Dg=Y?~@5xeg`d55TCd)b=o4sTPR(0fzj-K?E=&))YN&V_bc8Oc4 ztp@u=oFYitJ<>s$Z)*(rzvPCosOGt1Tdj7D-{^rdeUD_11f~N zlnvaVUMZ@PUS8Q4%LIuCkY}l@R=UDp-!;53FOq|u$TN}eT<>#JC&o(!u9smfF|2{J zy^mVqZUS6FOrI*27_UU}6c+K>-c2^)7+jzyit~oH7ft6%+igch2M0Z?raKJB*ED(G zQGz*c8c2|L{O8AGqzCC54KUgZ~Mb0xW#r2hcO!7uyN?G|vi_YC|6W~lVwms-WV z_N-f}A-K&}Q8)Ia%E}}A+ylX`+a1j5ZEh{5x{l||+^pX#*0r9Xi+t9$@%e&dm)q-E z8dj4gucofuu(hA>Hip1&YShqfEoRkWir_RCI6Hi`$Zy87kSh-HBiLznF-r}%lXlXD zX3sdS8(p_nQA(W$CZX{a<)oT^>$ufjUkibpw8BF=j(1BIZo>M~3<93F! zzNoP*YBs<}EmgG(tF3=c4w+b0wv_(x9qL_2OtrPpPL;UtkPj+seApExi*I$M+RCc2 z%K(V|=I1!;LM`o~i+2PznrcgAMXk&{pzaM>(KNNw?ak%Qz`DA){o^lsr{u#Xmn8DM zo7^51bBenatK36tJ-hCLHN=~a2&$BojAEL1CjQuh;@xlb`xEw^{!>DyoDMTrH2qpx zCYDR9CWQwsSkbIsK@8EZjRL)~P##7bPV9W&tvQVMsw<0Y{;dK=Ae{>6O?kfkvFBG?r7>!iqktR8<8@twzQkiZO0z?QK zy-U=R&ZVkbM`WpEh^^!t#yeFVHtp|q5oK`SD@IsMdI9NC+38Z>M{{hd0*@#ZM2mE*%O{i4u+S`dyPZR zynj5Y%yFL89NP7qmT~U4PqizBKQDi+Lw|6MbY!|F5AOLRH6;?Qt=6vh6G0(^%Wb z?Od|lMx$w#x>O=-awWQNnS%A^ur)=KS%&A&zX(^P2dev3<&xsfLT%o2g3Z(lE-heh z-P9Q50~CXd&|%{{V?<-ni(tD=barfIPPP z*AsQ(8{*N;YZ4@*?;tn=x@6ZDOB51Bk|qIe{{S^~rp%&;k)R6wHxgUWZRYb#U{4JZ{}NR43RQ_t7CvGl2Ng&WyYkCgnnk;<4C+MQTHZrz5SD2? z)ydqv3hp!?1h0qh8KWyAZOM^{+&!y~SiL!HXBsU^=Ua6py2K>&)>e;~#beEIA&y8w zk6M=Ec)Xxv0K(jEJxx*68qVVS)JZ&%BB2>k(z&B6v$vq_BJSTwic4_@C&_Yi z>sMjbEf(Hsb`Q2pKX!A;HIHv}mX}RpswYht zHQBJXMzo0evSZAMbvf#5oAI`}7LOm7<$a-CbO-Je)Yi4GuW=3GkI9A90^8ZS7_T|; z_lcsox}NBT8C{|=(;|y7ts z6mdr-if0XCix|xG! zw7T4rF5H|eZv3jXyDp)9b9*N$z+*Md&mfh!ZX|~0>fKue2Ic*016qz)?waHwWK5v?8tJ33RkOE|Ih8ru+-9?N zD?7$w%#nzQEJo_6Jx!u`*NF7!Ec`)nGBAoMBN#omcdt6vG}gTPT;FOR=>FYnsQ8KE z2(>MGJw687A#m);-`cqSdseoJ?n`uL%N#Jr2EB?q9rRJm>z46NY>>ksknrqBw`z5* z;l8ydTDt+oXt)iKl8#x*78|NX020PWAHrZu>E3u1d;~mX(Uqio_LLD;T8LpWV z1_s0X)2=R4{ytTNY<@yMwQKtwB!+iM3}-y;{x7X(YF2XC+k}x+ws#JDR`)P5CNM{9D89EGkT!8O5( zX+YAM^ah#Xm6t$UFS7ZUnNkmNj%i?ogdWI_3f6&925)@$o`fX(LZ zIqB(MvEoTB?&W)HS>$_#;kOKKKIW@_hd!41K$hNEYeY=8<--US}hjeha7U87N%e!uK z$gftn)g^;VigsMP9h*lu$9nT>ZUncQTu@$InB*Q}8sl|KR{K-AllVxk#pbwcZ?u@y zrZUZ+nAa(+Tir=(G?uFy=O^cEVza055_zA9zDs7eE4;QwYs7Ws@^0pc{_Pat*R*Sq zNV;ijqEb*#+~&N?T(ym@-a@;{=PlIN)L`tIxeVhi?4i@<4w#b%%-TOXw|ph>Gd0rM zutXU?^`ep`#ljyYRRZ9gR*)-V%<8*glYpu?uKJC1B+&3o0z(`^FE0yQ_C6f`(zt1{ zovcSsLtOrmsV%mxZ#9~`!W4J!U=gL3UTHPq=oB8K)mdEt@qx8~e2 z&3P4@wuPfdP}A1l-Cij6Gn{@knH}RDKT@_o@%0eKJLa`@J!{O094g^kb!Nb^4Qeex zkI5r$k$W2RoTu>Iqk#B};8Eg_4#_)67VQTMj&WZ&TIpZemyc<7xFF-^`q$eGw%=)z zH^GiTTj^X!h&&CXYRqJc1oIT+w%%*h!r~`IYQXu8bbCQ8?y9>~^IEp>*lDVKfTMcj zk5Vh!;qX3;v9xT9=6?{{Iilmj`cuc|i%69ttr-}TogsE?iF@SWzNa#>NBA>Gop zwBLufH#f1(HM2_!51BF6y^Vg!Zew`u;}N;Wan`Ec-Yjyn#x_K!2W@X0O-XFbWfRYA zd>+#i9G~bB1~}X*rlsM#OKXWD^H%HKYr4NSH_VCW%%dQJ7prswNIW;+c$BgeXJ!wrtrrKRa| zOwDBTYY4|5~TvH%7%#%s>@(^@t=6fbl!YOy+|#m~y#hNFfu*I2%| z-v)n(aa;Pum=bwyBa3xV#k-Cx8&JBowbNQi0l4zV9%A+S)hdmQ!0{E0wY;8XrP?HY z@m$8MG!xs%TIFO#A1hZ&tF$*3=p|n*4j7af{41ZoKOLH7yc7-1{(O&Kx<*IX6nQxG;7q05aySS3x zHW2*k{{X}*e^|M-c>=32;C8NZ?&28QR90=P(~9~!M;wT4Zl{k;m|I=!c93pdRFZBG z$lhk=EAxBR8-_-WQXH=032b7tFBM_2Sh^PK-Rq?pEy;hg{{Z4sZssEcy5<=T8pXOt z3}!{hRRq7iXleHsdi9--p3uh~y{hb4vw}ydteeRtn)#z(86pI2&Oyg|uBAzu8bnZD z==0s(Fm&2{l|SAdm5Q=?H@2*h7FHQ`tCn|m*E)U5E3!OlO2>>YYcfbtEK=d7kV*zv zV}V^L!rF$d3f;&>yjXBDK&n>r)uZ5V(JjZCC8ru zB?n1%bf>?pG!w$klr?me?iwYQ2LI!W!m zYu1;RUb{);Q*T?zj6}aSIIAW`O(Hp=MGNKyW1JqftTtd?@OevY#kP@yjn(*-(oOLd8k?PEn zJYoYnl1@cd)UPMFw_$6hIF$!71JbqaE3O-%z|N#`ZRLI9l|dYW6UM&In= zCI`&~VYc&%Ta1TLNUp9Tj%yQ=K;BI|R)X%z=E@s6OCT87qO=XfGh2*qXU9^#DqExw z*uda|+jG426qbxk&R?|IxVe_e?p1v_!S$=7TDjE@`H{8{yP74E_foL{po-mCWsve} zEkZ=L(?TXfFFSzwzbfdmGv+OgeV~lT8O6^;9qVsL*DkDWPDu+ULpRs0a(4QZGD8R1 zp)$-DmXQcKtJX^{vdouEZDdi9kn%7))UI3D&8H($Z9*@!OB`1!!ai6I)jG_#wx)3? zDG}OgD?1x)KHRYz%kWu;CW~D$C5Bj{muZo=gw6*PiGAkxKIV6uZ&QcjVHgH99#?su;#l4QM#%oJi zj2H>LZYSQf{6DHm9mVCWhkdV?pK9POW|G$FRm(_68;xv#XbA711^m6t0|DGta*c~d zt<~~st1g?TH;_K*kaLR9y1cmi8pS=EMzOdwuNA>kH#RQmkgd{$o<2dz&!u%1Z5paY6n`r4n67rl zQ~Tv34y#=Tgba2maW4v^AlH{#pE=P^T&HEGg^mSW`Eqr|XqhCqjfC>xV-e@pvoyy^ zYzxAC*$MtG)um?vk~I??K7LW2GhS1VE3w(lb#d}qrKC_j+@eWH`4si1N{sP>vw1{( z--SBj-^-FYZm@i=gE^+^5y4|_Bw1QXAEKU|){)T7>Sx|vVPu_K?GKLCYfFaa-%fc; z6=}#|zul(kFsj{R@dQZR0KC?VT*9)*tlMEjh0mp1R}(9?^^MVPL1tgOSwCh!W!dI= zuMaMxwO+NnS=w2G;f7RXaaHc4{{Tf-C(CL0kfj{99my^2)X5a-A1a2SwbY*A?$~j> zt!YBGx^0>SndB@v+&QWc#Q?c!V`lQt@PW|!)mQ@Of7*$M{c;`@bu}#VO?_+jc_Kb$ zcNRUdQ^{i`=F6K-Vz%aHZX5FNRJAQaYwLtdBm%`(_p`Uk;k^K@cUA(!Opxg~fyA=% z3~SVT)=J8eTlurW=JA$FvtZF%Jgt^1AlgYCK9yx{ZSLMXYgaNv+)X5(DPN@|1hKR? z7Q3xTv;buHtV=lCP}C-MPdW%j?2d-DwH&lY!WhJGsN81g#E#!e&$rZ#j+-ogSc$Fy zjY#8~ZZ6jXCV?(4n&#$lVG5oR{{VGLSIa zx(brQOF^c+yfQ!9mC5PGJu_T2TQ-SX%a&`1ujaOBhmA3_gW#YX0%w0QjMS;g<~RYMh1*wzlQ zbhj2F*%Qu{#sD9~T?Ng>gps6HQ%vog$+$( z5ZfH6FBrjJdR;G6TbqZP={&Vzw=GK^r(!iHxAOi`oVMPkrMLSHoRUn;WL6jvu;5jZ za$S1%(mgcW+03^$GcWGpPNUkf@3l?3YS|c#yPPv;)~D8^g>>0&trrvHAc4yLD;`T( zwS7N)XCZlM7~!%zSA8>go%r3|7DyRO5=vwP#gn!tV?H?`qi6 zY|YfkcoAdo*BP$ZoK`mV?S(B~(ZkKPRzST#<23tweY3+L{{T@L%KBAHsokd9v8s^0 zeQJF+;OYtFP5Y4_KQDSrXz8sa8gz2q{{YK2JfE#Di!rfjB>OpUGdPp$RP_mFwYP#D ziqJCkJ?l$N-{qu41CN{9p_&;!Hj;b0drL-}0m%%$waIEiCTMMA8&MbLZ*g5ei0_MP zYyt*&PC%@^KGq4Ly1KX_Wdx9&x>m6oM>QPMYFdP_xGUr)^X@7|)e>m;G20wn7OQER z!rx7K<)Bj-IBtcodVMNe1ezNeZ>}w)!wtzAoP+hQn8xB}-kTg(J{P{YSif)y4BfgK z`CImi{{V!2d<)^^v3T0xUrc1$dB)oM!^8Ts&*5D{*X*er4q4mVgI^VX&|hXtI|a2F zi|sOY?~ZHLqwtcVW$8B)2^LFO$Z_qOw`KmBa_u<+en9P3;+gc@cy4WN_n8JlDXSW8 zoeVHF)}f1eS+cvm`U>yoM^Po7hjn_U7QTuCoR!WAtNtCHX!V7TeUS@%qD&x?86b! zMcNk_ttjqg+x8vd{LVhn{3AWHP~6zaHpPPQFv)Jq?N_aq*)&Kk)GC27B>L7&=IT{g z6H4D>3whTG^0e99r25hgW9-)p72(8KL~YZ`fmIa<}ch~)k?s!wjRG);1!YKd0_ zH-CDPj+VxBnO5KiOGC!&tXk9=PCL8FEq2wQPb|V9X9&mU<|0`u;b8^P^EF)yLG0W zF5k$A#-sR5gCe=5xJ@?R<)>DbicrE-@i>K-m38mj{_A3W$ znKQ%s8X6Zd&|Yd5wsuRVS|-d7KYR0x^U18sbUK#VE@fFla(ttV)HfH_ZK_BKUn9yH zo3Zw-O&9wvXyA&`QaGgG%)idFu=$HaPiuCJ*)qTn%uJQ1t=hHit)=_2%F6it-)wr; z9-(wT(h@75JrM06S3w|VwuD;83`n!dMsS!P|Rl7F?*s19!5OI<%)j@CK6 z_l390B5udlwKYUV)P#_Y*6ouZPNVBj)BeR}scILi65HHQ5LABhdsaTDYkO|U(cCq! z+P-H|+|c$kMa?fu)8^AFznSxO zD_V!_P{(r8m5mjDbbSxCa`WAqB8|q5E~iyQXo7v_ZjJ6L6D)TVMj9rR#>18A#ZM&K zt*)5&vIm|8AV#O7DeqB7c-E~7Lk`h146y7?Tbr=U@_)qA@tp{T;WBmZ% zEW*U;{{SQ)?3Zu%x*F_IT?m<}Z+tE<49K`be>&T(#~UFoqOy^fF&vP2$>!V#W1rzT6=P3^(WZ%`jI7FY^HxOH7gv$T z9i;5h$1lyd*zzjucS_ousBbDx%j;b4Ms-JG{LtK6>rt$Q1+SseuBB|(IwUK6fba*rL5t`H#z8Q zgYjI@>DuhKD+KQHw(RF3y%$b+?)2v{pEcASq<21*#rVVR3XplRn4|-hG~(Aag2OHE zOzY+{mHpoVzLhV4;Wyg&5`|^lItu2sEn(6$i#ticu7lzHpJ(wEqIuc#90GkSwy(fS zKBMs6?(`;lG`nif?ILB(? z>~5vHw)5t?GR|klPf{~p0*jQcJJ|G_i}?Qlv+iyb;38%;@0x(i_RT&S?hx%N4hIIa z^#zLF%FIaKS(M>d`~KAvUr%`sz~vx_g+7(6?G$L8&5KozY3?Qi zlOs=Y>l0Uz>$i_0r1G4jIRR@;b&HDzXIYC!A>?{zwPEW~t6jwul3_On+x4#Mag?=W z7cFh$FK>1S?#Com9~Vsok&9^+oRQ`R2c=!!@Y~LzKXkuzRu;V*wZ1pzPNDq=rF7F? z^_i57Ujul;TU$BpU6@3R@&bAq>AW+qM}4X;;QN%|wrk0>*e_;#gC6MBS2?c3!MCO* zVplGwmaexIV+MBKI(u0()Dk|~ywxM-!0TNH!+X1^*KwW#2pcjh&U{I!TIx`&a>l-D zusJo^d@=Gaq*%clQy6OFtgQjX9eu>tHgjBwni)*bxCqo{vULlGO+iV8ljR(+;-9SB z+(UfxK{;@ZjiQ}(9nbpf`IxI90UH3aKuy2tS<_zWxY&HDE?P;?+7KL~!g06jTu;SY zX>0P#&E}f*ZKbo(zGx zF;fMp(F2B$OO^=axsBECXC&@!dh$P=b63$j-85H@it2F9(>3WjwwL{rsY0v7Osb)O z3iGcPY4f*=Q~=v=;%-qP-PUQ80-C(T^et*J{h z2bH-8U>?=2uR$H=sT`hA0Z(5_!($!A#@Pn)rvO&e%%>d%yg=G`^8WyK=hmNU^39^i zrB3v~4T^&H(m`;7Nl8rbwCj7R?c<&!mWZ`~-v(`ChDk0b zR+;4k44o^-A2$&I@b5U`tK5D9z%F1*cewIaFe}2$CgBZBqQuYA=%Wk79uw5G{{XYeZ+mJaKkJ!>YeT~D+~`p?yiE-E6CX2js3YFC zWbpiB?Ve=+0Bwu3gnjyTuAggb3A%#dLg+ROcFkw)xt4&$xYng2C~&JfwqFArR+Z+e z(OAZj5U#_V*CBAm-bq~DdD1w?o9R=@G;`@oy7%{}yf!}dV|_$+litSA#OpFf;0&of z{cAeoUzl97t=u55-aggB>RQ4z%F42CM2}%#Q|nl-;u~9k-pUo4P5?dYSgYtWr`PrA zo6cXff>`m*bK0kgBl#m)Kwtqp*CVg%mlyZY{gTv()DZhkRURI@)UFnDx*#!{-9ex_ zn_W(OyXi!7sEzm)(dhS&<`s~s3G(!=e@W79?Qq^;JNO>e*VjzrPJn=FWE?w8~tfRat|x&^9tTXtzPu?fgp`U({iLNXR)^2`y$ z!STB$t=qfL9-Io`telcK=~H=XtS0DLa0OeivYbO4j~R4RmtR3$5~w1=Utix}c_Yb4 zW5^C80Dd*l_-=19XO`u>yO0X?z$!fjVQKcW$Y)iItZdm;^{$smuuIFp)AJ%I!k=p7 zsLDpw^0${_@JM{8KRj-8fmb2D)G_2N(8j;R^5cqf*saZ-)Iofi-Eghl4MlUNt*ynR zZ*jl(e>3~nmr%5H7WYcFs}zmCKyp|fDU#hEwOdAywkPYJ)t7k~v1QpenlX|prNzjS z)_DZJUmQ30Ym1S$a*dg8WLxEnepHXWnpV6PcLo?+A-Fl_xrWuHv(nmGfi1Wy$bBlT z8p;UwG~1`_wbdBt2JC8)>XI|Ier_;oiPYL_>22ON^0t$ZIIPvWy^YP>kTXZu>qy=v zg`{nY7v;ej?^-C5SJiH#x3_^-H!+4apK+=x!{oyoDU+Se$gKTWR=8-)QL$pbb!oGv zp?hg>&Hs#?YucXy@bl_Ois8FC;rwBAD;oxEiGR_33j+(*2d zgo-Ffn5ilG$*py;xq?eajw2i?77C7p`qQnfV4D)(Fp@@Xzc*oAv#D~?XG^oQytjh- z;yIpcfw{b<#y+&z?QJ2{M9`y+rx!!^}Y@Ll2nyS3P+xx7a0e;znWef3sS{aIuFp zvTWQ6v}^L7JJtrR6EF|G5V!C!=C@>TB2BTT_{#1p@9SLNs9R8+$>n_g#d=iqA*PN~ zRZFJcR#??k>6G;n?E1Kcwxmo3ta&E>&dz2N?ozah| zLo9Yn`_wV7TI8-R?BOpXoUKbAK9zV*i3v{J_ER39YmCcWG|S~%)% zW?wXGa57gFiK$9_>w z#R?l%^B65_-ZXGtL8!Rw@H!(avG*=5OWGV$l{{UI*imz*KlSe0*G5yop zoh{Y0O#5RCE5F_EgW8u-xMYUb*&_1Fw5v9CQAR;&8ty$D0iLBza1Lol8=~XW- z3u!hVxY*q7Z|_x$<%G#-Qb5uezG3KVm5w4bgfNi-E(Q%+jfM5OB~I`vwVE`0+jiw6 z2imUb_N8PC9Q%a51x?M0;?s4bv0s=rD>7)zHyg%6uOhcrVHcSkvUfZh&YSnKzsvFu zy57Fj`G~OiWR6BjSQ0zbwraN)^1#i8++ABgEhVRxEOxr>+&=fEL2GW)ZfHlC6y&Jx zD_Fe*$@Gcd$5ym$`{XiUw`%&YOP^1=&}`*U9&oxAN~IOagd}cCUWY zyhVL=;Cm+dmNbn)T-T3YH+md(4UKbBSak%qvt>je5F3+JFC>35RRcFI(XsNARMto) zzTXHJlKEpT=yB4g)E4Af+D__iut_p{*AFd@Lbji7blbogw@D|=#PXp1E2FbEcKhZ( zzquptMt)KFS2u35>TG6Ee$5{bH*D68mGzFBXEckoBXuZS-@PFn1lNnHS;GrS5Ox?0 z1~XU}*jYBYSCx2OqNu|(6G3XwNH#CsVO9wdgK;8cjs%99U|xpu;bC~lQ6XG?-qkIQ zycZ@UzH_j3!Nq04G?$LEd4;1V0sVcc@hle?l8LUuDxbJ})g}hjnYofThAH8S%s(Dr z=RLWpB-2(2w>88w+&4)R{a@u&qr0(XHmDZjJY>=(yEInf(hbp<`>R&=6ky%W9X=cR z?~2GFkSV}u;{aCPo1(=U%1mt(&5^nKRW`NMG<1((XiUR)M{0a>USBgL_v{&0Jl897 zPeHiYn)AY!Utx%UXxjyE;m~A|DrzW{-Py5*DI&MW$-AvzzK&J59&83l*l_2r zI|^McN0Q&{)6e#HQH6x}_Nbq`v8O^5WQG*V7n8RYQu4&=SKerG9?%Xd<-NPwUu=1N z?b*Qe_N2bFTN!uUT=^xt5lSt+#Ai&GlgeSTeBJa@)MmCP^Db@UwSb7V3=c9#A1}Q( z!xLM>tt9CG0%E6}d8A6{!TZPK2sy>Fd8hyJ%B1yoHv&a36hxw( zqm0sv$u1;<4Vyu1NhUbON9PD(#iXCRCj}SQr?F>NFx-NXNx){T-OVi7sXfZY57;f< zIiQeb$Qk5&)d+N$n?;&PT&K*y?rJRIhTW%v2ttNz`NEkbGk<1|WgEhJr#GATixw}%Z+ys;NWt(>Y08eV#WSZwv^CPx0qJg$w zQ(jd_wJWo+NphPrTZEB~#DI>&H3X2xWZgD)ftBZquQW|_CfT3&$E0Sa)FYBTjWEnX zKq_e@Bxu;f1;wgd7Y;%BRZlfbP=*adRJXE}lvzPy0l^ri+TB{HwEF_6JNXMm!`U{V z@|o4I!TD3Ts~EQn9lgKVBz0?5Y=FEs=T&a^#crYpRe|`4UzT63Js}rgxsnZ%so&;% zR7+xR9`@kL=0|F~gnqu%0Q;>j=2)PXDdT2P17oExnD)2KE!i4hECR%3Pq)^kvuNz# z^BR4tFx}<)dsH?T7UxeUGz}<`iIdP~sv|GhTuX6;glxMX>r{>y`wEWD?X@pDIfzY+ zcPQZQ6+*{Sk#D77<~f-D>Tc~&Ln6s~@PyfV=W+F6+}6nw%^9xz#TLy8aECE6590Ur zs@9fodnB>kpR>3;{{RhLhV6vjL=o;Wjl&5W4tEbQx%>t$~tDFhSJ0SK7566 zIrBfe?^k^WXKEJ{E%n4ODUQ}w$_5;P^`!pLhR)aQ*0HoR6O$yogI6TCmj3NzSqsKK z@6xlc9FLwzKG6|xEN8QHuRd|q(GlCtB=SgZBWzoZ-g1l~t5&jJUtJ_pNf?2KRk6k@ zS(@%mF|67Kf&^cm(Z{7#)30NOL`alfK!{b7vinvJ=+fqdk_O(kvcj-qYcT_p+yhwc zC8eLPxOo?Hjl-JJYgp!*Pb%05QLrQxpQ&2feW91lRB*W;?R!^x*JBqXWyz=| zm)a&DJ1_8c&(KyFy1SMaQbY{$ZwSK#t!Zj%(cD@rR$RBYAV@Ce( zt#{KflfJ^A_{Y|=G&?dc8f&YL-zv3e8@q&>aKOa_ zHx1hr){c8vmKJSF^JT<~_ISn@ZwDi%HKMluT!oCQvA9q=)+ViaZw8i;=}Io{T2NV& zuU2?y<4xH#?Foo#Uy z=B;GJ=G)6T^r!un+fb5Qv51Q0SMaE@S1an0n;7G`kgLx(-oUP3P=Ti0@3~dE+72^X zlH1(eU19S-KPdF4YKoFHai5Y!Oc6_CM6@{%ux`9YhFIfFfbstT7Anp4(b4Wp!6gxHnTm)hwffA0^Q?n#17;d_^adf zj9Pw+rU$=yR-1Lk%(H})suei#A3cQ{iNfM`v*s!5r~@ZMHuOjyw|r! z;U6+GuGh-5U$PS;wF|>@EMQ?Vz~ch7 zW7H!1RFcM6L+OgczLHB~kZF=7y@Dv*vJ8^g=bF^e8GfIc|L>@C+m)0`gt&uUZvwy5(&{R*WX?8E= zc`qcuZTVaEsAkP*J4C*pPtfAGi;Kyfkd^f9&0f=Ng^JwB&hzRDc@N5i^{Tcyg|?Rr zU@x6;?eemo1wF5?Z042RZu5>=cJo3;Wz8j;O=JBfenN-l_w=ro&Q*`?2_mkp4D?&?AHk&=f`SW2QJ9Gs5R5ILLYF2THCWw?^RTXe} z=~GUcxh&2)ZIzCfA(~09WQBJhIA`*zcK3F&h?+*sY&b#B=~|lA>4#5w?kA2zx8}D| zhi_`d@ZOhcD>dB6(W9NptlxL*S18!b>!P=|{?GFM&V|1AO7^TDE?KUKfg_4I&p>fn z^D{=Lb@U=IK342~zO{v?xSI0vMn-jBNK;wcLB;B9>5!+}0!XWd1e04g7m!)lkF&9N z$pKrXbGmKZOz%9X-dY{IbInctrEeh^w~{M-{_R-u8`iky?9RT1zM&Gfn{6fF0!f!5 zG~`tcOH5mxKgyCpF<;&yNP1(CD#eP)b$1h7HUgiMJt{pz`#MXukx|xEQVVY2(o(pz zFtpDRUM;lkcWDXo*Y|ryPHL^Mk#V}}?s*N&$8tivh4%KR>6aqwP`Z107aMS6>Q|no zsz;;CrC(2SlPvR2+m)B@$LvLD_B2OB;u#~->|#h6XS;Buu^{13YUgeB_nP7C(lwMX z-Yv~C;uvgnIWG?8xoJwAwsH@pXZUJJ4cxa8#K>bCq*ggBD>y-1yPZYl^zCM`myALO z-P}KwQC(?eQEZX!X#W6txGrk4*;q)|7gLAJwqs4*t4hsn^xHI&7>s4xZujJ1_N^RI zE<~o~FP1Bb<(VD(4C1scE$uAtA`ni^=8UwAdV6NFZgp#Rl3Qu8Ht;)EW|Mhqe>B>2 zF@f2)qdR(3$`%@DWqYMbr0Pu_x${;<80S2iWwbIZ7r?nm;QPu>D!+vF$syH+q_VBl zvEccO(;ceEjHXYu-c4^R#_V$<`qwgE@kgI{ita|#($d}X&Ns7X-l$zhQu&j9=KyZ! zG?!Z&P&;K+n`v$B)9Fy@av+Lp>6>-Kf}`6N>|WHFi&~PyW@5S*Hu4qNesP==T2`|x z(fI*9yDi>h$&4{!&MK9N^8QoNpGY zvI`^#6@K)CX{n{uV}>|lj69byuG5k7{&k$*Y`SDhkupop<{bq}x}#azENLEFA2ft< znvP>D6I@Gg1(UbS6CCiqwSjLlTijY+#te*&xwlkWT8&Rsnp@d12vda4IjuG@{gsy0 ze5J<>{EB?HG*Zx#$5s1wtZux&E=9-~7!|c|ss{68m9WKlta~enQq_x%^8?jst#NDi zK{0T$?jWf=(&RMf(AKw^))atAmXnT6Nj1Tm`V@IQva7W1J!=o`3*;@-O3YV~1y{G! z;<~y-ni&h{aBy%3wPPq5^B$FAAdN%_=kPb7Nvwf;VYcvzN z-j9S;Q-Td)_?~GczPEKlwX%5?glXDWHRjOgF64Wgzc8ZhQPQ{mA8QdeifvV+WAlJM zTIS?wBapdZ%bXA^r|?dvYh&UqF!_6&%rjlpBY2XJV)6F5X{Ok`>?FwQ0@n#+;|nym z;iL__cm->7;=a6!x$;kz!o0O1p88G7>u!35anx6z3RVdpNcbC6x7V~e?x%HWqfOAO zo`)im8+QHV*O^7#kg#$MdAGyeLf+Ey&erpM#oKGFZH(7#t@x7T!?w3#*OKpul#K0O zm^H(QTANcwXNdI=?G1a)ww^?_R8`zg4o6W`^?Ql6OEtDfW95tkp0%3?oAy~FykRL~ zWd%6o^NP-gP`>BNaRSHF%pZE9iaO=7Lt3@_Cfjo>?jw2U(z2txH(zI$ad-1J^V5o# zS(nVqH8)xx<+6;)f_qs!e|xKvVu zs~VMb+l@xv8E2Jw83~LNRy9QX4Y;+pjgeV$bJUv7FWxhe$ilmBgi{dIX=liHI5LURJua+J2=p@sL9!Cfs`Wu7|+>D7l96-VMMix84I8s>M_H29Iyn zRv2!lEj*z^_U~0@oBK`GZsw9a0268J>6(t};N4mWU}ebu8qe`9$kBW&E#2gb^PR%p zRp1B5%09g-f}XLlq)r>+&aF1LsA;|w(k5iP4r98JPCUGh2sM#<(0FQVNG6XnLm!sJ zE_}oNqKLz(-dRs3I33i z-mws|{nz)mdyh)q50}Tv8zP;rOXe_jU?pR_e_%Z-wAaGnVqK(d zJb$!nvf3V`YG_}Y;ia`Rfsmu;K9$VJDz;=?hx0MhwrixY)*^>Y)NQ1Uw2~3W_iB~J ztPNr(McVs-+upW`l%!GBu7r~yU%b6)D|@Z*$fvGqCI%bHOq>D+Gf@>W%nI@woL2TZ z&6`{8w&h!v?O#ED&i4x)o0+2-+AwinH`*_f+nDE?`bXf3wZ@DdHVcLBE9Ucmgy^D? z^k0Xjw$kC3Q@x3r6>x*gUCqz6byl(I7uQUaOLCS$JjB|(?merU@QkwkkeQ0KYBA-J z)Z?voUKO^EO(V{}k~KbS4ZRLCU!TdIg^BF#qPm(W;0kSXg)PGo?kV?H@OWKVUPBzv z%Gn-R-bQ+KtJ<7;UXqsg@j)Y?`L-)^-%5R*m5eH6E+lD(oUyZHueEV0*^Z6)XTEu1I5zI_pSX?su)w?}D-p_ z<2;(bXvsXcR`5-^wowY^P2e!czcrPqcm~QlglAUrqdSMoUb@;kSgTw-s64~MpL)x_ z)AMg6G7<6&?yVJOfbx4^2!(s0X< z*9Eb~X=oZemg{jLxq!>HwyQ5SUszyp_P!moTQx%)30Ku?r_;1MD_QMiwn6rdobMPF zeYAVo^m8|9pdv3N`W|war%n?W?b3afGP`HxX9}eBDX}yigpF5}?)w$t|fpMr_ z!EWl;e`X)M>PMv)<^tWVlOS%$tqnIwx3g=; zxem9ia_zeTPq?msTD`JXXx`FkAEr98u zw~{uHv5=pcSCloSrs#RNxF}mJ8^21L-rcQjBDTi)BRTgqvyfPp%k0v#sV{pW6e?d;xH2(lH*8b&i z%WcX=2QBoejX|Dab>Wn_nkbvi`#A#{9s5t55uS%&O!>KOYdZ|@b z!R=n*sAzIqU0b?^h7dkeAnGaCR`!-UPoEp4@-(4JN7s{8?O7*}Tl^`C^72^$W%9ry zJOf(s_!;#1B0_+ygE_B9xRMvMSklf&In_S#I~_{MI+mS>^KyAV6n-M4XZ+k ziiUM;o!*rut)eJ}46n5tr&|gW)MMo^ zn%dqQ9IMFtc;r)2>{``#Bks>1C2d3H!)I_^GB;&?#b=#PCa^_V3d!aX&1UK`*ryDU zX|oy19ChSW7FvWW6~t2pR+aaz(b|(y)EY)GPE<2+qZq0ZTuZrRjW+BXcM-*F7tDa8 zsa{)swnTQA*ry>Hz^6}+n;o-!Fak9y^`HIMhwNh0mWN4ipB#7j>Ht{s(Lx!1tO#Av)mx-?g8n@e!4UY=0-=OrYE4Wr0sQlR3vGZUWyLBh_ zvWta3B8(L7F?pqk(rxr~pV|z@{vpW7KVCfe~eJp}PzcGfZ21NxVOM zAwsMd<&d5QMdf{>J83@pM$5Y$z&zCu&CAQ{Z7;;yiE;axpjB0jWaqyXfh>k8n)O+V zMt)e|kJ7Yt`K@lX)xFYSdv7c$D>2=i3YT8dOxGH9!FAnuhDmY2Q<|g*!njmxf3&({ zLfHTcW#!`~oN^+Dl1?9R`@c%N402t=CBbDdM8!7at|_toj_TfPl|oo9Lg%Guh-E0P zlIzNet|X3E839ipjT)TOSj=II5~xg;ldV<(q?sl}WdP&rTOK0QT0LsrW?+vjNB}%_ z6v!vjH2C!|30&RXND=Mh-4dzqR3MzoYL@Dt$m4K-LG`0kv6sW__H)VRM>ong@G1q6 zS-=pmS8uw<)6%n%Q7vhz(A-ZEJCkQpd(@Wmn-!8(IWc|OsbesjaS|y)+%{_T(HLcx z1z#~E;IQaxI~&}ZIaDv&SZ*!VaqCiFGfsXguTAR1A2k;gVv<9)Qz&qCeX3AQ}H!&>Je|NPcr)|uXsN4^6$bi+m#z|ypGl6H__YNN0{PenR=3I z)qWT17ZP|{_Sxl6yt`W+1}ldVp~o|@ylZ(OMNQErz^x=hoa36Q=U!>Hiyf?qcWB%L zaQ^@>A4+@{_djL*%czGqWg{f|(^JB~XtKMxX?&oonB!t|n)6xA%&D$#CsS`5EMbn~ zBX5_AY;AL{H}-wHgtWK)<4FGiD-+(eY&5G|JsxLMzGCAmo@!UID$*B~U{{X}r-DUG zModfnpJLPChkynZlcD;Wy4ri`l0?_CWf?N6jktSeouuh;rh{-G{{T@E{JG@*b$D6X zT*+=);bq#K#v7W=l^sm=xso_?W7!crZ5&poh2*!l`&5#}=Cd5G<;_bZG0cV}WlLn` zQ1#6%z2jM2TSo*X%XPrbXU$_qg!@&k#OHKI0vq^O85Og0c^g=w+bCCFoMN+Nz7yZ= zn$hK5y-)#zOKT)?+{@-TJ4QnHr|krpwP>?lEH8B~Hm^<9HLN?WUT`uClo_h_qT1?6 zwud8V?i5>_f$tQAd zZZIoaeVT(KN_?{qE1ok@M{X}S@Y{jFIqgYQVn;1?r$?+=mbks18RIzH8+ue)PL~T! z7R#yHaCq}hGHa-B3dYwaHAR-*8_zBr?_ta5iiNE1VY+ynnWF=D%i6jTV6*c0dNg5@*ip&Aab4tQybXtK` zn&qw4B4xsSz3R@7cJrZ`sd1>?mtgxBi$>>Df##cGCJ0!#-$bHu@J>lGn1YxGfDFxvSm`I)Gj{XZ4;=&nz^PU>9^MM4hddrq`q3nsEinAj8fc9D(#XmSf{0A(RVxj zOI9YpE5a18#z5w%=(m?1bVAqV5&i6(R(6}JT=;_A%PT6ZV*zpLR;^3Hr(Ikls=hK; zy<+L2&r!42lkDn@it=NwGILu#AJznOI^Fq*nE7_8uRFE67S^yyZSzjR5_;Enq1@j~ z8qIq=S1Q9BBU}~w*PmJkOm;S`Cq=)wo@PElY@;5ytveQmJDEK8XI4^FHzS^v%<4<_ zf)NfAJqK#uxiQ>F3M6c$BOf;mNh2<@rq^S>!qLwi!6ulzB1YN zsAj&Nc8Wd9Q$2-6G;bZiF>@zoJc`M(%S~~0g_BV+#Ru^HowEMf6``hDzNEJe0rIR! z`PxsF$o2=VVq4fWH%56CntXTZ`BcJvPgL{TR~|$IE3t3~){qu$E|O)qw2gO#Y%4hC zscI5SrQ3+^6%{2rSIId!HDWC?;wXj8GAps`v{1&!%m!sTFiiG)GBb~^i3T$@@wlLlWis*}m8 z<^yBx7crA>5LdTjyvWC&rB0e@y@lR+mK!A*I~;C4yj2ZKMq5}!ZXtkR6>g;cXta*O z?xSnH@8zA!74QkHWiTwsBzEwu7S86~hYrIGDoEoI+X6=9&l&#pGAlXc)SaZ7Hnf?y zM;IKU`Wm@>(fx&CwqW63CN<^0w7I#7Y|gy2X|3l5W*3q!7CqlCYK&TK&73I^Ra9bNrWphH1NJAI5KC1_cb--@x7}=U0wy?ZR&p-IZ!DxI_phKff={js~HSVa7n5f z!Ix0Hv@vaqYku=-!Ef=aLS@lod2TZ*IKYihHDB!Ss2fYWHu83yg>H8JYCW2{pya%k z?oTKt%VhiIe(@r+t|WV{Qgu{cvg`mmeeBkux=TxWS|OXF*l%;|iq3mk;j>$rTr*0= zcBsJ>-A)L`M?HLqjU+x~hi?J9)EAn3HmwvAT+1cgfI5uiZLPb=)+j?dd4vy}Z)(H) zE5|Xpl~~RP?%S{)mDd$xBHVGjH&DP77L4vCyVj)FhUJ~4NYul?Rp`};V-5bXD^BvR z_W4ynyIBRx{`rO(bJDcz zVQUCX(=aIA6mWU%RHuRqSsL#L%(&yr&nsHQ=CircE#g~P+Qn|Wm?jwFn;gO^x}5#u zy{e9#Z#9~SL%+=Vw&Rgkt>%mE42B1LlDv`73UXQr=tX}cTwYsDt>q@{oE%hlOo5s; z%Sil&HDc@Rt0lZswnl%1;;49oQn$B<{T)iOj0~KUSlZ^%k()G)XC4^knBZ;Zxu`Uq zQ&HF2ONPagH)iehtxYaxoX+!uwN#bQtzFXQntNH9$Uwt|Ba>Ye;)^d$CH0go6mtEh z)S(A+XB=0`{{Xcm{7azdmT@2p9n_DIJC(1ftY87(qoOSKHEEFMx-Qdl07)|t*m-;(6+KRp{QHSBzs_u zwb?4u{RV`m)Cu|y%Nw&I@(hHV*U$91UFvHA0QCslY{{U$)TR56HB<0%S zcCLMitmU!B=0tQnTE}+Nvn+rE7jApjy}jhtI%=(sRKzp#(p-5qcBq#!2^cm2g|`pV ztZBBh-&{!1`EkNKImL4`HzHjo7_O~kd$0`B9mjWiu(0D{wm)RGM$eR;3GY?)sN&Ql ziqV*%Rr}C;eJUmURF=^}5kYQ^^D`VZXCcRNx1J-s{@5tw#cR9Qf+{;P1otvea{|Dp zDy{wO^ff-DmY-*JfaTP3(o}a^XWBGTa*_hb>bn)W{HrsvF}fLjXxd%9x_=pvktcDQ zb;C@CGH>2@laZWpRrPCm;#(=@Y{t)qT>QX&Dn-%lZSNlXS!EEp-5QhI=~Rw+#>S=8 z@>;w$_A;57z-C^Y_pOUokV>&ge4C%{*Ch;>@*g?{j3|AoTd!KyE38bHQa6*j6y3r3 zshAdK)ScwIuoq1vjQ;>Me&VlPB#Ua3Tf_vQ1voX$*gTU@4brOlfPV0wT9vFX=2n-^ z0xiVw^-DuDT5T`wP{DCLU^qE;?kdgo^jdD3V~W)-k;u!Fj8`J9Evj71w+#OPFAC3* z_zKfYi$4-IoL44zV_5L*7$9b$>LWru9@^_rNd?)K*JvvSK2Y@gqBNGhKk9tXN~+ed z!y?*SyuW7$B16|dT5P%u;_bY-e9c7Z(q7%M{x%5F90PN<7TzzJY(N-(1aV$sdr7 z*-uKZaXt0D^l2;`pmCESG{?8ptV2gPl_KAAhBLco_*9lJFW6)Z+pYs`0nch`or$@r z9i6V7B=_(@u|p~aF2BW&)t9Hs6n9ciXDw|Z%P(O}x}Q>t%3C%tnAvdHBOo72n#FBb zONz-@d4+Hb9)B8{=xq}}#8M=->jVwvWy1mZ*5`)w^wMJ&7Zzzc+zc|cPbH}-eDRl>x?G^}7;Sh8ps%w|VYej|!{oF^*{GMn3>wcn#a16%x6U;bHDKPtrBZeSv<&fJ9~T3m}$AFmF=yrR(1iTMJc<} zJ*!g2MVn25lwcspTw=0r;gUPu%$W?NfsQHrPHh2bO{D6Lr)rVh#x@BUD*@^2TRtYf zg`~QeKIDFPde=RrOuB}faSWr&Weu>AgPP8V&WhC_oxJUX2VvZQ8qyHzQ6<&Ay~X@N zo5~EIcvI)m*Uc8N$X{>FPp)eFL29oB!-sI74X84ID!SJ3>o=3!S?-BaFjz_QoP8^y z?P5suotDxn7{QW00(#VvUk22?^CsLb-JX?7?jvJvXN9+e$>%NjRcnZUv@K&+S4G?# z*Fdpm|=%G~lZkyX6& zZKz8eE0yx{OA2E*t?rGjybKN_1LscE`!*MF&hZRBPBB?_@<(x}$rxfw4qH4A#;n`K zV7!YgRC#@m29qGvO+p6n{19A_FXEM$vFnc1{dr?pbc@L^+Bh~6>y8a3oc1ZY;$Y1z zpDx^FRQ@oL8p}>dBOX&B-W+uLQb2Mx=^TD^hUChO=V(6tD^EdLW7aI)BF~i|W^X}R zx01~bxRN;2hXZL9Mm&uWR?-d9F5<(nt}for7-EhGWD%$LNX=u*sYPpg=G~v=IQgrFtvj6*(b+OdYYdY~ zeDB5r9C1whLOzBbd9duiDK(F$Tt}(4cR!dpApP7`?N(tepOt{BqvgkX!V$AJo{Y-7 zhTiQ~8E#8N+>l3lsV1K$nQ`S0^xF!tUSBeJj7Af!Jy5 zCDoO?iAa($$gA3fOXTmkxFS_tfPE`7Ntt21Qg;>0I%C z@e)NFJNU0A^E|LhpUd8{CT5=U_zBt|&zz3@R-T`I4c)F|9$C5l*$gp{dgX5>HhPq{ zB(o6MR$g=X*P%_=#IvB!Y_Z)v^lJYAc~#rjoK^1+Ndub&2qOLG&milH6Ur*v66KYpiax2Lgc!Mis zVMzkKxW|z*XdSnRHOpTQLty~|b_WX~?OdL-;?1|wAb?E_gDsQZx)-}f(PN4=ig{RI zw74XFD>8j9-brGOwr(+&CyW9qMcnF0uV<`U!RN;^Dia<+`qv@i3+Q2kr=RB!mp{W@ zmxJu5Ym3{T^m!LyU)~UK1!Z2`J=UoNaxI$M=Nq!4itME$cr8yBy}E|tNdp~&INR@3 z?ACv^K?ANFK328-L2Yi@#lkwYe=}_$U>|zOjwx-*vbN(1-U&RK^aPb~ zTQe^Bm4c}oYf{Dwo2i@_a~|WhGsST}5xzgVmS2@oc91*gy>-?yrHh#%nVdgCyErxQ z5emCamTYBv_`4$#iy2wR}7Egt1A zteCu)0`4>A^PRtkwQ-?X-TN$Bo#b;9{g6otA&-%f-l4hE7T-{~w2x7FX1H#+992yw z8|z!Eg}5leljS+jNjgBb+KkE~^B3=6bgi2>=C+CeRu@E^Z~%or5Z> zpvWu1tm~aWPKMpycaf$%?aoDe6!eG?rJ1z4W{y%siNEuz_AI(>(@!e>pi9Ctc0RRX zW`*pQeaFmZ@`C$x&MI3QZ?fFn+rA|VzbAYenFv^IR^IFFo_TV|C4al^U1HwAwsD^` z%p~)k-u2Hd!MIN*2*6>(d4nI7Y6#ESQ(#a*`Lq2ij-o9cMu`Zzk%+x%VjYO!S5c$3 zogVW%qU99es}2FKZ$g4E?Ag^@%W0PiTZ-s3h?R8Kf;0^-^~*5h^RGIhEa)w5?Dt73 zg-z>)OjQfXj*~U4cNXj9Ty=75O5)cS(D~0AqXkp3hZR>=)AXyKx5oD}7K4b1ZYp4j zWY%{Vnq8crGfpKxB9qZgL7{!REkf$Y&1`JlyVEseNNX#5F?(}9@fi^+t7o3vR(+M_ z)~VxbxOEjQvtfuTs5N2aKB*l zK2XcfFfytRFQch`qqx=;hsp9Al%tG;<@>xxNBmw z82EGdO(KlDi?1_MH!>#uryv@F>U+hzTYMFYQRemiD$U&REvaQzEg0vHwTC3edndS+ znKrlqvyMG0dSWHiwI{h@62cjJ70q+Hvp<-yOKQGHPP|pEQR9-~WQ@t>xC%D<*Ey+P z2xn+eO(O%2K{eeN+)Rq%>MN+qn8Zr0jw_qjt|CC{4)gkid~0*&n{f ze_G6+bat01Htpbl58V~))7a#Za^iG`^iL}Jkg||Bd(@s8SZ&U$5K%tp2^szz=9#D} z-RV}>atyp%VhbNar>Q>mJeQW9AG*AUO${tlTY$|d%L01WN-!Cv*e}_vt*&1X+z+^V zHB+^}8hwq`nnom_&O3cVde!*<0JNn|1{u~Aw`If+z$AN`&yi=b)t*u#ECEsvao(tw zI@(2zN0TwRWci$))q3;Ij{8n&ZWzOGg@k>FHBt)}x|UY6D;!q?XYWqlYHcn=SC-Q3 zmTP0NSaLrDS8-UQX>Tr}cRjU}kqQQpqh5y{Y5F@nb~>vig1S6dX3zSrdWu^a4V~j% z+Yl77LZ_*zZ*CgeOX+d2Tqe;P_WFu<6GjUq!uc;8jL;~_`qx8s_FY@Uu{y8Y73s}X@b!w^XnKUs;3~KWC!U?Fcf+y3{u-XqQGC$M;K~4R)~Pc)9L}YxKCHI$ zPZ&O5Et5$Zf@@c6l^ged??2tD?Q1H>B4u};qdh9@@121cb1l0mQSzR7r^9d~ib&%eF!{F%=9Y+}{<_xs zrlAz}L_Bk4mNn?U)y*};@!T>%zh|2`F1>d5uA0qZ(pK0;8c8k}c1X&n_*Xe|YWEt1 zkulmilX9QaHN720BE7_7UFi&`%u$y) z{G{=k?tT~C1-cMU2>|@TM_S~?ZgR-<;c&iDYi7z1;T31>QCw+Fb3UZ-yo2{};Baag zFBzkD(_vO%2-@pfnjeMr8_g|mZ^UZ11B6ree-72=9MW2x+<);c#jI=gnddvzk6c!y z9u>HgRFR~WueU@q8;%p+wY0qgO*;6=0FGG(cKOF5oqelnb~h6L0BBnSB#X8tv_eLE zWRBDr$ZnP4)Q;Zn-L(dVF@l)ls_IbbdQHCTc2~F@ZpSq(zL&0QT0HBhJ-kqr;h}II zou=s)O?4Cq?7$`&rak`v8p>w0(OXZ|pjfsvD=f|H{66()T`jo4lgp95>kgu(xX^6v zX1I^d8_IPIIHmhGm8RH1CCsel7m}wn%3P5(ovq}ziv$kMxp$WJs|#bNo9PAA-)EQ) zyNvEWl_kEtr{2f9&&*P*w{r|qe{E@cY<6>M2_&}-AqnL!;h%qMqZC-uzR7Vks?zTf zoFpW0!nW+8f@@~P3kAqygbB$TUjDHjAGqMW@n0f)rzvTa3CYnvgYvvNvu3j$MO{b;MFVnrH0-z zi}~*vGZh&5hZPanrY+Ufcbg-T{D$-$>eh>>Lv^Sop4gEWdJ zGuEp`;=7GMH*XTOj6A=)o((0&wQ?=ux=5p3oRCH;c}p}b?}TPVpYLak)Urv@mCR~S zQCY_7ZB-I|v8Yk=V~Tv2GHnlqX!?A-^I6I|46!Z8+3uq9PV!B4UK)z%?~-dVByIiU zUT<}GjY1arh8v}C{{U@E93x}MKAEUUq|Z&WWs6N{lEoklP9#&#YNnf{%^F;b*%~`} zIyvqukh9mW?=8e(v2dL2JPdZO&q37g@2#PVMMF3kWp0_Q=3UN@PO(dP)=@4|MhCri zS{?K)WBafpbCI}pHRo1((=@EEKI3gF1$RCl)UCzY5=P4zQID4byy}NVHgqd)u&go% z-p(?@ud3b_I78)?tU0Ys?2{X57&d=*xZqaQZ+~wPM)KPW&JJtNk<-+s>*NIW&0V>c z+higM_e#SoG0@Z!N?Ofupvh9m(cD_cZ?j-w`^LryKE}CZ^)$AE-n0^37MoCOSv;%= zKmfQvN59DF)}rwJ+_2i-tc+gKmmXpMAyj0yc97T|tTDLE-kzDN_qjH4X}0gS3vc5m z1-_@fP;@%@ui%GHF~NZC$j7B)Trx`<$sMZ68n#&f06L>_dg`{e@u?DQz&PU-r5=ZI z9iy^M7QnlRE-H{)LcP>$Hjk*zvl~6jn0EH6dR#HX6n5REWaoBT;e0p!% zq-)#%0Qi>Lw-GY)$f$8Mh1SBn^zg5 zVWO?DXOmHR5?`7pAbr|2d&_9ACQDTpOcdrr!Ox{uYmm0$;#SE{7BxT8tXbQM6vB4K ztT*|I$6nd1im-uJYng-IFOzGYQ>Y@Fb!%^K3L)PVhjO>~N2MjaGQ)6@hVw1d^OKTA zW-v2q(#auZwn9caR;gSK89vJ+DPSiU#u}(eYjO6eB)4B8-ZPd(>57s@vyRk-X9@{B znyC4{L_T~HnU+pS4WG`d+1Li@zD=d{uX6i~24JmJB$i!987C67al}gn9@TDPCl|O@ z3b-r(0M@ELT({bL+@{!}IRqX$R@BI4OHD}L+f0nO5_FQ7*4l)Z(cJkaTQpsTN#LJa zt^KQQ43JxFk(Ib+jdPF6w`7@hYsgKD80}U)t|U8ouC!prY4EhS*|$$9t`EyrQI}8D zCcB?cONUnK$M1X7B91FrCV?4<3&ew`=UO^^F|D&o&%bX_$2qG4rR}T7hMq04KhCS$ zCy*+g=AAPoz08)u0~*k{wfjZCk#Qm3UvlkkgSA$Y6#GOlJnYe1w&ufUiqhcLgp;zy z&={oJ+j#=1eX?j~dEy)0#?91g(wmGXp2$h)SkuOzb7Qh8nl_n$Zra_j-Z0Rw zCi{pIoKGVB4yFnvXAE%Mmt>!(5l zj8|!pjGxZ5rUrG?QY#he`Tgja#!sRqwre#);R7i1kbl9u`-{^ zzE%CCtVBK$(7C}kvi|_+HSJOOPIb85F5=fr((T#pnn`6`@6Srq_=Vtm6Rc_awU3A` zWimjKy{hD}$Qc#RYm*}AmTxqM+901RCpqS&@b89Bqcn3*aO$JxM#o=D>8muhJ!+br z1)h(j=q%r9Tto&!miykqx3xWDZEHtMNTpi~EC7h(l0KrTn`>#WLS2tEr$u4Ftu)i% zTgV#Wb8H3`am9IcDx7}Ir=)m!Em|~o!e?=nx>lmeYP!U*{h?=t$O@=&Q%R)Gj?lX{ z)*F;|!Rb!3@WrWxrIDHkglBrMH4&(ZZ z_r8^HO|_KjQo#Z=YY{ke$l|84&~KPqTw7Ts!`t$V#|EEoXMZ-Ohzki0OQ1Xh+*DlX zi?HAAXs)$Mmj2n7Dis}$06w(MTTr#QSS_b<2!w4}nDE~9wSA_!wRtDEPdJP!li${` z;?nQ+B}gXH;&@ksDLjv*H6tp7aqAIT-ACspEyD57-aUw`4XjD2O?x$qWWy6~)cnoOTxuoI?@FK9!};QzJ{)wD=5G(?C_H zT(gtLY71R@D;Ap3klaSah$?z!wY0r^!q?U-1>8v;{ixX3LV2xi9yl+=pJUQ3rc4}2 z#Dh$Ohu;%qt+V``?ax};6P44%QCqT^Fy3EtTkz<%ilE3DJ~0&q8`uJxvobpHsQhY^>pq)=P`UTstqVO={-ezextNMAlAmCbrrm86mcX2JngLeJ39rxisJ5aV&tAPQ6~$oG(>C{V&SH@#b*M|eVsrd5>SjE~Z#(A`!yMwHESG2NE_8n)Vh_J#3< zcwzUu3aP6)+sp$m%2eUIRMz_QTSIwkD(^dRx$Rkc z+|3P=gZt3@E}Jyd+Mg~-j&OO!O>r5tkI!Z< z?Z)3vdZqj5He5f>t;h$ZcSJ_NhmG&{&@oIhV`pKE{cBF*E6Kd;yLmjZa6G3t=mlkX zUB1C_CZc6B60I1F^yF3B%bUx6J}`@bT#&izLm{zYxBkzDHhBc9gPeD(Hu{6x-X-gd z!f=8<`8^F){?3-x#cr+~ndTdk*Z5DhOn|P)Cqd`q%n|kivK7spdi^e~Sz=H0l^J&S ztUD%Krj8jj*@i|;r0{*}<($_N+}sgvjRcE-}Z(3)ZvIrrQ=Yms(&uY;Rn99^7 zmK%#=-#k+$S-WPd$!$HI<1NST0stO(#JAGZ1_dF zoxkOybzfmmltb)UBfavPRgmY5cC9}UTnCOA-c>tB2en`WarRhIEfagW27LV0Yg5zy z!yHCwno>v2nrZ~I8sg$lJ#sT1MqjlQv)qO54Sdh>AusK{+dpkQz z$>fsP{a^8%cBav^OE>aKcd6-tK3ho;nPu!b?^3n3m5!sn-2I|GzjY5gs<<;pH`tMU z%UOAI(r2FO(VZBx z9koUsL`eyN%G=K*Rm&;mvuK*!dCR-298^l4gdL~aVzIJ#Vu+>74yV?zF5p|}UN`<9 z-XEyuuiEMn+)pI8A0wg82Q`@YLOn#OAG%;kKGnpdX%{bq#g607w=y7e8!Xx?0D(B4e;(-~~Q%C27i)WWo6i&8J`L zQ%CmL;4+*+3m#O~b?vU9{{RUG*#y2+Jmiu0y~T8Pc6t;tOZ%9UQD5~$4nuuw6ZhI) zwf2~1{?)r+R9j4Nst;3<>0I8;r=i$~9}nKcGeu=TkrbnBgz_+Yn#+^I@OhHk&JD%A zxx-AS0~OWV!)>JLZ7t@fFPR}FmjLb0YTK3Mkl9jgk~&f+)~8eCIV4cQ9!`XIHKnH7*((N;R%!nL zg|^hbB92RME?+sG7Q*a3GHTR}+;lMQV3KJu9HKBfsi|%@$gLdz0KMD5+r>=UTP&hL z0K4R)`exZeD_frqOw}D#F-Op!g zwx;DKnp`@%j-J(vc-I&5K?(ib7XJWwRPkFASjGLJYS1xkMVw>3dF@!#(6fh8zi%t; zYi)BE&UcP++O+S#wJ)Q$h~A;tFmAT|sr9PbO{M+S)OQ|I?q=HTTdIoEj>`45E3~zZ zX17-T+8Q}9wMs1FdX?d(&+g@2qZ*V02&BL|=jB{HS zcKS@Wl3Tn@ENX;qSL1a@ZzS4=tYE($MoG+rk}61Uts%FP&KQTEyq_~1;-*3=C9GCA zs?l4&kr~Ns@C8w|w}LHskDjqC*>NLu6?*FGE6C)sj(1ZS{p(}3XX-0%Wwu*U_JJA@ zd*kV@UD0-`2D=-90reUi14-P-a+0#p(2=({%kt zT`g`QmA`j|#(LG8dvgu+Hxm!v$iYhb))GKf)GmxR(OWwRph1Go(zuObCXUiZF|=?q z<8kP7-n|c9hD*!IZN;Q)jB&~7TsFUNB-1sVv$DphUufqTr3I)QShw4#7*asV)DcuQ zOIW0a?c*P5mKMPY+O#b$tY(q6%*o`Om)rNfs)dx$UurjYmhNKvLuH%{9+m4uVH7m& zJNs!?ct6pcA1`Zjk9xAU_j*pFa{vbFSimhh4jA@2wy>DW@w+oKanr46TC`V? z>K8IyJQBv45unaaYc_zAMV>QlclLH=+w;ac=CvTvWYoZ!Z)3KBeqyW-vBGHT7L%_f+{lDlMLN2twnR71JdtWZT^Z6nAp1AnVn_}g3h4f}s)%@K`* zmj!)=bD9~mn%>4#k+R2#vB0g(A6Sn`xSb`5WoBYjHF@)iS2upb+J%r2t2NGf$6-)g z_;6}6Ews5-97x3VtkWj1bt6oz#wzsk0!4;+B-p?WZ{{Wak*lRee6h))y ze`jlpIkd^{BUuY6Q^y?*Xn2b8ZESRjnZ#e|1W5_|+d!u3{(g&ex67zVc8!k?M&5dw zk)_k`^!cw2FCABKSqA{sfqwg3(xI|@gQm(OJpKOwz4WMVC%d)NgIHKftsva3!Ry+r zX>-RWpJXMpj^aCn&c-|^u&Vcx3oC$P)h2Y$5ny3YrCLQJ2gA3Q_ZQlozNs78N+TQE zQGmleD?; zlS>PDB3V3{zzw;*DHc1%yS$C2SC1cf4k}-=-Rc{zWgc3OlXyJwRP14E8|g{9X=9Uv zyP&JE%*&gETaI}sHs>{g=OgM9TcVIrJj2atYSYJSbuT##*{tT81(xFQa9%Bx`9&>? z3p-6aBTBKx-8WV?t(%J}bo}Hrf$}}7Ypamf@hXqrk;P}~mk%_Ni(#2naBH@VG%>kf z?b2ARcByRc!0^JcuQhv(KI-CmU}PwNhzhf*Ufo9;7{~fRKDEy3Z>TlG8_|@TmghC; z(}1o)s$Vf2eq7g0sW#Z#7c4!il$pNL&W@r$GJb0JXhj_JIlHT6 z7W229rBq}sWyY&@7)5ZLcdaX>A#Mi2jC9RoNh1Xch!c*Yy{b_-CfSdD82eFO`6Kv; zN|o&;`wYOy8Yu?@6)wm=$MZJnnaJj;G?x~0M+*(e4lC5AVqVbfR!ks1zyw@H2(m!YIYMe`wm@Ojn#J%g*}XGWG)~XWRnF)W*zH8N42-s zZFOslms4{TL79(7=b)_VH95bt{?NASmhwxrx$aLUr5c1@8A-NB_L%P%VB9|%E)1ik zY4hA#+*>S6A(exM?Zs)>!fv$*CXx0k#pS5?98)2=TjF@6>(1rEakiI3lXGfGbfMx~ zY@(iU)t{y5Mq3+ZSxNJUPfBlLmhUVU8{~>9RtP0uH16l0N+xNR*>+mIk>~wl^s1Nc zEapfqBr-D)6^|r)S6FoWzxYQbjs?kq42{n?HG_y4`c31tdeAH3W@w7&6EfL^)dYZ-QTAn^L)! z_U1U{N5Y0Zc&{{MRJwSa6=n9WpW(zJ^Tg3xrw((Eddjx3xz8itE$w8r-Ej=d3@+ss zMjU4~uczH#$#Ax^Um=B0?;jiySo$r#wf&JLjM{Qai0vXXG5jj_ioPVgw~{o_VfjbQ z+s<0NDw4A^ak*;h`Rv+2w(ox!JUmCmIH4BG;N&I-p zPo-w$i(zGI(pxMRtTmcQ%M24NWqL^5f@*7f+c>9=F)K(me7`T=rfM2= z^4(j?Q|$3b_zNF6rOZW*y$%gFIAx8Y^KP^A$`1t8km{BY+%!MgazcB%5r(Qde}eCH ztH!#P<;}FmaO8CQQ%0YC1dP__`$1Tc8dHt5dqO1=&ZDbY+bf{c+ACA{nBxjPYO`s2 zMA64{1o7ambDjlRpGh{b+nq(r7C*eV>ZE#BBCWmVueuo83uu8)B~&TX!R)Mk@h-~^B$a3vRT0$w3l|^i-c{VaoU?}XQ@du-8GuM zyDrg_-k&mI%E@mpt>o9Hm9A1*8S-6vEjLiRvA7#V2J6;DJPN;KXJ90ceY9%t{L#78|8dUd_psH) zEC*~+q}#sM2_TIWoU3zMGU)4Tc`eA4v6Z(VZ%Tc%a$C)`TchveudQXwn94U0K+_}a z^Itq|tIrxu3hYlUfgNdovDz!irICbwS37f8Qr^YxBaU0gjht=(3dQa*S5N)wy0}TO zIjx;0>gLYzS)pf;9wZ$qoO&I`t$4*HF(hk{!1b*yJ|D1MC)#eDu70(gwgXH^f=%(S z?@8Q6bh>@?^T!*_bcq&!)se`rJ+svU%{P;oN12VxFhy!Yw^nzaeB_&HFan;H%_v-? z+3AU{3tS?|CP(|Fe}=a0^@(>Tz*rHQS@f;zJK38_l3ASFy34d} zJ+oZ1rfV6#r*Uz89lVg0K33C~-BaCaFT`h!mF9dfn+)4)$A^X*p zY4)YKcrRlK312V_=Q-yU92$g@YEY4-!wtQwZUhti&tqBgn_Sz5_B*d3M2ifOrr(;h zEQOt|yUlfQv%=u2s**XZJ8MwQb3CZ3(!S(hLFg*LXrFS=8pReqRUHBKrj>_sDD?jT zv`KNY)y0c-KiwZ%(XqI;(_`{&q+6?#(_!UTxU90%wY$Lu+=4b3Y*Q}2&tn=~#C)Ku zvPo2P?@WVI@;D~GjUoNpDGX*OgY8u>Cos)7kUYl+=PUe1s@t`t-KsU6^pi)pknAu? z?kfGC*xET_ntvv9(`e3XCI)7c71WN+brbE~l~ejvtF~*a#y2sTO7f`O8oak&WMVdL zgvuY!Ln9CjQ?_uY9h; zJ>%@rpu-gBf4x5XZ|to-rZN{hcvIhs(E$579ZIkUBwj-|L0L0j#rBDX)zU8J%7gqv z)}N*77gst=cb75wcJlRKN~f(ur{4KekO5JJ;fiLPbFMoQx~s?>=UZ5HO%Xrq@c9O>pBDy{YGQri8N zD}_k69LL_RNg>p=D|?8iBHAeYu({&1^#!-nH6RiQ<_(X%S}3v$8ZE34Ln5MiA-YQZ zfl*v+w6tdjWKAGeo3|#eYZ{~x+1uH}8kz0}Hjax`rqfp2Pgv%Z%C5lqE%$R>5fzbk z?N;8_)(cV^-J9l^avP46mqbR<2nN_tVa;USw2-`ZLCkBPl}ACErEd-L&vR;JW{unL z6VkL6hOO715AS~5j?KVOImJTTA+U8V{*f@+!#tWvA+^(P5gubSjH3aEdX`JrBb6Yz zi4sC^vJOpGQd=O?^s@@7P+hx$+O+PYm9}|piIjq7?T<>X_lu@XhG#KC!y(s_X)iU1 zZmjlOu?IZ1ImK%zrnEWwnf@YI((KZ3~?0;jokG z+&sI_&JAeW>Q-%TLSVKs+;^;b4c5YH3|2*jCtdg$#ck=fhSob~Ck#jL827Fp$d^!! zwHTy3gB1((u9r>KE@je@rcOfj&2LOrHK4zmKeXG&83@Y9c0H@)uiBF1%F%RtexYvU zKbqIndVJRqTHSfa=4575p4c_=uk9NocODthncH;VY?mkg1776=6AxE`*Fms~RcC`{ z6C9jpy?Y0Td>L_PrrEn)TC%#S2pnzz*OqG6GTZ2JL{9lta2NZ&)z;{@m$vtC$#HKa z8*Q?x$FCe3=d908N2Tgs4}ny9jG-s_K?e<5&0}PmG$8m zvb#*cor&mb)`o9&RlJJk&P!xh!FK3)>s~~z*#~vCESY17EU|?jIp_7Pjcdf3g@$~E zv@thTWCYYU`evnRq_)eyJ$D=h9V?9xUS4Zb39mLs8Og}4D8f>a4Cr;=8(7S?$uyo^ zyFO*NJ9+#oF}3SUi=a|j(m(l`0y;)PYqYUz1x5k+6T} zO>|aToyL!&TS-3BU{6lJTJ!slh*Hg9zz?%sg~F57y(^*8wSjrzR64NS(k5KDdd0!T znM~U84~&iGn-mel8ABquF`(Vo+OxH95erpGEWGQRnSNc3mkI7iYRu9=zPxs|U$a7} zM(&{0Vmqx3p86Rwm!G>bfx_dxYK~#n7Z-Y7nW^2}Tf%N-aKXH>fyGvW`&72lM+R14m=0n+!YRbA>i|EDZfvj}s-^YByuhRV8ktQ5?%*t8{E zPedOyPtHiHuvqPy+6f$8eZ9sI4WeV%dS;@w)~yVL$kR*Z^k!mKy#D}AgeH{Nmp6(e z-eM4*ryN$knXB3z7UCC=W2)e(Jc^l9zNFantwUIn*2X-nF~Z;w6+mNL#-(rOMsF5e zJfABr?s4r|cKU?6+;KeW*9i#n(R~G4zLGmw(n+E%JbyATeD)e%stEv6~w%%H(HMB>i*{0o5*mg_!X0j z=CPtV?MlvD?P}&bhuEb?-KP}T;aF{Djfs(AJ5CNwU%Ze^&m`~^Y;eYzrd!43xbpz> zIW^H3sO(u@S)iF?wY3b995G|ZHEtVQf3*l?l(Wam{MqN;qlVof(`2z{mUe$E2DMstA8dKt+q2N zj00O&_Mof=1jDmqXs9)~ZefxL*D$hhz}10?Z*>){;TJ#dpIVylTAC^3GVNlj3WXe1 zIBg=;ugW8cWl%|T?N?U985E;VzH0sF^%Z(`BdC^ot;Ey8EXvFul^Ebw-k)W4tz3p| zEJ|^njr6SRO)lbnLd_z*UnCDo=x_BU@cp*cZ#DD$HJeu+fvsuDDhowsiBqd7#WABx zYj|LCvM62;Qhv3aHlr@BXEdg5vW3pm*0C-%#f@QAlXU91$9ky7ZU5lS6T<2Zem4&kI^|>P3iF zS#58;ix9?n!FdDnxu-`o)~d122ih6=Y;jefn&bOP?x4C6yhN``(72gyEE?uj+=n1P z`&7z8T;GdPJ+zPJH2f18&MKtSTHCTJ$i(CCZs2Ke%X0+GYm?3&1}Qr zyDRMyOK-7#o_Ap@vmd*TwW44}Zmha|H!6}ej>T2E*;&ljcbD%Un1)RJ!H*w>E9=(~ zz`ACes4exJWZ*_PR_|5y4L0J&-ERfP+q`F|HK^=eIz7Fute29%??zK#ZvOyEt)lCe zwl?ebv?rgt806G97S}RC46PxUu~2xcQ)u?~bIUVF<~Gnl{^|9oW{W{#)@Hibp@QBW zw)5qN^yF5Ctt64!ya7U?>cC+Bbxu3@JnKnfxK))G2A!>6T*)7lQHWumJFv}TB8-ha z*4EBww-PbeJl8>|=`SXVoIq(Pz7xX}MVk z8RoO2)Yn*JC9{2)5wx#fmBCU>XQAk=W{RTZt3x+Uzk0dGp4aUcFhLx}+~J)E1e(j#wTFgJKH4*J4(vAHPW8;Ase7vxZiIHq@LR6rUQR}HR5d2GSZ$dC zneoaDWOM0H*St+`w|1*xXhTfFNK^NH>W#gOQQY27INNc*D#x{YRMF2PQ&cagYEd`H zLfe6b9CZG5qotUiNoBZm7>s2$9i*S@S=wx6?qqdcmclccJ7*NgC$zoO?h)ru$iKR8 zdUYO_GCE7h^wsblq~dmag33a(=dtZxb)@Q+=fj~vWIt$cx^Q~b*LRRx=r?Sqe2Ty^ z2dS*h8^hPKcz!$2A^y&1KR0f*lvamjBcNz(CZ57adzAUVdfUjX-BRiu4*SoumRYV# ze(&cjHuueG>X()h=(5DDuQV(3AnR1^WV4GyZAEm}YlyIcbISwXr0I%RHBB#Bv2;-@3@a5Mp{T8VP&LabZJj>CBg-gbo@ut|(zc(zcp@!f)NcmO+pwCL5QiAbp(I&QeyuY8!^{w6Qq3LOD3Q|axnShwQu7$8Seg?BO zB9{t*3uAD=Z>>ukL90gU)-008#!0B-R@AP5jw7})jCy0e5z|&lE&74wtE+Bq09wzE zLnoaZqaag^IIe;{HtO?z!pV_nJkK*68pyo4d7+x-bR(V^_pYS*jAfyhXNcM4kYPCk z>s{x=Tf~Opk)<1?QHbf28hyMUxx*rSM4Np+9`z&WpA^M(oR(O~x zK+YN;TX;g@f3wGyaWavHZkVrC(Io!RRWol2qxdo_!aft-+|JY5-`hJ!8{kac4SU9k zdSSFstCO6575Tn0Dl=&wj5fKjJiR_-F&2}~JgGS%x@aQ`(cIj8Bp1%n*B5Eu+Eav_!X^f-1Fzt)0Tl8`%=Te(|%=QrliweVXDS zY5uLYtLBKS5;H}_dRxndS>ASCxZ|&-Uz<VkNEYHnGN$G_EDy z7=H-Q6@KdTRgN2nYqD+t{ns7qrEDW_L%O@V(acdv8Y-~ft;1%m$9QGb7Ba{-;N;d7 zzK^O}i+Ny;!NeQTk=w22^%ptUpYJEK+q0G3Vt z>cZ9%=4oJrlHX_(HN##M%B*R!luJEw0P#4#wfE7+GGCc z7zVCcY0|fuEX7t;ZvE<>p90z4YEmNXE(ex9YRJ2|yVWhBl}L}vC4sIP6pfFzTfuas zJ4rqOWmA;{=~ZoSwD|9J5U^i)(;g&E+kXR1(<8N;R&i-5(6@p$2&zf;{F*mDJ8axY}g)TfbKT*M#J|k z+zqu4a);Sn`S%mSa_lXLV!I9wYK_;GX9_|~vOgPv z43W0FBO8RaGcGjMTqa~#F|#W=t<&BF+mNifX39tq~RwRvW`y1c!0A(`^4T(!i~ zs+m_JQrIKDE8C)uc^KD7Bc5eD{{T9tI!u$ z=yeourB34)b+1M{9EG?w2-HflE+J;h#ey(F+{c9MwB!zsoEN2vvpL>g}Z2o)6Y+h}HzBv^_7gP|~{gX?xxcfnN z!D(N93G~lOcD*FA>Kav&#&^VpN~-Yu_4lft7q_yylHyq`@iYT`M4!Cb=qZij3){~W zS-L{sYJ)1VcdG(F5l!Y_MQ^jox7rC(G4p!Wy;5%{Ptu{-l78@j*ax*+@od&JYu3`f z+lW~eT}Nl*Kdmj*j6(a#Y(s9iHpqXCy#)ehE}y5Q*H;oqc~-zEcom_g#&r!MXb$Nb z7il)HJPM->$4R)jvuF!7!|(F@oL26S13s~L{h0p%V8yQK7p{2bsTrJW1=el^D!x;b zkCi|meLR0zkOJJc}RwAV_{ zCQRpnO_W+q8Sga+icK3JApFgf*00}d52tJTg}G*tB!N(f&P8NFZ#JIN7KNkdi49rP zyqL8M8>w7K)622Gf}lhiJibNaIm~Gp`4sSRSLW89#^8OOLn9xXBRy%_)|cmano$_p z8@bv&Ydrq|qciRqIV)LMY}flWrl_}bDutF5-o)?^(x><{wr`0RQAxF9eZ(G~m4~`W z?F=zwyn_vjZ-w4nH(ZMGC-Nn>J9hWYVO!xdXWZIWk#ldSJoA_$wp{IZ0B7;2rq#T? zHaoi+t$x!N%wyx`_Q!hjZwh$Y>s`>+(_Pip;?)lIv~CIXuA0-to)Yl-+1%XdUR1Il z+^av{KGpNJl#L_Gw>wQg#EWC4zNBM@S)1jOH9&ArUMnGWPY>yq(YKcJ@07cUc|4qv z#Yr9ZkGo}^n1EjX_2bTYt8n;7OVjPvXzfG;JDii$R~Iads&c)CTlkm5mv@qwY$jWE zKRY~pf%U~tE}^1oQLr|RC9pUw5FhDW{N5t7`(5>=zMf;TClXDOwn14dKU%dU+MSc6 z7Iu9(e~)-@4wTu9$%RM;CFa5_@dB+*tshTmgkyMj?P%gjkD?iu$6s$OZj z^mj`W+t?tJl2#QT(zUGoL3<_iOC5xV4b0i%p4znc*V43-`QBN_m+4!^Z6g-U`=18h z!86Tu401&A;4QjzIO=g#Kd@uBhS5YS2>at`$*rqj5o?}h#Fp1BEMhVQ3OTI1Uld*3 zG+%1crG{bFMk9)@cFc!bcvZD2o6C(F5DrxbHBEF2rdNhLX+F$^oNYPxuCC8kmq)XE zs}wfw?gJlEYQ6W3HJd#^+CvnCl?===-l<8B=;EXBUY&KT!{)@~f<$xwMK5N?}{Z- zNLDxz;rMPN-FpcNc^+Ee`&1WRA22i@W(|gH0QKL>Vv;bbxqRe`uPwKoA~Kv9&UV&3 z@+kBF01|j^Ym199a3l&78Hkbj)L-z4U0TeB+HB(lhisfzsoh9Lx~#U1Ibo6QP-*en zT})+dF`-~ENj-5#JcnbC?`B!C`SRfwyL;WDyYvn-z~aCxswxcfEEAb~}& zem5Go_8Um#g(TFYl!eCJRdYV29%BZBs7o~LvKZ7SO~e{)#kQkq9g(*~DN)YhyEW>t z+FGs5+vD>AOa`V6J|vDNhT&6h@MEQC%--TW&ffDsoqUwanKx@&Hj}Y-XU;tmUxOW_zFC#k+yi70%Vp znq(_^brjLbGlOtg1?T1VtFujUHm2=$x6jWF4-wL`THWjpgSOveQ~iotXl{hEZdMpY z^sHP>kqmM*j;9^`lJB{VN}{V~J*TcmOw#HaqiPD0gMiJog47Eoy^PUEHMyJ2T<0}j zW?OevhS-E=^{n}IDVE<@^4cqCbLCs`$GQA!DK)E0sl2)O7=PLI?Nuz_$+*tv*JCqZ8!qI5?{sgqn4&#nFJw*HAVT79<*_ z8r#PxCLP!xC;KhyRA89NsZWI~F7KL8TIY1G^fgjlO9;$1f<6y4tF+A zYX|Ii5!td7W!N#guUhIB@mjCiqz>SKGgKBW>syvPV4SkHcXyX1(ek5Lm|q@UjBUp7r71w0D&sf;>DGc8|77fAQM)X)9`sY;%$5 z*Dz`6FqN)dM@bLfuRw{gpm)pwG^j1Kk9RP-6vXiaCO!wfT@EcYriTNZbked}BkaU@Zpz}mli+}9;*6WvW5 zayq$;5$O#IR?;=I=#Oxq^ZHA`ztIU}*XmR4pwFvWSUsWs)j@fT7w zNpNslGn`jVt!c`zwDzx+L-P#hk<`{Fh`z=D00@trZsqT;(5VHpwEGU#>S0pl*KrVO zdTdbW_s?#|cWFn>ClyBfPq@)El~lw=MmyC{@SgR%q(-)W2_M=F1Ury1Q-hw|)h`=c zS;rlzGB=qaRa3j=#yG5bTdD^=XBdu1qEu0C{5<~v#0RZkT{Yonvy*6oMKY{_<%u0D zGV03aDLk8Lqezp9mAap$Nn-=u->P|q=2*@c9su{Q@3bNMC9SuJE%h6F=}oQGoJLrT zeD68n8rbmGtv&aKB!^G4|l#`;*U7Sa@a#FI8LR;Gu_U72+2fAluKn%Zeb=kk{!PoSeg@a#Hvp>c5frN*Og z8gGxz!OMD7HhMl}4>PR7UP~#@2DL6Udp!b3(@(lmW+6hz`?izo?OEMip>Mw3s4C7O zjsrh1;jl$m)NL{3!5!@0X28y?(>>{{qTk%C{{Y$-5xIx`Nr&YXD@p$V2=d0#jm-ET zH#{1~R&1k|@g>F7mo_%Gpvk^Xq_-6K)2*Xw~$JNIm;T(<1g8*)wG4uF+966Ji~xEs%q2R%+GNP+FKh1R$nm5xpKK|;iwZa^^G>!Y@m+H);HVHm|%*`hVUiSR)Qd9 zVUv-^9`&hxeKnnrkYZ<=A@Z`0DxA|XSX@VmS$R0*8U$-Wn~8!5kUV2>HO=cbH+R~x zmf_4%Zq88WHLYuK(b}K2=PMT*bu5UjpqB5o|*YUFWSwZr|LS|wN8wT&Ji(;%~8Qe4R|%ImwFRJ-&u zk)2~SP}-xUjpnH1(zNfcp32oHn%+5-^5w+n+u)82#DL zHLQHeMm57ra~s}UMH;}v?&lSOG|LsjOkh&p;<^i6C9W*yRxKZvxlm3jz157mgfQf$ z*jH)VE20ub8En@VS5di)C9X%xzO}0js!ga!@h(Js@-avF_HI&<5Y^VKAWf5X$u@svB7R6$1L5!rs|i^bu6~q zRP%t{#Y8P;nOfdAReNFP?r!<*QOOXzh)W0V?>~*4{Gip}L6doxax7YW2(0YEi)WBC z&0W^C)U}zQ7jEr==5ja{mnGBKy1}x6GwfhLeg2m9JcD)Ns+L4s`htL%|Dl5pJpq^nQ$_%?mepC+3xN4 z!*wFZZs3qt<;gXiibf`-dG>2?BaK4G%!N6?t2b8`*1A+pEUsjkcc8~=BaYuqj%#H` zd1f0)ZbehSw3kqt-p(usE5=7knp#U!R8zOSOV(7m0v8RzPI5a|wb_#1H5P12p8YEl z^GBaaxDi|fA?uW_OC4CM{hT4&(Q-Mi%8gq8^ z`BSAvyXKstBLVl1)Ke}dxSdjF`P8=GlzLYeE!eq^mc=60EzAdK5b$5Qta+}Wvz?=b z*}|L^#{||_+NFi1jUb$Php5dm9YR?Y#E}+^9I)H-esx@kYDT@rr0pM^ntix*<+h$w zdWx&&T6md4dChN+zREexSCYq4nijm$$CVNcymJhe9)hiSUSAK*Ba8T_vbvb%+DF=? z`&RK>sLooCx45^pwR>f`cDKm|&s_Z~m8zSkI(?)n`?!tUf=wF5wwn&A{)r)w0g$TM z%~`XZ)=2dgD`aiX@eIQZ{=ig8U6PTLtTeJ)O`$ckQCzoIQ_mH1!Mf_{z8X4R)Q;O` zX8DI5Yny{q8jp-*mO@0bmSCr~YBX}{nlweW#1iQ9j2;bZ$;trLKq|kEx_TNDURlYh zY)DizryPs}^{l;0@*{6OjIy<~?AxPQ`2|HotQjs^_9&f1ia&P4)~o6Z4Yc+?dx>s5 zo^~3g8=Wgs8w(g_(`LAxyr2OJSE(b`q?=HNZ63yOFl?9Sy0-G7eEj;7@w_`{DH8YO_b)GMF5i_U{VZ z%W)Ztd}=Y*75VNupT61Y)A&zV@ZIDlNTpdxknpv&kHjUHzg!?7Mc3oKo285Zl~D;E9WKDnH#O zmNsuD?D>eO(QO;6HpbS@;utMoe&!fy6}YZzYBNXv5;=7wb&|>zl^^#}uOQ&?X`03J zUkgXMEgr7}?t4`qyT@*76_N{iH`uUuh~R>Ebgd()N2^?0NNt!*?Y2hS#w$zMmWJIe z-lcbAA+m*S_MbRsfN7sswpOmrz9^ETT5g zIQ6NyHYtB-Ah&-Zf7c91*yIYu)GvjdjENGfM$9)!pO_z|X*A5Yj~qn|Y0paJwL4F+ zYT{=s>n2-hJbqP3RyA#AgsR3h8-YJixZ~+svO{&`sZFxok^8h};GeBxMR6U)+9TVz zivv4G4R2jFqWM2ywz)>P=X`{bTA>6~nI!fM|-;3fi`$_V;%N*?vP94!t&yYQ&RJo9$L|7?iM6<^KS+^{e`%S9ck@ zj#!o1LgbH^isl1 z^1}v0kH)B4&o!-6M-o3+<|#tQwN z(8$s-;5Vjf&~s~Lc9OR3$W>W-nh?#~tBEd~Oqv~$s;?zmp0!V0DfWPy^6b4&tz+2Q z#M&9SkW7~lkKKaD2k@yaSvBc|*E^KNxC9(@rqF}TlFk!tBuJ)TmE{NK#aF+)g7K~G zVUeVg723PTDz@j;FD~&qCzQER$E`sn@VW|I1-pmkLZblCmBF&sp>-v^$R}0Wpb|mP z6_<5+YjHK~=w>nL%i{vD+NOxtAIjQ_Zs$Bh*0)^c$;O(r7-Bx()JjW}!S8fQeLYgvq7?;-u z;?*3Ff$n|*0Ci;uKj-Ffal=0G)G`szucbS@S+_^!nZk#ela zjTvWixp>WU+QiDqkbJ`*Ca&rvK%ZrbK*-~HZ0Db?V6zJ~nmya(af8llvW#8GW*)J0 z_mCEV^1W8M%d3Os;G9Y6T^-G;TE@U1o=!;3a@W=|eV|6}M4x-FYWFF0Ii_b#Gz##v zuHPxnF;pT??Mtar2P2b?)pJqu+VDm`?r>`%ZW~L~w?oLUW|_q+jE>G*%c*S`E8hW} zIq1EPYAH1Nw9BhVCL~F_3yS3A8?(GN9B$E@koPp0uu@EiH*B8R(IMxVa`Szjv-npjO>(XgD z#Ja2&vE0qOA!OhT)yPeyz2%LxjkP6{6CD2l38vlYcI~ZRh-Fx8V3PnSGaB$u&{DXJ#+rLoLo{MbsSZ)wk_UckQfaPq?P^#fRT9f;GIw?&vaIf} zE~mC@qJkJ#YNp&b<5zUs71uQj$t949;efL9jt4kYODlPne>UFLR`yG# zl`bVf%lB8D^{smwgt^i0*UEE!Dqyha4tv!tIb@qtx3arkvH4~B7|9(gWI;66_g3)5 z4EC`*XMXZ>*fhV{vg*=qw__XI^$W#YwYZ;D)h=&5#8Cu%?&!+BhrL&aP@2!}7tobd zz4?NX%}`vecc?gjDczd`Y0s@$j?`J$>DMpF6A~(o(xi7t&GRIKbAi^0Ci_&rRj_5V zi{@SDJol-v%`IN`<51M&n%tGzcsO1<;sG|nD8-?p8mCS zRDwHbVVN+_>ZQB&>rlp7f@^(0?DERHxyj=-k9`aiYOQjzG;zCb+M=%7&m(Va28{++ zBQ=$AH1M>p6X%h#1}mOgi1vRAg}SkhOGwsNP%>YR1#0ROUfg+JY!S|ge{gf1r`ovB z1M0F`>GDA#+Kh*HW5}+NZ?AOk55ja}toS=xVZOY|kh#TD=FAcJlSQ*P?2)`V;IzD` zK7$nK{84{&>mT-n?VrAkcml8vrKsy#9FR|U9CurTGLwKv^cAn*yPZE$X8zPx1`+dl zXKp~QDMOTq-5Ykg?Zh*ia~d^^92rUZvGl0qxwE(~i=2~<+j*>QbH#od{@j5y=&liB zZ<$^5R<*5i*{|)NPPdU%#fB_0GHR4AX4|DI$Gt9oC1-xVcVSbeRBl=Dcsi`pON`vFNKw4E zIot(n_?1iBImst9;y7CkC||K=MZ^KQ|+G zX>{KgTFa_Q6PDT(5wze{C^IP?q;TBBGS4KtqqqM6YMXByv6h^_%FpXus`#qeZmw;K zaIzc%OE)>5bIoX?%+!v$>7#6)F@%`o6vn(T!w`|n41H^kz420u5j+`o zkd@<_eUFG_mKeOz+qj|AY^$AZzRT%|gJ^tz5yee!rm>x)knNd%_6=}1nz5XD_N>9t zx+(Oot3>e}SK4aHHs!km<~hYop~|jVvbM8BA&uCuZdChHM#*b*_$=96V2(3U!>cvK zCB*T3oO9Nf`)#C$XjPSz=jC2&C+Jnkg|oHP9&-6e$Ewt}wn+}G3<@p|4-#=zrqraE znPh>~uOo_%JxSI@o-?$L4n<<_JDY;t?xt}rAUOM|X_MH9t_WVwufwBw569HdpwV7o)=Y-Rh-MT=jNdRH!T~HfZNt$em`7Z*ASawPr;B z07cpv44bo+=}OGB%P?I@HJ!ULFoa@$TGE;oF`!oaPn;52B<3`a8F?G7J?UCq2hS1+bbI|a(Gis;X&i#g z+<2FLZbJ^F`&C>202WjLb!n6lh_iOz9VVbk>4G|6ruxp&-4JZ4f( z?)a=-CP$hZgZ7nJar?D)`LkO(6%n7bh0XhoKJL{SBycSw;2qtoo7A;SnPCDJ@}u9k zDtgoW>-+XwDdhQBe2hIk>pM`llFmP~6Sfs?<(s+s)29hv-W;Z*v9+MzT+e_N)+UDH3FneEWXI z6YYGBgc4mdTR|g4`->J{xb&;KK8yCNxh?J-fTsb+B-b}*tjQhBw^7X*+`DRBBg7Yt zsm9{sCHcCZm4v9YU$nW_s+~6E!wQM9pTA6L^(Sq{7~_xGsIj_=No0G5-!aJr4+fA$ zCG=@GoUp~a1svewvT@p0)O?K(a*JM$iW8=M_cO;iI23}Xy4 zRc~+B#zc(R!UVV+d)97^X>)&a)5|hP3|uIFDp{`=P?;JBSDrV+cN;}($s|LlO?a?I z?FW*+XHJ!ywPc(_6|7(FFzZ*fi?!3{H*GvpBXc4z-mW(1#kN-FXRr^J&fv!TpTnT?QOrrObzc{>^tf zf19Xk6I_{<5lbjiab8*bKt_MFbhyl@cFxDI`!)1%ii$=@P2f!q9UlJYOnY!m<7Qv> zh!uMJ?rk&0OJ!>rS21%S?48HuQhYJ+j90c-vPGy#E$k!(Y1|C)>scC#|4Kc>s%{yC%MDwmjz;IEhO0N-!d<7de<>=7`K`z4Zg?D6}=5~mXe)O zXC)Rna>FBzDuB{rvt^oTnoORg=kl%Tw+E=u?JeQF(Qfps`9$j^%HTI_R)2~#k*n&K zT0=kCOiYg)o~N*`k6F{8gTnF%#@3bAPc(huT&%azO{q21PSQM4jivtpyajZor7NM1 zZ5Z2litfhc{{Vdh;p8Ll)@<6Po{J>bb`G~1jD(O^s2#;xOU3bY7mp*!74i?>G7d@l z)+dK;(RG%(xKZ|a10jckX+(w^(JUVRkySvM~Tu(9uF5OQiwCr>nE3Xk=w#8kN zeCz8~G`(sqV_2Occ~#<2(Eu&~UO+gdA{n&|*AqghfWfvv z6@5T8Z&b0kn&}=~pC$7*cRE~}#4nA_~P5)f4PsP3%V zNnwWWNdhZm1?HcsT0ka&QdtoI{vYdE47YCYHp^)~_>UPq&N|k|_G?3-+Y6uG6(oSw zfobwgMCF9LK3$yg+MjEwJ-ZV;j`1%f9%%vC=qlHdmRl^x7{O|cTfmm?#}G(dg!h1m9@5 z-SZ&oD87O_yQNoPx3S@!JAqQZl8topiJ2vK+)AGG;itW=<6g=07650iaa~YXj;1pg zO;0}Qn)^}Bq(>fG4gjl~WH}QZK5fwC{HxH`eUwsMNp~j2!!|;mm3@{SF4fHDQZ^|{gqVaDHQzP^_6iW$EaA_Tg#Dfg`Xa^v3D$XcLGuxPWxD7RcSA* z?;xJxk)yd&i1sf4Q;TJyxAt3Uajoq0W!d&DXY0YIYI@L_CAOMeOoQdmP-@PfqugB| zE#J*U^Nr2OHJ$d2Gf&koEoLnDOT(642hi26!on)1pKcZ$M~_@uH|(ARz}$(@e-#(zNV`*FwMRzf_A9LUfHgNwaIA6j%A(`<)1QAIhc0$ zso>LQ+FCX+@sfRg>q|z47Pq-zfEdThG1ije)@IUXjSe?R8+Lgf-%2@mSSs+9}b&ePs=+MiuTQ8A1+6 z;%VHg3#tpPQ_8f8-JHe&BzlTs>E?enJw$nG7nN?+zv0yu7lz{eKJugmjBXh{YPC_75~)N?Bu zCT&e-nuIR@0BQ5CcHsKfEv}fFZM)sv&AH$kuxa-b!EbLG+dRcs^5sr*=|p~9Q!2T6 zOotAPGAdM<%)4Dq=JI#@BM=z>01u^Y#}shdLV>Y|$@s#nc7WZ6O?g|OEDjXA4EN-lGp86_SXY>ZUZpMu6Iz= z!li;dLF3{(A?Bs*38YX?%69Zy#KCZiCzF&(Jw+*YQGX=5GG zwx1$Mes#$1YL(>C+v^j%`D{1vK?I7S4!_ZD?WT_I)=_UHYB2~Maa8qR5MAmmXFjE; zHppKh;g8+-t2bJmrk{zW^Iqk+RN6}5^r)oq1lJa(%4>Ln$~MQltq8P^cE&8&e z3I<#@TvooL;`nXb>@nN!QrY15HC|r`{{X@}u2@dQ{{AxL4nV50>9+H0tg;pegML8f zwtE{Qd#zb4@hO9BpT+M}YBu)mV-~j*B3UCUg$KE+63GUk;!h?LTj#>7jApCfd64Qy zPIhFC&zMzuaY-E%_cZmTv$)hmms@S%k~IMvrg2f(*xFcKptWUS$K}OCuSqS|k7sh} zACx87t)593>sO%(B>HJ!5=QK_nd!lpy5^f5ox^Xp-Mnt5+MU`xtTEnwkckN};+Mov zBkKr-j@)9M4vQtl!npZSIRuHH-!_FIIQJQeYmRPg=KwP<6J zaXg(HxUR-4`8?%D`JWsb^AUWoHKMZ;-}2FiC4QCF+TD5Dgb5qDQyzC7wevDMPTi)T z?B*FPOQeGU=Cm}MDAw3U$QDExRP?M%b((E4SIs#>STSyER>o=kxE=P15PY~iH`cj1 z9qxo&({vPsNcQ%=QD!+|Q(DYzu4cF2i6a^MR97tbR-!m&D0c^94mx(Gu`@7aE52Wo zaXgxd0czo<7?j*^2a+loH3E^a-H5TstZ0AGbtko&XK5ul0Q40-#@l;#SIZK6b6H$g zDt)RSE@y^OxyCrGty|7*LdaycV70Qn}L_OGGVj!-tG^u6IgU;n@_jFq6#PxO!%~{{Rixtk?R%L+7N} z%#w9qaa|n*bk-5xUTLvF(K6aPZfN^w)~MWC!EL8c9jt=l>M&bs^^e}D={ijIK7Q-z z9XDhR`Ny>j72~mZ%t2*7S#97G^{j8Gj6FkUr(JZGcTv`ynyE}IS(z!1aSoP4k-dLn!#pPM|?R#!;2(iURU5%PxVnyy9!I)hur zueHFzz^y+BNo{Xyw73q;e_Fu4W%A2OfHU)Aqqo+fx74GK-{wF8=hmjAbOd{iqTAkS zF~Z0vmLc+wN?k_GUFa_xL-uQgkxKfN9ci8!ypK@PSfcHn*XAH&713yVUDee80O?{d zs}ltIhdg(#8Ain-g}k1c@6j{{T$uDji5zX|Jcv z7G{oTbtp58o((Hm#c;OMNi59Ma_YjlnMR{r{i5Gz_MX>}?%nNHWcvlZoHoB`Td9?| zGyQ88>e>l_SPS`zGlID3TDnEQ{7I#_Xw=IfDbG=gluJ+C9h1Q^~E85siBBMs}p)IWzNpYM!q0 z7cq;@hz&nbSX$unNzQs!7NK+&>E-#06xtUYR?v>5m9-m%lHLRM&F>Ft!k&3=t~{WI zMcP=8Tvm&DvBo5tIKh|h0p7Fz*zI&ws>b^W8+|L#f+Aa)Ng0yWVW=S|lBYlRF+=hmxT>GE7U9mY6U`={@HYtyE*)Pn};OfiKCz0Wm?bWC#G zO2ZGgk80OdZ8k@iV$Qp;GtE)d0^YUUsvBTTsl|E}qpi&Db2kk?mTqK}kiWxN*Aho_ zDZ6kBV`XSevB_-aStJCXkd|cB#Z}K9xK*@NXABG(#Fyj10MBEJQnO()Hk86 zE30@?Fs0AU#}$WiVC8o)+Hg3pN|lZ|6?l&F37+qH5`xR zHkS$Zh~aYnQT}ySe?H9HEasV{ZgqEZ!s6}sa zV|8joN}QNi_m*z_BuV>g5GEVSc7$8ny!rk>2{YA zWk&O`DC0GA#g_`7*wf5_#L<(0G7l%MU4a%nY2_`hoeVgN;}N>B>)Nw!n(pHLt|tv8 z^5C?mtzMf~i&wr<=mIPoP~)6|#b;^uX7O%;orTnEmJDz@_N?CKoVpO-B*XWiixxR| z{^_X}8SQlkmex`rXh3P#p*ZDen#Oy0Rpxakva4r5S}u&2kg7sLqI|~(0=I%Nkw;FJ z;w#DRt=zQtzbb*(H4KL8eMCLf<~Fze$#(7STAmJLd*bU@t<@RklLWsTew9N~x4M&E z)U84*NRtz_PIHRc5Nq4$QCg+TOL`L3qRe?5JNi`(P+P~MS>eJ@8vg*R?@YLDM*jdw zig!d7=;Res^9*;zP-`jfq(*Q|bAPD!`qL3&NFt9%^PWI%O8~yOJ*p^e?j56uF@ad& zVgB)^tTVQkHUhDY@rFFpbg7m`wsvU@vA%v`#Q=0Vvi|^SY0)Lic~WV^%UE0ZyVOu( z>R}l;Un>B6;;m@65Zznrsd3D+ND49Sz^v=bcecJnh~bKkyi`kKi}qT4>!)p52{7fG z-iX`5pjyr@cviKMs4yk;nz99tjo)N*OEmWmFMpC6~isd=xBIm8_UgEqhjA@ zk#HBbO?7iz>RuhVk55qPYZ1dYU@M2Qj%yg>k{OuX#V44{yN!V6y#o8kmO9px14#oJ z7<{HU$t-``tR%HKs%}GTiLXuU&~3L+RLpu3dR1K?_ueLv7XJX{DlrGGOQUMdCXsm! z+$A7sL0^>a$I_~-Yip=2#*~I|*izCAFs$Vi%F;BYPqAxTV7M&3E0TRLS5FaJ>X&zp(8l|g7n6^`Rozp@myzlb`H|v0a3KY=^{n}9 zK2&e$z7*De+k1NVQY>u<3b^P+M`Pi6A&%xAl=KAtR0B+22m*emhSaz{$-fb_#^B5t4G`5qLA71q|nh}!aXVWzwwUTon zLE4r%me)<)soSH>&yaDr;MEp}-se??tu7|Fomd|$?yGwmmLsgUvDJK$yL@se{nxms zX*#yIdjrLJ6pm5O-QL|R8&KAD8*5vcLEiAN1S!rwm3u|jq`0_AE`vn7a(07DmgKWS zU4HV;aRvJ{P|5PH?t-lyVT6&ymm8rYJN+s6vKGFGWu>T^e_HNEx0NKoJg=qX{F&A5^~SodRs>@agxo;mIA z8aIh$mP3RmnrfOP*VFHQSyxHOHfPxfn;x85Ry z?{GmiS4X;r>c(Z7c`(nr_ncA6jI3$tt#c)t#{poGjoej@KUTY2goFypPqbkP-cUl}!8gH*GGDxd&w{gf7ucCOtbotQ9cjX2+ z+-r|{W)}>tZywd)H+qXriLSiKZWnIc?OxRmnii+BUwDh{A|Vaun2pyIwmOxnP37DG z%ELU@kGI+cW_`coe zNp=|{IXSLgZD35IX+T6PkCUxdvc9ta07xcT8D!`P=AqFSG1|-G3r0Jk+R4zk_4KQj zdX2lT{{SdN-`@W9a!X@nGb1e0D(%kI=~~vQ<>|q}$;ksX#VUUFjpFn-6(qcvZci@U z^*xPPjv3b9%v2&Zd~WuxY8$JlaDIG=9+v-;itEmANcQX5mj?Y$(_DNP4H!7~(;Pu6G6J7?6SsM|ojtSXX zcg-AjBH>&^XseL%pP8E+gHY(mu3}AJQ`7X7vytOfxo^6?$*6UI6(+H2wh+(udDwZI z2V4&I&1rWFs5R}>z{-uyzTuoy*6J*5W}4v@ZW*x~ciL$xO^NdmO6Ds$Wu8yAG@!}sEfL2CNeJ4c`chwNuFG#M z>z21Wn*%xe)oWcruI;X_l`uDOtTA4MBCJKq)_RGzwQ#ZS>HznvdTyjlC>}gFdWO-W zXjsky9oCC_f6HUr+6Cj&u1gD*Lh`eYvKtm zT>$b{EP?&gUSAHR*OMP5!owKY;f@aPrEBT>yt-|nhwewoF1=5+b4rcLa%Z4uI&^Wa z;U~)7>q5rCFTCI-@>z3_dgJVTMr70T27Htsykam%(zfpP$Y!-vcMx0b-R4Gqa@gra zXp_ztS2p@QCRdb8F(ei4J?YSEAKDh7miNlz?$-l-t=q}w&v7J}JSYPqsK??c9j)AL=CN;{xxcmD>XAGiVflQn{_HYu5MLTTf)dTY@tpFHu-}ECNO| z+$Y&1!7RqEO{UviX{I|T+cm(#XO4aSD<%u;T`ty5J5!QTGar?s8;9pv@^b2Ki>j7a zUS^`Pta?bwi=W{vI@R4a;vGWG<+qqm5)a)-wO7MlAC^Ui3yBqM+D*b8!yNY_y1x=> zI(~+zw$7-Z#IfT7wS`8CIZ3qjwz8DRAI#0Ujd+*GNs{AC(e zpX_Lo^#{y2;}zf^8{_*vi>70#xP1Oq>89)>u+rK&CbExCoZ3xpyJuHp`@`*3bj?k5 zO>yVDvzrl<7URZGOw=|rThFIQdm0G!6lSkw-`hGwV*$3f z&TE{tGOd)tak_b=^A~8x6``fKnQFFIvlyQnWe51aw3_4(I>ylxZjj&!SGtPoB-_$$ zBec-X<+LUXr^@+{$l|HlHQtXR7nwB%)V_IPgnZc^o|UPp_`21;A6rFd3d+dsnL*`_ z2NhSrF~NA&7v^8HT*fj~b~Q2)ef6td65DBguOY#=cF9nC;;h-~*FIm^tS%!k9*vBH zn&LIDD&F#I+qD-g^Lau>>l)+Y%8qPB$ndfKieAIn8F1g#l>@X%&U0~ zysv{9!x}|gk49}%QMZ!K!$lJ|^ej6H>$H2QE*2d-T1Iq@vl}VecYSLH*3VbEm^^Yx z91HTR4@%g$vhv{`d+(KbM{cFPDVKA0=SLc*trQmSjRXe)ah5-gVoZOt=6|v9%KJ?S+~BC91ZfqJ0D7|r7^g=eM%_|@^Tz{dYXn>EyyqR3&{`KVS-Sg zks{Sg>syN}8Kjm}oxAKED(YO>>Q{JAG$Gtj8!(Iqv8(`@E^#d~PZ>Ctpkh-(u z2aMvZS>8mKF*Wk;fyAa8BVgIJ)in(=}^3uj2tOBaP!xBAjvl@7Apur-w|AKkX-lZHJeEShw5m zE`r-JXw(KQJD&A6B-hbzUQIX5)FlrzV=5PdrnhW0hPt_m+DMu0opM-zjd0CtbNkze z%yG&3R_=?cMGnxHCP@^3s`dA%Xob0}tXw6VED@tD3~`+Q09wpjIBz6qr-cVyvt$H3F9=~O6BIdhC6tCsio+udeY@Ouc5hXYYRuP5?xL=XNtdk!W&p1 zMe`k-2Njp1NjIDzdu%^b&2HUW+seom^ZTnfTTuWo;MRx5n&}zpySX@a&lRnIZDnApBe?nY2V}>!V?`Cdr+X8~{!A?2>pd$(jRXp8 zW(MhMHdm-S+hj5`K6D_*zHo?28P*5`Ey&QtV`IHVTRS6QN|mu zG|OqxwKa}*4HuTgV~%@L>3V8jG9i;PH$m%B>KaRFau^TqFBtAY-)&@L)T?!CYao%N ziPhxF{HGjMjV4(1cDGqome_O;)Q@9P>JY``#L``rosJB6=}mneTZlxH+_dPQ>eam} zk*)MQ8(a7$)IihY*oGp+$@2{2ur=?qT{KO95ti&X0zN-VV453i$X3?xX4D0he^FW9 zAl72Izc&N-Yacs>a>g&7_AW9LPq>EG`c1>^gq{T5{*`(g`7S1JFvSXik-0$6(y}!x zjXM2pu1w{T3%{xc^$-|SDgIGS7+9)ZXs8R3Xai({5`6=-`!1bA(j#W zA0W?KvdWhi5=E+utNR)6VZq1Q_{XJMlU;AJ`H@&mA2=Lzt2Z7XypPGWhR-O;mTdGj zG&;k@W^n*!OqS-fL1PweT5Yh)CA5NGrmEdvYOi!8hRR%R;fiEdlX#;~x-TW%q5!=G zOAo}0HHXP*1b;Ray+vq4F?5|O{{Uaq3*E%f=lHRTl{^=wSnAW8rfC?qMjY0Lsj1w^ z+wCt|V^O%3tOnMlpHYMC(SK>M{{ULV;|8q?=B}kA4X4J+ivuLVLr637gH$|8Wu;9F zm-5Q5EF*k=TVQ6Qyzu?p%J)}SZqfDoGjtV$aiAul95)YmZSBi(2pl)HXp$_{)Gy_i zM}qom_!=Zo7A$=H)ky9ePt_v0l2o}fDypnwk)K+E^G?&#Nt)7P7Dph&*yIYq0O_|D zGCbtwbx_{C^s6+EruF5lcHS-%NTw;v{H%Bf@Thg`k3UjXj}JKqmGtjcymO|{d8;MJ zosm_t0R9@z@cx@5ch7cZYl#t9VERyXLqOAfi}7=%&iva(XOExaHA+oj+lv>KvpgL@ zsr2iJMeXCIs=TbFOr6Iymwjmza6Hn!=OZDHYDaZ8YU@zSH4AB-z*!^QGCgacw}4&P zTdPirp|ZoiE11_Nhf>k4r5B`68zPAD)Ml()UoEVWw0}0>123l?YdNQF4@R3r-XyoP zLItF5)34n-vJF$bnn|?uZOi5Y6s|d|H|yps7Z%U+pyfw;#93bIDI<^Nn{i^ptz9(i zVNlPORu}IJaHoS)+QN$?EK0?*#tlIrRh3#t$O)r%OGXcQgHewEz>a+y~% zc~KjQRI`20{Y+)@K z-uOy+WYnOyxnR*E;Bj8(;akYoPu|+h&5S7rk81hPMVV#3jaux*FzN4J-{Bj}nbITn zwlXj9`&Y?kFuCi|YRL7?Iig~$awR=gk2Tq8`l2<&K~(MwjMtsm&aqr9vpyO_ocdQw z;rWtD8c#cLQ(qf69cQK3$Y!%;X#(+AZSJF67Pc>$2*7;sE0@ysA$Wd7`3F;5F^FUj z5XR}g<9b&;n2v%G9JXOnP>iP}lh%@HU{`^{Go9ZespxAa=gV7F!PpgmE$V7nuB3)I zClPD}{HM^@Jfa1SQ!4)eXptFY9S@}=T+44_87Gb2M%%X;I5kfG>f$&WNnNg*PF6Oj z$8ODI72I%h<^?P1Sn{smR}CeclgFIOqpfmtNhPvf+)r?-{$ScV8t><^^Q5_)4q12= zzC7$#mle>(X~ zMfia>kEnkBR%OqY5sw)hSGRa?#TQz&oH9wNIz&19KX0XPI6G)dJvupTY$Q)6DP?&O zlA*I%=(dWk>|HvLrMeo%8qxF8RBtG%?a1#~x`w9f=UhoK+RKf;p7qHXNxg(mscXPZ zJW!k*;h3D}xNUP>x0zTb^pQ?UX75<~w~7QUE2I3qpVqwh#eN{UWjQ9?H%14odh{^z zmq9bAzwunc;1-ccCjgOHcOE2lxRu$%9Pzh`;AYlkwT3Yy?K>-E?yQT?9Yqx7RyATz zt$I}OuH@Yw#}A0-UWfQ|nu&ZtHN;?}fNRS1pNP<2NXXIz8%mF@UANVlBWVT60CTpt zcxQ5Xk?0qi(UL8U;E&=X)}qqyp|{nU*#7U!`Eq;L2QBo*J;>#ulje5*>8b7SP2KcJ zk`oUfKdJPrDo|-^icI>u;l`~c#+PiYLd3%i#8-H?srIFeMY zIt{^a&FNl;qhBO(&2O+Ot6)v(UpZN{+C>i1TGADgBWohw0$HSfL0;7DLghpPSa$A& zWO2nq8p_&@%S|I}^7uZ!)LPuY)>FptDux_4t#YgND4Nn1X8UBbM;h!S1b4+%v==Q5 zvx~@lp^~Tvdaf=ktIyG8D*r>Xkwl=p@$jc~W zlBy~vOUqrC9%5~L5DMhr)Hj|-nAZF7w+AEIqSUvpm=!LXS5_GI0<`52-D2ME@t$)c ztXRkZVzTayf>|r7F}hLr_irgg!b4K?Cm&_cR^dS^WC|q4!Ey6cek+$@v-Rjp( zc$UO%MBuR%ESOt}E*eZ*vjDB{S^DDvb8y0P70y)GVvV*UTM+J(QkqD3bWmI69+g7t zRCUs1fn(Vo2+0*|NRU{p%?zGwjE$eBE1cCX%Gk!na>~qpO75m*)Wca>6~N>Z=~%qJkZB1G6QgM8#onxWrk}R zVkjPQpWb&Bn`Yl;(`Az4Q#8=7VGZkDsLb0MRGMs&+?nI@QE(#1%xRiFqV1_(&2eWm zqT(+o5!JYO zleot#=xOoVT3h(0OL(t*kpmTLkU6bZ#9WHj)#J5kSb391`+i^UinpcO+0Aize{$Yf z+nAGf3m;E>W38urJ>=SVeQX~%{Le1;nn!R^4SChwOfQq9G-`@A8YL}(FJszED^2U>I zD7_E8Z3781pM~XzL)PprE>%Sj;Wqc<)zh5%O`0zpq1dx0d$PT{YSWca7b#Se|jz;};hvX;Xz? zr2;N!_V-uPT)`RHxxP$_zk0V9SFyd%?ye(I7|6yz_Ne?H9I|S{VLKhCi2E9Lt*K3^ zUNMp_g?#U@|T=3O^fQiREMDGC5N=jlsvr^zO*aMx0-ay#d5LMl)6dmDW^ z`(mW3`Dy#~sdbB3?q-haYmb)W=UI6iw#1empv8s=9_n>X<96j8(l)!yBvjcxP|ok z)=!AMK_8u_k*1{6TodI?Ny>YQ(bYUZq-srVe+9gI<3O^+2i|Vv)UvKYHMWn4Zhrim zxZ2!irPeHGXSBY8;yGf*O|)a@KGj2CmMa@^9k!g9ljK4V-9EIs9+z{g{hq?w@!-^$ zU=&6Yr;|*$^GW;4Fa>Gb%c<#cNoHqzyR;;i zZnzz4mDh?qM>IPvEuK(5`3=xii$V+MpTfGGmzcq=FI34Yu+9%oYfn(tri#`H;`^NiJ7jX^K8^i6WvVE|*#bCM~|bqqFX1-_!nyMY)Ts3n)b;UJ4p*I}}28Q_iB zDSY4$t!my}NoLYP4eUF?#ACiICeGdG)NOpJ&Dr1c6I3pm88xZr5ru1ZD9cT3WXo3i zt@fXM(3p(zk&w}^0Giy;ZEx>2Cc2*P7LGHNx7+jmD+)b#Yj3t+GTpvi;)}hIl%4xxIc9vzHCV5Ur0-0+g z0JT6$zgyfu@=+%}VJZM7$sSCbpN{VHon?pEQF@@7Yb^C9a=$%~ZfZ7!gO zFsTHR$mjS^O6Ye;w#^xV&?@fcxa~IDSY-Q8+gddZfVlhK^}l`MON $z@@JN$p$` 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Ħ>PoQ98pO<5 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

P(^aBw(=*xL1pW4WGs^~_l&TG;K!=W6wE-pui@L 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 Q$@824070&HYW6?>*_ZTcb^rhX literal 0 HcmV?d00001 diff --git a/tests/test_llava.py b/tests/test_llava.py new file mode 100644 index 0000000..2be6017 --- /dev/null +++ b/tests/test_llava.py @@ -0,0 +1,80 @@ +import multiprocessing +import ctypes + +from huggingface_hub import hf_hub_download + +import pytest + +import llama_cpp + +@pytest.fixture +def mmproj_model_path(): + repo_id = "second-state/Llava-v1.5-7B-GGUF" + filename = "llava-v1.5-7b-mmproj-model-f16.gguf" + model_path = hf_hub_download(repo_id, filename) + return model_path + +@pytest.fixture +def llava_cpp_model_path(): + repo_id = "second-state/Llava-v1.5-7B-GGUF" + filename = "llava-v1.5-7b-Q8_0.gguf" + model_path = hf_hub_download(repo_id, filename) + return model_path + +def test_real_llava(llava_cpp_model_path, mmproj_model_path): + print("initializing model") + model = llama_cpp.Llama( + llava_cpp_model_path, + n_ctx=2048, + n_batch=512, + n_threads=multiprocessing.cpu_count(), + n_threads_batch=multiprocessing.cpu_count(), + logits_all=False, + verbose=False, + ) + + # Initialize the LLaVA chat handler + from llama_cpp.llama_chat_format import Llava15ChatHandler + print("initializing chat handler") + chat_handler = Llava15ChatHandler(clip_model_path=mmproj_model_path, llama_model=model) + + # Create a chat message with the image + print("creating chat message") + messages = [ + { + "role": "user", + "content": [ + { + "type": "image_url", + "image_url": "./tests/monalisa.jpg" + }, + { + "type": "text", + "text": "Do you know who drew this painting?" + } + ] + } + ] + + # Generate response + print("generating response") + response = chat_handler( + llama=model, + messages=messages, + max_tokens=200, + temperature=0.2, + top_p=0.95, + stream=False + ) + + print("response", response) + # Check that we got a response + assert response is not None + assert "choices" in response + assert len(response["choices"]) > 0 + assert "message" in response["choices"][0] + assert "content" in response["choices"][0]["message"] + + # The response should mention Leonardo da Vinci + content = response["choices"][0]["message"]["content"].lower() + assert "leonardo" in content and "vinci" in content # Artist name should be in response From 646beb7e465f5dfa1c41ab79dcaa573af374ba82 Mon Sep 17 00:00:00 2001 From: okaris Date: Wed, 25 Jun 2025 14:54:13 +0000 Subject: [PATCH 27/32] migrate clip to mtmd --- llama_cpp/llama.py | 4 ++ llama_cpp/llama_chat_format.py | 88 ++++++++++------------------------ 2 files changed, 29 insertions(+), 63 deletions(-) diff --git a/llama_cpp/llama.py b/llama_cpp/llama.py index cff875d..13387ca 100644 --- a/llama_cpp/llama.py +++ b/llama_cpp/llama.py @@ -481,6 +481,10 @@ def free_lora_adapter(): f"Using fallback chat format: {self.chat_format}", file=sys.stderr ) + if self.chat_handler is not None: + if isinstance(self.chat_handler, llama_chat_format.Llava15ChatHandler): + self.chat_handler.initialize_mtmd_context(self) + self._sampler = None @property diff --git a/llama_cpp/llama_chat_format.py b/llama_cpp/llama_chat_format.py index 27a375d..3b18b72 100644 --- a/llama_cpp/llama_chat_format.py +++ b/llama_cpp/llama_chat_format.py @@ -2713,22 +2713,27 @@ class Llava15ChatHandler: "{% endif %}" ) - def __init__(self, clip_model_path: str, llama_model: llama.Llama, verbose: bool = True): - import llama_cpp.mtmd_cpp as mtmd_cpp - + def __init__(self, clip_model_path: str, llama_model: Optional[llama.Llama] = None, verbose: bool = True): self.clip_model_path = clip_model_path self.verbose = verbose - - self._mtmd_cpp = mtmd_cpp + self._mtmd_cpp = None self._exit_stack = ExitStack() self._bitmap_manager = None + self.clip_ctx = None + self._params = None if not os.path.exists(clip_model_path): raise ValueError(f"Clip model path does not exist: {clip_model_path}") - # We'll initialize the clip context later when we have the llama model - self.clip_ctx = None - self._params = None + # Initialize MTMD context if model is provided + if llama_model is not None: + self.initialize_mtmd_context(llama_model) + + def initialize_mtmd_context(self, llama_model: llama.Llama): + """Initialize the MTMD context with a llama model.""" + import llama_cpp.mtmd_cpp as mtmd_cpp + self._mtmd_cpp = mtmd_cpp + with suppress_stdout_stderr(disable=self.verbose): params = self._mtmd_cpp.mtmd_context_params_default() params.use_gpu = True # TODO: Make configurable @@ -2748,10 +2753,22 @@ def mtmd_free(): self._exit_stack.callback(mtmd_free) + def __call__(self, *args, **kwargs): + if self.clip_ctx is None: + # Initialize MTMD context with the llama model from the first argument + if len(args) > 0 and isinstance(args[0], llama.Llama): + self.initialize_mtmd_context(args[0]) + else: + raise ValueError("MTMD context not initialized. Please call initialize_mtmd_context with a llama model first.") + return super().__call__(*args, **kwargs) + def load_image(self, image_url: str) -> bytes: return self._load_image(image_url) def eval_image(self, llama: llama.Llama, image_url: str): + if self.clip_ctx is None: + self.initialize_mtmd_context(llama) + image_bytes = self.load_image(image_url) # Create bitmap manager if not exists @@ -3481,61 +3498,6 @@ def split_text_on_image_urls(text: str, image_urls: List[str]): remaining = "" return split_text - def eval_image(self, llama: llama.Llama, image_url: str): - image_bytes = self.load_image(image_url) - - # Create bitmap manager if not exists - if self._bitmap_manager is None: - self._bitmap_manager = self._mtmd_cpp.BitmapManager() - - # Create bitmap from bytes - if not self._bitmap_manager.add_from_memory(self.clip_ctx, image_bytes): - raise ValueError("Failed to create bitmap from image bytes") - - # Create input chunks for the bitmap - chunks = self._mtmd_cpp.mtmd_input_chunks_init() - if chunks is None: - raise ValueError("Failed to create input chunks") - - # Create input text with media marker - # Get media marker from context params - params = self._mtmd_cpp.mtmd_context_params_default() - text = self._mtmd_cpp.mtmd_input_text() - text.text = params.media_marker if params.media_marker else self._mtmd_cpp.mtmd_default_marker() - text.add_special = False - text.parse_special = True - - # Tokenize with bitmap - if self._mtmd_cpp.mtmd_tokenize(self.clip_ctx, chunks, text, self._bitmap_manager.c_ptr(), len(self._bitmap_manager.entries)) != 0: - self._mtmd_cpp.mtmd_input_chunks_free(chunks) - raise ValueError("Failed to tokenize image") - - # Get new n_past after evaluation - n_past = ctypes.c_int(llama.n_tokens) - n_past_p = ctypes.pointer(n_past) - - # Evaluate chunks - if self._mtmd_cpp.mtmd_helper_eval_chunks( - self.clip_ctx, - llama.ctx, - chunks, - llama.n_tokens, - 0, # seq_id - llama.n_batch, - True, # logits_last - n_past_p - ) != 0: - self._mtmd_cpp.mtmd_input_chunks_free(chunks) - raise ValueError("Failed to evaluate chunks") - - # Update n_tokens - llama.input_ids[llama.n_tokens : n_past.value] = -1 - llama.n_tokens = n_past.value - - # Cleanup - self._mtmd_cpp.mtmd_input_chunks_free(chunks) - self._bitmap_manager.clear() - def _accumulate_chunks( chunks_iterator: Iterator[llama_types.CreateCompletionStreamResponse], From f9471b636f2c918403a5ba54b5f3e2dafb5d2eb8 Mon Sep 17 00:00:00 2001 From: okaris Date: Thu, 26 Jun 2025 16:32:45 +0000 Subject: [PATCH 28/32] add general purpose function calling handler --- llama_cpp/llama_chat_format.py | 343 +++++++++++++++++++++++++++++++++ 1 file changed, 343 insertions(+) diff --git a/llama_cpp/llama_chat_format.py b/llama_cpp/llama_chat_format.py index 3b18b72..6d872dc 100644 --- a/llama_cpp/llama_chat_format.py +++ b/llama_cpp/llama_chat_format.py @@ -3980,3 +3980,346 @@ def chatml_function_calling( } chat_completion["choices"][0]["message"]["function_call"] = single_function_call return chat_completion + + +@register_chat_completion_handler("gguf-function-calling") +def gguf_function_calling( + llama: llama.Llama, + messages: List[llama_types.ChatCompletionRequestMessage], + functions: Optional[List[llama_types.ChatCompletionFunction]] = None, + function_call: Optional[llama_types.ChatCompletionRequestFunctionCall] = None, + tools: Optional[List[llama_types.ChatCompletionTool]] = None, + tool_choice: Optional[llama_types.ChatCompletionToolChoiceOption] = None, + temperature: float = 0.2, + top_p: float = 0.95, + top_k: int = 40, + min_p: float = 0.05, + typical_p: float = 1.0, + stream: bool = False, + stop: Optional[Union[str, List[str]]] = [], + response_format: Optional[llama_types.ChatCompletionRequestResponseFormat] = None, + max_tokens: Optional[int] = None, + presence_penalty: float = 0.0, + frequency_penalty: float = 0.0, + repeat_penalty: float = 1.1, + tfs_z: float = 1.0, + mirostat_mode: int = 0, + mirostat_tau: float = 5.0, + mirostat_eta: float = 0.1, + model: Optional[str] = None, + logits_processor: Optional[llama.LogitsProcessorList] = None, + grammar: Optional[llama.LlamaGrammar] = None, + logprobs: Optional[bool] = None, + top_logprobs: Optional[int] = None, + **kwargs: Any, +) -> Union[ + llama_types.CreateChatCompletionResponse, + Iterator[llama_types.CreateChatCompletionStreamResponse], +]: + + function_calling_template = None + if hasattr(llama, 'model_path'): + from llama_cpp.llama import Llama + metadata = Llama.get_metadata(llama.model_path) + if metadata and "tokenizer.chat.template" in metadata: + function_calling_template = metadata["tokenizer.chat.template"] + + + function_calling_template = ( + "{% for message in messages %}" + "<|im_start|>{{ message.role }}\n" + # System message + "{% if message.role == 'system' %}" + "{{ message.content }}" + "{% if tool_calls %}" + "\n\nYou have access to the following functions:\n" + "{% for tool in tools %}" + '\n{% if tool.function.get("description") %}/* {{ tool.function.description | trim }} */{% endif %}' + "\nfunctions.{{ tool.function.name }}:\n" + "{{ tool.function.parameters | tojson }}" + "\n{% endfor %}" + "\nYou must respond to user messages with either a single message or with one or more function calls." + "\n\nTo respond with a message use the following format:" + "\n\nmessage:" + "\n" + "\n\nTo respond with one or more function calls use the following format:" + "\n\n" + "\nfunctions.:" + '\n{ "arg1": "value1", "arg2": "value2" }' + "\nfunctions.:" + '\n{ "arg1": "value1", "arg2": "value2" }' + "\n" + "{% endif %}" + "<|im_end|>\n" + "{% endif %}" + # User message + "{% if message.role == 'user' %}" + "{{ message.content }}" + "<|im_end|>\n" + "{% endif %}" + # Assistant message + "{% if message.role == 'assistant' %}" + ## Regular message + "{% if message.content and message.content | length > 0 %}" + "{% if tool_calls %}" + "message:\n" + "{% endif %}" + "{{ message.content }}" + "<|im_end|>\n" + "{% endif %}" + ## Function calls + "{% if 'tool_calls' in message %}" + "{% for tool_call in message.tool_calls %}" + "functions.{{ tool_call.function.name }}:\n" + "{{ tool_call.function.arguments }}" + "{% endfor %}" + "<|im_end|>\n" + "{% endif %}" + "{% endif %}" + "{% endfor %}" + "{% if add_generation_prompt %}<|im_start|>assistant\n{% endif %}" + ) + template_renderer = ImmutableSandboxedEnvironment( + autoescape=jinja2.select_autoescape(["html", "xml"]), + undefined=jinja2.StrictUndefined, + ).from_string(function_calling_template) + + # Convert legacy functions to tools + if functions is not None: + tools = [{"type": "function", "function": function} for function in functions] + + # Convert legacy function_call to tool_choice + if function_call is not None: + if isinstance(function_call, str) and (function_call in ("none", "auto")): + tool_choice = function_call + if isinstance(function_call, dict) and "name" in function_call: + tool_choice = {"type": "function", "function": {"name": function_call["name"]}} + + # Collect the llama.create_completion keyword arguments so we don't have to repeat these with + # each completion call + stop = ( + [stop, "<|im_end|>"] + if isinstance(stop, str) + else [*stop, "<|im_end|>"] + if stop + else ["<|im_end|>"] + ) + grammar = ( # It is assumed the grammar applies to messages only, not tool calls + grammar + if grammar is not None + else ( + _grammar_for_response_format(response_format) + if response_format is not None and response_format["type"] == "json_object" + else None + ) + ) + completion_kwargs = { + "temperature": temperature, + "top_p": top_p, + "top_k": top_k, + "min_p": min_p, + "typical_p": typical_p, + "stream": stream, + "stop": stop, + "max_tokens": max_tokens, + "presence_penalty": presence_penalty, + "frequency_penalty": frequency_penalty, + "repeat_penalty": repeat_penalty, + "tfs_z": tfs_z, + "mirostat_mode": mirostat_mode, + "mirostat_tau": mirostat_tau, + "mirostat_eta": mirostat_eta, + "model": model, + "logits_processor": logits_processor, + "grammar": grammar, + } + + # Case 1: No tool use + if ( + tool_choice is None + or (isinstance(tool_choice, str) and tool_choice == "none") + or tools is None + or len(tools) == 0 + ): + prompt = template_renderer.render( + messages=messages, tools=[], tool_calls=None, add_generation_prompt=True + ) + return _convert_completion_to_chat( + llama.create_completion( + prompt=prompt, + **completion_kwargs, # type: ignore[arg-type] + logprobs=top_logprobs if logprobs else None, + ), + stream=stream, + ) + + # Ensure there is a system prompt to attach the tool metadata to + if not any(message["role"] == "system" for message in messages): + messages = [*messages, {"role": "system", "content": ""}] + + # Case 2: Automatic or fixed tool choice + # Case 2 step 1: Determine whether to respond with a message or a tool call + assert (isinstance(tool_choice, str) and tool_choice == "auto") or isinstance(tool_choice, dict) + if isinstance(tool_choice, dict): + tools = [t for t in tools if t["function"]["name"] == tool_choice["function"]["name"]] + assert tools + function_names = " | ".join([f'''"functions.{t['function']['name']}:"''' for t in tools]) + prompt = template_renderer.render( + messages=messages, tools=tools, tool_calls=True, add_generation_prompt=True + ) + initial_gbnf_tool_grammar = ( + ( + 'root ::= "" "\\n" functions | "message:"\n' + f"functions ::= {function_names}\n" + ) + if tool_choice == "auto" + else f'root ::= "" "\\n" functions\nfunctions ::= {function_names}\n' + ) + completion = cast( + llama_types.CreateCompletionResponse, + llama.create_completion( + prompt=prompt, + **{ # type: ignore[arg-type] + **completion_kwargs, + "temperature": 0, + "stream": False, + "stop": [":"], + "max_tokens": None, + "grammar": llama_grammar.LlamaGrammar.from_string( + initial_gbnf_tool_grammar, verbose=llama.verbose + ), + }, + ), + ) + text = completion["choices"][0]["text"] + tool_name = None if text.startswith("message") else text.split("\n")[-1][len("functions.") :] + + # Case 2 step 2A: Respond with a message + if tool_name is None: + prompt = template_renderer.render( + messages=messages, tools=[], tool_calls=None, add_generation_prompt=True + ) + return _convert_completion_to_chat( + llama.create_completion( + prompt=prompt, + **completion_kwargs, # type: ignore[arg-type] + logprobs=top_logprobs if logprobs else None, + ), + stream=stream, + ) + + # Case 2 step 2B: One or more function calls + follow_up_gbnf_tool_grammar = ( + 'root ::= functions | "" | "<|im_end|>"\n' + f"functions ::= {function_names}\n" + ) + prompt += "\n" + if stream: + return _stream_tool_calls( + llama, prompt, tools, tool_name, completion_kwargs, follow_up_gbnf_tool_grammar + ) + tool = next((tool for tool in tools if tool["function"]["name"] == tool_name), None) + completions: List[llama_types.CreateCompletionResponse] = [] + completions_tool_name: List[str] = [] + while tool is not None and len(completions) <= 16: + # Generate the parameter values for the selected tool + prompt += f"functions.{tool_name}:\n" + try: + grammar = llama_grammar.LlamaGrammar.from_json_schema( + json.dumps(tool["function"]["parameters"]), verbose=llama.verbose + ) + except Exception as e: + warnings.warn( + f"Failed to parse function body as JSON schema, falling back to default grammar\n\n{e}", + category=RuntimeWarning, + stacklevel=2, + ) + grammar = llama_grammar.LlamaGrammar.from_string( + llama_grammar.JSON_GBNF, verbose=llama.verbose + ) + completion_or_chunks = llama.create_completion( + prompt=prompt, + **{ # type: ignore[arg-type] + **completion_kwargs, + "max_tokens": None, + "grammar": grammar, + }, + ) + completion = cast(llama_types.CreateCompletionResponse, completion_or_chunks) + completions.append(completion) + completions_tool_name.append(tool_name) + prompt += completion["choices"][0]["text"] + prompt += "\n" + # Determine whether to call another tool or stop + response = cast( + llama_types.CreateCompletionResponse, + llama.create_completion( + prompt=prompt, + **{ # type: ignore[arg-type] + **completion_kwargs, + "temperature": 0, + "stream": False, + "stop": [*completion_kwargs["stop"], ":", ""], # type: ignore[misc] + "max_tokens": None, + "grammar": llama_grammar.LlamaGrammar.from_string( + follow_up_gbnf_tool_grammar, verbose=llama.verbose + ), + }, + ), + ) + tool_name = response["choices"][0]["text"][len("functions.") :] + tool = next((tool for tool in tools if tool["function"]["name"] == tool_name), None) + # Merge the completions into a single chat completion + chat_completion: llama_types.CreateChatCompletionResponse = { + "id": "chat" + completion["id"], + "object": "chat.completion", + "created": completion["created"], + "model": completion["model"], + "choices": [ + { + "finish_reason": "tool_calls", + "index": 0, + "logprobs": _convert_text_completion_logprobs_to_chat( + completion["choices"][0]["logprobs"] + ), + "message": { + "role": "assistant", + "content": None, + "tool_calls": [ + { + "id": "call_" + f"_{i}_" + tool_name + "_" + completion["id"], + "type": "function", + "function": { + "name": tool_name, + "arguments": completion["choices"][0]["text"], + }, + } + for i, (tool_name, completion) in enumerate( + zip(completions_tool_name, completions) + ) + ], + }, + } + ], + "usage": { + "completion_tokens": sum( + (completion["usage"]["completion_tokens"] if "usage" in completion else 0) + for completion in completions + ), + "prompt_tokens": sum( + completion["usage"]["prompt_tokens"] if "usage" in completion else 0 + for completion in completions + ), + "total_tokens": sum( + completion["usage"]["total_tokens"] if "usage" in completion else 0 + for completion in completions + ), + }, + } + if len(completions) == 1: + single_function_call: llama_types.ChatCompletionResponseFunctionCall = { + "name": tool_name, + "arguments": completions[0]["choices"][0]["text"], + } + chat_completion["choices"][0]["message"]["function_call"] = single_function_call + return chat_completion From 6f59c3e5307404ca60dab854a1bb8984eb702ed3 Mon Sep 17 00:00:00 2001 From: okaris Date: Thu, 26 Jun 2025 16:42:45 +0000 Subject: [PATCH 29/32] add general purpose function calling handler --- llama_cpp/llama_chat_format.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/llama_cpp/llama_chat_format.py b/llama_cpp/llama_chat_format.py index 6d872dc..8d0a366 100644 --- a/llama_cpp/llama_chat_format.py +++ b/llama_cpp/llama_chat_format.py @@ -4020,9 +4020,9 @@ def gguf_function_calling( function_calling_template = None if hasattr(llama, 'model_path'): from llama_cpp.llama import Llama - metadata = Llama.get_metadata(llama.model_path) - if metadata and "tokenizer.chat.template" in metadata: - function_calling_template = metadata["tokenizer.chat.template"] + metadata = Llama.metadata + if metadata and "tokenizer.chat_template" in metadata: + function_calling_template = metadata["tokenizer.chat_template"] function_calling_template = ( From bc3c56db7dc99f9b32b05c12c8dae2e2ae1828c6 Mon Sep 17 00:00:00 2001 From: okaris Date: Thu, 26 Jun 2025 16:47:22 +0000 Subject: [PATCH 30/32] add general purpose function calling handler --- llama_cpp/llama_chat_format.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/llama_cpp/llama_chat_format.py b/llama_cpp/llama_chat_format.py index 8d0a366..2abe67c 100644 --- a/llama_cpp/llama_chat_format.py +++ b/llama_cpp/llama_chat_format.py @@ -4019,8 +4019,7 @@ def gguf_function_calling( function_calling_template = None if hasattr(llama, 'model_path'): - from llama_cpp.llama import Llama - metadata = Llama.metadata + metadata = llama.metadata if metadata and "tokenizer.chat_template" in metadata: function_calling_template = metadata["tokenizer.chat_template"] From ec8e0221ec7dd8dc659606ce8615dc010b5faf76 Mon Sep 17 00:00:00 2001 From: okaris Date: Fri, 27 Jun 2025 06:55:08 +0000 Subject: [PATCH 31/32] update llama.cpp --- vendor/llama.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/llama.cpp b/vendor/llama.cpp index 162ce47..f13fa9b 160000 --- a/vendor/llama.cpp +++ b/vendor/llama.cpp @@ -1 +1 @@ -Subproject commit 162ce4786b5385b62dd995218dcbf11eb62571f0 +Subproject commit f13fa9b2b523e22ba58fcf4c468f670d8c98d912 From e9a97daec3585bd37e94a6c5921b0455407b53d9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Jun 2025 07:19:59 +0000 Subject: [PATCH 32/32] chore(deps): bump pypa/cibuildwheel from 2.22.0 to 3.0.0 Bumps [pypa/cibuildwheel](https://github.com/pypa/cibuildwheel) from 2.22.0 to 3.0.0. - [Release notes](https://github.com/pypa/cibuildwheel/releases) - [Changelog](https://github.com/pypa/cibuildwheel/blob/main/docs/changelog.md) - [Commits](https://github.com/pypa/cibuildwheel/compare/v2.22.0...v3.0.0) --- updated-dependencies: - dependency-name: pypa/cibuildwheel dependency-version: 3.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/build-and-release.yaml | 4 ++-- .github/workflows/build-wheels-metal.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-and-release.yaml b/.github/workflows/build-and-release.yaml index 7307c85..65aaa67 100644 --- a/.github/workflows/build-and-release.yaml +++ b/.github/workflows/build-and-release.yaml @@ -42,7 +42,7 @@ jobs: shell: cmd - name: Build wheels - uses: pypa/cibuildwheel@v2.22.0 + uses: pypa/cibuildwheel@v3.0.0 env: # disable repair CIBW_REPAIR_WHEEL_COMMAND: "" @@ -69,7 +69,7 @@ jobs: platforms: linux/arm64 - name: Build wheels - uses: pypa/cibuildwheel@v2.22.0 + uses: pypa/cibuildwheel@v3.0.0 env: CIBW_SKIP: "*musllinux* pp*" CIBW_REPAIR_WHEEL_COMMAND: "" diff --git a/.github/workflows/build-wheels-metal.yaml b/.github/workflows/build-wheels-metal.yaml index 9b97bf2..dbcde99 100644 --- a/.github/workflows/build-wheels-metal.yaml +++ b/.github/workflows/build-wheels-metal.yaml @@ -43,7 +43,7 @@ jobs: shell: cmd - name: Build wheels - uses: pypa/cibuildwheel@v2.22.0 + uses: pypa/cibuildwheel@v3.0.0 env: # disable repair CIBW_REPAIR_WHEEL_COMMAND: ""