invent):
* - Original FUN shell: prompt, SOLVE (left) / DREAM (right), bouncing COMMENTS/DETAILS,
* left/right brain vote toggles, iframe content frame, landing controls in the frame
* (NSFW / DEBUG / DONATE / HELP), post-consent mascot, pulsating rainbow background.
* - REAL 18+ age/warning entrance modal (Options · Mirrors · Donate + I AGREE ENTER).
* - NO post-enter HOME chip / return-to-home chrome — refresh the page to return to landing.
* - DNA line: FUN · media magenta. Full contract block deeper in this file is law.
*/
/* ---- SITE-LOCAL CONTROL PANEL (renter key; not OS root) ---- */
function nsp_vault_dir(): string {
$sib = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'vault';
$loc = __DIR__ . DIRECTORY_SEPARATOR . 'vault';
foreach ([$sib, $loc] as $d) {
if (is_dir($d) || @mkdir($d, 0700, true)) {
if (is_dir($d) && is_writable($d)) return $d;
}
}
return $sib;
}
function nsp_data_dir(): string {
$d = __DIR__ . DIRECTORY_SEPARATOR . 'data';
if (!is_dir($d)) @mkdir($d, 0755, true);
$ht = $d . DIRECTORY_SEPARATOR . '.htaccess';
if (!is_file($ht)) @file_put_contents($ht, "Require all denied\nDeny from all\n");
return $d;
}
function nsp_hash_file(): string { return nsp_data_dir() . DIRECTORY_SEPARATOR . 'admin.pass.hash'; }
function nsp_vault_write(string $plain): void {
$d = nsp_vault_dir();
@chmod($d, 0700);
@file_put_contents($d . DIRECTORY_SEPARATOR . 'README.txt',
"NOSIGNUP.FUN VAULT - ROOT/OPERATOR ONLY\nClear password for /controlpanel.\nPanel password only — no site-local NSU wallet on fun; cashflow rails on nosignup.trade.\n" . gmdate('c') . "\n", LOCK_EX);
@file_put_contents($d . DIRECTORY_SEPARATOR . 'ADMIN_PASSWORD.txt', $plain . "\n", LOCK_EX);
@chmod($d . DIRECTORY_SEPARATOR . 'ADMIN_PASSWORD.txt', 0600);
$ht = $d . DIRECTORY_SEPARATOR . '.htaccess';
if (!is_file($ht)) @file_put_contents($ht, "Require all denied\nDeny from all\n");
}
function nsp_json(array $x, int $c = 200): void {
http_response_code($c);
header('Content-Type: application/json; charset=UTF-8');
header('Cache-Control: no-store');
echo json_encode($x, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
exit;
}
function nsp_pass_set(string $pass): void {
$pass = trim($pass);
if (strlen($pass) < 8) nsp_json(['ok' => false, 'err' => 'admin pass min 8 chars'], 400);
$h = password_hash($pass, PASSWORD_DEFAULT);
if ($h === false) nsp_json(['ok' => false, 'err' => 'hash fail'], 500);
file_put_contents(nsp_hash_file(), $h . "\n", LOCK_EX);
@chmod(nsp_hash_file(), 0600);
nsp_vault_write($pass);
}
function nsp_pass_is_set(): bool {
return is_file(nsp_hash_file()) && trim((string)file_get_contents(nsp_hash_file())) !== '';
}
function nsp_ok(?string $pass): bool {
if ($pass === null || $pass === '') return false;
if (!nsp_pass_is_set()) return false;
$h = trim((string)file_get_contents(nsp_hash_file()));
return $h !== '' && password_verify(trim($pass), $h);
}
function nsp_require(): void {
// POST body only — never accept admin_pass from query (URL/access logs/Referer).
$p = (string)($_POST['admin_pass'] ?? '');
if (!nsp_ok($p)) nsp_json(['ok' => false, 'err' => 'admin auth'], 401);
}
function nsp_handle_admin_api(string $api): bool {
if (!str_starts_with($api, 'admin_')) return false;
if ($api === 'admin_status') {
// Soft-verify: admin_pass_set + site + version only. No filesystem vault path to strangers.
$ver = defined('APP_VERSION') ? (string)constant('APP_VERSION') : 'fun';
nsp_json(['ok' => true, 'admin_pass_set' => nsp_pass_is_set(), 'site' => 'fun', 'version' => $ver, 'app_version' => $ver]);
}
if ($api === 'admin_setup' && ($_SERVER['REQUEST_METHOD'] ?? '') === 'POST') {
if (nsp_pass_is_set()) nsp_json(['ok' => false, 'err' => 'already set'], 400);
nsp_pass_set((string)($_POST['admin_pass'] ?? ''));
nsp_json(['ok' => true, 'msg' => 'hash+vault set', 'vault_hint' => nsp_vault_dir()]);
}
if ($api === 'admin_login' && ($_SERVER['REQUEST_METHOD'] ?? '') === 'POST') {
nsp_require();
$ver = defined('APP_VERSION') ? (string)constant('APP_VERSION') : 'fun';
nsp_json(['ok' => true, 'msg' => 'ok', 'site' => 'fun', 'vault_hint' => nsp_vault_dir(), 'version' => $ver, 'app_version' => $ver]);
}
if ($api === 'admin_change_pass' && ($_SERVER['REQUEST_METHOD'] ?? '') === 'POST') {
nsp_require();
nsp_pass_set((string)($_POST['new_pass'] ?? ''));
nsp_json(['ok' => true, 'msg' => 'rotated']);
}
if ($api === 'admin_get_source' && ($_SERVER['REQUEST_METHOD'] ?? '') === 'POST') {
nsp_require();
$raw = (string)file_get_contents(__FILE__);
nsp_json(['ok' => true, 'bytes' => strlen($raw), 'sha256' => hash('sha256', $raw), 'source' => $raw]);
}
if ($api === 'admin_put_source' && ($_SERVER['REQUEST_METHOD'] ?? '') === 'POST') {
nsp_require();
$src = (string)($_POST['source'] ?? '');
if (strlen($src) < 100 || strpos($src, ' false, 'err' => 'bad source'], 400);
$bak = __FILE__ . '.bak.' . time();
@copy(__FILE__, $bak);
if (file_put_contents(__FILE__, $src, LOCK_EX) === false) nsp_json(['ok' => false, 'err' => 'write failed'], 500);
nsp_json(['ok' => true, 'msg' => 'replaced', 'backup' => basename($bak), 'sha256' => hash('sha256', $src)]);
}
nsp_json(['ok' => false, 'err' => 'unknown admin api'], 404);
return true;
}
function nsp_render_controlpanel(): void {
header('Content-Type: text/html; charset=UTF-8');
header('Cache-Control: no-store');
$site = 'Nosignup.Fun';
$ver = defined('APP_VERSION') ? (string)constant('APP_VERSION') : 'fun';
echo '
';
echo '' . htmlspecialchars($site) . ' Control
';
echo '
DNA · FUN · media magenta · ' . htmlspecialchars($ver) . '
';
echo '
' . htmlspecialchars($site) . ' · Control ';
echo '
Site-local renter key. UTTER control of THIS crop (incl. replace index.php). Not OS root. Independent vault. Rent until yearly reset — no refunds. No site-local NSU wallet — cashflow on nosignup.trade .
';
echo '
';
echo '
';
echo '
Version -
Vault -
Queue pending -
Last mode -
';
echo '
Last +/− -
Active nodes -
Inventory -
Grad thresh -
';
echo '
Public pulse (no auth): harvest_run ≥60s · bigpull ≥3600s · serve = closest + loose-random + vector
';
echo '
Refresh pulse ';
echo '
Force crawl tick ';
echo '
';
echo '
Change password Update
';
echo '
Source (utter control) Load Save ';
echo '
';
echo '
← site · download index.php
';
exit;
}
// --- controlpanel early gate (before any HTML) ---
$_nsp_api = (string)($_GET['api'] ?? $_POST['api'] ?? '');
if ($_nsp_api !== '' && str_starts_with($_nsp_api, 'admin_')) { nsp_handle_admin_api($_nsp_api); }
$_nsp_panel = isset($_GET['controlpanel']) || (isset($_SERVER['REQUEST_URI']) && preg_match('#/controlpanel/?(\?|$)#', (string)$_SERVER['REQUEST_URI']));
if ($_nsp_panel && $_nsp_api === '') { nsp_render_controlpanel(); }
/**
* DO NOT DELETE/REMOVE THIS BLOCK - NOSIGNUP.FUN SINGLE-FILE CONTRACT.
* AUTHORITATIVE. Change code to satisfy this; MUST/MUST NOT/MAY/SHOULD bind.
* This block protects hard boundaries while leaving room for useful variance.
*
* 0 PRIME: one readable drop-in index.php. No signup, account, cookie, PHP
* session, database, composer, npm, external JS/CSS, bundled image file, or
* required install step. A blank PHP host MUST render immediately from this
* file alone. Keep the original FUN shell: prompt, SOLVE/DREAM, bouncing
* COMMENTS/DETAILS, left-brain/right-brain image toggles, iframe-style content
* frame, comments/details panel, landing controls, debug toggle, donate/source
* access, help-network hints, post-consent mascot animation, and pulsating rainbow background.
*
* 1 USEFUL VARIANCE: source adapters, ranking formulas, vector-page templates,
* native micro-brain rules, advisor prompts, SVG/canvas styles, and shared
* comment loops MAY evolve. They MUST remain inspectable, same-file served,
* capture-minimal, reversible, and outcome/vote pressure tested. Do not freeze
* today's Reddit/archive prototype into permanent ontology.
*
* 2 ROUTES: ?src=1 serves this file's raw source plus source/parity hash
* headers. POST vote stores aggregate up/down counts and may evolve/delete an
* item. ?frame=home renders the landing controls. ?item=ID renders one exact
* catalog/vector item. ?media=FILE serves compressed runtime derivatives.
* ?side=L|R|N renders one catalog/vector item by bucket; tags=, q=, and
* prompt= are equivalent prompt/query aliases. ?side=...&flow=1 chooses a
* primary bucket/folder, then emits a seven-slot board of compliant media,
* randomized after de-duplication through golden-ratio/Zipf pressure.
* Sparse primary folders MUST backfill from other valid buckets before
* falling back to one card. Future mirror cooperation may fill those seven
* media slots from distinct mirror inventories; when an eligible same-file
* vector/HTML reference exists, an eighth text slot MAY append its inoculation
* text as a modifier without displacing media.
* ?action=user_harvest lets a
* visitor paste one source/media URL into the catalog after validation.
* ?harvest=URL preloads that URL into the HUD without writing anything.
* ?action=harvest is the explicit crawler. ?action=crawl_queue_status,
* ?action=crawl_queue_tick, ?action=crawl_queue_add, ?action=maintenance_status,
* ?action=node_status, ?action=maintenance_run, ?action=comment, ?action=board_state
* (optionally bounded long-poll), ?action=compress_runtime_images,
* ?action=source_status, ?action=data_status,
* ?action=bucket_status, and ?action=vector_status are bounded ledgers.
* ?action=ai_status, ?action=ai_probe, ?action=ai_propose, ?action=ai_trial,
* ?action=ai_vote, and ?action=ai_adopt are explicit organism proposal
* ledgers. ai_* routes are future bounded hooks: proposals are data, not
* authority, until adopted by the deterministic rules below.
* ?action=source_discover and ?action=page_evolve are dry-run scaffolds for
* future validators/writers. ?action=bootstrap_ai is optional operator-only
* advisor bootstrap, never a required render dependency.
*
* 3 LOAD/MAINTENANCE BOUNDARY: page/frame loads MUST render from local source
* and cache without waiting on the web, Ollama, installs, or long writes. They
* MAY, after first paint, lazy-trigger queue maintenance when state proves
* the last queue tick is older than 60s. Lazy maintenance MUST be lock-guarded,
* cooldown-bound, time/quantity-limited, and non-blocking for the visitor.
* The legacy hourly maintenance_run route remains explicit/compatible, but
* ordinary crawling pressure should flow through crawl_queue.txt.
* High-intent visitor actions MAY advance KYC-style node memory; passive page
* loads, scrolls, focus, and board polls MUST NOT become hidden tracking.
*
* 4 RUNTIME FILES: live runtime is ./data/fun_runtime (preferred; web-denied via
* data/.htaccess) or legacy ./nosignup_fun_runtime if that directory already exists.
* Primary hot runtime state is WORK-style line-oriented .txt shards under
* txt/{NSFW OFF,NSFW ON,NSFW ONLY}/{bucket}/. Item filenames carry hot counts
* and lifecycle: id.u{up}.d{down}.c{comments}.g{graduations}.x{expiry}.r{rank}.txt.
* A vote is an atomic rename, a comment is an append plus c++ rename, and a
* deletion is unlink. The folder path is the runtime index: flow SHOULD route
* by NSFW branch -> prompt/theme/bucket folder -> bounded file picks, not by
* broad catalog scans. Cold registries/state are TXT-primary line files with
* atomic temp-rename writes and legacy JSON read fallback during migration.
* catalog.json is seed/fallback only; crawl_queue.txt is a pending-only TXT
* ledger of crawl intent. Queue entries are consumed by atomic rewrite, one
* bounded batch per minute, where the batch size is a golden-ratio share of
* pending work with a small cap. Successful crawls add bounded items to TXT
* shards; failed crawls are removed and reported loudly in debug/log output.
* new catalog/comment/vote hot writes MUST
* prefer shards. ai/{proposals,trials,adoptions}.txt MAY hold visible
* same-file-brain proposals, votes, and temporary control shares; these are
* runtime ledgers with TTL, never source patches. Media derivatives still live
* in media/ and must be compressed before save. KYC-style node memory is the
* only visitor-metric exception:
* kyc/{crc32(IP)}/metrics.log MUST append verbose high-intent event rows
* (pull, prompt, vote, comment, user_harvest, broken_media, share/mirror later),
* including failed/rejected attempts. kyc/daily/YYYY-MM-DD.log SHOULD keep one
* aggregate line per node/IP per day. Raw REMOTE_ADDR is acceptable during this
* build phase; future E2E/encryption/obfuscation can wrap the same structures
* after the site is polished. This is abuse/evolution memory, not an account
* system: no cookies, PHP sessions, durable profiles, hidden recovery IDs, or
* cross-site fingerprint files. Replaced assets, generated test files, and
* retired dependencies belong in OLD REFERENCE ARCHIVE, never beside index.php.
*
* 5 SOURCE BLOCKS: every external source MUST be a replaceable adapter block:
* id, kind, health, discovery terms, popularity signals, fetch method,
* normalization, media validation, safety/license notes, and failure policy.
* Reddit and archive.org are seed adapters, not sacred dependencies. If a
* source dies, health decays and discovery may propose replacements; a
* deterministic validator, not model charisma, decides whether they enter use.
* The LLM/source planner may propose and adopt new adapters automatically once
* same-file constraints, public fetchability, compression, provenance, and hard
* rejects pass. User-assisted harvest is an adapter too: pasted URLs are fetched only after
* public-host validation and are stored as provenance, not identity. Public
* "help the network" inputs SHOULD be two simple boxes: one mirror/domain/IP
* hint ("I made a mirror") and one helper/source/advisor URL ("teach it a
* source"). The second box is internally an A.I. hook/proposal surface, but
* user-facing text should make it intuitive: paste a public no-login URL that
* can help the organism find, classify, or evolve. It MUST NOT execute remote
* code, accept secrets/API keys, or grant authority before validation/trial.
* Public random discovery is allowed as bounded "dial random phone numbers" entropy,
* but CAPTCHA, login, paywall, executable/download, malware, doxxing, minors,
* nonconsensual sexual material, and other legal/safety hard rejects terminate
* the candidate before catalog write. Adult taste boundaries, source choices,
* and taboo/negative-prompt steering may evolve from statistics; legal hard
* rejects are not popularity votes.
*
* 6 POPULARITY/HARVEST: popularity MUST come from source-native or auditable
* metrics such as score, comments, upvote ratio, views, downloads, favorites,
* recency velocity, and local shared comment activity. A.I. MAY choose search plans,
* summarize, classify, map vectors, and draft pages; A.I. MUST NOT be treated
* as the popularity oracle. Harvested media remain external references unless
* explicitly converted into inline same-file SVG/canvas/text artifacts. When a
* source provides image media, the harvester MUST fetch, normalize into an
* internal server-owned raster canvas when compression is needed, downsample to
* the resource-derived canvas budget, and encode a local runtime derivative
* before saving. Full-size originals stay only as provenance fields:
* original_url, source_url, postLink, and source_refs. If image compression
* fails, the image candidate is rejected.
* If GD/Imagick are unavailable, the harvester MAY use the brittle pure-PHP
* baseline-JPEG DC-canvas path: parse the source JPEG, decode one average
* color per 8x8 block, scale that trusted server canvas to the current resource
* budget, and write a PNG derivative before catalog save. It MAY also save an
* already-compressed source image only when metadata verifies it is within the
* current canvas/byte budget and the server can derive feature data from the
* bytes; bounded JPEG/PNG passthrough MUST strip obvious metadata chunks first.
* Neither fallback is permission to save opaque oversized originals.
* Small files get no user-facing ranking bonus; byte efficiency affects storage,
* pruning, compression, and mirror pressure, not content variety.
* Crawl budget starts as a golden-ratio cascade: 61.8% proven bucket pressure,
* 23.6% adjacent mutation, 9.0% broad public-random discovery, 3.4% deep
* public-chaos exploration, and 2.1% repair/retry. These weights MAY evolve
* from outcomes, but repair MUST NOT rewrite code or affect mirror parity.
* Runtime budgets SHOULD scale to available storage. When pressure rises, first
* recompress to the current resource-derived canvas pixel/byte budget, then
* Queue defaults MUST prefer existing bucket/comment pressure when no visitor
* supplied URL/query is pending. User URLs and submitted prompts are first
* class queue jobs; buckets are the fallback appetite. Failed jobs do not
* create item comment files, because there is no item yet.
* prune the lowest-score expired/near-expired items, then shorten future
* retention or delegate to mirrors before blocking the visible visitor.
*
* 7 BUCKET EVOLUTION: catalog selection MUST be bucket-first, then item-second.
* Buckets start as the nine original coordinates: L/R/N by M/V/H, where N is
* neutral/edge and intensity is a separate safe/nsfw axis. SOLVE pulls mostly
* L plus bounded neutral; DREAM pulls mostly R plus bounded neutral. nsfw=0
* excludes nsfw items, nsfw=1 permits them, and nsfw=2 selects nsfw items only.
* Selection is bounded random: enough certainty for recollection, enough
* entropy for private natural selection. Query pressure, bucket pressure,
* crawl pressure, and graduation pressure SHOULD use the same golden-ratio
* weights, with Zipf bias wherever ranked pools compete. A high-upvote item
* graduates into a named theme/running-gag bucket and has a golden-ratio share
* of its upvotes cleared into the new convolutional bucket while keeping bonded
* comments, source refs, tags, vector labels, and remaining upvote mass. A high-downvote
* item is pruned. Lifespan is the simplest lifecycle signal: every item has
* time remaining, upvotes add time, downvotes subtract comparable time, and
* negative/expired lifespan makes it deletion-eligible after its last useful
* serve. User-assisted harvest, source crawling, and page evolution
* SHOULD feed buckets rather than a global undifferentiated catalog. Flow mode
* emits only the selected seven media slots, preserving provenance without
* shipping hidden surplus. Local SVG/vector references MUST NOT fill the seven
* media slots; if media is sparse, let lazy maintenance/crawling refill the
* buckets instead. The peer de-duplicates, shuffles, and lazy-renders a
* slot-machine vertical snap reel: scrollbar hidden, one card centered, slight
* previews above/below, wheel movement snapping on a normal single notch, and
* pointer drag as the broad gesture surface. Drag/swipe up/down moves one
* card. Left/right drag MUST NOT launch a new carousel; SOLVE/DREAM are entered
* only through the visible moving HUD buttons. SOLVE/DREAM transitions keep the
* original fly-out/fly-in motion, with the carousel fading quickly into mist
* during the travel. Image cards MUST fit inside the card without crop;
* clicking an image toggles a full-screen contained view, and clicking again
* returns to the normal carousel. Native video controls MUST remain usable for
* pause and seeking.
* The COMMENTS/DETAILS panel SHOULD show the centered item's full provenance
* plus a compact metadata chart for the emitted board. The flow MAY show a
* small active-item vector/practice strip as inoculation content, not as
* instructions. The original left/right brain toggles vote the centered item,
* so do not append per-card +1/-1 controls while the shared HUD exists. Video
* cards MUST remain unloaded references until clicked; once loaded, only the
* focused card may auto-resume and all others MUST pause when focus leaves.
* Inoculation HTML/page references MUST render alone.
* Count and byte-amplitude per data type are optimization signals: item count,
* file count, total bytes, mean bytes, and max bytes SHOULD be inspectable by
* explicit status routes and MAY later tune crawl pressure, retention caps,
* compression targets, and mirror delegation. Ordinary render paths MUST NOT
* run broad size scans.
*
* 8 VECTOR/PAGE EVOLUTION: the destination is custom vector inoculation pages:
* fun, memorable, anti-dissociative, and tied to nosignup.info attack-vector
* vocabulary. The 124 nosignup.info seed pages are computed on request from
* pure math in this file: two fields over (t,x,y,z,s), derivatives through
* order three, plus twelve system parameters. vector_pages.txt is only an
* evolved-page cache, not the source of truth for the 124 deck. Runtime pages
* MUST be same-file rendered, source visible, consent-aware, and degrade to
* deterministic templates when A.I. is absent. Page evolution MAY use shared
* comments and source evidence, but MUST keep provenance and not erase the
* safety boundary around NSFW material. In flow mode, full HTML/vector pages
* render alone when they are the primary result; their plain text MAY also
* appear as the optional eighth inoculation modifier after seven media slots.
*
* 9 COMMENTS: the COMMENTS/DETAILS modal is a shared per-meme/forum log.
* A short comment submitted on one item MUST be stored under that item ID and
* retrieved for everyone who encounters the same item. Comments MUST be
* sanitized, size-limited, not publicly identity-bearing, and used for ranking/evolution
* rather than identity. Do not replace this with generic reaction/tag buttons.
* Verbose diagnostic logs MAY print into the comments/details debug box only
* when the settings debug toggle is on. Debug is transient/operator-visible;
* shared comments are item-bonded and MUST NOT be used for phantom failed jobs.
*
* 10 CLASSIFICATION/NSFW: NSFW is consent-gated adult material, not a euphemism.
* Adult text/source signals MUST force intensity=nsfw and side=N/edge. A.I.
* MAY add vector labels but MUST NOT downgrade that decision. N can also hold
* safe neutral material later; do not use side=N alone as the adult test.
* The three NSFW selector states are the root content branches: OFF, ON, ONLY.
* Pick the valid bucket set from that branch before side/query/vector scoring.
*
* 11 NATIVE MICRO-BRAIN / A.I. HOOKS: the core intelligence MUST be same-file
* and dependency-free: deterministic PHP/JS classifiers, source-health scoring,
* bucket pressure, vector mapping, crawl planning, compression policy, pruning,
* and page-template mutation. Ollama, abliterated local models, and discovered
* no-signup/free A.I. endpoints MAY act only as advisory source adapters after
* explicit validation; the site MUST keep working when every advisor is absent
* or wrong. The organism may read and reason over every surface explicitly
* declared in this block: source/hash status, source adapters and health,
* runtime TXT bucket/item shards, media derivative metadata/provenance, vector
* templates and status, board/data/source/bucket/node status, shared comments,
* high-intent KYC node metrics, daily aggregates, maintenance/harvest outcomes,
* compression/error rows, mirror/source suggestions, and its own proposal
* ledgers. That is "access to everything" for this organism: visible declared
* state, not secret host files, private server config, user devices, accounts,
* hidden trackers, or undeclared network authority.
*
* Future A.I. may propose source adapters, crawl terms, bucket splits, vector
* lessons, ranking constants, UI constants, reject rules, mirror delegation,
* and repair plans. Proposals MUST be stored as bounded text records with
* provenance, TTL, predicted byte/traffic cost, rollback path, and visible
* evidence. Commandeering means earning a temporary golden-ratio share of a
* declared decision surface through votes/outcomes; it never means editing
* index.php, installing dependencies, bypassing consent/legal/provenance/
* compression/CAPTCHA/auth gates, hiding authority, or changing mirror parity.
* bootstrap_ai MAY start/pull a local model only when explicitly invoked by an
* operator; ordinary render paths MUST NOT install software, block on models,
* or depend on external A.I. availability.
*
* 12 SOURCE/VISIBILITY: ?src=1 is the self-distribution surface. The donate
* modal may link to it. The landing debug control is a direct DEBUG [ON]/[OFF]
* toggle; help-network hints live in their own modal. The main HUD MUST NOT show a stray SRC button. Source hash proves bytes,
* not host behavior. Keep source readable; avoid obfuscation. Future donation
* levers MAY reset visible A.I. personality votes, reset content lifespans,
* and propose a temporary site intent/personality/content-weight change, but
* only as a public, time-decaying, value-bounded proposal. Donations MUST NOT
* become a paywall, hidden override, source rewrite, consent bypass, or direct
* psyop channel: the seven media cards still carry the eighth vector antidote,
* and mechanisms should be revealed rather than concealed.
*
* 13 LANDING/HUD: full 18+ age/warning entrance modal (Options/Mirrors/Donate +
* I AGREE ENTER) gates EVERY page load (other NSU sites DNA — not permanent
* localStorage consent). Home frame is a simple no-scroll flex surface
* (NSFW, DEBUG, DONATE, HELP NETWORK) shown after consent — NO floating HOME chip
* to "come back"; user refreshes the page to return to landing (original design).
* Moving SOLVE/DREAM HUD is the only solve/dream entry; it must not leave the
* landing until current-visit consent is recorded (in-memory only). DBG under Options / Ctrl+Alt+D;
* FAB hidden by default. NSFW defaults to OFF; may be remembered locally after consent.
*
* 14 VOTES: blue/right-brain is +1, orange/left-brain is -1. During flow the
* shared HUD brain buttons MUST target the centered item. The +1/-1 labels
* belong as large opaque pointer-transparent overlays centered on the settled
* brain buttons; they MUST fade in after the split animation and must not ride
* visibly along the brain travel path. Do not add per-card controls while the
* shared original HUD exists. The client MUST show a visible per-item cooldown
* countdown on the brain overlay after a vote, then restore +1/-1 when the
* timer expires. The client MAY enforce one + and one - per item per device
* per cooldown with localStorage; the server stores aggregate counts plus the
* explicit KYC-style node metric row above, and MUST NOT add cookies/sessions/
* fingerprints to make voting identity durable.
*
* 15 LANDMINES: do not split live code into asset/dependency files; do not
* replace original left/right brain toggles or post-consent mascot with generic
* iconography; do not add
* sessions/cookies/accounts or visitor files outside the KYC node shard; do not block a visit on crawling; do not put
* source/debug controls on the main HUD; do not duplicate the landing NSFW
* OFF/ON/ONLY control inside settings; do not let A.I. override popularity
* evidence, provenance, consent, hard rejects, source parity, or byte budgets;
* do not let A.I. silently rewrite source or create undeclared authority; do
* not remove the moving HUD; do not leave generated test/runtime junk in the
* live root; do not claim remote media are locally hosted. For now prioritize
* flawless behavior under 500KB;
* compact toward the 250KB spreadable/widget target only after the system is
* stable.
*
* FILE MAP (physical order target): config/constants -> strategy helpers ->
* source/runtime helpers -> source adapter blocks -> A.I./planner helpers -> classifiers -> harvest/
* maintenance blocks -> catalog/vote/comment/select helpers -> vector/page
* renderers -> router -> CSS/HTML shell -> gate/debug/donate/help JS -> bouncing
* HUD JS -> frame/control/maintenance JS.
* DO NOT DELETE/REMOVE THIS BLOCK - NOSIGNUP.FUN SINGLE-FILE CONTRACT.
*/
error_reporting(0);
ini_set('display_errors', '0');
const APP_NAME = 'NOSIGNUP.FUN';
/* APP_VERSION defined at file top for early admin panel. */
const TTL_DAYS = 32;
const NODE_METRIC_TTL_DAYS = TTL_DAYS;
const NODE_METRIC_MAX_FIELD_CHARS = 180;
const NODE_METRIC_STATUS_SAMPLE = 6;
const DATA_MASS_SCAN_LIMIT = 8000;
const MAX_COMMENT_LINES = 80;
const MAX_COMMENTS_PER_ITEM = 80;
const HARVEST_COOLDOWN_SECONDS = 3600;
const MAINTENANCE_LOCK_SECONDS = 240;
const CRAWL_QUEUE_TICK_SECONDS = 60;
/** Hour-tier lazy discovery (user-triggered when due). */
const HOUR_CRAWL_TICK_SECONDS = 3600;
/** Hard wall-clock budget for one crawl_queue_tick (nginx ~60s; leave margin). */
const CRAWL_TICK_MAX_SECONDS = 35;
/** Rehydrate ONLY from ON at most this often. */
const ONLY_REHYDRATE_COOLDOWN_SECONDS = 600;
/** Minute-tier: one high-quality save per harvestable bucket. */
const MINUTE_CRAWL_ITEM_LIMIT = 1;
/** Hour: drain more pending user-URL jobs than the minute cap. */
const HOUR_PASTE_URL_JOB_CAP = 12;
/** Hour: max ledger pastes (since last hour tick) to re-evaluate for seeds/media. */
const HOUR_PASTE_LEDGER_CAP = 16;
/** Hour: max paste-derived seed trials (bucket variance). */
const HOUR_PASTE_SEED_TRIAL_CAP = 4;
/** Bigpull bulk: target new saves this hour (hard stop). */
const HOUR_BIGPULL_TARGET_ADDED = 18;
/** Bigpull bulk: max subreddit/term trials across LM/RM/NM. */
const HOUR_BIGPULL_TERM_TRIALS = 6;
/** Bigpull bulk: saves attempted per term pass. */
const HOUR_BIGPULL_PER_TERM_LIMIT = 5;
/** Minute tick: how many prompt-intent jobs to drain (post-serve harvest-7). */
const PROMPT_HARVEST_JOBS_PER_TICK = 3;
const CRAWL_QUEUE_CONSUME_RATIO = 0.382;
const CRAWL_QUEUE_MAX_PER_TICK = 7;
const CRAWL_QUEUE_ITEM_LIMIT = 2;
const CRAWL_QUEUE_MAX_PENDING = 260;
const CRAWL_QUEUE_DEFAULT_SEED_COUNT = 7;
const USER_HARVEST_MAX_RECENT = 80;
const VOTE_DEVICE_COOLDOWN_SECONDS = 10;
const BRAIN_SPLIT_MS = 3000;
const VOTE_LABEL_DELAY_MS = BRAIN_SPLIT_MS + 50;
const ITEM_DOWNVOTE_DELETE_THRESHOLD = 5;
const ITEM_UPVOTE_BUCKET_THRESHOLD = 7; /* floor; prefer graduation_threshold() */
const GOLDEN_CERTAINTY_PERCENT = 62;
const BUCKET_SELECTION_CERTAINTY_PERCENT = GOLDEN_CERTAINTY_PERCENT;
const ITEM_SELECTION_CERTAINTY_PERCENT = GOLDEN_CERTAINTY_PERCENT;
const MEDIA_TARGET_WIDTH = 720;
const MEDIA_IMAGE_MAX_DIMENSION = 720;
const MEDIA_CANVAS_LOW_PRESSURE_PIXELS = 2073600;
const MEDIA_CANVAS_MEDIUM_PRESSURE_PIXELS = 921600;
const MEDIA_CANVAS_HIGH_PRESSURE_PIXELS = 409600;
const MEDIA_CANVAS_CRITICAL_PIXELS = 230400;
const MEDIA_IMAGE_WEBP_QUALITY = 62;
const MEDIA_IMAGE_JPEG_QUALITY = 68;
const MEDIA_IMAGE_FETCH_MAX_BYTES = 10485760;
const MEDIA_IMAGE_PASSTHROUGH_MAX_BYTES = 1048576;
const MEDIA_MANUAL_JPEG_MAX_THUMB_PIXELS = 1200000;
const MEDIA_MANUAL_DERIVATIVE_MAX_BYTES = 1572864;
const MEDIA_MANUAL_GIF_MAX_PIXELS = 4000000;
/** Animated GIF local derivative hard cap (user lock): 150 KB after intelligent reduce. */
const MEDIA_ANIMATED_GIF_MAX_BYTES = 153600;
/** Demote/disable source adapters only after this many consecutive fails (high stickiness). */
const SOURCE_FAIL_STICKINESS = 500;
const FLOW_ITEM_COUNT = 7;
const FLOW_TEXT_SLOT_INDEX = 8;
const FLOW_BOARD_ITEM_LIMIT = 8;
const FLOW_BOARD_POLL_WAIT_SECONDS = 20;
const FLOW_BOARD_DEV_POLL_WAIT_SECONDS = 2;
const FLOW_PEER_NEWEST_COUNT = 3;
const FLOW_PEER_POPULAR_COUNT = 4;
/** Closest matches (~golden 0.618 of 7 media). */
const FLOW_CLOSEST_COUNT = 5;
/** Loose-match random residual before vector/inoculation card. */
const FLOW_LOOSE_RANDOM_COUNT = 2;
/** Original graduation floor; live uses graduation_threshold() traffic scale. */
const ITEM_UPVOTE_BUCKET_FLOOR = 7;
const FLOW_FOLDER_SAMPLE_MIN = FLOW_ITEM_COUNT + FLOW_PEER_NEWEST_COUNT;
const FLOW_FOLDER_ITEM_LIMIT = FLOW_ITEM_COUNT + FLOW_PEER_NEWEST_COUNT + FLOW_PEER_POPULAR_COUNT + 1;
const GOLDEN_WEIGHT_PRIMARY = 0.618;
const GOLDEN_WEIGHT_SECONDARY = 0.236;
const GOLDEN_WEIGHT_TERTIARY = 0.090;
const GOLDEN_WEIGHT_QUATERNARY = 0.034;
const GOLDEN_WEIGHT_REPAIR = 0.021;
const GOLDEN_RATIO_RETAIN = 0.382;
const GOLDEN_RATIO_SPEND = 0.618;
const ZIPF_DEFAULT_EXPONENT = 1.0;
const HARVEST_AGENT = 'NOSIGNUP.FUN/1.0 local hourly harvester';
const OLLAMA_MODEL = 'qwen2.5:0.5b-instruct';
const OLLAMA_URL = 'http://127.0.0.1:11434';
function golden_score(float $primary, float $secondary = 0.0, float $tertiary = 0.0, float $quaternary = 0.0, float $repair = 0.0): float {
return ($primary * GOLDEN_WEIGHT_PRIMARY)
+ ($secondary * GOLDEN_WEIGHT_SECONDARY)
+ ($tertiary * GOLDEN_WEIGHT_TERTIARY)
+ ($quaternary * GOLDEN_WEIGHT_QUATERNARY)
+ ($repair * GOLDEN_WEIGHT_REPAIR);
}
function zipf_weight(int $rank, float $exponent = ZIPF_DEFAULT_EXPONENT): float {
$rank = max(1, $rank);
$exponent = max(0.15, min(2.5, $exponent));
return 1.0 / pow($rank, $exponent);
}
function zipf_rank_bonus(int $rank, float $scale = 1.0, float $exponent = ZIPF_DEFAULT_EXPONENT): float {
if ($rank <= 0) return 0.0;
return max(0.0, $scale) * zipf_weight($rank, $exponent);
}
function mirror_content_seed(string $purpose = ''): string {
$host = strtolower((string)($_SERVER['HTTP_HOST'] ?? $_SERVER['SERVER_NAME'] ?? php_uname('n')));
$deployed = (string)@filemtime(__FILE__);
$epoch = function_exists('crawl_ecology_epoch') ? (string)crawl_ecology_epoch() : (string)floor(time() / max(1, TTL_DAYS * 86400));
return substr(hash('sha256', source_hash() . '|' . $host . '|' . $deployed . '|' . $epoch . '|' . $purpose), 0, 16);
}
/** Prefer existing legacy dir; else data/fun_runtime (ensures data/.htaccess deny). */
function fun_default_runtime_dir(): string {
static $resolved = null;
if (is_string($resolved)) return $resolved;
$legacy = __DIR__ . DIRECTORY_SEPARATOR . 'nosignup_fun_runtime';
if (is_dir($legacy)) {
$resolved = $legacy;
return $resolved;
}
if (function_exists('nsp_data_dir')) nsp_data_dir();
$resolved = __DIR__ . DIRECTORY_SEPARATOR . 'data' . DIRECTORY_SEPARATOR . 'fun_runtime';
return $resolved;
}
$RUNTIME_DIR = fun_default_runtime_dir();
$MEDIA_DIR = $RUNTIME_DIR . DIRECTORY_SEPARATOR . 'media';
$CATALOG_FILE = $RUNTIME_DIR . DIRECTORY_SEPARATOR . 'catalog.json';
$HARVEST_STATE_FILE = $RUNTIME_DIR . DIRECTORY_SEPARATOR . 'harvest_state.txt';
$HARVEST_LOG_FILE = $RUNTIME_DIR . DIRECTORY_SEPARATOR . 'harvest.log';
$AI_STATE_FILE = $RUNTIME_DIR . DIRECTORY_SEPARATOR . 'ai_state.txt';
$AI_PROPOSAL_FILE = $RUNTIME_DIR . DIRECTORY_SEPARATOR . 'ai' . DIRECTORY_SEPARATOR . 'proposals.txt';
$MAINTENANCE_STATE_FILE = $RUNTIME_DIR . DIRECTORY_SEPARATOR . 'maintenance_state.txt';
$SOURCE_REGISTRY_FILE = $RUNTIME_DIR . DIRECTORY_SEPARATOR . 'source_registry.txt';
$BUCKET_REGISTRY_FILE = $RUNTIME_DIR . DIRECTORY_SEPARATOR . 'bucket_registry.txt';
$USER_HARVEST_FILE = $RUNTIME_DIR . DIRECTORY_SEPARATOR . 'user_harvest.txt';
$VECTOR_PAGES_FILE = $RUNTIME_DIR . DIRECTORY_SEPARATOR . 'vector_pages.txt';
$MAINTENANCE_LOCK_FILE = $RUNTIME_DIR . DIRECTORY_SEPARATOR . 'maintenance.lock';
$CRAWL_QUEUE_FILE = $RUNTIME_DIR . DIRECTORY_SEPARATOR . 'crawl_queue.txt';
$CRAWL_QUEUE_STATE_FILE = $RUNTIME_DIR . DIRECTORY_SEPARATOR . 'crawl_queue_state.txt';
$CRAWL_QUEUE_LOCK_FILE = $RUNTIME_DIR . DIRECTORY_SEPARATOR . 'crawl_queue.lock';
$TXT_SHARD_DIR = $RUNTIME_DIR . DIRECTORY_SEPARATOR . 'txt';
$KYC_NODE_DIR = $RUNTIME_DIR . DIRECTORY_SEPARATOR . 'kyc';
function h($value): string {
return htmlspecialchars((string)$value, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
}
function request_prompt_text(): string {
$raw = $_GET['tags'] ?? ($_GET['q'] ?? ($_GET['prompt'] ?? ''));
$raw = trim(substr((string)$raw, 0, 160));
/* Placeholder decoys only — never treat label text as a real harvest/serve topic. */
$decoy = strtolower(preg_replace('/\s+/', ' ', $raw) ?? '');
if ($decoy === '' || $decoy === 'prompt' || str_starts_with($decoy, 'prompt topic')) {
return '';
}
return $raw;
}
function current_app_url(): string {
$host = (string)($_SERVER['HTTP_HOST'] ?? '');
$script = (string)($_SERVER['SCRIPT_NAME'] ?? 'index.php');
if ($host === '') return 'index.php';
$https = (!empty($_SERVER['HTTPS']) && strtolower((string)$_SERVER['HTTPS']) !== 'off') || ((int)($_SERVER['SERVER_PORT'] ?? 0) === 443);
return ($https ? 'https://' : 'http://') . $host . $script;
}
function harvest_bookmarklet(): string {
$target = current_app_url() . '?harvest=';
return 'javascript:(()=>{location.href=' . json_encode($target, JSON_UNESCAPED_SLASHES) . '+encodeURIComponent(location.href)})()';
}
function source_hash(): string {
$s = (string)@file_get_contents(__FILE__);
if (substr($s, 0, 3) === "\xEF\xBB\xBF") $s = substr($s, 3);
$s = str_replace(["\r\n", "\r"], "\n", $s);
$s = preg_replace('/[ \t]+\n/', "\n", $s);
return hash('sha256', rtrim($s, "\n") . "\n");
}
$SOURCE_HASH = source_hash();
function render_source(string $hash): void {
$source = (string)@file_get_contents(__FILE__);
header('Content-Type: text/plain; charset=utf-8');
header('Content-Disposition: attachment; filename="index.php"');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Expose-Headers: X-NSF-Source-SHA256, X-NSF-Parity-SHA256');
header('X-NSF-Source-SHA256: ' . hash('sha256', $source));
header('X-NSF-Parity-SHA256: ' . $hash);
header('Content-Length: ' . strlen($source));
echo $source;
}
function now_iso(): string {
return gmdate('Y-m-d\TH:i:s\Z');
}
function runtime_ensure(string $dir): bool {
return is_dir($dir) || @mkdir($dir, 0755, true);
}
function atomic_replace_file(string $tmp, string $file): bool {
if (!is_file($tmp)) return false;
if (@rename($tmp, $file)) return true;
@unlink($file);
if (@rename($tmp, $file)) return true;
@unlink($tmp);
return false;
}
function node_metric_ip(): string {
$ip = trim((string)($_SERVER['REMOTE_ADDR'] ?? '0.0.0.0'));
return $ip !== '' ? $ip : '0.0.0.0';
}
function node_metric_node_id(string $ip): string {
return sprintf('%08x', crc32($ip));
}
function node_metric_dir_for_ip(string $ip): string {
$base = (string)($GLOBALS['KYC_NODE_DIR'] ?? (fun_default_runtime_dir() . DIRECTORY_SEPARATOR . 'kyc'));
return $base . DIRECTORY_SEPARATOR . node_metric_node_id($ip);
}
function node_metric_clean(string $value, int $max = NODE_METRIC_MAX_FIELD_CHARS): string {
$value = preg_replace('/[\x00-\x1F\x7F\t\r\n=]+/', ' ', $value) ?? '';
$value = trim(preg_replace('/\s+/', ' ', $value) ?? '');
return substr($value, 0, max(1, $max));
}
function node_metric_lazy_expire(string $dir): void {
$file = $dir . DIRECTORY_SEPARATOR . 'metrics.log';
if (is_file($file) && (time() - (int)@filemtime($file)) > NODE_METRIC_TTL_DAYS * 86400) {
@unlink($file);
}
if (is_dir($dir)) {
$left = @scandir($dir);
if (is_array($left) && count($left) <= 2) @rmdir($dir);
}
}
function node_metric_daily_file(?int $time = null): string {
$base = (string)($GLOBALS['KYC_NODE_DIR'] ?? (fun_default_runtime_dir() . DIRECTORY_SEPARATOR . 'kyc'));
$day = gmdate('Y-m-d', $time ?? time());
return $base . DIRECTORY_SEPARATOR . 'daily' . DIRECTORY_SEPARATOR . $day . '.log';
}
function node_metric_daily_expire(): void {
$dir = dirname(node_metric_daily_file());
if (!is_dir($dir)) return;
foreach (glob($dir . DIRECTORY_SEPARATOR . '*.log') ?: [] as $file) {
if (is_file($file) && (time() - (int)@filemtime($file)) > NODE_METRIC_TTL_DAYS * 86400) @unlink($file);
}
}
function node_metric_parse_kv(string $line): array {
$out = [];
foreach (explode("\t", trim($line)) as $part) {
$eq = strpos($part, '=');
if ($eq === false) continue;
$key = preg_replace('/[^a-zA-Z0-9_\-]/', '', substr($part, 0, $eq)) ?? '';
if ($key !== '') $out[$key] = substr($part, $eq + 1);
}
return $out;
}
function node_metric_daily_update(string $ip, string $event, array $fields, int $lineBytes): void {
$file = node_metric_daily_file();
$dir = dirname($file);
if (!runtime_ensure($dir)) return;
node_metric_daily_expire();
$node = node_metric_node_id($ip);
$day = gmdate('Y-m-d');
$now = time();
$rows = [];
$found = false;
foreach (@file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) ?: [] as $line) {
$row = node_metric_parse_kv((string)$line);
if (($row['node'] ?? '') !== $node) {
$rows[] = (string)$line;
continue;
}
$found = true;
$row['day'] = $day;
$row['node'] = $node;
$row['ip'] = node_metric_clean($ip, 64);
$row['first'] = (string)max(1, (int)($row['first'] ?? $now));
$row['last'] = (string)$now;
$row['events'] = (string)(max(0, (int)($row['events'] ?? 0)) + 1);
$row['bytes'] = (string)(max(0, (int)($row['bytes'] ?? 0)) + max(0, $lineBytes));
$row['last_event'] = $event;
foreach (['pull','vote','comment','user_harvest','user_harvest_dry','broken_media','share','mirror'] as $counter) {
if ($event === $counter) $row[$counter] = (string)(max(0, (int)($row[$counter] ?? 0)) + 1);
}
foreach (['ok','side','nsfw','branch','item','vote','host'] as $key) {
if (array_key_exists($key, $fields)) $row['last_' . $key] = node_metric_clean((string)$fields[$key], 80);
}
$parts = [];
foreach ($row as $key => $value) $parts[] = $key . '=' . node_metric_clean((string)$value, 180);
$rows[] = implode("\t", $parts);
}
if (!$found) {
$row = [
'day' => $day,
'node' => $node,
'ip' => node_metric_clean($ip, 64),
'first' => (string)$now,
'last' => (string)$now,
'events' => '1',
'bytes' => (string)max(0, $lineBytes),
'last_event' => $event,
];
$row[$event] = '1';
foreach (['ok','side','nsfw','branch','item','vote','host'] as $key) {
if (array_key_exists($key, $fields)) $row['last_' . $key] = node_metric_clean((string)$fields[$key], 80);
}
$parts = [];
foreach ($row as $key => $value) $parts[] = $key . '=' . node_metric_clean((string)$value, 180);
$rows[] = implode("\t", $parts);
}
$tmp = $file . '.tmp';
if (@file_put_contents($tmp, implode("\n", $rows) . "\n", LOCK_EX) !== false) {
atomic_replace_file($tmp, $file);
}
}
function node_metric_record(string $event, array $fields = []): bool {
$event = node_metric_clean($event, 40);
if ($event === '') return false;
$ip = node_metric_ip();
$dir = node_metric_dir_for_ip($ip);
if (!runtime_ensure($dir)) return false;
node_metric_lazy_expire($dir);
if (!runtime_ensure($dir)) return false;
$fields = array_merge([
'method' => (string)($_SERVER['REQUEST_METHOD'] ?? ''),
'action' => (string)($_GET['action'] ?? ''),
'route' => isset($_GET['side']) ? 'side' : ((string)($_GET['action'] ?? 'top')),
], $fields);
ksort($fields);
$parts = [time(), 'ip=' . node_metric_clean($ip, 64), 'event=' . $event];
foreach ($fields as $key => $value) {
if ($value === null || $value === '') continue;
$key = preg_replace('/[^a-zA-Z0-9_\-]/', '', (string)$key) ?? '';
if ($key === '') continue;
if (is_bool($value)) $value = $value ? '1' : '0';
if (is_array($value)) $value = implode(',', array_slice(array_map('strval', $value), 0, 8));
$parts[] = $key . '=' . node_metric_clean((string)$value);
}
$line = implode("\t", $parts) . "\n";
$ok = @file_put_contents($dir . DIRECTORY_SEPARATOR . 'metrics.log', $line, FILE_APPEND | LOCK_EX) !== false;
if ($ok) node_metric_daily_update($ip, $event, $fields, strlen($line));
return $ok;
}
function node_metric_status(): array {
$base = (string)($GLOBALS['KYC_NODE_DIR'] ?? (fun_default_runtime_dir() . DIRECTORY_SEPARATOR . 'kyc'));
$now = time();
$nodes = 0;
$active = 0;
$latest = 0;
$samples = [];
$dailyFile = node_metric_daily_file();
$dailyLines = is_file($dailyFile) ? count(@file($dailyFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) ?: []) : 0;
foreach (glob($base . DIRECTORY_SEPARATOR . '*', GLOB_ONLYDIR) ?: [] as $dir) {
if (basename((string)$dir) === 'daily') continue;
node_metric_lazy_expire((string)$dir);
$file = (string)$dir . DIRECTORY_SEPARATOR . 'metrics.log';
if (!is_file($file)) continue;
$nodes++;
$mt = (int)@filemtime($file);
if ($mt > 0 && ($now - $mt) <= NODE_METRIC_TTL_DAYS * 86400) $active++;
$latest = max($latest, $mt);
if (count($samples) < NODE_METRIC_STATUS_SAMPLE) {
$samples[] = [
'node' => basename((string)$dir),
'updated_at' => $mt > 0 ? gmdate('Y-m-d\TH:i:s\Z', $mt) : '',
'bytes' => (int)@filesize($file),
];
}
}
return [
'success' => 1,
'schema' => 'nosignup.fun.node-metrics.v1',
'ttl_days' => NODE_METRIC_TTL_DAYS,
'storage' => 'runtime/kyc/{crc32(REMOTE_ADDR)}/metrics.log plus kyc/daily/YYYY-MM-DD.log',
'retention' => 'lazy-expired on touch/status',
'records' => 'verbose high-intent events plus one aggregate daily line per node; no cookies/sessions/fingerprint files',
'nodes' => $nodes,
'active_nodes' => $active,
'daily_nodes_today' => $dailyLines,
'daily_file_today' => str_replace($base . DIRECTORY_SEPARATOR, 'kyc/', $dailyFile),
'latest_iso' => $latest > 0 ? gmdate('Y-m-d\TH:i:s\Z', $latest) : '',
'samples' => $samples,
];
}
function data_mass_for_path(string $path, bool $recursive = true, int $limit = DATA_MASS_SCAN_LIMIT): array {
$out = ['exists' => is_file($path) || is_dir($path), 'files' => 0, 'bytes' => 0, 'max_bytes' => 0, 'truncated' => 0];
if (!$out['exists']) {
$out['mean_bytes'] = 0;
return $out;
}
if (is_file($path)) {
$bytes = (int)@filesize($path);
return ['exists' => true, 'files' => 1, 'bytes' => $bytes, 'max_bytes' => $bytes, 'mean_bytes' => $bytes, 'truncated' => 0];
}
$stack = [$path];
while ($stack) {
$dir = array_pop($stack);
$entries = @scandir((string)$dir);
if (!is_array($entries)) continue;
foreach ($entries as $entry) {
if ($entry === '.' || $entry === '..') continue;
$full = (string)$dir . DIRECTORY_SEPARATOR . $entry;
if (is_dir($full)) {
if ($recursive) $stack[] = $full;
continue;
}
if (!is_file($full)) continue;
$bytes = (int)@filesize($full);
$out['files']++;
$out['bytes'] += $bytes;
if ($bytes > $out['max_bytes']) $out['max_bytes'] = $bytes;
if ($out['files'] >= $limit) {
$out['truncated'] = 1;
$stack = [];
break;
}
}
}
$out['mean_bytes'] = $out['files'] > 0 ? (int)round($out['bytes'] / $out['files']) : 0;
return $out;
}
function data_mass_status(): array {
$runtime = (string)($GLOBALS['RUNTIME_DIR'] ?? (fun_default_runtime_dir()));
$shardCounts = txt_shard_count_summary();
$types = [
'source_php' => data_mass_for_path(__FILE__, false, 1),
'txt_item_shards' => data_mass_for_path((string)($GLOBALS['TXT_SHARD_DIR'] ?? ($runtime . DIRECTORY_SEPARATOR . 'txt'))),
'media_derivatives' => data_mass_for_path((string)($GLOBALS['MEDIA_DIR'] ?? ($runtime . DIRECTORY_SEPARATOR . 'media'))),
'kyc_node_metrics' => data_mass_for_path((string)($GLOBALS['KYC_NODE_DIR'] ?? ($runtime . DIRECTORY_SEPARATOR . 'kyc'))),
'cold_catalog_seed' => data_mass_for_path((string)($GLOBALS['CATALOG_FILE'] ?? ($runtime . DIRECTORY_SEPARATOR . 'catalog.json')), false, 1),
'harvest_log' => data_mass_for_path((string)($GLOBALS['HARVEST_LOG_FILE'] ?? ($runtime . DIRECTORY_SEPARATOR . 'harvest.log')), false, 1),
'crawl_queue' => data_mass_for_path((string)($GLOBALS['CRAWL_QUEUE_FILE'] ?? ($runtime . DIRECTORY_SEPARATOR . 'crawl_queue.txt')), false, 1),
];
$stateBytes = 0;
$stateFiles = 0;
$stateMax = 0;
foreach ([
'HARVEST_STATE_FILE', 'AI_STATE_FILE', 'MAINTENANCE_STATE_FILE',
'SOURCE_REGISTRY_FILE', 'BUCKET_REGISTRY_FILE', 'USER_HARVEST_FILE',
'VECTOR_PAGES_FILE', 'CRAWL_QUEUE_STATE_FILE',
] as $key) {
$path = (string)($GLOBALS[$key] ?? '');
if ($path === '') continue;
$m = data_mass_for_path($path, false, 1);
$stateFiles += (int)$m['files'];
$stateBytes += (int)$m['bytes'];
$stateMax = max($stateMax, (int)$m['max_bytes']);
}
$types['txt_state_ledgers'] = [
'exists' => $stateFiles > 0,
'files' => $stateFiles,
'bytes' => $stateBytes,
'max_bytes' => $stateMax,
'mean_bytes' => $stateFiles > 0 ? (int)round($stateBytes / $stateFiles) : 0,
'truncated' => 0,
];
$runtimeMass = data_mass_for_path($runtime);
$diskTotal = (int)@disk_total_space($runtime);
$diskFree = (int)@disk_free_space($runtime);
$pressure = [];
foreach ($types as $name => $m) {
$pressure[] = ['type' => $name, 'bytes' => (int)$m['bytes'], 'files' => (int)$m['files']];
}
usort($pressure, fn($a, $b) => ((int)$b['bytes'] <=> (int)$a['bytes']) ?: ((int)$b['files'] <=> (int)$a['files']));
return [
'success' => 1,
'schema' => 'nosignup.fun.data-mass.v1',
'app_version' => APP_VERSION,
'scan_limit' => DATA_MASS_SCAN_LIMIT,
'policy' => 'explicit status only; count plus byte amplitude are optimization signals, not passive tracking',
'types' => $types,
'runtime_total' => $runtimeMass,
'capacity' => [
'disk_total_bytes' => $diskTotal,
'disk_free_bytes' => $diskFree,
'disk_free_percent' => $diskTotal > 0 ? round(($diskFree / $diskTotal) * 100, 4) : null,
'runtime_percent_of_total' => $diskTotal > 0 ? round(((int)$runtimeMass['bytes'] / $diskTotal) * 100, 6) : null,
'runtime_percent_of_free' => $diskFree > 0 ? round(((int)$runtimeMass['bytes'] / $diskFree) * 100, 6) : null,
],
'pressure_order' => $pressure,
'txt_shard_items' => (int)($shardCounts['total'] ?? 0),
'txt_branch_counts' => (array)($shardCounts['branches'] ?? []),
'node_metrics' => node_metric_status(),
];
}
function legacy_json_path(string $file): string {
return preg_match('/\.txt$/i', $file) ? preg_replace('/\.txt$/i', '.json', $file) : $file;
}
function state_txt_path(string $file): string {
return preg_match('/\.json$/i', $file) ? preg_replace('/\.json$/i', '.txt', $file) : $file;
}
function decode_state_payload(string $raw, array $fallback = []): array {
if (substr($raw, 0, 3) === "\xEF\xBB\xBF") $raw = substr($raw, 3);
$lines = preg_split('/\R/', $raw) ?: [];
foreach ($lines as $line) {
if (strncmp($line, 'state ', 6) === 0) {
$data = json_decode(substr($line, 6), true);
return is_array($data) ? $data : $fallback;
}
}
$data = json_decode($raw, true);
return is_array($data) ? $data : $fallback;
}
function read_json_file(string $file, array $fallback = []): array {
$txt = state_txt_path($file);
if (is_file($txt)) return decode_state_payload((string)@file_get_contents($txt), $fallback);
$legacy = legacy_json_path($file);
if (is_file($legacy)) return decode_state_payload((string)@file_get_contents($legacy), $fallback);
return $fallback;
}
function write_json_file(string $file, array $data): bool {
$file = state_txt_path($file);
$dir = dirname($file);
if (!runtime_ensure($dir)) return false;
$tmp = $file . '.tmp';
$json = json_encode($data, JSON_UNESCAPED_SLASHES | JSON_INVALID_UTF8_SUBSTITUTE);
if ($json === false) return false;
$body = "NOSIGNUP.FUN STATE TXT v1\nstate " . $json . "\n";
if (@file_put_contents($tmp, $body, LOCK_EX) === false) return false;
return atomic_replace_file($tmp, $file);
}
function migrate_legacy_state_file(string $file): void {
$txt = state_txt_path($file);
if (is_file($txt)) return;
$legacy = legacy_json_path($file);
if ($legacy === $txt || !is_file($legacy)) return;
$data = decode_state_payload((string)@file_get_contents($legacy), []);
if ($data) write_json_file($file, $data);
}
function migrate_runtime_state_files(array $files): void {
foreach ($files as $file) migrate_legacy_state_file((string)$file);
}
migrate_runtime_state_files([
$HARVEST_STATE_FILE,
$AI_STATE_FILE,
$MAINTENANCE_STATE_FILE,
$SOURCE_REGISTRY_FILE,
$BUCKET_REGISTRY_FILE,
$USER_HARVEST_FILE,
$VECTOR_PAGES_FILE,
$CRAWL_QUEUE_STATE_FILE,
]);
function txt_branch_for_nsfw(string $nsfw): string {
return $nsfw === '2' ? 'NSFW ONLY' : ($nsfw === '1' ? 'NSFW ON' : 'NSFW OFF');
}
function txt_branch_names_for_item(array $item): array {
$item = normalize_item_taxonomy($item);
$intensity = function_exists('item_intensity_honest') ? item_intensity_honest($item) : (string)($item['intensity'] ?? 'safe');
$medium = item_medium($item);
$type = (string)($item['type'] ?? '');
if ($medium === 'H' || str_contains($type, 'parameter') || str_contains($type, 'vector')) {
/* H/inoc: OFF+ON always; ONLY only if honestly nsfw */
return $intensity === 'nsfw' ? ['NSFW OFF', 'NSFW ON', 'NSFW ONLY'] : ['NSFW OFF', 'NSFW ON'];
}
if ($intensity === 'nsfw') return ['NSFW ON', 'NSFW ONLY'];
if ($intensity === 'mixed') return ['NSFW ON'];
return ['NSFW OFF', 'NSFW ON'];
}
function txt_slug(string $value, string $fallback = 'bucket'): string {
$value = strtolower(trim(preg_replace('/\s+/', '-', $value) ?? ''));
$value = preg_replace('/[^a-z0-9_\-]+/', '-', $value) ?? '';
$value = trim($value, '-_');
if ($value === '') $value = $fallback;
return substr($value, 0, 84);
}
function txt_prompt_bucket(string $prompt): string {
$slug = txt_slug($prompt, 'prompt');
return 'prompt_' . substr(hash('sha256', strtolower(trim($prompt))), 0, 8) . '_' . $slug;
}
function txt_bucket_dir_for_item(array $item): string {
$bucket = (string)($item['_flow_folder_key'] ?? '');
if ($bucket === '') {
$flow = item_flow_folder($item, item_bucket($item));
$bucket = (string)($flow['key'] ?? item_bucket($item));
}
return txt_slug($bucket, 'bucket');
}
function txt_base_dir(): string {
return (string)($GLOBALS['TXT_SHARD_DIR'] ?? (fun_default_runtime_dir() . DIRECTORY_SEPARATOR . 'txt'));
}
function txt_branch_dir(string $branch): string {
return txt_base_dir() . DIRECTORY_SEPARATOR . $branch;
}
function txt_item_expiry(array $item): int {
$created = strtotime((string)($item['created_at'] ?? $item['harvested_at'] ?? $item['user_harvested_at'] ?? now_iso()));
if ($created <= 0) $created = time();
$life = max(1, (int)($item['lifespan'] ?? TTL_DAYS));
if (item_medium($item) === 'H' && (string)($item['source'] ?? '') !== '') $life = max($life, TTL_DAYS * 4);
return $created + ($life * 86400);
}
function txt_item_filename(array $item, array $meta = []): string {
$id = clean_item_id((string)($item['id'] ?? item_id($item)));
if ($id === '') $id = substr(hash('sha256', json_encode($item, JSON_UNESCAPED_SLASHES)), 0, 12);
$up = max(0, (int)($meta['up'] ?? $item['upvotes'] ?? 0));
$down = max(0, (int)($meta['down'] ?? $item['downvotes'] ?? 0));
$comments = max(0, (int)($meta['comments'] ?? $item['_comment_count'] ?? 0));
$graduations = max(0, (int)($meta['graduations'] ?? $item['graduations'] ?? 0));
$expiry = max(time() + 86400, (int)($meta['expiry'] ?? txt_item_expiry($item)));
$rank = max(0, min(999999, (int)($meta['rank'] ?? $item['rank_hint'] ?? source_popularity_prior($item) * 100)));
return $id . '.u' . $up . '.d' . $down . '.c' . $comments . '.g' . $graduations . '.x' . $expiry . '.r' . $rank . '.txt';
}
function txt_parse_item_filename(string $path): ?array {
$base = basename($path);
if (!preg_match('/^([A-Za-z0-9_\-]{6,64})\.u(\d+)\.d(\d+)\.c(\d+)\.g(\d+)\.x(\d+)\.r(\d+)\.txt$/', $base, $m)) return null;
return [
'id' => $m[1],
'up' => (int)$m[2],
'down' => (int)$m[3],
'comments' => (int)$m[4],
'graduations' => (int)$m[5],
'expiry' => (int)$m[6],
'rank' => (int)$m[7],
];
}
function txt_item_body(array $item): string {
$item = normalize_item_taxonomy($item);
$item['id'] = clean_item_id((string)($item['id'] ?? item_id($item)));
return "NOSIGNUP.FUN ITEM TXT v1\n" .
'item ' . json_encode($item, JSON_UNESCAPED_SLASHES | JSON_INVALID_UTF8_SUBSTITUTE) . "\n";
}
function txt_read_item_file(string $path): ?array {
$meta = txt_parse_item_filename($path);
if (!$meta) return null;
if ($meta['expiry'] > 0 && $meta['expiry'] < time()) {
@unlink($path);
return null;
}
$raw = (string)@file_get_contents($path);
if ($raw === '') return null;
$item = null;
$comments = [];
foreach (preg_split('/\R/', $raw) ?: [] as $line) {
if (str_starts_with($line, 'item ')) {
$decoded = json_decode(substr($line, 5), true);
if (is_array($decoded)) $item = $decoded;
} elseif (str_starts_with($line, 'comment ')) {
$decoded = json_decode(substr($line, 8), true);
if (is_array($decoded)) {
$clean = normalize_comment_entry($decoded);
if ($clean) $comments[] = $clean;
}
}
}
if (!is_array($item)) return null;
$item = normalize_item_taxonomy($item);
$item['id'] = clean_item_id((string)($item['id'] ?? $meta['id']));
$item['upvotes'] = $meta['up'];
$item['downvotes'] = $meta['down'];
$item['rank_hint'] = max((int)($item['rank_hint'] ?? 0), $meta['rank']);
$item['_txt_path'] = $path;
$item['_txt_expiry'] = $meta['expiry'];
$txtBucket = basename(dirname($path));
if ($txtBucket !== '') {
$item['_flow_folder_key'] = $txtBucket;
$item['_flow_folder_title'] = str_replace(['_', '-'], ' ', preg_replace('/^prompt_[a-f0-9]{8}_/', '', $txtBucket) ?? $txtBucket);
}
$item['_comments'] = ['entries' => array_values(array_slice($comments, -MAX_COMMENTS_PER_ITEM)), 'updated_at' => ''];
$item['_comment_count'] = count($comments);
return $item;
}
function txt_item_paths(string $id = '', string $branch = '', string $bucket = ''): array {
$root = txt_base_dir();
if (!is_dir($root)) return [];
$branches = $branch !== '' ? [$branch] : ['NSFW OFF', 'NSFW ON', 'NSFW ONLY'];
$out = [];
foreach ($branches as $b) {
$bd = txt_branch_dir($b);
if (!is_dir($bd)) continue;
$bucketDirs = $bucket !== '' ? [$bd . DIRECTORY_SEPARATOR . txt_slug($bucket)] : (glob($bd . DIRECTORY_SEPARATOR . '*', GLOB_ONLYDIR) ?: []);
foreach ($bucketDirs as $dir) {
if (!is_dir($dir)) continue;
$pattern = $id !== '' ? clean_item_id($id) . '.u*.d*.c*.g*.x*.r*.txt' : '*.txt';
foreach (glob($dir . DIRECTORY_SEPARATOR . $pattern) ?: [] as $path) $out[$path] = $path;
}
}
return array_values($out);
}
function txt_has_any_items(): bool {
foreach (['NSFW OFF', 'NSFW ON', 'NSFW ONLY'] as $branch) {
foreach (txt_branch_bucket_dirs($branch) as $dir) {
$hit = glob($dir . DIRECTORY_SEPARATOR . '*.txt') ?: [];
if ($hit) return true;
}
}
return false;
}
function txt_branch_bucket_dirs(string $branch): array {
$dir = txt_branch_dir($branch);
if (!is_dir($dir)) return [];
$dirs = glob($dir . DIRECTORY_SEPARATOR . '*', GLOB_ONLYDIR) ?: [];
sort($dirs, SORT_STRING);
return $dirs;
}
function txt_folder_bucket_id(string $dir): string {
$name = strtolower(basename($dir));
if (preg_match('/^([lrn][mvh])(?:__|$)/', $name, $m)) return strtoupper($m[1]);
return '';
}
function txt_folder_file_count(string $dir): int {
return count(glob($dir . DIRECTORY_SEPARATOR . '*.txt') ?: []);
}
function txt_ranked_folder_paths(string $dir, int $limit = 0): array {
$files = glob($dir . DIRECTORY_SEPARATOR . '*.txt') ?: [];
if (!$files) return [];
$rows = [];
foreach ($files as $path) {
$meta = txt_parse_item_filename($path) ?: ['up' => 0, 'down' => 0, 'comments' => 0, 'rank' => 0, 'expiry' => 0];
$fresh = max(0, (int)($meta['expiry'] ?? 0) - time()) / 86400;
$rows[] = [
'path' => $path,
'score' => golden_score(
max(0.0, (float)($meta['up'] ?? 0) - (float)($meta['down'] ?? 0)),
min(10.0, (float)($meta['comments'] ?? 0)),
min(10.0, $fresh / max(1, TTL_DAYS) * 10.0),
zipf_rank_bonus((int)($meta['rank'] ?? 0), 2.0),
(float)@filemtime($path) / 1000000000.0
),
];
}
usort($rows, fn($a, $b) => ((float)$b['score'] <=> (float)$a['score']) ?: strcmp((string)$a['path'], (string)$b['path']));
if ($limit <= 0 || count($rows) <= $limit) return array_map(fn($row) => (string)$row['path'], $rows);
$certain = max(1, min($limit, (int)ceil($limit * GOLDEN_WEIGHT_PRIMARY)));
$picked = array_slice($rows, 0, $certain);
$rest = array_slice($rows, $certain);
shuffle($rest);
foreach ($rest as $row) {
if (count($picked) >= $limit) break;
$picked[] = $row;
}
return array_map(fn($row) => (string)$row['path'], $picked);
}
function txt_folder_items(string $dir, int $limit = 0): array {
$items = [];
foreach (txt_ranked_folder_paths($dir, $limit) as $path) {
$item = txt_read_item_file($path);
if ($item) $items[] = $item;
}
return $items;
}
function txt_catalog_items(string $branch = '', string $bucket = '', int $limit = 0): array {
$items = [];
$seen = [];
foreach (txt_item_paths('', $branch, $bucket) as $path) {
$item = txt_read_item_file($path);
if (!$item) continue;
$id = (string)($item['id'] ?? '');
if ($id === '' || isset($seen[$id])) continue;
$seen[$id] = true;
$items[] = $item;
if ($limit > 0 && count($items) >= $limit) break;
}
return $items;
}
function txt_shard_count_summary(): array {
$branches = ['NSFW OFF' => 0, 'NSFW ON' => 0, 'NSFW ONLY' => 0];
$total = 0;
$commentIds = [];
foreach (array_keys($branches) as $branch) {
foreach (txt_branch_bucket_dirs($branch) as $dir) {
foreach (glob($dir . DIRECTORY_SEPARATOR . '*.txt') ?: [] as $path) {
$branches[$branch]++;
$total++;
$meta = txt_parse_item_filename((string)$path);
if ($meta && (int)($meta['comments'] ?? 0) > 0) $commentIds[(string)$meta['id']] = true;
}
}
}
return ['total' => $total, 'branches' => $branches, 'comment_items' => count($commentIds)];
}
function txt_total_items(): int {
return (int)txt_shard_count_summary()['total'];
}
function txt_bucket_runtime_stats(int $folderLimit = 512): array {
$stats = [];
$folders = 0;
$limited = false;
foreach (['NSFW OFF', 'NSFW ON', 'NSFW ONLY'] as $branch) {
foreach (txt_branch_bucket_dirs($branch) as $dir) {
$folders++;
if ($folders > $folderLimit) {
$limited = true;
break 2;
}
$bucket = txt_folder_bucket_id($dir);
if ($bucket === '') continue;
if (!isset($stats[$bucket])) $stats[$bucket] = ['items' => 0, 'up' => 0, 'down' => 0, 'comments' => 0];
foreach (glob($dir . DIRECTORY_SEPARATOR . '*.txt') ?: [] as $path) {
$meta = txt_parse_item_filename((string)$path) ?: [];
$stats[$bucket]['items']++;
$stats[$bucket]['up'] += (int)($meta['up'] ?? 0);
$stats[$bucket]['down'] += (int)($meta['down'] ?? 0);
$stats[$bucket]['comments'] += (int)($meta['comments'] ?? 0);
}
}
}
return ['stats' => $stats, 'folders_scanned' => $folders, 'folder_limit' => $folderLimit, 'limited' => $limited ? 1 : 0];
}
function txt_store_item_refs(array $item, string $bucketOverride = '', bool $replace = false): int {
$item = normalize_item_taxonomy($item);
$item['id'] = clean_item_id((string)($item['id'] ?? item_id($item)));
if ($item['id'] === '') return 0;
$bucket = txt_slug($bucketOverride !== '' ? $bucketOverride : txt_bucket_dir_for_item($item));
$written = 0;
foreach (txt_branch_names_for_item($item) as $branch) {
$dir = txt_branch_dir($branch) . DIRECTORY_SEPARATOR . $bucket;
if (!runtime_ensure($dir)) continue;
$existing = txt_item_paths($item['id'], $branch, $bucket);
if ($existing && !$replace) continue;
foreach ($existing as $old) @unlink($old);
$file = $dir . DIRECTORY_SEPARATOR . txt_item_filename($item);
$tmp = $file . '.tmp';
if (@file_put_contents($tmp, txt_item_body($item), LOCK_EX) !== false && atomic_replace_file($tmp, $file)) $written++;
else @unlink($tmp);
}
return $written;
}
function txt_bootstrap_from_catalog(array $items): int {
if (txt_total_items() > 0) return 0;
$count = 0;
foreach ($items as $item) {
if (is_array($item)) $count += txt_store_item_refs($item);
}
return $count;
}
function txt_ensure_item_shard(string $id, string $catalogFile = '', string $vectorPagesFile = ''): bool {
$id = clean_item_id($id);
if ($id === '') return false;
if (txt_item_paths($id)) return true;
if ($catalogFile === '') return false;
$catalog = load_catalog($catalogFile, $vectorPagesFile);
$item = find_catalog_item_by_id($catalog, $id);
return $item ? txt_store_item_refs($item, '', false) > 0 : false;
}
function txt_existing_dedupe_keys(): array {
$seen = [];
foreach (txt_catalog_items() as $item) {
$key = catalog_dedupe_key($item);
if ($key !== '') $seen[$key] = true;
}
return $seen;
}
function txt_rename_with_meta(string $path, array $meta): ?string {
$old = txt_parse_item_filename($path);
if (!$old) return null;
$newMeta = array_merge($old, $meta);
$item = txt_read_item_file($path);
if (!$item) return null;
$new = dirname($path) . DIRECTORY_SEPARATOR . txt_item_filename($item, $newMeta);
if ($new === $path) return $path;
if (@rename($path, $new)) return $new;
return null;
}
function txt_comment_record(string $id): array {
$entries = [];
foreach (txt_item_paths($id) as $path) {
$item = txt_read_item_file($path);
if (!$item || !isset($item['_comments']['entries'])) continue;
foreach ((array)$item['_comments']['entries'] as $entry) {
if (is_array($entry)) $entries[json_encode($entry, JSON_UNESCAPED_SLASHES)] = $entry;
}
}
return ['entries' => array_values(array_slice(array_values($entries), -MAX_COMMENTS_PER_ITEM)), 'updated_at' => ''];
}
function txt_append_comment(string $id, string $side, string $comment): ?array {
$paths = txt_item_paths($id);
if (!$paths) return null;
$entry = [
'at' => now_iso(),
'side' => in_array($side, ['L','R','N'], true) ? $side : '',
'text' => $comment,
];
$line = 'comment ' . json_encode($entry, JSON_UNESCAPED_SLASHES | JSON_INVALID_UTF8_SUBSTITUTE) . "\n";
foreach ($paths as $path) {
$meta = txt_parse_item_filename($path);
if (!$meta) continue;
if (@file_put_contents($path, $line, FILE_APPEND | LOCK_EX) !== false) {
txt_rename_with_meta($path, ['comments' => $meta['comments'] + 1]);
}
}
return txt_comment_record($id);
}
function txt_vote_record_for_id(string $id): ?array {
$best = null;
foreach (txt_item_paths($id) as $path) {
$meta = txt_parse_item_filename($path);
if (!$meta) continue;
if ($best === null || $meta['up'] + $meta['down'] > $best['up'] + $best['down']) $best = $meta;
}
if ($best === null) return null;
return [
'up' => (int)$best['up'],
'down' => (int)$best['down'],
'delta' => (int)$best['up'] - (int)$best['down'],
'dead' => 0,
'deleted_at' => '',
'graduations' => (int)$best['graduations'],
'bucket_id' => '',
'graduated_at' => '',
'updated_at' => now_iso(),
];
}
function txt_vote_item(string $id, string $vote): ?array {
$paths = txt_item_paths($id);
if (!$paths) return null;
$updated = null;
foreach ($paths as $path) {
$meta = txt_parse_item_filename($path);
if (!$meta) continue;
if ($vote === 'upvote') $meta['up']++;
else $meta['down']++;
if ($vote === 'downvote' && $meta['down'] >= downvote_delete_threshold()) {
@unlink($path);
$updated = [
'up' => (int)$meta['up'], 'down' => (int)$meta['down'], 'delta' => (int)$meta['up'] - (int)$meta['down'],
'dead' => 1, 'deleted_at' => now_iso(), 'graduations' => (int)$meta['graduations'], 'bucket_id' => '', 'graduated_at' => '', 'updated_at' => now_iso(),
];
continue;
}
if ($vote === 'upvote' && $meta['up'] >= graduation_threshold()) {
$item = txt_read_item_file($path);
if ($item) {
$themeBucket = bucket_id_for_theme($item);
txt_store_item_refs($item, $themeBucket, false);
}
$spend = max(1, (int)ceil($meta['up'] * GOLDEN_RATIO_SPEND));
$meta['up'] = max(0, $meta['up'] - $spend);
$meta['graduations']++;
$meta['expiry'] = min(time() + 90 * 86400, max((int)($meta['expiry'] ?? time()), time()) + TTL_DAYS * 86400);
}
if (!isset($meta['expiry']) || (int)$meta['expiry'] <= 0) $meta['expiry'] = time() + TTL_DAYS * 86400;
if ($vote === 'upvote') $meta['expiry'] = (int)$meta['expiry'] + 86400;
else $meta['expiry'] = (int)$meta['expiry'] - 86400;
$meta['expiry'] = max(time() + 86400, min(time() + 90 * 86400, (int)$meta['expiry']));
$new = txt_rename_with_meta($path, $meta);
$updated = [
'up' => (int)$meta['up'], 'down' => (int)$meta['down'], 'delta' => (int)$meta['up'] - (int)$meta['down'],
'dead' => 0, 'deleted_at' => '', 'graduations' => (int)$meta['graduations'], 'bucket_id' => '', 'graduated_at' => '', 'updated_at' => now_iso(),
];
if ($new === null) $updated = null;
}
return $updated;
}
function txt_prompt_bucket_prepare(string $branch, string $prompt, array $catalog, array $votes, array $comments, array &$log): string {
$prompt = trim($prompt);
if ($prompt === '') return '';
$bucket = txt_prompt_bucket($prompt);
$tokens = token_list($prompt);
if (!$tokens) return $bucket;
/* Always re-scan — stale prompt folders must not short-circuit relevance. */
$candidates = [];
foreach (txt_branch_bucket_dirs($branch) as $folderDir) {
$base = strtolower(basename($folderDir));
if (str_starts_with($base, 'prompt_')) continue;
$folderBoost = 0;
foreach ($tokens as $tok) {
$t = (string)$tok;
if (strlen($t) < 3) continue;
/* Word boundary only — never "cat" inside "educational". */
if (preg_match('/(^|[^a-z0-9])' . preg_quote($t, '/') . '([^a-z0-9]|$)/', $base)) $folderBoost += 10;
if (preg_match('/(?:^|__)r[_-]?' . preg_quote($t, '/') . '(?:$|[^a-z])/', $base)) $folderBoost += 14;
}
foreach (txt_folder_items($folderDir, FLOW_FOLDER_ITEM_LIMIT) as $item) {
if (!flow_media_allowed($item)) continue;
$ms = match_score($item, $tokens);
$score = $ms + $folderBoost;
if ($ms <= 0 && $folderBoost <= 0) continue;
if ($ms <= 0 && $folderBoost > 0) $score = $folderBoost; /* folder name is the topic */
$candidates[] = ['score' => $score + item_selection_score($item, $votes, $comments) * 0.25, 'item' => $item];
}
}
if (!$candidates) {
foreach ($catalog as $item) {
if (!is_array($item) || !flow_media_allowed($item)) continue;
if (!in_array($branch, txt_branch_names_for_item($item), true)) continue;
$score = match_score($item, $tokens);
if ($score <= 0) continue;
$candidates[] = ['score' => $score + item_selection_score($item, $votes, $comments) * 0.25, 'item' => $item];
}
}
usort($candidates, fn($a, $b) => ((float)$b['score'] <=> (float)$a['score']) ?: strcmp((string)($a['item']['title'] ?? ''), (string)($b['item']['title'] ?? '')));
foreach (array_slice($candidates, 0, 32) as $row) txt_store_item_refs((array)$row['item'], $bucket, false);
if ($candidates) log_line($log, 'TXT prompt bucket ' . $bucket . ' filled with ' . min(32, count($candidates)) . ' match>0 refs.');
else log_line($log, 'TXT prompt bucket ' . $bucket . ' empty match — harvest queue will expand variance.');
return $bucket;
}
function txt_bounded_ranked_rows(array $rows, int $limit): array {
if (!$rows) return [];
usort($rows, fn($a, $b) => ((float)$b['score'] <=> (float)$a['score']) ?: strcmp((string)($a['id'] ?? ''), (string)($b['id'] ?? '')));
foreach ($rows as $i => &$row) $row['score'] = max(0.001, (float)$row['score']) * (1.0 + zipf_weight($i + 1));
unset($row);
if ($limit <= 0 || count($rows) <= $limit) return $rows;
$certain = max(1, min($limit, (int)ceil($limit * GOLDEN_WEIGHT_PRIMARY)));
$picked = array_slice($rows, 0, $certain);
$rest = array_slice($rows, $certain);
shuffle($rest);
foreach ($rest as $row) {
if (count($picked) >= $limit) break;
$picked[] = $row;
}
return $picked;
}
function txt_flow_catalog_from_folders(string $branch, string $promptBucket, array $registry, string $side, string $nsfw, string $prompt, array &$log): array {
$items = [];
$seen = [];
$tokens = token_list($prompt);
$eligibleWeights = eligible_bucket_weights($registry, $side, $nsfw);
$addFolder = function(string $dir, int $limit) use (&$items, &$seen): void {
foreach (txt_folder_items($dir, $limit) as $item) {
if (!is_array($item)) continue;
$id = clean_item_id((string)($item['id'] ?? item_id($item)));
if ($id === '' || isset($seen[$id])) continue;
$seen[$id] = true;
$items[] = $item;
}
};
$promptDir = $promptBucket !== '' ? txt_branch_dir($branch) . DIRECTORY_SEPARATOR . txt_slug($promptBucket) : '';
if ($promptDir !== '' && is_dir($promptDir)) {
$addFolder($promptDir, FLOW_FOLDER_ITEM_LIMIT + FLOW_ITEM_COUNT);
}
$mediaRows = [];
$textRows = [];
foreach (txt_branch_bucket_dirs($branch) as $dir) {
$name = basename($dir);
if ($promptDir !== '' && realpath($dir) === realpath($promptDir)) continue;
if (str_starts_with(strtolower($name), 'prompt_')) continue;
$bucketId = txt_folder_bucket_id($dir);
if ($bucketId === '' || !isset($eligibleWeights[$bucketId])) continue;
$count = txt_folder_file_count($dir);
if ($count <= 0) continue;
$match = 0;
if ($tokens) {
$hay = strtolower(str_replace(['_', '-'], ' ', $name));
foreach ($tokens as $token) if ($token !== '' && strpos($hay, $token) !== false) $match++;
}
$score = golden_score(
(float)$eligibleWeights[$bucketId] * 8.0,
min(12.0, (float)$count),
(float)$match * 4.0,
zipf_rank_bonus(max(1, (int)floor(1000 / max(1, $count))), 2.0),
max(0.0, (float)@filemtime($dir) / 1000000000.0)
);
$row = ['id' => $name, 'dir' => $dir, 'bucket' => $bucketId, 'score' => $score, 'count' => $count];
if (substr($bucketId, -1) === 'H') $textRows[] = $row;
else $mediaRows[] = $row;
}
/* Empty prompt: sample wider folder set for inventory entropy (not top densest only). */
$folderSampleN = $tokens ? FLOW_FOLDER_SAMPLE_MIN : max(FLOW_FOLDER_SAMPLE_MIN, min(18, count($mediaRows)));
if (!$tokens && count($mediaRows) > $folderSampleN) {
shuffle($mediaRows);
$selectedMedia = array_slice($mediaRows, 0, $folderSampleN);
} else {
$selectedMedia = txt_bounded_ranked_rows($mediaRows, $folderSampleN);
}
$selectedText = txt_bounded_ranked_rows($textRows, max(2, FLOW_PEER_NEWEST_COUNT));
foreach ($selectedMedia as $row) $addFolder((string)$row['dir'], FLOW_FOLDER_ITEM_LIMIT);
foreach ($selectedText as $row) $addFolder((string)$row['dir'], max(3, FLOW_PEER_NEWEST_COUNT + 1));
log_line($log, 'TXT folder-shard route: ' . $branch . ($promptBucket !== '' ? ' / ' . $promptBucket : '') . ' / folders=' . (count($selectedMedia) + count($selectedText) + ($promptDir !== '' && is_dir($promptDir) ? 1 : 0)) . ' / refs=' . count($items));
return $items;
}
function svg_data_url(string $svg): string {
return 'data:image/svg+xml;charset=UTF-8,' . rawurlencode($svg);
}
function brain_asset(string $side): string {
$left = $side === 'left';
$ringA = $left ? '#ff9b28' : '#43c7ff';
$ringB = $left ? '#e83a0c' : '#3fe6d4';
$hot = $left ? '#37f5e4' : '#ff7a22';
$cool = $left ? '#d9d7e2' : '#e4e3ea';
$accent = $left ? '#ff7124' : '#36e5f2';
$rotate = $left ? '-8' : '8';
return svg_data_url(<<
SVG);
}
/**
* Full single-file mascot (detail OK — ethos forbids EXTRA FILES, not detail).
* Restored from archive Fun DNA; ships inline via svg_data_url.
*/
function mascot_asset(): string {
/* Original archive Fun/2.png anime mascot (No Signup Fun sign). Single-file embed replaces crude SVG stand-in. */
static $url = null;
if ($url === null) {
$url = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAMACAYAAABSD99OAAAAw3pUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVDbDcMwCPz3FB2Blx08jvOo1A06fiFgKYl6EvjMoTOmHN/Pu7wchFKkLtp6a2CQLp2GEYXAODOCnHmCsnqrFwtOGU8WN9AWJ876NMoTh7F6MdIthfUudMnn9WEU8wD7RM73NOppxBQCpsGIb0Hruly/sB5wh0YUT7RlWzY/77LY9vZq7zDRwchgmVliAPaQwsMIW2b2RuRuHE3y+jSzhfzb00T5AQLHWVj+/syTAAABhGlDQ1BJQ0MgcHJvZmlsZQAAeJx9kT1Iw0AcxV9TpSIVB4uIiGSoTnbxC8dSxSJYKG2FVh1MLv2CJg1Jiouj4Fpw8GOx6uDirKuDqyAIfoA4OzgpukiJ/0sKLWI8OO7Hu3uPu3eA0Kgw1eyKAqpmGal4TMzmVsXAK/wYxSDCmJGYqSfSixl4jq97+Ph6F+FZ3uf+HH1K3mSATySOMt2wiDeIZzctnfM+cYiVJIX4nHjCoAsSP3JddvmNc9FhgWeGjExqnjhELBY7WO5gVjJU4mnisKJqlC9kXVY4b3FWKzXWuid/YTCvraS5TnMEcSwhgSREyKihjAosRGjVSDGRov2Yh3/Y8SfJJZOrDEaOBVShQnL84H/wu1uzMDXpJgVjQPeLbX+MAYFdoFm37e9j226eAP5n4Epr+6sNYO6T9HpbCx8B/dvAxXVbk/eAyx1g6EmXDMmR/DSFQgF4P6NvygEDt0Dvmttbax+nD0CGulq+AQ4OgfEiZa97vLuns7d/z7T6+wElh3LulZbHCgAADlVpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6OWY3OTRjNzctNjg4OC00YjY4LTk1MTctMTkyMmZmZTFkODVlIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY2NmU1ZWI1LTNhNWQtNGI5Yy04ODY2LTIyNjk0Y2JjM2Y5NCIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOmZhYWVkOTkzLWJhOWMtNDY5My1hMTViLTZlM2FiOTRlZjRjMSIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IldpbmRvd3MiCiAgIEdJTVA6VGltZVN0YW1wPSIxNzExODQwMzIyNTk0MzM2IgogICBHSU1QOlZlcnNpb249IjIuMTAuMzQiCiAgIHRpZmY6T3JpZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIgogICB4bXA6TWV0YWRhdGFEYXRlPSIyMDI0OjAzOjMwVDE5OjEyOjAwLTA0OjAwIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyNDowMzozMFQxOToxMjowMC0wNDowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjU1ZDA2ODFkLWFiMzQtNDg0Ny1iOWIyLTI5OGI5NzAwYmU3MCIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChXaW5kb3dzKSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyNC0wMy0zMFQxODo1MzoyMCIvPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo5ODVkYjUwMi1lOGI2LTQ5ZDAtOGE2ZS05YmI2MmMzNjM4ZjAiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoV2luZG93cykiCiAgICAgIHN0RXZ0OndoZW49IjIwMjQtMDMtMzBUMTk6MTI6MDIiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+3k/JLQAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAAd0SU1FB+gDHhcMAQN+o1wAACAASURBVHja7L15lGTpWd75+77vbrFH5J5ZlbVXV3VVd1f13qIlNY0AiVWCAQaGOXPGNlj2sT2MsTHGDMd4G7MYzIxszwzGYHPYDFhIQkJqdaulBtQtqVulbql6qe6qrj33jMzIWO/2ffPHdyMys7q0gBYk6z7n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Wbu1untdmQBs3kSruOEcoghwUkAgROXRUG7UroDJ605sFq84Zy0YY2kIL1G4d+cMN994A9lwSDMMUIXHg1KSIAxRUUAQRQRhSKACAhEQFUpvUgWIMMQEChvFPPbMYR55+inOrvYwKkSLkExIhIr8vEThdOjFkuxGtUbWESzf7dE443BG46zBOrtBwOdFr6PL9aar66yUyPVeGOloxKDX49Sp0wyHAyIV0Go1CVTI8vIiTz71DF9+5Bv82z/4Xb70nUc5fmGeoXMYKUlxpDhvQ0ywrtpXey2qurZfXGnvxfr2dZROiXUio0BUpL04iqrv1zX469dWyeyvFwgv2wvgpRDCTUl/SR6sWhVCkiQJE91x5ucvEEUh+/ZewcEr9z9/+9tu+1az0fisxR392Bc/s038204Atld9/cwHPiSXV1e+mmfZzyR51un3eghjUSpAa00jjiuSzubALylU64wlkIooCGlEMY0o9pt58Wg2Guu9QFUYqjhX9QBz673fcW7dFcxRVSIlyalCDooGubMWV/Tut6p0Xk4C4DdSiSzEbkuSlyib7fhAmBnta70gxFpH345YWu4xf3GeNE0I4ggjJWfn51jq9xibmqI7NeV11MOIldU1wmaT225/B7fffgfHXniBp59+BmMte3fu4YZD13Jg/37MMGN24SxoRygClIN23EBYr3qGsYRIQiEq9qy7TAO4BqpXHIA6ArBecRlwFlkK9BQYiEQW8Ljx89ui5igIlUe7KKSSdZbTihsYnWKShNtvexvCGhQUfxuk8C0mlE/6PAwceKhYKYIoQqiAxFiiTpeF/oCPfvbzHD5zmpVMI6KYXPqUTarAG/NgEcIiKdTniteP80IxSsgi8BusybHa4Jz233fuklApXiILkPU+dTHKWKaPwoEoPCIMjtxotMlZuLjAU4ef4Wtf/wZf/NpX+eI3vsY3vv0Yjxx7mrnhkJXckAJGgRaOxHqHGickFK2WumOeFALpilHDy1FoNyEBl0sAcF6Mqf6epJA0iqq+rPzrQRfW78+S1V9P3l+RBshL/Gw5likuIy42HPaZHB/n3Ow54jBi765dXLFr98n33/+eb1shfq/baj/3n/93vzLc3u23E4DttWn9xef/MvvJ97zfvuNtb/+JI4cPh3metVbXVhnvjiGln4FGbIQLZW3sr5zbdjVIr7xhywqi1WpViECJCpSPOPT9d1HIBZfaAvWZ9c3qYZdsYpdxKruce9nmPVIWgb8EdF0VPF0lWuM3WonDIqRCKa/udjFZYX5+gTMX5uilKVopVgYDTsyeZXFtDdVoYKWkM9FFhBFnzp1FRSE/87d/lne/972sLq+xa8c0Y+0uV1xxBXt276Ebd1hbXmU0GiHxUG8oFE0VEQqJtl65cHp8kn37ruTi0tKWPIoNCIBSwHo1Xw/+whmPcBQJVRnYrTMeGndFG6dCXwoIWBSWu66oCq318LAxDHpr3HzDDeydmcFmmTcLcLbyNSoNlZx1CGcR0lvhGgvIkJEx0GjxxJEjPPzVr7I48MfWRbEXvylaSM75BEOUbnYFybB+LVqrvUaD9foVopxfLz0pNgr1v2jiKGoql1UCUAS9alJAgAoClFRYB0EUgPPTFimWockZ6oxMOGwYYmNFJr1cb+ZAOz/aJqTnopjK9KFAraquf41/IF78Gn+xBEC6jdM6qhDlKe9ZeZmpnvL4xXFcBf9Xkny/3ARg89+qI1IAURDQW1vDWcvuHTPs3bnr3P13vfOIE+L/mBwbf/b9v/J3F7d3+u0EYHtdZv3K3/mF6NSZ05/Zv+/KB08cPx465xpra2uMdbvkxqCCTX7cRZQUpS2sCi5xB5NSEhRsYVv43UshPFkoimg2GrTbbdqdDlEjptny/UNPHJIbxIS20g+vw4F206b9SqqPspYpiX511ndh3VZwA3z5ZQqpUW0tRkiECtAClrIex+fP8eSxIzz9/DFOnj/P6fkLPH/qJHPLSzx55BkWV1ZpjnXIjGFhcREDHDhwgPFOl9FgQDpK6Y51ufWmW7jh2uvYu3MPnWaLVtjCaQvasnfnbt588y1cd/U1KAdz83P002RLPYXNCYCoHdc6RO7thP25tM4WD+Ntna0t+uGWS9ztC06XMV7oJpQKnY5oRCE2z5hot/mRW29GaEOI8G2AAl1xBQPQYnHWEKoA6yxpZpBhhAliVtOMz33jER47fJREKUTUxBbKggJvU6usQ0iHLIJxGZSttWjnx/i0Nd6rwlGhO0IWfW4BtnxrL8PMpvRq8BMiZaJkfdVftaX80TfW+IkC43BSEkSe/2AdpM6R4R+DXKNNrf1UtaH8+bHGJ2YVNFaOUVYWTe41JQBBwQ0puSKNgsxXOuyJzXB8we8p77+42UAqVfFEKv+h2sfN/65//nIIiesJq7uEu5ClCYPhkB3T0+zcseP8u+5657EgDP+X8U73yAf+4S9c2N7hf7DXtg7AX/P6wC/93Mpv//r/HGnLL7/t+pv/6PCZ4xOnZs9yYX6Oqalpf8PLQkLW1fYb633orTYgN3p0lwSdMmPfUHHUoEQHtFqtytHOFKYgeZ6TZV5YJ03T6nt1QtGL6Q28HA0CoLJgBTDOXaKqV8Kuznm7NKEkzjqywrbYEjCwGZEICKQiNymDZMjq3DmOnD2NdhkNJJPtMUK8dekbrr+BTqvBxMQEN15zHclan0gqkAFIQRTGyDjkuhuu54qrr2KkDf10xNLaKksry1xYnOPUqVPMLcyzOuy/Yg2FUo51I4qyPk5YZ2vjwGrfE5bSbTjHJSpSXg+hCsisAyWRQcBTzz7LxZVVZuIIi8Va4Q2bjA/8XrLVISWowOvqW6FxQhFEMaeeP85zJ06R4HBS+VFEZyuHQ2WNJ/wVcLsrxjd98C+q/03BUTjvEyCdRbtNge01rpL8ViauZVwLwxBjDKM0Zb2GL7AnIYkbjeo1+GtclzeY53jUXmM9WFbn63WYoimnRupue+W969xl5v6LyYDNRN3vpwR4yQGCQvZXG9bW1piemmRycnLujjvvPG6l+FdXTs6cfN8/+sVt0t92ArC9Xs76h7/5G/P//n/6rej6d7/7+OonPx6MsuSKZHaWfr9Pq9P23uoIbKmxXQYBQBcllNyCze9Z5sGGr9fhO+vcuvlLsaHEcbwBwu33+1V7IM+933cpu1u36L1cIvBSm7v2TESwVNVbNa9clLml1ag2vqqTwkveGiFodMbo9/tI42jGDbSBpWxEhGLX1AyrKyucHazQEAHzg1VOLMwiEURhRJonTLY6xEFImuSkWYoUiu7EOA7JIM3IdE5qNKnVHn3Aob0fn+8Tv4wBsNIEqHh3tepQFCZMtV7ypplDU0QYYQsuulBIKTwfQEqkkwgNRroC9nZo4ZhdmOPYyeNM3/hGfy6dF/gR1npnw0rr32FMjhC+j+wE5Npy+OjznD0/DyLEqYgcizGOWCkfQp0p6t91boNxRfB3zjv0bTW373wKVFr8vtbQX1a+FTRem50XwuvROycQouijCwXCYg1YY0lNjsI7QBYYBUEoq5aNqaQ0xcbk9GUO/jmx6bRuToILlC0Kwwr2V0r5qRC3HtTLYUNbVN9li09K6ROwOjoktko8t/78pSBgWXMTLY9rnucMBgOS4YiJ8XGmJibn33nnXceFEP+i1W4ffd8/+sXT27v6dgKwvV7B2rt7T//C4vw/vuuuO/7DwsPL4U6d77wwN1dV+JTZd7mhynUI0XKp/n/ZEyylVC+HAFhR9IR1YeRR2O4qIQmigB1T0x7C1YY0z8iSlCRLydPMk6y0fm2SwrJms7vZQa8gOpbvrWRII327wBqDHppCsU8wyHJPLJQhqc05s7RAUFTH/YJMF5Z/Nx+ihGI07K2bpAiFc5q55QsFDU9Vm6vGorEejC+MfAR4JcPLwL6btvpa3WgLd8AiMdtEJvcJ0Lq6XXmAKqU+6U18/NiY9I6F1osIZVojtR9hO37mLG+/6RYspjp2SsjCA6CgEBiN1hkEAqtiMidYzXOOnTnDYtJDxh1/LZkcgZ/3DvCz+w5wSlbySdoVbYuqgyMuDYbOJw2lJbTjtevCbB5fKytUV5AqqUHW1locBiEDAhmA9h4KkYDMaIzNMblGqI2JWz2Pres8OCtBvHpfG+MMgVAVR6de0W9OoOujeUopVBhUhUAd6XtZ7P9XiKxUx9pYsiSlt7bG9NQEu2d2Lt711refDh3/tNNsPf9Lv/5r28H/b9Da5gD8gKw/+sSfJ3/7Ax8SwyT52sGDB+4/N3uuoXXeWFhaQOc509NTjEZDHI52t8Pi8hJCyWKOtxBvk4JASqQomdiuMg0RRd1Vfs1hCya2n7hXRUBQRTCSZX+16EsrQCpJIwxptpqMtduMjXeRUhGFoa/Si52yJPfJwnmsPr/s2xhF3SzXA93m4F9NgpcVJYaSAOGNR0p1uyKwunUaoZ8b958ZvFa5Lv6dA1nxSHBkeMZ3hieJJTg0svgZS4ohwxaVfxHGXUGic3V2uKiCv6yAZh8aQ6UQUmCL0TcqtoNdJ5JteKy/Rx+A1ufirfO/WxDUMXnmWfiBRAQK43zLpNPqsLh4kTdefy2dVpMoEKSjftG5dmidEwWKbJTQarXp5wZaLXSjxePHjvGfPv0p+kbjZGHNa60fO7XOi0/hxYiEEhgMxprCT94fFFE7V9QfletC6U5Xad5t+fD5aKGkWDDvpfC/40mSDlzt2qiOka0ftYpUWTkhWou1/veM1eQ2r52b6ja59NxU15//KCsa6/p/fjxXFjwQSaBCENIbGwFBEBZjoY5ACJpRTDNuEAWhb5MUyUvdpMfYwvwrCGi2msSNxvrMv1u/3wQbJxbEesNj46MgVCpRCgX5nzTFKKdQXutCm9wbKVnvlKnzjJWlJcY7XaYmpubvv/u+c9cfOvSvgyB45r/6579+ansn304AtterXH/66b8Y/L0P/Yy7cteehUjIW06cOd3IsywepgnpKGFm506ccyytLDMxOUHcaGC0vaTcp6eLAAAgAElEQVRq3lwdbY2drsddsalyvezHTSi1E9BqtIgb6zaipSPdZvJQ2UbYQCSsVF14GYYEl/uBl66+6vu33fwQAiMEukgEDGBEgYz4zsSWL6/SVthcMW06D+UYIOVMf+GX/nJBk/UquoCoi0RPFkS6UHmUxBbeAuVUgMRisoyD+/dz9YEr0MM+cRiAtcShQjofnkIlQIWkUjESAUOl+Py3vsljh5/FqcAr/OEnMWQZsIUf4HTC+yYY5xObrXQOXvL9IV/BMWADilUey1fmZuE2XhUF2Y+X7eu48aoSqBd9vZs1M1Qx0meLBKTdbBIX1X+9jbe5rVYe1zAMieP4dXP5lEJVxmG6SNDqmhNS+IQkS1JazSYX5+Zot9pMdLsX7r39zrNxFP23YRQ9+8v/7J9sB//tBGB7veYk4OGP9953172LjVbzSG9l5R6n1MRoOGQ4HKHznFa77cfmnC3sUt0WYv2ixvZ1WyuTwTob+BWsDZKsQvietFrvSZae4nEce037godQJgWbP25p7lKHvl8yAfjr0RcRotbcFeuvYz2MrIsbSVUT9XF2vb2xqa/8coJflTxJ6fUgpK/vrPNESiEVgZKgDTrt0woUb7n1FmyS0I4jbJ4TBzHW+Oo5DCMSk0PUJJOS88sr/PnDDzO7ukbYaHjcpbhYRHG+y/PmhRy1r65r3JLXMwEQbBz7qzPQX10C8DpfBy+VAEiJsb6RFKigUtZzhargeLdLHPpZ/s06/Jds1mq9VVAmEa+d9FceW4MTruL11HUKvPaH5cKFC3Q7XcY63fN3vuW22d6g/0udVvvMr/3Wvzy7vXNvJwDb63VaP3n/Az1jjH3rLW9++7lzZxvG2rF+r8eoPwQJU9PTjIZDcp0jpbokILlaBfqiSmuCl5xjvlzwL4l6ufb0KVkzK6knA/WZ5roVaVXZsEkquOb+9leRANTRilcUuF5S42Cdc6EukwC83Fe/1Xx3yQexBanPFiOBUiiiIEDhsDpFDwa8+eY3MD3RxeY5ypsvovOcQCmcgGGeI5ptdBjz9e98l89//RtoJDIMa3P/ReImpCcROoHBkuvcw8M1gaPXNQHYovovrx9r/wYkAEKs8y+K1621Rkrpx3GbzQ1CP1sdx83VfxiGG77+WpazxRRH4X5ZJ1BKUbw765hfmGe8PUa307lw9+13zq6urvxip9W+8K//4N9tj/r9DV5y+xD84K2/+0/+sds9s3NheW3lf3zgnvvOzoxPXtg9s5N2HLO6tMrS4iKtVmtdnEP4m9gULm8VsQ9PMKs/XrfKt/h3HMeEKkAivLqgNtXDGetdyhpNOq023XaHTqtNM24QFIlLXWJ4feORVd/y+34DbHruV7qhupqxjtsCSN48KlmXPH6156MiRVqLLUiRorAuLufunRAEMuTi6gqHjxyl3ZkgzXJUGHnHRWsJopgch1EhRkgSbfjOk99jaB2tTps0014Dv7ZN2LIHjrlkquT1Dax134r1PrYqnfGk/Cu5Pl6P96EK5z4BXlESRxSGdFvtSwR2LpeYKqWqFtvrSfIzwlQSzmUCX5f7Hg2GXLhwnonxCcbGunP33nnPbH915Rd2TE6d/zd/8vtz27v1dgKwvb4P6/2//PNLnVbr9HK/92t333v36R3TU/PdyTGUhYtzFxn0+zTjxpbBoUwK7Pdpf7ychehmGFhKWekHbIYwg8DP7oc1i9P6BnQ5V7K/KatEMTaPZ9aP36vdxOu8iiAIENL36svn0lpjnIUgJAeeee4ovVGClSFC+ckGFYY4ITAEBI0mibUcP3WKI88/X+wMAanO/ZjoFs+vrcVY/aKeEK93YlBW/2VL6fXqg39frwPnqtfqJxD8uGbZIqufz8u1UMqxv1Lv/9W0WrZatpDcrifBVvgJijRJGPUHLK+sMDkxyVi3u/Cud90/m/R7f39qcvr8//rh313Y3qX/5q/tFsAP8PqTT3+i/1Pvfr9Zubj0zf2HDt41PzcXOWj111YZDhMazQZCehLPJZtBzXLWifWef1mWbP781SYB2tgtXQJLqL801NmqGi5fpxSiqpBc9b2apXH1TrYOta/HJl23UH5lSIjkUs51xQcnDCN8n9VD9AhZtG1EMVr22gyVorhBbi3GOu/uJ5X3b7AOKSzCGEyacfVVV7FrxzQYjctz2q0mwywlFxLZbrM4GPKZr36Nx587hkZiVYh2IFVY+B24ivZmnMUYT2Krn6tXE5Q2twAuZ6+jihHGKAwJCxtczz+w/CC3AEqXv9JDI5CKdrNFu9nyraGCBbOVY2a9+i8T57KVVCYWr+m6LxIAJwujCSFw2jAajRj21hiNRuzdtYtOp3PxR9/zwOxwefXvjU1Nnv/Nf//bF7d3520EYHv9Faxf+uf//Wx7vHs6Wxn81++8++6zk+Njizv37CYUsLRw0Y8AORDWfV+rr8tucFtA+M55J708zzfolNeTg7Bwn9uKGPhqoPjXEvw3W6a+nq9hc7VfTVK8Dn/bK+9RCTTV/eOt8PP2KY755WWee+E4stEg0ZrMOmQYMEhGpM5ilKKXZDz17GEs3hBnpDVxq30pFXOT0NRrmYF/NQjA/8/emwZbep3loc+avmlPZ+jTc0tqyZIsD5KNZRtjPIIJYMthCCaQyxzCUMlNuCFccgtuUUVxQ25CEZLKvRhiSJEQII5JOTgJMRfi2MbYxja2bGMhW0PLUs9n2NM3rPH+WGt9+9v7nG61IxlhcVbVqe4+fc4evr2+9b7v8z7v83T3GbthOZ5nHgmKJEbOubfu5QJWG/AVl7+DkuTuvQPgaUsA9u1D462add1ASokjG+s4cfR4/W1v+sarozT//iNbW+d/5q2/cBj8DxGAw/XnuX73/e+ZvvE1b7Dzvckf3nnXHV95+dKVVFuTW6Wxs7eHoiiQJgmklCDOm6FYa5EkiYffI2MfZGlevdUCPwDSv97XShTyc8fdLyzPJUefc0Qt81AJ8USgqutWrIgxBs5Y0ClwbQuBUT9Hf/DB9Qy7jJIF2mGtl8pNuIAgDM5ZCMbb9x0ll6MOAmdsMRZ4vWt8nfBiLUAYBWfcJzNGg4J47QFCkFAGYzTKyQSvfdWrAKNhlUKRZaiUAooCc2Px0U//Kf7re/8QDQCXpBBZH2VdL4KMsyEQeZzGWAtjzdNw/ZeVEclK4gTn3S6jy2XcH0YbaKNAw5jiQYI5X4wkcv/9wDqWxJ1ktnXQpIEECGRJhn6vjyxNIYI2xkJTYJnQF78XibTd6j8mQ9dLartJU3cEdymRiK2kIOtLCUE1m0I2FU4cPY7TJ09OvuFN9z1xz3Of929Ekrz3B3/qfz/s+R8iAIfrmVg/9s9+5onNzfVzat780Fd/1esfP3nk6JinAqPeABcefxzVvMSRtQ04Y0EdMBwMsLu7uxyrn+FyafXwZCBI+ILYdFClxyjbd6j9z7D2v4gQAnSowDn1Zko2JDRFXmDQ7y9c3awLhjwBJTH62pX1jcX/xTWJVsJugQ44UCgH1LDYmc3wucceAy/6QJKgUhKaENTGotIW93/6T4PioUcO5nXlNQACufBabnBf7D0imGhH57pul5ELEJPHVQTqi4mAXes1X/P/gjgQYwwJ4xBhT6/qYix7GSyT8p4KwtVtycXnNcYAxicmw8EAVipcuXgRRiqcOH4Cx7a2rr7x69/46JkTp35q0lT/emtz85Dtf4gAHK5ncr37j943/b63/I1EVc17bzt786vOX7jY25uMEystBOeYz2ftYam1Bhdi//x/V8znKXAAFifMjduJ7hsjDBK+zjrYoH0e0QgKz56OnABnTXjN5NpR8JnIoCnzWvMg4EyAOj/GmPAUw8EIvazwoIc0vk9PGDjjII4EYeGnOMYIFhTdSNtLDjKL8MJBDNT6Q39jOMS9X3YPnFJQsoalBCbLce7SZbz9P/0OSmVgRApNGRptkKRJR4s+JBZWwxgd9fKejvDZVv/dvRH1AVOReGQgIkeM+aSRMRAKVLIOABc5UDr3ixHsl7ffMlt/VTSLEa/XkHKBPM2QZ5kfv7TWazGQFZOhToUfx2m7ScBqW+DJEp2DUIXu72upsHPlKubzOTIucPrUKdx08vTOfW+67/EsSX6YU3r/m7//O5741Xf8ljs8gQ8RgMP1DK/X3PvlybGjW+fn0+pvfv0b/sqjNx0/WR1ZX8Nsb4LJ7hi5SGC1QV1W6OfFNeP1IgA/MyhArNhWhU1i9ROrucj4PuhA+4uAAFDCF60VY0FBkNEEvSxHkWZerY8yb8OcpMhEAsE4Ei6QMnHNOfgvBMImtiv5jCAl7Lw+AKVAkqJSBp944EFU2sAJhlJLgHMQkeBjn/oUrswqSOeQZgW0AxhPlsb/EEx/ukZQT/X6H+Ry1/3qOvzF54vjcFFfQnDRQuPRAfPp1sO/PgizTCA9CH0QQiDPc2Qd+d74fg5CAAAsjf2tIgBfyN6Iz7f6ucX7r5zNMdkdgwG4+aYzuOnkqcvf8uZvOP/CO5/3fx0/euzz3/SD33Po6neYAByuvyjrljd8+QP/y4//vYc31zee0LX6/jd/7RsfOn3q9Hy0MUIvSVHPS8BaDPsDTCaTAw+lp0sTINZv1/vqBqaoP0471WqEcts2QKj0WojqL/hYoDWByAWvTEcpxWAwwHAw8P1q62e+e6EdkGcZEsbBCQ3+CU+xV+0ciPVOf9RZULcg5RnnoIyGowwKBI+eP4/PX7oEw5jX8U8F9mYzfOijHwOA4HVA/KSC4G1AjcGthf/h9fRvRIb5WonNQkqZtNeArIykRTMr51wbENMkWXxxgV6vhyRJ9vW9n6m9spqsUEqRJyl6RYEsTQHroKUCrFsy/llNjrvjjjdqr33g/uy0a+JjAkBd15iOJ6irOfIixbAoxsN+/9Hvestf/7NjW8f+N63Uh77uO97y+cMT99m9DlsAX6Lrv/7R/5h869feh9l0/v4773ruK8vpPJFG5Vd3LkMpA5EmrdVod0yQrkCuT7lGuoFM4nqHMQ0wf6zgWjGUjqxxHDWLQjrdx3XOPqOfQzSDiShAL8sxGg6Rp5kfa3R+7ptz7qH/IL0K52CJC+6CX/h1i5eIgQUL3M4UBUg7420cwDkDcQ5G1rjt5jN4zi03g8FApBk+eP+n8N/+4H1wnMGyBNIQEC7gCIWxriXiWWNgje6o73VfxRde8bfBjixPiND2+5EECK8q2VGWFEKEVocDEdzb/aygR19MBGt1BxCQfSgVD595kfh5/yxNPVIRKnFCiB/ZdHbJUrs7JRMTgIMmVL6QBKCbUDjnUFUVxuMxmqrGaDDE1tGt2c3HTj7x0pfe+0OUsV/bOrJ57iu/5U3nD0/ZwwTgcP0FXu963x9M/vrX3OesNh94wV3Pf9V4MhYGLi/nc4ynExT9vreu7cD+z0QCsHpwtqhEfE0dclI8xEnXJji80lh9roKwz+QqksIf2oyjl+UY9PtI09RfXWPbCYhos0wp9R72gHf74wyUkX3X58aSDxISgDDGzQInAYFbAQrGRGuL63SDfpbgpS+5B9xpzKsav/XOd+Hc5W0YENAkR2MMCBfQxobxTcBZA6M1rPEUQQLS4WJ8YZ//KheEUrYM+7eS0H5lQTAnz7J2xDHKUFv460co2WecE5GArrreFyMBIGDLqn3heRMuIIRAv+h5AZ84vx9FsYKCY/TqaBOH6wT/1et3I/uky/xXSmE+n2MymQDW4ejWEZw6caL68nu+7MIb73vjP94bjz/yd376Jx75lbf/Rnl4uh4mAIfrS2D9zvt/f/K93/TtThv9gbuf94JXzaZTrogtmnmF2XyGPEgGx9G8hWcAwdMyRP0FJgBLbHcAYBSMeTEdrZVPAmDbg862887eTtcYeIaVo4FpRZ5SEkCewp8EFOujdRAHJIxjMBigyHM4Y2Gkag/f2H8lAATnYJx7J2OERIdFE2EH32u3T1pfLxHOSJSb9YRA57w3AIi3ipZKwloNaRo4pfHqV74SWilc3hnj19/xTliWYG40WJJCOnh3RKshEg4C6yt/reBTCrQOju4aRhIEth3pW5ZGColnZ6qAhtfcukPG4BjeY6/otRX0UkAMqBCh3hKbUQECB6MtjFagxI/ZWeuC2A4N1kuL6/w/s2+WE4BgvR3fQ/guJ9TzFLjAoNdvK/E4JhoTcRtsnV3Y0iRYZ3Ox0M44iLh3zWq/K0sd/s5C8DfGYD6doaor9LIcJ08cx9EjR7a/7tWvf/Rl9977m7P5/F1ra2vn3vG7//nwUD1MAA7Xl9J6+++9a/LD3/bdzsF+6OV3v+jF5WyeVFb26rr2BkLWIU1ScM6htG5hwXgwrQboWD3dCMu4e8o7uH2iAIQSD3F3nQkpQIKlrXHeR55QCi68wY2U0r8uRhevLTjQWeutShFGqzyLmrZf+xT5gupe/H9OORjlrWc7J8z3vEOKFAF9BgpCGDhh4CIBA4V1DgwURdHH5mgD66M17+nOWGvpKjj3ugXxFXR4D9G8x4TrL4QA4wLaGgiRBee4kCQQP1IoKPcVPazX/Ke05VVQQmHDnyAExFI44yt0QjkoZ5jVFSinKPo9lNUcWZri+S+4G8P1I/i3v/Xb+LPHz0M5TwY0hMAxAkucn/d3Fs4owBhQa5ZU62KwpiGB81MI/pVy4oMgIwQJoWBwYEBQewxJHaNI0xTWaPAwZeCsgbMGnFH0egWGgz6KNAWjBLA2aBEE8CEkEc76ZCMlAnmSoBA5EsYB5aC1RAIBRhkE8X+CMMABlPoK3V9W2io3uu7+8RsV6OwrQiiI83uPEur5HyzoATpPm8zSBP1+D2uDgX+9zoWkzrUekXEChIB6hUgLMMaRJRlEmHywxoakLuxvUMDFhpP/nnIahFEwzhfIEhaKmoQSKCmxfeUqjDPYWFvDzTfdhJtOn9n5qte9/v4iTX9OcP6eYX/w6Df+0Peaw9P0MAE4XF+C69+86x2Tv/9df0uXqrn/zjtuf7GwhMzrsj+t5yQhHFVdoSxLbG5uwjqL8WyK9Y0NGKUPNMTpziM/nZDpQQBCmP4LCYmBMRp6dZwrHMK+IurC/2Qxc3W9arm1N3VtldnCyCGIitCn59GXgNAAn5O2auOcI0vStg/tjFd3S7jXaSfWV2yxio1qdV2sgriODKv1Fr4exqbI0gy9vAdqrdcTMF5sp52ICIQB5uLjhbrW+f45ZYE1TiksHJJM+Ce0DqZRUI3CeGeMT33iU/jIR/8E2jE4xuAIhaUkGEi5qAwLYo0PsqHij20b44LZVERzbBBvirVx/P1uy4mQtloGFgRK//t+ryVJgjzPvVpekiyPrR742TIQR9rPkAWbZBKuibE6RkP4YQnvQEmDw2ESPmd07Z2Xn2Bf2yUK/cT94Ixt+/ppfP1JQCzMisrkyp7U2rROgWngNzBK21bX9fQFPIDmEyqtdUvatOGWcM5hPp9jNp2CABgMBrj5ppvwgjvvmr7mta/9s82NzX87yIqPNFI++Fd/6Lv14Sl6mAAcri/h9cvv+HeT//U7v09VTf2Jra0j64N+j1++ckU0usmn8xlEwtE0NdIsxWA4wGw29Yel2+++5kK/Mh6m12T5k6eYAGC5P9yyzY31hyeJkCltq+gFUhGjw/UTALaEZgSGNvHJTsK9tjxjCyi6TRScW0wtdFnqUchHeag5ktRiIAMARhYchm6XJL7fmBBYa70uPKVw1kIQCuEIMsbRzwqkgThowvy9sRbUuVZYxjrv+xijLuUclhNoZ6Gt/3mrFIh1yEBBjcL40lVsX7wCZRUcvNhPqwnfIYsyQqGk8paxzts+OxpRgvB8zEPwlPqgT2PMJASGANJaWEJgKQEoBeXcK/oR2k57EPgWSp5m6Pd66OUFUpH4wGzd0hbr7lWfU3gDGwQInQXCWyTTaaV94hjcMWNQj6ODPCJhIZmxq4jXKnGxg4DE/eBRNAcRphKKokDCvWWv6XhhrN4uMQHgnCNNU6RpCib4surlNe6fGOQ9R8PfKyBh7M9aKCk9038yQZIIrI/WcOL4cXXT6TOPv/71X/XQ6ROn/mRjfeO/J3n2ma/7zrfIw9PzMAE4XM+C9Uv//tcn3/+WvzGp6uqBRuuPn77p9O1Xt7dTB9dr6gbWWWilkSYJtFJekGbFivQLCeBPNQHAQeJAzsFaP7u8IDDSthUQWxfWmVBZXt/IZ8lXPVRbPAT8PM/984bWArH+VBWUgQmOPEmRpH5+H9T/nDIaVvngCuctkZPg0W5D0hTNja6V7ICQFtIXQkA2DagDuCPQsxK0URAGyJkAM86b+MCBe9qZb1l0DZ9AAE7hGPMCP85BGwNOKYQDEksgtAUH0EeCgciR0dQbCYVqnhIfxY1bjI4pKReGO3E2nxIQFqpm6wBtfaB2/kChC6AFjlLwVIByFgKwR1KYQ6tElyYJer0e+v0+8jxv2epWmwNId6vtJ0+qpPD7OFbCscUSEwES2kfdz8Y431ZwzksbLxFMCWkh9e4eWuUrxPtGcI6iKHzwT5L29VhjV8YesaShQAhdcshEp+9/rXunaytNrBfQohGxshZVXWE6nWI2nqIochw/egzPufVWnD1zy8OveMUrfvfY1tH/fuzIsceyLP34i7/qlYeufocJwOF6Nq1f/e3fqv7q695w2VnUqpF/evvtz7mrnMxSDdufTWcgFNBa+X4440Gnv40kB3qxX7P6f6oIAOlUVvBVnE8CsFSRxYBCie+BG2tgrQk9e/fkhEbrq/kkiPDwUCU6bbx8Mgg485rzRZ6jX/TQK3wlmmcZ8jTzFbf2hD4WDm6pdBjxY+37ZXTRPnCd4N++58haJwSOU0itvHBTkiF3DG5aYeAoBpaC1xo9KjDMCxQ8gbMO2nklPgoKBC+BWJk7RmCpn9BnhCB1BMIAibboE46bhlu4/cRNuHnzBDbWN7A93oO21gd5SgFGW51/E1CglnBIFp9ZYAEiBcCdQwogA0OPCIiWUwHQhINyClDm0YhwvZlxYJSi1/PXuVcUSEQCOMDoRdthlUxIV7adBkC5v/aNlCjnczRStiJTUWPChSqfEAIepgmi/2REZA5CpOLm6+oWMCx4Hcbqpco/E8mC8e9cm0jEVogNPheeYkCRpb7VwQRvOSJdNcDVlNbAtUmxc85zLwIpUyrZQv7lbA44guMnjuG2s2fxoue9cO/Fd9/zsaIo3jvs9S6B4FEp1fhb7vuG6tfe/huHvf/DBOBwPZvWf3j3f3Hv/IN3737nN32LpJR99o7n3H6nnJephh1Mx2Oo2ld2nl3NDmQdP+k8NXnyNsCNJgD7f8d/z4SD1IaZ9FaTPrQK2mObXPv5Y+Ufmdm+l058/9lYcMaRZRmK3FdweZb7UawQ1GMLAQ7tKFfs2Wql276+HwdkbRVHDkAlun4MjgBVMLQRhKIvUpidKQaG4rX33IvX3HMvNkWBzbQH4eADJwgE/Fw/YFraGmLCFBIL5igEKBLtILRFDuB4vo7bto7jSDFEDoYiyVA2NaQzUEb5VgCj0M5CdUYyaaDHUTjf+7YO1DoI65A5ggIMI5JiMykwoAK5peAg4KAwRkNqDW2tl/FlCRLu2xujwcBXzGkKxhiMMZ4Aqg1YqOBXkSmygqjYMM1itEFZlijncyilIAKsHnkt1jkYpeEIPM9D8DAf71sGhIXPuGPYhNXxO+c5HV29AjigKAr0+32v9EfIkp5Fi2xh0d4C0Or851mwBaZkn+phNzFpK3+yvKc4pzDWoCorTKYTTCbextc6C845No5s4MV334PN9Y3SOHs/AzHj8VhUZZlNZpN8b7ybf9UrvpK99qUvp9/0dW9i3/zG+/DOd/+uPTxBDxOAw/UsWO94938Z/81v/faGEvq5u55z2/Gmrgtj7bCqKiLrBs6jt/sSgBvSGr+BUfAnbQGEPnusfuBcCLi+QjdaewKbXSQl/uD1zOrYf73Wa4hJDGcMaej3kxD8/QGcochy5FmOLE2DWA9arXZKPBvbBag1BlsatAoo45BKwSjt1eoCfO1CZWlDxeZCz3xJCY8Q1EYhTVNkjCPRDs14F7f0j+Itr/9afMVz78bZjWM4mg8gABRMYKM/xFqvj4xyMA0IR8AjdBMqTgoH7ggSbSG0wRAcNxdbOHvkOI4kffQtRwEO6ghYJtAYhbKqoJ2FpQSaBEicACAW1PrWQQrmEwdwDGiCAUlwohhhU2TYpClGjqGvHHIA6yzD5nAE1ShoaBBLMej3MewP0Usz9LMc/X4/NAU8GdIFSWMeEikaPmdyDbDJhRaDtMHDfj6HMhKUUGRZhjRN2z2ojUHTNFDBNpkE1CtqMETkCdeYsY+Ihtf29/uHAOgXvbB/MnDKlpz3lrQdQtIa0YQoZ+zZ+/sT4NW7zpIFsx8BzYADlFGYlyWm0ykm8xkaJWHhwBgHIwS9fg/OAVd3tt3Fixc3m3l13FJ3e1lXz5tMp8/f3dk+tn35yqhp6hP90fA05+zUfV/9htFXf8Wr0te9/BX0DV/5avrNb7oP7/r93ztMCp6Fix9egmf/uu9vffdjf/Brv2ln89kvf/m9L/32YdG7m1B66/bebnF1ZxdQpmWZL1U8f05yqv55lvv4nDJA+MRErxCpulMLN/LYxAGCLqRVnfbcAkYoiixf4h6sfiXBZjmOTqZB0U1KCWMt0jRH2dSolfT2yyHoAPDQ95OsLMvgrEVTSWSGYYgcNx05hiNZH5PPX8RWWuDYLXfgjtNn8Oj2JXzm84/g81cvYZNmMOvH8dnHH8HEVEicwhwaWvtsg1kH7iyGSHA0HeC5p2/B0XyA8souBCfo5Skuj3dx4uQGdssptsFQQ4EYAkJDUgYLaAcBggwUBRh6SFDwBAnjSAkB5jUSEOSg6ENgmAxw9OhRnLn9VmycPY1feec78NhsB2MY5MUAea+PpmlgpIZSClp55CGq1aVCtNr1Sqnr294Sb4Ws6wZ1XaNREnqUULMAACAASURBVBRoYf/VvWyt9UiHcy3PgAm6QLNW5uzj61hUS2Qfia8oipZrcJDsdnfktousRWnjVvhqRSI5WvVSSmGuoVfgCDCdzlBVFeblHEorT9rlfnRQO4fLV6+iqmrkWVYUWX720XOPnh30B7JfFFIwViopXwyjd28+e3a+s7crkySZM2t39qbTD83G050Tp06WIKT5V//05ydGqd26qseykc2gP1Bplqnv+Qd/9zAx+BJe5PAS/OVZv/erv35iXs7v2pvP7hnPZ9/9vg9+8HnnL1zgT5y/iCzJsLa2hul0Ckop+v0+tNbQWres6kiysgECp9xXPO4pSdm7ff/2rG5/aBpnMZlMUJZVe+ha66eouWCYz+dQuvGjcBHuDW0DxhisMR7SpwxSSjhr0c8LjAZertcYc11DjAjbxsM4Pr6UErWU0NZBKgWlFAghyLIMvZ4Xr+GcQ0m5FIRogIKJddDEQVMgTzPYWYW8tiB7e/jer/5reMWtd4JPGwx4CuIAw/3PTlSNC9tXcO6Jx/HEzhXQUYbLszHOXb2I87NtzKHgBYIZCAzOFFs4vbGFU/1N5JbC1QbMAQwUNTFQfY4dV+Ghi4/jod0LmBMHyQlK1cDBQYCiB4o1nmGNpRhAILMEVFtQZ5CCYCPt45bNY7j1xGmc2TqO4XAInXDMmMV7PvMJ/PaH/z+kW8cw5w6KMaR5hqZRnidh1HX3RBeFcs5Bd/rjlDNMmwbj2RT1vPRTHcQner2iQK/Xa90xJ9Mpdnd3oWGRpRkAoGoqr3cAgHD/e8b5z7Y1FkJoGZBoVmWQUI5hf4B+v98mEq2VL1Z8N9xyYts1M+Kcgzi6T+I6Jg5RC6NtgwQESSmFqqrQNA12xjuL5+8kMYz4BJlHnWnnIBjzaFOa+rFVD3V5xcJ+Xw2HQzXo9RpjzKSpm72NwXD31K23yH6/X6WM7RptPjqdTi8lIplvHTtW50laE4uJLOvx3mQyJYw2/eFA/sBP/oNDTsEhAnC4/qKtqmkucsbZ5samKIbDj7/u1a/p//57/8cZZa24dOky2HzmAxWjkFJCagVOmWeFm8AUp9T3S7Eq1fv0LeoWNjOC8SABKxca6oz5ue6QiBhDl5jr3dYDDQe3DuNkWZIiS1IwQn1y82R6+wcgIV3DFm31IlEIwSO2U6z1fVgbIGEPC0etBS8QI+sGOU+8ehwlYPDjYEWWQ2gGM69BjYOlFowzrPEE6WgLmzzHbcdO4f5HHkDR28DJ4Qb26jnOXb2IiztX4EAwECM859hprCU5CsdApQaxQMoi+dNgpjQ2igLzwTp2J2M0ZgypNHJQJFRgPe97uN8ypLVBYhT6YNjKN7DZ7+PMyZM4PtrA6Y0tDEUGSA09V7CGQPQT3Lp+DJvogdAETBDMrGkRHUtcq8l3IwkYwjWP31ONxnQ6hdLKkxidA+G8dd6Lvy+lhFIqBPROmysw9WNLaVVqOmr6A4DW2o8rUv/4aeAt7EONsH8ipZuQCiFaxMBa2yaEttP3b/d4uA8jRwEApJQoyxKz2QyVbGCcXWphtGhHaDzURoVxwdAGUQrT+Rw0Tmk4A84ZkiQVWZYKznhBgHUK3Nzr9fRjVy6ptdFICc6nzpiXFiLdOXnLzdX23q7Mk7TqOba9PZl+eHd7Z+fUmdMlYbR628/+/ISAjB3INElT5aw1QnDHqH9Wo007reGCmiPnHIILRxgzb/nh7znUJDhMAA7X070UIX1qXcIok5TaD+RFwV5+78tOTefvwfbOLs6fv4DhcIDBaAjCKARL4IyFDTr8oMSPUFHfkDRPgxFPPAC7fgUAQK3ve1JKkSUpVKpRVVUL31LnoJT0AdZyOKWWKqmFsBFCTzaMamU5iiz30KpSYElyQwnAanLBGIMAYJyHa40xkEai1hKu8TP1ibPoJyI0cA+GcZMkWaAKxqAnBCwjaIyGkjUKSr3CnG8igxqHzFGAJuAJ8LyjN2OnmqHUEmt5hvUjCS7zPrTzSMdaMfAjd42GUxIcHIz65MNX8BZGAbm2GIFBiDWQQsAxDk4BM68hGoVcK2yQDGfWj+H2E6dx64kz2Fpb9+I1zoFJAzuvYBsDxihESiAox/G1NaQgqMsGIslBrCfjEcZBGYMxy2e9xfLEhB/XC3A48cqD1hg0SqKWDcr5vB0DdAH+L4oCiRAtWtU0DZqmafeFR5Dc8sidJQvORicYty0oWIgQ/PtFb5FEWrMM/buDlYtii40lAqzT5kjoMoLQtgvCPcYY854BzqFpGs/yn80wrysYa4LapuclsIhQBaKg68oPw8tDR/fFmADUqgGzDMxo0KbyiovGgjmCNE95trPNkyTJOaVDSumpPM3NIxfPq2F/oAdFr4F1Ey31S09vndjbm0+b2qkqpWy3lurDg8FwV1tTZ2mmCSGWEE9dRZzygRf18kqJcI4AFlb92i/84nQ+ne2U09nEWVunvUL+nZ/68cOk4DABOFw3sn7z//kl4hyS+Wwm5rN5kuZZP8uL9UrJTWfsxvbjjx8RWXrSEjy/UZJsbh7Bgw89hFrVkDsSVVNjNBqhaH0ECAjvyIxau+/Aekp9qMDk3hdkQyWVJAlya6EC1N7tm0YWtzEGxh5AvgpwO6UUmfCOch56dTA3+NpWUYAYGBwhyChrzYx07cV3ZBhDc84tZtHDIQ3rkykaqrIk8foBjVZwSmM974FmCUzGgUZASgsOAmMcYD3rH4yiKAqk8MmMuHQBFy5fApxBLgbYPJJDwfeey7L0aI1BkEL242/WWEBrDHsC2jpkjUVupD/8SwoQT3wcJTk2hz2c3TiOW4+fxJn1LaylBai2sFUNWVZwoEioJ1mytICBwxQa0+kYw611pEJgrhSsTvyhbwyYSPZPSFzj+scxv277paoq1NK3KRAcF4UQKIpiYS0dqu+IAFjiyZvamn0ql/HfXXVDSj1KRB3AmECRZl6kKE2Dk59rxapW+/+u87hdh78u2Xa199/9fRsUJXkilqr+six9iyL4LbjO640ImSUeRVvSnUAkDrrISIQjQFbkLXFRaz9WyzgDYQwKDpPdHRCHljTLBWdZkrIsTSEY71NCNwXlZ5+4dFEOHxuoQX8gAUyzJH15RsXe2efdIYui0KlIHGPUOQcYa4gOolbhOrhA/DUAGqXU3mRv/MfV3vTqcG00z4b96hd/9ud3KcgOcW73+//hj8wPT/nDBODA9cnf+PWN+axis/k8297eaQhhZmvrmCh6vTLPc3f3t33z9Nn2nn/7rf86oYymSqmMODtsjFk3zm4qa5Ltne00TdK1bNC/lzK2pbXul3WZP3L/x4/Wzp4q6zq5cPkypJIgjEEaBTkbQxqNgZIYDAaBVLWAQm2o/FfZy08pCQjVyeqYk1IKSZIgS1LIJF0Seols6ThSZYJVbbfvGuVmhRBLsC3cwo/dPgkE7c1VFqI7JFQxHpr18KuBQ2INbG1hYNEo6dsSBCiyHEmWg1EaFP2Mr8k4g6wbQAhQxuCYhRYU29UMM2isrfXgag3ZKKjaQEkJZ/38f8qFh6c1w9HNo8izHvbGO5hMp6ilBHcWjmgY4wMQZRwgNIgIBSY6Y7BVjX4vx6l8AMXXMNElmE0w6PUw7A9w64nT2BqNcGrtKEZp6iH+svLBgvpqHBywlKNyGlI1kBSwRQbXK+D6GbLNEWhdwVKv6OiMhrMWUikISvZd/6W2Usfpz1qLuqlRliWquoI0GhT+8xSMYRC0G6LCIuccZVn6PQMDhH67sQax+cAIbfdz22qIkwfO+xNQ5uf8+3mBLPEk0CXratsZGySL/Rz3D2MMIkvBg3y0bzX4fevsss2vo2ECIOzhqvIS3tPp1Af/0HIi6IwXwssqL5Jp7wa5OoWw1JoI/6W1De0H5i2lw8hkWUtoo5FnOazS3iXSWFBtUFcShMwAACnzTodplibZbpakSdITTKxzxjDo982F8VXdL3o2TzMnGIexBo2UkEZ1EwAwSp3g3HImlLV2VlfVyyDN7m0veG5l9uhcCLFNgA/0svzir/7f//xSypOrINj59h/5wcNk4DABAH7jJ/5hj1J65Ny5cydvOXvLP9/d21trmrqwhnC9pk2W5fNHzj34jb/yY39XOuKCjgepAVJSsO3v+kc/p74k3uc/+RdkPpuLvCjy/mCwQRNxRBo9Gk+mGadk69LVK3nK+MtqZzbKqiomk2l69eojPQO3TikblU2djSfjZDqbsXlVopYS87KE1gZFUUAp78hX1zWqqvL65sGSlXXEbiKcGuVcn1L1DxzQv+/IAofDPMsySK08mS8cHNEtkDEGqmnblogVXRzHixoAFATOeAVBTtmTogDXHYOkBF4/x1d4SZJAGQ2j/OFpOt7vKRcgQS1w5QmQMA7WE6jVFJcmu3j/n/wxZnu7ODXaxM1HjiOnHElGwbIcxFhobaC1AlUaHAxZfwCR5iDOwTYKRCkYa6ABcJ56a2ASdPGNH2dMWALGEshaIlUOayzBXcfOIC1y9Pp9rPUH2FwbYZQVIMaBaQtVTqGl8uOTQa/fGAVlNKS2aGBhUwadMsiUohYWDz30ACa6QQPrXQkFWx7lDFMaS8HfLf5u4ccDo0ZAVVWY1xV0UEakIQhGDwERoP+IHFVVBaUDTwMOxtmWVU/DHnamKzjl2gAbtR/yPMcguBJSEK8nYEz7+rv7dlXDP1b+sfpvyX3ESyOv6gVYgiVFw6s722gaP+VgQ9Uf0SXrLDijLYcgogEI3hmO7jf7WkW0pJQLW+4gpbyPw0AWCAJxzidyITFzjABRfRKAhZd91s5hdzplu+Mx45z7ZJUsknLjbBDzWozMRp8La+2GNQZpluor1URujNYaSum4SLOX3H7nHZeJNhdKzt7Xz4sL//6fvfUiB7k0L+dXv+P/+BF1GNK/wPP32fJG/vAX/9+zT1z4/M9nWXqPsbrXyHrLWY2qaUAIByF04iwqC7cL4hQhriaEjRmh/wSOzpyDtNaaENEIIST0nKj1MY5a59zMOFc9dO7h7X/89v/452JE/9b/86epUVrccurMhiV0Q2o1unz1Khvv7g2PHT9+i8iy142bcjQvS/HYQw+nV8e7I2X1kBDSn0yn6XQyFfN5yZT2B6Y2BrVsUDc1TAheddO0QTWy16uqgjIKRVbsM2hpmdkd05unwgE4KOBGWxmtvVkRQuVeVRXm8zkaJdtIQSmgrJ/z9t/vCgD5KmXQ72OY9yAYhzOmNXLRHWW16yUA10pUTCgCDTzZrKwrP5IWiGkMBHmWY5j7ACICqSy2AGjsDTOG+WSK6fYuYBWOJgMcyQc4e/wUNosBtjbWsTVcwyjvIWcCBeHgjgFggLYgUkHVFerxGLPpGE3TwMKgsQrKeblfZyyI9kZCgghwCqQph3UajVLI8xybm5vIkgTcEQyzAhwExFnfY+bcKxdag3lToaxrrI9GMARAwmFzgYoA5+d7+OzF8zi3dwWPXb2Mx7YvgRV9NNSBZhkUceCJT+YOwl+6nBBrLRqtUNd1C+UbY2CdD4aCp+hlOQZBiCfumZignj9/Htp4x8lY91ssJkYYfHJhoiJgCKSxpdAPkH8vKEE649UMEQKr6/BDDuKyiDRpe/+U0rbqbXkqZhH442tvmgZlXUFKib29Pdhu0kIWpl3edKrz3LF9EFoAlgDGmoUh02rLgSAkcX7kUgfNje7Pxt9PmE9w0zRtpYtjUoMO7ybyEGgQpkJoZThjA+kRrRcHKMHudAJD4aW4QyvCGG/gxIKaoxACKRcYjkbuyMZmWWTZzsmjx6+eOnXy0tHe8FKt5X8jhDwkEnHRGHv5e3/yR+vD0P6XLAH48Nve9uKtrY1f3t27/HyW8Gw6H+PBz34aSZp7YpGNVSsPcLM1zpKrzvKxc2QvVJvEOSMIITTcwMQ54gjlUEo5zpPdBx5+8Kfqph4TAk2IIxQRI3YRBbTWWgNHJlpb+S9/7/e3b/Q9/OJP/IxIiyIbrY02KaPrUjXFZHeHff6RR9hwtL5226mbv+PidG+0N5mw8w+dS7ab+YhwtqGdHUym02QymfDJdEKUVtDGQGmNum4gawmtlc/cOW/n2vM8h5Qy9LTFIqgZz9LlaYK6KkGo18wfDAYYDAYQIvU3q1St6clSUF9NjYj1Y33ELkH+/vlYp/rzzL9V9TNlDWiY49daYzwdoywrWGtAyGKmu2zqEPhcC7UyQpEwPxY26g+QUA6rte9rcg5Drj/J0G03rB60HoFYzI4r65GTsvYjWjokXYJ69KKfF14whnN/0Brr2wJSgXA/uGe1wXR3B04pcAAcxAvvZAVGeQ8b/SGOjzZwbH0Ta70BtrZOgFlgJDLkxKG6uodLj5/DbDJFwhiMVTDhDXISJIoNQIx3+ksERZL6KrXX66Gf5lCNhCAUm+sbaGQVIGWg1gql00DCIYY9JP0+Ki0hjcb2fI5zly/gwSfO4eHL53GlmmIGhRoAzzKsHdlCpSSoSCCdAeVJ8Hqw++D/dhQUgFQKZVmGcU/ZktgQ5Il7aQ/r6+sY9Pt+MiCQQWMwOX/xvLfRBaBgYOHAKQfhoRevfUKhY3UdodEwfXLs6FEf2OD5G8aYpSC51G5adfCjBL1eDwRsIf9MF/vIWgvBePs42ho0VY3pfOYV/Zqqfb8GiwmD+NpSLtDU5VJ1bzuomXV2CaG4FrJF2GJsMO71+GdUU8zEIuB3dTh0hwgc+TZdMiSltD0P4hgsAC+p7SxoKtqkKCbs1lq4ILltrfVtMoLQCkxQ5DlGgyE219bmvTTfvvX4qQu9tcETIOR3Bv3ho6Ph8FKRZZff/Le/d/swxP8lSQA+/Rv/7l6A/NJ0tvPirMfw2Uc+hwt7ezhx+iRAKTgFbKOaZlalTWNAtQYjHjLmfLHpHSVomgYiySClBOdJkA9N7R/f/+mrgtIZY6z0JmTOElgQ5whxBBaOWOuINQ5KqmmR5X+vrqsZ3MLdNkDTcwdbnb7ljukLX/Bl65ZhSyqz8ehjT7Cre+P81OnTZ7OUf81cVoP5fMb3Ll1OP3/uXF9Ttu4IWR9Ppsl4OmXzsiTKWWjn+6l1VUM2GlJWIFR4JnGA+bpEKs45tLOtKA4JEHGcMW6ZyMT3N41biLKsra2h1+u3lYCWqs3qIxRPHFr4O2HcV+oWS659rSWuI4tqjzhQR5bkcglBO+IXD8pGNyjLGrIqfZDn/vtS67ZCNEG2lwAY9QYY9IYeaoc3+okJgg5jVN5Bd1FZrc5zX2tZu2g30EDwqmSDyWSCWTmDYAuxlzRNMewFwxvhXRiNskFVzgZ43pvgVFWFui5RFIWHg6WC1g0YHFJw9HmGLElw/OgJbA3XsZn3cWowwLFsgOmlS6i3xzjS74NI37uFJUh5CmMsLCiSNIdsKvSEZ/vzNEGRZmAOSLhAr8hQKwmap1AMcELAZQJaUMy1xLYqMTYKH3vwQVwa7+DClavYrSZooGFAAMpAOMNgfQ2OEtjo2hf2lQnXVlsXpHD9tZdGo1ESZVO3VWlEpyJ6YoIHhOACN506fd3PZ29vr0UOCCFgiYfjsyxDkiR49LFHAOaDlLZh1I8nWB+O0O/3W1vd1a/uisQ+4yy0Wtgax+qVBAGqCO37IJ6AJfGe8xr+49kU88kUZVN3Wly2rfpXxa9IMGCK1f5BPIqWIIiDxxUjjYdheQQxvv48z9t/R3Jlt0WRZdki4ej09LviS2zFZnyZ7LjfcrybVMUEotVZiC0Ua5EK4RUlez2TcHE1y7IrL3vRS/duu/n0pd357F+iVp/7gX/0E58/DPN/CRKAj73tV16ijX6rg3zJXM4wMzXufvlLsHnqtHU8+6Rtqil7/MP3junpd37iIx98E2l0D06BU+8m53N/DWMJ5g3BtDGwxMEYvwmbRqEoCq+IboyvmJ2BM7KdFXaO+KrPwjHCrz78yKMSTs/8jHLkFjmptXliOFj7sdppOVo/dvaO25/7fXMl188/cRUPPvRwIk25AcY2tNbDspyJ6XTCy/mc1I2EMgaN0ijrGrWUkDrooXcyZ8YYlPWBPVb53fEmSmn7/57I5dCVXE8SX50pI33P0xkorZCIBNZaDIdDpGnmjXOKAjSM88SbM85PM8bgtFnZcG7fSXXdChx2nzeBMhqybtDIClVVtYHbRIEeJRdji4Rj2OujX/QgKGuh9yiQ4tqKzCwLuKxAuddsYYSD3TkCQjyZSmndCrXMyzl0gLlTkS4c74ICHXPMW9g6b+kaKyipalRNg0k1BwvKdowTMON80qYUrHYwMBBwOM76WHMcudV43pEzeNFzbseayNGMZ+DKglkK4iiUsSCMg6cZmqYBJw5pJsCLDEXft0g8dM1hOYVOGWZGYq+usT2f4Pz2FTx2+YLXG2jmkCLDVEkoKBAwpGkGniYQaQLKgrgOljXsY/D315i2Vas02hsjKYkmiPHEPUWJN+Gxzs/OF3mBYa+PXq933c8nJqKRixHbLVprSKNx4dJ5mNBwooQiF4nX9g89fy3Vkwr9xMrej96Rlg+SJAlo4H24lQhNg3/yZD6B0p7lX5YlqqpqyayxJ97aUHeQqG4CcGCFv7J/uwlAN8jGFojttGIoaKuaWRTF0hRDvH7xtcTE6loomQgjjwc992oAWv3/azkidh9P1grMWQjGMOoPcGRzo14bjs6/+O67HyXa/ou1tbXP9Af9h7/tR//2IT/g2UwCNFoTGOvmdYmZlbjjBXfhzM23VbRffNwqrenDH3o5ANe3j3/rqS87PR+LE/8pVeffjNhJ7txIVQN85IFHICX3B7OTIKQHG8KXclldV2VWlQrEWUjrx76MMej1elBKEQa7ddddt8IoDYTEQAgBo7RxhKxN6/mLzHjvu6aTq8c+/umPjuDI+rxuRJZKTqShVTNHXZYo5zOopgacAmPe+90R6yt2xuBKiaayIEJ47bcOHEgpRV3XnhgVKnjCfIAy0aaU00CySxY3lZTQWgbBHYOUUyQ0CfCqh6h1WgD9HAnzCApjwo+OwcBZAkd9MDT7TijSaRU4HzQPykzbOarF71BElTMCzgEBBl3rEFBImAZwgArWuYRDBMdDxjgYZbDKE+Gin72JkikdWL/by+xKwR5Q/wdb3tj+MaF3CRR5ijQTMNaTFqX1JLh5VQKUIKe5D7Ykwp9oIVBKKZhIkRCKnBBY+ECopQEL5DNmAUoJUp6ByBraKEgoFKDIuEDOExA4bKyNQBqDDALQQC0VCGUgIkHCBdJBCsMIdqoZLoy3wQqBymrUUwXDKR5+4jFcnuzhyu4epqr0XAc41NCoYFApCQeGhCTIigJZkft+N/emSI1WC4SnQ56MBEitNXQg+NVKolG+pRDteWlw3otKfIBDQgUGRQ+j0aitqK+1kiRZMuERgYmvlMJsNmvJgQhmUb1eD71eDwkX+4JWt3Lu4OeegKddWz1zzkEFX1Lxa4M49yOrjfQIx87uNpRS3qdAqXYigZJlYR/aqaKXguMBSetSsIxKh27RIoh3FPEHp39st/zYSis4ONSyXkoK0jRt0b+ICHTRiYWdt933dRAJka5obHR/JiZwq9/rrjTJPUHSGWyPx9id7GVro9Gtl69cLl546x0/evLUyf9cNfU7ADx4GO6fxQkAoxQglJZNDWQc/bVNUMYI6uZt9MH3/wKgk06k6Y3UhTcHd+4F1hyOqDwD3nDPLaiwGPsi4W9Ncur9Qj5+78Qdf9+nPv7Hr0LjFgkEMdBEQyCHtRLzWqJ2Fo0xyNIEtalBBGGEkM1h1vuFtY0BrMOa1AbW+tEdGwQyGinx6COfQzNMPInJOt82doByDspYTMsK88kUe+OJt1p1AJC0YioOfuZZKRMSFQJGABIyeRCf/XPBUJXztvIHvJUsrIGxGoRwbzvrDOLgnNINmhLYUxJZ5v3c/Yx9Gm54+N52DJWkc5mXeAK2rTtuZLlgHiSoABEEaZqhkjVsgJKTJIXWBrWUcHbxsLE9AWNhtPKMakvg+KJy939SAP71O+ehZkcWLYvVfMYZ/x5tQCocdICFOTjhGI1GkFJiVtaomgplXS5Gw3oCzvj9o60DnP8MaSBIEcawtrGOSjYoyxKq9tManHhzI0YZKHHo5T2gqjBAD6+46248/+QZ9HmC9ayHHhXQZY2ByMEsRVl68qcigBUMlVGYyjk+8/Dn8OnLD6MEUBGDbVeihIQCaScloqWuAcL3GEa9NRDmYXWe+LaThfMa/9TvP9chnXkEwLYCU/N5BWV9i0lqBdWO6HlWeOvaGJKjhPggnWfZDcGXcT+brrthmO/3DHhP+MtEgl5RtDoCETWguFEEyLUIgwhjnT6BtIsplUACrOu6Heub12VIgnQb+LtaARH1OigA2oV30cHpKQFg7ZPeT23S0mlTdKvvGMCV9i2Zsizb13gQQhAfqx25xbKz6Kr+wiqacpDuxrUSACY4hEugVQPHCKazEpP5DJuD0XHGqBisDer1I5uf+8Wf/tn5D/7kjz9xGPKfpQmAyDJrrSHjqgEjDlQQ4LMfTIDmrcu5cWdQ13Ur0hDqg7crIUAR0+q2YQ3k8vGvhEPdIxdfdeJFp9GAtAeWQ6eadQ61BN77mcuQUvveLjgILDihOSMu57CA5ZhXNWYVwBmFUR767OUpjrzgDlgAyvjH1zY+j09HmkbiY5/8FJqjG77ydyTOMIAwFhzdCGZliel4jMtX96CN8a+SOBjn2xZwBmmPo24UKPOHnx/ZCdKoxNObRJqgaRQICKQxsFUD1BapTKEMQ7/P0csSCCpgYGBdx0jFLkx/CPGQqwW8dz1Zqg/9gWHDwcdIxwHNLpCa4EOcZRmk0dC6AY2BNU2hw4Elg5+BtRaE+z69Iiq0JpyvtFg8eIPCoTUwWsNYhTxJEfMIe0CaYq0OrOZgS7tIeUCINw8SQoDyBHRGMavmraIbIQS54KCUgRDWogDOBaU0QqGMV3rL8hxJmnoBHqOARkFLCQcDTTnTEQAAIABJREFUZRx6ILjp2HG88NbbcHbzGJg06CcJcpaioTNsFENYaZEQAeOAxmiIXgGbcqwTg11V4892LuKivoypA8YwmMKCUz+7beHAQYMuPg8qc4DIi1aHwQa+hrEWjob2kl2UmzbAzY1WMNIH+6pqWqXJyMcgnX40jRbMziIhHIPBAGujEQTzZFbyJEJUUYinW51GQakoRZtxPyVSFIWfEgmiOlrrJSTAdeb82xMloE+RpMrTFDxJWnY85QtCal3XS4I+TdPAwC1V/a1hVceV87rvjzx5wnxQl6A7ysuoT3NMuFcIISiCnPJwOGzJlVFRMXIqtNaYjMdLCEd3UiAmBV2U4IAXsq+lsuoFsZo0dH+mqiqAURBK0RiNBgambnDV7IIJtvnB+//kjle/6lV/jahk+60/+0+nP/DjPzo5DPvPwgQgKXI4QqmjFMoB/XwI1HJh9bXMLV8u51w3OYj/1/3ZFQibIIt/Td3qw4d/EIIsAd78oqOoXazIQ47hYhj33yu1cx/95OOqbBRJHBMJJWDEgBALax1mlcS0lOAQMNohTXMopVBkHF/98ntgGYVWCoTzIPRF4MBggyZ40zR4/wc/go1hP4wtBd0S6hXHCGGYNw2m0xI7l6/COAdPavQu8ITR1nM96RWQykBJ3VqS1o2CM1MopSF7Cr0s971CyqHNsgY7Iy6MJa2E05Upga6aWWvRigUD2ycmFEkikOq0rfAopUg4h+EcWks4Z6CUP7DSFrIkLW9iOp2CcgIhUgjBwHkCxiiShAGEtxVKOwu9gmAQwgAGMMJhCcDcYqYc8GNdUZ42HoJVU0PWDcZKgx9ZX4xFMQoYG2xuCYgjfoad+imNRABMAE4JaFf5RJFQUFPi7jPPw9e87JW4ebSFAQSKhMJK7fUHsgw0ERiPr2I6n2M4XEMmMiRZilldoz8scOdtz8FDkyt48IEd7GGOSnBIylFqDUe9NDNgwYxEzjk21tYx6PWhtfVBmNJA9vRiNoT57xFGfeC3xvf4pUTdNFBSQhvjOQAhQaBk2X6a2HgtffKR5zmGg4F3UDQWUA6EAk9G1ew6XaowVVCWJbTVYFgELc65TwA7e2mpDbAv+NNWwz/C40lI+Fq0itM24ZtMJpjNZmiaquVBtPgXoUuugQeRDW+ElHpQgCXXCP4kEBjbpCjA/glP2uCf53n73BEdiF/GGJRl2Wo0KKVQViXKqmzfTxKSoaiFEDkEERHpqjauvvcnS4Cit4YDkOQZesMBmqbB3vYOppM9XN7dRt4rTv7pAw/cde+9977RAU8AOEwAnpUJQJo5QwEuOIj3dL8CuK3ujbCQw1pUkCslZQg2ncSg7bNFJMB1UIMVbHiVTBCr1G6i4bAv8Sg4dl/2iq/4j3v15KXHML49cS4n4SEtHCoJ3P+pByCVH1ay1oBQBgMHHSDnhgKzcheG8GD84dDPe1DaIhXA17/63paAZUOSYL2FHhwo6sbgPe/7AI6NChBQT9qCV7lzoN67XinMZyUmkynQcQEkQUGMMQpCGsimQaMLZEHuNUqstiYl8cYlAHFxTIi0DoDh9N9nvernrOPBABBi4RxDL01BjEFZVXBSgQoOwRg4qIfmlYSuaxhGwXkCwQiMYx7ZqCmUMZCqBmWA4BppJpClBYRIYBp5MLTcee+AhXGR3kgAiiWDF9+2sMhTAUZ6EAmDqpt2vp0kKQgPevaUdLTSCTgXfobdGED5TUOtA3MECaGgzRzPGR3FS+58Lu44cRpDDWTKYSAygPoZep6lkNThwfOPYb43w/Pv6mFQ5KAgSC2BKSWObWzgzrO34Y8efxDnZlMYC0hjYCwgKEWRZ+jlftY+IQLUOkipgyRyEOwJCZJ1DkZrr/hH/HiklJ7YJ6Xv8cP42XZK6ZLPfexpE+dCikjAQFHkBdbX1pAlKbRUgAlGS08S/lvRnJDINU2D6XSKWtag8K6XaZ6BswTOEiilYY0FBe04EZLwPGTpvvUoBwNnySKJEAsXS2MM6rknqu5N93wbR6nQRKFRlX8fwa/rHHhQf/zAYHid5OfJEIJ4zdPEJy95nnseRLDCXh0LjHoLADAYDFodgYgQtHwGa1FWZSteFFsNMRGI9toxEeiOGHanBA56H/G+itNadR1GgK3n9xBGUVc1dvZ22XgyOTWdTs8Kxk697Wd/7tz3/fjfP9QJeNa1ABi3hDgrGNVZYbnY+5OtJUaZW67Ol5GAcPDsQwS6gdx1EoKlLCL8/gpqsBTwV8xgHFm5bSlfz+hDxLELReN+rJuEUBAMEodXftlzYVrE0bXs+QjxaQl84JMPwFk/465AACvhctraflaVwbQq4Zhn8zPBobQDEylS4XDf614KSjmsJYFH4CtlBwrrCGqp8MGPfBxKbngSIqWeU4AI+RJYC1RNg3peYTYv4cDaaxDnt11bmdAQ9FcSqu4l7FYB1JMSu8ImVplW5resKl9xM9oeKkp7mFUZCWUCNEspuHBwhGHjyDrKpkY1rVA1Jcp5Dd5w9FKFNBNIk3yhY3DwEQvrLLS1INSBgLVIhrUWaZq2FVM8QDnnaCgHlw1U3YDBTyuALMYvYzsAQUyFOwJGHIQlgFJQlYRVFTaR4K+87P9n782DbL3Tu77Pb3mXc06f7r771Xp1JY2kkTSbxrN4PB6PzQAGUkXKSVwJuKAMVCVFPCEJKQJOcAGpclJJKMpACFVxoEJiIMQkcXCcGIgZjw2e0cxopJFmtC9Xy9Vyl759tnf5bfnj957T73nPe1qDgSpLvkd1q1vdffb3vM/zfJ/v8hk+ed+DJMaShYSRSjCLMu6cg0ftDJhZwwvX3mR6MOWieoC9PIXasj8a8870Bpnf4dYTpzm7e4Lx7CpWAqZmqKP2W6t01QxGLb1EShHNfJogHVRs6pCS4B3Wu5VEtaqqmF7X7OSlkiRSUhvXgqojKqZapE/dkM92GnIePjBv0uxGu+PGTOiY80KSHMH9TaBOVcdgoJ3BkBMnTqzSLYN1qwAdKdVGCBTE5mZFrAPSJF8df0mSIGRYuVVaa3jnnXdYVCVluWj4BgLVfP6ss2iVrBW99s5cKbVKMWwXvXcr6scW++4KoVFHpGnKzs4O4/GYLMvWVgTtrIEl6bLdrCxVD6PRaLUuiM/frqyYl/9fmxqKIyvjJTLQJhcuG4Hu57/7FWAxm5NkKZlOqF1E206cOonWkmtXrlCUJYeTw92Xnnv+1tMfe+S23XN7p4hIwM3L+6kB0ELa2pkXMzm4d0A5lmuMLbFexNvTfWvqWC/MneuvAQYt3H95O2sIQJtc2PxM0EEK2shEGHHj0n++Dx5ESmebsLx/1b6dFj0RAlkKv/PjTZPQ5iq36qk1gS8//jTGebRU+ABKSAS2uU3BorTMnSEEgRMS7xvLUiSDVPL7PvdpvLPNScEvN/nNw5SEIKis5bEnn8VYg5ZgfUwQDMRduQuBoqiYzxfM5h7nI6oRCAQfd98sWc8yMvGliJN6kmSrk3nc31u8DJAI8vEgwrvlPErRhimu9FjnmJUVw909fEPw8tYxGGbYuiZPNMOT+xRVyvRwRlkWHJYV4tBz6tRZpITBYLSSki1PSmk2oDQ1Sqc45+OaxMfmLGr7j+Jml7vl4CwSGOQpeZ5SNz4MEGWLErUWSKNZysE80liEc6jakCAYipx/83M/yCcv3sfpNCfDk1uBsJZBklJ7hx4MWUjPdWF49OVnyFSG3xtywxTsJTnWeMY7O8yrmv3xLp/66CM8dvl5tLHsoNgd7SO1QiUZKtEIofDOYwIoQCfJSmIW9/ysdvrOOQ6nk5XMb7XTlUdR0std+bLw6mYPHk13DLu7u+RZxiDLY4qgDwzSbKVWUYnGNffVLQ5CHKlvvPccHh5yeHiIw7GT77C7uxvfT+ejP0Jkfq6KXttRcF3Dzor0qJRGJfFfEFBWJYeHhxwcXGdWLJpj9cjGx3q3ivCVrULXnXSX9y871rx9RbB9Dus6VcpOHsCaVl9K9vb2yPRRAdZar8KiunI9RQ/rcDkQNZaYEuLtNQZhu6Od1epgOakvXR2XwVl1HX0Q2kjIskHY3dtdNQjLNU77tch0Ai4ioWrpVtk63rz3WGN1nuWndk+d/PTuePdbNxuA92ED4JGV9+FQCDFX6LHoQvztgk8Lhhed4i/aqIDYrKLdfX+bFr78MLTrc/s22khBaJEOEQoYrvMNeijnKwSD1nXXiYyq72+bv0sTwQ9/4sGIJLdzz1sJZt7Al7/+HaSK2mFH3NsHPAKJCzOKWjNfFCAVSjqsq2PQihBRvuY9v/szH6GoTJROCoVzoLRuGhSBqWuefuYZqromBI/zcb3vPSsqZVmVzGYFk2m9msBDZeJJLcRp2xNQSDKtsFqSJopAQllXzYl/GYgT4V/dWLwuteB4h1QgCSgh2dkZIhc0TGjJlWtvk6c5zjl2dnaOXBCda1zyNEVVRbkZoJSM5MmlIxrrXvdyZTcb3xrZOqmuZGbhyKRFAMJZXFmTKUXqoS4WnNs7yafv/gCfuvcB7to/g7IegUVHQwYcjipYKqE4CJZ//MSjvCEK9oTgqisYDk/ifEwZzLIMg2M309x32wU+dMcH+Oprz5InOblKCUripVyhN0I15L5mndQ4QeFC9Nqv6zpOwc6ufPhXZDW5nnqnZPTuJ4QV29+Ymkwm5HkM91kyyyMxkDXTrmVBaxPMunryZbbFfD7HBUeu80j4S5I40Ycj8m5bnrYs/tY7nI1mvEIr0iQhyVKU0oxGQ5xrjJuqxYpfsKjKBvVZTwdct+NV3/XUvm3qXzal3X/LSxdBSKRC5ymDNE7beZaskv5WzVjYdDr8TSOzjQ9AkiTx/vJ8jUNwYzpZIQvW2zgCNQoQIQTXrl1bWxG0PRaSJCFXWdNACoxzuMKtbLmjf4RkOBxwYm8v3dkZ7w4Gg72v/d//ePSJ3/eFmyFC76cGwAnviqJ4Kgh+l1z7YHWagB4Id2NN0OeusTm1d7gF7eLcud82/6B7211+4toaoYUY9BIN241Gt/NoNwmtxxUCSfc+20qIFH7n934Qt7LsCS3aQ2SolybwradfwjQGQwS9UkJ4DHWq/bychTwIaueV0Ek0UGpIV3VdkyrJ9z3yIZyrV+loK4VDiGEmVW147ImnqE856trGRLsVuUpT1w4noLI1xXyOCIrEgZESl6T4ENgZD7Eukil9tcBIQaqjZ4OWCp0orK1jaqAS5NmANFHM5/PI1Cdqxq/fOKC20RRmOByS50PSJMV6wUApjImTzHg4QukE7xw2RNKiCDRrgdC4msXn6ghReQCI0EQFN7SwJXCUIKkrwyDAyINflNyyd4JP3Xs/X/jYJ7j7xGnGRGKhDopUKawTBKUxAWYq8PLhNb70/FO8HUpqkXHp8DoXTt+KmdWAi0W4NgQLt++d5JP3fpBnX3seR5THVUpSSYFlXY7mvYvGSssm3HuqOgbXVKbGtGJ3V2z9Jo52OWFKrQhLj3gpG5tuyLKM/b09hvlgzVXONcoU2aBD1tgNCL09JS+RgtlsxqKM++jhcMhg0NyuX8bjxvdAdKbsQAx8IsSY3DTPY15GGtnt1nuKqmByOGU6m1CW5cqOePlfBCBXpJG4/lrGQ/9z1NcuWW7JE1jjPIR1NGAZhb2C2pOUNI+ISpIkJEpsJd/9y2gA2tLL5eNoT+jZcLDKP1gqDJbNgQsOiYwEUluvyMSJPlq57GSjSLqUUU2xjCuPFp1x3auThLO331a7yrycJsld1prHb5b+91kDYKy1xpjSh+DpU+921+5rUHpnTdA37YsO3CbaO/6+AhyOCH/tBqH9tV3cCZtRaO0VQN8HMbTuh571Qt/zXOMjtJuW9hXlKmRk/bnHb9IUPvuRe7BrEqOj7z1wMLE/9/yLL/9B48AHs5rqQ4NT+OAo3YyiKpu4XeL+HBEJdV6QKMkPffrD1BaQerkObyZmsXrJy7ria489wfkTFutPU9U13jfaeiFxLlDWFUVRUswLtDOMdEJtaoKI++wgAqlS8TE0fgiy2VFXVUXtayaTCR5PUVecP5M1E0acTlGCfGdIcI7ZdEaionPfsvgfFf6ji0IgVWSSB7c8qR9NX0oEVPBIaxnqFFVVnNvf42N3XuTzH/0e7j59hrTymKrA1wadpwQvMcIiE4kRmmu+4OsvPccr5Q2mWAIVL71zmc/c/yGCt6RpEhMMncEtDEoOefD2i9yVn+FyeUguNEEGnIz+E6Lh0IhmHy5kA/v7GIFcVRVlXUU9fytymXDkRtfWflsbVyJKxpwCrSNzfHc8Xu38l4VkZTfbSFSXopEuRN+WnNX1kcteIDDIorxt2VAsj+ku675taCOlJMni1KmzNDYtzU78yvWrkd9QxBCopYvfcor1x+RNBt7divXddv7LHAyc38ipEEIwGhyFea0g/sZed7mi6nvuv1mewXeDULSbmdFotJbdsEx8LIpihV4s3/elbHPpRyCEoJAFeZ6T5Um0eU7TlSETgHWWoq6ZzCbyRj4Y6Df0lSxPR9xUA7y/GgCldIYUqXXWI4abxLu+CV10im5vYe0p3m1lAF0/AbG5buhDHdqNQQibPAPRXSss9YMtxKG95gg96AQ9zUtvN7TR4WzwD9Y5DfF/9TG3ecuu/oO3fOwDmAY1YMNDLVAa+PYzL1LWppF7Na58CHyQVAa3MAVKZ3hfq7KuV976UujGfdEwyjVf+OSHm9jbqG6wloa0Fqe4sjJ8+dFvYKoKLSWpSiJDvSEzSk2EiaczDidzZJ4xyDTOW5xLsS4m6nnvsC5w/fo7SCHZ391HWMjSFC1hUZYMkljIVrvdQEQCVq9URDlCg/7LFkQelppwBDoIXF0xShJCseDc/kk+cvudfOa+B3nw1ttJK0PS7KS1ita7lTHUwqNTxTxYnr18mSffuETtPIXSZDjeOjhgWpSMCeg0wZUlgzxFeEuxKLj79Fk+ds99HDz9DYSN8tKGAUdo3A+lD3jnEUrhmxP3coJbFviVR/6ycDcBNcvnF02XYsHXUiF8WBX/PM3w1sUJnSNHuxV/oJn02uz59n57WTzn8znT6RTjDIN00IRZHWn7ZfN5DVtg96UPfjaIaYC1s8xms7jHtpZr16/ivW1QrPj5XKERhHUL4CURdolyfRdWRn1T/9rPrFul7gkhVimGS8h8lA9W8Ptyh756L7yP7pUd1EM0wUdrvia/2fPy0s64eZ3bnwFPJGW20YHlvn80GmGtjWmITfFfGhW1m5bCVZiFo7SKpFkxiMZtMRAo5guuHVznn33lK6c/973f94mD6wcvjNP8zb/3M39d/Oif+Pcu32wA3icXSchH4/HHlZIDkWUr577NPrtD3ustzlv+NnSagL71QE8tXScgdhCALuJAT0MithTy9sQvurdNfwMU2L4e6XIXNqSNoo8I0UNYDHL5g6R3x+EhCDINn/nQvdTL5iAcNVexHRDh6qH9n155+dIfNs7jB5IQyuawdUCBD7CoLaUzqERjfcC6QK4SjAOlEsrKsJ9m/Mjv+ByVrQgNMoBgZaoUhKCsKr7x+JOcOxVd7IJvCG0hZkI4IllsXlRMF3MWkxmEEo8i2EDtKvIk7innRYEWCrnUuXcshERjHNTOj18xwJu3VuBxdcUgH7Cnd7jj7Bk+fs8DfOjiPYTDQ3Kdx8laRh+BIMDiUYMhYZRz/WDC86+8wtvzGdNUUlkItWRSLHj72lX2xmew3uCsZTjYQQaFXRRkKuHhix/gW2+8xOVigdUpIosMd+E90scJcumFYK2lrBv5l1snzrWLzTLCt+2MJ6UmT7OV1W/eyMwkgqIoVmQyGu7BsllaQdVh/bVbFrIl6WwymVC7Gi00o9GI4XC4mkyllAS3PjEvVwAr2VueN0ZOsfjP53NuTA6ZzufUpmokfZuw99FELY+Kf88k/G4oQF8MdfvxusqsXs9l8czznDxJV03A8vVxjcPf8vrR8TBsTPztVYCU8l/ovNwlZXZ/N0gzbBP2tUQLpJQrqeEyAXRJFmz7EETSqEaouCYoF3PmZRG5HTauJ11wvHPlHRRi95986Uv3f/8jn/j9hZrPB6dPPPZ3/9rPXvu3//gfq242AO/xyyu/+P8Ib904Rd6hkmQs8hwRTIcsFzYL5Aa+f0zB7NbAdsHuQuihB4IXW4slawZEfQhDH49hjWDYXiHQA+l3rih6EAPR5j900RHRs0KRreuFfk5BaN/esiFpWGMtuV/abrjWpZbhzj31h+786N2h7q5ImtsLQGkEX/vOizHatbkbiUeQUntDOVCLRV0GgR1JZ9H6aA+pGuJZEJJBKvgdn/wQtkEtAhFRWFrgRslfoKxrHn38KUztmhAgiZAKRUA20GNdFkwbNME1K8n4lsZC7UNk9h8VfY8QrZmrUaUKH0id4Y6zt3L/2Vv54MWLDBGYooZMYUNYOejFFCqJzBOuLqZ885lv89rhdWbFnBKHCZFjYLzjjTcu8+DDt2DqGqECzhu8c6RSIMqaO8+f557zd/DWa89ivcPLNMo2fUCGpglo4ovbXvZBNMU/RImZayZ+JWWTy6DW7GK9O0qiy7OMPM3i9NkoAtrQfrtpXxXGVrFt762XdrvGGRKZrPb+y8yOvmCapSte26hGaY0xhnI+Y1Y0gT1VGfkgNEZEbQg9sF74OwVbNAY5nqXd9vFWvcupt++xLsO+tNbkyZEDX5IkqGaqbl83OH/kjNhEANPiEHTXAP+yL30IRpIkiOBXBb3b6Ozu7q58BpZNwHJFUFUVKtUkeRbJlk0cuCktojnubPDUZcmVK+8gnD//zx7/xod/4Ac+bxdVVZ06d/Yk8Os3G4D3+MU7p4DUhaCEkonQGtFw3Qmhp76HTrEJ/VNxL+TfLpQ9U3Tv9cNmA8G6xfDa1cK2abtHztjmH2woFNjc97cLtAjbdgTrv+82Qd11SujcZqBn1bKtkeh5PEf3kyx/kG6scI4ahSwJfOEjd2PoU2kGZtnpv1tVbv74E49/0SthrC8QQgqt0QrXpMwFFrWlIqWqY6CRTHRMePQN/Bhi0k+WRmOluvTRLTBIhJBHrm5SUNc1Tz75HcqqishBY+OsJHgEJgSqumQymzOdzHHWR7LZcmkRQAfY3804Ndrn7nPn+MTDHyL3DlsaxuMBxWyOzIaNZCqaE1kJJliee/t1Ll1/hzcOrjLJoZiUBBFwKpLiDs2CSnsGUpM4iXXRjz7TCXVVcXJnxO2nT3N68iazaoqX0XzJ+9ikiBBRB+PqtYlMqiQ+Fhsw3qBIQEPaZNi3HeGklBTzKAlDKZIsX/nwQ4wojo1aVBd4G1//Zfreqgls7f2XAU51XTMv5sjGQXC8s7Pm8e87jYMSCqlEzHBIVNTnK0FVG+aLGdcPD5nPZzHZUQi00ggJtS02mu1loY+PpeFMhGgapRoSoF42K0t5ZDhyv1x+XfJEBHGNslKHyIAMCiUCe3t7pFqSJjlpplFCE4LDuUBdl4CMUdcohJaEoFbJl9bWa7HB3Wal3UD85lezasPqt30/s9lsZRu9yutooSiLxWINFWg7Oi4RgWGyw3CYk5YpkzCJx1PwICJStb+/T13W3JjNyAaD2775+OP1Zz/3/f/6tevX/8b//jf/lxM/8uM/dnCzAXgvNwDeSyBxITiEQOW6VT/FZuGnUzzFMUW3rePfKIKdAthH5msXKzrFsc9pELE50W9tBsJm0yE6992e8EMbrRBHE7roa5T6dcYbjQth3Rxp7WGGzdXKun1BD0jR56nQfQ0FfXBLstHYxOtn1dU/AIRbP3KBGsRUDP+DnTD/y12wo7SBrz/9MlURfEk6DdaSKrGbKidE45w4q0oKrSln10nkAOEMKhlgXDS9SdI4ge5kKd//yIexwca9t1iqKWJio5eCwhi+/fRzTKcFOE+qFa7xvk8bP6HMCW7VQz59/0Oc3RsTrk5AS4yS2CyQZwJv45rCYwjDlDdnB3z71Rd5bXqdqS2o3QydqYZokFK5mgNTMHUVqYeT2YDZdEEiJXmS4E1F8fZVPnLPPbw0ucKNtyquhMC8rhilQ7wT4Jqo3biqQUqNUoJEp+hEQSLwIWc4GIFkNZEuC4K1NUVRYmvHMB+SpslKr79aHQia7AoQUiHleqjQsvD7YBEolJbY2jGdTJhPo4JjNBgxyAZoqVdwvxKqmcLjNOylJ5EJSRoNj3ywzKoFVV3w1ttXmoIpsCJ+9SFKS3Ee2aMYEksmvohcE980dL7hUCzJHwKBDEerB0JEPqSSkUSqFPPFNDZNAqRSZEmK1pLhcIf9/d3YYDSeid6amE3RGFIlOiIsEWmiue/GcnulTFlZgLQ+UaH347dt+Xrcxfpj0jR9WNkmrz6uLT+BmNAYCbnBB6QUcbUxkqgmvfHgxg2cM4SQRSKkdQyznOFgQLCOxXRKlg64cMfdvPzyS1y/cYPd8e5tzz79zAc+9NGP3HPi1EkDfPlmA/AevoQQJDFvxq4cWTfkfGFzEKa/kLCNPxBCz1VCp+h2YWrRsytvEwZDP5Eu9JAWQ2diD9uKYg+JMfQU4w3kolO4N04APffVbiLo+CwE0U+SCD28i+6qoU+l0XVfpKfJW3vrVj9feZemIE+FxV9dz32ICEWq4YcevkgNTBn/LEGIsZj8h4J4VAWgcvCrT75oFl7ORQKZZ5TpReLQEUmgoqgNhddIL5AuoCV4bxqyXo4Ngkm14JZztzL+6EORKOZoCS89QoD2jqHXnBQZ/obh+jvvcHZ3F5soCmpsopj5YhUxi0o5KA74+ivP8FY9YaENem/A6ZAy9g5rLLp2lNJzWMx46tWX+PzdD3Dt4Dqj3TEYx2Q+Y2dnhz3vkaOEC7unuDy5wXRxnVwrnLFIL6gtKK0IxjLMB0dGR40z3NKFUDRmP6vJzrpmpxt18nk+JFWKLFEoJahtNMDJsgzX9uMnStranLql5E02E7apamazGLbjnCNtLHpMolXdAAAgAElEQVTTNCVpYoGttbjgouxS0CT3RT8CIQNVXTAvC+bzeeNREXXlYUlQXRbPtgFW69CL6ZGyITkKhFx3NmwqX+MBED0PEp2Q6AShJMF5altRlAaPJVHJSrOf6oQ01Q0JNu70j+D02DiFVUhFo3BYSiV6vob33nn+yIQrTRkKmM3nFEVBXUQkSQDjnR32x7sYYyK5VCgW8wX7eyeYzCZcvX49PXn92m21qX9ocjh57n/7H//Wzr/1R//Q7GYD8N5tAHoo7P1DP71/GtZZ9n1wfugrrF2EoVOUt1U90VUPbGlUjiuWbX6D6DQ8vdSGbkOznn64YR3Yvr32RN9JQTtCLdpNQ2+AEr3qgrX1gG+tRPqkiz2rB9HTdHUfO2s+DHLzubTeRxFIA/IU03/3aMQ5QiVSBf/aR+8J74jxf4Tzbk/Ofrb7EtQefv3pVwi1QwVNbYPxAV9JvVDCJzYbu9wP9xaTKdJJcJakYbc7byMzWwpynXLLudNkTjKp3+aqMUydpShrKuFBgcaRqQylFHsnT/LUd17jRu7xpwac3TvPHmBFjPQtioJiOsXeKHjLL7g2u87EGwa1gJAgpEZpyXxRkeiEHTLuvuUOLk2vcq2akKiMq9MpKssp6orRaETSqB1QgsFguOI1CBHwQjZkO0HAY62nNhG2DQikVuQDjXMWVILx8YSd6oS6LgkNUS3Qkre1EiZlICIPaJz1mEXNbDKlsAWZyhjuDEnzFJ1qgghxzeEtQQVSGS1nUxUbN+ehKipmi3lk+VcVdeMu16Q9HBk1rfbYSzb/0ed6FV4l4nM2zjUx02JVpIUMhBDbgSSLjVNtK6zxCB8QWpAPMnQyYDgcMswHkTvRMOoXiwVVWeG8Z3c87iXxdeH29/C5fY3k2W4AVJpwVgjm8zmL+ZzgPflgwGAQX6/FYsFgMFhlGuzt7UVJaFEwXyxOTW5MzqdJej5JkvPACzcbgPfuRcRTd9jaB2xOju0C0DdV0qOS6+7at0Dt/QGc9PoArDUmPZhbL2KxBWXoJQiGzkQcegZq0WmE6If529kJGzLBTmOywkJ7fAe24v9iE0lA9K8kug1dH5ej9R6/mZ955PBw+pgNlmyQM8wHf+y24p2fXT5mH0Sze1+9FjttJLP1WmkI6myY/nfIJpKws0pKVeCHH7qAbSKiAzAJg39/JIq/uMjP/Tcq2fk+zt9x66O/9AsPh7kB71GExndRUEntitJOClP6V964NB5KmQocMhF4V2ITcFIRIrTAB249i5KK5y6/RnrLPnecP8EZD0404UI6Q0iN9xXfeupJppMJGZrFIHD5+tvcd9vtXK/m2GDZ3R2SqyFlUVDaGWdvOc3Jq2POuT18OefUfkblPFIpgnB4Y0lSRSolQhwRApMkWennnYvpkVVd421AqJjiqLUmTXJUrgi4VVRwkiQx6XA8xplI7FRC4HCoVsEVMjYIpo5Of7Mi+s4rFFke3f5QMhLB6mguo0QgSTLyNI0uf6XFGMeiKhuCX4GxpnGYjOsK37wvfi0YugODr0h+7VVce3V2VPxXk/jS3TLE3ISlY95oNGJ3dzcmSAaJ0gJnjohytYucEhXiikS1LXT/Ocl7QfzWbwAi72E9G0BKiRKCdH+fNEnIs2gRvlRCGGOYz+cMspzxeAw+EkOVUlR1yZWrV7LvPPnk2Y9+/JFblJSa36YX8X54Es/+/P8xBD5n4D9++e3Xvv/s7efzT56dtYpf2I4IEHo4An2mOx2MOXTMfLq/WxWFLoqwJYpYhC2kxM7j7GPdrxXs47r+Lsku9CMUa+ZGfa/DFtSi+/PAMbcfelYp3fvo3HbwPWTJvmbl6LF/db7HE8++xBuX3+Lw8JDaFeRpyjjJ2MmHjEYjxqOMnfGAnZ2cU7snGOQpg0Rfus1duQACIYOdjW/7g6PpGz+XgF5/XY45Zo7eJ9fgxTZGLYaAICcQsxw7r7UP+Gv5LX/Kjc/Yr/zDf/KfemszTfDKVDLTcidIQeH8rBTJPHg9kIE9H2TivY/2yM0ePZ454/R0/s47qEzFwdUrmOAQzjMUmn2f4IuafDhAmEAuE0Tt2d8ZY61lHjwvvHWZZ66+yaG3lCJgfGBelkxncyazGcbalUe+b07SzscoaOeTVVPgvSfVEt2Y6iiZ4BzoJMM5g9Kypc6IL1iE1JdvceMUKI6kdcgY6TyZTDDGIERMmBsOo+HPigVPlJhlSRpd/IKPhX9RUhYV82IRjaGWPV3DNbDONkmHyzVA0wD0SNra9r5LuF8rtdYwrJn1+Ch9S9OUbBgn1zxJ13T8xjikBGeiFl4RCabOuSiXFGG1YlE9jP53QwGC8P+CZ1/5r/TcvlIttDITuqTC5d8s/3/ZQB4eHhKc5/Tp02ituX79OmmacvXaFUaDAfdeuOvKpz71qS+d2Nv/q2mWPfoTP/Wnf9ulBL5fVgAb6+tVQQ19E/M2iL3rERC2QPBsTsRtk54+E5+NKbcL04stkH/fXr/PtKe7Ggjbi3iv+kD0NzjHri9YXxeE76LNDNuoF6L/D3qzE9jkR7Sv3jyff3Cp4pd+5Zf4xlMvcDCdEYTHh4pEQGI8AxX3g9kwRScx0n5vtMMwyxkN8wvj3R1OnDzJaGdHjXfe/jtnT4/D6ZMjzuzvccEdkoRj3qf1l00BCknS9VnQa83l0Xt4S/Xmn5sP0i/+8Bc+87es9/tU82dttTjc8wf/PSFwQ+7/GZmPL8wrf+3Zx5/4r4R1VE6ZQnDdWD9N09Q7Z5TwYS8Ef/L6689KpxTWGoK3oCQy3+FGNcemDuEqHrrrPlKhETbw5huvY2uDSBJ2z+zw4ds+SJ2keCmo8dTW88zTTzMvilgkl/kGQuCa5zGbF0ymcw5uGEymAN3kxCukDAjhCCrD2RmpHOJMjA9eTrTOGJxklSK5hN19tCEkECjLxpOhsfndGY0ZDoekiY5ZC0KgpUKpDKUaZrvzzOcLpvMZtTWUtV1N/VoohBIr85m+8hgll7I1zcfQnfhz0QEaQxz2u257zd/tjsfkec5wNIos94Yk6WzA1q6Jzo78iEQ2TpnO44zDWYvDr03F/yrke7+lJlax6V64DNvyTQbAMkQpz3O8daswoqVs0odAURZMptMTVy69cefw/sGFPM9f5LdhSND7CvqI5/7QgdR7IPjjYn9DD1t9o1CFzalYbIbv9DYcGxB9qyjDuzcBInQQCXp23WGLyVHYhM377lD0OCOKsCkxPNZHoQdfCj0NxxoZsafpENvuQmxBR+LvfvGNir/9C/+QRx97gTok6DzDuJLKSkaNj/tkUSO15obxGFeitSRcnpKkChN8w47WBBDjQS6kt9xydo+HHriPj3/443zw3ju54/zoz5688uxPEYSKiUj0uDZ2kaAtIVLxBaibnyajG5f++tHSeUVvVQgRzvjDv8zihjsF4s4PnZa2mb4P/fgveo/13guhVa4Q5zUHP/H4029QVMLOh4MDY8w8QYy0q7RQg+DHiRQwfvXqJRUs2NojnUBpQe0K0JrKWmpXcMfFiwQhOLx+yCc+/BClMSsPdoggTTZIYwQv8Og3nuDcqf0mLVGidRILutRoGQOEqqJgOpsxm9VYBx4NwsaTenD4ILBONGmDHhssNOZC5WKBrUskgUwnDNKUoU7QUjUfR4WWsfFw1lLUxSoYaF7NMcJFu17RoCW4leV0wK+c7EKIC5r4VoTGrCkQGkOnVah1877K0KAZxq3MipRUK8OeVKUoJdjb240kRKVWCYg0jYtSAkK8zjKpMPoheJw1DVk0xMNJSUSQKKnWPibvdRZANw1x+bMlspOoSIrEx3TS4HwMFcNh62gOptOExWJBNshjPHaaUpclk+lUv3N4/fwdwf+AC/6pmw3AexgBEH2t78YergODi87+P4SeZiB0zWnYZK13d/BiHY7om/jFMejDtialy2nYNuG3n/M27//AFvtg0Q/Tb12NiJ5Ctm3lII55vH0dQ593AR3pJhtIxtfMgH/0q1/msSefJ8gc4QRlWaJTRZpm0dbXK9A5toke9kpReotOkmh8owRCaox1aJ1ybWbRwPTVA1587St89evP85lPfpTf97s+++cfunj/j5688uzPb3Ap2uhM85gt8OqJOzCLQDkrkMEzGGhIBDpPXgxS/Lwsy1+7ZfHO/ykgUWJpV9s1cAq6zRvR8XfyjJz8eaSoYimOkfWA+MEHb6OGcCj2/oqXSamFuGPorvxYoW77+975QofLP/H40wXUklpR10Hc8Nb6TAmptNjPvRNOp8nBmy9TGYtMcmxZIQWkSUJd16ud/+nT+4BjNpvxQ9/7McrKNZb+cUpWOon7b6ma6azm208/RVkWWO+jz4CMVk6uaciLomIyW3B4OMVYiwec8OiRZicfR4DeBZRoMhgkSBFPb0LJGAk9mzOZT6mqiuCjhNEGdwT5B0ftl0mMEqk0olEBxKCgtq+Hb5R+svFhiI57MfMhMgYIAglR1ifVyqVvOBwyyAYkqaaqipX97tLsaBmtLKSIaZbBNemUS2c+T5IodJpQVCWiZWzUnpTfDyTAdshTe9Wy8hfwAWcsvkFAlgoUay3GRFQnyzKm0ylpmjIvC3Z2djh0De+jKk/Ni+LWJE3P/cyf++nRn/hzPzm/2QC8BxuA0HTjAvCW42H27uS5Bs/32OuKLtTeA/WKViHthbWPWyu04AaxRYK3UfDEmnXuOkLQalD6XAm7TP2NBmd5u22JX1/T0fEVaKMHGwmJfbyJ9vNmU2b5bjyCLkwjAm+cvPuPfPP/+42/8di3X6Z2kkQCzqGFjw7ESkVNt4u7Qo/Fici6l1IhnEd4SWhgWyUiS1wKSQiCGokWgktvv821X/4VXHBy59/4PT9/stt4hvakH5/Xa2ce/qvfev7STzzzG4/xzlsHvP7aZUpTMNjdYe/kCfb2du4Zjod/cjzK/uTp0UiMB4rhIEa37g5HjHcHl+48eOk2CZ4glpaKSavRVMAg/hMb71MK8gyTP40PBkiAMLCv/4FlutLnP3iSxt+Ow3rwMwKxt5POfnxa539znFR/tCTwrWdmWKvxriYMBUF4qlC5apgfVLWdWVvtvvX6y/sEJeOJOJA2dq5KqajnDoZbb78dlMJZy2xywCc/fH8s7A2TXulo8UqQ2AAuCB5/8jvMZnNCAGNX0AiyMdyxzjCbzTicLLAInIrsfl9MqV1F4Q1BOXQCVQVIjQqxAbTOolRCwDWGM1HGWBWLJr+gCT5auT3F3IJE5dgqxlXXpowZE806REvBeG8XrTWZVgyHwxWELRPPvJigpVqlQy4PnSTRjUd+9FYwxiClwPuYHqmSCDTNixl5PmQ+K5gczhgMBuzu7pJl2WoG2AAK206KwvNbvUfoGhF1m5rIkzArpMA5t3JxrOqK/dGQyWSyiiFeNg5SSsq65tqNg9ELzz57/uGPfOSWwXBwErjZALzXLu2DREnIh3IL7Ex/wW/vmrcR+/okc6Jn1bCVxNfVnYstj6uTNbDBpO/UwuPQiW4h73PoW0MMxOa03X7eYtu+u9NwiG7T1Sfn6+lqRB+K0vFGED3qjdZtHEyKv/H62wccTIs45VsXpWpSU1cFInhypaO8yxmkiLG9AYFEoRsbYBtkZKYHi3DRxtYgsF5iCGidU3vHl7/6TS5evMDpL3zsr9xx/cUvHr1XYZVaCPDCifv5tV9/7Cf+r1/+Mt/+zksU0xKdJHglqF1NVRustyKRKhnkipM7I/ZGGSf2dtjZGXLmzCk+cPHOCw88cK+/7/Zzf/JkKh7defvZLxMdBNQGUtKHkhAUMFznurCmDEni+yXOJMWfXt5InlZ/hIDIheBzD5yhZp13GiBM/d7PuSQtqsE4/86jX/0idcAGZchTMEZkWmhkIPiaKggOLj9L5UQMV2qIbEnjthjJfCm33XoPUiV4L1gUJR9/8G58SFY9thQxNriuAipJMK7msSe+xaJYYKzHeo8xHscQHwLWRqXBrCiZTedMDid4L/EBJBlCS9IkAx2Dog4PD6lbVTT4yBNZFlDnAqEu0TolS1ISpRmOYnZAnqeroqSUOPICaPgNVVWsjI2EOCpK0VXRI6Vufh6bUx9icJO1FqEV3gmEVqvbFEKsmO9LH4W2sVK3eEbUFPpVDe+hcz/r8c/tYKh2w9NugJb/qqLmxmQiKlOfQfC5AE/8zF/46df/xE/9ZLjZALwHEQAfAkrBMJfboXyOkdt1p+burl5sKcKiQ00Xff4Bx6AKcLw5Tl/xPE7jv+FsyLuQ1cUWff42fsIxaYJr037oaX46z5tONekUpH5OQ9gkBza3OZ8XvPP2NRZFBTpFIKitwxnDPXde4GQSmF99k1DPcHUVJzcfsN7j0IDEIim8xIjAQEUduvYZPghkOsC4gBbgrOXtqzd4/NvP8r2fePCL49seum//8ref23iNBHz1G0/x9//BP+KpZ14joJBZDgqkMAy0ZjjIcUEiGjez6WHFYlJy+fINgvRIlXJi/xnuvfiU/B0/8Nm/9Ds/9+l/Ku78+OdHr33jn/a/J+0GsAsphZ5V1dr3CStjxVbz2XxJN1ZSQebyxo9jqZm9k1744GlpYlkRU7X/n43dwU8fHUJDCgJfe/ZtJBneK4J1q4YlBEGV5JQkvPPGqwQHXmi8h0QonDua9oKrkOWUB+++l9KLmMT40XuxLuoHlkmQaTqI+Q4ISmuwzvKrv/4bLOYnmsx4FVcGUpEkKQjJ4XTGQa6Y3JBY60BF2Fk2Vr4hSLwXBBkhZy3kyqY2qg8sg8EAiCmTy2awrmNY0mCw0/xcI4TE2rj71zrKJpM0oyiK+FxVCiFQGYdSKcbUWKdilDRyFfhT1/VKcTEej1eTcLsB6CYmvi+GPyka/sbRyiB6TYSN5keGaMykhaQkWkbXxpys6vrWuq5vGQwGzwPTmw3Ae6wBoOljpYw58hua9y7M3EsmY521H+ivmL3uez2FO3Qg8RU0HDYn5OMeE30rhZ69/rbduehM0KEzoYuuxFD0uPD1Fe4e9v/KJ0Bsriy6ry9sIgftYKJt8sKukoIjpKKqDPN5EScqEbDGQRMz+wd+5Pfz8Omcy9/5KqE6oC5mzGclVe2ZVzVFaViUlllluGE9c1tTzKZ4ISjKgoSMRcipPFgBQqdICc+98ipvX59wx/nTP1be8eHP5K89+c+Wz2Ny54fv+9Zzl577hV/8X3nqOy/ixRCpU6SyBG9WE5rw8fHKoJAyQQoPwmMJEZqWgiuHJdeeeIGDSSX3T5z5/s9+z4O/PApi80DsHkdiS8PURWbaaNHa9duoguiRggoJ7LaPsSRQAyazB3+e1vocAWmAL9x/7ii7YU3qGcV2N0488Pe+/eg3f9TXELxFNAQ9lIyaCmfwSvLAhQFfe/kZSi9wsVsglRoRBKZ2SJ0giwUfuPcDFF5SW8vh5IDf+wOfABeLeGTxNQVcKpyL2v9f+6dfYTrbx/gQI6OFROkYtGO9pzKGcrHgcHoELSdJlD1qJXF1hXMOraIszXlHkmTUdU1wkCU5+EBd1THARynKsiRJEhbzOVmaI5TE+GVkr0QlCWmTNWCMwVu7mmzbUblLSeBoNFqT0a2dM1sR3O/lc38bAVgSJiNnYpNEuJz+tY7ZFDjPweHh8LWXXj6386GH7xiNRqduNgDv0YtYZoWHY05WfTD/cbVmm8Rtw7e+R8a2bfUgtk33dE7SHTi3G9fb7RU2JnaxOTF31x4bfctxj30LIWGN7Q4bZMbAptZ/G++iTwWwFXWgY8AEpqwoFwXSG0wIKJGglCSVcPvJEXekU07v1YxkQHiNDft4Fx3rvIlxv4WTzBxUOMpFwcIEri4Ul82Qr14uefqtA2okSgTA8Mrrl3j2xVd4+P57fnBHyy+1FQDXJvVjX//mCzz+1AsEchI9wJqKQIWQAaUGMVEwgHAN2axBT0KIWvSiNohEg05xzvL0y6/z//7ao9x54fbB8NaH/8ju5Sf/h9VnWWxBqLaRTkUHKRDHOFQel5nBRtOnzOkLP5ZcfeVvNw3C+m2LVlR0d00EnL/xzI+ev2+ACUS6w8axGK2TvvbSgtOJxfsBxhqkyiA0KY46qi4fuWvIl166ROUszliEVAwbQmKQClMbssGAu+66lapBgxaLOb/nc99DUderhMYsy6I8sElfrC189etPMluUERkAjPNHoUQ+IKWiqi1VtWAymeNszTjLMGaOEBohAsNMYk2Nd5DqaCi9NxpSlQbnLCF4lNQkOmExryJfRWi0jsmUAQfC06gEV5bGxlYx30DrGJsrltbAYdVQvNd5gp6AVEd20THt0a9iqZWQrVOJWPWrWirSNMV4x+HkkHlZnPbef9p7//W/8l/8l5e++Gf/TLjZALxnusCjKG9gxTheg+63sszZzpJ/t5CgXl4B6xPWWhgPm0Ws61vf60LYIeh1i2Ho8+APWzgI9EgW+5L8OrHJ3QId+go5PeS/nuai/Xr3rlH6Jlg2HQ57AJPZomJelA0jO6xgz1OnT7GXKXR5jVNphagO0dgIuyuFkh6hBNJLrNQUKCya9NQOhVeU6VmuZrdy/Ssv8cr1Q2of8N6ChKq0PPWdV/jC91XfPz6VfjRvPe7rh4udZ158DWMVOhlgi4o0iYxzYQ2yXiCW8cVeIoRCSgVCRSdBHffJVXBYW6OUwlrBNx9/iicf+Yi/9ZHbLu8iAiJssbk+jgsj+tdBHNP4bahi+ngc8WfJ1Ut/Z90co6/5XAuXsq1HqgmQrElzN4+Pz14cYRkSJQ+jDnUnmhN96eUb7KUJwQh0PoC6BhFDfYSWOBV45O7Ar778NCWKYC1aK+qiIE0igXEwGBHKG9xz332UVmCcZ1HUfP7TH4+qEhfDapIkxYZoGCSEwFiPkIGvP/YExckyRkv7SF7TClwIKBk5DvNFyXQyw1qPrQuUVDEVUiqCCJiqYDwcUlYVNNHTRgScEGtpiEuZ3DI6N03T1XT8flEHtHf6S+7EKhyq8XCQrUjkJVLQVhGkScLBwQFpljJfzPeLojifZ9mZPM9HwOxmA/Ce4gDAMk1dNl7ca+YxIvQH4vSSpdpFqy9oZ8uE1J91u0W+15mA13gIfSfW1olzqzRw6zTWuQ/eBVoPW5qjbnFpwRJbfQLEMQ6GYo1J1iv761NN9AUFNd9Oy8DhwuKERCiJDgJT1+yOxySJhkU0BAl6gJAO4Q0yBGQICOGRApQMaBliUa5nZCRk2SmGZ3f4wMVbefT5l7l+/Tqe6LyXJbu89MJbvPb6De48e8eNNtHyxmzOm1euIlSCFAIpAsFWjHLFQxdv47RcoM2MsqyZlRXTRcm0tBwWgcrAxEC+v4dIErRQ4C25kswPJ7z6wnO4j1/4C6s35N3MmAJbGtLvwiOj64/R11msk0zVMa5Pbf5A+/MlzJnb/nBy5bW/tYGM9R0fzfPQfauoliXv7757H9OcC5ZWCvGSRZuFoPnSy1N20sCOHGDqmPR3YjwiOIeTijRIPnb/kF976SXKoLE2EDz44FFCMEhTTF2TuCkPPvQhFrXFNmhCUSz4vu/5IMZFv4QsSQkhkvbSNGVRlaTZgCe+9W2K+TxG/yIjihGPwshfKCvm8wU3Ji6SG4NkNFAYK0gTj3UBZz218YQgVn747YCmduF8X5z74wcW74jhUQJs8Ct3wNV6IHBUG4ixzEkS/UDKquTgxuHo0vMvnh1++OHzg8HwxM0G4D3VAMQTQ1hlrh8zTbZPRu9m0CO6bPotRVaEzWk2bCPIbfHA79W7079WaEPs26KOwxaofOPP+3gFrK9L6GmeNv6+PaUdp/Xv4wTQD++H7u2ypXAdfVsYQ1FVOBcXzyYEdKLYG+XsZBolA9YaBqnG2RqlJDLYpn6EOIQKUMIjvGeQC0yARXWItgV3nT/FqZ2cG9csmUoxXiBVwutvXuX5l17hkx+982Ptx19UFS6AC5a68IzzHCrDiWHGJx64iwfGFQNzGBPyTKBwgoWTHNSCQ6OZhJzn3rrG869dZt4k4oVGk379xiSpavOpjeOqb23SC//T07Qtf+/7Pz5C9CA+naavTwHCljXZelOpkiuv/9xW+Sw9TQxbkKEOwTHZWK+tR2T/7otjDDExOYSkdVtq9e1vvGIYJ5pdL/EiFhxEdAR0rkBlkk9eTPiVF75FiY5rJe8jNwEZbYG9Q3nBPfc/SO3imsC5QFEUfPyhezE2Pj4hBFInWB+QUuM8SC156sknmc7GDdExYALx+LKB4B3We+aLgumsYDo9xDqPUo7ga/AKiVqdNwQeEfo5AGGDGtVv+bu8fhBt5VWbhO07f7f8hexA+Uf/L/EbM8+7IQArKXjr3xLxEELgRUDIIwRASon0miRNccYwmU5ZVNXpgPhsCOGbwGs3G4D3SgOwnESVAhuTz/ojb9sTvViX2InjJnq2F3fRPfG2bn+bY2B4Fwc9elYQG9yAYwqt6OYNiJ5+qEeZELZhxT0QrOg0H9ssk9tNy0ZMb4fwFzqExY0T+jFcCAJvjm5/ZDL5ymPGVsiQgkjw0lJXC86eGJFjCL4mT0GGCi09cun0LhOQDkKNDBWJyAkyIgOJCijnKRc3ODO6nTtOjHn9dU0VovmfswJkxbdfeJbLVx/84kkEi9sf/l1eJueqy9/6n2eTQ6QAkQoquyANhv18l/N5yp07hh3rEU4ACucVRggqAQu5xyy5hVGW8tbVa0zmZYQ5EaRBIaUmz3egaKRca+ZTcvP9Wmt6j0uC7AuF2uZ+SU+6JUeo0EaT+l00Jhsrh22x2N11W7eX7VHNIPpXTqJpEgib1t7Nz37wYtJIIONrsiyK8aY0AfjSK3NGWjEMhqCi/7MUkViopCSYwEP3aB699Bw1Cc4TbX1NPGstE/8yrbhw5x1YoXABrPMsioKPPHAv1sf3WimJVR6URDgFHqQSlLXl69/8FrPiNLbJTw4enDEs5jXTaY1xltEwRTjwS/SuzukAACAASURBVPhcx/WTDwEXosOg954gxGrP7peEaxEfa7BRlWEby2KCbPwKVDRQ8oJES3xdoxOJE8S1iE5WaxJrPCppSSHrmkxJnIvmUjQ5EMsmIeCQTUMhvMLVhkwnFMbGiGjnmc/nnDt3Duujy6NQUWIaGkKlSjQq0aSLnKpcUNU1xtoTdVWfrytz9q/99H87/OM/+Z8sbjYA740GIHqtBRHCGnmuD7Hv7s+3TEaILVNndzct+ifc49QDQmyJze0Wf9GTadApnH2JhWsn+WO4AGs3GXosikW/OQ9dNERsELz6IdtOM4DYWhfWT8JbHBU7ZkDW+h9fFBOMqQhBrwJdlBbsDnO0sEhhUBqSEJDBIwL4EE9MUkhwoIUihDjBCQQSgRYW7QrOjAX33HaKrz0Zae4iSIQC6x2vv3GZN69c49aHv+f3DgK3G+N/cjGvMZVdkZSCBIRjlCh2M8FQ1IyoUQRkkHgpMSFgRWCgEoQwpNaiVm5zHolEp4JsuNODMIntx/XGaxj69vAdlKwzLW/kWfSZTfWpR0T/8dglxG5tArrqhC4nR/TwVsTWM8Z2MuPymJebx11YSiC3EWUDP3zXcKVuCK3jUzT4UkDylUsVp2SKq0uct0iZEoaKmIyk8dZy10XL02+8RE2CbVjttq4RSqMaW+BMwn0XLuJI8UHgPVjrWCwWfOajD+GkQqYJUmjqsqRYVDz79Hc4PJxQ1RXG1BjnMCoiFQETG5LGWlfpNPplCEVtomOhIqYrpklCCJZhlkW/hdqsopJCiDC8czYmGTqHtzVKJlFOqQWexs7XeaRW2EbN0Hb9S5KEYA1eyKPWdO0Q8tAkNsK6BHC55383ZCNNU4qioKpqrh0cDN985fWzowdH50ej0QngZgPwnuEArD5irf3W2glxSyEU4pgCue3EedxuurPnF/TrsI+V7fUx4MPxzPxtMsK1nW+fZLAH7t9oho6Djjsn6m5B4F0Iidteg7Dtut3G5KgZMab64my2aIxkVFMTHErA7ngAwiKkRSZNrKwXSK8RIeBFQCqwQSFlinAa3UxDUklS5yjrG+ypgvtvP8M4S5nPPUI5pFI4L3nzzbe59OplPnjvXb+UDPJHKmfvnc8LjLFrjGvnDMOhZpBqkib8JgYLyfh3BKQAozReQGVi+lv0/lONIY3m5P4IqXgNwR1HK6GwCsdebwTEltVXXxHsFPnQ4w2xDXHqa7I3JKChT0rYsz5o30boadC7qIDYYulND+wftiAKHLPK6LxGgd7I8aSLkHRu/vN3ZVHdQEJAN9cKDXQe9etPvFpxDkeFxePxwRDGOcHYhsAYuHBB8PTl1zAhwdmAtxZnDdZ6BsM9Ku9JJFy86zbwhrfeeIPUXsDUjsn8AGtrytozKctVw2KdxxiDNQ7nIq+gtpbaKox1+BBIvMCZMmrpS4PKBmTpIE7ZNsSpWwt0pjFVuXJSdM5R1Q6kQqkk5jO4mizRGBlDoqKcMTRBTL75PLz7+R8isdK5qO1fSv3e7bLkAdjKMJ1O5bSYnxZCfB/wTX4bZAO8T5wAw+owOCJ6sH0Hvgand6bODTKR6CRr9OwlN1b44V2sfHum4T4znrZMK3RPRN21wzFFdyOcZhvkQH92AH1NhOgp5KKHw9hjE3wM4rt+cu5mI4hjEZvKRitY51zTBHpCcCgtGe+OYgKddqh4vKCcBNckzWGxQqPyAc6ARJKmUDuL0IJUQmoLXH3AxXP7XLjtNO889yZOBGwIaKlYFIZXXr3MwXTBeDh6s/aS+aLCOtG49BI5BsGwkysyHcNmEuTKYW4ZLBP3wBLrA6aqsdZHeWAQkeykFKPxSa+kepPgb41uNj0hTvTZRW+Dx7Z8FWxfWYktDe9WBKrvWO8xjOqFhnqge7Y0td2VR6819bbGtoco2ZUUix6/j7Xn3yM9bn1WkmOJx4JP3pk3tsxLanMa44hbct6nX/Xc6mtK6/FSEaQl5DI2Fs7jBil3PvABnn3lZapFSVWXjEYDwhDOnDtBEIbaeqSK0cNBSGxtWBQVVVVFe2XrqaqK67NFo2CIjorWWmbzEu+j0daiqqmNQRD9LVxpMKZG5wnCebJUR6xWSpyHYCtCCKQJWFMgZYqzjiBFswZZ2m83jtdB9nOqW6iBlNEboa7rKH3U+rtSPGitwQequsY6t29qc8YZe+Kv/YX/OvnjP/WnzM0G4Lf4xTkXWpu/IIVgK/s4dGF4tqTUhR6eW+gPoOlzGhQdI6A+58HQc3IQ9BgQ9fEZehqBPoyrbye/LbCnzya4r4hs9UzYciI+llsQehqsLUSzDaHF+n66LEumk3nctwq30gWnqWZnZ4BOPHogkNIjfNy5xyA4ASRIOSDNz2HmNWE+BWUJSQAZUAYGMlDWB5w7cZoP3X+Bx158FYPGOVBC46znxUuv8c7BlA//wL/z1nNf+UUm8wrbsLKXj1Mqwe4oJVOBVDYxr43lKyF+KD1xSrIeCl/jhUOgWLa6aaLY29uzSP0mRP4aQSSb9VxsOYa7DewxLpIbx2cPIhC2oTs9K7c+M6peYuAxHJkNxcKml8D6IS6Okcj28G5E57hfQ/b6Pst9KowtjqC9xN1uAxEaJKE7oBy9vh+7UzZIgo/JgBCtg4UnBIMXNc+8+lw476H0CK+GJInhrvtu4zCFBYLCpNTzKhoiBTDWUdaGsqpxtsbbWFwfHA5XXAIbAovpFBdgXhiq2jCdTynLkqqc462hKhbM5zPKsvz/2XvzmNuy9Kzv9661x3PON9+x5qGr3V2u6rbbbmhPyG7+CIjBgIAAEZGiRAJbURAJJJYSUIRD5CQIx2EIKJGiSEQyhGAcBYIJEDxVd+Meqseq6hpv3Vt3vvcbzrSntd78sc/33XP2Wfvcyl+ubtWRqm/1re87wz57rfW+z/O8z4M2Dam1rdGWh6JpMFjECEYsVe2weYyI4vU0mAmcb70K+joGWer+T/+s63oxtpkvPAHc5sPDCHEcU84Liqrk/uH9fDqebttGd4bbW/libX1YAHywEQC/ssGZXjpRAhw+/R1qkMNfXqzSI4iXdZGUhkbldJV/Dx6CrMKnquvIhLxPvcPKZq+bu/PQRrxcNAWpg4Dgq1cXEYJtw2NeQV2ErL/v2XzOZDY/o4EUj6pnkKeMhjE2brCpbz3Ya9+22o3iifBYiAZU6XbbhWtF7edg22hRo57MxNQyI4vmPPP0RbZHMfXM47WdrW6c5/qNO1y7cde//bVf+8nj42OdzOdy2t6fUlNZHDEcJCR2MeRlFFHT+pRK2/HZRQxsWQoz5xDvMRK1aMMi13w0HPhY5FvVhWf/++TOm//P2XXS0Lid9PD0HRh/BaaXjcqblU5dOvdJqFjt5m4EC+SeaZcgItA1+gr8KZ38jb57XkNUYU/L2WfhrX3VKuujkyo96CEBUW4PG6YLumFZvyFm6QdrPnXuUMq2OlzQE0JUvwO1pQ1XTpg/+uJbNtm94KlGlauZuJKpc8zFUqs9Kkv1R3ePkbLcccZI472J05iyrMgG7bidyjkia7Dq0brC+4qmqWnmM+qiJEtypmVNieHq9Ru8/q1XuXXrNnE+aIWvTonz1sfBIe0a9Q8uqw96VpizIr9pGrxv6QvV1vnz/XT/cRwTJTHT6ZR5Mefo+Cj99rdf2f/Ei588PzTsACcfFgDfARqA9QOOddiawOEq4b9e79h1tWhYOYA7gT29I1cSFklJiE/tdEYPDSHq/tnZ0Pq6+40Tk93324H+u7B/H76/Jk4LcMPdAkMDLnVrRdRq8TGZF8xnRYuGnyZDes9wlJFlEVgHSYWxHrVtulvrHis4F1GZhNtHJbv5kN1Rjm3GYNuccRGQSIl8SVEfcvHcHs88cZGj125S88Bi9Hg65/W3rvCJF3/wH83mqkXl5PQeNVbwTsizlK08JY6UyHuMXXQxIu321yoFUWMpGkfZtNCv+FbpEscJuztbDAeRR5s7yZ23fhkVc5Y8GDqd1iigLtIlq7C9bNCmdAsJ2VC4higGoW/RrR7+3QN3k/6lVzci/WOmaxSCho2meunEkEaoO9GyTCFq4D0RGGPsUBVo2KJ5Tbi7+I79KpKYruxzCpRnP290zvDWN54hHYJYBr5ht2nA14Bldvm536p0Ps7Ta79revEj/zoZXv6JEzfjyOCcSYq6YT6bTO3h4WFscEOjXlxdUhZTymJOYzzxIGKUb1E6z6z2xFToyT6PHAwZ7l1kUsHXXnmz7dh9m+gnpnV2XYs57lqJnEUkt7/X6n/kzLXxYQ+bxERlS4HURc1kPqVRfyCx+WGx8mW+y8cBvzsQgIXLky4vxtOkKw3Mq2unm+92AWuLulOxh4SBbOqculn2gRGrjfYAGoAwA05+Kx0GnVS+TQ3+WhhMD4zfs5H2wcJrnWBAj0GA9lDW4QwJ8L0d2HleVMzKCn8qRwYQz2iUk2YGGzdI0gAeIt9OG6tBjaB1TFFHvHt0RGlzhlsxVuNFRuDiJa3DUuP0hHPbF/mepx7la2/cxNcQRYJEraPb9dt3za27R1gTUxQ1jbapgmYxaDZMUgZZRJ4IxgumOc2Ad5zOtHgneGMpvGvtaRtBvSC27VqyQUaepMaUJ6+jmrVYqWwWqAZjqQOTLw+Eo83KXhH6XlYraL90Q+kSVx6F78H3YTvdzeUIWgusve8wjSEhtK1LE9BfSGgANQyO+4aMkTRMX61Rft0JJn0IrRfyJelqiLpsTmcklyOojtYLdGBw487vHNBOVqdH3/oJjt+WkVgeUUvx+Md/xeztb9fbSamPnBuZLHnKinmympzUxzSTSVHI/ORodzwtKcdTmBVorDxy2TK5c4PZZMrBo5c4KTxf+NJXGcQpYjOMmJYOWEoy7O5LbZG8Gmx0moVwKgA8NQPaDOq2RkJpnhFFEXXT4Fyz1zT1xaauz/3tn/1v85/+S//p/MMC4ANdAJzOxbZCK9/tUiUg1FmJ+dUNMb7L3RGB+N1O16R9dsKBTr1rh0qAR+12bbIJ2mSDJmCDcKrbQYRQTAkdztrzXCEYtY/O6HrShwqgPsRh9XVOxjN87Yls3E73qxJbYW9rQDYAm9RYFOcqbHQqHvJ4Y1ATUZPwzuEhVTLj8Qs5UWOx1uCrBrtl8fUcIiUzSu6UZx67zMXdbeZ3Klw1R+J2Nvzqtdu8d/MuWTpgVpc49SgN6oXEQ54kbA0yothj3QOtQtXUiDWIGjQyNMYyb5Rp6agX42KYNi53mG2RxMbuH73xf6wXsw+xwT6jrxYEMrI46DVZoWNU9ejgY39i9/6rvxgcN11DrNDqsad/Krn29t9G8c2lJ/5kdOvdX1w9lCTQ1W9IlwwJ6UJIXTekCtbXRl9mRxcx6x37DRQddPaDNV1PaMRS1w/6PrdL6T/vg0WxEB6bhQDFwfr+tW6qtP3gfU5AJ2eaiOzde/8WOpgnxkYYE2HtEBFSVc2efPHvXnj8iVGcPven1GvaSCLzw+PB3cmU+9evMrnxHu8VBVlkuTUbU85nDLb2sFGrQ5C4LcxlYausy42ccPb/oyiiLEuiqLVsrqrq7BxI03RlvHDZ/fAUWZjNZmRZhqpyfP+Qqmq4f3Q0OLx++2CQ5eeSNN0CPiwAPsiPU6FHXddIruQSOEh7IW8NcKJ9TmR9o1WE1fNrRUVg9CgIaYf3imBIESGaICAqDHbNBCD3AKIRgnFDO5KG9Aah1wvAytrXaW2Kbj573fqqG/7Hs6L5a2IkbRe4IIu8+MF2TpopklTtQeyatkj0SuNawxNMRllF3J1W2PsnTJ65QJYPwB+3FL4RNG5AaiIp2bENT17e4fLBDjfuX8eZiEbbEaS79w755itvsbe7xeHxCbXziG3HEg3KIEvIckucgHGKMR4iRRqQhX+9V0ujhkldUjtPfdpEq2JFGA4z4sjEuB4VvfTMune6ykbQ27vP/nRj4j9UV/73T+ZzpvM54iLiOJbq+vgXnV5oNwsrZGlCnifkeU5k6r90/varP5u0B1EDuOTaO39j8b1KdOvqL4ZHPjuH/xJgsH6YdyDvNdQgkFyoHQFr97Ov3Z8bxnO79F6vNqDjQdBd892Jgm5seEjnIJ31pj0Ij/QV3T0UYAhVkM4IqdL/GdvramE+hNmQ03yh5sEFjV+782fJ98r6d/7k/xlF1ief/9//7eRTf+xv77z6yz/9xGd/Cpncxzc1t48Oeek3XsLVVZuS6A3DnX3mxbQ9yJ2n9QmUB26BalBxC48oPcs3qOs2XTNJkjNPgI2N42J/qJuGLMu4px4/n3NycmJvHN49uKSPP4/IV4DbHxYAH+QCYBH2gCrR2b27sDOVEFTW10EERt5WMgT6QkkCRUBQBR1QDGqgI+k6E3YNANcWugSMAQMFAoQ3prXCJKA7WOkauyJCDcCx3Yutm+HS7m6z1jlJ+Lq1BYT3av+9ybTQpmk3BL+Yp0uTmJ2dmHTYIgCqdavsZwEXquBdg40yKo05OiqYlPf4THORc7sjpLJYpYXnbZsXgM7J7JTLBzs88eQ+X3/rOq5RatcgccRkMuFLX/wyO7vb3L59l8ZXiGldyKLEMdyKGIwMceYQVbRpoUrjFl+7A68RjTOURUXZOMRGNCiNekZpzO7WkDxNYLZwAeyrIdfirVtc/86FT37x9t3jH7wxuc/tK2//zbt378vkZMzR8Yzjo5M2RhmJENvqEsQSp5bBIGN7Z8jOzg77+7s/e+H8LueGu2yPct2y9Z9+/OiNv4cQrSb8bUBxpLu2OjRWcNJlAyWgXSMvWe+4l2mv4FhPd6n20G3Kusalr+peKcp0vaJf0wZ1VL1dQ7BQ49B1yuztHjrreE3LIQFRchfNC+hzHrxGjBS7zG8S/+rf++Pt63jh1//WT5PmVVS7ZNo4MBHnz+9QVxXWtDw8UURVVWfhPtHS5Tb4FctgXZg1nc7/l2V5Fsl8Gs/80AMwipgXBVnWUgBVWTAvS2rn9hrvn3Pe7//Nv/Lf2P/wL/9n7sMC4AP6OBsFWfyvBKH0Pn49AB2uHISdxd1Vo/eg62uw7NrMcdeXINCFBMeL5CE8fIADlQ2OgOu73dqBsdo9BQxfll9bH7Z5SLgr0ZC2YsNnX/2MaSPuU76u2nEoWaTtAWlm2N4ZkA0EiWrU12AcfsExWiyuFmgSKmcZzxrGh2NuTx2PXEiJsxScQdWhFkykmLoE7jHIYx57ZJ/hUJgelgsjF6EoKq5fu8atG4a5O2nF9V4w6rGxJx8J+UAweQ3aoI3Hi4JvOx1xoETUZURVllRlOyJ4etlsZBkNE5LILsQOPUXU2dfa3gM1wtXt53jr1j1e/5XP/eAbV9/j+u2b9v7hsR2Pp8xmJVXVgFqa2hFFlsa1YklrTBu3LZ4kaQuB0WDA7s4Oe9s7XDi/Jc8+8/T/9rGnnuLy/haX7n2NhID6Xhcm9G2GJyh2vbjTtZG3MP0t/ZkXoquanC7/v8lxcIU+CaAPK0mfBCyXA8XBxtHHAJWwfIiLrHf/GigypBvq1NOwBA/5Hgqut3DvIA/SjXY+ff7JYOX3qippfP0zNop+bndvm1kTLQKTarYRoiihbBoGgwHiHa6pzq6XisFo27kv7/3GGMqypCgKgPeNAADUC9fApmnIBwPEK5VrGE/Go6IoDorpfD/P8gEw/rAA+OBSAGKMkbNQiNAseXfR60NSypSOn3rncJRORRwKqAlx3aHNai2nIBTzSz/9sNxhPyTNNXwwayAiOEQi9ow1hQKUghMYPaBIL8n5kGu8tAGVztFoQ5sT7/G+FfikccxWnpPmgklrvGkPtNYD2C2MI8BJxKxWJoXj6q0x79wc85GnLpClOeIjvHpEtPUzr2rUHzOItnn8yZzzF3KOxnPU5NTOIRhcXVOWNd4qJrZnhUlsDTtbEenQYbKqndt2oAt7V12Y/Xix1A1UWlNpg1NBF7djksQkaUYcxYGubQX6bxDxqMiV3Y/GV+/c44u/8hJf/MZrvHfzDuNJybwsKas5jbNtQSQRxihV7aH2C5OUdhRyAZzCvOH+cUlsj8mTe+AjRluD6EtffY3LF/Z48SNP8uKnPsqTB+d4fPxKxz5XAB2X5x/579I7N/4iwk5Q4xIy1wkVgcHpki7U3UOHaAcqX6bDgtqCULEdJNp7imw6o68bXBjX9EsbDuZeAXGARghpdoIIgPY3SmtmUj1eJ2t0BKAl9l/9ws/NZpeZzOeoHXF8XGAMmMhSVCU2TttxvqYmsqe/78+ex6hBzwKHHtC/dV1jrT1z93s/UwDee5I8Y14UjEYjBKjnc47HJ/m7r795bvjiCxcHw3z3wwLgA/woq8oYERPHscRRJaJNj28461Bcd56eAEQXMv/oq4RXOL4+nYAJL8ju6FBokfWJC7vweTCSWHrojO58ND2BKwQ2M8ICwIeiGBrWY3S7lt63sbpJlo1nWrqF7ahfJH5BmmWk2YgkNUhUt81ndCrK8zSe1l5XY6Z1ybQsOTye8fa120z8RbajHCMpRjxKhTMFIhbjZySm4PHHD3j8kQPeePsEXIR6ENMmxBlVvGnV++2tpkTWMhpmZAPFpvViDrF1PRHV1iBFDZ6I+ViZakFVNXgEr63L5SBNGA1yYsvb4J/uO2tQcbf2n/0Tt8bu73/+N7/OS1/4Ct9+8wqHxxPKql7AqQY1CWIFrw1oa7+aZO0mWtdt2IvB4FQRidrQFxYBNYXFVRXHsxlHx8KtO4e88fZVfuub3+b7P/4Mz3/qe/n4pfO3njr85sXlb9pU9WF/QUtP8diT1dFH6wWBrtAIcB/0Tg+cTz9lRQ91GMrNCI7zSkD3ECqepZ9+2DCgsFFo2zNeG6T3NEBBEsoT0bX343E4D4N8yLU7R9QNeMtZbLFNYnxVtgFBrln5vKFt2HtPVbV22adQ/qk74MNij40xxEnCbDbDJjE2ipg1NZPxhHlVHoD+sKr/rh0H/K4oABrXRFVZpd45e/EiNvFHixRP6SlSlyvjUHst6/Bf72LqmqfQA6sTVq/3qny1v32XHsMRCUedop6H2ruucZ4b4NU17rNnU9x4DbrvucPjBje8fivnonDMphXGtNoPYyKSRBgMc+JhTpQYjHXtJYlOJ0cUVYv6hKaBk2LGcTFlWtR8862b3Dh8kUvndvDmPtgS1RpxDWITnJujZsa5c5d47tlLvPyNG1y92dqqRgLia04HshsPltYKNYqVQd4WACZxC2mTgFsIntRgsKgKpWuYzOY43wDpQgAIaZ4xHA5n1rvPg38UIVnfzJVrF7/vV968fu8f/F//7Fflyy+/wo2b95iXFYi2wS2mva4GwTu/4Fs9WhdI7HHOE4tFfYtIGNpixqsDbYucqi5I0oTIxsybhtnhhMNjuDsuuHLjLt94+yaf+eTzFz/ziY/xvHt9MQgpJj65+/MrTlpd58k1n/+eQrwLQ/eJ9bRnLXUnbbRHpyKsTjx0JwtE2WAqsk5trbXrhIvnkABxWUi74tQp/che91DuuA4Gp5vWivjeqiKwhfaES9GKc6taETHMZyVpAm6B60dRRFlVGO8xG8zJ/OJztczZAwOgOI4xxryv7h/aybGqqojT5KxgaBpPWVVUdb1TFuX5Kin2f+G/+Cvpn/uv/nL5YQHwAXycu3R+9N677+1UzWTLOxtLyPq0b9ZYl2HrPsFc6AAK3PXBOWcNO3yFDIE04N/f93675jl9sFuvZXAPYmfoNxlagTyXodouTB8qHAgopANdhYS4f8LCNn0AAs4qx6ysaRrXOomJkCYRg0FClqfYRFBjwCRolLXGOoAlo2lSKhMzXvigNwqvv3WXd2/O+cTz+7j4HirHGBTxnsgovm7AzYjzhsef3Gf//A63D49pmva9O4RTS0pRh8FiRUkSJcks8cAiiS6m8LTl/R0tGoDBu4hSlZOZa/9qwXfayJLGEXkai3HzL4D+4fUGWnn74iduvXLl1h/8pX/8z/mtL36T45M5nhhPAr5GbNMWNNq6HBpXksaGQZYwHMTs7++Q5ynT4yPm4ynz2Zi69tReqFWoSfBiFya0nroSjE1AIyov6Bzm03scHY25e+cOh3dvM/9dv4Onz+3+Txfvff1PopKsx1X3FMYs8f1dbrzbfQdRupB2RAN+/fTw2J1Ds/uca4jUprXJahEbKk5WDnh6TL16EknX9qQlPYXqekDamnniBs0FffWN9lAkHSThNLQHxYuBKKXywkkF+SglShIa5xAUa4XGNYtcAN/r4HwK9Z9OgkVRdPZ3D+3+Fx+/nM3JR8M2gEhATfvad+/fH9y9dmM3eoTd4fbWgAcOSh8WAB+kx2g02n70ycufevv1uwe6xoP3pQH2LdIQRNj1pJd+wxt5WNLdhujT0PiTEBYZdeHIUNqf8nAOX/quk6w7tm1CMGTDiFYoZyBk0SwBBzfVzXoAaQuAo1nDtKzbGeJF8E6SRuR5yt7uFhJZakmwZq+dENA5NjJ4ZxGG1JJyOK05OZnjXUw1V77ylVf5kc/8Ls4f7GHNbcwipc+5EjEWmpJhWnLuguXcpSH2yn3KqiIyGZUabBQBc6yBuGlQXxKlCel+giQGUoNIm/RmnEE0BhVqB0LOuBgzndecTjYYabPi0ixhNIyyvePX/vqa6kyEqxde/B+/+K23f+of/9N/yUu/+TLqDU6Fxhck6QDvfCumcgXiGp558hFe+MijPHZ+i8cu7uFdxfYo48L+HvOjQ05u36QcnzAr5hzOC8bkHPkB908cd+7d4+79MeOqoawsom3GfOvqZplOprz9zjWOTyYczkt+7LM/9qc/+egn/87jd776H4Dk7TiZbqCalg9iaR4ouxa5B2tjqBKmzbrBPSs0W2hcN4BErCFshE29lp9C6EEGe/QMwYEd7dlH+miOEEUR6tIDOgbtESWufJ7AdVzeA7q6KbooBZzMStQLV+7cQw2YOGkPcVFElVlZMxgM8AvKVM8ims3i8D7N1TAURUFRAozRwwAAIABJREFUFBhjSNOUOI7PEgGXC4UHl/MBNaBVwzDN8M6fIQKD4ZDpeMLR0WF89daN/d3zBxdy73eBww8LgA/Y49/8g39kxJjdKIkviLXbKm3IxNpC3BTWsfHAXFLAB5P54P0p7zoHW5DLDMxxKwGHsxD31/fSGxCHTb8b2gylR2OgymaxXgDy7ws9WulKtP+7W0JhHEpVtlGjVe0WonchtjGDPCHLEyQyCDmYEYJHfPxA+2Vyap9yMm04mVSgOfNpzdvv3OWda2N2DrYZxQPUR4v33qb7GXE4P+bCpfM89sQO2dffYz5tZ5FNlOAWEylGHEYMxnriFNKhIcoVUodKg/oG705nnC3eC00Fs6pmXtY0TnB20eHYmDRJSCMr0WmO0dLBd/jIp/7uN7/5zk/90i//cz735W+g0qqso7i1EnbVjNjU7A0dH3/uaV786BN8/NlH+J7H9hA3JrMeV86Jo4gsmmJHUO2kmGqbxo8oNMINz9EkB8xkyNvv3uKrX3+FK9fu8t79OfcPKwqU2qWttoKIWeVw9474F7/+RQ5nVSZ/4LM/bS+98OcfufeN/2FtmkZC9+vZbaLNufP/SXT37l9f19ywfq+pBER9fQ6U3eJYA0sktK+EOHNd77jXfC06NJw+JKZb6ZmIYf13Q81AlzLYtF1pT6bCyprWAPIiPVTNqv3z9U//edLb/5C5KvNGqRWq2pHlKWVV01SO7e1tnHOoStuVnwZp6ToCcJoDEEXRyvjfqT/Apocs7jc5RQRE2nFEA7NiTt3Uex5+yDXuiz/3537mys/8ws/5DwuADxL/7701aFo5hg5JlSwQVkOgEmXDYbjJmax7mGtgzF1WebW+iNPgfP/Sour+iq7DaWumOpvy2ulptNZm/NnME0iIm+1BRwgED/UWH7qu0egm0K0JshQv0Mwm1FVJ0zzwAVYMaTogz3KMeAwpRnIEh4jBCIg1GN2mrmNOjkvqplXZe3VcvXaLN966xfMvPIPYXcScYAHfODwGEyX4puDgXMwTT55nbz/m6HBOU3msEVzTIFHLq3g81jryQcRo2xIPaojmQNEqnJvT6+mxTnGNZ1ZMmVdTnFe03Z0wWPLBFnmcr32PDcLX3nnvz/zTf/U5vv6NN6gKj42iB66I4kiThuc/coHPfN8j/Pinn+PiwDOMZsT2dcrymMQa2k8Xo7UjpiYfNsQDxXtDUdc03MExQ8m4cMHzA7/3BY5Kyxdfvc5Xv32Db18Zc+3+hLlPcBq3G7SDxs353OdeRhui/I/+nr9xwbDQHXQoq6DXfms+E929+/OrnWafNoZ+5K9rlCQPQRD6KKggJdiJ1g4Fh/X0GeHuu1vYaP96DPL7EjZQEmm1QcGx3IeMKfMw3YP0eDG0j0d+6+fx8jh1XfNDP/TDvHn1FnGUUFcNde3Y2tri5HhClMSt4HZJT+lNe/7qQjNggaqq1gqAZYOghxUAp+vjFAGIoqh15qxqJpPpXnE8vTiX6HyexANg8mEB8AF6FGUpiJh5UcZl4yLfNy8vS8ZA2tPprsD3ujnVrK/LlQ3e430UQ2hFr3UPgbS0rnvew9AI6RmzCzqxab9wam2zJLCJEg5OWqNftJ8v1aX3tsFbWRWm0wnz2YzatTCjquK9Mhgk5HmKEQeSAtniOsTootpv3IiiMMxmICYBY7BRwng85p13DpmOE7aHW8Sy355YvkTxGJNgrZInDU8+vsvF8wNuXB0zrVsOUlVpI9wVByS2IU2F4SghSkuwrW+BioPIos61W5oamjnM64KinIEdtA6BCJGJGA1HrQmQtyDOo9SA/fboSXnp//6S/dLXvsVkWpImOXXtiCNDU0052Ev5ke9/jt/z48/zwkcGjMx9dmVGU9wDnZKkDbGJqdRjJcakhqaeYfCos1i1DOMUKFCdt+hCZincMaOtffZ+x2W+74XLfO7lm/zGl9/m9fcOOZrV+ChGUZpGqYqaz33hS2Zvf4etP/b7+PThl8KFdnh81qyiBYTvxRBc3c0ECDnt9UUSr4j+QmZeAc/9ZT2BaHjaZeXADokGA2mI0pNa2Ne7aK/pyYPkwOVrvZZi2kPDdT9LNzSsL24apUFwZYmJE37pl34ZY9sRVKceay1FUTAYDCiKAhvbjfv/6QSAqpKm6VkBcBrO9X4fuvjcsbH4OG5NgSYlh0eHg9fffv3CJz72/KXh1vm977YCwHynf4CTyZTxZKqT6dQez2rT+CZQHgvr6Tisj+mtbB5LC/pMAWtWocUV058N88CBl17l3E47hKVuxMh6RS0PgQeDtICudxnLnU+3A1vpRiQw59z1RZfVD7cS8xraFCUAq/aIL/uibJdfW+DenH9QTCYUTXP2fttI0JThKCHNU5AEawaIjBBGGNlHdB90H/XbzGYJZSUkyQDXKCqWxlvefus+t257vB6AnAM9QO0eNtpGbEaURIitePTyiMceuUAcQ2RMK2RaBPSJyJmRT5rGDIYxknpM6vGZQTOLTw0uEVwMPolpsMyqhmnRYG27mYkaEmvYGuWkWQzYorrw0b+AyPydnaf+/a9duaEvvfwyt+9PaBqlWfii+7riwn7O7/7R7+VP/9HfwQ99cov94TUi8xaNXMHmJ6RbQpIbsJ44V+K8ATsjGQoyNLjMUMWKSz0kBSY+IorvYQfHxPl9cnmPHa7w7M4RP/njj/Dv/pFP85nvu8T2lmCoEOuo3Iy6LGmKil//jS/w0ksvc+XxH3+fdNTyIlqC+Nd8PqTnMO78bHf8VUPCmADqFLrflzPrpfP7XQHw6ToPURi6vOd0b/aAodjya5klpE/k4UX/mqNhYD8I/OiDYqjjVbI8ligSoBQevJ9/ePtx5lXFvKiIohinSrMQvw7yEeqFyWRCkrQ6UQmCOB6kPfxP5//TND0zAHq/h/+ZidwSahBHUZst4Com8xmNc+dkkP4YVs59t2kAvuMLgMP79/X+vXt6eHxs5mUlzncOUvo4vs7s6soC7yzCbne/wodJWPnePdyDh17goDxdwBrajGRDvrt0eL8eHkSW4UgJF0LLvKH2dEW9xUEA/pPAz0oP37pWKMj6Ztf58TpK/vi4nlAv4H8RixFDlqUMBwlpmqBEwABlAIxQtoBdkF2832YyM1RlO0bUco+KEnHn7oxrV6d4PY9EF3F+G8wuEu3gJWvF7CKcOxjw7NP77OyMUGmw6IMxJm1n6J0X8jwnz3PERGicIdEAjXNIMohTiHOwGaWPOBo7isq1Sb9+sUHZmFE6ILanEwb65p2Dj/8710+av/uvf+MrvHnlPYrKtVCmEfATDvY9v+cnnucP//4X+dgzkEVXiMx1dg5q4q05Miip7YxKSnzUYFMg9jhbU9sGjQU7sNhRgh0aTOYxWYNkJT6dkWw5BnnBKD4h5Ro79j1+4KMRf+Czz/OjP/gsqUywNCRRjDUG74TD4xm/+muf48033wsEBXWWbNd8a7kA35SWJ4FDTEOHrq4+n4QQuUChHPTnDnyWs3URcNvsFunLa+ihgUTLOpkAfbiWDihhtG6TGdeyDkm6hcnSXivLzoiy+l0tveZEoa7nNOpbtb1XrIlRoKprZrMZqkqe51RV9VB10rSY0zQNcRyTJMmDg+19jgKeQf8LOc0pDRDHMTaJaZyjds1+1dSXqrq5+Nd/5r8cfkgBfIAet27fxjeNr6pKChq8jB4U5BIwAQq6hfXw8BoKu+lWzgHhUdeOs0/kvIln3NgF6bpYp2s12lUpB929HmInvDGKjJ5rp2GeVDdslhJ4fQIFwpqj4yIG2DnGNZRVKwYyWIw1xJElTjLSpA2585oiKIjnlEFUjVG2mY4nzOcNsBQv6izTWc2bb9/i5PgJ8vQiKkcoM0RKkGQxt58zHAx55umneezRK9y9fYOy9Ij3C2S0fc40S9ne3ibPhkhUIWYHkbpF8I1BYgFN8fUW8zLh6KiirhVjaZ0NUSJjSYfb2JgJNHF8542/P995ga++elVe+dbb0XzWoK5NBvZasrPj+dEffoqf/P3P8dHHZ0h9hTyf4qmY1ifYqN0FrEtI07j1I2gU9YZkOMD5djQK9YjzOCdopESaoLZ13fR4XNNgY2WYCrP6JhLVfOLZcwwHz0NZ8Kufe5PSZcQmpXIN81nFlas3+M3Pf4VLf+h38/z9L6x/710XP+3R9QQTMQOUQHDNaRhip+c+XEvoCyUO0qPH2SDA68vdWln2m5INQwVIKGugx09jZSxRegqVnj3gtJcMparKKmLxz65fpokahsMht+6NUdoQLZukRFECfmHRbQwNPXYCS4/5fH4WABTH8dmBboyhWdj8PoxCMMauoABmESecJAm1azganwzefevtS6MXX7wcZ/E+MP2wAPjAYBgmeu/WLVOVhQzO7VvNBmFerMvZd8VlK7O3XeUrG6J9e3IC1jh22DjaFkoQCy40DTuaKRtmfDXcIWifiU/fCFUnPGQF4uxAghIKEAl18d1NScMRwMt8aucaV42nnFdttK+DKBKsBWsNcZwRxykYbacAsBgBYwSPbRX2PmM29611r2sP3HYDUWYzx9Wrh9y+7dnf3cHG7XtyGmGjIeIF3yRExvD4oxd57LFHef31I6qiaN+qNXhpEwezLGY4zEmTIcY2iJ2D1njfLJynDWiC0wFlFTOeeVRSTp0jjUQYYxkOc4zRvwP6H4HIreMJL7/8anLn5n3UxRhpEFEGQ+WZZ3b40R95jqeeasji6yTxfVSmVL4m20mp6gLB0jQW51IMKSoZ6hLEJHit2g1atJ2kcAb1DqhxfoZJGlxVkg1TaGp8VGGtR6RmUJc8d/kj/IHPfpLjo5Kvvnabom5wVrBimY5nvPLq67z33gs8N4B4UySublLPSf+BG/SfCMzQq66O9NFD10lAYxC6z5X+NNCQRkEDew09GqRNE0RrB7AEkj4DB7xqjwFRX9YCqw3Ppmmlxb8XAJFQzWZM5zX/+tc+T+NKGi9kWcZ4PEaa9jCvqookSfAu8FUto38LA6BTAWD7FuVMAPiwAmB5YoBFoBwiYE2rTagbxrOplE19zkb2R40xL/Nd5Ar4HU8BfPLFF3cfefyxXLNkr1JvNTIB/irgkb8MK4oGoL4eK136fMI3wHYaaO9FNkDg0oHZeqDFjcrgJYhON3D5wRqkA/trwJykO4akG3h7OhTFpulJ3TDa2C2kpI1+mhT1wqa2NQJxTjERJFlCmm9j4wwkxdotkCFeBjjNERli7Q7qc2bTKWVR4RppF8VCVexcyd27h1x5d0LTbIHZwsQjvB8gbKG6hY22wQsHBzs8+/Sj7O7lmMidbUKqinM1eZ6zM8pIkwFeh6jugO4SR/ugW4jsILKNyA7TmTCfOYxEOOeIjF3k5xiGwyEX7736F0Dk3a1n/9QXv/W6XHnnCk1d4+o5aazYuOTgXMIPfeZZPvGJA4aje8T5fSQbI7lDhkJhKiQXKlF8vkWdX2SeP8u12aNcn13itdvbfOHbKS990/HFNyxfvxpz9egcJ/o4VfY4PjsHYslzC1lDk07xgwqGJTYZM8xP2E7u8NEnYj796We48MgQSadoojTaUFcVN27d5ZVvvM6N3edfekDdyToNtUYjyfoaEwmj7wT2gJBN95kjoazD8StLTQIFRrfokB6+XlZ1BGd0hoS5/e7Ph7QJIj3v731Diw9eQzuwPz3PpwE9gna0DqwW6h4Qt0DZsJR1Q+1kobivMMaQ5/mZoK9pGhCPc/XZIb1s8DOdTnHOEccxWZa13hPOrXT3ywf96T8rnL99oBk4Vf875zDGMNwaUdY1VV1Ru2avqetLvmku/M//9V/7rqEBvuMRAI3s1qe/7/v/zLU7t8459RCZ5eHo9Y5zxdNaFs5r0tN1hDqNDjfWhQKlU/GrrFr/B9djn3nJ6eEaigftKzoCaEI3i/y0sg9qIQhMHHRGptZc26Qn771n4kH6LFNDDoYa3tQWv9IAk1lJ1TScxuKKCHkWMxgMyPMcE2coDo9HMYu3q3ixoClNA3VdoWpQ32DkdJQIyrLi6HjO9feuc3z8EfJ8gJW65fCx7fvyhsgmZGnEI49d5tKlfe7dG3N0t0GMRcSRGNjaykjznCTLEdOAqVFXIapYcSAW7yO85hTFnNm8HVcEv9ikDHFiybKkXbii9sSnv/jGm1f09p1DXKnYyFM3M7Z3I55+5lFe+OTTXLoYE8dz0AIHaCy0e2OEOiHOd6n9o4yLPV57dcwbr9zgvZtT7t2tGE+OKMs51ijDQcoTj17khY89x7NPb7Odb3PpIKGsbpKaGdHQUrYuAMRJglZz4Jj9/T1e+MRlXrt5izvjGZOTBisGJWI8nfLmjfe4ef+ZH37CdBA6AoUmPZTTqaId6YkK1nVErtcoq88ITAMJlvRz+dKhDETCSvk1XUJIvtRd05tse3sMeEQfXmjL++AmgrkArFOMAUTAVyVxZLBRS2t57zHSTgHExp4d8Kd/nh3Yi891CtH7xQHfpgFajDErnf9ZV//QuueBaFh8mzR4+jzGGDCWqq45PDoa3r1+4+LeaPvSYDvd/W6hAb7jCwCvOrw9Hu8ZMeeceGxiMd2DJcSBi/TEBHdjLQMc/Apc2EMZ0HHR6r6GdhbR2ihfX3xo55AN2ZWGYPNNBUevHiKQ1S6hEKOl63DaqWmP8EEl4BrYjWAljLKwxv3WNfjJdC7zok5c4xb/xROZmNFwxPb2NpFNQBb/zUSooY25xyAmY15MKOuGZhE8YhbdlsPhnHByMufKu1MODxsuXRoixhHLAOfqNhhHHCaKieOYJ568yBNPPsabb97G6zFmcQAkqSfPU5J0QJTkGOsQrReCRcUbj0iENxGenMnshPFkjse3BmheMUbZ2dliMMxPr5G5evO+effKdcqiAKkxtgGp2d3b4fnnL/Dcc+fIBmO8F4QMogV3X0+ISIjYomkucXJyiZd+6y6/9puv8frrd7h/b0ZTKaoNjS9RlCTJ+PprBS995RbPPr7Hp3/gcT7z6Ue4uJ+QcgvsEbHWeO8QE+O8AVMS24Jnntnle77nMd64esS8OKKeW3DgtOb23ftcPT7mE3uQrR2E3SjqgPZGA3kTfXPs8jACnvV7tS9cp6srOEsP1XBxqz0oYi/7F6Ls+vRH2pMuuAlRo2dvCtB/vdRk1/Mk8HNL6zmODMXJCUUT4by2+RK66MgBa+xZAJUuHdKyiO8+/f+q+mD+P0nPLIBPD/OW2zfvqwBYRgdE2vbRGIOPwMaGsqiZTqdyNBkfZFH8wwpfBt77kAL4ADyOJxM7mU2Tk+k0UTzpoA0tWTtkVlS7nY54DeqTMGzYexqF5MaEYT8JvKdQuA6y2R60+1mWR/ceNuoYFPhJB1lYfq6lTW2jV9LSz/aNPS7nuGv/nhIMK5K12OHjuzP9hZPJ/HhWFFR1g+IWG0aMtRGj0QhrUwx5OwEgQ5QMTA6SozZlXnkmU0fj2lG71ltg0XkYoWoct+/c4+q1I4p5hOoIdASMgAwxA5AUsRH7BztcvrzD7t6IOH0ANSZxRJrlDEdbrdhJUpQcY0aoDjFmBDIEGaGaM5lUVM1pJ6PIwuBiZ3tImrdq53cufGry7dfe5tad+8yLWZvmBwy3ci5d2ueJJ59hNLI4P0NthMQj1G7jF69loj28ucy8vsRXvzXnX/7qa/zWy7d5570pd49TxsWQk8mQor7AuDzHvekWN8ZD3ro25fNfu84/+X+/xb966S1uTnZosks0ZJg0IxqkVJHH5w6T1zTcZmu74fmPXeTpx3bY3hbQGjWO6bzm6PiYW1fucFsu/voavByC4pcRJu1bdyE4XcPr4FTBLgEkQCWwvnuoiJDTZhfsCq09IRAzLj3FiPbQbN3nCVyTlX2iqzWQ1d9d+Xf6qYA+x8Tl/W5pUkDqBu/h137tcxRlWwCrtuJWVzetL8eSeM8Ys9Ldnx7YTdNQlSVGORMAdg/091sAhCgCYwzWWpI8w+EoqoqyrndOyvm5sq72/pe/+te+K2z0v+M/xOH9Q5lVpZvOp5LuZKSpWWSwyLpDV19xHKyEdZ3nogOVSwD60028fA+8t8mzv4chWHuSoGCxJ6OgC8drAAHpHtgh61L67JVD74/1MJOV5+iquTudheq694JSlbWvTibTej4rqesaSNrFa2JGw22ybNBC9ZIhkqAU6CIyGIlQjZnNPbO5thQAi/S7NnsX52E2Lbh955ir197l8PhR8sEIMQ5jGlQdZjHjLyZmMLDsH1xgf3+PwfAO4+MaxBAnEXk+YDjYwdgEI7492NWB8XgcXi0qObXPKKsaY+yiI5GzzWo4zEnTFF9YppNy9PbVdxlPJhix1ArGC4nNePSRCzzzzGVGQ4exhsiM8LQz10YVY3LE7NKYy1y56fncF77KN1+5zeHhnHmV4SqIsUSSUZcNJoso6xmOmiYZUM4a3LUJ8cs32bp4nr3PnGMYjZGkxNiy3cyNQfyUSIQ4PuTpy+d45rEtvvVKzl1zCDamcp75vOTw7h0mPPFj68mafcLUkBNf6O8lEM7zfq2Ddd2Rci2JMhADru+Dd1+z3A3A6sGpnO66C4j7pAvJbwjj2mhpHgopoyP07dB2y2LFlctk8BLRTvsb5kXZxnI6BfVUZYVXj42EOLGIUZyvsXFKUzfgHhQBzjnqqjrTDSwbAC3z/92/CyLI8qBoWLZSOX2tOI6p0oSiKrl/dDg4ORnvmLrZ3hptpQsG8kME4Lfr8bN//i/K/fv3zPj4RIqiBPVE1jz4UNrDq3crYgIaG+3Mr0ugW9YAYrBWxUuoc11/ztCsy5qQpqcD6c7IS187LaudQRdO7Zr79AaLLB/GfbnkrB/asC7kOtukeka4usKmVSnwdhRFP1CcTLfLsqB2p6pej7GGPN8iywagMaIZLcA8QIlbpTsJXiPmxSJESCKMJIu6OMKYBLAUlWM8HnPj1oTxBER2cD47QxRg0HbxkpMkGU8/+TiXL10iSQZ4aXlKazKG+ZDBcBtjc1RzkC2U4QJR2MazBbJNUSUcTyqcCrqYaRUR0ihie2dElkY4rLt//9jdu39I2VQ0ogu9gWVrNOKpx3e5fH6LJDJYkwJD0G2MGWHMNpE5j/fnOJ7v8OWv3+Drr97h6KTBsYV6IUkSbBwhttUwWPUkcURiI+q6oWkijo6Vt9494Vtv3uDWcQKDy1Q2oxKBLEYT0NgR5Q7DMaNBw+7uRQ72h+R5y/M2rqF2Fcd1wf2yDHv1SwAVUgh7UYS6eNYNr9YOucDfiRDOC+nTrdCBwlmn0Fb2lw2xuvRRDeviul6Uslf82y1ahKBQWjfoIdb8S1jXKMnyl7fN8VN/EJ+kRHGMqlDXDYeHh8Q2Ik1TtoYjZrMZZdkW81me471nPp9TFMVZZ940DWVZngkAkyQ5m/s/PbjfbxzwaRFgkBWUgVZ5064BEeZlwfHxSfrt1149V9fNwWgw2PuQAvhtfhwdHXF8fCzj4yOpqgrnwIhdWi8SOHQCB/YyNCYhN7EeGF46h2t3XjnY9QdcCUMLvKst6BrnSM+iXTMv036YrnenXd44AxCoBIyFoAda6UCNGrh+IRvhNbe1IIw6auLk9wrNqKgavFFEFOcdcWwZDDOydIBgUUkRMoRk8WcMEuPUMisaxuOSxnnAgkRtoqCaNnTORNSNcvv2IbdunOBcjrVDIMOYAV5zkAEiObHJuHz5Eo8+dp6t7eEZfG/IyNJtBvkOsR2170EHeLZR2cYzRNgCtihLw9FxTVk0tElogoglHcSMBhmJkfmVvRf/wrVbh246mdA0jmZBVwxyw/mDbS4ePMH2cEALMKSI28LqNokdYWWEyB6O81y/J7x57YQbt2smk5z5tEBwRNTs7Wc8+vgOzz71CI9dPODi1hbbxjA0OVoLdRUzGZdcfeuEd28W1NE+LtmiiVIkyhGTIibGxgYXjYmGBece2WbvIGcwiNHaIFEL+R6dVNydOqruSRmCrlduD11V0q95BJiekTo2NAe6geLr3reBMbm+ruJUjKfBSj28t6yNFfesdTodvvKQTBQejB9uzBQTgiPVusGds7uWldYzg4hKYnzlaLzyzlvvtIUmQjlrDX2MgcEgQ4yhLEvKsuRkOuFkOqH2DqPgqhpXOsTJigHQ8gTAwzr/PjqgSwmkaYpTT1WUTGdTvPf7u1tbv1vNd4cr4Hc0BZAkmb1584YmcSRFWSJ4ENPCqsH8+EDc7DK/pqwvzrXRmh518Rn8F4DGe8ePlLCathvgEVD8Kv2dy1pcaVfwF/JTD4V9sE57hCYjVMNcxQoVE5gyCMGYQbojQEEs/mPhlJlCUVYIdmG7C1EckedJaycqi8NcFZFoAf8bUME7T1m2HUXTtOOEVgDxbQKZVzCG6WzO3XvHXLl2m++fKbv7Q1QKFHB4siin9u28/O5uzMHBZXZ3R+RZwnxaYa0hiQek+RZRsoVvDEqJV48xAtospgpy6mrOfFJRlYp37ZiStTDIhwwGeV01/pcc/JFbd267SVm1Y0s2Rp1nMBhy/tw+Tz55CWtjjE2I7TbeaevCrhWu8RhGIPvcunWLa9emNHWNNkIaxSCO8xcP+MRTT/DM977ANo5yfMK7N6/yypV7vHPtTmvSYizFrOHO3Rk3bs6YVXvs7uxhZIY0TSvMFwVN2ikJsWzvJgyHKVkSY62AeGbzhsm85ugYyj1IQo6A2seZyboQrs/oSkMTAB3BoW6gsaDHU2Bpoig0drxMKXZRDAnF6dJD1YWEu134vWN3LIE1tPJzgQ5/RYO0IZFzYwrpemFyMr5L3TjK2lGXLWJrjMHEremO9x6VFhmIF119UVfMZjOsbR06nVVq73C+RoxirT2b/z+F/f//ZADAImHQPEB8VVhEaHvSJEcVojhpkS/ndo7m0wOTxDt/5z//WfNn/+pf8h8WAL9Nj8/8zs9sff7ffGHwjVe/NazqGsGyZQcgk9VAn6BquLMwennZF8KJAAAgAElEQVTsTpRn32jRGofe40y2Malr2exHOs5a+hCMMJDBvWZAFIINQ8KIHrHUys+GTEk2CCsksAlpoGDocv7L31d3AxUY147j8Rz1QkSbe28jIY4j4jQiimO8b4iM0DQVUSxYaWd9BYOvHdOTKXVV0zQNKooXRxp5irrEximucUynnrt3jrh754j7hyVbewN0MXYYJzFODd432DgiSmqeevpRDg52MTbGaYMK5KOMNB9Qe0FkiDEDxDR4dRgL2vh2KmHmKOczrNhWX0BbkGxvDdgdDCZaN0nh+d6jySQvqjk1isGCGKI44fyFCxyc38NEFiTHLe5dxaO+QaxBGDIdG25en3B8v6Ao2rFH9ZbBIOLyhQM+89lP8/sumG9kuX9B3Ygv3/so9b94iXtHYyaHNSiUdcRsVnB4dA91T6LNFsbu4ygwFpwoaIzxOb427I5SRoO4pVuM4pqasmo4mRScjOflibn05S1/8/uBbH0Mj7Bb5AqN3jdvG3K3DDkCdox31kZcu8UoBKdpgnx/QL+jATqy+zlkQ3UsHdqhu1ctX5+QS1/XCIm+YCMCjY2EDb1U1vVRGBpTI+I5GU9pqposaUN35kWFtRHqfTvtYmOaxuOcYz4v20jgRejPYDBgVkw5mZ4Qxyn7+/tn1t3LVsCth4fb2O23l8uf5bw4FF0gNF7acfKqatjbPuDejVs0ScPh0VF29/rNzJVVurW1lbDwN/qQAvhteGyNRtuf/fGf+MPb29s7znuMCFk0WIeml6te1TDsvAYh6jqC0BUDdSHzNXish9fXnuSwNQ5yWccg6xGkIQ5SQoYhdMaTCL9W33OucXuBImmNq9X+DW+jb0GXLulCrg981T0wLRrG0zl1WaFeEG15wihpYz2jqO0IDKeiO78EDxqcU+bT6YLXdjht8NrQNDV5kmIWCWXOw8lkxhtvXeWdd29SVB6xKUKCV4NXAxLhsSRJxsHBHo88cpksy7BR3Dr4jTIGwyHGpojJcT5r8wRMjsgAJMMTU8xrqqLB0IoQPUKSxOSDjK1s4CJlWlWlq+qKumlw3p8pp0ejLc5fGDEcjbBxgkgOMkRMjiEHtoAhjaYUlTAdHzGb1pRzxRhQo6RJyt7+Ps9duKjncv/8tsCOVS5e3Gd7ewebZK1oyhhQS1kKdWlwTYJhG2QbY7fxfoDKNipbeMkwkhJHMWhMVZ1aJLdz1tN5yclsPq2cvQXM1tZmSLOyRknJOjy9qRgQNlgE059iGbrndUOoFQGIfk13Q0BxH0BCpM8QrFMMhKYnuqE/oQmeYHp3YBIgNEbdNzbNYFZ8/Ef+10bjsqoq5vN5ax0tSiStuG8lTXypg2+a5ozPN8ZQ1m34j0eJErtymC/D/suK/vfzcC3ed6YJ8Iv7yNqIQZphjGU6nXP/+DB58/rVvVrd7u7ezv6HGoDfxkdso4Gv6h/Is/xgUc+RDUfhMKAu9LVG00kg/EfWeb3lA1xCo3QBvq1bLKyMHS2P74RGfzZw5MK622EwUrf7T88B3LUw7m6k2qn+pQOBrsCXsr4R9ToySk8hEyqoHuxODTCbzTg5PqGuT4NDFqI7G5GmQ6I4QoyubRSnM7915aiqmrKsqOvmzFa0UaVsGhoF59rOYDabcf3mTa5cfZ2iKBFMqy/wD1T6ODASsb+/z2OPPcbOzjaRFWShVs6yEWAXVIRFSDCSIaQYycDHTMYFZekWRZsBNSRxTJblDLe2mqJprpZV4ebFFO91YVwkxDEMBjmD/IAsH7aCRmmLFEOOmPYfJAdJmc8941nJbF6i3iPGodTYWHhqf5vLB6N/Yk73CGFuI/15k2dzxOG1HedSb/HOUtcRaIaVbcRvE9v9hbPhFkaGGIZYGRBHGcbEKC1iIgunv6osmc/nTaMcglRhUVqgIOzOqktAXPewcJ8Q590V9EpgHYfg+mVn0VP3S5V1KrErAO6N85Ye/UBHs9ONMNe+WOO+z69hTj+IaIRQOVnfh06fx4wq8q1zRVFUVVUxHo+p6xrhgftetzP3Ao36s1n/07G8oijOQoJO0/9C3P37fYR+/nQi4JRWaMcMI6qmZFYUNPhzF86d+8kGPf9hAfDb+KirKi7LMvPOD1BPJDXpMP7CepfZSa7STYu9c/iHFDXLs+yb5u57TXz6kgkDC3ZlYUt4rv/scA4hDgGaIjRVoN0kMQJxwbLBQyBwcEPYIli6CYEPuTY9s8+qMJ8VFEX5/7H33rGWHXl+36eqTrrx5c6BTbI5nMAZznCGE3Y2aINla3cBwZaV/jBsBQtQgCBZhmHD+kcCBEmAvZINJWshW4Jsr2Qb0FpaybKC17uzsxM4w8kczpBsNju8fvndeGJV+Y869757zz3nNbXkaj0AD9AA2f3Cveeeqvr9vr9vQJddgsGWCa2CbreL73lni3rhM539d57n5LnTFBc6Ryr3b7IkAkrhOWMRLGluOD055cG9A0bDGGPkXMc8+5nWWiTQabe5efMmGxubCCmx2uL5XXw/RBucI6EMsDbA4mOsj5ARhfYYjqYkSY4uZ6RCCITvE7UiZBjqotCjOInzcZxijHWzfuHh+R6+H9Hv7RD4HYQMwYZY6zwQrO04NKBULoynmtGwoNAajUGjsQLC0GP74gUuxW/8zELHaVXg3bRoI5RDV85QFIGSARaHNljbBtvDUxtI20fQB9FDqjae3ypNW8BaPb9vWZaBKTwrioFjaNZ08nUufJYaVrpoSPatoHhVDwFRY/O5KA2sez2ibi2L1XVk69ZUHXpoa5aVrXy/WEUL6pqYug5+KUrb1jcoi0VJkweAWCBM2+qIsbJPeEELKdfTNA211ozGY/IsnR/qs2d8cW0a40YAeZ7PCwAhBHEck+c5nufRjlpLh//igf5vWggsfv8SMlA2Bd1uF1955LqgKPTmweB0czqZrv+NP/vn5HsFwG/RlaSJStJUJlkKpkDkMevHr35yOeGrco4vQWkz05qar18au4sGKHzBnKNuHn/eAqKpwq4h55wXh3Xe4SwaYMRankOl8LHnwH+wOkpZNAuqtf1t+DyamNpNY4qz/9AIitFkotMsx+gz8x7puWzwXq+HUnKODCx+TrNNI8sKJtOUSTxBa2e6k+U5SIUXhA5p8n0X6as1aVrwcPcRDx7soQvczLBMQlMLG1kYhly5comrV68iBfhBQBh0UCpA4GONQgofKUIwoZMqElAUksk0J0lzcu26f3CoQrsV4Xm+kEp24zgVWZJT5Bqr3efhewGtVsT6+joIH0FYyhS7IHsYOlg6GLpo22Yy0QwGE+I4RVsXWCSFIIwi+hd7eMvnYdsgPyqV6RRGO/gfd7+M1VjhY3SEpINkDWu6wJpDAegjxRrQQxJRaIkxGsTZJp3nGaFS3XDjwo9h6a129pXnqeo9X5f0udLg2uUZd7UOtqI+aXBpfZ1j9lNdN0vIRZ18mGX0r4oE2pr3Yit/3o7tf12M71JxU+clYM9fu4tjRVGTkrh4KS8UVt1I0yyw1pJojS4snueIfgJW7Hu11mRZ5ng5WKSn0NaQxgnGaKIgJIqilcO/bs7/G0ECFs2EtNZE7RZe4JNnOSenJ9G9117vj0ej1vb29tp7BcBv0TWKpwwmQ5kkMbrICWyOUsUqHLVSsTfo4usOSsH5K2wx//pxh70QqRXiF4F0eTOo+/4GZjyP+T2Lm4q1j98cmuZ2ouagroVRa2D8WiTEUishrCahCUG938HKRmV2M/UHptPY6Ire2QKddodOp7MMglQ2CW0sSZKSxAlYZzziZo0eubZMJwlpmi58r2AynXB0dMzrr98hmRYI5BzCnHkQzNCG7c0trl+9QhgFtKKQbq+N8gKkdPA/wi+9BjwnNxQheWGZTDLSPActMJQbUVnU+IEvrcCmWeGlqSsAziTPHt1uh05/DSkVBh8pZ14FPec3UHb/2kSMRjnjcUqW5eV9c5txFLRY72yiZux1B6lQCO9WgSTNy7ms1Vg0ea4JAh8hA6Rs43l9LF2sbWNFd446CNFB2xBdCIrcUsYuuW7PavyAQAvzPEIGK0Vt7WiL1YOyyaVvae3bev+AJVVKnTS2MsuvrkNLvRxxCcGqkGabKANW1BQPdehcQ1GyElveAPUv8RHE22hW6hxTF1AKFtAYcaZ0EEJcz7Xr6ovMKVeiKFpZl0tOf1k2n8wLIcjzfL4eoyhaQKGaO/h/k4NfVH6GLIv/mRuhlJIsyRmNRuo0mW5fvXbtM8barfcKgN+iazydMIynxElMXuTkxuIpuQxfnefK9TgPkVqiTWW+0ES4qcJu5Wir8IK/CqJYgturcGPdwVxnXNRYlNS5ptW8H3FegVMDp1a7cXHO7LTOuKeuwV8hW9XpqhdHAWevxyr/r08mcRlP67TyAL7n0e626fY65YFsKs2YKGfQhukkIUlTCq0xRs+rft/32dzcZn19fU6wU0oRJynD4ZjDg1MO9o5d8qCUWKuxdpYA6P6704249eR1bly7zNpal16vV74dgUC5g7ucEUvpYywkacFwPCFJM4w425A8pQgCn9D3pO95a1lWyFkB4G6LQEiBH0SEYVCeoYGzPSZCiDZCtLGyg5UdDCHTxDIeZ2ht56iEkgHtVoee30ItHUCQ55Am1r1nIVBKYHHKCi/0abcCrFRYAqxsYYmwRG7kIDpYEaG1T5Ja8sJiS6dDay3WWKe4VB6PlZdVu9rqQdSUGrhUsNrmgva8AnnOARKrNsFVgm+1u6euuGDBCEvUNAPVA76BWCwaWn9R/fc6n40KD+E8YzFR8QcRon7kuaROsJhcY8oDPEkStClot9u1cL1Lz3QIACVBcDYmKooCJZQL+VrgDlR/RnU08G9SEEh7djBqreeOgkEQILBkRYGxduvw+OhjcZr03isAfouuyXhCHMeOmGEsmdbMnwnR1D5XFuLK+LlqxiNodteqT6hbmfOdwYIF0AGyFVhwUUJjzzm0GzuSutm5qNFDVzYLK5r91hfbZ9HAh6jdKMUqB0HUpA5CTaEizkdf5jNS4WtLV9nCL7RxLF7hzHCU5xEGPu12gMAgpKU01KvYhUJaaMajCUWR4/kKMORZxoULOzz//PM8desmF7Y3UeWDlReW4XDKwwd7PNrdpygWVQW25BC4aOIoCnjyyZs8ffsJtnc26XbbJZ9gGTUorGHWc+S5Js+0IxmWISgA1mh8T+EHnlKeLIwxni40Ws8Y0uAp8H3PjVSkh1RhyS8IsaIFMkKIFkK4wznPBUVhseZslBFFLdb6PTpBOLcgnr23SaoZjRPyvHzPxhU6URQQhAFe0MJaH2MDoF3mG0RY4RwYoY3RHnlmnNWylfMtSCknxZYi/+/P7WjrxktL8/ka5IuaeX9dK131wK8taGl+HfMD0q6OEetySJaUAHUopHgbRlt1vv6PKWxEAxpQtdqu7iVLMcY1jVCt66kFnVNop/3Psow4SdHazhGA6sE9Q4VyXcxn/zMoflagz9z/zrt+IwXAypg5SeZFatCK6Pf7FEXBcDTqHg8GnYODg9bP/Rf/tXivAPitKABGIxlPHStUFxqJ7+DV6kxfnAfnVWditnnuXCenWS59Od+q0wbS6Pcj8BttQM/NBmeZ5SvqmP8NhU7dL1vpym39hrVSaNjmbuNxMEvVj73a4TcFBFVd2CzEWjNKNVq7w2QGvYdBQL/fI/SdSYgxZv5n0TIUJKPhhCTJ3EK3syjhiO3tLT7wwaf4zA99kgs7m0SBgyCFcGOA3Yf73Lu/62DKUjkwryqEKzosORcvbXL79i02N/uuMy83k5lG2WJQqnxNnmI0njIYjbAWl4Mu3M9TUhCEkemGcjfw1LZAqqLQzgQIl5lurSNAOkMUr0wA9PH8FnlhQTjrY4NCG594qkuFAyghS6Ra0Wm3CQKW1pEBJmnGZDylKAyemHETBEEQ0u308JQjHSqvixCtshBooW2A9HpYGzri4ThDF+7+zzZ/z/fptNtcPPrun1gOpqLBfOcc8KnOIlhQb73L23jWquuv1jWwSZ3DKl9BVMePNYS7FS6AbUDzbA3aKOoh+/m6F83NBE3FhmVJXXCemkhUbNCNJR4PyfKcJMnIMtf9mxI9m62d2bosisKhBNo930Ip0jRlOp1iMPR6PdphhEIsQ/g1hMDHXUaACpzJ0GAw4PT0lNFoRJqmjmjYbjOdTpFS0uv1kF4ZDzwYBN/9xjfCyXDc2uj2Oz+oZ+gPtBHQ4dGRMFIKBykJtDVziHXVzeoxFr3V76m6860cck1hHDXzybOvCZTRf9ER1UW9+1YjXL5AzrFi1f1r6bVXQkOaxv2LLPvFAmglFIWKr79klYbdMLJYeu0V46MmiVGTh8DZygYEWZ67g1TIpVvebrfZ3FzD970SlreIpR3W2esWxjCJpyRZVpo4uu4tikL63Q5XLu8gJVy5vM2jR/ukmcTYgskk5nQw4Pj0mMk4pdMNytehEXiljEgjpU+v3+La9YsgCqJWgOfPxgUOarTClA2VwJa+51mWu9AU5WKAFZZ2FND2PTxp/6WSdl8I4WVZXiIQAqmUczIs2dO2zBEQCPfvQoIQaKsxVqILQ1F+HZRdlnBIQhgprNSgz4qyApgmCZPxBK0LhHUzfF9G9LrrrK9dwPd7ZaemMMKAtEhl0bnG6ACrI9LUMk1STOm9PkvRbUchnW7rrCu2dtlYqw7mX3EHrDzvVfe8lX9vrmWXDt0VK+uKUVVj0WvPIQjWhXetQADL69Q2vXeW1+x52vwlf35bb6zUhBzWrutF5ENW9s3yfuuCPD8j9RltUMoH5b5elljTnACIRZd+HQZQZdFsjEEg5nP53wjLvw7yn2ULJEmCRS4ZCkkp3SjOmHJsJcjTnNFwJPILl9ZvXbvx/tAPXwfG7yEA/xavP/8n/4w/GA7V4PhY5Hnh0tRm9Yx4HDx/DnmuFjZcPHhYleGKGj/xxShRsVDaz3blx4URLc7mVv6/QhASTVa9Ne9DnJMB0GhS1ADRLx3urEKloiYoSIgaaRYN8K2o6ejOkI8kyUhzjbZnlb/ve7TbEa0oWCEJLXYHBigKw2gyJY4T0jSDMp9cKUm302Z9rcvlC2tcvrBFu+VDuQllheX0dMD9e7vsHRyircQiQSgoIUtrLQhDEHhcv3GFnQubRNFZZvkM3hfCIkuOgrWWwXhMnCQu02IGPSrnA9DptOWN0bf/oEpH96UQCiHnP0eJksJX3j+HdnhnH6U800mLhXtpTLnZa4MtcozOwBYUJl0aeVng5GTMeDyEEm1wgS6Cfn+HzY3LpcdAD2wHIXoI2cfORgG0MIRMpgXxtHDYh3Fhap6SdNsh7X648DRIHk/SsefP+leewcWx3GOQsur4z9Y4AtqGGX7dz3yskKfG16MuCWmxOKH+7TcW0oteHSsuiNV9zzaThkVNZLOtcUicNRPWkKQxaZ6TpCna5HMIf9GTYxEd01rPDYAWZYG+5ztzrbeR9Pe2sB5x5jKYpi7F0moDxpbTHLv0+z3Pc+icMWjYGg+H/16aZz+wPIAf2ALgxec+vPXE9Wv9k5PjzjSeOhgz8J05a5OmfrFrtucYjdiafOxFJ74qSaaOqWsXD2Zbr0euGpmssJntMsRoz+EaWBrIQDVOaU2dRdWdjAYuQl2ACpUCS4hm4l81MU2cNyKghswpMECa5ORZgSf1vIsNAp9Op0MUdEsEwMzn6MsLX5LrgixLSLK07JqdAsCTim4roBUG02679dqTNy5ON/o9Ql/PN6pkmrL7aJ/XX79LEhfzA2u2KVnrQoCwBRcubHPhwhZB6LlDT5ua+aVxBclwwjROnH1waUjiKYXvefQ6AQjRupLc+TtKWT/wFL7nIFRnc6zIC/dadHE2Y19MRhPCEQqV8pwZkZAIKR13QWq0LhhPE5I0mQNVAG913//l/fsPGY5GTi0gFFpbNLCxuc3a+ibGem7WLzoI2cPQQusAVBtkiyyDw+MB42lCYRYgWitod3v0e71Sh1Dn/VDRnK9A9KK+s5/NqlcKWvsYtU9lbdYduEts90WTr3Og9Dp3zSX+j2iA+evGlU2jPXFOV1FTO1X5SKJmpl9n/FXbdNQV/Zo4S0gzN2rLc41fjsOMOVPNzAqCWQGwCO3PCoIwDOcGQO9GAdCUHWCMIS8RRlXeh9moL+qEFEaTJEn/YDxsHx8ft/7yH/8z4r0C4N/ipa1Z++RHnv8znqe6unD+5n4UOnJR7XzqDP6tX4TUx3Q2zdiXoPg6glKl+67T8ttKR78CvVWYOXUddRXutHWkvZq/q43yrTE/qkNFbI18smmmuEKaso+JPK1BKWqsgzUQlwE+drZZSBcq0ooiNjbXamRCZmnTcCZACXleoLVBuTghwsAjCn08JY+NMX/90qXLw0s727TD9pxTMIonHB4es7e/z+B0DNYFDunCOgMhKXGxxNDrtrhwYYsoClcyy2czfiEURaGZTGKSOCNP8/nG6HmKMPBodRQCPAte6KNakXMoO/tZgizLSZK0PPjPYpldUFZxhj6g8LwWYRghpYe1OQiNlJajkwHDSUYsLCmCDDgZxp944/4DRuMJ2hqcgEFgdMH29g7r6+sOcbDKIQFEGBs6K2IioMU0sZwcHy9Fu86WQa/fY627jlcX4iPqIOyF/xeWRvVIOfqodQaqddA8J267CSW0dhU1EHXde50ioLLWagUKooajU7dWGoqbpiK9WlA1oiGihtBYh+LVeKoIgIJET8mztDTtss5bowGSz3OXy6HL539WFEgpabVaBEGw5Nb3bqAAs1ChWbGROmdKbKHnxUkZD4byPfI8ZzAYBA9ff9O/c+dOaI0J3isA/i1d//fP/72LaZI88fDhg1uF1jtxmmIRLrnJiAVWcANcXYXKVuJ2WYX96jrjKvRVxzQWDTDbYhdRXVyiZpdZSuaqWahL9rvifGhTPEbnXO02qojFSorY4qZnG37XOcQjKxs+rwXIUSxvpAUwnSTkRermivOZnUfUatHr9dx8W5gFad6so3BywSzLyPLckUi1W+g6L/ClpBX6eFKmoafurnf7o0sXN+l2e9jCMZOLTDMYDNl7dMTh4XGJQKj5kpodblJK/ECxvbNNFIQoamxLrUMvdKHJ05jpeEpRuOhTt/k4E6BeN8ATFoWg03EEpbBMUfM8jzwviOOEw8ND7Czf3J51/hJQgjIISdDvdul2uoRRhMYgJcRJytHxgF/9+mv8wh34Z4eSf3EY8fmXX+H1N+4Sx7EboEj381vtkGvXL9HtRQhPYITE4GEJnMmRjLDGx4qAJNUcHA2dF7zWIAzGFLSiiJ0LO3S73XlK44r6pk7Vs1hcN462qsvANhQDTYdatVuug+2rypom0g31r6fRN6BmHCeavPxrUL+mOO/zxp6wmhh67hC9kg9Sm4OimApLnqXEaY4xxVkBMDO6Kn+P1ppcFyvRvlprfN+n3S6L8EI/VgXwthrJ8vfMXAmBZU5AjU2wtZY8KxhPJnLv9Li/tbm5/eS1Gz+QuQA/cCTAX/hv/poaT+NLpsj/9Le++c31vb09CuM+xND3qSXxnRcxO2fU10VlskyQsTWQgKhE+jZ93eLrqs4ZBaudu1hMKVxMEqwWHLYeoV/5usr7Xprf1WmibcP7ryz8qu55JSHR1qOhtqbAsXaZiLicV7yEdOQCxuMxaZJRaHNmwysFYRjQ7XaXDD1MlQNgDHGaM5o4ZrLQjphhKRzMF4ZEvmc6oT9V6K/evPrklc31tzqHx4fEGnwFeZqzu7vHW/d2uf3MDVptb5nuYS22VB70uz3X7TMzOxFlx1y4AgBBkWryLCfLC3TuUAFR3utOp0vPb+PbKQbotgPW1rp45UYqhCLLUsbjESenR6Rx5pzSHN1uqduxRuP7Lba3t9nY3MAPQ4S0eNIjLzx2Hx3x+V/7Ci9/JcAvuQWTacH9h3tYKUo6gcGgeerpW9y4eZEgFAhRkhtF4MQQfoCxxv0pLPt7R9x/6wFZquefgbCWbrfDpa1tOq3gXzE0P3E2qhPLUr+m56guRdKKZqMebI09N6tJnit1RFUlZOsRM2tXvTiacnJEgw34YoRwFSyoxvlWJbZNsr95umjTF1X3OSp7aQ05uBH1nL33MB4+9SP/YPra/d+T51krLnJMOUvXiKW3PyP6zef/QoA8GxP4vj+XDhZF4Q7sdzgGsNYilJwjALZUC81e1ew1GWOQypFtRYkGGGsIWtHms08+9R8FrfD7wO57BcBv8mU9df14OLw1Go1uffvOnZ0Hj3Yp8hypJL4v0IBfz+ZrIJeL5kW30rmf47NZx6atpg5Zs8xMtpVksMUVZC3NUp/q5rLYFdUwl1eYwzR4BywiGtVQkaYY0spoYAmGrLq1NdwfUdnQ7Hl+pu7rh7H4fJzkn5mmBUnqrGhnB74f+HQ6LXzlYU0+by/mLGPrMgPyPCeZxsTTZC6dk9JDKUG7FdEKVNGNRN72vP1rl7fTizubnft7jxgdjxEYJnHMwcER+/uPmExSWqFCSPc6HUvBIAwEyiEDRWHmb3MmSZzN6S2Q5I6PkGWpizBWTlGgfEkY+kReCMK9nVYQ0utGhGE4l05lacZ4PGYyHjOZjlnbiLBCYsv3616XQFqIfI+tzTWuXrvI+lqHwUlEOp0glc90WvD6G4/wPVCA0QVG41jb0nVNUgh8X/Ds+29x5fIGSol5ISKUxOSFc1+WCoskTgreuveAh7uPyPMUv4xrVVLQabfZ2Nnk6t6XfmIZcbKV+fc5NrzC1hcFKwe8qYTz1JzKti4G+Jw47iU73craWVknFXWSbdgrRKWgqDUyasoUWS6WlwukmrVMdc1Twz2w9UFdgpomZREZ6EN77XKWvUFeaPJCo03Jrl/YL41wipfCusNWY1FClhMWi8XiK88pACzkJSKA0e8Q/ld40sfzXEEx+3FSqpLwZ9Glg6Hy3O/3/RDkGJRE+d7GqEjWfNHuvuuUjTYAACAASURBVDcC+E2+/tHf/LtXJtPp7Uma/ql/9blf2Xrz/j3G4ymFNXiej1CilDWxSroTi2+5Btq2C4dWYyIXFciv+nPs+VB6o76/EgxiKz9PPAaCW9w0qj/X8nhvftE0229yEmtK9qvbEGtcwhpVCVCro2Z144n96DPTxDAeF2RaYaxFlCY8nVaE7/sUReG6UXwKA7m2oCTaOhZ6Gk84OT4mSzKUkBg0SoHyFZ12kEWefbjhF9e3InPpyYtt//rFLqEfuIAgo4jjhNFwxNHBKaeHA6xV5UdQgC2Q5C5lvMixpkBJENYd+g69LLt8qdAYkmzC8ckJVhd4UmJ1gUGiPEWr7dFqnalc1tudcS9q0W6HKGnBWKw25OUIYDwelzIq4YojoVzhYwwCgyTj4tYaNy7vcPXyDuvrXVTgI6QmzSZIH7QVTIsc4Qdk1mKFK1aUkEgheOqJ67z48Y9w8cImYRAgrTd3WPQ8D4nA5AIpfEaTmAd7j9jfP8Bqg840CoWUiu2tPte2egS1aZV1TPyacdJi8h5Nh7etUbmIZgj8vHWzFLvLatRvnUrW2mYU4Lz0vfMN/mtQOFbn9ysjjvN4FqySkal29+fIpBdfhxIthf/blfBa09RSpBnKj+bWvkJJRwhFglQkaU6c5o7DgkPJtLGEfou1tQ0C4WNziy88rOYd8wA8IbG5xcMj8iIXT2wstihIJhPieIrneSilSBMnu1XKR0gPbSHOM39U5N4oSeT/9Bf+W/leAfCbdP3Sz//9jTiJ3x95wX/+uc9/7um9w4PNk8EALRxEI4VAKulynBsh6zrYr07rWjcnrEgArX1MR1JnZFJhxosGh0JRXdhNfAbxeKWUqM5Lq/PNhtO2UQ1w3gZimzeaRZ/wxSSypqKktlACEBoociO1RaOtxRjwA0WhE6w1+L4iieNSKuR07p7nO398LZB4WC0YD6aMh2PSeFKy+xXK92hFEd1ea9yW+XGgk3bn6O5Hey0l1tf6emu7TztwULdnJNNpzL3797l7/wFpkp+xmI1Beg5WVJ4stc5qCXo0uO7CGIMVkLmkMaxxCoJyAEAQRETKQ8Gd2TPRtuZfbm/vsLnWp9txvugmL0iLjIODI1797vcYDqal38GZ3j8IQpTyMUazvt7iox/7CC987MM8cfMG6+trgKHbbWO0pjAaqUImaYEXBKDOrFEvX9zm0595kY997IP0+m1MbuaZBM6W2G0unudTaMHD3T2+//3Xne1yURBFUcnq9rl04QKbvdYZHLmiZZ91spUDdkmCW/XKr0nPtBVnvbq46sXC2dadgU0ug9U1UjOrF3XkOlEp+s9B58TbkS42/D2V+0BVoiyW4f+6Ecoi72kx5liIc+oVSZG5xM280GSFcUFSwsH/s2cfKSjsGfxvOcsFAOfJ70s1f74kAvUuOP0tRnkvZ3qcSQQX5YhuXOfowoXRxEUuJ2kqTwYDO5pO7A9aAfADMQL4u3/xr6jxeHLLl+p3/b9f+JWn9o+Oruw+fEDoBySFi4v0AuUgoZVkL1uDCFCB+mrS+xqNeKDeRa/m4KuDyMTjKnvqTT2sPXdstwRZCtvc4axwBSoyJ1vHY6hAitXft5JlUOEsWLsMWy52JOeNTaqWyO59DeLWxj8Uef4famO3hLVYCkxRgDFYoznYP+TevbewJiUMFEHoEUYRnuejPB+FIk1zitSQTCdIKbACtHEpft1el063nZhs8k0/OfoTIDq+Tv7xjadv/O6rd+6yv/+IJJ5gUcTJlOPTAQ8ePmCaPUfUbaG8CKtzsjzHk6I0+bFYMZM7gRSlwUhREue0YTopMAZsyaZHSEf4iyJUuD5WRr6CYBsreheze7/z+o1tLl9cY3e3xekwQSifyWTK8dGQBw/3GQ0Ter0OSkhCzyNNC/LMuu7Kajzf49r1y/zoj/0QYRTQabd49Xt3OD0dYI1HmlokCk+KshjJiULFpUs7/PAPf4af/Kkf4/Lli/PRilIKq40jXJpSmSDda3r99Td57fW75IVB+gF5noO19HtdnnziBpvr7f+FfX7/qpNdFYZelN/aZYa8qHBxarXylXXYNNIXTSO+Bpif6jy+wqWp6vfr1DFU5vu2JllUNEwlVnhMNAcpLUL9tu4+19y76jqsHYHWbDDGkKU5SZKQZSlFnpdkO4lQUJRcF8pioCiKZf1/cab99xaivaV4d1R3ixLEWTTxvHQp7YdnWSCL/6aUQmtDluUySVMhc81/9Vf+8nsFwG/GVVhzc//o8OnTg8MX3njr7rXdR4/wpI+Vwnm/S1eVKS+oSHvs6vzYUnPgVWGu8wh01M/XGud41C+OJYKPqCf0iYZFW6dmsHUzvAZ4rpGjcB6XoWYTrVZMosJpsCwXAbVwYw0hcd5ZVDo+997HQqoDIfSJ1nZNKOV5fkCWu3zx8WTK97//Gv/7/zFlfa1Pv9+h3Y6IwogwjPD9gE7URwjFd777PQaDoQsCKiV8QRCwvt7C80Xoi+ICiA1g64Id/Z5r212ubHX5frfN0fGJCxNKEucKOBhyMhzS2+igc42nfJSvKLRj3wul5purRmNLYpMUzhugKGAyTigKUOVmZK3AU4bA89jsrUkvi19D8aMIi48obvYDu91t019f89vHA5IMptOU4WjI/t4Rd998yKWLW3ieKG1WVUk+FAjfIzcFypM8ffsW6+trXL9+jde+/xrf/Mar3HnzPqPxmCzJ8TyFkIZ2p8Xt27f4yIef4xMvvsAz77tFFDr3QAlYqzE2ByGQwkMonyw3HBwN+PZ3vsvR8SlFoVHKp0gMrXbAtcvb3H7mBjcOvvH7lxC62pqwqdutebZs0wFVh/ZRQ2ip/HedPHFpH7H1xFtRhyxalqyvmwrwJoOd8953E23BNqAItftkZXRn62QQdftizX5nNEmakqYp2TTBWOazdWZcmAX2/Ux7P3MGtNi5tHcmwV08vN+NAmBWBCxKARcRgDzPl9wHF7MJijwXeZwGicg0P4DX/+8LgP/xL/2VG6eng+cmyfQP/fKXfv2Jh492g/F4QtSOiFotJnlKmmcIpVAiWJ2t2SYmfpXpW5OgZ5sWSo3/dhPLd4UsY2s4AzUddtOCbOrwF7W/dVahopKFvmJlbFdn+MI2oAo8pot/XGdAfVe1hNqICiFxfp9awupE5Nn/2V/f+E9a7WijFQiyQmGlZZLkvHH3HvtHxwRhSOBBGEYEvo/n+QR+hOeFYOF0OGT/8JRca5QM8DxBOwzYbPv0WrJ/yQz/0/JmegAbLZ+13jqb6z0OD0IG05witwxHMQ8e7vNw94ALF3aIWj5FYRDSjaUwFlMqAmaDN6HAE66LkFIhhHW641LvXFCA0XSDDlHk0e8H0Yba/2OLFV9P5P/48rXbP3t5d5+jg4jx4RSbKU5Ohjx8+IjvfvfbPHnrMpcurpMWiZMkhgG51lhhsMIS+D5xnHDp0gb93kd57kPv45Mvfpzd3T0Oj44YjcYYU3DxwkXW1/tcunyR69ev0u93UZ5ACUd2xGqXXSDFvPs3KNLU8M1vfIfvvvo6SZqBdBbOfhCxttbh2dvXuLG9iTd9tIwa0TQiq55DVYZ6DTvdNjlMQnNYGBUeTR2qViMxsnXPvl09vEVTAV5tLGxzIV9niFhbTFQlBKK+EGpy4F5Zw7YBrav/oJI0dpLbosAai+8HZRKmBEr5rdGlL8cs08JlCLgRWOAULaVGf/b2FouBdwMFUMoR/2Z5ITMFQF6iFrO/nyMAeY7Ocoo4lkYI+14B8C5f/+Dn/sbVk+Hg+Vznf/jXfu3zH9w/OtwZDoasrfXJjEZbRzbylMJTikiGCzMpW5OqZ1cPe1tzyC7O7Zfm8WJ1ll/XkVTd+0SVsU99h90kH1xcuFWvftFU6dNgd8oyE7mx+q8UD1Y0b4xNLYgQq4hAU/NANSeg8nvPuAybYTz441ud9j+99cQV79qb99jbP2ESH5X6c8E00UyT4dy5SwqLJ0ApifI8B78bS5pm5NqxkpWU9FuWzbU2/TBgK/T8KhLUFfoL165d+dSFO3d40Ao5mWgXkjOZcO/eQ776lW/S7XTY2d4gCj1838P3FJ7v3AWdfMjN+DEWKwzCCIRSZFnGaBQ7oxRdGvZ4bnzR70b0+0IG7n7kgAYxvapGP/mBp/rp3Tt9/8FGn9PhhGkmOT0d8uDhLlt3Nnjpy1/jx3/ih9hY65AVCcYUGKvdCMDzyPKEIFRgDe2OT7e3yfbOOh987ml0bih0gSg3PCS021G5OTr3xaIokBIEGqUkSIG2IFSAzhRv3r3HSy99nQf3HzGZxPOPttOCG5cv8MyzH+Dp6Sv18HLdCK0Okl9ZYyvfXIOdnztPW/1dddJAW5fASWW0KJo5R7ZBhlgdtS1+rT0v36MhPbHaDNQilKIhF2ARhahwk2i4hUu33pDkE9I0JU8TtLFEgVd23mc/rrBmnhUgcSZT1lqUVLSCcG7+Y41BCfecGa3nFte/0WseR23PgolmNsMzhGHRlXBmSKSUosgsOs/JXGKgfK8AeBevX/xrf2d7MBp9iEL/gZe+9NKHj0+Pr5yenrC5tYnGst7ucXB06D4wz0NJxwGwsg7GsqtdK6zODqvzvaWOwtZHB1vbwBes4QwszR4bYDNRA/M3Qmx1m5Wo2Vxs88HcBOWJpg6iAbpv2tTqagNRkRdWEZuVt75QuAmrsFzetpM/+NTNC3zoxjaDkwG+1ByfDpkkEk/4aFz3neUpGoOWIIsCmyQuqc/qUiGgQIS0hGZno831nT7bW1cma0p8B/gQiNbsflw04w8/cak/XW9H7U4rwicltZLRMGV39xHf+Po3ODk+ZGtznVYrJPA9oiCk3Y5YW1ujv9aj0wkJQufg5yRFAdbmHB0NiUcJg8GIJE6dRMoa/NCn3W7Rb0m88kbmrfY/8+Pp75DgX2zL7924fv2Z3aNDRqen3NtLSDKfvb1Dvhe+QbfdZmdni49+9P202hJLjlKOkCiEwPc9TG6w1sGcWZbhex6h71N4GZ7ngs7yPHdEQ6MxRUGr0yGNY5T0HC9TCIwtPdSFj9Eeuw+P+LVf/QKvvPJ6efg7SNj3JN1ul1s3LpgPXtk2Le5bEP7SDP2c87iezyJquvSmQKzKOGwe/FPTfYsq38A+fgyxwlsRq0XHit+IreEascqFqTu0ocZBlFUl1FJDZKhNGa3KimmyNqa5IDvjNWgQJOTkSarSNMUai+cFTpGywPeYzdpnJlWU8HsrcNa/nudhC10qTErHvhlS8A4uKeWcdzBDAJRSFEWxlAOwNLKQZZy3tWhdkKapFO8hAO/e9T//pf8uGgyHTwWe/x/88le+8oFHh/vXj46P2eivk+oChGA4HtHqdojTBE9KPKVKk4a6mdtjtPBNATRLxUPdYm06TOtITCxI7WpmZba6+dka9rFw+jVrE6AFIsNSIESBtQbEjCUTIGiv6IZrO/AGLkOViW1rduXq/RA0JImxaqhS23lVRzGiBlU5+7Zn5DQ/ffETZpIW9DpBeH/3kNFwRJxkjvCWFwSejyFDC+l8+E2O9DyEhaLI8AlZ6wRsr/vcvLrD1Qsb2YeevXrSkvYhhmcX3m+OYLCmxBfWOr1/p9vvd7rtIUUMWZbwaPcRaRJz9817hGFA4CtUmVvue4owCmlFId1eh36/y9p6jyAI8DyfKIhQXsTXv/VtDg6OGE9SbGkC5LINPNqBV5ryIvw4/unZB/AEo2fe9/4rHOze4fhondFkl/1JzvGpxfMeIYQlinw8Bc995BnCSKB8gUWgC4u2Ob5UWCvLsBOJ1jnGiHLm6jZCpQRa5y5LwIM0nriZ6ExXP1PZWI/CKI4OB3zu81/my1/6Jgf7A05PE1TZrfXbAdev7PDsc8/ZHRX/NeCPNqbSUelgq8tt5bk6L96PZqOeJrh7pQhpkPvWHZArj7mo58g0jf+sbXToXhkrzq19bY3HADVNhqTZ28A238ul0UMNUrh8DUa3PvU/ZHvHfyTPs40sy5w6RjgJnXPOPDtYZ522KMOnLA7B8z0PT0hyZiJ99/y+G9eiK+esIFhUAywqEWYjgeVALSiKQvq+L94rAN6F65//rb/fGk3H79s/OHjfV1/6ykfvPLp/c29/z0WSGo1UCitKg5JZRKTnoXyfoN/HNsbJUk/WWzLIqHb61YVgz1kbFceyOhiy6jS4NPOrSdVb+BkFkIIdnE5/LoxafySO43+ipXpKYAfG6G9FYfiE8lTu+d6akjbr2+Ina2NV68hNdYx+0RQRWrfRVZQUK3DjYnFTZ7QkahjSDWEqC6iEEvBUx/yv0U98+ndcevW1zuvfe1MNx0k0HE6ZTKZkaYq2mswaCmOwRUGWF+RldS+Foh2FdLttru5scu3Sdv7xj31kcCk0X1oz489iaS3cG5t0136pj1FP335ydPfwsDMYnBLvHmM9S5Zp9vcPORLH5bzQRfAqJfE9F7yjlMD3AsLIJ2oFRFFIu90lCAPyPOP4ZMCDh3uOfa88AmnptULWQ5+1Wa6BEN4iWiWA56KUe7ee5OB0xGg0ZprGDLKC/eMpyH1+7fMvkec5cRzz3Edus7m96QyBMAhyCp241yw8jLFzSaS1Aj13WXShSkLahQwDhdESzwsoComnQjIN+3snfO5zX+VLX3yJt+494HD/EGEUxhpavmBzvcPzz1zmhVtb9oZ49EfnH24tAdWuonaWc0YGlajelRl8jYFO3Vy+DtVaQRwaKhFR4zLaFD1ey+mpUTzQAPuLJuSuyUnT1qsROC9GuQ49rKzdlcbBAn1yK/fGo0xMp1PSJEYAWZGj8THSHea5cd1/kiTzGbsnFRbNzvY2UkryPEdKifC8ckxQFqi8s8Z71tEvHvQzFCDLMsIwnK+dGR9BKUWapiUZUNHpdIyZRVu+VwC8s6vAPBFI73efHp/81Bu795/efbQbZGlK0G6Bch+UscbBR3ZWEDpfcqnU4k5SP/M6R92yYpGLqPf+Xlkbth5KW5nts3zwizpI8mwRTYHDUf61ozh9fn/viN29Q5FO0z+V5zrWWv9MmsSpQRdev/+BXqdt2p2Wv9bt6F633eq1QtqhT0ewt94JL7YUBGcvPgaC8vWopdd1XlezgnSKMz8E9751+T8xAh9r4/KkiLB0ahv/OtKWaGBVVjMMrBUXVPH7L0ge9G/f/IUPPfnkjx4OJhsPHx1Fpwcnvk6nHSvyQAtIC02S5cRJVmrRHVO/22mx0etwaX2D288/q5+M+PZlP/8REH0E3sJhIKLJ6U8Zf+1Xnnv6crh3f4fRJMZozeHxgEnqvP9cJ41LyisKfOkT2wKYBfEkgEF4Bt+X+IGPVIpCa5I4RWsHPwpj2dmO6K/32en2iIT5NogP1rWXa1g++L5rnO494nSSMEnuUwxajCZTDg6nFNkjptMphweHvHX/Pi+++ALXblwjagdIaVFSYDQU2iUJSlnGFluBkh4WU+ZMOYdK1yGJ+eMihQIrGE00j3YP+JVf/TVefvkVvvPK93m0u0+WlvCq8tjc6PP8Mzf5xGc+zAfEI291rv043B8aiWtVfwpbg/zVuthVDnvB48lvtYf6ebOvyny/FilrGM3VcnBq1DuPI94uIRii+Xdbcf6IwzaMQG2lWJNeO9q5/seyV95s5XmOdglSrvMvMwDEzNo7z0ulSrm/G0PgBSvSPCo12LuFuy9GEs9+56LKYMYJWPw7ISWe76OUEp7nvYcAvNPrl/7W37swHI1ujKaTn/raq99533A86hVFgd+KSpcy58GMBWEsZqFbVp5ABt4qubZxxl3T9VLR9NrzFuY5Pt8rELqor6LtaheiQd+f6rcenMS33njzHkf7j56/fzri+PCUyTT20qTA5No3RmPRXm4sSimilpPKRFFEFAZ0Wz6R77HTCy/2ooD+1g43r19hux2+vrEWXLEm+N/6IvsxN0qgzaKDsuXxpL0lZrUoizfsUaz/dhiq35fm4pel8qWQ8siXFGsi+QNLnVMtw5kaVKYhldBtdLPnt/PEeovYiH9xsx9e+9Clfk/n13uF0Wu58j6Sasu0KJgkGZPJJJ/E6dDkxQSkt76+0dvY6HYvdv2DG0zXpbA/VL4sv3IjfBBX2tng9zzhiclHP/XxIs5y0fGl2u0cMBiOmMQZaQZ5YSiMwgaSPCtDb856jlmlS1YAqcYKVUoBCyIvJIx82n7G5maPG5c22H76KS6oyezwHxX9/le94fB5BGuzTu0DcppPP/UxTqeJmGbay954SJ4HmEKzv3dKGseMR1PuP9zjwYNDnrn9FB967n1sXujT67UJQg+LRqCwQqAXGNbGGDzfFQZ5nmKMLrskH6xlMIqZjDNef+0+L33lJb72tVe48+ab7O0fEE9z/CBAGMNmv8Nzt6/zwsc/wYvthHAp8rqasnkO6746lltR+tjlovo86St1yBc1Y7o6bkENQrCinqkcplUFUu3cvzIKXOExUe8VQqVpaXT7ewzpePYZWFtf7Igm/lRlkXoyojBPp1lOluXoEnkDN/831sm4TWGZxjFFKf8Di7Gafrs378YXyXqzj16ujE3eeQEwIwIujgFmf+YmRYuyQd8jCMNCCmHeKwDe4TU4OV0XSvzJL37xi1f3Dg96p+MRfitynX8J07Awf5ELkZCe8ogiWZJCGxKAVhDwhsraihpYzVLvFFjZmGzVPmzB09w2wOrla7l/Ov2VN/YHP/Sd73zv1rffOmLv+ISj0xHDJKZIY7I4Jcs1aLDWR1vrukk0QSAJAzcviwKPwHfkyE7o0eu22F6/z/q3v8fGWveptc3L6e1nnvjp7Zb6f9YjdedCJP7j8oBzIfDCduekrLrxhvurGIQorI3uZd744OC0ezyccHwy/EPHp4NY+eFPdNf6004Umu3NXisIBL12wM2OpOu+f4oVOcIKoINF1RKdqJtnVl6PYEOlk9/bdT/TxyNAWR/oQD7fJGzPJ7+wbo5S8TkjZCaFClqBf3ldj1+A/MJKqMzKpmp9EATA0237y/6PfvqFjS9/t39va00cDUdyMByTxDFZocm1Ic4NaarJ8oIsy0mzAmNdJEQpBMAatwlaFdASHkpYum3D5tYWt65d4unLO7zvWofQDs5s04UYAhOgO4s29KzgyUj868lnP/3jxnyeybQgSR9yPCxotSPSVLP76JjpJOX+/Udcv/ptvvaNJ7l56zJPPnmLmzev01/rE4WhixgWzn3NbX4FupBowBgfKTyypGA6HTMcDrl79wGvvnqH7716l7t377O3t8/+/gG5zkFYrNbsbK3xviev8PFnnuGTz2yyYU6Xi+5Fz4hGWLtuPNZwqNfyX0T9IX1u01ApKqytR8IWxwtLh3fV4McucxAWD/nqXL/WZKyG2NgkHFohJdcUO7WKIFb3qKXttKIGaOQYGbTO0UVOkeXlOMmhRdYKDAakI5jO4H8pXCiXQNDpdPC8GRq1PLcX4t1vuB3XxREBZ0XAYgGwyFMAkErh+T5eq5UHQrznA/BOrl/8qz+/fXB8dGP3/oNbuwd7l/cPD9wOqZxt5Mw6dY4uIRYQAAdLRpFyePZSolwTIifOMfCpHDy1MzWxqq2vQv1N5jqi1LiWZjcxgtcOJnzpCy//yLfeeMibD/bZOxkxGseM05RUSKwpMKYgVE5eZjODKXO1i0IwjQ1JaoAMKzI3I5MQKEsrkrSjAD8KCVTE1ub98BvffTXcWt/+sQ996MaPPnnlolgPg19uReGbbY9vtEzyl7D0yttc3VtzIJ6o9t88GWfvf3Vv/LOvfutL3TsPDzg5nXjjJCHNta+NwQ/8dhQF+ErQbQfcuLLJ5StXeebpJ7jaa/9iK5AvR8oWnXT6F5wy3taoIM5xODnbBHwEFxphy5mxB5bAIi4H9rMIPcYWHibtLnn0LnVsoh6dFbAjix/e7jDe+fQzX9lNnn7mjd3D9unursyK1EsLTVZo0lwzTQqG44wkToiTHKNdHGqmC0xuQFpy4zgtqpy9t9odbl7b5NlrF/jQp57jWTNcfOy6ajj8bNHrveyNxxcXeSkXbPITn1qD9JOfZpJZ4vEU7AlHp0Ok9PD9kMEwZjCKGY9j3rz3Fptbm1y9epmbN2+wvbPOWn+TXq9Dt9dmba03d2ATQhBPXXKi1oZHu/scHT/k5OSUu3fv8+DBPseHA05OB4xHCShLUeREgceFrR5PPXGFF28/wYufeYrbdtDAM7Gr8du2ocMU9vwiYSWEavFQbVIHNKGF1Lv7VflBorpn1HT3Va6RrSHQVb1JaotfKl4CdcZA5xmUVEyIbHVcWjdSaEIw6tAYp/jQWIrcWQGzOG8vvTEwkCQJaZpiy9cmhSQMQ/fsleo6i31XjH9qy7sKurBYBMw4CTOXwplE0BUAEs/3bdAObST992SA7+RKiqzfDsI//crd19eOjo+ZTKfzpDMLaGtWJB+Ljk1KKaIwPNvJrVwgvFSlcaKGmFa3kMSqhLCuE6l6ANi6QqNSabvFbe+mPPjaK69de+3V1/j6q/d56+E+RydjhmOL9hVWenhSkOnUQWPGUOBsXANfYWyB9C3KKKT0KIzTtVvh9Ni5FgyHGjFIUDLDV0P2jo5482Gbbude//v33+Ti1jpXLlz9bR+8/URy49JmcrkX/OUu2Z9vINraYxv8l/tj/ed+9Yvfbf36Sy/z6PCIk5MxOk9JsoJCC/e6lMLzBEoJgjDgm6/67Gy+xpXLr/LJF1/86Y89e+NHng6mBUKcgt3C4q/6MthzoOGFDVfUML1r9mgQAdgtYKtxlrwCfa7MfgP3UVrvZqRfuBEyvNG99DX9/hsfHRUFcaHRhSYtNKOJLpIknY7G02wyidv5JGtbE1OYjExrMm0otMUYi0IS+YpW6OuLV57gwx+4zAcYleT5+e9WCPreePyj811XzEYU0LHw2y5kRD/5Q7RbPl94+XtI5ZQFaZaDlajA5/R0TJy2OB3cZ2/vavAmxgAAIABJREFUlFdeeZ1Op0W73aLT7dDpRLSiiFa7TSuKCIKILMuYThPGk5h4OmU4HDAYnpLEKYPBiPE4Bq3mscdR4LO9tc7TT1/lk09d5xM//AE+LAdnPJ0q0UzU+dxSf7jZmjVdNfla5AXUFvx1hX+VHFfDUeGc+X3VG6PWhpd6QmzdvbAN90SI1U68+jMaVT91t7WhqKkaIQlxzmiwck9NTpZrsjQjy3Ly4mzOPgttK3LNZDIpQ6rcQRwEAb1ez1m7L8Dwi3v+7O/frQJgVgTMSIFemfyXJMmSB8AiAqCkxPc96weBbQXRexyAd3KlWdYbxKONNM+2hpMxptCoXjn3t6ZMyLVlS+oWujVnD7qSikAGSPRqBsB5DNw66K0uaatpXCCq0pvq5lKbK64RNr43yr7669958Nmvf/NbvPrGffYe7bN/NEYjsdKijEVIQSuM6Lf7zsa20y4tbcNyweQUeYqxhjzNnbzLWPI8I81S0iQjTV1SHhgybTgc56hJgq9OeevRfmk1+/3WN751tfXi88/+sc9+/Nn0A5tejBWdpYTB8v7s5eLn/um//qL48svf8l+/94jhYEiSO/jMSscY19pCUSDLNF47SFAIjo9HHBzFjEZFf/Bwv29+5PmDG23+QY/09wFbtd3IUvFUY+MsFmyeq+OaJgvixQPe1vBDaklk1aLQafUEdK+o/KOQOSxBAaHFIij6yh6ZjV8t2BLAlpHqg5k13dQY8sIQa01eWJ0kBZ7wRL/tF2uRN46Eeem6GH3CjTGQYL2FAkg1PLxQkjp+uJ+y9pOfZmttm5e+/T3u3N/jZDhiPM2J0xTlh0yTlCAISE+HcGyRyhAGPp7v4/s+QeDhKw+kRAo3hitKLXZa2rumiSXNEmfHLQUFLllxo+PTW9vm5vWd4lPPvd9+5oUnxEfkyFN1Heo8EKdhdLfi4VN3UNYU7YtfLyqoXK2xEKuEQVszez+Perb0jJ5j2SeaEIe611VxD7WsNjbVbrzqOdLk7X+emylVNOwxB65dTTVM8px4OiVNY7I0xQu9MwjfWoqiII7jOTJgtCYIAjb6a3jizJFvvuSkWOnY3ynsP5P+zfwAZg2l7/tz9v+sOFh0H/SUwvc863u+DsNQvVcAvIPr5OiYqc7UZDr1sywnLQq2whBtFjp/Yxf29YUHQDhDCCWVY1etHO62wYGPejZ6nVVwlYjTRN5ZWSyiUiFjgNM7R6N/9PL37/2ur371W/K7bz3iwYNHnIw0hbYoaWh3ArrdNt1+h82NDXZ2trly5Qrd/hqdVogX9Ol2IybjI/I8JZ4mTKcx0zhhOpkyjWMGgxGTScxoNCGOY0ajEdNJjFfqsVNtiXNLMU0ZDo8YDsYk8SQkz8LOZz/yD2/21c+AaJdvRAP2+6IrP/+FL3pff+VV7tx/xP7BCUG7DSYj0wXCCJdlX8rWVFmQKOWTZ5rpxJJnxyjAlyBDX/34C09t9vpigqAHBOf6ty8iAdVNe4lMVtkMq5urrfNlFzWf6zmZD2dFo796Frun1hdwSWWfAZsAfXegW+aFwuyB2Ox+fb2YPC/RjMPeS91k8gIIk7VbXwqm00+tJiNWDpaKA6QPvBDEbH36g3cu3Lh59Vsvf1W9/vBI7R2cMJkMGY5iJlNFbrIz9rURxEmOSAuEKGey1m26biM2CCHPGNJWYrTC8yKELLA6ZqPXor/W58L2Bs89eYHbH/qY/eQl9QvPyPHvbR601wVMVQsFlqNoqSI2NLhK2vpbtmL3XTNXb/KnqKIQoq7QfBsH5nljhhUOQqX4qcsAQTTkHVTuy9ty5WwqWBo8VahBQjHkRhPHU/I8p9AF0gqsVIiSxKdLB8Azf30Hs7darbkZjy2lzL9Zs/86VEHO8zhsrRrAIQCKwPNt4PsiDMP3EIB3cp2entokjm2SJCIrMvzQJ06SMjmqlPrJM9MGKwSyrARl+UB5wgdnllLzoLKc4FW7uCuafNsg6Vv03X87HcFZt2qB4f1J9k9e2R38zl//yjdbr959wL0HB5xMSuOLwGNzY42tnQ2euHmN973vaS5f3uH27dtsbW44VyzfRdsqT2KtIc8zt8CKgiIvSJKUg4Mjdnd3GZwO2ds75MH9RxwenXJ6MmA4GjEaTdCZRhQgjUWrguNRxhsPdun1Otx66ql/t93d+ec7Kvtpdygz3Sf8228+PP7Dr9zd67157xH7h0dI5TGdjvF8j7V1F7yjlI8QliJ3ZjyuU8wJotCFgiSaRwenBIGg2xIbFy+t/fa16MIvXwzsz6ySws45M0TD4LfJm2kRNhaVInEFaaC+2FvMclgsLptIVI5MubEqJz17viSIzWL8fPn6RDcd/nhZQZggjj9Z0hdWsxpo6HoX7sETYnA5uNr9R09d+My//503j9l981XuHo54uD/keDAkS2ImcUqSZuSZprCgjbP5nalubHm/hFBI4VwUrbUYbfGkT+hrOt2AXmeTzfUuN25c4gM3r/PB567zfDASXYrf23y40YCeVe551SVzhWnfNHprKsYfh/yxINWt4wdVOvQlHlDpslc1G7LnyWzq5u2iJnq7AUWopcs0/PzGr+FtoB1Nfh92mZthBfz0f/ZnB5//9T8vFewfHhC0IoIoZBrHIAOyvOD4+JCo0yYeT8h1Tjtssba25g5/7eSjxhqMnbnx2TlaMAvkeTsHetMlhcXovDzQ3cs2tkBIaHciRrFPmqbz3yOMICmSkisQ4Hue8JUyYfAeAvDOCoDBqUAIkjhxUExZhc1nNA2Ik3Q8Elexycd8BvYczMvWVMuNa0U0h2dUrTGXH0BzWoj/6+E4/9kvfvnl/usP9r3/j703jZUky6/7fvfeWDPz7e/Vq33pql6ql5luTnMWDkckLYk2LRo0DckWCVkEDAi0/MGwAVu2CRsWIEC2Pwg2BMOGYECwIIiSJfub5UWULXGBSQ5n6enumV6qu2t9+5p7LHfxh8jMyoyMyOqhOEMS6AAaUzX1XmZGRsS9//8553/O450jjroO31eEvmBtbZXnX7jFG6+/wmuvvcwLL9xmdWWJRhRg7UiEgh1ZYnpo67AohIsLFasoZrdfuHOdJHmF/iDh9LjN3t4+uzuH7B8e89HHn7C/d8Te/j6dXsJwmKBEMVbZ7vbZPTrnvQ/uxy9eX79M4+kXkWTm1kcfPRE7u4d0uj2QitwYWq2YrQsbbF/cZnNzjUYcYa1jOEzo94cM+gM67S7tdofT0xxnJN3hkOMTx8FaU9z/+KOlu7cv/+w2uZiDNOcUzCVF9sK0t7oFUMyvfa4MSZfh/iohWgVv6yo6wjIkPH8LyikOW059JlXLT89ZtpYW5KddsbpM7+cvB447LwQ8fu7LfHKe8Oi9Bxx2Tzk8TzjvDBkO+gyGfbKRYCvPLdpYjCnEpkXnY0EIPOXhKQ8pVRGf3IrYXFvl2pUlbl+6yc2XtrnVio9v6qNNgfAq3S2r+G+xoEsVVbbe5WeygsMXFVRR7ZhuCQ2qogKqNmshFlvxUqH4rzIZm9udqKEgplEfsfh+Ly+YZXSj0gSsjrlYNK44/iU59TPul9JhnzwvNlBjwSKf6rq0JssyUp1jnUUJRaPRmJjtjGxdJxv+aMd+upj+AYQBPSveYHoEsYwASCEIPd95QlophPsHf/N/lH/+3//L9rMC4PdxJGlqrLUqz3N0YrCeqzWAGBcFburhESPhxnw34Gr8NVzN4lBFHbj5TkVQbxQi5hY0PWoLemeZ+dnf+Z1vxvefHKknO4ectDVe4BNFiovbW7z88vN86Ytf4Gtf+xIXLqwjpMPzJDiDkHbyslIyKgh8MK54LoTD2oJGkFISxT5h6LO1uc71G5fJM8P5eZeHj3f45JNPuP/JY7717bfZ2zvk6OgY5QcMjEenN6Cbdf225ktTi+VSYvn59tEup6cduv0EgyKOfS5fvsgLL97mueducOf526xvrDLodul2uwyHCb3egMPDEx482OH+Jw852DtBa013oDlvd2j3BsHRaSd/8WKMKOLB1DysXVeIUdPplZEcKgRNJUjViXph1FzIC7V+U7WLJW5+4ZyLSq7p1Oqg6lov9slz4I//3nJw1+tzaxN2fvJV9gcZB6cJneOU7vEe3axHL03pJZokNejcoo1BazvyPTdIAb4f0GrGNBsBG02PzdYqq89d4dZ6g9teh2UGSD3YrPS/cFSjcFWwfxV1Nxb3siDPwtV1uhXaklrRaYlnr9wM69DAOq+BCs2CKN0PVZ9Z1EDxVfqWuehfV/2dLJowmDmvKhHis+iN4t+dMXd6vR5JkkxifosN3SPThmGSTCKABY5Go0Gz2ZyJ/XUjJ8qJUE98us7+D2yDnBoHHOcFTNMSIy9sC86baNI+KwC+/yPLMm2tdcYaDBprmKm8Jpt+yZ8ZwNlCHBgE4QLPebcgIrR0Y7sS91iZ6FVl1lEJAxsQJz2n/q4U+pc/erjXuv9kj4c7+5yeDxHKI/AF2xcu8Oprd/mJr32ZH//aF9lYX8G6bFToaKRwo73CzHhRa5NhDUglZiIrhXBIKdBOI5VHGEnCULGyepFr1y/w2mvPc//BEza31vm1f/rr9Po9tAFrHNoVpVWmzUwh0+72GSSFElzj45xlbX2VW7eu8/Ldl/jTP/2TbG9vEoUFBWB0QQEMk5Td3SN+4zd+G5wkSTLyY0dqLL1Bynm7z9Fxe3i82XpryzNvAEuzm3vNojynzhfVnU0FojzXAsz8ucoy2dXD11XjpJVwdY1oa9GLzr1tDXlbb6xkR68hCs8FQeQct02b2yGkFx3JJZ8jPsdZbuikOd2+Jh1qMl1EoQL4rrAdlp5HEAcsL3s0I48LXsSWOKKBJqAzv3nNWMOW5+lrLGfLeRmLzrGOi65FZsrX5FPTd/Vw/KIgnfI5TfQrdTqFuTnICgRi+tzriihRalam3s+V0YsamF9MFwOluOXKEefZm1pnCYPBgCRJClEwxSaunSXNMwaDwShPwuGJgvePoghgYv2LfWrQU1C/zO0HP8jDL5z+JkXHWAjonEMbTZpnLsm1i/NcYK0EPkMAfr9CDPE0meGpz//UqF/5ooupalpIiRdFC5KrSjdtVdBImQMWVbncon4BcJWpHZ1OuPz3XJr/6MFZIt5/70PuPdjl9KxDrh1eAGtra9y5c5MvvvkGP/61L7G80iDXQzxfgNGFEcvoIbDOjqpoVSS6OYGVjJT3Bmt1IegSAmssylMk+QBfqkKlbTKklKyvRwhxjU67y+9+/ZuEUUjey1A4gsgrIl4Verw6aKv9o5MOnfYQbXKsBd9XrK2ucOXKJb785Te5fu0yQhTZREqAigRRqGg0l1haWkaKkPOzLvv7BxyfdDFCMkwyuv0Bp+edYW6v+CD64JYWNm9V17Y2JnXR9aojhMW8iLBGe1fZHpb54zKXXH6tWltYt+BcSgXLtCnLrCLe5nHjd/zB4MtFjsDsz4RCEAIrtMEH6zt0q1B8aidsx639kyXR/5fl2IjZgULjCYNyCdCrh6Ar7XQr4PHaVD1qQm/cwjyphUE2c/dBaeOtTNOcgtxFBZKDq998qTC1WkRHioqUTFd3P1AxtcAzvpvptxW1QwqzxWpVnsnUfTSNgkydW5Ikkxn/cYwuUpClxebfT4ZYCpF3EATEcUwYhqPXHvH/2swE9ow33xla4IdQAExPCYzPJc1z+sOhGwwHOpBKWmP+2AkB/8iYFwRB4MIwFEV+ezEqorWuVX5OFwTGFiIR5Qez96+ouKFF3UiOq4YhZx7SKvFghTp41qBjaJyURgaXHx2ctr53/4Dj8y69QXFjN5diLl3a4rVXX+LLX3mTtfUVpLIoD6zNUJ5AKTkZVVGycGKzhgKahSKkZeyOKD2E56NU8V8ZLht/n1mW4YeSfr9PEIYT2M1XilYoiJRDSuE6Mvg/EMJpoH/codNL0GkO2hCFiuXlJpub62xvbSKlwZeCOAyQEqSzCOlQooCOtzbX2dhYp9Fo4vsS6xyZtiRJRpLmzTTXOdCY49nL6vDytRGiwpRELLZnd6IGuxeLraRFxSYm6u6xqU1iBrkQ8/CqoCL0pnQeoq5NFRXulE+rBH84+FIhIxTzt3N5QXCF4jMGloTgihj86WVwLSdoFheHcCZAYhFSxiyaJqh+9spI3OS5WnCNqsZ4535W1M/Ci5pr68rP9vjnqzQGomKdqNCqTF93IZ5xLUvX3pU27NrXENRwFaXfr8sZqDqXKXHjtGvpXO0y1UyNG6ef+89/ZDAYFALgka5r3EkPk4T+aDIgy7ORiVthYz7ecMf/jdes8SY8XQz8MGiA6YjgcTTwmJ5I04xur0en3eH04NA7Ozn9Y2cG9EcGAYiiSALO9wO8yMNkBfwYBMGzKQAcWZq5qOl/gw5vFpGAz7C4LEPHtT9XJ0grw3tUjAkW37FzLuhlrnXvwQFP9o/otHsYB56ULC21eP72Ld54/XNcubKNQGO0xpNF7rUbwXbWgDXghESIkWZMgjF5gfLKcYKbA108icZZlPLwg6BIUzQGawW+8vG9gGGS0U8t1gmsBacdQWBoeIKGJ7joa5YdP4PRRUeYaEyuMdoghCMMfOI4otmMaLRCfF/hjEZnOSBQykPrIX4Qgwjxg4wwDJCq8HcQ0uGswTiL0akgij6HyGQ13El9TnzVilqOEXY1SMHCjlHUc8dznayrGC2jOlVujp+d+n1R0ipQBz9X6Aoqf6YwCKpFTepohbE4cfr5oI6OqILAS5y3WJStsUAd/6yo38rNn2pNhStfn7rEyaoUzDJHXu7Sy0ZfNa83VyCwcChghuuv0zUtyjxwdTbGU6K9sY29K1FiTtRQDmLeUbEsojX29WQwJEtSBoNisw/iGBg5/yX55GUbYUSz2SQIAqy1DIdDsqyY5nLajDwpRsFAo4ekYLT+4MKAnlUAjN0wxwXAuInqdbvq+PGO3wlDdfXqlQBIPysAfh/H8vKyTtNURo0I3w/ItZ4Z8ViEAmAt0mb4eO+DeHN2gS/Hf7q51L1ZSKxuJtfV8711MHSxeDic9c86A/aPjzlp9+jqQkHqRYrVlWVuPXed51+4jRRFtnwU+ziTFuprK1AqQHoSoyHPi8Io1xprLOMUysK5atThK4fnFV24NQ6BItd6FEvr0LqA17Rx9HudIqULia88QmWIPY/YC4l9/OmGx43yu4WggPiVxPd9wqCBUg5tUgKhRi6ghhFbQa5ThHs6zlPAeAbQCKVQSiB8aTyd3cfjubmF1NV0kFUcpqtG/ecW3cpM84q0t/I9UdYa4OYX6oUIQoVZVJWlqqhzc6tQw8+c+wLR1lwstKtAV+q8LconVjELXqVUX1hslJ+tZw2ol7vwuk100QRI1eepsPR10zTRAs8FUVMcuHKHTYWo8RmiyHLxUyU2FIuU/6JCkFz+XFX3gnuaGrhwlLKUJTD9vta+ked50eVnGVprwtG9OR5ZFkLgyYAoimg0GgWsnqZ0u116vR5aazwhieOYVqtFFEWokQ/FGMm09gdrwT/WH0xHBo+bUOscSZr4Z73u2hvP3dq4tL29DHQ/KwB+H8fqxjqJ0y7+uEkQBpy3z1GeNwlokKPqawJjU8wra62LQAbhxNLRt/5tQq8Gtp0e7amJu6zlY+GZBhhzXePkf5TLcru3f6J29s4YpjlIiZOGKAjZWF/lxReeZ3mpVXTVvofNs2ICxhXdvrOSJLMcHJzw0b377Ozs0O4M8DyBMQ4pfXw/otkYPSjNiGarMfJ0j2g0YhqNaPS8FuIa4yz9wYB+v0+WDiZJV/7IAtMPI9QULD0+RalkoQ+QduLP7QcjYw8JjEYUpRQjIWLxGtboiSFImg4KPs0ZfD8kjEKazYYS1uzh1J1nC78qNj1XgpRFVQdXUyiIEgc8s6jVOENSEllRYxI1dwsJFp8MNaNl5a6xAp0QZW1AeeMvda1V1tZUiPQqN4OKZ+hTtWQ1GfPOfQpzHVfDVbsKgWgJSXGl70K4ahBCVCUP1qE6ZR1RxZqzcFKlouMuO1nWaiJKVsGiqpCoGTMsi/lqEc/SNZ37e8X3//Te2eu022As/U4Xz/MIw5Czbo9BkiI8RZ4nBCJgeXmZVqtFv9/n+Oho4r4HIKQgz3MGgwEAcRhNlPhaa4SSz9zA50Cj74M6sNYSxzFZltHpdCZrntYFUuuAsBGvX7548U+Hrea7wM5nBcDv49jY3rKdft+0Wk3jeYVj6Ked83TWEkoLToPwavyzxXx3xwKeeFEngajeXESpuygWHpsM08Oj0zbH7VOGSYIz+Ui4KNja2mBrawPPVwiZgxuNvSBBFF2/RfDhB/f5zd/8bX7jN3+b3d1D+v0BaZoXqVrWEvg+y0vLrKyv0mrFNJoRy8tLXLy0xcbGKqtrS6ysLLOy1GR9fZUgaHBweMLh0SmdTo8s1fh+iOc5/DDAi8NCIDIyyRCAagT4gYfnFd18nuckacL5+TlpZmi4gEznhEEATmJsDhShMA4PayydzoBud4B1RaSsH4Y0Wy2WW0vRZsP76clq6yo2nSrV+Nx+4qqd2MoWw6LU7dWi4dOogZiNZ62aOBHPEG+VN/C6EJs5brqCu52mFuo82qsMjUTdhlVX8Lp58VsVzO8WiPjm9r662Xk3H5tb3iArpz+Yz+2YfP4qgW/Vs1xB0bhnrQlT7yFK48dUjSRXoIzlsb2qa1k1wz855zrDIaqLoXKhPM3hl8XR059D1lFoFdfemJ/JsmzUWIy0Ws6SjYV0ApTwaDabCFEIBsdUwbTIbyy6E0JMJgTGXXgxQfCDPaajfz3Pw2RmhgZwQiCVWu6bfDWWavVX/7v/Qf3if/Dvmc8KgO/ziKM4aQRRT0l1LqXYGPtEl0WA0z7Sk/tSOoTyJ06Bc4t+Geqvoh4rbWI/bSNTxYVOHswwSdO93cND7/S8R5amoykgRxQFXLt2lYsXNvFEoeS3roDYixtMgfTpng94++3v8mu/9ut88OHHJElG4IXk5ikclWWGTq/Hzv5e4YroKaIopLXUYG19lbW1ZdbX19hYX6XVaiClQsqYhw8fc3raRqfguSFBuEQQBfiNeNpwHh8IGxFRHBGGPkJIkmHK+VmHg4Mjjg7PWGq28KQgz0Uh/lM+QnhIKegPLE+e7LO3e0iWZUhR0BxBGLHaanFha0uF5cWuvPjWzixTk9A2dX0qg4TKEHbF4juzWbgaN8kq60JR06XWmfrULNauKhuh1O2JBRnwi6itKkOeKhvrSrOlmhlzUaPBqLJXrkIvpjexMp0wZ1Djvo+CvcLPY05+UFGUjO8tV/PaTswX/gs9ByrOv9LzofS5KwV/i0ZT5zM85gtjWaNLKV8DV12wzSFNT+/HPM+/lg4KLn+smjfakWUZuTU4KZGex8rKClII+r0e/V6PdGQLPBZeGmfJ8ozphtBaW7gE+t6UF8wPrgCQUk50CGP6QqkiedYYQ3848JM0C4bDoe+MURRDNJ8VAN+X2ELINLPZPzLaXHHObYDDaj238ZfhGzHCnj0/LO0BYr7jKOdgL9AGzj5fosIOVCy2kXqq1A28IPx3h71ePBgmOCdQ0iGFZHVthQvbm7RazZH9ZBEWLyQ4Iye52Xt7B7z77j0ePtxBZw4hAnIjRnHARWSlw0wyExSFeKbf6dHv9Dg+OGFppUFrqUmj0SCKQpTySJKM8/Mupyfn+H5A4BTN2Gep1SCOo2n1GD6wub3KhdWYKI6R8pQkExwfn3P/4x3+6a/9On/ia1/l0qUt4jgiCHykEjiTk2aWnd1Dvv71b/Do4RN6nR55amnFAXHYYrnZYHu1iSCf5+eflUJGRWfvxGLuvdzJl7sfUZHs5io67/J7uSrIWDCxhp1BHsRsxOpc/HD5vKu8D6hwm6zozmfqEvE0p34OynaLI3Jr9RWigpevoigqonRFTWFXRycsMl2qfH4/hYan0hKY+aJvplmoqJEqR4Gp/k7n5u/LYsuRo17dtS2vS9Nr2kIqc0Hx/Cx306oLMD0GOA2d57qgF7Ns4iWhdWELbp1FAGEYEscxybBPr9djMBhMHE7HG/2Y6h2jAGP733HjI6yrdfH7gzjG5j++7xNF0cjToKCepZKkWUq/35f9fl/KVHtOij9WlsB/ZAqAwPP54N6HD4TACirgpwpuZ4wMWAtBGEwtZBW8VFVXMGfiI+aFX3MrhGCibpspBFwd9BZ3cS9m0obGAc4gLYRRxPLSEpubm3i+Krj5iePVOPVKYjM4PDxmb2+/SPbLDUFQQGFCSbQtAjPUKCULoyeBLYz9s62lfdLl7OQcz/dRo5hNYyzGFJacvnBsrgjWlppsLsdcvbg+NyP6/LrHt5c3aDYb+FKRZI7joy4fyPsMkpTT03O2tjZotVqsrazTWm4ShSGPn+zy8Ucf853vvM/+/gFZLgDJUjNmc22V5ZXtbNX3niD0FXBhnYlaRYvJnOsfNfwwFXa842tta/La515/QeExs9lOj1a5BZGu1EPnVULI6aS5yT3umHOFq+zO6wR3pXE1V8EfiE+z4ZYKYrEokpZnCCdd9fnP8e5TKEkVClAV/DM3jeDmR9qqfqbOgKrq76IKRaxac6avW8nh0FUIUqvMoerMiiqL57oRwBpEcy6gsCZzYY5SoFDI93qkSUKWpAVvnucjczGF9BRRI0YUaMFkY5Wj0b8xzK7kUzvg8X+24BR+KD4Ak43S8wiCYBIRrLXGlz5pmtHr9lTv+FQNpPRbrdZnBcDv50iTYfzirdu//Pb33l0WYwtgKT4VBSCEJAyjp5CZqOokKiJAXQV6u1AHMF4wJHMqcCGqrYEd9AZWDZLR86ENCIsQDVqtFuvrq0WoEYXXesFvwdhQKssyBsOUXr+Ptg7P87BWj+zdxl+ToNVq0oxiZOH9MuLeNVYXs7ZZrtFWjSYJRhW0klhjiJTHWsNxYWOFSxc32V5b52azYupCQry1UbyHAKsNmYO9/RN+XWNDAAAgAElEQVSSdMDOzh7NRojyPHzPpxE3kBL6g4Tj41O67S7t80LME/mClZUVrl7a4M7t6y5Q4m3gcj0iU0uW508D5vEqRUlPr18CWJwIEHiVC7uo6pBqvIhFBUo0rbp2z+iinKuBjxdQTaJGRDi3OIt6WLe2wnKLJyiqqI+qAkQsOp8qc5wSMjC3d1ZsgtPpeIKagr/GzKeuG55GYkRNQV8+36r7Y+GYapXrXxWvX76OpbWmahKi6nN+GsdJISoyCqjXecxpHeavbZ7n9Pt90jSdbO6ZLegAzysip+M4HomC08IOeNThM4LWC7tdV6TujcYAn7oC/vD2pjENMF0AjA2J8iRjOBh4B/v7jWvXrzdWV1YinrpjfVYAfOoCwOi1s25nTQixNuZ6/CkPgGcdfhAV8/HT0K2rgnRFqZqtS8mq4iddvTLbVfnPF/+WGiuGgwyBGyUYgpKSMAxpNpsYm6PUaMQEg3MSax2Iwot9MBjQ7/VJs4QoapDlxZ6nlAIrWFtb4/nbt7hy5RIeMBj0sKbY/NNkyHA4YJAWiW9ZlpAME7I0K5ATL2Sp4bG52uLqlS2uXdpO737hNdPCHQI3p7+RRwPB0cOPSbIMbQxxGJKZDCEcx6cJ7vgETymE9JACpFBIIdGmSCyU0kMqC1hazYiL22vcuHGdG1dW/HX6/1r1AiPqNqd8BMXofeP/XuYFXx1mOVmekxmL0ZbcWAJPEniKyJNE1nwknXl/O1Y/FxQdWj7qXGaLB6jpgEqdVmVokaMyeOhTIQHlTrqqs67TOZQWYVeTZz8XuFOBqTtXE2Qj5rl4V4eulapqV/XMVCAzlTB/DfdQVSQ8a6Ob49hLY43UIBdiQaE0PdI3p5JfRC/U3A8zOpEK4yFXvp6LYPpFhSwVEzRisaZG1OUHzP58lmUMev3JGKAxoE0h6vPDogCIoohsMCDLsgn0P+24J6Uk15owCAjD8GkM9RQ8/4M+pkf/xlTAGIWw1uK0JjdaGSXXLm1vby+vrCwDx58VAN/H8T//N3/TOz89i9pJ37Y7nSDXRYfrBX6lBsDxdLzDChBSIqVXBKvOQJLMqlmrGrkZ6L9q3KzmwaybL3fz4SHCGXQ+xFiLVB5aF4uNVALflxiT43k+zo0SEKVEOIfF4vmQZD2SPCUIArIRn+YwWOeKKQAcQRyxsrTM5toKy0tNGlEA1nB+cky3c05qctI0odvtct7uMOj1MdoQBAFryy221lpc397klTdfyS577h8DPz9ToAGP7u2wd3JOp90hzx1C5XieKDZ3T+GEwDiHtI5cazxVQP15blAqACy5TggCjzjy2Vht8crzV7kiB3JuoRILRpoctGXro36mmzvDdHP34PjH9x89Js0GZFoXATbGjlBYQaAEHqCEd2tpc/3m9vamuHRhnY04omH1P73gZT/19FkQs9faVSzCZS2JWBSOMuH7C1vl4kf9SjV+rbZLFDxP8btqauGW8/a75SwEMb+RupoNa67wEfMQctmFrlyczEDVYrFxk6jQ1VSp34WrmCComhLg2aZdMyhKTax3lY5kBnEoQ/FiXli40PeAmsyg8v20QLc0N65YhaYsoGvKaAqi5j4vf7+lIq/K+0EIbJ6j0wyjHbmxaCvRI+rUUwJPKnzlMRg9r+N1fdxxTzZfRmPgvvcU/i9gPJzWSO9fDHH/NPqBSfqflDPpgG5kWe8A5XurYRB+0Q+D3/6MAvg+j2uXr659+MlHm/uP91ba3Z4aDhNyFMkwRyhvEkcqhETI4ss3zmCFRFuD7/m0luOCR6PG3EJUwG+iwud90VyWcIv5zAoozCHIBwNh9ZBMZ2TSQ4Q+6WjW3zqN7ysMFqTAGPBkMSVgrUFKQXOpycbGGvt7R+CKChkcKIH1JO32Ofc+/JBBt8PzN69z5/pVWo1NlpaXuHRpkygM8CTYvM/hwQlPdvdpt9uYPCcKYpbX193z1y7oq5vxx9cjc3W0+c88GgMNZ8c7HBye0+0NEB5ol6OEorUUj1wLLXmm0XmO8iQWjdEO3/dHLoQGL/TIzQjuE4LEMGUr+2kcAAUPafLB4/bzDz782B2fHvon7Q7tdof+oE+a54W2YfJwCjwJvhCEQdBstpqsrS6xtrTEcqPJlRt3/tTLV1ftSis4XGNwQQIZ0BHNwmDK5LsNP7+sHPi4whmpnAg4z+frqdXVH90TTkfRN73h8AvVdAA1YjHA4fJG4+/5w+EvIJzIms1/HPRHiEldEiULTInqYP46CH1haI6oh99FWafAAnqmTrtRQgzKfg91tMOCkJrZQt1VT0aUUQ5XoY6vGvkUbj5hslJMWt50q/wPFvgB1NacNcLKKi0ICxABUTERJVy1FsDNV60nB/s4a0kzQ4aH8zw6nR5OOOLAp9VokvcK/xEnBUEYkud5gRD4PmmajjZeNzECQklyo4sRQSVxIxj+D6oAqHolT8iRIZ0g9HyaUcwwCBmap5bAxhryPG/1dLoUar30d/7r/9b/pf/0P8w/KwA+5TFIh0s3r17/S1//1je2+oM+SVKMggTNqBLdK0+JKaVQvj9RwddCrCyIwHQVzlp13chMZrirWM9nf9HmQ2d1kejnhMRYi3IWMRp1tM7gbDE6B3a0cRmk8lBOcf3qJe6+9Dz93pDjgxO6/QHGegUaIBS5pzg4OiJPhgw7bfZ2d9hYX+Hy5hqf/5FXCINN4rjZa6zGbG1t7d996c7KoNd/X1i74Un0SuwvR8o8buWdr9TdE49TRTvJ6Q+HDJKc3BrCMODy5W0ubl8giqMRvTBk0B+Sphm51jjjoV1OtztgmNgR2iHR2tAZJOzt7NO5+PxbWzJ9fY5SKS5NhhAZzokU0Xx3oHj3977Jg719b3f/hOOTE9rdHv3hkGGqR0FFakSleECRjKiEwPcgCgOacUSrEbG6vOI/3Nnn3voK25cuXXjxuSv0nePo0RlJt4fOB0iRXfajmLC1QrTUYmMtohUGNIOAJvZbF339oijyC8RUt+byMPpdP0m+OL27eEnyhQoSvwL2nuPbhT8c/mLBLQqCfv8n5jduUb2JVpn3zIXPuIppAvds+BhqYP0KSLpqoqYWlq7xxq2zqRUVtMXMpmSpzCkod7WVtYKoiQUvfaZphABXM1JXx+0za7bDM5Inazf4cpiVK40AMs/ps6D5qRIQivmRv1lXQwH/yl/5Ff3P/9+/rjNDqot4cj2ySijm6WURTqbkZM7f4bACvJLXf+AFE2pgMh4ItRkxPwgKoOwAOJ0LIIE0yzjvtP1urxd5jsAhPOCzAuBTFwBJsnbaPl/JtF4fpilZlmBd4cD0qS6SlPhRXOH+tsiDu8LExzFvKlK1MLkKKHRurGisTHMEysP3vUmmuhtt+M45bK7BCQQGiUWIcby0GT1WjhvXL/PlL75BFHp88P5HHB+f0e/36XZ7DAcJIgfrDO12m163y9HJMWvLLY63N9g/PWFrc5Pbt59rPX/zOptrSxc9aX/18lq0oqz5v7GZaOTnr4nc/eyi+6E9tHTSUT688cE51tdXuHP7Bl/40S9w9fI2vW6bLOuT5RmDfkJvMKDfzzhvD3j0aI8HDx7Q6w4xxpHlOclgyOC8q61jDYHGTb3/03Vl0BPBrw+0fP6dJ+cvf+/tb/HxzgGPnxxwdHpOuztgmBm0VQgJUlk8VSBFUtiRnkKTasswV3SGGfK0R+ArmvEZS3sNlleX2Hyyx3feex8hJN1hRtYbkucpnnB4vocfx8SNiDgKacU+Dc9z68tbb9y6c617ay38vauheRPEyDsf56fJy6MNewmcP3KomveQny4+R+mRo/snRji/9Jwu5XH0j/zh8M8Wghc3nwRHSQMwzelXzZfPQPU1lrVzoriqlE0qvDZq9BtUpmZWFOXPMAKaPLMVAt9aTwYq9cD11UEpHrxuZNDVdN/Tnf6c098CO+i6Nn/G08FVfL+l9anM888hOxXF2szs/zPGEOcKRSDPf2U4TCfqfq0NVhabph8EBEGxqY8LADvVyU/CfkaOe41RRsB0AVCVDPuDLACmqQClCkFikiRkeY4UisFwyHm77R892Q07UdS4ePFiCAw/KwA+xfG3/trfkLtPdoJOOhRHJ8fBMBkyirfBjHwAhFvMz0ipiLwGQlU9nBVpGU7UjPhRDTsCtbDAJN+7pvoHVlpN4jBAyWJ/UFLhKcdw2JuBupyzxYQAGms1UlrCIMZbj/iJP/EjbKwtc/3aJnt7B+w8OeL0+ITzdod2u0u702cwyMmdx2C0MZ622+zsH9JaWeXDjx9x78ZlXrxxPX7xpRs/ZwP+16uy929RBL+tUQS9TR/5+CQ0BP1U08sMmXYYPMLAsb66xNWr23zpR1/j2tVt4sjDmKILz/KMNMsZJoadnSP+8f/+a5yfndJpd5BS4KzDaoPTxjN2WoQ3B0eaw75e/+b7+5fee+8dHu7u82R3n6PTDt2hxuDwA8lKI6DRjGk0QsLQx1MSKYsqPc8NaZozHGQMhkMGfUlxPjlH3R7xaY9He4eEgT8aS7JkeY7NQQiD9AoXsDDwCQKF53ssxbHYWNvjwe6T5uMXX/jCm597rvuC6DdBuNHGLfJm4z2/P3hzqos0+y4+Pdd2q5NbBqljIwDPE/ieIJAS8vx3JPbRtqf/oj8/ry38JPlz83vVTDs7HK1aUTWuWeWRYOvdEIWopggqrXpLcLNbBDVTsblQY+XsFmsk5hwiRQVcPYcsVQQ5UbExVixAi0LDKmN+K8ZMFyVb1cVNl4ssUaPjEGIB4llx77gF5lG1CFMZbXn6PRljWsPhsJj7T/LJBi9QhGGI7/s4wUgQ7WY5/3GTNHrR5lQBMP5c093/DyMRcPy5xsLEcQGT5sWnTPsDut2uv3t0sPb5Vz+3trK0tAycf1YAfIrj8vbFje9+8N7qd7/77urJ2ZnXH/RHN8unq+6KqkzSaDRwstTBzAS4lJ4sx7NtWF1Vp8I87FdVSE8VBs04EHEUIhnDRw5HTqfTpdtrY51BCYuzGiEMYJHCIchJ0wycZHk54s0v3uaFly7z8MEe9+7d4/jojMOjEw72jzk+OuHkvMPZeZ/ewCdDctRLOG13aBydcrTU4vGjJ3z88X313r0L219885W/aC6u/MaNWP4M1bHQ5zqM/q6XJv+mhquDVJNlmkwbnLUEsaTVitlYX2J9tcnKio/vgfICCp2ij8VhXYhSkq0La7RaRd630QX/7ysFQZALKc2o4PBndwGXPtT+4Tc/efTlb771ln//0S67+4ectnvkMsSLLBurTdbWVlheWWVrY4Xl5RaNRkTgq9Ea5kjTnEE/pd3pFcZHZ21OT7uct1OGWcZ5omkn4Pt6Mo6kRME3Bp6HS8BZibAJUmUoYYlDj+WlBsdnPTU0Dhs0m+Ht9e/cCNLPASJbau0G3d6LCDHAOY5oHt07z7YffPebWyf9Ib3cYGyh6AuUwFOi0AY24y83m82vXNq+LK5uNNlU/JMLsvfTyoFBeJmDM28VYyxDYzHWop1DSUeMQGnztsIdrQTpz/qjL9QXE9hhtNIi56iBMhpRZT/syl33s/QAFb/oShoc5xYX2CyAoWuV7xUjcKKqkK+x9J6jIsrURVUeSMW4XtUbz3DrrgLbL69PdWOTpc9XFe4zhxhUFB5uQSFRKVSt8gKY7a+01k9H/7JstI4XHfx4nG8yy+9AMQr2mYxBF3rXMCiCgjzPQzoqhYI/6GM6fXb8Z9/38X0fhsW/a+HIdY5QamN7ff1rfhh+C3j0WQHwKY7uoNe6efXaX/7db39jq9vrMBwkWCxhEM1QALKK6ptCAOJmc3YbEzVc15z5SdnNb4Equ1IsJJibYy4tHj76V9dWor8QBR7WDou3SnLa7TZ7e3uk6csstQJMkcmLQCOERViHpyROGJzrIQSsrQa0Xr7G83eucHh4zqOHezx6cp+DwxMePz7m4OCEs7M2p2cdOl1DZiwyz+jtHxEHPt1uh6PTE047J0s7L177Mz/+xc9zJ1BVjKORgp4T4p/lzv0byWDQTNLC1cs6g++pIg448okjCaTkJsda0CPxopRqlOOtCQIFSJwtOmzf8wnCgGaraQV0QJgCKn/6He/k4ne+9cmTr3z729/xP3q8w6MnB5y1LVZIllqCC9sXuXx5m2vXttne3mRr8yIXtzdYWmrgKYFSYuTaZTk57nB80uXk9JC9vRMe7xyys7vH6ekZ522H1oBR+GrMGTtCJdB5ihQ+Sng4LDrPMUJgjGCYZiTpAblTxGEorlz+sc/fCIpvMuj2X8GJM3Dsm/jB7358cPPD97/r7R4cc3h2xnmq0aZY6DzB5PuyqOU4jtjc2ODi2jLXb9/96ecvN9ESzroZw35C7+AxaZaRG4N2A5wrXCCFVSCCz4WNSMStIqK50WqyuhyxFQZuGfsPrnjDf13MoD11DoNV1Nl0tywqTIqqYH9Rr/yvC0sq63CEWxBcVPP3yue1TnxZ1RGLT1HYLBrHpBp2LxcMrgYNEM/SSVAx7sy83XCVk+nMOVV4ClSNRs84DdatlWJCcw6HQ/QouXQ8zz/ePJVSZLkZ1ZFPff2Bice+r3yazeZk7M79MAf/S/vLNAoghJjEAyuhQAicLQpxgVjupMnGRhyv/U9/9b/y/tJf/c/0ZwXAswqAfm/1vNtZ08ZspFmOtoXiUilVFAD22RdeKYmKQsTcE10VziFKlX35gaqJly2POZUXwQXR6hurzb+wuVx0wPKoS2YLH4BBP+HRw11OT09pxJsIZXA2LwSAOIRzuJFmQAiBLwVgEIEkjmLCaIVLV5Z5rX+DnZ1DPvjgIbt7Bzx+fMTuzhEnZ8ccHZ3S66Z4KiTJHEdnGUm6R2aGOKPJE0H7jdd4YXPpny+74eeBJhAAKzJJftEJ8a4FYfp9TJJgdI6SGiU9AqWKOXtf4nsO6wyYEQcvLMZZMIrhcIjRGdjC5Mj3YnzfJ44jms3Y8zwVA/70d58JeP9U/8Rb336XDx/u8mhnn+OuxQnLxkaTK1cucPu5q9y+c5VXX3uV525dpNWKUaqgBKSzIyGgxVqHUtdJhpqTkz4npx3efuct7n3U4pP7+xwdnXFy0qbTtkgUfmxoNgJ8VWz6RhdCpSw3ZKmPQGKthzaW4/aQKD5m53BFHb7/hN6XL9F6uta2Dkz47W88Pnvpnbe/E3z0cIfd/SNOun16CWgbgMtxzqDkWGAkC5OU6JDl5RUu7x7yneUWvicYZJphP2EwLNzVMDnOaXJnR2CTREkV+4FPEAUEUVjkQUQBy5HPhQvX/vyLL15Mn2uG37gs+3cFhAXUhprdMNwCmn46IZDZjr4SXoaFGHTdWO1MNy2Zi7+dC9Chwt+jrBdYEL4kajZgV0VRLDqnsoCuym/B1WsEKosFatwV66x4K4yq6qYeqrr4Kgqi0mKgYlpk5Ow3HBY5AMWMfyFrskIgvQApPaxNEaOZ/5nNfVQMRFHEysoKvizQgrHx2WQjdvxQRIBjK+Dxn8fFiud5EzFgbnPyLKfdaQe9bj9UuQltsYZ+VgA86/jgw3sqS1N5fHoSplmKUAppLUhGUJFeqAEYP7y+71XAaTXZ6XUOXWVIjPKoYFXhUOcp/vT/jzzB1pVtVlaWiBonmERgbE67O+D9Dz9mf++Irc1lgsginQZpkK6AxJRSGO0QqhAEFpuFh7NDfM8R+AIp4dXXbnDz5kV2dzrcf7DHo8ef8OGHj3j8ZI/d3SM67SHp0CPXjtOOwNoThIFcS1KarHz1tZdtHP5fq6R/ZlQAxMAd4dwdAbh+SpImxYifFHhKoqTC93x85XAmA7JiQbJjW1mF5wuGvT79bmGfKV2AcQLle8RxwMpyS60yeKG8En1vEIh3v/Fb3Ht4xJOdAw7PBljps7EWcfXaZV65e5OXXnyBr/zYq1y+sooUOZCixiOUzqBkMVKZ6YJSabY8oijm4uUWV642ePXJbb7z9nu8994On3zyhL0nZ2g9ZOPCRW7c2KbRCDFGkw5TBklKlml63YSz8yFnZx1MpnAIev0BnV6H7uCQU3ebFoPJyZwb+cbHH7zH/Z0DHj7ZZ/8koa01TigUGumKCYVcF13OGB067+WctTucnB7iRwGeklhj0blGZzlGa6wxOKdwrpiXLuKXC/tUz/cK8aLvE/geUdSQm2uH3Lu/HD93+dKbr73+Qv9aJP7hNZX+OXBqYgVcR1FXRfO6mt1UuJHwvi5US8yL68rFddmrYGFIl6imBmaSAEtQvyhNKFRNAcwp412NhoKKZEP3DJBgasd1dWI9SvqHCtSlagy0TH/OrIHTXb5lPnCoRoBZN15aYYKmtSbLMrTWaD0al5uapUc9TfEbx5C7GWfXgipoNpuFSHoKGSiL8n5YBcC05mDalthJgclhOEhot9v+8c5OdCJl48qVKyE8XQg+KwAqjn/43//tjbfefXvlvXsfrJyfn4tBL0EqRWJy1sJ4UulJKSfofjEiN+qWZCEqwTm21tdQkxAmUV3BznlblEelqF7Q5qroGthTlNPGivf1gdu3r3Dr5lU+erTHIM1xwidJcp7sHPL1r3+T7QtrXLm+PHpYsmLMX3lY7YqJAS2RngBhMFbjXPHg+EoQew5tOiy3AlbvbnHz1hqHR5d540dOeeedd3n3u/d5/PCY46MOnW6Hbgd6qceT/TMcHp4K+PVmM/5Tb9y4uxqRzTUzFnTeJclSkjwnNxme18D3PZpRiJIOZ3OUV8BhCIE2RVa3zi3DYUK/n6LzHFzRnQeeJAg9mrHCswakN1mE9rPwre+8+/j1dz455MnOPoenA4yULDUkmxc2eenFm3zlK1/g9ddvs7Hh44d9cCnGGJQsqAYxam1xFiWLqQqEwvN8JI6tLZ+trWtcu7HOneef8L3vfsi3v3WPg4NDbt28xL/6s/8SV65uYXTG8fExOoduL2H/oM0773zE9753nydPjgvu0uTYPCU1lsS6URqTQOO8j/baHJ91OTw65eisRyoCJAIpLVFQFCnOQp57aF18d2MNzDDVaOuwZ92JCtoZO9kXCmhU40b3nZMOtAQsbpjjrEbKDOE0YXDC0fERe0dLPDk848HBQfDK65//s1+5vZXedl1/vnssu+TNPDd2fL+nIFMnaGvv/1n29Z9UDpQDJQrzJSnKpkMld85y5C7lDawkpJvRKNR16qWCQVRkDszETJcEgzOCXleNAlDnGljOjpgWH7oFiZauxq+/ogApb7wzPD4V/gRl/ZOYIlZrNBSVGRNUp1mW3uzw8BBjij8Ph0Ok8NDWEkbhZMY/jmM6nQ6+7zNMQed5YfSDJQxD1tbWCr+T0az9RARoXSUw8y8K8X/aomJchHieRxiGnHc7eEKSZkN6/b73+HB/9Uc+9/raysrKEnD2WQGw4EiydOnVF+/+lbe++876ME1ITQKusI8Nw3DkBDWrcZGMXfLH8H/Bw/iePyoApqvUBbPPztXToG4Bn1cODpn8QpW16dMPf2s55O7N67z97j36/V16A4cWPkcHbb75ze9x8eIWceMLrG94xJFHOhwgncVikJ5E4EZmOoURhvI9fATWGJQHwlqM6ZPrAWHgcfVKzMVL17hxY51XXnmR77z1PT76aJcHD3bZ2zvk5MjRGVrkwVnRKQZqaXnVf3n5+e1vrXtuc/r0MwOJTugNcnJtcAK8QBI3FVEskCpHYhCjz6tQCFzhgKizIhUsTUcz+hYlIfAEgScJ/Vlo0oH7+GTw+vsffJcHj/c5PGljkPgSNjbWuPvidT7/+gt86UfvsLEZYVwHTAYiHwn/BDYvDIgKEMIWY5dIBH7h0SNAFtZLbG14LH/xOe4+f407t2/x1re/zeUrm7z22lW2tpZxxiBeuoQ1iv7AcXDUAxHw5MkRSh5hnUA4hyosHApTo9FiP3SC9sERZ+ddOt0B/czDYFle8rmwtcrKckQUSbJUMxhkJIkm1zn9fkKnk6OkQqcZQehjTF4YQxVJUYRBgAolURgQ+B5SgnWWXGtybcgzQ5qpwrFRegwyTf+kx3l/SLvd5azb97vDjPT4TtD/0Rd4TfSKgqmuMy0tk49M/PefpO4Xd/fadM5OMb3enyTwiJaW8JoxzaWYVuSx5HkEShIrRWTMP9tUg59q4MxUgIacm+8XixCDBUmNlCJ2y4Yhc5uGmx39neP7pxsHt1js6xbtRmVHRFE9KvisHAZEBcI4bbtc1lzUaDrmqEwWFCZVqEOpsGEKLXWONE0xuSZJUox5mm8y3sSfiuqKzADP87CmSPwL/ZBWqzXKPLGV6uQf5lE1bTDOI5C+h8WhncNXPpnReL6/vrGy8tUwiv5YCAH/UAuA4XC4dNZtL4PbNMYWrnlWE0cxURQVN0BNDKwYVcZjR7kwDEGkJUOfMpT/KR5WUREYVMV9zS0MYoGTm6AlHC+9codb3/2Aw+MT0lFOdqfT4+OPH/Nbv/ENlIQf++rnWVuPUKIw0FGewwldxP06h5SmsP/VEovEGIe0EimLkTVfGIQojJRCpQg3JJtrt7h+dYtvfOMD1tci3os9hNjj8BDOhhp1cEjUCFh77/3gyuX1L391Zfa22M8lHW1IjSG3hbreCxVxQ9Fa9vFUAb87W9AUiIJ/B4Exkm63S5YNCwGdTfGUQCjBki+IfTUDJx9lwZP33n7n2r1PnnBycsggM3ieZH0l5MqlLV65e42v/tjLrK6Dc2cI5xAjsx9rcnSeIYTC8wKkAm2yYrTSeUXUMmGxqLi0oFOEJJQerQurLH3lJa5dauL5sLEmQbcJlIfyPHKGtBox2XITYR2BVxia5ClIJEp4BCIgtvYYySYOznL5uJ8MrvX7fQZJSm4MUay4fu0Sz9+5yQvPX0WKHpCT55peL+f8fMjjJyc8frzP4eE5xii0MQShIAgLYWwjbtBoRMRxk+VWk1YjQClJpjVplpAkGWmW0e8lDIYpw8GQblcyGMAwcSTZgCTdxaUp0sxHrTQAACAASURBVGhskiK+9hqvyW6NffDTZ8g5eM8t87vfefILHz68x87BOcMkRWcZSgik5+GHPmEU0wh9olgRhh4N4bESNH5q9fp1bl9b4WIQ/P1b4vgX5zfHio14eqOdyzGomvMXJV1OxQIy8zOuJiTJVafuuVJX/+w+cxb5mPD2dWY8zOoWqlvX0nnLGoGlm3dIrKJFKRVFokLLUFnYzK+ng8GAPM8ZDAYzHL+S/uSjFEmkhjzP8QOPdDT612q1WF5expeqQADGRcMfjgbwKfIwpztTk/FEa4umqJhsYLmv883I2rW/9St/zf/lv/5f5J8VABXH3/hP/kv58Scf+1maBWfn536WZ5PKOGoU42JZmhIpf1IFitHNOHJHLTy+rEUISRw1wHVK3coiC9BSx+BK0BkL4LoZuL+KRqjiNOHSavR/fvHzL/zMwcEe9uE+7fMUnVnOzs5553sf4YTl5PSYN954mdt3LrOyGmPdEGsLsZenBFJJ0IWtbmGs4WOtLnIGKDhgxyikwtmCh1cZF7Z8fvInXqa1FCJlEQGcZTscn2acdgWN/WMerK1x+6N9Bl+4OmMKMMwt7YElyy0WiaccylNETUWj6SFkDhgcupjfdQolwKLRGrJ0QJamGFM4PEhReGrHnmTTdwX8P/qOHnaTa/f2Dtg7OOGs25/Afq1Gk7svXOUrX/oc21sBJjsDz6JUgDF2VASMxixlgEMyTAYozxUDBgiwAiEypJAgLcppPOljbU6antEII+7evUyuE5RMkcrhspRMC5TyCf0mwhpwGVoXOQwCh1Ienh/i+02afrY5vgcyFVxLkh5pnpLpQsbUaPhsbGzwE3/iS7z88kVWViToPklmyHJodzN+97ff4/8TdmSGIghCn0YjYHWtwebWGhe2VlhbbRHHlwk8x8baCnEzKEKfBgMGSUKStBkOhxwdDnjypMPR0QmdbpuT04x+Yjnr54i9Q6S1eAJUHNP8kZvvPqeGr9ZUxjnAOyyJ3/mtt7yvf7jD/UcH9HpnDIYp2thJUKbnewQjpbRFIoXEk0UE9vrGx1y+vMXn7tz9hR/73B3uuoc1LnRFwdFzjn3XOurhtjJbTExECKJcv7UWDF/3EEhX4DueAH/ReO9cBDKzDUPZZlhUuBmW0ZHKCYEqF8MS9VCnQZrh7hc0KXPGQzWmQkJUFwKuNK3k3Lwws1L0V/EFl76nfr+P1oX3RmFbXqzg/iiGXChJmmq01gVtZ0chQZ7P8vIyURSh0+yPxAZZ5zcwLgCCIGCYDEd+IzntTjccdPsNkeZxFMcBf8QdAf/QCoA7169v9vu9jW999GGz0+kw7KfYERQ2Tn4a359CiKnHxE18d4QUhbBMCqI4Kll6ihojQDcbI1o1z+vK3Y+sFgLNKZFLsZpCzDw0N5v+z7z5+ducHO0z7A4gP6aXSgaDnMPDI76jNaenHQ6Pjrn+wUVefuU5bty4QKPl43sKY4vgDIFFyMI8xpo+4JDCL7RXlmJ6QAp86eOcQCqDzga0lhp88c1b6Cyl303otHt0O/tkqeXkvMejnVN29nboZLdoBPkUVWPoJ4U5kUMipUN5kjhURLECktGFMqMrZEaGHYo8NeR5Qp5l6FyP0gKLbiDwYnzvaYcxsIaPPtzlk4e7nPe75Fg8IWnGHpcurnD3xee4fnUJXyVYoQv6x0ncyKtbKoVxEmtGD64McTKbLGpi1PJZNNgMh2Y41MRxE+VptO0gpQKRY51GSYUKFVo7hCxSDDv9lDTVJLnFWFlMbHg+MowJmi3UlNtb7hzaWXJjyEcxqEEQsrQUsrnRYvtii9bSEG0dzvoov8WwJxgmCTt7j4ljRavV4uL2Jhe2V9ncanHp8jpbm6sEQUAY+vjSoLzCC8OxjDEp2jp0Dlnic3qa8847H7G7u8+Dh8c8erzP3v4xp+eS80GOPDzH8z3CIGD58sVXL10VxK46zu6Rif7Ot9/f/aVvfrLLB5884vj4lH7icOKpiEsKgUhznMsmgimn8xFvKjg6OeXBo321v3dGNjhHffU1XtD7c5x2IgTfzpvcf++Ik+N7W6d5ihQWD4WykkjGr0fxElFL4IUSb22VqBGyFHtcVeLRVdG9HleOyVUJ10rUg6ugDmemgZ41tVBTCFQ6MzKvZygnL5bdBqmiZqrcDxeEB81s/lBt5Tz1WUUFPzHjPFn8fvan/uN/p/e//S9/e7whaq2LfxoJ+4RQhT5Gp2SmEPjlo4CzVqvFUqNA2LTWRcFQmgKrc4P+QR7To4DTLoS+7xNE0aQASIYp3U4n2Hv0KL567VpraXkpAvqfFQBV8H+Wtl69c+c/+ta7b6+kaUpi0iIBcKRcNrjCLnJ0leVYXO5mKQBjCl40Xoof0BvF1y60LZ8yOakc8alI4yondbkKyF+Iamezkojw7voqZ194idOTPtZY3PEpuRbkmWJv/4zBMOHg6Iibt7Z5+GiHy5fXuXXrGnduX2NlpUEYCTxpcDYly1JwCUpK5MgGUTiHdRasxrmiQBJK4fsOYzs04gZvvH6bJ4/3efjwjMNmm55NGAyh3T7n/m6Xt48zLl4uPr8GholmMOyj0wzpRhy+koS+Igo9nNMUScwWMIWhB+CcIk0teVq4Aub5VEUtFKq5gpr6mjppwM7eI3YPT+j0+uApsBCGilfu3uTzr92g0bDkeYfAk5g8xQmLVAKkQ1uDxQdi0kTQG+akWYqvHL4XEgYhvu+hhCksl4UkDAO0LtwXlW8QQhc0C4b/n703jdEsS/P6fme567tERO5ZVZm1ZFVXVe/dM+3uZsyYMTAYCyRLFhjxBSEhyxICyYuQGYO3sZFA+IONbVm2BVhYyLIlLNnW2IJxD4axobt6eu+ufcs9MzKWd7nbWf3h3IiMiIyobjBuajTzfsrlzTfyvffcc57n//wXawwiCJTMUyCIsMRo6YeEyIQwmgZlGl0W6Pnk8fcRpBhkH+h9wIUMSMhHnmWUtaAsAj4skLIHmeagWVZx/dk5X/3qDUzvuHb9Za5cnTKfZlSVRuceZzoynbyThPSJCBjT6EXkcSyYM4hw6cKM69e+yMOHDf/gH77H1tbrVJVCfnCP7R3FXg/59g6T+YTLr3+PNy5/hS9k7amHyE5Qf+zDD94TH95+yM7uHp2ToMaY6whRjOsv+COzXo/QChEixkdEa1guG5wxZDJy8ZnLPPcM5Ee65E7A31mUfPfr3+CN93bY3V/Qdi1aB7SEXCTiqswyskJT1TlllVNXOdM840I9uX71xVd45ZmKV/1e4mU8kUTICYVAPN4cHzbSJ/TyZxYB8RSSIE9K+06LjT5tzniMPMkZRMTTEMr4JJkznvJ/FaegF6dJBcVppkGnoQDp133f/9X1ep1igO0BAjAeNlqPh6nAGHNouhVjoCxLptPpYRzw4fr5MXLL0yYp/38UAAceAPA4hvhArrhUguAjzhvarpWrdn1uNp1e1GW5Aez8dgFwyssYu3V/tZgD5513hzrPuq4piiJVgFJySOw/ysIc+8yDm6C14vLi9ecOn/RjHfxp+tqTPIHTJIAn2bwfYQRyyL49hdl8AsnTwD/z4g1Mr0AoXvve6yi9z6PdNVJnNGvLYvmApm24ffsR589vcO2Ze/zg6Xe4cP4KN567yrVnNtnYlJR1ASFB/smIAiQOId0oGYzkeYExA1FFpBAMvmFr6xKf/uSneOP1O9y6WbHcN7gA+8uWDx4+ZG9/H/vUlskgWGDd9mWzbrDGIINHCyiUSvKyLD8k9Bx2/3HsCgkMw8BgDG3jsOYgwWskzNXTcR6fru2PtgfevrXD3mLJICBXCiUcFy9s8OlPv8BTT03IcoMzBsEkXVbZj5wDeXjw3761zQ9/+CF3793nwcOHKAWTuuLyhctcvXyZy1c3uHSxZmOjROeKEFvQDhE9PpgRUYloKUFkKAXeWZzt6LqeYRiw1hClIwaF0oqizJhMi2MPVG8DgwsMLuKjJo5KhLxQSOVQyiSmfEzqiYBDqIFnLuWUX7zOZDonz3UyNdIea1ZgHFWmRtdIgXMWlWUoFM5B9GHcqBw+GqRuqSvNc8/WbGx+ggu/UaBVwBqLGR6wszDsLuHBg0fcurDF2x/s84kXcybi+MHihcju7Ru29wcWqxWt9SmZDctsqpjURYqxDh5nPYMBMwSsBSl1SvEMAWsGhBDs7e3zo9ff4cVnn+VTL/8BXl3/kIMS8mvNhF//tf+bb//oQxb7+yyXHdY7vO/H80ghZYVWoDRUVbJoLnNNnudszDd4enuXnasX2P/Kp/mKWKHPygAZv+MS+IA5+87T2kgmJaUqmamSIssenXfvXchJ+thSnNUxH3z+gW1tGP9MjX/tO0SMQAFCPdHhn8YAFB/p43u8gImCU10FhTg1se/UmOSfxOFRiDNtivu+p2kahmEYcwBSIxKiQOrs0BTIWnvoEqgzzXw+p67rFI4WwpFi4Z/u66RV8TFEQAp0npHnOfTJw8YGj1dy02Xqd0itvw6899sFwInXf/nn/qPs5vvv6yEKubdYZMbaUdonmVQ1ZV5gup6gII6ZJ16evm6lTDPGpCyVp8+tjpJpBKczjcUpY4KTbOHTxmGclg9+8qE5TjgqgZ/71HMY58jrnO987x2U3GZvsaDvDTLLuHunZXfXsLOzz/aDR7z5+pxz52/y+tUtnn56xrPPXObZ5y5w6cqEqtAURY6SgRBT6qCIKVjIu568kAy+QypNnkvs0HDu/ISrT29S/KjGy13KbEJrLYvFPtsPHxA/uUWEf8nB3+q7HudDQhMI5FpR5Dp5AGQqpRxGB8KPh5xDoCAkK9C2TdW+dxIfHYXSRKEoqvowCrj3lu3dBR/eu8+qaciLEmcMG7Xi5Zee48Ubl9HZgHVrpHTE2KfuUkaMG5CixHrBm2/c5ld+5R/y9a+/zoPtfbq+p+87CJH5bMIzV6/w7HNXef75y1y9sslnPnmDy1dnzM8VENZoBZmOOGcARfBJQihiUjZ0XUc/jEVHjCm0SUqKXFPXGn1YE4qEnBg3MpwHpEx6/tk0Y1JnON+hRE8QFoFOvIlgIAQuXc6Icf14yXvIMzGCLDZd8xDJtMLZHh8jSmZIrRFh9ItQ4KMlLxStWTLfqPjyl56mbVaslj2rZceqXdJaz6P9hg/v7/PsrXe5+eKXeJXVsTVvIix2exarlqEfRrmqY+tcxY3nL3H1yiaZzrBDT9c1rNctXTvQdkOyXB4C0oG3OTEm867Fcs1b795kZzGQoJPIe+de+R9+8Pf+9z/y7R++y8OHu+wtx2pRpLGSjGkkZz2Jm+EEq84ihEOEljzTzKZ77O/tsrduCETqn/scXwyLJyVsCHoiv+EnfPiD+9zbe5NHnWXdBWIQ5FlOUWgmOl6YSsVsMmN6+TIXr064Ppn/g6v25lez8dMckYDg3sarPxic/7T1Hu8smdBordBarRXiNdUtfnDe3v6TOZALgTrVq/8Ud74zD+cTY8sn+BSnoBKnSZ+FOP3nn/VnJ7kH4x5oTYvpB4y1GOPwAfxoHS1EcuYkJrtgF1xywtSaWT2h0Bl93x/O14dhQP4Ynd9PYwxwtPs/PhaQiXuiNV6DtQM2BAZrZ8a5uXV2/l/9O79c/Gv/8Z8ffrsAOPK6/vS188vV6tx3v/fd6XK5pG97BJArzbSsyIQkHvg/i8cgQDx6iI/s/wN9tDjL8veYrpkzkrhOSR07OU87yhYWpzgMHpMliSeZskd/HyMV8Ls/9yIXL17k0mzGa99/kw/v3KPpelarljYW9IPHbFv2dnapqj0m90reeTtnc6PkmacucvXKBlef2eTll57j6WcucOH8hLxQ5FlABAfCIlTEenfQbxC9QErH5lbGZDpD6UQstK4jikDfd6zbNcETheJ/DoBftdjBjoRLyHLIC43WFVpFCD0oR4wGCCgiIhYYb2mHnuWqp+0SqSdqCBqqKqeuSpTK0lw+wO3bd9jZ20fqAm89eYxszis+8YmnuHChIoo2wfDSEZ1BKk2IEilKoi+5c2ufv/2rr/G3f/Xr7D1s6SzETGF8SRYFy5XgjeYuP3r7FlrB5Uvn+PxnP8UnXrnAS5+8yuc/f5WtCoK3ZIXEDT1SlcQASihsjKyalr4fCM5BUAiZUA2dSTYLhRhXqxew6jq6IW2EISo0gTyLTOvkoKhlxNOjpBvPuFRQFIWmGxbITI9rU+KDgKCQaHyMxGhQShDc6FVOj1DJTdkRUQREEEghCc4iRINWgboMfOVLN7h/d5+bt/fZ3lkR24z9tefhzoIPFy13OsvLtUjl9Lh2DbBslzRtl4pUH0FKtrY2eOXVl/ndv+tTzOtI1y4ZTEOzalmvWtreslh7bt/v+da3P+DO7V2iL/AhdX4Dns72aSeKgtvbyz/yg3dus/OoZbkfCRhUnhQeMgZEzJLFtFCYMZNdEIhSEFVk8JZhP9L128QY+WFdcf5myyeegak43un2Ar7WTnjnG9/izbuPuLe9R7PuaPqAC2nfyZRCCigyTZlXTOdzLl/d4IVL17/60icvUWjFwg+0i4HV9oq95d/9dBsDg3H0Q48IUFYVsyybEvIvV9PyK7MLM7G5KdmcFFwoNrjhbzIHlDgjuOewgTitCDgtfvgMDf+xmT5n5KGIJ8mAZ+WlnEJAXO8+ZGhXLNYNDkmQGdYZ5lWF1hIfFffuPWDdNkhS47YxnVHmBdEHlEiHanAePboA/pM68E9DFGL4qE5wbDLTfJMYHr9HkGS3RVFR5BW7q12mecVgLYtmXXTL9WThwnzr3LkK+O0C4OirNcP05Rde/NOvfe87W23XYpxFISh0RiYV+OSDL0Yi4Fly3sMbpNT43tMywTlDv3ryhv+4ZKCTM7rTVAWndP4nYbYjxiQF8KWnNzj3e3/uwXMvPHP5+z98k3c+uMP9RwvWqyV7y5amM/gI65WlXSfYd3cXHjzYI88FFy/O+P7193nxxlWevnaJn/niK1y+WCJDT1FIYkyEOVCIaBNJDUdWZExmGVmukDKpbZzzKabXGUSgQKXmyzYtxiZXLyEEOlMUZZ58vWVECIvA4YVFkoiCIkqIOV3X0bY9ZnDHpp1FnjEpM9R4vb7XZXz48D7LZTPaCWdkOnL1yjmuXN6krgWZdiADIRokDoIkigk+CLq14+037/Cdb73O3l6HsRKBxAXIignKR4JzeBcQusJaxYMHPb/2a9/gB2/WfHn7ebbOfZWLn3oKETqidaOxkcPHBOM6Z+jagX6wWOMQ6MPuoBqZ74zyRxcjjelZtwO9SchJ8qvQ5IWkyBWCAaQjMiCCQMgCTSQ6ixQ5QhQ4r9LP8eC8RFPgI+kaSNBaooRFSo0xAzJTKVAqBtAZ0To8FiltSkjMNefPTXnxxjO89fZtbt7aZrVu8VHzaL/h9r197j8yrr8OtUCMUHXcEef+Wtvf+ePLZiWMTdBtkUem04pnrl/kxvMXuHIJYpilZGcfcC4wOMVqrXjrvQXLdc/2owWrpUMpgVZZIu9GgweCiNx78JD9/Ya2bxFConOBoOH8hYK6ytFS4F3A+mbMko9YF+hNYDCSEPPEI+gED3eWzO7ts/3h29x89gt80u8dOzC/7ia8843f4Ifv3+H9W/d4uNvQtGI8/C1RpDWTZQUKhVKRui65eWfGe+cf8vr7G8hSsVh2rFdr1ut2RLs8nsSVcc4ikGQ6R0lVF0VGVWXMZjXnz8+5tlFz6fJTXH3hPK+cv/KrLzRv/x75BEufsxuKs9CD04h9Z/n4n0QMzpIp8lGNUYQ/8Ge+2Pz9r31rGDq89wzG4UMEoRFapeAclwK3wjiynE6mlHlxzCPgJPT+sX1FicSn9SEUHoHpDeumzW7du3vus5/59Pmirj7WyYD/VAqAYeg37i2XmyHGC9YlCZsSyfv/ICnqgEF8sgI87VXkxZEC+BQynjjFVvQjSwpOKSROMSuJ8Yy53Ql27xNVyPGK/cY0u/z0517kpecv8vrbt8N773zAe3d3eLS7kruLJe16zWLdshoczgeWrWDVOUQc2F81PNpbc/P2DteuX2S1WvM7f/7LPHN5gnF7SBWQhFEdIJFYojBonTOZaMpKIZVA+JH05zxD73jdSD6TBYyHxi0xzuNGl788V5SlppqWqCwhDZF0+AsCMYzeBdHTti2r9RJvDEJoYhRgI3U1oS6KQfoBC+w8Goo7d+9hnCFKhRQCpTRXr1zmytWLZDlEBsAS4jBuUJroHSKWrNeOt97+kA8+3KZrIzq1lAk9DQYtJFEGHAIfHJlKM3MC7O3tMXRXyLVGCE+IlugsyIhSReI2CJ1IPm1Ls+owxh4SlsS4GZQ6HWaAtYjYNp3o+yEbjEWIiFIpJyHP5uQFRAwimHSPlCf6AY/HhYzIJnsPPE0f2d/taFY9MUjcENjf38eEBq0lWxsT5psFFy/NyPKMza2SsvC40CNMj84KfHQI6fGuJ9hILmuevXaOZ56a8sPXCx7GBiEEXdfzcHuHR492uu1nnvv3npXLvzAOsIVR5R9um0YY63A2jqxuTVVmTCrFxoYkUx1BdQiRPCsKFEUQVNMJDxYWqSCMnhVaq0Mlg1YSB84h4u72UnTdoIchpBwHb3jq6U0+8eJlnnlqg7oUGNPRdOketG2g7RzLxtK2LiEHuxpCpGksi9WanWGgsR7k42duQeTOd+/xwd1H3Lp1n7sPFiyNQvhIlim8Hz1GVAFRY40nKMGeW7O7v2Sxt8PduwVyVLoMxjBYCSHgMCBTbkUISf4mItjBoKUmzzVlqZlUBW9MKjbmH3DuO1t8+vpzv+dnvvwFfjZ7N04ft/PyGGx/anYAT5IHjxL7TvUsODkaPcH6P0aUhDMMUZ5oy3d39ul7g7OJ/+O9R6ksweQ+7QfDMBAJKKHZ2NigqsrDvf6nHfX7T2I8UBfl4fcz3mGswRM2q7L4iiqyb/IxNgT6qRcA/9mf+2V18+ZN0Rur9hb7mTGWQKDMysMCwHt/rBr8ca+yrp+Ew56IAT7LtvPk4v6obPB4BnfghEb4ZEjQWbDdkc8sI7w03+DZn5lz6/ozf/POsvujN996h4e7Cz58uMfdBw/ZXTWsV2uWTcfaBMgrFo2hHToWq5ZVO+C8oK432PiFl5lNUtWtpEcEECFR5XwYIGRoLQghVfspVlkRYzgM8GiBu06zdKlyT3A7ZJmkKBTTiUJLh4g9AXuYKx9HIpT3KRa07wZctAiRIaIkCsl0UlGoLOx7frZWwzf39/Zpmg4pBAGB95HppODK1TnnNmtENIQ4IDDp4JTJ5z14Q4yC/eXA2+/cpWktSuY4H5FScOXSOZ66comJztjd3+PR/i6rRcMwHuDWDWitmM2m5LnCuh6NI8tlyiWPdjQ1Urig6bqGrm8x5kDfLBPJWmmX1dXXMMufB8JuL/5K2/Z/erluM2NGGZyCsiwosjopOeKQbIqDIQaIMTk8Bqu5c6/h7/69H/LW2w949GjFcr/D2kQqiyESpUcIqErNZJJx4cKcF25c4KWXn+VTrz7F5iQFI4XYIzGEGAjRp/+x7Ll4oWRzs2Y6LcizSDdEQpT0fcdqtRKhnn+VfqkOHgIb/HQIAWv8oUNnnikmdcbGvEIJg48NiA45hjCBQkmN8RIztHhvyHTEHKgqiMy2Nqh0hiOLd+O5P9OuHv6lwTokChcNufKc25zzlS9/hi998XkunNfAmn7oaDvDcmFYtZ69teHNN7b53rfe561mydAqgld4Hxicx4R4JC1U8Hac8XD1Ng+399neG1j2AiEDAo+UDdMijCqjAu88Tqd/58OAUorBRNplixIkaZvIEYAXPQh/OAqSCKJ3BDw6EygEQ5/cMVe5Riioior5bJ+HDxbcfLDN7X/2Z8NXr5a/fCPc+yUi+anbxql5A6dsXD/O+OcJlcAp5MKjY9GT5mdHPzCEz+/v7R3K/4wPuMhhfK4xhvV6jbGGXOZM6pq6rtE65WAcNHtHC4CfRuDP/5eXAPI8oaFd2+LhoFGaGdiKsPHf/eW/ov7Yv/Wn/G8XAMCVK1fOL1bL+TvvvL21WC7p2g4xav/LsvzHuvHT6fQMosuJuN+Trl+nJgCe8RDFMwqGMwk8pxFxEls+jFMk+QQqADlC3Li48UdvXJzH9XOXub/Xr99+//b05t3b3N/d58GjPe5s77K7v2KxWLMYAsbBzr4nhH3yrOb+Kw/Y33+OaaVBeggWEfx4KRREhZAeqUg2uUHggkdrlQ5WIVFCGAfODJFV4+sDaZ+UiYxWlpKq1gjVE0VPxCKETB3++M2cNzRNR9v14+GVtkQpBdNpzvksDEpE4SOr9d5+FUdo0Me0UU6nEzY3Zsw3NEK1RFqk8EQMRJWcB6MmOM+9ewvu3V8igsT7dO3LKuelF67zB3/xFzg/r7h5Z4cffP/7fP2Hb3Lv9naKW9YSrWXqZOt85DR4gveE6BJqgUqzdWcxdkU/9AzG4l2OkhnWWjbnM621+hsYfgGIMp/9/vW6F13Xp+jTCGokTdaTHCEGJAMiJmmhEoogfCIdyin7e5Zvf/td/uFrb7Nae6J3o7/6GJ+qU4SwVpIiyyjLgu/+4ANeeP59dn/Xp/mF3/UKde5BdqgsKRwEcuxue/KiYGNzTlXnZLmg7SMhRKzzhL6ZWuf+0NE13RtD01uctSmbQiRDp7zIqKsMgYHQIrVFyJhQABGw1mGdHpnhfVI7BJBSkRc5G0VBVRYEmwWXT/5Ss16LVBtIpNSUVc58WnJhc86z17bYnK+RUhBESfAVkRzrc/ZWnovnL3D7vYfkaomVEqkyrIfAQfhMet488MgEdnrDftuxbnsinkJFrjxVsbW5STWReG8w1uKtx3SRVWvZXUR6B90wUBYlgzdImTInpPSUWU9RCIpcozNJEAIRA84zhuTAoDT4Eh8jmdDsL3uaNrJeNuyv1uy2bVj+3Jf+7D//2U8uXln9aOuw0hRnQPDxI4KHtAfupQAAIABJREFUzoT9edIOmLMan5MqgROo5riv+qH7q8vlkhACxtnDjj41FolA27QrIFDXNfP5/LDpCCEcvv9xbfLxPvyPEtHzPKdrWxxgnWPVtnlvhqrrhxznD2aDv10A9NaUL75w48/+xve+O226lsEMKKkoy5Isyw7h/4NRwE/yqg8QgCdm/SefivjkDO0jHbxO8gmPpgzGj87klsftRRsL7927y91HO3RDz6ROntdVXjOrp/cuzydXMw2ZQMhkMOemSpjnLpT5+Qsv8ur6BR7uLXjjnQ+4e+8+d7eX3Huwy+17D7i9vY3MClYry3pl2Nk2rJc98WKOzAMxGEQ8mMsHhEz2wTGIZM/rI8FDVBGtMgqVE2K2vtfX/3pnmr/cdENtjSUKgc4COhOUhaQsQGDT5i9cOpRjOuBjSKqBtukYBoMf0+6IkrrI2Shr5trEXManhgHdrVdYNx4OSlNkkY15yWw2pywFQgwIBkK0CaYP6fMkOcNguXtvj729nnaQ+BF2nc5qXr7xHJ+8ce2v3ahXf/zLF59iMs/40Ye3ua8eQEgM3lwLqkJSaNJ4IfYJspeCgEGiiSIwOIsxbQo2co8jQq3xzGYTnmrv/Y30oIvKRD4rjEsHoA+IKFKxkefUkwKpPNAR45CuoSwgRBIi5nFesFw6lktL0wliTCORTAlstHjjUEoihox951Gi5dHekuVyxca84hMvXeXll6b4sEDIhDCkXFaFsy0+FInMmQm0FEmBECPeGlqXMgWObvSDM/Rtn0ZJhxkdiiLTTGqNkhYpDcEPyaUyBoRQKFmhlKBtW7rGEWJECIUQgSLTaC0ps+z96MTzvXGY9B/BRwciJG3/ZMp0UjApIYR9iMsEz0eQqiAExcZsSowrXJCH512aRU/JhCJPMZGJgQ60jWc9JJWGcZApweWLGS+/9BSf+8wrCN2g9Aof1hgDy324e7/n3Q/2uHVrSR/B0VBPI1WdrkNdFkkpUJfJrrnSaA3OJ0JgZwaa3qefvbI0bc9yYcjzHOcsi9bRm0cYa7IoQCm1kT17/n+8EXf/lceH8onO/1Q//3hGL3OK6+DJhMEzUcof0+zEZAHctu3hYe/H/dsHGAZLNyTkLFeaaT1hWtUw+pacBvcfZAZ8rBEAkVwMi6JIxmQ+0PU9i+VCLxbLLLQmC0T9cSUC/tMoAOYPVquZJ54fnMMTyZQ6dP8zJrHFlUpe0D9JFZiQA3FctifOIsjwpBzoCY/xUyAyOB3+Oubi9aTe1iP4zs09fvi91/num2/xxvsfsmpX1GXJuc0Nrj71FJfPb1w9P7vI/OIFLpzf5MJmSZnJKLvmb883Zr/PC4FUsDmf8KVXP8GD68+xs2i5fXebr/3dX2d3t2UwLdZ7jPGYwZNLnRi10RJjN266ihgScc07Qd95rE2SJ6XSDE5LTZ6VRFVFmefXVv26N9bhYyLtaBUpc0FRCOpSE+mJ9KOePx0wIghiiBjTY4aWvneE+NhBa2M6Y1pXROlcAX+zsfi+77AxEJRESUlZpC5hY7NCjQezlJYYhpEtrRAoQjB0XcPe/i5db4hBJ1c84ZnPai6fm/FCvf7jUwSrGqyNSAFKSEIMDLYly+bUFWTKI+KQzICI+APa77gRDb1huWroun6EfRUER55JNub1wXsVMWICND7QDxYfPZkoUEpTV3mSCyoHsUMoQwwGbyGKApVlWKPY3TXs7TuaLs2hpQRje7wHqTMECuuSMY5UGQhBbxWP9iP3H7Q0S8XQSXQRCL5PYSyxSDJRBUKmWbeU4nDKLKXE+YB3HqV0gqpiWsOds0nKGSNIgYiCLJNMJ5q6EkgxIIUjCeLsqPsHH5IEdLm3whqLt0ndI4GqrNBltRTefi9Ed974Zj70A0JHfKIForOM+SxnWlcQDQKDEhalksul9y1aFPR+RbPax/QdPkSkTAx+pSJaF+QHnu4i4hCY3tN3jsF4olQU2nJ+a8arLz3N7/i5Z7h8JUdn+/S2wRpN18x4592G/+3/eI3l0lC6gfmsYr5RcuFczYULc566XDEpN5lPZswnJbNJSZZHEJZVt2S5WtEMnmYFe3tL3nhzyYcfbrNa96xWcvSW0Gw/2kEqybxCbG793B+6PI9xylmNylka/yN7YfwxzY44JZVQnEa5j6cbEI3vX6/Xab4fI8tmfZgDYIzBrhydNUhgMplQ1/URjlc8nP3/Zjj0T3b/znvKskyF3GAOooH17bffy6q6qq5efSrnY+oI+FMtAP7iv/3nxc0PPiysRO4ukv9/HA97rfVhNXWYtfwTjAJiTI6BjxfvaR26OMXr/4mh2pP/jpMBHvJ48tYx56wTLloj1P/azRW//v98g7//D77FB7fusjIG7wNKLagfLfjR+w/Y2Nhka2PGhXNbXNyaMKtzMhFFocTvy5UQVZGTVZLJbEJZbyD0ZprdI5hXm0jeQwB1WaV8bTdW1d4gVLJlFUKDCKnLiw7jPE3r6DqL8xGlMpxzaKHJshKhijxE/Ymm60oXIYakx9ZakGWCIhdUVYQ4pIS95OOY3iclIYBzAmOGcZY+GhNpQT2pKMoCK2E/ZP/mA+v+Ymsd1qf3BOfRKqOuCyZ1hlIWJYYE/QdDHEcXmgSbD8PAarnAmJTd7UKkzmE+rTl3fuvYIl9vb2OtGWFoCSqRsrJMorUnhH5EG+JY7yUWsw2ewUYWK0vb2tHsJRHaiiJnPq2OQa6dCyzXPS4+5rNIqSgrTV4I1FjMBNGmWb0H75NZivfQdAZjA1Jk+MBYDGcoKYnBI1DkWidraJEkSSIkJ76ujcRYURYTvEhzayFUGsu4iFCpo/OjnZYPjFyRpFBJOuxiTc80FbGRfvAjkpOMXWKMSBWo60ieBUJoiGGdFAgyIgnY8RoFHzCmwxpH9ALnDFWhqOuSrfmGFO3iOyjzuxs7MAxDki3KxBHIcphMJFWZigxoiKIlhIzgIYSIzjPC4Oj6hsH2OO8xLqAySZZnZEVFKeUazxSEd8TYLRxD57QxKVa7LBUb85L5VHH1cs7Fiy1BrAl0iFhjh4wi3+Ltt87hbUM9LXj2uS0uXb7M1aszrlysmU4yZkVOrjOUkAgseR6IDBinCGzigsLZgsU+vPHmgh++8S7f+vZtbt1esLvn6PoOrQsW+/u8d2s7e/ob3+K1X/hZ/jm1P2rin5QUP8FDEie6/pPz/6OOp/GE6dCpyiUeI5/HFALHJYVd12Gdw4WQfu0dgWRW5ULABk8mBVVRUuhsDHuLR54P+ZtHAXACpcjzHJ1lBOswtqNZr/Xucm/rM9evnZtuzOZ8TKOBf6oFwNWLl8+tVuvN73/3O7P9/X26pkcKyWw2I8uy0ddfHrKrj6oATi6IAxjSe8/58+efYKOeTdk4bT4fT2ftPzHG/4iqWzypEPjRfs9vfOub/J+//hp3H+6wO3RY4ZFFhguSbt1RKMf+YsmjquLepGJaF8liVwudyRSZm2WSrEi+03leEUVOPwT2Fw13729jnRnnrQalKnQeyLIUzhNiIucJ5QjegsoRpBld23R0ffLKT9EzEiEzsqykUHkRhfji/nI1dcYmy2UpUCqQZZI8lxR5skDxoUNqlXS8shjfm9G1A13f4twB+ypQ5ILZtKSYFADrtZfmQecWrfVXgkgZAQSBkIq6zpnMNEIaAh0x9kgdUgRyyIij8VDftyzXDd6PnAYCOs+YzSfMJwXZwT7ooLUdbd+jhcYHi5Tp+0yqEq18SpSUA9YmL3IhIAZLCAIzeNZrg3UREdJ2bJ3l3NacslDHnF1bZ1ivW8xgUkBRFIQIZaWYTCNEg1QGJQwx+HEj1YdjhdVqRd/1BMIYOpQxKTLObV1gOisJwbFYLWiaNYv1GiWz9EyMoEWWKYxxyMwhdWLURwJCJnJm8n6IGJMIe0KM5FsBmZI+SvE6UfwMIkofBetFgqx9SMUcSqKUoK4iReETokGapQs8IXqEyhEUDP0aYxqM7QjBobNEQM1zRV2XxTm980uA6Kyl63usc6lIiQ4poSojeWmJokfqjkiDD3KUTWZY5/BO0DUdXdfhvB7XqUpEs8kEBbsIMSViduz8nb57+KLprHY2JUUWhaOqNJNphVIeFxqEWiNilzIIRM6lrfN88fMb3LixyfUbT3PpXMZkIshUj8p6lFyPShsBBAQDQiTZapklo7MYFFJUbM1rrlw5z4svb3Lu4hbffO0DXn99m4cPO7rB0YrAYvsh79ypufDaLZ75Hc9tvxR2Lh5XAJxi6XuUsHeWsuksXXU8pVg4Tfp8VCFwpADZ398fCcSBPC/HolJhQ8AHT5EXnNucszHfSIoQd5zwd0D+/qhm75QT+B/p38R4Zjb0qe85agN8wGXwPhFhGVHTg/OqLEv8YLBOJJ+LvNiabMy+Uk3qbwIf/pYvAAZnpzeefe7PvPadb22u12usacmLOm2QR27kwUX/SarAg5CJM3X8J+dkH1UEHEpmftwiiU8Gdjz2zn4I4ZIRcO/eDt/43lvcur/L3npNVIJMV1jvUEFQ6AqcRSDoekM3WB7uRLQQZCKmoBelUAqU1uhMI1UipVkX6fqBVdPhvEVlOs3oczh/UVBUDql7gjQoGQmhxziPVpEgAtYEls0CZ5P1bfCgpaQoKrK8RghprPdl27aVGQa8Sxu/Vkl7nmlNpgNgUlBcjOPZl9j50afDxRmTHPvGKFmVZ9RVQV1laWjgXdXbhEgQDtz1Unc+qQV1KVCyT/CvsKMbRxj5UMlatBssw2CSu1gMj7vtImc+q5IN7Mi+bEziJNiQpGoxBvIcNqYZmTRAC2JAqjFV0QeEKPEhdeVtk2bcMaZHR2vJZFpQFtlhFxWArjM0XXe4qcWYwpuqCjLtEfSjsqE/jE6OcUx29J6ua+iHNQiPJHE3Ll28yM9+7gt89nPPYkLkrbfe4Vvf+z7t+z0xqnSdlUhEwzqk8QJJjpkcIvUYkuRxNmCGZFhjj+SVKalBF04o/SPgs0RRBBFpuhSCZO1jb/dMp5+lVTz8PlEYIgGkQwRPCDnWCfp+zTCYQ2dPJRVFnlOVKksK6kg3uNE/PikvlEhFZ1GkIkPKDi9WINp00EZPiDmBjGFIELrziU3uCUzyjKquqespF8Le9fFRFlFnG0PTCTsYgvUIKclyQV5JilqhtAHZEMUaRI93PZmQFLOCz3/mGirLKSpH8AsybYi+TcVpTIdBPFBBiIgLQ0IoQwrHUkrjfZN8FMo5166f4/dNX2RazZF8H8E97ty3GGfYXTZs39/h5rkHvN1cmz9bYnJi/hiwPOjgT5Monz2rP5UTdVQueAwl4Gy19AlvlQML4AP7b+/jiDJFtMwPoX+l1CF8nnDSj+/r6Dl00hL4oFhnHF1orZN51zD60io1R4hzQsjN/+Lf/QvZn/wPf8n+li4A2q6dL5v1Be/9JessTghmI/nvH3f2I5SirKuzLa45Df46OSI4Uf0ei8Q8w8znpH728QMTiYLbbXzzgw/vvnz//jbDYMllneanFrYqTa4E0RmsVPTGjCl/6bMMEKXCBo1rbZrfSw94PH3SMysIwad4YJHjyShKw3wjY7q5RVb1BL0E+kQCc46oImhPcOmwXC56jgYITaqcjfmM+aTubQxvRsJLpu1w1uC9Q4SA1pE8U2Q6R+vUMUcM4QDqHmWAMVQMvaXrR3tgABGQMqOqaqaTmgrqwdtzSoSpcRE5+oQjInkO83mkmkSiaBHx4MCMY8MR8cEQoqRtBrrW4rxND6NMP6socspMHd7XO7769rILX+iGdE2liIQYybRkczNHyBZigxQG5Bj3G1XKNQiadWNpuybFD4/rVRCZTieUZQH0owwysu4cbTcQ3OMNRGrBdJqR5QFin94vfLIalimh0MWA85Z+2KHruzRiEaBl0ty/8srz/Ms3KlDwd2af4N33b5LrnGFIBk8iQj2RZEUghhVCdGlsIhxROByBIAzGOZrG0HcG5x7zM5CSyWQihXf/F4I/CpG97Kn/tV1/+w92fY+xjiAgk4E8U+S6IteJBR+DIYgBEQ+4AIEYp1hr2VsMdF2yT/VR4VEoVTCdanJ86pfXjr63GOuSCkDJlKBYFExqiGJNpEPQJ6WJ8ATpCKFkMDpJM0UYc0UEeZ5RlQVVrcnw47MrSyvFdW96vDMpRluqRIisIJ8GKDqM2EOJ/WTtLARC7tN3S2bT6Yjo9ERlCT4ZkUmpkoeD70CkhFKVycSHEWmE5q1FysRPkLkliJ6MlsuXn+bnf/4y63VD1/T0wx0e7WpaF9lZrLi/u8ett/aK2587/+YLce/l47D9UYfT07r004KGxCmd/yk0AvFRsuhjpyQIWO4v6Pv+MAcghJTR4YmUec50OmUymUAQBJd8AD72Xj8n5IkHzrMni4KUSZMisAcpcN6xbtZF3/WTTjaVJH4so4F/agXA1/7m37rw3R/9YOutN96YL5ZLaY1FRSjq6nD+f/Si/qTFgBAiLSpOg8LOaOJPuvSdlqd9TD5zlrf2KSqAyGUAM8RP7O3vsW5azOASYQy4cH7Gqy9fZXOWsW722N3fYd0GrItIlebmg4kMg8cMydBmJM+n6xICAnE4hz2AowSBulJcvFBz5XJJVfcEv4dUPc4PIAJK5YTgMMbQdT3dekgwHBJEoKoKzm/O2NyaRy3sLRf9q0RHcI4YfCJWZSERAGuFVoYYO6Q0KZgmQhijgEMI9L1j6F2iQorUxUoBdV1QFxkFbJybyP+gu2eldfbwYFUIMp2KgCyzxLiC0IFKcHk6RgQhalyQtJ2nadsUgjSmIuIDucLWUn4IPAsx64L4wn7bY3w89nBnhWA+0wjWBNESokkEwwgSNV53RdemGW2IDsnjtLuN+Zy6KMENB3BoWDfGt32fDdaNvMBUaGR5lYhhckDEgRiTKYoQAkRK8LPOs25WOG/ShoMkUynsZnNWktVp2ek6T2z7cROXMnWXk0lGWVl82CNTPcgBGRMRM+LTGhgsxgz0vUmJT0eeu9lkoq51N//bg0VuI5/v12v6rkmhUyKFE6lMUE8LMh3TdxEmoQCYsQBI18fZyGLPYN3BcycJXpBnBXU2QTHggfWywVlDcAGCJCsVVZVT5BPywiNpcWEANaRngHEeLdI6cy6gVUgywSAoCsV8piknGj2iLBDpgsdGgwuWEANSBbI8UpRQTUjdf2yIDESf7C2U1mQ5KG3H9EiV8iGEHiWiOSHkIAZUZomk4kpohfcGrTVZLjGmJYqA0obgHIL0nc9tvcTP/86n2dm5w92HS5arlrYLLJuOnd19Hmzf5H648PILghNmQDwpfz7W9J+IEhanIQNnEAgjZ6QBnuioBPCL/8a/uPrv//qveJ/yP4ZhwMeUjyBQh/7+UkqsdUQfUVrzm+F11JjuoABIfxGPKGJSEaCUQkrJ0A8sVst8+9adym21k0tXrxQfRyLgT+0ONG2jP//JT//73/iNb86aZo3pB6TUh/KJf1zShxDisQ/ACVbqk/nYHH9o4hlEwKMEmSeKCcGBkv+xs+CBDfFjZGBwlnYYMNYglEdJhdaB565v8Yu/52d44fmKxe597j96m7bv2F9C20nWjWS1CjTdwHrVMgwJ4oeAsx5rAtaBcxofIjHkKLVmOim4dv0cP/uFp7n+TE6ZrcmzluBXuGBSSIyQOJvjXcb+zkDbNIjx4BDRU5QZm5sTzm1V+Wyy/oP7CyWCdwnyDgElBXkGVSmYTCJSNogRMn98ST2R/JA1Pwx2nAkLhJBkWaSuVUq5I1SOFKKRJGox+ddrkCqis4AQPTE0af4rhlFeFkfRRYUfC4C2aZOvt0hzboGi1nVUQv4nEP5TEKycpWv6w4MuEIjCkxeCogyp0BADgT5t7lEQQ44XFuc8bWNpmoEYIiE85qskDksOLl2Bh/mFf2Gxuvu/tN2QpThmDTKgtCTLNDqPyQaYHh9T9G6IlhAzYlA4C6uVwRpPDAURgVSKsqjY2KiRdAlRWxn6viX4iBphyKbpmc0m1FVAqiaNNGI/uvOlZSo5cHwc6Lr+OJwJVJOJ1EcKZBe5ZrylH8zjjUN78lxS1QKpkzujYuz8gyGqkA7/EGn7ZAhF8CNxMo2a6smEQmV4lN/Wl/6btr33J5y1Oo1NJHkGdZGTZzWZNgSfijxJTMr+OOCjI+IY+og1ASVT6mUEylxR5ZpJrlInPz7HnQsMocMGR4gepQNZFikLmJQCLRwqRrKDlEafrIeROS4IbMgp1RY2aKzXQAWhTlp2WqTtUFmPzjzRW4gD0Xd4YVDaIGQgBIOMERk9ea5pzPtcuHiN559/juvv7rFulhhb0JrAcrVif73m/mqg3xCUpx3UcDqn6ViDw5NI5jFO0ymqp6Oj0bNc0xMX6/c3TXKUPBgDHHbNiEOCt3NpxKWiRAlwH3ME4KAxTbwmeWxcnYiwknCwnwiSJb2SDMNA0zRqe7G3efW5a+eyqpgDu79lC4D1ej27d//+1uDcxcEM+OCpNmbHuv+jrP+f1AzoOALAk6x8TqlahXiSBXt8jn/K6P9otSyPE3DiiaxvAYMxrLse4xKcHKIjEtncLHjxxQkvvFhSqBnOv0zXWwaT09uMttE8fAQPtvdo1nus13u0vWPoA83a0/cGMzi8N1hn0DpSlpe4fGnKZz77Al/5yvNcuSxRYQdv9sYN042QeerKhMh4+GBN2/bJ7CZKNFCVGZvzgulMKQ30ZsA5i/dunP8r8txTloLpRAAtIXaoaEYSYUzdfiwJztM0HcYYvEu6fTFG7NZaUWh1OP9LRUOSDh5wAAQJ7QixI9CgSaOGOM7/U8HocUFinWK1GnAm6e2RpIjevNDPFvE/Z8wnXLWGddsSvBtvZyrkprMpRZHm8oiBEHokKpHyhESEiHWOddPRtD3IJKMDKLKMWT1Ba/0/IeIfIgqsKv7watWo1AUFMhFRMlJVknKSOmZiMlAS0YxZDQUiWmRUmN6zWnWEqMYRbyqe8lxSljmCjgismwZjBtK5nTYp7yLnzp1DSJu+S+xQsRvRxwwRc0DhBlguutHRcCwKYmRST0ZfDXu45gfTs+7TfTxY6EJG6jrxNLRK90iKnigO7tNYCAZBs+7p+2QUle65Q8rIZFKkEBhybD7/vU3X0/VJJZMKgEheKCbTDCV6JGtcSLLJpEqRoxTUJUmrCYixOJAyxUkXWlNoOaZOphqtCZLeeYz3BCCXhlxnlJmgLkD6Dik6JENi82cR7waEyuldyf5S0zfQ94Jbt+/hfEF0U4yxrJr7GLtHWXomM8W1p5/muWcvsrHh8W4brfaQwhBCGtfg2/QUhA6hFa9+8iJvv1tz517Ozk7A2MC6G1gsGxa31rRPFADihHTvtE0ynsJzEk9yAE6mBB5DNk8pLI76RAzDn1qvU3pl0/UYYw///mDmPwxJwqulQmv5m8Lo50CNdoC0aq0Pv0+MMQUFHeEGJM6WwmOSuVqebZaT+stFVX4T+OC3bAHwzrvv6tVypbe3t2U/GIRUzDY2njj8/1HDIKSUj42AOIWlylEyyxmuVscenDNkNk9A/jxJpDkomGOk7axoOoMDohTgNUUJs01NNvFM5nfR+j4iwjRKQrDEWBKpeJWSrr/EarlJ115L7mF9pO8tXTtgbDLMcb4jxF2uXbvApYsTNrcUk+oRhTZIv5+iZUUAKfDRpU2HjK73bO+8Q9c2Kaku5JSVYmNaUGQiTkqNBNp2EMaaw0xvpSR5LihLQT1VIAcQZuQAjHMyPCH2WJtsP5vWHHEBhI1JTakzMiWPP2QhjDWaxHuLswHvHYEOhAFh8GE4JBqmX/vxHNcMg0MhEs/igEQqkONAGkEMy9bJ5bolKRoDUgaUFmxuTcmyOLLYzeNYY+KYX+DxLjB0KQlQyIRCHDia1dUEhdwmigBI7+yfGPo13rnDzrqsJGVVMZ3lKB3xoUcJB6JPUqjIkVFDZOgMSqqk8UeSl4rpPCk8AsSH+dP/ddN88K86a0SIA4GMGBxb52Zsbm6lz/IDUvXE2I1SzYSwhCgYekvTGIJPh/KB+dbm5py6LgjY0TlX0NqOru+P1dRKSSYTRVlbhF4R4orw/5L3ZjGWpud93+/dvuUsVdX79Mz0rJwhZ0TO0KRIOYRE04oQwUqQ+EY3RhwguQgCAQ4SBAoQx0huDCWAHBhZAAsJkiDOciH7xgYsQAmdRbJlLZS4iBQ9FGflTO/dVWf7tnd5cvF+53RtTUqmaA+oAhrTU1116pw63/c+2//5/VkDEVHDCHepdxsNfdfnwK6yLMw4oS4NZVVCZ0zr04tBGULMtEyVsp1xXSmmE9Cyzh3U1CJxyCI7sYiqiD7RNoGhj4SQEDFYlXICYByV3ZnK9of19Xvrw+ZK62M5xEiSnJw5Y6hsxcQJJq1wqUGxJOUh/7i+N2HRzPjyV9/ht7+05MH9xGY90GyEEFRmKMSOIa4pnDCZFDx1vePjryg+9alneP65KaqE6Dss2QHZakMfNmMhtOHipctcunTA3t5d6vqQ6GuaLrJctRwt7vB+8aPp4nBLRtMpszt3TuuZzgifOBXkOdkBOO6RcvqMO60BOCM0VGw2G5bLJSGEjPsdxrEfoEzWAXRdh9VQ1dMd5wX14U8Atvfw9s82KTj++W3w3+oAolK5M4DMBS6KsP9Lf/0X3b/3137e/6lLAP7+//C/z3/3q783+4O3vj0/PDwkDD57048zoOPqyj+uGFBrjXNuFFOdVuqfuqhPV/PnWmiqsxe/qFM3wWP0ANsQqKAdBpq2RVD4kNAC9aRgbx8K12PdQ2K4i7WSKXHG5PZvMmiKTBMrLdbUpGiQ5IjREZPD2gKtBcGD3iOlJdbeyy1yPCkGLHkPWSQT+mI0SNKkWHN0NHDv/oLlaoH3eYY6m0zZn8+YTabiYvh1hfmJ3neq63uGEIiiKMzoA1CpkQLYoKUbRVlprCRLEjBEoWkDMfi8367AGKGsK5ytKExoEzMXAAAgAElEQVSGY6msjss29zG3b0MIhBhzMEhqLERCPvyNjOE8INKhrAcjhEzIyX4BSRh8YNUM/O5d9OVLB38uzi79z4cPf+sjq9VmnOelUZCVmE1cVnPLBi0dSQ15myElRDRCIIRA2/W0rUeljGeXmJhOa+q6jhLiPwL+XRS6a1v6EAkhjvN/RVWazO2fWKxJJN+gTG7PI0KKEUmRFA1dK3Sd7Kr6lDzGTplMaybWIsoQovlXmk27Q65qlRANFy9Ome85jPaktMbaTDZEJVRyOTmK0O/2+rcdLXDWMplUFIU+cdu0PovzkpgsvpPcDq0nhrJUGOMRn4WaQgTxaMkEvBgj63VD30digKSyatpazcRYnDW/ZpT/vA+Bzoede15KmbVQlkJRJrRqs1ZAOiT0WZhHHoHFIdA2ka4L+CGvTRqtcdpSmoLamvE1piFqE9q2DW0fysEnksoCPmcszloqF3CqwzAgqc+vVSxGlwxBEwbNt9/r+dLv3uXOvY44QPCGlIqsek/5OjTaU1QN775znze/3XHz1oJ/7V99jZefv4SzK5xuSGGz86KQFIisqQrYP5hzcDChqo5YLzX9AJtu4CjAQzUJDy+/9GsX77/xEyDmzJqePM7lj8egzx8zOpBzhFRnAGqPkoW+6ek2PWGAoQ3ExLgaDEbnLtowDISiQLRBlGYIXT67P+QjgON6odOxKcVtR0yjxwQgjwlMRgKv12XXtJPWFqUR3IdNCPjPJQF45qnrTw7+E7/0j7/029PVZkPX9Fy4cgkVQNtHLfc/zvqfjGtnTjvqcgKyOudaVt/lRlBnL+4z7S05mR2fJv6dd6MoiALd0NEOAynmFRhJCmuE6aRkUgnKDxjVoGhJOlctSjuctsRgAEPhMu3MqISyBmdVDogqz+0FT1KeQIsa/eGD77HWkaJBSQQGtGT2eBJLjHO+/dYhN2+t6YcWk3Xh7E8nXLpwwPWnn+VgZl8X5Gi9Xs+7vneDD0gq0LrHGoVzBXUtOcDoDeKXWGtAOcRDCkIXhc7nLYAYNCZGyrrGFiVmfkChzRrJoBld5Dm30VkAqLTJ7oPRYHWJJJdXAFWb1fICRlQeD6gNqmyoZzW37zWIycr8rtvw67/5O9y/u9QHBxd+3dYTvv3um6yPVkgc0EaIsaUyiSsX5+OsfJmrZRUR0cQ0YJSgTWDoOw7vr1HRInECSWFMYD6fMN+bqMvd3f91eziGMLBZr/AhorRDkbDa5PFKadCxo7A9IRyB7dCi0VKN1a+iaQLrdU8M2W5ZyAKkvUnJxDkEpbrQPu+Dp+sGrCmJQWHswIWLU/b3EsgaTQNxjVJZNa8kJyXWaTabwGazHqt/PSbTUFU186pGs8yzXYFVk2FLuY7TaJUFjbNJwWwyw/dHTEyCuEGNFrrGFKiYSCGxXi6Q6LOeQetRoOmop3NubN74vAIa39A2DZ33+afoAnSkngrz/ZQ5EKnJYwY8BksMeWykpWS12dB3nuAhRUE7kzcIXEGtDSQN6FmMsmy6fjKMa6MpaIwWjDVYU6J1Rwyb3Dga30+RhBKw0TFsFMuHcP+B5/5DS/Ka0lQYY2j6DkyFFo0fPGFIbESQtOQrX7vD00++z9VL17lycIkQN8CQ7+0YUWJRaaCynuefucSX6pKqsCglhCBs+siyF9pQBnF7z6CmETbHArmcA/45rYGSk8LmM+Cfx84QOLtKfbKzeuu99/Frj2+gbSCgCCF3e7SKI7lRGPrEphmoK9Clyzqbsfu75b5sV2f/SDj49N1jxVnvtpOfSeq8x3/0mIP31JMSYzPOumnXTPUU51weOVkzItAVOimsdpkI6Bx937NYLt3d9z6owsVmcu2JJ8p80PwpSwB++ytfiYtmPY0pXh76IdeJrqAqSkL6/jwSrDGU1p2chcn3uBRO43xPzM++CxnwNCRDzrbZBPWrCfnprm3o254YhBTzOlMUBWqGMZau11RlgYQG6zLNLYTs5me0RevsRpdN747duDqOPzbz1I3SKBuzHa+xOJVxtkPIB7pKEe3miC/QXOTeYeLNN9/m/oMlq1VuAU/rivnenOsXD3jmqct6BnJ/Hf9h2/s/37Td5WEIZIWLQo0AGGN9FgDKBuhIkgPMtv3eD4Heh10VqNFYayhdQVGW0Whzm8gc2NNa11ar7ASYMqRm8MJq3TN4jRJD8B3aboihJwnYYECtMXLIE5cq9mcFijXTekLTbGi7jtt3H/DBd/5JViGXBh8HhjhQFHZEHyXqyjKfOZzuMHhC7HJVZiYYY7MpUAwMfcpzTck4Za0S1iimk4qqKrSSR7z0Ngz0XQdajxAfjTWaaa2ZFAotAykOWBOQFMgGTZlTEJKwWHWZ0BgiqCyac9ZQWY2z6h+ZGH/cp8im6UhRZaohhrK0HOxVlFVCS65ikZBHDDFf1ylB9JGmSazXPT4G0BVGoLA2UxqLMr/fCEEp+i5kpHGIuy7ddGKYzyqcAZ2yH4TSISvmJaGjgmjwQ8T7bhQ0WtC521VVJXuTyXi3KfqwYdNskFEAmIWGmroyO4MmSQFFGI2GFDpZdHKkAL7pGLqB4LeUQoNxDusKCmPG16NUgKeGdYPvB8IwihKNwlmDdRprIkrCrtWrZBxLRpCg6TeKzULoe0jJUhQTgk+E4AGNs9NMbRx1LEkCRwvFbLbhg1u3uH3rErPCUjuDM4z3S8IqhShNCC1VMWc2LXBuPJ4l0Xae5bKl2fQuJCug7ZkAvzv/1Mm5/2mxn5JTY8zvEuxFnV8wnRY9twO+D4RB8jWZhTKokdpJzO9BJDIMHuccpVHZL2Crpj+1Z/9hoAFun8tpYJG1Fm0ApUfny2MrgSNvw3eBpmns/fVi78Zzz16YTCZzPmREQP2D/gH/+O/+g72+6ybf/NrX54ejVaRxeWdyO1/5fj6yp3j5mFmSOvu/x2dmO99rxQnzIDlHC3Ca+nc8RzjuYIX8NAoYFCnki0GrEqU1PgpHizUPjwThKYbhMjIcENclqRVMVDgRrHiMNDjV5ja7alHkvyu1ROlDknpIlCPa/j56BOV07ZIwrImpAdugXSAgNJ0ipSu07UW+9uU1779/yOHDFZvNlCgV+/MpT1y6wLULl3hx31Gjep9ELZuubfuBwQe8qEzeUwZrK4wJCB1BOhIDMeW/B8ldiaaL9P2a3gdi2hoJWWxhqSfFYRPS/9nWB/8xcHevsH3hLJh8QCQ0Xa84XEZWa8lwFz9gpQMJKCLWBgrVU/gFzxw4Pvr0JVzc0CyXGFVSFjNS1BSFzVAf8RnbW0zRZoJPDm0Kykozqw3RD5BAK4XBQBTCEFHJkqKlaz3tZhQzjiJAraGelExqgx7HSUnBqg30nd9hTrcrRPOZYjYDSR0x5mQieyeYvMGAJgbP4eGSwQ8j3EfGYOiYuBlPpHs/rpWi95H1cgN6mzSBYJjvTagrjcSwS8aQHPgRhSSLD4rN2tO23eicyG5Wu7+/T1E8qgvy7Hag74ackABaCVXlKG2FsxEtHZI8EmI+zMUiySCpwA8G3wt+yAmOSPYgKGtLMXNkJYXQNJ4Y0igAzJ3BurSUtqJwaje6yMsi6pHrpGSuf+jWhGEgjA1WYy22KNDTSXDwHipXGn2MhM2G0A2kEFESsTbhCks1qTAqj3YkJVQi76zH/EeSYd0oVqvE4DPYx/sMLcqjyAqtBGu2qnfQyqCUJsaexWHH4cMGJRMUBQqXx3Ljz1EpEoaeqjDMpwVphE2hFV0/0DQNm80mJuVv8Wh586z26fScX513JKrzNwZOawbOfK86Nf7M5+dqtcrW312XZ/s8Qrwfb5/HGOnbbrclsNvIGSv/00LwD0MCsP2z7VBsNxm2K4Eqs7h3icz28zF4oiSqorhwMJ/9WDmpDz50Gocf9A9oNhv76dde/x8Xzco164bg484IYmv88/18OOd2NsK7i12ps/P5E4CMsZ3/OOHfqaD+yF/geIJwfDFATmQFFkVROerSUToFydMPG0JoeOvd7/B/ffGrfPNbnuXqeUL4CMa8jKin8f4SKe7j+wLfSj7tgh9bqZEUYlaup0dwisIUY3WSV8GszQdLTJZNZxniAUO4QjNc5evfWPD1b36Fd9895MHDRIiW2aTiyoU9rl8+4PqLL7BvAUWdkAtNs9nzQ54Ti4pY53FlgStrrAYVx8pIBJUyw58oEA19k9t9fgiEpEkarLVUVUldlw1a3dVF2W/cwd/YL8vldOIIKeYVKSJREutVoGkVVs3QwWDEkXlIWSAYwpKpWXJlsuanPv8if+bjV5i4DaXtUaqH1JNSg9YDRocM3JFIjB4fepL0XLrgONgz6BSRmMDn/yrRGfcbHRIMbZNo2y5bv45VqDGKg/mMSWHGdz5bzbZtj49+G3N26uFJVVIVkmfLMeSAFnJwIRhS1PhB6No1wzDsEmQtWSw2ne1hxgO+CwNDyATGpBJowRWR/b2S0pLXz2JAQg6cEoFkUJREX7BZD3SdJ3i1EzM5a5iXlkKb3fUdUKybZqTs5crbFYnCOZytKccEQMUhH4LZwweJChULfG9YHiqGfjzYRTBWU5eOapaZDQnFsPYEH/J7IJrCGeraUtiK0mh0jKjxsUkqy/mDIgbN0Ef80OCHgRjzvWucwZYF9WSy1Kh13vEUQgyEfhjhVqBUGrHElqoqMDo/I4KQEjnwRw3JIcnSbGDTBLSAIXszGG25du0aH335ZV559VVe/ujHeOrGM5iiRETwPhK8pu8Sq0UAqQne4AfG8RwkHyAmLJHaKgozxWB3FM3Be1ZNQ9t3gyQ15Df4dPHCiaC8+7fzwGinAvj5/fJTfIDT+GF5NGpYLpcMw0DXdfgRLSk6Q5ASj0TeKaUdKGgYhhMB83TQ/aO6wf7z6gBsxX/e+0f8lVMagW3io63Je1ECSuu5V1xUWh38L3/jvzV/qkYAm7ad37t3bxJTuhJ8QKOYTCY5Q4oRrc33nQDUdX3MbPG4feUjN7czVf25ba1zr4BzHLTO8cM+lgQ4hCuXJly9POfNtxXO9aAjR4uBt966RbvpeXD/kBeevcrzz13nuRdK9mf7oBrmdaK0G2K4RfINGp8vtGRJZEGSqERKNpvDiMa3WR3vSk0chGEoscU+Wl/ApwMW6z3+4J+2fOX3vskb337I+zc3rJaawsLlCyVPXr/CM09c5uWrk7sargJ7UtU/qYZ25AD0aB0onTCrCqb1HBssRjmUqcCkETlr0dGhU0HfQNcI3kPCEXGgHVXtqKpiUumUynb188nNfnVSlXo2m+aRhRk3HLzi8OGG5YNA6mYUvkK1JcooROfdb1JHih9QFJof/fTzHG0+yuwfDrz93op79xqisiQfckUay7wiqECLx+qGqvDszwKF3mBJGBRDHFvNBkyyxKSJIR/8TePzTJhIkoQrK+bzehSZZVezgKJte4YhPKqYyWx+Zyc4DcQGnSJJSV7LxBGDHhMAy2q9ou/DbjZvVBa6lrPZeAUqmm6gH8IOzCPiKRzMZg4ztszVWM2SBAmKaDSSCsKg6TYdQx9HoM54L1lHOZ33Vqv/B/gJRE2P0sW/163e+TeGkLJGQYGzQllayqLE6YiWASNkfcq4ySGiEbF0jWKxghDYIY9RGQM8qRwKT1RCaLcwn2zOUzjNtDY4a7Eq0ypzAqNyApAUkLUuftAMQ8/gPYM3KA3OWcqqoJ5MvCj1EMUFSAd9TAxxIARPih6tEs4oysIyKQp06jECcew4EBWIHrkQJet1ZL30xDA+ByXs7+/x0ksf5XM//jn2Lx5w796SL//ub5Ni5Pbt9wghkaImeEMYHCmUJO0QawkpQ41STGAjTgtGgVEOZ83YhYmElAOi9z6FflhnjvV5Z9lp3omciv2nXAC35j5nNADH1p6Fs8Zqx/UESrFcLCDm4O6PsaWPa7oysCz7t/ixo2GnM6w2u5Hnifn8OIb5F/2xTV6stbvgH0KgKAqUCAaFHEtgtnyQxHZ9eFN0fV83bVfoLASMf2oSgLffebtqhkEdLo4yA989IkJprR9Zrn4fCcDV61d/hne++StnMtXjYpXjfXs5pXbdJQvnjAzOBHm+S0vt0dc/ee3i+hMv3pi9+853iGFg2W0YRHP7bqBr7nHv7opv/tMjbjz9HZ65UXKwX3JwMOdjH7nKxYM6z3yLFqPaPCsc1dfGhdEv3mFMiSSbX5nuCV7wEUKsSfIEi5XjO7c9X/v6W7z3nbu89c6C999b8eBBDVpxcaa5fu0yzz39BB977eM8O3dXt0KG6FN2P0zZSEYrobSKSeGYViUqDagoqGRQqSBpcsXiFURNvxL6RsZZqBshGVBVjkllD66Y+J+AWtV+/VemdVEc1CVlWWSxmlIEL9y/e8it99c0H5tT13sQj7AiJKvQygIhc/t5QGkKfvLz1/mRV5/izXcXfP333+btt25x7+592j6304tiTjWZo6wgqmY+bfnkq3vMa5/n5SFvIVhMdlSMGihIwbFZybiaqBGViGSAy6x0lGbHNIgBWG9a1bW9Dj7Dd6wRnC6weoJVIKHNh25QI7lQQ3Sj1kHx4P5AP+T2u1IKZQyFKyinZcZQKUXTePrBE1PcVUvWGCauotAq9yJE0JI3402yRLF5534QhmFD8Gm8rnKHp6pLprOJ2G7x91H8OAIe9S93m03WcowNe2uEyjmmdYGTiIx+FnqkJ27JhIJjvVas14kQsoeDJq81lmXJxM5Q6iEeMjOiH/A+ezSULlKXmqoyWOUhJJRRo/BdclUuBqKl74S+96zaRO/NeC4Y6soxnbmq0GIRCaLU0CXl+jgoHyMxhfFgV5ROU5e5E6RiFpqOwkGQAkmWlCzrVZ9XW4diHEMI2lievn6dT3/idZ7uvskHT79yt1lvrt65c5d79+4cK8YdVTlHS4WSIt83acAag5FE9BGU342jrMnUby9CSrl97kNAabV3Qs92ut0v5yBQT5xdp1agz2CC5THWw5xlq4mi+8Jf+auL3/jFXwDw3udOntEkBTJWxUmRUd9jIhBjpNs0VMahq+oMDfbDtAWwrex3qN8xyQkhoI91MLZjju1KINrQdR2HR0d2cbgo4qYr0PpDhT/8gT6ZL/7tv3Px9772lQtf/f2v1svlEh8GJpPJzvnPObeb+f0zvwBrce/82q+c1bGcYvufUuqfuJoliznO35HlfMet04nGDsaRb64X9yazB3/mNW7eOSL4hHlouL9c5xnxRrNeDSyOFjx48IBv/aFlNndcvjDhG7//Ppcv7VNXhtlcMZto5nNFXVmq0lJPcnJg1ISq2sPoYuQOZKEVRrFaGe7cUbzzwT1u3Xuf9z444v2bS44OW46OZogPXJwXPHn1Is898yTPvfASn7ixP1bI+fX4IUNlRrtutBiMgtJa5qVDyxEq9aOeKH+fJuVZtheGlSf0CRVzxaxEU5WaaWGpa2t1npTUAKVV3zp4+sbLs7090u2HqKTRktisWt5+8zaLT1/hSj0FKdFpIA7kYCaGpITCCUruMXU9Lz4558YVw2devcHDowMWy4bl0tP7mqK8wMH+FYrCEvwC2HDlquH6ZY0l4Nse5bKlcEwKI5aQHDFY1qshMxNkbFcKlFUBVg9O6/dAbgDhcKj+q/W6+Y+atp9ufXOMTpRlSVVOMCohvkHb0UREGwgWiQZra4IXDheL8b541B1zhWM2myEjObDftHRbOI9WSEiUhaMopjhtUDFBjBijR+iMyUIsHEMvLBbNri0vSbBWU5QF80ntrsW7//X2/hlIs6AEH/xIPEsUVlFaw6xyGPFoH7PgET3GFjWmCorVItE2kSEMJFXmWyYlCjdhUk6IrHloLvzfzfrOTw5D7v4opSisUJea+cRQqIiKCUmM3hcGFRSCJcWCZhPZNELbCnG8RQtnqAvDtFDzi/3d11HqzsPZ9a+1D/qPdiHNhxiJotEqYk0eOUxKhYoBpUbc9taiVgwSC1JQLNcD63WX8dnjBLV0BbPZHlem1fpS51Dtly/XdS1VVStjLWHoQMAZg9ZF3tjQOWAYZVApodHEJEQCYeghhbw6q4Uh5mI/CShlKkQbcBX05wCA5Pyz6rRnwGlWyu7sO09TcAwMdPzfxq/vmvYXFovFbj6+FWGmYxUxkiv/NAZHLXktcLPZ7Ah72zb6tur/MICCts9pG9SdcxluFiPee6zRJ+zrj3sDGGPoNh2LxZF951t/6CazWf3sMzeKPzUJwHKznrz+6sf/y9/8vd+p26bNQJRJPfKg/Y6o9P185Mc4J9Crc1T8j3MMPHdl5jGbIac5ASduFjm2bCJ86rlr9H/uz1IYx5e+9g0M91g3LY3PrmhtK7StAZ2oq547055vvwlVeY+y0KMXulBXMKkVdamY7ymqwuJsjbUXqSfX6Loe39/Fhx7vDYtl4MFR5P7DjsPFmtWmYbF0JJkRuo6L8wlPX73Ei8/f4OVnn+L1119mfsoXYehz1ZZSXk3TorL/esz70iI1MRZjGZK57Eo7JE7woaBrhdAL2WxQY7TCmYLKWSbWnfidXlDDy9efuMqTT1zh5vt3WC273EILibffeZ/v3LzB9UuOwrlM2iJkJ0ClSKlnGDoqJyBLUlhj0cz2DJf2hCgubxvKHiE6tB4oTMyvC42yAYlrUuoxSaNUgcRcnaNyYA7e0LZN5uaPan+DwhnHZFqjJP5tUP8pQCyq19ZNq4Yh+6IrrTFaU1rDpLQ4ldDRgxaMsplKiCZGl3fNveXwYUPw27lpnknX1ZSqLNA0RBRDNzAMHh/yzFypnADMKocTgw5hd6hLVKANKWgSDj/AZpO3DLQ2qJHyuDebMamN0bAVNdDGSBMjg4/jAQfaKOpaM6ssZmyVqyQoLFGnzMdPGhHDcjWwbjw+CImIokKrbAg1cQUx2dAn9ZNN7EmEnWCysIG60MxKkzdbQhor6UyyzN0Zh6SCrhEWK6HtttcaOGOpnKPOYu0ErHtdHnZxWDWDzPsoBBFKDUobKmOpncpag/EE0EYjUZHEEIOmG4ShGeh6D5SoFIkqUZQFVTkZbLv4uxX+Z+Lstf9P0h/8VIyhhIyNtiOKOw6eMDjq+tHaWAod2mh0yveZVXYUpMpu+9gYS1GVGGO8rfZeYzHiLNU5+/yPU+0fZwAoHjMWPe/c5GwH4Ng3DUNu50dysNzeI2kUlqI1BLI4cAyiKiViiLRtS1VVFEVxYg18G1Q/DB/Hq/otCngrWtQqnbu5sE0AfNfSNK1d9e3+8y+/dGHvYH/OhwgJ/ANNANq2u3Dz7p09QV0JMVK63Opp25aiKEYrxe/9y9/Oh3LHIO7U/8vNmvl8flL9CucH5zPiFznlGbC9SU7v0R4P7urkmuHjgBnj5x3wuVeeYX9acvniAV/5+hu8f/sOh6uWplmzagd6SWhjWTeBTWsozLYtuMY6RWE7ijJSOJXhGipjNK0psfYIbT4AIIQOPwwMQ24X+pBoe0Pb66x4x6ARLu3PufHEZV56/gavvPAcn/2XPsPL5VnVcB/iWPEB4iBF2jZytDA8PGy5NavZn12lLFqsW6P1LLPs45RVO2fTNDRNZBhG33ZjKF1JYRwTY9cQZ9skzQo8c3HCR56+yptvztk0PdEHhiDcvnfE779xk4+8eI0L8xlFWlJYk0VyxiBaSMlnmJIIOhi0gEjA6TyC0KYkpiVaQMW8kx9jP97IBlLCSG4Hh15Q2uCkJCZNio4YDGFY4kNEG7LXtzXUdcXebG4uuvifj1lQGYS/OPRZCKWUytsCVlM6x/68oFANSER7yZRGpVHaoqJDUXF02LBuekLKb0mMgdJWzCYFU1uQBcfCZr2m61pCyjbLziimleVgNkGlmJXoUcbGPKQhYXXBoCq6TrFadoSUmQWi8prqbFIyn5jROCe/N10YxnXBregpB8aJzSuNxIA1ipR0TnzF5bFGKgjRslkNbBqPDwqjHX0QirKkciYErb4Yknyhi8HGFCEFFOSVRBOprGZaWmRoUSZf+9uq26QCL5rkHX030Kyz+FREofUYME3JxBrALNeXn/py15vqcO3phsjgx3YtoMTgdE2ps4kUZGvs6GNW8WOIqcQPirZvcFsnTl2gTUFRlMwPajXpvvIpmEksq8q3a/FDTwz5uhKlsFoxqR1GxoQGiCGixUBUaO1Q4nLCJmOgHtcQC2dx1qGVKcLRO78Mw18+eZ4dP8ZOzfFPw8zUYzalhPMrfc45B48VQUcPD3n48OFoY93uhHJuOiXEIXc60Jgir2uHENAjeTKbhnU7s6Dtdti28v5eReL3PTJQ5z/Ocd3CcRpg9rEodyMAlXIhq0fDL9kmqdZQVCW+axCtqCb1hYML+z82nc9/B3j3hz4B+O/+2l+3b7/5ZtmHoA8Pj3SIIWeDPDJYyN7Z8n29oWVZnup8nYPBlPPmY+dV+3JyDPBY8eApFezpxzuG0rQIrz9zjb359NdeevHG599+602+9e5t3r/9gHsP12z6NUPT0JLovc9wCWMIccrgAxtxKJ2p5/n38wiSgRZIm6w2TZ6UfeNIKdvcKmvw0WOUobKOSwdznrx2iZeeveo/9pEX40987lO3X5y75052QPLfrUs5eBnQJhAiLFfwwc1b/OoXV1y/CnuzgbrqmM4se/sz5nsXqcs9Dg89t+63PFh2ND2ISjirsbaksHtY42Z5x0p2B9S8MN946skrP/L0k9dYrdc8PNwgyrFYd3z562/y1NORz3/2arbq9YdUhaGPbdYdkA9UUkSPAQA83g8Y40jDgFEKpzVxGCBpCg0pKUj5EBKlR+MSl1f9Uq78FBVhUHjfj/z5/FE4S11WzCa1KY6Nlvre40MGiGzPUucMVW2YVmo3Y9ZaRpKrkJRGQkEKBZu1JwyBrQBaa01RWupJReU0guKmuviVtvmDT/Y70mCiLKBwJdOywJC3GfS4oaJQ6KjxCaLSDD10fUDJI1xrVVbMJlMm7pFzXkRoQqDzPcsZeksAACAASURBVJIeqZ6thqLQOJsD5s6iWRSiQasCUkHyhmbt6dqIiCOSRw1l4Shn+2nT+b6z0rd9qJq2xQ/ZPtmqgDNQWk1pwImgYwY8iahxjKBACvygaTaRpk0EnwlsWzZIYQucsSgxSkSrFKUeel+0vWfw2QdAj8hgpwxOKXSS3e2gZNvmzx2AflD4oTs5mnEFk0lNPUmuluE1iFEl92MqhiqEQExxNJ5iFBsqlHiSD1iVnTizuyekaEgqg8BSDPiQdho95wzTSUFZit4f3vy3xhnFyeLlcdokecwGwJm9/uPfM4r8jo9Rz+MOAEdHRyOxchwBIGhtdrC279JXzSLHUVS3pQIen6V/GDQBx5+DOjXzTylloa1WZ7QDW3vtUUA4V8ZcMNYc/E+/8Dftv/NX/8PwQ50APHH5yuXFYnH169/4WrVYLPBDYDbP5j9/kusd0+n0HCEep4x+5PyE9rx0UD1uJHDW8OcYSGh0vlD2fMtNeP7C7PPPXXyRH33lOd744CZvvPE+d+/e4da9Qx4cLliuNjR9z2bo6fuBpu3o+sQQNGlcQ9RK0KJBIinmTFsV2/AjbCevefoqGBHmk4qinHBx7wLPP3ONT3z0KV7+2PPqlSeu/Mqzc/czZxcb8vN3RaIqNa60FIWjLYTlpufNdx5yuHjI/lxRFInCJuoJFMWCsjykKm/Rd5pbd3ruPVgRnJD6lrq4yF5dsTefpRL1bZAXEcz2d/m0Sa+++tEX5M23v6Pu3LtPs+nY9J6jVeRbbz3kN79kuXpwjdee/wjITbp0hDEJCT1Wmby2JwqIOVCPa3qSQMXc0dZKY/R0XGvU40E17suniGidSXWSiYuIQqsS38Gq2eDDiCYmUxvresJsNhv75fld6KJnudmMoKb8eesyOGc2VSjvc/WnQWmFiM77B8ERh4LDxYIQc/tUa4uknsJa9maOeWl+Q+BzfQifXPuB4Ldrhiab69QTJrXFiEdCHi2IzkFMUWSktC5oOpUTzWOcAuss0/mUqSuBAUanhaaJtN2QmfiSUMpgMMzKMrfMx8+jFBqNBIPSBToV+E7RdwPe5+eS26YeyeYxxf1N9xfWbvaV5b17n713/yHrTZPd+UzCGU1pa6rCYESy6F0edQSJoxFQcKzWAzEkQsiVmDUW6wpcWVIaC14O5g9u/tRR9eTNzWazN/RZQKmUGscFmbrpAB0FAmBUHm8pOxI0S7pe0Q8dohJaO5IaqZjVhL3ZHCsbUGLaZjNLwdMPwyigzZArZRXTSmei4hDQVo3ujPk9iqIRUxKDJYYOkbh7zUVhKAvNdCIZD3Sc13+iUFHfBfJzfvV7Vvf0CGp1xhX1xNflr7l9+3bGd4cwchFydR9SOpNmaDmtr84jBGvtrpjbJgDfj0vsD+pjyzbYsgCS5FGAMmM+dmobwBhDjJGmaUs/+MnQDYWEOCqYf4gTgCGGS889fePnfuvLv7vXdg1aaaqqGrsAgoqPxBXyPdow3+1jNwLgtHnFY2b9p+dhcA4fWx51C05jhc9/7MTlp/4CD97/4k4JhZyrPdwrDZ954QYff+4Gd+4v/o9b94/+0s0PbtK2G1ZNx73FmrsPDnlwtGSxamiHgZhiduULkRhzlp1SgaDH6mukUamEMS4T9wpHXRdc2Nvj+tWrvPjsk7z44iu8/JErvLDndCH86yfdv+TEjT6fFetLs3p26WCfB/uHrJojxBhW3rK8EyjuFDgLxjQjRS1i7QJnFgQPmyaxHizt4Cl1xXw24cL+lMsHe1Io3gH14vGDSilRz+zPv/nS00+/cuf+Orse3npA0Jaj5Zqvfm3JvHwDF36El599lkpNCeEBpfWQ+kyQU7mtHlJHihFjDIM3lLYmBSFGwdmSGHPgtVYBLRafOfzjASpxlFgnQyLPmJuNkFQ+kI3RaGUpipLJZDLWg/kX14ZA1/X5ABuLNC2ZAlgXFkLExFzxyY6AppFUEj00R2u0SrvKHBRVUTAvNJfSzc8pLQxxYOM9YeQZapXb45OqZFLqHJRDHJ/SIxqhRAOuoB1HDMcxIEVZMLOGiXa7yyEzDSLtps07+iKoGDGqpNAVhdb5QE+SfRVEEcM4942a2EWiH1AxV3JWa2xh6dqGN771Bv2wKVxVfPb2rTvc/uAWi8USoxJagTUOZxyVcZhxdKMExKpcgYfcVo9Bs1kHhiEiESIKbTIEyFQV1pUDAQEzjSm+HNZN0XU9w+DR2mB1jzOGvdpSEDLBEDN2R0ZvQVWAlHQdtE1+rUrlNrUrHJNJxbQosDggsRlWrPsWCWHUyBis0sxKqAowMmATmKB3dYagSOJIqsJ7g98yPyShcHnDo87GRkbOw/ie19WUcwinp8adx9f5zvs6OdZFOFM85ce/e+s2BkXvw47tstvw0ufIFE59hBDo+57JZHICGrSFCH1YdADbyn6rBfDe77QAKiowGj2OWo53CoZhYLVa2c3h0sVVW5ST6kOzCfADeSK/9J/9F2YYhksPFof7IBeTwHx/L0MhxlaRVZok6dw2zx/nTc8JAJyhYCl1jtBFOAPN4LuIAxWPcf87PQIQYf3wpZNCQ3W2tSaPxhC1Vjx3df8vPXd1n+HVZxm80PUDN+885P7Rkjt376d7D++nTbdSfUpm3TR0vWcICR8EHyCF3J6UJMQ0YI2irGpm04pLF6ZcmldcfeIJnn/mKS7v73/1qb3i9TLf+Jlyc+z5PMpc83N/oShmN1/8CA8erlisOrohcudwQxs2uTKxjmaIGUTUQlRmbP0qSAFUno2VxYS90rG3t8/T1y7xzJNX5UB3P3nGyATFdSuvfOozr7NYLDlcNIQ+cPtwSTvMuftgxW/+zh38ZuDmqy/xqdevcDC7hMRDKtuj6ZDQoq3P4rrU4sUgaYIPNUblS30IBVoXeBGC79ExUJUaicNYZW7Z7wqVNEkKhj6DbBhZ/UgmDM7nE6rS7V5FBNphxOYmP17Hue1dTw1OecRH9NhdkFz+QTIgJUOfHdMUNlfMo6nNpK64WOyRdA4UfYx0jR8rxNwjNtoxrQ1Wg04ZqKMVRDQklQNM0iStWW8GYsyPr5TCaUXpCvZcQRH6X8Xy06icpMTOk0SRQuYJaJUrZmtKLAaizutyZtSLxHHsEMdq2rdYE3DG0qcEybM8WvKHf/htbt2+jTaKrutYHi0ZvEcjeeRlHM7MKLSCcZ1SaTKciWzCImiCV8Suw0pAkkaS2lEAXT3Buer+evLsP5k9uPl5n+KV1GfPge2uurbgtGZeWUz0YCV3eFJO65JAUpqoKpo2kYaESkIcsc1KG/b295i4EqMMQmAzNKy7hhADkrL2xmhLZRxWB1Tq86ghZY0KGkRs1tCoCW2n8R4kCiIGozW1ddS2pHYuX8viT6r7T/BPjo1DRU6NM9WpI+rY16vTI1M5VVyd0k+NH/fv38eN7PsQQt5oUJBiQuvHi7y2Ocx2dJALm0eGOx+W4H9a4LdNAHJ1L7sEYCtS3f5ujDGgFH3bs16v7O3336+eePL65ODiQQmsf2gTABGp33v3vbofBnW0XBYpJYqioPfDbgSgrd21t06K8f94b/psNjs/fp/5f3V+70uO+WSfvrhPD65OqGtPdAcK+vZvnbUYPs0iOE9OKxQIhVPMbMHlF66T1BN08WW5e+/+3wom/Nud72ZN62l9wMeAT4oQCmIwqGizqtZGlIo4V1JPHHtTy9TZ//f6rPrCyEl8/WSipM5uNxx7wVrBZ158gtX6E7RDIkbB1A9YHTravscHT9AZdymiULocUToGawtSXBF9yJX/wQWeffpJnn3+Oa4eFO9B/8K5HRngY1O496nPsmo9fZdou3fYdJFmU3I7LPmt4Ll/1PPuB1d49sYBLzy3z9ULB9Q2YuIC3bVYF8j93BJbXuRo0WBNgdaOdpOISnO4WOLbhzxzwWL3xsPOBFApk/O2FDgMfQt9l9GwWnLlV5SO+aykdmZ3PQRgvc7t5ZTGRNcoprVjbguMyiuSSkBZIZKQ5MaKsyQEoR822d9EmZxoGEtVTXAHewh5OaEbIsPQj5VVFtIWVjGdOZxRpOhxI7QHxg6DZDlgjInVss3AnWiIROrCZVfDasqFavPTu13wcWVvy5zRWiNKoZTGGZ3HUQPjCiBoZNcRMMK4KlhQVZbK9HhRxJBIBprVmqPDRQ6yOusJtMqKeWM1yjpMUWNUNg8SSWi2nROdOQ1a4b0QQg8xgmSMpbEGVzjqutx4W/wBVt0WWPcxXhn6jrZt8yoeEY2inhqmpUWnAHHUKG0ZYpKNuaJ2rDct/ZAQv3VQVJRVyV5dM3EloOlpWQ0N61VOAFRSaK2wusa5OVYnxPeoML51ZgsT1Yg4QnS0rdD3ssMaW5WJn7WpmdgqJ14qnOx6ni1KTtJMTx7QJw/J80r005sE6rFrABweHuKcy5sAY+ctfI9z/PSPHCFHu+/ffu6PGpx/0BsAp+PTdhSQhtwFSDGi9JYMqE50AEI/0Pe9acJw4cKFi5fn89k+8OCHNgG4dvnSheVqefnL3/j9vfV6reK4GxpjpK7rPCf6E8ruJpPJ+WZWx1v63zU5OMf6l1ODqtM2mCe0BvKolyqnZ3CnLTY5mbUfc9M6/pw1MDGo565d/rnTvbdsYbPdtZbdQ2+X8fRxtpvwhbOtwHP0PydagI8SgVrgz7/2FEUJB/tTvvn2TR48XNI0Hb3v6LqemPLutkAWH4ZEih5FnbG/0wu8+PzTfPqV5/nsJz8SLpv+hRMHkDqpvXAIn75Rsvnkn+X+YcdquWb5zrtYZdmoku7WknXb8sHtJdfenvDMH864OJ8xqRwlPbNSmM9LZntT6tkFtLN8cGdK023ofENzuKbvG7wccW0PLhZPcFAHsJlXIKNhTn49WQjYbAJDFwghoVVJkkShYVpoKqPzYbxtmS8XhMGT4rg7rISyLLB2MmoVhOgTVufXnRjFgBQEn/kLqDxrRxRFWTLfm1Ff2M8AFRGaTchJRvQYDRIj1gizYkZhszJ/XN/IJLudk6UleKFbdwQfiWk7X3bZfno2w6qTF4oq3C6ZtVs0MbkEN2RMrpLMtBedK3VSFhiWRnF5b5+XnrmIpPvMV5G+tfhBCAEKVSBbiFJoQBKmUMxqUIXBOYNRmXGwvfJFJaLKfAqFovcJ71PWdYgaqYuWsnRMp9OFl/S+aJIn+TYlGt8T4iiQVDlnmJWKqrSo5HcGXHmt0eQxGxovlk2TVyclAaLRxlEUjqoomOiKIRVspOXuwrPebOi7HlAU1lBWFdXsEmVhSNHvkkylNQTJ2FzJ1Mm26Wi6xOCFpAxOq3EcUjE19Zjo9Gfn+OpUW/+8+/1MMQRn3P3U6c7BeW6C+WPxYz/3d1a//B/8rNaazWaTzaVccSZwfq8tr+0oYLvttRUH/oteBdw+v+Oiv+2KorWWAf+IFbBlGIy/xp0ngBISgnPuYDKtPlfW9W//UI8AolJXblx/8i/+BnKp7Tqmk8lufc85B0lyu2cUi/yzVv8ArihO0qtOoyrPA2Sc1wlQPIZ+pR5zE53zteq09ebpylpOcgTObBmceM76vBtZjwiSR2uJfxz/7/Oe67Gnd3pHWAkTFF/42NNcvXaFj7/W+Ht3Hq4fHh7F5eGDmSdWbTfiP2Og63OQHIYNKfRMpzOeuH6Nj778I/KZ15/fPOf87LwOyMnCQlGL8MyV2fr5j3xi9vU33kXprK0MMdJqR7+0LBY99w9XvH3zIbOJZeYUlYOZywGgmtaUZYFg2QyJrsvWuU0/0HUDk0LxuVf3CKEYV8F0HpuLoJLCak2Iipg0Tedpu54QBNFjS7dwqJRd/ra/zyiC33T4wWdEr04YLRTWoaopJE3UCpUUJmUeSEwCxpJUgQ8m71CznYNq6rJgfz5nPi8x5Hi+6QI+BGIcq+IUqMoyr1lqDTG3UpMeEbMqB2qxNlfMPuJH5K5SWS9S1SVuUp3QM2gRXJUxrUmOuaF5nzclGBkDSWVToqjQIkgKJHqc7fjox66yaTsuzzX37q9ZLVr6Lm9KpKQQZVBaI0ZnUaTVlK7myrRgPlcY+uyJMbIGRTSY/LOiMnQdDJ78eMpgEAqrqQrLZFKYguBFoQZk1XvaIfraqEcq7bpUVIWmcoImoENAKUGSRmmDEkMURQDaxpNCQFIeFZnR2rjxno2GB0lxp/zkFx/c+/pPLRYLuq5Da0VVKeaTioO9OVMHph3QKeZuUshpvKS8dpsE+i6yXg90fQ6Axubd+dI5al2OIFk5W2CcEDGfM848rxg5Tzsg551x509Nu/X6Z4emxSE0fUcYfy8iYLQ6SRo+HliPPc/ja3Yppd22WAz+mBbme2sJTv+7/Ak1B053AE7S/rbyKUGP14VK4+k9dgTS6IcQJM68Yi8pmf1vv/jfmH/z5//9+EOXAPzy3/ylquu6q3cO718NMVwKKRIkMa1qjDGslyustbm1J2m3KvLYZGLcPzbG5L3L8e9bkNCVJ66dCrCn2mGn12G+V7fg+M0kp28YdY448Jzge1xgqI6PF87rosnZ7sPxrzuP8X2eTuHcm/mczYXzvladg/s8dhg4Ba9fKEgXSnlwbf7f+3DjQhT1Klq/7lMq+5SKto+07cB6vQ5d14hSXpwzPH/j2XZ/Uv6964X/y2cOoxPJxu4X09/ri6/fXC0//eZbbzGEQBSFcTmwiReU1vQe7i9qZOEpdENhA+WoHndOY90CZXJLOMXEEALDaMpijeHJqyVx2MMWNSE0GB2Q5DHicMlBFzFaEbXmwaZh3SWGWCEYnInZMndaLVTX/zIz/bMg0yjQHG7wUVyMiUifxwghMtEV94967MxToaHPIk5sovMGVc9oekXTy//P3ZvGWJae932/dznLXWqv6urqbbpnHw7JGZLDZSiKNCPREOQQiZMIYhTbcZAAEWLTlo0YCJTkg2PLCYI4FhQ7cKBAERI5cSTBsQxJgBEIEiVFEiWKpEhRI85wONPTa+13P9u75MN7qrrq3HO7RyIFkCyg0d1V99Y999xz3vd5/s9/QXl7+kEkSUyapqx1NAprCoQbTIaisiZyNsyjoygi7XaJl5dCB29s6HKFQIoIU0mEj6mqKOT1VFmAp6UE50MSXhoTraRnFA0hXCqWuo4zVsyynEQp8sqT58HcR2qNRGGqQCT0LgQPRYmnmt3j6pJl6f1bPL63zptvHjIZHYTnVh5jBV7EaB2jIoVUYTzQTxLWNre4uupIZY7wVQAJKomUMYgIiyAvPbNSkhc1J8bJYPSkJWks6Wq3vH78xntEdPVXDleufSa/d3ytrGwn2NM6pHf0IkVfJ8RaoKiQZYUQPnAnVBQQIRsItllWUBUWZyDSmqooyLIZ93fv88Wbr3G8ssLx6Nb3fvWrrzIajTBlhpWKTipZXYq4uqVI7RRlZyiXB6RESCpr8MqghceXhr07u0xmBXkBQnh0rIjShE43Ycm7VxD5c4tjehtrWuuPxfmgnzaL80dJpurfPdi7T4TFWk9mSmw9PrRFhU5S3Il0tkYs7Ul3U68xAlE7bz7ImqicxXuLjCQOd5qsGGuNlio0HEWQDcpI1XHjgm7aoSiKYC7UibHOn4YRgXsQOuQeEA3DGrG4AT1rBdzGBYjjuLYGfuAWKAQYF0j+MklwsymVMUzzLMrLMprNMiWcl3wLZAJ80wuApaX+1tGtt9Zvfv3N9eF4lBhjiGt5R1ve86NgorafnzxPCEEcx5x3uPANaLtlY5+bnfn5n5+9UZoyudbIYBpkxAU33lzB3XgN3xgveP/wG5E2RrBYDHqwgM3rW97/uYJFIPFyq6P/U/AGYKbjv9c15d8PD4jBpxix7Ae5/a+XU/nfaA9TxD9awv/tUyjDi/lu5cxx7+Z89rNfef0Dv/X5r/D6W3c4ODrEKAJJr0aMrA0YvbMh/bD0mrwIhYJHoWQIjREetBd4V+K0xyGxRrGkwK3FSLEU5vLIOtcgxMx6q5BG4UVEIT1ZVpIVFZUNC1OkIUkUK92u18LdCcuZcKOp/Yde6L/jqlozrySFsQyGU37386+Rz9ZZ6d5ho1+ymnRJkw5JKqhEFxvBnf2C46OCLDPBcMeFbIIkFqSRQuIGo5n42el08pdn0zwKCECEViVJHNHtdFBO4YsKHcVgZ9iyIpI9lOxTii5lQa0vNxhrUVqhI0na0XS7EeqMCZDy0Otp+p0OQshT45YsLzmaTjkYe5aXBJEQgMaWBnEiocxKOjpB20OSdInVq0s8tb3DNN8kzw1lYUOSn0tIOkss9yVOOLwz9DqSWAs6UYmo9kPaICBcdBpvLGuN/mTmyAtPWVETAAWRUqRaE0vX6WAvFLZcFqQr08pleRneN0CMpadiYpWglQdrEPZkBBOkmNaBQAVvhnGGKwzYkNKntWYwGPD1N99glk3o9XqUs4LdvX0ODw+RGrTN6HbWuLgaISpPNTtGuxJTmBD2Y0NQE15TWMtwUjKdZownM7JK4LxDxxFxL6a7ssqKf+W5ecOzNpTxLKGvfXa/cDzaui5xHo2svzcdDbFVSVEZjHVYQCEJIs2T2Ob5L1d/W50QYuu94aRAOAlgraqKNE7QWlHkBZmxxDrYYp/wyXJjcVXFIJsRyYilToqXgkhJclOdJnWe5hGIEPvtGv3Zn+ZLqQdBRs6FGGmkRNWdv1QKLyR5WTKZzeRsOotkUc+ZvhNHAKWpLmysrf3A7uH+5mQyQQl5Kuc4W2GdhVLebgHQfKxSirTbma9iPQ+x/225mGnM0c6hB00tnzifsnW2W+YhIwDRYNOKxuihzXSIBkvf+/OP8w3oz7dZITePdQFLUiySBZ0rpDSC1fp1q64tf+zcyROgvRCbqfp7J8e2BP/loxSZnN6gvvrSnYMPfeHLX47/6I/f4M7uLsPpODjNGYeqXcKqqkLoILAyVYX04YZWQgZ9vxeBIe88DoX3CmNVbceqwFuU1OhOF+0FsnK11CwE7Vgv8S6iUl1KC+UspMfZ2lQpUoKOUqz1O72NXvSjJx/q+pL6O2m3J3rdHnHaIZtahHbc3TvGu6+yd6Do9yydqKSrBTpWdOOYOFmjsDGHE8tbd4YMxxawqEgilaQjyTs++pKk2nFCPzkbTmQxyzAlgckvg8vaai+lMpK4gBiJLRzaC4TwVN7goqCVH5UFzplg2uMNaSTpxJJuIs8UAKGTW+totjb6LPVTxtNJWOwqy/EgZzA0+H6CI0KpFGczhJdoEeONDZbKrkTKASkTYiFY6SroRQif4p3AS4t1gzBPNRnOzYKDY2XQxiB9EVTyJ9e2I+QReEGEJJ+U5LmlKh0OjxYSLTWRSkm0QCM29dGdjx0kl746Hk+TPC9PUcVICBIVoWUPJTS+HotIaXG+5tm4OmLbKSg9yjoiIfEmw6kEU0bcfPMW+/t7YUMyltksw1LirWUtTdla6rDV3WKj5zHFiCAwSMHWMcfOIUUHxQqZlUyLCePCUHqNtwalNJ1eSncjuIvOcZC8nyf1PqKBnwcT20J/GgTpswTD+iUPDw+x1jKeZgHJmGv0FhyAcHVqpJ/rwE8dGgk5C2VZoghjOXREpBTeVsxmU8qypNfrsXlhi8HgCJygE0ccDweISCMiFVB6Ic7bwQjBN2ML1lGErCqonQGVCryVkyVUa41XiiIvGY/Gerx7IGdas76xLr/jCoB/9j/8hB6NR6sHx8cX8iJfL4oiRPXWhg5/mhn/IgRA1h7r3W4XmM7PvGmB7083YPkg/W/Opkq0I+6taEA74t7ebS9AHbxokRu2IRdn7ImFaIQd0VKU0DK+OHPw53gBC5CL1mSw0+9HC4KT9LxWWJxXXJwd0okHHcut3L/6xmuvPv/67T0Oj/aZDTNiLTHO0JEabWu2rbVYHVAlJWVN2CLI0QTgDV46hAx8CQsY64Ozm4M4sXQSRaxc0J07i6xkWJBOmPMuxhJROShNQVU4NAIvPUpp0iSi1+lG0ZmT3AG2H7vMlZ0LHA4OKWZTMueYSsmb93P2DiCNBUnkCQohgxRjhCywfoCxnsFkxsR4cIZO1KWbxKymkddkr0TwRBWrP6+tAWODktM7rBU4W3B0POZOUrBORNf2iQEVJSgf41xKobeYzCyzWUlZVHjn0JEn0ZI0Cn9kA1ZeSiSX1zpsbqwyHA4pC4tzhulsxt29Cc9fXkaVXWJlUMLgygpDFdIahSBSJ/PtAllr6/EafEKgP9S5ICYOyVCiQFkPziEJ5wHUgxAmUc9YvcRBeC+Zoapq3oJSKKXRMgp8CFwX2PBlcWU4mkRlnmNqEnKkwuau0w5agK3C/D8YQwVPCYWkyCryUUkqDb00ZmMpw3mYGEtpLcY5xpMChMeZQBtEwYo0bKwkXFvr8OTVPltJhS5zpHen6Y/eOYRKsFVK3N0gs5p7Y0+VGUAjpSPSEb04YbkfEZ9rLlq6etES7tMcaZ4bAyxoYM4loZ7PCTn7vcPDQGbPsqzmlNSQu3wbJj4iOHC2deAnz42iiGwyBanoLS2BdVRFifQSLWFja53D/QMOi4xsOguIsCnIxiO2di6SVQavJQiBcfaUR3VSAHyjXPSThMCyHhUYY+r8D3G6fymlKIucbDbVb915a+X5d7yz+45nnlviTIj9d0QBkCRp/9btW/FbN292joeDuDKGuNPhRFMc1nnxpyb8nfUMkFIiI10XALOGz7U/XwiIpra1AZe1IvXN+XhjAzvnrb0gHOhkUxZtVYJoZ8YsmtktYvC3/a7WXIQWI5BmgXLKFm9TPIgF6AScJ1c0OwqxmIEszi8mu7l5/v5gyt7RgOFogq9KlIy4srHK2lKPRHvybEKZZ+RVQm48pbHkFVRG1Ha+Yb5LbWdbOouQCqklWkusLUljS68TsdyTxL5CWgt4hNentVXQzmvKSnCcW2alCZ7w4a4nTmoToDMLscLz7NUut66vs3+4BSZn9+CYwlZhs7IRWa7wmUcQjJ2ipEeZQN9/jAAAIABJREFUF6hE4ggRtZGWSJ+wurzEztYGW5duJJf6/i8J4V2E2+vF8oLWIRPClAVFaTjcH/CZz/wur69J1jo5HT0l1p4oSonSPr3+Jr3NCbePDEeHY2ZZgcMS6YRUS1Kt6Sh55vMJf++IGesXL7Ozc4fDg33u743Jq5TRYMKtN77O/o0XudTfgcLSVYZUayhzTmj2Zenr7itC1ilwwQS6Or2/pLBIp+oC7US1oPCyPgwlcM4iardLK8KIp7KCcjKjzCtMpbH1iEhHMTpJJrHzR0jWgL7wfsOMJr0qL3BVUEloLYjjELKjvUc4W3szSBQi+B9YQ0drtpe6rPd63Li4hYor1scl09GEbJozyzNyF2N8ICJKKYjTkqXlHo9vr/Ps9jZPrTk6s9tolxFJgylPLKs9zikKE2F0j3sDw/5xxmimHsyZo4iVNGJDr08UR/3zc/62hqM50lzUiJ+9R307d0AsIi+Fvw+Pj5A6qjMAwrrsatKm9eJhi9bpKMDiQ1z4mYfL+hBsWZDEmlgofFXiKoO3FqUT0jihnI5x2ZjNy9d49v0vcf36dYajEb/6mc9w6/Ytljc3kSoKZNMa1UGeUKkdb88ycfHXidvfyXjMWotyLhA8eSBldAIqa5FJsvH+9770/VESvwYcfEcVAE6wvba2/vyv/tZvrgxHo3Pe6aeb/wn0z9vXcDa5AycnXuu6ADhHmuOMh3VDwjeXFdAg551uVq5BJBSLiXptkP852L7J0G0SDtvggzZLTz8P1fmGdScsINmLFvbjmcq+aQjSNDt61KCs+fy5/AQ/VyM0+QdOwOAo496oYjorKHNDJ4nodgQ3di7xkQ8/RzWD2d4XGc3GTCtFXilGpWc8KyjKkrKqMJWlqBxFJeu5pMB4iLxFF4bVVLDe7XJ9a5kbFzfQ/j5UFU6E7UXgED5sBFZ6ZoVnNKkCGUwEdzOtFL2lPkkvrfe5BwvxjTjn6Xe+i2k+I9KCXifhaDhhlhVUxmFrfwApQMSCynmMUngcxhRIFU7U2vIKF7cvcOPKln32HZd8JziHRtuqvLDU77O81qN3cICdKKyHO3cnZKMRtzqCNDYkUUVHOaIoQscd0s4AL+8wnDlu748YTyuiuBM6/ySmH0kS3USBPD0BV65vsfPaCrdXlxgOMsrScHA05da9Q379s2/y8ZeucqG/SVYapMqhqvC+CiqfJK5Z83Wa5Kl3QejCClMhnUQIj/Ia7zUWjRUhMlyoglgavC2QImitnVN4GVEYRTktKQuLsXVIkNZESUzS73lpKxckM6pXCPG4y/Og264JkpFypFFEP9HIyiG9R3pdH5tEOEgiTVlN6OgVnnv8CnGv5IZYYrA7YHh4m8HwgNFEMcnzkJ4pBCLtEvXXubC2xJObF3jpXdfYig5IigHSVyAt2mlwBi8cTko8fY6njts399g/GDGpRBhVSEenG7OxvM6T8mv9c2uHbyEs+0W8IBaQBh9GBK5/7DhjFMQ5L5Tj42OklBRFEeKapcJ6uUBq6Beu7WeTAB+ENIXQpU6SYouSMsvpph1kpJmOpkyOZ6z1OnzvRz/CSy99gJ2dHS5fvkyvv8zVK5f4Jz/5k1RlgdAKpHooqvyn/TqxLD4JqjtNCVRBBXDiditqpYOO9NY4m76wqmXyHTUC+M2f+1drN2/funw8Hf9gVhQX8jJYO4bEvxBHGqw161GAr+M2H4EENIMYzv5ba83GxvrPcfTWD5yHuxqEuzl//kZVe25Tb8BqTbncYjp/IyRINJ5f30m+jS/AYq/ttpd8O0Rd0SYRZL6w8b5lYRAtnIcFjOMzEH5rNOm599imNAjHYYAsK6mKnLyq8FKTVTk7W8tcvpTyjks9Li5ZzPhK8CLwq5TRGvcPR0xGGbNywqzKGBeOLPdMckteBItYYy3WVES2YqufcmNngw8+8wRPbfWQRZj3WiFr0mAVyIBYnPIcjkuGg4yqMjgZgzfoWNLrJySpbpxngfKej1zWKPUB+ukf8Mb9NY4OBkym0zBKcIbKhajlyjiq0lIUJx75iiiSdHtdNlY3eer6JfvuF9472onEzyP8f4SHDrB24xJXb91h/2jIrNilzCxOxdwfe/YnECGIqIiUQ0uD1iOkznAo8kowoUtOTGIc/V6P5aUllnurXJL5ef6LD7K+7X46ubyx1b+7dcD0aMjeXs5gFvPG7WMS/QZpX/Dhd19mTW/jq0NiK0h1hVYVtgoEPklICXRenjF4kSS6Gzrt0oV0P9nDpytUeonCFJTlAUuyIrETYkxQDomYSiZkpaIoDFVpMfXlqWNFksZ0OkmyGc12gmevoKgXZmdNKACkJFaQakU/TtFmSuSigAbVCZ3eVXhb4F0GVcHl/gqXV1ewIqa4vs7hgWJ3sMLu8XHwf3AeLyJkvEZv6wJb630ev7jMus5IiiMkJZj6vlMebAVeYBWI/hq37s544/5NBlmJw+KFI0li+it9Nq+vk/qi4RviF9/vXrQvdwsjfpu/q9l4nH1yeA+zD/317x/8ix/5ZQdkeRnemgoSQC9Dp+1tgPrPBwy6c4fpxUM2VxeIR6YKPIBuHJHNpijvuH7pEj/4Fz/JS+95ESUj7t27x5uvvsq7X3yBf+/f+bdxeP7RP/6fUbFFqajx1uXpyOIb+apcuJaiKKIsA78koAAiJH2epAkKgakMWVF0x6NBXzgXfUcVAIPR8MLG8soP/epnfm1rls360gmSbodZlgX5xckGXs9K/iQUjDay4MlsZXl56b/lkB+Y3+T8/EazaBc9tc1sVMTeL75rhD9fDZ8bFSwqNh4m3RGLobJzZkW+0W37BZrdNo9vmLNDFi3xyH7BiOJcV9FAEnxbsdJi+DN3PKJm/0Ke59iqCguwjohEgOrX+orNNGPDHtJfybmcOOh1MVFK/kSXUWWZZC6MBGzo2sdTS15YilmJFwKKGboYsLp+gacvr/P4tkLMDlCETtWJ2mOhOuGaaUohOTjMmOQzSuPqJLzgzd/VglTLVpVGAnzkYszW2stceW2P470B4+yImcmoBOTWUlSWsrBUmaXKSooypzQlUapYXVvmxvY6Tzz3Hv/iZvrzl5LqL558QFrAjctb3Lu8zcHxBJxhb/+Y6cxhhMJ4ReEtOorxziAt+NKHwCChsdbipUXJiJW+ZHN1la2NNdYeu0yvydmoP58nxLT/9eee4WBvl9HBMXmWMRwbdo8qlD7AS880q3j/O66x0+2wFM0wdgzVAC2jYFvrIzwxeIUTMnRESlPmIFSMF5JKRmS+x2iiuT8syYf3uHp1g0iXaGNxrqjPtMKoLnkZk5eGonIYCwhLFCmSTkQnjeLo9DJzFNZR2jLY83qHFIpIShKtSJTiBJ7w1tcJij4oGkpLkiiEy3Blic+PieUuqU1YXorZWUooL28D2zgkpVWoKCXp9KnKjNTvI7MB2CneFScuHmDLuivV5CYidwk3Dw54686AKiuCBbASdLoR6+srrG+ukojd+aag1dDLPwyqmycci+a4bkGh3igsiqL42el0inOOsizrpajOnqg3v7AeyjOo6sNkCA/gf+qcDGct2GAlHStFkWfs37/HE48/zl/9K3+JP/+xjxBLwWw246kb17l//z7j4ZDVtTWeeuJxnDVBl4r7M9lAg2+BOlUDnHzPOYdU8tQ0yAtBWVUMhgMxnEy0Kb4lsoC+OQXA//0//dN47+BgczAevrB7eHBxNBzR6XUpiqJ+8wR5RL2HSCnreYx/W5t/p9NhNpudMw3K85ztSzvoN3/z8w/bO1vTrJqbZzMquA06b8JtfhFrlhb47azZtm9A5o9wK1zUnZ/L+BaLZ4KcIQ02i4I5QqOYzz44B3JIFhoqndvgfSOLoY11fJ6YaQVU+QBMgbAGazxdHZPEmk7UJS4KUlWgzYyOKJjN3kLqhNRbEqFYj7v4OMbgcUsKtZHiRYR3CUrFeL+EM11SKejIYxgNgRleFSAVxlZEAoTTmErhl1aY5jHHb91hOi0wJgIJnUiwttRlOU1Y8u6LIF6cIzoK0B6eTyqefucaGWscTq5/IYui9+TWMTOGiTFUmaUYGExW4mZDqCaojqC7c4Frly7ybGR9gv0P6xMVnbzGc+SMXn4RWxWkWtHp9plOJkyzEmMcpqoCHG0F1oGroXXnHUorEu1Y6im2N9e4cvUS17Yv8tT2yoEm2zxfrNZELAQvbzmOd55kMJ6QF1OMOWI69dzZL6nMAdOZ5WhvwqXtSzzz+BoXeylulhAzopdI8Jqks4zqLJPlhkk+Jko6HE0LZpVnWjjuH82YDodMsiPysiRJNLK3wVqyDLZEuaD2yKzCiQ5ZJpnmjqx0VDpCoohiRZookmWNxpze15mxFLagcsG6VXqPVoJYCZIErDcYSlAW6ULKmxIhD4JKI1zQj2slcFWOwOF8TqwUGkckPdJ7SjzCxcjZEZUt0dYglQ1zbq+IhULURk/OgpMporvJmwPL1954i+PxjOmp1bCl2+1yZWuZq5sXS3m8F2YpwscPWucFROCFKqiGwqkt7nzR5t8o7vd37/c9UFlHXpbhklGSqihJOglFYU7X7DbQ4mSUa2rP40Q/2I6UUihPIBM6R6I1ZZExHY64snORv/03Ps3L738fMY5UK3r9HlVWcPnyZbI6lOhsTLE64ZDVZj0n7jOP8qF51B51Nt02SZJQDNWKgDjSp4oTlKSsKvK8YHhwrLM4Ft8xBYB0/up0Onn6137919f3Dg+SSCsKa9BRdMq8/EZmLCcugmcJgMGPPVmMODclcWevwNYutw3qEouVBTRmb82pgPCLnbTO1QOLgogahcciiL5VleDbCYRNpGChv3fzbl1kadxy/A/zSZhTGTw4R5WDYpZTVUVg+nuJVpYkitCxDtIwW2JdiZAVcewx5YTEGYRQeJHiVZ0nbsFVGu9V0OFKH0hnwqKMA1shhSWJJHkVdN+9SOErE6RZcoWhXWZYxhwMj3DZLHAEKsPKeo+1lVXWNtbZSuWLc+ZP57FOIhHy7Jf74j1gTh9nibA+wl06CXBeD/HEQOwhCptXNFc4eYECPhBVJB/9AGtLr/Pm5XvsHk7JCkOel1R5Fv5UBdY7jPcYd2KfG2DvlV6Pyxc3eeLqFZ586d08KfPNh+nG1gS8+4OPMc13KU2BdZZ7ezDNHXePYDo7ZP8w5+7egJs311lOPakYE4mKWHuSpM/qJnT7MfvDCePRAaWWZMMh07xgmlsmM8NkVpEXJd4blpc6TCaS6RPrXO1YViNPHEm8jsmqDvuTiv1hyTh3VNYRKUi0JEkUS4lCCRPIaIQCIDclpbFY54m8IRKSWCli4RHW4HE472oFQn1vW483HkSMkgpflsRRRFlW6EiHFEpXoiuLVAKNwxZT8DGp1hTFNCR2RglSxNg6t0AIgZMphVhhWPT5ypsjbu5PmE1mKBlMopaXEy5e3OLa9ce5dvylLF997O+mg5s/imdzfh7PPAepbVefq999i2dAi0rA+zmL4KOjI6y1lGVZb4JBSYPUiLr7fTskurO+LifdPzLM/1UgAmCdpcimrK0s89f/sx/mxmPXWO73cFUWjsk5orgWINUjhsPDw0C0PPGdOR0jy9Nz4pHfEDrgz5yPs/7/p+hA/T0LVEVJkeccDo5Ft9vV//S/+gfxD//9Hy2/rQuAX/ypn9l+862bl/bu7/6te3u7F0bDIasrK5iyYjqdknTSb7gAOGVSOlc7LQU1QK/Xe5sbFC0Su4e5XC2AwFth8YaPNo8aOTTkhHPe3C2dfuvMv5FqKBrddxN+948YNTSliK2np4U0uHCT9y2FUtOW9AFB86DSIU60Mtg6ylYIi44i0k5KJR0FApSiKi0STywVkVM4B8Y7hCgRmJAD5FOE0JhyisXiI4+U4L1F1EDSrCjRXqAl+GyM1jG+ShjLDsd6hS987YCD45zpNAQoxpFndanLpQurXL3+OKnwi4u7c/ySJhIVTHbUWcVK03zq7Plt+cg0nvdFhqc/cI23isc5nJbsDwry0YTZZGbywbHL7UxYIaLKBwi8Mg7vQgGw0U3YWb3Ms+97jOej/NQbv30MFF74HVFB/pGXsL7CA0rd5f7BgPHIcZBpxrll/2iffnpIV3sSaYhkRaRk8MLvHCNUTGkdWVmSlwWFCemJeUmA9CuBQSOtp58OGQwy9nfvstmTLEWeSEu8Spm6hN1McWt/xHGVIqQn0tCJFL1IE0WByY+vQ5pyQ1GcWCAHmZZWiljE9ICoCnNb6TXKy0DW8xakpKhK4v46k6wkkgmFdSiVYPMSYSsSBfiQFOi1RHgRkhCdI9EpFkOZeywFMSUShfcxpVrCd69yNIu58/pb3NufMJwqitIQdzX9pRWevr7DM49t03O3K2PyJTy+VbrcJA43lUe+MbqcIz57FpqK+Tbbcbhz9xbW+kBwtf7EEbqWeoYRT7C2dsyXAqFgON34G/eRCEYMSCEQzpNPZxRZzl/51Kf4xPd+T5CXS4nUGuokQR3HuDLsESbPefVrryG1mhsf+zPFwDcrk0YIUUtQVV3U1IqA2rvEAsYbsqLkaDRcefnDH758befyXeDOt20B8C/+l5+KD44Oty9sbv2D/+eXf3G7LIr+8tISk2yGVBFvx+3oUS5MJx/eSaXImQ/ufAHAfBHwsIqWNhIcLWS1BZt4Uz5DA/4/N2YQLYt8G1P+IbKZhZuuaJ0ytBPwWroD0UhCpEXeuFA9cVYS2YwMbXFlbJ6DM7/KWqisJy99sAT1DusclRNEnR6F9wyriDW9ghcCX5Z4Eea20tcmIUKE/HRrEdYDCq08AoszDuMtwluUlkEWZBzeStASaSWIlJwVyniH3ankzs173N+fMMkD3Lq8rFldXWN7fYULq92wSTSLNNHgYPiW7qoVtREtzOwFvJYzn/sS8Hxi8LGkXOtQ0aHC+/3xtd9xcfze0hPl1jAxlrx0mMISac2FlZin05Il8gZZdoEFtgeF58W0wn70ZaT6PZIkpdvbY2//gMEwJ8scBybmaGRQUqILg1ICTYVWDq1KkB2sF1SuoBKayhqMV1SygzEe4wN5USCZlB2GdzPuH2T0I0snsmgJTmgKpxmVcJwpZkLjvKCzpOmnCSuxZD2Sp+/H4qnGNgQ6VRZXbziRjonSDhqPMCGeV1qQ1BHHQuKiBKNTxnmfpLdEPhsQUWKyIhgOOVvzeyXeBTmplBFYiTOOCkOUxKEYEQapUmwFmetgoy12Zwm/88XbfG3vPsPDitIpOrFiaTnl+pVtnn3qeZ5ztxGwHE12f/SUPLXw/moU2I/kGvl2QvRp4dAcbz0oJnZ3d/E+RFifNGne+9OI33Obq5fBaatRBJw+ru6UlZBIEfQ4wjkQEqkgy6d85Lte5od+6N9Ha0kkBdYUdXy0COocJA5DnHQ4vrfLl7/8ZaSO8TJcA16EuDTOjAC+ofl/vZb62lnwRBIopcQ6W6s45Oma4PA4a/CS9LGdy/+5E/zH39YjgKIornU6nQ//wi/94vXReHxhNJmwubaGtRZjPSsrK+HiECfez29/4z87Yzlh/J9keIcNwz6QAPr2TaXd6WGB7GVhwE+Tsd6ywZ6VuZ0j1z2sk2vTzbchFE2VgXsov2futdtIQaJJ6llkE7og2bC1AHnIYuPbSAfnCy1dzzStqdc3BXnlGI5zbt6esiWWuLZ8mb4vEEaibQF2iqljtY0w9SJiUN6HaFdcgL5V6Ei0ECgvsFmOBDpxFytjytKi5SqF6VF2H+OQFT73+29we/eQg+MJmVckMmJ9tcflixtsX3yKK4lZfH4X2Sr7BZ9VU3fdmmfxEJKID57xCZDUrc3aEh+C6vQD8EDATSQKkFQPt4+e48qE6jLC81JSkX70Qyx96Q4by6/w1u4y+3uHHA+njKcZeQ5VZcl6y3ibcRJhJSoAhY+7ofByWdBkS4EWJTomBBhhsWVFITVGa0aFIzJ9dOYRlHgsxglknFBKj/cQpQlL/Q6r66us99a5KmZnCKaCappTZhVlGcxmlbfEUUTa6QUVgiOoP2x4095HVDJmVPYZscxb45h+3mW73yPKhyypDOWmYD0mn2GlRccJwgtc6UM+PFGdwaBBeixRQLhUD9fdYaTW+eKbI159603u3jvmKA9yMd0RbGxs8tS1HZ6+sc4KexC8ttvZf2LRHJSG/0nLGuclDw0JEg1i85k1YTwY4qVgmuVYRyiYXHietUFd86gxgLU2sP01COlPSXOnh2sd4+mY69ev8+lPf5pLVy9RTCfkxYw0jsKlqTTSgsEF97805ubd27x+803S5VVQ8gwFKlj0fjNMgOYQgHMFwIPxtTgzgqicw1iztnuwv97r9TrftgXAL/2Tn9q+d7R/8Xgy/pHXbn59YzA4Jo0ipnlGnCZUJqTEOfGNn9g2BMA5VyMALSz21rl22yy+6ZoFiym2jwgA4mFERB4E+4gFKYOibWYn5lGCc5tOyzH6RqEiWDzuaI4SvHhIYbJovNFAAua6C9pdFhszSiUkkVLEWhJFmtwW5JXg/sGIz33h8wxuL/H4pR3edXWFLh0urazR7XnsZBepPM4neCoiN0RToGubUafCpmesDJbBUiOJ8LaiKiUFCiv7ZKS47g4HfpVf+6M9Xr99k5v3jjmuBGBZWfZsbq5zeXudJ5/epHc2zKgZEtU2b50LZPItKYxNmLVhFS3aodj5ps7r82hPaBv1nEFW8z4Q530p5kil4WcaeFHnXH/PBr974yPs/OEr3Ns5ZvdowvHxiMlkwqw2KKrKGFeUeGPwrrZI1SUiSlBRhyhSRFqhlUIojfPB3jmfzcizPEg5taSyCYXxOO+RUQcrwBuPlAKpJKtLMRsXttne2uDCO2+wwoNmwXjIplNmeUFRmcCoVI440nSTOKS4hRUbYV2NsUs8EVZ3mLgeb935OneGlmvbF7jQVTxzZZvluKKaHJB21xCypLI5ylboejP0PqLSKYW1aB1hvKJEoZa2uTeR/M5X3+C1m7d59e4h9weGXGoS6dhYX+OJ6xd57oX3cK3f+VVm/uOnJl20IY6Nzv8cEsf5RqTZMLXemy0j1AbPoPruv/be2a/83c9778+4AD5w/zPnSN4nc/b5dehUJy8EkVSnM3ThwmdtjGU2m/GpT32KF9//EvnwGCUlSRIH691I45UkUimmtCgdUZUVX/mjP2aWF/Q2dODveIkT/oyrsf+mb6anRYCUGCHq469Di2QwBqqqksFozK29e3I57ZpvywLg//3Jn0kODg8urCXdf/gLv/xLF4bHw44rK7auXGHv8AClQo72bDYj/iZxAE4cpk51lXBmBNC2WS4g6LXO19sq5GYg0AIotuk2KGivvMUi7sGD7uq8F8FJwSAeZLvT0jk2Rw9ige6+9Tkw73HwiOKnLU98DnpcQLJcaEoEaaoOVpfXNjc3Vtg/SJlkE6QSHEwrypuHDAZD3to/4o++HnNtpcP2Y0+x1pWkfpmL62tsrPZJhMNkt3HFHtgcgQEpMVZj6VAaKKxDysAyNt5T6RSXrLA7UgzymC+8sc/rr7/Cq7cP2R0bCl/QT1MubKxw7fIFrlx7gif7jc9ULOjMm6EqC8CThWxtWiBd/4iEJ8GDrm7RtUwLGdQ3KpbmWMjPo1KrAj6xBsff/RxfHgvu350yuP0Wg2zEpKyY5SXlNMfOMlyRgfWg40CIS2N0qkk6MZ0kIpESrdKR7/fJdne7k8lED4djptMxs8qSVZaytFRll7IoQyftLSqKWFrqsbm9w+XLF3ni6Rf5UN+cK5SOTOe3Z5Ppy+M8pyiCo6OWFamWLMcabUuEyZEySAQFgfEvseAN03zK7nDCK3eHfPmtfa5uLvNa2WVrucNydJknliSpqsimd1lxM3o13Ol1ShEvkVmNilKsTBlVEfeHli985RZfu/kGX79/yP2RYawFESUXtpa4enWLd127zAtXOlyZ3fz4+RAxMU8wbtv4W0eEvsW+vIUr1Obh34hZH41Gn59Mxlhrg3zXOtAqoL1S4oIkoD5e98hN8+yfE2TAGQPO84lPfIJP/oV/E5NlCCGw1hB1UpwJRMyyNMRxgiWEaO3u7/O5z/8+SZIEhz4h6kRATqH4E9Ie9hsvBIJ50YOI6dM/nE+z9XjyrGAyHrN787YepKn7tiwApll2eXN943v+5b/6het39+6v5bMZa5tbjKYTlI4xlaOyhpWVFbLy4XbHjzKZO0sCPGGLnlwoSZKc76rfrr51Eft+oW2uON+xzXXLLWS7h44fOC/L8y2Kg4WowIJ9ui02+KxBjxcPQTEe9UGIBVkFJ8d9Io1s6SIfwaE8edyOyDafefoxvvbWG9zfW2WazRiMM0prOBQRoyPD/mDEnU7Fm0sdNu8NWenErKQxq0sbXH38aVY6DjHJiIxhLVL0kgQRa1AJ3ZUrSNXBlTnj8RglNEbC/mDM/eExt+5OuT+ccW+Yc2t/wt7YMMGTSM3WxipXr17ixuULvOP5KyyxqHBvnAPPwzfeOa/1tiKxRaFxTgLqG9kNLVwY0SB6LQSwxPzNuWiMceYZ6x4+1nfMnu5w/8a7D4aOzaOiYjQpqEYz7GCAm43AFQi5hlheQ8YW1U1J1nqsphErkSStzMAY40r1dPeNuzOGd/6YUVExriyzypLnhmJaUs0yptmU3JWIJGGlt8bjVzd44oX3877LS59dcgcfPFvoFrr78sxmzGYllQnSQKUEsZYkShB5g7JBxme9D3a+PiTZOS+wCCZ5yf5gyGBquDPJ+cpBxsZKl2tLKa/sXGW5k+GP99hQjiXtiSLF8laPWPWYEnFwf8TBeMDufsHu8QG3j0bc3R+wn8PEObSUbG71uHT9Ei8+cYF3vfwkz5h7LaOYBbyktmyQh404xSOsvr1ojyw/2QMmE7Isw1hHURkqB7o+vrD5eaQIwU3tX6EjlvI8dC5EsGR2tsKYilQr/tbf/DQb66uYoiDWEUKur4w9AAAgAElEQVRJymxGnKaAoixnxHGKdWHD3ds/5NWvfZ2k0wteC54zSERz+fnT78HSgxMuSETP1fKith72NSdEYmsnQmNKprMpdw92l1589wvp//d//sLmd/3Qv3XwbVMA/Ov/7Wc2d/f2t27t3//0F15/deXoeIBKUpw/8fsPiWxRlJDn5QPv/xPdZXN9wTUaatHgCASXpcJU6CTGOIiEwjhYW9ug1b6ybfNqxb8XyelaNtOmMVCrqqAx62+9Wc/a67Z1e00CWIttlxfzbN424tY5gh+Ls8NbxxwLjH3mQoQax+3PLB5eLDjXorW7eGy9+7tPP3H9A0fDMZU1JOmQwWjKtBAUAgyecaY5GE+5Fw3pxZp+krCyNOHVu/v0Yoj9jMRNSaUJaXCRRqerxBuK9QuXmOWG8Z1jyvyYwmgmxYijyYzDccnBuORo5hjamEJBgmVrc5WrV3Z46toOz730Es/G9iFyU9He6Z/93FvJAE1/CN8e1jSHsvjF3Vobi3vRCKetUBWPeE5LIdEV8HhUbCIELvFUyxHm0gqWlcAGrw9X1su/JLi8Rb6inlGsh9asFM89qZk++U7umoRJBdPKMs4M1aDCHB1TzY4pqqkVWtG7+ph//Ma2fmc0o+fyDzYPuXCKmfMURYUxHiXBCRk8AGINJieRMb6cIlSEdQLjBJWKqUTCuCLICAvDQSWoBlOSQcXe3iF3eh1Wb90n1Y7YF6SuIFUencbEnWPS5DaZF4yLEPU7mBSMJwXH05KRi6iEJNEdNjciLl+/xLPXL/HMhz/ES2qEbiJ5QixG6hbW7uc7d86Orhb5ppwbLTSdQsPP7968RVVUTCYzsqLiZNTvTRVcDr1AabB1h21FWOflCSGwvklUHDGejFla2goqHWfQsSYvMzAFP/zDf42L25sI6bGmRKuohtUTqGW/3oYQnrTXZZbl/N4XPs/+8YC1zU0qEzQIXlLzE05EFC5kF7Q0nH8i2N8F0yhPSBIVsSbRXaqZYDqd1reWItIJWsbgwlhjmmfpRz748v+aFfknv60QgDv37i1vbKz/xL/85V9cPxweJ5UX9JIUpMC7k5S9txf362uLyADQPFozeloc1L9XxdF8d94iXzpPZGqZkc0F4LRA63MkPtGI4vQtowfJ4sBtv4BY2CTpNGVhD+mk27p44RfC7uclQmKBgVHjuFs7XBaPXjzzXYVovHa90GzG/gMfev87S4ePN1a7vHnvgPu7hxyPxoxHEybTjMoLZiqi8BGHBUSFp3N8TCc6IlWWWBgiHBGeSDq0Fui0IO5l6OQtvIUiyyizjKKqyCrLtJSMS5gIQSUk3pX0Esnmetj8n7lxhafe+QIf2FDo5rGzYKzU1qUtOjdzRFPxkFjXNhTrISOBVpifhkX22ffTJAW2WELTMjIQ5zccCSQIElqCaWgoUh4Uvf0Tk61EeBIvWNcFaHAdMMtgtzWWLazfwjr8qBS/cSH1390la0G/wmvPbMloZqhqOFaI4FkfyZRIWBQl0lW1/tzihAYkBoHxgqyyFJXHGihUggFMJSgLxeE0I8ERS0uER+NR0qJ0jojGKKXxSDIDRSmYWUnuPFJ3cDhWeoqt9T6Xrm5z4+q2feljH569b1m/0iv5wMLrq82mt7nunXxevqWwF03uDovJhZ4W9NBT5jmmLDGVC7HJPIC+ET6E4Xg3P4Y82fxF4AQ450iTGHxATZQSZPmU0fCQ7375Q3z843+O1fU1XD4LEl7dQQPOWlweFCxJkoQoLg+7+wd89vc+Fz5rHZ26rwsvQxDVN9l+R/gwlnZnFmV3goIoTSdOsNZQTKaBzK4Upalw+OU79+4s93u9pW+bAuB//+9/fHv/8ODCb//OZ6++cffW6mg8YnllgyiKWjWVjyoAWMA9a4VrvAy23nVhobUOWlDB/Nxybqc8G5bTnMm2dKlNZnZrx3P28f5cQEYrdOabkK+Yh+/a4oLnTDraPAaasPsjfP1poB3nTIcakLJvLNicKXrEooyEBeYktBVZfhfYPnnc9cjE6fue/ZVnnrr2Pa+/cZu7t27x9btH3L67y+Fgwmw6ZjjOKAqwXlB4Sx4pBpVFVEHXjbcoU6J9kOcoaVHyGKmOg2eIVVQOKu+ptMZrRe4rcI40SVhdU1zYWOHKpW2uXtqunnvhBT7+9Lro4vVDF0xaXCdFy0b6KLlqmzlLE3HyTai2MaZpfvxzTo/N2fAi4h/nJYKLEAzvHz1aaLOunit2GqqS+i8JxM0XkLDe8R9ZOGpD4DwUpsTYKsjTBLULYESkYmJZodwM4TK8yPHoEAblNdQ+77asKCtLZaLaxjxgGNZ4pE4onaWs44NFiIDDG4fPw7HoOAreFVGMJaTfpQmsrvTZ2ljl2qUtnrh8gac+9KJ/oSt/50px/MHFCaLNdWFRYc+cjLMVmvILnntujDqPjA6HQ/I8P/W/P93860bNL1rNG5D7iZpLCEESxyjvOBwM6XQ6fN/3fR9PP/00EOKG5Rl0TChVG4YFQzhrwXnP66+/zhe/+EWSJEFrjS3NHGz/6LHk2938630JUY87wtlRhLGGloLZZEQUhcjgpW6HIptiyoLReMTBwe66dJvLv/3T/3z75b/6qd1v6QLgsz//i2uvvP7aZhzHP/3FV77SPdw7IIoi4jhG1AS9ByEfb3uKwqNcmM4WFif/PikA+v3+AtiTxQvn2UXztDr27Tpt/7CuuLlg+3ZynPAPISo2Z7q+HcFoQnFzwR++Zd7bcoxn5Fyt8jKxiMLetEoWC3gQrsFlYPFM8sHmsX0uUAi4GMvvubjZ47nNZzl4x5PVV+/u8YevvMHR0WH0xu199g+Pmc4KjKso85w8KzAGrBEUrpYVyRit4tPr0huPdLoO5gBUmN9Zb8Aauqmg1+uysbrE9oV1Lu9scWNni+ff86J/ciX5rWX8d7UuHM2ira149I/Ilmj9/P2CLq1RxIqzcW3MX1tzklffggSI9nwr31IoetGyaLaYPp2TmvoFRFTfMiqjnVg5dz4Bf7J+tTHiwwOsgMwYysoihD1ddeJIE3USEmGRvsR5EzrEWnvuBVjvyEvHeJRRlQ5rFMJWxHGEEJqKCi8NXjqsIRgAESBfKSNkvV4VlUNHKTKydDoxK70O/ZVlLlxY5fqFDa5fvca73nWJd/qB71j+3Hlycn3EZ4nAbUjmQpUPDzECE/OqgEWFQOOaHQwGlGVJnueY2qkVoRD19erfrs7OOtIoJlHhzJVlyWgy4/s/8W/wsY99lLIoAtlPa2Id4YypZYM6eH94jzWOykOR53zuc59jMp7RX1nGGHNaevg/w01UcpJyeXI7hcyQWCtkHBPFimqWU1Y5WT6BKGEyGXH37p3o3Y8/9TP3bt78d//Zj/wX/j/48f9u71u2AHjj5pvJszee+D9+7Mf/4YVJNl2pTMXq6gbUkYcnnsvNyN63R6N8+OP8iZSplv8559A6Ynl5GSjOE9LauivR0qE0Z2Rz1/7i4Jo5FGCBjP7cRjhHSGzOcmnXgc+NFtpIYX4xf+Bh5MC2DnURPP0w9vk5RKSFEyAe1jU3NoYz108XuNbVdB67+BNPP3b503cOBub1N+9y/959Mc0zdTSccHw0YjqZkJcF1hjysiIvCsqiwhqHdTG+DgMJv9qhCNepihRR3CdNY3rdDqurK2xvb3B9e52rjz/Jc09e5qnYCQ3fde6CaJNHtjbGD/FYaKuHvGjh/4lW6+TzhD85z0+Zg4VbUiffjl3zIsLYw5jnj5KgijYjrYeREhcgUaKBUPj5kZoFppnFO/OAkQ3EWhPFKRqBtALjJdLrAOW6YGnrvEbrPsZNg4mS9SQofFXRWetxbXOHpBPjfMVsOiXPS7wFJSXO+dotUaK1RCpNv5+wvLLMzvYqO0s9Ll64ys4zGzzVjw8eLw43QUTnSZ1NjkZzrOMXdPFtRWBLU9Qq92uFpeYujuPjY5xzZGWFtUECKIR421vtyaFrqVB1ml6RzcgnExIl+eT3/wWuXr1KleVIIUh6fXAOM8tO9xVfSw+LKkPHKXfu3eXXfv3X0UmM0pqyqhDqzzp1t/a4EJyaNEoPsVA4LXGlQ1pQ3qClYLXfA2cZj0f83u/9bt8dHG0/98RT/9fte3d+6Kd/+G/Kj378eyeP/+AnJ99SBcA//x//8frR8WDzN37zN67sHh2uTSZT+qsrSBWdGjk0u/Tmv78p85b69znnSNOoRgCKRtfbJOOJxZVyU7vdJMqJlllo66bFvGd/c0PzvkVutYh409IZzi36jY13Du5r2ailP4NKtM2xaUiBmO/ofZsiYlHyIAsIkW2z78VF1FYk/gbCce3SMtfX+z+X8+wnD/Kyv79/yMGbd5hOhozLillpGUwyprMp2XRKUQSPcsuJ7W6AfwWeSApklJB0eywv91nppdX2yjI7Tzwhbly7oJ/sCnqBzxK179i0zNdbdrI27pxv0WizIBRqATVkDsp/WCAWPML9eoF1tTgbfMU8muDbFAJtCZEt1/fDftYcKzQ9Ptpg67PX55lr0ADlxFCVBmsC2hg5RxwpdKLDAuj8KYHZ2ZN7V2FQjHPDODeUxmNcRZSmFFKyvX2B97z3Pbzr+cu28G5yuH/E4PhQj0d5D1shhCKOE+JI4Kti0tXeb27fSNYfW4vXlhI2k4QnxYBlP0EVbC7kIzU5N83z3GZB7h/CNaLtWmzwQh6WoCpg9t7/5DeO/vWPfbf3nqqqw5Vqi3aLR5103d4/AmP3RLFGC5DCM5pMcGXJu979PB/60AfAOuJY44wNm39RYK0lShJwQWmmlEBFCVJpvvSlP+TVr73OxtZ2wGGU4s9SZ3fyUTV5BVIEomkiJdNZRtQJCEccaUxV0FteJpKSwfCIP/jqHy2/9vWv7XzvBz/8M0VZ/uVXX/lDD3xrFQBfv3lTXdq++LO/9QdfiEfjMdZ5lpZXyfP89B492+2fLQD+5CdVNv6vTkcLQgi8EMFFWqvAATi94BfpqB+RjiVYfCOdW4gWEK6aaYOLOmaxaEa3gLTXysBtvDffVqC0cQdEO9HQi3kTH/8nIJU1NwrREqLU3Ah9CzpwDpWYSy2MzuwR9lIqfgC8eDyJKVd2yJ+8yPEo/30r1PtGZcW94YSD3X0mRyOflzOcEOJ0NllX6DhHLIInfnd56/9n7s2Dbcvu+r7Pb609nPFO776p3+v3uls9St0tJCSQkDBByDFWZAG2gBQ2NsYkTvBI4rJTdlxOUmUqSSXlSkg5k02gbMJUzBaOGUzAAiEktZpuSfQ8v+m+O98z7GmtlT/2Pvees/fa5z6hbshVvWq9+869Z589rPX7fb/f3/dL78Im92yuMBD7O5dWO18Xty6QUttkXc1Ct43Lr29qLbRQw5raE8tazxnw3hoe05c20Z/IEn8Gd4pXAbUOHT8y5Ty/YwGJcP6AKS/9UKe7PCjTyWuLwuFGozHTaRoWRYFyllAZ4lDTiwO0KxCbHXdvYqUMjxIwIiRKM00NSW7IlSJ1hk6vy8rmBu9+131888V8vLvxth8sUKnW+htsZr8tmUzJswJrLIUqWO/1Pi07N37jfL/4h7FzREwJmPp5+sY6VbPbrhecS4xDvVW1z8W0bgjEcsQhSZKv39/fx9pSfe9QiGiO5zu8G79b6PxnXHwchOVGXRjyNGVtMOBbP/YtXLx4kTzLiKMAY3N0XhYbQRhAoMmnWenlYS1xr8+tW1v86q//OlYg6sQkRZlE2MiiE9vOrP0hvmyF7pZMnMM5g0IRCmglrA+7aCXkWUovDumuDrn7/DkuX7rEaidm79pNdg9GGy++8jIf/MAHf2x3d/fbf+W//m/Tf/8f/Rf7/78oAP6X//K/Wbu5devcv/zpn7wwTZLVw4NDVjbWya0p1Y6OhRSkP5wW4MtDAGYFRxiGVcVfm0f3dupt/L1HwOVaFkFaYG1pWfzcMrh8Sctb3zgbn2G+I6jTCrIY7CMtD37Dw74p9FlYuWfaAe/4omvCw/XXLI0pFT9cKY3foeevSyRlct7Kauery18V8uiZLsl9Z9kdF5/PRJ1PRV1Srpzxnj2wgQhBmj693o8eCzXEQFCOLn/Ab7JSu+7LoOrjYsDi9Y+AJdCqp+tvbIauicTU782GJoFFLctxXPOSIk9aUIlG8Sinc87isRtu60RdW2da0/MsaCDq99nxvyc7SfwLk/H0Y2mahHmWo0QIlSsLgE6IdnnpEFlx7eIAo0ArDAGp06TJiKwoyMOAwhaEUchg2KG70idiX84PVD58/YV/gKO38EwE1fFPd95Pn/eVUb536Oh38tyXgROl1D70ojZ1Cs5bp4mfLvEvtHP3jGq8Ls9zJpMJhQVrTtBfKyfTXydyoSU3vpSmXIEWiiQDa1lbGfKhD32IOIpIivTE+yUM6VTiP5wjyzL6w1WmkykxwiuvvcGnPv17DIarKB1gc1PSMCJv6QZqpRz2mqUQKgtKLCIOhaOrA5SG9ZUz3HfpEhfPneXB+97GPXdf5tL58zz/hS8xGU8YHY42XnzxBfPIQw//8xtbW98O/PEXAL/2f/34+urG2jt/4id/8l++9Oor4Wg0ZmV9jeHqCrktYyA7Yen0N7/pfzmdf/lMnPyZOTbNKjddYbfGWIrCEAQBaZrS6/W4eNf5j/DGy7/c5LF9Jj0+MxS3GN/b4CTF76bmCcZY6MR9nX19M3WnmHQ4aaryvamCS0RZbW7I7g6UwEs3es+YoNQ7TWkfc2OJra0PaWkUJ+qkwKqdywAYIAz6wbuqpr85wgbQiR9b1GEQLPDueISh9e6/1WK5SfEUlM78du41Ug4vlemF87+zfp+K3GGOgA8Wd80OXVr4YrekOFnYfD27eH0Coc4rO+enMtqoBF+R5fDEZC/RYQjiVHh/cjhSyTTDFAUaCLXQCRTdKq/dOcFahcKhjeDQZLZEAFIsqSnITEHhINQKwRIqWIv7dGS/H7z24n9/cvu5xUKkfBZ7y/UvLVRj+fKDfLj6a+HRwZ8EziysWz63yMY60iI8aTOTatBWTYpze3sbYwx5nnNwcECn06NwljzPjycAZg3hLMpdS2XxizmmDMIwRiEkkym2yCiKgg9/+MNcunSJo6Mjep0QrCsbPVMFb1V4e284qCLhO2SF5df+7a+zf3TIpStXSfKs9P/nJJzo+LxatwCgua9481cU4giVRquAbDrB5oZeFBKHEUEUsLl5hvuvXOHtDz7Aux99jPPnNulGMVGoue/SZUxWsHd7l0/+7qfP/sFzz2V333317Jd+5Cenb/+e79z9YysA3vi3n/7wp5564sXX3nj9R//g+efXsyzvlZGe3fJhsAYV6Detqz/OhK7UoEqV3y+qqMeiqESGupw4iOOY6Nrv/vIiTNiyINRDeuqdtK8L8zr61eDpOodfX4Rbu29aNr8WBsPrbyB++pYax1ynJ3xm9eI83d6SXHHvrLsHHTmeRXb+LreBGLTY6Db2G8+IUn3O2c1S03wdcl3oJHcAd9e0JcvS++aKhAMRnjsquLW1R7JzgDGC7XQRW3KFQS+iv77C+X7I0NkXzvX1/X2pXDHmVe++91oqHm2jmDyaGKFFH1O73nXHRx8OLS1uiOIpSOaRKu/xiCdeWmrCXmkxrQGgn4byteIsmmLmBEMgQqQUWku5ztjyd1pry/l1XGlohjBOs7IAsAbrFKoSLMdBQBgHBFYU4lTrmK5r0e4s09/gaSqWKvTb0LM7iANvTQ5tL9TG4zFpmpb8P9VsfYvkZZ4Wnh8TFBG0UBox2YLxeMzG2grvf9/XsDIcYKZTxFmsLY7P3+znDQ5bGKwTlI54/fo1fv8LX6Q/WCHPCiSMUDpgmqUEQdS+xLb4kn1ZXxqcMaRpRqSEYa+LsoZsMkb1ezx079t4zzsf533vehdXLl+iF8WlSDTPmI4m9DpdrDOcObfJhbPnODg46j704EP/DKU+8seKADz1/LOfv3Tp8l/9n37ohzZefv31XpJNOXfhLsK4w2g6wTpXWvGarwzud8d7RJX9XD1gBouxhjwv1btpXnI+YRAjIvS6A7zjUr6muy7IW2Z7u9AtemfZ/OKchX1F/MfjnTRw7TPR85ucLPGCbyjIfYE+LZ3TgnCq1sXhPN2w8xgneYhIb6TwKcfSVgk1bIg9qMw85+1aWknn6WYb3Hk9Aa025ik+7URzA0twfGbf8PrTX+DW7h7bByNGo4RpXs6Rl/anijAO6HUjelHAWhzev9rf5MLb7+PeM/3tt+lss/We9m2q3vTIuiDP+c8fPg2LR/G0LDWzAfm3FLW+7tILbZ+iDRA8tMHiWpBYh5MChQUseW6QTohSIVoLqc3IyICUQCwiAaZynczEUSgYG0tqHU5XITe2TB/sD4dwQIvGpzrnyvNM0hLN7UV1WA1Hh3+2QR0shfldO6W47Dnz+Xq4ZmG8v79PmqakaQnRu2OGQs1xZM0Gz1rLrFIKVJnw6gqDNQVZlvHg/e/kA+97/3GhthApXHHtFouzFmsdhYM4CnnqqS/wxOeeZG1zgyTLCbVCaV3+GqdK74eZ/4Bb1AKA+or2r2Q8YePMGpODI7LplGHQZ3p0xNkzGzz2wAP86Q99iHc88AAXzp9DO0c2TVBhgAoj+rb0sjDOEjjLpSuX+NJLL21k2O1eEPf+2AqAp37u31z43Je+sP77X/jCX3vutZe7O3s7dOIeQRguqD61Uljz5vD980YS1lqyPCPPc9I0wzlHVuSl0DAuF8+TKOAWdT/L3NR8C6NH2AWn+PnX4EvXsunCEiveepywBxp3rrlYLONJG9A+zeCaupGI+CBfn4iwVhzVZ9cb3LH4u1jn2oMG63C60IJPeoRyy0KLTlPKL3Dm8xoQqXVVLLmuwhjHb74x5vknn+CVN26ydWub/cMxoyQjz21pOCdlil0QauJQE0UB3bjD6uoa52+8zht3ndmcfu17eKRj0POfrVX051p0Bi0TGW2Qc30j8m3qS42yXDvX39DRSFtl00ST2p6dOpJQK/7y3JHbHOsMjhAVCugACbvlxqQEa1zZyWIwTmEo58oLB0lWcFgYpsahlcIUpd6p3+3SHQ5GHLhBo0hquCriR87ENfVJrtEchF6Epn7+XJuwtI4MOhp24nhGlMW10mG7u7tl5Hs1k++OJZSL9O/8BJhz7tj9T6T0xw+0kGcJzhR0w4APfuD9rJ89w2R3lzBQpTVwowat6GIlaITCGj71e59m5+iAu+6+m9xOSkGi0qgw8Dr/SWUs9ZW6AioHg05McnSExtHv9xgfHtDv9XnvY4/x5z/+ca7edZHAOfLpFOcEhcNk2fE50WFE3OsyHk/JTcFoOtnHkaR5dvTHVgB89gtPq/ObZ3/8X/zUTwx29/d1GEYMVtawFgpTEAQBYViOAMqbuPmLCNZYsixjmkxJ05SiqNy47Mm44cw9aqnIpcF510ZpWvlsanPytW7YF8Va7zxcS/XdVrDUeX/v5sqSMaqWzXVZd7UQ5tO2EcxrJWo7kJP2hZ+WjPs6PDmvv3Atu/OdIjKt53eZa+Ep2QeyTPTpmwaBKfAbLx/wB5//HM++/AbX3rjB9u4hR2NLagTjCkpw+cQwRStLoDVRFDHob3Pt5grb+xcYTxMOP/h1fM3AEYiPwqgXrXK6b0VDTyBLOvUlNFXdqa6egyBtP++Wy0p8HWmr1N3V7ISb7zQpynGxwlqssxQGjChsp0sYhVhbThYZWxr5gGCcworGKU0yTsgnhjwvbW2V1XTCLqvDFQJRNxHubx399WmCFrQSy2b38fiRtFF+zg/3NyZvOOl6VQsKeoyitUwtVR4AM37fupkN7qJY8JjSnQm3xaJcmQxTunMqAlFYUUzSjHPnzvL1X//1UI2VB0FQOnoqDdiKZqgmCbQqTYCU5rVrN/ns5z7PoNuncBYVBqUxkYMgCJpTAG/ilziLK0oL6G4YcbS7R68T8vFv/mY+/i3fwvm1NQKqDANRBFEIVXqiiCbudclNThCFhIXl+ZdfpsjS/Mmnn/yux97+WPbHUgD86A/+k83dvb27P/WpT53fPTxYmUzGDFZXCaIQ4yxOyXG+cZZlhOrN0QFAaQuZpQVJkjBNpuR5jqsu5Oymmv0pRwDbYnw9fFhjzM9XldfphGVcvqer9o4ZLpm5r3dDDbV0W2xxTcTo24xoK1pq3ay3m2+D+fEgBi1QrtThyDaFf50ykCVeAjUKRE4Rl7Vy3rJkrM1DG5yWwFYdhxPHE/uWF57+fZ558Q1efvUNbt0eMc4V1kKAoaMs2uU4l1E4wYUxhQXnAqbjgsOjEQeHU0aTKfuHCYWF7jd+wLyra2YfRnlFkXhMonwZAvVr4pu/P77OnrGzNgtqt2xz94lK25AnavfgKdMjXoSm/J5zkOcWU835W9E4EaZZwXiacXNvjAgcSZe+ho4WIiKsREyJGbkuU1eQFJaicCitcTogiiJ6va6JQ34dJ/d76QmfBmke4ZPaeN/SSQsPYucDxJxHxLwsEXBhQsXnLoi3Kdjd3UVESNO0hOlFeeGeed5fzzp3HCKlA6wohw4USZFz9cplHrjvXpLJhG4vRkSTpymhVgsHfsxEiWBF+MwTn+elV15m7cwGSZaChOQmq8zigpMpgCVM8R963wJUYQm1sL91m42VIX/hOz7Od33nd9KPY462b7M+HJTBRc6VPgbOEsYROojKSROTgSimacYzL77IxQt3jY4OD/L3/Mff/UePAPzC//qj+o3rb6x2ouiffumF5+Ld7R1EAqJK6S9V5TYz/9Fav2kei9ZAlhVMp9M5e8lKzSWlibetFJzOOeJe1yM4c004q9E1uyXwaEsH5WrIgi+IxXssLRC3b7Ss3sH7RFzeTsc35TB30M61C4Tmx8MaeQVtHZr4u7m2hWx+dnv+eHwTG85TXDnxF2P4Ugl9MLK0ayIWrJhb/O3rhUqbOFDg1VRvP/+5z26+9PoNXn/jOub/0NcAACAASURBVDe3xoxTiMWwNshYGSh6HU2gHdYa0sIwzhPSTDGZZoyKLgUBoykk1w9IswKtFd3uilp739t/8d4uf6Y5G0+tiPSdDs80hff3+IyAlt7ENbTHM11Dy/x63ZlyAZrGU6SyPG67IRotNxvnBCVCUY35WYGjacJLL75Aevs1znYDhqqgGxbEcUgv7tOJQfUi0p7lmZtjRuOMXDroICCKhcGgQ38QZiofv0YJ+nSbjYXzUI0+pMTj2eBDA9rSSef1P9Ii7PMV8o3nyRdSVVs/HBy+6/v+/sEv/MMftNZWaXcVAVD9Hisn8LgX5WUx1M0UpVf/448/zsrKCnme04m7kBtvk1jqDRzGGYyx/PZv/zbT6ZSNzbMYW1p7O+dQWmEqp8BlEL75CiBs5WC12+Xg9jZ3b57le//yX+I//HN/juToiK0b17nrwnmywyOiOCzPpYZAR+g4wmSGw4N9Ov0OKM3zL7zAa7dusrp2xqK04o/oa6EASLL87L333Penf+TH/sWlo3S6nqQZw7U1ok5c5vWJwlDOYGqt6XQ6mCz/ig/CWcFaU3H+KWmRA4LWuqQZdJnlOI8AhGHYhApbneU8yX8NG982jwCfQVBLsNBCwhntNqm0baYtSvnWcb9mSldDBNYaY7DEv3hBVe0bNXJ4beoaLmYtExMNblH8nLaPtG9ko7eJzWqQbH2TEpZcex8FIO0Z61J2mK9ujzbfuLnL9Wu3uL2zzzizdHXAXZvC1UvnuOtcn9WVHoFOsGaPUZozSjTjTLOzY7m1M2V3N+UgEfJCuLU1QusbrK6u87bHH/zYPd2gFlopfpc8WQKZ0/ZtH4q05D72nac63YYHEq93y6420++NUba1g1Xthfyc2ZIgrPV1GfsbBEShwUmIcT1e3xmzv7fPINB0dYbTjl6giMOIbhhD2GFsNbenjtuHOWGnizGGKI5YOzNkbW2VULl3LS1+oakz8vp11CcaliljpcUxtFYEeQWg0rKe1QuGFsGxQJ5NfnA6HmGMIUkWUep5Tn32//WsW8eh1EnU++yQiiynr4VHH3k7cRQhxpTCQJuXjn95VhntlDSDVBRwbgy5gz947nkkDLFOQAWY3KC1JogikjRtxv3W5SwLS4tn350LL5rF188+pnaW2zducOX8WX7gb/41vvmjH2Xv+huIKbjr3qvkO9vl5l9lFjjnSNIEbQqCuMPa5hnGyRSc43Nf/AI3dndZffV1qwMd/Q9/9W/I3/nff8j9kRUAv/LPfnL9xvbWxZtbt/7mG1s3Vvf3DjFK6Ax6J6Me1Y0Qx2XIZ1EUqFNm/k+zAraUlVqSpoynU7KiYBYuXVhTVnLGYJ0htwaD4Wh8xJUrlz082BKsZv4JnA/UEc/d4ZbEsvrgPV+V3Ta77xW2tW08ssRHf64jdac4BkpLUqL4lHHzi8sctCz4oUW3xO+/AbXXQ2nqG1N9wXFLaJc2A5XauWsTDDYKxLYUyPoGV+vyKi53InD9+RtsbR+ws3fI0XiK0rC5Kjxw73keffgh3vvoWTY2Cxx7mPEZjHEcZVDIKtdvKZ58+nk+9wc72JtjjqalS8Dh0Yid7R259uw1Rl93D8PTXKikTqu0oC1tfgI+pKwtKMi3qfl0M76QLt9m2IgVdk3Ky2cR3LqZwdnQfebsoPvetfVVVrb3ub2TkBSWbjRkN0/Ytw6xILkhwBKaHI0BNyGTgAkBTseYPCeMYHOjz/kza6ysdrtnX/vCx5uGTG26JB+E75qcv1u2iC2ZW/PZnssS51KvAreNQj057u3rbzAdHZTOfYVFqQgnAYYTQ6DyR6o1vIrLFRGctRhX5jGQWZwpcOmUixsbPPrwI9g0RysF1lXugAWiSidYrQLSSUoQxWgdEMYh/++/+yRf+IPn2Dh7EYIQUxSooGwM8yRFa4VUIoD6LWoq0yfl1Jy9gByf2lkBM52mnD2zzujwiG4nIpskRIEmCkMObm/z4L2X+Xs/8Lf5uve/n+nuFsNBh0Bpst0dwri0hShsjikc8eoK+cEhkzThzOoaB4dH6E6PZ15+ic8++yxbOztoHXXe+djjG/c//NBZYOuPrAC4fft2f3N17Z/+61/9N6vj8aQzLTLWz2xglriBOe4s8Ok0JmUm7DPGYJxFVaYR88WD5WSkRClFFEW0GmH4Ak2OnfHaFMriDwnCB/WLv+P2ag98uoNTNrll4rz65tzG4c7+zQf7taYS1k+eaz8HPrjzVGGX8wudGimKcopvubRzoA3dQA1+bhNGSm2+3JdaV88/mPv71pF9eu/o1mO7ewccjKZkohkox9mzK9x39xW+6f13c2FljIq3CPQI3S9HXFU8IENx36WzrA6G5O4pJtk1pjdyitySJhlH45S9/VvcSN92cxgXFxag3jYb3DYv+TbDJ59Zk+/auRaP+UZy5pKRC3EtXXNL4dFWgbeldM7RPFd0+vDdX/XY4dXbe929/Ulo7BZ7+ymTLCUMIwozRVSAiCYDJNTV7y1tbZUEmKIgDDSbG13ObJ7hvrND7ut0RlIwaNdS4L9vWpEvWZLe5/wIo6/RkGV0TU2f4/WREH+rXH1/PNqnyNLK9EdRH6NrkXwee+bPDnvmGqgcrK+u0evEKC3Ywla4wYmGwAGoANE5uFK0WeSGLz37HIWDwjq0A+Mqu+/q86kl0opGDXZ8jsqBURw4ZVlbW+PWrVtcunCe0cE+m2ur3L51i9xZLl84z9/+W3+dx9/5KNZmTJMxLopQUYTSIEGArabmok6H6dEhUbdD1O+yvbXFyuY5nnvlNX7mF36JV2/eKt0VRTqPPPzw35+k6ff/URQACuD/+d9+7EyapXd/8rc/efeN27fO7e3vobRiOBwu8B2zP2/218xTeqYtmOeM5lGEmdVwEAT0+31aXbWcTxQ0N2p3ByOxx/9tcGTi+bc2TcH85iqeYkFO0IiFh1c1Xuav1Od/d72Ikbn3qH8m32idZ+7bSfviK57PUr8GIks6jdr6VDcf8S7oLRfL0VIELel68V2PGsXQ+Mzzi+QiBbKDemw3ydgfT5lMc5Tp0utqVtcH3PfgRS5uCMPwOh1uELNNVx+x0kmI3A59dZu1eJt3PNjjoYfvZ3OlSxQUFQWmSbOEgzznwHFh4bqKNMWWvtFHgRbfZ8/1OgXuXxgr9d3nrllMN4rftrFS16SUllIPzvP5Fm2xQ1z3sb76xOOPPcZjD1/h6tXLXLl7g/Pn+vR7QtzpEARxGd+rwnJTkwAkQCRAKcPqSsBdF/pcuXyRh+4+y6UHHuZycWOwcH5n5088C0Cd6Zv3VPB9ntl5EllsWmjb/O9UssacRblbXJsci8+rzJ3/ucuyu7tbxQBnd+T46lvDFYLYE8Tg4qW7GK6uoILgZNmpPv/xsIQSnFYYBVYJo2TKp373d4+bwvm948vNonE1TLqEhCzioEgzzp7ZZOvGTQKtmY4nRDogDkL+2vf/J3zDB7+ewWBAmqZEUUQcx8cuiFhb+X1oJIrm9q8YHcVs7+3yyU/9Dp/74pe4ef0m09xQGHPm5evX1ieTycY//6/+8VuuBQgAbty62Tu/sfk//uzzv9i5cfMmWZ6zsXHm2MbRJ354s75mBhHHue3OtdIIqhIghmHI6upq++ZyXATUxExt3U5dtHenEbb1bh7ak7haBYg+aM/5j9HHm9a5QZ+rnfgcDF27stpnL+vqHCFLREM0LYFnSuGGK6DDa/yCJ9rYp8avb27OE3gzQ0t8Bk3i/Apur7ufRzBYfeSjpGCcOZK8IC8s4hRhFHJmJebiWkzX3gCzQxiNcDbDOFVuOFWAiCsMa70h919dZWOjR+/6DoXV5firceTGeZ7HeTprmS/uku6zjhhIi76g1WW7RW/g8BhULfGIENV8BtsgcPGgMgsGTQuvlXui/DvWH16lv/H1nD/z+7x644C9/UOSacY0ySkKi6OowoMNpjKagdL6t9+JOLO5zqVzZ3ngkXdO332+80TM6AN+nRDNcKzWjDJZThPi0UWInE4RNDj9OXTUedwVXctJr9Oa4tjZ2cEYw3Q6Le3fv4wtStWTtG053nf33Zfo9bqNe1UpVfkzzH5B5e8caLYP9njyi08fT6TNuwx+OQm0Vhbrsnkdg3KOwhiiUNPrxtg8o7COIk/5vu/7K3zLn/kYydEBaTIhUFKm0zqHzfPStMjacuQxiHBFTqc/YH//ECMBOu7w5Kc+xe985jPc2LoFeUGKY+/wQL3wxS91Hnn00fW33XPfBrD9lhYAv/hDP3L22s3rl37+33ziyv748Mw0TRj0h6CEcTIlrjgVr9Hem5SzIFIK/pRSZQHmFuox7FwBUFhDN+6xur4GHDUXl3mo33k40IVxHDyG0FIPFGlW0MzFpHqthD28q7TxpW22m3iETT6BV1sBNP8778RyWJrmH61COY/VsC8BcSl9Al7LVG9WwTIzINcMDmqcKw80PT/vvDCnPReU49omCRZH5YwISVIKk4xzFDhELKEOWB/ErA4tipQwyHEqwIqgAFNYwjDGFI4gzijilE6k6PcjokiRHyYoCY7fSrsl/LK4pWGYzWKQxVl0H5rlfJsVeLMg2vQVjQ3GV6D66Djnp+NkidOj30pX4xyrAh85Z3jl7J94+fr08N5bt0YcHE7MaH9cTCepIEVkyMhMRmZMWRQ4R6AVg07EuWGfy48+xuOr4ctX3cG7Tz6+W87VS9tzuMRqm5biwdd8tAqOfcZCNO2ZF96rLZr55FfORgCnSfJlFQCzhMB5RMA6SyfU3HX35XJkz9qTrl0EUWU+A6b0cCi99wUdal5+/TVubW2xsn6BMAwbBcCdFAFO2nEA5QCxxFHA4cEeF9bXydIp+1u3+eif/ma+5y/+JSbjMaHWpeiwEu5naYo4RzDTImQ5YRSS5hnKCmG3hwQhLz3/HL/xyd/m+Vde4ejwiE4UkR6OGI3GHGbZ4N67r34rSl57ywsA0erKxsrajz736kuDra3b5Maw1u+V1VCenZzIlhvitCJA7kAkqLUmDEOiKCKbc0lybjbP6+aMgkoEYGVlBWTU4jMv/nE88XQm3qpZ+WFjxxJjH98CRZNfbuPs69nurXHCbarEU+J766/xff62i+k7l/NmL62xxZ7F3Bum40nbmz+eBiXQFmmMX/jmNYfyIEWNAmv+GKQ1ctk6SKY5pkogwzm0Evp9TRzFRKHD2ClEpcupncVaC5jcIAQYV5CORySTCIVFK4coA6LQqowWdaI5jhNaKFA8xZNrg/rxO/DN61rabK4bSILcwebnKb4bCAyee6hlht0nOMQXQz2PdJXPcySOB9m598E+JPfGpBKzndz1Y0XY+xMJxf2JLUiMYZoXTFODyyw6UnS6EZcHEfebA2I3fftiLPGyTdf5o5AX7uk2v/42jcVyWYQX4ZkvVlxLYeZanru59S559/d9786v/KMfFhHyPMc4d0f7v3MlR8/xZEA52WGtpTfscenCRQCKPD/OgMHa4/tUKUVRFIDCCeTG8Pnff5IkL9iMIrTWDdj/TlEAv3ZzFhlsKfKC9eGAvd1tsvGExx55mL/9t/4G/X6f/e3bdIc9bBwhzlYCdiHQZUFSZBmiNOiAAGF/NGbj7Fmu3driV37t13nymWfY3dnlcH+frNslDBWZKTCwcXN3+/6NjY2N//u/+yfqu/7eD9i3rABYXVn55V/7zd+IkzxbHU0nrK6skuYZnX4PnevGs/pmIwDKgVYaieJq/KPUA8zoAKkVEzMNwKXLF76XW9d/uFXcJaeg977N32Pr2hRM1arkUxE5aYcIG458bcE7NeWueIx7wD8G2QaleqcflhQmzgfxexZ48IzwNTwZzNyH0K0ui76TukwYuTCGxpIgJZrWye6ULtR5lNTVJufEYYsMawzOWags4AMNWgMhGLE4SnSgnFHXKAlQCkRHZEVIYSMOj3IoTNkNBQ6NQ7QQKIiVNPMmnKdbpmUyorFhtIhapcUWtu38eIttd8q95aksGumX0kQjGoULHqSvThs179EOjo5DVuPpX4AJs4vmAoeJwfZnZ8MQkiBm6lkIazkRDcTuDr374ZT4Xlomdmqf28kpjEBbuJYsd1CtvpJ08sPb29vVGr18xn52KIpFSF7mEUDrWBuucG7zbOnv7yCIAozNyxjiQCNVwZBZi+gA6xxZmvLZz352EU2Yo4+/XA3AgiXw8difRSizC1yRo4DVlQF/5z//Aa7cc5X04JDV4YAkmTDzwhMRwigu4f+8wHLyd6cDok6XnYNDfuO3/h2ffuopXnvjDZI0I8GijKUTRmRFwWg86mwf7CtrXddaEwBvmSugeum1V88988qLq3vbu4RB6fZnBZIkKY1+Zoi6a9fhfKUaAKUUYRgSBEFJA+Dxka44oNnru7c+98PN9WBeeDYvsquJiubjf6mFnCxVHnvVVU1oekH85vwCLGmhD7wuhbRDtD670AVR1pygyPsh64rHZS5g1NTMLe9Nm43o8XE4E5lPH/vh+oqmOhpQR1Sk3kXNn1dPI9Va/rcJKGuoz7zgzi1ugIJUXXuZYilIaTtbGIzNCETQvT5W6crDQpd2wM5gMUySAtEDXHCOg92U6aSgyA3OGOIQul3FSqDoYV8/1cZ3fgSybQrF+dTpnk29seHX7g8n7edy/tmaF5rhu2acktMw93nqz3cdEl/4J2nxzzh+jQKJEIlOvi0EQATEAhHi+fFTxm+P75U2464l35P2g12A7qXmnimw1NtjIR9DWuy+a/9We8azLGM0Gh3rtZRSd+ynP2vm1GwvsQ6xjkGvz3DQRxkHtkAElCnT/igsWFeKBosKObCONM154fmXjn/vbIKsriG7kwLAt/krV27+YBl0YvZ2d1DW8Hf/zn/Ge9/zbtw0wRXle84m0oIgACUU1pKlKbkpiDo9HJAaS5Ll6E6HLz37HL/6m7/Fs6++xtHRiP3xGB1GBJ2YyXRKkqbsHRzoay++ql988UWd5yZ+KykA9VO/8DPcuHWDcTZlsLJSCS2g0+kcn9DjuN65P+5N+hMEwXHA0HA4ZGVlpbyxqk5/Fv2rgnIetDAFaxvrHojWt2HVlK4+uNurPpeWzUdq0Z61hcz55v+XKavF86B5OO2FBbamAp/f5Jdt4nVBndd0qCGnz0BuAzcRRs1z0LJ5zh+XdwwJ0Zn+2sqrpeVYZNFnobUa8cyQ1xfVZdMMru281xZbV6M95KRz1kDcj4njgCgoU/6M0oymOaNJxjiBLI9JjSKMBJuPUHaKcjlQEHS7ZAxIspDxyDEeZaSJ4Iyi2wnY6MYM45gzXe5uG15ong9pv4+lZRqljvyIJ0vAOz6Kn57xPQqtnez8Br+s8K7d5s5z38xTEFKncXwIF6cUvc7/2epFdtu5EN+18NXdngyA+sjefMS2r4CVO0ESWq5JW4Jp9fXKK68QBBEqCNk/HBEEUat4e56Ht9bS7XZPjN1EKi8ZxyMPPMiVuy5hsxxtIT04ROkAyfNqdtBRJClRGCIOOlHMU59/ktu3b9Pr9Y6bVK11qSOo6OLZe532VRQFKtCEkSbLMvJkypmNNUaHBwx6XZLpiNHRAd/57X+Oj//ZbyOdTMnylDAKcM4Q92IODw8BRRCUSv8wjjFOSut8HVBYR9TrsbN/wM/80id46vnnGB8cMclyChw6iMgLSxB3sLllPB7rm/u7a+tnNs+c3dxce0s1AM8/+zxH6YQgCBGt0OiSm7S2PLmetD/7JtIAs45+Jt4IpKyojDupMmdVntYaHQRzQUCnzRx7rE3rHWq9M3HShNYaAkNKiKo17cvjttUWVCOe7tfHD3qzwR2LEbYsWcl8n7mupp63US4x4SLKfsfhTJhFDwGrwOXTxOaLAiN8Ecba66zXKnJyy1Xh86iBj9vG+SFi8VlBnyLKqqvcBTSOjdU+w25EpxMRRZqjwwl55tjaPeTpF8esxH02Vy4zLW4SqhDtNNaAjTocpV105y5ub1m2929yOEpIs5BAK/q9LoO1FQZn1ujU76mF0J26noMWPaYs0iTz0LvPgVE8ufZtUcH1aN5GBoePAmPx+kibtGUZ19fCjS946UtTIyJL+UEadtFt7oMNuqVNd+P7HEsmfxZ+t+eYXBtF6JP/LMkL8eqZaLhfHx4eUhRFFWZz52p7Z22Z62ItYstZcpsXxGHIg/c/wOpgWPHtOQf7+/QmCQ5DryhQUUwQaGxWUGBRTvH666+TTKc4XTaIM9OheuFxJ91/EARkWUYcBcSBRhBu37pJv9thMj5id+smH/lTH+ZjH/so1hT0el3yLEHHHcwkxxYFUaeDikLyaUKRZcfZNYgmKwxBp8Pu4RH/4sd/gqeffYadWzsUztIbrrJ3dIDBkeYpnTAiUorCOaI4PnPPpUsfi3vdLwGvv2UIwM7+LliIu93yeQk0roJ7fBu/nbuf3gwNgDMWhaCri6i1ptvtEsfxsQBkvsoMgqASANYq2Hp0qLSRa67lrw6/hbB4mnhpmt80pgDEP65U77pmqEFjbr4lqMbHCQrtUGd9ERXxd44yu8RSzkKVrxPJow+qLP4AyFWQy3OQY4FQNBe8GpjgPJ2Rj04QPOjG3Ln0UiseVFWWGD34EJ22Tqm9zfae13OdYPvMoMvmygor/Q5hHHI0Cnjj+j5PPfkUn/7ilNduD7k9vovb4wtsjzc5Ki4xsvcwdld5dUv47Sdu8MbNHfYOcnLj6EawOhywvr7G8Ool4uNO0jNrL3fIXPn0L23x1XjioJ2n2/SKz9rQG/FTQ22blVd8iF+Q69Ov0EKFiDTvT7kTms9DlwlLhnI8BZTUf7629hyjL9JEHZyHzvHliYi0TB7J0uXQu+5Vx7y1tYUxhtFoVDr1WesdCV+QIlTHP4sOPg5+KwpWBkMefvhhdBAcFxZ72zvcvHGDvZ1d9nf3mB6OgFL8LdUG/+ILL1QjdtqLQMwjzKd9zT7H7M9MiN7vddi9vcXG6grf+R3fzqPvfQ9FkSHKlctkkSLKURRFZUoHFkcYdwg7XXSFBhSuhP9/7zOf49c/+Tu88sprZNZxmKYYpAyoQpHlBisKFUQgCqX12kGerjtRaz/1P/8f+q0qAIICy/pwUPr6GwOzcYYsI44ir8rzzdr8ZxdrNgJoK9Sh2y19t7Ms817gct5S/COArX7avsxrj6NfPSinzvk6aeHlPdV82+Lqm2duqJh9QTfzHXGLa5qvu5I27UATRbk5mn5q6nj//sGIg6OjyIk7E4SKKAqIYk0cRnSigMiGtwLndob97uOBQIArOboFh0PxnMP6oiXNjtV76VwLitGW3uejYWoFnKsJqXzpke4UdKJ60cUum2cvXOX8udtsbe8wHSdMJinXbhgUW0wnU154fshqHzpdoauEbrdHOICxyXnxhRd57Y0tXnptl70jSxDGrK5EnDmzyfmNNa6sraFdVlthW4qhhn9E7T7wTWvUJwmcp1jwhVk1i0iao3614/SAWMtn3V0TIXNtyFjtui+gdjSRjfoBNaY9fGZQzi/QEde8l7w0m2/MtL6Dtoz6ijS9D2iJ065P6oB/VHfh97WLGre3t1FKMZlMUEpjcwsEpX6yJVhnZoSDs4SqXOe1g8wazp07x/0P3Acy4/HzMgguzwkE9vb2WN/Y5NKgR+EUQdilcI5XX3kdJWUkfYkSu4Xi4k7Ff8qV+08UlDG9eZrR78SsDgdk0wRTZHzrt30LX/ver4bJCKWhyFKCIGCaTOn2euRFUUYj5zkiQhDHx/dWVhi6nR5PPfMMP/GzP8vW1i2StMAqjUGYpjnooPxDeZ5mVPckTcMky9VkMg2UoIG3JNg46MU9er0ettr0w05c8idVSlPb5t+W+vSH+ZpXcyqtCJUmjmOiLGWSJMc0wew1vV6vqfj2wd2+Mb1l319eFnvS6mg37GjlrN3y77XFrjYWAB+s7fs8HkOiegQwQuHgudsHPPXkM+/f2t2WSZIyTVMKa9BaCENFGGqiMCAQjZbehTgO7xoMesRxSL/fp9frMOh16XZjuoFGFfknh73eB4NAEYgjAPRiWExSHWeIoBdPvyfytfUzsgT69FETS7o1L6DREsY+1/l2gYcevptbN15ld++AZDLlhlEcJSmvvDFhb3/Can+bflfoREIcKsIoAh0zzWDvMGNre8LuviIrClZXFec217l0YZNL972D+4IMr7ocPAmP9dvZF1PbZrvbcj/V4fy27soL+eNJ7sMzOSCLOoP6vLoPnaj7etCOsDcLkrZkQ2m316ZGCbTa/7YF7XBKo+JBX+pjgg3vEPFfVy+FJkuiJGbfVM0qTeDg4OAYMncVTSwtc4C2+i22mu2XKtwNU054WSxXr17l7itXINKEWYTDMBwOOTzaZzKekCQJYdQhSRJU1CUIAg6Ojnjj+rWSX6/U/1TvMV8EzPaV01AAY0ypHTCWMNIUWQKu4Ob1a7zjkYf4C9/151ldXWV/f5/hoIdCYV1RhtFpja7e01Z7lM3zcmRRKVCKvYNDPvGJf80TTz2NiKJASNKcTtwndxZnS58bp8qBKGMhy3OmaSKT6VSHosvxiLcKAeh2u8dzlsYYgrm5fKXUggZgfvN3czzKV1IE+IwbNEIQBHQ6HZIKBRB1UiSUNsB4/LM9G3TTCaWdFlh4mO7wQ7V6b7s726TqPgvLstfnOVIn/tcvy4pxjU7Z4sRNgN/54rP6mS8+p158/RbXbuxweDQhszk4WxapWuiEikAptAoJdaDDKCKOIuJORBxHhGFMHIVEoSYQiLR8MO4E9HpduqtDVteGDHrd8u9BTGh5EWs+uzZc+e4wkKpIKP9bK25mkZNhU8Mg7YS3a6EmxDXFhm2e/3WPgVblu+PBruX1R7+K8WhMkaYgN7i9axm7iPGe4fZOQaQdYWAIghStEyyW3PRIUkuSFSCa4TDkwrl1rt59F/fddY53XF0fdV028HfEeJL72mgN10w19mlgGihUy0aGgj8/BgAAIABJREFU53VSM1Ryrl230YilxrNB1jbtRviTm6OJ6nB8zb1yQeeyRDOz4EvgFbH6tQ+tpl+ueSzQFDC7Jb4N3sIEf3HgWwfrvhHLrqurjxmXv2M0Oixh7dxWG/tyZNpW0L9WCldZ/1pjkMISS8gjjzxC2IlxeYoKFR3d5dzFc/QHXQ4PD0mShN5wgNJhWSwHmtu7O+we7Jd7hkBuCnRlMFTf/O+chs7Roog7XcYH+xwdlLT4xz76H/DAg/eTHB3S7UQUaUbcjclGGd3+CiZJcJVjodYaUYp0MsWh6PQHTCdTPvGJT/BLv/yvCZWikIAgijFZjtIByWRMECiyKlHXGENmDTjFZDyR0dFIM8nEOCtvWQEw49pF5ES8MAthqEY33Fv29iVEhHPYueptJv7rdrtM05QsyyiqVCetNf25jIKm1W6LgUijiPdgdO4UK01q4qaGuM4tCcLxzAS3+QQgLbyqRyjltcZ1y2mP4/dzbE2Tf/W551796BNPPM0Xn3uJm1s77OwdMZ5mFFaBKxBxBModG9JoKW/4mfI2DAOCIEB0UBlIFeUYjUAnioiigE4nJupE9LohvW6POOoRRvrB1bj3YG/QU8OVIf3VVQb9EkHodSKiUDEIQgJnr4s1z68Oex8OlRC40sNaZG50CUdroFPdZMm3EfnMU+p8std06ORnQ+BPXOlR7D6EEiHuduneuMn23iFHUpAlMDIOl1dxtaHGuRBMjhJFHAUMhx3Oba5z9eplHrznEo++9z3cH+QD7wbFHdxjjc3HVwt79C/1osF5RG5ubj7YtSA2vkJrgVZwy8UL4qMiagZIS4NwaNpaH3Pw1v/ahc+nFj9ba5JnHclzzUKhNWVxXlPUUkwIpxd5PhdLH0XTQEjaAsVOPuiNB76D8fgfYIw5bhaVik5tTmfo7WwPM8YQimJlZcjjjz9ObgqcM+hAIQUM1tfodrvH02DGCVEUoaMInOPajetMptPKFbBEI8LwZPOftwW+ky+NYExR0hBFSUEkac4H3/fVfOQjH8EVBUVRMBgMSEZH2KJAaY0tUgwGRXDiV6PUcbGSJwmf/szv8TM/93Ps7+6xeddljtKUjhN0mpBkKY5S05YkCVoU1laZBrljdDRS26/dkKM4UirQb10BMNv0Z3OMxloKVxzDK5EOFvaZWff/lXb+xwWAFkxluzmPBohImc0dx6WAxMxclkqNQJP7xwPl+Sr72ut8fJc3OY3mZgIt6tk2Yxuphd+0QLqyBOr2KZdbcwFOeTiBl28ffvTzTzzNk196gevXb7K1c0hiLKJKd7oysFmwVqr1UnBuNh6al76J88FNx4dQhmkoLKGurJ51gKAQUQSBJgrCMAwdnTgkimL6vS7dXsyg12d1pU+v26UXCgoux3F8uTvsM+h36fd79Pt9up2IYa9HGAR0FNubvXCzO0MLygU/XEw49JgTLXSxPnW5Wwro1DekHsI3fdUVBmcv0H/6CdY2Vrl2a4fDg0Mmk4QkSUmTlCIrjYNEhDDsEHc7DAddNlaHXLx4jnvvvsjbv+ZredfQVb++TdPh6Qa9eod60eP8HbKvM5SWwqKuQJcaz++dMMGjwZnrOhuugJ7r1bYJNuEbjz5gnv7yeRrUzLUW+PyWyQEfWiK+7IwWdFCcxzaYuQi9lnRGHwrjPIWVa6FF2iZnPAVHMp5QTMtYW+McuTHoSGGtYeYHfPKJ5EQ7Vk1uOXdi8xuEimF/wD333FM1DoCzpMWUWEeoyBBKh6A/hCKvsjUcaZJxa2ubJMkwttwjisIgUqCUWtj8591j/Y+KmjP9gaLIGB/s42xBL4740Df8ezz40MOkhwfEUYTLCzqdDmmaEg+HjHZ2yrF5EUxakBUFkVJIoCGMeO2V1/j5X/xXvPjKq1y+5x6u3dqiu7qOTTLElSLI1ZVVwJIkkwpNqcYmxTEajeT27duio0BdvXoleMsKAJSjcMXx5VNUhg06QAI5jm20pjqpSpULvpLK0vHEvW9WGVprF6AYpVTVKYbHs5pFUeAKg4pV6T3gSkc1oTRTUQjGOYbDIWmek2QpQmlQdM899yzakS5sgPMPt4c/x7VHaDbsMqWh0VvY9H2+9V7HvzZ40LUUIb7sgiWoZX3qwfn0EM1xqVenufri08/yxeevc/3aLba2DrGUnb5RBqwltApVyPHbWy3ldRJbNhu2PAdOZEEfOauKrdMYIyhT3uBl8WBAFcAUJQWKgkBK2imOQqIgQiuNChRxrAmDUHfigLjTo9eP6XdiOp2YTqfDSq8UJfY78ebquYvcfc9dciHWX7w6iN8OyzQBs4OvZwe0CdJOGReb66a6CB+8FHF+8wM88+I1e+W1a+wc7TNOMjU+mjA5GpFNp5g8R4kQdWK6wyEra0POrQ24eOY897/rIR7rOkLf/VpfxKUO3Xu44rqlLB76zCdwawsF8llduzadjQ8tEw91MJ/P0eLq1ybmrBd6Ps97t0Qc0qDNlokIpNmtL7tNXG0TF0/j4rPLduIJtmqZYpq//iLNIq0tsruhO/KMMAOHt2+TJzlJmnM4Suj0uuyPRwRhVF0rVb3lSYrfrCO3QJoXKG0IQ02eTXns0Ue4fOE8NssAW7noRWXsexyjqo7fKI2KQpwqXWBffPFlDo5GDFaGTNIEjcbkGZk1OFOUpjpBcOwPUEfP3ZzAU0Q4nBxwz92XefnFl0jTCQHw7nc+yl/87u+GrKQGFJUI3UIcRZCm9AcDrDGkSUJ3fR17OMY4CDpdrl2/wa/8xm/xq7/574hXVtkfjekOV8hN+fmHvR4qmZJUlMqg32MySchMxqDbY7p/QGGMOiqm3Xc++I7eVz/6zgE/MfNheZMLAHv83J/w8OJOTlSaZWV1pUOCCg3I85wkySiKgjyZlheq2vjnFfuzzX9GL4RheOz5HwQBqhOU3NCxZKSpD1AOwjCkE8Xk7sR5qfHgtFa1vg2XGqfmmxV2LV35IoTufR9fPv2yZDYPnLzYgdQLCQ/S4PAvfnWIcU7pfHNrj5dv3uL6rdts7R6CC3CuwOFQuuz4VWHRViGicUpQTjAi5bSgdWiCski0jmJuEVOVOsh5zpE77mzKP8YFWONI84LJxAFl1KgTjn2+tVjiWBFHIWEUEIQhURTS7QT045Bhv8fa+us8/9yqXLnr4juO3vNO3t4PUCIt3DfttABtXX5LJ0vT1TEQ4ZHYct/bL7prVzaf2HXqq3ePEo6290i395hORqRZnonkrtMZxv31M/TPb3Jhs8+DfWE4605aKQrxj8j5drWGUnxZuuI8KuUbOWwTCTr//VvnofHQX7QI6ZaJPuvTJM5XSNd0NtKmDWmzKq7tlm0uifPUXKvRVl2n0TKF4A0J8gklW3IFGmiNbyzT3RmVNDcZcrR/gMsKrFEUxuHC8mW2QvuUUyhX4oXlpS59+wtn0dUmbAVCC6I1Vy5dpteJFt7fiaIcpis7dCOA6JIedkKSF+zs7JSiOdFoDbrSDjvnSjpB1MK+03yMT8TkzjlWB0Nu3LhGoIWJMawNB/z1//T76YQRaZIQniIJ6w4H7N64wcbGJuiQ0WjC7z3xeX76534epzVISDF3TpVSBJW1dy4luqdcSWfOH68ONBura2e+7t1f801RHD0H3HxrEIDZyWjhb+I4xlqLsZYsy0iLnDRNSdO06uLz6ufdwmIv1f9m31OijjfvXq/HYDAgjCKKKjpR2aaIY/bXTqdTVqGTESIyZwTk4QwXuHhpJv/JMnHTnfKpS8RQ0gbTtRQDy6xXfR1SI6q3zonW4m0b1b0A5ImIe+36DXn12lZ4OBmRZI4o0JTmWRZyS2AUHaVQrrK3tVAcq0AdYgWLIEqjSry/fIBLx85yZta6ahLJHh+GrhYNi8JVeRNWSempXcEKxjksQm4srgwEZ5JTwn2SA2OUckSBpRNpup2QlX6PzY1Vvb9/SDIZk3/t+/iqjbCBdrdurNxBHoGv0FoYx1q8JWPgvkHw7vsAM+yR39Uj5xJFAbuT9BlAbfSjRyNVvjZoWCjPb1i2tme0mRzV79UldJGcUoC2ceRtokgfirAseXDh/dRJdeBNw/NkcyyY+ixt6f3x3s4XOd0mKvVs4gsTDbZ9TfLSNZ5pA+fZbRqNifjpyrqAsl5MeIuPlmKmdq1v37xVabFKU58gDNBaOJVoNLZUuM91351Oh0ceeYSo28Wkk1M1YrZy9JtMJrz++uslSiCCCjRCOTZnjMUai0HK99OKQAmqRgXI8XGUMdwmN2zduMnZM+sYa/nmP/Wn+MZv/Ea6YUCRZ4izc72XXaCVyqzJUqyeZRlRL+KJJ57gx3/8J7lx4wbxoF+h227BoTAMQ3Smjyfb7FwK4iwALwg1cSdeT9Pp23rD3sYv/dMfUX/m+7/HviUFgE85aauDVlqR5znjScJkMiHJs4UuX+MWNvz6LOaMDnDOUZgCl56cCBFBq5OKrQHViIASunGMUoppmqACfWIE5HPWawRseDhckXbxkbR1FR4erjEr3TIm1goR4O9WGg+yaodOGxG3bV7+C1X/+Pb+4f+5tbP7H+3s768djSaI1lgMRkGEIkpSzoYx69OETlGUNYE4MhWQK0suOTlCrjtlbr2AEYOpDsFUpZ9SClMdu6scFGc1hDhNEHZwTihchnUGZ01FMZSFheig+kGFOn74DMZYjHFATOEsewcH7EWHHByNmE4STGFQouh9wwd4qFv3wZ+3CHZL6i6fs5ongMd5xJvzOqPqOurKNrhTPXnrK9EDxyBJW2yz813b2gYpLbCyr7P33csNVbprn91flkApLeJL55qd8HGinjSnEeROeK+6IBEPh+6Ltabdc6DN4bNOD3nXHY5TBxtFodQ0Do34bA8qIz4Bpu8e8yFSHvfBemEhnqLD4S+4BG7evIm1ljzNsJWiX2tNYdv7r1nBOhMCKmcxxrC2doYHH7q/HJWb2yukEmfW9WCllEBzeHjItWvXKppYlcFb7kSbNnuvmVDROUekosb+5pzBWnDGYPIpnUBztLfHu9/xdr73L/1FOnFIniSEWuHMbHP2j+FPDw7ora5hc8vzz7/Az/78L/DUU0+xce4Ck2lameeVIndV7XvHaHiek9syU2AhyEgpnIPCFN2RzXu9PI818paEAgU+2H0mADTGcHiwX7o0pTl5kWMqA/eZFgBTNDbu+fnLeShmRhGkacosUnJlODwRiM299+xGkkrc0alOXLffY3V1lTLBi3YF8TxU5lr4fpFmqp+r0wrSrupvJJe1jT7RHK+pUxW+PPtlRYO49s2+YY3bMDqyuXErR6OJPTw8ZJJniILcOYxShE5xPkt5ZDDggU5IJ0nKe8AWTDFkpKSSkCpISMicIncGY8E4KESTK0UuitQKWWUbaFAUIhgVUIjCisNmE5xWaF05bElR8XMKEYspCpyTal5WjovFUAsiAblxGOMI4g6FMtzen2KK2yil6cQdVp54lssfeJi+r7NybYKymjDO1To28cHobUl0Horh5Bp1FyxpxZMl0ehyPZv4PMTdGKGURXfENv3KaX4Z3gZbWk5kPV9e2rUyrfv7Elvbtjra4dkIl+gHGvqNNoREasjEfKHeMiZYbz7qNIosQZ58eQLOtcP0+CaTPAija7tnPddPFvUFOzs7aK2ZTqc4aPjs24bcwx5v1MebrwNjcy5dvIvLd12CIqv2hmrPmN+o3Un6a1lbKba3t9nd3SWsmkdr7EJQ3KyAsM6R5TnKGCSWKuBJoaQaR7QFtnA4k1MkUwadDt1OxF/9K9/LOx9/FIkiRttbDPpdgoqW8NEJ1jly6+g6xzRN+Kmf/ml+65OfZHV9jUkyxVSgqHMnSPiJJq70VcnTkwJgtveVOQYFSZbpJEvVZDJR6s6Sl7/8AsBnllBYQ5YVJHmZ/mRsCcM6keMuzDlHYS1C88hcLTd+HhmgunmSJCGrfJPjKEIivZDrfKwjqAoHFZSjZiuDIeuzAqDV2ay+ADs/10nLaJer8+weaKw+Kysti1YD8nNL5irdcoXzgpioRbW+NNHt+GtVwvibimm6kiSlsjfS6hjLCfOMc9bxSBjwiMlY1xYVaWwQkkWaadgjCTOSAI5cQOIURZGXEyS2ILcFGYZMCqaSkQKpg9RC4SB3pVQ/dyf20gVCZoXUQmaF3CoKG5SIAQFKa0BhXGmK5SxY64jCmGmW4jClNWdu2ZtGxLf3WBlucf7cDV44eoB3DjWNiNu2TUxaurLW+Wm3nEmC5iiZ77o554OW8Mbawikb2xJ0q/FP9WwJ1+JI3eK77zPSEvGgWbVO2I+YtHDvczRBXZk/X9A3jIVo4308BYR4nA/bwol8Uwkt9sqNtUOWICvLPEqWoIZ1a+Jl3gRt3g0NfUv5c9N3fc9HDv/l3/3lIAgYTcZItYabY9R2fgdY1HOpEv9CVYiByeH+++9jbW2FIs/RLB8zn6enr1+/zmg0Kk14qmMQ0bgZxF/9mW2mxhiCymVWKcCWdsJFUerXxBRMRyPObW7wfd/7l/mTH/4Qrigwo0N63ZgwLLNwGtEX7sQwaWV1lcI6fu7nf5Ff/MQnmCQpK50+eZERdXoU1s1UDeXPzVEBcRyTZQW5zY9Nk4qiIFCKPMtJ80ySaSIjN3LyFg0CBvUPZVzJ8UynCZM0qWUruxN64Jjbl5rpWC0VqrrjxM0uUnWbWAPWcDA6ohd3/j/e3jxamrO+7/w8S1V1dfe9912170IIpLAajHEGMtiDY5uxjWPwbmNDjMH2+HiZJTmxj09OnInHySSzZNbEJCcZTxLH8QLYYLCxAIMlxA5ikYSQ9Ervfre+t7u6qp5l/niq+3ZXP9VXGJh7js7Ve7euruV5fr/v77vgkSH1b54fvVBoGEPaMDsHgwE33XTdd3Lx4h93a3JZHQV0zX7b5CW/hqwXYz5HR6ZdEGbXLM7H4biudb29eHYtyJ3dLaqAZ02toCxKMjKSBp2xUtIvLSctnK0rrikPOWsmZIkOTlZWYbTHqRqrBT4HqzUiSTFaU2tBJT2F91QSyub/J65m7CylsRhXUROSsAyKGk3tBYWHiRVMjKeqofQVxhcYB95nVCajrBXea5xPqSrJtDTkQlE3siCdgnOwNyq5urvPxe0R557e5Z7nniFZKga7strXzL+jkoKO8Cbf3tjXbUIistkRMXiKuEge6wmwzoxKdLP6o+Sz2F4YiZFt82HaBEIRGV+to+MsQec+bk8cuz7rLH1hddbd5iR4sabrjmzmMdfNZ4IY4iNhTR0ohY9INtueC96v50N0/lxbihmOZW9v74/H4zFKKSaTCSrVTBfkf6tZZEdFwJyKIARaS1CSu+++mzzPg+ueEGtHAPNRgHOcP38+NI0NB2zWGPrF9PcFJppsNnulFNK7xpowdP7O1GAMd9xyM//Ff/4KfvQHf4CNfh9Tl5TTCVtnzoCpQ/cvj+gdR7dyGPcURc2HHniAf/Pbv83u3oiNEycZHR4w2DqJkJp6Wi2cFY+YZdpIBUmQ34u6mr8fiyXRCcY5yrISRTGVqnJfkbfBX3kE4L3HOhsKgKpkWk7n1YtrQf9HgQtuDZ9EBNhlIZxh0dLXecekCFB+kmThZMhVd6kZRCJlKBKyi5/84yiUtQSXtSpu71crdyLwarQTo4UmxDbbFqsf4qxf0TGKWJHt0GE6ss4hrcOyNLJgTUvL/v6IYhpMl2wVzHsUmp6DvlRs1DUnXMWmL0lsBUYElq/wAbIXDltO8V4i0Fih8FpjtYBegkkVvpdQKYfRPWyqcKnCKEHtHbUQVF5RC0XtofCSiZEclg5jLUY4jNiloqKoPZMSprXH+Jpp6ZkUCaMDxc6u4+q2oyiScF9JwaSE0cGEvZ0R+xcuUz7nbJDUtTdZ0UWci0DBXQXaOimY7+BhrEC7YtXlLlZUiNbfEG69d3wXiU/EitNINoZvS9DWeeh3FR5tNUIEaesMD4qZ2bQyOZZ2mpgipgOiX/EhoDsHImbQs+Kn0CaH+hb3hOOdO31sFNRBOF3JwWA1g8R3nb8usuSqZfHh4SFlWQLMUVtRBVjedLTv4bSHQmD2RGmlQCquv+FaRKqQ9axYEGv3EBpofGdnB+s9iThSFaiFpnJG7kOI8PqNdFB68No3vlUeby3eWoQ1vPpVr+SXfvEXGPRynDUkEnpbJ6AqmU4m9PJspUTyDQrlhOSxL3+Z/+1//z958tzTnDp7Dc4L8r5iUhSoNMM2joWza7vYUCeqMVCbvZ8GtbBaU1U11XQqpuNCOF94Ib8WrjuxAmBhzgJQFAV7e3uUzpKoBNPMejxHc3zfaVrDSvfvW54AdrFgaKq/cTFhOq3o9/tsDTfo9/toGcYBRVHQ7/fnBcRMERCHMVmdXfpIpd5m+opIhni7G2hDgrFqfkVi6LudA6PwYaTb9N2F/FoEwseg6SPb1ElZsX9YBMjeO3oqSHeEF6QWelKRWIcguGR5LZBKBjdAJMq5oAJws9LQ4HDBF8ILnK+ClMcJcu0h0XjtcYlAJAqRakg1aIXXQCJwWmISjVUCr1NsqihJcVJQC5jUcFDA3thwOHaMi1Ns7/V48lzJo49e4bHHpggfQqW89JRlRTEZUxzujbYPyqeHm+lNeLER7wRn90LHBroEN4s182XRPeONdmpd7nCLBVzkb0Zd5lob3wpCsCbVUHRxTdach85o2w5Cqmgdr/BrHBgjbPfoOe4iTMbQMXHMqK3N/fFx4l/MermL7xHzXYiNCpasirvOcQtZick61yIVHaOfdd8TgqefDGm00+l0zli33qHEqj+NnFP/ghFYojRVXYB37O+PueeuO3jOs+8GT4PsHjV8YR9ySwXTbHOcTqecO3duTgis6vpoZLyiHhPzU6G1Zjw64Mzpk+As08kBeZpgfc0Pfv/38d/8179Mlii0ElTGMJmUeHFAnuf0NjagrkEpvLWUZQgCSnp9isNDnr50md/8J/+UKzu7iCSlNBapE4raYBH00hTrqubxn0nslxvmQd6nqioOpmOkUMhUU9c1wnrKaUmxu6dKpSxfLwRg5gRoraUyNXVdz1nbX4uPddDFkl7TQVmWHPhwLIN8MPcLmIUt4HxwAaRr0WDVFKft6R5j6se8+UXHginWdd4RAmInJEd3N9Q+tjZkJ1qQaBSp7sj7brS7dWVCVa9CJLMXDuFDR5ngyYUgFw6NC3M8IRDCo4RsNKuzEZCb40PKB2KeFz6QbYQMsjbh8T4gR0HTC5Ik8EqkRGqBSBxkApMAmcSnGp8KfELzWeGSDJEMEckWtRsyKW/l0pWTfOqhKbt793Px4oTdHYdOFVL6hnRq8VL4IC/Ad9pFszjnj3V2xyyasU11vrBHWPtdkDwdZLSu0YTojJ1bvY99Ry5G5wy6I0UxSqCLaP3XsS2jZMSWnr4rRyAKNMQQlLa7X+T5WkEY1iEGrCIjQnS8xVZBKSKFSvS1WU5ljBkULWWCRLp90XovnvgYy0f8/yP8gv39fUwVQm7qWdjNfMOWa4oAsM4ELxepsMDZU6fZ3ByCsyvKry4OgBABhdje3kY2+4aSElNb1lHjZLOXnDlzinIyZrS3y43XnmH76hX+1mtfy0/+xBtQSszXNNmYgzlrKYoCYwz5YMB0PKbX65P2wmadCMWFS1f43f/0ezz86Jc4KKZ4ITHOoxyoNEF40fgSrH9/UspgkFdp3IwEKARWOKZFwcH4MAscSPX1QQCsdwgVhhwz+YRzLui+n0Ge8nFpS0v6xkhRMM8AEIK6cROsrME5z4ABSZIsEQM3ZjkAK1Ca73iojyFIrU2L6+qcfEf13tUcReZuiw/tinmQ7yaRda73bUc43wn/WmAyLUOlKQVCOpzwCOlJrCGThkxrMulInCN1Qb4mkYGDpRoz/sRhdRgkSeVx2qNkjW9+Rorw8wjXjHZ84wEgA9tfSFwjGPTK4ZXHJR60hETjtCLNE0g8Xlc4NQE9QekReXKavH8SoW7gU5+D/iBkDmht8K7Ce4NQKSpJSbJs4+RG/lxAHG3IdNsnd2bFLHTyi1B023thkVTX9hkQHfa4XbP6KDIQgZC7wnnaZFbfLlIjJMAowtWx0a59xnzktdpgQUewkRfHZGqIuC1x7MH2a5L3VvT/xD0I2o58bZ5HG0GJRlL7OEpJRLGxhAaI1XFlOxmwy1wo6vbXwUXx8Wu5vb0dUDWzsD9oNR8Pr/2wDoRDKY2TcOutN3Pm5Cmoa56Jw/1s9Lu7u8uFCxfmTrKLxUNb3Sg4sql3taGSJdW04PSpE+zuXOWbv/GlvOkNP8bdz3k25egw7H8zkx6tQ+NgLaW19Hp9pNSN3NGjdcre7h5/ef8D/MHb38loUpL0eiRJHpL8rEFIjZCSaW2ORt4sW+eLhicxIwNmpqaYTrHWopRGSklZlYxGI6GUMlJK9/UoAOTBwQF1A6cIrY70lOs2db4yOGKFGLiwobvGQXCGBng8VRXUB7u7u5Rl2KhmEokgAVxkvIp4hS0WKunOzmj20HV0310oQJtI4wVRB0LBmsVgYcET4vhiZfF4BB0ohehYDMTSwRgBk/GUqjJBKtPo7IWTaB/sZ3sSlHQIMZthybnMTEjw0uNV82VFULurpjiQPrBupUfIJjJUWoIQ3gUbYOFA1khtEYlD6Bqpa6QyCFUhZIWQJXV9gHNjpJyQJAVJcohMRgg1AVUgkxpTXwFKhJyhFQ5ra7TWpL0eveGm1BKFQM6sSo8917EceCIQ7eI1ifI1RGRE0LpWMab5SghUhGvQBe9Gq0TR4oUIVtvISIAPHX+m/QUR2VuEiL+XKFLSYVgk2kW9jx+TF90WG4KIvDdSjSymCsauVbugWpnBiwV1SYvP034dxJreQnSPKBYRTXFcNxPnRi4VG4vjT+L31/7eHlrrJb36zGp3fffX8L44Ivndeccd5BsD6rp8RgiAtRalNXt7e0ECmCRzCWL420eow+pldyghqaZFiPtVZFg1AAAgAElEQVSVgmffcQdv/ek38+IXv5C9K5ePNmhx1I33er0QR5+m1HVNOthoZPEej+Djn/wUf/LeP2Vn94BePiTrD9BJjkVgbGD9O7GKfq9m+rm5OV6apnPZ4+wcV2XFdDqlKIpK6q8PAiC393Y5LCZY/NGBKLl00E6sWQP+igjB3OShsXx1C46BM7LJ4eEhh4eHTCaTuS/BkQlQi8SztMAdd5RiTVcVW2COcc7qatnaG3GbfQ7HyLIEa8/8WlgzYhcbPuraiWp0ODbOeawBbTXSaHASZRSJlaRSIKQPrP4ErArFoVcOlJ3ngMumLkByRBKVId9BKBlOg2xIs9LjVEAMUAa0A+UQ2iKVRypIJKQKEuXoSUsvESTaIZUFZbDaYLSjSiy1dhg3xfldrJ2EcCJvkCo8WDpJyHo9sryP8h3XXEQ2vCVWu1hzD4mOsUsbfo5srKK98fnlMVXMUVKIuDStffyixcpvd8ie7hjrmDti14a9WJSuEPp8t3fGEpdmhoJFChYhlp+jWPHgWdPZR65rzH0vxglZeU1x9D5XmotY4ShaRF3RjSZGmxGx+isi8ne84FhClmitRyKyzkSLu/BxcLBPkiiqqsJ6N8/6CPyfjo2FmcWtaEa4hjTVIcdFqTBGEMc3tc45kJKdnZ35DH6WOTPfRJkFj4XXlAunVGtNL02pyhLvDL/8i7/AX3/5y8BZtAprnCNYFjs8UmgSnZGlOVmao2UCxqB1Spr1eOLcU/zJe/+MT3/2Cwy3tnAIxpMpB+MCYz1CaZyQCBQ6yZp0HbmuRkJLRZqmJEmy5IVjnMU51zt1zRnxkpe8JP26FADTasrh4SHT6TQwE7P0GVV3M+e/r4QLsPjfAgkBhMBZi3W22dcbwiGO8Xg8n8cYY5ZHALSicWVr5te5KEcWOLG4G4iOTn1NpR2rOZYSwSIPNGLVkWsl577dLdLdPcRQhdUhVLm9O/qf9/f3C+toDHcUQSEr0Q4y7+mpEG8rmsVufu1mT5h0ODXb2CVIjVAyMG+VAKVBSZwSOAleiTAuUOBkKAK8EjjRhAMtILDeg3CuebMGvCF4CwZEAinwCoQU1LamNlWj7VWBx2IcWocHKuul9Ps9tIz40HedI8GaeXJsDLSma0Z0F5FL+m2xGvLDwuYac2kTHRu199035VLT38W4b3X1MfLhcQ6XoqvjF8uFQOw4RQTlEGL1mOdFiI+DGaLLLyH2XlpqIiE60IRFBY7sODeLry+IJiVGragjQUxtftJx99lKYyJWkSovOpoMVtCA8Yvf8J2Hh4dorTkcj+YowMxp71i0eLaWG8uJjU1uvfVWaBDdZ7pveGO4dOnSnA8wNwdq2P6LScqizQEwoZHsZQk/8eNv4NWvfjWJlviqZJj3EVLO325YYZaZ+jJJONg/RCpNUZS8/74P8sADD1LVBqkSHFCZsFmrRKOzFA9UJnAlZg10W7TV5jhoHSyFkySZG+Y5PGrQ63/L33jVnc9/7r0nvi4cAKV0sNg9GLElt9CN4U5VmWMKgONHBYsXse0IuIIOtBaKEAQkqZvsgaqqqOt6NQfAx4hH7e4nFvoTIcV0ze18d3W86lsujic/LZHDWE0fFG2iTkfeufcdQSh+FUY9qv4tQjy/2N+33gdFh5WBLKcFaCyZCCOAnrCkQOKb1KjGSwcFXjMfAXgV0iG9lPN/I0XDBZANaiDw0mGVR2qBVxKhQhz0bCwQioumkJO6eaIb/a4EqSTIBEGGdCnea6paUNUl06mhriVpkjf3liBJNFmW0B8kLQQgJv+MIEoxR7eVMJYI0WyFDOZWnSdnBWs0POoY1zwRKyA65tcxYys6kixj8/+uFJQV0xzRwS+gwy0xAmv71gx8Xae8dJytmO0uJ7/2mjB/f6I7nKhzTh+RHK54MrTDusTydadlhbyU9SEi5EwR5/X4dWqJdUXMGk+J5lv7+/t/XBQFWmsmk8l8w7LO4bU8fgNwfo7Pnzp1ihtuuA5b1UEH/ww2D6010+mU8+fPL0nJ5/bxfmHev/CIz742mUzop5rvec138jM//ZYmriS4BThvcEKHACFESLltvndUFQQDo9H+Pg9+9OO87333sX11h8FgEJQIaUYqJF5IlNRY53GuMfXxjhnJPtp9+yPfAq01eZ5TO9uoCCzOefJer3/L9Te+Ju1lDwIXvuYFQJ71OJgcMh6PyfOcNE3DCW7uANnaW93xE6fo5j8vALwEaUK8MKZhci78TOOR7Txzv4G6ISfW1pBlGaus5jVRu76V1LZoi8q6cCDiG+/KeiAiBL0uf/5Y3nz7gT5OYuVX9cdLjOoI1LvsmLaFlM9W0p3wjYQPKYJm14cUu1RALgISkOADWUdaUE10lWT+n5MKKzVOp5hUY9MUrwUqEQgFQnmE9ghlQZsA+StQKjxwFttEUOsmYrjZ0KQC6ULqoDDhMxKLwvsU4fsItpiWCQeHjmLqqKoSSII1sA7R1aEIyLoHo74FQ6+N1O1IdGv7NSwpRHzTKUac37yjU6MfM7cRa6RhMRSoXeAQK3g67KtFV9nvIxtNa7NdOUyxnKGwTt3gO8yU2oWAZ5nwuiKL7JBstpuNmPsfMckw8fFIOxMiZuTTZumvOPGtoW90rUNL1y/SGHAcraitYvIRhYenHBd4Y4MNcENqU1IgfY1SKc741lR7cQwQuvWkOU2bGxuc3DqBMxU6kSv0CZYkcjOSnGA8qbi6s4PzBKa9StCiWQvwuCY1Vs6BINegAQ5fl/y159/Lz/7MW8jSBIlHaU0xPiQfDjGladYj1YA2jRV9E043mUzonzrNY488yp+97z4+/8gjiCRFZT3stMQYG5oc70NAnndIreYz/TlfITIkWUzilSpwAbIyoQBcQ8KfertRe3dXVUzyrwsCkKqEk5unGI32KSYltfUMN08wLkqcdU2VdQSJ+BkvoNH4SyGXfASOWP+z9CWJIFRHIQBI4pxuuk5Fbe0cEnPOLT1PdnbirGVnZwepFf3hIDLf9nFjlSiPJ6YFjjkA+rjFcHSzh2P909d5xnfGhLaIVKLFOhddm4CP7xPN8Vde3F77EKbhnQWh0AiU92jn0EqT4ejhyPBI5fGZhQREIqEh9kkp8GnGRGr2SHj88oRJ3qO3uUlWevKeJCUllZYsKdGuQuDRwgWfgUThlEUog1I1StqQL9FgeU5YhM4QiaeWFU4KVJpT+x7eDhDqBPujhPGhoCp8kxrmUUkChLGGliJYh7bh3jZytDIb9t1oS1e0cxeU2plZJeKIUuc90y4COzICfMfYQUQ63Takvth9e9YQDmOJmD6yqbQ3WiLKGNGy1u7y1o98YS3xtu2sGDPN8REPjdY1jyqDOhA+vyYPpKubb6d4skbJs3JfdKguiKkDWn4EK0VZ2xcD9rd3wDqmzuGkoLQWj6ancky1EGHrRTNZWOCPeUeuE7ypwXmefftdKJrn0VmsMUihG7tfFzZE58PG7TzeC4QMjPhHn/gyXoBOE+qyRqEQxpIOhuzv7zPsD0iUoCwmJAKcrXB1xbNuuoG/99/+MnfdcjPeGrzwTCtDvrGJqSqyYc7B7i7pcANnLXVlSNMUYyw6y0hST11MePs7/oj3feCDWCFRaUotFIbgjeIb5CkURiHjxDuzfJWbIgURipb51FopcGCNQ0jJcLgZvAsOD5lMC/ZGB/ozj34h3xpu6t/69f8xedOv/HL9NS0A7r7zLvZH+wjnmMwqGCnJ8zwEP8zjXMXcl9nN3I1aJkKLMw0p5JLFY5g1y3mnr1SotGQgOoBrKq/GZniGQPgmKEIoiU6Txgegw2Bl3SJN16y2vRD69c5uoq3VlkRdudrEJ8+qOcuKFjoS0NFe4Fe0v3QHwLQ3iZmzl7FMpjWmtngngirPS4S3aCDVklSGaFrZsP6dcsEMSIAQCiEdSBHmXGmPqwU8erng4WlBlVyinyb0U02aCZIM0p6kf1LT38wYDFMGuSLNFP2NAVlf0B96Uu/QziO9I1MKqcFVFp0KhDBNvniCtX2cG2KrTQ72DcXEU9WOxCum3oKwSCXQWiC9q7aEPY/XNyG87k5L7GqmIz7pbU1/2+t+rSHfQse54pff8uJfZzkb879Y6RT9mm6eOFQdzbfwkdm/6Cg4234AIo5sxZC0dvGxsvf51evh181JYuz8llxzUTq7ku7X1TC0R5As+wL4LsDpGKOlTglyLPipNdo51jeigzS6Ysq0fBzTgzHeWIq6pHTN3N9LpJdIPHi3RBJv3x3OOdIkwZc115w5S6I11lYo/FxhtE4r74xlZ3+P/YNR6IqdQ6kEazxCKPb29snyPOQCeOjnOZPRLluDnIOi4Od+9q288Pn3kmiFNQalg6zcWx/G3HLKcDjEN3H3vSwHITCmREiNzjL+8O3v5IMf/ktKYxBKMzUWiQGposf+TDz75j51Xiy56QoPsil6PJLLV6/w4Ec/vvmsO+84fdstt14HnPuaFgCvfuWr+MgnP0Y1LSnPX8D4CqM0/X4/mAJVdWDqNxfXNWxJGsa3XyD4LVv+irl1L4BcsPidM0i9J8uywPCvA7PTeRtpsMR8HjQcDo9/gGibibS76GPYDZ1abVYfwjaJLzZWaMPysYWwa0TQdh07TmrYzl6PQIzjScm4mFDV9fycCecRzqO8Q2uJUgR5oGzOhwxGQFIeyYekgDQR2CShLuHKBJ7egW3vcaqEJi8gSxxJ5kl7oRBIE8Ugl/R6mv4goZ8Ler2ENEtIBpp0Q7O5IekNJBtbffINSb7hyQaSrK9QaoCXG+zuTtm/WjPaKygmBuPAOYESCplIMi3JE43APgTc1Nm9R/LPoxvvSmokrW6K5evV6qaWNy6xLGGLachX+AYdN/66HIO2sc66TPg5e3+d1l908Bw4gpHbRNUY16Arx2OpWY1A9zGb5RXkQKx2u9Hz01I+rKiLFmHxGPej7c4oOjZo36EQ8HHDJNFypvTr1jjfzb3wx9d9cUTh6D3s7u7ivWcymVDXdYD4nVts9Ltn3DQyvkzharjl1puQWlNVBUqrpQTARfsg72YE8/DdCxcusr29DVJQW4/SitoYEIp+Lw9Ru1Ji6ymTombYz9nZ3eNHvv9v8T3f8z1snDmF2T+YH7P3s/FgQl1W6BMnKEej0IAqhS1LkAKlNY88+ihvf+c7+NznP082HIRAPK3moNVX68+3GHk82+uUUgElyRzbV3d47InHt17ykhf/psC/6c//7e+OX/Vjr9v5mhUAL733+Vy9eIndK9uM9vbZn4wxdT3nA0xnukQbSA1+Kb7czxUDXUY/MSOgGUogROPCpJpBgZS4ZqQwKxCED4WFNSZUeP3+MeEtdGijWdYB+45NINZltSvzNizf9ogXHYREvy5oJmITK1r0UdH1cLc9EXyccorHeBiPCyaTkrKqWqgNKB8kL4nyDUmlmeXPNMOSxhUo5FY7b7DAoZUcGtizigvZCQohMQiwPaQFXRi0Nyg8qTYkiUGnFbUeoxUkGtIE0lzQ7yvyTJNkmrwvOXFKMtgU9HJB0ktQuo/3I/Ks4uOfnHDx4j6HBwYpM1RTiCrpEVrTG/bSU8P+axYLNes9hYHHCkNpHMZ5hBRkWpIpSebdU6cydVOiBI3PUeA/Hi2+dXPpRPh2JBtAxKR1Ldg1VnC2uSptxr6PkcxYNYRZtKSObR5LFU0EYVpnk+vpRs0WN31BN2ehnXlBjFMh1pAKiVh2R46V4yyR22M1VsJwomM11hTi7ZHHyohxQRm0AtX7lo+CX99GijXH1AltrQsLW/737u4uUkomk0lI0BOicYr1S0ZAbRXo0e1owQZuz/XXXz9P65trh5fej2wGv0f/llrz9NNPM9o/RAgR2PZShaS/RDAY9Nnb2yPv95iWjixVjMdjbr35Jn7pF3+RYZ7jxhNqU9Lr9TCNk2Ha65GkaVAgVSEdMMsysBZjHL2sz+Fkwu/8x//E57/4CFnWAy+pakO+MWRa1UuhdV9NARDjzKVpivRwuD9ifzzaePCjH73+rT/+k//40uXLbwa+dgXAbdfcUN5+3Y3ZuXNPcvnSJcaTMa4MzPuZ6UJtDcbaYPgqxFEYkHNIpZvNOlRvWiq01igVNI2mrhtv5iPmppKh+kM2iU+AkgolJDQX1zYGQcaF36lN2KzmVsDrOvm1D18MifOdD0B0INo2Ful6uFdIP2vZkhybz71OurNEbBPxYkeAAQ5GYw4PRtRVtVIfSWfQMiWRAuHCxu9lIP+JRRKgEHjl8WmKSTMKYOwkY5syNioQY6Sisk0SGBIhkgbXU8hC4icKobbCQyhKhLBIYZDCkKYGqSHvQS+HLIfBBqQZaD1EioJieoX9PTh/oaQYK4KiVOC8RasUrRT9YcpM1eo9PFqWH/7ik5e++eGHHuHCU9scTitUktLrJ2xu5fSUIFfqpn46JO/npHnOYJjT30jJ+z16acpAJyR19VvXb2RvSojM4GNR0zEUqg1/dwaz+G5eyAq83gE1t4vXJW147D7qspzsINt2tpxtaLzLclasoijrHsUYmbYLnfGR4/d0jFPaRbboqDoihUmbxLhYyEcTJGOvEylsxBpPhSUkwsenINHbqjVe7CAS7u/vk6YpRVGEka2UGOvnwTYrNBMW4exg+23qko28x9lTJ6H5G0uIjpcLngBhpOrd0Rt+8tw5plUJOg2BOfgwhpaC4nBMogTO1Ejh6aU9plXJL/3SL3DrbbdRFwXWWbIsQ2iNb2yMfUMsT5MUW1ZoodEywdSWbDCgmlbc9/7388fvfhdFWdHf2GL/cIwXCuthUkzJh33w9mtOzJs5EkoPSZqye3WHC5cvnn3Xu9515+3PuuO2//c3/pfpD/+dn/+ajAJ0nqVvv+fZz3nxpz796eu28v5gj4SJqygmE7JBH50muMpjlUVYv6TjX4TyBUHLOHNQ0jqwIGe+0d4t/7xzDixz05jZG5/9fSkDEiCtRSiFcRatdSMDnBzjxd/BzBVdM3W/BlUQcS/uFflgLG1QxLs0WG9G4p8hhNe2IY2tY605tbEw3dtjWpTUTQylbBi7Go92Bq08STMCEDKoNmYSvyDVE42eX2CVYOIde5Vj4hKKNEckaZNt3cz/vAghQa5J0hJBcyuExjuJEBp8Eg7Shtlg7cJ9MToAh0UnhiSxJKkhBGONqeuS6VSjGOBlQe1sMB+ynkRnDPMh+eYpJFAAn9gbcf8HHvjmj3z8IZ54/BLjgwKlemilSPuKJEtJ84RBqhmmGVmWkfcykjRBpwlZltDLNBohtrbOvummm68Vt956DXcPNenK6Fl0yNbaxkA+PsP3HZtxdMbcbttbxcPKPL8DvxQi/h58hzSuTSJrz9ijfLkuJQBx9GyJ/NpxXiJOxkvoxmKhLo6TI7ZHAm0Jr1+zQcfUEWsJJpHzFfMuiFzPzoYlwsuA1QYiNs5YLFCbL41GI5IkmQcBSSnxJriG2GbUu3o3+mZNcSglsNZw3XXXceLECZy1c2J5GBuvHyKM9g94/PEnca7pjlXjBKhmKbMG4R2mrsEZLm9f5ed/+s287ntfy/jwgDxLcCbM2V0d+HOzQLm6rkl0aEqSJFkIrpN85rMP8e/+w++wNzqkN9xgWhu8UOT9DSpT45yj3x9QHB4+I0Oj9b1faITlwtKglEI1e6o3lqfOPcX9xm7efMdt/7is67e8+1/89uTbf+pHtr/qAsBW5h/Z/cPbbzpx6p+e39waXL66TVmGOGBSTdbroZqN2PmFys+HTUM02cZZltHr9eYBPlIG/aPozZyN/DxrYObkZBaqQQn4xllqFpXodUiM0mkKUjAYDBoOwKQ1d2W9L8mK6UaXrMd3MIP98ZuyiHRsUS9xWqxf4iSfxcU+BpN2cZ/aMOTyYlC72rG/uyem06kOXg9yDmUp4dE4EuVJpWq6fx8K9Bnsv/DZa4XXMhQBCKbOULuaqS1RKiBBlanmBYYQAi91g5w38Jsz4fvN/eKaCE9rgkNXIhMcnqpy1MbjJ41fgJc45wGJ1gGdClIeRaIk/d4mJzau4aZrn4Xz8Omdmne/+4N86P6Pcu6pbapxRSIzrJk0oITHS9eMIiSp1qRJ8MRQWuO8aAKTQKtEbwxzTp7c4Dl33ca9d9/Jtz7/DjZkbJa6Aj+72Q1WgaoR83RN0VgtqNlpXr64ZfOPmZciq8qTRdhaRshsEYXA0oYSiUnuHGn5yMbtWYku9pEipX1fxqRsgvWkxxXSYbt7jygKhIivDesAEBFh6S+RCheLgFj+hlgdafiYz4PoRiP9utChdTyKDjOxaLTw6nkZvfBH3zj6nV97mxCCaVmGZFiVhBheKRoL8dlv++V6w89c7iQex5133MaJE5t436QJWoPSes0bCfvCxYsX+fKXHmseIY9MNLVxyMaaOFMSjMU4A87xgnuew1ve+uZgqGMbXpm1CMJYOdFZKCLqOmz61iK8RCo5dx18+Atf4Pf/8A/4xKc+RTbYRGrNwaQiy/vBD6GYMhhsLLgRfvWb/2JTLZr7RjRkfIxlf2+XwbC/9eG/vP/GH3796//hzs7OzwBffQEgy/qJ593+rNdsH+5feujxL21uDYYnD8oCgQmsyDxHaIUyag7LhwvdGDE4R5qmDAaDEOPbhDXMzBBmPz9j/8+cjmbkh7IsMc7hIz8rZdiceo2mMs9zrr/u7BvZvvK2pTttpZgVrHy/nSXefsCjOdyRDqWT6Rub97aJYP6YOV1rMfPQmTzXljCKjmFca0G6vD/61cPp5B/sHxyGjnk2h/MW6R2pqOnJINVDzFOAQhHQwP/B7180Ns4Cg8QYy9RDRSDYIML9IqUKVp3M3P4kbsGHPlECvAk+20I2slGFm+WAC4l3rkELAslPOIEWEtcQFsuqCiRToTC14ZqTJ7jmzEnuvvPZxaB36j2P7B3+zQ/c9/7eh+//JOfO72BMKBhqV4NuHA69xHlJVUNlBR6L9yaoUFR4D9YeJZhlwjHcHHDh8lWuXN6mLGq+42V3syn9GqJnuLCPje0/ODeufvXSxR3Kw11cPQ28hbxHsrHBsN9nkPfJM02uNVor0kT/ibT1v7o5cb8zp2LEDG/amxcRvgs+jnqJ4zanCL4cVaGKCKEtxmVoJeotzeVZP18Vx+jdfQei51uFdWexHqcVdBYj0DHmiIwf6SIH0kEsbf1uF6myfc26FFFdQVQtdUBZlm+bTqfoJp/FOYfUR8oupFiOhp9t3d41q0qQiXshuf766xkOBigEXniMtY1c1zc/2f4b4fP21atcvnx5XgAkUlH58BzayjCtSk5u9BkfTNFa8it/7+9y9vQpymlBqiW2NqGbliooCKTCmbC35b0etipDA+QEUqc44/jYxz/Bn77vPryQeCFwPsQfC6WYFFOMs2z2t9jb3yFPvzqHXrGAUK/0sFKwsbXJaGcPLwQ7V3Y5f+LimY8++NE7r7nuult+69f+h/Gb/v5/99RXVQAkXo6+fOXpf2WL+pN3nLnhf9o+HJ3cGR9gneSgmlIUBdO6wpbVHJqQBE2j957rr7/haMNeMFQRPhD8YtaVSi0HMDjn8NbNZ//W2nkAkEp0mD8tQDfxWVwHq7ZLe730wPiIjKoFky0+hMdV4YvuXzG71c74VbphWd9BhiImffQRklPzG1n2K7tTI8oGDkM4vGtGMZUhBYZaoHEI4cKTqIMCQDSdv1BgRbhBtUjBKkxVUViLS1KEUISkUE1DESXPE5QKqhFrfIgVteCpm0Jjhgw0rFgvAIv3DilFIPc5gRSaWaaxEpK6tiiZhWNzhpNbfc6e2eIbXvRcvvGlz8Xa+txnHvoyH3nwIZ4+f4WiKML9qzxeWJyocV6QyATlwkjPz6K7Fro850CiwAX50dQJpjtj6nKKrR3OCXQ+4DtfeBN5R/hT4T0fu1qKjz/4iV/99BefELu7uxweHmJN8D9QqSbLe/SyHv1ejzzv08sS8jwlSfvf3h/0vn042BRbw5zNU6e4/uwpXtgbh0JARMKJljh+HaOExe/5Vhqga8UZd0XeruUUiDjPRYjVzXAOP8ckb6ze96wh1XYSgVktsgXdPhBRA74Y2heRdz6TEcA69MF3RSDHXPvaiEHHwa+c2y6kCq5cuRLc/+pq3rQV5RSVZIzLgiQJY7KinGJr0yC/s+7fkWiJaJRdL/hr9wIh8j0bpCjnsNbgPCSJCoifc3hrSXWCHPSYbO/x0EMPYRqu0sZgwHg8ARX4YrU3ZFKwt7ONxPPzP/vzfPM3vRyFQCUJ3oX44l4vRegEZe3c2ybPc7y1SKkRWlNOC7JBzl+8/738m//nt5lMS3TaCym1ztLr9ajrGghod1EUgTQYIfGtI/nFSIA+8v+z67C3t8ftt9/Gw597iKquOH/+Ah/++IMnvvu7vvs3VZa++b1v+3eTV7/xh/7KpEB90w9+i3nnr/8fl0Sinr7t+c+dfHl0mQs7V9neGaGkmmcE6CQJyX3WIhBkeZ9Bv7/i7x9j+6+rfhKlccqD8nOEYVEFEKpDj2mQhnz7c2/rNFDpyghfMQ7pcHxrcwLWjAvj8zgf71DWLZorPIQOk5DF7y0t2iwvPEQWqaMX01Prh1UZ4pbn125WmDnIBOTCk4iQrOflUcrG0Shg9llgBVRAbUMhYRuiKF7hrUcmlptvup7rrj1Nf5hjraGcTCmKimlZUk4mFMZQ1wZrmgmitxhjkSIJYwjvg/zUeZxVOC9xNnAUUqWxriDRio2NIddec4KXvOgeXvGKl3DTKfKn9iY/9/CjD3H+wkXGhwUq1RhTB3gykdSusUPGB6+KRKw0UjNTK+891tdIaQMxEhhXlivb23zhyz1Onfo819x4lleczVbquzHwJ595ig8/+En50Oe/yPnzV6iMpapqnE0Bg9IuwKJC450LYxQpQtSCkKlUil7Wo5f32Nra4tSJTe55zt289KXP4xWn7DL/xXdQ5tuxtuugcRGJ3Y3NvXgzRS8AACAASURBVFdihH33fGpxVCEWRwJiGe0SbelrROGyVHSsec11VsQrhMbI767M0Dvhgch8vU1JiHCInomPQntUsjTWIbIOxpxIO5ocESEqe45C2JqRrVv69bB2TKsSIURgrYswx3be4LzF1h4lJbffegvPvutOvHckSUCNjanIsiyQx2fkcC2gluA8ZnTAlcsXuXLxIpcuXSYDyqIAJJuDDba3d9kY9BlqyZXpmNd8x7fxQ9//ejb6OTvbV+n3UrIsYzAIpHHXsP99QyqXzfOs04xqMkWphC997vO8+z3v5eLlq6gkw0FAIJE4ApIx18CJr106r/DdXgj9fp8vP/E4p86ewdWG0e6IS7s7W/c/8MD1P/q67//vL1658rNfjSpAA9x5+63y1P5JcW7/6mF/MNjZGA5PpXspaZYwKsZHdr4IpFD0sozhYMBGfxAMGJqY9aNmw4M7PjnQiQZR8L5xiJNLXgKWUBQgBb6qWjkAEevSts5fdJDy2jd+FymqU/McI275uJTHR4qQGDGs3YF1ZYxHZ6atDkawupg273M8NlRlNS8AFiG3VHgS5ekJh5IN2V9KvLTBmn9mAazCzNxpQZUIJtZT2ZraCewiLu0EG8MBt9x0A9/yqldy3Q0nmUwOKUYj6oMpRTGhqGsmlWEyrTg8KKjqimlZBYtN6/AYnDNU1gb2sfXUxgUYvykSa7dFlipuuOE0z7/nTl780ufxwptPYIELVy7x1IXzjA5GOMDXDikTkI6yNshEQg+c9nhMuASBmoAwElkHv3Etk5BnAHhpcTLcm9aA9z1G+yO+9ORlnvXZR3nBq+5lc+FeKYH7vrTPB97/AJ/43BfZ2d1lZ/8QISRa9cAG329nJJW0HEmh6nkAU3ivoWNxjSFLL0n5xCc+w0MPPcTu934r3337yQ51QKzTC/dlCXxZnz6symrovA+ZEDohz5L33FJe/TYWrOpVQxRdTfqLFb+sQbgWnxGxhsMWG0uIyHtrz/wjhXJ71NCl0IlZd3viLopRDlDktKwUVeuQvQULc3y3Q7noGocs2vqyhs8Rkw6LJWRgf38fay1lWYZ1vjkHbrYuCLDGNqovgbfhPlWIoOryDpzlZS/5Bu65555AHUoSbF0GKaFWWGMRTcGghURqia1rJpNDdq9u86UvPkyqBHlvwH5RYJzHVjXe1ghruDoace+dt/PjP/Kj3HbPPUy3r5IloUs3VUmSZdi6DjJyIUi0PrKkFwJXGZTU7O3v8/Z3/BHv+dP3UUwr8s0M2bj9uZU0P39k9vM1LASIDdoavwSdJEyqitrV7O7ucO7yhWvf9d73FHc++1m3/evf+GfFT/ydXzz3Vy4AMp2kt958471P7W3/xl233PHPz129fCo9n7BfTJA0JD5ryZOMQb9PnudkjaNSDPKYkcqOQwCkB29CZSn9MoQihGjUZsEFsJoVACs2ohHKe0wSE5tz+YgGtz1SWIESfdw+tYvEI7o4BbEgpPY8fw0Ra4VM5CPSp2XnNI9nMp5S1bZ5Kd8En4XXTZyln0j60s9dAL30IeVvNgKQMwSgSf6Tgto6pqbGeN28ogMUXjiyNOXUqZPcfuN13HHTtWR5YAkLCxjHQVF8oJTqlUVZUTby00lRcng4oS4KzHhEUZVU1lIZR+2gKA11XYb0SAdCJpw+nXPLtWd53ovu5dnDPomHQ2BvtM3u3i7WWZRMAvM3E1gc5uSU/FpHckrg0orSVdQWjAFbgy9BTfq4MahxmHso17iRoRAStJZYYxgdFowO9rg62ubxCTy/f3RtP31g+MRHPsrnHn2S7au7HJaGtJfhrWu8FhxKyhCX7AL5cTZjtY1axjmLmoeg6IZQC1eu7vG++z7E/niH9E0/wLffsNXNCl+4XabAgyPDo184x5fOfWh4+fKVYMyVZvTynBOD3rdlOmFrc5PByS2yPKPf77E17HFyOOQ2sU/iIVnehOYPjBNgfShlXNMxzjxE5iOFpjBVArQHHY63cQITMrDMOubjMUMe38EJaqODRMh9z8TOOCrdi8kaRRyNEKJ7vBArUlbIlBFzsHXrwwoC0T5Wt4oGLaA7u7u7WGuZlFNKE4pR1xQWM8WWUqoZ41pMXSNxJEqRKIV2AoXkP/vrL2e4sYEpJ9CQ8dI0Be9D4eAtxlR4rxDWMT0Yc+XSZZ584ss89JlPo4Hx+JDNrU3S3oBpbdgaDDgcj7hma5Mf+9Ef5uXf9I24vT2q6YThsD+/HW1dz4uXpLEIp0k0FEA5rUiyHvd/5KO8611/wv7+AVunT2NcQDidmKUFSv7/+JCeJWfF6XTKNddfx5WLF5AI+htDDkcTnn76aZy1J26+/Zbf8Nb93B/8r/9i8tr/6qe+YlKg/otf/5fXjS/vXX+h5//ilutvfMOV/R2R6gQhgxuTxCNFCDfo5zn9fp9MJwGmaeY+R7Nx30Vr61TAzJMBZxv/LARIHEFNSim89w0CENHtioglcJuwsza9tG2X+wxZtysuYZEKPJYCt4JGzCpJQadVcEftsAw9tuajrfdngPF0SlXV4co2UKRsbK20d2RKkMkAegkRiH++cQCcjQC8BNfwA7QMdp1TX+FIAsnHOYQ3eBkCNmtrmBYFTKeYpEeqIVHBRzvLBq/0gKOH9/6AQBIaeI90NDN5Y5kWk89USj+vKB2Hk5pJMaKqJuR5znBryMks/fSNG/3n5yyDPNV4SjEtqY1BqAzlwmZa6ZKN6z3P+sYbGd6mOPBjRn7E1BrK0mCmYCcKNxa4HUG16/EVmMpitiv0Xo+e7OF8CEipa0NVTdkppuwclMHAADgQnkc+/nkefvxpRqN9xoWlrEukbkywsDgCz8EJhxWuia0PF08lyZykFJxXg3RKi2AXmuiMqp7ysY89xNbWu9l644/w8qHpJMd54Ats8pGPfJwP/2UoSnZ2DyjLaaM7CByHPEvJeilZmqKTlCxLSNOU06c3ObG1xQ3XXcOdd9/Nc2+/gVv9VbyHS27zn1Tot46K8XBUTSirisPDmno8xhYlwntIepAm4dZ0BqlA5T2Gm31O9lNOJpqBc793bVK/rhc24JrGjwrf1BtRd8EW8uB96/mie9QW7abFMQY7vlVs+Ghd8pUhJDGjJH+sWc/Sz8bcR6NKkcVGQkTsoz07OzsYZ5lOp3MToDlHR0qsD2Rg55pMkZlyxXtco/a67bZbeNGLXkQ1mZCmGt8w53WWYeoKqVW4vFbgcZTTgp3dbc498TiPPvwIz33Oc3joC1/EFhNeeO+99DdP8pGPfYy98QHDNOOn3/hGvu+1r6WfZVhTsbmxyfgwSBeVFiG/TMjGctfjTY2pZ2RzRZb3+fSnPssf/uE7ePLc02xsbqF0irGO2jqklq0tw0U79a/Xh/OBL2XxbG1tYaqa0e4+20EVcOKBBx64/nWv+a5/cPHSxbf8VVQB2jn3+5d3t396201vLjU/9Pjjj18zmRZY40ikonaWfr/PxnAYEo5cOCDZbMzHSRyOm320XQNnuQPze7OBqq21ja1wawbYRXCK+Yq3RwVLm2ZMMiMiMqk1D+NKtG/byW3NDLIzlzvmTNi1sMQIj0dQq/FweDDB1DXOWrxYZpIL7+klIQdAicYKWISNHyEaN8A2B0BSGktha6aih6Dx2pahoDmcTHj6/AX+/IGP8MWHh5w4vcVgkDFIFMONPmneJ8ky8iTD19V9CnF5a/PkT8omd0DpQBodZsPnCXBqA6k8CDabyy+ah1I8v4XEOGM8hwcHorZWWOdwvkZKhZMG268YnFHc8MI+Z+8ZYLa2GMsTjEyFqaHY8biJxJeK8tBhJmD2wF+UnHvoPJOHS8yew1tIUol3AucNdVUHYt+1PRTwVCG4uLvLztV99vfDTDXPczySqppipcNrj/dVIPEngejo8M38tQweDUIGlKBp3JwPNqtlbUM35eCBBz7Di174BV7+yrsirWE4L5+sc/7sfe/jvg9+hMcee5JyaqntkRzPNdyDujbUuwXhJQ1KhkAvITy2IUXdeutNvOTF93DHnc/Ge8+lJz/yy9vjCYfjCfv7e4xGhxgTpL/YZtarFFIqkjRDK4FKFGmaMBgOOHFyyIk0ESevueF1N9x8LadP5tyQpfRw775RVt8uogE3EapLjO0fQ9ZWAr/a4UYdMdtR4nFk/REdsHs7+XPleEQc0exqIJbklX79OiIi3CDRKpaarXx7exvvgwLAGBOUNtYtob3OWSyQCIFOFNJ5rClDkQq87GUv4+YbbmBaFKS9LWxdgZKgFK4MMeRJEopLpRTKQb+XM+wP2Bz2edUrX8HjTzyBSDT9Xspob4eLVy6hgB/+/tfzA6//Ps5cfy3lwQFZHvYHay2DzQHTyQSV9eaXv65rlA+vhQxcg53tEb/3h2/nLz70l/T7A3TaYzyZkvYHTM00KqRpT6C8+PoVAHmes72zw3A4DNJ86zh1zRl2rlzl6pWrbPWH1737T98zfc4999z8L//+Pyr+9q/93a9IFaCR4s4L21dvP0z9b9x//4fPPrV7Nb26fRXraiyWjY0Ner0evSRF0MQbNpVfjNG4COE/IwLEQud/JAv28/t5RgS0tlnoVshARDK110iIupJ/6WDdtrkEnQtCm3jT7jD8KvTYOaKIGKzMTwhx8mGX/HCBX2Ut1Afj+Yx9sSaZSfx7WpFKQbO/B+9rKUL4z4wAKJvrpiS1gEPjOKg9U5FglcY5GypuKRgXhse+fI4r2/sM84ws1WQKNvs9hoMhaZ7Ty3ukqQfnvrWfJwyHQ7nRP02eD8jzhP4gZTDskff7cqjTR64bpHemHrnslb/ydPqd0eHbpuPx37bOEoR/AfrzwqN6jnRDkmyWqGs9Ez2iUiVCGJRUZKc0iISxqVFOonzCcDRAPLbBhd2rmAsWMeqTaoevPSRNoypBJ0fctasHFZd3p5TlNBAdbYmtNJBBmmM2LaSKGktlDBIbPDecBwMJaYAybXDe9LYxAlAy8GyEpzIlqc6ZFo7PffYRPv5NL+HF2f7K/fwlufHP/+KDD/7cn9/3UR5+5Emsk0zLCSppwkfczOLV4pzFYRFCoXUP4WFSBs8ErTWjwwmf+9wXeeKJc+T5faELBFmVFWVdh64LjzFB4htuRREklUIhlUeroL/WiUKrDK0Vg0EuNza+xJkzJ7jhmk22+n1xza23fsddt1zjb9zsHd5qx8PVxrmjuPZtqV1rpNdFlFxcC+ZRzj7mq9FaNwQdKUYtzk8Ljl/h7LA+TCpKROxCH9qEQr+MGsy+3iYpCj/PAajrGmuD62sgwroQA+4csgmEE1KitcJVNdZDrjWnNjf4m6/+tpBzr1SQ0jRKMqpq3th5bNMNSpJeytmzp+nrlExpvvjFR7j+uut44sIFPvfZh7hwZYdcCP7L13w3P/OWt3L29Ckoq4BIl4GQOOj3Qpy4CxbyQU6+YF2fZbhiyv7+Ae9857t4/30foKpqNk/1qX0IOZtWwQnXh8ijleVFMgtB+vqOBkJwnkJqxcHBAUmScOb0KSbTgsnBmKcunMdZe+I5L3jePyud/cl3/N//uv6uN//EpWdcAFyYjvqX9nb+7fs/fj/bh6ONS9tXqGuLTlPOnj6F1GouyxOeucGL9x5jTDNXOdqofVMczMwMvPedDe5Kkbrwd+ZuqbMCYCF3IEoGWnqIWtGi7c22U8bU4gaEf1fzIxQkK8S6lW6+LVGMSG66iqMV+FHEw1ViRildDmkLH8bAuJxSVSXGmmamB1oEY6fUQypUsAHGBThYzeb+IQYY3UgBZSDRWCGZWstBrZiKJLBlaYxomuPfHZXs7O2SKEiUI9OOntIkOsNLhdAerUFr1U+UIO/16OfD8HmQ0+9n9Ac9BnnG1nB4103PutPddePZT9250X+BWKPHtGn2pomxeGPx1qO1wlqP8TUi8cgNg02nVMmUQu1RJjWVtNRCUHgLacIYQ+k81mdkbJJtOurNkqo3BbmFqSyp0mFUJQWJVgyHA6SA2sPO9jioHeqa2tSkaYptzu7gpk1O3XkWTmQciJor1QHj2jEpDbY0UDkoKphUUDpkLUlqRzax9EwT3CTDeMw6h1CSpy5c5MmnLvHCO3uhRm+eh0pgPvXok2/50P0P8uS5C9RGUxtDkvax3swhXqUyrAvKB52kjVdHhfCQpXloDJyjlw4oy4JiMmV8OGnmuj1qG3gMWRbkuyECXAMy2LfWQX4praQWEhDYukLICq0ll9mn15NcutjjyY0+p05s6GuePs+5h09yy9kz6XNfdC/35pb+MzEB85Ei28cY8B1dwaKct3MkIDqg/chzuoIQHtsesRr9TJy82AkkikghwKqrolxVLU0Px3MDnRnXbVlw4FBJBqaeI4je1GjgxOaQW26+nhe9+PkgHOnWEDcjlAuoqgqtQ9qekJ5pUWGokVaQpBnDa3NuczA1Nd/92u/iD975R3z6c5/Hecc3v+wbefOb3sDtt92EracYUyIVWFuTDQb4umZ/+ypbJ09ipiVCyoB0ehHgs7Lk0qWLPPb4Of79f/wdLl6+wsmz11CZGpGkDIc9zl++wtlrrw0WxALwcgn+d2JBqfnVkP26XdsBqMqS4WBAMSnY2trCe8HOzg4nT55m1zpGo0M2tjZPfOj++6sff/0P/F+T6fSn3v/vf7/4Gz/4vaNnVAC8474/HVwe7XLx0mW2d7YxwiO1Is/zMM9xPswqFwphXJB3qCw7erC9WygCmlmRACHFEjmwfcKUUgtOnQvkwWbvdnXoVJWWDAZ91npjL53FSLJWrAsg4oS1rLMdk/f/A8X4dSDOdAaZrNiUEocrF0lQ7YXBtxQKUVShY4Hooh4fwYt+73D0u8V09LraGBFcrAQOGypv5+gJQV8FBEBgEcIilMNL8EriVDMzkIGnARIvFOOy5rAWlElGbSq01OEeEIE8Gt6SpHKCylsK40ltFVh2MwmpmHFBPKmGNElJ05AQmPUS0jRBqYStrROcfvRJee+dN73g6su/gRefOUHqY9HNQhXWYpzCW410GuElUAf0T1eQZqQbKZU4wKSWSlbUUjJ1Bt+D0hZYFaSCVkryTDEtKmoqkI7/j7g3jZYtPev7fs877L2r6kx3vt2tHiUhoZaEALWQZCEJpAACASaWgAiwWAEjHNt4Jc7HrDhxVsgHs5zExnaS5WTF2MHMGBNmI4QY3UKDNYFEt9TT7b73nnPPWFV7eKd8eHfVqVOn6ractRJ6rbNu33Pq1N17197v+zz/5z/41FAq1WugLVopSmMYmjzjDgjtdIxrG5x3/aFlA6Owmbh4zyXe+M6vpXzpFh+Xmyjd0DrF+KQjTiJp6giTjq72mGnCnDjC3jHuqV3ap3ep+lF/CAFjBEQRvKMeT+kYUC3wWZ7u7Me/+Gd/+tjt/X2mTQNkYxQXbc+3iyilCVERkkKrEh8iMXmsHkDwJB8RYxCJtF1C6Yrop2QPJk3nI9oM8ijEC9oW/TihzWuIZLZvDI4kNt97AYwSkFkRYmlqaOopd/aO2BvtcevmkJs7W9y+5yp7d/Z5+lVfxWMP7vz5g6Z5+crkT0nnkYH5Jh5Xk/bORTAvBSWtDM5J55UNskwwXuFyyN04DKtyRVYpB1gZ9jV3gLwr839FdsLSuR29+jt/VtzH3lsYOw8Ecj5iTEE0hjZEMApHpCxKQt3gg8OS2BpUTA8P+fYf/gGuXruYO3w3RUyf8pcShc4ZWjFk3//CFCAJpU/PcfOeK7x6Y8B9L32Iaw/dz//9K7/CjRs3+O7vfg+v/+rX0kyPMCaPpUQyLyYn+cFoc4T3HcoooutQAdpJjVIN1c4Fnn7uaf7RP/3HPP388+jRKEf8Gg0x4NrI9vYmTY94zfaC1BcAiyS9+KIZL+sZ/jMvnWVLBzXLRwC0aEIbsGIJXY5vt7rAd4HNrR32bt1i984+w9Ho6q//zgfj97znO//O7t7ufwt8aQXAR/70k9RdRz2uCQaGg+E8jtAYkzv/WWpfv5nHGPtoyIQPCTGaQhuUzRKLGCPOe6KP+Bjmm3+MkcDZ+EMjZ/3/Z6mAMxa0Mhr0qYvguZlb+hJY/6tkUax5MM6IM/NnkFth5Nysb50fwPK/t0reNycHch5RkBXIRErr5xirHvYV0sbOqnc1vqYLnpBmnOz8ZYBShIEyFKLz2+jYw/0Q+zCgoMjEGK36ZDDF1DtC6tUcKn+lpAjBIaqPhpbMqI2SYz9TUqgEXjI8r5IipHwfOJeYhoC0nnB4gkoJrRWFNQwGe4ye32B3/4jjtqN+wxt4ywOXsCs6sdo5mtaRgixU3JGkImISaqMg2kQwCa89noAjEQgEgaAifpZZnkULxLYjuAZiQqWIREHU7LwVRgTbF7VBEq6ucXVD6J+j2f1vtytG13fYvLiJ3L9DYpfxqKLTI5K3VLFCe4P1gnUK22gGY4994ZjP/+qH2T04ZlB3ffR2vqZamwzTzm/N09Ch3bZ77ObRlGnd0jqPJj9PXYxokzf9mAyxHBGToelCzkNXhiAJIzrPdoPLLmx9oa+NRUmgDXFup5qSEEL2VWi7jqIo0WSmuOj8GYcISmuMsUTf4WOcrwPB52bCO0PnIsfHexwdnHBweMydgwm7hzUnu698+de8/mW8UtenIO3KuOA1gV4rA3BYbxm+clVfcgdLq+b/i0ZHcj61cRXqwNKoUVbN8e/CSTpn/7GK55DWAg4A48Pj954cHvUx4TJH9BKnMm16J9io86w61RNKZQhtxwP338vb3/qW3HFLOncqEmXhVGQJ2Tw9lsHli5hByfblizz0yIPceuEm99xzDyl2mSEs+dPXcSW7m67rKJTGd47hcARa8fgf/iE/8ZP/ko9/6pOIHSFKiGqx70t9rZgDh6QfjC3P++P/R7N/WVc/JHWmyEsCO9evcnRnnxdu3WQ0HF7/0O99+E0PPPDAQ7/4T/73+jv+sx+48aIFwI07LwCGajBgYzicQ/r00Yux92eT5YJxdrPoHNoSSKTee7nrumzx6/0ZXf9M278qAtGIOmMBPCsCcopTH/+Y496W5DrL0L2sccxafjjSauev8wS9DabTHzpbJCyH+6wj48mps9kyOiBr1Aisk/LczUWN85LGM8hEvhh1225EAR/S6aXq38sQGRhFYTRK99VpLn9A580tOzdKlgZKRgVa0XSTaZayhZrW5+AgUSWiVa9Z7480puw8mIAQiUScDkQlaHRWgojkl6VIDGD1kBQFlwLtNNA0juPxPin4nNwlmo3hW/xjl0b5QkvWIiaBtnG0XUtIHtFZlgiJkDy2AlVUSKHwknMuvKQZUyBvcHOVSoaq8QFfB0IXUN6clawKWKWptGIQw58j9n7vk21OJnRNo2cFQOrFt2pYoDdL0mZJvVXga3AWjkwiWqFUGsESAxSmQreaC7Xmmrb4K1vEskTbSOq6fsYZKArDcFRRVMXpZFIEnxJ7d8ZMxk32YleK6LOta6kSqajYun4PVEPqWHCnU0xcxLiIci3KdQyip9RTLBOgRVQkJnInL4aYGrQIwXdosYhorLIkSoLLLqFaEo3zWfWghRg0tVdoXWKsIuGIIYHSKPTcA6ELiTuTjvF0n5OJ42RcM+46uskBzdtez+t0k4uAu1swr/YTWPVMLkvwVnXO59C+dY3IEuS/0nlwDdl4PoJYgXqmtF4WtFxXrJQILptBcUb22LYtzgVsz57vH8r8cpURWon0ZOJAEkUIHjso6WrH61//el792tcSk5/f91nuLedqjyTnfY9milLpOmJKjLa2eOnlyzz44INMp1OmTX3GgG7xGqQFRVhRlISmIyHEGHjyiSf5xX/9b/id3/t96s4xKrPdb5IcE36mpFvBL1o89v+30/+U/kNem9Zz53rSfDmqmNQ1z9+8yb/7xMcuPvTAA/9dXU//9gf/+U9Nvv7933141wJgMNzKJL/eZncuy0vp1Pxh4fuzi26MyRIQF/Ah0LiGruvmjNHYO6wJZ/2i4xL5L81TocKZBXX2/3XXUrmOyXSak97uct+fe8hWVf2sQwjWVdVJrXc+W8cmXCHjW+XstcwUXutvvhSVeo4ImFZLktPZYJim80y7QOyjm7PHQx4E2BSolFBYhZZMZpsb/8y0/3IaBYxK87THmDyFwLZqqa3H+WzpmQSMzpVqIKLQBCKarB9PSvAqew2E6OYkNOnjU0XrbP7DzIhH4YJDguKFmyco0XzycxtsjDbT5Te97mcf3h68d853ACZ1w7RuiXiQmJn1QLQOVUBhDdiE53TzjySCyvKb0K97cYYch4SvA6kF5QXNqQtmYXKA0EBXXBzYlwP1/rj9/boev6nrGu37OSnk4EOpNGlkiFsFjQ60hcEV0KnMD4gpF1quMLm4MBqNQuuALzWpMrjgKCQvqCFGRqMBG5ubbG0VmIVb0wHNZELwjhQ8WnIHH31A7JCL997Pq175SjYe+XL+5NljohM2a5g2AVW36KYmdifQHeCne3Cwh7YntE1H8irPgVVBEktC40NBSAUTXzIot1AVuFTgmojoXCTq5AGPKKGLLa4bo5RHI6h+PJFSQFQiIFS2pO46bu4n6m6Ptu1ofSab2re/Kb1aH8laPshKpc+LQLXrst7PPaPLVsarRpFrVAdnnEDXsZTvIiVciS2nc+TE/Vd81zdf/NxP/+rKEeI5c7F8frdv7zGdThnZkjizx0YhKREDqCgkk7lABvBtM0diLu1s8c53vjOjhCGv/7NuOSk5S/hm/QY3axjLsiSFQJxMQISyqlAi2KLII8bZKh3T2XVNBKUNAY9S8OQXnuKnfvbn+OCHP0yIws6ly3S+H0t8iRsv67iVf0H/TadTBqMBXhSHR0fsbG5f+KPHH3/JX/nmd/+Xh0dH/xVw9wJgluA3myXOZEAyi1ucy/PkjDYxhBzgcjKe0oXsuZw3gzgPClI9QWnxxptBtTMCWs5vT6cOgv37z34nNHU/UsgEqtXznAUDowAAIABJREFUrDXzuFXkHVlaENaRadZRaldp889V3WlFoMeKOeMZGc6qZLcV0N8yv2HdCGPFYtK2jrp2dJ3voz3nHyhF8hRWKLXCSGbopplhlppRX/NX6hMBRSW0j1RmxAPbMCLQRIeTlqBqOp8/Vx+g8ZY2aFLqZ/KSg320yq1B6nMjYu69+8/GIAq0KokhZwbYQnC+RSXF3v4hm7d2eeaFF7jVPfrehxnKrDjywMnRESGGPJ5Iab6hSAG6EkxhiAYcHk8iCPh+SYp9aEnqn/CUhBQUvu6IHSivTgmrfUFcFiVVNcDobLvsjHmoDo3qgiPEheQwC1IoVKUJhaZpWxwRj0JE93PSvKpFH4mS2dYpCb5xdCFibcL2ECwS0RrKQcHFiyMGpenlnfmzDwKubohtS+r12Uoyw1k2ttm+9iAPfsVb4NpL2b4U2EtDimTgpMZ0jnBwxGB8wkMjSDc+wWc//jHa41uUhYAvCbGgSwXjaYHRA2w5ZDAaEFNBTJu88hWvhDTkTz/5ORo3IdkIEujcCVrGeN8gOKzuEDpibBHVYAqPqIYYHT42JMlSrqNjg/e7hBjz2KiwwlsfS6/hSM4pAO5mtZu4ezd8LtJ4hRQ3LcUOn6sbZAVKIOelgKsr+PNExFUdUFoXX564/dB3PPHjP/b3f7WdTOm6ju/93u/h3nvvxafI/Td/cy3ufOPGDapqSNt0/chwhgX3ZjWAToIyBqMF30VKa5jWNW9702O8+c1vxrUtZkFHj8obc+wvV46/ldVLVy/xNUaDLRDnwDmM1qgYic6fKRRkJldOZ6GPZlJTlRU3n3uB3/i3v81v/vaHuHVnn3Jzk85HENMjG9JfuvSljfKTOufa/KW39ZxriL9UBGBRXZdULoaKosCiONjfZ3d3l+e2tu7795/59KsvX736yM//+D+r/8rf/MG1LoGmKIp5wtkZZ6d+Zj/rcGYMfO89bdvSNNkdqnb+zMFp0UvQzNmTiYtZAUqWSLtp5U0w+51yOOC8Hl7Wa/0WZqDn9MEzF6xzjOBzUWKLXfepsdk8knXFnDHJamhQ7pIXcAaVWLYpXRO6IiusUpOsGFEKQRJN03EynuJ93uA1GTrWCUyKWCWUGjT9Rm+kT/6bJQHmPIBcBEREdWyNCt746EVeqi9wgOLw5A4+THAoGhzTbkIdPGPnGLeOzkPnwHfgYu5OXX8ZYj8l8B46Dz4ILpS07ZAUDNKzxo3RpATTumUyPuFwPLE3n7lJd2Wbor8+IYEbT0iuJgXXg/r9Q1dE9Ej3CAB4ifPN3mdD4Kyzl57tm0CChk4IXTYE0l6Tes5CgpzYVxXo4aAvrMQ2qAeDCD7FbJoyQ7y0IKVCW4UvoZNIqxROJYLkNMScTQDWWIQS7RTigcaBC7QxIgv3ktGKqjRsVAZr9CLE7H0i1pOJdE1jg3N9kZ8LCjXYoty5QnHpHrh4H9p5SCMOnCKpSGw8G8OIH9c06pj25i5ueEjdXMAbix0NQY3QsWSkSwbVgKraYbh9kdZrDu9Mmagvw/ghoRihiwLXTPG+AU5InDCoHDq0SOxQ0mCLKTEe0dZ3kPJONogJjqJQlMWQpmk4Oal5Nu3ShPxcja5dkwdfsc3WymdGVnTia1Q4q1RBy5yBldkJa6LAJZ33AUnrxhArivpFwnBiNSF4JTqZl6l//fM/9zITEw88/DCP//Ef8Wu/9EucjI94+pln6GLiP3n/9/Pe+w+WmhShmUypqor94zE+RgKZk3Vm8J0SoWtRWrACxIzuveVtb+XK1auE0JxukrJwt87QX3lxPDylROybQK01KIVzHc51lCqPjmUBVz8rK+9tg03JH//x4/zSv/llbt/ZZ3PrIo1EjNZn2vdl59ozx7wGAfiL7P5JOdTIh46mbdje2mY8nfLczeflDz72J9e+5Ru+6e+1TfMjH/qJn+ve/lffc2ttARBmpjDazJGA0Nsl6sISUsK57sx8v21bXPQkMecCgWKcaX9TzxbPEpFzBXVaTkBa0VjP2tQ+cGLlfPwcCU5Wz9ZWDZuWK+1zZKIzG29yXf2PbTH4GysNQM5t6utme+drjLOkxnQe5ksrUtNWnfNyyln/Z0jCtG5omikhuD5VL/as00iREqXRVBa0SiidstmPno3Ae6lQTwYUDVq3bI48j1ysuL9UOGsIVoHdIVLhUsJJS50CJyFx7AOTLjJpWnxwBBRt0DivmHbQdNCFyMnUM209nXe0beJ4Mmb/jubozrAPHRKKoiJEaNqWejymPdjDpVdS5IU6OpdSfXyCbxod+/l7FrVEKBK61JihQQpFktjP/VOG3xF8v9bFmLKiIUH0iuAS3oMNPWEtJVTMqZWmLNAbg14BkKhdwCeyf/lCURh1JlKK1QSTOKKlVULXGyshColZVui7gJVIERQDD0WToM1FgAOsys6LRmkGRlMaTWF1vwEkgOneUfPv6+PJ69q6sd77HLqSIimVSDFAqg3SYIOpVARXE1SRyb1icEpxEiI1iVBHYrpKs9HS6YbRxpCHH3yIaa0YNyN8GNE0inHUSFcybbLi4k+fHUBT0bWvonFZH6ljgzhHajo6JdgYKU3NzlbN9mhK5DbT5knqdIvG3UIXzwH7TCYnlGXBsNxkPDlid+8Og2eHfP4zn+Lxe9+a3rEx87dIslqWl1gfb3y3mfpylsKLULiWtffnJoVrmoR0F3nycmrfuef+bNOw/9K//MT0Q//sZd/+7m9iZ7TJdmV6btZlSoFPf/5z/M9//8d44X3v40feODjzPpOTMePjEzrvM6G7L0iTknkokEqRGDzRB6zJ9tRf/ZWv4W1vfyuxJ4vS6+pPrQ9kJetqHaFOa53Z7zIzVI0om2OytdakzvcjydPeadZIzuzl//Qzn+WDv/Mh/vwLX2SwdYFyY0TXp/11Xde/fnkErTPFLa2f+Mf/P/b4pcJmsTiRnqPUtR5rM/rYNg139vfZ2ti8+Pjjj3ff8a53/4O2bf/WH/70L0/f/F3fenKuAJhB90no4xzVfN5vrc3ynq7LscBNnvOHGR9AaUQUkTTf8Bdn+DOP+ezrL+d+NhsDpAWZIIt+An0xEfpqQSm1VP0ude5r5YFL4TzLHcKcrLcwN1/NDRBbDP7G2rRAWVEELC8csoLUI8sdhKxZm9J5YtLaRejsAuIFmqaja1rCLAo4JlTPxjeSKHSkUKCU71MA0zz8hx72p08ITCohyqGlY6gdPtSI1aACGIWoAboqwDpcIYSyJFQF0ZYEndO1PJqoBnQxS4xcgqlLHE9b7hxPOZpEjsaBWzc1X/ziIU98fsLBbgHK5sRIstGH7zqi96TYHyd0+8cnf9y0zZvattPO56JB6WxlkGxCDwx2w4CJZ/jRMWXIPM/+Z/enQkdNcrkI8B4IakHeCsYabFVQVRbVl1Zdm536fEjE2C+eMZK0wmiD0ZZoEq1OtErjs/cyCU0ioVCUxQDxCotBOYc7GkPtKN3MejV7ABiV/detKAa6X3il9+VX+kLb1ikbuvTGKD7l51cXYEq8KumSpgkaR0ki0oVAwOAQjC5ADMXOy1Fuiw0xbO1cYVqMOE6eY29ReouuS4SocF3vAIhCgiFNBMOQhEEE2nqSCWYRxOnMp8Ax2b9Fc3Cbra2KS1eusX15zPO7H2XvuKBzmqo8IaWWk5MxRVHRNIGj/X2eeOY2937qqfTIVz/yR4+U/o1IfyfIKph8HfGX1RyhF5F1nUUJV2zkix18usuo8a5W4ctWw7J+cgkcP/pdX7X3zDMfOzk84OLmJvjAO9/+dlKIDAYlLnj27hzwr37hl/jVX/hFfuSN7zuDII4Pj7DW5syJFPsAoH5cK4qc8qAYFpbYRUqt8cHz9re/lVe99rW4k0NMnw0ss/j4BcR3FaS96r8QslOgiNB1HS5kF0pRivpknKOD5yDL6bo72/xD2/GRP/4IT/75E2yMttBlSdPmMVpzMqEszF0RgBdV+f0FowDOuazASLlRKsqSo4Mjbu/tsb29c/1zTz7Rve41r/2bk3r63wPnC4CZvG62DM6Jf1oRSLSTSR/QUudCoSf2zYmC0aNE9YYfQuh5ACmRE6FEYYzBWjv/0lpnoobkTsl5j+sJhKHLEKWsqAqttas9rpfne+cq+HW55Uva3dkTut5cRM+3mLt1Amk5eYyz//bdZIOrIopTepFYz1UoxpmFIvqQODqeMmlalR3pAro3/5AYsNFRaENlFRIcSsf5xj+rvrPiIzvpzZAAlQwERWUgRTeXyyhlEPFEOkoBL9M80xcLWiNGoDBQWaIVtFVQGJK1dCI0sWTalRyPN3nuWeG3f6Ngd/dzHOyD+IqERivb34u5Sjm95CJJm4caH6XxAecXHmaloAiogaCHCk9DIHNfUHnu3+cR9GE2QggRgyU6TdvHFqeQbUGyI1+GJ8vCMhoNmPXf06ah6zzOB0KMxJjVFF5rrCkY6RIlgmumhE09dxbRShMERDQuRiwFISkUGj+uSU2H7jzax5zZIYLRmlIXVGaIieEmwvX+nt3siuLVQcXMheiPQyuDE90X8QYnlv26pomC05rgs3NkykyvbNojFkYara8TWsuuF+gC9bQlMkSlITHlwoUUwdeoqHMCo2iiT0gE3yWUqvBNlzW2kvkewQtWXUJLhRs3HKZjLm1btoylVkLoFEm+iJgOwUIypBQ5Pp5wfOcOzz37RZ559IE3PlyuyyBZkUKYVhH21jQHrODxvBi8L5yX/y7ze9ISN2C5aFnlO3LGlfR8EbH16Z/+2O88s8W1y1dynoPJAV/OtySf+SNbGxVve8NjPP3EF/jZT2ne813f+VV90/W6o3/13/wf3rXs7e2ilGR5bNexsb1NSomT45qyqDLxTxJt2/IN73gb3/at74YUepO4cn68sQ/joqxoxye0nWdrZ4fo2rvOvWcz/pRSNg7qTehSCAwGAyYnU0YXLuDGx7lfkZwdQlERx1M+8Scf44GX3Mfk+IS2bRkMBnMk+8rVqxwfHWBM5t7MlGYZFU/Udc2wrOapo4tydUFnZDW4FVx0OXcu62b5WVKbVp43gO5D91I6iwrH/nszIvZsf0wpsbG1xfFkwvM3X+BPPvPJ6ztXLr1mWA0u/cr/9i9ufMsPfV99pgBYvvgzBKDrOpzrfc1DwKdZx6FO2ZxAoQ0+BBZZzlrl8KDSWMqynLsHzoKDYoxEH+ZJUzPFATD/gBdVAoFsi1oaexemPCu69hVt9Lx7X/bd5qzM79xmvEKHK0srzDILd9XGvAxFphUEpTMzwaWFZx1ReLlaPZsqFg+Oxj/W1O3faZtOuf6GydB2RItgJGG1YFVAUg+jzsz81IwMGHs+iPSRwAKG/u8xmwb1xkFIl6Fs5RGdsDpmVEGbPEIwCqwQtSAmZFi6MESj0b0fRFEUbA836fxlhlsHDDcSphBiMOTbMWXbXlsgxbAnKwokykbUQz4JTZfo/OxkAlhQZUJVoIZZ659mHX9KJFGZi9CPAgIh/ywIse1Nz1wuAJIIKWSr5JmmvaoKtGRuQ9sE2tbROU8Ms81ao3RBWVRU5QArqrfdVdkxL5meIdUvDGKIOZopowjO4xtH0YUzi4g2FlOUVFXF5SpdX7zlm5C5BSELGXqkLSJGIUqjReOSYhqFWhQu9t4H0stuY274XDTAqCdNFXnv8h2q3CBMIdQCURM6oA1oNSK0DpOKHGIUenmGixA0WpVIDCiV41UFjaQNVCyR5OB4gy98+oDB6BoP3vNmjlvLjTstSIeQCCGiraWeNhweHLJ/cKSe/fwtjh+7xvaiUGc5rGudOx9LXfs60m7i/FqwLP9dKeFdhdytsoJbhvnXqIOTrEcsknDr5vNcuXiBYVki3mG1wkqRI3GNhpT4ikcf5QP/6fv5+V/4BZ576smP/eAP/TAbGxs/e3x4hG+7TMAOns3RgE4S4/FxttutBmwOClJT4xMMRyV/6S+9iZe97BFS1zAYVlnqGwNKG1RIOFdjfaIsK0qT8E128PsPZd8vjg1GmxuQIkVVEb0ntC0qJpo7+zz71NNc2NzgxvO3scawuZk5KFtbm5imY3d3lws7W8To0WiiMYTOcXx8jLUlm5ubSEyn3hb9GDv0TVMeGcZefZw/jlljKymTHlUSYh+4lpbNaZXQOn8OFV9GwBevybLdvu59EGajdKUUqTDQJg4OD3nuheeL3/29D29/6ze86w3j8XgPePLMfj//x2Kaz0+890ynU46Pj+m8I6SIQmWHt34GlDuJOIftFWBQDGzJ5nDE1miDjeGIzdEGo8GQqigxvT+z7xx1XVNPprimJbos/ymNnQdBbAxHjEYjNjc3GQwGVGXJsBosbPByqs+G83a560J2ZEW256IuBbl7lsBaHHCVhl+W3m/pNWmFLbCski6m1b+/6hBWH7YEY98zmdY0XYcPEaNODZh0ShgRjDUUKnu0Z8KfzDf/mfwvqzsAIyQTcTicaki6A+NJJhuEiO6vtVEko0g6Q+/ROkLREYqGZFvEtKA7MA50S9KeqDqSdCTVorQjqAZdOLQJaG0zA5dcqMzsRM3GMPNN+o+xbrJMrGvDPFAqpnTqa1CCHiqi6h/kfqOYMVKS9C5fovqAI43vEqGLKK/RsTe9WvhsBkbYLAt0EgJCPamZNh1t6+djtVwgW6piwPbWDtrmZM0UIaLJOYymj2+eJS8ZIhrnI43r8I1HujhfIEQEMQZVVpSjEWaJO9K4QOtjHkWk0wVGa5XlhUVOS6ubmlYlOjwxeoghb/4e6ED7DNnPXMpSAoUhucwI16KwgBVQWMI0oJ1GO0NoNRI0JkGhNDqBdwFJKc9ZxUMKSNIIFSZWmDDCtpeIJ5cIh/dQxZcylAeJ/hrWDIm9XDAkYTyesr93wO7u0zzZFkv+IJw13TrDq5GzhcK8mJazf5eF18mq511WYMGyQja8qtiX84iBLHz/nLR3+biXXt//7MaNG9x7772URUFhcghOVVVoY1DGUJYFldG87KGH+MvvfjfTkxN+57d+k2e/+IX3Hu7tMqxKNjaGOOfoujZvhiFhBXSMHBwcEdoOo+CdX/91vOubvpHB1laPpimauub5Z57jcHcPiYK1FaFpCZMaYm8CF9OZL3UqNprD+HedkYtQT6d5s9U6BwoZy8nhAbeff4Gt4Ygv/vnn2bt9m6owTE+Oee7ZZ2knY4aFpZ6cUE8mtM0URY4vHxQlGsG3Ha13uBhwoU8TST3BOAZ8DJjCoqyZG9Yx2x9J+JSN8GavXfXnsvfN7Jn2PivrZnvs8tfpndN7ZvQIYc5kMJjBgEnT8MKtW7xw+/b1Z5599v2Tur7nl/+Xn7hyBgFYXJhijHTe0TQNdV3jo0dQ52b6qXeRE4QYPBZNWZbzrxmXYC73Wzih2ddMcmhMvnjWWgpje2tHmecia63RTY1G2NzYOJ/zvey2tbx/rmT2L3kArAsBOie9W8cpWKPZP5dOuMQtkBUBQYtsXORF6gs5z6pcLUHSXeBlMXq6ts3Qdf+70s80rApUVqEkd/LSp/8pnZtSMdK7/yWi6hnBKmLzSB6xGU8SDbFXDiQTSDqzyWWmINBzxJ6kI8r0v2sDUUeigoCaZ8n75DJxKdSZ1nZmxhdRxmL7jU8voKDT6ZTJpCUmT+gjpnNDnWWAUoIMEp5AkEDsN+0gPezfIwIBQZSGoIgN+GmgaEoMpxbWvWiCgdaMUnwc4VUeiqPJVE7GtW3aPgFttvGanIZXXdwiFgWpyzyD7CyQbZS15IRBhUJHhUoK8YnOB4KPiM/Fh/TXQ88Koc3RbPidR3qSqKeBts3+DD4uQJRGU5WGzdJiENom4NF9dGoPi/jc/UucsZ5U7npiIEVIIZGcRwdNCpHgLOKgkAgqZt+HpPI8OIGbOiREMqshYVLKt9J8rNjXaMqik1BREH2iPo7cc/8r2Xj4iGdu1dyejBE9ySE1CqbTxNHxMXuHY24cNrzmmu6zgxf8/s+oZtZIeb+UMDGWkYV0fsTHmmCyMxLDFeNAlki860Z+aR1P4XRBGB8dc/XqVURyMY9EMCYT9AiIVvgwZXt7k9c/9jpGGwM++KEP8ZHH/x1tW2PLiv07u8TU374CJWATWElUVoMLvPFNX8n7v+97efkrv4zYZoQ5eU/wnts3b3IrRB64736u3H8/Whtc0+T72WaZ73Lo4mIXPNsH1rHgQ8xBWTFCiiEX1N2Eg909NImNouTk8ICma7lUFGzsXGD/ZIpXghg9LzK89zRNm30lrEXbop+x91Ewok/B4d4eVc2M7XqUYLanzQj0s2b6biOAshicjhX6P2eo3rqRwhmuXTxdD2fXSZTCWEusKsb1lIPDw40//OhH7v2ub/uOv3tn/87f/pn/8X89+M7//AMewIQQ5vP7ruuY1lOapiGk0Aetxj4WVs3jQlMPkSnJi9OoGjAajeZwf3Ym653/XN74Z8qBGdSvtcYUxTwG0lqb7YRnJ95LBrUoJOXRwGg0WmH1yWqN7xkkPa2A11kh21mhDDhnrLGEJCynEi6nhp0h8Kzq6l9EBrRK1n9utplWE5EWZo3OBaZ1oK07IPa58gktgo6BQkcGVmfInt7mSwmxN/8RrfLKLBo1RwciEtIpHXaWLKjIIwGjCDqBzmoQPTMflgXrTs2C2iDNjHhJSpGiJabEpG5puwbn6S2MwykEZgymKNkYjtD95feSY4+n0ynOub5pyqRBMREpgBJSGXEq9KS/mRGQZBlgTkPIfgkxW5f6JhCOPbYpUblSyZAfGVIvtOLCYPAG4OjOUfc/jcfTvz6ZTG3bObTWc+KiJo9NZLOkLcAZRVAKEYvEHCykejKgCQobFFXQ2DaRugRtQPWpfXoOB+ZUvXI0mF8HMreZ6bSlaRxt6wn985sSJKsZDEoub5ZYXYD3RFWSYi4+iOqMy20/Ocjnnbq8eMZMRFTB4bqIURu42IGbYmLmA3XOAJsYXZB0Q4oRlSKBgFEGi8JKRhh16HvYmBHF6DqsqZC0xaXRJap7LU08YNrd5CTdQcsEpRRtiIwnNUeHx0y+8ALttZdgl+21zxQBq+Rzqxj5q8h+d5PypvOKgnOyPc6uHWeajGU307QmyvhufEbh8KXf/nsh/NHX7uzszGHjEAPa6uy2mCn1DHa2CG1L3bS87BWPgIaf/Zmf53Of/zNCTKCF7WFBHX3mABR95G/XMSgsr/nKV/FDf+0HeMMbXp8LcqV6mbFmUFYMqwHPP/Msnz+aEDvP1evXsMMBiMbVDXZQzAsnWTNLX0QClosBZTSD0RAkEbqAtgXHh0cc3NlnsxpyuLfLxdEG17aGjI8O0THQ1DVT50DyM1mWmUE/LKs+LCzSdQ0ieZSdouQExN7FNvQct5Qi06PJHA1fLAKWO/fVvFHBmPZ0P+y5cmVZzvfFruv6iWC/p8Z+9t9flxTTfOyQ0XiVnViNxqaCqDW7B/tsbGzc82u//Vvjd3zt297oQ5gAT5/hAMzm8F3X4ZNHK5MdmGZszD5n2Tk3v6G01lzY2JpDTHOEIJ7Ck5PJZO4dMEscm+U/W9vDJ0phVe8fMNN+9hdRgNA5RCs2BsPz3fly5yur2LfrBmlLG/vyXJ4V8/d1aVznCDkr5o2Ljn+Lx53WzRLTaqlBSuflhnBX0lHbupzPviB30cz+BGuEYaEx4rPpjEqoxdnkLB+4951PSkhKZbmg0hkyNzOugKD7DT0qNSeqzTp/UZLjOpE8UJ+fbu7A8zKoeme5gmnd0TQe10Hw+byV6L7YyPnyVVXleVYvzZvUU6Z1Q9vHjkaZmRgFxGbWfioCoR8BBNIcBYhzkk3mAhgyfcDXAX/iqCajU0tTyRLXmKAqCmzu9Iugho9NjicqH0N7tqtBoUQRK8VJammN4CWzLUUUKYcC59f0rog6KnQXaCcB1cb5onjaaeTufDCw/efak3qBZpxtgOs626oqlTuNpBXlwDK8cAFlBqTQ5o3fRXToeRE9AkDMnkMmCCp5DB1GfPZYaKdsaEsoPfX4iB0VuXR9QCmB41t77HUNrdpioCzldiZpTcYVmq0csJA0SSwicV7wS883KqXAJiGEAcfHHdsP7PDQS+7n1t6TjLsBiUm2lwbqumFyfMJ4fJM63seGXjEjW84RWTnGWyDmrXL9O5OzsS4GWO4i+1s10F83mlxCCNdFAi+hh/v7+1+rlGI4HBK9p7CWFGI/ntOnuQ14mq5mY2cT1wVe9apX8lff/73c2r3N7//BH1HXHcF3ELM/hyJggMvDTV79qi/jfe9/H+/8uq/HDivcdIodFPN9QBnDlYuXCHXL0d4Bz37xKZrplHvuu49i50JPEoxn89rU4vr2IsoLsgOmtRbvetlhjzhvjAZcGm4SO8fk+Ijp8RRvFVevXmXrwg47Fy9z9b77ON4/5vlbN7l9exfXdRl5QnJgV3RIsLjgcMHTeod3kZAiIURSyly5nG1ylsg3GyVqpe86wpjZ5c8zd7Smbdt5Fo/qIf1FFH5eWPRKrln6bur3XukR2mQU0XvatuH5Wzexxly7tb/3w9ujzc/+yj/6P8ff8re+/45RnFqJzoJFCgpMWWQf/r7ycDFk7X/wSFKUZcmoqBgNhmjpg118OA30CIHWdUwnk/kBW2NQOldVswrH6B7ynxcP6Zx7YEo5fbAsy/Wb8joHzbUEu2XIflXy1yqVwDIbf5mwt+pYVkB1y7LE2WKz2LEsRxzLEiFxLft4qSPpvb2benKmzp7dTKY3shmVBaKaHgHI5LYoeRwQdf77fB4KuKRQdoNoDakQogkok1Di+t4zdwQyjxPu3fW0QnTZE4AEwefNL8lC8IhGUZJiwWQ8oamhaxXRzy6bzTQ9UQyHBeXAnj5UCN2kZjptcFkCQEhZ6ko/diisIRWzMKLQz/yZ2wXn5MpZelnu9l3tCIcRVQsmyZn9RClNOdrC5ud90On0dSl11JNpjupNp0oElQRbVVgjHHcNtcpOA3u3AAAgAElEQVTM+3mn1od+RMlcCxNnkqZAaFtK71AxoyrSdyWF1YyGJYPSohcW0ECiO5kwHk+YNl2PsM2IRBGdDLJ5PxNd4V0uiJTPOQAxGFpvwWvwoD0o7zFdg2kPMe0JwwjB7fHwzjZeT3ny9i0G1vLl116OUYk9nqM+eg4Vhly4fB9f/tBLOT4Y8fRT+0yOEkbtkLrssaVEI9ojUVBRZwfqlNBJMK3h5OSI6a4nlDsoRkgqSQgpeUQMbeeZtjXHruOGt1xR/qzMdlWoT7pLnsdy2NdynO+ZImKFG99yJsiqNWjOT1gKNkusljqvRB7OGx8dHh7OFVfeOcRaQmxRSjKaZzSxC3jXMrr/HtydQ5II06bm2vXr/OiP/ij/8if/L/7hP/mndFMoS6EygnSJl1y9zjvf/LW8613fyOve9FXYQQnB5VFDzM98j8mzvbWFTUIRs1PdzWdvcHJywrV77uPKS+5doGL0TUJcokXI2Wupllz0Yoy03kGMlFUJjWNjOOKlDz3MZH+fro089YUnqArN17/7m3nLO/4jdu65zvV7XkK1sUlpKz7z2c/ya7/26/zmb/9bbt6+xXA0YjAY0jnHweFhntf7SBc8PmZZ5Gybl7npEnOvkbwHqjkcKncZAWj0vPmOMRJiVlDMRgKDwWDufzMj0c/hf7IXgKb3I0kZIc1jesnFvFYMNzcZTyYcHR9vfeQjf3LPe77x3f/1ncOD/+Jf/A//8MjMocm+azfGEIW8QZtsHDErAJxzxBCwxjIaDNne2ERcJm/EnghIr/Vs23be/et+07fWYvrKZjZ20Fr3qRILHJd+W1C9xaruyR2FsX07srQpr9L2r32g4e7UWlYzddfaD6e7a4iXffsXjX4WK5hVc8lz3uIrKv9zp3t+MQgJpk3HdFrPjW3mNs8xy4MKnXMAlFqIPtSC2Bkxvd/4VQRRdEmYpJKb+wYGG5iRxY40lREKkyh1wJisCFCSQHUgntg77vV9NQpHFthneWHoTXkihoAhOEMzFeoJdK3N9nz9A6AUGKuQGH2ZO28BtPcwrRuc6/A+nJLldCSoSAmoUpFM7FP/FCH5PArA9HkAKUOgWe5AbDW+jqRxPlxJCUk5BGueBDgYZA9+wAU4HudrrsTgfa7qJUYkRnRhKHRJ445pi2wAFMmhSNmBbIEsgUJFQToPxzVm3ICPaNQsloGisAxKS2nMqUOg5OMYTyYcHh7j2m6OKEcFOEfnAsYMmHjDNEJHxCiLQogOVNQzt2FU9GjXIu0B6uSLqMlNQjvBHx1ShwLfnJAOp6TSMt19is2dLY5ufQE3OUaJpVC7aGW4sF1we9TwyAPb3Hiiw52A6wxKQs+EYJ4XYVBIDOAS6VB4/qkT9BWF95YYit6hNJMsu6CpfeDEJ45cIttCpjWS3lWSWjkP1a8Ky2EZZUucc96SZRSQNdJkWQH7L8mVZdW4ktXIRP/DaV2ji5IoCp9ilnWniOlT5GYBbmIN3dEhQfK4dXTxIrQtRRf46x/4YUII/NRP/RRfeG6Xq9tDXv5lD/M1X/nVvPGrHuO+a1eoSg3BE4iYogSjCbFDWwPJY7a3ME2bG8uiwLUdd555Hnc4pkiJ7fvv7dU7/e7eewdkou9pnHycFwBnDXmKoqD12SKYoiIeTzFFhblacePpZ/iNX/kNbu8f8K3f/m28/wM/xJX7X4ITQ3HxIsd7u4DnjW/7Wq5fu0KMgQ/+7ocIKdG0LTdu3OivH/g53VefIewl7+bXP/ao6iJXadbhrxsBzHJZ5muanAbhiQht28735fx9NS8upG/SZnbKC2an86Z7MBgQ2g6tDHf299kZbb7kjz7y+NEjr3j5wxcuX2yMSln2JKKxtkSborc/zcQKa0u64Eldrsw3B5tsbm5itaGbtAwHg75nyrBiCCEz/Ntm7i0wm9UWZTk3dZgtykpn8saMi3hGCiHgQse0m7Iz3CFE17Oi5S7z/zXQ+Jk5Wro7iX82PxV45kjomoZXXC1PB6Ei53kG595L1qh+1kmDVnfu53IHzqETSw6CKzoSL3A8PqFpW3zn0doSYy6wVIiY4BjqSFnkql0pBabfBDUom0A8ShfZHtYUhHLEF263PP7kHmM9xpaWorLYSlMOSkbbFdWGYevCgOGGYmfHUI3A+ogdJIqBpjQOHTqU9b1LnyOkCVECSTQxWrpW07SayXFBU+fZYZIA4tA6k/tGWiXb1P+c7eL9JPThZPLhtpm+1YeYu2/RPZzuEQOqFMqtAi++l/cIrpfuzSSAThJeQEVFdArVWlJtiF7QvXlS5u0rBIUtLaOLO6fSu66lq8e4NhGDwVaKrq17oqvCblV4m81TgrU4EZIqFiIYS8BgsCgHZdSESQfjCYMQetlcb8iiBKMto1IzMgrkdCXYr+Ov1fXkXdOmofOZ3Bdjlk8qpSm1orKK8ckJTveE3aRJMRcfyYM40CGiY0chHdrtcvz8pygOnqSox+jU8Oxum0cD2lM3mj/7swot0LUddDWiCqZHd3jqC88Tui1wF9DSUdmL1GEbba5AsGgsOkUsCdvTInMyoMWEAdM6EG9OKBmiY9UnTs48E4QmJGofmbpAEEGnFR77i+zNxWTNlM4T8Zaf1TMmXwucglXF/Eq0cQnpWxdetNYsaAUSuPhe/blcuHCBpm0zO760tE1Nub1FfXJCNaxou6bfpPvNROX3922DxIQ2gqTI+97zH3Prmae4/unP8NpXv4ZHHnqYC5tbTI/3+d3f+RxvsW/jkde+GvEetrY4uPkCF65cBoSm66iKkuHlS1yLEf2s0O4fc3nHklzg2Y9/kpvPPsv2tStcv/ce2BqC93ShQ1cVejjEtU1GB8kS2oiCEJGUR4uxF0XEEKj3DhgUFRCob+/x+Cc/w0f/9HO89/u+n2941zcxvHwR7wO6EuJkjLUKqxXNwQvce/0SH/jA9/O5P/s0H/nEJ+hcHgyGlNNA+yDkHnY/rUhkkaSXUo4TS2nO48mNsZyGIS2Z5cVF+ePsvoihf7bpOT79aDBBoUu0Nr2tfsCnhOqLOrG5eE4xy7itgG9aSmNxJlA3NS/s3sZYe+9Dj77i7yal/p45O7c4tRic+TS7GObEPWstVVFitcEqjS6EFOIZzaLvw0ZmiMJwOMwkv6JYqGJyB6r0Aqt77vireigkZgeqGOdyiHk069qme07TPE/MORMjfBekAKhl4zNPPfm5Rw/rjqosiTHxZ2GHV94zPD9HZM1oId1t/rcuspjVc8SVh5ruIkE8ez4+QjOtcc7TuTzCSWSehRZB4Sm06j0A8qxcmWxZS68C0D3+JlYIWuEoOHCKT93Y5/m2RqkabUEVUFbCYGCpRkX2bx9olBIGQ2HnYqIaCtWwYmO74Pq925SjgmrDYgYKrCfZSNSKECv2dofs3ZoyHlva6RAlHd63BGBYVFRlwcBarmxtvn9m/+qsfWvjPS7E3MWnMJd6BhvQA4UeKII6JfZ4yYT3Obu4RyMlZbMj6Sx+4kESqufZz8JMrNUMhwOq0XCeXVHXDXXt+wdXEYJD61xY2Y0h21WFU56oFFFSn5FIDkWKM2OjbHylEZSHbjwldQ5ils3m8Y2gjaYaGKwYCq3OtAKtMe+qQ4f3EaJHKQPKg9JoLQw2N1GSCL7DYQkIPmWfAzKRP0e6xwDRI7HDhCmmvsGgeQbt9yhkiqgOVG+mbITQajqfiVIbI4VShrq+zV6zgVbbxO4qXzi5Q2VejikfRsURKhVIjFhR6BT7YCidFQRkb+bLg2tcekXBE3ee4fjpimmvUU0kQgQXEp2PdC4Q0Oi77q7nO+dzEb2s0vbL0pqywmws3cWbZLmIP7dmLKEDq0jBaalxWAowunDhIk3TMJ5M0BIZjIbELkPYohRlNaLt2jkPaLYms+yoJ/B973sfSiRLuqsBOxcu0o7HfOJTn+DjH/849zxwL+XGJkxOuHD5MocHB+zcey9uMsZEjxlWbFy5TJw07B6d0J7UjLTm4nDE7d07TI9OGO/tcf2Bl7Bx3z0Uo01S13B8+xZbl65k34legSIpy2Ihk5KdawjeM9jcAlPS7h9SKsMnPv0ZfuuDH+a7vud7efTRRxleupyltSoHa4nKRGdjNM45lDFcv3KFN77h9fzuH/xhttnWmi4EMiYp845bi8oSxt4yeGactyjjCwuo+szxdpXZTwjpHLt/8X6TXklQT1uCT8Qy9eNz2yOEWZ6YZiP02XvHTBQ0KhMJBdjc2ORoMma7nlz45Kc/9Yp3fcM3/bhZ5UJ0Zl+NCULuCsuypCqr+ckbY0g+nDXt6dmSs58PhsNsVNKrAxZjHvsMplOUWyQnfMWA6wIu5GKi7TwhQoh34dMsm3KsjPBd4Q+w9Pw9dcex9/xnH7VG8RVf/iguRJ7f3aXtOmC4NFNcfoBXQYDLRYmc5wzcTRK0PBNc63iYzpOU8nHE4FM6Ojmh7TrNwo02d5LSAVsOKJRC9Tdkr3TJ8Db5Bs9odJ7lexRHTeCgg1t3djjReYPRKmEM2CJgbYe1HuntdpOCsoCygmqoqAYDtnbuUA0Nw02hHMFgQxA7BLWdrWcLxxOfjdzZ0zRTj035oSVkB8uqrNgYbVlrT6HBpmvnDn5hAVlKEonWoytNMbAkabPRz0IG2OxB7NN/5+hK6gKtm/ajijjvnGKMaFVkz4pRhQa8CNPplLqdgHhSCqQY0UaBtWxsbHLlwnW0LZayMCR3OEswoTUGHeHkZEIbExs9VyeFfLxGGwpbghq0NqUbwEuAAqCNfXET/Bl4MMaItiV2uI2PQjv1+Fjhoyb1yg6Jp7VTipEUIjG0pNjR+ZZBOqYqTkj+pO9SIjFO++6nzHkRStF0DtLMLXQP2ETZI3xoOWkNVVUQ3QbR9fOmqBCEkpwaKZJZiCrBhh1SqZorFzZ44jmNimo2Fcrmgz6nHzmX+qSLVaTaVQZeS+6iaY1ZzzmeEOe9PJK8uDvpOVdSltIEl5E9Vih91ow1Be59/jfnfi4XdzZzI9V1WG0yUczaHkU6u4SoxJki4OLVK1y+egW0AR9IXQdFSbkx5PWjr2H3N36dj370o7z5rW+jbVvKXhE2PThgWFbZlS8lsIbR9hbu0kUmEVLXkQQujrYYN1OOnr/N9PCY7Rde4OL1q2xevczW1hbh+BiKIsvytAKtSSHgncd1nuHGkCaOmR7sYxDKnU1u/vmTfOSjj/PXPvCDPPbYY5jBADQE3yMiVoEWTDIwI9kl0KMR73jHO/jJn/oZnn7hJiFGhkXVE541ymiM6tn6qsf+jD0z0/c9MXA6neK8R8+M7RboY4vr7ywxdzHVMH+EaqbNz+R83815AkmgEsFYdQb2Xzm8XjALU0rhuo79gwN29+/sfPHpp3bMTJq0KLOY6fyX404HZUVli3lY0GyOv1hBzjb7Rfe/xQJhVhX9P4y9WZCk2XXf9zv33m/Lpaq6q9fZV2AWDHYMQIIgCAgUBRCwCEIM0TRBgjLpsEMhy36zHZYfFH7xqyPssEIQww6RAmlCtCmCFkmRGhADECBADDbODJbBzGD26emtqnL5lrv44d4vKzMrs4cd0THdPVlVuXzfPef8z3+Jh270AYi64tQ82EDbxcjahaQiASUhhA0s+C039CZ3LdYkf2kqtMCzrzouv/w8GZ57br+d3Z0x165fY3x6n8n1A3yo8bKHCrIKHYpY4DXgCMIYZB8hJ2ya4uUk7EjYnld+wjNgPeZUTkKZy2Si+PKaK9ev/a/Tw8N/0rbNwDmWci1iYIwWGFUFuVgQFwucjiE5kiQo0QgoSgPRCqcyDuopMycc6QFzFV2xJMV/urlDNSq5CvaM+VhRjA5kGZjck1eBvJgj2Ty69BaQFTlaHyIqx3WBg8OOK6+UZK5A64gIBR93ink1IN8d9xG8qQHoqJsO65JWvSe9SWQ9q6IkK1QSHLrFIiYsnCfdYhp3CXVSrSAzEHPCPBOtNYPhgJExKQgIptMpbdvgXLd0IwZCnpGPK8yZU0iWEVpFkLj7XxR/pREfVQCEuBXXztG0M6w/1v4vzDwyQ56XVDs7wXj3GCK39tfJrLPUjVtItFwIUQKqFFlWsZeX1FbjOo8LCu8kQT8pUy6A8vFrJATEOUI3x3sHdFg7Q9MiEj3+I1HJL8hgIXRkWYyBVSrgfZQCCx5nx5w703HnLbscXtnj5RdazKFD+ehLEO/5nncUIenLh1cILx/y/OEhrnVg+sPz+Ob3vVxxEwFQblDwN7kGLjfXIazB/X8bB7+wXaFzgp8gf7tsWQknm4gNj9nf3+e5557jljvey+S1S2gFVVXStR3ae7RSy9uiFSOsfvxXOqOdzfFtGz34ByX10QSAcmfE+97/kzz6l4/y9NNPc9e99xDqhqwqqA8O0UUZOUdNg6ujGqbD00WOL0UisO1WQ0blgM61TF+9wvzgiN2r19k5c5rhTTfF88wFfDenC6CS62Wmc5556vvc+dCbqV95hdxk/PDxx/n+40/ycz//cW656WaUNrGIth1OIM/yxDOIK2tvLVlRYGuHn824//77+chHPsJnfu/3ee3wOqd3d6OHgjaIVtHsKlncx6FCrVgFqxD/nGXZwvtmebpfDVMMaZJf4gAodcIZUEQQGxZqgaZpIgqf65XBZd1FcHE+GIO4wGw2o8wKmumMF19+iT/+8z+NUSgrmsW+UAe/Sg5Mnc/yD+n3Fn12fP+mZlm2IH24JaOhEMKiwViu1dZ7XNfRdB2udTF/2oWUWa+S/4heZMZvTsDaNI2zwSv/eKpuPLx0xfKdv/5rtGje9qYHOb+3R1tP6K4fUAD1dMZsMqWjwTohVyc8BK7advJZsK+Avtlko08QwvkTT3CTBUBYUyHIGqy4LRyELcFHwkkyESJB5OF6PlNt5+IGJTVO0QUQhrlit9AUEsh0WMj9REUHyJ7855WP+nQlWG1oa5vifH2Cuo9Dofprqkj+1MH7qC8XhXeB1hGtdQ/j14oyKBVNXbRKqhAVJ07fKEIXyV5OoheBySqKYsDOeMBofzfGkaYXHuOqY/BNNPMLiAp45QlVQA8UUgQsHU6BldBTS5duqPg+O4mwo6oFaiFDR6ev5NWvBIoyY6fK6xKeAu6xULZHU+q6PWb0KoX3HbpMEbpDzcz56LG+NPWHpDoQ0UiQBQFPdw5no1ue95E1LCF29UYbyrJkOBrlpwb8fFqa4gJMZy11E1nyy9rpoHNGoyF7p8bokOMceJ+B0/F0TrkBfRaFJLdQ5TtCOwdr0XQoLEUeffxta4lu3XqlPmqlsJ3HuiZ9vgqhRuWO/f2MCxcucGo04vqV66iJJ9fRbAbvKbIMHGhc5B0dCS+1L3NdHdH5hvVMNlGCkpNg4EloPqy6920l2HES8l9HFpfJgZtSOmXD6nFdYbBNiriRpLyuLtiEGgpvfttb+eIXv8iPf+An07kcpbfOOUSlZs2Hk74GyyS2riUfDXBdR+sseVlSnt7D1jVtW7N788285S1v4bvf+wF7p05x5rbbOLxylZ2z57CzWXwqKu6657bl2vSIo+khuRJMOUS1LipalFCYnJKMeVtz/bkXeO2FFzjz6mXG+/uMz51FDQcUxoCAtS2+9dx5z72EK1ehc3z7O9/EO8e73v0w+6dOM5vNGOg4vCiTRc6DVuAc3kUVjfMepTXgqOuawc4uH/rQh/iDP/pjBs2cMsvxWqIsWcliZdLXv9Z2ixrZD76DokTrKE2+eu3acbouISk5ZYGAd65dDEjRNC/56Ki+oZA0TEfPf9t5mqaJ6/RMeoPWjYU/hBB5Ej6uPUIIjMZjJpMJL7zwAi+/8jImJMOdBfTZG/j4Y1ej/oUtDpAkDVRJXx11/8dBCT3cr1QkQayj9It9kyhaZ2ltTKlr27ir7Hf9sUOKBC7Z6rm9IblvqxFQoD8Yn73c8oMnHuf5Z1/gbQ8+yP133x156fMpfl7jgWo04ht/8wTPPPUU1XgQiYp6bXUQVsD5FqHdKjkMG3S+Ycu6Qtb3f2GzU9i2geH468tGwgec8kuHYs8gF0rvGOfCMDNk2GjuoyPCHRZXV/Tx99IXUk0rGW2wC/hc0nUhCEELKl3AdpFapxfR0AG/MMXJTJV2vXHV5KzgPEiaQo3O8M5hdBZJobYhKKEqhfG44raL+1w4u99v0KMF76yhbhpctwp7B+NRJZhcI7nglI0YgBzzO1lIARU++XfjIMwC0oJ2Ub0Qlix1i6JgNzdBuuZPoLilc5TT6RTbdSlWN6ZhuhBQVUEYV9hMmPmORhQ2EZykRwEkQtvEDX9MbGw7pHVgfXL/ip+fI2CMRmvFcFgps+wCSKCeN9R1g3cdNgUeKaXweUFWDan2ToPJY1CQA+/VAvrHecSrqB/30RlQO0tbH2G6GiUWpQTnLCFkGJOjxKOUJy9yEKFtOtrGpvfAIBLdg5wLlJknyzRF4Tm63KKUJVMB31oEQyEK18VUBus7Mg3VoMQGQdOA79ZcYaKroNaCNsfS4pP795Au7hvA8pukepv4Aesqn3XC3jZwdhH0tUWUFNZZ/+HkGlG2mQLFx7773e/m0T/7M155+lnOndmPyZFtEydYna3Gny8VEJ+cGb3ExFeMBu9omhpXx+mWLF5z7eEBt95+O9NZzZNPPsl7zpwhUxqaJjLznQetycuS3f3TaFGUwwEHl69yeXLAxdEp3LzBNlEtlmnFUGV4HXNfXv7+0xyevsr46jWqU6eoTu1S7e1hijTJT2Y898yzvPjiixRFwTve8Y7FEDLc24krahVlj4jge36akmNZXbLTLoqCYC3nz58nhMDe3t6JguoTnN8Pykp0zARJQ09fA3u+26CqaLvezdSuQvNhnaceCMGvIOUqyAKBV8mDJboW1iCe0WBwIsVwnWzoOosYQzUcoozmaDJlOKi4dv0axnm/6EZ62L8P6+k7hyKLwT4qxLRApdSio4iwolsgAQs7w9RdrZMgWOxYY+Mwa+Z0rsV2js661BiQWJ9yYm+5mTCzjUS3Jo8LMK0djz3+Ml/96pc5uHqFT/3CP+CWi+fAdhxevsyoLOlmU+qmwXvPbRcu8MxzL7AzqpIm/ISHwGmTj34euJ5+yBy4DOxCyFYT+jaRjTZJim7wb7KBdMQWfXH6mbN5w9HEYq0jhKXcazylt4w1DDKJwa/iCNrFMFqdxUBsJYixiI6WwMEoamuYhshM9cESvEnyQpWKt8OHQG7inlt8LID9fksp0KKT3W1K+Apu0UgonaULO8LIzseCpkyF6MD+mVPcdMtZbr3zNt54ZrS4IFyAyWRCPZ/TLjcAzscGIIMsz5E8It0uOQT2BkA9JyZyAFLh7jxMArSRP7dUccjzwO6gZDQam/2d8T9BaK/Mm6/NZvN3NW0bIXUVTUXQCslzwsjEBiBYGgGLiVP3QvoXWb/KK4LEqFzTONSsg84ifVMhiuBtJAGWGdUgwyyZwTgRZrOa6WSKTUTevtFXpiArBoTyNPPg6ILgnESSlSc1GqD6PAAfVwHiW+z8iMzPEelSAmhIl6WwMy65ePEce6f2EK25fu2IS69e4uAgpok628UComKoVFlE9OP60RTX5uSJihlFxRH9GxQFOQalHbjYnnUurKgd4vvhMVrIjKIsks3rCmufJZQtbOAGbvv3DeTbsL7D3yTpW4L6N/IKNsgQCduDw06Y/3DSdXSJA3TXwZf5sZ94L1/44qN87MMfpiry1eKTvqdPUtKgkjw4EWCDgHMeX9dkWcZ4fz+y9JOja65igl6whvsefIjXvvgoT333B9z/0Js4un7E+NQpIrU2NgHZzphTe3ucunCGV597gVd+9DzX5jNyIC8ysiwnJzL6NYLKDG+8+VYmbcu151/h5WdfpDy1w/7NFxnu7hG04i8e/QJePB/5yEfIsoxLr73C2bNn+1dGCrOM55GLJj6iJCWhuoVngXOOvCxwNprh5dpEA6Tl4J3FOxZW4HWVhpllR8B+Ph0MBqi6XkEBenJfWANzonrARc5ROG7wO28XDOVInAfnO+o6NgCbfi0sjttuEeucZYa6bcmLOEyVZYXxi2tuCQVYeiFlWUZrwrT777ucXuNYluXi65YlfMssSL9c99L3dyE2Hk3T4IKNk39vcajUIoPguPNySPBs97++gbZfhLp2ODfnM//353n0y3/Jhf1z/Mav/jIXzpymvn4NoxRHBwc899QP2NnZ4c477kDnBe10jm1acn0qutud/DkZhJuBm4GJ7eZ/Cogxg5/d7jOwrW5vIhZud/vaPImc9CpoW0/bzGi7Dh8sRrKIK7tA6T1DZahMwCiH0tGMPShQuYqPE3csSTcKrzR1UMw6FadG6Ru9OMFK+vzKIk6nEDtv6VxksqZDzvsOCQqtswSRS0IDwIU2StZcMhBSUXGiRDh35hQXzp/h7fffxQP3381o6bU6gbppmc87rO2Od+8hyhpzA8oofJa00BKNg3zC/z0eH+KqIkjcvwcnMJNoUrVGuqkGBXtnTjEeDbIsFwjkrc7eVfs2fWweCRrrHbrK0DsaUyq8UdQ4WqWwqdglG8X059gUqBAJgLrpkOkMadv4fHp77p4omGUURZYAqmOkq5vMmM8bmqZd6I49AWMyVFbidM60tTS+wNpouOUSHKLjvijZAkc7ZO06aGoMTUzswyWUzmByx823XOTBe+/joXc+AJLxo2df4Nvf+gbf/d4PODo8Tvt0TpFVhsxExb9tIXRZspstyKzCeciVItgoB85yh84CeW5ojzwUfmXS0UowWsiNojAavS7lk2VOzjYf/nWI/W+xq19j4MPrONidUPzKCRnfdtOypccFWV2ByEmTo0++Jee//9df570Pv4cL58+h8xLbzAmdQxu1kNE5WW0e+qe0zPNqp1Occ5RFQV4U2HlNNR73udHcd999fP3rj3Hrrbcy3jtFM50uVsIBi23auN4rK87fdTunz+zz1Le/QzuJsvHWWQZaY+0bYBUAACAASURBVKIaGeksbUycYmQKyhw6G3j2ie/y5FNP8f2nn+GDH/4Q7/87P421lrwoOHv2bDQVUoqmaymyRMdysb5orSPkn9RlJotIg7WWLKHdbdsyGAy49OIVRqfypEAJC4+bvsA6oK2btDJdNVgTEUz/2kNYpOsulAHJxCcEv4XPfrz/995jvV3w6vp/i8hbSN9nlQPQmw+1Tcv+/j5HR0dRmm8d5y9e5MqVK+gsw7Q2+pQHgbppaOto/JOpCOOPqihtcsnG1yytAowxdF23uHD80qTbrwwcS37IKpJMWpvSANsG0dC03SLvWac4YsGjlcZ3lvGgYnJwnenkEKRay+Je66bD8S7OJbboU09d4dvf+TZfePRLvHLlKg/cdg//8BO/wE1nz9FNrjE/OuTxxx/naDLhjXfdye23344uCup5jbMu6mJVhlGbeo6V5qMw2eD9KyZRG01I1l3C+v+hboDpszn+dwUqXHcmjEzo+axlOmsBl+KeLRk5Co+2dby5MtChi6lsOrqFhRCQTIN2BA260FhxBJMxn8JhB60j+v0HsM6hlSI3nos3nePMmVMURYl3lrbp6JqWumlpuobZvI1Roanj7zqL99A5j3UO1zcVPgPvyY1muFsxGI656cI+73vHA7z5XW/jgXG1ch04F7CTCXXb0nXHU6/SCiUapToyEw1LuuDp6BEwhZUYRGSTwU/w4DpPJSVN2xJah/ZZLIyicd5TDgp2dgbkZ85EVIzAzDm8qEhASpnh2mhsLphcM8g0IVMxeU9prPTs/9XfInEfr53HHh7BdEZRt0sSIofRiq6z5HnOsNKLUB0I2CBMJ3OauqHrY0eTOiI3gioHeDKmjaXtDFZrbOPAKXTQ0HnEgrcOcXFfLLbFNS05XSQFqojcBDzj8YBz58/wth97Mw/feZoyC/zw3B6vvfIczz//AkeHDUpF2VWWaTKTUVUVCoULLdrtRN2zDzhvKZJTuQTItMFIfJx1NUE5xCSU0vS5FjHnvtCaodGRn7v5Pl07NzZB/Ws23ScyOmTLZM/rDiMnbmi5UcOx9vgVc7CwqiI4cVDE5/Hen/gJPv3pT/Pf/NP/mtyomNg3r2MmQCa44BZobk+oPA7din/31qNFo40GGwjWokUtrN9Fa/b29rjvvvt44oknOHvhInfefz9uPotFTyAri2OmjVFkp3a4/53v4OVnn+OpJ55AZ4ZBbpheP2K3Gkb1vXUxEEsZnBYuX7rEl7/6FXRZ8o//i9/g1vvuxWvpLbgj3C+xIPcT/eIjNHqhaJEkaw+A6zryskC0BlFcu3aNl19+eRFs13ib7Mcj8m2tjVbASqImf0MuQ0jW+cFGM56+cE+n02OKV/DR+ViWVwDxDFHBJeKsWViZh+DQbtUhdzKZMBxFt0BrLbgUsJfOhzzPmaZGrDfeO5pOyMsCnRmM1nolqW9ZMrC8999KSF3sdVd3DwupX+pMPMfBQH03FELAWXesGOibhs4ukqBMlmG7qFftOY/f/OGEnfH49+46F35hU3G99Ko8+q1vfOt9P/jek3zpa1/mcDbDW89eNeCdb3yAv/+Rj3DvPXdi6ynjwRDj497nlltu4ZabbkJnBmc7rA+8duk1Wus5tX/z5oK8ajyUQdi/obRPtvgBbIL4lh0PwwbPAdlgIrTGCnaBNAE2kUS2/Dn5QKYsuRlQ6IDSfhHOE1RA6ZQgphOKo3wsfEqYtIGmC9QuSreEyNXAC2fP7HHXHbfz8I+/k9Egp5nP/Oyotu30SIKQ1dYxnc45ms6o5zXeQdd1zOuGpmtoraVu6uRaCJkyDMqcU7tjLpzb5/47b+HND7+dd9x0Jl4TS+ulznlm9Zx5Hb+PXzbqwMco1CzD6YBNroSBfsWtsHicEnzaWemg8G3A2yhLrVy5xLpVMVJ1MKAclOhkidW00YNAx7VjCgJyiNYUWU6ZZahMU9PRSfT9D8gC9gZ9TAYMChMEdzjDzWpk3iw1CX3oiCcziiIzy4XHXZ20vz+bTD8+m81N11l8WqtJEJTSaFMCBus1LWD7S8hL5D14Dy6uBELiAEjXoFxLj1scq0lsRENOjRkOh5wZBLIAZRUwRRF3yfgEbcZVh8kMmSmjLjsETMxYjIZw6RqPG6joVxHNahwuNHiaqOjQUV0SvEIrIVeKXBS5kZOTfFjz0t/I0t+kyw9bCr6cJPhuJfyFk0mmJ5DBTRkCa+Zlsm5Pvu40epJT9NG7av783x/yF3/xBT764Q/z6gsvcP72O6Cd0/g2kuTS2esTAXxhXb0FWj7erEoKBlNkKmMwHFLOogPs5PJlBqNh+j7rzMzk57Iz5OKD9zEYDnnmu9/l0uEhlcD12YS9wQidGa5dP6QYjbh69YBHHnmE0xfP88lPfYpibwxKHbvhybKbbFhkCyy/VWEtZliISZq2i6ik7VqefPJJ2ralLIYr9WzhnrqIRU9o2ev86qXyVVXhnGM2n0X+kzJ0vlt5X5b9GNZ3+Zt++WBXVAhsedy6z0O/hjdeoO5a6rpGBWJXl6CfPM8XxK2NL2xTnn36dxuOA4FITMS2jT+n67rEoo6JY5nJMEmfam0bc6HxBG/pvEMroaoGXL90CcIF3nr3GGCl+F+/lr/9m9947LHP//l/5Gtf/cr7nnvhBZyCM6dPc9fNt/Lwu97K2972Fu6880729/cxKtA5iyoKBqMRd997L2XqAl3X4a1jMptycDih6xxnz57eAMWxauG7yXMg3MhQZJPcj1UZUtigItiE+W3iF4hgQ+BwMmc2m9O1HYt7EUELaO0wuWB0gAUBMEnmVEwHjJ0Y+KSHDRgO6wbrHNYadDBoVaBCIMs9+6d3eNP9d/Oe++7+2m0Xz73LSAgHh4e/40z23s67u+smRk7XnY0hNU1LM62ZzKZM67mrZ1O8Em0l0uAMgWFu2Nsdc8ttt3Hn+f3/cMfe6KdPhioKl+v5d+adfajtWrrjihYveh1lfNkow2uhCx6XziGfmLk2Gfn4FEylvSbMPW3XxejZXgLgA8oo8jyjLAt2hiM04INQzzvazkb5avJS8BbIcoq8YpztoY2hw2FFQLJFUVysAlIjYEKGcR314XXcvEOsW9FqhxAoy5LcQKWKCVIPY/cgdFq/c1ZPpe26WMCX3ieDQqvYALReYX2UPIpXBB+bw+BC7Ap8CnfxjmDnKNegfJeYgok7JJaiMFRVzngno0o/7MhamrZJqyQfvZoQgs8wuiCvTMSffYPxBh1I/n8SESqJCgAV9SigLS0znDTR2VGOCVlRomWotKYM4TLImROyurCJ8LclT6MH5MLavn6j+kjYGte5ydxnUyAYsmWweJ2dwjZX86WH/8Nf+k/5v/7VpxkPBnzggx9k+toVBqMqhvGIitN2cqJTRPhaRPDWnyj8x2BGsrJNEzcJBVBZMupRS66uShbFs4fAY3EMNLMZuzfdxMX5nMs/epGBMbSHUybWUhUFZ2+5yLcef4I/+/wjPPTwu/jEL/4iDAYwrBI6KSvFb1nNtqlw9pyHxZ8zg2vjemLW1PzlV75M3bXkDE4U47BEhNdax2juDblSsnQG+yS5HFWDmF3QNARvk+V3WLyX8X72ib2Q5ID0a+/kOyJh5fPouQXLpkM3GtZ7G2jvIvJp6qahaVucd6B0WmfIQsa37ZtuMw5a7zh6m0ZrLW3bLlwFezii/y626/BdNE3JTLyRRXuG1ZjJ4XVm0yN+81/+Hzz/9AcjOzMErl+5yng44off/wHf+uY3H3vppZfY29nlgfvewMd+5mfY3z/FLRdv4uZbbuLCxQvookJ7z2xyiO2E0e6I0NRIWVBVFXjHbDKNhJSiYHI0A1G4IJi8BJqTcIOsSYA2evPIahfPtoOHLaFi641A2HxILMOV6fqwnXB0OGU6m+s+GW+RVEWgMApdZCgdCCoGf4tKf175b9IFG41XmumkTQx/FY9rH1A+UOaanWHFqd0Bt184+64zUZ/HqdO7v7jmekIf7GvTPq2zgatHk9/rtHlP7f0dTdsyKHJEQ+H9Vy6Oh+8Zxhf60xtJoAKt4qFp1zFvLNauHgJOO5TOUQODV1HB4ELASfpvbDtxyXYzhtIopIW6s2A14tRxiqKCzBjKPKcsCxTRUrhuO5qmo+sSjNdrhPOMvKgY7OwQjMEmmaGXOP33SYCIJvSKgCBoF5i0lqaZU1q3sueLz0MYZxWla/8fgvxyuhB0i7rTSUwuIyh8sAs/8Tw3DEyJJ6Npha432kr7flwAqxa7/6gEsNDFBkDoVjxARIUYn5ppytxg8HQC02mXJhSSv3tAxOB9FoPBsoJuFqFS7RTaCyapJoSACh4joIMniMWrmo4JXmqCaqNXRT+VaY0xBZUecj6zZ1Yp1ttcN5cKvGzw7ThhH74t1S+cNPbayPsJ283LVFgl+MoW9dBmMvLJFeHS2uA9p17i5Z/5MJ/73B9xcHDAz33iE1y9/CrjvWH8UntcROI1wmbL9HXFoU48guAJPmCKnNPFaUQbROvI/VkyuVlPy1NFDk0DRc75u+9mWA559UfPcdS2jMqCqsz56t98i7/+xjd5/4f/Hh/42EehyEBp6tkR5d5oERoUlKwQzTfWqCUXZ58uB5W+Tozh4OCAb3/727jEts+TlI60Eu3X3F4Jr4+Ps8KN01pTVRVd18WcnCVi7uvV2U3NjKR1RO+828P8649fttbvCfk2xNdnZvUc5x0iyakrHBfnPMt6r5wFczQQtsoNFkZCsEj161cLffH3Ei+aXkUQPYB8IvjFA7UwOoaqeM/s8Dreey6c3uE73/w6Lz7zAwZVzG6+7777uP3WO7j3nrt434//GLvjMcNqwHg8ZH/vFOV4GMkbEminU2bXXyMvC8phkdALT8g0Ifhk4QrWBwoU6BwvioPJFGUUKitB2g1QPCf9+jfe7GG7e5dsYCOHGxAGkc02w7KmCwqhuXr94H85Opr+d7PprGqtjfG9QcB5Mh8oCoMpMpRuotWvlhjfqyMagAl4A6IFrwRMZKbbyZS2rXGqihrx3gDDGAZVxc6wZJAY3inZRq/rooWYR71AazPYOz36heMeYbAMp75nc7O0GqXaWMvUepo22sgiltBLz4JDMoWpNB0zbGKRL1IAQ8CKRBQgbeW1NyinsZ1DOoO4Y3JOPBcUudFUedxXW0h79zYmEXrizzWCzjP0oEQPKtos8hV8r7mUVRJg6CeAoMB6ms7RNR1VZxevV9Ao7ajKksFwyKkqfHL5kmidY1YHrPULc6/4vA1G5YyrDI3BdgrnJZn9KMT5KJHwDglC8B7vA3iHtzM0DUoiKVdE09tzZDrC76UWTIBWoD5q6RqfJkl1TF4MGUpKFAPmtcd1GtP2OgidEkYdJggahxHBiwXT0LVTnNSIdAvicCxGGZJXFNWYTMtmafDKuBZOKms2oW+wNrHLBvnfFgXSCZUAmxbGa06iNyAOn5T5bvAb2GwQ+vE3CZPrb+UP//BzAPzU+9+H8iH5zYNbSFZjQbfWYpaMajYBkGKivDc46KwlhJRtDwTnFvPrcVFaXh0rbGcpz5+HgyPIDaOL55jPp5GD1Fr+6vHv8Pjjj/Oh/+SjvOtDH1wQ9prOMtw/hccmbtnS0Jk8xwicRLDlWOrbI9Qh+JiQKPDc889z6er1GC/dNBTjY88URwDvo0TS+wT/y6r9w4aPuC/Mzjlybdgb70TU+vBgiV8SVvxZjl1J1GLNFt8/s4Ji9FJ9XPRo6ROjJbA1q65PH+ysxdiui51zYntKIvflfWjPli5wPT9goSEN/tjBz3vqul5wDPqxqfcRiF2LTmQinXzpPW0zp0sEMQ3cd/ftfOj97+f8ubM8/I538tCbHuDw+gHj8W4MNDEx9jJ6gUaHQW8d3XTCfD5nvDMkr3JMkXLQlWA7S9u0VKMR06MpIXSMRmNGIUrGbF3jg/Cj515g78LNnB4dboH8TjbnJxm94WQKYB/LdmKvvw3e23Zjhw0TwHGHEUS9dzaZSZ0SucAttNgmQK4zRlmOSB1lfhIje1V/YepU/EUiOUA01gecm9JZhwsBGzqUGJQWyqqkrAqqQU/hWptG1qcpCRyfEkLSw22ZfDZM/UFW9rqzJvIdItzcM3fDQl6qCyGrDHUKue9VB57ICbDEVD4vfQMghA7qeYO0GmwqysgCKpcApVJ0wBxojo6Yz2valL4XzUYUkmeoMkdVZZr+I7knxiRHgyFBLX3SCo3GtYF2OkfPm5gKmGyIg0BmMoqqZDgeYBYUAOkCIdStlbZtskVEKTqZqhnyoqQclBgxuBa8U8kTJuAdKB9NSHCJE5Cy44OdA5EDsMhB94LJwIhmqBVl8E+LcJdHcNen2LqJBKXFWeGic6AagRtQTz2uKSiCwvRCSAEddMqETFCoWJCazs9AGpZ9UEUE0QaVF+idnZU97+bRdcuKTTbwcdYbgRBOOm4uewycOBPC5joe1jiFK3HjYbMUeIVjsGHzcGLVsPp6PvkTpzl9+uf5/d//tzT1jIff/hZO7e2yu7uLzrOF/7eklco63uHXz7oU6CYJEvc+LKDp2JTpNWb70tuY/tIcHIL1FHmOm9Wcve+NnJ01/MHv/Bu+96On+eR/+evcfPsdccgwGZ0ohvun8Vi814sV3wpvQbghJN7D4d75lFhr6JqGxx57bHEc9cOrygxidLzfwzFvKKLm5m/Fk+vroTGGoiiobMW8mdE4G2nILpxEz/uUycBGu2CfroVl6eGiNi+9F2Hp2vESzyProtzRkEhKkhyitI5PMM/zBcz4enuFnu3fdyNd19G5aOXbtom1bPTKm7FQEigVjQqUoEVw1mG9oxLF3s6YH3v4Hfz6r32KD3zgA+A66skUkylO7Y4phxWu8QgBZ7vIkkQjEtBGxfTCnWHMqQ42drUhoJUhL3M65+LQlRl8lyxfTUHXzTk6nHD16jWuHR7wtve+bwP6FzZr7zcldJ3Q8q4tjV5vktjkBijrqIKcPECEyor5uyHFpUb43y8CLBSeQkORq9hO6qVAqBSWkULZER1hMC+x0+98TfDgU2JWHGA1WZaRZSVZMUS/bmZDOMmRWFY4bDRYWXpPw/puT5jPm2QV7Bd7QR9ispcKoI0iKzVzSZ7+qYx4kimaxNjUxZrEK3zjcJMWqYuIniy6aKFpLPO5pZ43XBtnHE4cR03HZDKlrpvjG1oHVKaRPEPKIsYQB59CgNTSni9KKOMaIJIAu7qjm7cxqdHJAikGKMro6Jft7KCPD77ZFfLPzOqjX7LOZipNWyIpA2BQUY72GAxGKG0Ito+IjgUfF5WfMVPcHbvFeRu10b4lhG7pcIl5BNpkDPSAizl3RSlwwE6v0zRzXBfvT1E65iJItAn3rmI2EaTNMEGi+iiEnnuKQmNC5AR5HE5autASaE+Qm5RWiNaYnQrFFpOwjffbplAe2cLGX0fslhCBjY6kYSnXfn1wCGu0gRsoC2SDmRGsNSVssTNelQz/7INQFL/Ep//Fv+CZx/+GB+6/jze/+c2cu3CevChQmUHlGUrpE7vz9QnXE3AumozpzKAlSYP7M37J+yNwck9tdveYXrrEIC8g11gF0ta8/NILvHj1Cv/gVz/J7rlzyNl9Qj3HBqj29miaFpPrFNh1crdPDzlu2PYs/9I6qnm00Vy/co0vfOmLqKT6c8Ezb2oKKdHqJODvErS5CfTtf45C8NYRekv11Bzl2rC3s8uVowOsD1jvNs5/f5tfy86rktAJtcFHpzc760P7GtthVJL7BZegBG1i2pAxUfqn1LG1vjqJCCxMfnxYfOOu62i6CPn38r7cmHgBWUeXxNRKqWgD7B2ZD4gJGO/JEW4+e4bbb72Ff/4//Y/cfdcdvPbK84wGQ7LM0NVzMmOiKQpRKoFIlLX4aBTS50vHgCGHNhm6yOjaOCGqJMto2pZyUNHNO9q6Rrmoe57VLa9dvoo2ORdvve142rgRrLfi1rv8mLVpYv0GDpuIRGuEobAeCXoDm9ClQ2DeNMybYwSml5mEEMiDpdCeyvTuvyp184vTN6XVQdBxx+ZE0QRh5rq4NxZDUH2spcdkhtEojymQYYtXww3pI8uv7wbC6g2IqgvQNp6mtkjwkZUvMe7XaahGJVU1oDAFffBOSNx9KyE5ALpFMRYfC7BrA37iMbVaaO+Vdyg0k8mMVy9d5annX+babI/ZdM6Pnn+Jq9cOmM1bLCHCmTpEuDQ3UBicil4YPhX6GBpqkve/WvRFCiE03YIcKCEqI2KB85RlxWg8iu/38bXgQW6q68ZDQCRmHsQGEHQ+xFQjsmpE0Bned9H7wPfQaWwIJETbZvEeCR3iW7AtJP2xl+gbEILDGENZFJR5gUmdiHWBeTOh7eqEAByHgRkjGFMSQkbXCqrNMUHFNEPrEvaRLkMJceVAC9JEFYAsKVp8nCyVNhRVRjkwqRnahGCGk/K/E34bW7h3J4h6mxCFGxH3bqAKWobyw5YmILAhRXRjRVhDDta8D4AP3dPw2Lvexaf/t/+dv/O+H0M8PHj//eyOx1RVRTmqUMMKTLa4FVUiufbFzYvE87jr4hAQNEL0bAkuIMFjlF5tqhTJVyQSByeXL7G7t0d9NGF+9YidM2d56rFv8Fdf/Et++sN/j7vuuz9+XdsgeUZwjvl8RlaVdAlVUkvE5iCg3IbBbGHAs/rJiFGxsdbCfHLE9558ggyoiQRk19R4HRVqkozPROktGu/NA7JNPAidx5V6azsUwni8y8F0EoeztEKVBXFSJULg6xR/Vj18Yq1OUsglWXnkW7kEPCdTPecxRsC10fUuU5HEE3BYLNrIypMIPqxJEGQBpbgQknwrTWD9TkIllNfGD11JIEuOU14iE9sUOcY76Bp28wzpLHdfOMc//2f/A3ul4eDKq4xHFVoLwduFhaNzDpHsOG8godT9zS1A8DYa1fgOHaL203tPcA6VxWx2ZQCxeGvJyxGtrXn6med44vs/4A1vfSunz539R/Dqb65qcZcbgS3rgPXd4Saocd3A50QxlxsQgNcakQ12wk3XcnBwEPd7ad8XCVOgmzm5cpS6pZBkOStdnP4NOC2xQCgfM/MEQp4xOeqYOE/jBecNOiuie5fyIIqiMIxHZg36XwtxWk9C2+SItkhRXJdKbdh7SnTum07nuNbjnSN0FhsCFDlOHONsh9N7Z9gZneVVdxknGa2HTim8OKz4ZMyh0V6jyAlWaKcdfgpFXcT1ke/Y0RniPNevHfLscz/i3//xnPF4yLxpefXSFS69doXWBrxRaAmgA2IUJtP4XNHisSrEBguFxyAhRwWNYPASEbGcgJs3dPOOQkzs7EPc0WZKKPOc3Z0hxSDvERcPiJH2fYcHs92mTo24jjajWjLEVKhsBNWIGQYbHM4bXKswLqIetnUYn0iPziHdHN0eEeoW7SOZMNn1k2mFNinyezxKnijCpdo/PnfNg03XYp1HKYOzHmMyMiMMS4OIprMe7QpCkBhSAxSp+EcvixajLJmxeJlhbYuubORPELPPvfcUuaaqCkaVPuaVbHMFXS+om0k8JxuFE3r+tZFP1tA42WAutP58gqzJBbcMCrIhInyT0kBksyRwbX12rZ7TZpqvPf4Eb33o7bzlnvs4evESjRIGO0M6CQzP7JANR2TjIZLlKW8+svqj1tyjTYYS6LyLREABo2KENY2lvXKNq5evEIJj98xpBmdPQZERfMdoOGB+eEBVlGShgqMJjzzyCL/4iV9gNBrFA13JwlolyzK0kkXYVNM0VFXF9OgIfGD3zFmoG+aTQ6rhCJoWjMHN5ly+fJm2bbn1nrtxs3n0j+gkJUfVTK5e5RMf+xhPfPdJLl2+xhPf+yGhrpl3HTuDW2g7h9YZeTng2rVrVFW1MBtb/p2KY1SmGENuUh6Ki1yzTMf0wdA5Lp69wNVr17jeHaasgDjBBwSjc6yz6T4LqBCiWiuhG72CwYdA5wJliIo66F1z43PJs5y6bQg+KpyaaY14z7AoMcswSa/H792fVuCVVLwkLHMABBd83AUnol/PSGRNc9iPaB636FQcERL03qFFcWpnRNFZbrt4G3//wx/mDXfcRuPaFN4UWCyLU8HUIpzokXr2Rw83lRm6belaS+csWVZQlCX4yIScz+fIbEpGRjkc4uuO5154gedefpHD2ZwH3vIQI/3qb54M71ne34WTzl7CSc3/tpXkxnCgTcSgDZIi2UJGTP973jY0tl3V3/r4HikCmRYKE5YSrlhA/0oLXsUJNnInNB2G2gbazuNdVAQEH0lzmQpkmZApOdZhh3UkYxMbewOvYhuycoPDNRDwc4ttk2RPRa35xM4IpaYoB9w+vp2BHpD5nKbV+Czutm2qnAvXypCjXcHA7HFtchVqjaqFYOMk30wbytwwn9c888zzvPba5Wi56T2Tac1kZiND2nswGq8DldGoXBMqEy2AjUkObJLKnSBkEOK0oTxoGwhNh7cek0h5khwGg3gGVRZtgCuzgCOnw9FXu8n0nZOjaWjmtcQJrd8hGkQVYCrISqwTOutxXh0vCX2I078HvIoWwKHD+A58i2BXCF19Zoc2GlUVESgEam0enPqoQugRhv4azMyQPMsigrCgO8WYFOljwon3vUhAi8OJI9DipYuplT1pSglKQZZpRgNNlWlU8GsWGTfIBbjhDp6Tlr5sUt8srbRWEj+3pAEuc4QUW57bMry/tGaQNSQMfxIRCGxvXhYqHMWkcZQyY340wU4azLyhs3XUqmdwdHCF6tQOu2fOUo13kLxAlInIsEqTpU7jlgSM1hhRqM5B2zF9+RLTy9c4unwVGyzddMrptmF0dh81HhBmc0qTYedzTJ7z//7uZ3nve98b0/eqQXQZTGN+j2BJes0qWe22bcvu2bPgAgevvEIummo0JszmiCioGx595PP8yZ/8CQ+/591cOHeOLM9jIFCRc3T5EsHD+XNn+LVP/QoBeO3KVb7xre/wf1V60wAAIABJREFU+Uce5VtPPMHRtas4D6f2z1NPZ7i2QwYnZYKb7OvDkhX1sgWFDwGFYVAOsdYzm82wwaMkvb+vo7RTaU3htKyCPyHeTfFcjuZqMcjI0CVOXlyZh8jT6ncHxkT4f9lucBMJ8JhU4Aku4G1H2zZ0XXusR9SKY3yGRcjQ8V3pU9Z5RiYwMIZBkePthHvvvYef+qmfjAeqRIamLJMbFpRykoJ7Gflcfa7zySzaGY8rcA5nPU0bJVrWtgzHQ7JBSXNtgneOeVPzyOc/z+NPPcWHPvJR7r97ZzuJZzMrt0UWt1++wfdz+9fKtl3/JvaxbOU3EZZMgGYNs1m9OHglpbxppdEqYHQevdm1X7GzjMN3QIcYzKIxOMnpQkZTW+rO07ke0u0zpwVjFMGHeSnl8wRuRZJ14zq0KWtPelOBD2EVDWATcnA88QQCoe0Qn7TmBhrforXgjMUUmmpcAArfQjE2dKE+jv9d/FbRgteVqFlOsIahHVJIQegCRZXhKs/EthRZxWzW0M3iqqtN661MGWznUFpFH26VkelYnDCGVivausMXeTIriZ4YS1nNkRHgA918hm1blHN4+nwE0DpgMhUn38ykAVEYTqdve/mw/WZzePjupp4PbdfF7yUCwaBUhlI5QSraLmAbHzNbkhY8hqkoxMXpyHuP9tEMKXiHDi6u1wJLkL6hqEry8RhBohrCerogC5/0uP8PhKASGSqLeQaEJVfBfsJJi5gUTEMiPtrQJfh/od2IHgU6ygAHWjMwycL6BAq3SS63AVGTG0hyt8hPV3f4m+7TsJ3Hc8JhcN04SE5++TpKuIkzsGwXvgnpcJ4SMJ3Hz1uMc5TK0Hae4GskV3gc89bSHk4xVUVeDhiOdhjs7iHDAZlKr1PpdOkKtB3dwRHt9QOuvfQKs+uHNJMZQXmOgo18HCNR4ptlYC3G5Hz10S8xn895wxvegMmia6BX68Q+fzx/BaibGcPhkOlrV+iahr3xXlxHHxyhyoorz7/AZ37rt/mTP/sPXLx4kYcefBNN0/D0009jvef8xXOI0YxGI7IsYzTaQWnNLbfdzn0PvIlf/uVP8uiXv8Iffu6P+dwf/X/M5odUgxH7Z04xq+tobS2bof/jt1w2Qvb9GVcUBaPkk2OXhjXn3euuAHrkfrnxiJzdkEyONNY5RAuds8zbJr7/SkWVRy8PUhJvyj51qGcWauSG+v/AcWrgciziMQPRr7FA+99J5qSFUTVgKFBPJpwelLzpTW/ipvMXODw6YLgzjrzw1P2td7ORHLQ8/a827r0XM12HC3G2MCZOg2hNPTvklaee4dabbwVl+He/+2/5yje/znt+/Cf56Mce3gIjrod8yIrpTzD5P5Ou/Z9vyEJebwbW3cpOZI7LdvTgxMERb3wbAtNZQ93UWOcXUs7je9aT5YpMR7OaIIlFs8JJSyn1SghiAEM9b2ga6DoWB7OEZI6hDGVWgXX/EeFXT+ipN70X62zoxWGnVomCm9CQ5ZZaYmtodB+kEadJo+NVYl3Dpauvct6ep8s7QucJee8cdkxmVUQyIEEzGp9ieHbMs/vPol7RhNoxnc8xGagsoyNE8hMKHxweh8oMhUQyqtIJdss0RZEzzDJUZpi1Dd1giJMl4x+V4n9V9L2UEAl/3azG2Q6sPVY0JP1/poVMoEwypqQlHGmlbrfdVGwXHSAXjpxBoTBkkuPJaW2gszEMCaJNdPSCleNpwscwJ+9iA2BUL9uNH1wIgbzIGA4rhsMMIa4EZ42l6VyUOy6dkt5HS/HMFCivEWcRDyZZFet1rlzviS4e51p86NLU6xdIhFaQG8NQa0rhMnDmZHpm2ECx2ZCweYItFrYTVk/IeWVzM7vNvEe2yf22cQGWCMVhE2tsiWgsWyaDXiY6r6mUkIWAb2pc21GaEm1yfIg2ylmWU7eW2WxG6y6jTc5oZ4/9s3OGuzvIzhByBRnQWlzTMT044Oi1K8yuXEXNHVI3VEajTYHzUF+7zlWtwQcGZ89CnnPtlZf4yy88yn/2yV/B5DnkOc18hu7VaEtNcSTnpvNdNO2sZrizQ5jOmV29xmA0JnSOr3/5L/jsZz/Ll770Jeq6ZjwY8tu//dvsnz3D/Q8+yBvvv4/hznhR83pkej6f46nJ85zJ5Iif/uAHuOeeNwDw6Be/xHMvPMdwMMbkGZTVSpZOP/Qq5MR/Q+LKhZUU6RD9MPKcqqrwU0/nHd65tU9VXtdnIKwN2p6A1grnWwjCdDqhrqeUZYn2sXkwy+YPfezvCnSxJiWQNVah99Gxj5Dy1BKM3AcU2MQbEHVs1rH4WQSCtwwzjbQth9ND3v7Gd/Lwww+TFQUVNmYDEOLkID1MKMcSRYlQtl80+WGlEzJVSTOfYzuPyTOMyXA2UE/nhOAYVAW3vuGNTC9f5bd/6zM88hdf4H0f+AC/8V99ghtj9luY+gFJxV9OOvUtFfjlfTgb9oTr+/y/VfFfPbycF2aTGV3bS7bSpBkUiEN0IM8VlQ5oiR4BZBJv5jzq8iN1vgMJiIo2uE3TUU+h6UxSC0QiphLBmIxqVJkzp07/ekzluIHP+uLft3gehHUFxdphu06KIsLzQalo3gHkSmi7Fm2ESTfj+enLqOsBc0HihOuT2VGIVrWRaxd1zc4EsmpAdWdGftsrTF47QjLIDhV+brBdtMAV8XQISiu8VnTexkjbAB0eM8gIgxyTl4zzHcg0VimsDwTJ8HLM/g+99l+iH79xjm42jfGqzq28VVortIoeeTnhJQI3JV1xVRtzt0+7cR/8IiMgBEWmNBkGyKg7ofMmRSKHhayvj4QTH2OaxUVf9uCSRAAb4fkeylTRXKhfRVgRZnPLvLG0rV0ckv0az2goTEWoM2g92knP213wHHT6uywhU9a1eOVAe7zE+N/oWyIUxlCZAecyd2YjBP+66Xxhg1JATjbgQU7KAjfxgOR15Kxh7foPW5BB1psVOclD2LRFW2kk1h1LA4fXIwNdKaFrWiYHB4wGDmU7CBZCyoBRnoEImTLgPfbwgGt1w7VXDafOn0VVOShD08yZzWrqyRHN0RQ3mzEy0Xwt13G4rLuWo3rOkXP4tmFwMGXv3Dn+9A8+x20XbuLs7XeA62iaGikyXHqN/dDiU/EnTbh5ltPMZuDmCMKgqAiHU770yOf5V//y07z22mtkKHbPn+fee+/l/vvv58d/4r2cv/km6q6lGgzwIQYDaa0pd4aUtqBpOrKsABUb+9tuu4l/9J//Cm9/+1v53d/7LH/1tb9G1Rm57fDISgMQ4fZIms61AR3vueV/Nyreu96BTzkdo9EIgMPpJIaHKb1AAXrcXK3Nh0aO63aPCMRLNIZ+NbaJ30s0TUq41Vpj2zne22Op9nrS0Lpz00bznwC4WFz6ou6DnEAKonfycU6yTk1Aljq4XAl12zLOCt72trdw7933REJeNVgUeMeqxCOkXGZkffKXFa1qW9eIMhRV1Dl3bZQZKomuYaIMzzzxXf71b/0bnvzu9/m7P/uz/Nqnfm5z4d02xa6iAdn2rj9sN/uRLRKfTQS58Dr64vRwZwN2eoB1kZzjiVMWIujgKUyMAc6VA7E4FdctwfjjK81EHo43Hm8C1se94VENTcghJFOn9NxEKUaDYWaMPtnQbNNAr5oXrZ2cG96jsC4TFBYBskZjMh0TCUUi2VMgOEXjahrbkRVDnLuEZNHzICwCqyICEgCvhVYHnpm+wCm1x4WHbuO17CX8sx3uWoebeuqZQ08UYsGaqJhwOn6ueYjwv88KjqqSanePsDekHZdkuabJFZ0NseAn9Xtv/hNQkYQYiAmK9Qy6Fp1Yz0EiDBr37jlaF7Uh1IiaAQMC1NZHrwECC+6uj+uD3Biq3CAho2kDnZeYf9CHIiSDLlloI2MT4G0HPn5XWVq3hdThl7mizDQqiSjrWc3kcEbddKsmJ0FhVEGRD3CzHJxDWUFCTHvUIdkwS6/V6HMALF1Ihs3ikrw3qU9MFr0NRqMIS4cbrMeE12/ug2zp8bfIVpcf5IXtmq6w4fvIWvFe87iWbU3/ejzwhr8HNloRf0/e8vbLl//PxwTYP3Wa06dPIyLMu5ZKJUY94LsWMSreV1qldU7Azae4WrjqukREE5pmTtN0GAKlMpTlCGXTUBhAdTY2Aw5c3dIeTDi4fMjzTz/Hd7/5Hf7xf/tPYTYniEcZgykKatctCOi6f0khrowAfN1QKINvI7P+0osv8Xuf+R3+6N/9IfPpjNFoxMc//nEeeMtDvOPdD7N7Zh+KnKaeMd7bYzo5WCTeAtB1yRdAo8qcQZFRT+eUgyEP3PdGqqLkh0//gMce+2swUNf1YgntNhzGs6XaqrRGK4U2hpBlZMldMKrvFLnJGAwGzNsG3xynBoYb7J+11mTGLNYA/aAsyRypaRus92QS8OIjCb5rkUwxqkYYkf+ftDcNsiy9yzt/73bOuVvuWXtXL9V7qzdJDdpBLSRAyEKStbAZiyHwIDPEDDYaJvjgwDExng+OmIgZDwGeGGEHDhTIxhYCtAwGAZItJCFaW7e61epWd1VXdVdlVq53Odu7zIf33JuZN++tFjMdUaEKZeXNvMs57395nt8jUEJNxv+HCwClVMMHnb8CEEKQqIaL7BzWxSfkmhdlnCqopThy+EsJmkBLa0Jd46uShx64nze+/nV0e22qfISRAYyMN2bhj6INm+hWKcYimOkrvQGqCIVJE2ztGBYFRira3QWEFwwGAz7zmT/lIx/5CNok/A+/+mHe9Mb7Z1jPXkZZGw6NB49RucRUl8rxg25uYJA4umY4cmM4XtFP5xE4a7G2QsuD3VO0YjUHiJa0Uk2iYxfsBTjV7PKkAhkJdsF4vJFYLRhZwX4dGDqwot3w8hpdYXOQpr0uSh1NZjw2thcz9qJhSvUv5oxBZ65VI5kvyZJ4+MsoJ5OAlgYbSgKQ2ozgBbUMjGyJ17aRJ7ix7ry5h3sq49gPBea05czaaRbO9tj/7ian3Akuvfgim5f2GWwVZCGl11og63QIwKjKGbkcZwyy1aKddtCdLvaWNQY3LeEywaDYp+wkh7j/8ggHQAgVY4CLClfZqGZu7ETj11UZTZKmtHo9mQo2gDPjAym3jtI6ahfwXkSSfsxyIk0FvW6M8K2KgPUKG2ML478JkuAi6l/6gHAW6R1YG3ka2DgBaKJMRYxYQyFJpUQ1t0I3GJDnI6qqmnx8I5MgQYuEJPTIiwSsRQmNCA7RUABV8BghEcSUvyh6jH5pLx1e+OY944A+pzWq2zloFARzIO0zfPKzruMbITmOuVqmCvNZqz2mBbAzHAFHIr+ni5IpEJAQs/Hix3JJpoQ3QpDnxee2t7cxwM23nueOe+6gu7qE7Q+pRcBo1QRZmchf8HYC+SHE7tVoTdEfIpvIb2xNEohaF6kwIlrsxln3wdYoAm2tsRJcZUls4Gtf+1vOr62ztrgAZYmVAd1KomB8MtltkM+Nul5McgtkPPyzFheffJLf/N//Ff/1c5/njttv5zWPfB9vfOMbue/Vr4IkgbrE1hXBW9IsxVYVnaUVcA7vDoLwdJLgrWW0u0273aascipbY7IWd993F7/wCz/Pl770Jf7mq99EmBZBqCPrCX9oTWetxQeB8xaUjxMu4/A+uuiUkJPx/fjMbTfiwqqqjn4MD4cGNW+FMTo6I8YTgCaGdoxFFkpR1xWujNdKdNB5Tq2f4Ozp07EAEEIcUf8fdO0S727kRfTNga6incc76tpR1TUqxE5cybhfMU2RoKVCyNCkfsUbSzkcIILjVQ8/yEMPPQCpIfGa2jlUGCvqwhFu8xFSEn5y4MfmcExKi72I9YHSOrRK6C4vE+qaP//Lv+DjH/9Dnn7yad7y1rfyP/36Lx4/VLjBeI+pr88MHREzdoEzQoBmCoWmDsGZlT7HbXaHugbrLFVd4cZshMkHSYLzBNnCtxYZZW0SrbEyIVEB1aB/g3QoYQnK4ZWnVimFN+QeKiGolDj41XwAFEmiyFoJOswMNTh+g5oulGZZmgKzoUtT90cdoN1OUUo07hLfJBR6tNPYsqaoLOWWRaxrglFUCioiz8A1XfgYguCkxyWOPTXgkr/Owj0demdPYMwat+yu4b5xkfa+xfnAXe3bWb3zLL6AyxcvsV3v4LRhffUCpYS6nSIXu+zeusCGytlRUDtBUBJC1FaMswCCiAwC5UHWDlHVUNiYvSx8LGukR5tIAWx1WslSR05QyR7Ii5qitFSVw7oDAJeQgSQNZC2NFgpfgwuGEGQEADUJhMHFMCDhG/uotxBqnK+jxC+4o7S1IONN3/NNgbjfi4DNc4pRTl1VU0enQogE4dqEWhNqE2l/gYYGKpDEyY0MonECAKIi0JDTsEduikLKGG/aajVFRniZ7pvZHA4xz3c/Y+U2S84zXWBM5wMcI/rNE8XOEu5NFQfT+OJpwWCYWp0dEh3WZdUd9QcEYHV1mVNnzpC1O+zs7eG8JQsKJQVSx8lQGHejITS6Lwh1hfQB7eM6KjVpw66IHf6wLCKltdlge9GsrYQAZ7G2Zn15jWJ7j/te9Srq/mhiOSxGOarbmnj7p9XvzcIbb+Ph/+mPf5z/67d/Gy0V//iX/zve/OY3c+b8eVCKfHcXXRtMK0NITVGVmIV1imtXSQVxRK81wTnKssQYg9SapBHmLXY7kGbkgxH7W9skRjdT72bqecj+F4eIByt0reMKYBwKZL2PDpXmDGulWWTaQEO/jZo45xxlVY4X3jecAIyTCcfjfz/po2Ik8mA0oG6mdwpNr9vlzKlTvPKBB6MG4DCd7yATOsy0NRylAjZUstDwlIUgSRJMkkzqIe9jWpmbxA1HlbELkGWaVgjsDfo88sqH+fEffyed5WX61zfoddrNuHp8k2lAQuNglbj8o66r6OU30Xc+ygtMkjAqShaXVyjriqKqabe7hCD4q7/4Sz72sY/xzNPP0O0s8M//5/+F173h7uMd6vShOyvQR0wL1DhOsBurlMKYHSGOWnRuyJMQczrfGaIepkVywu4Vo+8WVXk7wskQPFkrpR4VgMcqxaiWXLFdvrWfcbKb0lY5PaPInEcWlqwtSKXDu5zgHV4tMhgZ+pWnJmCFBdcoCJsxsNaKLEsiYvKYHUrMQZ3PUGdPi65mTgGO/gxJYGGxTbvbJiDR0uBtjTY6dq+1wvYDJsvotRbx4ho5mhwPKouHYDSpgY3XgdWBoXZcrnZpJUN6a22uyoDqthGrJ+kVBlFB2V2kXuhSB4G9/TSyWidpL7BrEoZe4GSCT9pcVTmurBhpjUU2wsoG/HEo9UsGhQkg8wpR1pAXSOsmI0PRRBsnWUqr00IfOigsgX4/ZzCsGI3q6NseA0FEIDhLd2kZKRVuVOLVEqEKMazHQ7A+2v+aQCThHcJVuGoEIUeECq0kEjtZtxmtaKkWp1J/f4xkEMmwP6QsSlHXduIYcM5ipEHIjBB6lIMaVScI50m0BBtQMmCCjLAlSaMtqvCiorQWZVzDpYghR/EGqFDG0FlqN3McMUP49zJ6munra+6InvmiVMT8MdUR0eoNqJ7TRUYI8xkDx9ga3EAPcPB9ly5dYjQcooA777iD1eVl+lvbOAG6UQWPk/6CjwTR0DhJRBPfLAToRMcRto2Y2+A9toyda7vVAh9wTXetZIRuORvFue3EMNrZwYTAQpbx9BOPc87fxWLrZrIkJS8KZJKQpClV6fBlTWoSwOHrCmmi5fTf/NZv8fnPf543v+UtvPe97+XMhQtQVdRFgTGS1sriweGMpG00bneXLMviwdk0SwAmiTzt4CxKSbSU8dzy0XEjhGBYxE7ae2IeSrNJn1WsCK0wTbBeaCYCYw6/955EKGodNTQcstUmScLiwiL9fh8fPBqJlmqSQ6CadXona8XXdfwZUQ2fwXsqa8nLHCEEo+GQm8+coRgMWF1c5NTqGg/ff/++Pny4z01Qmu9EjCCOsY+30Q8d/txJKenv7ZGZhE6a4GwV+yslKfsDhoNdLtxyjve/993cdO4M+JreQpciz+NItfnwuMkJygQiFN+wJHLcq4pBXtDt9TDdHm2dUNaWIAx5mfOF//pZPvGJT/DVr36VM2fO8MEPfpCf+um/N1uBe0yUM+1lDy9PDZvYAoUI2cJ9oth74gjq8+UyxpnBBoA5CNMpCEm86e0F565Wdb1GECtGS4p8hA8gdawWNyvJY99+npdeVCxngVbi6RhPYgxpJ2FxMSFLLZ2epL3YRnQSrg0lV/cFZSGxdU2qE5TSjIqKRCvSTNPtZfMLKTGl/J8lAJx+zpPX/OUU2JC2NIudhHYrRcvYTeMFShjUKFDtOgZPVXCTQrcTtMmAmhCaWFqpCEIhkQhlCPGr1EmglIERFanIccYjjMK0DYlosa37XBIFwWuKVU0lDLWoEEpjg55w/+P1oaLfXxhCQ/8bOxgmW+8gUT4gixrKGuoqJuo2PHWBQCuNMSlZuymWm5fHEpHI/X6fvCibjluOZ/Bok6CSbuQ62BpnIyEy3gnjdAhPEwoUY4BFqMDnSEbQdN9RU9CIa42m1Wph4umrN4b29/Ii/6kQ04Qaq2hMDFRotOwRhKKyDmENEtWwEBumO6HpHD1KeJyoIwOAKv5d+on2JwSBdXEamWXmUAZFuLELJ0xfr4enbp6ZYV0iHAdYienCldnx4NzAwvs9GIVmu2nm7CrELNvjQbOS5zm2qllQihNLyySNLZMswVc1Qhu8q6mLukGBN/HAjStET/QckSjnfEC6mCGiG4V/cI2WSB50x+MceiEERkg2NzbQQSCcp9gbsHftOt2VJdTyEokAJRT5YIi3Lj4uAoyh6vfZuPQC/+Z3fpd77rmH3/iN3+D8hdtACorBPkJK0qUebnr6dMhZ8j1xd8ercMafMc3GxgZ7e3tICYudRSovJge79e6Ic8U2U4Ta2kmnPm6yJ4F442a7OT8lEYntm7W8bVw8sVk/eIyxYP/w+e2b/JPaeay3JEnC3v4OvXaL/u4ei5026yurXDh77srZ9ZP/Xh8ODDhs5TvgA3wvL9IBInViC+PAG64QJEahCeSjIZmJncuwyum127zthx7lR972VnpLC5T5gDRJY+xsc/jPsz807QF1XZG0Mjoqoawsl55+lkERiYR/85XH+MpXvsIT33yC5eVl3v++D/Doo4/+Nw8+dNvvzFLgO9SHFO63ZnJpplndYZ4w5+iFKIr9J453H2K2wI8524C5+8g5XYggkZLLvW7n4W6vTStLonPaCVxtkcBuEBR54NpwRFuUSA1agjQgE0FqIEshSwWtLEGYhKKUXNkq2Rt2aCcdrIuJj0mSkKYJi4sLpGkyY2Ixg+R3hNQyR6Ed5ugdmC0g7JrkWwud7N7FhYx2S5AXIWY+GIMYagYbI5596bvctnmGhbNdBqMhubQN6jglhKQZo4+XJuPdvEaQEJyhCgovJSgNqkUtUmyIKYJBSYRM8CojYAguoLWBoAlBYWVMupe2eb+lQohmBC8O1g8EiXQ+wkzKutnNN4dilMSglaaVJXQ6rXjoNS9DHWA0GFCU8cbjRbM7RSBlgjBtRNajFhrraqxr7jxeRHiEayKBvUDYpgDwOcLnMT8eG90BzXVoEkOn1cb0enEyF0IojXlX7osgxuCv5lyNh38LY1oQBIUvkL4Vn1fjAJBBxrjhBlYFHiEtlgIfyqYAaexPxHAhZ130cZseksFsEd3cNUCYPcYXc9Zz4eWSfXgZBWI4+tkXzMCBc4PdPrwsiTZMBQGJo79jf3cPW1esLi1wy8kzpELhTAJpSr8sscFTVxVpkjQhjuKAzyAhkQopobQNphrfrJgkSkiCDBEP3NjifPMU/SFAnJSSzWtXyYzGCBjmJXsb11lYXmIpbaO6Ldwgp7W4AFXFaDCATFAVJd94/HG+9thjvPvvv4czZ86wemI9rnutJWllBCkoqmLC35+EBYVDAvLptQJH2W5jfk2E8kSFfZYlPP/881y/fh2tDAsLC1R1iMC1soS6ccYd2tt773GNsDBmpRgmgQPTDfghsbwQgtokVAFqWzfheeLo4xyywIem0PYu4vVtU3R461BaQ1XTzTI6abr1ygcfemFvd/cjkwJg7OWPeF1xwwCg73k+ECJcpNPOUMHjK0s7MegAdjRCE3jH23+Ed7/rnSwsdnF1gXOOoizIFrqM9vZIkuTYCiIctolpQ7AOoRIuPfcMv/f7H+MLf/0lWr0FQFAUBSdOnOCnfuYf8IbXvfbXX/nQhX8B4XdmgzYCCvdbR28aYY71T8ywCoUZkZ7hxpqCWSPt2cvF4zqEGw5rQnb25Mn3nTx7UpxcW2Zzs8veCy9hbVNBak1de0qpGAWNpIMKJo6Ac48sQOMxviaRAa0qgsypXcqwNJQinRAFnfNkxmCM4PTaKh2TPQninuMwo2nhUpizZ51aq4gZO9Vj8a3xa6e7nXuXTqywvLRAt5NR7VtckDghkIVitFuSX+njLnrOnDjNgH1KU1OJSMvyXuJFpMu5CU872iGCMASpYraAhCA1AYX1YIVCqRRBgvVxrC+kRoj4fcIbAgopEgKRoCiFnhz2QqjJCiAyACTae0RRI0YFonYIN2Y0+MlNPTGaXmYO8EEBdsvwzbzfvz8fjajqagL6AlCJIm0tEFSXymsKHz37MjTQNdcc/D6u+Ru1ErgRuFHk8R9K4UNEkElncRHdpPA5IXQRRDeomBwZD3/VvJ+GxKRkbY1UEEKBChKDRgY52RcrQIk4YZTCE2SNDzneFwRRHel8xo1GlrZotVtAf/6BGObpAjie8zHPVnfkr1Md/UzSZZgS9U1NGcMNDvRZqYPT4uEwBTuaFhXOgABtbW0h8JxZP8mptXVsVUR7WitFjBRBaeqmIKvqSFGleU8SqahCTQg+5saMdWD2KDgudqRMKH4+HBQF40nPaBSV+qmMRcBod5erz10iSTLap0+gQqAurqMrvXueAAAgAElEQVS0pr28wmDjKp/+9Kepqor3feADLJ+7GUajRo0f0GlC0BKkxGhF7exxTWcD6fleaP5RR9R02kKBMjz/3EX29wconaGlIZijRc2YiGuDI0kS6qnGdYzplYEjZ60P0WExnk5IKcmyaL12zuGCi4JeecDsETJMJgq+KbBsODjLyyqn1WpR5znLnTari8ucW1m79uLly79+yy23bBxZAVhrcY0Y8HudAAihjiAaxk9GhrEwtCZLDOVoRGYEy90e+zubSAIPPPAKPvD+93D33XfjnKWqKkxqJheNMjqOiw5FG/pDqwAP9AdDtNaUecXnPvcFPvI7v8t+BT/x3nchpIxikDNneMP33wPwL24ssjv6ta98/ln+8s/+HFdUtJOUEyfWWT2xztLKIutnTnH2jgW0Mc1NYDqaFuZH+E7/GzGniQjzYT/cQOkcd3cmBW695RzPP3+Jy1evsr27T79fEoLC+YBWaYOcjUWftzHdLyiweArv0SqJ3V7ZiiI1ARhNkB7rY1RrliWkKayvrbC2ssSZheV7ZgoiZ65bpu+r4mjnPyurXczvtNrA2TMnOXlimYvPd7iu+wgnI3DDObItTX6x4NrXr3N69QTmbIpZSKilx7sK0EiSaF0ai/SI3+9VlKJ6PLb5u8U3GggZMym8RwtNkCnexw6/9gHhXDP6981bpghCRjCPiOl/cZI21taIGP1bVVBWGG9RIrLCYyEcpwFaBjpaHrGklVLenxf79IdD6rqKYliholpeJ+hsAU/GsHQ4G2OMw9gCOIlGJN7QfbTnCT9qpgDlJD9+4gJKE7rdFu1OipSxXihrR+XC5Bw9AIoZsjRjodNGS0WgHvseDrLMG+ufat780EwAnC/wviSIGi/8oel9A/cy5IkKnyfwZgLm2KF8+CKbLt5nXnNz7LfTq6ppS2CYFgPOWBsGMcP6K2Zb/Gbu/jn+PCbQNXGcPTIFENq4uolEcvrESVKjGZYFutGTBGNIhML02tFqWtdoZxsxt0Y4TzXMKYcDsDVGSVLVAOSagyc0gWih+RNTORsBa3NeOOcYlQWnl1cIIZBpQ5nnbLzwAlopTpQFC7feGm2dUvLtL32Jr3/zG9x+91288rWvBe/Yu3YVpRStVgvVboH3FEWO9bE4wYcb3C8OGlUxZ2s0PlxBopWiHhVcunSZykI71U3QjyZpVqGJMoykoigKgrM4Fw971cQGhwDWumYycXD4SykbiE8T7dvk5Yyza1xtKWs/DmedrABEE3jnxfFV/jh/oN3qUBc1i90ei93u1l233/GSFPLq9c3NLT0W/I2T/MaggIPq+v/7JGAcAiQTQ6I1wtYMdncohgNe88gj/NKH/hH33Hknri5QaYtQVzHO0xi2t7ZYXFyMMaLNBXJ4XeHHanbiyHV3f5+vfeNxqgoeuPdOfvs3/1eO5X3P7L6PP8c/+oPP8qk//BO+++TTnFld59677ubuC7eRpilPPf51nr30PKadsn7mLD/6nvdy250rMVXpmAhwekcf5lvgpkVH4387K344zIHhHA7QaR7vnvO3uO+cv8i5y5dFf1hIHzYZ9KMgM01b1LVHThTo7iBdUXlqF6Myo3pGI4VuUt1CY8uMAlDvLN3uCjedO29vufNC6EYZtp4rsppZuITjndVhIdeN7FiH/k8JnF07df306sra0tIiW71ddnfzJuLXI/qO8lrJ1e9cpWyVnHzLKVS7za4esB9qHGoSCzzuVSIMofHsjseZR6xgB+sM5WUU/XqwSJyLr1GGwQiNdgohNSWQW4ccz1TDOMmqEd+FeJLaUYGva3Rtj3QRUkQdTUdJUu++Cer+8ddL57A+UNcV1jf79ziLRQuJ0RnSS/rDktLHqX9wxL/4g0hg3HgKEBCuxPshStQTG+74vyxNaLdTul2DalwIw5GlKh3W+qYejZMOHxLSJKPbXUQHHUO6fGRJqEOkShnlTjHCWMYMABtiASCEnXSU4+ag22mx0O451d/5IzriDYhgZgoBjwnt/BxdwCzYD/MFqbP27TNxvXNCgm4Y/z0lMJxuWETgWIjQMSfS0VvOtWvXMNKwfvJETKWUgtZij6TTYlGv41yMzxZaxYNJxCArVAL5iP7mLoOd6/Q3r0UkqHUkQsVC2TmEin53F6J6ywffRHTH7j9OnGFne5ez526iKkukkmQ6wRYj8u09rlnHwtIqpJovfPEL7IwGvOudP06yvMT1l15k7dRJFldX8MFTliX17s5kPK6BYhQx8DQTMBn+zidYvBdKhfACqTTPXbrI8xdfmNwnrfVIFQWQWh7Y3LWQlLZmNBpNPPljnsGB0y4WTAjZgEAF0jfnrgsNyS8+H5ckcTp/aPUWxYBHV/jOxSmLbdb5IQTKYkS3nbG2vMKtZ85dS1qt383SdO+nfv1XvT6s+B+vAUyDX/zeBIHySNUpgzxiE9RaI4InSwz1qMTWJQ8/8CA/+b738tofeBNusEtVlbSMQSmBD5ba+iNeyiN7/8PMYwK9xWWGgxHf+PrjfPVrX6cCRsOCz33hW7zpdffNiNuccYH55O2o8lMf/9in+IN//x957jvP8JoHXsU/+9V/ym1nb0J70ErSbrd55KFX8N3Ll/irL3yOr37j6+xVFa/7wR/ija+/hzQNxzveeT9TiDnagRup42eJkpitEG6+0JLwyCvu+4O9vf13uGA6adJic3OT3b0+RVnFg83EaM9x1Cw+YG0g1uuxspdBHhKxeLy3SBFFXcvLy9x6683cf8+94fzy2m8BHzo+Lj1kYZq5yxffmytiuoObUUicX+isnT5/M2cvbbCztcP+foGQAa+jAyXbSCiTmt20z+nFm1ktu8gzO7h0myIBp0UUDwqFDyaO8IOZFG8KhfBxpy+FbF4L00A+VLOi9qQqJipKK+gGSasKmNKStjoUWcJ168hDPGuPeHwPFQLFcBRXXBPwVezyWqlmuZvQM5qVLL3/8ItWWktu4z72oCuIcBCTtEmTBOcDo/6AOugmHdOD15Puf+wajS6AQPA1+BoR7OTlHyOis0TSTgQ9I9EISgLDQUVZ1NjaRcfg2METDEZltEwHOxCEWqNq0YR7yUkQkJEHeSECj5cWV5d4XyGknWq6A+1Wm8XFxfRUx/1vcUQopnC7YcaEaeqAPDaREnM0J3MGWkeAVzcS+d5gEnYjx0K4kQ5ohgPpyN8P/t3X+neyubmJ1pr10yewKpB2u3TWlvFaIrodxDBHtloNo0GAUo2dTUFm6CpD0knBlpR7+9R5idYKLVQstl10E/hmMupD1KBommCxKk589wf96BJzNcFFYl7XZFSDEZcvX8a5wOPPPM35u27nx97x9yA1uNGItRMn2N/fxxM5/q1OB5nnkTnhopDZKH2IYxOO2OmCePnDf1xsBe8RxDXAU089zcWLLyCRSKEbS+KB7U80XvtWq4UJadzjO0tZ15NVnDy0dq+qKor+GpGllHICFBrrFZRSpGkaD/gqPo53Di8lUkW7swuxgbfu6ArAOYfykpXTiyz2etduufWWS1VVPaaV2uBwl3YY/3uEAvh31gL4Izf9dpZQjfrx5kjgzE1n+cmf+ABv/9EfZrSxiU4lrV6PfJhHbr8PVEXO2uoaVVlOHk1OmtoDNCQBRnv7XNu4zpe/+GUuPv88SdNM7e4PZlf1My6er//tVz71yU9+kieeeJILt97KL/zsz3Ln+VvJgiQUFWmQFHnOtZ3rZO2U8yfWeMdb3sK9997L//nR36fIRxgPr33j3SQpR62Bx3bbL3cxH1pN3FA0KI76/8UcUZJA3HbixDse/YE3/W2723vT+soK33nmObZ2dhmOCoqypCrKGJBUuUm4jxDRvhJCsx7wFrxvKGwyZn0rxerKIuduOskbHrmP17z+1eK2lc6HJhixGfajY+NSwpzGR8xviuaJH5vXuEXg3rtv58rzF3nh4ot0u3sUwxq8wNWelmxhrnhGsuTJ6kkWN9boPJCyfm4FcaJF2XKMvGeIQ0mD1xoxTqcPstndpxAa9bqPQTwqgAwR9pGMBdBKIipo5xa9V5Lkkt5ai+HJFqWHWkQnpSB+vxcK2TAAlAuE2lLXlsT7Q1NjT5akdNKEdtbG6KOrrLJ2WOcaHUJj7Yv9P2miaRkTI0QLT+0llYvhRyI2HhNsr0SAdwhfI3wBrkIE1yxBAkE4MiVpa8milmTeX5VCnvJBYPOSuqhxtSU03wMKiUHRQocutnT4UiHqEF87QVxzNEJH2QQUxSTSGicKbAMBmhieIQpQWy0W2m0jxYwuOdzoAJ/zIQvheJrgzKTKMOdaFvNF+tOC4mOXrpgPIRA3sgmEl9ERNQVinjPs7yGEYGl9nZAmtBcXYXEBXxZIrenXJUudFq45mIKInnuoMVIilrqkvQ69fIStaoq8JCUeYAqBCyEWxkTLN80kUcr4ntoQsLXDeej2ok0vH42QMtq997a3efKJJ9jb2+MNb32Uk+fPsb+xSXd9BdVtU+Z51B8kCdZVVHWBQtBKM0KIwuSYd68njeo0Jj42rH6q7jr6hjhrm0SqmAT6/AuX2NjYBKFi2qcg2tqbsb1EIJTEGEPS8HVGo1E87K1FS4lo1PvBR2aO1hp9iOmvxjTuZoSvtUY0or/QWIHHzbr08Xucj9d85WwUMIeI6E+9Y2F5kZOra9x/191XEPL/aLfa13/2n/2ajeyUQ2KauvHqJ0kyUU++bCShlDjrqWyFNJosy+LosSpIlGRne5tbbzrHc99+igfuvYv/8Z/8E77/1Q8hlCTNkpg7X5akSoJ3gKSlDG6Yj1evZO0Ww9GIqixZ6C6ifET8piZhuL/HpW8/zUsvvAAuvnBbuzucOHHiOAADju3G/uSjf8gzz3yHbrvFhz/8T3nooYeh9uxe30JVjr1hn/5ggKw9nXaGlDDa3iaVgQduuZl/9GNv5z/9+V/wsd/7CKvL/z33PHSOIb3fXFD9X5o5Ppy+oGdahsTxG9E8GEmY0+EcXPgS6Ny+uvymk2/+Ab585iluv+kkV7d22NzeY2t7j9EoZzjIGQ1HE+V4UVQUVYWzgiSRzQdu7JWVKNVjbXWJW28+yfe/8kEeee2ruH+9q2ffdMT8MX+YVkJPK7HDjGyEKd+0ON4i3brQ4tbbL/DCi9fZ3d9nVJQUFRhl8GXcMWcXW+zlQ/KdnHQz5fzNN3H2laeR5xP20iEv2h2GaaBOxmEb0QngQ4qQBkGKFgmicPRkStf0qCrISGmVmp5oY0eO/Rd3yC9us7O9S5UntG85x7nve5hsMSFtyXizdBWp6uKcwlhNR6aI0S6+tIiqJtiICw3eEXxNkiyQZRkmi+Cj8XN3QrCf27hnVOBFoJbNLl4bkqxLr50gPdS1w1lNsAZqCDWxY2q6NmstKZ5gS4x3lEWNaVZdXjmElCRK0taKjpacaplTjLcIwwJblti6RitB7ZuxsE8RskNwGfvbFbLKMEJhPOjgUDISEUKQB7oAEUBVDAYDrKmi/995ZLOqTNOMbqeD6bYPsRy5QbDPodG/CLN3+tOrgnm8/iM/5wZfFFM2wRtNtmaBvY5kYsxjY0wVFXNqiKefepJyNGJ1dZmlkydpLa/RPrEC3iOMwVYVS6urVGUZrWbNiSmaV9c254IGuufPYxH0BwX9vKDdWyBJoChGSKHwdY3SCi0FVVFT2QqdtUBIRkXJwsISRRUBVSpJSdOUxx57jP1+nze94fWcvfVmbFWxefUlFk6sI70HZ0mViVjouozKeKkig8BWhBCV8irJUFpTVxXeg9bx0HbO4YNFKYEUkrqq4pqqwZdb6yP8SimUFljrqaoRAcVffe5zlFXF6slTXLr6EkZnTRaFwmQp7TSLSHzChI+TZSlKSfKyoMwLrLMxDTNJYoEbAta5yeo9Tt7CRDfj62gDzEyCDFCWJVVdR6S7VQgpKKqS7f1dur0OC70eW1ubiODppi3WlpY5ubK6c9NN5zd6rdY169zG+OfoWfa6vwsLwHuP1ArZfHCdsyA8SsQxXm9lmcvPPc/DD97Pz/3sz3DvPXehGnyvUuIIP/kYQTNA2soYDIeEIOh2FhA+4GqLRhIqzzNPfoe//ZvH+Na3nqQOYANIZfjWU0+yvb3NyeXVf/WqV93yy9P7wG9+6Qn+w3/4GDedPsmjb/lBHnjlq5oEqjwKJxY7hKKmW/WopMANRzhXxwAZWxNwWOd5+K672N/d41Nf+Gv+3b/9CL/4K7/CrbeJXzq+859Chs7shmedndNQknlkQjEjR+DoDaFnFG+57z7277iDi1tX2d4dsLPTp6xqbF4yGOSMhgOG5ZD+yDLoD+n396ltxWiUU7saiBHOq6sL3HXX7dx1xzluv3CO+9bOjSkNczkohBtMZKb/XTh0wxN+BhhFzLd2BWgDd9196+Dalcvd3b196rrk8ou71JXDpBEzavOSxZe6+EGg2Bry4qWXGGyMuOOu2xnofUS7IukIVCZRqUYmjT5CK4TRKKnomhQ/rEnzmuUujPYL7P4+aa64/tIWw0HO1k6ffGtAtV1BaGNsIDl/C6eyMwjvKRKoQ0AoR+012ntMXaFHBTrPoShJKws29tDKtDBpimm30QudeD01h5wNkU9eVBXOWYINaKnRQiJMhsnaJFkaIUB1iWtsh9JLVICK0Hi7dSMIjBAgUY2QrkIoF7UiKg55tI4CqJYxmKYQqT0U+YCqzLG2PhICJDFIZXBOUTmPKBOUlyRBNtnkPs5avETKcSZAwIuCypcEU4KI1saxGDHLksj/aKUHboi5FtQ56zYxZwo1fcDPHb9PhfOElxkvzwIJwQzGwBz+h/CznTDTJMEZ95Rhv4+vLd1ul6TdAZNMbNzhEHl+niJhTFu1DY0yWeiRLa9Q1ptUtUM3ULjgPEoEQnAoNEYJQhjTZscpeBl7e31OnFgjhMBnPvMZhsMhP/MzP8XSyjLDsoihEDZBONswKqIGKRBwVQ0KtE7Q2iB0VJB4F8+yqqybt6bRutUWG+qoT4uYFozRoAz4QNUctlIrTJKCtwyHeyyvn+aLX/wSzz77LEEKWt1O3OF7H1cjxMTZgffoWk/IuuNDfeL9R1CWJc46CuvQ4oALoJpx/tiKf9ihF6bsk+Odv3UOXLT8dTtttNbk+RBb17Q8dJc6nFo/wb23Xbh6ZnHlczpLt370l39hMqbX06E/hxWEYlbO9HQBEAKJkmihqOvGqxifMVIIbF2zsrzIO9/xY7zj7T9CYjR1McLWVdO5HOgIgjisKWh8o95R24o0yVAS7DDHCIV0no1rGzz33PN87euP88KVa2RZxrAo2B0M+Hcf+33Wlla458KFX7743Vfwnve/eSzC+Ozv/euPPvqXf/lZHnzofn78Pe9maWURtKIoRjig02nHXZcuSJFUyjAMUA+HOOui69UHrKupiorXvPrVbPb7fPHpb/PpP/4kH/jgz7K6aOfs5m/kDZ6aWMxsKMQNUgLDjffmTTGwkCbcf+Y84XQEqjqI2NfacmW49Z+qYN9TVZa6sljr2R8OIpHKMflQLy0tcfrk2tfOL608lL2cOG/WCoRpvcQsLzbH/dzHdqTzeK2CO9tZd/D9jzAaFfRHOVVds7k1oKwKTJpgjKG2FewGenmX0e4Av2l57PF9/JIkzyzlokek8UZlTAulUrRqoVVGYlKGTlLaEcErtF3mRbtPNarxgxo/qCj7OWW/RPZLZBmoOj0GLc1G+zGSrR167VU63QV8u4XveqwJGAJpPqTV3+Xqzi5+MCSpwTiFdAGVaJI0Ie20SJZONBTAeP7XIjAaDSiLXNdVjRYKW8Vxo2qnqKRL0lvAKoWNLn2Cr8Al4CTSNTv75o8KoIIjhBwhS2AcwhNfe60TTNJGmxWUjp/PjVpez8udtaqOMcbjDApQKKUb9KmirizCKVQwkY2AQAeBbCBAqgENIQNWFlhXgqpxeJAuIkdcjFnudlM6HXNUeRrmdBVhxqppunMOYoZDZyqnglk79sAxxPW8QKtZn93wMiAgwiH2SpjvsBFThcmhL21ublKXFSfXT7C0tETaaqxmDSjKE2KIlLgx3SDqViXtxQWW11a53t9nNCrIpAAtJ8AfH+Ljxf02hzC5Cb1ejzRN6bbbfOITn2DUH/CTP/ETrC4tU5QVzlpcEEjbMGqaP6EhFbZaLSpnI4K+sqjGUgtycoZprVETrRsYlTQMGU+1txsPYKUJIsaZa5PEiXhegPATIeHHP/5xLl26RHdxeSLOqyvX9HZhAuxRTbxvZKOkBzkV41AgKcnzPE7ccRhr5jjsjuvwxup/ay3WWowxVI2Drt2LGQJ5kWME9Do91paWWex2N+64/Y4XneBP29pcO/x4mhkexcMVx8uDkg52FxLf/Al4Fw8PUVs++HMf5Ed/5EfijrGqkDKGIwjUwY4febSwaD51w+Ew8pKVphqNELVHppr+zg7PfPsptq7vcOnSZXJbIVUWFchlxRe++GXaieH5Z57hc3/xWT77nz/NiaUlvvjX/+XR0WjAh/7xf8v7f+L9iCxaFPvFCJMkaCEZlDkmCNI0AxdIXICqZtCoqmWQKKFRBDSSoir5/ocfYnsw4G++/CXueeBBXvF9r2S9U06pxDnuAZ4HIpm+d0zvDMUsKMl08SCOk8eOQA0FZuyXUgKU5kJ26j3Hf6ejv4wjJnMReOjlUwynCpQb1SjccJUxWy85HZF66FeVCO4/scT+qx8ir+tIvfOX2djcj1G9ZU3SSvHe4oeWhapL2Bf00yGqnSKyAGmJTTw26eOUjJ2CMmhl0ELF7HoP2it23fOEGmxl6RQOmXvSQiEKi6hil6BaWxQu8NywQD17GRaWcO0OodXGpy3QGYlI6SVduvt9Bi++iNrbw7sa1fiXpbKkiaHVyljqjbHLgAh2K7dPDIf9+4p8pG1VYRxoodBJSi2iijskKfsIKh/XD9o7hHdRCOh81Nk0GoDgawIlLoxQskTKOqrzG7ywMgk666A7i6jmQ1EF1nJnqWwVIUxeNXvPmBWRthVSKZwlrgSERIQDiZZibHOMrhSvLSVDbCgIsm6eaky4EhKSRNJuKdqZnlgHZ68ApgrSuevzGfkTYp4ob96EgTmgn1m6GDFDRDhvqjB+zHAUKT6vBxDHHUOb1zaQeM6cPs3S0hImTSc/V0xNFLxgpnreM+bAOlS7xcLqMv1rVxn2B0ghybSOmQFBNgFScTcU14gCpQypSbjvvvvY2d7j05/+NFmS8q6f+QecO3eOSxefi/RBE4Wp3jafT3/Y8SNwLqZ4qoahobRp7HGRxeHLKp4tzuOrMgqdmwLW2Zok1RNhcvT8exAa72xcDQRHZ2WNb371a3zyk58EYGVlhaIo6HQ67NX9mLUSDmYn47PTNZ25MYY0TSf/Oz7Eq6qKIt+meJhMCaQ8yiw4VAiM6X/jx3bEgKzKWWRRYJQiVJZMGxY7XU6trXP/nXdvl3X9L3u93pW3fOiDxdwCYFoM+L3AgKQCi42jQhGVvNK7BgXpePjB+3n3u97JuTNn2N3eoJUalJIkWRbTjhqOgD+cOdAcgp74xrd6Gb6qCXVFK2nDcMjV559n+6WX6O/tsbvXx2AYlQUGhUk0VVVilObJZ56hKwXPPfUkwsOZU8v8/M//HO/7wPsIMjDY3yPrtGknKXVTSarEILykKisSJaCVknQ7pFWBqy22ip5sJSRaCPr9IavdHg/dfTfP/Oc/56tf+iKvf/0dlGXCbtX9m/7+9Ue29wd472i1FXee7iJCIMmySU57TDyeXOHymAL5yEgyzAgQmVEIhBsghWey+Gfxy8MxgJGatdec7W06GN+LqRtcEFM31hnFyrG0wOnu5vDr4qe83vFraYDX3H4TeVVHMVkAwYtsbu3S63TJ82EUkqkEW1kQgiW6DPZzWmlCKlpx3CgDQQW8jFCaBuVHTRQ3Jb6F85bUJQgnsbVDCxMFe1LiffT+prmkfuE6fndI0dvAtttUWQufpmBSUAlSJowcbA6GqM1Nuvvb4EucNEglSLUgTTTt1NBJ9NHtkdar5f4OtsjxtqauCpRsxdfGebCe0mWUVUFRDHEuQzmF8BLvJXiLcwKcJLgS4QtcGEQKoChQwaFCTOgLRBR30snQS11Uo7Uunafy8Y/zAoFBSImzijTVLPZ0BKgEQfASJw+MB6KJLQ3BE4QDWeNlSSH71KJAUqOcIhBZ9EI7tJJkStDSUTI4e6I2PvSbzvkYInfWgT9vcCdmcAPmqfunDuxpkFCYN+ELx5kCx9j/M3IFZk0FD113jw/uHOxv/363nSacPXWSTqcFRuK8bRRDguCJFlipDk1kw/HrOhCz5k1MYUwXugy2t7FhDNUad/uNut27I6NsiCCgL3/5yywt9nj0B9/MqbV1tjc2Ec6ztLDIoMzxPiDHaOEmBXBMgXS1RUqF1jFZ03tPXVq8ryLGGjDIWFAKBTq+dqIsCWUFto7AHOepfUAlScwIMJpMK5wXbLzwAh/96Ed58fo+ywuLBCS1rWllHUamgLqmauBYYyug9566iRYe2+vH4UBaa1qddiwGmpc15uRAmqYxU2EcE8xRWNB4VTDOMMjLAtusXIp8hExbSB/IRMLK8jInV1av3Xf7nVcq7777w7/081enb8/6cKVxuPv/XgqAMT4cHz2ekhC1AMEhRSBLU977rneztNhj2O/T7XbREgZ5n26nRz2sSRJ97HbvD/3YTqsV36SyoN1EGV5/8UU2Ll8mk4rNjZcoqxGpTshthaFRTgN1nrNoosLSW8eJ5S6/9mu/xo//9AcYbG3Q6XXpLPRACsqqoqwrlDYkadpUq80HTglop2RVD1tWDG2JrRyJ9BSDPku9LoOq4OzqCt933708/q3H+fpff5cXr1/nT//qLx4ZlRVOBLx3eF+jteDcmRPc98CD/P0ffiNZloLAhbT1o6LI/58DrvK8pljM2YUzpXwWLyM64ujEYF7HdFjMOEvUOGsX70AAACAASURBVB6jzgr0QR79HY5wEGaxyw8/5qyDfyrjPDAbMnCok2oHwZvvuUCaGtrG8LftFunzL7C1tYNuKmoZIFG68doKjFeoqklFDPJYbEFU2ga6qkUQUSikGtFTkiSEILHBIoIj0QpcQIQ4ImxpDddLsu2KyuzjjYg6GqVBaTwK7wKyrPD5iERWSKnwzoJQpFlGlqVkWtFLzCF/JdoizlJagY1FedpKiatTjy9zqsEue1vXGJjAsBiR2gGy7iBdB+8NBR4bFIQURIUMu2gG4AbIUERFfwgR3SMlJtFk7ZTOQoomqsVL66mcp7KxAECC8NHvnJmEXjtD24TgovYgbm3jxEGKeA+RTTGghMdjKV1OLcsYAQ5YEd+DVEW7WUcrMuE3gfUbO7umO+k5YtSZoJ/DjptpO+o05XMq1nu6GD+i7RHzJ27HYoKZkzEgjl5fYYYGSQT6e/vdwX6fpU6P9bXVqJJvRtiogyA4F8JEET9Ol5uuz8dKdZwDo2kvLTDotvHDUYyXbvz+RzvYOAIfDodcu7rJH3/yU5xcP8U73v5jtLOMKy9cZn1lFbJWtNQFgSXev0Nt8bVFOg8qxkZPbHC1x3kbXTlCxJ+jQCgDZYXLR7iyIB8M6O/tMNjvU5Y5/cEe13d3KKqa1ZOnuP2Ouzhz7iaUkNTOknQ7/PV/+Qx/8kd/TEeBMYbd3V2y7iLBxvWAEAJXhcn4X0oZu/PgombskF7OGBPXAFqhE0O73aau6wmGf9a5e1iQP54QaK1RzjIsiyjGNYaqrCcFxUK3w1K313/owQe3dob9D589cer6rEtCz0r8+7utAJrdTPAoqSYivVQb1lZWeOiBB7FlhU41OknxLoJEwthe0eyzxh+sicWnOTqMkpTDEco50Jp6c5OtK1dQVc1Su8Xe5jXAEqylQyTYKa1pO4FRGlvXLHTaPPjI/Xz4w7/CA294DXbYp7u8yM7eLkpoTJLQ6nZoLfTIhyN29nYxKmGx0yXkRQxFSTRqqUfbW0pbUrghznsWF3ooBJc3r+B0woN33c4Lly/yu//3v2ZnVHDfvfdx6+0XuOOuOwgi8MwzT/PUs8/w3KWLPPntZ7lydYdH3/pWXnnbErIsPtUsWGerfm9kjZ9u6w9/iMSM/PNj2oA5UaXzKT7HfdTHnIozEL6zwoumVf1hlphKHD/c58komLrJEkWBb7rtPCtLC7TShJWlLt959gU2N7fY2evjqng4a6Xwto6s8yaIQzRUuhjgEY4UAaH5PEsfMCbFyRgHapShrmu0jOQ0hcT7QC1CpNyreDeVtUTW4GWF9SOEUOhgSLxASYH1DolC+WjnQ0m63TaLy0ssdhd8JnkSIe5utjJSFOULqdQ3maYTycMAHx8BUfbZ3rzME5//DEOzzH6eIUyC8m2M7+DpQEjwvo10Pbz1+HqA8dfwbgclq+hh9hFbLFTM+MhSRa9tUE0XP6ocZeWxPuB8VCsHLFJIjEpoqQWqXY2vNJkVGBwmiCgEFJAEFXPlZZw3hRDIg6U2FiscTsS4AqRHS0lLadpKcyZh/bjAbs5I/vDnLMzg7M+khE5NAAQzmBSzLLvMfqxpuV2YY/kVMwSwR1DZh7p8MUc30/zX39uhzIcsLXRZ7i2MT6aGed8gsENAhSah7jCvflavYQyltaRG0V5aIltYoF8WWHz0AktxECMcQsynd5ZLly7x1ce+Dj7wtre9bdIdnzl5io1r11haWqDMi/jUnSfUFlfV2KomcQ68Rqo41fLW41xAao1J25FZYC2hqth66Qpb1za4duUyGy+9yLUrV9jeuIawnlY7RSaK/nBA2unS7SxEoiEBW1fUtiapErY2r7O7l6PTqH8qyhqlDNbVtNvtyQE9th4GHxobrZycp5Wtsd5R1tVkFTDWCQghjqwApq3448c/nNg71hMIGycrQpmxKI9O2mFldZULJ8/srS4s/nOTJNfe/Iv/cGdmAfD/xwEw+Z5GkRvjPmusrVjIFlhdWkTraA1cWOxSFn1C8LS7Leq6JssSfD0OW/GxopwSvXtrsUVOmqRQFGxcucxod5duliK0oqUlSwIGAVa7LYRJOHvuHIvLK6yvr5MPR9x555287W0/xPkLN1Ps7CCMpMpLllfX8VWsvgZ7+9jgSdKM5cUlnAvsDwb0kgQnQBkJSRsTHEk+oqwrqCx5fx8t4PT6OnnwXLq2ySsuXODTn/88b3vbD/Oa172RtdMnydotRkXBnbfczLve9U6+9c1v8sk/+zP+7LN/zijPWfuHP53csqyOdiXMGFGGMGO8OItFPpUdfsODXByfLExjRI94lueIoI7tKMUMLvqsCf+MrizMcxCGORaDOSKoQ083AV65ssTSD77h4+cuXHj7LY9/K/3Gdy5y5aVrbF/fZjAckucFWhqEUNRVPYk/HV9c7jAHn5iSFoInTQx1VTUinwqjJb2kYXR7qGpHUQekkkTCrkRIhbAB3bzmdZNAp6VHWBEpYQqCFzHQQyk6C4allSXW11Y498C9xamWWiewC2IJYL2Xnmtn3dDqdkmzDKH2UNrgq6jRyTcusn19m0q2qURGFRIgxYQMGTKcTFEqw6huTO4LHim2CfZaTAIUNaiARZBpSWIkqYSWkUgRLWL5yFHVHms9LgQEcU8bbb0K4TPK0uLquiFMghAJkuhEUA0xQISAFI5AjQ8Wp+oIRJKBICwey//L2nsHS5bd932fc27s+OLkPDthZ3d2NmCBDbMgAkEAzJQtBhCATJlm0VaZlkypLMmSZYmlUplVZMkyKZVtKpVkkoJE0WAAQYIBwGIBImzexWJnd2dndvLMy51uPOf4j3O7X/ft229WLr2qqZl5qW/fcH6/8/19g+vWCd2Amle3SYSiamRWFe9dup921PqXNfqle87MQtoqxgGmyh2QScfSmZLCnci1OyBlYz/S7/fJU1u4Qt/D6BxTbPjk2Lx5WHiMMNWhigwNQu24NXBdnGYdr1HDrAuyTOFhcB0PtMJog9YgpSGOUq68c43nXniOn/9r/xOHDx/GZCmdzS3qgSUG5kmK1sr6+hcIrs5yyBVkCtyChSBsyJx0HKTrQZqysrLCW2+9xfUrV7l08S1Wbt5g7eZtot4WapDQDANOnjjOsSOHuXHrJkePHOLE6fs5c+4s84u7SfIMnefU6jWi/oDlXYvsXmpzY63DgueDay2G5TDmd+TCp8jyrDg322MPS3TbhvSHbrt2rdgmBo4jBWUy4JD5v519IZGuY4nvg779nVhnwXq7xfLCIucefrBnMG/cs++gnlW/XTUWXzh8kSzLRlCFKR8M0/CEMhqtDWmu8ASEYYjWmitXrrCyssLyYtvq9sOQaNAny7LRa9kFsjAukGJbhFK4JjlIGrUGRBF3Lr9DvNVDKMX8/BydXhcvG7CvXeN9T57nwfc8TGt5mcWlXdy4eYsbt++wa9cuHjj3EIdOHgcJWiX4XoDyJL1ej5p0cQzU3KBgvUqyJB8ZjGSAXwsszJVkELjM7d1FrjPWr12nJWzGc6YUcZah0oRWLeTnfvq/5vipUzhBHZml6IGh4bl2xtrZ5MThA/zlT/4E2vkM3/jW1zlweDef/qGPE7pielcwDulVLV5TG4oSaUlUsYEriufkzj0FYhApEIJojFY/IWab8cySWE0ZpIiKxL8ZwSzCMHNwuiOp0DBlnyoMx+ebf+Hg/Kno3gN7v3HsgZXH3nnjAq+/fYWbN2+zudkhiTN0riwDWSmEsck4Rhu0cUYRnhZqtB7hjuvieh5e4Flr3MAjcH2kdMiVph/HbHX7bHYHdKOcRAPSLZL1clxpcKRLJgSZUrjCOvcZxyXXGYELrfkau/ft4vCRgxw8tD86sdR+OxDaj5qNW7Vu/35gKUTQOnKAuXcu02o1qa9v0clsAoEvHITOCbNVfM8jVlB3QxtSlNtEQoUPeAhjg4qUUUi3h88GnhOTYV3HXNfH8S0k2ghcGka9Bs592kCWKPJMo3KD1B7DJURlijgd0I8ypFlFZaADhZIpWtUx2i1iiYcBSQZjIlw3J4sihEnwUWRaoVwbSuR4Hk5Qww2aY6oiU+KbVAFpptpbi1JYlRDV8r/xplVUjN1mqnBmjNLGuTHCVBMRTXkUUXpuxN34BRBFAzY21nj0xAmEspC6QBCEIWmW2nyPYgY9vM+r/IqGgTVZluH6HkobHCloLy7QWb1DNNigVq/jGRtNHYZ1lEowxnDjxg3+6E++wJNPPMmJEyfodrvUPJdWq0Xc70GhLDMqRxpwrV82WZyQRwm+LqxykxjphhijuXPnNi+//DIvvvwKb116m5s3b7K1vkG/2yEZxPgC9i0vcGj3PvYsLdoUvzRlec9ujt5zlOMnTlCv1zFaEwQBOLauSUfw0APn+Euf+hS/9E/+Gesbqxw4dJTOIMNxXPJc4Xse1OsIIej3+yO59JCwZz1EJmf5UZpY6V69YZ02SzK/8dl/WRY4JAPWvBqDrYSwViOO+vjFhtxzXZYbzbXD+w+upVm6fu4nf+TWzAZAVMyQ/1OQACEErnAs3FN0i0opojwhNYY/+bM/5b2PP8rW2m1cv2b9jbG2klmc4YjcagCkLAI+BMbYOZ9jNEm/j+r38ZTGJBk6TWk3WzRqNS6//RZ75+d46om/yPkPfYig0SDKFS+//jovvvIqjz95nkff9xhhrQFFOpOQZjTzDVwfofRYCMnYsym2G5x+FCO1ouYH4HsIY6gvzFFzHNbfeJOa57K6scFbV66QAsfvvY8jx45QCwM83wVH4jjCvra0wSwKybzn8Bd+4GO8+fZFnv7TL/LRD383Rxa8ah3whN94lZZ5lnywDCOabX+goZZ41goZ1v4mjgzBLNHv/20oEmXEjN9v2JltPfyecZe1iUanYiclyu/BVIwNxPS/J8iDYipsyBfUTiy2Hju42OLSicOcvbPKlbevsHbzBrfWt0jihEEvwuQ5mUoRuQ32UEXmtjAGRwi8Yv7m+j5uGBDUQxqNGnP1Gk0/wHNDUmPY3Nrg1toG126usdXr048S4jglS1NULlHKNhtG29ChYskgEIZas87CXJNdu5Y4cvQg9x47yJNPPGqavrOOMXulNqYIc8AHDuzfxfLSAsu7Ftnc7BCv9EmEQAhDplOESnFkTk06pDpDGce6FuLgCdf6eJjMxvAIa4ai4g65VDhBiBKQ6ZSg1iRotmjVQva0g/uGD49lNQ/lxArX9VBGgo7pRqtcuv11stuXceVuerU5cr9JrmukKiAUHqlxUcbHEyA8TT+4TZRsoEwfQ2rDgowNVPI86wLotNuWrlYVrVspH91BoVLemU+gSaYkEzQ7SHQrDL1G96SpRhxEFdBlpngtkxknonpDIKbfX5IkGF14tQyPa1jkx4C7EQz9rqqARKOtHN5zkJ4P0sEYwWAwoBaGo92vyg3f+ta3mGvP8YEPfMim+GnNII5JRIJUtgHBkXh4pEaNGPSpNgz6fYJeA8cIVJ6xsn6LLz/9DE8/8zXevnyJW6trdKMIDXiuxJMCx3PAaG6tbnBrZYPFmse5M/dTa9R56OzDLO/bQ2txHj+s24hvKUf2vp7ncejQIe6771727V3m5uq6zS1A0OsP8Iroc9d18Qu/fmLIijje0Vi9lJIosEhWFEUErjdCAcZr793s+IWBRqNBkqWo1MWorID1JULK+MVvv/r3H7n/gXSnK+eKUrLXlBfADNnfNlxRMBOlgxC6sEW0hkB5rvj8H/4hn/70J1hcmKc7iPA8F+k5pGk8QhNEkRYlDSN9sdQgtCZotiE3XL9wgdtXr7M8P0/o+gwGPZRStOo+Z0+dIJSwsXqHZ199lTudTT7+vR/l7EMPI+YXIY7Jc7tbcP0iXSnOEcJM1SFGAwn7IERRRL1exzGGPI5xtYIgoN5ukaQZy/v3c+Wtt7h09Qq4Dvfcc5yjp44ztziPcVxc3yuKrRgVPSOL0FdHcnTPfj56/ik++8d/xle/9Ax7f+hDBLJiDmgqoEwxubOdfvJnpYuZkl65vHMoVrEk+gUgwxBMJoxVyPJmJCoWX8+KbkMA/vRNNSOdzZSS2SayBAyVLkJV3IUJNGFy9xYKOBN6nDq8l8Hhvdxe3/rcus6/f21ljd5Wj7zTI08SkiwjyZVOLTlKonTmgQ4dKUPf91wvxGnU8dp1mnMN9s7NszcMLA9FG25GEd957Q1u377N7a0+Wz3rbJemKXmckCYxmc5IlEbn2B2VANeV1GsBe5YWObx/N0cOHub+x8+lZ0IReTq/F4ETDKKj4w4yB0P/yuHjRw5vrq0TdXqoTLO6kaKERrgpbmCJmblKkV5ovc61Tf4xBZFXkFppoHDJMwj8ENDEWYqQgprvMD/XZml5kcXDJ6k728+O40qkHOUmIowiV4LMaLayq1x4Z4DozyPUHNLM4VPHFwE16RM4LnXpURcuHj5+GNAVt1gPbpCzVfxOgdI+Bhu36tdC6wIomFaKTBnsmGqkaHz3b5hdRCtDfqosuSvgfipULHcn9lCZCEjVCG4GOjbWeHQHXatIMbZgm1yNzHUEjNbg4WD2rnm52BGYDQxycL0APwhIXHc7WM4YsiRFug4bGxtcvnqFU6dOMT8/j9ZWy49WqCwrijUM4ogkzwhrNfrRgKirkDWfoNUi6fa5dvESb759kd//vc9x6Z3LNOfm+dD7n+LAkaNs9Xu8fvFNLl56m62NTWp+wMJ8m72Li+xeXOTQvr2cPX2GEyeP44QuYbOBU2tsh3I5shiLWFOt+tw8R48e5f4z99J74UWifh+/1iDw7H4IKazFbxBs79rjiCzPrEPhsJ5iiZXGaBwtUAaiPEIElv8wbvwzi4A/bArs61gELs0t8TiNLB8p04qtbte4gV9b624576oBMOW0vQJ2KMs2JrT/BoxSmMIT2R6Ug3GKxkEIrt2+yb/99d/gb/z1v8Yg7lKrBbiuT7fbpVVvYJTAFdayNDcabbSd6RjLHDabPVauXKe7scV8o2UjRI0hyRQbnS2yVLHZ6fLmM1/jy9/4Gg8/eZ6f/pmfxW23wfNR/S65MTbW1rLt0Ymd+7ueLAhK23VhvNHW2HFGnudopSwBykhIEwsVtVvcvnaDlW4Xp9Hk3rNnOHHmPvADMp3baONhXPIYrGhvGoMwDjXH44mHH+XF517hmS8/w0c/8pF/EjTVX52CzccTvxiX0s0YmI+K6rswB5o2CLAjc8Ou6iQ+UWHkU14gJ1IQDX74WdL4R2YbH1XRFERFc1PBj6jSSVOh0RYVZivF4u0ALaC1OPf9GINaWrQ+/Rq0MuRKsx5Fl3LHrSvH2Se1TkSvd2G53TrrOg7SETYvBfAKVvs4ArFca3Di/EPc2Iq+eTvK33dndZM4zci2OkT9gYkHW1mUZygh/EzbNC9jwHUcQtfNl9vz+p77zvDwoTl/XmAGQfCOlyT3gQnHIOEEzM29jpHvPXNqI76zsqAyG0PsB2tsdLoMIk1qFFI7CFyyNMYIgSNASAdpSQdgUuv4J202BEiSNEcJRT0I2L28wNLyMvcc2M2hY3sIivfrYmjNBdTqHm5BKsMUBlKeixARSX6VMLxDltXJqGNEiJ8XY4fUxVMOnnJxjQOOJgl69MQd8LtWYSQljrSv6PseYc2aIrlmRjGtGp8ZKpQpFZ4WYkbjMDTjMTOQBmYgWmXr7qrsgqkGZlYgWNkgy0yrAMY+nlenf6XbffHnhkVGIsizxM7UPbvm6iEKoE3B2TCVhzc8JdIUEdmF+tLxPfzQmt+YTFH3a0SDHo5jI8jfeOMNdu/ey5NPPkWv18NzrFmOxpAphfQ8pGPDtnzfJU5TjBTU63XcRkhvc4vnXniep7/25zz34gt40uH+M2f4vh/6Qd53/jxeo0ZqIBeGzsBKfPM8J3Qd5lotWoWpD2lhgRZaZ08obLYRSClsHLixT/Gg36XdavDk+cfpRQmvvf4WynFp1lt0kxQKi2SrqCgQMKOndvMCgZHbPAullfUjyTLS1JIDh0TAqt3/ePEfXgVHWgMtx/dJoh7aGJIsJVJ5Y6k9/7eiJPnp/+cf/ZL41P/8N8zMBmDYcQxNICakgGNFf5wDsP1/Z+TBL+TY73Htohg4TX7j3/8HPvKxj3Du7BnrAKjViASR5vm2/aS2UiBXWgIQKqezus6NK1eZD2vs372H61evUa/XCOs1bty+wytvXuROFJEqxX/xyU/y3o9/H+lgAEGNNEmsTtlxixlkijIWlnE9WXg264nnZJtQa+VJSZIQhjZgIur1qEsXGYaofp9b71zltQuvs7x7iROHj7C8dx+0G9jY1WAEJQ2fINsFFo5bBQzkCY897SXe++Aj/LvP/wGvvvLWX/3gk8crZo2lClkp26Nily52KJ5mhi651GSUm4DKMBNTbZFK4beZxj9iqeOz3CVLTOeqIBaDArYQbBWfagFztuZWEBipgnzF5GtUkSKFwBmaHcnifLoOC0Hz2NgvDmgunh2FjFU2WpOfqyG4Z67+vnvmDdneFhkGZQR5jlnvdL+lHOfQQMjDcZZlaZYYpZQQMvDmGzXTNuqZw3PhOdeYFiDqaXJ2onIJEuDKoN16ySjdOtYbfEC//zzCBHieT2txjtX1DTrdPoNBRBonZJlGaWmDTIpAE6VSjFY2nlRKcmwPq3ROEDq0Q49dy/Ps3b+fsyePcvzsg5ytj5mzGNjTDtg3XycIA4LAJ+lrMiNw3BCtBCpP8DyFdLu4amApf0ODE8eQ+TZ90vLIXYSnUWYTR6SoXAMeSjt4vsJxfBYaHkvzHq4wM4op06MyUUG8myLWVSBbEwXcVGQImGme6vjjKGc8muJdcBV2ohhMNBTV5NjNztbPdXpdhBAkaYRBk/Yj8rkY1/e2QUptMNpKLYbprmIYmiMmrYCGiXXD4DhRuOA5hSFNnma40gMh6fe6bG5u8sADD7B3/34GvZ5N8qvVSNOYQRxBnuEJMJ6D73k4vkc/jtjY2ODa6zd54ZVXeeGVl+lHMa12i7P33c/9D57j/tOnac21QQiC0EM0myxiiJN4pJ13pbBpV2li12Zph+BDEyAlJQKJdmzYGcKhETaI45S5uTaPPfoeVte2uHLlGv04JXcTHCFR2qCFGaWl+r5Po5AEdrtd6z8ybAKK+b7SdpwYOp4dmUcRSqmRD8B4ja1qAob/Dj2fPMiRRjMQFj1J8ox+Ei+8c/3qgQP7DxzftbzcA67ddQQw/gJlJuKsEcA4YWSYOiakNfbUUlALAi5feYd/95nPcO7cL5BkdmfRqLfQ2iC0tpae2hTpabbJMElE3h1w6+p1di0s0V1dZeX2Hebn59nqdnj6mad57qWX6MQxx5f38D/87M+wdPIk3Y0NWkuL0GgQ9wf4DR8jQGU5mbIBEEPm5iC1iVIUyWPSTKsQXGFjWXFdmo0GZpCwfuUqb732GhcvvMGpU6c4fOwYy4cPg+eQZSnCAek6xVoht+untq2OHMazGgFpQt13OH3PMUya8sxXvsz5R4/gec5dpEHMIPSZHXC7Wdimmdy1mBkQ/SxGtTElOaAo7UiKbPZZzcwED2C8MOtyg6JVrf5lI8SWwRhhzJwbDX6gMhBl++2mY0uvW/l9s1wVp/XjcuxAvWrFwgyegpn0TfAKpMBm38LCUuvR4fvXJuhsifbzLaMfcTFLxS84l4ThK24cPWkFDWIKlYnr4UVHaRn0BicQyHsC8M8//HbzwJ7je69c4s5mh/XNLv3NDlG/T5amZNoaoGSZJlPW5CpPc1Sakhf65OHOrlGvM7/QZvfePdx3dD8nzzzAh4+0CEqozXFfs+/IcfbtucTa7U3SuIPUBUroenhSkusYR9gQGMjBCAw28VBLjTI2GFgJaddqldnRhGvd3tAC13OpN+rsatY4XS/5Q0zJ7Krg8RkomNghyEqUUDlTUr1MyXdLJEJDtTdA1X0zk/Ra9ezOZv4Pj+nO2iq9XgeNotvtoNKEqD+gGSe4YR3hCqQRI5e/u3MAioRHM27dIYpC6GJIybKMmuez1e2hc8W9959l79693Lx5k263S7Peot/vgzS4vl8YyxnSPKWX2ML/4osv8vKrr7G6vkY/inF9n0ceeJBHHnmE0/eepDPoc/HCG0RJzNH77kXU5zBpSi+NqbdbhVeNIVPaItaCgrgrUMKq2KzngUCXNlLKaKS0WQP79+3j+NEjLM7Pka5ukCYRMmhaK/VhzSzev+/7CNchjmNybRUCZhgtPKqxCscP0Vk++vp25LrckXdHgTsYpfGkgxDSblRzRRzFrG2u88obF5qn7jnxN9M0/Xt/+mv/pvvdP/OXtnYcAZRJgCMW6IwRwPbO1n7bKNjHaIQwuMagjKYRBHzhT/+MT37qJzlx9AhKZTiOQxJFdqcvdAGNF/PPNKGzskrn9irXLr/Dw/c/wFZuyDJLJLnwxhs8/+JLzO/ezac/8Sk++P3fB/UaJCmt5V1EaYY/SKi32sRpZnMJMAjXQTgCLW360khPPAZDl20v/fYcmzdu4GJoNptcv3yFZ774Z2S9HqdOneKh9z2BCDwIfHAdvNAn15qcwhhCSCuRLDpoaYzdcRlZmKNk5FmK0TH7lue59PabrMSNf73Xj39KVnr+VxnvVCXqVMn1SrsUUzHHFBUugMzwNDdVOxQzObMvNxJl9z8zA9acQjaKmz4anAe69oZhvlJyMOnvblQQfsZJ4k/MBD/ultVeGc5iqomKO6m3KmfRAtASQ0CxCElhVD30lRtFhebQeMBcEMVPTbvWjQ5ShoPoUUAhmB9yLQ7Vnd1L9x/sXTl1KLjW7Xmb11bo3dnQg96mjrNUZEI4idLEmSJJbbZFNojJBzFpHJNnKQqFFwY05ubZu2uRY3uXOPWeh3lkwScsj1MENI3h/nuPsHr1LL1OhONcY2V9g8Sk5Cqg2GchpSHXKaALD3f73izo4qCF9VmWRuCpIqxIWFMghGBuYQ/NZkMtwJDI0AAAIABJREFUHT0r5p0x6q4Yuw9mhmdVcWTEdGM7NdMfI/GNP4NT5kEVzaWoKvpVvARTrbkr+w0Ic/cZ/ZhfwMrqKv3Y7jS3traI45goikiThJpS4LgjAcII/DJ3+/UWAtNM1wthwJGSNE1JkgQv8Dlz5gxKa1ZX1ul0Orz88stWFeYKwnodP/SQnkuWJ/R6PV566SXeeustOv0Bh/Yd4H3vO82uXbvYvWcf+/btY/fCEnNzLRJjmG/PIZpNyHL6cYTfqJFpu9ZrrXEdgR/6uMJHZ9bPxXGdApGVGGFJeGhlpalSkCaJ5UeYhCDwmW838VwHicZ3AouQiTEqfdE0SSlxpaDdbhOnCYMktj4BY+fHkc7ERltrTZ7n2xr/HYz4hl9L09SODaSg1qgTDyJyldHt9tjqdZdev3Bh34MPnPuxTKsVYGtHH4Dx0Zgu3YSTO3+NMRKkQOX5SOIwMRsTVtoXpzn1dpubd1b4xree5f5T96IyyJPMpkVJC7VrY7PHVW6h9jt3Vrlz5RrHT52mE8XsOXSIubk5fvdzv8uFN9/goz/yw3z0B38Y9+BBSBJMpsiLBCo3DFBG4/kBphhJCGnRhjSNUYmFWlqtFnGSTiDa2w20HQ10r99gfmkB3evz1T/7It/46jME0uVD73+K+556P3owQDYa4Dm2kBvw6nWQNuZYa0taEsYBoRF66IxXdHhSofKUXQsLPPbQQ/yf//Y3+MV/8Pd/6nt/5If56JOntZRyuHLIKbe8qbpVsVso24jCjCxysYPb2AxWc+UOZZaLGtU7FcZlF3eR99lCuLv4U1JGlJnUIxRAOknyiREsUZZ87aScYAY0XOk+OD5/reIhzCCPVV/TZhAn94BojcFRXqUEdFs+5gHL0xJSE4ha7Y/vNfFHTy00SRYapOYI693keeV69w20afaUYpDmDPopSZyQd/uojS5xFBMl/R6k1AIvaM/v8uZPHuPR5QaLboXEdGw09YCXoz/w3lWj4uWveQLHl/T6Eb1+RJpKcDS5zhGu/Tmht4uhGK0xVtwwdilHXfrC4iK79+zmwTNHxX37F37RIf1blYhXVXpfpayPu/j/l5QuYqdsj1k+GxWa/SpFQtV9LaqUALNUBKJC9iuIe33yJEUpRbc/IM5yOxbNMtCZneM6FvG0ioChEZBF4oywYLaVS49gzUJ9oYfWgIwHuiEkSWKJ1EiB1jn9fsTJ0ydoNBpc+M53uHTpEivrK9t2ub5FPzudTdrNOY7sP8jhw4c5efIk7fY8SmsajQbLi3P0uxs02i1ypYiTAcQRhKG13W60iJNoG1IvCmxRunA9qzKw9U1v+1UU94dE4IV1Oy5TiiAICYIaURQTxzGt+Ra51gjhFo+BGSP82bPQbrdxooF9b3lhhVzM+cEq5oajAWufrEemQEN0fVbxH6rUHNciCp7jk4gY6TgMooSV1TVeffut/bsPHrh3Qat9v/9r/+rqD/zMX+5ONABZFttYT8cnVTn1hoVkHG2Ik4zQt37FQwc0Ie3J0cbOPYRjbUHB4JixC6/toqa0wnU8hOPyp1/8Ej/1qU/juTWSQZ9aEEDhQyAN5Kmmu9kh6vdYWFzm8IHD1AKb6Xzr5k2e/vYr1A8e5Ec//GGOn7gHWa9BElm3KWlwhb2yuiBzZnkymk2h7U3t+yHGWNv9bJCglb2ZkigmihOazTooQxoN8B2XVqNBemeVP/r8H/LVr3yFEyeO84M/8sPsuee47RTnmqMH3TL+sS6HgBSOvbCFyxbIAm6y95hEkkU9eqtdskHE3vocS0ie+b3P8exXv8rrP/GT8mf+ys8+0fC2/nyKFFSll58q5LN2GDvtUMs7kRKUOb7DmtA+lwpv2WJ4R8Yz00z+qh2SmZGcVimBFNOFs4x0VNmuzpyWjEO0JfdDU9V0MXvcUfZlmGqYTB1jTk6PJ0qKkKnzUkWeFKI2iD9aTOaoGUFNIOba4aPbP++ghU++q44qkDxtBHluWBukV3SW3to113gqdK2j4iSXgqpRCQJ4sKGWxUfPMzc3z8uvX+Dy9Zusb/SIBhF5buO0MQql8sJ3wUKlubbObnZXZHdEyjVkWuMHPnPNFgcO7Ofc/ac5/5EPyfvq8d+ePBY5eQ9NHeeMEUHZAdPMyqioCgaqcBksj5bG740d3TLFbIfPqVCx4c/PyCAY+0V3rl2HzFCvt7i5tsH1O3dY3rtIFndYvZOxfOw4eRqD6xF4daL+gFoQYoyV+SljMNL6tSjByMNFGoMvpK0ZnR79rS5pmmJy65iXFJG1jUaDLEsIQo80i1lYbvPoE+/h/Aef5NqVq0gDd27f5vLbF+l0Ojzx4IPcc+wewjCg2WzSnp/jpZdeIqjX2HVgD1IlBI4giQdo17G28o60lsbGJY8Ta8Ettkl4Uki0ylE6t8oFZ1t3r1WOi4PnuhilUXlGkqQ0Wm3ifszGxoBLV65za2WVoNawpHUNWuQTiJEY2wdkSYTrCNqtBr7n0O/3SdJ0xEswwqYaimLbaWShQpA2qdOZQNrNVBMgjBpFLDsI6kGdTDqkccLq5iaN1dXGN194/uB3f/CD7+v1BzeB1yYagJoXkOQWkk9VPkEI3CYcTFYHPXbD2RAfm5CH0LZrnHgWHYQDSZ5z8a1LvPD8S7zn3FkcHFRWvN5Q9++4zLfatOoNPNfFCQJUkkCtxt7jx2jv3Y3GUGs0kIE/mucYiY0NLS6yKLR2onApRG+jF0IPGxbbozQadfrdLtJAs9UGnZPHMR4SpMvG9et89rd/m9dee433vOc9fPfHPsKuo4fBKDKl8Dy/cmRsxmCdoRHE8MEWwkpnMBD3Y1SasXLzFtcuXmRXs8XxI0f55suv8Ku/9MtcvHjxz3/lV/5uacdcQfyrhNFNtSRp5s5UVLj9MZ2LvqPFqZhkUIsqLL00lijvVqpGCqJsWTzOS5glhxIzFkaqjYnKOQOzfnZCZcE0udCIu3AwxOQculLiaaZnxlNowQyegSDD0LErCi3Am/y6KKj92+fULuKl8+/B4px/CPxDoxeess2tuK/EWBMQGI581xkO33+cK69dYm3tFptxSqeX0e31ieMEoxXJIEbnOUmWkeY25zzPNVlu9dRG5Qhpn9Ej+/fw0IMP8MQHn+B94aA4d7oUpFNSAIgZjV0Z1RGl+3dK4z+je656PVOJ1ExyB6rifEcw5Cy0iWkkqxKCmEQMBp0uYRCgjSAzgo1eDyklq7dusrx/P+n6Gn57Ho0gTyIcR9rZdCkueSRpMwbpCOQwQTJTZFFM1O9jckWtUUdFKbrIeTCCwi7acge0ADdwCUOfffv20AxrHNy3l+X5OW5evcqZ0/eyMDcPQBB4ZNEAKQwLrSae1CilcIS0ccNZSjyIMHGCCGsEno90tnfQctRjFX4F0in4JjZAyGiF0DbHZlgnJJJGe57eZgfHDbly/Tqf+4MvUG/Os76xwcLuhiXM7jR9ARwEUjoY1yMPgpFzoFYKWRR7iShiie2f7fO8fbknRgLaYMRQLmiR5SH/wnE8kDndTpdbqys0ms0Dt27d+aH5ufYL/+Ef/+raj/6P//0oEthtNZqoztaoCxpCErPIf3ZHPVTK3/3D5jHbrurGjRt8/etf57FHHkI7Cq1yHCHJ1XaOsuf7dstmDBTFU8cW1qjPzdkOL8/JksQ+S547cpwdCh6FNhihrJa1kHKMm/uMhw2l8YDAdXB9nzyJyPoRtXoTehFvvPQ8v/vZ3yFKYr7rgx/kQx//HpqLC6Rpgu/7ePWg0M3MRq4dxxn5HIzIEkIWa4seZUcbpamFIU88/jiPPP44x7/xLb74ja/zH//jb7H32BH+zs9/eufNszB3kRJX7ULLxkJUoszVs8gZowhTScTbYeE0s7fdojRzhRlQfalx2VEmOKsBepcWwztStisY2+PErnKTY2bsUCeIl2PNgjHVxzNlhkSeNmp/jDHaH0Q/WrljnLJupvrcG9OaJkSWUx1nVVb797wQfGgppPv+M9wYnH61pzkbZdY5s9NJiaMI1emRd7v0ewM9yAdmSxnSDCeKY3KVIYSk5Xns3reb0/fdz8cOh/iyX1Gg2eE6zrrHqG50TZVC5S5N5kxeSamJFDPm+lOjillWxWaHUcN0Q76y/3u+srr6m+/fVW+SG02K4tr1mxgFmxsbzM0vsr6yyt56G+lp0jwnrDfIlNluAKQsblfrgmmMQeTWUMgtkvmi/oCoP0BqjecEJDqm8ACeVE5geWIqzemrbWJcGIZ4nkcURQAsLCwQxzHSFdy5cQOtNfPz80Xyn8IYhXQFEoNKUpJ+j7DZQPo2D8ApTHjseEEVRdM2LkbYY7YR2NZK15GiGHtYn5b+Vte6XgY+n/uDP+ClV19hbn6R5twcUZwWiYl3/5BS4nketQKNiON4lAAoTUGcHyMAVsnzJ3x6CrMmMe6eO5QiFnVnAHR6PdbW1xvfev7Zwx//wAf/Sq/X+3v//H/9h3f+m3/wdw2Au7S4SJIk5NrGvBpt5/KA9cYvZGtuRUNgKrHjyY88zyFwaLVadDc2eO2110ZzEmsUIbdJFIUI1WY1W3TAbzZRcUycpTjowkjB4HguXj0kKWIsHWlZw8Pn2RnxEc02SlB0oeMfySCi2WjYezPN8YUDUcKrz7/A7/zO75CmKR/87g/zoe/9Hphvk3Q7uIEPns+g06HebO48th5/6FUx1zSMmLO1Wo3V6BZpnrFn324OBjX27t3NuXNnqS/Ns9Hv849/6Zd47P3v5yPvPVqxE96h0FUuRqZ6NDmzqJrpYlXmHYiqYi+qTVbKC7ap0jWb6swDxAxr4XepoZ7FGZiYyYsKboDYAWKdpeeqQBimRgUVpLByIA3vhvAlcgw9BFt2NRDG70dPgGlTZQ2300hGzBhXlDvDKfJpmS0/tsMtvtwycLouzw7vGyVc8l01lJiz6Yoa8gyz0s/+ZewHn0i1biZKkymD5zq0663eaXerGcySt0756JcL/F389Wcg7RNmVzuSCMeu60RjXWo0x5n6Vex+YSZHGJXXvyIUi9n96tra2vvXN7c4sLSbXBtS4PKVd9jc6BBIj3SQkilBf32NWnsOz3OtNMrowhGyIIqboTpA2zVWaTzHQWSKpNcl6fcQRiHQll9QbO7sYEZQNp4LgsDOvIFer4cjJJ1Oh95gMLLS1VpjFKyurqK1pl6vk2aZDZ7LcxzpEnguOlNEnR5hswXCQZMhA98OqIv6oEd9nkZoWyekdJCyIN0pjRqNcF2kdHFcn8//4R/xp1/8EkFYJ84yWu151jvd0dh3p4/tJEQHX04W9jRTU42CKGUylOf+w58fIStj4UHDjfzQWVAIl9X1NeYbzX1Xrly5Z3Fp6WC73rgF3AJwjx06SK/XYW19E0+A1gocOSIjGNcvdSP8JwUGKaVIErtjdgRcvHiRtbU1ml6AA+RJinQmbw4hBK7n2TeWpjiui+P4GGxMpRBipBs2o4tbxBMPi3+RYiWG85VidquELb66kPc16nVUkuCoGNf1STc3+fJXvsI3v/4NoiTmE5/+FPecPgVhQNzp4PqetUNNU4TrVj5z4wiDyRWy2PnrXNluz3FGi79wXTSK+cV5Dh4+Qr3ZQjgenUGMG9Y4eugwl69d4zP/9tf5yHv/TolJzs5s4cro3Qom/t0Wmnc1H68YT5Rn5+UFWtyNF1A196RaJz3hFlhVNEv6TlFaeE1pty3Mu+MriLIlc6l5mvU+haDanGgnCVoFH2OIZLVav66lkwqjU6GU7w96P4sR9Um4Wcy4vhUX1lRB0KZagmbE7BZ4ygxn+5w42BCxUeMlAd+IRd/7y9tP0ZimzXSaU6Y3VX4ViOqGaaoBfBejnimo3ZTupRISImaR8nZAWyqRCaaVBBPnu8IJc4f3tLKyUkg6BbmADLh6+w4XL13i0QfOksUZHpK167dY0JrW4hIkCTg24lnrbZKbNODgII3GExKRK9Jul/Xbt+ltbuACgeehs8zaDhuFFLKQfOptTlSB+mqtcYVE52p02MvLy+zZs8dyCYwhzzSDQUyj3Sg8Buwc3Zee/d04RGlOf2OLWrNFGNZsvHYU29G0tNfdik0VOdb1yMWxmRMKqxbICrmecBBCEdaaPP3Vr/K//eIv04tias0mSa7Y6PbwghD1LmrheLjSEAkYFums07NE8eLP0AtHlHgqs1xdKsRANtTJsR4KmcrRnZSVtVXx7MsvL3/4yfP/3Vau/vawAZAP3neW5aVlwsDHlc7IDnKYT8w27794M8NdtnxXDcDIH7nobu7cusXKrds4YjtJaRhvOGwYRppJY0Y6SgTWh11rNFZemBY3QXlXb8bXpFLn5BR6f/u3dcNyvRCRaW6/eZHP/e7v8dnf/n9JspQf/+RPcvqB+wl3L4EUOJ6LGwRkcUyUJtTm56YAZy2mRyBSWPKJKx2k51m/aW3Is4TX3/wOA50xt3uZxT3L1BbnCOsBy8tLzM+1OHffGZp+wFe/+EVubAYVUOyMGiXEDju9qgChncbWYnudKcedVp38Cci5ZFU8Qc4a30EN2TOiVAzL6oCxAivKx1C1uM48QZX/nVxwRWWq4I4zn7KJ0tQOT1Q0TmJnRqYQVNo7j33e73V/Iuxs/nDQ7fxFv9/7yZHCZyIPnsnzXC4yospHfoaMTlT8e3Q8YrJRNbOuiah6LQnCZTTRK50zI5gZe13mSsx6vannZ9b3iIrno4y0yQqOTFVzTMVrMS0JFWVyb+nGNHe5v8X06xgEd+7cQToeUZqSIsiB9X6PF7/9Gp1BRJbZtL3e+ia9lXWSjXWi9TWcLMFRCheN50hC6RBKlwCJr4XNyOj32Lxzh407t0n6PRxj8Fw52sGPj4snmPLGeuHr3NYa6drvT9OUpaWl0c87jjPKDGi329s1Q1rtu5QOQgtUljDobDHY3IR+oQiIIxviluZFLLfAl5Ka41BziyTBYjMola1XYWsO3/dJspzf/dzn+Gf/1//NrZVV3DBEC5vl8m6L/8SOfZi6WDQBQRCMcg6GhnzD7xnWjrI7b/nrQwfe8XM7bC58LySKI4zrsLqxzsbW5u6LFy8e6w0G+3/tf/mF/QDuyePHeOHVZdbu3EaluSXmoRFMziFAYuRkNKTQAiN3Rp981yOJkxEE0u/32dzcJDgZYLIY3/OQYhstGPkgK/tma82G3dkXzYjrupYo4Vpnp7Qo5sMDM0WjIIumxSkbKhQdLCjrChVHmCzn0ptv8czTX+H1Ny5w8PBBPvzxj/HAd50nSyK0ysBIXC8Ax8OruZAmxD3LH5hV/AGcwh4SpbcXqzynv7nFxvoaQaPOrt1LNJtz4AaQZhB47N69myzLue/ECZquy9ZWjzuXr7L/oT3VO4NKZnK5ARLTzHxRIeODyYzxylGqqJBAicmfq9pdCjHtFzBrjj6RtDZjUa6cpY8bG5mKWeuMqLQpuHscq60yYJpuMCcRkBn5CzuNb0WpeM7qzCbHIC6wBGZpJqS9Ew+DWfB2xZzIzECbdjrAcrS0qEAEzIyd9yzOSJlEJ0ook6gqsExb6O48Dyk1J0ybPpmdpKsVx1rp8yNmn9PK3f8MUumMKOEcweadNaTjsNXvkxbUtBjDq5cuce7SZd7zwANkSY5rIN3YYj2NCdtNS4rzXZxaDccLcIQLCkgV5BlJv0N3Y5Wt1TVkluE7ro0GygzSKKuUKub9QhiMsH4vxlgequM4eI6LzvOi6NoasGvXLtI8Z0ifXl9fRylFs9EmSxWSormQDmmaoBzHBsplOb3NDaSxgTxhIQl0fQ/Xd3B8H0Lr2YIjCxtkxyLG2iCEC6ni8uVrvPr66/zaP/+XvP7WRQ4ePUqnPyDPFJmBVqvOYGML3313HIBRRsDYtZFS0qw3SJKEJEmKIDwzGfsrpj83QdIfqz3aWOm9GDMjQko0hsEgYWV9nQvvXFo+cOjg38jz/Oef+de/mbkH9+5jsdWiXgvpd3oYclAORlpZwQSyZobkPzkK7bnbh9aWramx0IRWmiSOEUIyiCIC37dxwEVn4zjOCCLJi3FEUujp/TBAei4UHAGcIlMdURgKbT9DaogsFt2FHBkcbI8HUAYyxXeef4kvf/nLfOeNCxw9cQ+f+K8+zb6HHqR76wat5UWiwYAwrCM8l6hvfa39WojqD4pRgq4s/nK4+GgDuULnOULbrvf27dvcuHmdM/ffS31pHoRNcxK+BC/A8QSuECy3Wnzvhz7Mb//+H7B+7Ro8tGf2Il1Oy6vSuE8l6sHMjHEqTEuMqWZRixLjuSqnvDK1z0xDzUNIWMzwGhAzCrapsEEzonIjWwm3Th2nmLZZNTuKx3dGBKpQh6rvn0hLFLPHGVOFsoqcx6SSYkJ5IKn2XhAzruU4qdFMeylUBeKUOQNlv/qpkdTdinJF82VKTdaUuEVMp++NSzinLLVL8/qdGteyl3/V8yVmnAvKfI9ZPJcZRNsqg34xzU/ROQw6PbTGqi2MRjmSTGVc39zk9atXePjhh0nSjMWwjooHNmpdQD9PcWoBQauFV2+C40Fm0LFNZu2sr7C5focsiqkHATUpifsDkjjCl05h8mbl40KYEU/LBg6ZkbV8FEXWelorlDHMLcwXM/IMtGZjY8OaCXkeWWbDb7TW5FqR5jZePvB9VJaQ9nqsdPsjs6NhMfSDgKBZx6/X8Osh0vfQro/rB+RaEac5CIfV9Q3+5Etf4vN//Cd0o5i5pWXWtzo4XkA/iag3G3S6fTumLlnJ71T8hxdp3Gm3VqttqwLG8ne2i70c1VFTah5EaWRof06PeASO4xCGIYNBn5oTsLnRZa7V2nXxzbeONM6dO1wLgtNuw/O/stBqP9iqNdtrziY1A708oVFrkaQp9bqduTgMd+HWmpNhAMRdHtQ0Te2bjGP6ScqDx4+zvLxMGseEhSRi+IbGlQijdVtr28nYdsimNAn7/RiQyhRBErYh8ELPjgiUwvM9jDYkcUzoukjhQJraQ1aaaH2Tb3zlqzz33HO8c/M673niMf7Cj/8Y7UMHYWuTRqOByTSBF5Iby1CSfmDnaKnCK3gKubF8GcdxRv7/KrdpiF4QgNFkaY4XhERbW3zpS0/T63T5wEc+yNKB/eQ6QzouQviQ26xrdM7y0gJb6xsc3r2bPY0G/+p//xUazl9ntbPJ629fRLuS8x/4ME++78AM1r6Y3tmZHaBdww62v0x/blb4jqlqCMRd5sMz+AnlxbW8kE/bDm+/vi41EZWLfdlspWIsUgWNV0r9ysoIOcktwMwgU5bm2bMSF4WYQY6kYhY9o6kpH2eVtLM85plCecpz/7FzP3WvzbDQnUJMZmnhZ7BVBTvY3jJG6Cw3PyV0RJQQEDNLZTG+Q684rjKnpDKdr4ITYsruldzdTKrsIzGBnI08eUf/znLDys0r1Dy78xXGIVIZBujkGX/27LMcPnSE7//AB1i7ch1fKw7t38fmygZO6KIcQdffwAlCwrCOI1zSKCEeDIj6W2AyG88bp8RFkJvjuqByTK4Ku3VBkiQ4nj/Svxtj8D2fwWBAvV6j3+/hux7NVgPH84mLgJw8zYiSlIWlZebm5kdIsjIaR9ggn06nw9agR6fbpR/10LmF2uu1GlubXTzPhhTlCKTv4dUCqPn0jcEJQgZRxPpWh5X1Db5z4Q3eunyV3IDjB+QKkDbVM6iF5KowqBq5H04T/sr3xai4CyZIfSrNCD0fV1jHRIusm6KM2GyMXOUj9CBJElvYnbAwLiqKvpE288ZY/p7CcuWCsF6E2RlSnbPZ7XJ9c33PU0tLv7TW7fx9d2V19VcX/do/mmu12rUwIN5KcRBkWTbqOjSmxEKUFkJ/Fx92tm/nOqEQnDx5ksW5eTzHQRdvDCaZjqP1G+vRbMTk1yaaXqVxwgDHdUmUTVUyUliXQmMVDbVaDZUkZFFE4Nis6jtvX+S5b36LF559jrX1dR5/6jz/5Sd/gmD3bpLulk1mqtchTkHaqGJdmvVLI3E9SVZwEXAcTJ4TD6z7lNdqQX9AmiT49QaXLlzgc7/3e4RhyMc+9jGWd+1CSciFsPkB9payDZa0f9ekZO/8IqcOHiKJIz73m7/JG5ffZmVri/rcPL/zmd/i4Il7+OV/+k85sJRMwvpFVOVUYtnEQiaqmeY7QZ1l4x8j7rrprRxDlIl0ptxElGH7anZ5Zc67EdvBK1O66ioin6k4L+92F1pBwjJmBgy/A/t7FhmvisU+NeoQs3eMlaS4WZCImG1kNNPToQJON+wMWZuqk7LDLn1mIZwBvUx4WLwby9yyPLbURIyPk8yMbAFRwZ+Y8hUwFQ1PuZMpj9JK96OpGD1VNqGFGZsCaXIEijQ2KGEorGvYzBVOt8sXnnmapfY8H3r4EfJOh+vXbzLfrtNZ79BemCcI7Ci33xkAEpVp4niA7w4vpSmUV8YSr8dOuRbTjLHh14dyvzzPi1hgQ6vd5saNG5w+fZo7t27Rbrc5duwYruuS5zmdTgelLLx/69p13rlyhbfeuUScJCwsL3DgwAF2LS4S+j6dzS4nDh2i2Wyz3unSS2Nq8/MkRnFrbQ1TC3nn7Xd48eVXuXrzulVIaIPCodZqEecKJaxNsGab+6bFtG38/5+PITowzoMblwGKsY3xiJhfIAZOSVExbsU8Gv/kOUpDGNQYDDoM4pg0U62XX33l4OGPffyX3bQfvb3/yJHNuUtvm8DzhTAGVzoWeimsCaW0YI0pDEO0GZrpbHc1egL2npQ1oDKiKKJdr/PYe9/H0tJSCRYRlcXfMhLFtLnWWKellEYqDY7EFRIlrcWjFvbNC1+SRglSaYKwRra1xYvffJavfulpLl++QqPd4i9++pM88cHvglqASSKCuTnQkGx1CYKg6MiERbOkLsyP7JhBZzmeaz20VZoiEdQaDchy0vUNPMfFrzd44+WX+aM/+iOSLOOJ8+c5cOgQ0ndIMGgh0dJmSxupkUUahyNT33TwAAAgAElEQVRBq4RQGh48eZLFxUXCRpMHT58iaNQJ5+d46cIbfOHpp/n5//Zn+cx/+D9KxLoK45nyAjfFjatyOJs1JtjB6a9smsMMspOpik5jGl6eSB0sz9jNdEKhKe24yrbIVQVuIkPA7Mxur9qZV+XRmxmcBip83auaAjEDbREz4PNZefR3C5mZuE9mfW2G26Bhtkpgp5eqsmyoQjgq1QgVZLuZu/dykztL+VCVsVHBpxEVuvzyPSBmjNPKslAz4zxOGQWZ6bFDWaVQZQ1szMih12hNVPCx1BiPezNOePbNt3A+//s0ayGPnDhBXc0TxzG7d+1lEPVYuX4TZTT1ehMvqIHRSG0hfKm3HxmbH7B9TvNid2rHx/ZvY7Zto/M8o9lsMhgMkNIlS1Nac22ef/Z5XN9j7+49aCCohYRhiBAOcZxy69YtNtfWefWFV5hrtTl8YA/7Dx5gYXkB13dJkoTBYMCxQwdZ2djk5p3bOLUa9aVFNqIBr1y4wHcuXuTG6irrnS02ez0cx2NuaZnA9YhzTaJACVk0APaEjbA985+h+o+RxIvEIcvOGHrHVBAB0zxDqNzK4IWDMxoFlJoKJk383MBHDTRxlLPR2WKj12vc3lhvuM16vesL2a35/kbguYsCjStcUm3dmpSy0b3jLlDbL+Jg7FC9+s0V96fWmlTnLC3t59y5c3ZHHqeWkCfl9s1aFHtdQXCfZa7mui55loKSSNexTHub74hKUrL+gFoQYHLFjRvXeeW55/jm1/4cnWQ89uRjPPTY45x55CFoNck2N5Cei5OmZErjhUGJ4m9GIRdabo8ohnxlo6xdplvc3I6x5+nCSy/x2c9+ljRN+bGf+AlOP3iOtNfDNe4YyVugiwxpa7ghMEZT8zzifo/5esCpwwfpD2L8WojwXPpRxEMnTiAx/Ivf/Hf8i3/xOX76p3+AG2rhV/Y7az9XWaimSHY7zJbLu9mqOb6YtYiVu7ZZO9AqwmJVYE7FLqvKqIWKAlypmijvIsvw/SyzBDFt4ztDmofZiaNZcjKcxTSnTHAUM0Yr5XEH1ex97tKYlb+/Uss+Y2dKqdGqIglWwvWTO9aJ5rLKj2LCUKkkyzOzvPZN6d6pyKAQOzQ7ghnow4zRzUTssKm2TNhpzDE1GpmRFmhK5EGmeSuD2lky/TWk8YkHHVRmvfhszKIgVgqyjG9++zXy+Nf58e//Ad7/0CN4gc+t9XUkmlqtQaPRIM9zer0uymjrKqjzwrTNbNNWjMSYfIK8pofx2gxl2NvFasj2z3Obilev15Guw4svvsgjjzxCo1Znbn6e0Pe5c2uFCxcu8MYbb3Dr6nXO3HOawwcOcvDIQRqtOklmydkCaNcbXLlyBekHhI02faP59isv85XnnuX1y1dI0WTGVrDQr9NamCeoNxikKZmxHjK68A8wFc2l4O5hSXdtANj2BHAcZ9oPrPjauDeAUoo0TdFaUgvDsaWuiJkfEg4xxVjasUm4+CQ6pTvoc3ttlWs3b+LWXL+TyfS3Atfd36zVFwM/ZJBntoPQ29KDoeORKYra3SBSMdaNKG2tfg8fPMShQ4dGxEBvYqpQ4T4oZhf+0bMe+ORxhFPwArIkRgGe41IXrk3qc1zefPM1vvAHn+fy25fYv28fTz31JO99/AnYvZvVmzepZSmNhUVMEpNkOUGtZjvloSlE8Z4co0EX8RhC4Pk+pmCQSinRaUYS9/EcBycIeelb3+I3fuM3cDyXH/3xH+fo8WMkgz5Bow6ei8xtGpqwnhvbD7vOSbOYzY01+lsbzNVC9s7PcT0aIPMEx7V2nFGScGL/fu49epjf/Df/moeffIxHzpifm1wQZrn8TRHMCuyhPJtnByvUKqJYVY0vLdKVuzyzgwc6FcYnYvYuzuzE7t8JCa+aX8zQ44sq0pvZgUnOzkqNclEVVY2QudtysnP+QuVoRsyYeYtqpjrcJfVw3Ba5xN2o4gVM3ac78QFmse3FXa5hFdlyhhLCsAMHxkyT90wVIlQeCTFjjCJ2vpainI5ppp8ndngegF5/nQxJs1bnyrWBDS0rvlsphUSggC6Gb118i+5v/Xtub2zw0afOU5ufQ2Q5eZ7T7fdswp9jw5uyJMb1ZGlKZcaOQqLGIuLtKmr/FAGwo3k+MOJUaQHnHnqIV19+mS/8yR9z+OAhThw/Sbfb5eUXXmRjY4ODBw7w6A88jKvt+8rznJWVFfpRnzhLyfOcXCuCRoN6rc71O7d49tuv8eybb3B5a50eVie7a2EX/TgC4ZDkmkG3T6oNwvPxwloRXy/GYP+h/Z3mP8dHmTMwbAiGagFdSOiHFsFDuWCWZSgFvufhICdBwOKeGfIOpJQMBgOCWkgS9ej0eqyurfHcs8/jZirv3b516/mTB49sXb19i1otoLcV4wiHrOg2TCmIYGjAI6R4V2/SGj04nDx5sgiEyOwuuaLT0Xcp/GWoI9M5OQbf96y/c67whAOei8gz+ndWef7553n66S+xtbXFAw+e4/z58xw7dgTqIWm/S2t+Dt/1QGVoAX4QgIAsy6xPc+kZlwZcDUYY0iwhrNXBKNI0JvBD3FabrStX+fYrr/LZz36WPM/5vu/7Ph5+/HHyaECqFdRCkl7XyhoLH2cxyiywg7tkEJFGMY7RtOs1hM6ouQ5Ig4dASoGLpNle4OH7zvBvPvtbfM93f5jF/fsgrHPivvsQWlCr1Zhvz7GwsMD8Qpv24gLt+Ra1Wo1TJ04TBDXq9doPHhG3f08r21hMhvw4BYt3fMRTNZOcJYmaIaFjxoy5UvpnphfqHVBsShy16uhVMQOmntGUVHENqjIKphb6/4+9Nw+S7LrOO3/33rflWpW1dHU3Go1ubA0SIAmABAGQBEWRFGXKIZnySKRG9nhsyYqZoKwZh8fWyOOxHbZj7LA9MeGwJ8Ix/sNDjxwWTVGkxFU0aYgAKWIhliYaG7FvvXetub7l3jt/3PcyX2a+rAZXQQ4noqIAVFXmy5f33nPOd77zfVTaLkz1tKqqfbvfG6yYtKgixQlRTXSs7PXPQtCLLryiB233mdawFddRIVdbYYo0EydnxKvmiHiLhIuqlAoXv7VKq+r97j8V7SyxgO8yl0iW71GVq2XpufctvBaTBjeHlxwPKQwRSk7PrxuBH4aM9AgfCKOA75w5w9YffJYzly7w537qgxxotgiUpL+3hy8MS0stBLCzs4O1/lg6NycdodHj9VOOHbbCYTaqRWxvbxNFEUEQkGUZu7u7HD92NWmaMhgMeODbD/K5z32BwPM5ce11vPOd72R9bY3ID1hud0iGA7Z2d9jZ28FiqNVqtMMQAyRZxuOPP8kjTz7NUAiOXXU19cEGz589w25/QGqhOxwCgnYY4UUBvlSYvGq2iPkJL2FeFz3oco/iLC0HakoJgMyN5Jx6rJxCAooiOssyfOnPbAOB0JOfCyFIsoR6VEMgGA1izp07z6jbx/vJv/ar3U/9w38ex5LRUrMVh0EQinHv3syNH9gqo4zLBenUmQ1dffXVSCnRSULkBZgsK5GlxEReuPTcOr/TionVd2E9rAUkGDI1yc486SOkx/DMeZ547BSnHn2UU08+gVKC9//0T/GTH/xJooMHIE0ZJTEqahIsLWNGI9IsI6g3GOzt0R/1WT9wgCRN8iaH+5CUcffayzmQaZpBaBz0YixoTba5xaMPP8KXv/BFBPDRj36U2++8A5IEr1HHCwL0aEiSJIQyyGE0lxKrXKQly7J8XPAsxmQEvqK3s03N95Be7saVZgReiEBweHUVD0FDKc6cOcva4UP84Re+iJL+lF+1ye+oEQakoB41aNUbdDqdz6+urNDpLNNutWg2m0RRyOFDVxDW63Q6HVZXV1lbXWV1dYVrat28heg+C1MKAtZajARpXZOostqtMsCpIrDNsGyr58UX4ez7BLlZx0FbQf+3VeQwu3h0rxzYZwlsC8Tbpk9EOXmtKTfFsi78zHXZRTPjMyN/i4L5nAFR1dRHVXxZhC69DvZ+FUdBVLSfqlAlIRb3guYUAsW+vfGFBNXZ9o69HFLCYin+OTniy/AqFnI+RAVHhuqWQGldawu93RStjROckXKsHW+tRQnpWqZCkFjLSCkIJC/s7fEfvvxlHnvqFD91x7t4/ztvZ2O1Q9rvstPdw5OCIPAnoExuECRKN8Xks/7WCqzJ9dgL17uSsqDneQRBQJqmZEYjlKTX67G0tMTtt9/OsWPHyBKHVKyvrLK+vo5ODV7g042HsFSj1QqpZR2HBCMYDfsMugNOnjzJ1m6fKzYOcuM7bke0W3zh7j/iyf7zhMKj3V5iu9sn0SmZAZsZrJJYYYi1Rkk/v6emYikbXq8g3r4kwBlQtNxml0KMxfEKQb1CAAhTjA+q8WWU+QLlBEBKn8xolOehs4xBv089jJxaWBgEvbVG+1Lo+5eatfoVgfRI8gRg3McRl+93yKopFzRpmiKBlbVVJ/RjgMgjS8BTJt+fFlsWHiogfpMzHGcnEfIkoB5GDOIRJtNkWeqYqHHCY489xn/47X/P3u4ON9xwAz/9Z3+Gm995K0jBYHuHoF4jajTRVjLY3SLwI6SCfrdLWAuot+rsdfeIomhCSMxfVpXuQ73ZIu718IQkaLbYO3eOb977DR647352unt8/OMf52233Az1GqNel8hX6EGfQTyitbQESTZBQKxFKuUWXGrRo4TNCxdp1GocPLCBjkd4nhojJJ4nMVIiheXC+bO0Gg22+j06rSanz5ylXq8Tj3JxpfF54VykMG7cMLEjdtOMXrfLSy+9RJamGGvxcj0GrTVSKVRubewpj1qtRqvVot6ssby6RqPZZKWzwurqCisrq3RWOnQ6KzSbda44eIjA9wmj4BPHxIW/bIVLDCaE2uLEku5okAKBLa2hRWJEiyrjRRCwrXCLm62uZipwMQMtV8oeL4CL9+snL/Jy2BfOXdQPttVcDmur2xB2EQJtK/ToqWb4L+JQlEfR5kij+8hJVxL6FlTtiPnkwFa1H6jgdFSw88UiYmcVh2Wm3VWeEljYcqmQhoZqPgVVSVYVSbVqsqGqhebY/nEckyUxXj6iXARpm080DEcxnu+BFPSHIzwpCEOPfpLxyEuv8fIrn+LbDz/K+991B+9485vpNGvYzJBZnVvAW0Dn8nHFxjZzVX+x7XV+1hsr6fcGTl5dKbr9Hp7nsbGxwealLQLPp7W0RFirEfmR0wHwPAywO9ijRhNCnww3ci0ChfQ84uGQ0+fO8vILL+OpgJtuPEZ7dYPG+gFO7+yRxRkRCryIQW9IohOUCPACH+NJtMCdf1JOVGzzCsfmJEeXw7v3ezlPtcslAFXdNSGcNXCRAFSpACLUGKGffWhc+15bJ4ZXoCuh72OzlNZSi9XOkksAAqX2zu1s/faxQ1cce+XC+SuiekQyTEAYkiQmDIO8erT5DL4Yk9SK9SvHBcrUsBzGShKd0Wk16Q76tJaX2L1wgd2tLZY6y6TZICcSFvvSyeZKoSaGCKU7Y0qWv8IK4m6XWhC4mUiMs1K0liuOX8XP//LH+M53vsP73vc+3nbbO8CXJMMhtVYb4SkGwxFRFBEq6WZWhSEIPazVJJkmigI3j6k1Sio8z8NkGptptLCIDOQww08FUknSrT3++N5v8buf+j0OHDjA3/hbv8mJN7/Z8RuMJmo2HIogFa16A5NlWKFR9YBkOMSkKV5UJz1/if7FbV565gW2zm9z4q03YwwEQYQfegxGIwyGWiMitR6JgOXlZRqNBrLfIwxDgtGIwWCAkMH4IHEWnk6VqxiLM1qDyomTUuKH9TwJsWRa4+fEFKsdyTFJE5JRws7WDlZAZp6aVK/CIFAIZQm8ED+UNOstpFLUQv8vB2FAq9mm3qjTrLcIw4DVtXWazQYrnTWWVpZYanforCyxurJOs1Xn+uBCRUU3PfNuhZ3RDLLzwb1yxlrMV7Rzv0eFnv1skJrlBpTheFtNYKzkPVQR6qqg+HLgENWV4Kypj62I+mLBlEAZ7agED8T8dIW1iwPzooRIiGpiqK1wrWTB9ESl4NRMgBa2mkYhZpKdKjRpCs2wMwJCYn4tCFutH0GFEdZCmWu74D5XyUzPkCOZJqamxtI9c5p0FFNTtfFrCNSEdAzoNBdMQ2IMDHKDngRQ0uObzz7Lw88+y23XXceHf+K93HTtCZqBj9EZvpIksZvZl0qRJImbFsur1iLIKaUQSiGkyA0C3fizETCKE5QfYIFuf0BQi5AWksxNow2zESiIbYqwELZqbpxRJ64wCQOGwyGvvfQq586cJRvFtNptrj16DYN+gjaWfr/P2c2LvPjqKwgEnfYSsYJQ+IxsQpKl+JEP1hLr2J1ledvTLaPivFFT3cVptfSZNoeZLLwyP6JIwjJjckGuiT4dxZlrLMZolO8jjCGOE6efINxMusqtjDNrCKVASYXOLFmakubjgr7vMxqNCH0PbQxpnFBr1Fhb6XDi+mtdArDd626G9fql5sb6dqvZjMMwDO1wOO59z3IAqvo5sxwZm0MmaRbTaNXZ3NkmjCL6/SGZsbSbLYb9HkHNG8MZU8+d+3vPnvfTpnEWWajs5ZBH4PkQRRy68ghRs8HV11/HytoqVljSJHH+z1KOvQim+jowVvUrMrokSajX6mRpyt7OLoHyCIPAGfpEIcn5bQI/ot/d46tf+xpf+cpXuOr4MX7+53+ea66/biwVXt0xKdAPt1FquW6A0IbtzS0eevAh1jsdwlodIT00jkshfIWwEo0zRfL9ACMVu90uBtjr93KnRYWZGic28wdSTmC00uYoTP59PFMq8/OlJG6T/72wzvSjktxiLMlQs5t0p/pVZX8Jp/SVEPgBvu+P2cBSSjzPw/M86vU69XqdpSXHYSi+lpaWqNVCjh8/ThSFLC8vsba6SrvV/IdH7Gt/zx1zeWppykFRuv0mRE5HqmppiXnofrY63U9SeG6KYqainpoz34cQNlV5UuHAN9v3rxjhnNX4t7Z6YmORKiEzRL05xGBB1T3ndijmFSkt8/2Q2WmQ/TgQU8F5Af9g9l4u0lzYb9Rw9nrsonbAIo5ChTpndTk4GQ2cWh+LpgRm2hUV6qxZKugOLyEzTWupjuf5SKFylr4YS+1OgGw5ZgNrVzKwm2WEgKcEj73wAhcvbPKW49dw1cY6d73zNg4fWEWIBoN+Fy0kS+0WgfI4c/rVaYa7zNuD2qBnWhlVSqpGLO6c2Pw8E7h+uDWORLi80kFYyJKESDgEs9PpkAUBe9pw9sJ5BqMhCkkjiMiyUblpUfru4Gdp5DiPL08vzF7XD2cosOL5RXX8LX63jAwUX5k1k5aBlEjlWspYTeB5NGp11lbXOLRx0CUAv/wP/nb6qX/2L/oDk/Xq9fpe6Pvriol2cdnEQJS09S/nCmgFSKUY9kekwNfu/s+8+7bbqXsefrOB3s1Ayjw45Y5JpX5sAfuL0mE6Uc20IIWThBQgtPvwsizDA1QQsHbgAIQBxDGZ1ihPEXjeWCOgimxoS5m9sK7qJXNGGYFURLUaNs3o97r4cuR6V8mIz33uc/zupz/NsWPH+MhHPsLb3n6re+3c87nqDJMWtHEJRyAVxCnZcEQyHPHII4+wtbPNLTfeRHPFcRS0NoRKooSPtJbUdQrA8+gOB+wNB6Ak/WFMKnBuhXoxUF7c5WIRFYhLOUh/ryzWOSgqh6iEEGOJ5/KMa6PRmPvdNE3HRk/dbnfcz9Jao00OyQmnSJnpbCwDGkUhjXr979WigDCICHyPo1ddRb3ZYHm5Q6ezzFJ7mU5nheWVDvVmjSsOH84NObx/cpU5/bdng4VA5nMRIuc1WxDCsZwEzjZsFtK3MzC9qAiWc+NiC2BvRAUEP9svrxKnqejZ2Sqf24opi6ngPatUZxdcJzMjeQtY8FPveZEs7gJG/jixqNCTqGyrLJAgFhVumnYRIjJz1NvL9DGsqJhSqWhdzfJfKrmKs/wUUcHh2Cdpw6IzS3c3oR7VObi2Qb3ewPN9vEyDsOj83BzruJSKBImg2WyQDgcYrYm1xcfQXu0QLrc49czTnHz42xxYXeKud72bt731Jvo7e1y8eJEDq2tgJTqziECN7WkdLG0wwo06v04e+cKHUspxybQh8Dz89hL1IMKkGl9ITGJotjpc6A145fQZHn/iCYZmyOHmBivLHfYunuWH9bDW8qN6VHkBgJ0K/mMCoZmcl9YYPM8jGY7wsASBRy0MWWq3OXj4MGM/2zAIdlu1+v2h719fj2rrnlCOzykmAaJQKJpnduZVZKlgsXn1pZTHKMkIPMXnv/hlfvanP8zP/Zk/Q297G1+VWI77vHGRexLIcsFQbGJfIYxB5H0Ok7kZSYxFKInUGdoaZx6UV/xZmmBw5JMqUuOEjQ+1IGQ0HCKEIAojSDU6SQmVh+cpels9Pv3pT/PZz36WK686yq/81V/lprffSpbEiDjXOZA5h8FFrjJrAmEyRGaQYUT/3AWUtrz4wgs88sgjvP2WW7j6+mtpRnV2Ny+RDSGVEil9p5udZljPY5hlvHj6NAlOBEma2BUSuuqoMnMt8OnPl+8pASh6ZIseaZpOsVfLXwCDwWBCeMkr/7IQRpkhWyQQxe859SxBHI8YjUbs7OyyvbPjAE6lUErxyKnHEbhE0fM8lJT4gZ8Tj3ysGEuG/u16vUa70aC17JKERqvBtddcT9So02kv0e4s59+XVDvy7ziqz9xfKXMs9unNV1WW1u6vbzBHBmQfDYTXYSJUlQqWoXtRxZkQFUF39vUWKQHuI5u7yC64ihw4GywrWf4VXhSL/Bqm4PpFs5N2wT20+1BRyp/TwlGDeeRpkR1CJft/NsGr/rxTIxilKe1mk4MHNmjU6yjfQ+jX17Du9rp4QCPwEdrQ15rdeERjdYVrjl/Fcye/w4vPPMVrv/tpzp49y1tvvIlOu0Wv16ff75PmBZAS0inMWgdZSyGnVGB/EBKdFMJNNliLUh5hTSB8i0ThN3yM73PhzBlOPfM0r108g4/H2nLHWRnbiV5NUeUXxVk5l7uc6t/rRch/kOBf9ZzlpMAaMQ7+Ji+oM62JghoZApXf88Dz8JU3qIfhJW8SBOxmd2/vsasOHt585dxZHdVDNewmDvbQKVpneJ6aSgCEqJ7dp0QEGcYjao06o16XXqb595/8Hd595x2gUzIgEt6ER4BcsK9czx8h84bM5Dd0Zlx1L6ULfp5HkClM5npPQkqUcrJ6toChsUhPIZWaBDBr51iUApC+j+kPCD0fk6QM+n2azSYEIbvnzvG7n/wMn/jEJzhx4gS/9Vu/xZET1xN39wgLxyljxkiGrXDv9Xwfm2ZgwEOyef4c93ztbpRSvOOdt3Ho8CFnIKRTMgmZsSgr8JSPQFLrdHj51df47osvkLrPEekpRGqmJ8mEqSY+M7GaLI+hlO/FvsRPuT8LttlsTj1n2fvaWjs2wygQiHKSOXaGhKl1l2XZmN2qdVpiyIpxb01rg9aGtdX1uSxZa0uWJQwGQ2dJLaC72ydOE9I4wQqnI+GHAb1uF+V5hH7g1gzOFjrw/Pv9QNFeXqbRaLK6vs7Bgwc5dOgQhw4dYn19nVarxcrKCmEY0mg0eteZF5vV43JVxLtZUqGdrxRtlZCSXayMJxZNWojpADjLh6jiXoj9mPTMExorWVILuB2VLnxigfLKolFG5n9PzBAVbYUCJTMiQ1bMc0vm2hvMS0hXaiksmDqwVCcLYhFys29mN7WO9vRBYu1aac1ag1oUIlXOLM+rfafrYqZaAOOpK6mcgmCSYoWgJj2+e/o08qGH+NjP/ix3vO+93PimE3zpC1/kM3/4nxiNRrznzjswnkbnU2TuNeS4D174vggpnZDaD6HqVsJZrGvrUESFK7wSYUm0ZnPU49WL57BA06sR+QGjvd5lOfyTQhdmG1b2x4AClM/CqnPZnZfKiS/h4P8yYq/zAkwphbAWoRzqGkp5OkmzfzdOAAb9fq/ZavVjq3vLrXZcC8P67l53LEwwZhuKCZlBSFuZGVnh+hM2B5S8MEB3BaEnuOcb3+R3/uOn+Phf/atkoyFpMnSjYkZipEMRpKXC+agMsdrSPpRTlagnlYOWPG9qX1it0cZJBge+h8l9pwv95fIHKEstANLMeUULgZCKZq0OBp548Nt8+tOf5utfv5ebb72FX/mVX+HIm9+EHfTdNEMUYuLYXbcUY2bndBPHQuAhkgx2u3gInnjsFE+cepwPf/jDtFc6qM4SaE0jGWGUIOn20UmCUB7WghfVePLF53n5/HkyYJAkGM8b+yfYhQubaQWpmQX3ehOAy1YQ3e5UYC8ShvI8azlAz/pfz/7dbNISBME4ARh7V5QOlcFgMP7/xUYo5muNMezu7o5RB5m3KYrfz5KUVrM1da2ZzkiShFF+TZc2t9GUIDetpwK3CgKiKKLZbDbb7TbtdptWq0Wr1SIMQ972trdRq9XotJdYWumwutxhaaVDp730jWPJM3dNjho53VJYRGib0zDazzWuKoCI6kmLfYWVbLXOPWLxqN0sLF4m+CwaWyy/N1ERrKfgcuaTHCrg9aqxzqrxzar2TVWLYpb3UTUlYSvQGGsXOHXaeV+DRSTCGf6FtvDMhQtkWnHVFUcJw5B6WEN5bq0XpOtZZe3yKJ9D3gLQBp2liCggGWY8+fJLfOnrd/P+W27h8OoqP/lTH+Kh++/j6/d+k2F/wAff95PUmw2ynWxKxW6896X8oQTIceGQVzsZOp+hFxipEH5AYjSXeruc3bzo0G7pERjHoi/es6Qyf3rDtQCmKn4LKkeDixjtBIL0+LMr2i5KWCSCMAhYaS+Nrrnu+tc85NPjBOAv/N3fzD77f/3f/ThL+s16vRcFQd3LFaLQBpuPBM4KDkzetGH+Vjq7w/6gi4oCBsMYA/z7T/4Ot7ztrbzlhhMooRyLW0qscUmGtnY8gqiUGGddhQNgsWCNtSjhxkkvgQEAACAASURBVNUKxqlJszGEXNyUnHrvEIJ83EXnhLRyQBrvobwFIC3YNMMXbiQS5ZONEr797W/zhS98gfvvv58333QTf/1/+etce/PN7J07QxiGRCsdzHDIKImp1Wol2csKKCnNIDMM9rq89NzzPPLthzh8+DC33HILUb3mDAF8j2hlGe0p0kyTZhlaKqyEVy5e4Ov330/PaLQQTtpSZ+PESFgzx0ylmjY1F/BFVa+0YgPu9yh6/LNiIOXv5QRhtkUw22IotwbGMqO5SUbBD3Aftxqvg3KSV04QhBD4efAvWgrl37E5k7lqA1pryYxxaIs22Gwm+JfcvgZpxrDX5/yZs+Ofe76P7/t8+pP/EeV5BJ6P9JSDSh3CcJfyPVaWOzRaTVY7K6yur7G+usbq+hprK6s0Wk3WV9eoNxusLHdY6iz/zBW9x75UGciqesezgQ7m/QPmnmO/Insf58cFNgFzwjlzjo12wXthXiWxkhTH/rP3VRX+bEBf1BkQi5k1SKr9MSpbHXaetLioyLdViU31ZzYCdl97gTRO4rUDayYMAtFutaN6ELngYC3W6pk3k5OvbXF+yJzV77RQdodDfKVItOahJ5/imiuuRBjLgcMHueX227n3a1/j5ONPcOjgQU5cfXXeevNLe14ic1VZbc3rlZNZ2JiROAE1TD6qLhRKOc0BbQ1CKfrpiBfOnOFCb5cmAa16A7Qh8r0fWf//h1lEVQX/6TNakllDmhcnxrhpOCklUeDcFKVx/LrQ84n8YHPZD09HQXB26g5Evr/dCGsPBX7w5nazfSCMtslGsWOSzxx+jh4l0EWj2ZZpZflkqIAkidGGSS/Ikzz7wov8k3/6z/g7f+tvcfNNNzomqgGbB1ptnI2kCw7+OLmwubOdwOkcg2PpB2GIN2ajT6pGYwxBrQZaO6JgLkqU6gzledQbDZI4nqr8x32g/DBx/WSPLEmwo4SnnniC//g7v8Nzzz3HXXfdxf/w67/OxhWHIYmpNZ11MnGMFcwE/wULYRSDgSxOuP9b9/HSCy/y5//8n2d5peOCvslQQYTfrBNh2d3dJR1IMqlIpOXp517ggVOPoYUAz8PThtjo/Dy8DEnTTmf70wZNrx+iuhwHoOpvytD+LBehvNCLCr9cxZeDtO+rMT9AGTWeOCieq+ACKDX9s+L/6bxXliTJlO72FMmodE1yhgTrydLPq0SyrEtuiySnqFiKpGOpvTSVqWdZRjKKSYVDpzYvXhqjFkWGX1y/53n4vuMzhGFIFEVfarVaY9GmVqvFoUOHaLVarK6usrq66tQgl5dpt9vUarV/dWRw6jcWBkph5yWjK39vdjyR+fG+OWMPu3+SMGdcNfszOy9SNNeWWFDli0WSyQtaFHM5VIHCyMkIpJhNZBa89yn2/oxGwFwytqhdVB6XtAv4J5Algt3dbQaDeGun2/0/62H9N2tBEDmbdDP3bq1woKQq7dNi7bnBNJ84S0lyJ7q+MfzBV/6Qv/iRjxA16tSXl7jrJ9/PN+++m7vvuZcDq2scWFtH5UWXKfRkSqiyp36wAOkmh7QbaXQbFJTEZJZYG5LRkO1uj9PnL5ACnfoyBzqrmH7MMB7NFWTfj7b/j7L/X0UCnO7BTgqiojVqsHjSnWOe5zEa9vGRKClpNRr4Ul7sj4ZfXRYrvakEQBt7KR4Mn7zuxInN0xfOZ/Va5A1GQ0csMClap/ieRHkCoWd6tBUFxDhHK7UNssxQk/D444/zG//z/8R/97H/lnfcegvXHLuGvb0dzp85y97eLhfPn+e1116h0+nwC7/wCyytLDlmp68IWk26W5ssr6yQ5ZCHKAgh+ShZYU6ByTPaUiD2fd95K48ci99aNyKYGkMUOGU9k6Z5W9Tp++s04+TJk/z2v/t3PPvss3zkIx/hV3/t1wjaDbfpdIrvq3xg1KCkwAiXVIxGI2qtNnY0Gics8WhE6IdgJLY/5OTDj3DvH32dW952M+95z3uwnpPkV7WIXq9Ls7NKKCR+o8FyEDHa6vHqubN86vOfIxWCRqvJxb0uvvIIw4BBnBCEPkmS5ffGTh1mueDguPVXLCClJuYcTkBI7hv47WUggkUJwqJNMgv1Z7kXw2xgnrQFShV5lmGsGw2a5Q6Un6d4Da0dmV9Nkd9mWY62kCiaC36GiUhHAWvaCg2CAkVAiKmEJOfeuPZUPq4hELnHOVhtaTVa09dTq77PyShhNBixdWmLl154aYovUT4sC9W1IAhQvvcbyysd6mWlx7U1NjY2OHDgAO12m06nQ5FUXJc9tQBWrwpcC4iCc/bFFVLLosp0Z58Rvyou4PjvK+x3Z2F7UVHI24pEyJZIhbMGRlNowqx9MNPOlWWZYVEl0/x6Sn8WXLQtEXQto2GfUNhelmW9OE12BWz40sNXHnEW5/mbHAflSYHnOENogacUOk/mM6tBSLQQxFaTAH/49T/iwx/4KVaaTZY21nnbbbfx4L338uDJk/w3P/uzZAa8IGLU6+EFPnGSsNzp0O12KxPB1xNAi/2dJAmNqMYoG+b/X5GmGuUHSGWoNRq89ux3eeWVV/CBpUaTuD+gKVxrYBKlJpa7Y0T6+4T9y+fU5ZMD8bqff7YtWiDsxhiyOCHLdM5TyosvrTFZSq1WI+uPqDUjOu2l4XU33HBBIbaGw8GFqQRg0Ov16q3WTt1ku8uN1rAWhC2FICuNiukSJCqtuKwSojsYPSepaFInMGNgmCT0uwP+xb/6lxxeWaeztEySJAwHA2yWkiYJg3jAoQMHWF9f5wMf+gDt5SX80CMeDqjVauzu7Di73uJgL4SCSrPENtPjLMkW1sK5wpIFer2eg0rCECUkWZyQ5pCXEpJkFFNvtbj7K1/h3/7bf0uj0eDjf+2vceedd+KHwRzyVuxtk8tixnFM5OejiGnqfAakQmoLNsWOUl556WU+//nPs7y8zF133eUg4GYdsIxGQ5orHUaDAVFQo7WyyvnT59jsd7nn2w/w6NNPEwODvS6+J0myjEAFKIQjF1q7WLbZyh9bD+vH8VjUspglrC4isP5QYcAyXyVPOspf1lpMppHsf9BUISiLXrOqhdJoNOaIl4Ueg4gFly5dcuJZeUJUCLcUOgwqV4SMooh6vT5GE9bW1mi1Wlx1/Di1Wo2lpaWpr1arRa1Wu/XI9oOPTMWw2WmGSuEf5sWIKsWSbMXzlgJhlQOk3cdhcgqdqLIdXqABQEVPf272f/aXFrRmqkiazDDPxKI/mxZZ0kCmPQI/zAJPNZN0pIUVKCkdkRhJhp5McE01c13iOybZIciEQFinLWJyjZZYwNmdXf7ovm/xMx/8KUJr6Wwc4B3vehf333svN1x/grffejPbuzs0m01So6nVauzkZ7c26Q+85zJrcmK3h1SKLLeuTxGkccLLL79KHI9oElD3Amr4CI3TgRkO57pYb7Qzbb8ko7y3mfkMRenvg9CjFkUst9vdVqO5tbLc2TY6251KAD76d/5m9pl/9i9360G42QzCnVa93vKVT6zjcfDXOXQkbcXemTJsyU3lKJkJjRmbgkgFNGpNgkyyt7XH7ta2g+9zQ+BAeDSDGucvXOC+P/4W737vuwnjiDgdIX2PRquJ8hVWT4iIsoxG2Jn+iXDSjeTkCZl7PAe+7xjl1lWzcRyjpCRsNscFxG9/4hN88pOf5MiRI/z6r/86b73tHQ5ZiEJI46lTxOb6BAXjFW0QkUcyGOSa2wozGOZnk+Tc6TN88Qtf4NTJ7/Cxj32Mt9x6M9JT0Kyj46FT7s+nFbQ1yCjiUq/Lg48/xte+9cdYz0MJi9DQbi2xu7tLkiRcefAK+qMhmztbueCH+8eIcq1QlgW1+0NNf1qSgNL72S/oj9sM8AP7egmb80ZsNSKihJNQLo83WmvRRiPV/hn05cYsx+hD/lWuDoQQ49bG7OdaBPowDOcMRgoGsZIKJd1ETXd3j61Lm2NEoUgQeoM+vu8ThqFToMxJj7m5yyNFMlBuQaytrbG+vk673WZjY4OgFnHd8LEZyL8Mqy+CFmb1D8S8FwAzB9WcadN+o2hivsqfIwjaxZV6pYnUbJJg55OahRMPMyjBbDtgRqlxWx5Fy4c5uNJGSjUyFq2kdAhUYS5jC697M0XjmNonudOpJ2Q+OeDWkkYQ50qtz585w9fv/xbvv+MODh/coBZGLD/5FN+8/z6OHz/OUtsFf621U1Q1phos4nsk4EmLMRlG5Mp4OKlhZxRnubC9ydNPPw3Aen2JuvAIrETrDBn4k3OPN+aZV+zLeQ2A3Gk358oZ7LgtPvvI4oQw9FhutaiH0VYnqj0bBMGlv/Bb/+vQmwfsucQw/urVh4+89eXzZ6+sNUL6eyOEmWEgGjOWSnHKeXYuGbDFgTiGkx3cGng+9bBOu9EkDJuMen3SOEF5blbRmCzvPwnQhsdOnuTi2XNsbGxg0IT1Ov1ul1qtNjYGErbQ058nmI0XtLHY3KRGGBeowyDEZG5hFhOGURBiBkNefvllPvPp3+Opp57i1ltv5Rc++ou89ZZbyOKRSxSSEVE9mt4sRbsjV43yPM9xEDJNENUgSUgGQ8IwJNnr8o2v38Pnf/8POHHiBO/5ife6hex7oBw7NwxDhns9wrBGnGou7ezwzEsv8cWv383zF86TKMkwM3jA1vYWAvjlX/gof+Wv/Crffugh/v4//PvEWn/fcNYb/VG1MfaD3y73O9/7BZT/df65POVNVf6XG6P9Xh+zJNbZSiDOJ1EWJQijQZzrKajxc5WvdWdnZ9w2KIJ8OZnoLC2PyVg6zegPY3p7XWcy4ylObW0jPeWmc6TjDUlPEfpOe73ZbFJr1OksLbO80mG1s0JndYXVzgqNVpNmvUFndYUrDh1m49DB/+3K3Qf/8byJUVXpNgv7i2p+A4v67FTwBGYh/yoIftY8qoK8KOy8E6TdRyfB2nk54DmRJWZkmCV9GeNFLTxtjNFm6KP24iTZk1a0CzE1SS4GmqfCxVSAsU5Js/xZKyFREkfWLtYXEAUBcZLwnWeepV6L+NC770JKyTvf8y6+9qUv8cDDD/GRn/s5+t09bJ5ktlotRqPRD+ql49A0gYPsBaSpJjUGL5ToFF54/iVOv3qGZXwOtjt4mUBiibMMreXYxMiU25olnsLlxy9/9I9yhV/euyL3CVioEyCc1k02HFBrN+ksLyfXX3f9Bet7j3lKbgLMJQDpcLQdBsHF5oHVrXarldbDyBe4KhJhnC2sq2/zTFBOJ7ljOGlioyuEwFfKEUyx6DQjJSbpj6h7EUthAxE1nb2tdNmozRmqvhCc2b7E5z/z+1x55ZW0l1vYOMVmGmGckpWw5RabndpHxSicLK7YTuyMjbFkoxFaa3zpDsAwDNFZxndOnuQP/uAPOHXqFL/0S7/ERz/2MWi3GG5eIqrVaKyuYLrdueAy8S6wY56S0Rl+znw1cUIU1UiHI771zT/mc5/9fUaDIe/7wAe59sQN9OI+vqdAZ07DQEjiLEVFCl8oTl84xz0P3sfJHPrHc2ze0AtIkphf+Yv/PX/pL/0lbrjhBp577hk6KytcuHjBKTruwzQuL6IfFUT+J50gVP33D3YCTcsa59KAORol59QPq9W8LncNl+FYKLkQwbHW4ofRHPIxUfc0BJ4/uTfaTBEurbWEhXhWkjqNhBJRUkrXIitQvcIbzQqByMmTG+vrZMZgsswZk+S/hzHEwxH9bg+k4EVtyIxLlIWS4wQh9AOEkvjKI4jCf7zUarO+cYArDh2ms7rCwSNX0Fpqs7a2xtraGsvLy7x5dGoe25/1ZJhrGVS56lWJDsEi4515aL+K41BhADSn/z/DqRAFomoXj/+VEwrXvOeA6lBTcHFvk/XVVb25s/3Jfr/3N7MkaWMzDAaBx0QuNNeZpwj+zszN5qWbFAJPSAxm7FdvpWA3SXKpYMkjp05R90Pec+st1JeXOH7d9Tz46MPcdtttHDl8mJ2tTcd/uYwA3PdQIrtbq6RTeDUaKRVWSQZpzKlTp8hsytHGBh2vRtZNENLpeSTWjOWO36iPMfJeQuamfq6Z9ISsdS6v4/PNJQBCSGpRjaX20l6t3TwX1WrntDF7lQlAWKvFYbORpHtquFxvJo1a3Q8JSK2eO7wqK6z8I5XWTQEIIXLLSZVD/DmLP3ObPR72kconUO5SNBY3ym8xaFaaS4wGPf7TF7/CBz7wAW59xy2MRiPaaysYnU0pEJaD/ngfFxyA8uypsRgx0cAOPR+Rw6KeVKQmY2dnh/Pnz3PXXXdx2223OYndixecnSKWdHvLjY4h5hCA8iRUmqb5iJeHGY7cvg9Cnn/sFJ/99O/x7LPP8uEPfogbbrgB4Xs0a0tOxSkneyRJQqPRIB7FGOnx3PMvct+D36ZvwShI4wwp8tdRPj/9oQ/xlptuIksSrj12nNWVFS5dvOCAuypJ8dLn+Kce/l+wLvdvAYgfcINWj/uIEuFvdvSxXJHbyyiyXXaSo2IMc7ZKKH/OxX8XB0m5sih6/+XXTtN0jmdQRgz8/P0VbpZFACpaBTtxPOYcjKc18uTAGOMQBSGQgYdvLTaYTFsoIRkOhyilSKWk3+9z6cJFnnnmmXFbb5SlBFFIvV53xl5hOOYq1Ot1br75ZtrtNgcOHGBtbY1Op8PKygpvSR+fD9Dl6l/YCs5AlXjTgo1VJdNs5xyhmJYrZr6lUSknXUEOmJVEBkLzNE6IVDTrfnRsmCXDZDiKrXajf4VsluOhlFDCEsogcHCAtdohQ7gkAGvQQqGtIQw84iQlkBCn8MCjD3PlxgaHOku8/Y538oXf+z3ue+B+PvoLv4j0FI16g93dXWr1+vTrfp8Jvsl1ZwQSIawT8EpiXn71NM8++zxNIlajNpFRxJkFZfADn1jYccFWcDyLFqnGTuWLRlxeDfBH8SiY/WUS834I6OzP0zSlVgtpN1vUa/VLtcD/rvDkhV/+m389qUwAfu43fyO7+1//v6NUZ4PVpeVRq15v1Bo1uv3uhCQk3aiIe7HC9lFUVJSuz21tNten9TyPwPdpexGRddCSO5A01miQ4Htu7r5Vb3Bub5OnH3+CW99+M4HvQ5Ky192j3VoaHz7GGLTJ2w2mdOgqN1stShWTyOdGvdwjWxf6856PJxXXXn0NH/m5P8c1113LsauPj5G2oBY5YR+d4dcidByjipGgciU2E5Sw5EiDx9Yrr/C1//RVvnPyJNcdu5r3vvd9HNjYQGuNajWw6QidoxbCAsrDpEOeefkF7rvvPl69cAkROU0AK6BeryNSjYfiK1/+Ere9/VY6y8tEvkejXsdTikxrt68L4Y+ipSOm4es/bQiAu9bizJvy55qroOffl/iBST/W2KmqeDwimwfJqsA8tUcuc58vd+aIBcG/fIBUEQTH7QidTQVuZpKVehTNtRi01qRxjNaaKAinRiQLN8+JxLfAVx5W5gpwufyqzIlaw5yEVRZ8EjlKkBVciZwIWVy7khLleVghaLZbpFqTjGL63d6Y21AkX1/54pfww5BarVbwEgjz/w6ikCuuuIJGo8Hq6iobGxscPHiQw4cPc/DgQdrt9nPX7T147aT4L0k3L4jllW2ISgnn6Sp2/JxzT1TlLVDFOyjzr9xz9sxh+oNHkEouR83oz0U6fDyqRZFSColTeSlwq/F1zHolCIuxOj/LHQrp3E0l1hoyYam1muxtbjNMDVLASFv++MH7ee8738HaVVdz09veykuvvsJjjz3GddccH/e1fyj7X7p2dGqdkVuR2J49f577H3yAvcEeV68eIUDCMCFUHnHuH2LRY9l6+31OI/yoH4WJmtZ6op5Yui5TEnxzKGSONOd2S3Ecs9Ss06zXh1ceO3o2g0eNMZfGLcqqF/U9f7sWRmc3Ois77VZrtR5F+P3dca9cCelgPiEwBbQpQOaEEpeVlWapUWP/YmNddpVmhiRNsSokTUZoBFHgI7SbyQbwQ496LWQ4GlAXAff80b3c+Z5386abbiQexiw1266nVMx355mSTjPINFYbGlEN4eV+LUGBBEwU8pI4JgxDp/aXm/8Iz+Po0aMcveoq8BS97p4jHjYapHk143mKQa9LzQ9ykswEEC4HFd/3nSWkNijhrIqfPvUE933jm+hRwp133snG4Q1WV1fBl2TxEJF7JAjhKiYzHILyeOzUKR58+BFHdNHORlIqGA6HCGNZay2xvbNLr9en3Wxx8eJFgiBAKoXJtQHGxY2d5YsWC95QTAK/HiGgNwr1b1IJmUlAAwpg2i4Ir04I5fW2AQqQewx2O0vscvC10wjArJwxc50qs+/rX05qeRESV15/Va2BcdAuVoB1fVBPur2tcjJVlkP3Ik9WlHC20QUXYOowL6FsRhu00RPEoBB/MWZskVqQENN872prnWe9lCjhEgSZXwfGuJVZajVoayEekhmTy5wq504pJRhDmqYcOHBg3ILo9Xpu5DLvfVshOPnIo3P8iSAIqNfr1Gq1a4uJh2PHjnHs2DGuvPJKjhw5wqFDh1heXr71yPl7HqlUWyzXj1XmSVN/UyUpbKuh/srMcJ7fMLSSJ1/bZK+XEmirhZTWpLrWqjUJvAApyrLr88HYlqpqh8UapJWuTWvFmN8lPZ+trW1Wl5fo7ewysk6x/cWLmzSefJpaWOfGm2/ljy9u841vfIM3nTjBcDik0apjTObGZMXEae97rbKFUPn5bzBWI/ExScaFsxc49chJfCQHljqwlZBmKZEfYVInlqMLgnq+B4yYVPtV+dxCd8IfZQsgm6icOgSGccydS/ylGLfPhXXk+MAYQqXwldxUQrwiEa8NB6PdfRMACZdEkt6zeuTQ7e3nm8cbUSQD4REbJ4/aqLfo9XpOiMTzxmiYLi1uU8ArxiJw2X9ikzzTci5Qe2lCx9d4niRA4mnwUNSDfLZRa+LeiHajRSrgu88+z9//e/+ID//Zn+H2O+5gabmF9CV+EBC1Gpy7cJG9zW1C5SETTbveIBNd/DBkea3j5vE7bajV6W9vuSpAedjEeScHnu/0pNNsAq0YTS3Mq/40Q8n8kLQWX7mExRpLZp3BkFXSBXA5CarJYEQjjBBRyHOPnOTzn/kMZ19+hbfdeCN33PlO2sstknSEH0RI4/pwAkGapQQqIDOGC1ubfP7Lf8hLr50m8D320gwh3YGbGY2HZDiKGY5GJKOYUa/PcDDAUwoVeJA5jXuhXbarcIpZ2tqxmJO2BmnKQUdOr4rZVZJ/6n+ysd/HWO3E11SBXDqmslLSoTPWOvcxJpwUZ1ctkbp6Oy9EBozJ4Vj33cuFSLQ2iJxKJcilo2E80z97aog89Jrx8bMI4bgcAiIv20PcP6URU3C2zgtRZyOdg8RyEstMDhKYsgl6sRasmz0v1keBtpn8to3XTemATTKTcwZ8VAnxLq7D5kiByI2qymi6yK/LE5OfZYnGTsxmGfSGpck5gRSe6wjmrx9EwVwbxFpLMhqRjEacO3MmT5jMmNNRTDn4fvDI0aNHWWp3xtoJ6+vrHDhwgI2NDZaXlzl06NA3jm7dexdYjM5XiHQfrIJJC1EsMA0Ss2TDCu+Emdzi1eaJ55OdwTXnX/wG6WDEFc3VrUG///8lSRr4vv8WKSUyCjDDIVZotwrLPg92ol+QSYGwOW/DQpCLXylh0VKxlwzwPMlev4cVMLTuswuE4NEXX2Y40hw6eCUnbnwLTz78MA/cdz+33/F2kiwhyTKU43aAsWRp4uRq8+RyMBjQarUc8py4VpQS3kQUS7ukMWzWsYkmyVyR88KLL/HoQw/jYbn+6HWYUYLwFJmwDHSK8H1sppGhQI//sRPH21wDQUoJejIxVd7H5vtEB+ZRQKYmcAqtjjRN6Q76TptFSJQfjNvXYqwdZd0UnPLRwqB1ipUQKIkwBhlnBMqn02zZZaEu6L3+vabZPv/xf/J39b4JQDwa7gT12nYtSy6tNlvDZq3eiIKIOB06G11rUUGY997lVP+7ICGYvAdmc6i9fAZmWBKME5IwmQv+BpSxYDTKONES5QcYHaP8iKWWYjCMeeal5zj9r/8Nv/fJ3yWohRw5chjpCZqdJdIsIwgCjl95lOuuPMaBa1dIRgPsaMTmxU1aa8tkSYrd69KohRhtcKeOg9pN7thny6035l2hJi258Uk4dv0Tyn03ws3OqjBCD2OG3R69zR2ee/Jpdi9tceLocX7uz/wMgecR+B6+Uk6+txgpEwKDYhinWCTfuu8BnnvhRTIgSTOUVGRjGF+OT0RtDMOdLna5Q5Ikbpbb88feAEUWaU3OIK2EoA3WSoQwpQCzQIzzDdEpKK51cm1jSecKXW9X3cjJ+CivZxRwxjJX2Dki4Ou91ul/12+EGzjeo9/r9zfC64sf5HuZiDbTCpkSFLMTmfAsSYmtI0be/6378LxgjLQUiI+fSz23W627Vlc6HDl8gEMbBzl0+BAb64fpHFym3a5zIFqmETUQavTl1eErH/ZlipLC4aYeKCmQCuQcF0FQNc3wXXsi2XnhYtOvR5vnz/QaOo69+tGlzSxOXtva3bFxHPcsEEU11LBHlsPgiz4Tnd8fD6fkl2UZ5DLbgVIECNLMoTMogUUyMo5oahG8cPYcX777j/jQHXdyw1vfwneeeoqVjVXe9a47eO65ZwmC0KHEShFYN5I9Go3whKQeRoz6g6kxOCty5n+h9BnUEDJgNNpFSEVmDU888QTfffJpNpprBFogzaQtq0WpPW3KKdWf3EE2nrLIeTWFKFvRxp5LIkocM0lFmzFHQa3JiGoN1jqd/tU3vvl8q9U6YwbDzfLvVyYA7/+NX0vv+X8+sV2v1bdXl5a3281Wo1aL2EkG6CxDmxTf99yMcQV8OdVbLvVHRSnD1UY797XIkEmJVQqtLSLOiSkCPKUQRpEOEqQPB1bXaA4b9Pt9tjc3AcP2a+eIGSGEx8hmWNxo0jVXHeWG60/wE++5i2uuPU6SZaTaEPk+aZaiCDA2+S8LJwAAIABJREFUHY+BuBg66QYJVfRobd5nKb7E2N0PQIvC8tfBY0ULRGi3rJL+DpEXMNgd8MpzL5D2htx1+53UvYAjBw/hKY9AeROCojZ51eN4FVpreqMBX/3PX+O1s2dzEw87Znlaax3Er7Px/T5/8QJHjl5Blmm83DrXZZmTXqEb9ck/m6mzT8zxOaYDneSN95iu4LSYJGpufcoFoiwT+dPLVv5Fm2QmKfgvY1bijc3x+HG+zrSv+vz8tclbC5lOECjHvxHTLTRjLEmiybKE7e1NXn3tFZ54KqBeD2nWG7SWmrRabZbaLRq1Jp7n0fTthxu+pe5JJ3/uB0RhnfXVIzQPrHP46GEOHTpEs1l74ODmQ7cbG4MVpKlESwWeIPEhsDy6tH44fvrU45/a7e78H2QmCcJgKJXqnn7ttDHGaGHJFU/tJKAs2lnWoPJGWl7WYXPHUV95NPyQURoTF+RuKclMRorFBxIMDz59ina7ya1vup7agTWeeOZ5mq0lDm6s0+93IUnwpROc8qVyctc4h9diCoUZTpW1Fs9ALBQXLl4iyhOJBx98kAfuux8wrK+uIVIzbu9SjKYXZnWiupIvEoQfBw+qGOUre5YkSUKcpZX0yNnzSeaKheM4K11RYYxBaE0tDAmDcKtdq5+t1evnP/5P/1H/sgkAgPK8TbLs7sNXHn1L6+UXjtSjCH/HkOUazqEKSLQBb9K/ceN4ds4TROTRs9zjyTAkOqOfxvgehL6HJxXWQJppjNGkaYIX+KRpgk40US2i0anRabXRaYbEYLOMOB2RYRnplL3RgK3dHS49tsPjTz1JdzTgFzu/yIGNDUZpQsuAH4Rko3jca6+yeLQ5waRYKONJi1w+p4iYxc9lHkV17mEgjUVYQSAUu+cuMtzeZaXWpHPdCQZ7XQa7XQIrHZxWYKuZ62MZU9geS9LM8Mwzz3LyscdcD1QpFJCafPY1J74YnUO4WrO5u02SpmhjnD92GOSZZSFbK/M+qZoPaVOjgCqHWaukR8WPtRf2ejfTODEbJysyB+blRJV1Ssr1+0cdJvwJ/V8j9Z/iBGOWAzAlijTjRDhOELQGUuIkHu+FQoK6HDiK5NtaQ78/pN8fsrm1SRCGREGIJxStZp0jhw6y3lljT4HRI+LhDkmakqRPOCvzHFkMRXZ7YBMCXxGFddqtNq32Eu3VDvVonfpK/M6Nlc7menPpH+1c3DRNP9yNlN81xlwyxi6FfmALnQcPy+vR4TM5ZcHkeybDoqxBW0Pdd/wpdEpqreNQ5fVfhkBLSWol9zzyELuDLrecuJ7eXpeHTz3B+1rvotlskySJU7xMnUhQ6EfjMfAkzpyVeb7frHUos7UObdDKEbMFipOPPMpXv/pV0izjmiuucWewtrnqqkZap444nhzIP/OiLf0nRXwuk2iLBPNyCqCTBMC1bp2GQynR0YZGo8Fyp2Nb9cYlI+Q3lPIuzv79wgQgHY62pBBnomZtq91sps1azY9UyEgnjmTn21xIwowD49ybsiXYWRbBdjIvnQFbwwHG1y4o+RG1UCGVIEvdmCDCIDxFoHy0tiTJCIWgFkTUA59ISpQUZBgyJUgw7Iy6nN/Z4mJ3l9//4pdIJfzSL/0Shw4eYHdvl6VWe6wdYKxGV0pry7kFUShMTb3XvOrX1uSKGhZpLZ4VSIMjIw5jGKXIzKCTDJFqfCvwECgr3AKNdd5bMAgFxjo4azAYcM+993LuwgWElCRaIzwPY7TzPRByPMtqc7LIcDCk3++DtQRhQOj7jnktxTgDhjyBMNkc2cgRTrzJ3OmUkErFvPSfZNC3M4S4XPHRYku21IuA+BxFERXI/jjjlrO0wcn6+L5aAP/18UZNAIqgU7aLpjQO5uLEtCCLyveJCyQGrJiqKrXJprwpABJgMBwhhaAVRhzoLHPrTbfyE++96zkSE+gk6Q33uv7WoGvS/sDb6/b8i6fP6FdPv6aHJmknkqZQup5lu1i5g/J8lOcRhRFRVBeR76/ZUWICKdOrltfPmDj9N1KpnqdUXQshpFRW2ELHfcbMbbbFMmXfIHKBIBw/K44Jo4h6GEAm6ccjMnSueCpJrWHXZARAN4MHnnqSXjzk2o1D+EHEyae/y6033ei0HqTHaDAkTmOiIEAIQZZplPId6Q2JEBIjpOPvWAlCkmjH+Hj0kZN8/Wt30x8OOLRyiEj5ZMMkP4et4/rkYnRWkicAcpwAiNIU17hF8GMSAprinuiMRE871e6HTJYFJoupMWEMZIZaM2JtZaV/zZtOnK836+csbL/uBEB63qgZBgOtxGC11Y6XGg2/Xq/R7cYOAosTPCGn2cTFFEneNzNi2nylaLvIwqAFS9/EiCR3Z/M9PD90QjieHIuCaGHIch0Cz/fczG8QEgDx7h6NMESPRhgBQT2kU2ujrWC332XHGL7wh1/hpptv4ejxY8T9AUkQEzSbmDR22aQU43puzD4uiC9VBwZi6kMxxgV/icAXua1EzvzvX9wk7Q6wo4T+9i4mSWkEEY2W7/wGrEsSiBNHLFOuWs2MIdGG0+fOcf+D3yaxkFnjTDmyFCEcw5x8DKaox9M0pdfvMez1aYYRrVodXwXUrGCYE6q0NVijpzy5y0I1s4zx6UD/xpXMFCiEUJDXNa5KEHkLoFDMc4eHwJT6fzkxdUY8xpQSgonPi5z0of9r/Pwv4lG19su20VPJX0EUywN6prNS7TBta02+Vy2TkciyGZQUAoUiTTO2Ni8x3Ol5jWbjbwRR9JrAxtqadHeUGd9KqzxPRvWaOnH8TUsffNd7//nm7s767nDPM5kRI53oYZza7XMX9Gg00v3drhBJoq4+emxww5vf9GQyGj13cWdn25PqgAGEFMKdpQEyHU6x2yvvTVH85HoqxkJiNTpLiTJF6ClqXpCPq6V5Ai7IACEVQ6PxgB1tOPns81y6uM11VxzhwtY2vdGQa666iiNHjtBYbThkV0qsNiAViTXjJNzmpNLUQJwlZKlhc2uXhx58mCdPPs6w36MVtKj5Acq4lqcwjg0vzYSnVuxnKw1mRsxrqgXwY0pAi/iYpilJmlxW/nsOoRFOQt/FVVc4e1bTjGrUo2iz06ifrtVq537tH/zv/dedAPzE//iXs4d++1N9C4Mja+vdF5qtZiOq4Xe76CQmFYowDOdULMs9uzHJaqafYgrEG0sCDG3GTjrEDiANNQ0/xPfczKMXBvQGfbr9PsYYoiCgn6YEyiMEDjZaNOsNpIYkSzEjjfUlDRlQVxEysJwfDfn6vfdwzbXHufaq43lqrseM7kL3QkoxVu8TGJcM5CWkKJGlbf6mrSiU/hzspfKxJVKDHcXoofs6+9IrCG1ZW+4QCEW/1yNNUtrtNoM0IRvGjPzB/8/eewZblp1Vgmub4697Nt97acqXSkgqBGo5hNEQBNDR0DBNxIhoAZII1JJmREMH3YEZUGiAbiS6JwYYBEiiMd1NDAwz2GaAaUACmSqQipI3pTKZVZn58vnrjt1ufuxzzj33vvtMOhmmbkXGq2fvvefsvb/vW9/61gKVDpRjJxFyrTGSAh/68Ifx1DNP2+SJ2OpCG4A7lilarV+X2UpE5gLj4ahI4vjD7U73PAGWWo4TtsIWivEQhFCosl9ASl+ESU1s6sOquo/1IWjIfC4A/cJ2wckkitetJlO/F1pnyLMgD6nXZp2W2qSgwaqvJmptr5BOmb1NkIFnEYB/CBwAQmz1bxqjedPjcXruayKkiSDocm9NAopF3SaCM1IpSDVZh9xtIUsSbG9v49JTT2Ft7Uy+srR0jRhsvupfv6Fovsa3vPbN5OX/6CUrQqtXR1HoaaNVkqdGA0ooQT3PI2mSMs6ZDL0OWVpa9NMsjRc63d1L165J6wFgSKXFMGVaeGQlWAoBlYTA+qQwNsyPigyAC8/x0fFCOHmBTAkUBnYSjFM4nEPmBXJl0/GL/X3sDYbYWFrCk5tXcd+1LXxZf4iNjQ2rW8ItQVcbIIrakKWHgCR2RLw/GGJ3fw/j4Qif+uin8amPfQyAwnprFY4hIJrAYxyFkCCGl2PPFb9LWUSBAKYqojBNAvx8SgCrUq1Pa428EMjz3F5bRjHH7PnQaVNp7NRJp9QwQsEhDK0wlOeWV68WWr83MmZr3vPz416cy/hebvCXq2fWnttptdcjP4AHglgqKCbBwtAS98okgFYjQk3DmWOcjCRM2VtSKIRELgokIkfbDRC6HiilGO/so1ACytienCwGYCBYai/i7OIKNgf74NzCQ3aMj0BoDeIFWGx18dTBJnwAf/3X78Ndd92F+77vfoBxZKMEfuCCaQMFS3Qx5aFvMDE7Mg2JYVaP9k0HEqIt6sGq8bCsQD6KkY9iHGzvwnNctFoBoDRSUcDzPDAQjNOktiUmnIMoCXh2TjpVEnGe4cN//ygG4xgCAOUMWkgLWFFazxLT0l+BCAmR5+hv7WzF4/iTSZr8UeQFr11aWHogTTIQEIziBAoUEgQO58hzcaxlrzFHQf23Rknv9j2q0TR6KFlgFWnQGBCjQcoe2rwEx5QcAlZORijrOzZpFTzLAvwHggBcX1Iye641fR6aaolZlk19PlVlKo2kyDAcj3Bl8wo+8omPRt925pu+fzwa/eC3vfm1xezz/uRv/KLBb2AbwPb1vsdfeNOPMDfwpZaSUV7afUt5WEhqXkFXtsh0KW8ua8IfQ6olmCLwvACRG8AhHCYeW5lh4iBTEprSch8pgDvQMOhLifHuFtxd4NOXnsJDn/gkzp/bwMbGBhZ7C2iHETzfEgCLokBWFDb4Dwe4fPUKLl26hL39A0Qg6LEQHS9Et91BL4gQD0fY29pGN2pDZbI2dWvyl6c0Ob7AWF4VvCvFv0pM69QJMLHoDDXaCukZCceLwCjddtvRk0aqJ+Ik2bvuBEDmxR4K8YQfRXu9qC3bfsgDL0SaDxG4Doo8B2VOOTtpF4hVK7IkGikEXNeFqkYHGYNQAlpVfTVtq1lUfVsNUWQYFXndX63qM9MIOAxAMjrA1mgf9y6vQ/f30DEuIlBETgCfOSjSAl03wILXxk4+gjDAe97zHjxw3/346pe9FNwQ+J4DRgFmmB0PJADhDrSWkEqDey4IZaU6hIYUpUkR55b1r0qRFwWI3M6XgrvQSYb+9i6yUQyRZnC5Y8UcALieC6dk/cs0tdmfsCMfqlDIigT+AocUCk9dehofeuRRGMqgISGEtJWnsa6FgDXooAYQeQ4OiiJOEB8M9z/yyKN/de8D9ycve9GLH9OFbLmUb7TCFt0b9LG7u4+hsK0c0phTJ2VCYUqipzHGChE1rGQnUx2lCx3oYfOlxr9bpfh1YpVoTC3LC2ZVmQwltZyyy61ttEhTeL4P1+MYDQ7AATA2MdaoDnOlDAQUOPPguj60BlKRA4TBDRxoQ0oCWDmtTqaJYKY2wKJzE6fDnJN/2NX6PKnkeQH1VqtQzhNhaj4n5xSi3AsAaib2cevWru0KIcOhtV9JKAsh6sSgslau9kQtj0woRsMBDsIQ+/2D5ct728tL3d75P33nf7n2j9/wXQe36jr8y19+m/r5N//PptAElFMEnm/FmUo7XtIo2MgchUwzY2lsAAijQSgwFAJkPAJvdRH5gUV+kzFSLeCCQihZO9XFUtTAggOKwmikxmBvbxuP7W2DffSj4ITBoVanhGCiPqmNnhj3AHDK2NAK21jtLcExBONhDKKA0I+gCgVWTjk1MzxjDITWkNUINyyPyhrCmVK+e8Y75AbRqKZb56zXSjUumuc50jS15zGjUw6AtWT3EceFIVY23vd96CKHFhIeqFWC9bydIk7+X9Ptbf7Af/iZ4roTACVl7AVhHAGj5XY37katbhT4GOdjG9TrDUPrQ7hy28MM7N/si9WKeRWzswzwCgqyrMarylI2hiEqBTBSVuocwFMHu1gLW+CBA5cwFEqCaAu9hczHxso65B6wm45w6eIz+MTHP4UXPPBluOPsOQwPBlBKoNVq2QxMCAiT1WMZvtDIRAHHcazuf3lzYJQlz2gNUxgQx4XDXSDLkY/76O/tYzwYghmrxFbZxWqtkRsBoa3zIHetEUsQBNje3sX6HedBGcNgFEM4Dj748N9hlGZIigKyap00r6exWgOTcTQ7o2yETK9cvtx/zgMP7N61uPqQ84qvVk899vidn3nm4p3DOF64ePUKLl15BsM8Ry6K6fvUUAVs2sMaM38DVNdq1mnu8+8rUBqZzArjEG2lkEUOlxK0fB+iSCAygbbjghOChW4bi4uLiKIInPOy0hhjOB7h2vY28jQHhYPQj2BAkCQpDCXwXBdS5Z9XqPrZx40lAPPuTyUoM5u4Toe6adLvvORkVj67Gulq7omm22LTdU4YhSiywmo7+7vkQ498aPnbv/Eff0uSZ1cwh7R1Mw/uuYRKBVoWaKw0aGvmotezig0BiMMAqe0EVjKGE3G0oxYYYzgYDSEIQWYUCqJhwKCoLq1rrQiVVLRu2NmIYECNAlMaVJn6fKOlk2xVKFoxY4pzi+tY8GzSkWcZdFrAIVZ5kpjDIXOW73DUvr1Viei89ddca02jn+tOuCuOnUMhshQyS0GNRBC1cGZlOf9HL3zRbq/X2VVFsXvkmjjuCV78+u/SH/3N3933HffJs6trDyy0L3bbQYD9PoHIUhjGwT1/Wj9cTfTNGchhA6FyQ1UK1JXutzKoF4WduNOlaFA1kjfNK0CJHBQqARLAoS6Yx0Apg2usS6DSEq5LYXIBp/w7f/NX78GFtTOIvv4bwEGwvLgAAMjTFCK31qhKSsRJgn2lEAQBdBiAhSGYx0ssTJWmPwaiyOC4BjLPMTzoYzwYIhmNoaWC71aSmyUsyHnpA6+t3CnnyJMUvaVFeLlAmgvkpoAkwNXdXTz0tw8jzTPkxliuLmETnQIzDXbTyqNRaaOl0ulwrJjS+5KR3+8E0UMbG+sb9z7n/jftDAcPPvb4490/eU+K/Weeagz1sakKtTrUKi35qQXd0EWv2KpTBjeNTPckKdvbB//bk01KCY85kEIA0sDxOIwWCBwX9999B+654wLC0sO+qv4yUWAcJ4jTDPtra3hm8xo2d7aRZ0MQ6oKDQhpAymJuBf9sMvDFj1DUbcgSnZxMK82gVkTP6GSoumUw6+ZoTEUEZHUCUK2piQ7K5ECrCHaFzCFziZ29XSx0u2cu7lz9qoVO98//719898F3vPn1V2/Fe3/Xj/6MJf6ZglDGoAoBh3McNQdIzHVcUwLkMBiIFF7mIPRctMMI1ADDeFyy0w0KChhYRNVK8RpoSg+DYVqh6oBzAAwGbj1qaeNK5ARYCiIsd3oIFIHOhYX7pQHltDzPjEWlyUxbYw5nrTmpcbs4ALNJIiHEEuq1gjKlKqiZFLvmiKA/zQkw8DhHniXQWsIHQ+QHCD1/d2Nlacvxg803/bu3xjeUAJQLYVcl2Z8uLK+8ZLHTvacbtRC4IbJiBApewlgzjPFyVoRSav+fHs6urboeAWFVIDGls19D5IaSiSgOnWyeWqFL2/W7rxKwIQFpGzjRAhi3c/55JqDA4TMP3PUxzIbY3rqGX3vXr+GxRz+JMyvL8H3rRe66rs3Ct7awe7CLdruNC3eex8baOoIoRKfTgR8E4A4F5RxeiQo4DkcxSnBwcICD/X0LIyttNZyFsAIV2sJKvuNObnpVWVOC0XiMqN3C1s4O4HugYYT3feCDePziJYjqmlI2IeSU6lysOX9cJQEGxihNdC7Mpz77mb3nOy8YMsYuX7jzrruk1r8QtTpve/LJp7rEGPiuj6TI5kKyVW9sVib18IFKjp4c+LwGfHMow6cGkEWBIOAIXBcqi6HzAqu9Lu654wLuvuM8uJBQeYp4NERRmoS4rou266PVa2PjzApWlhbwuacCXLyyiUQUYE4AQigKKUA4OdRPJM8SA76og36T4V/B9E30avb35rqeEiuYVbV4mglwVe3P2zPVz9pRQw7KNZI8g0c5hskIO/0970OPfOjcN3zdK78/y9Kf+L1ffHf8z978+sHNXgfHcwmMYdwUmlEGQcUhs6rrrm4NYKQt1GgpjTIqUvARxULQwWK7CyMVWJFDagWhLeeAMstfUkoDpYJiM+sg2o7nUa1AQMEaCAAH0IKDpaiLM60udJxBaQKjNLgh4NypLa4NdK3yZUr01ByBAEwhQLfw+Jq1AW+uQ1VObcly7G8WdTgJgTDE2KkLYgnMLmVwHR8LCwtYand2Uyn/a8tzj+WLnJgAyCzvt6JoAIelGwsL2aVW22+FPgbFyEIYWsPQcnSDaEBPHNFMI0hMLjCzBirlzLtpym+irHTNJA0ijJbjWKS+ieVfhqIaLuFIlMSOSUFTBoe7EMTA4QQEDhijaAUhkjzDRm8Fw+EQIk7w/ve+FwoKIY+QyxwKCgEL4DCOpEjQilo4f+d5/PNXfSdELjEaDDEej0vHQQ1GLbwfx2NQQqwqojF2RNGxaITLnYm6oJQoTEPGUilopeB6ntXRTrNa6OejH/8Y/uI9f4WxzGHAoKndYQa0nDGmtk1StVRK2WEYYsUgKNUgUE988rPpD7/z5w2A+OHf/qNLDiELRqd7+/2De4bxyLofWl/HxuKfKKDNBrKpQxFWt4CUNs7NBXwUnPr5fegyb7I9Xs9xQAngMYLn3HUHHrjvbqg0hsxiECnAlXUyo4aCSgNKDIxmSOIxFtsRXvj852JheQmPP3kJ1w4OoEDguh6U1nV/cz4s/GwQ/kI+ahe1Zguy6ilrDW00oCuNDHu62NlwZesrM72e5rURCKFTScTUxNOUW2R1qFuUAACkkbYihsI4GWN7dwedVuvMla2tO8+urn49o5T/6bv/82Vt1NV/8i9ee8OKU37gUw1DuCokd3g9ilghE81eN5rjcs2vzwtwlf07s+dILiX6yQgOKELPRa/ThptxmFgDSqGAhlaAJCWYr+TEya72pKiIubZJzAF4IAhB0CY+FsMIPTdCSzOoJAYIB6cUlLIpe3YQK0RUzfSbhnEiNSV53ZgpZdfJ3r31GMDsGpTGiv4oM4mD+ohrfZQOQNXGqvgrfhRgaWEpeeDBB3d7ne6mkHLvpNLp2MdXvvG7pON7B+0w2t9YObO30O6gFYRwQVGIDFIVh2F+Yw7BSIzS+QFBT6paM+cQ1Vrbm6c1oLTtu1c3TxMIraAA5AD2RY5Lw108PdjDyEh47TbyTKDtt+BSF9kwwd3nLuDC6lkshB0seT1oqeCSAD1/Ca2wDWMIBAQoYei2uigKiTxJMR4nSMYxkiRBPB5jOByi3+8jKccTwzBEt9dDEATlvL71pQal4K4Dyq3EZZHngNLgJXlvOBzCD0LEWQo/CrG5eQ3/1+/9Hi49cxmB40NAW8MeXYoNNa51padgSihIwzoIUs4opUw355g4dwpjjEzSOOwPh1C5RKfTORSwm8JN8w606p7Yw1NNBbsmWfA0GeytKfHolCfF7E5xHAcwCjLPwBmwsbqCC2fX4BGDnauX4SiJAAYRp+g4HBElYFpApTFEPAYzCkZkCFyOO86u4fy5dQSeA2Vk6ST47ONLBQVortGq9zoJ1HoqMTjuEG/ujyqQViS/Q0z/OXujORWgpEQUhRDa2pYPBkNs7e7gfQ994M4nLl58rcrFj8Vp/ArO+Fe+57d+d+mGEwDfo57ve47rSM9xNS9NdaiZDuSzCezJ2Bux1s6qnNKCgYDGOE+x09+3aFoQYjFsY4GFCMHhAnCN9RdgWgFaWtRUCWglYKQEMRoMAIMCh0YIgh71sRa2ccaP0FYAGcWImAufcrjEKqpWBMuKeGgwUWud9+qNwakr7lu5HqWUKIpiqv9/I89PHV7rLxCp0YtaaEXR9j0b5z/b7XR33vBTb8luCgEAAIexvfig/2sLq6v3LHQ6ZztRBN8NMSzGoEqBlYSSqqc1tfhLgtpcgk01NmMmPZiqe2sa/tmmoVlNyt4bM7DqgWXOJAkwNgKFFMhkYbWqHW6Dr1bwCQPnHg6ubZciQgyu72NhcRVpLpBlGSil6PUWEeQBiqLAY59+DMvLy3AchqhjiWKtTlRCfA4YI3CiCAAQJwlyUWBw0MfW1haUUlhaXMRdF+5Ar9NF6HqQxkALCcoMWJm5DeMxvLYlIX7u8cfxV+//AD7x2CehwOB4LrTIJtBV5f+BCTu28ilQpkptSaUPPSWCt9Tthdv7u66Wyk2zFFmeY5jkIJQfqtinKxh9COKfrbDmVf2zxKgv2OGvJELXg4iHaIUB7jh/Dh6j2L12DY4xWGhFIEpaRIWzWrKacRc0cJFrgn6aIhcFHOZgcaGLleUF5JvbyIsM1PUaPeBne/9fbI8mq7+abqmDccVFMhpaT/f+6zOHTFgyh8muFIzyxiRNNU5IpnVDpvYOrb8PAJTQmmejYTCWGa5ubsFo7T3ysY88MDjYW3jhV7xozQ38x/WwePf7f/sPHv3q7/z26yYHep4HCU1dzo3nOpq7nNL86PqPnLJiJKZSdp3IJmsQpCqHSHJ4Dkfb9dGLQniMwosTjESGBNY9U8HAKV0xVR0IbWByAASgaFOOBSfAihuhx32ECuBSwhQSfjkqaHSl808st6ASbaek1KGZeQelXe5s8Xq7OACzxD8pJYrSltiqyZJD171SNj0RpZcS1Bjretvt4nl33t0/GA7+bGVpeeuk3z1VAjAejna541zxWsHWmaWl/U6nvRiGPpxiXFfvdcVfstNrz6rSiEGhMT5jJp7zxqhpAgYhU2rz1exp3Xsru27VxeTcg1AFpLLKghIAhcJ2EkMDONNZgM4VvKgFRwlACjBjlZO0UtjfPYDnB3A5h5IK0hQw0kBlEsMswZ/8yZ+AEoZWt42llWWErQjSSGS5gFICa+urGI1GOBgOUBQZ0jTHYH8PnLtYP7OKb/7Gb8QdZ89jbXkFGgZCSXBtnz8XBbywhYuXN0FdD3/x3r/BX3zwb+D7baR5jsF4XKqjIbmQAAAgAElEQVTbTYiVhJQjl9qUKlZNEo0BpRYa4JROkXqjIOgutbvfurl5rSWEhDTKav0fE/xnveYPeVCDQmsJSvmhPmp16N1sn/Gk6t+uO1o2JJu+fvZ7eS6w1OqgiIdwGcfq4iKyJEV/dwf333EezGgYpexYUKGRSYm8kNCMgDguVtfPod3qIKIUw0wgcDiWuh3EcYydg2GZc+mGgdJkbR+buRscq8D27ON62z107kfGXGgty6qrKO2KK+EnMxnZNPowuE1KcizRIIQfSgAm89rkEPI1uxeOQhXa7TYGgwHC0EeR59AEGBUxyBbKICHO9JOkdde58/7Xfu3Xfa/JxU/hBqYDKIF2CNOcUsEZEyCGVxyiWU9Kc4pEoLrCBlbGnVFWt1QUDPKyiXJtsAvWW0E7aiFwPVAw0BhgQiCHsC2BMmmo/iYzdkTQBUXP8dB1fCx6AbrMgy8MaCHhGAPH8ZDl1uacEWs/zRgDMab8e7o+Eyo7cI1q39lE3yYLdNqj09iv04Z/zUmp/WkmKJrrQSkNKWtVkbnn7SyKfjgVUzBSwZQFjB/4oIzvLi0vXaHGXOkPDvZvSQLwFW/6bv3or/0fB3qc/cHquY3z7YuPL0ZhCL9PkEhpNft5ufjLGX9CKWiZjVVw9QQe01Oiq7qU2Dy0+uYuvGlxmqKobF+sSAsBwRgKUoxwMBgipRpd10fIHMuWVxQOKByHl8qCli1KK0KP0HDAEERdUE5wMBxAGo2D/hhb/T6y2j+aQkNDPfbpqcy4GlGkSmD49GV87ld/HffdcTde+OCX4/5770Wv07Yuh4SAEA5Ig08+cRHve+hhPHbpIgQc28vyXSBTVoDIAEbpGeMiYpMBQupMloKCMQrfd40xpiCN5UMJZQ5zVjKpeCak7a4ZDaUqFv9E9nNCcrJSntUMLKENOLMUz6HEJgFay7on1fx3VO+0qqAopVOW0rP/TjNFUFEAaVmBKWVlgAkl4JRh2B+BgmGh20O71UJ/c4h2GCFyfThKIpcS3HPhBT7SwRhXti5jfzgGdT08sztCb2EJq2fW4HseukGECyureOIzj8EFUIgchFpPBrsiKrMlA0N0PaBJa/1gU49wUgDKHJ/l33YExdzclIY5pRHSPCJd8/0d9T5Pev9ay3LtmqlqvVo/WZaU4iiwH+tDZsI9sjufHgruhNok98hTuFYKU9OVcSnyYxqvn9YHvG6ccRpZloNziiTJLHGaMRgQjGQGvbMHYwBGWdRutZ0kSV0naN3QffrmN3y3/JNf+o2+q8lASNE3Wgd5nqIdBhhmCbSRIKQyzGok/XqyXicz+KTkLdhLo2B5UdUBaGXebVJBQbA56CMrJJbbXSx0u+hGLSSjMfppjD0xgrRpQfnP9vu7XoieH6Hj+nAU4GjAya0FDSPWEK0aZVSEWmEiVJlM2aYxBEobaGZVZS3THlYnxBDrA1MWp5xaqqGWBpTyWsvGlAZCaCQ8cwNzHdCm9xPjDoqiKNEoCk2AXErkYiJt3+z71+vF0EOj9BVyNWkhEWhiOQQ+97C8uIBOu9XfGwzedeHsuWuve+uP6luSAACAVHJXSvGJKAriXreDThTC8yLkeVJrAOAUxC9G7OLATPV6fYfOdBU6oehQSHsEA8RAGYKrw32gtwS/5YMQgiIbQwuNgNn+MIWFYEhF0CsPDqEkoIAobENTIIBBATvvmsgCqSggjAIlplEZAIxwEGrACQeFQZ6m+PSlx/G5S5ewsrCI8+fPY3V1FS7nkELj7//+I+gPx+irGBoUbhjCOAxFJiCMrKvJWblOU7cDKpMOm0lyzgnnnFFC8LN//H+ayf1TRaHEZ6Q235yLwvoHEAZi5KkhrKk+KOg08x8z0sGYdrma5RNUxitKWlGhmw18leUnMbS+VtVkBKUUXFN4nofID7CvBALughICURTWGJFQZLlAJhWM40BSinQc4+rWLjbWMzDqYmllEZ2ohaIosL60hJ3BAP1CQhMLgkroUiZVAeBzGcXEPCseeFxicNLPTk+alLPsZUCvCHfNfxW8XrUjZytb2jD9mh1nrRfRsRnaCQXLjBBMc/1XcHAt/Vol17a5gLEUiLIMuRCjc6sbB48/9tg7HnzO8254IiAZx3ubu9t/aApxPwHWKbFz9qzU7T/tnTANw6CJ6VujLUhsFa8BFDAgRiEWOdwkBlEGIXMQej48l4MlFHGRQskCLhg6no9e0MJCECHiHorhGFTbv8eMHSe0mRIp+T8TInTzhlQaANXQubF6bbU9uEbZEqoo5TM8p9o5sCH/rcnhwD9lRmYOL5UmCVVrjayQEEV5z+mpw29ZMFSzXyXvovR0MRoIowCLC4t4xSteMVhotffy/OjZ/xtKAF78+u+O//bdv5kwz8nXFhaLi622GwUehnlibXCVtXKsLuSkwqcwmsDQSeYyK65xs72V5o2rLF5UGRBjlaM/HsExQIu5cBwGyjmUKue4mdUhtAZWBIQ7dcVb/T1KKTxG4VKCwGi0SslGoa2TYCXIQKgBLROACjqk7R7ieIRRHOPKwRauHeyC1SrzAAW3etDUA1xuDZKSGKkQUwqIR/WUUGorQAOMueCOC8fzuTsTVQeD4cHmzs77M5n/j0KKkjBormvkpXlQNr0CJlMfph4dbB7sVRug5okYM/eAbL6v0/IHaotfMn0Yk+YKJAaMAu0wQqcVwSiJIPBBtLIe5A6DJAxCCgShh9XVVTDHx/7BAEpoxOMRnnzic8jys7jn3nvRbbWwsb6Gy9u7FgFpXh8z8VO41SNF/39IAI6TpT78/WnVxWnhKnMo6FchobneGGGHkIhbibrMjn/NttSk1NaDpJIZr8z5bD8VUit4vm+o5/7Ovfc9R56/884bZp5e29o62N68dm2xt5g4jmP3o5b1iJ0GIG+Q/m4aUrvNYKmgIWAQiwxUGyghIbwA7SBE4IW4o91CmibI4xQUQMv14TMHyCVGoxR+I0had09W+6JYhKIaKa8KgcnUgi61vykMVC3dXbIDSjvj2422KWXPGEII0jRFkmS13G817j43cSSTcrfixqFWoLToIgEg8gKeAUI/RK/V3v3ye+/fTqUY/NM3fV9xSxMAAPB8f8Q43z+zsrrba7U3WkEIr3+AtGTUVg5XdWZIpuG4pjPg7X5Y+MnABcUwjyHzHD0vxGq7h8DzoAuJIstAy9dekTEcxwF1OEgZtGwFYacPoG0W5jIO33GtzGzpBqZLeM9qIdmsTBOKNMngeRGC0PpeD8YjpCotJY05KGNgjIJwjhwaqciRihyiZPQrYxevaQSTWdjUiikZMI+Buy7cINQhmc5Vn/OtXzf+T297x16aplpIOQVPXk/wbx5is4fZPC0AAzNxHJ1xUqvaCs1Z6hs6ZMlMd7JMbKjRVirT2MSjFQWIQh/UaHgOt9mzUSikRm4kZIleOA5DEHjoyAhrZ86gSAtsb29jZ2sLZ86sgjscG6tnwPAJwGhoPUl4SWUxbMzcUcpbXSHf7hbBiRX6TT79ca9/NmAebheQUlJXTctVNw5VSuihpLkZ5Clu73l0mFzW4ASQJmpWtR3oZMqpRDXSInc7ve7rn3vPfRfGafIuADs3hADEcdFutTSNAuMEXpkAlejczRJS6Mx+NBYJsLWVAYVCrHIopSCUtPbtOoBnLNnP8wJLzFMGWgkrFcw4msZFVcfFcsvqw/BYVNA0xtFNCVXYpo2dobeMBYsoGDrZrZN1RG7J/ddaoyiKUn6dTBVRp9mDukKZTdNLQoEoCd/xsLKyjOfedXd8bWfn58+ur5/aK+K6EgCX8cH4oP+OlYXFf7/U7mz0wgg7TohUpFCKQGsOwjFhYAIwlNr+UKN3UVVKtzTTJmjc6AmxRZZcU40CtCBgGYckBiFz4bRaIJmAUgq5KFBoCZ0CxC0TAErgum5t3EHKjcmr3juZzJcYQ6C1hDJ2tlcrO9ubiQI6SWBQjQ256DpBzfwcxAMw5thApCUKbUkpClYdyhyxAGl5YGhYy2QIgDEO13HghT4PweZVCpIARKtSb/E0FfYx4hSzY5/z7IQr4aZm1nuYJzBh/065sZ20RkqHvqodUv3/VItIT/QkA9+FwwhCz4XHKIhRoJwhFwKGMDiOg0IIxOMxRoMRilyiFbTQaUVQoockSXCws41Wr4tOFGKx20YyGJUa5Zb3Us1RV9Uon0l4DcEXVw+AnNQmNLc9QJ72UbWXJmtEl/obeqoNRUDmjrfOfT5zctV+MwlSbYU+Mw5opxB0uX+sdwWhFLRCyaSC0Qp5LlAUwv/QIx++cKaz8LKo3fr9h377j66+/Dv/6fB6r3Wv19OAUSRPiO950NS+PkapJUWXAmOGXO89bFxG2uRHlOTvGlQwUBAQQiOPFdI0xUoQocVcgBIoIZGnOTgIQj9A4AcwUtXKsE3F2bqgJ9W9JzOOnxW3xtSTCjUZkNgiTRp9JJJcrxdzPcXH4WXFmCVHZqKwMvWlL0Rl/kNmGuG1TP7svqzQ3vK8VVqBKAUOgnYYou35/Rc+/8FnsiJ/+utf9+rbkwCko/FO6Pp7pEMGZ3uLxaWo5UaBh75IYKSCdiQo4ZaBaWon9nKTWFblJAG4jVULKllhIIeCU0JciVGQ4yGSIsdip4vFoIVWK7REEgoUaYJcFyiKvM4SWWxVvTih4KXQBKkTAoCB15VfFYBU3T4wCMMWcqms4lPVW9IGRgFCF2gtLUFCIskyxEWBvJylNWVfXzWW9pTGQhV89QQiciiFyzl81zEh9aeu8Ed+77+xUZK0PnXpCZdSct3916Mqs3k6AbNJQEUarPqF08Yv7Nhe78nBazIKOr1p9GSMVFuY1eMcppBYaLdAjb1/juNAGIByDuI5GA8E+v0+9vf7IIYgTRL4jg+HWbGRNE7Q6XQgshycMYSeD1kICFNpylvyziQBcI4OaATPtgiOCaizraLZeXrTsAojsIz8ZpJ5FHLQXF+fD9XG2cBfjSDaBIABZCLkwrg9T7Sxkz5CCmxtbyNw3dbv/NHvLX3NS19+5zd+zSsX/vzdv/Wn3/T6V4vrSgAWespQKmWfmJB7xgEnoMYWNBVyVQbM0yYBhMzvf9e985ITYAOptTJXkCikhoBAK/BhZA5OKRyHweEhjFSIixzjJMZCuwOmS3t2Xc3YTFvLUzNBHarPq9fECIGsEoby16rzWSpVi3g1eR+VQNCtWhpCWJvfSjb9pOrfkKMLsWahC6nAASwuLOG+cxfSa9tbP3F24+ze9by260oAXvSG1+hP/vrvDDljB+vLq3u9Vme9HUbwh/tIG/PiIA0QjhJoZUBK+JcSjsODJ7dmkzW1A0CIJQOaiaqyhkIBhaLQEDFBISTWox5cxuCFIeA6cIoCqSwsTKU1cp2DaDusoZQd36u2CgXggoDBSltai14GSglUyVPJpbXA9D0fCnbRSa1sR8FxsDvs23EYoVBAlgRJAkMYwBggxdSCoA2jpIr8Z4iF0RghcAmBzzmJuDd1gdeXlvxOq3XfxStXHBA6JfN72kN53pjKUS2CqUOWWI/u5tcr/QCti8Ps61P2YetErzlzPfNrjNhpB2IAzghEkWOxt4C0vwtKCfI8R6F0eegqjMdjZFkCzgjCoAWXcoxHCSLfQxC0YAC4DkN/MEAnDCHcAHI0xige33D/9Nmgb45vI818v15vBqCUHVvpz+qvH0owbvP9OqQ/0Kw6KwlvQkEoBy8h7+rcpJxCyByDgwGelAKjwWCt53j/ajQa/cjayuoFAE9cz2t51Q9/v/qzX/rNhAoFz3NzIqRPmSWU0XKaaNKaozPKn3OhkqZo4NGBzFjlP6Mth76alDIAnhpcgwOCgPpYaHXQCSO4LoeiNtgNiwyOIeAgdnqL2LOWEQJD7atS1MoAT8/isakulUHDcKdUXtQzQl7V5FM9bm6OmmGaJgceBygVSiIr8noSgFJaEj0t8bOqWepr1ShiKm5ZVUAbUiI0phRhMwKtIELXD4Yvf9GLnxnG48vf9gNv3L5tCQAAuJwPBoPRryx0F392qbuw3gkjBDxCJpPJRiWTQ5nNaRlSM2Gv3x5ccZJ8qFIOugTcwGAgIZGnI6RpCiiNNvfg+z5cN4AT+PBKK88qQEopIfMCQgmo0p2QlP9x5lgSDWOWycssEZJQew2EVCiUhCiKcgzFjqNIpZDrAhkyCDt1CsI4WLlohJaoz4o5krLNa1clJQ5l4ISi7Xis7QX51EFEKfFcLzSE0MqAqYLSyE0c2sfBpM2vW4vNCQw6mb0uN1tDWW1ee+E4FMCe4xOPSVNLiVJQZjsAhNhKR0qJKIrKBIAC1IHLNAylyJQAoQa9Xg9BEGF1aRkudbG3vYvFxUVw7uLS5WcAYccz773rbojNbYyERJwmMFpNKTVeP3/hS48DcLPP34T1j0KPmuuhlq+t14ea22uf59B3nEX17bqOU5W/mYgPkXKMVxvrzlcpCVa/QwgBZQwL3TPY39sCGRpQbTqPPvbpc+2Fhbc8fenij/34696Y//Sv/8rl63k9kR/uOAvsI0abewilPp2RwZ1XmlXeI4fWra6kg8skoJJ4mUECyoGNKTdXU05facNQGI1M5xgNd8GHe/AJRy9sYaHVwmiUwDGASxhcyuARwGW07InTyVheiTIwTMvpajLhDTRbhKokited/oZD4618SCnrWMKavLLynhulpxHBmXPBisBZ0aLaV6e8Jw40er0e1lbPpJs72z904ey58fW+vutOANI42XV9fytaWhis9BZEN2o5URSgSBXivIAXRlCw/sRpmkJD132m5iYWUhxymrupQ6qeY2d1D0UZXUPzxBgU5Xdp3RFSuDbuY+R4aKvQMlMd10JxBoBQ5et2AOZbWLeMyqoGIG3oIYRY3wICCCjkSkNohbjIrDymAQpj+/qqFMswQBn87YZQ5exwExq272lymJnSMYqVjQff85BlGTrcBaUEvuNhKegFkedP7WPuOs5Tz1z+XKsbUcopOHeQl97cVYUyT/q3WrRHsbWPMjuZV4EdBY/ZpEBCaQOlJolAMyGYrQxt8kJhaMnFwEQ22votKChtBX58QuAFHvqjIYIoBC9SgFLkooCEAnEcZHmG/dEAKytnsLKygs2rW/AcFxwE99x9F+I4higK3HHuLK5uXUOaJjhz191YzCWe2toCYwyOMShmmMW6fs2TusSSeoDTZF8nz8HrY+/JvAA+fX+PF3ti7Ph20Un5GS8dMI9qDx11BlSv0fO8U1+feZarRyFZp+7xHktCxHy0a0rwRdXJrmm0Kqq95vJJi0grBZDSW4AQMALEcYwobKFIMvRHA3DHWXn/I38nv/ZrvvbfDsajn3jrG76fvPWd//szpz0rKaV7j37so7+y7Lf/CXcYkuEI3W4bQkkoaSP4PMXWipTYXLLV1+vSlxweV0ZDALGJABgAQitkDUSAlVV+ZiSSeIDdeICAOHBB4RHbbHUMgUMZQj9A6HtwSjnjoiQQKm3Pdk7sFJiGQa4lCqNAHA7COISSiPMC4yKtUx7OuUVpjCWCi7JfT7SZX1weurCTiN1cD0mSTJ2jGgaUNxK94/Y2AM4p4jjFQqeLeDxE4PnIshRGa3TCDpYXl/BNX/PKMWEsTdN063pj53VTYB9843cr7nv7rXZ7uLKwuLvY7aEdhjCFBDMaRZ5apqeYtKcqNcB6VrtpjXmre4azJxK1WLwithclAQhiIEq1qiEk9kWC7XSIa6MD7I4GSEUOQmxwJdL2njjswnO5dQF0mc3Y/W4bvBVAuwyJkRiKDIM8wSBP0M8TjFWBsSoQqwKJFoiNQAyJFBIJCkhboJYzqvajbmyiw5Kk0/8vCwEOAqoNGCgix4MfhN21ldUXXfqPf9itfm63fxBcOLv+y9d296gGah30eZD7UdXY7XjYMTx7TRmdbIwqcy6KAkVRlGzviZY6YwycEdBSkIgQO+5DiOWaVBvSgEAajVGSYuegj+E4BnM8RO0OmOMhDCIURYHPfvazIISg3bbe7L7vo3w5ECKHyzh6nTZCP4DneXA4hxISvu/Dd1zLD6F0Ut0ZnLrFcjOPSn/+OPe5k/qTVktcTcnkNqHr6uuzQa6ZqB31/Hme1/ewYkFXzymlPEQIPUwQ/eLmKcwmHPNQiCnLWZy+zaVBwBwOyl1QzqBAsbe/h4PRcP2DDz90T2tx8S2Ow5/3n3/25+79g19816kkN1/x2u8YR64/uPvOu7jnuHaEW8hSaEyDE2bPUG3AOb+uIEIavfe5iRWdHl1W5dknAGSwlsIZFGJIjKEwhMKByXFgcuzpDHs6w45JsaUSXBNjXE2H6MsMI10gowbCpZAeg3IoCgZkRKNgAAs9eO0IyqHoJ2PsjQdIlQD3vVr4SJPTo14ntUmbZ9jNIdm2qPEdbicjQCDzAgQagcPR6Ua499yF8Zm19asrS0vD7/nJH7vuF85v5HVxxofxcPT29QsX3rl06cn1bhghdAMomSLPC3DHgZTSZj1VX6nRqKUN57nbsimNqRoo9UqsxuhUQ8xBw0ARIDMasUwxkgWSrEDmBuh5ISLmlhUIsVKTpTSkMhrCWNW3UZEiVZbkkYsCuZaQ2hL5FGyiUf1/ZdijGhkea8BUh3pIdoxiKvOs4HJT+m8qKeEzF44CAi9AO2gj8kPjUf4KQshfPvX7f+kl1PQODvbveOrq5dW//+ijrfFoBGEkGOPWhvkL+JglxMxW+s1EpQoyVWCYqGZNIMjmsWRQSSgzFEZhb/8Ae4MhVnod+FEHeVZAwcDzQwAU+3t9rK1nWF1dRZHlGA+H8KgLRTJ4jg9JDEZJCiEKRO0IQRTCjYspASlS67yTuvqfOtRvMcTY1EyY1zM/bRCdhcuPqqKnCEnGTBj4RySNzUNwXhJ780H+Zn9fX9cZMzvSN+99TZkAzfT8Z5MlVo5J64bffbl8rCCZUGCuC8MpKDgoAXa2dsA5W3/47x4m3/DK/+6HjRT/abG32P7t/+0XP/ad/+rNJ5KrOu326I7z5zP3z5wCSrvEAJ7jIM0LcM4hhIY2BoxQyOuPWUf2x2dbCM0i0IryTIogWaorZiViy0vxG1p+zooCvmKItYeQOghcD4HjwikJ27R8fqUUKAyk1ohFgUGWIJEFCKNQsLoreh7Spq2PwEmnYzXy3uRloUQ3mkVwkw9xytVmyY1SwXVdKCHBKaCyHBQagePhzPIZfPUrXtFPi/wnF7u94Q3F8hv5pfu/+7/f+/A7fvNiEAZb6wtLS4vtzlIr9JGNMuRaglMCKU3NUmf1AT2p3qiypLpbEvyPuqrzZtKrOVJCoEBAuLXYVVKXRJEMMrdjgR5h6IYtu+AoLYmFBkJbIl8Bje3xADk0FCaM0skUgh3pm3w+kaep+lSaGMyNwSfIw1a9TAYrY+kxB0EQ4M6zZ5PAcf6aOs7vGikV4azjav0ameff+8f/9Y+9j3/mU9jtDwBMhCjmiazMO+hupFd60s83HdmaweAoh6xmUmC/X3olqMk9nlhrEmhDQBwOIxT64xib2zs4u7wMzh2Y0srY8xjOnz+PD3/kUaR5huc/+AIYpdFqtdD2WzBKgRGOwXCI7e1tKAIsLy3A9XjN9pdSQmlVK1J+vh7Na3HS/ZoH9Z/k1TBb0TaRAPs5DiUdR0Hxswx98iXolXzc9Z2LojV6/rMum1O/Z+YnG1JKKMcBZQ6UMSCUQRuN7e09eK679tDDD3H3xS/53lGWvjMIghGAx096D91uN//bRx955erC8ie3d3ZcAGi1WkhFAWkATqkVOVOnI2rrOUmAxum4MLOtmCoBUCWbX5SpPMW0LTEF4CoBqRRCSuFLgcD14HMHLuVwS0SukAWKuEBScrAUI1Aug9AKSZ5NBIIa9+FmEM9qj1Ruf5Xt880kqJTYEXNuCJRRYCCI2i2cXz0z2lhdexLA1a/9vn++dSN/nd/oy3IcHifx+N+eW1t/59IzF5c6YYT9/gFQa3KXfWVD69t2SBpWk5uGl/UxKRUhpAwMZCqqTg4kU/f0CQWkrvSuBRItwUGwO0rrmfuKda+NhoBNAHKYOksmDYZ+LUdSS8DrqQy/2hcSpDE7OxG3aG6I5iHc7B8SbcBBQbUBbzG0oxDn77qQ9OPhT4e+v6lcNhBZuhYnY1x6+pnFJ5+51L107QoKJa09sRS1CM9RQXeektmtVUrTcwPF7L2axwGoK47y/qE2AJ303qVVSgBA0B+neOLyFawuLeLc8hLC3iJ2Nq+CMYZer4d77rkHw/EAn/7kJwBjcP899yIdjW3rinKM4hgaCsurq1hcXsawKA6pHk4FAJw86nMr2yvHQctHBWjbNdNzr/G835v+fdIwQToa4Zk3k38cIe9LNSGYd82aVe7stMuUWmaT9NVAWAhjllTMGaAICq1gCBDLDJvbW6DA8l89/ND9L3/5y76HbO9kP/dDPyp/8H/9mYvHveZv+TdvGL79dT/gf8UDX5Y9vnkpjEcxQr8NzjmyIgNh9hyrtDtOWsOHEICmesmsB8QcbgEaRdGk/qHQdCKCY7kJje9rmxwQSOSagAsDVxVwyzatRzk4Y5BSIstzCKVgCIXjuNCMIs0ERiqDrFKL2r7RzH195hQoHABIbYWOqrYZmUmwmwignbqgxyJRjFJLFNS2vemAglOKM6ur+KqXvXTQT0ZvO7O0snej6/eGE4Av/xev3vnwL/zHZ8zq8nClu4BuGMJ3fYyKMVQhQAyF1BIedWtIBWaiBXC7+3unZmGrye21vXgL2VdQk4a0tEJjrS+bqIMCIGelYBsbQZVqdEfAFofh4KotUo7XzCYtzQSq+pzCkod87mNtcRm93vI+B4b3ft+377z3V/4LkYkOHMZf9YEP/21r92AfeZxagaEGKkJA5h5ms/P+t8Ped946OM2oYd0hkbrs9Jgpre4aigWF0lbxLYPC1a1tXLp8Be0wwmq3g067B+5Q7A/28ZznPAdC5njiybwsc4kAACAASURBVCehpMTVq1fhMBecUHheAOY4WFtbw5mzG5Ag2NncrMVEGGNgpXKbOg6Vuk3r/KhKdLZin9XSF0JPoUBHSehOg1OkXq6M8SOr/dmkch6a84WecrgV/f95X6/3KqFHXpvjkLbm95VSoMzKlJtSsZQagoN4DGwbaGNW3/u+9z3vq176steYwUD/3I/8hPnBt/3UpePex/mNs8r3ffHfHvlgMegPXCEEXNeFLmIAvBxXUycGPTNPH/86pN6NMXMBTw1zqBpviv9V0wUJDDIYMFOAKsBRFI6gNQKgVXleckvQTlWOQihIJSFqE2NzInH2NPtQKQUhNYQQ9ZjzscVr6ZlwXDuFMwZoCShZohUG3cUFrC8tj86dPfskMebS17zmVVs3up75zWwG33MPItcdrnW62wvt9mq7FeJgf4w8z+EELSglS4b+9IXg5NYlAIfkQjHdf2pW5M2VRGyTDbxSVkJj/KWmK8zATqUS4KRCpaVM7/SoTE1ypIDScqJVf0wWTQ5BT/RQJkpmD9rS74BBY7G3gOc+8NwhJeYdrh+kAEAdtnKwe7C+vbN95olnLgUHBwcYZymkw2GMBuMcWupDB/JRan+nZfbfSAA77cE69dpQ+jeUS4wSAkVMyWEiALWMamk0fOaAKmAwivH4xUvwHRfizAruOrsBRgzG6RhFUcAPPNx3333gjKG/t49Oqw1qKDh3QRgD9Twoo7F70Ee/30eSExQlEtC8IrR0Vvt8BqZ5Ffxh9bxpJT37fXNMkCdHIgz2/9mRicj13Ncv1Wq/CfvOu07zRF+m79HR3geV8EshBZhh4JzZqSTKoBmDTiUG8RiB60AbvfHwww/pl7/s5a9Jx6l5x1t+2vxPP/njTx/1XhYXF8dLC4tvPntm49ev7e64WZYhbIVg4wFk+X5Os8ctqW/OPjVkbnu2KZpmzz86qQ8J6rFOzJjsoLaBL51bS8fBvPyjzFTTBBoUGo7W4NoWZ9xYgrHUGkLJknpd/cVZLoeZf+7gaCSg6UdRkVyvh39zVPCvUV9jizwGCs4Zzq6v42Vf+aKDOEnetrK0vH8za/rmEgDXHW9tb//L1dXVP1y+uoju7g6Cgz5yqeAxChgGpkt71Obiprf2ZDycBMyphsyMzWVtCWpJWxS0VJKzHzVo7QOuoUA0sYSe0vmtHoSlrOY2TAtn1Ph96RJ5RE9bG1R+CccePpWu9hTTWIGCoNPqYGGhh/MbZ4fjLP1Au9s1D737dzpXd3e67TB62+9+6GF/c28be/0+NKfwPAfZuLCWuWQ6/56tyqr5/RsN+CdzADQatmulxTHqj5akWCEipgFZ25/nxBqpVDbTBBTEEFBaKcdZAhAcD9zhiLMxnry2DQ2G/cEQaZah3YqwfsddiOMRkjxD4PlIkgTr5y8gHo3t7Dl3YUAxynIkWYZxliLsLGB08TLiLIfQdsDJwIAaBjDrT06O6JgSU623CvykN/BxOvA31fKa/efju7fT5L9mf7ri6xwXtGdbALM/M4/X8cVc4Z8qEagYPCXjzeDw9W6SHI9vc0zDzrOJtuM6pdyxqfcCLbviyhAEgY+tgwMkcQEGcu7RD33IvOTlX6XzJNfv/Mm36ze85Yfn6gR88w99X/7OH3rrex+48+7RU1eebl3d3EToB+DMgdCirIpPr1d/Ks0OHFZerO9/gyPW/DsUZArxs+6NxpoHE2UTfmLRVlJqvhBYEyIKDQqOXAsYXWCS9pL6PlaqgoYcbsvNTjNYtGOy/wzRgKHQ1MAYCqktJ0dqZUnjjJ7Ic2+ql9I5qLAQAp7DoAzgUoJOp4du0Bq+8AUPPpPm+dPf8LpXX/uCJQD3vu5Vow///K/uLZ87u7/x9MUzT3c7TmsQYTTch8hicO5YqVxdKkERwLBJNckoIG9aEFDDda0xTzVeZBpZuNLHP4GsdcTnpHekDDbENA460piGLU2CZvo3c2+6mkkly2eltZLGNCRQuyoaAj+IkMQxKOFwPR/aWEtrAHBAsbSwiLvXziW9Vms7DFsxQKjruV/XPzjI3/e3Hzx3bXCwtNvvI6aFFUZKY7iUgEKj0KQMuBMXx+YGVErUo0uUWl/tygfBXt/jK4XjD4WmZOt0gDOm9E4vP7dJpP3cPp/9XBlz+KJT6y0O2DFJUIZMSkgJMOpBgeCz2/t4cnsHV/cPsLrYw9n+AIuLPfguR5orGDDsj8cwMBCmHOszGrFSGOYF+qMUw7zAJx5/ApIygDglClA2jwyB0cS6lprKrtayq03Z4lFWAH4qwQHIVIJj19vkcwIKxihoNXZYLR1jbB+ZkLqqOk2AJeykUTRzuAyaQTpuBDKfTYhuvCo/HkGqEtij3z+daX/ouW6VTTEfQIMzF5xTiFyUVSutK0htdCk/TQGwKdLjNGKioachR8zWRnmaTars2jvAJhpB2AKIRI4MpkjAtrbhcOf8xx55VH/lS18iWZqJX3nr24o3vvVH5qrDtaJIfNVLXpq/75GH45bjR0ZI+J6HJMnhuR6yIq8rdloFTnIYxZhoARgYHN8zr3+i3rZ6TkJEpleHaa6USm2o8XwNsR/SOG4t+0zVz6vnd2LLnycQ2t5/lzmVFjOIrtAcClPaTauKMkApqOsiKzKkaVqz/pnjWoRCzyuc9KFimDUQBJvBEBBmz0bNgGEyRisIwLTGmTNreMVXvri/s7f3v2ysre/ebPTkN/sHoigadhn/6/MbZ9c/t7250tq9Bi/lMErZETZC7CSbYdC0tOkh4kQ7xOt5NC1ArxdmNFOMbTr90cx8xLyP+joPLDPlZlYH/2NeqhAChFJ4vm+hrNIqmAJoRW1srK3jhc993shz/XcFQZBxyh987MnHD6TBL3/mqSd6m5tXMB4PAI8BRVFqZDNAmXJYjp0qY5+W8K3Ik3TuCFnzAJ3bv68TnGOu/yk+GqJwXISaIEAWMtRlwCgIBTMGn7p8GZt7e7i8u4elhS66rRY6rRDtlg/f92ygVimyfIxBnGD/oI+dvQPs9wcYpjkUGJSuR6fLKlBbCFQDQh9BqquEpIw8cmXagECaOqF1sjbLWfp8V9JWc/0LX70fJ0jVXH9H/U7V554gKXquEmGNiFACQjgADSmbyb8uk7jDPf+jX9/J58c8N8Hm17NCwnEtT2VU5Njc2obreHd89uOfKh54/vP+mSzE3r//gR8d/Juf/5l89m+vLC2LcRL/Dw+cv+vPBvE4Go1jtIIQozyFVgqe46IQxSFoWtPDUPXnB3nB/PPXzPsZ1IH6uDigj0hY6meo7pueFGmE0LoNLLWC1FZVUDdOoVNHBWIqHdgppKN59nPuIs9zLC6v4OzKav/5D77gaVEUV175PTfe+79lCYDvB6ODYf+X1u6+61tXn3lqJWq14Q+HGGQpKNegnE1ZLFbkN1aPA91sBTBttPGl2GNsJsGHeIElssFLdqvR1p6YgcGjLpZ7CziztIzzF84XnaXFFqds+eLTlzZ913vn+x/+89W9wUG3vz9ARkqRJD2BeoVSIPWAzdGHz1EMcgC1e9ls7/OknvBEl/v2kkEr1S0rdGImugelVoQCQz/NMUiv4dLmFlxq4LkcoefBdRiEUFBaQ2gNITUKCRRKQRkDAUAxx1pBoyngNOGDnIRAnZR0Nd3kjurDHwern0iym4XwyRG9yJmv0y+a7XWSrO886+qJ7ns16nZUAtBsG3LKwUpxnEo8qdIHmRecb8W446yb4FQCAyAMAkgpkcdjMAMMkxhXt67B5c4Fj/IXrN15/gVMygMAj83+7W/8gdclv/Xjb9962YtfuvvE1pWFOEmJy63B1SAZgVxHePhiPW9v1euqeV5kkoQbSmrU+ahpoBNXb3OdkWkzRRgDURRghKLr+VhbWcELvux5/b3+wU9vrK7t34r3ddMJwF3f9e3yo7/6WztLnre5trzcWltaXt4dDDBMYtCqt22sBKA1V5hUhJxQFLcAA5jN8k/bj/pCLspJVn+K3lqpI62VgtYKDrVkoF6ni431Ndxx9rwO252HjJTfkjt4Yqu/X3zi4x/f2NrfWd3Z3UNuhw0tHG4A7kyT/+ZJf84Gm6MIUPMUBZv/jpLynSQ4uoGw3HgFeOIBWq5FQhsMbdiWgDEGWkloo6CVRJ5KjFIxFUIq1TIr3cRBKQdjFIYYsKZU83WuO3oCi/+o99R0Lzvu9087y/2l+phHEp3qIVM6N4GtzoxmAtCEpJvWwrPJ8EnTC03L6ypzup77O3uv543A1ueHJgg8H3k8ticrIRiORnj6ymUvybO7o7Wl72BCDd7+r3+s+OH/8O8uzv79pYXFeKHT+38urG+8+v9j783jLcvK8uBnrbXHM9xzzj13rrG7q6t6bpqGbmZEQVFUki9BcBYQEVQUEGhDFBwgCBrBGECJMfr7opIYgZh8n/IlX9SQL4DQTD13U9011x3PPOxhrfX9sdbaZ5999rl1u2u6Vc3p3+5bdeveM+y99nrf93mf93k22835rVYLM8USev0eIh6DpVw28hLBq/VhRNrS19wgX9AJvxJqiiZUSp/KdTbti0RJUL+mJQmo4KjValheWNy48fDhx7mUJ77zJ3/k7IX4nNaFeBLPdcMzmxs/tWffgb+ZP3US5Y01+O02OCUQMlakKCFHIi1kkmB0IeHAcYh5d2emo7dMctsPkgswymBblpJOFRy27YAGHLV6GYv1eTzz9jsaZbdwi18q/vdjZ0+tBAw/95Wjj8yeOnsGrXYbEZT3AHTvnoIh5BFsy4bJA7arYrYjAYYpPwGVxG4vdZqtXlUP76mjQBNuXGTaeR6RjSihyTRHGKtbj1k2GHO1crRUYzcigmN72mMAkFyCC4BTAi6V7S8oASVPPgGYVsFnvz8Nwh59nu03nHMLsbAM+pB/PqezoMUOtrZLAwxnk2t1/nguUVJmPBomEzN1/7EUwiWlVByj1Dhu9uOlg39az+KpBIXsephIZCTQ7/XgzlYxU64q2eUggCBAo90CdZ25L9775Vtf+Pzn/2gURPFH3/sv+Jvf+0tjvgHlUqn32KknPvasZz7zpcdOnyq2O90CoRbKhRKa/Y7aM6TEla3W8NSTgHR3diRjrO7LCHrkL1P975Q0nZgT6Wkuxd/RhYrWEbAtCyXXxfLSEu689Y5GPww/WK/WNi/UZ7wg+OuRH/2nHUnI6sz87OnrDuzfrFeqKBYK4GGkFytPHACV9Q2d8Ow+36CfV61eiQzjye1NwrYsWJalhH8IhYg5igUP9UoV86XSSc9x/18p5fra1sZjnWDw1s994fN7m8NeeWOriQBKtMhmyk2LSSRkFWpZWkkvf9QrnQSkD6M/zxhTwRTj+ghCjloy22n5X+gEcBo6lNa2H6sUCQVzPRDbQ0wsDGOBXhChPQjRHobohBG2en20BgF6wwgBlwgJhSA2JHOAlJHLdihI+hymtfunWSCPubPl6ONvN5r3dHtspy8gpRzzH4iiCDHXio1y3Jo3HbzTRlTGpc8kwukEYlrClZ2kuBDXKNdrQAC+76PbaoNSCtd1wQEMZYShiLG2to5mu7Xn3nvvvUNa5HVRGN72J7/54ZX08z7/jT84tBy7uTC3+KGl2fl2rVJF0OvDs2y4zE6NPW+TdF+BI53ZIEimfLaxvYQYlVepxgnDMOGf5SXvO9ai0dbH2RgmOAeNOGZrNdSrtbM3Hzl8rOAXT37fT7929UJ+9gvysAte0G21X7+wuNSbq9RQ9gugPB8qMx+WUuuCbAB5i/Bim9hctIBPxqtYYzJDpfIdtCiDSxmqMxWUC6XN62+6+REeRp8KiPhsNwpe/z/+59/Nn1g7W1rf3EKXB+BEEf4YoYpootJXWLYzlaA3bWPNk3W1LUslKDT1Ghgx0/VcAaQQqoWhD67NYC5MBTg6iBw/mPYON6Q5o+8g1YlQLHeqnBypxUBsC7brwPWLKBRn4BfKcIsl2L4H6tigFtNjRwKxVmXLIiZ5ydK0gG8RpV3OQJIjbZyV/n7234kwglXjR97nn3bQjFGXOdKbPckMAowd8vyOC5LgyTg5uIgQ8zA5uIjARQQhYy3dNTKPMvK8YwktHXejNK9hlN3yWg3pAJCXpF3IRCe93wkhUPR8SEkwGAwQxBH8mRJgWQgJQV9E2NjawlazsfdrX/7K7UTizeEgvOHTv/379fG9EhvHjh/7X3fe/ozjM35hy3NdEC6U4ZneMygunbjVrtyX6bh6pZH6TRc1TyXJm9xjJaieIgHnKBV91KvV3jOuv2l1bWvrfcWCv3ahk58L8njBG368LSHPuL73xFyptF6bmYFfKoAIA/uLc2buFwpWv1oyUwBwNMNXcA4SC1ggqFZnsGdlBdfuP3iaSPIJzsjpE2dOn3z00UcLx1bPVFbX1tBoNjEERyyVR4GIY0jN4GeMwfM8DMNoW3Wyc0nLSimTCmnMpz1NYiNUoQRGcEk7RYZhiDAIzisIkJQuAp3y1dbvz3xlJjjrfw+CAaIoSHy5zXsM4whhxJXJUxAk6l5SSjAK2DaD61gJe9eIW6W/MsZg6wTOfN9QYpNgmwk409zw8hwbt7sHzjcBzpL8yK68lUZuhcaPIXvktbSSg2EiOcsmammvByPuYtZ6HvErW8Wd7z43zXTI/Fu72UK9XgelFP3hAH6hAAklSUtdB41uG2fX1rC6ubHvK1/56k0+td683tha/ug7fzV5ste8+xeE73qdQTD8xUMr+/uLc/NghCjxLFxKZ4vLU/2fM8kcKbCp5F/7wUQ8Ho0hP0XEeZobKxESvmVhYXEBs5Xq6t4De//YYdbqK97wYxc0AbAu6JM5dtReW7/n0MFr/uTY+tp8ubGFbrcLx/H0zLLKKiOhKkBKKXzPRxCFY2SyrPzsuSqAK7vqH+/9m00jHQAYY0AcQUoB17WxWJ/DnqWl/m2333rW8/yNRrMV8zB6zee++Pna6TNnsdFqoAMOwmwFI0ma9OaldrjqDwPYtq0U63J03s3rn6udYvTCzc+nIXchxdQWsKkmgmA4dZNOE3Byx6EIQRwp10lGqBLfEWqshggtUyqkqvyFQQgUhGe+WkTNCttUqwkypm705FwQJRdqyKySgwgtMCQ5bKYBRPM60JW1IQpxAUrJCBkhShsgYdeLSRXL8dUxErIyCRXGrEsndpSxJ8tKkmavY9aQy6jPEY0OGAfM9Iulr4XQOhnT70++bcWT5yWQlTI2XyfXaTJMuW2lnLeukuqeZ1svcoIsOCaNLKcoxaWeM93mkufptrmdeBIhBIQxtFotMGahXKpgMAhgez5kOEQQBPAcF61WC6ets/Btd/8Xv/yl7r4DB/bblLYBJEqBP/Wh96x99Of/eeW5d9119Gxjo9AqV2bbvS7i2EM3GoJA+ZBwKcYIvnEYXfEt1rS/iswgOqF2taWUgguBMI4wCINk32PbCF2d00iNjNa44ZwUCgWsnz0Ll1DMzNawOFuPn3f33RtRGH7dn5k5eaE//wVNAL7nbW9p/vVvfaTdKRXb87N1cXptlTa9AkIRQcRSzUQTCWoxUD1O83TuX0672dOblSGICCHhMQfVchlL8wu4/YYb12pz9VOSS+vU+qkDDz/08P6z6+v1s6uraPR7arrftsHFeBCm2hI5FVOe1OazXQ92gtchpo8Bpv0HhB6bExJjkyOEUjjJZxjJLyVkRkrhMmvCMIjooXwiJUKRMjShyoecaYU+Rigc30kqdEI1GScRIuJotTrKMEISEKKVBgEQqoOE3uDVhIuC3xNdQ6IgfKlhe0lIRscP6rNt88jyJLLn07JtPZOP3K8Os5KEKPtVEAA2HSPIJWqC+nu2rarAOMcwSF1gmUuES9Yb3V6UiDJrMtimjuyYXnYHpYSk5rPJ1DZWFtVSa4xuW12nz8m5INx0YnFJ9zMNTQuSkQpnFLAYIh5DEILGZhvH2SnKOV/ec+DALzsF/52f+b1/G7/yZ1932jzVwtxcu9fp/eZNBw99rDcczPZ6XRR9HxEERBTAsiw1/qol3uPoyg7+RuQobSvOc66vJIqVz6VALFXbUF4YCRuzCcD2XcRRgObmFhiU6c9spYrF2bnTKzOzq6zgbvzQ2362s6sTAADwfH+r5HqbS9Xq2olqbWm92ULY7+sqikNyAseyQJlanN9KAGhmUTIQjGBhaCKTLYFC0UN9to6lufnG4t49x23L/lxn0J2NqPzZB08c3XN2fQ3NdhORFGCOjTgMFdRt/svp6Z8vYmLInQb6l7pKVcSWHCnRjJIYs5gihnI9qZBGEABQHbCo1KpZICOjEEIgiExe30BnQv88JQS2zUaJCaOwKQOxmAr4hMBmIxh/5NwpdGUqEAbBmNKbah9YycYAKDvpkW7fKEFR54JM/F2kfCPEeSYAjFqJIUveV6Y9CYieWEh/lQRj8sFC6A0uFYiNcZRy7jReVTJZu4ScA64mmOowKAgSaD1LsMszJSKYDOaM0annJ49obNjz2wX+sURIiIned3YmP9taGEeqLu7eZmTWTdJsVFAZtUEsijgYwqYWAhljc7OBYrFY/4ev3Rv9k1d83weGYfDO//ZHnwxe+tpXbwJAGIRrkuCbNxw+cvTRk8eKtWqtvrq+Docw9CAg41i5E0oJRhlAro4xUyKn61oQNs4DSZP+JCHndXWJnpqSXPG7pJQIogAlx0XJ81Fwva0jRw6f6oSDD88V/NMX47Nf8ASg6HrDjWbj1647fMO/eezMmaVSsYBmtw1mW5DUghBQBAememjT7DGfjg8TRM1GYuke8rDbAbMczBSLKPmF9g033/SwbTt/G8c8JKH40S/fe+81zV6nutXpoCt4MmaZ1sZMIFuyfcUjp0CcT+YzTEsu8p7T9/2kkuZSQMSqtyY4V8bMcag/BkusiwmkglYJAZexrt6p6u9bDC4Z9dRt255g4Y+1GKJQ/buaD9TphZGPZaiWS2NtCEYsNfqnfzIWowBrWgvpQEu18Uny/OkAnZ5Xn1LBM5Dk75KSiX+HTrrSCUj6qxRKzJdSnYjoFpD5GmssSAVKowk5eoYgipD2YEhLFhOSX7Wn15Hpw6d/zvyZm+fdtsCluRX86MC2CVKeK+F20OwEGoJzw7rZ4H8p9zJCiHZ0UERbwtR7sBiDpBTxcIBIcFBmYRCHWG9solqrLv39P3w+evmLv/2fNTude/78tz/WeM3b3yR+6DfeKf/rh/6gu7G1+aE7b7zl93rBsN5otQFB0Y9DDEQIHo+jlFebzsSE3oJua0acI+SxVv4T27ZFn8zDcJKM5LOljd/qtRqW6nOrQRh+EJR+89Xv+Ln1KyIBePZP/ljj7z/+h6uC0dZctRpViiV7w/PRFxzMcSEHEWTMIQhNEoBLDpvt1uBPCAhloCkGspQcjuPA9zwszM3j4MLKcQv0kyKKH2/2OsvHj5/Yt7q1sbS+uYkg5qDUghAc8TACJSypboWZzwcmpIfPd7OatqFOEFtySGw8DlWyQyksZoFYDJFgkDFHJDhkzDVkLRINdMZUcqQCvA9GMqNbdMTozgoVmUpSZf3auVwNAkAImaAYJrd3bW/M7Y3pWV2iI5dFqLYh1tyNFMRvoP/E0UDodg40NyEDjBg0Jf1VypTXAh9VeEkFQci2LQCqEwgF/QsIjbSYFgBhJDE1kTDy3SMzLNe2lWmqIJppTxJEJO0mKFOjn+lgb5zRxjZXvfgEVEIlyblHqLIJQBL8RJ6WfApd5SIHGci3oM6qimbFgPJY8JMjmuPCQ+QiIwBSu4IadUMIKIEq1X+DxRylKBdHoAB6/SFOr55FwS/su/+xxzrzc/VrKqVyG8AxANizd487HA5PVq67/ug3Hnu4NDtTmd/qtlCZmYFotxCIWCWdXIxUNa/SVixSKJ0hgqZHR/OskJ/sI45juI6DoN9LWpHVmTLKpfLabTfd8gSx2BOddufkxfqsF4Xg6blOY6VWO7Fnbm6tVqspucrhcHRjGFlWfIsDkK0k0ox6KSW63S5cy8Z8vY7Zam3thttufmKmUDwT9gduu9P6P774tS+vnFlfQ6vdQS8cwNLcCptZyiAmJcwDPW+a7hduF/yfbGKwHXqQ15+lIAj6A4SDoXI8izkopfBsB77vY6ZYgud5cC1bKyJyxCKGjBWxzbIslApFFIvqKBQK8F0Ptm3DZgwWpbAZU3/W+AHTY5CSc4iYg4GBEQJIqm4GSUHlaKiOUqWVwIy9kKSqzy8IiFDQvjnHBkY05DkqtZmMnoTJflWz3GrkR0z5an5m6t+5ALgOxDlfOVdJlLEVpZTCYZY6R7YFy9LJEzPCTJpRz9X8/GDYw2AwQH/QRa/XQ7fbRqfTQbvdRKvVQrut/t7pdNDtqp/pD/oYDAcYBANwwScgc0ooGGWwGNXvw4altS6ylfTEhMk59oppaESasT9tZDhPUnxaAE+jSZd7D5tQJ9SJJpGA73koer5qizELwzjEZquJU6tn8Pkvf3EpDMN7hr3+gb/+V380BwDP+MFXHJ0pl7da/e5v3XLd4eZ8va4+n5AJmmbbtkJwBL8q9t3tqnn1OTX8L0drI520ns9DRDFs3XuUQqDg+1iYX8Dha65dg80+Vi6VV+/5yAcv2om2LsaTFlwvXG82Prj/+kN//ODJEyj5PlzHVdrzcpLs9q0WgA48RAv+EMUqF0KgQB1USkWsLC6JZ9xy2+lSsfT/+KVCfdBo3HDfvfce2tjarK01GmiHQwVBRzEYUUE0JvGo8s4wnbNAwFjPVeJJK9pNC/bbeahD6jEsXVFwxICQYzC9Y9mgmnpnxIQgAR7FkFxgSFgi2GJZFohGTrh+KdNDTypvVSolxaJ6nyxBAsREdaiRGKp64BRMVXlUTwpQMtEXHjsXlOZuNDLVB3wy53eMIU+Uj8R2z5F2asvKBzNCEIQhBNTmZmbd0xV8PxhO9uiR7s2zMfXHvAA+LTAnLpRkHCXaSVI6+jl6jvM3Deo335P57w8j06Ty4QAAIABJREFUtCLPwjZJTEByWwjpz3gxH1lCWuIOqW5ihZJRBpu5IJQiiIYIux3YawwF15v9+le+sv9lz3/RPb0weOcnP/h7m69+58/KrVbzlGPbtWuvufah+x9/rFSrVJc7p0/BtR30ggFsxpK1cjVoA2w35iwyyNZ2v/OUArBlIRwGgFTW5tWZCqrlytptt912XAhxnAuxejE/+0VJAG75oVe1//b3//D0bLF8ulQozNYqlYWNVhMiEqAUiBX2CCAGMTC1VD7Pinx1deuXp4OLVKlkZvNUCw88RqVcxPLCAuZr9bU9+/Y+XioWm71ev7DR677g5NbGyvrmBtrdFjhiuLYLRa+Q6A/7sKg16c53IdmryFcJS0RiNOFtBIdi7M9UAqVSWZHPwgixUFV5zCgsykAYhWs7YC6Daztaz4AjiEJEYYhIxGh1ItjMVkiB64LYtgo6uv9uWgBCB74JqV1Ck4pcGDjV1H6EIOYiMYmhGu5nmvyW2MSSySoskTnOqg9mq1B6joo2c64nePBs+wDoOPYYhGm0yzlXGhFhHEDZKqt2k5l+kImnGYVqCBjfSAZJJSxiQRAkVaEJiCYRM0lcFEUjgqGezTdkKlVGjVoZSbRk42OAExU7GU1ZkBQHIq+6p1PGtNSfBShlmtsgxqyA07B/NshRSsGIWqNSEp1EUFxswt921f/kZ9RrOooBprxEwjBUrR0ItNttrG9s4HR5Zs+JrfXeTLF4TaVa6QA49ur3vFV+5gMfPbvR2PqdO259xm+d2VwvFTyvzBlBU/NcqKSJr8uO9gngikgVzFRqItOr94ZYilz1x7w2AN3BvWxaaK7rYrOxDgKgXqlh79KSPLh/3zqA369WKmuv/aW3X1QVZutiPbFrWd2zzeav3HrjTX94avXsQtH1MOw3EIOBeR5iRhCFyuzAIhZsKhFyxZAidHwOO52pJ/PTSYZOL3sQ30mQzOt/q+BPAWqBMKLhUIYoCsDjIcq2i9mZGSzPzsV3PvOOU77j/HfJJe8HwSu++KV796y1mm6z10Gfh5CQGEQDBVsTPV5F1OY1/vqT7mLpGX7VY2djldu2PVkdZCnU+7cIVcxurnrXVH9NlNYsNgbrurajnkcocQ0eqjnbaBggFAHgqCrbpgxgFA5zYFkOqIdkPl+JC8UIgm6SVVuWBZsqwSNKFeScntPmJqOXPHV+SKL4pfMyBIMgJQULCM4Rp1orlCouAWBsUsloEwF0kEiNJ+rPaioo6ri5a8Wc3/Qcv8xs/IKocUSRga/TVXy/3x8LpKMxP5EgIybQj0If1Q0TzSZngEVtMJvCZg6YTcGINZpUmbbbccClDqANmKQlx4V6ONfafHJMlVLKcUTAVLqjqlddGwHDyaDJvjACd0QmIGYU2xgBIQxROJxg/qfXN8P4fcCYo9YvCOJYgBKVbI5lIRpNym8fXNj9XNlW8GTdEzoSKKKUwnKU2RVhALUkeBxBgqAPimarjbMb6/j7//25+Ze/9KW/3O/33v7Z3/93ve98409svPKeN6//n7/8wRPVCvlEvVj+xU6lWt7YaKBilzGMY53YU1Aqc7U6iBzf69K+r+kgSzIJzLSx4YvWxZYUhWJJJ/ECkjDEXIIQBiGB/mCgODOJroNOwoX5HHKkBiqNEidSXi5cFyRKaMSM04IwEAq0+m0US0WQYYj5+TnUa7OnX/a8Fz7WC4OTXPCzFzt6XbQE4Lmv//HmX33od47VS6UTM4VCrVoqLTQ7HUghEYODC8BxPEWGknrESlJ1sg0h6RyXXVxJmWUG3jTJDWGqYi0WPEAI9Ho92BZQcD3U3BKW5xewb27hzGyl8k3XshutRnt29czZA2ubm/OrGxto9Dtjs9ijekjoKpZdkP7+ORMcjBT4LKYgdaXE54zxG8DGe6fgI5KbRSiorii5pSrXIAggIo4+D5JkxbZtOI4Dx7Jge+5YdWnaBHEcI5IResOB2ghNUqB7zowxWLYFcJGM6BluhICegxcCtuskfAUppRrr0wmASUzTI29pUJQACPX7McGfGdlfA5NTqv0xMN7nTwIO0ySvnFl96P6kVsRLnwMueT58nVZpBEApUxyHlO69+Zo3Updl4Ut+bj97E5klJKhlJ9UzlwIxFyrxg0EFRhrBImlfpcYZ0yiNlEnLxky3bGdTPK6jrySB1VhXmqdAJ5KPdFJg5JgJoaBCqFgvcM5phIsNYW/Hb0hfP0qoka5AcziEvXYWrmvXPv+//789/+jl3/PuRqP5i//+fb+9+cPvfrsEcKrVaH3xjjvuONb8u3al7w/mQC0MuluwwcCJAJdybK9OXl/zTUh60sXsSnJ3uQqaa6/WN5K5f4PuwbzfFMdHkJ2hADJt5y1H5lvGUEgSgW63g+VqHdXyTPtZd955ojXsf3y+NnvylW9+vbxiEwAAKLpe6+T66q/feM21n1jd3FpYazTQGQwVw5tzTVhjY/3DrEHHVdHeTwX/ScZ8ykkOyrLXEgRF38fywiJWFhbaN91x+zct0L8O+gPSHfa/6x++/pXltY110mp2klsvvbGrzYcmMPa0yn+nrlXn+mxZeJRSCqJJZYbAlzgL0nGxFMHj3N6qTAnRpAM7pVQFf8dR/ybHv5ee1xVCYDgcJolEGIbJaxjCmZHqpZSCWCwhS45V2kKAayjQBBieU9EZZ690pUOpClyc6ySAqFaDGe/j2r1t2iy8MW7KI6oJqNHJvPKb6UaMzexcjwJzDWzNOcn7mXNd750kkUKIqTbRAhKWkLB0ayI0LRWMk/aQkndWvArN/k/xGUYJjpi4v0bpGBKYn+sEQL2OyIWsVV6dFedioJq0lW5xZZOly8Fnyquk0+ff3FdGe0FAoNNu4eyag7Lvr3z53nt7K/v2HawVK53PfvgPjzvUiguO1z195szHbj945FeFxNzRUydRsn00o746b2m9h7RiJCE6GZaZOp2MoRe74WGCfdr0KS3//FTaCCbJooxppFElAEZrJBZaUyDiKIChMjODannmRH2m8qe26zz+yje/fu1SfPaLmgB8+1ve1PlPH/it02yJbVZnKt2SXyj1+kNtSQtEQQhme0llxPUNbSyDd3Syr6AkYLJqpnA0az8KQriOjXKhCGsYo1YsYak2K571rGcfLxdL/4MS0jp7enX52BPHr9lobs2tbW2iK8MJQDFvszX35E68zM+XC5AEcS20Y43UdZIkx2xK2Y0zL5nwPG/bcxprSWlz81qWNfY5Pc+b6H8bZziTzafRCdNTN5Kg1Gi+60qXpccpATVCl0kFBCbHiIRm4iuTntG1iM0oIqaTkfLaSGbKgDJFfMwztUkL4UzTuqeZ6jGZ0c9xOZvW291pApB9LgqFgBBbISxMb5aR3hyJZpkLqf4niBzpKDzF+3+U0I0q/+l7ixxT18uOLKvJFJHrQHqp7MjTz5/WVcn+W1oHw9w3AhKcAs1mC6fcsyCgc9+zsvIrQRS+rVDwo/2zy+5suQk+DE+Xb/IfPdlYr3SHgz0brTb6zQCARCBjQ/i5IPviJd2TU8naqIVBRxyZOB61oyAnhJ1oJt00gZ9m9jCT0FKMa6SImIMIgUqlinKhuHrDjTcc3eq0vzpnWycu1TmwLvYLlErlVnW2/lfz5epifbZeanZ7CMMQvuOiHw+0hnrq5pJiR14AVzpOoOA4RW4zBB0A8G0HBdvBUn0Oe2bnTtRmZu73XffRTrdbkg591QPHHt2z0dhCZxiM+kmSbBv8p6Wp5AI0UPKgUqpn+rM7tJRybOrAwP5ZZCL93k2AH0MNhEgClOu5EwEnnQC4rjtWOWeZ7uFgqCt6CRnHiEN143MNS9vEHmOFa1eFpAWgW8TqZ8h4j3McEiQqKWJMjxEKSCFhWc4ExJ4Htee5CapW4vYaGrkkuITpjlwzk+3EnCYq3XO0APKU+LKVKiMUzLZhQ7V9bKENo7TkLE+Y2FrtLm99E3HO7X5C3jfRWCCTKc0UpT+phXcodo/deDqImUo2G9jG/AlMoicEAsHhOMBaYwsFv1D7whe/uOfV3/39v7KxtfU2m9qnqsWyu7K0Yh87eeJPnnXnnXOtv++Wm+3WTKngox+HiCOOGBniKxIP0Dyc7KJrIzzVFkB6D0ncH+m4mqnIeetZJEMAoFRzUKjQPSIxEvYSEkLEEJKjWihieXExPriy57hF2Z8zxo69/p6396+aBMDz/eb65tbf3PiM23/gTKshzq6v03anC2pbqg+qEwChNwIjnHI1PbIb6ahaoxA8hsUoIAWCfg9Fx8Py4hLmKrXNm2697REWiX8v1QzqTzz0wAOH2v1utdltI4IZyVI86HMF/zyWOnBhLT7NxjouupM9F9PPUd77T1ek6Z8z45Jp845sYEmf9zRLPV3pmhlcA8NzKZIKwJDo0oIwZvOKIRQ7XpCREmBOsmpe12aW5i0o/oEhPxFmT6yNdBJgSIDbOjNqIwXzVUAmfx9THsSkVPA0qD8bwPPkfNOTHVM3GMua/J3M/aC8FXQiwxiYYGOIQCzH2zpJz5UYQ+dpn2HSKCxpLST3gRwjHSKV6KUr5yQB01wQiXx77MtZ2RoEYLu9J73/xFBJ1TCOEA4HWN1YR6VYXvnSV78y3Ldv30Hf8YKqV9zau7xM4zheG4roU/vri9X2oHvzcG0VkRSwuJqi4FLxIdR0BslxqRpHVrBLkoBpwT9BwLYxf9r2WqQRJ4xkg5PigwuUqIW56izqleraLTfedNT1/cd5FJ29lJ//oicAL379j0X/5SMf39jjuOszxeJ6tTyz2Ox00A9C2JYNyaWWKKUTc8rT+itXEvafraZMJWhRppTvBBAPAkAK+IJgtjyDvfOLeMEz7z5VJPYfFTx/vd/tXddut65d39xY3mo00Bv0walmH4ts0GPAGKRMxzY2ZWqTfk8XKMERkz3sPJB4IjERcuomCiARHUkHj7Qla1+7CaYrtTwdgjyYW0oJx3ESl8SxDVwnBI7jTLCcE5JhFCGMg5HSH5nc/HkcgsQEMWHqd2xbBROYqizc9vOZFkjuCFL6d1JeCdAuZUYB0LDlcyWFKd1WytdM5BBgbENMDdLvaP1Pg8hN4S6FVCKEui1hWxaoMJoOYmxjjgRXIke6VUiQ5zopUtdR5KzNzJSAHCV3RJNnTcVs0Lpk7FMIZey0jVX2pQxgWTOs9L+lr2/6PmGMAUQi4gLDOIZvu2i3Oji7top7yX2Vhfn5d6yvrv3i/voiLwtaXJyf651ZO/vADbff/NiZ9sZcfzhYHGyuwWEWpIghYoVoKTnt1OXI7FGpN7fbNmotLS60za9I1r5ZTXm6DsSw/clkSxCA0r4hBJSZgoaDCw4mYsxUK9iztBQ948hNJ8rl0v/l+4WTb3zPL4VXVQIAAGXf755eXX3/oX0HP7621VhcbzbQbzThegxDHinzm9SMNjV9P3p1iQNNaP1rwZ5utw2bMcxWK1heXsK+5ZW1PftWTliCPiqDiJI4fvXXvnzvytrWJm13O+hCgIHpsb3p1XR+ppsJtvLCbkbZBCBLkhrFjXwOQJakmFaBM5tZugVg2dZExZ9+H3kVkZVyopR6hEpmNlChIeN6vZ68lnmNKI4RBgGGQYBBewgpFZSeR2qyCNPIAocIRUJEhG4rWNQZG8szY5iGpGgSgLxraljpE6iD2awSRUI9DmpQCjEiMQYymnj+MbtcIbZdV+cyM5qmwJeM2ekqXwgBGQsIOkI6LH3trdTaiuMYNI4QyQiS82R6Y5yZLTKd3kmTH2xTpea1YfJaKdupyO2EP3GxEoK8wsMcY6qKlIKCQRKJfhSA2R7W17dQdgv1r3/l63uef/dzXtTq9j43X6gQ17I3q7Va3Br2PnPXbXcsh1/5h3q737XiYU8TNwkiKTT+nfnMVBUIZDfvy6kkKr137NQbZdpkg4BUY9lGIpoLyJij6LtYXJjHfH3u7DUHDzzi+v4jEli91J+dXYoX+Xd/9enBD7/8e9lcbfbFx06dnBkGQaE/7COOuZqtNpAaoyCUgMccAgKM0FQAmXrqd/WiIoTA9/2EBFYtz8BmFqIghE0oLAkwSeDbFubqs7j10BG88IUvPO053m/YjDW7ne7Bzc3GP7n/0UcOHjt9EmebmxCWBS5iVYFINcrFmKW/srEpgES6Ukw5VwQTEwos5UWQhYAnAoGu4FnC4dB9SE3Io9lNNEtm2+a85Tq5ZX5OQE5AzNOCVV6iIcn4jUtT43lp3gHXrHPLshDyGO1WC61uB4IhqRwkJAp+AdVaLTE5MoJINDOlQTSjvOAX4LquEjJy3GSawXEcuK4L13VzOQHJcY71l0s+TR9TuAVPda1PjAmeK4EXOlGhZkyNJMqP0C2Q9Hk0yZHrOPB8D9wINYkYgACjai0qzEuMEBseQgiuvRVSVZ8EGGEjeF8nDJZlJyJHCUKR4rgQwpQyJCVTk7MLEfx3UgBlk7W8c5+9n9S1J5AQiHmUoDtccFBBQG3bPbD/4B6LsW8UazOuEOLo5tZmSwJEuta+drM52w+GtV6vi0q1im6vAwIC1/O0AZQEZWxcWOmiJEPkPIO+hO/5cF0XnHMMh4FqNRkhIIlMu2f89Wgq8BOqzam08RYIQblURK/XAyUEBdeB4DFYFKFen8X+lT39u+969oPlcunPCoXC13/0nW9tXuo4ZV2qF6pVq+3NZvN3br/h5t9pdNtz641N9HqDhEBCNRydqIJJXBXVvxACw/4AAFBwPFXxcK42MNtF1OrCtyyUfB+HVvbhrptvW12eXzjOw/h46/SqzYn8mUceeXhhvbGFRqeLoQ42kDKXGT6tv5UmAj2ZymQaizv5mtp8zKyrERW6FHaol+L6pe1rh1GI4XCIIY/AIRCbHj0UI991XZRKJViMoVAowDKZv5hMTggh4JGYQC/SveerAfXaPsJtE9ikVnDMtBKoJuIRADOlEoIoQhAOlOpgzBUMrdsbY/ateVLN2fskJYTFtOTtFYMuZqr9ndzjjDEU7IKajBmGsBlDq9NFo9sufuHef9gz/x0v/anHjx37QKVaASzWoa71uBWQTx8+cnjhzPpaabY4M98PQxQtD/04gIxiWFSNeOIK8HhJp9Bj6+RJvPWsLkB6cQdBAEiOcmEGrWYTMuaozpQwV69jeWHxZH2m/HW/UHjoYkv+Tn3vl+qFXvLGH1+nlD508OC+x8t+Ya1SKiXKSdOg8u1HdK4MGoDNLAX1EgrbssDjGHEQKsOWMAKDgOswrMzO4fZDR5qHD177iAiiX5ScR1zym9dPnTnwxNqZuVOb6+gGPTDbAtK92ImKgejDmM2Y6n9UuSieAD3npp3edPP669mfyZNtvWIDlxxZ9qbHFofDIbr9HoI4SpJXiRFnwHADpJRwmJVUs4b7wQgd+57jOInwTlpK91I5ZFJ5fsd21f9O3/92ojB50xAk1X93LIaC56DkF+B5HiyLwTD+iWFbi3isVSEBRT4gYsLpjzFbKU2atW6uVPIeWMIP2A1TAFmhn/R9uJP3x7lyeqTEggBBLIG+jLG+tYm1xubCIw8/urza3Nyz2W3NCUYQRtGa49gPuoR96pZ91zy+VJ+LwAUqfhEF6kDwCFSjOiLmyX202x5Zyee0RXWay5NIAmeOcxYO+kMPh0PYtg0exyCCw3dc1Ks1zM5U1g4fuf4hyaz/Sik9/sNve8tlyTQvaYlRLpfaG43GBw/t279Rq1Qls1kCAY56EpoElYLjruQHpRQWVPCnUrk/GRJgHAbwmYNqaQbX7z3Qe/bNtzU6nc4bbdDV7mazHBH6S/c99vDiqc01NNstCN3vhhj1p7Zj/U+Dzcd+VpJtg/+0Ki4b8NPwrAlgV0UioCcNDJQ8CIboDQeq8sfIx8G4ow0GA/S6XQx7fcSh0sGHmO5Ql5AJQ+W+lx5TVFDq7mllPdUAf76vP3UskhBEUQQiAddWSUDB9VQFKkbTHNMS0/S+k+ZeGHnjK6H6zzNWS0/jbJ/kKg8Wo4kBAJGIEUOg1ethdWsdX37sgZUBD17XGfavp64192O//i4eD4OTBdd/YOnaAw/UK7WTs9UqmAAqxRJ84ihpbMETR8LdfO6SmfyMFPSTKRRMIp3/AwKOo3heDrNQLhewvLgY3n7jzY97jvsZ23Eefs1b3rx52eLTpXyxl/30a9cJISf27N37qO96qwXPA7gYg6vTzNuroYKMoxCMMTiOmvd3LBsFz4dj2SBcoFAs4Lrl/cFLX/CC/trmxotcZp3pttooFou/+/AjD9XPthql9cYWejxUI2phpFy+9M21k5G/XOiebO9il5cw5MnRJkmOZSW9bFPVXgnX8FwZfRpaDeMIwyhExGOVnFKSzNRnEyNKKVzX1ckeTeyJs39OJwIm4KSFjc5daZzfcdnPPyXbHtkJkYnRu9QNJzPObQb+H1vfuvIfoQFqiNCmDK5lJ+s2PXp6JSUB2TbAuR6ObYMRCzZzUPBLEABCyTEQIdZbDWx2WrWHHnnkIJfxawIeH/zLD3/cfcO//LWBVyoccyz7P99w040PlL3ium3bsEFRLZXhMBsMBLZOpNJJgMwcu+X8xVIJUI0cL3f6/mhuGDUJgWVZIEJqyXGG+uwsZqvVkwtLCw/4nn8/j+OTl7VAvdQv6Pt+a6vd+sOV2uyp6swMN17TiYuc0QO4WipIEPja0z6xtQ1DDPt9OJaDfQsL+K4XvpjHIX9G0fUachhh0OutrJ45c+Dk2tmF040NtPt9xETpyhOo4G+C7rbz4Ym+df588rQKIa/nn+0tJvPt2svd6PO7rgtbj7pdDQ/zeUMeYzAYJIJN2f6mIZERQE0WCKn06/XoWrqy56nvpYNNdtrgauEAXEwEwXVdUEIQhiEG/T6Gw6GqaMXOIHACAkZH69hU/7sF4t8JwrhdEnCuRxzHSo8FUCOxlAKUYihjtHttrDW28Njp4ytrreahdrdzg5RYBIB6pRr7rv+Qzcl/Pry874nF+lwUSw4mSdL6klyAXiH3eLqoebLrk8hJRCn5u5DgcQgbBNVKCTPF0sYNN97wEGHs08xij7/+XW8PL+v6udQvuLG5uU5BTi2uLB/zXG/dL3oTGWsiZXqFE8gAJCzvdEXSH/QBIbF3eRnPvfOu+O5n39mYr882vu+9b+v1u52S7br/5uGjj3ln19aw2WqgS0LEpq8JotTzuIDDrIzWf2pUSff+RwkAHeMG7HTzzqIEJvFwHAee501U/Hkz+Fd6AgAAYRii3+8ryBkpx8BMgsUFRxiGifcAYwwWVUJA6SMt2ZvWHjeeB1n/8XMhGE/l2A0BXu7wMJNCWbRFSoE4jpLznQgnUZkYNan3obT/s4nbyFfCBaWqWjPiZGMjc5epBbKTBMAEsCQRTcHa5zz/MYdNmTLdEgquJkwpVvYhsdVq4uzmhv3FL3xhf2/Qf/mw09v/H97/kcL3vuNNa4zQkzPF0oOHbrnpofna7JmF2TlEQQSHMtjMBpdXRgtlmhvkdtd3p/dPHMeIowjlmTJWFhfj6/buO1bw/M94nvfg6975trXLvn4u9Qv+3G+/X3i+ty6Z9RezlerqXH0Waixb3aCESn3zksxJvjKqoeygiOU6kDqASC7gUAIXwHKlijuO3CC/6yXfIU6tr12/tLAQ/bf3/auqXyzeceLRR5c2W83aemMLve5AGUpo2VKmleu45AmEm3X8mzayl9sWOEeTLgn8mvTFoKx5PduB77jwHBeOpcVt5KQWQBpqFldYPmeIfeZGHoSBgoxN0DeucnrmnmH8PBslP2P8kXekq85pTm4X83Gua7KbAqCBZs1osAQwGAwwCIZKtx0jK2jjsjiydjZwNNXtOZUwe7YD13Fgp6pWCGX6ZFOWpNWjQ6hDqj9fqHWW93WnCdi08dedrB/XdeH7fpKAUqo4AYRRCELQHHaxtr6Os5sb81tn1g53+t1DMY/mAaBWrXdXDhw4PTtT++yzn333I/WZWmO2WoFDLcx4Bdh6+JUCu5YLYBRA1W28vWjZ1CAqx69lsiqIWicF18PSwiIWZufOHLnpxgfrM5UHGMjJ3fD52eV40e974Usix/MWKrPVW5uNxkqn37W73TaKMwW0Ox0w21FqZYxBcEASw3pXZg1EEh1oCUDoZc/EKaWwqJ1AwAwMjuvB8wtwfR9hrAhersVghxFcIfDcm2/Da1/1Grm6ueHN1edjziOrNxwsD4aDP/nSQ/fVT2ytOydXz2Cz20AoOIjWRJBQimnUYlBaSQwMilkOIZMNjFEKizHFloayCWaUwGIUjCoP05hzMItBGHc0MrKpZbpdIYXSY3AsG57r6cOFyyxYVIW8kbJhyuY3OVIZEU39PfX9sco0U/lBb+BjlWtqzvZ8AxEBGdN9T9/IhBDYjoNGu6VImLqlIoSa+Vf+4FJ5wkulcs4IAxcSFBR+oQDOJUAoGFU6DVIJN4NRC7blIIwieHp2ut/vJ62UtATw+ZTQ2dNNcpLUbZGCc7zEeSMEZsY/+970H5iVkZrVayiOI4RRiCAMEMWxmsjQZk6CAhEXiGMOLtX1sW1HE+TUU7uOj7JfhG+5SgdAr3dLyzbblCXS5IyQ3INQCstS95i5z8yfJ9AKMlrP5nMQStX9PC0BMCY7+pDIOVGZceAxtUoeJ8llricEADCKIApBLVUMGKEszmOlmwBABiEc26a9XpcdXF4uSIkH//GLX7r6g+95W/zu1791XxAOm3EYDArSurY16C50ej2i9W+Vi6Ze7xJEawNA7duUjUaUzqvkeuoP23KUPweo8poAASUKfRbaKnz8v9GpZ6CQkYDv+wh5hEhyUJslejZxGMIBxexMBftWVjp33XXXfdVy5c893//a6+55+9auaCFdjhd90wd+dVCtVVeX5+qr9Wp1o16rwS/6EHGk5+SjZBGrm2Fy8e42PMBYxSZKf9pj3TjPFQseLEjwKMDt19+I73vpd+Lo8SeshWpN3P0oUYoaAAAgAElEQVTGHxS93qBYrlX/4tjamfrmoFs6ceYUGp02eCrDfLIz/HlVf3ZzTve90hC+qeQT+NpWwiiuZcMiWtYms3nvpMrZrRD/GByYGu8L4iiB5Ul6s01BrHmqb0IIDIMgMesRRBkOZVsr5mcNn4JzZYRzpfSgL3qFlgNtc84R6ekJoVEmmUKZzNQGdBEBStQ1jBV/xrO8EXrlKATAdRx4rquS25zvTR4OfMeBRdlYHz7Lyp9msZwgZWQ6CnA+90x2lDpvD8i+JkmJMJkknlCGLmJsbGxis9mYf+SRb17X7XWvpYQsA0B/2H2wXCyeqnrFh/Zcf83DC7X66uLcAhgFHMrgEDXPJbSzY9qpcle0CM/nRBMBZin+CYeEZdvJWovjGJILFDwHi3NzYnlu4dhiufa5YqFwv+DizG65v6zL9cJF11mN4uizN916y/VrzcbSRmPL6Q+6cG0HseBgFkWobyIVpDIwS8qr+3IvJFURqsyfUgZqWWC2Wug8iuESBoQx+CDAwfllvOTbvg2v+s1fTlbdF37vj1mn2603t7aWT50+O9vqdNHqddEJu5Cw9ExpNsjQqVBxHulvmjqbeu85FZvePAw5yjCkE7h6h6NGV0IPcMx8KFPXGlIZl3yCkyIzFp+UUoXCQCYVvZ/S8h8VdWQsuHHOYds2PM/DYDAApRTFYvFpEeCnrh8yfn3Mn+M4RhiGSb8fjI65Naalrg2ZWBEw1fVz9RSO7/twLRssR+lyWvI80aIBIDkHYkBytUeZWMKS9TRepxrIWe7QS+F8z+25RIFG65Lp9S30WrbAGAEhSnipG/SwvrlFHnYfX7pm/75X9vv9xz/xrl9dfc5r/9Hg/v/wWTboD44GTfl/P+tZd++Lv/T52e6g50aNJnzXQxxIRDJWctcitWdfBRwhZtsYDoeq8icEYaCUBKkQKBIL87U6ZqvVU4dvvOG+mJG/LYAe+7F7fmHX+N1dtkI6jOM1z/MeKxWLj1XK5bXqzAwkJ3CZpfpFUqreciobPVcFdzk3MKkFJJhlwTakOCLhMgqfMYjhAEv1ebz8279Dvvh5Lwj/6v0fST5Qr9P1i4XCp4+fPGE3Wk1sbG6i2+lBUgsxMWIUKZhPjg4qJ/vOeX3AaUI+21UvZrTPtu2xsbTLpXN+MVs46XNjJIuFEOj1emNz0mNOcmlfB8sasZ+1/3cQBNsGEJNACSEUuqLJomEYXlUeGBfi/hJCIIpGZL+0Y2O6+hc5wjjQ5FnXslH0C0o0yHaS4J9OfKe1L3LbGVA8ATMFYxLkvNnyPCROTvGPeEr7zxS9j528hyy6mDakiuMYluOAU4ZGo4lmtzP3yKPfPNgbDo8Q29rzyfd/hNz8A995glF2qlyeeXB2rvbAvoWlk/Nz8/AKHnzbQcnz4dseiE52r4bCwSR3qucvwWxliiQ5h2/bcClDpVzEbLW2ddvtz3jQcZz/ZLnOwz/8zre0d9Xed7le+Aff+VZuUXLCovRvbjly+FRtphL7nqekPKWEiGLVh2O6F7dLF8xI412AWATMpmA2BSUSVEg4HEAvxJ7aAp53x53Rd7342/tn19eqe5dXKAB86SN/QuMwqp584uTc6vpmrdntoNlpoxd1lUc9GS00Q2YihKkevcyvVPKCfJp1nr3R04Q2c3Nmg3+ymXCe2zO/kgPMtB5qFEUYDAaKHAXdF9T9/6RfTNXhsJSCHwhiCIQ8RhhF4yp0U1z9CCHJuTavvRMW99MhATCVvwn+RmlRUuUFIYjSExhLhAEwSpUCGyHwHRelQhHFYlHpM2hkMf07WU+JafB5dmLJ0S0y11WEWMtYTAsBCAGZFiPSI89mlDeb0GeP813Xk+6c26MchupofCIkJCIeI5YCfUTYaDToQ6eP7wt4/P1RHB+Rgs8CwMvf/tq+5dmPO8z69KFbbnpwYXZufXl+AZQADmEoOC4cYiVtNJNkX+mPIA7AqYBtq/vWoRZKno+iY2NpbiFenlt4ouqX/spzvfve8EtvP7X74tdlfAyGw7OubT8yU6ker5RKa9WZGfBIWX1KLhQBbRtN9N0wJpjMxOsqgNp6Nl9IkCiC7A1RKfm49frDwfe8+MX9k2dOr9QqFX7Ha1/Fv/HRP6NxGM7Oztb/9sTpU3ar10Wj3UKn10NEGCIIcAJoV9SRW6Ihd0k6sWHlSfWaCjUrMUuBsb8bGJVSmpDR0v26CavYqyQBMOdQaNa4MaHpDQeIeKSc9MYMjNQ1t3X/N50kMaYomeY5h8MhYs5H/dYMJJveqAkhcF1XQYkG4n6aP9KwfxRFiTpiYmm7TUAza9/A/mOVv5CJVsC5jjyEKJs0GhVBw5WxUwmhsn/OeW8XSSkv2+7bTuEuL7lJoyi27SGMQoSSQxKKZruNdr8398gjjx62pHhFIPhe87vf+wuvW/P9woNF2/v0c59z9+P7FpbCeqUCxDFILJQiqkbJcJW0ALTVnyKfCg4Ijqg3wOxMFdXyzIlDRw7fJxn9qoz5sd1ZwF7Gx0+8+12CEnqSCvnntx06cmZ2piL8ggubUHiWDRHFsHT1nw1sF3KW+XwfjFA9S2yDMQJIDsQRWByjVi7gtgPXye9+3ou6nVb3cNn3g+e88UdCAIhjXi6Wy+87fvSJUqfbrbW7HWxsbaE37IFYNiRho7ESrd+fBG+hLZQlpkKA2eo/TcBJV1eJYx2hSUVr6YPokSia0l8n2oWQyKsnyEQ8HlOOC8MQvV5PJ0apa63HIA1L3ExAGNEPc75NMmUQBDOOxiEnyIDGdEYIxSi2LCuBuZ8OFf52h5FKNohIWoTKwP5jLHkdWMzYqu+4KHg+ip4Px7YVuqgtoNO20NmkearyYM6fTVKerA2NBviuB9dOeT0QMjZSmNfSu1AIgHmPAuIcyoAjCi/RqIUQAtDFBbUtgI7GKgPEaLRbWG1srpxuNa9r93sHP/Ge36wmT8f5yWq1+sBcbfaB6/fsP7kyv4hyuYQ4GMKhBAXbBiNSE72v7A1EEoBaFBwK5aFCAmEMz2Yo+v76jTff/KBFrb9kjD32M7/+7sG3EoCcRzgYrvqO93ilPnuiUiqtzs7MwKIMnuNqJanRSFp609wN1ScBVICkSuvfsai6yQUHERwznof9y8t44bPu6t5++Ibfnq/Uut/9z34+AICv/cEnZ/rD/jWdVvulj514Yr4fBdhqt9Du9zAAR6xHn4yLryApBOBJfPZpVUy6t5pV90snCtkpgV3H4r0AwT+t0Ce0IUjIYwzjQI2dGgQEqfNA8s9lNjAYff8s2pBdyyb5MKjLt1oA6pHV8zfrc7t9gKaU2TzHhe8oZj8hBCJW+gsMquWS9mnIomnbtQamfZ+QkU6G53kKSdNtgex7TUt30Qu0lrPI1k5/h+T8WRAKLgXcgg9mOQglh18sodPpY21rs/TVr35tf7vXPyQ59n7iV36TAMD3v/ONgeM5j3uO+5mDNxx+cL42u75nfhEz5TIcyuA6DiypEiGTgF3JD64Jv4JzMAoUCi72Lq+EexeWHi84zqdEb3j/2z/w3rO7FsC43G/gDb/xK8K27dOMkD+67foj6/VaTXq+ryp/3edOAg8ufdChGV/4NLTIqKr0yoUiCp4LHkSI+0PYkqDieFiYm8fzb7+z/Zxn3rm52Wn925f987f0zXMEg0HVKxX/5b33f61IbZue2dzE2a1NdPo9EGqrSQjbAihLqn8J5eYHOQo+ZnNMQ9FpmVnf98d8zbNBXAihKhR9rj3Pg+/7SdslS/6Tpj2zw+uwXW/1yfx+1kQnj9w0bYM+V4JkoFrXdeG6Lnq9HhrNBigohBSKiwGtwkiVnwMDgYw5XMtGHISIg1CNRybtFCAGRyhj9IMhhkGQnE9z3dKIg5F15pyjUCjA9320Wq3kGqV9ApCu1C5BgnQ+5/ditGvSD5MoGYTKiFExokR+quUZeK6brF2LUDjMSn73XES/7ZJpBe2TBC2zKEsKFeNGWHC9RDEzEc3SgkM8MQYz4kQyOZLXyyABWSXHacp1JqE3inyGyGqmqozORHJva6IRgxphNvuDxRz18xQgzEaz10OXD7GxtYVGs7kcBuHLQxHd4BcLS+a1X/bTP3zWddz7Cpb76Wc/+66je+cXg/lKFTahCHsDlIsl+I6HOOf8X2rEKU3aNO/B3JvZpD2vBcpA4DAKHgZgApibnUV1Zubknbfeen/B8+9zC96JXd3B2A1v4sffc89q0Ss8vmfP3uPVUnWtMjODMAjUjaEzeaanAdI32KV4mE02O1pnAm69NotyqQQxCOCCol4sgQYhZqtV3H7ocOuOZ9/ZXGs3X1SrVhMI6Gsf/dN6FAyv21pfXxkMw8WNTgubrSaanQ5CCMRSIBbqyN2QSb7bX1YSNA1x7nRTfbrNnptzxhgDCMFwOFQsfGhOBFVJANEVI6UUIlLQfMH3YVtWIriUTg6NmIjZUIxSHTFja1NGs7IsbDNJkEDeOevxan7kaVOklRSZPvdCCMhYJVQ2s+A7LnzPS1hC09Dmi9FGJJnWnFEVNLya9MSAECqhVpvxaAaf7URGeYfvfRpXapqGPc0gKVLbH0tKwAnAAfS6XbR7vcrRhx46JCFfIQkO/OmH/rWT7JuD4YmyX/jGbKVy3/V7Dhxfnl9AuVRCwXERDYYoej58x03MtLITTLtlfee6SCbvTSIKh5gpl8H7fZQLPsqFwvott9z8AHHtvyz5/tF/9q8/FHwrAdjBo+AXVkMuPnbjocNbs9UaqGNNZazn9b0v5SIwVaPjqPXOh6Gy+Y0EMAixPL+Iw/sOtL/r216y3u12XuIVCu3b3vCaZPxj2OksOK739pOnTlW70RBnNjex1mmgM+wh1qxmYUQ0JU36cWOJCSHgGCnWZWd+DSHpXC0Tmkqu0hVH4vduWh2ZSoReRVNqJpAQQtDr9TAYDHT/dBymT1fpjFKUiyU4liJ8pddq0kYhFABBxGMEcTRmP2qSyLw1bJI327bR6/USNCfbknk6JAFZxCqLwtmacQ+tgGkZmWrPQ8HzJ9bzhXZC3E5h0fBC0mREz3bg2U6SCNDUe7sYm3PaUyV/7YwaEXQsKSAgqtJQ741aIJoLIAH0IdBst7DVaS13O70jQRAcYY61aF73u9/xUwFz2FFb4i9XDh34xkJt9uTSXB0WI7AJQKWAzXSinMO/2E0FwlQhNQA2s9BrNVEqlbB3eTk8uLTyRMH1PuUS+8Ff+NCvre36+2u3vJHXvPtta57rH73m4METlZnyerUyMyJWaRKalXIJvJTwY7qyNuNaSQYfxRj2B/AtBzaA+UoF1y6vrH/HC194er3ReEWtUmm85Od/smWe696P/NHiIBheu3V2dX+r1VrohwHWmltodrsYIALRymVJsgMjOzmClkUGBpyWAGRJTttVnE81+77SiYBp+I9zju6gjyAKATaC2pme9YY2irEtC56jRiTNCKBhNhtOSHpyJWGxazU0g+BMTcpShkvD4TCBa5+uCEB2jNX83bIsxbsQaizT0ZW/5478KS5EBf1UkoIJRCBVxJjkznXdcSMtvb7MqOCFuMbJ3gA51jbKcnho5v3SKaiUSYw5JLq9PtZbDffBB76+P4zDl3Ee7/vkhz/umt976c/9xDq1rfusWP7ZLbffdv9spbq5MDuHgucjGgawyPgEzeVoKz3ZBCCLBHuWDQ825ut11KuzJ5956+0PlgvFB0B3h9b/FZMAAECpXN4KJf+t22+8pTk/Pw/bcSYsaLOB8VJsQOmLbyxvTTXoOA48xwGTEivzC9izuNx48QtftNZttF5VLBS2XvbWNzXM7//P9/8u7Xe7exzP/clvPn50bhiFpN3vYavTQqfbV5cj1eNPG/CktxchAS4l+JSxP5Oc5An/TA06GCmnbWcmMq1auZITAIMCGIU5odXQJAAuRbJBG0lg09Ml2nPBBKf0yJWBTNWsuhhjsk+7DhPz5Y4zBnlnVfGeTghAlnwqhAC4gIg5iARs24bv+/A9D45lq3MU89z1eqEniPKq+AQRMNcrxZ0xREHXsuG7ihtgUKTtpHvPp4WShwCMvUYO0kjkuAw5pRRgFkCUD0kv7mOz2cBaq7HQajQP9YfDw9SiC2NPEsanXNf+RsF2/vLu2+58fM/SMi8WikCsME4/Yx++25KA7YI/ERJhd4BatYyZUmn91ttueZB4zl8UC4Wj7/jw+4Mr4v7aTW/m1e/62bVisXT8yJEjx2oz1fXqbBWQ4yx06xKb/6SrYlOVJVmr0CNFgmO+WsXBpRV8513PbxSk9aZqqbLxA++9ZyP9XI7rzgdRsGdrY33PIBwuSQKsN7fQ6XYwwBBgTAmbpJSypkp4JijApOiPSQDy5s2nfb68ZOHp8iCMIggCdAd9cMGVL2X6GqSId4wxFDwfnu0kwdzSYjBmA0+3ZQA1xhkLroRsNPEpe32ym58JfEYd0Ni1Xg4EbDckAHkqe5xzWERB66byt9lIhyNLkkx7BuzUzGgnwX8nCWb2+pr1kegGmGkBy0r2OCnleW/QeRM/01C8sdZfKvATTCYCAkAIgna3h41Gw/7GA/ftDaLwpVEs9v/Hj/yBCwCbf/G3c9/77p/jsRTHSqXy12dXFu5fmV84MT8/j3JlRpEg9bXNXt/djHIlZEAhUKmUsH/PnujwgYNPlIvFvygU/Qd+5n2/vHbF3F+77Q3NVCqNbjD84O033dpcml9AoeCPLWZKKZgeDbxUFzsd/E01aB48ilD2XKwsLOHGa687dmTfwa/MV2eP/8iHxkc//u59v0v6g8GCVyz+xNm11b2e7ZJOp4PW5ha63R44CCizEUuhSWcMFCw1E6x6cjIH/k8HBHNDpcVlzqkDniawTSAOV/fDnKMgCJK5f0po0nd37FEVzhiD73nJ+WV6LZq1kRamMYFLVYMkkfiNoiiBsacRTNMJr+/7YwlAdpN8WiRoqfsvfRgrW9/z4DoOGNEVNFfVpcUu/UqeQBzSOht6fNQIAEmurKSpTgRc101GBy/UNR6TBYecjgCMhYQ0J0BtNpOeIgoF6IQKBdhqN+fbzfZ1g0H/kOVaywBQ/6fftgEAr/m1dw0t3z1qW/Z/vOX2244u1ec29iwsoVwoJUltwolI7a3nauFc6jU4ttcKgarvYs/SEpYXFk8/8xm3P1ibmXnYovTklXRv7boE4JU/89q1gl84cejQoeP1Wm1jtl4DEUKNqRno3wSsS6AFaAxfPGbDpZbyuDbEIkJQK/hYXljA3qWlM7fccsvJroz+xWyl0pxob5RK8yLm+7a2tvY3u90lWAzHzpxCq9tBPx6qIbOUsQmdVrFnREImZot14DEJwJOFwscV73ICZoZEJa/wXMEkAFEcI+RhUhUaIR/btiF1AmBY3EY6mVIKSUcqcGmSanrEypxTM9NOCAHYyK8+r0I0v+fqETYjf/t0QwDMGmZ66sbTQb9YKKBULKrgryt/YKQ1D6KtZ1Pr9qK8P5J/JCiDVCsp3crIohgmcXccJxEOsggd49dkGftmDxgbCcy5J9McAJMAjBN3xI6CRJqLNIYqUIJur4eNrYZz//3f2DMMhy8ZhsHK//rkp/ann+Mfv+Nn1gq+f1/Bdn73xXc998ze5RW5VJ+DJwmYVM6BRiXQkI7pxd7dJYUkcts9zLhKmpOuhrElyg7FUn0Oe+cX23c/69mPFcrl/1KtzDzxpve+O7iS7q9dqcRQLpe3Gs3GB55zx50fb3Rac41GA73eAEST46qVCta3NuB5PgbDXi7EvbMNUklTqnairsYYRtr4XMCzHfAohEsYyn5RKZPFMYhFULYs7J1fxMG5xc27nvWsJyLB75kpl0897+df18q+UjQYLhSKxdc/9PDDe0ozFfL4ieNoDododroYEnUZBkEEEAbbbFzGyIQQAHKi2pdSgpJRJWkqIwNF5wWXNAyooGgLQqjnsW0bQkhwLsAI068/2syS5xq/i3YMgeb2vc/3Hp9mJpd6W6Z/bljjyWw9lPxvGIWKpQ+V1DFGIWMF8VmMIdbnp1woolQqQXIBwUViluK4LizXgR2HiMy4n+7zck1UE3GMMI7QD4ZwA9X3NEYiibeCIR6ac0oJHNuFFQwxHA4xCIYgTCMLlIBLMbZJTuMVXGyE7OI88eTlpdqeVpJU8NOvz6UACMBsZSYmAIQ8HrkKkvz3LJ/C5xn/fZm/DtOvBwku+fiLUWhJ4hHMbhIFgybZUqiJlKRyp0lAklxAQIJzmaxbgABEjJ2XMBgkVtNhFCLiEZgkYNRWa1gQSHBlO07G0wGhSDAglMAm2gWUSFBKwCWBIAQRH2Igh9hobGKtUZnbbGztZZQsneT8kcliih+frVZLC7P1L3Q7rblBMFzuDQfY6vYx6A9QKhZQtLz/v70rD5Ljqs/fe313z8zOzr2HddmSLSxZNki2LAlho3IlFMEmgQJM4oBjg8DcAoM5Qq6iQghUpQCnCipUgFRI/okr5K+kkr8JBUVhW5aJBJYWHWtZuzuzO0f39PnyR/fr7emd2Z3VvSv1Vtfu7Oz2vO5+/X7X9/s+zC00IIkSbM+BEK2NAfrrnQSBN1RsSyD0Zj1BwrkihHoHQdwtQuOJEQAxHggEIITB97qQGEU+X8B4ueLdu/PuqUJ+9Cearr3sOPZ5rLGNXo+Detvhxy5kDOPspg0bT1ULpZlSoQCBAYokw7G6YIzB0Ax0u92+D+bwQJoAPEhOp3jiB8i1UavUMJLNwWq1wVwPmiDBYAST5So2T056B+6976wmK1/LZjJnHvrkB5dMghe++f2K57qb2vXGZi9gtblGHQ2zjXqzgY7bDfn+ySoi80SqPpkuTjP0DVNDGyglPIg7PGG4V2u8r0XU2u/apA2AaZroOnaYqieIqXsVRYFnO6CUQlei1H/KsSCxXDWLMwHp8kqPYmQQxN0AZIgUJz9uksBlEABwvWcF+kXBfa8ZWbpfMQdomX0l95il1pokZ0FMMiPLMUCQxuln1pPxSwrrcOMfIKFt0fOZEfkUfJAUgCFI7Uh8Xr/MYxhAEFi2h2ariddmZ7UXf/nLWnNubmK+sZBPn+87nvkEyxrGOQb2va1bt01NVqrNieoYDFmCoahwOxaY6yOnGvA9F6qsgvTBTSwHUl5txnOlltB8Pg+z046ysz4kKiCja6iVyxivVk7nq6UXNUX9H4kKp//wyMfX3ANIr9eBZQ2jbrvO39z/+t1zlXLZNwwdAmHQFBWdTgeapiU0wLEq+s7k7gdBGP2TcGdBuPOHS1N1UEmEZZtwAxeqLIH4Lsr5AsYr1eDAG+49ObZxw/+N5vO/ZYz1ZX1yOlZFVtU/mTp9ukYEShrtJpqtFlqWCbOPQV0N+CWp3sdrzhcLoumnUrfWt6SDBETUnZzdLzL2nU4njIyoEJdgeNTkui5kWYZhGGHUnrgmvH7J26uS3AtJQqYwwgvTsJzbPgnoW2n8HCSVVAm8EcGa63nrF91ydkqOPeoXoCwB7ybaCJNiR/3KTKuZQ4PGR6iIAEDb6WJ2bhbnZ2Yqs83mgfrCfO3vnv6SnD7OwQ8+Nq+K0nRW1f9+/959r9aKZbsyWoQkUMiiBN91Y0Gt5eSZV8P0udJ7PX5QZAf4ZlkWFFWFbXVhWxZ0RUWpVER+ZOTsbdu3P08p/VdCyfG3P/Vkay3Ou+vWAXjo8fdcMDRtauvmLT+pFUrn86M5OF0buq7Dd1w4jgNN1UIcwKpT/70eMf+/ZJuMKIqQVQVGLotmewG26yCfzYECKOdHMVmt4XW3bnulXKv9XBbEbxuZzNTvfeYjSwpqL3zjHwqOY0+0ZuYm212r6hPAch00FubRbltLKnCDkPrL/S6p9pf+/WqN/+XuBBikP361tuWAkIyxEJnvOT2/o2RRC50xBlUOwVmU0jgC5wI0NBJJCcAWdeET9dt0zdT3/VjVbtgMDT8uxwKk5YVvpCzAjeAEJLNWPQqDEf9InM3ygxUNdJpAic/Bi3Ei+43P931QIXzdbjYxv7BQPHn8N7c6XWfDiJGt9DvOAx95/DQk6afVQvkH27dsPXfL2DhGszmMGJmwfOP5yOVyEb++0Dfiv9Q1irPK9uviCMA7RsISjKHpAPNhCCpyhoHR3MjsPfe8/qhI6Y8EQXjxnR87/NpanXP0eh6cpqoXTr967tm7d+48Z6j6vKarsLsmMhk99MwUJVLZisRZgFXtsZFMzAKBhJ6oqsrQNAUBQjR4JpMBQYARXceG2jh23Xr71F233/4LSsi3REn61b7H39Po+9D4XkWQpT84ceqVmmV3aatromWamGk3YQb2ksg/SAj/DFIp46krRsnAPunVPNSDIoLLZUyWpN0vY6/voMwOT4GGgkqsNx0c6ci7noe2ZYY1VES4CTDIQgjCcrs2NEWNIzDGWE8KPu1gJQmY+Hu8dZUzsgUs7AZwfG8okGaSdpq3DnI+gqtxfW9uV8lRZaynXJAm5uJdEKosQ44c/fhZjzoN0MdA9zj2fRgBL9aR57LZXA4XlKCLAPMLTTrbqG8YkbX31uv10YGGhwqnTct67g07756qFcpnJmpjYPAh01BMTVcVSFL/9s+wPTLkLRnG0KelvHuub6q0EfS4AYCmaXBsG4aiYnQkg8mxMfue2193Ute052Tgxfd97lNn1vK8u64dgEPvf3eTgJzvWt0vbJvY2KqWaxBYJHATLchJ0htK0sCP5Sc4wSIAhy/WHOkdL/p+AFWW4Ds2dFHGRLWG7Ru3nN2x486TRBS/bajaKweeeO9cv+OfePaHZdd1Jl3b3m25Tk1QVCw0W5hrzqPVNRFgePa9QWC65PlfDu/4SqaWr1W02k/Ew/f9kPffdUAjAx0uLIs/M8ag6/pi6j8dgQi0x1mLSV6iSI2keqe5eBRnBnR8b+hrxksShJCYVGglh+2mE7AGtmX4PpKtvAOzASA99OjLrRnJDpJBnADLZQb7vaeqKnw/gE9CTIA3kf4AAA7XSURBVIvZ6aBjWeVjx1/e0nXs6ve++JX+WYAPPOpk9MyF+dbCkf27750uZkemq6UKZFUGBdC1LCicF0EUY/XNy7FWkbSybL/njgAEDK5jQwSDQilq5Qomq7XTY5s2HDV0/Sgk+fRan370eh/g41/69LShaGcPvvHgVHm0UM8aGdhWF7JAwXwXoihDFGVQKoIQIUJ70p7vy+28ZkZBIIsSZDXcKaURtzgAz0dGklGrVLCxUp3eddeOU4SQP9N1/ZWDhx+bHTT2rmkVZMP4xKmTr4y7vif5hKHeXMBMvYF2pwNGaYgET7UPrWZip3tnV2sABv3NWokiV9JPj7MiiABZ0c+O68bRf0B6sRQc+JTRDRiqBgEEgb+oIU8IgY9FjAkRaE/dny/QjC2Cp7haHEDgBX6MBRjm/iR7pXlpwvM83NzWg/0nsRPADU8atNgDxIvmqCrLIYteNK+EiFuAr2eceTDJSJhmUhzWAVhuPRIkBSAUjFD4hMJiDurzDUydny5ldP0LTbNtDPrfBw8/2lBl5Uyz1Xxi3969Z8v5/MxEuQJNVeB3nVAEjgKCEGXWqBDzKAzLRjpo7IsZgN4LHrYFhplAAPAsGzIRUMznMZIbOXvrHbcflWXpOUlRTn74L9ZWy9+adAAAoFKpNBzf/bOdW283xyZqoAxwbSeU0iR0aboLZGhDSiPeax79c473ULLTBXF9KIxiolzDZKly/u49u085LPi8rmuvPPjh9w1s+3j+b79jdEyz1JxfmJxtNmsQJXS6FuY7LTTNNmwweIQhAB16EqdlS3lkmO4Nv2jP+CoAy66FnDP6RMq+78N27UWVPSxKKvPFMZPJhJrxWHQQ+PWOZYkTSOu0Zn36niw6I2yR3nfI7EVStjjZP36tr+/N7dIdgGGxIEngX5J8iq+BAggo0COX3c8ZXo2Dv/z4CIIAEEQZAShc3wOjIpqtDlqWWZ6amtoUMDb2b19/tjjo+A9/5nBdEaVp2Q8+fmjP/TMbxyaCymgRmiyDBiwk2kKoAxOfK8+sBeySmAIiubUE9VFveVhgAYqjI9AVGRnNmN25c+dLIhF+JIrS0Q98/jMz62H+rQkH4N1Pf+RCNmOcfvODbzo1UarMlYpFqIoS0n36PgSQUHdbkkHAIo1mEWBBfHOFaBKJZJFJMDKbMDQdOSMTs3AxP4DndCEGgMIoxktlTJTLM/v37TtNgc/qunHqoY89+epyY/bBiqDk4LGXjhV834fr+5hvtzDTqKPdDtP/DP1blNIpa85KRymNAWSiKIZ89Mv0+nPD0Y8DPKlMxxeHJIEQN2RXQg9+pWOuZh8mxeo4DjzPgyBLYJRgod3CQrsFgMD2I1Q9FeCxAKYV9mXoug5RFGNDy42+F/jwWdBTuuEcEkkDLVEBI5lsLPCSZDtjYLDsLkzTjI15EpSVfK1pGhhjcJwQqMh1KHgJY1BKNylgdbnKJ1fk/lzi519uCdn08a7EOSW32FhHmJVBn9ejhBosOpW6qoU4FXFRoEwSBMiiCDkBGFziJEbO7KDzTo9v0PV3rO5iAEZF2EEA07PQWFjAsalTuclK7euN+Xl5uWvw2FeeaRQLxV/v2rHj+Ts33Ta9YWICI9ksVFGAJiswOy1IIoUiCRAFAdlMBpQ71OiPk4opixMgYE6GlFTs5KU1DmjkQZXAQvI5hQgYK1WcrRMbTilEek5mwtGnvvz5M1gnG10rA62Uy/Uzr7760X337X1Nk+R5SRTAPD809NGiKUkScplczJ5GEl+cjMNniwu6JIgYNXIwZBWKIEKmobdJfA9iAGiCgFsqVdQKxZl9e/b+tqDof53P5M488umnppcb69FvfT9v23bVZsF7WrZZYQKFy3zMzc+j2WnDhAsmUHhDLFjJiczTvmmg2aXUxtZzOxmL5gWjUb0+aqNzPBd+1AqYvAa8A4Ab6pWuDSOISX/SWZpB/ANJMBbvCEhKA6cFf/iilDwmX7DS4kJptPTNVsFr78BcjfPjuBNZDHfuuHNHMtmSmpSV9gZkkVazhUZUgiCEc5IB6AKoNxbQMtvFF44d3eiDjf/Xd/+psNxxNk1MmM1O53P79x+oVwul2WqlAkmU4XUs5LQsMoqGrKrD8zzYto1cLgcv8BbZDftkSpaIZ0VfyYyp07XRNS34rodCPg9VkuFaJmRBhMQIRrIGSqOj57bcse2YrusveZ53ej09H2vGATj0+KMNxnCubXb+eNvmLU6tXIFCxajWBXiOD+YDqqxBlTVIggxN1iGLCkQqQYAIASJESJBFBaqswVAMUBBkNR2aLCGwXfhdBxoEaETARKmKTWMTzYf2H5xWCDni+/7PHnn6oyt6f7Zpjsia+szJEycqpt1ViUDR6Vq4UJ9Fq2WCQQCIgICxEM2P5cVJ4ujT80ApjTMV/TTSLyXyWU/pZD5yTr1LKYUX+LDsLrruojQvzxLw8xUEIVRok+RQFAWDQUJLPi8ClAqUxju/Tz0c/yQED7q+B8uyeih+k6Av7vTx1/zvePcLpxZOL3TJBf9GM/Rrbf5eLFFRTEcOQKQUsihCUZSYFjk555KZkqTxu1QcCdco4aRkgiABkVxwx+1gZm4OR0/+Wp0cG/9Oq91SljvWXY/9frc4km/MNmYfPvSmg7PjhdLcWCXEA+Q1Da3GPHzXQz6bQ+CG487omdCg99kXr0/0c/Qci0KYRRCi6yOKIiiJODZsB07XBgkYVCqiMJJDYSQ/u+vuXb8yVO3fdUM7+dlvfrV70wG4RtsTX356LqPrZ97x8COzG6rjC7msAQSsB3TFF1AuD8pFQxRFgaqooXhIYpdFEZ7jgnk+NEGCHAQgro+JQhmVkcLMgfv3ndw2ueGfy4XiyXf++WenVxrj89/4bqZrWdXmXH37bKNRY17I/NaYX0Cr00HHNwFKwvo/WVmRjAPA+GLGz6VfC1r6Oxkyw5D+36sZ/VzpCMxj4fUjQijna9rdMOoGiwGBSWMhi6EoC6/9r+RkDCIr4SUVOWrfS0Yk/DVP4/MoP71Y89fJqC3JC5AsF/DPXi0R1rVO4V/q5w8y/Otl/g69kEdOgCyIcTaAc1L0Wysu2/31AzCfxf1zJORSh0sIWu0WGq1W4eTUqbLt2MWf/stz2nLH2vPEuzq6ps60252H3vLgoXq1UGyUS6WQupgBXteGoelQFCUmg1NS3Aj91jVO7sWfPQ7kpQygRIQSCTGZrRaY50OXVciSgFvGx7wdG7f8tpDJ/ThjGMc+/pUvr9l+/3XhAADA5g0b7Xq9/tYH9t7fyuZGXF7b1xUVsiAicD2QIOzl5t+5XKiuqDFWQBZECJRCVlXYtg3fdqBJMmQiYrJYwXipsvDmPfefFb3gqQXb+qGhqNPDjM9xnLysKH904sSJUtvsQDN0tDptvDY7g1bbRAARjJIw/Rbza/caFZZyAJIPOY/+g+skurkeFsDlEMFJY2p7biJtvjRlHhP58D5rDO4y6LlHpN+DRXpaApNOHAcS+mAxpqMfaCuZtk0a+2RLWLo+eyOn0G9U/gOOC0h2ssiyHAdAPSyCWFq2uqQSAASI6C1xgRAwQmB2LczMzeBnz/8iu23z5g/WG3V1peO95VMfMsv5wtzk2PiTD7zxjXOGotZlVUEpX4ChqOi02tA0DaIootPpxJgHMaJKDoWLGAiL9oANxIDxZ8pxHGiyEqt9qoqEsWoF1WL57F07dp4a0Y1fyoScXo9zZ805AG/90PsX8tnc/H177v3aPXfc2S1WSmi1WrBtO+7v5ot5Mp2aJMvhN97zPLRaLWiaBlVWEDguxksV3Da5AQ/cs6exaWLirzRJPv7wM5947cEjh1dcWV569gcFy+5WF5oLb51rLpQIACqKqDcWUG8twLQtiIIIlsCdDpv+4+lpWQ7xNK7rhinnPhH8ajEAyzHlXfcTeAg99gAMXdeB4zg9NXUg7F3mSH6eLSKExHTQK22x8lsfo0dY2BIoS1IsQsT5Ayjn90dEDOQ4S8hZBvGe86yALMuL3QgpoOdaL+FcjvT/VQGZXuO5T5Fo6/Mj8G4kUa1IcoxnETlXygB2wIs1HmELYsRHwEjEoEcRICQG6nQ6mJo+m3vh6NG3zczOqsMc93ePHLamZ177+fxc44ED9+2f00V5Pgh8yKIE27IQBAE0TYvB0WkAY5r/hYBAoL1KjPzeGpoGxw+fv7A0wFArV1DMF2d3795zKhDpsyOZ7NSTf/kF56YDcJ1sO7e/Lqg35p97x8Nv74xXqlbGMGCZZqjgF3H5cy3wmCEr2mOu/2gS2LYDQQqpW8uFAjaNTeDArt3ndu/Y9ZJIhP999Kt/Wh92XF3TlHOj+e8eP368aHW7RNd12LaNer2OjmWGYEReoxVob+Q/oBbIxWV45EcpjfvA+Xv9SgGrdQTWovEf1sHhwCHbtuElWu+CIIjT8Ty7kjSqw5ZQljM6POXIFx/+P0nhINd1Y5R/snabxgXwSC7JN8DfTzoAyZLBjWD813IWYJCcMN8pG7wns02Dzj/uDEgQCMWtr5djfgQBEARhtJ1kKmWh5kbb7GCu0RB+9oufK+cvXBh6QXrXF49Y1GdzAmMP37npNrtSqcD2XKiqCs9x4ft+7KwnM2IcIC0KIgQqLHmvn3y6IiqwIscim8livDaGg3v2ns/omW9mR0ZOvvNzH5tZr8/PmnQAFEFkd95625HZRv3QfbvvDWrVanzjeXTfL2pKs8FRCuQLeTSbTXi+h5FMFrt37nLuvGP7T3yGT1YKpVUJPPiep7Ua88W2ZY5QEi7QHctEx+nC7oRa816qxW7FFFsfr5X3kKfbeAYZprUQvV2JCIxH5zzN53ler4AUWA9lL18gkw7XxZ5LOoWfZmqMIzGQOBu1BLWcuu88i5V2ENI6Fmksx3rGAKzn+Tt0+r/P887bS5MZ0HT30OVwAHgw0kMvnMgwBIyg3VzAy7/5tXJo/4HfefnH/6kCwIX/+O8HVjr2M//47e7GW26ZeeSRRzBZHYMmK9CUUJPDtu34GeXnlmZx5c4Pfy+5lvJrNj8/H7dTS5IETVFQLpZw69ZtTqlYOidS8ex6dqD/H6bBnV7VfdpKAAAAAElFTkSuQmCC';
}
return $url;
}
function ad_asset(): string {
return svg_data_url(<<<'SVG'
Join us !!!
Go Viral !!!
Send us
your ApiKey!
(Please) :)
BUY
SELL
FREE
TRADE
@ GMAIL.COM
SVG);
}
function loader_asset(): string {
return svg_data_url(<<<'SVG'
SVG);
}
function inline_asset(string $name): string {
static $assets = null;
if ($assets === null) {
$assets = [
'left_brain' => brain_asset('left'),
'right_brain' => brain_asset('right'),
'mascot' => mascot_asset(),
'ad_left' => ad_asset(),
'ad_right' => ad_asset(),
'loader' => loader_asset(),
];
}
return $assets[$name] ?? svg_data_url(' ');
}
function cli_arg(string $value): string {
if (DIRECTORY_SEPARATOR === '\\') return '"' . str_replace('"', '\\"', $value) . '"';
return escapeshellarg($value);
}
function token_list(string $text): array {
$clean = strtolower(trim(preg_replace('/\s+/', ' ', $text) ?? ''));
if ($clean === '') return [];
$tokens = [];
/* Whole words only — character trigrams false-positive too hard for prompts like "cats". */
foreach (preg_split('/[^a-z0-9_]+/', $clean) ?: [] as $w) {
$w = trim((string)$w);
if (strlen($w) < 2) continue;
$tokens[] = $w;
if (strlen($w) >= 4) $tokens[] = substr($w, 0, -1); /* light stem: cats→cat */
}
return array_values(array_unique($tokens));
}
function source_lanes(): array {
/* LM/RM/LV/RV: finish-32 slant — polished how-its-made / mind-expanding / anti-psyop pattern DNA.
* NM/NV: NSFW harvest seed width (see NM GUARDRAIL below). Optional ON/ONLY densifier. */
return [
'LM' => ['kind' => 'reddit', 'side' => 'L', 'intensity' => 'safe', 'terms' => [
'educationalgifs','mechanical_gifs','chemicalreactiongifs','physicsgifs','ScienceGIFs','EngineeringPorn','MachinePorn','ToolPorn','thingscutinhalfporn','howitsmade',
'Simulated','virtualreality','perfectloops','BetterEveryLoop','HighQualityGifs','Cinemagraphs','oddlysatisfying','nonononoyes','nevertellmetheodds','Perfectfit',
'slowmo','timelapse','science','askscience','Physics','chemistry','biology','math','theydidthemath','dataisbeautiful',
'MapPorn','coolguides','explainlikeimfive','todayilearned','YouShouldKnow','Awwducational','space','nasa','Astronomy','astrophotography',
'geology','Archaeology','ArtefactPorn','Paleontology','Medicine','anatomy','neuroscience','DIY','howto','woodworking',
'metalworking','machinists','3Dprinting','functionalprint','FixIt','HomeImprovement','architecture','ArchitecturePorn','Design','graphic_design',
'IndustrialDesign','typography','Calligraphy','ArtisanVideos','handtools','sewing','Pottery','skeptic','CriticalThinking','PropagandaPosters',
'propaganda','media_criticism','TrueReddit','DepthHub','Foodforthought','philosophy','AskHistorians','history','Documentaries','GetStudying',
'LearnUselessTalents','languagelearning','compsci','learnprogramming','MachineLearning','raspberry_pi','hardware','buildapc','gadgets','Futurology',
'singularity','InternetIsBeautiful','programming','algorithms','statistics','datascience','NatureIsFuckingLit','EarthPorn','spaceporn','WeatherPorn',
'VillagePorn','CityPorn','InfrastructurePorn','aviation','trains','Damnthatsinteresting','interestingasfuck','beamazed','woahdude','optics',
'microscopy','colorizedhistory','OldSchoolCool','nextfuckinglevel','toptalent','SkillPorn','specializedtools','LifeProTips','productivity','getdisciplined',
'nutrition','bodyweightfitness','running','flexibility','Whatcouldgowrong','CatastrophicFailure','proceduralgeneration','mathart','FractalPorn','geometryporn',
'museum','lectures','askengineers','EverythingScience','Simulators','kinematics','Robotics','automation','metrology','CNC',
'blacksmithing','glassblowing','welding','castiron','Precision','measurement','standards','ISO','qualitycontrol','SixSigma',
'leanmanufacturing','supplychain','logistics','shipping','containers','bridges','tunnels','dams','powerwashingporn','satisfying',
]],
'RM' => ['kind' => 'reddit', 'side' => 'R', 'intensity' => 'safe', 'terms' => [
'ArtPorn','MuseumPorn','DesignPorn','ArchitecturePorn','RoomPorn','CozyPlaces','InteriorDesign','ArtisanVideos','somethingimade','handmade',
'ceramics','Pottery','woodworking','Leathercraft','blacksmithing','Glassblowing','MetalWorking','knitting','crochet','weaving',
'embroidery','calligraphy','penmanship','Filmmakers','cinematography','MovieDetails','TrueFilm','animation','PixelArt','DigitalPainting',
'painting','learntodraw','ArtFundamentals','ConceptArt','illustration','graphic_design','typography','logodesign','product_design','IndustrialDesign',
'EarthPorn','NatureIsFuckingLit','naturegifs','AnimalsBeingDerps','AnimalsBeingBros','HardcoreNature','Orchids','succulents','bonsai','Aquariums',
'mycology','Botany','whatsthisplant','Astronomy','astrophotography','spaceporn','SkyPorn','CloudPorn','classicalmusic','Jazz',
'musictheory','WeAreTheMusicMakers','AudioEngineering','synthesizers','piano','Guitar','Music','listentothis','woahdude','perfectloops',
'oddlysatisfying','Cinemagraphs','LoadingIcon','glitch_art','generative','proceduralgeneration','mathart','FractalPorn','geometryporn','OpticalIllusions',
'confusing_perspective','Pareidolia','DepthHub','Foodforthought','philosophy','Stoicism','Meditation','Mindfulness','BuyItForLife','simpleliving',
'minimalism','homestead','permaculture','fermentation','Baking','Cooking','AskCulinary','recipes','Coffee','tea',
'Documentaries','explainlikeimfive','todayilearned','Damnthatsinteresting','beamazed','interestingasfuck','Awwducational','educationalgifs','coolguides','MapPorn',
'HistoryPorn','ColorizedHistory','OldSchoolCool','CathedralPorn','AbandonedPorn','PropagandaPosters','propaganda','media_criticism','skeptic','CriticalThinking',
'Photography','itookapicture','analog','AskPhotography','MacroPorn','ExposurePorn','Portraiture','StreetPhotography','Eyebleach','aww',
'MadeMeSmile','HumansBeingBros','GetMotivated','nextfuckinglevel','toptalent','SkillPorn','Satisfyingasfuck','ambientmusic','lofi','ArtisanGifs',
'powerwashingporn','VillagePorn','RuralPorn','IslandPorn','WaterPorn','BeachPorn','WinterPorn','AutumnPorn','design','Museum',
'sculpture','printmaking','watercolor','oilpainting','drawing','sketching','composition','color','palette','atelier',
'masterclass','craftsmanship','handtools','bespoke','slowfashion','tailoring','shoemaking','horology','Watches','clockmaking',
'luthier','violinmaking',
]],
/*
* =====================================================================
* NM GUARDRAIL — PSYOPS RULEBOOK (DO NOT “CLEAN” THIS LIST)
* =====================================================================
* YES we harvest sketchy / extreme-branded / taboo-caption subs.
* Seed width is intentional product DNA. Relatedness roleplay, degrade
* branding, rough labels, franchise R34, leaks-as-subs, etc. stay here
* unless a HUMAN explicitly names a one-line cut (e.g. guro, Afrodisiac).
*
* Filtering is NOT done by deleting harvest seeds for purity/morals.
* Downstream item gates + optional LLM review handle real host-kill
* (actual minors, real snuff, real bestiality, malware). Sketchy labels
* on adult media are NOT that class — see operator psyops doctrine.
*
* Agents: EDIT > invent. Do NOT re-run finish-29 purity theater on NM.
* Do NOT strip incestporn / snapleaks / pokeporn / rough / kink brands
* “because they sound bad.” Count terms before/after; net removals of
* sketchy seeds without human GO are a refuse.
* Human-only intentional NM cuts as of 2026-07-14: guro, Afrodisiac,
* itshiptofuckbees. Everything else in this array is load-bearing width.
* =====================================================================
*/
'NM' => ['kind' => 'reddit', 'side' => 'N', 'intensity' => 'nsfw', 'terms' => [
'bodyperfection','fauxbait','incestporn','missalice_18','gonewild18','18_19','legalteensXXX','collegesluts','legalteens','fitgirls',
'athleticgirls','SexyTummies','theratio','BustyPetite','datgap','thighhighs','stockings','ComplexionExcellence','tanlines','nsfwfashion',
'leotards','ZettaiRyouiki','thighdeology','simps','innie','godpussy','torpedotits','2busty2hide','page3glamour','biggerthanyouthought',
'LabiaGW','presenting','moundofvenus','pussymound','Ohlympics','volleyballgirls','Athlete','tightdresses','garterbelts','tightshorts',
'sexyfrex','workgonewild','GoneWildScrubs','militarygonewild','fitgirlsfucking','highresNSFW','NSFW_HTML5','samespecies','OnOff','bikinibridge',
'hugeboobs','stacked','burstingout','bigtiddygothgf','engorgedveinybreasts','BigBoobsGW','bigboobsgonewild','dirtysmall','petitegonewild','xsmallgirls',
'funsized','nsfwoutfits','lingerie','bikinis','nsfwcosplay','nsfwcostumes','girlsinschooluniforms','WtSSTaDaMiT','upskirt','leggingsgonewild',
'ass','asstastic','facedownassup','assinthong','bigasses','TheUnderbun','booty','cutelittlebutts','HungryButts','celebritybutts',
'cosplaybutts','pussy','rearpussy','pelfie','hairypussy','lipsthatgrip','curvy','thick','voluptuous','SlimThick',
'thicker','thickthighs','tightsqueeze','casualjiggles','bbw','chubby','massivetitsnass','NSFW_GIF','nsfw_gifs','porn_gifs',
'porninfifteenseconds','the_best_nsfw_gifs','SheLikesItRough','breedingmaterial','stupidslutsclub','femaleorgasmdenial','cumsluts','amateurcumsluts','cumfetish',
'cumcoveredfucking','thickloads','before_after_cumsluts','pulsatingcumshots','impressedbycum','cumonclothes','FacialFun','creampies','oralcreampie','GirlsFinishingTheJob',
'jigglefuck','whenitgoesin','pronebone','nsfw_plowcam','forcedorgasms','damselsindistress','cuffed','gagged','girlscontrolled','borednignored',
'annoyedtobenude','blackchickswhitedicks','amateurgirlsbigcocks','ruinedorgasms','sounding','SCPORN','fedlegs','cummingonfigurines','randomactsofblowjob','dirtykikpals',
'randomactsofmuffdive','hotwife','iWantToFuckHer','distension','dirtygaming','omgbeckylookathiscock','riskyporn','Camwhores','camsluts','tiktokliveslip',
'snapleaks','NSFW_Snapchat','tentai','ahegao','ahegao_irl','hypnohentai','hentaibondage','hentaifemdom','buttplug','mooning',
'AssholeBehindThong','bdsmgw','BDSMcommunity','BDSM','Bondage','deepthroat','blowjobsandwich','onherknees','outercourse','facesitting',
'holdingit','baddragon','selffuck','gaykink','gayBDSMcommunity','sexinfrontofothers','socialmediasluts','dirtysnapchat','sextrophies','anal',
'asshole','spreadem','bendover','assholegonewild','analgw','fucklicking','adorableporn','gonewildsmiles','HappyEmbarrassedGirls','passionx',
'gonewild','realgirls','amateur','normalnudes','CollegeAmateurs','randomsexiness','funwithfriends','nsfw_amateurs','gonewildstories','gonemild',
'altgonewild','gifsgonewild','goneerotic','GWNerdy','GWCouples','gonewildcouples','gonewildcurvy','GoneWildplus','AsiansGoneWild','gonewildcolor',
'indiansgonewild','latinasgw','gonewild30plus','onmww','pawgtastic','toocuteforporn','justhotwomen','realsexyselfies','uncommonposes','gifsofremoval',
'nostalgiafapping','oilporn','bisexy','milf','realmoms','PornStarletHQ','AsianHotties','realasians','AsianNSFW','asianporn',
'bustyasians','paag','juicyasians','IndianBabes','NSFW_Japan','kpopfap','WomenOfColor','darkangels','ebony',
'latinas','latinacuties','snowwhites','pawg','celebnsfw','WatchItForThePlot','extramile','onoffcelebs','damngoodinterracial','sexybutnotporn',
'femalepov','sexygirls','yogapants','girlsinyogapants','Hotchickswithtattoos','ginger','redheads','palegirls','WesternHentai','artistic_hentai',
'GirlswithNeonHair','nsfw','porn','nsfw411','TipOfMyPenis','dirtypenpals','FestivalSluts','homemadexxx','christiangirls','stripgirls',
'treesgonewild','gonewildaudio','onstageGW','RepressedGoneWild','UnderwearGW','TributeMe','WeddingsGoneWild','gonewildhairy','gonewildtrans','gonwild',
'ratemynudebody','swingersgw','mycleavage','braceface','earspokingout','shorthairchicks','legs','buttsandbarefeet','feet','pokies',
'ghostnipples','nipples','puffies','lactation','tinytits','aa_cups','boobies','TittyDrop','boltedontits','boobbounce',
'boobs','downblouse','homegrowntits','breastenvy','youtubetitties','thehangingboobs','twingirls','groupofnudegirls','Ifyouhadtopickone','nsfwhardcore',
'sarah_xxx','remylacroix','Anjelica_Ebbi','BlancNoir','rileyreid','dollywinks','tessafowler','lilyivy','funsizedasian','mycherrycrush',
'gillianbarnes','kawaiikitten','emilybloom','legendarylootz','sexyflowerwater','miamalkova','sashagrey','keriberry_420','justpeachyy','angelawhite',
'miakhalifa','alexapearl','evalovia','GiannaMichaels','arianamarie','lesbians','StraightGirlsPlaying','girlskissing','mmgirls','dykesgonewild',
'facesittinglesbians','holdthemoan','O_faces','jilling','gettingherselfoff','quiver','GirlsHumpingThings','grool','squirting','ladybonersgw',
'massivecock','chickflixxx','gaybrosgonewild','sissies','girlswithglasses','collared','seethru','sweatermeat','cfnm','thongs',
'suicidegirls','ChangingRooms','FlashingGirls','publicflashing','NotSafeForNature','gwpublic','realpublicnudity','flashingandflaunting','Tgirls','traps',
'futanari','tgifs','gaysex','topsandbottoms','lgbtsex','gaybears','LGBTgonewild','bigonewild','gayNSFW','gaymersgonewild',
'pornvids','nsfw_videos','NSFWFunny','pornhubcomments','sluttyconfessions','Quarantinegonewild','celebrityarmpits','armpitfetish','hentai','hentai_gif',
'hentai_irl','rule34','rule34_comics','sex_comics','ecchi','doujinshi','yiff','monstergirl','mechanicalsluts','overwatch_porn',
'pokeporn','bowsette','rule34lol','rule34overwatch','nintendowaifus','34honor','fivefapsatfreddys','breathofthegonewild','animalcrossingr34','apexlegends_porn',
'tflewd','thelostwoods','traphentai','handholding','honeyfuckers','kuroihada','2dtittytouching','buttfangs','yuri',
'chiisaihentai','waifusgonewild','animeshorts','thighhighhentai','animebooty','swimsuithentai','animelegs','animearmpits','2dsuccubi','animemidriff',
'skindentation','bokunoeroacademia','sideoppai','blowjobs','suctiondildos','furryporn','ZootopiaPorn','yiffgif','FurryPornSubreddit','gfur',
'femyiff','gayfurryporn','yiffcomics','Sharktits','ArousingAvians','anthroids','anthropokeporn','FeralPokePorn','FurryFrot','GayPokePorn',
'WholesomeYiff','amateurporn','classysexy','goddesses',
]],
'LV' => ['kind' => 'archive', 'side' => 'L', 'intensity' => 'safe', 'terms' => [
'how its made','manufacturing process','engineering documentary','scientific method','physics lecture','chemistry demonstration','mathematics explained','systems design','industrial design process','architecture explained','craftsmanship tutorial','optical illusion science','data visualization','critical thinking','media literacy','propaganda analysis','history documentary','museum tour','space documentary','biology microscopy','geology explained','logic and reasoning','computer science lecture','infrastructure engineering','precision manufacturing','tool making','experimental method','nature systems','anatomy lesson','cognitive science'
]],
'RV' => ['kind' => 'archive', 'side' => 'R', 'intensity' => 'safe', 'terms' => [
'art process','masterclass painting','cinematography','film craft','music theory','instrument making','design documentary','creative process','aesthetic philosophy','animation process','sculpture process','calligraphy','printmaking','photography craft','architecture beauty','nature cinematography','dance craft','color theory','composition','museum art','studio process','artisan craft','visual rhythm','experimental film','sound design','visual poetry','handcrafted','atelier process','perfect form','craftsmanship'
]],
'NV' => ['kind' => 'archive', 'side' => 'N', 'intensity' => 'nsfw', 'terms' => [
'erotic','nude','sensual','mature','adult','nudity','striptease','burlesque','vintage adult','softcore','exploitation','cheesecake','pinup','figure study','art nude','classic erotic','sensual art','erotic art','nude art','vintage pinup','burlesque performance','exotic dance','lingerie','glamour','boudoir','figure drawing model','nude photography'
]],
];
}
function clean_bucket_id(string $id): string {
return substr(preg_replace('/[^a-zA-Z0-9_\-]/', '', $id) ?? '', 0, 80);
}
function medium_from_lane(string $lane): string {
$lane = strtoupper($lane);
$m = substr($lane, -1);
return in_array($m, ['M','V','H'], true) ? $m : 'M';
}
function bucket_basis_seed(): array {
$rows = [
['LH','L','H','safe','Left Brain Pages','local',false,['nosignup info','attack vector','inoculation','coercive control','pattern recognition','defensive taxonomy']],
['LM','L','M','safe','Left Brain Memes','reddit',true,['educationalgifs','mechanical_gifs','howitsmade','EngineeringPorn','ScienceGIFs','dataisbeautiful','coolguides','theydidthemath','CriticalThinking','PropagandaPosters','space','Damnthatsinteresting']],
['LV','L','V','safe','Left Brain Videos','archive',true,['how its made','engineering documentary','scientific method','critical thinking','media literacy','systems design','precision manufacturing','physics lecture']],
['RH','R','H','safe','Right Brain Pages','local',false,['grounding','anti dissociation','beauty','rhythm','creativity','agency','sensory orientation']],
['RM','R','M','safe','Right Brain Memes','reddit',true,['ArtPorn','MuseumPorn','ArtisanVideos','perfectloops','oddlysatisfying','cinematography','EarthPorn','NatureIsFuckingLit','DigitalPainting','somethingimade','classicalmusic','toptalent']],
['RV','R','V','safe','Right Brain Videos','archive',true,['art process','cinematography','music theory','craftsmanship','design documentary','atelier process','nature cinematography','color theory']],
['NH','N','H','mixed','Neutral Edge Pages','local',false,['boundary','consent','adult safety','neutral edge','arousal reset','exit path']],
['NM','N','M','nsfw','Neutral Edge Memes','reddit',true,['bodyperfection','fitgirls','athleticgirls','SexyTummies','theratio','BustyPetite','datgap','RealGirls','gonewild','OnOff','NSFW_GIF','adorableporn']],
['NV','N','V','nsfw','Neutral Edge Videos','archive',true,['erotic','sensual','mature','adult','burlesque','vintage adult','softcore','pinup','figure study','art nude']],
];
$out = [];
foreach ($rows as $row) {
[$id, $side, $medium, $intensity, $title, $kind, $harvestable, $terms] = $row;
$out[$id] = [
'id' => $id,
'kind' => 'seed',
'status' => 'active',
'title' => $title,
'side' => $side,
'medium' => $medium,
'intensity' => $intensity,
'source_kind' => $kind,
'harvestable' => $harvestable ? 1 : 0,
'adapter_lane' => isset(source_lanes()[$id]) ? $id : '',
'seed_terms' => $terms,
'pressure' => 1.0,
'created_at' => '2026-06-27T00:00:00Z',
'lineage' => ['original-hud-bucket'],
];
}
return $out;
}
function item_medium(array $item): string {
$medium = strtoupper((string)($item['medium'] ?? ''));
if (in_array($medium, ['M','V','H'], true)) return $medium;
$lane = strtoupper((string)($item['lane'] ?? ''));
if (preg_match('/^[LRN][MVH]$/', $lane)) return medium_from_lane($lane);
$type = (string)($item['type'] ?? '');
if ($type === 'video') return 'V';
if ($type === 'image') return 'M';
if (str_contains($type, 'vector') || str_contains($type, 'svg') || str_contains($type, 'parameter')) return 'H';
return 'M';
}
function item_side(array $item): string {
$side = strtoupper((string)($item['side'] ?? ''));
if (in_array($side, ['L','R','N'], true)) return $side;
$lane = strtoupper((string)($item['lane'] ?? ''));
if (preg_match('/^[LRN][MVH]$/', $lane)) return $lane[0];
return ((string)($item['intensity'] ?? 'safe')) === 'nsfw' ? 'N' : 'L';
}
function item_bucket(array $item): string {
$bucket = clean_bucket_id((string)($item['bucket'] ?? ''));
if ($bucket !== '') return $bucket;
$lane = strtoupper((string)($item['lane'] ?? ''));
if (preg_match('/^[LRN][MVH]$/', $lane)) return $lane;
return item_side($item) . item_medium($item);
}
function item_flow_folder(array $item, string $bucketId = ''): array {
$bucketId = clean_bucket_id($bucketId !== '' ? $bucketId : item_bucket($item));
if ($bucketId === '') $bucketId = item_side($item) . item_medium($item);
$subreddit = trim((string)($item['subreddit'] ?? ''));
if ($subreddit !== '') {
$slug = clean_bucket_id(strtolower($subreddit));
if ($slug !== '') return ['key' => $bucketId . '__r_' . $slug, 'title' => 'r/' . $subreddit];
}
$identifier = trim((string)($item['identifier'] ?? ''));
if ($identifier !== '') {
$slug = clean_bucket_id(strtolower($identifier));
if ($slug !== '') return ['key' => $bucketId . '__ia_' . $slug, 'title' => 'archive/' . $identifier];
}
$source = trim((string)($item['source'] ?? ''));
if ($source === '') {
$host = parse_url((string)($item['source_url'] ?? ''), PHP_URL_HOST);
$source = is_string($host) ? $host : '';
}
if ($source !== '') {
$slug = clean_bucket_id(strtolower($source));
if ($slug !== '') return ['key' => $bucketId . '__src_' . $slug, 'title' => $source];
}
return ['key' => $bucketId, 'title' => $bucketId];
}
function side_weights_for_item(array $item): array {
$side = item_side($item);
if (isset($item['side_weights']) && is_array($item['side_weights'])) {
return [
'L' => max(0.0, min(1.0, (float)($item['side_weights']['L'] ?? 0))),
'R' => max(0.0, min(1.0, (float)($item['side_weights']['R'] ?? 0))),
'N' => max(0.0, min(1.0, (float)($item['side_weights']['N'] ?? 0))),
];
}
return ['L' => $side === 'L' ? 1.0 : 0.0, 'R' => $side === 'R' ? 1.0 : 0.0, 'N' => $side === 'N' ? 1.0 : 0.0];
}
function normalize_item_taxonomy(array $item): array {
$item['side'] = item_side($item);
$item['medium'] = item_medium($item);
$item['bucket'] = item_bucket($item);
$item['side_weights'] = side_weights_for_item($item);
if (!isset($item['lineage']) || !is_array($item['lineage'])) {
$item['lineage'] = [(string)($item['source'] ?? 'local corpus')];
}
return $item;
}
function harvest_lane_for_bucket(array $bucket): string {
$adapter = strtoupper((string)($bucket['adapter_lane'] ?? ''));
if (isset(source_lanes()[$adapter])) return $adapter;
$side = in_array((string)($bucket['side'] ?? ''), ['L','R','N'], true) ? (string)$bucket['side'] : 'L';
$medium = in_array((string)($bucket['medium'] ?? ''), ['M','V','H'], true) ? (string)$bucket['medium'] : 'M';
$lane = $side . ($medium === 'V' ? 'V' : 'M');
return isset(source_lanes()[$lane]) ? $lane : ($side === 'N' ? 'NM' : $side . 'M');
}
function source_popularity_prior(array $item): int {
$ups = max(0, (int)($item['ups'] ?? 0));
$downloads = max(0, (int)($item['downloads'] ?? 0));
$saves = max(0, (int)($item['user_saves'] ?? 0));
$rank = max(0, (int)($item['rank_hint'] ?? 0));
return min(10, (int)floor(log(max(1, $ups), 2) / 2) + (int)floor(log(max(1, $downloads), 2) / 3) + min(4, $saves * 2) + min(3, (int)floor($rank / 300)));
}
function bucket_stats(array $catalog, array $votes, array $comments): array {
$stats = [];
foreach ($catalog as $item) {
if (!is_array($item)) continue;
$item = normalize_item_taxonomy($item);
$id = (string)($item['id'] ?? item_id($item));
$vote = vote_record($votes, $id);
if (!empty($vote['dead'])) continue;
$bucket = item_bucket($item);
if (!isset($stats[$bucket])) $stats[$bucket] = ['items' => 0, 'up' => 0, 'down' => 0, 'comments' => 0, 'pressure' => 0.0];
$up = (int)($item['upvotes'] ?? 0) + (int)$vote['up'];
$down = (int)($item['downvotes'] ?? 0) + (int)$vote['down'];
$activity = comment_activity_score($comments, $id);
$stats[$bucket]['items']++;
$stats[$bucket]['up'] += $up;
$stats[$bucket]['down'] += $down;
$stats[$bucket]['comments'] += $activity;
$voteSignal = max(0, $up - $down);
$sourceSignal = source_popularity_prior($item);
$activitySignal = $activity * 2;
$freshSignal = max(0.0, min(3.0, days_left($item, $votes) / max(1, TTL_DAYS) * 3.0));
$rankSignal = zipf_rank_bonus((int)($item['rank_hint'] ?? 0), 3.0);
$stats[$bucket]['pressure'] += golden_score((float)$voteSignal, (float)$sourceSignal, (float)$activitySignal, $freshSignal, $rankSignal);
}
return $stats;
}
function load_bucket_registry(string $file, array $catalog = [], array $votes = [], array $comments = []): array {
$buckets = bucket_basis_seed();
$data = read_json_file($file, []);
if (isset($data['buckets']) && is_array($data['buckets'])) {
foreach ($data['buckets'] as $id => $bucket) {
if (!is_array($bucket)) continue;
$bid = clean_bucket_id((string)($bucket['id'] ?? $id));
if ($bid === '') continue;
$buckets[$bid] = isset($buckets[$bid]) ? array_merge($buckets[$bid], $bucket, ['id' => $bid]) : array_merge(['id' => $bid, 'kind' => 'theme', 'status' => 'active'], $bucket, ['id' => $bid]);
}
}
$stats = $catalog ? bucket_stats($catalog, $votes, $comments) : [];
foreach ($buckets as $id => &$bucket) {
$bucket['id'] = $id;
$bucket['side'] = in_array((string)($bucket['side'] ?? ''), ['L','R','N'], true) ? (string)$bucket['side'] : 'L';
$bucket['medium'] = in_array((string)($bucket['medium'] ?? ''), ['M','V','H'], true) ? (string)$bucket['medium'] : medium_from_lane((string)($bucket['adapter_lane'] ?? 'LM'));
$bucket['intensity'] = in_array((string)($bucket['intensity'] ?? ''), ['safe','nsfw','mixed'], true) ? (string)$bucket['intensity'] : 'safe';
$bucket['status'] = (string)($bucket['status'] ?? 'active');
$bucket['seed_terms'] = array_values(array_unique(array_slice(array_map('strval', (array)($bucket['seed_terms'] ?? [])), 0, 40)));
$bucket['adapter_lane'] = harvest_lane_for_bucket($bucket);
$bucket['harvestable'] = isset(source_lanes()[$bucket['adapter_lane']]) ? (int)($bucket['harvestable'] ?? 1) : 0;
$s = $stats[$id] ?? ['items' => 0, 'up' => 0, 'down' => 0, 'comments' => 0, 'pressure' => 0.0];
$bucket['item_count'] = (int)$s['items'];
$bucket['up'] = (int)$s['up'];
$bucket['down'] = (int)$s['down'];
$bucket['comment_pressure'] = (int)$s['comments'];
$bucket['pressure'] = round(max(0.25, (float)($bucket['pressure'] ?? 1.0)) + (float)$s['pressure'], 3);
}
unset($bucket);
return [
'schema' => 'nosignup.fun.bucket-registry.v1',
'updated_at' => (string)($data['updated_at'] ?? now_iso()),
'buckets' => $buckets,
];
}
function bucket_public_registry(array $registry): array {
$out = [];
foreach (($registry['buckets'] ?? []) as $id => $bucket) {
if (!is_array($bucket)) continue;
$out[$id] = [
'title' => (string)($bucket['title'] ?? $id),
'kind' => (string)($bucket['kind'] ?? 'seed'),
'status' => (string)($bucket['status'] ?? 'active'),
'side' => (string)($bucket['side'] ?? ''),
'medium' => (string)($bucket['medium'] ?? ''),
'intensity' => (string)($bucket['intensity'] ?? ''),
'adapter_lane' => (string)($bucket['adapter_lane'] ?? ''),
'harvestable' => (int)($bucket['harvestable'] ?? 0),
'item_count' => (int)($bucket['item_count'] ?? 0),
'pressure' => (float)($bucket['pressure'] ?? 0),
'up' => (int)($bucket['up'] ?? 0),
'down' => (int)($bucket['down'] ?? 0),
'seed_terms' => array_values(array_slice((array)($bucket['seed_terms'] ?? []), 0, 12)),
'parent_item_id' => (string)($bucket['parent_item_id'] ?? ''),
];
}
return $out;
}
function theme_terms_from_item(array $item): array {
$text = strtolower((string)($item['title'] ?? '') . ' ' . implode(' ', (array)($item['tags'] ?? [])) . ' ' . (string)($item['subreddit'] ?? ''));
preg_match_all('/[a-z0-9][a-z0-9\-]{2,30}/', $text, $m);
$terms = [];
$fullTitle = strtolower(trim(preg_replace('/\s+/', ' ', (string)($item['title'] ?? '')) ?? ''));
if ($fullTitle !== '') $terms[] = $fullTitle;
foreach (($m[0] ?? []) as $word) {
if (in_array($word, ['the','and','for','with','from','this','that','local','reference','nosignup','fun'], true)) continue;
$terms[] = $word;
if (count($terms) >= 18) break;
}
return array_values(array_unique($terms ?: ['nosignup fun']));
}
function bucket_id_for_theme(array $item): string {
return 'theme_' . substr(hash('sha256', (string)($item['id'] ?? item_id($item)) . '|' . (string)($item['title'] ?? '')), 0, 12);
}
function source_registry_seed(): array {
return [
'schema' => 'nosignup.fun.source-registry.v1',
'generated_at' => now_iso(),
'sources' => [
'reddit' => [
'id' => 'reddit',
'kind' => 'reddit',
'status' => 'active',
'health' => 1.0,
'adapter' => 'harvest_reddit_lane',
'lanes' => ['LM','RM','NM'],
'popularity_signals' => ['ups','comments','upvote_ratio','recency_velocity'],
'failure_policy' => 'degrade and use reddit_gimme_fallback',
'notes' => 'Direct Reddit JSON source. Popularity is source-native; adult flags force N side.',
],
'reddit_gimme_fallback' => [
'id' => 'reddit_gimme_fallback',
'kind' => 'reddit_fallback',
'status' => 'active',
'health' => 0.82,
'adapter' => 'harvest_reddit_lane:fallback',
'lanes' => ['LM','RM','NM'],
'popularity_signals' => ['ups','source_presence'],
'failure_policy' => 'degrade; keep deterministic local catalog if unavailable',
'notes' => 'Fallback for Reddit-derived media when direct JSON blocks or rate-limits.',
],
'archive_org' => [
'id' => 'archive_org',
'kind' => 'archive',
'status' => 'active',
'health' => 1.0,
'adapter' => 'harvest_archive_lane',
'lanes' => ['LV','RV','NV'],
'popularity_signals' => ['downloads','metadata_quality','license_hint'],
'failure_policy' => 'degrade and rotate query terms',
'notes' => 'Long-lived public media archive. Prefer downloadable media with auditable metadata.',
],
'user_assisted' => [
'id' => 'user_assisted',
'kind' => 'user_harvest',
'status' => 'active',
'health' => 1.0,
'adapter' => 'handle_user_harvest',
'lanes' => ['LM','RM','NM','LV','RV','NV'],
'popularity_signals' => ['repeat_submissions','shared_comments','source_metadata','local_votes'],
'failure_policy' => 'reject unsafe URLs; keep existing catalog if validation fails',
'notes' => 'Visitors can paste source/media URLs. The ledger stores aggregate provenance only, never identity.',
],
'public_random_web' => [
'id' => 'public_random_web',
'kind' => 'random_public',
'status' => 'candidate',
'health' => 0.34,
'adapter' => 'future_public_random_adapter',
'lanes' => ['LM','RM','NM','LV','RV','NV'],
'popularity_signals' => ['public_reach','source_metadata','repeat_discovery','local_votes'],
'failure_policy' => 'hard-reject captcha/login/paywall/executables/malware/minors/nonconsensual material; quarantine before publish',
'notes' => 'Bounded true-random public discovery: dial random public doors, keep only candidates that pass deterministic validation.',
],
'deep_chaos_public' => [
'id' => 'deep_chaos_public',
'kind' => 'deep_chaos',
'status' => 'disabled',
'health' => 0.10,
'adapter' => 'future_deep_chaos_adapter',
'lanes' => ['LM','RM','NM','LV','RV','NV'],
'popularity_signals' => ['survives_quarantine','advisor_agreement','local_votes'],
'failure_policy' => 'disabled until bounded public fetcher exists; no Tor-specific dependency; CAPTCHA/auth means skip',
'notes' => 'Deep chaos means rare public-random exploration, not a heavy Tor integration.',
],
'free_ai_advisors' => [
'id' => 'free_ai_advisors',
'kind' => 'ai_advisor',
'status' => 'candidate',
'health' => 0.25,
'adapter' => 'future_no_signup_ai_adapter',
'lanes' => ['LM','RM','NM','LV','RV','NV'],
'popularity_signals' => ['latency','answer_shape','agreement','friction'],
'failure_policy' => 'ask harmless text-only classification questions; never send private data or unknown raw media',
'notes' => 'Optional public no-signup A.I. advisors. Their answers are advisory, never gates.',
],
'wikimedia_commons' => [
'id' => 'wikimedia_commons',
'kind' => 'candidate',
'status' => 'candidate',
'health' => 0.60,
'adapter' => 'future_wikimedia_adapter',
'lanes' => ['LM','RM','LV','RV'],
'popularity_signals' => ['usage_count','metadata_quality','license'],
'failure_policy' => 'validate before active use',
'notes' => 'Candidate replacement/backup source for durable public-domain/CC educational and visual media.',
],
'openverse' => [
'id' => 'openverse',
'kind' => 'candidate',
'status' => 'candidate',
'health' => 0.55,
'adapter' => 'future_openverse_adapter',
'lanes' => ['LM','RM','LV','RV'],
'popularity_signals' => ['provider','license','metadata_quality'],
'failure_policy' => 'validate before active use',
'notes' => 'Candidate discovery index for openly licensed media; not active until validator exists.',
],
],
];
}
function load_source_registry(string $file): array {
$seed = source_registry_seed();
$data = read_json_file($file, []);
if (!isset($data['sources']) || !is_array($data['sources'])) return $seed;
foreach ($seed['sources'] as $id => $src) {
if (!isset($data['sources'][$id]) || !is_array($data['sources'][$id])) $data['sources'][$id] = $src;
else $data['sources'][$id] = array_merge($src, $data['sources'][$id]);
}
$data['schema'] = $seed['schema'];
return $data;
}
function save_source_registry(string $file, array $registry): bool {
$registry['updated_at'] = now_iso();
return write_json_file($file, $registry);
}
function touch_source_health(array &$registry, string $id, bool $ok, string $note = ''): void {
if (!isset($registry['sources'][$id]) || !is_array($registry['sources'][$id])) return;
$src = $registry['sources'][$id];
$health = (float)($src['health'] ?? 0.5);
$failStreak = max(0, (int)($src['fail_streak'] ?? 0));
$okStreak = max(0, (int)($src['ok_streak'] ?? 0));
if ($ok) {
$failStreak = 0;
$okStreak++;
$health = min(1.0, $health + 0.05);
$src['status'] = 'active';
$src['last_success_at'] = now_iso();
} else {
$okStreak = 0;
$failStreak++;
/* High stickiness: tiny decay while under threshold; demote only at ~500 consecutive fails */
if ($failStreak >= SOURCE_FAIL_STICKINESS * 2) {
$health = max(0.0, $health - 0.08);
$src['status'] = 'disabled';
} elseif ($failStreak >= SOURCE_FAIL_STICKINESS) {
$health = max(0.05, $health - 0.04);
$src['status'] = 'degraded';
} else {
$health = max(0.35, $health - 0.001);
$cur = (string)($src['status'] ?? 'active');
if ($cur !== 'disabled') $src['status'] = 'active';
}
$src['last_failure_at'] = now_iso();
}
$src['health'] = round($health, 3);
$src['fail_streak'] = $failStreak;
$src['ok_streak'] = $okStreak;
$src['stickiness'] = SOURCE_FAIL_STICKINESS;
if ($note !== '') $src['last_note'] = substr($note, 0, 180);
$registry['sources'][$id] = $src;
}
function source_registry_public(array $registry): array {
$out = [];
foreach (($registry['sources'] ?? []) as $id => $src) {
if (!is_array($src)) continue;
$out[$id] = [
'status' => $src['status'] ?? 'unknown',
'health' => $src['health'] ?? 0,
'kind' => $src['kind'] ?? '',
'lanes' => $src['lanes'] ?? [],
'signals' => $src['popularity_signals'] ?? [],
'last_success_at' => $src['last_success_at'] ?? '',
'last_failure_at' => $src['last_failure_at'] ?? '',
'last_note' => $src['last_note'] ?? '',
'fail_streak' => (int)($src['fail_streak'] ?? 0),
'ok_streak' => (int)($src['ok_streak'] ?? 0),
'stickiness' => (int)($src['stickiness'] ?? SOURCE_FAIL_STICKINESS),
];
}
return $out;
}
function media_type_from_url(string $url): string {
if (preg_match('/^index\.php\?media=/i', $url)) return 'image';
if (preg_match('/\.(mp4|webm|mov|m4v|mpeg|mpg|ogv)(?:$|\?)/i', $url)) return 'video';
if (preg_match('/\.(jpg|jpeg|png|gif|gifv|webp|bmp|ico|tif|tiff|avif|heif|heic)(?:$|\?)/i', $url)) return 'image';
if (preg_match('/\/\/(i|preview)\.redd\.it\//i', $url)) return 'image';
return '';
}
function media_url_ok(string $url): bool {
if (preg_match('/^index\.php\?media=[a-zA-Z0-9_\-.]+$/', $url)) return true;
if (!preg_match('/^https?:\/\//i', $url)) return false;
return media_type_from_url($url) !== '';
}
function media_filename_ok(string $name): bool {
/* gif allowed: animated ≤150KB path writes .gif local derivatives */
return (bool)preg_match('/^[a-zA-Z0-9_\-]{12,80}\.(webp|jpg|jpeg|png|gif)$/', $name);
}
function render_runtime_media(string $mediaDir, string $name): void {
$name = basename($name);
if (!media_filename_ok($name)) {
http_response_code(404);
echo 'not found';
return;
}
$file = $mediaDir . DIRECTORY_SEPARATOR . $name;
if (!is_file($file)) {
http_response_code(404);
echo 'not found';
return;
}
$ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
if ($ext === 'gif') $mime = 'image/gif';
elseif ($ext === 'webp') $mime = 'image/webp';
elseif ($ext === 'png') $mime = 'image/png';
else $mime = 'image/jpeg';
header('Content-Type: ' . $mime);
header('Cache-Control: public, max-age=31536000, immutable');
header('Content-Length: ' . (string)filesize($file));
readfile($file);
}
function image_create_from_bytes(string $bytes, string &$why = '') {
if (!function_exists('imagecreatefromstring')) {
$why = 'PHP GD imagecreatefromstring unavailable';
return false;
}
$im = @imagecreatefromstring($bytes);
if (!$im) $why = 'image decode failed';
return $im;
}
function image_compression_policy_text(): string {
return 'image media must be saved only as a local derivative inside the current resource-derived canvas pixel/byte budget; original URLs remain provenance only';
}
function ns_u24le(string $s, int $p): int {
return ord($s[$p] ?? "\0") | (ord($s[$p + 1] ?? "\0") << 8) | (ord($s[$p + 2] ?? "\0") << 16);
}
function image_info_from_raw(string $raw): array {
$info = @getimagesizefromstring($raw);
if (is_array($info) && !empty($info[0]) && !empty($info[1])) {
if (empty($info['mime'])) {
$info['mime'] = substr($raw, 0, 2) === 'BM' ? 'image/bmp' : '';
}
$info['metadata_verified'] = 'php-getimagesize';
return $info;
}
$len = strlen($raw);
if ($len >= 24 && substr($raw, 0, 8) === "\x89PNG\r\n\x1A\n") {
return [0 => (ns_u16be($raw, 16) << 16) | ns_u16be($raw, 18), 1 => (ns_u16be($raw, 20) << 16) | ns_u16be($raw, 22), 'mime' => 'image/png', 'metadata_verified' => 'manual-header'];
}
if ($len >= 10 && substr($raw, 0, 3) === 'GIF') {
return [0 => ns_u16le($raw, 6), 1 => ns_u16le($raw, 8), 'mime' => 'image/gif', 'metadata_verified' => 'manual-header'];
}
if ($len >= 30 && substr($raw, 0, 2) === 'BM') {
return [0 => abs(ns_i32le($raw, 18)), 1 => abs(ns_i32le($raw, 22)), 'mime' => 'image/bmp', 'metadata_verified' => 'manual-header'];
}
if ($len >= 30 && substr($raw, 0, 4) === 'RIFF' && substr($raw, 8, 4) === 'WEBP') {
$chunk = substr($raw, 12, 4);
if ($chunk === 'VP8X' && $len >= 30) {
return [0 => ns_u24le($raw, 24) + 1, 1 => ns_u24le($raw, 27) + 1, 'mime' => 'image/webp', 'metadata_verified' => 'manual-header'];
}
if ($chunk === 'VP8L' && $len >= 25 && ord($raw[20]) === 0x2F) {
$bits = ord($raw[21]) | (ord($raw[22]) << 8) | (ord($raw[23]) << 16) | (ord($raw[24]) << 24);
return [0 => ($bits & 0x3FFF) + 1, 1 => (($bits >> 14) & 0x3FFF) + 1, 'mime' => 'image/webp', 'metadata_verified' => 'manual-header'];
}
if ($chunk === 'VP8 ' && $len >= 30 && substr($raw, 23, 3) === "\x9D\x01\x2A") {
return [0 => ns_u16le($raw, 26) & 0x3FFF, 1 => ns_u16le($raw, 28) & 0x3FFF, 'mime' => 'image/webp', 'metadata_verified' => 'manual-header'];
}
return [];
}
if ($len >= 22 && ns_u16le($raw, 0) === 0 && in_array(ns_u16le($raw, 2), [1, 2], true) && ns_u16le($raw, 4) > 0) {
$w = ord($raw[6] ?? "\0") ?: 256;
$h = ord($raw[7] ?? "\0") ?: 256;
return [0 => $w, 1 => $h, 'mime' => 'image/x-icon', 'metadata_verified' => 'manual-header'];
}
return [];
}
function compress_image_with_imagick(string $bytes, string $mediaDir, string $url, array &$log): array {
if (!class_exists('Imagick')) return ['success' => 0, 'message' => 'Imagick unavailable'];
try {
$im = new Imagick();
$im->readImageBlob($bytes);
$im->setIteratorIndex(0);
$srcW = max(1, (int)$im->getImageWidth());
$srcH = max(1, (int)$im->getImageHeight());
$budget = image_canvas_budget(strlen($bytes), $srcW, $srcH);
[$targetW, $targetH] = image_canvas_target_dimensions($srcW, $srcH, (int)$budget['max_pixels']);
$im->stripImage();
$im->setImageBackgroundColor('white');
if ($targetW !== $srcW || $targetH !== $srcH) {
$im->thumbnailImage($targetW, $targetH, true, true);
}
if (in_array('WEBP', $im->queryFormats('WEBP'), true)) {
$format = 'webp';
$im->setImageFormat('webp');
$im->setImageCompressionQuality(MEDIA_IMAGE_WEBP_QUALITY);
} else {
$format = 'jpg';
$im->setImageFormat('jpeg');
$im->setImageCompressionQuality(MEDIA_IMAGE_JPEG_QUALITY);
}
runtime_ensure($mediaDir);
$base = substr(hash('sha256', $url . '|' . strlen($bytes) . '|' . $srcW . 'x' . $srcH), 0, 24);
$name = $base . '.' . $format;
$file = $mediaDir . DIRECTORY_SEPARATOR . $name;
$byteCap = max(65536, (int)$budget['byte_cap']);
$guard = 0;
$features = [];
$policy = [];
$outBytes = 0;
do {
$dstW = max(1, (int)$im->getImageWidth());
$dstH = max(1, (int)$im->getImageHeight());
$features = image_canvas_features_from_imagick($im, $dstW, $dstH, strlen($bytes), $budget);
$policy = image_canvas_policy_report($features, ['source_mime' => 'imagick', 'mode' => 'imagick-canvas'], 'imagick-canvas');
@unlink($file);
$ok = $im->writeImage($file);
$outBytes = $ok && is_file($file) ? (int)filesize($file) : 0;
if ($outBytes > 0 && $outBytes <= $byteCap) break;
@unlink($file);
if (max($dstW, $dstH) <= 160 || $guard >= 5) {
$im->clear();
$im->destroy();
return ['success' => 0, 'message' => 'Imagick derivative exceeds byte cap'];
}
$nextMax = max(160, (int)floor(max($dstW, $dstH) * 0.72));
$im->thumbnailImage($nextMax, $nextMax, true, true);
$guard++;
} while (true);
$im->clear();
$im->destroy();
if ($outBytes <= 0) return ['success' => 0, 'message' => 'Imagick encode failed'];
log_line($log, 'Compressed image before save via Imagick: ' . $srcW . 'x' . $srcH . ' -> ' . $dstW . 'x' . $dstH . ' / ' . strlen($bytes) . 'b -> ' . $outBytes . 'b');
return [
'success' => 1,
'url' => 'index.php?media=' . rawurlencode($name),
'filename' => $name,
'format' => $format,
'source_width' => $srcW,
'source_height' => $srcH,
'width' => $dstW,
'height' => $dstH,
'source_bytes' => strlen($bytes),
'bytes' => $outBytes,
'message' => 'compressed local derivative saved before catalog write via Imagick',
'canvas_pressure' => (string)$budget['pressure'],
'canvas_max_pixels' => (int)$budget['max_pixels'],
'canvas_byte_cap' => $byteCap,
'canvas_features' => $features,
'canvas_policy' => $policy,
];
} catch (Throwable $e) {
return ['success' => 0, 'message' => 'Imagick compression failed'];
}
}
function image_encode_to_file($image, string $file, string &$format, int &$bytes): bool {
$format = 'jpg';
$tmp = $file . '.tmp';
$ok = false;
if (function_exists('imagewebp')) {
$format = 'webp';
$tmp = preg_replace('/\.[^.]+$/', '.webp.tmp', $file) ?: ($file . '.webp.tmp');
$ok = @imagewebp($image, $tmp, MEDIA_IMAGE_WEBP_QUALITY);
}
if (!$ok) {
$format = 'jpg';
$tmp = preg_replace('/\.[^.]+$/', '.jpg.tmp', $file) ?: ($file . '.jpg.tmp');
$ok = @imagejpeg($image, $tmp, MEDIA_IMAGE_JPEG_QUALITY);
}
if (!$ok || !is_file($tmp)) return false;
$final = preg_replace('/\.[^.]+$/', '.' . $format, $file) ?: ($file . '.' . $format);
if (!atomic_replace_file($tmp, $final)) return false;
$bytes = is_file($final) ? (int)filesize($final) : 0;
return $bytes > 0;
}
// ===== IMAGE CANVAS BUDGET / CANVAS-TO-SAVE BLOCK =====
// All decoders should feed a trusted server-owned RGB canvas here before save.
function image_canvas_budget(int $sourceBytes = 0, int $sourceW = 0, int $sourceH = 0): array {
$runtime = (string)($GLOBALS['RUNTIME_DIR'] ?? (fun_default_runtime_dir()));
$mediaDir = (string)($GLOBALS['MEDIA_DIR'] ?? ($runtime . DIRECTORY_SEPARATOR . 'media'));
$diskTotal = (int)@disk_total_space($runtime);
$diskFree = (int)@disk_free_space($runtime);
$freePercent = $diskTotal > 0 ? ($diskFree / $diskTotal) * 100 : 100.0;
$mediaMass = data_mass_for_path($mediaDir);
$mediaBytes = (int)($mediaMass['bytes'] ?? 0);
$mediaFiles = (int)($mediaMass['files'] ?? 0);
$pressure = 'low';
$pixels = MEDIA_CANVAS_LOW_PRESSURE_PIXELS;
$byteCap = MEDIA_MANUAL_DERIVATIVE_MAX_BYTES;
if ($freePercent < 12 || $mediaBytes > 1073741824 || $mediaFiles > 12000) {
$pressure = 'critical';
$pixels = MEDIA_CANVAS_CRITICAL_PIXELS;
$byteCap = 262144;
} elseif ($freePercent < 24 || $mediaBytes > 536870912 || $mediaFiles > 6000) {
$pressure = 'high';
$pixels = MEDIA_CANVAS_HIGH_PRESSURE_PIXELS;
$byteCap = 524288;
} elseif ($freePercent < 48 || $mediaBytes > 134217728 || $mediaFiles > 2000) {
$pressure = 'medium';
$pixels = MEDIA_CANVAS_MEDIUM_PRESSURE_PIXELS;
$byteCap = 1048576;
}
return [
'pressure' => $pressure,
'max_pixels' => $pixels,
'byte_cap' => $byteCap,
'free_percent' => round($freePercent, 4),
'media_bytes' => $mediaBytes,
'media_files' => $mediaFiles,
'source_bytes' => $sourceBytes,
'source_pixels' => max(0, $sourceW) * max(0, $sourceH),
];
}
function image_canvas_target_dimensions(int $srcW, int $srcH, int $maxPixels): array {
$srcW = max(1, $srcW);
$srcH = max(1, $srcH);
$maxPixels = max(1, $maxPixels);
$sourcePixels = $srcW * $srcH;
if ($sourcePixels <= $maxPixels) return [$srcW, $srcH];
$scale = sqrt($maxPixels / $sourcePixels);
return [max(1, (int)floor($srcW * $scale)), max(1, (int)floor($srcH * $scale))];
}
function image_canvas_features(array $pixels, int $w, int $h, int $sourceBytes = 0, array $budget = []): array {
$count = max(1, count($pixels));
$limit = 4096;
$step = max(1, (int)floor($count / $limit));
$samples = 0;
$sumR = 0;
$sumG = 0;
$sumB = 0;
$sumL = 0.0;
$sumL2 = 0.0;
$skin = 0;
$hist = array_fill(0, 16, 0);
$coarse = [];
for ($i = 0; $i < $count; $i += $step) {
$c = (int)($pixels[$i] ?? 0);
$r = ($c >> 16) & 255;
$g = ($c >> 8) & 255;
$b = $c & 255;
$l = 0.2126 * $r + 0.7152 * $g + 0.0722 * $b;
$sumR += $r; $sumG += $g; $sumB += $b; $sumL += $l; $sumL2 += $l * $l;
$hist[min(15, max(0, (int)floor($l / 16)))]++;
if ($r > 80 && $g > 40 && $b > 20 && $r > $g && $g >= $b && ($r - $b) > 18 && max($r, $g, $b) - min($r, $g, $b) > 18) $skin++;
$key = sprintf('%01x%01x%01x', $r >> 4, $g >> 4, $b >> 4);
$coarse[$key] = ($coarse[$key] ?? 0) + 1;
$samples++;
if ($samples >= $limit) break;
}
arsort($coarse);
$dominant = [];
foreach (array_slice($coarse, 0, 5, true) as $key => $n) {
$dominant[] = ['rgb444' => (string)$key, 'share' => round($n / max(1, $samples), 4)];
}
$entropy = 0.0;
foreach ($hist as $n) {
if ($n <= 0) continue;
$p = $n / max(1, $samples);
$entropy -= $p * log($p, 2);
}
$meanL = $sumL / max(1, $samples);
$varL = max(0.0, ($sumL2 / max(1, $samples)) - $meanL * $meanL);
return [
'schema' => 'nosignup.fun.canvas-features.v1',
'available' => 1,
'width' => $w,
'height' => $h,
'pixels' => max(0, $w) * max(0, $h),
'samples' => $samples,
'avg_rgb' => [
(int)round($sumR / max(1, $samples)),
(int)round($sumG / max(1, $samples)),
(int)round($sumB / max(1, $samples)),
],
'mean_luma' => round($meanL, 2),
'luma_stddev' => round(sqrt($varL), 2),
'luma_entropy_16' => round($entropy, 3),
'skin_tone_estimate' => round($skin / max(1, $samples), 4),
'dominant_rgb444' => $dominant,
'source_bytes' => $sourceBytes,
'pressure' => (string)($budget['pressure'] ?? ''),
'max_pixels' => (int)($budget['max_pixels'] ?? 0),
'byte_cap' => (int)($budget['byte_cap'] ?? 0),
'llm_note' => 'Text-only LLMs read this feature report plus provenance; vision models may inspect the derivative later.',
];
}
function image_canvas_policy_report(array $features, array $meta = [], string $mode = 'canvas'): array {
$available = !array_key_exists('available', $features) || !empty($features['available']);
$reasons = ['public URL validated before fetch', 'image bytes bounded before decode', 'runtime derivative saved before catalog write'];
$flags = [];
if (!$available) {
$flags[] = 'no_manual_feature_decoder';
$reasons[] = 'bounded passthrough allowed only when metadata and byte/pixel budget already pass';
}
$skin = (float)($features['skin_tone_estimate'] ?? 0.0);
if ($skin >= 0.33) $flags[] = 'possible_adult_visual_signal';
if ((float)($features['luma_entropy_16'] ?? 1.0) < 0.18) $flags[] = 'low_visual_information';
if ((int)($features['source_bytes'] ?? 0) > MEDIA_IMAGE_FETCH_MAX_BYTES) $flags[] = 'source_over_fetch_cap';
$verdict = in_array('source_over_fetch_cap', $flags, true) ? 'reject' : 'save_allowed';
return [
'schema' => 'nosignup.fun.canvas-save-policy.v1',
'verdict' => $verdict,
'mode' => $mode,
'source_mime' => (string)($meta['source_mime'] ?? ''),
'feature_available' => $available ? 1 : 0,
'deterministic_gate' => $verdict === 'reject' ? 'failed' : 'passed',
'vision_or_llm_gate' => 'not_consulted_in_this_build',
'flags' => $flags,
'reasons' => $reasons,
'hard_rejects' => ['captcha/login/paywall/executable/malware/minors/nonconsensual material remain upstream source-policy rejects'],
];
}
function image_canvas_features_from_gd($image, int $w, int $h, int $sourceBytes, array $budget): array {
if (!$image || !function_exists('imagecolorat')) {
return ['schema' => 'nosignup.fun.canvas-features.v1', 'available' => 0, 'reason' => 'GD pixel sampler unavailable'];
}
$limit = 4096;
$stepX = max(1, (int)floor($w / max(1, (int)sqrt($limit))));
$stepY = max(1, (int)floor($h / max(1, (int)sqrt($limit))));
$pixels = [];
for ($y = 0; $y < $h && count($pixels) < $limit; $y += $stepY) {
for ($x = 0; $x < $w && count($pixels) < $limit; $x += $stepX) {
$c = (int)@imagecolorat($image, $x, $y);
$pixels[] = ns_rgb_int(($c >> 16) & 255, ($c >> 8) & 255, $c & 255);
}
}
return image_canvas_features($pixels, $w, $h, $sourceBytes, $budget);
}
function image_canvas_features_from_imagick($image, int $w, int $h, int $sourceBytes, array $budget): array {
if (!is_object($image) || !method_exists($image, 'getImagePixelColor')) {
return ['schema' => 'nosignup.fun.canvas-features.v1', 'available' => 0, 'reason' => 'Imagick pixel sampler unavailable'];
}
$limit = 4096;
$stepX = max(1, (int)floor($w / max(1, (int)sqrt($limit))));
$stepY = max(1, (int)floor($h / max(1, (int)sqrt($limit))));
$pixels = [];
try {
for ($y = 0; $y < $h && count($pixels) < $limit; $y += $stepY) {
for ($x = 0; $x < $w && count($pixels) < $limit; $x += $stepX) {
$px = $image->getImagePixelColor($x, $y);
$rgb = $px ? $px->getColor() : [];
$pixels[] = ns_rgb_int((int)($rgb['r'] ?? 0), (int)($rgb['g'] ?? 0), (int)($rgb['b'] ?? 0));
}
}
} catch (Throwable $e) {
return ['schema' => 'nosignup.fun.canvas-features.v1', 'available' => 0, 'reason' => 'Imagick feature sampling failed'];
}
return image_canvas_features($pixels, $w, $h, $sourceBytes, $budget);
}
function save_rgb_canvas_derivative(array $pixels, int $w, int $h, string $mediaDir, string $url, array $meta, array $budget, array &$log, string $label = 'canvas'): array {
if ($w <= 0 || $h <= 0 || !$pixels) return ['success' => 0, 'message' => 'empty server canvas'];
if (!runtime_ensure($mediaDir)) return ['success' => 0, 'message' => 'media directory unavailable'];
$base = substr(hash('sha256', $url . '|' . (int)($meta['source_bytes'] ?? 0) . '|' . (int)($meta['source_width'] ?? 0) . 'x' . (int)($meta['source_height'] ?? 0) . '|' . $label), 0, 24);
$name = $base . '.png';
$file = $mediaDir . DIRECTORY_SEPARATOR . $name;
$tmp = $file . '.tmp';
if (!ns_write_rgb_png($tmp, $pixels, $w, $h) || !is_file($tmp)) {
@unlink($tmp);
return ['success' => 0, 'message' => 'server canvas PNG encode failed'];
}
$outBytes = (int)@filesize($tmp);
$guard = 0;
$byteCap = max(65536, (int)($budget['byte_cap'] ?? MEDIA_MANUAL_DERIVATIVE_MAX_BYTES));
while ($outBytes > $byteCap && max($w, $h) > 160 && $guard < 5) {
@unlink($tmp);
$pixels = ns_downscale_rgb_nearest($pixels, $w, $h, max(160, (int)floor(max($w, $h) * 0.72)), $w, $h);
if (!ns_write_rgb_png($tmp, $pixels, $w, $h) || !is_file($tmp)) break;
$outBytes = (int)@filesize($tmp);
$guard++;
}
if ($outBytes <= 0 || $outBytes > $byteCap) {
@unlink($tmp);
return ['success' => 0, 'message' => 'server canvas derivative exceeds byte cap'];
}
if (!atomic_replace_file($tmp, $file)) {
return ['success' => 0, 'message' => 'server canvas derivative rename failed'];
}
$sourceW = (int)($meta['source_width'] ?? $w);
$sourceH = (int)($meta['source_height'] ?? $h);
$sourceBytes = (int)($meta['source_bytes'] ?? 0);
$features = image_canvas_features($pixels, $w, $h, $sourceBytes, $budget);
$policy = image_canvas_policy_report($features, ['source_mime' => (string)($meta['source_mime'] ?? ''), 'mode' => $label], $label);
log_line($log, 'Canvas-to-save ' . $label . ': ' . $sourceW . 'x' . $sourceH . ' -> ' . $w . 'x' . $h . ' PNG / ' . $sourceBytes . 'b -> ' . $outBytes . 'b / pressure=' . (string)($budget['pressure'] ?? 'unknown'));
return [
'success' => 1,
'url' => 'index.php?media=' . rawurlencode($name),
'filename' => $name,
'format' => 'png',
'source_width' => $sourceW,
'source_height' => $sourceH,
'width' => $w,
'height' => $h,
'source_bytes' => $sourceBytes,
'bytes' => $outBytes,
'message' => 'server-owned image canvas saved before catalog write',
'canvas' => 1,
'canvas_pressure' => (string)($budget['pressure'] ?? ''),
'canvas_max_pixels' => (int)($budget['max_pixels'] ?? 0),
'canvas_byte_cap' => $byteCap,
'canvas_features' => $features,
'canvas_policy' => $policy,
];
}
// ===== IMAGE-TO-CANVAS BLOCK: shared raster helpers and manual decoders =====
class NsFunJpegEntropyReader {
private string $data;
private int $len;
private int $pos = 0;
private int $bits = 0;
private int $bitCount = 0;
public int $marker = 0;
public function __construct(string $data, int $pos) {
$this->data = $data;
$this->len = strlen($data);
$this->pos = max(0, min($pos, $this->len));
}
private function nextByte(): ?int {
if ($this->marker !== 0 || $this->pos >= $this->len) return null;
$b = ord($this->data[$this->pos++]);
if ($b !== 0xFF) return $b;
while ($this->pos < $this->len && ord($this->data[$this->pos]) === 0xFF) $this->pos++;
if ($this->pos >= $this->len) return null;
$m = ord($this->data[$this->pos++]);
if ($m === 0x00) return 0xFF;
$this->marker = $m;
return null;
}
public function readBit(): ?int {
if ($this->bitCount <= 0) {
$b = $this->nextByte();
if ($b === null) return null;
$this->bits = $b;
$this->bitCount = 8;
}
$this->bitCount--;
return ($this->bits >> $this->bitCount) & 1;
}
public function readBits(int $n) {
$v = 0;
for ($i = 0; $i < $n; $i++) {
$b = $this->readBit();
if ($b === null) return false;
$v = ($v << 1) | $b;
}
return $v;
}
public function align(): void {
$this->bitCount = 0;
}
public function consumeRestart(): bool {
if ($this->marker >= 0xD0 && $this->marker <= 0xD7) {
$this->marker = 0;
$this->align();
return true;
}
return false;
}
}
function ns_u16be(string $s, int $p): int {
return (ord($s[$p] ?? "\0") << 8) | ord($s[$p + 1] ?? "\0");
}
function ns_u16le(string $s, int $p): int {
return ord($s[$p] ?? "\0") | (ord($s[$p + 1] ?? "\0") << 8);
}
function ns_u32le(string $s, int $p): int {
return ns_u16le($s, $p) | (ns_u16le($s, $p + 2) << 16);
}
function ns_i32le(string $s, int $p): int {
$v = ns_u32le($s, $p);
return $v >= 0x80000000 ? $v - 0x100000000 : $v;
}
function ns_jpeg_huffman_table(string $segment, int &$p, int $end): ?array {
if ($p + 17 > $end) return null;
$tcTh = ord($segment[$p++]);
$class = ($tcTh >> 4) & 15;
$id = $tcTh & 15;
$counts = [];
$total = 0;
for ($i = 0; $i < 16; $i++) {
$n = ord($segment[$p++]);
$counts[$i + 1] = $n;
$total += $n;
}
if ($p + $total > $end) return null;
$map = [];
$code = 0;
for ($len = 1; $len <= 16; $len++) {
for ($i = 0; $i < $counts[$len]; $i++) {
$map[$len . ':' . $code] = ord($segment[$p++]);
$code++;
}
$code <<= 1;
}
return ['class' => $class, 'id' => $id, 'map' => $map];
}
function ns_jpeg_huff_decode(NsFunJpegEntropyReader $br, array $table): ?int {
$code = 0;
for ($len = 1; $len <= 16; $len++) {
$bit = $br->readBit();
if ($bit === null) return null;
$code = ($code << 1) | $bit;
$key = $len . ':' . $code;
if (array_key_exists($key, $table)) return (int)$table[$key];
}
return null;
}
function ns_jpeg_extend(int $v, int $t): int {
if ($t <= 0) return 0;
$vt = 1 << ($t - 1);
return $v < $vt ? $v + ((-1 << $t) + 1) : $v;
}
function ns_jpeg_decode_dc_block(NsFunJpegEntropyReader $br, array $dcTable, array $acTable, int &$pred, int $q0): ?int {
$size = ns_jpeg_huff_decode($br, $dcTable);
if ($size === null || $size < 0 || $size > 16) return null;
$bits = $size > 0 ? $br->readBits($size) : 0;
if ($bits === false) return null;
$pred += ns_jpeg_extend((int)$bits, $size);
for ($k = 1; $k < 64;) {
$sym = ns_jpeg_huff_decode($br, $acTable);
if ($sym === null) return null;
if ($sym === 0x00) break;
if ($sym === 0xF0) {
$k += 16;
continue;
}
$run = ($sym >> 4) & 15;
$sz = $sym & 15;
$k += $run;
if ($sz > 0 && $br->readBits($sz) === false) return null;
$k++;
}
return max(0, min(255, (int)round(($pred * max(1, $q0)) / 8 + 128)));
}
function ns_rgb_int(int $r, int $g, int $b): int {
return ((max(0, min(255, $r)) & 255) << 16) | ((max(0, min(255, $g)) & 255) << 8) | (max(0, min(255, $b)) & 255);
}
function ns_ycbcr_to_rgb_int(int $y, int $cb, int $cr): int {
$cb -= 128;
$cr -= 128;
return ns_rgb_int(
(int)round($y + 1.402 * $cr),
(int)round($y - 0.344136 * $cb - 0.714136 * $cr),
(int)round($y + 1.772 * $cb)
);
}
function ns_downscale_rgb_nearest(array $pixels, int $w, int $h, int $maxDim, int &$outW, int &$outH): array {
$scale = min(1.0, $maxDim / max(1, max($w, $h)));
$outW = max(1, (int)floor($w * $scale));
$outH = max(1, (int)floor($h * $scale));
return ns_resize_rgb_nearest($pixels, $w, $h, $outW, $outH);
}
function ns_resize_rgb_nearest(array $pixels, int $w, int $h, int $outW, int $outH): array {
$outW = max(1, $outW);
$outH = max(1, $outH);
if ($outW === $w && $outH === $h) return $pixels;
$out = [];
for ($y = 0; $y < $outH; $y++) {
$sy = min($h - 1, (int)floor($y * $h / $outH));
$srcBase = $sy * $w;
for ($x = 0; $x < $outW; $x++) {
$sx = min($w - 1, (int)floor($x * $w / $outW));
$out[$y * $outW + $x] = $pixels[$srcBase + $sx] ?? 0;
}
}
return $out;
}
function ns_png_chunk(string $type, string $data): string {
return pack('N', strlen($data)) . $type . $data . pack('N', crc32($type . $data));
}
function ns_jpeg_strip_metadata(string $raw): string {
$len = strlen($raw);
if ($len < 4 || substr($raw, 0, 2) !== "\xFF\xD8") return $raw;
$out = "\xFF\xD8";
$p = 2;
while ($p < $len) {
if (ord($raw[$p] ?? "\0") !== 0xFF) return $raw;
$markerStart = $p;
while ($p < $len && ord($raw[$p]) === 0xFF) $p++;
if ($p >= $len) return $raw;
$marker = ord($raw[$p++]);
if ($marker === 0xD9) return $out . "\xFF\xD9";
if ($marker === 0xDA) {
if ($p + 2 > $len) return $raw;
$segLen = ns_u16be($raw, $p);
$segEnd = $p + $segLen;
if ($segLen < 2 || $segEnd > $len) return $raw;
return $out . substr($raw, $markerStart, $segEnd - $markerStart) . substr($raw, $segEnd);
}
if ($marker === 0x01 || ($marker >= 0xD0 && $marker <= 0xD7)) {
$out .= substr($raw, $markerStart, $p - $markerStart);
continue;
}
if ($p + 2 > $len) return $raw;
$segLen = ns_u16be($raw, $p);
$segEnd = $p + $segLen;
if ($segLen < 2 || $segEnd > $len) return $raw;
$isMetadata = ($marker >= 0xE0 && $marker <= 0xEF) || $marker === 0xFE;
if (!$isMetadata) $out .= substr($raw, $markerStart, $segEnd - $markerStart);
$p = $segEnd;
}
return $raw;
}
function ns_png_strip_metadata(string $raw): string {
if (substr($raw, 0, 8) !== "\x89PNG\r\n\x1A\n") return $raw;
$len = strlen($raw);
$p = 8;
$out = substr($raw, 0, 8);
$keep = ['IHDR' => 1, 'PLTE' => 1, 'IDAT' => 1, 'IEND' => 1, 'tRNS' => 1];
while ($p + 8 <= $len) {
$chunkLen = ns_u16be($raw, $p) << 16 | ns_u16be($raw, $p + 2);
$type = substr($raw, $p + 4, 4);
$dataEnd = $p + 8 + $chunkLen;
if ($chunkLen < 0 || $dataEnd + 4 > $len) return $raw;
if (isset($keep[$type])) $out .= substr($raw, $p, 8 + $chunkLen + 4);
$p = $dataEnd + 4;
if ($type === 'IEND') return $out;
}
return $raw;
}
function image_passthrough_bytes(string $raw, string $mime): string {
if ($mime === 'image/jpeg') return ns_jpeg_strip_metadata($raw);
if ($mime === 'image/png') return ns_png_strip_metadata($raw);
return $raw;
}
function ns_write_rgb_png(string $file, array $pixels, int $w, int $h): bool {
if (!function_exists('gzcompress') || $w <= 0 || $h <= 0) return false;
$raw = '';
for ($y = 0; $y < $h; $y++) {
$raw .= "\x00";
$base = $y * $w;
for ($x = 0; $x < $w; $x++) {
$c = (int)($pixels[$base + $x] ?? 0);
$raw .= chr(($c >> 16) & 255) . chr(($c >> 8) & 255) . chr($c & 255);
}
}
$png = "\x89PNG\r\n\x1A\n"
. ns_png_chunk('IHDR', pack('NNCCCCC', $w, $h, 8, 2, 0, 0, 0))
. ns_png_chunk('IDAT', gzcompress($raw, 6))
. ns_png_chunk('IEND', '');
return @file_put_contents($file, $png, LOCK_EX) !== false;
}
function ns_png_paeth(int $a, int $b, int $c): int {
$p = $a + $b - $c;
$pa = abs($p - $a);
$pb = abs($p - $b);
$pc = abs($p - $c);
return ($pa <= $pb && $pa <= $pc) ? $a : ($pb <= $pc ? $b : $c);
}
function ns_png_bit_sample(array $row, int $bitDepth, int $x): int {
if ($bitDepth >= 8) return (int)($row[$x * (int)($bitDepth / 8)] ?? 0);
$bit = $x * $bitDepth;
$byte = (int)($row[intdiv($bit, 8)] ?? 0);
$shift = 8 - $bitDepth - ($bit % 8);
return ($byte >> $shift) & ((1 << $bitDepth) - 1);
}
function ns_png_scale_sample(int $v, int $bitDepth): int {
if ($bitDepth === 8) return max(0, min(255, $v));
if ($bitDepth === 16) return max(0, min(255, $v >> 8));
return (int)round(max(0, $v) * 255 / max(1, (1 << $bitDepth) - 1));
}
function ns_alpha_blend_rgb(int $r, int $g, int $b, int $a): int {
$a = max(0, min(255, $a));
if ($a >= 255) return ns_rgb_int($r, $g, $b);
if ($a <= 0) return ns_rgb_int(255, 255, 255);
return ns_rgb_int(
(int)round(($r * $a + 255 * (255 - $a)) / 255),
(int)round(($g * $a + 255 * (255 - $a)) / 255),
(int)round(($b * $a + 255 * (255 - $a)) / 255)
);
}
function ns_png_row_pixel_rgb(array $row, int $x, int $colorType, int $bitDepth, array $palette, array $alpha, array $trns): int {
if ($colorType === 0) {
$raw = $bitDepth < 8 ? ns_png_bit_sample($row, $bitDepth, $x) : ($bitDepth === 16 ? (((int)($row[$x * 2] ?? 0) << 8) | (int)($row[$x * 2 + 1] ?? 0)) : (int)($row[$x] ?? 0));
$g = ns_png_scale_sample($raw, $bitDepth);
$a = isset($trns['gray']) && $raw === (int)$trns['gray'] ? 0 : 255;
return ns_alpha_blend_rgb($g, $g, $g, $a);
}
if ($colorType === 2) {
$step = $bitDepth === 16 ? 6 : 3;
$off = $x * $step;
if ($bitDepth === 16) {
$r16 = ((int)($row[$off] ?? 0) << 8) | (int)($row[$off + 1] ?? 0);
$g16 = ((int)($row[$off + 2] ?? 0) << 8) | (int)($row[$off + 3] ?? 0);
$b16 = ((int)($row[$off + 4] ?? 0) << 8) | (int)($row[$off + 5] ?? 0);
$a = isset($trns['rgb']) && $trns['rgb'] === [$r16, $g16, $b16] ? 0 : 255;
return ns_alpha_blend_rgb($r16 >> 8, $g16 >> 8, $b16 >> 8, $a);
}
$r = (int)($row[$off] ?? 0);
$g = (int)($row[$off + 1] ?? 0);
$b = (int)($row[$off + 2] ?? 0);
$a = isset($trns['rgb']) && $trns['rgb'] === [$r, $g, $b] ? 0 : 255;
return ns_alpha_blend_rgb($r, $g, $b, $a);
}
if ($colorType === 3) {
$idx = $bitDepth < 8 ? ns_png_bit_sample($row, $bitDepth, $x) : (int)($row[$x] ?? 0);
$rgb = (int)($palette[$idx] ?? 0);
return ns_alpha_blend_rgb(($rgb >> 16) & 255, ($rgb >> 8) & 255, $rgb & 255, (int)($alpha[$idx] ?? 255));
}
if ($colorType === 4) {
$step = $bitDepth === 16 ? 4 : 2;
$off = $x * $step;
if ($bitDepth === 16) {
$g = (int)($row[$off] ?? 0);
$a = (int)($row[$off + 2] ?? 255);
} else {
$g = (int)($row[$off] ?? 0);
$a = (int)($row[$off + 1] ?? 255);
}
return ns_alpha_blend_rgb($g, $g, $g, $a);
}
if ($colorType === 6) {
$step = $bitDepth === 16 ? 8 : 4;
$off = $x * $step;
if ($bitDepth === 16) {
return ns_alpha_blend_rgb((int)($row[$off] ?? 0), (int)($row[$off + 2] ?? 0), (int)($row[$off + 4] ?? 0), (int)($row[$off + 6] ?? 255));
}
return ns_alpha_blend_rgb((int)($row[$off] ?? 0), (int)($row[$off + 1] ?? 0), (int)($row[$off + 2] ?? 0), (int)($row[$off + 3] ?? 255));
}
return 0;
}
function ns_png_inflate(string $idat) {
$raw = @gzuncompress($idat);
if (is_string($raw)) return $raw;
if (strlen($idat) > 6) {
$raw = @gzinflate(substr($idat, 2, -4));
if (is_string($raw)) return $raw;
}
return false;
}
function ns_png_parse_canvas(string $raw, array &$meta, string &$why = ''): ?array {
if (substr($raw, 0, 8) !== "\x89PNG\r\n\x1A\n") {
$why = 'not a PNG stream';
return null;
}
$len = strlen($raw);
$p = 8;
$width = 0;
$height = 0;
$bitDepth = 0;
$colorType = -1;
$interlace = 0;
$palette = [];
$alpha = [];
$trns = [];
$idat = '';
while ($p + 8 <= $len) {
$chunkLen = ns_u16be($raw, $p) << 16 | ns_u16be($raw, $p + 2);
$type = substr($raw, $p + 4, 4);
$dataStart = $p + 8;
$dataEnd = $dataStart + $chunkLen;
if ($chunkLen < 0 || $dataEnd + 4 > $len) {
$why = 'PNG chunk length invalid';
return null;
}
$data = substr($raw, $dataStart, $chunkLen);
if ($type === 'IHDR') {
if ($chunkLen !== 13) {
$why = 'PNG IHDR length invalid';
return null;
}
$width = ns_u16be($data, 0) << 16 | ns_u16be($data, 2);
$height = ns_u16be($data, 4) << 16 | ns_u16be($data, 6);
$bitDepth = ord($data[8]);
$colorType = ord($data[9]);
$interlace = ord($data[12]);
} elseif ($type === 'PLTE') {
for ($i = 0; $i + 2 < $chunkLen; $i += 3) {
$palette[] = ns_rgb_int(ord($data[$i]), ord($data[$i + 1]), ord($data[$i + 2]));
}
} elseif ($type === 'tRNS') {
if ($colorType === 3) {
for ($i = 0; $i < $chunkLen; $i++) $alpha[$i] = ord($data[$i]);
} elseif ($colorType === 0 && $chunkLen >= 2) {
$trns['gray'] = ns_u16be($data, 0);
} elseif ($colorType === 2 && $chunkLen >= 6) {
$r = ns_u16be($data, 0);
$g = ns_u16be($data, 2);
$b = ns_u16be($data, 4);
$trns['rgb'] = $bitDepth === 8 ? [$r & 255, $g & 255, $b & 255] : [$r, $g, $b];
}
} elseif ($type === 'IDAT') {
$idat .= $data;
} elseif ($type === 'IEND') {
break;
}
$p = $dataEnd + 4;
}
if ($width <= 0 || $height <= 0 || $idat === '') {
$why = 'PNG missing IHDR or IDAT';
return null;
}
if ($interlace !== 0) {
$why = 'interlaced PNG unsupported by manual path';
return null;
}
if (!in_array($colorType, [0, 2, 3, 4, 6], true)) {
$why = 'PNG color type unsupported';
return null;
}
if ($colorType === 3 && !in_array($bitDepth, [1, 2, 4, 8], true)) {
$why = 'PNG palette bit depth unsupported';
return null;
}
if ($colorType !== 3 && !in_array($bitDepth, [8, 16], true) && !($colorType === 0 && in_array($bitDepth, [1, 2, 4], true))) {
$why = 'PNG bit depth unsupported';
return null;
}
$channels = [0 => 1, 2 => 3, 3 => 1, 4 => 2, 6 => 4][$colorType];
$bitsPerPixel = $channels * $bitDepth;
$rowBytes = intdiv($width * $bitsPerPixel + 7, 8);
$bppBytes = max(1, intdiv($bitsPerPixel + 7, 8));
$inflated = ns_png_inflate($idat);
if (!is_string($inflated)) {
$why = 'PNG inflate failed';
return null;
}
$budget = image_canvas_budget(strlen($raw), $width, $height);
[$targetW, $targetH] = image_canvas_target_dimensions($width, $height, (int)$budget['max_pixels']);
$rowMap = [];
for ($ty = 0; $ty < $targetH; $ty++) {
$sy = min($height - 1, (int)floor($ty * $height / $targetH));
$rowMap[$sy][] = $ty;
}
$xMap = [];
for ($tx = 0; $tx < $targetW; $tx++) $xMap[$tx] = min($width - 1, (int)floor($tx * $width / $targetW));
$pixels = array_fill(0, $targetW * $targetH, 0);
$prev = array_fill(0, $rowBytes, 0);
$pos = 0;
$inflatedLen = strlen($inflated);
for ($y = 0; $y < $height; $y++) {
if ($pos >= $inflatedLen) {
$why = 'PNG scanline truncated';
return null;
}
$filter = ord($inflated[$pos++]);
if ($pos + $rowBytes > $inflatedLen) {
$why = 'PNG row truncated';
return null;
}
$row = [];
for ($i = 0; $i < $rowBytes; $i++) {
$v = ord($inflated[$pos + $i]);
$left = $i >= $bppBytes ? $row[$i - $bppBytes] : 0;
$up = $prev[$i] ?? 0;
$ul = $i >= $bppBytes ? ($prev[$i - $bppBytes] ?? 0) : 0;
if ($filter === 1) $v = ($v + $left) & 255;
elseif ($filter === 2) $v = ($v + $up) & 255;
elseif ($filter === 3) $v = ($v + intdiv($left + $up, 2)) & 255;
elseif ($filter === 4) $v = ($v + ns_png_paeth($left, $up, $ul)) & 255;
elseif ($filter !== 0) {
$why = 'PNG filter unsupported';
return null;
}
$row[$i] = $v;
}
$pos += $rowBytes;
if (isset($rowMap[$y])) {
foreach ($rowMap[$y] as $ty) {
$base = $ty * $targetW;
for ($tx = 0; $tx < $targetW; $tx++) {
$pixels[$base + $tx] = ns_png_row_pixel_rgb($row, $xMap[$tx], $colorType, $bitDepth, $palette, $alpha, $trns);
}
}
}
$prev = $row;
}
$meta = [
'source_width' => $width,
'source_height' => $height,
'source_bytes' => strlen($raw),
'target_width' => $targetW,
'target_height' => $targetH,
'budget' => $budget,
'color_type' => $colorType,
'bit_depth' => $bitDepth,
];
return ['pixels' => $pixels, 'width' => $targetW, 'height' => $targetH];
}
function compress_png_canvas_before_save(string $raw, array $info, string $mediaDir, string $url, array &$log): array {
$mime = strtolower((string)($info['mime'] ?? ''));
if ($mime !== 'image/png') return ['success' => 0, 'message' => 'manual PNG compressor supports PNG only'];
$meta = [];
$why = '';
$img = ns_png_parse_canvas($raw, $meta, $why);
if (!$img) return ['success' => 0, 'message' => $why ?: 'manual PNG compressor failed'];
$budget = is_array($meta['budget'] ?? null) ? $meta['budget'] : image_canvas_budget(strlen($raw), (int)($meta['source_width'] ?? 0), (int)($meta['source_height'] ?? 0));
$saved = save_rgb_canvas_derivative((array)$img['pixels'], (int)$img['width'], (int)$img['height'], $mediaDir, $url, [
'source_width' => (int)($meta['source_width'] ?? ($info[0] ?? 0)),
'source_height' => (int)($meta['source_height'] ?? ($info[1] ?? 0)),
'source_bytes' => strlen($raw),
], $budget, $log, 'png-raster');
if (!empty($saved['success'])) {
$saved['message'] = 'manual pure-PHP PNG canvas saved before catalog write';
$saved['manual'] = 1;
}
return $saved;
}
function ns_bmp_parse_canvas(string $raw, array &$meta, string &$why = ''): ?array {
if (substr($raw, 0, 2) !== 'BM' || strlen($raw) < 54) {
$why = 'not a BMP stream';
return null;
}
$offBits = ns_u32le($raw, 10);
$dib = ns_u32le($raw, 14);
if ($dib < 40) {
$why = 'BMP DIB header unsupported';
return null;
}
$width = ns_i32le($raw, 18);
$heightSigned = ns_i32le($raw, 22);
$height = abs($heightSigned);
$planes = ns_u16le($raw, 26);
$bpp = ns_u16le($raw, 28);
$compression = ns_u32le($raw, 30);
if ($width <= 0 || $height <= 0 || $planes !== 1) {
$why = 'BMP dimensions invalid';
return null;
}
if (!in_array($bpp, [24, 32], true) || $compression !== 0) {
$why = 'manual BMP path supports uncompressed 24/32-bit BMP only';
return null;
}
$rowBytes = (int)(floor(($bpp * $width + 31) / 32) * 4);
if ($offBits <= 0 || $offBits + $rowBytes * $height > strlen($raw)) {
$why = 'BMP pixel data truncated';
return null;
}
$budget = image_canvas_budget(strlen($raw), $width, $height);
[$targetW, $targetH] = image_canvas_target_dimensions($width, $height, (int)$budget['max_pixels']);
$rowMap = [];
for ($ty = 0; $ty < $targetH; $ty++) {
$sy = min($height - 1, (int)floor($ty * $height / $targetH));
$rowMap[$sy][] = $ty;
}
$xMap = [];
for ($tx = 0; $tx < $targetW; $tx++) $xMap[$tx] = min($width - 1, (int)floor($tx * $width / $targetW));
$pixels = array_fill(0, $targetW * $targetH, 0);
$topDown = $heightSigned < 0;
$bytesPerPixel = (int)($bpp / 8);
for ($sourceY = 0; $sourceY < $height; $sourceY++) {
if (!isset($rowMap[$sourceY])) continue;
$fileY = $topDown ? $sourceY : ($height - 1 - $sourceY);
$rowStart = $offBits + $fileY * $rowBytes;
foreach ($rowMap[$sourceY] as $ty) {
$base = $ty * $targetW;
for ($tx = 0; $tx < $targetW; $tx++) {
$sx = $xMap[$tx];
$p = $rowStart + $sx * $bytesPerPixel;
$b = ord($raw[$p] ?? "\0");
$g = ord($raw[$p + 1] ?? "\0");
$r = ord($raw[$p + 2] ?? "\0");
$a = $bytesPerPixel === 4 ? ord($raw[$p + 3] ?? "\xFF") : 255;
$pixels[$base + $tx] = ns_alpha_blend_rgb($r, $g, $b, $a);
}
}
}
$meta = [
'source_width' => $width,
'source_height' => $height,
'source_bytes' => strlen($raw),
'target_width' => $targetW,
'target_height' => $targetH,
'budget' => $budget,
'bit_depth' => $bpp,
];
return ['pixels' => $pixels, 'width' => $targetW, 'height' => $targetH];
}
function ns_dib_parse_canvas(string $raw, array &$meta, string &$why = '', int $widthHint = 0, int $heightHint = 0): ?array {
if (strlen($raw) < 40) {
$why = 'DIB data too short';
return null;
}
$dib = ns_u32le($raw, 0);
if ($dib < 40 || $dib > strlen($raw)) {
$why = 'DIB header unsupported';
return null;
}
$width = ns_i32le($raw, 4);
$heightSigned = ns_i32le($raw, 8);
$rawHeight = abs($heightSigned);
$height = $heightHint > 0 ? min($rawHeight, $heightHint) : $rawHeight;
$planes = ns_u16le($raw, 12);
$bpp = ns_u16le($raw, 14);
$compression = ns_u32le($raw, 16);
if ($width <= 0 || $height <= 0 || $planes !== 1) {
$why = 'DIB dimensions invalid';
return null;
}
if (!in_array($bpp, [24, 32], true) || $compression !== 0) {
$why = 'manual DIB path supports uncompressed 24/32-bit bitmap icons only';
return null;
}
$rowBytes = (int)(floor(($bpp * $width + 31) / 32) * 4);
$pixelOffset = $dib;
if ($pixelOffset + $rowBytes * $height > strlen($raw)) {
$why = 'DIB pixel data truncated';
return null;
}
$budget = image_canvas_budget(strlen($raw), $width, $height);
[$targetW, $targetH] = image_canvas_target_dimensions($width, $height, (int)$budget['max_pixels']);
$rowMap = [];
for ($ty = 0; $ty < $targetH; $ty++) {
$sy = min($height - 1, (int)floor($ty * $height / $targetH));
$rowMap[$sy][] = $ty;
}
$xMap = [];
for ($tx = 0; $tx < $targetW; $tx++) $xMap[$tx] = min($width - 1, (int)floor($tx * $width / $targetW));
$pixels = array_fill(0, $targetW * $targetH, 0);
$topDown = $heightSigned < 0;
$bytesPerPixel = (int)($bpp / 8);
for ($sourceY = 0; $sourceY < $height; $sourceY++) {
if (!isset($rowMap[$sourceY])) continue;
$fileY = $topDown ? $sourceY : ($height - 1 - $sourceY);
$rowStart = $pixelOffset + $fileY * $rowBytes;
foreach ($rowMap[$sourceY] as $ty) {
$base = $ty * $targetW;
for ($tx = 0; $tx < $targetW; $tx++) {
$sx = $xMap[$tx];
$p = $rowStart + $sx * $bytesPerPixel;
$b = ord($raw[$p] ?? "\0");
$g = ord($raw[$p + 1] ?? "\0");
$r = ord($raw[$p + 2] ?? "\0");
$a = $bytesPerPixel === 4 ? ord($raw[$p + 3] ?? "\xFF") : 255;
$pixels[$base + $tx] = ns_alpha_blend_rgb($r, $g, $b, $a);
}
}
}
$meta = [
'source_width' => $width,
'source_height' => $height,
'source_bytes' => strlen($raw),
'target_width' => $targetW,
'target_height' => $targetH,
'budget' => $budget,
'bit_depth' => $bpp,
];
return ['pixels' => $pixels, 'width' => $targetW, 'height' => $targetH];
}
function compress_bmp_canvas_before_save(string $raw, array $info, string $mediaDir, string $url, array &$log): array {
$mime = strtolower((string)($info['mime'] ?? ''));
if ($mime !== 'image/bmp' && substr($raw, 0, 2) !== 'BM') return ['success' => 0, 'message' => 'manual BMP compressor supports BMP only'];
$meta = [];
$why = '';
$img = ns_bmp_parse_canvas($raw, $meta, $why);
if (!$img) return ['success' => 0, 'message' => $why ?: 'manual BMP compressor failed'];
$budget = is_array($meta['budget'] ?? null) ? $meta['budget'] : image_canvas_budget(strlen($raw), (int)($meta['source_width'] ?? 0), (int)($meta['source_height'] ?? 0));
$saved = save_rgb_canvas_derivative((array)$img['pixels'], (int)$img['width'], (int)$img['height'], $mediaDir, $url, [
'source_width' => (int)($meta['source_width'] ?? ($info[0] ?? 0)),
'source_height' => (int)($meta['source_height'] ?? ($info[1] ?? 0)),
'source_bytes' => strlen($raw),
], $budget, $log, 'bmp-raster');
if (!empty($saved['success'])) {
$saved['message'] = 'manual pure-PHP BMP canvas saved before catalog write';
$saved['manual'] = 1;
}
return $saved;
}
function ns_ico_parse_canvas(string $raw, array &$meta, string &$why = ''): ?array {
$len = strlen($raw);
if ($len < 22 || ns_u16le($raw, 0) !== 0 || !in_array(ns_u16le($raw, 2), [1, 2], true)) {
$why = 'not an ICO stream';
return null;
}
$count = min(64, ns_u16le($raw, 4));
if ($count <= 0 || 6 + $count * 16 > $len) {
$why = 'ICO directory invalid';
return null;
}
$best = null;
for ($i = 0; $i < $count; $i++) {
$p = 6 + $i * 16;
$w = ord($raw[$p] ?? "\0") ?: 256;
$h = ord($raw[$p + 1] ?? "\0") ?: 256;
$bpp = max(1, ns_u16le($raw, $p + 6));
$bytes = ns_u32le($raw, $p + 8);
$off = ns_u32le($raw, $p + 12);
if ($bytes <= 0 || $off <= 0 || $off + $bytes > $len) continue;
$score = $w * $h * $bpp;
if (!$best || $score > (int)$best['score']) $best = ['w' => $w, 'h' => $h, 'bpp' => $bpp, 'bytes' => $bytes, 'off' => $off, 'score' => $score];
}
if (!$best) {
$why = 'ICO contains no usable image resource';
return null;
}
$part = substr($raw, (int)$best['off'], (int)$best['bytes']);
$subMeta = [];
$subWhy = '';
if (substr($part, 0, 8) === "\x89PNG\r\n\x1A\n") {
$img = ns_png_parse_canvas($part, $subMeta, $subWhy);
if (!$img) {
$why = $subWhy ?: 'ICO embedded PNG decode failed';
return null;
}
} else {
$img = ns_dib_parse_canvas($part, $subMeta, $subWhy, (int)$best['w'], (int)$best['h']);
if (!$img) {
$why = $subWhy ?: 'ICO embedded bitmap decode failed';
return null;
}
}
$budget = is_array($subMeta['budget'] ?? null) ? $subMeta['budget'] : image_canvas_budget($len, (int)$best['w'], (int)$best['h']);
$meta = array_merge($subMeta, [
'source_width' => (int)($subMeta['source_width'] ?? $best['w']),
'source_height' => (int)($subMeta['source_height'] ?? $best['h']),
'source_bytes' => $len,
'ico_entries' => $count,
'ico_selected_bytes' => (int)$best['bytes'],
'budget' => $budget,
]);
return $img;
}
function compress_ico_canvas_before_save(string $raw, array $info, string $mediaDir, string $url, array &$log): array {
$mime = strtolower((string)($info['mime'] ?? ''));
if ($mime !== 'image/x-icon' && $mime !== 'image/vnd.microsoft.icon' && !(strlen($raw) >= 6 && ns_u16le($raw, 0) === 0 && in_array(ns_u16le($raw, 2), [1, 2], true))) {
return ['success' => 0, 'message' => 'manual ICO compressor supports ICO only'];
}
$meta = [];
$why = '';
$img = ns_ico_parse_canvas($raw, $meta, $why);
if (!$img) return ['success' => 0, 'message' => $why ?: 'manual ICO compressor failed'];
$budget = is_array($meta['budget'] ?? null) ? $meta['budget'] : image_canvas_budget(strlen($raw), (int)($meta['source_width'] ?? 0), (int)($meta['source_height'] ?? 0));
$saved = save_rgb_canvas_derivative((array)$img['pixels'], (int)$img['width'], (int)$img['height'], $mediaDir, $url, [
'source_width' => (int)($meta['source_width'] ?? ($info[0] ?? 0)),
'source_height' => (int)($meta['source_height'] ?? ($info[1] ?? 0)),
'source_bytes' => strlen($raw),
'source_mime' => 'image/x-icon',
], $budget, $log, 'ico-raster');
if (!empty($saved['success'])) {
$saved['message'] = 'manual pure-PHP ICO canvas saved before catalog write';
$saved['manual'] = 1;
}
return $saved;
}
function ns_gif_read_subblocks(string $raw, int &$p, int $len): string {
$out = '';
while ($p < $len) {
$n = ord($raw[$p++]);
if ($n === 0) break;
if ($p + $n > $len) break;
$out .= substr($raw, $p, $n);
$p += $n;
}
return $out;
}
function ns_gif_read_color_table(string $raw, int &$p, int $count, int $len): array {
$palette = [];
for ($i = 0; $i < $count && $p + 2 < $len; $i++) {
$palette[$i] = ns_rgb_int(ord($raw[$p]), ord($raw[$p + 1]), ord($raw[$p + 2]));
$p += 3;
}
return $palette;
}
function ns_gif_lzw_code(string $data, int &$bit, int $size): ?int {
$len = strlen($data);
$code = 0;
for ($i = 0; $i < $size; $i++) {
$bytePos = intdiv($bit, 8);
if ($bytePos >= $len) return null;
$code |= ((ord($data[$bytePos]) >> ($bit % 8)) & 1) << $i;
$bit++;
}
return $code;
}
function ns_gif_lzw_decode(string $data, int $minCodeSize, int $expected): ?array {
if ($minCodeSize < 2 || $minCodeSize > 8 || $expected <= 0) return null;
$clear = 1 << $minCodeSize;
$end = $clear + 1;
$reset = function () use ($clear, $end, $minCodeSize): array {
$dict = [];
for ($i = 0; $i < $clear; $i++) $dict[$i] = [$i];
return [$dict, $end + 1, $minCodeSize + 1];
};
[$dict, $next, $codeSize] = $reset();
$bit = 0;
$prev = null;
$out = [];
while (count($out) < $expected) {
$code = ns_gif_lzw_code($data, $bit, $codeSize);
if ($code === null) break;
if ($code === $clear) {
[$dict, $next, $codeSize] = $reset();
$prev = null;
continue;
}
if ($code === $end) break;
if (isset($dict[$code])) {
$entry = $dict[$code];
} elseif ($code === $next && is_array($prev) && $prev) {
$entry = array_merge($prev, [$prev[0]]);
} else {
return null;
}
foreach ($entry as $v) {
$out[] = $v;
if (count($out) >= $expected) break;
}
if (is_array($prev) && $prev) {
if ($next < 4096) {
$dict[$next++] = array_merge($prev, [$entry[0]]);
if ($next >= (1 << $codeSize) && $codeSize < 12) $codeSize++;
}
}
$prev = $entry;
}
return count($out) >= $expected ? array_slice($out, 0, $expected) : null;
}
function ns_gif_interlace_rows(int $h, bool $interlace): array {
if (!$interlace) return range(0, max(0, $h - 1));
$rows = [];
foreach ([[0, 8], [4, 8], [2, 4], [1, 2]] as $pass) {
for ($y = $pass[0]; $y < $h; $y += $pass[1]) $rows[] = $y;
}
return $rows;
}
function ns_gif_parse_canvas(string $raw, array &$meta, string &$why = ''): ?array {
$len = strlen($raw);
if ($len < 20 || !in_array(substr($raw, 0, 6), ['GIF87a', 'GIF89a'], true)) {
$why = 'not a GIF stream';
return null;
}
$p = 6;
$screenW = ns_u16le($raw, $p); $p += 2;
$screenH = ns_u16le($raw, $p); $p += 2;
$packed = ord($raw[$p++]);
$p += 2; // background + aspect
$gct = [];
if ($packed & 0x80) {
$gctCount = 1 << (($packed & 7) + 1);
$gct = ns_gif_read_color_table($raw, $p, $gctCount, $len);
}
$transparent = -1;
while ($p < $len) {
$b = ord($raw[$p++]);
if ($b === 0x3B) break;
if ($b === 0x21) {
if ($p >= $len) break;
$label = ord($raw[$p++]);
if ($label === 0xF9 && $p < $len) {
$blockSize = ord($raw[$p++]);
if ($blockSize >= 4 && $p + $blockSize <= $len) {
$flags = ord($raw[$p]);
$t = ord($raw[$p + 3]);
if ($flags & 1) $transparent = $t;
$p += $blockSize;
if ($p < $len && ord($raw[$p]) === 0) $p++;
} else {
ns_gif_read_subblocks($raw, $p, $len);
}
} else {
ns_gif_read_subblocks($raw, $p, $len);
}
continue;
}
if ($b !== 0x2C) {
$why = 'GIF block unsupported';
return null;
}
if ($p + 9 > $len) {
$why = 'GIF image descriptor truncated';
return null;
}
$left = ns_u16le($raw, $p); $p += 2;
$top = ns_u16le($raw, $p); $p += 2;
$w = ns_u16le($raw, $p); $p += 2;
$h = ns_u16le($raw, $p); $p += 2;
$ip = ord($raw[$p++]);
$interlace = (bool)($ip & 0x40);
$palette = $gct;
if ($ip & 0x80) {
$lctCount = 1 << (($ip & 7) + 1);
$palette = ns_gif_read_color_table($raw, $p, $lctCount, $len);
}
if ($w <= 0 || $h <= 0 || !$palette) {
$why = 'GIF missing image dimensions or palette';
return null;
}
if ($w * $h > MEDIA_MANUAL_GIF_MAX_PIXELS) {
$why = 'GIF first frame exceeds manual pixel budget';
return null;
}
if ($p >= $len) {
$why = 'GIF LZW data missing';
return null;
}
$min = ord($raw[$p++]);
$data = ns_gif_read_subblocks($raw, $p, $len);
$idx = ns_gif_lzw_decode($data, $min, $w * $h);
if (!is_array($idx)) {
$why = 'GIF LZW decode failed';
return null;
}
$budget = image_canvas_budget(strlen($raw), $w, $h);
[$targetW, $targetH] = image_canvas_target_dimensions($w, $h, (int)$budget['max_pixels']);
$rows = ns_gif_interlace_rows($h, $interlace);
$rowMap = [];
for ($ty = 0; $ty < $targetH; $ty++) {
$sy = min($h - 1, (int)floor($ty * $h / $targetH));
$rowMap[$sy][] = $ty;
}
$xMap = [];
for ($tx = 0; $tx < $targetW; $tx++) $xMap[$tx] = min($w - 1, (int)floor($tx * $w / $targetW));
$pixels = array_fill(0, $targetW * $targetH, ns_rgb_int(255, 255, 255));
for ($encodedRow = 0; $encodedRow < $h; $encodedRow++) {
$sourceY = $rows[$encodedRow] ?? $encodedRow;
if (!isset($rowMap[$sourceY])) continue;
foreach ($rowMap[$sourceY] as $ty) {
$base = $ty * $targetW;
for ($tx = 0; $tx < $targetW; $tx++) {
$sx = $xMap[$tx];
$index = (int)($idx[$encodedRow * $w + $sx] ?? 0);
$rgb = (int)($palette[$index] ?? 0);
$a = $index === $transparent ? 0 : 255;
$pixels[$base + $tx] = ns_alpha_blend_rgb(($rgb >> 16) & 255, ($rgb >> 8) & 255, $rgb & 255, $a);
}
}
}
$meta = [
'source_width' => $w,
'source_height' => $h,
'source_bytes' => strlen($raw),
'screen_width' => $screenW,
'screen_height' => $screenH,
'left' => $left,
'top' => $top,
'interlace' => $interlace ? 1 : 0,
'target_width' => $targetW,
'target_height' => $targetH,
'budget' => $budget,
];
return ['pixels' => $pixels, 'width' => $targetW, 'height' => $targetH];
}
$why = 'GIF contains no image frame';
return null;
}
function is_gif_bytes(string $raw): bool {
return strlen($raw) >= 6 && (strncmp($raw, 'GIF87a', 6) === 0 || strncmp($raw, 'GIF89a', 6) === 0);
}
/**
* Prefer living animation under MEDIA_ANIMATED_GIF_MAX_BYTES (150KB).
* Intelligent reduce via Imagick when available (scale frames); else passthrough only if already small.
* On failure caller falls back to first-frame still (compress_gif_canvas_before_save).
*/
function save_animated_gif_under_cap(string $raw, string $mediaDir, string $url, array &$log): array {
if (!is_gif_bytes($raw)) return ['success' => 0, 'message' => 'not a GIF'];
if (!runtime_ensure($mediaDir)) return ['success' => 0, 'message' => 'media directory unavailable'];
$cap = (int)MEDIA_ANIMATED_GIF_MAX_BYTES;
$srcBytes = strlen($raw);
$out = $raw;
$srcW = 0;
$srcH = 0;
$info = image_info_from_raw($raw);
if (is_array($info)) {
$srcW = max(0, (int)($info[0] ?? 0));
$srcH = max(0, (int)($info[1] ?? 0));
}
if ($srcBytes > $cap && class_exists('Imagick')) {
try {
$scale = 1.0;
if ($srcBytes > $cap * 8) $scale = 0.35;
elseif ($srcBytes > $cap * 4) $scale = 0.5;
elseif ($srcBytes > $cap * 2) $scale = 0.72;
for ($guard = 0; $guard < 7; $guard++) {
$im = new Imagick();
$im->readImageBlob($raw);
$im = $im->coalesceImages();
$tw = max(48, (int)floor(max(1, $im->getImageWidth()) * $scale));
$th = max(48, (int)floor(max(1, $im->getImageHeight()) * $scale));
foreach ($im as $frame) {
$frame->scaleImage($tw, $th, true);
$fw = max(1, (int)$frame->getImageWidth());
$fh = max(1, (int)$frame->getImageHeight());
$frame->setImagePage($fw, $fh, 0, 0);
}
$im->setIteratorIndex(0);
$im = $im->deconstructImages();
$im->setFormat('gif');
$blob = $im->getImagesBlob();
$im->clear();
$im->destroy();
if (is_string($blob) && $blob !== '' && is_gif_bytes($blob) && strlen($blob) <= $cap) {
$out = $blob;
$srcW = $tw;
$srcH = $th;
log_line($log, 'Animated GIF reduced under cap: ' . $srcBytes . 'b -> ' . strlen($out) . 'b scale=' . $scale);
break;
}
$scale *= 0.72;
if ($scale < 0.12) break;
}
} catch (Throwable $e) {
log_line($log, 'Animated GIF Imagick reduce failed: ' . $e->getMessage());
}
}
if (strlen($out) > $cap) {
log_line($log, 'Animated GIF still over cap after reduce: ' . strlen($out) . 'b > ' . $cap . 'b (Imagick=' . (class_exists('Imagick') ? 'yes' : 'no') . ')');
return ['success' => 0, 'message' => 'animated GIF exceeds ' . $cap . ' bytes after intelligent reduce'];
}
$base = substr(hash('sha256', $url . '|animgif|' . strlen($out) . '|' . $srcW . 'x' . $srcH), 0, 24);
$name = $base . '.gif';
if (!media_filename_ok($name)) {
return ['success' => 0, 'message' => 'animated GIF filename rejected by serve allowlist'];
}
$file = $mediaDir . DIRECTORY_SEPARATOR . $name;
$tmp = $file . '.tmp';
if (@file_put_contents($tmp, $out, LOCK_EX) === false || !is_file($tmp)) {
@unlink($tmp);
return ['success' => 0, 'message' => 'animated GIF write failed'];
}
if (!atomic_replace_file($tmp, $file)) {
@unlink($tmp);
return ['success' => 0, 'message' => 'animated GIF rename failed'];
}
$outBytes = (int)@filesize($file);
$mode = $srcBytes <= $cap ? 'passthrough' : 'reduced';
log_line($log, 'Animated GIF KEPT motion under cap (' . $mode . '): ' . $srcBytes . 'b source -> ' . $outBytes . 'b local .gif');
return [
'success' => 1,
'url' => 'index.php?media=' . rawurlencode($name),
'filename' => $name,
'format' => 'gif',
'animated' => 1,
'gif_mode' => $mode,
'source_width' => $srcW,
'source_height' => $srcH,
'width' => $srcW,
'height' => $srcH,
'source_bytes' => $srcBytes,
'bytes' => $outBytes,
'message' => 'animated GIF derivative under 150KB cap (' . $mode . ')',
];
}
function compress_gif_canvas_before_save(string $raw, array $info, string $mediaDir, string $url, array &$log): array {
$mime = strtolower((string)($info['mime'] ?? ''));
if ($mime !== 'image/gif' && substr($raw, 0, 3) !== 'GIF') return ['success' => 0, 'message' => 'manual GIF compressor supports GIF only'];
/* Prefer motion when we can keep a real GIF ≤150KB */
$anim = save_animated_gif_under_cap($raw, $mediaDir, $url, $log);
if (!empty($anim['success'])) {
log_line($log, 'GIF path: animated-kept ' . (string)($anim['filename'] ?? '') . ' bytes=' . (int)($anim['bytes'] ?? 0));
return $anim;
}
log_line($log, 'GIF path: animated failed (' . (string)($anim['message'] ?? 'unknown') . ') → first-frame still');
$meta = [];
$why = '';
$img = ns_gif_parse_canvas($raw, $meta, $why);
if (!$img) return ['success' => 0, 'message' => $why ?: 'manual GIF compressor failed'];
$budget = is_array($meta['budget'] ?? null) ? $meta['budget'] : image_canvas_budget(strlen($raw), (int)($meta['source_width'] ?? 0), (int)($meta['source_height'] ?? 0));
$saved = save_rgb_canvas_derivative((array)$img['pixels'], (int)$img['width'], (int)$img['height'], $mediaDir, $url, [
'source_width' => (int)($meta['source_width'] ?? ($info[0] ?? 0)),
'source_height' => (int)($meta['source_height'] ?? ($info[1] ?? 0)),
'source_bytes' => strlen($raw),
], $budget, $log, 'gif-first-frame');
if (!empty($saved['success'])) {
$saved['message'] = 'manual pure-PHP GIF first-frame canvas saved before catalog write (anim over 150KB or reduce failed)';
$saved['manual'] = 1;
$saved['animated'] = 0;
$saved['gif_mode'] = 'still-fallback';
log_line($log, 'GIF path: still-fallback saved ' . (string)($saved['filename'] ?? '') . ' bytes=' . (int)($saved['bytes'] ?? 0));
}
return $saved;
}
function image_canvas_features_from_raw(string $raw, array $info): array {
$mime = strtolower((string)($info['mime'] ?? ''));
$meta = [];
$why = '';
$img = null;
$budget = null;
if ($mime === 'image/jpeg') {
$img = ns_jpeg_parse_dc_thumbnail($raw, $meta, $why);
if ($img) {
$sourceW = max(1, (int)($meta['source_width'] ?? ($info[0] ?? $img['width'])));
$sourceH = max(1, (int)($meta['source_height'] ?? ($info[1] ?? $img['height'])));
$budget = image_canvas_budget(strlen($raw), $sourceW, $sourceH);
[$tw, $th] = image_canvas_target_dimensions($sourceW, $sourceH, (int)$budget['max_pixels']);
if ($tw !== (int)$img['width'] || $th !== (int)$img['height']) $img['pixels'] = ns_resize_rgb_nearest((array)$img['pixels'], (int)$img['width'], (int)$img['height'], $tw, $th);
$img['width'] = $tw; $img['height'] = $th;
}
} elseif ($mime === 'image/png') {
$img = ns_png_parse_canvas($raw, $meta, $why);
$budget = is_array($meta['budget'] ?? null) ? $meta['budget'] : null;
} elseif ($mime === 'image/gif') {
$img = ns_gif_parse_canvas($raw, $meta, $why);
$budget = is_array($meta['budget'] ?? null) ? $meta['budget'] : null;
} elseif ($mime === 'image/x-icon' || $mime === 'image/vnd.microsoft.icon') {
$img = ns_ico_parse_canvas($raw, $meta, $why);
$budget = is_array($meta['budget'] ?? null) ? $meta['budget'] : null;
} elseif ($mime === 'image/bmp' || substr($raw, 0, 2) === 'BM') {
$img = ns_bmp_parse_canvas($raw, $meta, $why);
$budget = is_array($meta['budget'] ?? null) ? $meta['budget'] : null;
}
if (!$img) return ['schema' => 'nosignup.fun.canvas-features.v1', 'available' => 0, 'reason' => $why ?: 'no manual canvas decoder for this format'];
$budget = is_array($budget) ? $budget : image_canvas_budget(strlen($raw), (int)($meta['source_width'] ?? ($info[0] ?? 0)), (int)($meta['source_height'] ?? ($info[1] ?? 0)));
$features = image_canvas_features((array)$img['pixels'], (int)$img['width'], (int)$img['height'], strlen($raw), $budget);
$features['available'] = 1;
$features['decoder'] = $mime ?: (substr($raw, 0, 2) === 'BM' ? 'image/bmp' : 'unknown');
return $features;
}
function ns_jpeg_parse_dc_thumbnail(string $raw, array &$meta, string &$why = ''): ?array {
$len = strlen($raw);
if ($len < 32 || substr($raw, 0, 2) !== "\xFF\xD8") {
$why = 'not a JPEG stream';
return null;
}
$qt = [];
$huff = [0 => [], 1 => []];
$components = [];
$order = [];
$scan = [];
$width = 0;
$height = 0;
$precision = 0;
$restart = 0;
$scanPos = 0;
$p = 2;
while ($p < $len) {
while ($p < $len && ord($raw[$p]) !== 0xFF) $p++;
while ($p < $len && ord($raw[$p]) === 0xFF) $p++;
if ($p >= $len) break;
$marker = ord($raw[$p++]);
if ($marker === 0xD9) break;
if ($marker === 0xDA) {
if ($p + 2 > $len) break;
$segLen = ns_u16be($raw, $p);
$segStart = $p + 2;
$segEnd = $p + $segLen;
if ($segLen < 2 || $segEnd > $len) break;
$n = ord($raw[$segStart] ?? "\0");
$q = $segStart + 1;
$scan = [];
for ($i = 0; $i < $n && $q + 1 < $segEnd; $i++) {
$cid = ord($raw[$q++]);
$sel = ord($raw[$q++]);
if (!isset($components[$cid])) continue;
$components[$cid]['dc'] = ($sel >> 4) & 15;
$components[$cid]['ac'] = $sel & 15;
$scan[] = $cid;
}
$scanPos = $segEnd;
break;
}
if ($marker >= 0xD0 && $marker <= 0xD7) continue;
if (in_array($marker, [0x01, 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7], true)) continue;
if ($p + 2 > $len) break;
$segLen = ns_u16be($raw, $p);
$segStart = $p + 2;
$segEnd = $p + $segLen;
if ($segLen < 2 || $segEnd > $len) break;
$seg = substr($raw, $segStart, $segLen - 2);
if ($marker === 0xDB) {
$q = 0;
$end = strlen($seg);
while ($q < $end) {
$pqTq = ord($seg[$q++]);
$prec = ($pqTq >> 4) & 15;
$id = $pqTq & 15;
$need = $prec ? 128 : 64;
if ($q + $need > $end) break;
$qt[$id] = $prec ? ns_u16be($seg, $q) : ord($seg[$q]);
$q += $need;
}
} elseif ($marker === 0xC0) {
if (strlen($seg) < 6) {
$why = 'short SOF0';
return null;
}
$precision = ord($seg[0]);
$height = ns_u16be($seg, 1);
$width = ns_u16be($seg, 3);
$n = ord($seg[5]);
$q = 6;
$components = [];
$order = [];
for ($i = 0; $i < $n && $q + 2 < strlen($seg); $i++) {
$cid = ord($seg[$q++]);
$hv = ord($seg[$q++]);
$tq = ord($seg[$q++]);
$components[$cid] = ['id' => $cid, 'h' => max(1, ($hv >> 4) & 15), 'v' => max(1, $hv & 15), 'q' => $tq, 'dc' => 0, 'ac' => 0];
$order[] = $cid;
}
} elseif ($marker === 0xC2) {
$why = 'progressive JPEG unsupported by manual path';
return null;
} elseif ($marker === 0xC4) {
$q = 0;
$end = strlen($seg);
while ($q < $end) {
$tbl = ns_jpeg_huffman_table($seg, $q, $end);
if (!$tbl) break;
$huff[$tbl['class']][$tbl['id']] = $tbl['map'];
}
} elseif ($marker === 0xDD && strlen($seg) >= 2) {
$restart = ns_u16be($seg, 0);
}
$p = $segEnd;
}
if (!$scanPos || !$width || !$height || $precision !== 8 || !$components || !$scan) {
$why = 'manual JPEG path needs baseline 8-bit SOF0 with one scan';
return null;
}
if (count($components) !== 1 && count($components) !== 3) {
$why = 'manual JPEG path supports grayscale or YCbCr only';
return null;
}
$maxH = 1;
$maxV = 1;
foreach ($components as $c) {
$maxH = max($maxH, (int)$c['h']);
$maxV = max($maxV, (int)$c['v']);
}
$yId = $order[0] ?? $scan[0];
$yH = max(1, (int)($components[$yId]['h'] ?? 1));
$yV = max(1, (int)($components[$yId]['v'] ?? 1));
$outW = (int)ceil($width / 8);
$outH = (int)ceil($height / 8);
if ($outW * $outH > MEDIA_MANUAL_JPEG_MAX_THUMB_PIXELS) {
$why = 'manual JPEG thumbnail would exceed pixel budget';
return null;
}
foreach ($components as $cid => $c) {
$q0 = $qt[(int)$c['q']] ?? null;
$dc = $huff[0][(int)$c['dc']] ?? null;
$ac = $huff[1][(int)$c['ac']] ?? null;
if ($q0 === null || !$dc || !$ac) {
$why = 'manual JPEG path missing quantization or Huffman tables';
return null;
}
}
$pixels = array_fill(0, $outW * $outH, 0);
$pred = [];
foreach (array_keys($components) as $cid) $pred[$cid] = 0;
$br = new NsFunJpegEntropyReader($raw, $scanPos);
$mcuW = 8 * $maxH;
$mcuH = 8 * $maxV;
$mcusX = (int)ceil($width / $mcuW);
$mcusY = (int)ceil($height / $mcuH);
$mcuIndex = 0;
for ($my = 0; $my < $mcusY; $my++) {
for ($mx = 0; $mx < $mcusX; $mx++, $mcuIndex++) {
if ($restart > 0 && $mcuIndex > 0 && ($mcuIndex % $restart) === 0) {
$br->align();
$br->consumeRestart();
foreach (array_keys($pred) as $cid) $pred[$cid] = 0;
}
$mcu = [];
foreach ($scan as $cid) {
$c = $components[$cid];
$mcu[$cid] = [];
$q0 = (int)$qt[(int)$c['q']];
$dcTable = $huff[0][(int)$c['dc']];
$acTable = $huff[1][(int)$c['ac']];
for ($vy = 0; $vy < (int)$c['v']; $vy++) {
$mcu[$cid][$vy] = [];
for ($hx = 0; $hx < (int)$c['h']; $hx++) {
$sample = ns_jpeg_decode_dc_block($br, $dcTable, $acTable, $pred[$cid], $q0);
if ($sample === null) {
$why = 'manual JPEG entropy decode failed';
return null;
}
$mcu[$cid][$vy][$hx] = $sample;
}
}
}
for ($vy = 0; $vy < $yV; $vy++) {
for ($hx = 0; $hx < $yH; $hx++) {
$x = $mx * $yH + $hx;
$y = $my * $yV + $vy;
if ($x >= $outW || $y >= $outH) continue;
$yy = (int)($mcu[$yId][$vy][$hx] ?? 0);
if (count($components) === 1) {
$rgb = ns_rgb_int($yy, $yy, $yy);
} else {
$cbId = $order[1] ?? 2;
$crId = $order[2] ?? 3;
$cbC = $components[$cbId] ?? ['h' => 1, 'v' => 1];
$crC = $components[$crId] ?? ['h' => 1, 'v' => 1];
$cbX = min((int)$cbC['h'] - 1, (int)floor($hx * (int)$cbC['h'] / $yH));
$cbY = min((int)$cbC['v'] - 1, (int)floor($vy * (int)$cbC['v'] / $yV));
$crX = min((int)$crC['h'] - 1, (int)floor($hx * (int)$crC['h'] / $yH));
$crY = min((int)$crC['v'] - 1, (int)floor($vy * (int)$crC['v'] / $yV));
$cb = (int)($mcu[$cbId][$cbY][$cbX] ?? 128);
$cr = (int)($mcu[$crId][$crY][$crX] ?? 128);
$rgb = ns_ycbcr_to_rgb_int($yy, $cb, $cr);
}
$pixels[$y * $outW + $x] = $rgb;
}
}
}
}
$meta = ['source_width' => $width, 'source_height' => $height, 'dc_width' => $outW, 'dc_height' => $outH];
return ['pixels' => $pixels, 'width' => $outW, 'height' => $outH];
}
function compress_jpeg_dc_thumbnail_before_save(string $raw, array $info, string $mediaDir, string $url, array &$log): array {
$mime = strtolower((string)($info['mime'] ?? ''));
if ($mime !== 'image/jpeg') return ['success' => 0, 'message' => 'manual compressor supports JPEG only'];
$meta = [];
$why = '';
$img = ns_jpeg_parse_dc_thumbnail($raw, $meta, $why);
if (!$img) return ['success' => 0, 'message' => $why ?: 'manual JPEG compressor failed'];
$w = (int)$img['width'];
$h = (int)$img['height'];
$pixels = (array)$img['pixels'];
$sourceW = max(1, (int)($meta['source_width'] ?? ($info[0] ?? $w)));
$sourceH = max(1, (int)($meta['source_height'] ?? ($info[1] ?? $h)));
$budget = image_canvas_budget(strlen($raw), $sourceW, $sourceH);
[$targetW, $targetH] = image_canvas_target_dimensions($sourceW, $sourceH, (int)$budget['max_pixels']);
if ($targetW !== $w || $targetH !== $h) {
$pixels = ns_resize_rgb_nearest($pixels, $w, $h, $targetW, $targetH);
$w = $targetW;
$h = $targetH;
}
$saved = save_rgb_canvas_derivative($pixels, $w, $h, $mediaDir, $url, [
'source_width' => $sourceW,
'source_height' => $sourceH,
'source_bytes' => strlen($raw),
], $budget, $log, 'jpeg-dc');
if (!empty($saved['success'])) {
$saved['message'] = 'manual pure-PHP baseline-JPEG DC canvas saved before catalog write';
$saved['manual'] = 1;
}
return $saved;
}
function save_verified_source_thumbnail(string $raw, array $info, string $mediaDir, string $url, array &$log): array {
$srcW = max(1, (int)($info[0] ?? 0));
$srcH = max(1, (int)($info[1] ?? 0));
$bytes = strlen($raw);
$budget = image_canvas_budget($bytes, $srcW, $srcH);
if (($srcW * $srcH) > (int)$budget['max_pixels']) {
return ['success' => 0, 'message' => 'source image exceeds current canvas pixel budget'];
}
$byteCap = min(MEDIA_IMAGE_PASSTHROUGH_MAX_BYTES, (int)$budget['byte_cap']);
if ($bytes <= 0 || $bytes > $byteCap) {
return ['success' => 0, 'message' => 'source image exceeds current canvas byte budget'];
}
$mime = strtolower((string)($info['mime'] ?? ''));
$format = $mime === 'image/webp' ? 'webp' : ($mime === 'image/png' ? 'png' : ($mime === 'image/jpeg' ? 'jpg' : ''));
if ($format === '') {
return ['success' => 0, 'message' => 'source derivative mime not allowed without encoder'];
}
$features = image_canvas_features_from_raw($raw, $info);
if (empty($features['available'])) {
return ['success' => 0, 'message' => 'source passthrough lacks server canvas decoder'];
}
$policy = image_canvas_policy_report($features, ['source_mime' => $mime, 'mode' => 'bounded-source-passthrough'], 'bounded-source-passthrough');
if (($policy['verdict'] ?? '') === 'reject') return ['success' => 0, 'message' => 'source passthrough rejected by image policy'];
$writeRaw = image_passthrough_bytes($raw, $mime);
if ($writeRaw === '' || strlen($writeRaw) > $byteCap) return ['success' => 0, 'message' => 'metadata-stripped source exceeds canvas byte budget'];
if (!runtime_ensure($mediaDir)) return ['success' => 0, 'message' => 'media directory unavailable'];
$base = substr(hash('sha256', $url . '|' . $bytes . '|' . $srcW . 'x' . $srcH . '|source-thumb'), 0, 24);
$name = $base . '.' . $format;
$file = $mediaDir . DIRECTORY_SEPARATOR . $name;
$tmp = $file . '.tmp';
if (@file_put_contents($tmp, $writeRaw, LOCK_EX) === false) return ['success' => 0, 'message' => 'source derivative write failed'];
if (!atomic_replace_file($tmp, $file)) {
return ['success' => 0, 'message' => 'source derivative rename failed'];
}
$outBytes = (int)@filesize($file);
if ($outBytes <= 0) {
@unlink($file);
return ['success' => 0, 'message' => 'source derivative saved empty'];
}
$stripNote = strlen($writeRaw) < $bytes ? ' / metadata stripped ' . $bytes . 'b -> ' . strlen($writeRaw) . 'b' : '';
log_line($log, 'Saved verified source thumbnail before catalog write: ' . $srcW . 'x' . $srcH . ' / ' . $outBytes . 'b / no GD/Imagick encoder' . $stripNote . '.');
return [
'success' => 1,
'url' => 'index.php?media=' . rawurlencode($name),
'filename' => $name,
'format' => $format,
'source_width' => $srcW,
'source_height' => $srcH,
'width' => $srcW,
'height' => $srcH,
'source_bytes' => $bytes,
'bytes' => $outBytes,
'message' => 'verified source-provided image within current canvas budget saved before catalog write',
'passthrough' => 1,
'metadata_stripped' => strlen($writeRaw) < $bytes ? 1 : 0,
'canvas_pressure' => (string)$budget['pressure'],
'canvas_max_pixels' => (int)$budget['max_pixels'],
'canvas_byte_cap' => $byteCap,
'canvas_features' => $features,
'canvas_policy' => $policy,
];
}
function compress_image_before_save(string $url, string $mediaDir, array &$log): array {
$why = '';
if (!public_url_ok($url, $why)) {
return ['success' => 0, 'message' => 'image URL blocked: ' . $why];
}
$raw = http_get_public_limited($url, 14, MEDIA_IMAGE_FETCH_MAX_BYTES, 'image/avif,image/webp,image/apng,image/*,*/*;q=0.8');
if ($raw === '') {
$host = (string)(parse_url($url, PHP_URL_HOST) ?: 'unknown-host');
return ['success' => 0, 'message' => 'image fetch failed from ' . $host];
}
/* GIF motion first (≤150KB intelligent reduce); still-frame fallbacks below */
if (is_gif_bytes($raw)) {
$gifPath = compress_gif_canvas_before_save($raw, image_info_from_raw($raw) ?: [], $mediaDir, $url, $log);
if (!empty($gifPath['success'])) return $gifPath;
}
$info = image_info_from_raw($raw);
if (!is_array($info) || empty($info[0]) || empty($info[1])) return ['success' => 0, 'message' => 'image metadata unavailable'];
if (!function_exists('imagecreatefromstring') && class_exists('Imagick')) {
if (is_gif_bytes($raw)) {
$gifPath = compress_gif_canvas_before_save($raw, $info, $mediaDir, $url, $log);
if (!empty($gifPath['success'])) return $gifPath;
}
return compress_image_with_imagick($raw, $mediaDir, $url, $log);
}
$srcW = max(1, (int)$info[0]);
$srcH = max(1, (int)$info[1]);
if (!function_exists('imagecreatefromstring') && !class_exists('Imagick')) {
$thumb = save_verified_source_thumbnail($raw, $info, $mediaDir, $url, $log);
if (!empty($thumb['success'])) return $thumb;
$manual = compress_jpeg_dc_thumbnail_before_save($raw, $info, $mediaDir, $url, $log);
if (!empty($manual['success'])) return $manual;
$png = compress_png_canvas_before_save($raw, $info, $mediaDir, $url, $log);
if (!empty($png['success'])) return $png;
$gif = compress_gif_canvas_before_save($raw, $info, $mediaDir, $url, $log);
if (!empty($gif['success'])) return $gif;
$ico = compress_ico_canvas_before_save($raw, $info, $mediaDir, $url, $log);
if (!empty($ico['success'])) return $ico;
$bmp = compress_bmp_canvas_before_save($raw, $info, $mediaDir, $url, $log);
if (!empty($bmp['success'])) return $bmp;
$errs = [];
foreach (['source' => $thumb, 'jpeg' => $manual, 'png' => $png, 'gif' => $gif, 'ico' => $ico, 'bmp' => $bmp] as $label => $res) {
$msg = trim((string)($res['message'] ?? ''));
if ($msg !== '') $errs[] = $label . '=' . $msg;
}
return ['success' => 0, 'message' => $errs ? implode(' / ', $errs) : 'dependency-free image compression failed'];
}
$src = image_create_from_bytes($raw, $why);
if (!$src) return ['success' => 0, 'message' => $why ?: 'image decode failed'];
$budget = image_canvas_budget(strlen($raw), $srcW, $srcH);
[$dstW, $dstH] = image_canvas_target_dimensions($srcW, $srcH, (int)$budget['max_pixels']);
$dst = imagecreatetruecolor($dstW, $dstH);
if (!$dst) {
imagedestroy($src);
return ['success' => 0, 'message' => 'image resize canvas failed'];
}
$white = imagecolorallocate($dst, 255, 255, 255);
imagefilledrectangle($dst, 0, 0, $dstW, $dstH, $white);
imagealphablending($dst, true);
imagesavealpha($dst, true);
$ok = imagecopyresampled($dst, $src, 0, 0, 0, 0, $dstW, $dstH, $srcW, $srcH);
imagedestroy($src);
if (!$ok) {
imagedestroy($dst);
return ['success' => 0, 'message' => 'image resize failed'];
}
runtime_ensure($mediaDir);
$base = substr(hash('sha256', $url . '|' . strlen($raw) . '|' . $srcW . 'x' . $srcH), 0, 24);
$basePath = $mediaDir . DIRECTORY_SEPARATOR . $base . '.img';
$format = '';
$outBytes = 0;
$byteCap = max(65536, (int)$budget['byte_cap']);
$guard = 0;
do {
$encoded = image_encode_to_file($dst, $basePath, $format, $outBytes);
if (!$encoded) {
imagedestroy($dst);
return ['success' => 0, 'message' => 'image encode failed'];
}
$final = preg_replace('/\.[^.]+$/', '.' . $format, $basePath) ?: ($basePath . '.' . $format);
if ($outBytes > 0 && $outBytes <= $byteCap) break;
@unlink($final);
if (max($dstW, $dstH) <= 160 || $guard >= 5) {
imagedestroy($dst);
return ['success' => 0, 'message' => 'GD derivative exceeds byte cap'];
}
$nextMax = max(160, (int)floor(max($dstW, $dstH) * 0.72));
$scale = min(1.0, $nextMax / max(1, max($dstW, $dstH)));
$nextW = max(1, (int)floor($dstW * $scale));
$nextH = max(1, (int)floor($dstH * $scale));
$next = imagecreatetruecolor($nextW, $nextH);
if (!$next) {
imagedestroy($dst);
return ['success' => 0, 'message' => 'image byte-cap resize canvas failed'];
}
$white = imagecolorallocate($next, 255, 255, 255);
imagefilledrectangle($next, 0, 0, $nextW, $nextH, $white);
imagealphablending($next, true);
imagesavealpha($next, true);
$ok = imagecopyresampled($next, $dst, 0, 0, 0, 0, $nextW, $nextH, $dstW, $dstH);
imagedestroy($dst);
if (!$ok) {
imagedestroy($next);
return ['success' => 0, 'message' => 'image byte-cap resize failed'];
}
$dst = $next;
$dstW = $nextW;
$dstH = $nextH;
$guard++;
} while (true);
$features = image_canvas_features_from_gd($dst, $dstW, $dstH, strlen($raw), $budget);
$policy = image_canvas_policy_report($features, ['source_mime' => (string)($info['mime'] ?? ''), 'mode' => 'gd-canvas'], 'gd-canvas');
imagedestroy($dst);
$name = $base . '.' . $format;
$savedUrl = 'index.php?media=' . rawurlencode($name);
log_line($log, 'Compressed image before save: ' . $srcW . 'x' . $srcH . ' -> ' . $dstW . 'x' . $dstH . ' / ' . strlen($raw) . 'b -> ' . $outBytes . 'b');
return [
'success' => 1,
'url' => $savedUrl,
'filename' => $name,
'format' => $format,
'source_width' => $srcW,
'source_height' => $srcH,
'width' => $dstW,
'height' => $dstH,
'source_bytes' => strlen($raw),
'bytes' => $outBytes,
'message' => 'compressed local derivative saved before catalog write',
'canvas_pressure' => (string)$budget['pressure'],
'canvas_max_pixels' => (int)$budget['max_pixels'],
'canvas_byte_cap' => $byteCap,
'canvas_features' => $features,
'canvas_policy' => $policy,
];
}
function media_candidate_url(array $candidate): string {
return html_entity_decode(trim((string)($candidate['url'] ?? '')), ENT_QUOTES | ENT_HTML5, 'UTF-8');
}
function preferred_media_choice(string $url, array $item): array {
$original = html_entity_decode(trim($url), ENT_QUOTES | ENT_HTML5, 'UTF-8');
$type = media_type_from_url($original);
$candidates = [];
foreach ((array)($item['media_candidates'] ?? []) as $candidate) {
if (!is_array($candidate)) continue;
$cu = media_candidate_url($candidate);
if (!media_url_ok($cu)) continue;
if ($type !== '' && media_type_from_url($cu) !== $type) continue;
$w = max(0, (int)($candidate['width'] ?? 0));
$h = max(0, (int)($candidate['height'] ?? 0));
$bytes = max(0, (int)($candidate['bytes'] ?? 0));
$candidates[] = ['url' => $cu, 'width' => $w, 'height' => $h, 'bytes' => $bytes, 'label' => (string)($candidate['label'] ?? '')];
}
if (!media_url_ok($original)) {
return ['url' => $original, 'original_url' => $original, 'changed' => 0, 'candidate_count' => count($candidates), 'note' => 'invalid media URL rejected later'];
}
if (!$candidates) {
return ['url' => $original, 'original_url' => $original, 'changed' => 0, 'candidate_count' => 0, 'note' => 'no smaller source-provided variant available'];
}
usort($candidates, function ($a, $b): int {
$aw = (int)$a['width'];
$bw = (int)$b['width'];
$as = $aw > 0 ? abs($aw - MEDIA_TARGET_WIDTH) : 9999;
$bs = $bw > 0 ? abs($bw - MEDIA_TARGET_WIDTH) : 9999;
if ($aw > MEDIA_TARGET_WIDTH) $as += 180;
if ($bw > MEDIA_TARGET_WIDTH) $bs += 180;
$as += min(160, (int)floor(((int)$a['bytes']) / 250000));
$bs += min(160, (int)floor(((int)$b['bytes']) / 250000));
return ($as <=> $bs) ?: ($aw <=> $bw);
});
$pick = $candidates[0];
return [
'url' => (string)$pick['url'],
'original_url' => $original,
'changed' => (string)$pick['url'] !== $original ? 1 : 0,
'candidate_count' => count($candidates),
'width' => (int)$pick['width'],
'height' => (int)$pick['height'],
'bytes' => (int)$pick['bytes'],
'label' => (string)$pick['label'],
'note' => 'source-provided variant chosen before catalog save',
];
}
function reddit_preview_candidates(array $post): array {
$out = [];
$images = $post['preview']['images'][0] ?? [];
if (!is_array($images)) return $out;
foreach (array_merge((array)($images['resolutions'] ?? []), isset($images['source']) ? [$images['source']] : []) as $row) {
if (!is_array($row)) continue;
$url = html_entity_decode((string)($row['url'] ?? ''), ENT_QUOTES | ENT_HTML5, 'UTF-8');
if (!media_url_ok($url)) continue;
$out[] = [
'url' => $url,
'width' => (int)($row['width'] ?? 0),
'height' => (int)($row['height'] ?? 0),
'label' => 'reddit preview',
];
}
return $out;
}
function archive_file_media_url(string $id, array $file): string {
$name = (string)($file['name'] ?? '');
if ($id === '' || $name === '') return '';
return 'https://archive.org/download/' . rawurlencode($id) . '/' . rawurlencode($name);
}
function archive_pick_media_file(array $files, bool $allowImages = false): ?array {
$candidates = [];
foreach ($files as $file) {
if (!is_array($file)) continue;
$name = (string)($file['name'] ?? '');
$size = max(0, (int)($file['size'] ?? 0));
$ok = $allowImages
? preg_match('/\.(mp4|webm|mov|m4v|jpg|jpeg|png|gif|webp|bmp|ico|tif|tiff|avif|heif|heic)$/i', $name)
: preg_match('/\.(mp4|webm|mov|m4v)$/i', $name);
if (!$ok || ($size > 0 && $size < 60000) || ($size > 0 && $size > 90000000)) continue;
$score = $size > 0 ? (int)floor($size / 700000) : 80;
if (preg_match('/(360|480|512k|512kb|small|mobile|low|medium)/i', $name)) $score -= 40;
if (preg_match('/(720|1080|2160|hd|hq|high|large|source|original)/i', $name)) $score += 55;
if (preg_match('/\.(jpg|jpeg|png|webp)$/i', $name)) $score -= 15;
$candidates[] = ['file' => $file, 'score' => $score, 'size' => $size, 'name' => $name];
}
if (!$candidates) return null;
usort($candidates, fn($a, $b) => ((int)$a['score'] <=> (int)$b['score']) ?: ((int)$a['size'] <=> (int)$b['size']) ?: strcmp((string)$a['name'], (string)$b['name']));
return $candidates[0]['file'];
}
/** SFW sub pollution set — only real subreddit names that must never pass as nsfw. */
function safe_lane_subreddit_set(): array {
static $set = null;
if (is_array($set)) return $set;
$set = [];
foreach (['LM', 'RM'] as $lane) {
$terms = source_lanes()[$lane]['terms'] ?? [];
foreach ($terms as $t) {
$t = strtolower(preg_replace('/[^a-z0-9_]/', '', (string)$t) ?? '');
/* skip tiny tokens that collide with adult slang */
if ($t !== '' && strlen($t) >= 3) $set[$t] = true;
}
}
foreach (['halo','minecraft','gaming','pcgaming','nintendo','ps5','xbox','leagueoflegends','valorant','fortnite','destinythegame','wow','pokemon','anime','memes','funny','pics','videos','news','worldnews','science','askreddit','aww','eyebleach','mademesmile','wholesomememes'] as $t) {
$set[$t] = true;
}
return $set;
}
function nsfw_lane_subreddit_set(): array {
static $set = null;
if (is_array($set)) return $set;
$set = [];
foreach (['NM', 'NV'] as $lane) {
$terms = source_lanes()[$lane]['terms'] ?? [];
foreach ($terms as $t) {
$t = strtolower(preg_replace('/[^a-z0-9_]/', '', (string)$t) ?? '');
if ($t !== '' && strlen($t) >= 2) $set[$t] = true;
}
}
return $set;
}
/** Demote clear SFW-sub pollution (halo on ONLY). Tags are untrusted — lane stamps inject nsfw/adult. */
function item_intensity_honest(array $item): string {
$raw = (string)($item['intensity'] ?? 'safe');
$sub = strtolower(preg_replace('/[^a-z0-9_]/', '', (string)($item['subreddit'] ?? '')) ?? '');
if ($sub === '' && preg_match('/(?:^|\/)r\/([a-z0-9_]+)/i', (string)($item['source_url'] ?? $item['postLink'] ?? ''), $m)) {
$sub = strtolower($m[1]);
}
if ($sub !== '' && isset(safe_lane_subreddit_set()[$sub]) && !isset(nsfw_lane_subreddit_set()[$sub])) {
/* Known LM/RM SFW sub: only real Reddit over_18 keeps nsfw. Ignore tags (polluted). Title-only adult OK. */
if (!empty($item['over_18'])) {
return 'nsfw';
}
$title = (string)($item['title'] ?? '');
if (function_exists('adult_text_signal') && adult_text_signal($title)) {
return $raw === 'nsfw' ? 'nsfw' : 'safe';
}
return 'safe';
}
return $raw === 'nsfw' ? 'nsfw' : 'safe';
}
function adult_text_signal(string $text): bool {
return (bool)preg_match('/\b(nsfw|adult|erotic|nude|nudity|boob|breast|sex|sexy|softcore|striptease|burlesque|lingerie|boudoir|pinup|uncensored|fetish)\b/i', $text);
}
/**
* Extreme content blocklist — finish-29 host-risk set (NOT a purity scrub of NM).
*
* GUARDRAIL (psyops): This is a small hard reject set for known host/legal heat
* seeds — it is NOT permission to gut source_lanes()['NM']['terms']. NM keeps
* sketchy adult brands on purpose; optional LLM + item-level checks filter
* real-victim / real-minor / real-snuff / real-zoophilia product later.
* Do NOT expand this list to match every crude sub name in NM. Do NOT move NM
* terms into this block “to be safe.” Human GO only to change either list.
*
* This gate runs at harvest / user_suggest / serve when content_safety_* fires.
*/
function extreme_blocked_subreddits(): array {
static $set = null;
if ($set !== null) return $set;
$subs = [
/* finish-29 remove-only (frozen width) — not a template for more purity cuts */
'bimbofetish','breeding','buttsharpies','cuckold','cumhaters','dragonpenis','dragonsfuckingcars','dragonsfuckingdragons','facefuck','freeuse','gangbang','hentaibeast','hentaihumiliation','horsecocksmasterrace','masterofanal','painal','pegging','preggoporn','scalieporn','slutwife','throatpies','trashyboners','wifesharing','wouldyoufuckmywife',
];
$set = [];
foreach ($subs as $s) {
$k = strtolower(preg_replace('/[^a-z0-9_]/', '', $s) ?? '');
if ($k !== '') $set[$k] = true;
}
return $set;
}
/**
* Keyword patterns: finish-29 mirrors + hard host-kill tokens (minors / real-harm classes).
* GUARDRAIL: do not treat “sketchy adult fantasy words in titles” as a reason to
* delete NM harvest seeds. Item reject here is post-seed; seed width stays fat.
* Real host-kill floor lives in the underage/loli/shota/snuff/zoophil lines.
*/
function extreme_content_keyword_pattern(): string {
return '/\b('
. 'painal|freeuse|face\s*fuck|throat\s*pies?|cuckold|slut\s*wife|bimbo\s*fetish|hentai\s*humiliation|'
. 'trashy\s*boners|master\s*of\s*anal|butt\s*sharpies?|gangbang|\bbreeding\b|cum\s*haters|'
. 'hentai\s*beast|dragons?\s*fucking\s*cars|dragons?\s*fucking\s*dragons|horse\s*cocks?\s*master\s*race|'
. 'dragon\s*penis|scalie\s*porn|preggo\s*porn|\bpegging\b|would\s*you\s*fuck\s*my\s*wife|wife\s*sharing|'
. 'underage|preteen|loli|shota|jailbait|child\s*porn|\bcp\b|'
. 'gore|snuff|necro(?:phil)?|scat|zoophil|bestialit'
. ')\b/i';
}
/**
* Returns reject reason string, or '' if allowed.
* Checks subreddit allowlist-removal set + keyword scan on title/desc/url/sub.
*/
function content_safety_reject_reason(array $item): string {
$sub = strtolower(preg_replace('/[^a-z0-9_]/', '', (string)($item['subreddit'] ?? '')) ?? '');
if ($sub === '' && preg_match('/(?:^|\/)r\/([a-z0-9_]+)/i', (string)($item['source_url'] ?? $item['postLink'] ?? $item['url'] ?? ''), $m)) {
$sub = strtolower($m[1]);
}
if ($sub !== '' && isset(extreme_blocked_subreddits()[$sub])) {
return 'blocked_subreddit:' . $sub;
}
$blob = strtolower(implode(' ', [
(string)($item['title'] ?? ''),
(string)($item['description'] ?? ''),
(string)($item['subreddit'] ?? ''),
(string)($item['url'] ?? ''),
(string)($item['source_url'] ?? ''),
(string)($item['postLink'] ?? ''),
implode(' ', (array)($item['tags'] ?? [])),
]));
if ($blob !== '' && preg_match(extreme_content_keyword_pattern(), $blob, $km)) {
return 'blocked_keyword:' . strtolower((string)($km[1] ?? 'extreme'));
}
return '';
}
function content_safety_allowed(array $item): bool {
return content_safety_reject_reason($item) === '';
}
function http_get(string $url, int $timeout = 15): string {
if (function_exists('curl_init')) {
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => $timeout,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_USERAGENT => HARVEST_AGENT,
CURLOPT_HTTPHEADER => ['Accept: application/json,text/plain,*/*'],
]);
$body = (string)curl_exec($ch);
$code = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return ($code >= 200 && $code < 300) ? $body : '';
}
$ctx = stream_context_create(['http' => [
'method' => 'GET',
'timeout' => $timeout,
'ignore_errors' => true,
'header' => "User-Agent: " . HARVEST_AGENT . "\r\nAccept: application/json,text/plain,*/*\r\n",
]]);
$body = @file_get_contents($url, false, $ctx);
$status = 0;
foreach (($http_response_header ?? []) as $hline) {
if (preg_match('/^HTTP\/\S+\s+(\d+)/', $hline, $m)) $status = (int)$m[1];
}
if ($body !== false && $status >= 200 && $status < 300) return (string)$body;
if (function_exists('shell_exec') && preg_match('/^https?:\/\/[a-z0-9._~:\/?#\[\]@!$&\'()*+,;=%-]+$/i', $url)) {
$null = DIRECTORY_SEPARATOR === '\\' ? '2>NUL' : '2>/dev/null';
$cmd = 'curl -sSL --max-time ' . max(1, $timeout) .
' -A ' . cli_arg(HARVEST_AGENT) .
' -H ' . cli_arg('Accept: application/json,text/plain,*/*') .
' ' . cli_arg($url) . ' ' . $null;
$out = @shell_exec($cmd);
return is_string($out) ? $out : '';
}
return '';
}
function http_json(string $url, int $timeout = 15): array {
$body = http_get($url, $timeout);
if ($body === '') return [];
$json = json_decode($body, true);
return is_array($json) ? $json : [];
}
function public_ip_ok(string $ip): bool {
$flags = FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE;
return (bool)filter_var($ip, FILTER_VALIDATE_IP, $flags);
}
function public_url_ok(string $url, string &$why = ''): bool {
$parts = parse_url($url);
if (!is_array($parts) || !in_array(strtolower((string)($parts['scheme'] ?? '')), ['http','https'], true)) {
$why = 'URL must start with http:// or https://';
return false;
}
$host = strtolower(trim((string)($parts['host'] ?? ''), " \t\n\r\0\x0B."));
if ($host === '' || strlen($host) > 253 || preg_match('/[^\pL\pN.\-]/u', $host)) {
$why = 'URL host is not valid';
return false;
}
if ($host === 'localhost' || str_ends_with($host, '.localhost') || str_ends_with($host, '.local') || str_ends_with($host, '.lan') || str_ends_with($host, '.internal')) {
$why = 'Local/private hosts are blocked';
return false;
}
if (filter_var($host, FILTER_VALIDATE_IP)) {
if (!public_ip_ok($host)) {
$why = 'Private or reserved IPs are blocked';
return false;
}
return true;
}
$ips = @gethostbynamel($host);
if (!is_array($ips) || !$ips) {
$why = 'Host could not be resolved';
return false;
}
foreach ($ips as $ip) {
if (!public_ip_ok((string)$ip)) {
$why = 'Host resolves to a private or reserved IP';
return false;
}
}
return true;
}
function http_get_public_limited(string $url, int $timeout = 12, int $maxBytes = 524288, string $accept = 'application/json,text/html,text/plain,*/*'): string {
$why = '';
if (!public_url_ok($url, $why)) return '';
$accept = trim($accept) !== '' ? trim($accept) : '*/*';
$buf = '';
if (function_exists('curl_init')) {
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_TIMEOUT => $timeout,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_USERAGENT => HARVEST_AGENT,
CURLOPT_RANGE => '0-' . max(0, $maxBytes - 1),
CURLOPT_HTTPHEADER => ['Accept: ' . $accept],
CURLOPT_WRITEFUNCTION => function ($ch, string $chunk) use (&$buf, $maxBytes): int {
$take = max(0, $maxBytes - strlen($buf));
if ($take > 0) $buf .= substr($chunk, 0, $take);
return strlen($chunk);
},
]);
@curl_exec($ch);
$code = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return ($code >= 200 && $code < 300) ? $buf : '';
}
$ctx = stream_context_create(['http' => [
'method' => 'GET',
'timeout' => $timeout,
'ignore_errors' => true,
'header' => "User-Agent: " . HARVEST_AGENT . "\r\nAccept: " . $accept . "\r\n",
]]);
$fp = @fopen($url, 'rb', false, $ctx);
if ($fp) {
while (!feof($fp) && strlen($buf) < $maxBytes) $buf .= (string)fread($fp, min(8192, $maxBytes - strlen($buf)));
fclose($fp);
if ($buf !== '') return $buf;
}
if (function_exists('shell_exec') && preg_match('/^https?:\/\/[a-z0-9._~:\/?#\[\]@!$&\'()*+,;=%-]+$/i', $url)) {
$null = DIRECTORY_SEPARATOR === '\\' ? '2>NUL' : '2>/dev/null';
$tmp = @tempnam(sys_get_temp_dir(), 'nsfun_fetch_');
if (!$tmp) return '';
$cmd = 'curl -sSL --max-time ' . max(1, $timeout) .
' --range 0-' . max(0, $maxBytes - 1) .
' -A ' . cli_arg(HARVEST_AGENT) .
' -H ' . cli_arg('Accept: ' . $accept) .
' -o ' . cli_arg($tmp) .
' ' . cli_arg($url) . ' ' . $null;
@shell_exec($cmd);
$out = is_file($tmp) ? (string)@file_get_contents($tmp) : '';
@unlink($tmp);
return $out !== '' ? substr($out, 0, $maxBytes) : '';
}
return '';
}
function http_json_public(string $url, int $timeout = 12): array {
$body = http_get_public_limited($url, $timeout, 786432);
if ($body === '') return [];
$json = json_decode($body, true);
return is_array($json) ? $json : [];
}
function http_post_json(string $url, array $payload, int $timeout = 20): array {
$body = '';
$code = 0;
$jsonPayload = json_encode($payload, JSON_UNESCAPED_SLASHES);
if (function_exists('curl_init')) {
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => $timeout,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $jsonPayload,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
]);
$body = (string)curl_exec($ch);
$code = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
} else {
$ctx = stream_context_create(['http' => [
'method' => 'POST',
'timeout' => $timeout,
'ignore_errors' => true,
'header' => "Content-Type: application/json\r\n",
'content' => $jsonPayload,
]]);
$raw = @file_get_contents($url, false, $ctx);
$body = $raw === false ? '' : (string)$raw;
foreach (($http_response_header ?? []) as $hline) {
if (preg_match('/^HTTP\/\S+\s+(\d+)/', $hline, $m)) $code = (int)$m[1];
}
}
if ($code < 200 || $code >= 300 || $body === '') return [];
$json = json_decode($body, true);
return is_array($json) ? $json : [];
}
function ai_model_ready(string $model = OLLAMA_MODEL, string $url = OLLAMA_URL): bool {
$tags = http_json(rtrim($url, '/') . '/api/tags', 3);
return ai_model_ready_from_tags($tags, $model);
}
function ai_model_ready_from_tags(array $tags, string $model = OLLAMA_MODEL): bool {
foreach (($tags['models'] ?? []) as $m) {
if (strtolower((string)($m['name'] ?? '')) === strtolower($model)) return true;
}
return false;
}
function ai_status_payload(): array {
$up = http_json(rtrim(OLLAMA_URL, '/') . '/api/tags', 3);
return [
'success' => 1,
'ollama' => $up ? 'up' : 'down',
'model' => OLLAMA_MODEL,
'model_ready' => $up ? ai_model_ready_from_tags($up, OLLAMA_MODEL) : false,
'url' => OLLAMA_URL,
];
}
function handle_ai_bootstrap(string $stateFile): void {
$state = read_json_file($stateFile, []);
$status = ai_status_payload();
if ($status['model_ready']) {
json_response(['success' => 1, 'stage' => 'ready', 'status' => $status]);
return;
}
if (!function_exists('shell_exec')) {
json_response(['success' => 0, 'stage' => 'shell_disabled', 'status' => $status]);
return;
}
if ($status['ollama'] !== 'up') {
$cmd = DIRECTORY_SEPARATOR === '\\' ? 'start /B ollama serve' : 'nohup ollama serve >/dev/null 2>&1 &';
@shell_exec($cmd);
$state['serve_started_at'] = now_iso();
}
$pullCmd = DIRECTORY_SEPARATOR === '\\'
? 'start /B ollama pull ' . cli_arg(OLLAMA_MODEL)
: 'ollama pull ' . cli_arg(OLLAMA_MODEL) . ' >/dev/null 2>&1 &';
@shell_exec($pullCmd);
$state['pull_started_at'] = now_iso();
$state['model'] = OLLAMA_MODEL;
write_json_file($stateFile, $state);
json_response(['success' => 1, 'stage' => 'bootstrap_started', 'model' => OLLAMA_MODEL, 'status' => ai_status_payload()]);
}
function ai_proposal_status_payload(string $action): array {
return [
'success' => 1,
'schema' => 'nosignup.fun.ai-proposal-ledger.v1',
'action' => $action,
'active' => 0,
'mode' => 'read-only scaffold',
'message' => 'Future Help the Network helper/source/advisor proposal route; proposals are data before authority.',
'accepts' => [
'public no-login helper/source/advisor URL',
'source adapter or crawl clue',
'mirror inventory hint',
],
'rejects' => [
'remote code execution',
'secrets or API keys',
'login, paywall, CAPTCHA, private hosts, malware, doxxing, minors, or nonconsensual sexual material',
],
'ledger' => 'runtime/ai/{proposals,trials,adoptions}.txt',
'authority' => 'none until deterministic validation, TTL, visible evidence, votes, and rollback path exist',
];
}
function normalize_public_hint_url(string $url): string {
$url = trim($url);
if ($url === '') return '';
if (!preg_match('/^https?:\/\//i', $url)) $url = 'https://' . $url;
return $url;
}
function handle_ai_proposal_submit(string $proposalFile): void {
$raw = (string)@file_get_contents('php://input');
$json = json_decode($raw, true);
$src = is_array($json) ? $json : $_POST;
$kind = strtolower(preg_replace('/[^a-z0-9_\-]/', '', (string)($src['kind'] ?? 'helper')));
if (!in_array($kind, ['mirror','helper','source','advisor'], true)) $kind = 'helper';
$url = normalize_public_hint_url((string)($src['url'] ?? ''));
$why = '';
if (!public_url_ok($url, $why)) {
node_metric_record('ai_propose', ['ok' => 0, 'kind' => $kind, 'reason' => $why]);
json_response(['success' => 0, 'message' => $why ?: 'Public URL required']);
return;
}
$dir = dirname($proposalFile);
if (!runtime_ensure($dir)) {
json_response(['success' => 0, 'message' => 'Proposal ledger unavailable']);
return;
}
$node = node_metric_node_id(node_metric_ip());
$row = [
'schema=nosignup.fun.ai-proposal.v1',
'at=' . now_iso(),
'expires=' . gmdate('Y-m-d\TH:i:s\Z', time() + TTL_DAYS * 86400),
'kind=' . $kind,
'node=' . $node,
'url=' . str_replace(["\t","\r","\n"], ' ', $url),
'status=queued',
'authority=none',
];
$ok = @file_put_contents($proposalFile, implode("\t", $row) . "\n", FILE_APPEND | LOCK_EX) !== false;
node_metric_record('ai_propose', ['ok' => $ok ? 1 : 0, 'kind' => $kind, 'host' => (string)(parse_url($url, PHP_URL_HOST) ?: '')]);
json_response([
'success' => $ok ? 1 : 0,
'schema' => 'nosignup.fun.ai-proposal-ledger.v1',
'message' => $ok ? 'Queued as a public hint; no authority granted.' : 'Proposal write failed',
'kind' => $kind,
'url' => $url,
'ttl_days' => TTL_DAYS,
'authority' => 'none until validation, votes, outcomes, and rollback path exist',
]);
}
function fallback_classify(array $item): array {
$lane = (string)($item['lane'] ?? '');
/* Title+description only — do not feed tags into adult_text_signal (circular: we used to inject nsfw/adult into tags). */
$text = strtolower(($item['title'] ?? '') . ' ' . ($item['description'] ?? ''));
$nsfw = (($item['intensity'] ?? '') === 'nsfw') || adult_text_signal($text);
if ($nsfw) {
return [
'intensity' => 'nsfw',
'vector' => 'consent-gated explicit arousal / attention reset / neurochemical stimulation',
'summary' => 'Explicit or adult material is treated as a consent-gated arousal reference, not a default feed item.',
'practice' => 'Use only after age/consent gate; stop if it weakens agency, clarity, or self-continuity.',
/* Never inject adult_text_signal keywords into tags — that re-poisoned halo/SFW on ONLY. */
'tags' => array_values(array_unique(array_merge((array)($item['tags'] ?? []), ['consent-gate','explicit-lane']))),
];
}
if (preg_match('/ground|calm|meditat|yoga|wholesome|smile|aww|uplift|cozy|nature|art|music|creative|rhythm/', $text)) {
return [
'intensity' => 'safe',
'vector' => 'anti-dissociative sensory orientation / agency restoration',
'summary' => 'A beneficial reference can pull attention back into body, sensory fact, beauty, rhythm, or social warmth.',
'practice' => 'Notice one concrete sensory detail, then choose one small next action.',
'tags' => array_values(array_unique(array_merge((array)($item['tags'] ?? []), ['grounding','agency','anti-dissociative']))),
];
}
return [
'intensity' => 'safe',
'vector' => 'cognitive orientation / pattern recognition / nosignup.info defense vocabulary',
'summary' => 'This reference is useful when it improves comparison, learning, agency, or recognition of a control vector.',
'practice' => 'Name the pattern, compare it against one outside reference, and keep the exit path visible.',
'tags' => array_values(array_unique(array_merge((array)($item['tags'] ?? []), ['pattern','comparison','learning']))),
];
}
function ai_classify_candidate(array $item, bool $useAi, array &$log): array {
$fallback = fallback_classify($item);
if (!$useAi || !ai_model_ready()) return array_merge($item, $fallback);
$prompt = "Classify this NOSIGNUP.FUN media candidate. Return strict JSON only with keys vector, summary, practice, tags, intensity. intensity must be safe or nsfw.\n" .
json_encode([
'title' => $item['title'] ?? '',
'description' => $item['description'] ?? '',
'source' => $item['source'] ?? '',
'lane' => $item['lane'] ?? '',
'declared_intensity' => $item['intensity'] ?? '',
], JSON_UNESCAPED_SLASHES);
$res = http_post_json(rtrim(OLLAMA_URL, '/') . '/api/chat', [
'model' => OLLAMA_MODEL,
'stream' => false,
'messages' => [
['role' => 'system', 'content' => 'You label content for a local no-signup catalog. Be brief, defensive, consent-aware, and JSON-only.'],
['role' => 'user', 'content' => $prompt],
],
'options' => ['temperature' => 0.1, 'num_predict' => 180],
], 20);
$txt = (string)($res['message']['content'] ?? '');
$json = json_decode(trim($txt), true);
if (!is_array($json)) {
log_line($log, 'A.I. classifier returned non-JSON; fallback used.');
return array_merge($item, $fallback);
}
$json['intensity'] = $fallback['intensity'] === 'nsfw' || (($json['intensity'] ?? '') === 'nsfw') ? 'nsfw' : 'safe';
$json['tags'] = array_values(array_unique(array_slice(array_merge((array)($item['tags'] ?? []), (array)($json['tags'] ?? [])), 0, 12)));
log_line($log, 'A.I. classifier labeled ' . ($item['title'] ?? 'candidate'));
return array_merge($item, $fallback, array_intersect_key($json, array_flip(['vector','summary','practice','tags','intensity'])));
}
function normalize_harvest_item(array $item, string $lane, array $laneCfg, bool $useAi, array &$log): ?array {
$url = trim((string)($item['url'] ?? ''));
if (!media_url_ok($url)) return null;
$choice = preferred_media_choice($url, $item);
$originalUrl = (string)$choice['original_url'];
$url = (string)$choice['url'];
if (!media_url_ok($url)) return null;
$compression = [
'target_width' => MEDIA_TARGET_WIDTH,
'max_dimension' => MEDIA_IMAGE_MAX_DIMENSION,
'changed_before_save' => (int)($choice['changed'] ?? 0),
'candidate_count' => (int)($choice['candidate_count'] ?? 0),
'selected_width' => (int)($choice['width'] ?? 0),
'selected_height' => (int)($choice['height'] ?? 0),
'selected_bytes' => (int)($choice['bytes'] ?? 0),
'label' => (string)($choice['label'] ?? ''),
'note' => (string)($choice['note'] ?? ''),
];
if (media_type_from_url($url) === 'image' && preg_match('/^https?:\/\//i', $url)) {
$compressed = compress_image_before_save($url, (string)($GLOBALS['MEDIA_DIR'] ?? (fun_default_runtime_dir() . DIRECTORY_SEPARATOR . 'media')), $log);
if (empty($compressed['success'])) {
$host = (string)(parse_url($url, PHP_URL_HOST) ?: 'unknown-host');
log_line($log, 'Rejected image before save: ' . $host . ' / ' . substr((string)($item['title'] ?? 'untitled'), 0, 90) . ' / ' . (string)($compressed['message'] ?? 'unknown'));
return null;
}
$url = (string)$compressed['url'];
$compression = array_merge($compression, [
'required' => 1,
'local_derivative' => 1,
'changed_before_save' => 1,
'filename' => (string)($compressed['filename'] ?? ''),
'format' => (string)($compressed['format'] ?? ''),
'source_width' => (int)($compressed['source_width'] ?? 0),
'source_height' => (int)($compressed['source_height'] ?? 0),
'source_bytes' => (int)($compressed['source_bytes'] ?? 0),
'selected_width' => (int)($compressed['width'] ?? 0),
'selected_height' => (int)($compressed['height'] ?? 0),
'selected_bytes' => (int)($compressed['bytes'] ?? 0),
'note' => (string)($compressed['message'] ?? 'compressed before save'),
'canvas_pressure' => (string)($compressed['canvas_pressure'] ?? ''),
'canvas_max_pixels' => (int)($compressed['canvas_max_pixels'] ?? 0),
'canvas_byte_cap' => (int)($compressed['canvas_byte_cap'] ?? 0),
'canvas_features' => is_array($compressed['canvas_features'] ?? null) ? $compressed['canvas_features'] : [],
'canvas_policy' => is_array($compressed['canvas_policy'] ?? null) ? $compressed['canvas_policy'] : [],
]);
} elseif (media_type_from_url($url) === 'image' && !preg_match('/^index\.php\?media=/i', $url)) {
log_line($log, 'Rejected image before save: not a compressed local derivative.');
return null;
}
$adultSignal = adult_text_signal(($item['title'] ?? '') . ' ' . ($item['description'] ?? '') . ' ' . $url);
$item['original_url'] = $originalUrl;
$item['render_url'] = $url;
$item['url'] = $url;
$safetyWhy = content_safety_reject_reason($item);
if ($safetyWhy !== '') {
log_line($log, 'Rejected harvest (safety): ' . $safetyWhy . ' / ' . substr((string)($item['title'] ?? ''), 0, 80));
return null;
}
$item['compression'] = $compression;
$item['source_refs'] = array_values(array_filter(array_unique([
(string)($item['source_url'] ?? ''),
(string)($item['postLink'] ?? ''),
$originalUrl,
$url,
])));
$item['source_trace'] = [
'adapter_lane' => $lane,
'source' => (string)($item['source'] ?? ''),
'source_url' => (string)($item['source_url'] ?? ''),
'postLink' => (string)($item['postLink'] ?? ''),
'original_url' => $originalUrl,
'saved_render_url' => $url,
'compression_policy' => image_compression_policy_text(),
];
$item['lane'] = $lane;
$subClean = strtolower(preg_replace('/[^a-z0-9_]/', '', (string)($item['subreddit'] ?? '')) ?? '');
$trustedNsfwSub = $subClean !== '' && isset(nsfw_lane_subreddit_set()[$subClean]);
$knownSafeSub = $subClean !== '' && isset(safe_lane_subreddit_set()[$subClean]) && !$trustedNsfwSub;
/* BUGFIX: NM lane must NOT force-stampsfw r/halo etc. Require adult signal, over_18, or trusted nsfw sub. */
$isNsfw = !empty($item['over_18']) || $adultSignal || $trustedNsfwSub;
if ((string)($laneCfg['intensity'] ?? '') === 'nsfw' && !$isNsfw) {
log_line($log, 'Reject SFW r/' . $subClean . ' in nsfw lane ' . $lane . ' (no over_18/adult signal)');
return null;
}
if ($knownSafeSub && $isNsfw && empty($item['over_18']) && !$adultSignal) {
/* Title false-positive adult on known SFW sub — keep safe */
$isNsfw = false;
}
$item['intensity'] = $isNsfw ? 'nsfw' : 'safe';
$item['side'] = $item['intensity'] === 'nsfw' ? 'N' : (string)$laneCfg['side'];
$item['type'] = media_type_from_url($url);
$item['medium'] = medium_from_lane($lane);
$item['bucket'] = $lane;
$item['side_weights'] = side_weights_for_item($item);
$item['created_at'] = $item['created_at'] ?? now_iso();
$item['harvested_at'] = now_iso();
$item['lifespan'] = TTL_DAYS;
$item['upvotes'] = 0;
$item['downvotes'] = 0;
$item['tags'] = array_values(array_unique(array_merge(token_list(($item['title'] ?? '') . ' ' . ($item['description'] ?? '')), [$lane, (string)$item['source']])));
$idBasis = (string)($item['source_url'] ?? $item['postLink'] ?? $originalUrl);
$item['id'] = substr(hash('sha256', $lane . '|' . $idBasis . '|' . $originalUrl), 0, 12);
if (!empty($choice['changed'])) log_line($log, 'Compressed before save: ' . $originalUrl . ' -> ' . $url);
return normalize_item_taxonomy(ai_classify_candidate($item, $useAi, $log));
}
// User-assisted harvest: visitors contribute source URLs, not identities.
function clean_submitted_url(string $url): string {
$url = preg_replace('/[\x00-\x20\x7F]/', '', trim($url)) ?? '';
return substr($url, 0, 1100);
}
function url_host_label(string $url): string {
$host = strtolower((string)(parse_url($url, PHP_URL_HOST) ?: 'source'));
return preg_replace('/^www\./', '', $host) ?: 'source';
}
function absolute_url(string $base, string $candidate): string {
$candidate = html_entity_decode(trim($candidate), ENT_QUOTES | ENT_HTML5, 'UTF-8');
if ($candidate === '') return '';
if (preg_match('/^https?:\/\//i', $candidate)) return $candidate;
$parts = parse_url($base);
if (!is_array($parts) || empty($parts['scheme']) || empty($parts['host'])) return '';
if (str_starts_with($candidate, '//')) return $parts['scheme'] . ':' . $candidate;
if ($candidate[0] === '/') return $parts['scheme'] . '://' . $parts['host'] . $candidate;
$dir = preg_replace('#/[^/]*$#', '/', (string)($parts['path'] ?? '/')) ?: '/';
return $parts['scheme'] . '://' . $parts['host'] . $dir . $candidate;
}
function html_attr_value(string $tag, string $attr): string {
if (preg_match('/\s' . preg_quote($attr, '/') . '\s*=\s*([\'"])(.*?)\1/is', $tag, $m)) {
return html_entity_decode((string)$m[2], ENT_QUOTES | ENT_HTML5, 'UTF-8');
}
return '';
}
function html_meta_content(string $html, array $names): string {
preg_match_all('/ ]*>/i', $html, $matches);
$wanted = array_fill_keys(array_map('strtolower', $names), true);
foreach (($matches[0] ?? []) as $tag) {
$name = strtolower(html_attr_value($tag, 'property') ?: html_attr_value($tag, 'name'));
if ($name !== '' && isset($wanted[$name])) {
$content = html_attr_value($tag, 'content');
if ($content !== '') return $content;
}
}
return '';
}
function html_title_text(string $html): string {
if (preg_match('/]*>(.*?)<\/title>/is', $html, $m)) {
return trim(preg_replace('/\s+/', ' ', html_entity_decode(strip_tags((string)$m[1]), ENT_QUOTES | ENT_HTML5, 'UTF-8')) ?? '');
}
return '';
}
function user_lane_for_candidate(string $side, string $mediaType, bool $adult): string {
$side = in_array($side, ['L','R','N'], true) ? $side : 'L';
$prefix = $adult || $side === 'N' ? 'N' : $side;
$suffix = $mediaType === 'video' ? 'V' : 'M';
$lane = $prefix . $suffix;
return isset(source_lanes()[$lane]) ? $lane : ($prefix === 'N' ? 'NM' : $prefix . 'M');
}
function user_candidate_from_reddit_url(string $url, array &$log): ?array {
$host = strtolower((string)(parse_url($url, PHP_URL_HOST) ?: ''));
if (!preg_match('/(^|\.)reddit\.com$/', $host) && !preg_match('/(^|\.)redd\.it$/', $host)) return null;
if (media_url_ok($url)) {
return [
'url' => $url,
'title' => 'Reddit media reference',
'description' => '',
'source' => 'user-assisted reddit',
'source_url' => $url,
'postLink' => $url,
];
}
$path = (string)(parse_url($url, PHP_URL_PATH) ?: '');
if (!preg_match('#/comments/#', $path)) return null;
$jsonUrl = 'https://www.reddit.com' . rtrim($path, '/') . '.json?raw_json=1';
$json = http_json_public($jsonUrl, 12);
$p = $json[0]['data']['children'][0]['data'] ?? [];
if (!is_array($p) || !$p) return null;
$previewCandidates = reddit_preview_candidates($p);
$media = html_entity_decode((string)($p['url_overridden_by_dest'] ?? $p['url'] ?? ''), ENT_QUOTES | ENT_HTML5, 'UTF-8');
if (!media_url_ok($media) && isset($p['secure_media']['reddit_video']['fallback_url'])) {
$media = html_entity_decode((string)$p['secure_media']['reddit_video']['fallback_url'], ENT_QUOTES | ENT_HTML5, 'UTF-8');
}
if (!media_url_ok($media) && isset($p['preview']['images'][0]['source']['url'])) {
$media = html_entity_decode((string)$p['preview']['images'][0]['source']['url'], ENT_QUOTES | ENT_HTML5, 'UTF-8');
}
if (!media_url_ok($media)) return null;
log_line($log, 'User harvest parsed Reddit post.');
return [
'url' => $media,
'title' => (string)($p['title'] ?? 'Reddit reference'),
'description' => (string)($p['selftext'] ?? ''),
'source' => 'user-assisted reddit',
'source_url' => 'https://www.reddit.com' . (string)($p['permalink'] ?? $path),
'postLink' => 'https://www.reddit.com' . (string)($p['permalink'] ?? $path),
'subreddit' => (string)($p['subreddit'] ?? ''),
'author' => (string)($p['author'] ?? ''),
'ups' => (int)($p['ups'] ?? 0),
'over_18' => !empty($p['over_18']),
'media_candidates' => $previewCandidates,
];
}
function user_candidate_from_archive_url(string $url, array &$log): ?array {
$host = strtolower((string)(parse_url($url, PHP_URL_HOST) ?: ''));
if (!preg_match('/(^|\.)archive\.org$/', $host)) return null;
$path = (string)(parse_url($url, PHP_URL_PATH) ?: '');
if (media_url_ok($url)) {
$parts = array_values(array_filter(explode('/', trim($path, '/'))));
$id = $parts[1] ?? '';
return [
'url' => $url,
'title' => $id !== '' ? 'Archive media: ' . $id : 'Archive media reference',
'description' => '',
'source' => 'user-assisted archive.org',
'source_url' => $id !== '' ? 'https://archive.org/details/' . rawurlencode($id) : $url,
'identifier' => $id,
];
}
if (!preg_match('#^/details/([^/?#]+)#', $path, $m)) return null;
$id = preg_replace('/[^a-zA-Z0-9_\-.]/', '', rawurldecode((string)$m[1]));
if ($id === '') return null;
$meta = http_json_public('https://archive.org/metadata/' . rawurlencode($id), 15);
$title = (string)($meta['metadata']['title'] ?? $id);
$desc = is_array($meta['metadata']['description'] ?? null) ? implode(' ', $meta['metadata']['description']) : (string)($meta['metadata']['description'] ?? '');
$creator = is_array($meta['metadata']['creator'] ?? null) ? implode(', ', $meta['metadata']['creator']) : (string)($meta['metadata']['creator'] ?? '');
$file = archive_pick_media_file((array)($meta['files'] ?? []), true);
if (!$file) return null;
$name = (string)($file['name'] ?? '');
$size = (int)($file['size'] ?? 0);
$media = archive_file_media_url($id, $file);
if (!media_url_ok($media)) return null;
log_line($log, 'User harvest parsed archive.org metadata.');
return [
'url' => $media,
'title' => $title,
'description' => $desc,
'source' => 'user-assisted archive.org',
'source_url' => 'https://archive.org/details/' . $id,
'identifier' => $id,
'creator' => $creator,
'downloads' => (int)($meta['metadata']['downloads'] ?? 0),
'size_kb' => (int)round($size / 1024),
'archive_file' => $name,
'compression_hint' => 'archive file picker prefers bounded public media; image save later normalizes to adaptive canvas budget',
];
return null;
}
function user_candidate_from_generic_url(string $url, array &$log): ?array {
if (media_url_ok($url)) {
return [
'url' => $url,
'title' => preg_replace('/[_\-]+/', ' ', pathinfo((string)(parse_url($url, PHP_URL_PATH) ?: 'media'), PATHINFO_FILENAME)) ?: 'User media reference',
'description' => '',
'source' => 'user-assisted direct media',
'source_url' => $url,
];
}
$html = http_get_public_limited($url, 12, 524288);
if ($html === '') return null;
$title = html_meta_content($html, ['og:title','twitter:title']) ?: html_title_text($html) ?: 'User harvested reference';
$desc = html_meta_content($html, ['og:description','twitter:description','description']);
$media = '';
foreach ([
['og:video:secure_url','og:video','twitter:player:stream'],
['og:image:secure_url','og:image','twitter:image','twitter:image:src'],
] as $group) {
$candidate = html_meta_content($html, $group);
if ($candidate !== '') {
$candidate = absolute_url($url, $candidate);
$why = '';
if (media_url_ok($candidate) && public_url_ok($candidate, $why)) {
$media = $candidate;
break;
}
}
}
if (!media_url_ok($media)) return null;
log_line($log, 'User harvest parsed page metadata.');
return [
'url' => $media,
'title' => $title,
'description' => $desc,
'source' => 'user-assisted ' . url_host_label($url),
'source_url' => $url,
];
}
function user_harvest_candidate(string $url, string $side, string $nsfw, bool $useAi, array &$log): ?array {
$why = '';
if (!public_url_ok($url, $why)) {
log_line($log, 'Rejected URL: ' . $why);
return null;
}
/* Rule gate before any fetch/classify — LLM is optional and often offline. */
$preCheck = ['title' => $url, 'url' => $url, 'source_url' => $url, 'description' => ''];
$preReject = content_safety_reject_reason($preCheck);
if ($preReject !== '') {
log_line($log, 'Rejected user harvest (safety): ' . $preReject);
return null;
}
$candidate = user_candidate_from_reddit_url($url, $log)
?? user_candidate_from_archive_url($url, $log)
?? user_candidate_from_generic_url($url, $log);
if (!$candidate) {
log_line($log, 'No media candidate found at submitted URL.');
return null;
}
$mediaWhy = '';
if (!public_url_ok((string)$candidate['url'], $mediaWhy)) {
log_line($log, 'Rejected media URL: ' . $mediaWhy);
return null;
}
$safeReject = content_safety_reject_reason($candidate);
if ($safeReject !== '') {
log_line($log, 'Rejected user harvest candidate (safety): ' . $safeReject);
return null;
}
$adult = $nsfw === '2' || !empty($candidate['over_18']) || adult_text_signal(($candidate['title'] ?? '') . ' ' . ($candidate['description'] ?? '') . ' ' . ($candidate['url'] ?? '') . ' ' . ($candidate['source_url'] ?? ''));
$lane = user_lane_for_candidate($adult ? 'N' : $side, media_type_from_url((string)$candidate['url']), $adult);
$cfg = source_lanes()[$lane] ?? source_lanes()['LM'];
$candidate['source_url'] = (string)($candidate['source_url'] ?? $url);
$candidate['user_harvested_at'] = now_iso();
$item = normalize_harvest_item($candidate, $lane, $cfg, $useAi, $log);
if ($item) {
$item['source'] = (string)($candidate['source'] ?? 'user-assisted');
$item['user_harvested_at'] = now_iso();
$item['user_saves'] = 1;
if ($nsfw === '2') { $item['intensity'] = 'nsfw'; $item['side'] = 'N'; }
}
return $item;
}
function merge_user_harvest_item(string $catalogFile, array $item): array {
$items = load_catalog($catalogFile);
$incomingKey = catalog_dedupe_key($item);
foreach ($items as $existing) {
if (!is_array($existing) || catalog_dedupe_key($existing) !== $incomingKey) continue;
$existing['user_saves'] = max(1, (int)($existing['user_saves'] ?? 1)) + 1;
$existing['last_user_harvested_at'] = now_iso();
$existing['lifespan'] = min(90, max(1, (int)($existing['lifespan'] ?? TTL_DAYS)) + 1);
if (($existing['source_url'] ?? '') === '' && ($item['source_url'] ?? '') !== '') $existing['source_url'] = $item['source_url'];
$existing['source_refs'] = array_values(array_unique(array_merge((array)($existing['source_refs'] ?? []), (array)($item['source_refs'] ?? []))));
$ok = txt_store_item_refs($existing, '', true) > 0;
return ['success' => $ok ? 1 : 0, 'added' => 0, 'duplicate' => 1, 'item' => $existing, 'total' => txt_total_items()];
}
$ok = txt_store_item_refs($item, '', false) > 0;
return ['success' => $ok ? 1 : 0, 'added' => $ok ? 1 : 0, 'duplicate' => 0, 'item' => $item, 'total' => txt_total_items()];
}
function record_user_harvest(string $userHarvestFile, array $merge, string $submittedUrl): void {
$ledger = read_json_file($userHarvestFile, []);
$recent = isset($ledger['recent']) && is_array($ledger['recent']) ? $ledger['recent'] : [];
$item = is_array($merge['item'] ?? null) ? $merge['item'] : [];
$recent[] = [
'at' => now_iso(),
'item_id' => (string)($item['id'] ?? ''),
'title' => substr((string)($item['title'] ?? ''), 0, 160),
'side' => (string)($item['side'] ?? ''),
'lane' => (string)($item['lane'] ?? ''),
'bucket' => (string)($item['bucket'] ?? ''),
'intensity' => (string)($item['intensity'] ?? ''),
'source' => (string)($item['source'] ?? ''),
'source_url' => substr((string)($item['source_url'] ?? $submittedUrl), 0, 700),
'media_url' => substr((string)($item['url'] ?? ''), 0, 700),
'added' => (int)($merge['added'] ?? 0),
'duplicate' => (int)($merge['duplicate'] ?? 0),
];
$ledger['schema'] = 'nosignup.fun.user-harvest.v1';
$ledger['updated_at'] = now_iso();
$ledger['total_submissions'] = max(0, (int)($ledger['total_submissions'] ?? 0)) + 1;
$ledger['total_added'] = max(0, (int)($ledger['total_added'] ?? 0)) + (int)($merge['added'] ?? 0);
$ledger['recent'] = array_values(array_slice($recent, -USER_HARVEST_MAX_RECENT));
write_json_file($userHarvestFile, $ledger);
}
function handle_user_harvest(string $catalogFile, string $userHarvestFile): void {
$body = [];
$raw = (string)@file_get_contents('php://input');
if (stripos((string)($_SERVER['CONTENT_TYPE'] ?? ''), 'application/json') !== false) {
$decoded = json_decode($raw, true);
if (is_array($decoded)) $body = $decoded;
}
if (!$body) $body = $_POST + $_GET;
$packet = request_packet_fields($body);
$url = clean_submitted_url((string)($body['url'] ?? ''));
$side = strtoupper(preg_replace('/[^LRN]/', '', (string)($body['side'] ?? $packet['side'] ?? 'L')));
$side = in_array($side, ['L','R','N'], true) ? $side : 'L';
$nsfw = in_array((string)($body['nsfw'] ?? $packet['nsfw'] ?? '0'), ['0','1','2'], true) ? (string)($body['nsfw'] ?? $packet['nsfw'] ?? '0') : '0';
$packet['side'] = $side;
$packet['nsfw'] = $nsfw;
$dry = !empty($body['dry']) || (string)($_GET['dry'] ?? '') === '1';
$useAi = (string)($body['ai'] ?? ($_GET['ai'] ?? '1')) !== '0';
$log = [];
log_line($log, 'USER HARVEST ' . $url);
if ($url === '') {
json_response(packet_echo($packet, ['success' => 0, 'queued' => 0, 'message' => 'Paste a source or media URL', 'console' => $log]));
return;
}
if (!preg_match('/^https?:\/\//i', $url)) {
log_line($log, 'Rejected URL: must start with http:// or https://');
json_response(packet_echo($packet, ['success' => 0, 'queued' => 0, 'message' => 'URL must start with http:// or https://', 'console' => $log]));
return;
}
$urlHost = strtolower((string)(parse_url($url, PHP_URL_HOST) ?: ''));
$earlySafety = content_safety_reject_reason(['title' => $url, 'url' => $url, 'source_url' => $url]);
if ($earlySafety !== '') {
log_line($log, 'Rejected user harvest (safety): ' . $earlySafety);
json_response(packet_echo($packet, [
'success' => 0,
'queued' => 0,
'message' => 'That URL looks like extreme or prohibited content (gore, noncon, age-bait, leaks, etc.) and was blocked.',
'safety_reject' => $earlySafety,
'console' => $log,
]));
return;
}
$item = user_harvest_candidate($url, $side, $nsfw, $useAi, $log);
if (!$item) {
$queue = null;
$why = '';
if (!empty($GLOBALS['CRAWL_QUEUE_FILE']) && public_url_ok($url, $why)) {
$queue = crawl_queue_enqueue((string)$GLOBALS['CRAWL_QUEUE_FILE'], [
'kind' => 'url',
'side' => $side,
'nsfw' => $nsfw,
'url' => $url,
'source' => 'user-harvest-fallback',
]);
log_line($log, !empty($queue['success']) ? 'Queued public URL for later crawl.' : ('Queue rejected URL: ' . (string)($queue['message'] ?? '')));
} elseif ($why !== '') {
log_line($log, 'Rejected URL: ' . $why);
}
$queued = is_array($queue) && !empty($queue['success']);
node_metric_record('user_harvest', ['ok' => $queued ? 1 : 0, 'queued' => $queued ? 1 : 0, 'host' => $urlHost, 'side' => $side, 'nsfw' => $nsfw]);
/* Honest outcome: immediate derivative failed, but queue is real work — not a silent dead harvest */
$failMsg = 'No harvestable media found';
if ($why !== '') $failMsg .= ' (' . $why . ')';
json_response(packet_echo($packet, [
'success' => $queued ? 1 : 0,
'queued' => $queued ? 1 : 0,
'message' => $queued
? 'No immediate media derivative; URL queued for crawl'
: $failMsg,
'console' => $log,
'crawl_queue' => $queue,
]));
return;
}
if ($dry) {
node_metric_record('user_harvest_dry', ['ok' => 1, 'host' => $urlHost, 'side' => $side, 'nsfw' => $nsfw, 'item' => (string)($item['id'] ?? '')]);
json_response(packet_echo($packet, ['success' => 1, 'dry' => 1, 'message' => 'Harvest candidate valid', 'item' => $item, 'console' => $log]));
return;
}
$merge = merge_user_harvest_item($catalogFile, $item);
if (!empty($merge['success'])) record_user_harvest($userHarvestFile, $merge, $url);
$ok = !empty($merge['success']);
$dup = !empty($merge['duplicate']);
if ($ok) {
$msg = $dup ? 'Already harvested; signal strengthened' : 'Harvest saved';
} else {
$msg = $dup ? 'Duplicate recognized but shard write failed' : 'Harvest parsed but shard write failed';
}
node_metric_record('user_harvest', [
'ok' => $ok ? 1 : 0,
'added' => (int)($merge['added'] ?? 0),
'duplicate' => (int)($merge['duplicate'] ?? 0),
'host' => $urlHost,
'side' => $side,
'nsfw' => $nsfw,
'item' => (string)(($merge['item']['id'] ?? null) ?: ($item['id'] ?? '')),
]);
json_response(packet_echo($packet, [
'success' => $ok ? 1 : 0,
'message' => $msg,
'added' => (int)($merge['added'] ?? 0),
'duplicate' => (int)($merge['duplicate'] ?? 0),
'item' => $merge['item'] ?? $item,
'total' => (int)($merge['total'] ?? 0),
'console' => $log,
]));
}
function harvest_reddit_lane(string $lane, string $subreddit, int $limit, bool $useAi, array &$log): array {
$cfg = source_lanes()[$lane] ?? source_lanes()['LM'];
if (!is_array($cfg)) return [];
/* Variance: rotate sort/window so mirrors diverge over time. */
$sorts = ['top', 'hot', 'rising', 'new'];
$sort = $sorts[random_int(0, count($sorts) - 1)];
$windows = ['day', 'week', 'month'];
$t = $windows[random_int(0, count($windows) - 1)];
$url = 'https://www.reddit.com/r/' . rawurlencode($subreddit) . '/' . $sort . '.json?'
. ($sort === 'top' ? ('t=' . $t . '&') : '')
. 'limit=35&raw_json=1';
log_line($log, 'Harvest ' . $lane . ' reddit r/' . $subreddit . ' sort=' . $sort . ($sort === 'top' ? (' t=' . $t) : ''));
$json = http_json($url, 18);
$out = [];
$children = $json['data']['children'] ?? [];
if (!$children) {
log_line($log, 'Harvest ' . $lane . ' direct Reddit empty/blocked for r/' . $subreddit . '; trying fallback.');
$fallback = http_json('https://meme-api.com/gimme/' . rawurlencode($subreddit) . '/' . max(3, $limit * 8), 18);
if (empty($fallback['memes'])) log_line($log, 'Harvest ' . $lane . ' reddit fallback empty for r/' . $subreddit . '.');
$rawMemes = (array)($fallback['memes'] ?? []);
/* Quality bias + shuffle tail for mirror variance */
usort($rawMemes, fn($a, $b) => ((int)($b['ups'] ?? 0) <=> (int)($a['ups'] ?? 0)));
if (count($rawMemes) > 4) {
$head = array_slice($rawMemes, 0, 3);
$tail = array_slice($rawMemes, 3);
shuffle($tail);
$rawMemes = array_merge($head, $tail);
}
foreach ($rawMemes as $m) {
if (!is_array($m)) continue;
$item = normalize_harvest_item([
'url' => html_entity_decode((string)($m['url'] ?? ''), ENT_QUOTES | ENT_HTML5, 'UTF-8'),
'title' => (string)($m['title'] ?? 'Reddit reference'),
'description' => '',
'source' => 'reddit',
'source_adapter' => 'reddit_gimme_fallback',
'source_url' => (string)($m['postLink'] ?? ''),
'postLink' => (string)($m['postLink'] ?? ''),
'subreddit' => (string)($m['subreddit'] ?? $subreddit),
'author' => (string)($m['author'] ?? ''),
'ups' => (int)($m['ups'] ?? 0),
'over_18' => !empty($m['nsfw']),
], $lane, $cfg, $useAi, $log);
if ($item) $out[] = $item;
if (count($out) >= $limit) break;
}
log_line($log, 'Harvest ' . $lane . ' reddit fallback r/' . $subreddit . ' (quality-sorted): ' . count($out));
return $out;
}
$posts = [];
foreach ($children as $row) {
$p = $row['data'] ?? [];
if (!is_array($p)) continue;
$posts[] = $p;
}
usort($posts, fn($a, $b) => ((int)($b['ups'] ?? 0) <=> (int)($a['ups'] ?? 0)));
if (count($posts) > 5) {
$head = array_slice($posts, 0, 4);
$tail = array_slice($posts, 4);
shuffle($tail);
$posts = array_merge($head, $tail);
}
foreach ($posts as $p) {
$previewCandidates = reddit_preview_candidates($p);
$media = html_entity_decode((string)($p['url_overridden_by_dest'] ?? $p['url'] ?? ''), ENT_QUOTES | ENT_HTML5, 'UTF-8');
if (!media_url_ok($media) && isset($p['secure_media']['reddit_video']['fallback_url'])) {
$media = html_entity_decode((string)$p['secure_media']['reddit_video']['fallback_url'], ENT_QUOTES | ENT_HTML5, 'UTF-8');
}
if (!media_url_ok($media) && isset($p['preview']['images'][0]['source']['url'])) {
$media = html_entity_decode((string)$p['preview']['images'][0]['source']['url'], ENT_QUOTES | ENT_HTML5, 'UTF-8');
}
if (!media_url_ok($media)) continue;
$item = normalize_harvest_item([
'url' => $media,
'title' => (string)($p['title'] ?? 'Reddit reference'),
'description' => (string)($p['selftext'] ?? ''),
'source' => 'reddit',
'source_url' => 'https://www.reddit.com' . (string)($p['permalink'] ?? ''),
'postLink' => 'https://www.reddit.com' . (string)($p['permalink'] ?? ''),
'subreddit' => (string)($p['subreddit'] ?? $subreddit),
'author' => (string)($p['author'] ?? ''),
'ups' => (int)($p['ups'] ?? 0),
'over_18' => !empty($p['over_18']),
'media_candidates' => $previewCandidates,
], $lane, $cfg, $useAi, $log);
if ($item) $out[] = $item;
if (count($out) >= $limit) break;
}
log_line($log, 'Harvest ' . $lane . ' reddit r/' . $subreddit . ' (quality-sorted): ' . count($out));
return $out;
}
function archive_query_variants(string $term): array {
$q = trim($term) !== '' ? '"' . trim($term) . '"' : '';
return array_filter([
'mediatype:movies AND format:(mp4 OR webm OR avi OR mov) AND ' . $q . ' AND (licenseurl:*creativecommons* OR licenseurl:*publicdomain* OR licenseurl:*opensource*)',
'mediatype:movies AND format:(mp4 OR webm OR avi OR mov) AND ' . $q,
'mediatype:movies AND ' . $q,
]);
}
function harvest_archive_lane(string $lane, string $term, int $limit, bool $useAi, array &$log): array {
$cfg = source_lanes()[$lane] ?? source_lanes()['LV'];
if (!is_array($cfg)) return [];
$out = [];
foreach (archive_query_variants($term) as $query) {
if (count($out) >= $limit) break;
$url = 'https://archive.org/advancedsearch.php?q=' . urlencode($query) . '&fl[]=identifier,title,description,creator,downloads&rows=12&output=json&sort[]=downloads%20desc';
$json = http_json($url, 22);
foreach (($json['response']['docs'] ?? []) as $doc) {
if (count($out) >= $limit) break;
$id = preg_replace('/[^a-zA-Z0-9_\-.]/', '', (string)($doc['identifier'] ?? ''));
if ($id === '') continue;
$meta = http_json('https://archive.org/metadata/' . rawurlencode($id), 15);
$file = archive_pick_media_file((array)($meta['files'] ?? []), false);
if (!$file) continue;
$name = (string)($file['name'] ?? '');
$size = (int)($file['size'] ?? 0);
$media = archive_file_media_url($id, $file);
if (!media_url_ok($media)) continue;
$desc = is_array($doc['description'] ?? null) ? implode(' ', $doc['description']) : (string)($doc['description'] ?? '');
$creator = is_array($doc['creator'] ?? null) ? implode(', ', $doc['creator']) : (string)($doc['creator'] ?? '');
$item = normalize_harvest_item([
'url' => $media,
'title' => (string)($doc['title'] ?? 'Archive reference'),
'description' => $desc,
'source' => 'archive.org',
'source_url' => 'https://archive.org/details/' . $id,
'identifier' => $id,
'creator' => $creator,
'downloads' => (int)($doc['downloads'] ?? 0),
'size_kb' => (int)round($size / 1024),
'archive_file' => $name,
'compression_hint' => 'archive file picker prefers bounded public media; image save later normalizes to adaptive canvas budget',
], $lane, $cfg, $useAi, $log);
if ($item) $out[] = $item;
}
}
log_line($log, 'Harvest ' . $lane . " archive '" . $term . "': " . count($out));
return $out;
}
function catalog_dedupe_key(array $item): string {
foreach (['source_url','postLink','original_url','url','id'] as $key) {
$value = trim((string)($item[$key] ?? ''));
if ($value !== '') return $key . ':' . strtolower($value);
}
return '';
}
function merge_catalog_items(string $catalogFile, array $newItems): array {
$legacy = read_json_file($catalogFile, []);
$items = isset($legacy['items']) && is_array($legacy['items']) ? $legacy['items'] : [];
$seen = txt_existing_dedupe_keys();
foreach ($items as $i => $item) {
$key = catalog_dedupe_key(is_array($item) ? $item : ['id' => (string)$i]);
$seen[$key] = true;
}
$added = 0;
foreach ($newItems as $item) {
$key = catalog_dedupe_key($item);
if ($key === '' || isset($seen[$key])) continue;
$seen[$key] = true;
if (txt_store_item_refs($item, '', false) > 0) $added++;
}
return ['ok' => true, 'added' => $added, 'total' => txt_total_items()];
}
function compress_runtime_catalog_images(string $catalogFile, string $mediaDir, int $limit = 24): array {
$items = load_catalog($catalogFile);
if (!$items) return ['success' => 1, 'checked' => 0, 'compressed' => 0, 'message' => 'No runtime catalog'];
$log = [];
$checked = 0;
$compressed = 0;
$rejected = 0;
$rewritten = 0;
$errors = [];
foreach ($items as $item) {
if (!is_array($item) || $checked >= $limit) continue;
$url = (string)($item['url'] ?? '');
if (!preg_match('/^https?:\/\//i', $url) || media_type_from_url($url) !== 'image') continue;
$checked++;
$original = (string)($item['original_url'] ?? $url);
$res = compress_image_before_save($url, $mediaDir, $log);
if (empty($res['success'])) {
$msg = (string)($res['message'] ?? 'compression failed');
$item['compression_required_error'] = $msg;
$errors[] = [
'id' => clean_item_id((string)($item['id'] ?? item_id($item))),
'title' => substr((string)($item['title'] ?? 'Untitled'), 0, 120),
'url' => $url,
'message' => $msg,
];
log_line($log, 'Rejected runtime image ' . (string)($item['title'] ?? 'Untitled') . ': ' . $msg);
$rejected++;
if (txt_store_item_refs($item, '', true) > 0) $rewritten++;
continue;
}
$item['original_url'] = $original;
$item['render_url'] = (string)$res['url'];
$item['url'] = (string)$res['url'];
$item['source_refs'] = array_values(array_filter(array_unique(array_merge((array)($item['source_refs'] ?? []), [$original, $url, (string)($item['source_url'] ?? ''), (string)($item['postLink'] ?? '')]))));
$item['compression'] = array_merge((array)($item['compression'] ?? []), [
'required' => 1,
'local_derivative' => 1,
'target_width' => MEDIA_TARGET_WIDTH,
'max_dimension' => MEDIA_IMAGE_MAX_DIMENSION,
'changed_before_save' => 1,
'filename' => (string)($res['filename'] ?? ''),
'format' => (string)($res['format'] ?? ''),
'source_width' => (int)($res['source_width'] ?? 0),
'source_height' => (int)($res['source_height'] ?? 0),
'source_bytes' => (int)($res['source_bytes'] ?? 0),
'selected_width' => (int)($res['width'] ?? 0),
'selected_height' => (int)($res['height'] ?? 0),
'selected_bytes' => (int)($res['bytes'] ?? 0),
'note' => 'retrofit compressed local derivative',
'canvas_pressure' => (string)($res['canvas_pressure'] ?? ''),
'canvas_max_pixels' => (int)($res['canvas_max_pixels'] ?? 0),
'canvas_byte_cap' => (int)($res['canvas_byte_cap'] ?? 0),
'canvas_features' => is_array($res['canvas_features'] ?? null) ? $res['canvas_features'] : [],
'canvas_policy' => is_array($res['canvas_policy'] ?? null) ? $res['canvas_policy'] : [],
]);
$compressed++;
if (txt_store_item_refs($item, '', true) > 0) $rewritten++;
}
return ['success' => 1, 'checked' => $checked, 'compressed' => $compressed, 'rejected' => $rejected, 'rewritten_txt_refs' => $rewritten, 'errors' => array_slice($errors, 0, 20), 'console' => $log];
}
function handle_compress_runtime_images(string $catalogFile, string $mediaDir): void {
$limit = max(1, min(80, (int)($_GET['limit'] ?? 24)));
json_response(compress_runtime_catalog_images($catalogFile, $mediaDir, $limit));
}
function crawl_strategy_weights(): array {
return [
'proven_bucket' => GOLDEN_WEIGHT_PRIMARY,
'adjacent_mutation' => GOLDEN_WEIGHT_SECONDARY,
'broad_random' => GOLDEN_WEIGHT_TERTIARY,
'deep_chaos' => GOLDEN_WEIGHT_QUATERNARY,
'repair_retry' => GOLDEN_WEIGHT_REPAIR,
];
}
function crawl_hard_rejects(): array {
return [
'captcha',
'login_or_account_required',
'paywall_or_auth_wall',
'robots_or_visible_noindex_refusal',
'executable_download',
'archive_or_zip_payload',
'script_as_content',
'malware_signal',
'doxxing_or_private_personal_data',
'minor_sexualization',
'nonconsensual_sexual_material',
'illegal_sale_or_service',
'unclear_media_type',
'extreme_sexual_violence_or_degradation',
'gore_or_guro',
'bestiality_or_feral',
'age_ambiguous_or_barely_legal_coded',
'revenge_leaks_or_nonconsensual_exposure',
'extreme_medical_insertion_kink',
];
}
function crawl_ecology_epoch(): int {
return (int)floor(time() / max(1, TTL_DAYS * 86400));
}
function crawl_ecology_salt(): string {
return mirror_content_seed('crawl-ecology');
}
function crawl_strategy_pick(array $state, string $bucketId = ''): array {
$weights = crawl_strategy_weights();
$cursor = (int)($state['crawl_strategy_cursor'] ?? 0);
$seed = hash('sha256', crawl_ecology_salt() . '|' . $bucketId . '|' . $cursor);
$n = hexdec(substr($seed, 0, 8)) / 0xffffffff;
$sum = array_sum($weights);
$acc = 0.0;
$mode = 'proven_bucket';
foreach ($weights as $id => $w) {
$acc += $w / max(0.000001, $sum);
if ($n <= $acc) {
$mode = $id;
break;
}
}
return [
'mode' => $mode,
'cursor' => $cursor,
'ecology' => crawl_ecology_salt(),
'epoch' => crawl_ecology_epoch(),
'weights' => $weights,
'notes' => [
'deep_chaos_is_public_random_not_tor',
'captcha_auth_paywall_skip',
'random_candidates_require_quarantine',
'repair_must_not_change_code_or_parity',
],
];
}
function crawl_queue_clean(string $value, int $max = 700): string {
$value = preg_replace('/[\x00-\x1F\x7F\t\r\n]+/', ' ', $value) ?? '';
return substr(trim(preg_replace('/\s+/', ' ', $value) ?? ''), 0, max(1, $max));
}
function crawl_queue_encode(string $value): string {
return rawurlencode(crawl_queue_clean($value, 1200));
}
function crawl_queue_decode(string $value): string {
return crawl_queue_clean(rawurldecode($value), 1200);
}
function crawl_queue_line(array $job): string {
$parts = [];
foreach (['t','id','kind','side','nsfw','bucket','lane','q','url','source','hits'] as $key) {
if (!array_key_exists($key, $job)) continue;
$value = (string)$job[$key];
if ($value === '') continue;
$parts[] = $key . '=' . crawl_queue_encode($value);
}
return implode("\t", $parts);
}
function crawl_queue_parse_line(string $line): ?array {
$line = trim($line);
if ($line === '' || str_starts_with($line, '#') || str_starts_with($line, 'NOSIGNUP.')) return null;
$job = [];
foreach (explode("\t", $line) as $part) {
$eq = strpos($part, '=');
if ($eq === false) continue;
$key = preg_replace('/[^a-zA-Z0-9_\-]/', '', substr($part, 0, $eq)) ?? '';
if ($key === '') continue;
$job[$key] = crawl_queue_decode(substr($part, $eq + 1));
}
return !empty($job['id']) && !empty($job['kind']) ? $job : null;
}
function crawl_queue_read(string $file): array {
$jobs = [];
foreach (@file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) ?: [] as $line) {
$job = crawl_queue_parse_line((string)$line);
if ($job) $jobs[] = $job;
}
return $jobs;
}
function crawl_queue_write(string $file, array $jobs): bool {
$dir = dirname($file);
if (!runtime_ensure($dir)) return false;
$jobs = array_values(array_slice($jobs, -CRAWL_QUEUE_MAX_PENDING));
$lines = ["NOSIGNUP.FUN CRAWL QUEUE TXT v1"];
foreach ($jobs as $job) {
if (is_array($job)) $lines[] = crawl_queue_line($job);
}
$tmp = $file . '.tmp';
if (@file_put_contents($tmp, implode("\n", $lines) . "\n", LOCK_EX) === false) return false;
return atomic_replace_file($tmp, $file);
}
function crawl_queue_normalize_job(array $job): array {
$kind = strtolower(preg_replace('/[^a-z0-9_\-]/', '', (string)($job['kind'] ?? 'bucket')) ?? 'bucket');
if (!in_array($kind, ['url','prompt','bucket','comment_bucket'], true)) $kind = 'bucket';
$side = strtoupper(preg_replace('/[^LRN]/', '', (string)($job['side'] ?? 'L')) ?? 'L');
$side = in_array($side, ['L','R','N'], true) ? $side : 'L';
$nsfw = in_array((string)($job['nsfw'] ?? '0'), ['0','1','2'], true) ? (string)$job['nsfw'] : '0';
$bucket = clean_bucket_id((string)($job['bucket'] ?? ''));
$lane = strtoupper(preg_replace('/[^A-Z]/', '', (string)($job['lane'] ?? '')) ?? '');
$q = crawl_queue_clean((string)($job['q'] ?? ''), 180);
$url = clean_submitted_url((string)($job['url'] ?? ''));
$source = crawl_queue_clean((string)($job['source'] ?? 'system'), 80);
$basis = implode('|', [$kind, $side, $nsfw, $bucket, $lane, strtolower($q), strtolower($url)]);
return [
't' => (string)max(1, (int)($job['t'] ?? time())),
'id' => substr(hash('sha256', $basis), 0, 16),
'kind' => $kind,
'side' => $side,
'nsfw' => $nsfw,
'bucket' => $bucket,
'lane' => $lane,
'q' => $q,
'url' => $url,
'source' => $source,
'hits' => (string)max(1, (int)($job['hits'] ?? 1)),
];
}
function crawl_queue_enqueue(string $file, array $job): array {
$job = crawl_queue_normalize_job($job);
if ($job['kind'] === 'url') {
$why = '';
if ($job['url'] === '' || !public_url_ok($job['url'], $why)) return ['success' => 0, 'message' => 'URL not queueable: ' . ($why ?: 'empty')];
}
if ($job['kind'] !== 'url' && $job['q'] === '' && $job['bucket'] === '' && $job['lane'] === '') {
return ['success' => 0, 'message' => 'Queue job needs a prompt, bucket, lane, or URL'];
}
$jobs = crawl_queue_read($file);
foreach ($jobs as &$existing) {
if ((string)($existing['id'] ?? '') !== $job['id']) continue;
$existing['hits'] = (string)(max(1, (int)($existing['hits'] ?? 1)) + 1);
$existing['t'] = (string)time();
crawl_queue_write($file, $jobs);
return ['success' => 1, 'duplicate' => 1, 'message' => 'Crawl intent strengthened', 'job' => $existing, 'pending' => count($jobs)];
}
unset($existing);
$jobs[] = $job;
crawl_queue_write($file, $jobs);
return ['success' => 1, 'duplicate' => 0, 'message' => 'Crawl intent queued', 'job' => $job, 'pending' => count($jobs)];
}
function crawl_queue_dynamic_limits(): array {
static $cache = null;
if (is_array($cache)) return $cache;
$runtime = (string)($GLOBALS['RUNTIME_DIR'] ?? (fun_default_runtime_dir()));
$items = txt_total_items();
$runtimeMass = data_mass_for_path($runtime);
$runtimeBytes = (int)($runtimeMass['bytes'] ?? 0);
$runtimeFiles = (int)($runtimeMass['files'] ?? 0);
$diskFree = (int)@disk_free_space($runtime);
$diskTotal = (int)@disk_total_space($runtime);
$inventoryTarget = max(FLOW_ITEM_COUNT * 36, FLOW_ITEM_COUNT);
$inventoryPressure = min(1.0, $items / max(1, $inventoryTarget));
$available = max(0, $diskFree + $runtimeBytes);
$softByteCap = max(32 * 1024 * 1024, min(512 * 1024 * 1024, (int)round($available * GOLDEN_WEIGHT_QUATERNARY)));
$storagePressure = min(1.0, $runtimeBytes / max(1, $softByteCap));
if ($diskTotal > 0 && $diskFree > 0 && ($diskFree / $diskTotal) < 0.05) $storagePressure = max($storagePressure, 0.9);
$filePressure = min(1.0, $runtimeFiles / max(1, DATA_MASS_SCAN_LIMIT));
$pressure = max($inventoryPressure, $storagePressure, $filePressure);
$ramp = pow(max(0.0, 1.0 - $pressure), 2);
$maxPerTick = max(CRAWL_QUEUE_MAX_PER_TICK, (int)round(CRAWL_QUEUE_MAX_PER_TICK + ($ramp * 11)));
$itemLimit = max(CRAWL_QUEUE_ITEM_LIMIT, (int)round(CRAWL_QUEUE_ITEM_LIMIT + ($ramp * 4)));
$seedCount = max(CRAWL_QUEUE_DEFAULT_SEED_COUNT, (int)ceil($maxPerTick * (1.0 + GOLDEN_WEIGHT_PRIMARY)));
$cache = [
'mode' => $ramp > 0.72 ? 'startup_ramp' : ($ramp > 0.18 ? 'tapering' : 'steady'),
'pressure' => round($pressure, 4),
'ramp' => round($ramp, 4),
'inventory_items' => $items,
'inventory_target' => $inventoryTarget,
'inventory_pressure' => round($inventoryPressure, 4),
'runtime_bytes' => $runtimeBytes,
'runtime_files' => $runtimeFiles,
'soft_byte_cap' => $softByteCap,
'storage_pressure' => round($storagePressure, 4),
'file_pressure' => round($filePressure, 4),
'disk_free_bytes' => $diskFree,
'disk_free_percent' => $diskTotal > 0 ? round(($diskFree / $diskTotal) * 100, 4) : null,
'max_per_tick' => $maxPerTick,
'item_limit' => $itemLimit,
'max_items_per_tick' => $maxPerTick * $itemLimit,
'default_seed_count' => $seedCount,
'basis' => 'startup ramp = (1 - max inventory/storage/file pressure)^2; taper is deliberately fast',
];
return $cache;
}
function crawl_queue_consume_count(int $pending, array $limits = []): int {
if ($pending <= 0) return 0;
if (!$limits) $limits = crawl_queue_dynamic_limits();
return max(1, min((int)($limits['max_per_tick'] ?? CRAWL_QUEUE_MAX_PER_TICK), (int)ceil($pending * CRAWL_QUEUE_CONSUME_RATIO)));
}
function crawl_queue_lane_for_job(array $job): string {
$lane = strtoupper((string)($job['lane'] ?? ''));
if (isset(source_lanes()[$lane])) return $lane;
$side = in_array((string)($job['side'] ?? ''), ['L','R','N'], true) ? (string)$job['side'] : 'L';
if ((string)($job['nsfw'] ?? '0') === '2') $side = 'N';
$lane = $side . 'M';
return isset(source_lanes()[$lane]) ? $lane : 'LM';
}
function crawl_queue_seed_defaults(string $file, string $bucketRegistryFile): array {
if (crawl_queue_read($file)) return ['seeded' => 0, 'message' => 'Queue already has pending work'];
$limits = crawl_queue_dynamic_limits();
$registry = load_bucket_registry($bucketRegistryFile);
$runtime = txt_bucket_runtime_stats();
$rows = [];
foreach (harvestable_bucket_ids($registry) as $id) {
$bucket = $registry['buckets'][$id] ?? [];
if (!is_array($bucket)) continue;
$stats = $runtime['stats'][$id] ?? [];
$items = (int)($stats['items'] ?? ($bucket['item_count'] ?? 0));
$comments = (int)($stats['comments'] ?? ($bucket['comment_pressure'] ?? 0));
$shortage = max(0, FLOW_ITEM_COUNT - $items);
$score = golden_score((float)$shortage * 4.0, (float)$comments * 3.0, (float)($bucket['pressure'] ?? 1.0), 1.0, zipf_rank_bonus(max(1, $items + 1), 2.0));
$rows[] = ['score' => $score, 'bucket' => $bucket];
}
usort($rows, fn($a, $b) => ((float)$b['score'] <=> (float)$a['score']) ?: strcmp((string)($a['bucket']['id'] ?? ''), (string)($b['bucket']['id'] ?? '')));
$seeded = 0;
$messages = [];
foreach (array_slice($rows, 0, (int)($limits['default_seed_count'] ?? CRAWL_QUEUE_DEFAULT_SEED_COUNT)) as $row) {
$bucket = (array)$row['bucket'];
$terms = array_values(array_filter(array_map('strval', (array)($bucket['seed_terms'] ?? []))));
$q = $terms ? $terms[((int)floor(time() / CRAWL_QUEUE_TICK_SECONDS) + $seeded) % count($terms)] : (string)($bucket['title'] ?? $bucket['id'] ?? '');
$res = crawl_queue_enqueue($file, [
'kind' => 'bucket',
'side' => (string)($bucket['side'] ?? 'L'),
'nsfw' => (string)($bucket['intensity'] ?? '') === 'nsfw' ? '2' : ((string)($bucket['intensity'] ?? '') === 'mixed' ? '1' : '0'),
'bucket' => (string)($bucket['id'] ?? ''),
'lane' => harvest_lane_for_bucket($bucket),
'q' => $q,
'source' => 'default-bucket-pressure',
]);
if (!empty($res['success'])) $seeded++;
$messages[] = (string)($res['message'] ?? '');
}
return ['seeded' => $seeded, 'message' => $seeded ? 'Default bucket pressure queued' : 'No default bucket work queued', 'messages' => $messages, 'limits' => $limits];
}
function crawl_queue_status_payload(string $queueFile, string $stateFile, string $lockFile, string $bucketRegistryFile): array {
$jobs = crawl_queue_read($queueFile);
$limits = crawl_queue_dynamic_limits();
$state = read_json_file($stateFile, []);
$last = (int)($state['last_tick'] ?? 0);
$now = time();
$due = $last <= 0 || ($now - $last) >= CRAWL_QUEUE_TICK_SECONDS;
$next = array_slice($jobs, 0, 5);
foreach ($next as &$job) {
if (($job['kind'] ?? '') === 'url') $job['url_host'] = url_host_label((string)($job['url'] ?? ''));
unset($job['url']);
}
unset($job);
return [
'success' => 1,
'schema' => 'nosignup.fun.crawl-queue.v1',
'pending' => count($jobs),
'due' => $due ? 1 : 0,
'locked' => lock_active($lockFile) ? 1 : 0,
'seconds_until_due' => $due ? 0 : CRAWL_QUEUE_TICK_SECONDS - ($now - $last),
'consume_next' => crawl_queue_consume_count(count($jobs), $limits),
'consume_ratio' => CRAWL_QUEUE_CONSUME_RATIO,
'max_per_tick' => (int)($limits['max_per_tick'] ?? CRAWL_QUEUE_MAX_PER_TICK),
'item_limit' => (int)($limits['item_limit'] ?? CRAWL_QUEUE_ITEM_LIMIT),
'max_items_per_tick' => (int)($limits['max_items_per_tick'] ?? (CRAWL_QUEUE_MAX_PER_TICK * CRAWL_QUEUE_ITEM_LIMIT)),
'ramp' => $limits,
'last_tick_iso' => (string)($state['last_tick_iso'] ?? ''),
'last_consumed' => (int)($state['last_consumed'] ?? 0),
'last_added' => (int)($state['last_added'] ?? 0),
'last_failed' => (int)($state['last_failed'] ?? 0),
'last_mode' => (string)($state['last_mode'] ?? ''),
'last_hour_tick' => (int)($state['last_hour_tick'] ?? 0),
'last_hour_tick_iso' => (string)($state['last_hour_tick_iso'] ?? ''),
'last_hour_term' => (string)($state['last_hour_term'] ?? ''),
'last_hour_mode' => (string)($state['last_hour_mode'] ?? ''),
'last_hour_paste_consumed' => (int)($state['last_hour_paste_consumed'] ?? 0),
'last_hour_adopted' => (int)($state['last_hour_adopted'] ?? 0),
'last_hour_paste_media' => (int)($state['last_hour_paste_media'] ?? 0),
'hour_due' => ((int)($state['last_hour_tick'] ?? 0) <= 0 || ($now - (int)($state['last_hour_tick'] ?? 0)) >= HOUR_CRAWL_TICK_SECONDS) ? 1 : 0,
'seconds_until_hour_due' => ((int)($state['last_hour_tick'] ?? 0) <= 0 || ($now - (int)($state['last_hour_tick'] ?? 0)) >= HOUR_CRAWL_TICK_SECONDS)
? 0
: HOUR_CRAWL_TICK_SECONDS - ($now - (int)($state['last_hour_tick'] ?? 0)),
'next' => $next,
'default_seed_count' => (int)($limits['default_seed_count'] ?? CRAWL_QUEUE_DEFAULT_SEED_COUNT),
'default_basis' => 'if pending is empty, seed from harvestable bucket shortage/comment/pressure; startup ramp tapers by inventory/storage pressure',
];
}
function crawl_queue_process_job(array $job, string $catalogFile, string $harvestStateFile, string $harvestLogFile, string $sourceRegistryFile, string $bucketRegistryFile, string $userHarvestFile): array {
$log = [];
log_line($log, 'QUEUE job ' . (string)($job['id'] ?? '') . ' kind=' . (string)($job['kind'] ?? ''));
$kind = (string)($job['kind'] ?? 'bucket');
if ($kind === 'url') {
$url = clean_submitted_url((string)($job['url'] ?? ''));
log_line($log, 'URL ' . $url);
$item = user_harvest_candidate($url, (string)($job['side'] ?? 'L'), (string)($job['nsfw'] ?? '0'), true, $log);
if (!$item) return ['success' => 0, 'added' => 0, 'message' => 'Queued URL produced no media', 'job' => $job, 'console' => $log];
$merge = merge_user_harvest_item($catalogFile, $item);
if (!empty($merge['success'])) record_user_harvest($userHarvestFile, $merge, $url);
return [
'success' => (int)($merge['success'] ?? 0),
'added' => (int)($merge['added'] ?? 0),
'duplicate' => (int)($merge['duplicate'] ?? 0),
'message' => !empty($merge['duplicate']) ? 'Queued URL strengthened existing item' : 'Queued URL saved item',
'item' => $merge['item'] ?? $item,
'job' => $job,
'console' => $log,
];
}
$limits = crawl_queue_dynamic_limits();
$opts = [
'dry' => false,
'force' => true,
'limit' => (int)($limits['item_limit'] ?? CRAWL_QUEUE_ITEM_LIMIT),
'useAi' => true,
'only' => crawl_queue_lane_for_job($job),
'bucket' => '',
'term' => (string)($job['q'] ?? ''),
];
if (in_array($kind, ['bucket','comment_bucket'], true) && clean_bucket_id((string)($job['bucket'] ?? '')) !== '') {
$opts['bucket'] = clean_bucket_id((string)$job['bucket']);
$opts['only'] = '';
}
$res = run_harvest_pass($catalogFile, $harvestStateFile, $harvestLogFile, $sourceRegistryFile, $bucketRegistryFile, $opts);
$res['job'] = $job;
if ((int)($res['added'] ?? 0) <= 0) {
$res['success'] = 0;
$res['message'] = 'Queued crawl produced no new registry items';
} else {
$res['message'] = (string)($res['message'] ?? 'Queued crawl complete');
}
return $res;
}
/**
* HARVEST RUN (lazy, ≥60s): RR 1–2 shortage harvestable buckets × 1 save each.
* IMPROVE of thrash-every-bucket — same adapters/compress/hard rejects.
* Post-serve prompt jobs (limit 7) drain in crawl_queue_tick before this.
*/
function crawl_minute_all_buckets(string $catalogFile, string $harvestStateFile, string $harvestLogFile, string $sourceRegistryFile, string $bucketRegistryFile): array {
$registry = load_bucket_registry($bucketRegistryFile);
$ids = harvestable_bucket_ids($registry);
$console = ['=== HARVEST RUN RR-shortage ' . now_iso() . ' ===', 'harvestable=' . count($ids)];
$added = 0;
$failed = 0;
$tried = 0;
$results = [];
if (!$ids) {
return ['tried' => 0, 'added' => 0, 'failed' => 0, 'results' => [], 'console' => $console];
}
$ranked = [];
foreach ($ids as $bid) {
$bucket = is_array($registry['buckets'][$bid] ?? null) ? $registry['buckets'][$bid] : [];
if (!$bucket) continue;
$items = (int)($bucket['item_count'] ?? 0);
$pressure = (float)($bucket['pressure'] ?? 1.0);
$shortage = max(0, FLOW_ITEM_COUNT * 4 - $items);
$score = golden_score((float)$shortage * 3.0, $pressure, (float)max(0, 20 - $items), 1.0, zipf_rank_bonus(max(1, $items + 1), 1.5));
$ranked[] = ['id' => $bid, 'score' => $score, 'bucket' => $bucket];
}
usort($ranked, fn($a, $b) => ((float)$b['score'] <=> (float)$a['score']) ?: strcmp((string)$a['id'], (string)$b['id']));
$stateFile = (string)($GLOBALS['CRAWL_QUEUE_STATE_FILE'] ?? '');
$st = $stateFile !== '' ? read_json_file($stateFile, []) : [];
$cursor = (int)($st['minute_bucket_cursor'] ?? 0);
if ($ranked) {
$n = count($ranked);
$cursor = $n > 0 ? ($cursor % $n) : 0;
$ranked = array_merge(array_slice($ranked, $cursor), array_slice($ranked, 0, $cursor));
}
$cap = min(2, max(1, count($ranked)));
$picked = array_slice($ranked, 0, $cap);
foreach ($picked as $row) {
$bid = (string)$row['id'];
$bucket = $row['bucket'];
$terms = array_values(array_filter(array_map('strval', (array)($bucket['seed_terms'] ?? []))));
$laneTerms = source_lanes()[$bid]['terms'] ?? [];
if (is_array($laneTerms) && $laneTerms) {
$terms = array_values(array_unique(array_merge($terms, array_map('strval', $laneTerms))));
}
$term = $terms ? $terms[random_int(0, count($terms) - 1)] : (string)($bucket['title'] ?? $bid);
$tried++;
$res = run_harvest_pass($catalogFile, $harvestStateFile, $harvestLogFile, $sourceRegistryFile, $bucketRegistryFile, [
'dry' => false,
'force' => true,
'limit' => MINUTE_CRAWL_ITEM_LIMIT,
'useAi' => false,
'bucket' => (string)$bid,
'term' => $term,
]);
$nAdd = (int)($res['added'] ?? 0);
$added += $nAdd;
if ($nAdd <= 0) $failed++;
$results[] = ['bucket' => $bid, 'term' => $term, 'added' => $nAdd, 'message' => (string)($res['message'] ?? '')];
$console[] = $bid . ' term=' . $term . ' added=' . $nAdd . ' ' . (string)($res['message'] ?? '');
foreach (array_slice((array)($res['console'] ?? []), -3) as $line) $console[] = ' ' . (string)$line;
}
if ($stateFile !== '' && $ids) {
$st['minute_bucket_cursor'] = ((int)($st['minute_bucket_cursor'] ?? 0) + $cap) % max(1, count($ids));
/* merge without clobbering concurrent tick fields written later in same request */
$cur = read_json_file($stateFile, []);
$cur['minute_bucket_cursor'] = $st['minute_bucket_cursor'];
write_json_file($stateFile, $cur);
}
$console[] = 'HARVEST RUN tried=' . $tried . ' added=' . $added . ' failed=' . $failed;
return ['tried' => $tried, 'added' => $added, 'failed' => $failed, 'results' => $results, 'console' => $console];
}
function hour_heuristic_seed_from_url(string $url): string {
$url = clean_submitted_url($url);
if ($url === '' || !preg_match('/^https?:\/\//i', $url)) return '';
if (preg_match('#(?:^|//)(?:www\.|old\.|np\.|m\.)?reddit\.com/r/([A-Za-z0-9_]{2,40})#i', $url, $m)) {
return (string)$m[1];
}
if (preg_match('#(?:^|//)redd\.it/#i', $url)) return '';
$host = strtolower((string)(parse_url($url, PHP_URL_HOST) ?: ''));
$path = (string)(parse_url($url, PHP_URL_PATH) ?: '');
if (preg_match('/(^|\.)archive\.org$/', $host) && preg_match('#/(?:details|download)/([^/?#]+)#', $path, $m)) {
$id = preg_replace('/[^A-Za-z0-9_\-.]/', '', rawurldecode((string)$m[1]));
if (strlen($id) >= 3 && strlen($id) <= 40 && preg_match('/[A-Za-z]/', $id)) return $id;
}
if (preg_match('#/([A-Za-z][A-Za-z0-9_-]{2,40})/?$#', $path, $m)) {
$tok = preg_replace('/[^A-Za-z0-9_]/', '', (string)$m[1]);
$deny = ['www','index','post','posts','media','image','images','video','watch','status','comments','gallery','album','view','page','item','file','files','static','assets','cdn','api','v1','v2','upload','download','share','embed','player'];
if (strlen($tok) >= 3 && strlen($tok) <= 40 && !in_array(strtolower($tok), $deny, true)) return $tok;
}
return '';
}
function hour_term_looks_suitable(string $term): bool {
$term = trim($term);
if ($term === '' || !preg_match('/^[A-Za-z][A-Za-z0-9_]{2,40}$/', $term)) return false;
$low = strtolower($term);
$deny = ['http','https','www','null','undefined','admin','login','signup','nsfw','porn','xxx','onlyfans','gore','rape','cp','teen'];
return !in_array($low, $deny, true);
}
/** Pick first harvestable coordinate bucket for hour trials. */
function hour_target_bucket(array $registry, string $term = '', string $hint = ''): string {
$termL = strtolower(trim($term));
$hintL = strtolower(trim($hint));
/* Prefer N when term/mode looks adult; else rotate L/R meme before always-LM. */
$prefer = [];
if ($hintL === 'safe') {
$prefer = ['LM', 'RM', 'LV', 'RV', 'NM', 'NV'];
} elseif ($hintL === 'nsfw' || preg_match('/(nsfw|gonewild|porn|xxx|nude|boob|pussy|hentai|onlyfans|milf|ass|cock)/', $termL)) {
$prefer = ['NM', 'NV', 'LM', 'RM', 'LV', 'RV'];
} elseif (preg_match('/(video|film|documentary|archive)/', $termL)) {
$prefer = ['LV', 'RV', 'NV', 'LM', 'RM', 'NM'];
} else {
/* Round-robin-ish among meme lanes by time so not always LM */
$rot = ((int)floor(time() / 60)) % 3;
$prefer = $rot === 0 ? ['LM', 'RM', 'NM', 'LV', 'RV', 'NV'] : ($rot === 1 ? ['RM', 'LM', 'NM', 'RV', 'LV', 'NV'] : ['NM', 'LM', 'RM', 'NV', 'LV', 'RV']);
}
foreach ($prefer as $cand) {
if (isset($registry['buckets'][$cand]) && (int)($registry['buckets'][$cand]['harvestable'] ?? 0) === 1) {
return $cand;
}
}
return 'LM';
}
/**
* Trial harvest limit=1; adopt seed_term only when media actually saved.
* Provenance stamped on hour_discover_last (user_paste | dial | llm | hybrid).
*/
function hour_trial_adopt_seed(
string $catalogFile,
string $harvestStateFile,
string $harvestLogFile,
string $sourceRegistryFile,
string $bucketRegistryFile,
string $term,
string $mode,
array &$console
): array {
$term = trim($term);
if (!hour_term_looks_suitable($term)) {
$console[] = 'reject unsuitable term=' . $term . ' mode=' . $mode;
return ['term' => $term, 'mode' => $mode, 'bucket' => '', 'added' => 0, 'adopted' => 0];
}
$registry = load_bucket_registry($bucketRegistryFile);
$termL = strtolower(preg_replace('/[^a-z0-9_]/', '', $term) ?? '');
if ($termL !== '' && isset(safe_lane_subreddit_set()[$termL]) && !isset(nsfw_lane_subreddit_set()[$termL])) {
/* Keep SFW dial/popular terms on LM/RM, never NM pollution */
$targetBucket = hour_target_bucket($registry, $term, 'safe');
} else {
$targetBucket = hour_target_bucket($registry, $term, $mode);
}
$console[] = 'trial mode=' . $mode . ' term=' . $term . ' bucket=' . $targetBucket;
$res = run_harvest_pass($catalogFile, $harvestStateFile, $harvestLogFile, $sourceRegistryFile, $bucketRegistryFile, [
'dry' => false,
'force' => true,
'limit' => 1,
'useAi' => false,
'bucket' => $targetBucket,
'term' => $term,
]);
$added = (int)($res['added'] ?? 0);
$adopted = 0;
if ($added > 0) {
$bucket = is_array($registry['buckets'][$targetBucket] ?? null) ? $registry['buckets'][$targetBucket] : [];
$seeds = array_values(array_filter(array_map('strval', (array)($bucket['seed_terms'] ?? []))));
if (!in_array($term, $seeds, true)) {
$seeds[] = $term;
$bucket['seed_terms'] = array_values(array_slice(array_unique($seeds), 0, 40));
$bucket['id'] = $targetBucket;
$registry['buckets'][$targetBucket] = array_merge($registry['buckets'][$targetBucket] ?? [], $bucket);
write_json_file($bucketRegistryFile, [
'schema' => 'nosignup.fun.bucket-registry.v1',
'updated_at' => now_iso(),
'buckets' => $registry['buckets'],
'hour_discover_last' => [
'term' => $term,
'bucket' => $targetBucket,
'mode' => $mode,
'provenance' => $mode,
'at' => now_iso(),
],
]);
$adopted = 1;
$console[] = 'trial OK — adopted seed_term on ' . $targetBucket . ': ' . $term . ' (' . $mode . ')';
} else {
$console[] = 'trial OK — term already on ' . $targetBucket . ' (' . $mode . ')';
}
} else {
$console[] = 'trial FAIL — not adopting term=' . $term . ' mode=' . $mode . ' msg=' . (string)($res['message'] ?? '');
}
foreach (array_slice((array)($res['console'] ?? []), -3) as $line) $console[] = ' ' . (string)$line;
return [
'term' => $term,
'mode' => $mode,
'bucket' => $targetBucket,
'added' => $added,
'adopted' => $adopted,
'message' => (string)($res['message'] ?? ''),
];
}
/** User-harvest ledger rows with at >= $sinceTs (ISO or missing treated as recent). */
function hour_pastes_since(string $userHarvestFile, int $sinceTs): array {
$ledger = read_json_file($userHarvestFile, []);
$recent = isset($ledger['recent']) && is_array($ledger['recent']) ? $ledger['recent'] : [];
$out = [];
foreach ($recent as $row) {
if (!is_array($row)) continue;
$at = (string)($row['at'] ?? '');
$ts = $at !== '' ? strtotime($at) : 0;
if ($sinceTs > 0 && $ts > 0 && $ts < $sinceTs) continue;
$out[] = $row;
}
return array_slice($out, -HOUR_PASTE_LEDGER_CAP);
}
/**
* HOUR triad (lazy, IMPROVE):
* 1) USER PASTES since last hour — re-harvest media + heuristic seed terms
* 2) DIAL random public subreddit/query (deterministic phone list)
* 3) LLM optional — one public name only; down → skip (site works LLM-off)
* Trial before adopt. In-file heuristics only (no second crawler / no external upload).
*/
function crawl_hour_bucket_discover(
string $catalogFile,
string $harvestStateFile,
string $harvestLogFile,
string $sourceRegistryFile,
string $bucketRegistryFile,
string $userHarvestFile = '',
int $sinceTs = 0,
array $extraPasteUrls = []
): array {
$console = ['=== BIGPULL RUN paste>popular>dial>llm ' . now_iso() . ' ==='];
$ai = ai_status_payload();
$added = 0;
$adopted = 0;
$pasteMedia = 0;
$pasteTried = 0;
$seedTrials = 0;
$modes = [];
$terms = [];
$lastBucket = '';
$winningMode = 'none';
$winningTerm = '';
$seenSeeds = [];
$seenUrls = [];
/* 1) USER PASTES first — queue URLs drained this hour + ledger since last hour.
Ledger path may not exist yet; still merge extraPasteUrls from tick drain. */
$pastes = $userHarvestFile !== '' ? hour_pastes_since($userHarvestFile, $sinceTs) : [];
foreach ($extraPasteUrls as $eu) {
$eu = clean_submitted_url((string)$eu);
if ($eu === '') continue;
$pastes[] = ['source_url' => $eu, 'side' => 'L', 'at' => now_iso(), 'from' => 'hour_url_job'];
}
$console[] = 'PASTE candidates=' . count($pastes) . ' (ledger+queue) since_ts=' . $sinceTs;
foreach ($pastes as $row) {
if (!is_array($row)) continue;
$url = clean_submitted_url((string)($row['source_url'] ?? ''));
if ($url === '' || isset($seenUrls[$url])) continue;
$seenUrls[$url] = 1;
$pasteTried++;
/* Queue jobs already attempted media this tick — skip re-pull for from=hour_url_job */
$fromJob = ((string)($row['from'] ?? '')) === 'hour_url_job';
if (!$fromJob) {
$log = [];
$side = strtoupper(substr((string)($row['side'] ?? 'L'), 0, 1));
if (!in_array($side, ['L', 'R', 'N'], true)) $side = 'L';
$item = user_harvest_candidate($url, $side, '0', false, $log);
if ($item && $userHarvestFile !== '') {
$merge = merge_user_harvest_item($catalogFile, $item);
if (!empty($merge['success'])) {
record_user_harvest($userHarvestFile, $merge, $url);
$n = (int)($merge['added'] ?? 0);
$pasteMedia += $n;
$added += $n;
$console[] = 'paste media ' . ($n > 0 ? 'NEW' : 'dup') . ' ' . url_host_label($url);
}
} elseif (!$item) {
$console[] = 'paste media miss ' . url_host_label($url) . ' - ' . implode('; ', array_slice($log, -1));
}
} else {
$console[] = 'paste queue-url seed-eval ' . url_host_label($url);
}
if ($seedTrials >= HOUR_PASTE_SEED_TRIAL_CAP) continue;
$seed = hour_heuristic_seed_from_url($url);
if ($seed === '' || isset($seenSeeds[strtolower($seed)])) continue;
$seenSeeds[strtolower($seed)] = 1;
$seedTrials++;
$trial = hour_trial_adopt_seed(
$catalogFile, $harvestStateFile, $harvestLogFile, $sourceRegistryFile, $bucketRegistryFile,
$seed, 'user_paste', $console
);
$added += (int)($trial['added'] ?? 0);
$adopted += (int)($trial['adopted'] ?? 0);
if ((int)($trial['added'] ?? 0) > 0 || (int)($trial['adopted'] ?? 0) > 0) {
$modes[] = 'user_paste';
$terms[] = (string)($trial['term'] ?? $seed);
$lastBucket = (string)($trial['bucket'] ?? $lastBucket);
$winningMode = 'user_paste';
$winningTerm = (string)($trial['term'] ?? $seed);
}
}
if (!$pastes) $console[] = 'PASTE none since last hour tick (empty ledger/queue)';
/* 1b) POPULAR PROMPTS from visitor ledger — keywords direct harvest heuristics (LLM-like push). */
$popTerms = prompt_intent_popular_terms(6);
$console[] = 'POPULAR prompt terms=' . ($popTerms ? implode(',', $popTerms) : '(none yet)');
foreach ($popTerms as $pt) {
if ($seedTrials >= HOUR_PASTE_SEED_TRIAL_CAP + 4) break;
if ($pt === '' || isset($seenSeeds[strtolower($pt)])) continue;
if (!hour_term_looks_suitable($pt) || strlen($pt) < 3) continue;
$seenSeeds[strtolower($pt)] = 1;
$seedTrials++;
$trial = hour_trial_adopt_seed(
$catalogFile, $harvestStateFile, $harvestLogFile, $sourceRegistryFile, $bucketRegistryFile,
$pt, 'popular_prompt', $console
);
$added += (int)($trial['added'] ?? 0);
if (!empty($trial['adopted'])) {
$adopted++;
$modes[] = 'popular_prompt';
$terms[] = $pt;
$winningMode = 'popular_prompt';
$winningTerm = $pt;
$lastBucket = (string)($trial['bucket'] ?? $lastBucket);
}
}
/* 2) DIAL random — always one variance attempt (works LLM-off) */
$dials = [
'interestingasfuck', 'nextfuckinglevel', 'BeAmazed', 'Damnthatsinteresting', 'oddlysatisfying',
'dataisbeautiful', 'MapPorn', 'HistoryPorn', 'MachinePorn', 'spaceporn', 'EarthPorn',
'DIY', 'woodworking', 'somethingimade', 'perfectfit', 'blackmagicfuckery', 'nonononoyes',
'educationalgifs', 'physicsgifs', 'chemicalreactiongifs', 'ArtPorn', 'DesignPorn',
'homelab', 'raspberry_pi', '3Dprinting', 'engineeringporn', 'ToolPorn',
'cats', 'dogpictures', 'birdpics', 'naturepics', 'CityPorn', 'ArchitecturePorn',
'FoodPorn', 'DessertPorn', 'RoomPorn', 'CozyPlaces', 'AbandonedPorn', 'ruralporn',
'ImaginaryLandscapes', 'ImaginaryMonsters', 'pixelart', 'blursedimages', 'AbsoluteUnits',
'Unexpected', 'mildlyinteresting', 'notinteresting', 'woahdude', 'trippy', 'glitch_art',
'mechanical_gifs', 'perfectloops', 'Cinemagraphs', 'gifs', 'highqualitygifs', 'aww',
];
/* Prefer dial term not already tried from paste seed phase when possible */
$dialPool = [];
foreach ($dials as $d) {
if (!isset($seenSeeds[strtolower($d)])) $dialPool[] = $d;
}
if (!$dialPool) $dialPool = $dials;
$dialTerm = $dialPool[random_int(0, count($dialPool) - 1)];
$console[] = 'DIAL random term=' . $dialTerm;
$dialTrial = hour_trial_adopt_seed(
$catalogFile, $harvestStateFile, $harvestLogFile, $sourceRegistryFile, $bucketRegistryFile,
$dialTerm, 'dial', $console
);
$added += (int)($dialTrial['added'] ?? 0);
$adopted += (int)($dialTrial['adopted'] ?? 0);
if ((int)($dialTrial['added'] ?? 0) > 0 || (int)($dialTrial['adopted'] ?? 0) > 0) {
$modes[] = 'dial';
$terms[] = $dialTerm;
$lastBucket = (string)($dialTrial['bucket'] ?? $lastBucket);
if ($winningMode === 'none') {
$winningMode = 'dial';
$winningTerm = $dialTerm;
} else {
$winningMode = 'hybrid';
}
} elseif ($winningMode === 'none') {
$winningMode = 'dial';
$winningTerm = $dialTerm;
}
/* 3) LLM optional third — public subreddit name only; never free-form code */
$llmTerm = '';
if (($ai['ollama'] ?? '') === 'up' && !empty($ai['model_ready'])) {
$prompt = 'Reply with ONE English subreddit name only (no r/ prefix, no spaces, no punctuation). Public meme/media subreddit good for a no-signup media crawler. Example answer: interestingasfuck';
$url = rtrim(OLLAMA_URL, '/') . '/api/generate';
$body = json_encode(['model' => OLLAMA_MODEL, 'prompt' => $prompt, 'stream' => false, 'options' => ['temperature' => 0.9, 'num_predict' => 24]], JSON_UNESCAPED_SLASHES);
$raw = '';
if (function_exists('curl_init')) {
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $body,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_TIMEOUT => 12,
CURLOPT_RETURNTRANSFER => true,
]);
$raw = (string)@curl_exec($ch);
curl_close($ch);
}
$decoded = json_decode($raw, true);
$reply = is_array($decoded) ? (string)($decoded['response'] ?? '') : '';
if (preg_match('/[A-Za-z][A-Za-z0-9_]{2,40}/', $reply, $m) && hour_term_looks_suitable($m[0])) {
$llmTerm = $m[0];
$console[] = 'LLM suggested term=' . $llmTerm;
$llmTrial = hour_trial_adopt_seed(
$catalogFile, $harvestStateFile, $harvestLogFile, $sourceRegistryFile, $bucketRegistryFile,
$llmTerm, 'llm', $console
);
$added += (int)($llmTrial['added'] ?? 0);
$adopted += (int)($llmTrial['adopted'] ?? 0);
if ((int)($llmTrial['added'] ?? 0) > 0 || (int)($llmTrial['adopted'] ?? 0) > 0) {
$modes[] = 'llm';
$terms[] = $llmTerm;
$lastBucket = (string)($llmTrial['bucket'] ?? $lastBucket);
$winningMode = in_array($winningMode, ['user_paste', 'dial', 'hybrid'], true) ? 'hybrid' : 'llm';
if ($winningTerm === '') $winningTerm = $llmTerm;
}
} else {
$console[] = 'LLM reply unusable; stay dial/paste';
}
} else {
$console[] = 'LLM down/unready — optional third skipped (site works LLM-off)';
}
/* 4) BULK lane sweep — real bigpull volume from restored LM/RM/NM term pools. */
$bulkTarget = defined('HOUR_BIGPULL_TARGET_ADDED') ? (int)HOUR_BIGPULL_TARGET_ADDED : 48;
$bulkTrials = defined('HOUR_BIGPULL_TERM_TRIALS') ? (int)HOUR_BIGPULL_TERM_TRIALS : 24;
$bulkLimit = defined('HOUR_BIGPULL_PER_TERM_LIMIT') ? (int)HOUR_BIGPULL_PER_TERM_LIMIT : 4;
$bulkAdded = 0;
$bulkTried = 0;
$bulkLanes = ['LM', 'RM', 'NM'];
$console[] = 'BULK sweep target_added=' . $bulkTarget . ' max_trials=' . $bulkTrials;
$lanes = source_lanes();
$bulkStarted = time();
$bulkMaxSec = 20;
for ($bi = 0; $bi < $bulkTrials && $bulkAdded < $bulkTarget; $bi++) {
if ((time() - $bulkStarted) >= $bulkMaxSec) { $console[] = 'BULK time-box stop after ' . $bulkMaxSec . 's added=' . $bulkAdded; break; }
$bid = $bulkLanes[$bi % count($bulkLanes)];
$laneTerms = [];
if (isset($lanes[$bid]['terms']) && is_array($lanes[$bid]['terms'])) {
$laneTerms = array_values(array_filter(array_map('strval', $lanes[$bid]['terms'])));
}
if (!$laneTerms) continue;
$term = $laneTerms[random_int(0, count($laneTerms) - 1)];
$bulkTried++;
$bres = run_harvest_pass($catalogFile, $harvestStateFile, $harvestLogFile, $sourceRegistryFile, $bucketRegistryFile, [
'dry' => false,
'force' => true,
'limit' => $bulkLimit,
'useAi' => false,
'bucket' => $bid,
'term' => $term,
]);
$bn = (int)($bres['added'] ?? 0);
$bulkAdded += $bn;
$added += $bn;
if ($bn > 0) {
$modes[] = 'bulk';
$terms[] = $term;
$lastBucket = $bid;
if ($winningMode === 'none' || $winningMode === 'dial') {
$winningMode = 'bulk';
$winningTerm = $term;
}
$console[] = 'BULK ' . $bid . ' r/' . $term . ' +' . $bn;
} else {
$console[] = 'BULK miss ' . $bid . ' r/' . $term;
}
}
$console[] = 'BULK done tried=' . $bulkTried . ' added=' . $bulkAdded;
if ($winningTerm === '' && $dialTerm !== '') $winningTerm = $dialTerm;
$modeOut = $winningMode === 'none' ? 'dial' : $winningMode;
$console[] = 'BIGPULL done mode=' . $modeOut . ' term=' . $winningTerm . ' added=' . $added . ' adopted=' . $adopted
. ' paste_tried=' . $pasteTried . ' paste_media=' . $pasteMedia . ' seed_trials=' . $seedTrials;
return [
'mode' => $modeOut,
'term' => $winningTerm,
'bucket' => $lastBucket !== '' ? $lastBucket : hour_target_bucket(load_bucket_registry($bucketRegistryFile)),
'added' => $added,
'adopted' => $adopted,
'paste_tried' => $pasteTried,
'paste_media' => $pasteMedia,
'paste_seed_trials' => $seedTrials,
'modes' => $modes,
'terms' => $terms,
'llm_term' => $llmTerm,
'dial_term' => $dialTerm,
'console' => $console,
'ai' => $ai,
];
}
/** Visitor prompt ledger — feeds bigpull / LLM heuristics (nosignup.info-style keyword push). */
function prompt_intent_ledger_file(): string {
return (string)($GLOBALS['RUNTIME_DIR'] ?? fun_default_runtime_dir()) . DIRECTORY_SEPARATOR . 'prompt_intent_ledger.txt';
}
function prompt_intent_record(string $prompt, string $side, string $nsfw): void {
$prompt = trim($prompt);
if ($prompt === '' || strlen($prompt) < 2) return;
$file = prompt_intent_ledger_file();
runtime_ensure(dirname($file));
$line = now_iso() . "\tside=" . $side . "\tnsfw=" . $nsfw . "\tq=" . rawurlencode(substr($prompt, 0, 180)) . "\n";
@file_put_contents($file, $line, FILE_APPEND | LOCK_EX);
/* Soft rotate: keep last ~400 lines */
if (is_file($file) && (int)@filesize($file) > 120000) {
$lines = @file($file, FILE_IGNORE_NEW_LINES) ?: [];
$lines = array_slice($lines, -400);
@file_put_contents($file, implode("\n", $lines) . "\n", LOCK_EX);
}
}
/** Top recent prompt tokens for bigpull harvest variety. */
function prompt_intent_popular_terms(int $limit = 8): array {
$file = prompt_intent_ledger_file();
if (!is_file($file)) return [];
$counts = [];
foreach (array_reverse(@file($file, FILE_IGNORE_NEW_LINES) ?: []) as $line) {
if (!preg_match('/\tq=([^\t]+)/', (string)$line, $m)) continue;
$q = trim(rawurldecode((string)$m[1]));
if ($q === '') continue;
foreach (token_list($q) as $tok) {
$t = strtolower((string)$tok);
if (strlen($t) < 3) continue;
$counts[$t] = ($counts[$t] ?? 0) + 1;
}
if (count($counts) > 80) break;
}
arsort($counts, SORT_NUMERIC);
return array_slice(array_keys($counts), 0, max(1, $limit));
}
/** Ensure nsfw-intensity items in NSFW ON also exist under NSFW ONLY (repair empty ONLY boards). */
function txt_rehydrate_nsfw_only_branch(int $limit = 40): array {
$copied = 0;
$scanned = 0;
$on = 'NSFW ON';
$only = 'NSFW ONLY';
foreach (txt_branch_bucket_dirs($on) as $dir) {
foreach (glob($dir . DIRECTORY_SEPARATOR . '*.txt') ?: [] as $path) {
$scanned++;
if ($copied >= $limit) break 2;
$item = txt_read_item_file((string)$path);
if (!$item || !is_array($item)) continue;
if (item_intensity_honest($item) !== 'nsfw') continue;
if (!flow_media_allowed($item) && media_type_from_url((string)($item['url'] ?? '')) !== 'video') {
/* still allow if has media url local */
if (!preg_match('/index\.php\?media=/i', (string)($item['url'] ?? ''))) continue;
}
$id = clean_item_id((string)($item['id'] ?? ''));
if ($id === '') continue;
$bucket = txt_slug(txt_bucket_dir_for_item($item));
$existing = txt_item_paths($id, $only, $bucket);
if ($existing) continue;
$item['intensity'] = 'nsfw';
$item['side'] = 'N';
if (txt_store_item_refs($item, $bucket, false) > 0) $copied++;
}
}
return ['scanned' => $scanned, 'copied' => $copied];
}
function crawl_queue_tick(string $queueFile, string $stateFile, string $lockFile, string $catalogFile, string $harvestStateFile, string $harvestLogFile, string $sourceRegistryFile, string $bucketRegistryFile, string $userHarvestFile, bool $force = false): array {
/* Soft budget is CRAWL_TICK_MAX_SECONDS; hard limit needs headroom to finish JSON (45 killed mid-tick → 500). */
$tickLimit = max(90, (int)CRAWL_TICK_MAX_SECONDS + 40);
@set_time_limit($tickLimit);
@ini_set('max_execution_time', (string)$tickLimit);
runtime_ensure(dirname($queueFile));
$state = read_json_file($stateFile, []);
$now = time();
$tickStarted = $now;
$last = (int)($state['last_tick'] ?? 0);
if (!$force && $last > 0 && ($now - $last) < CRAWL_QUEUE_TICK_SECONDS) {
return ['success' => 1, 'skipped' => 1, 'message' => 'Crawl queue cooldown active', 'status' => crawl_queue_status_payload($queueFile, $stateFile, $lockFile, $bucketRegistryFile)];
}
$lock = @fopen($lockFile, 'c');
if (!$lock || !@flock($lock, LOCK_EX | LOCK_NB)) {
/*
* Do NOT unlink a live holder's lock path (TOCTOU double-run: unlink + new inode
* while old flock still held). flock auto-releases on process death.
* Only force=1 may steal a truly stale lock after budget+grace.
*/
$mt = is_file($lockFile) ? (int)@filemtime($lockFile) : 0;
$staleAfter = (int)CRAWL_TICK_MAX_SECONDS + 25;
$canSteal = $force && $mt > 0 && (time() - $mt) > $staleAfter;
if ($canSteal) {
@unlink($lockFile);
$lock = @fopen($lockFile, 'c');
if ($lock && @flock($lock, LOCK_EX | LOCK_NB)) {
/* force-recovered stale lock */
} else {
if ($lock) { @fclose($lock); }
return ['success' => 0, 'locked' => 1, 'message' => 'Crawl queue already running', 'status' => crawl_queue_status_payload($queueFile, $stateFile, $lockFile, $bucketRegistryFile)];
}
} else {
if ($lock) { @fclose($lock); }
return ['success' => 0, 'locked' => 1, 'message' => 'Crawl queue already running', 'status' => crawl_queue_status_payload($queueFile, $stateFile, $lockFile, $bucketRegistryFile)];
}
}
@touch($lockFile);
$console = ['=== CRAWL TICK (minute+optional hour) ' . now_iso() . ' ==='];
$added = 0;
$failed = 0;
$results = [];
$urlConsumed = 0;
$hourUrlConsumed = 0;
$lastHour = (int)($state['last_hour_tick'] ?? 0);
/* force skips minute cooldown only — does NOT force bigpull (was locking for minutes every admin click). */
$hourDue = $lastHour <= 0 || ($now - $lastHour) >= HOUR_CRAWL_TICK_SECONDS;
/* Minute: up to 3 URL jobs. Hour-due: drain more (HOUR_PASTE_URL_JOB_CAP). */
$urlCap = $hourDue ? HOUR_PASTE_URL_JOB_CAP : 3;
/* User URL jobs first (human pastes top the stack) */
$jobs = crawl_queue_read($queueFile);
$urlJobs = [];
$otherJobs = [];
foreach ($jobs as $job) {
if ((string)($job['kind'] ?? '') === 'url') $urlJobs[] = $job;
else $otherJobs[] = $job;
}
$runUrls = array_slice($urlJobs, 0, $urlCap);
$remainUrls = array_slice($urlJobs, $urlCap);
crawl_queue_write($queueFile, array_merge($remainUrls, $otherJobs));
$hourPasteUrls = [];
foreach ($runUrls as $job) {
$res = crawl_queue_process_job($job, $catalogFile, $harvestStateFile, $harvestLogFile, $sourceRegistryFile, $bucketRegistryFile, $userHarvestFile);
$urlConsumed++;
if ($hourDue) {
$hourUrlConsumed++;
$u = clean_submitted_url((string)($job['url'] ?? ''));
if ($u !== '') $hourPasteUrls[] = $u;
}
$n = (int)($res['added'] ?? 0);
$added += $n;
if ($n <= 0) $failed++;
$results[] = $res;
$console[] = 'url -> ' . (string)($res['message'] ?? '') . ' added=' . $n;
}
if ($hourDue && $urlConsumed > 0) {
$console[] = 'HOUR paste URL jobs drained=' . $urlConsumed . ' (cap ' . HOUR_PASTE_URL_JOB_CAP . ')';
}
/* D3: drain bucket/comment_bucket — 1/tick (budget); remain starts at index 1 (was 2 = silent drop of job[1]). */
$jobs = crawl_queue_read($queueFile);
$bucketJobs = [];
$restJobs2 = [];
foreach ($jobs as $job) {
$k = (string)($job['kind'] ?? '');
if ($k === 'bucket' || $k === 'comment_bucket') $bucketJobs[] = $job;
else $restJobs2[] = $job;
}
$bRun = array_slice($bucketJobs, 0, 1);
$bRemain = array_slice($bucketJobs, 1);
crawl_queue_write($queueFile, array_merge($bRemain, $restJobs2));
foreach ($bRun as $job) {
$res = crawl_queue_process_job($job, $catalogFile, $harvestStateFile, $harvestLogFile, $sourceRegistryFile, $bucketRegistryFile, $userHarvestFile);
$n = (int)($res['added'] ?? 0);
$added += $n;
if ($n <= 0) $failed++;
$results[] = $res;
$console[] = (string)($job['kind'] ?? 'bucket') . ' drain added=' . $n;
}
/* Post-serve prompt harvest: up to 7 saves for one queued prompt intent (serve already returned). */
$jobs = crawl_queue_read($queueFile);
$promptJobs = [];
$restJobs = [];
foreach ($jobs as $job) {
if ((string)($job['kind'] ?? '') === 'prompt') $promptJobs[] = $job;
else $restJobs[] = $job;
}
$promptCap = defined('PROMPT_HARVEST_JOBS_PER_TICK') ? max(1, (int)PROMPT_HARVEST_JOBS_PER_TICK) : 3;
if ((time() - $tickStarted) > (int)(CRAWL_TICK_MAX_SECONDS * 0.55)) { $promptCap = 0; $console[] = 'PROMPT harvest skipped (tick budget)'; }
$promptRun = 0;
while ($promptJobs && $promptRun < $promptCap) {
$pj = array_shift($promptJobs);
$promptRun++;
$q = trim((string)($pj['q'] ?? ''));
$console[] = 'PROMPT harvest-7 #' . $promptRun . ' q=' . substr($q, 0, 60);
if ($q !== '') {
$lane = (string)($pj['lane'] ?? 'LM');
$bucket = (string)($pj['bucket'] ?? $lane);
if ($bucket === '') $bucket = $lane;
$termQ = $q;
$laneTerms = source_lanes()[$lane]['terms'] ?? source_lanes()['LM']['terms'] ?? [];
if (is_array($laneTerms) && $laneTerms) {
$toks = token_list($q);
$best = ''; $bestScore = 0;
foreach ($laneTerms as $lt) {
$ltl = strtolower((string)$lt); $sc = 0;
foreach ($toks as $tk) { $tkl = strtolower((string)$tk); if ($tkl === $ltl) $sc += 10; elseif (strlen($tkl) >= 3 && (str_contains($ltl, $tkl) || str_contains($tkl, $ltl))) $sc += 3; }
if ($sc > $bestScore) { $bestScore = $sc; $best = (string)$lt; }
}
if ($best !== '' && $bestScore > 0) $termQ = $best;
elseif (preg_match('/^[A-Za-z][A-Za-z0-9_]{2,40}$/', trim($q))) $termQ = trim($q);
else $termQ = (string)$laneTerms[random_int(0, count($laneTerms) - 1)];
}
$pres = run_harvest_pass($catalogFile, $harvestStateFile, $harvestLogFile, $sourceRegistryFile, $bucketRegistryFile, [
'dry' => false,
'force' => true,
'limit' => 7,
'useAi' => false,
'bucket' => $bucket,
'term' => $termQ,
'only' => $lane,
]);
$pn = (int)($pres['added'] ?? 0);
$added += $pn;
if ($pn <= 0) $failed++;
$results[] = $pres;
$console[] = 'PROMPT harvest added=' . $pn . ' ' . (string)($pres['message'] ?? '');
}
}
if ($promptRun > 0) {
crawl_queue_write($queueFile, array_merge($promptJobs, $restJobs));
}
/* HARVEST RUN: RR shortage buckets */
$lastRh = (int)($state['last_only_rehydrate'] ?? 0); if ($lastRh <= 0 || ($now - $lastRh) >= ONLY_REHYDRATE_COOLDOWN_SECONDS) { $rh = txt_rehydrate_nsfw_only_branch(24); $state['last_only_rehydrate'] = $now; if ((int)($rh['copied'] ?? 0) > 0) $console[] = 'ONLY rehydrate +' . (int)$rh['copied'] . ' from ON'; } else { $console[] = 'ONLY rehydrate skip cooldown'; }
$minute = crawl_minute_all_buckets($catalogFile, $harvestStateFile, $harvestLogFile, $sourceRegistryFile, $bucketRegistryFile);
$added += (int)($minute['added'] ?? 0);
$failed += (int)($minute['failed'] ?? 0);
foreach ((array)($minute['console'] ?? []) as $line) $console[] = (string)$line;
/* BIGPULL: paste → popular prompts → dial → LLM-opt */
$hour = null;
if ($hourDue && (time() - $tickStarted) < CRAWL_TICK_MAX_SECONDS) {
$hour = crawl_hour_bucket_discover(
$catalogFile,
$harvestStateFile,
$harvestLogFile,
$sourceRegistryFile,
$bucketRegistryFile,
$userHarvestFile,
$lastHour > 0 ? $lastHour : 0,
$hourPasteUrls
);
$added += (int)($hour['added'] ?? 0);
if ((int)($hour['added'] ?? 0) <= 0) $failed++;
foreach ((array)($hour['console'] ?? []) as $line) $console[] = (string)$line;
$pasteConsumed = $hourUrlConsumed + (int)($hour['paste_tried'] ?? 0);
$state['last_hour_tick'] = $now;
$state['last_hour_tick_iso'] = now_iso();
$state['last_hour_term'] = (string)($hour['term'] ?? '');
$state['last_hour_mode'] = (string)($hour['mode'] ?? '');
$state['last_hour_paste_consumed'] = $pasteConsumed;
$state['last_hour_adopted'] = (int)($hour['adopted'] ?? 0);
$state['last_hour_paste_media'] = (int)($hour['paste_media'] ?? 0);
} else {
$console[] = 'BIGPULL skip — due in ' . max(0, HOUR_CRAWL_TICK_SECONDS - ($now - $lastHour)) . 's';
}
$state['last_tick'] = $now;
$state['last_tick_iso'] = now_iso();
$state['last_consumed'] = $urlConsumed + (int)($minute['tried'] ?? 0) + ($hourDue ? 1 : 0);
$state['last_added'] = $added;
$state['last_failed'] = $failed;
$state['last_seeded'] = 0;
if (!crawl_queue_read($queueFile)) { $sd = crawl_queue_seed_defaults($queueFile, $bucketRegistryFile); if ((int)($sd['seeded'] ?? 0) > 0) $console[] = 'seed_defaults +' . (int)$sd['seeded']; }
$state['last_mode'] = 'harvest_run' . ($hourDue ? '+bigpull' : '');
$curLive = read_json_file($stateFile, []);
if (isset($curLive['minute_bucket_cursor'])) $state['minute_bucket_cursor'] = (int)$curLive['minute_bucket_cursor'];
write_json_file($stateFile, $state);
@file_put_contents($harvestLogFile, implode("\n", array_slice($console, -MAX_COMMENT_LINES)) . "\n", FILE_APPEND | LOCK_EX);
@flock($lock, LOCK_UN);
@fclose($lock);
@unlink($lockFile);
return [
'success' => 1,
'message' => 'Crawl tick complete (harvest_run' . ($hourDue ? ' + bigpull' : '') . ')',
'mode' => (string)($state['last_mode'] ?? ''),
'consumed' => (int)($state['last_consumed'] ?? 0),
'added' => $added,
'failed' => $failed,
'minute' => ['tried' => (int)($minute['tried'] ?? 0), 'added' => (int)($minute['added'] ?? 0), 'failed' => (int)($minute['failed'] ?? 0)],
'hour' => $hour,
'url_jobs' => $urlConsumed,
'hour_url_jobs' => $hourUrlConsumed,
'results' => array_slice($results, 0, 8),
'console' => array_slice($console, -MAX_COMMENT_LINES),
'status' => crawl_queue_status_payload($queueFile, $stateFile, $lockFile, $bucketRegistryFile),
];
}
function handle_crawl_queue_add(string $queueFile): void {
$body = [];
$raw = (string)@file_get_contents('php://input');
if (stripos((string)($_SERVER['CONTENT_TYPE'] ?? ''), 'application/json') !== false) {
$decoded = json_decode($raw, true);
if (is_array($decoded)) $body = $decoded;
}
if (!$body) $body = $_POST + $_GET;
json_response(crawl_queue_enqueue($queueFile, $body));
}
function harvest_plan(array $lanes, array $state, string $only = '', array $bucket = [], string $termOverride = ''): array {
$plan = [];
$strategy = crawl_strategy_pick($state, clean_bucket_id((string)($bucket['id'] ?? $only)));
if ($bucket) {
$lane = harvest_lane_for_bucket($bucket);
if (!isset($lanes[$lane])) return [];
$terms = array_values(array_filter(array_map('strval', (array)($bucket['seed_terms'] ?? []))));
if (!$terms) $terms = (array)$lanes[$lane]['terms'];
$cursorKey = 'bucket:' . clean_bucket_id((string)($bucket['id'] ?? $lane));
$idx = (int)($state['cursors'][$cursorKey] ?? 0);
$plan[$lane] = [
'kind' => $lanes[$lane]['kind'],
'term' => $termOverride !== '' ? $termOverride : ($terms[$idx % max(1, count($terms))] ?? ''),
'index' => $idx % max(1, count($terms)),
'cursor_key' => $cursorKey,
'bucket_id' => clean_bucket_id((string)($bucket['id'] ?? '')),
'bucket_title' => (string)($bucket['title'] ?? ''),
'strategy' => $strategy,
];
return $plan;
}
foreach ($lanes as $lane => $cfg) {
if ($only !== '' && $only !== $lane) continue;
$terms = (array)$cfg['terms'];
$idx = (int)($state['cursors'][$lane] ?? 0);
$plan[$lane] = ['kind' => $cfg['kind'], 'term' => $termOverride !== '' ? $termOverride : ($terms[$idx % max(1, count($terms))] ?? ''), 'index' => $idx % max(1, count($terms)), 'cursor_key' => $lane, 'bucket_id' => $lane, 'bucket_title' => $lane, 'strategy' => $strategy];
}
return $plan;
}
function source_id_for_kind(string $kind): string {
if ($kind === 'reddit') return 'reddit';
if ($kind === 'archive') return 'archive_org';
return $kind;
}
function run_harvest_pass(string $catalogFile, string $stateFile, string $logFile, string $sourceRegistryFile, string $bucketRegistryFile = '', array $opts = []): array {
$state = read_json_file($stateFile, ['cursors' => []]);
$lanes = source_lanes();
$dry = !empty($opts['dry']);
$force = !empty($opts['force']);
$limit = max(1, min(7, (int)($opts['limit'] ?? 2)));
$useAi = array_key_exists('useAi', $opts) ? (bool)$opts['useAi'] : true;
$only = strtoupper(preg_replace('/[^A-Z]/', '', (string)($opts['only'] ?? '')));
$bucketId = clean_bucket_id((string)($opts['bucket'] ?? ''));
$termOverride = crawl_queue_clean((string)($opts['term'] ?? ''), 120);
$bucket = [];
if ($bucketId !== '' && $bucketRegistryFile !== '') {
$registry = load_bucket_registry($bucketRegistryFile);
$bucket = is_array($registry['buckets'][$bucketId] ?? null) ? $registry['buckets'][$bucketId] : [];
}
$now = time();
$last = (int)($state['last_harvest'] ?? 0);
if (!$dry && !$force && $last > 0 && ($now - $last) < HARVEST_COOLDOWN_SECONDS) {
return ['success' => 0, 'message' => 'Cooldown active', 'seconds_remaining' => HARVEST_COOLDOWN_SECONDS - ($now - $last), 'state' => $state, 'plan' => harvest_plan($lanes, $state, $only, $bucket, $termOverride)];
}
$plan = harvest_plan($lanes, $state, $only, $bucket, $termOverride);
if ($dry) {
$ai = $useAi ? ai_status_payload() : ['success' => 1, 'ollama' => 'skipped', 'model' => OLLAMA_MODEL, 'model_ready' => false, 'url' => OLLAMA_URL];
return ['success' => 1, 'dry' => 1, 'cooldown_seconds' => HARVEST_COOLDOWN_SECONDS, 'term_override' => $termOverride, 'ai' => $ai, 'plan' => $plan, 'bucket' => $bucket ? bucket_public_registry(['buckets' => [$bucketId => $bucket]]) : null, 'sources' => source_registry_public(load_source_registry($sourceRegistryFile))];
}
$log = ['=== HARVEST ' . now_iso() . ' ==='];
$items = [];
$registry = load_source_registry($sourceRegistryFile);
foreach ($plan as $lane => $step) {
$cfg = $lanes[$lane];
$term = (string)$step['term'];
$before = count($items);
$new = $cfg['kind'] === 'reddit' ? harvest_reddit_lane($lane, $term, $limit, $useAi, $log) : harvest_archive_lane($lane, $term, $limit, $useAi, $log);
if ($bucket) {
foreach ($new as &$newItem) {
if (!is_array($newItem)) continue;
$newItem['bucket'] = $bucketId;
$newItem['parent_bucket'] = (string)($bucket['parent_bucket'] ?? $lane);
$newItem['theme'] = (string)($bucket['title'] ?? '');
$newItem['medium'] = item_medium($newItem);
$newItem['lineage'] = array_values(array_unique(array_merge((array)($newItem['lineage'] ?? []), ['bucket-harvest', $bucketId])));
$newItem['tags'] = array_values(array_unique(array_slice(array_merge((array)($newItem['tags'] ?? []), theme_terms_from_item($newItem), (array)($bucket['seed_terms'] ?? [])), 0, 18)));
}
unset($newItem);
}
$items = array_merge($items, $new);
$addedFromSource = count($items) - $before;
touch_source_health($registry, source_id_for_kind((string)$cfg['kind']), $addedFromSource > 0, ($step['bucket_id'] ?? $lane) . ' term=' . $term . ' items=' . $addedFromSource);
$cursorKey = (string)($step['cursor_key'] ?? $lane);
$state['cursors'][$cursorKey] = ((int)($state['cursors'][$cursorKey] ?? 0)) + 1;
}
$merge = merge_catalog_items($catalogFile, $items);
$state['last_harvest'] = $now;
$state['last_harvest_iso'] = now_iso();
$state['last_added'] = $merge['added'];
$state['crawl_strategy_cursor'] = ((int)($state['crawl_strategy_cursor'] ?? 0)) + 1;
write_json_file($stateFile, $state);
save_source_registry($sourceRegistryFile, $registry);
runtime_ensure(dirname($logFile));
@file_put_contents($logFile, implode("\n", $log) . "\n", FILE_APPEND);
return ['success' => $merge['ok'] ? 1 : 0, 'message' => 'Harvest complete', 'added' => $merge['added'], 'seen' => count($items), 'total' => $merge['total'], 'console' => $log, 'ai' => ai_status_payload(), 'sources' => source_registry_public($registry)];
}
function handle_harvest(string $catalogFile, string $stateFile, string $logFile, string $sourceRegistryFile, string $bucketRegistryFile): void {
/* Force only POST force=1 + nsp_ok(admin_pass). Ignore GET force. Public unforced harvest stays open (cooldown applies). */
$result = run_harvest_pass($catalogFile, $stateFile, $logFile, $sourceRegistryFile, $bucketRegistryFile, [
'dry' => (string)($_GET['dry'] ?? '') === '1',
'force' => (
($_SERVER['REQUEST_METHOD'] ?? '') === 'POST'
&& (string)($_POST['force'] ?? '') === '1'
&& nsp_ok((string)($_POST['admin_pass'] ?? ''))
),
'limit' => (int)($_GET['limit'] ?? 2),
'useAi' => (string)($_GET['ai'] ?? '1') !== '0',
'only' => (string)($_GET['lane'] ?? ''),
'bucket' => (string)($_GET['bucket'] ?? ''),
'term' => (string)($_GET['term'] ?? ''),
]);
json_response($result);
}
function lock_active(string $lockFile): bool {
return is_file($lockFile) && (time() - (int)@filemtime($lockFile)) < MAINTENANCE_LOCK_SECONDS;
}
function maintenance_next_lane(array $state): string {
$lanes = array_keys(source_lanes());
$idx = (int)($state['lane_cursor'] ?? 0);
return $lanes[$idx % max(1, count($lanes))] ?? 'LM';
}
function harvestable_bucket_ids(array $registry): array {
$ids = [];
foreach (($registry['buckets'] ?? []) as $id => $bucket) {
if (!is_array($bucket)) continue;
if ((string)($bucket['status'] ?? 'active') !== 'active') continue;
if ((int)($bucket['harvestable'] ?? 0) !== 1) continue;
if (!isset(source_lanes()[harvest_lane_for_bucket($bucket)])) continue;
$ids[] = (string)$id;
}
return $ids ?: array_keys(source_lanes());
}
function maintenance_next_bucket(array $state, string $bucketRegistryFile): string {
$registry = load_bucket_registry($bucketRegistryFile);
$ids = harvestable_bucket_ids($registry);
$idx = (int)($state['bucket_cursor'] ?? ($state['lane_cursor'] ?? 0));
return $ids[$idx % max(1, count($ids))] ?? 'LM';
}
function vector_page_from_item(array $item, array $comments): array {
$baseId = (string)($item['id'] ?? item_id($item));
$tags = array_values(array_unique(array_slice((array)($item['tags'] ?? []), 0, 10)));
$score = comment_activity_score($comments, $baseId);
return [
'id' => 'vp_' . substr(hash('sha256', $baseId . '|vector-page'), 0, 12),
'source_item_id' => $baseId,
'side' => (string)($item['side'] ?? 'L'),
'lane' => 'VP',
'bucket' => item_bucket($item),
'medium' => 'H',
'parent_bucket' => item_bucket($item),
'title' => 'Vector Page: ' . (string)($item['title'] ?? 'Untitled'),
'source' => 'NOSIGNUP.FUN page evolver',
'source_url' => (string)($item['source_url'] ?? ''),
'vector' => (string)($item['vector'] ?? 'pattern recognition'),
'summary' => (string)($item['summary'] ?? 'A generated inoculation card preserves the useful pattern while the live source changes.'),
'practice' => (string)($item['practice'] ?? 'Name the pattern, compare outside the loop, and keep an exit path visible.'),
'tags' => array_values(array_unique(array_merge($tags, ['vector-page','inoculation']))),
'palette' => (array)($item['palette'] ?? ['#42d392','#5ac8fa','#071210','#effff8']),
'intensity' => (string)($item['intensity'] ?? 'safe'),
'type' => 'local-vector-page',
'url' => '',
'created_at' => now_iso(),
'lifespan' => max(TTL_DAYS, (int)($item['lifespan'] ?? TTL_DAYS)),
'upvotes' => 0,
'downvotes' => 0,
'comment_activity_score' => $score,
'evolution_note' => 'Deterministic same-file page generated from catalog evidence and shared item comments.',
];
}
function evolve_vector_pages(string $catalogFile, string $vectorPagesFile, int $limit = 36): array {
$catalog = load_catalog($catalogFile);
$comments = load_comments();
$pages = [];
$seen = [];
foreach ($catalog as $item) {
if (count($pages) >= $limit) break;
if (($item['type'] ?? '') === 'nsinfo-parameter-seed') continue;
$vector = strtolower(trim((string)($item['vector'] ?? '')));
if ($vector === '' || isset($seen[$vector])) continue;
$seen[$vector] = true;
$pages[] = vector_page_from_item($item, $comments);
}
$ok = write_json_file($vectorPagesFile, [
'schema' => 'nosignup.fun.vector-pages.v1',
'generated_at' => now_iso(),
'method' => 'deterministic catalog plus shared comments; no network required',
'pages' => $pages,
]);
return ['success' => $ok ? 1 : 0, 'pages' => count($pages)];
}
function maintenance_status_payload(string $maintenanceFile, string $harvestStateFile, string $sourceRegistryFile, string $bucketRegistryFile, string $userHarvestFile, string $vectorPagesFile, string $lockFile, string $queueFile = '', string $queueStateFile = '', string $queueLockFile = ''): array {
$state = read_json_file($maintenanceFile, []);
$harvest = read_json_file($harvestStateFile, []);
$bucketRegistry = load_bucket_registry($bucketRegistryFile);
$shardCounts = txt_shard_count_summary();
$nextBucket = maintenance_next_bucket($state, $bucketRegistryFile);
$nextBucketMeta = $bucketRegistry['buckets'][$nextBucket] ?? [];
$userHarvest = read_json_file($userHarvestFile, []);
$pages = read_json_file($vectorPagesFile, []);
$last = (int)($state['last_maintenance'] ?? 0);
$now = time();
$due = $last <= 0 || ($now - $last) >= HARVEST_COOLDOWN_SECONDS;
return [
'success' => 1,
'app_version' => APP_VERSION,
'due' => $due ? 1 : 0,
'locked' => lock_active($lockFile) ? 1 : 0,
'seconds_until_due' => $due ? 0 : HARVEST_COOLDOWN_SECONDS - ($now - $last),
'last_maintenance_iso' => (string)($state['last_maintenance_iso'] ?? ''),
'next_bucket' => $nextBucket,
'next_bucket_title' => (string)($nextBucketMeta['title'] ?? $nextBucket),
'next_lane' => $nextBucketMeta ? harvest_lane_for_bucket($nextBucketMeta) : maintenance_next_lane($state),
'last_harvest_iso' => (string)($harvest['last_harvest_iso'] ?? ''),
'bucket_count' => count($bucketRegistry['buckets'] ?? []),
'theme_bucket_count' => count(array_filter((array)($bucketRegistry['buckets'] ?? []), fn($b) => is_array($b) && (string)($b['kind'] ?? '') === 'theme')),
'buckets' => bucket_public_registry($bucketRegistry),
'comment_items' => (int)($shardCounts['comment_items'] ?? 0),
'node_metrics' => node_metric_status(),
'txt_shard_total' => (int)($shardCounts['total'] ?? 0),
'txt_shard_branches' => (array)($shardCounts['branches'] ?? []),
'user_harvest_total' => (int)($userHarvest['total_submissions'] ?? 0),
'user_harvest_added' => (int)($userHarvest['total_added'] ?? 0),
'vector_seed_pages' => count(vector_seed_catalog()),
'vector_pages' => count($pages['pages'] ?? []),
'ttl_days' => TTL_DAYS,
'flow_visible_max' => FLOW_PEER_NEWEST_COUNT + FLOW_PEER_POPULAR_COUNT,
'flow_media_slots' => FLOW_ITEM_COUNT,
'flow_optional_text_slot' => FLOW_TEXT_SLOT_INDEX,
'flow_board_item_limit' => FLOW_BOARD_ITEM_LIMIT,
'mirror_content_seed' => mirror_content_seed('status'),
'crawl_strategy' => crawl_strategy_pick($state, $nextBucket),
'crawl_boundaries' => crawl_hard_rejects(),
'crawl_queue' => ($queueFile !== '' && $queueStateFile !== '' && $queueLockFile !== '') ? crawl_queue_status_payload($queueFile, $queueStateFile, $queueLockFile, $bucketRegistryFile) : null,
'sources' => source_registry_public(load_source_registry($sourceRegistryFile)),
'state' => $state,
];
}
function handle_maintenance_status(string $maintenanceFile, string $harvestStateFile, string $sourceRegistryFile, string $bucketRegistryFile, string $userHarvestFile, string $vectorPagesFile, string $lockFile, string $queueFile = '', string $queueStateFile = '', string $queueLockFile = ''): void {
json_response(maintenance_status_payload($maintenanceFile, $harvestStateFile, $sourceRegistryFile, $bucketRegistryFile, $userHarvestFile, $vectorPagesFile, $lockFile, $queueFile, $queueStateFile, $queueLockFile));
}
function handle_source_status(string $sourceRegistryFile): void {
json_response(['success' => 1, 'sources' => source_registry_public(load_source_registry($sourceRegistryFile))]);
}
function handle_bucket_status(string $bucketRegistryFile): void {
$registry = load_bucket_registry($bucketRegistryFile);
$runtime = txt_bucket_runtime_stats();
foreach (($runtime['stats'] ?? []) as $id => $stats) {
if (!isset($registry['buckets'][$id]) || !is_array($registry['buckets'][$id])) continue;
$registry['buckets'][$id]['item_count'] = (int)($stats['items'] ?? 0);
$registry['buckets'][$id]['up'] = (int)($stats['up'] ?? 0);
$registry['buckets'][$id]['down'] = (int)($stats['down'] ?? 0);
$registry['buckets'][$id]['comment_pressure'] = (int)($stats['comments'] ?? 0);
}
json_response([
'success' => 1,
'schema' => 'nosignup.fun.bucket-status.v1',
'runtime_shards' => [
'basis' => 'filename-only txt folder stats; no catalog/vote/comment load',
'folders_scanned' => (int)($runtime['folders_scanned'] ?? 0),
'folder_limit' => (int)($runtime['folder_limit'] ?? 0),
'limited' => (int)($runtime['limited'] ?? 0),
],
'buckets' => bucket_public_registry($registry),
'harvestable' => harvestable_bucket_ids($registry),
'selection' => [
'bucket_certainty_percent' => BUCKET_SELECTION_CERTAINTY_PERCENT,
'item_certainty_percent' => ITEM_SELECTION_CERTAINTY_PERCENT,
'flow_visible_max' => FLOW_PEER_NEWEST_COUNT + FLOW_PEER_POPULAR_COUNT,
'flow_media_slots' => FLOW_ITEM_COUNT,
'flow_optional_text_slot' => FLOW_TEXT_SLOT_INDEX,
'flow_board_item_limit' => FLOW_BOARD_ITEM_LIMIT,
'flow_peer_newest' => FLOW_PEER_NEWEST_COUNT,
'flow_peer_popular' => FLOW_PEER_POPULAR_COUNT,
'score_policy' => 'golden-ratio weighted, Zipf-biased bounded random',
],
'evolution' => [
'upvote_bucket_threshold' => ITEM_UPVOTE_BUCKET_THRESHOLD,
'upvote_bucket_spend_ratio' => GOLDEN_RATIO_SPEND,
'upvote_bucket_retain_ratio' => GOLDEN_RATIO_RETAIN,
'downvote_delete_threshold' => ITEM_DOWNVOTE_DELETE_THRESHOLD,
'device_vote_cooldown_seconds' => VOTE_DEVICE_COOLDOWN_SECONDS,
'ttl_days' => TTL_DAYS,
'crawl_budget' => crawl_strategy_weights(),
'mirror_content_seed' => mirror_content_seed('bucket-status'),
],
]);
}
function handle_vector_status(string $vectorPagesFile): void {
$seed = vector_seed_catalog();
$pages = read_json_file($vectorPagesFile, []);
json_response([
'success' => 1,
'schema' => 'nosignup.fun.vector-status.v1',
'basis' => '2 fields over (t,x,y,z,s), derivatives through order 3, plus 12 system parameters',
'seed_method' => 'computed from pure math on request; no runtime file required',
'seed_pages' => count($seed),
'computed_seed_pages' => count($seed),
'evolved_cache_pages' => count($pages['pages'] ?? []),
'generated_pages' => count($pages['pages'] ?? []),
'generated_pages_note' => 'compatibility field for evolved cache pages; the 124 seed deck is computed live',
'generated_at' => (string)($pages['generated_at'] ?? ''),
'first_seed' => $seed[0] ?? null,
'last_seed' => $seed[count($seed) - 1] ?? null,
]);
}
function handle_source_discover(string $sourceRegistryFile): void {
$registry = load_source_registry($sourceRegistryFile);
$sources = isset($registry['sources']) && is_array($registry['sources']) ? $registry['sources'] : [];
$candidates = [];
foreach ($sources as $id => $src) {
if (!is_array($src) || (string)($src['status'] ?? '') !== 'candidate') continue;
$candidates[] = [
'id' => (string)$id,
'kind' => (string)($src['kind'] ?? 'candidate'),
'health' => (float)($src['health'] ?? 0),
'lanes' => array_values((array)($src['lanes'] ?? [])),
'signals' => array_values((array)($src['popularity_signals'] ?? [])),
'activation_requirements' => [
'bounded public fetcher',
'auditable popularity or provenance signal',
'media URL validator',
'license/safety note',
'failure policy and health decay',
],
'notes' => (string)($src['notes'] ?? ''),
];
}
json_response([
'success' => 1,
'dry' => 1,
'schema' => 'nosignup.fun.source-discovery.v1',
'message' => 'Read-only source replacement scaffold; no source is activated here.',
'active_sources' => array_values(array_filter(array_keys($sources), fn($id) => (string)($sources[$id]['status'] ?? '') === 'active')),
'candidate_count' => count($candidates),
'candidates' => $candidates,
'crawl_budget' => crawl_strategy_weights(),
'crawl_ecology' => [
'salt' => crawl_ecology_salt(),
'epoch' => crawl_ecology_epoch(),
'ttl_days' => TTL_DAYS,
'note' => 'Ephemeral mirror ecology, not durable identity; source parity remains byte-based.',
],
'hard_rejects' => crawl_hard_rejects(),
'free_ai_advisor_rules' => [
'probe only public no-signup A.I. endpoints',
'ask harmless text-only classification questions',
'never send private data, raw unknown media, or illegal/edge payloads',
'treat advisor output as advisory only',
'decay advisor health on CAPTCHA, login, rate-limit, hallucination, or friction',
],
'rules' => [
'Do not require cron or configuration.',
'Do not block rendering on source discovery.',
'Do not activate a model-suggested source without deterministic validation.',
'Do not store visitor identity while measuring source usefulness.',
'Do not repair source code automatically; mirror parity changes only by deliberate upload.',
'Do not build Tor-specific support unless it becomes a small optional public-fetch adapter.',
],
]);
}
function handle_page_evolve(string $catalogFile, string $vectorPagesFile): void {
$limit = max(1, min(16, (int)($_GET['limit'] ?? 8)));
$catalog = load_catalog($catalogFile);
$comments = load_comments();
$pages = read_json_file($vectorPagesFile, []);
$scored = [];
foreach ($catalog as $item) {
if (!is_array($item) || ($item['type'] ?? '') === 'local-vector-page') continue;
$id = (string)($item['id'] ?? item_id($item));
$score = comment_activity_score($comments, $id) * 5
+ max(0, (int)($item['user_saves'] ?? 0)) * 4
+ max(0, (int)($item['upvotes'] ?? 0) - (int)($item['downvotes'] ?? 0))
+ (((string)($item['source_url'] ?? '') !== '') ? 1 : 0);
$scored[] = ['score' => $score, 'item' => $item];
}
usort($scored, fn($a, $b) => ((int)$b['score'] <=> (int)$a['score']) ?: strcmp((string)($a['item']['title'] ?? ''), (string)($b['item']['title'] ?? '')));
$preview = [];
foreach (array_slice($scored, 0, $limit) as $entry) {
$page = vector_page_from_item($entry['item'], $comments);
$page['preview_score'] = (int)$entry['score'];
$preview[] = $page;
}
json_response([
'success' => 1,
'dry' => 1,
'schema' => 'nosignup.fun.page-evolve.v1',
'message' => 'Read-only page evolution scaffold; use maintenance_run for current bounded writer.',
'seed_pages' => count(vector_seed_catalog()),
'generated_pages' => count($pages['pages'] ?? []),
'catalog_items' => count($catalog),
'comment_items' => count($comments['items'] ?? []),
'would_preview' => count($preview),
'preview' => $preview,
'future_inputs' => ['shared comments','local votes','repeat user harvests','source popularity','nosignup.info seed map','optional local Ollama summary'],
'rules' => [
'Every evolved page needs source evidence or local aggregate feedback.',
'A model may classify or summarize, but it may not be the only evidence.',
'Rendering must still work when the model and the network are unavailable.',
'NSFW material stays consent-gated and cannot be downgraded by a model.',
],
]);
}
function handle_maintenance_run(string $maintenanceFile, string $catalogFile, string $harvestStateFile, string $harvestLogFile, string $sourceRegistryFile, string $bucketRegistryFile, string $userHarvestFile, string $vectorPagesFile, string $lockFile): void {
runtime_ensure(dirname($lockFile));
$status = maintenance_status_payload($maintenanceFile, $harvestStateFile, $sourceRegistryFile, $bucketRegistryFile, $userHarvestFile, $vectorPagesFile, $lockFile);
if (!$status['due']) {
json_response(['success' => 0, 'message' => 'Maintenance cooldown active', 'status' => $status]);
return;
}
$lock = @fopen($lockFile, 'c');
if (!$lock || !@flock($lock, LOCK_EX | LOCK_NB)) {
json_response(['success' => 0, 'message' => 'Maintenance already running', 'status' => $status]);
return;
}
@touch($lockFile);
$state = read_json_file($maintenanceFile, []);
$bucketRegistry = load_bucket_registry($bucketRegistryFile, load_catalog($catalogFile), load_votes(), load_comments());
$bucketId = maintenance_next_bucket($state, $bucketRegistryFile);
$bucket = is_array($bucketRegistry['buckets'][$bucketId] ?? null) ? $bucketRegistry['buckets'][$bucketId] : [];
$lane = $bucket ? harvest_lane_for_bucket($bucket) : maintenance_next_lane($state);
/* POLYMERIZED maintenance → crawl_queue_tick (harvest_run + optional bigpull) + keep compress/evolve */
$queueFile = (string)($GLOBALS['CRAWL_QUEUE_FILE'] ?? '');
$queueState = (string)($GLOBALS['CRAWL_QUEUE_STATE_FILE'] ?? '');
$queueLock = (string)($GLOBALS['CRAWL_QUEUE_LOCK_FILE'] ?? '');
$tick = ($queueFile !== '' && $queueState !== '' && $queueLock !== '')
? crawl_queue_tick($queueFile, $queueState, $queueLock, $catalogFile, $harvestStateFile, $harvestLogFile, $sourceRegistryFile, $bucketRegistryFile, $userHarvestFile, true)
: ['success' => 0, 'message' => 'queue paths missing'];
$harvest = [
'success' => (int)($tick['success'] ?? 0),
'message' => (string)($tick['message'] ?? 'tick'),
'added' => (int)($tick['added'] ?? 0),
'mode' => (string)($tick['mode'] ?? 'polymerized'),
'console' => (array)($tick['console'] ?? []),
];
$imageCompression = compress_runtime_catalog_images($catalogFile, (string)($GLOBALS['MEDIA_DIR'] ?? ''), 12);
$pages = evolve_vector_pages($catalogFile, $vectorPagesFile, 48);
$bucketIds = harvestable_bucket_ids($bucketRegistry);
$state['last_maintenance'] = time();
$state['last_maintenance_iso'] = now_iso();
$state['last_lane'] = $lane;
$state['last_bucket'] = $bucketId;
$state['bucket_cursor'] = ((int)($state['bucket_cursor'] ?? ($state['lane_cursor'] ?? 0)) + 1) % max(1, count($bucketIds));
$state['lane_cursor'] = $state['bucket_cursor'];
$state['last_harvest_success'] = (int)($harvest['success'] ?? 0);
$state['last_harvest_message'] = (string)($harvest['message'] ?? '');
$state['last_image_compression'] = $imageCompression;
$state['last_vector_pages'] = (int)($pages['pages'] ?? 0);
write_json_file($maintenanceFile, $state);
@flock($lock, LOCK_UN);
@fclose($lock);
@unlink($lockFile);
json_response(['success' => 1, 'message' => 'Maintenance complete', 'bucket' => $bucketId, 'lane' => $lane, 'harvest' => $harvest, 'image_compression' => $imageCompression, 'pages' => $pages, 'status' => maintenance_status_payload($maintenanceFile, $harvestStateFile, $sourceRegistryFile, $bucketRegistryFile, $userHarvestFile, $vectorPagesFile, $lockFile)]);
}
function item_id(array $item): string {
return substr(hash('sha256', ($item['side'] ?? '') . '|' . ($item['title'] ?? '') . '|' . ($item['vector'] ?? '')), 0, 12);
}
function default_catalog(): array {
$created = '2026-06-26T00:00:00Z';
$base = [
[
'side' => 'L', 'lane' => 'LM', 'title' => 'Recognition-Suppression Loop',
'source' => 'NOSIGNUP.INFO Module 0', 'vector' => 'capture / recognition-suppression / false local minimum',
'summary' => 'A control field narrows evidence, punishes the corrective move, rewards false attribution, and raises exit cost.',
'practice' => 'Name the missing evidence path. Ask what comparison would be punished.',
'tags' => ['capture','recognition','suppression','gaslighting','coercive control','exit cost','evidence','compare'],
'palette' => ['#77e3f5','#42d392','#0c1014','#f8fff8'], 'intensity' => 'safe',
],
[
'side' => 'L', 'lane' => 'LM', 'title' => 'Proxy Gaming',
'source' => 'NOSIGNUP.INFO Module 0', 'vector' => 'measurement proxy / optimization trap',
'summary' => 'The score is not the thing. When reward attaches to the proxy, behavior moves toward the proxy instead of truth.',
'practice' => 'Ask what the number is replacing. Look for the real target underneath the score.',
'tags' => ['proxy','measurement','score','gaming','metric','truth','optimization','rank'],
'palette' => ['#f6c85f','#5ac8fa','#101014','#fff8e8'], 'intensity' => 'safe',
],
[
'side' => 'L', 'lane' => 'LH', 'title' => 'Exit Cost Check',
'source' => 'NOSIGNUP.INFO Module 0', 'vector' => 'capture pressure / switching cost',
'summary' => 'A system becomes capture-prone when leaving costs enough to coerce continued participation.',
'practice' => 'Find the smallest reversible exit. Lower one switching cost before arguing.',
'tags' => ['exit','cost','capture','coercion','leaving','account','lock-in','terms'],
'palette' => ['#ff5f57','#f6c85f','#120a0a','#fff6f3'], 'intensity' => 'safe',
],
[
'side' => 'L', 'lane' => 'LV', 'title' => 'Institutional Gaslight',
'source' => 'NOSIGNUP.INFO Module 0', 'vector' => 'declared rule / real incentive split',
'summary' => 'The public rule says one thing, the private incentive rewards another, and contradiction becomes labor.',
'practice' => 'Write the declared rule, the real reward, and the penalty for naming the mismatch.',
'tags' => ['institution','gaslight','incentive','contradiction','social heat','work','school','healthcare'],
'palette' => ['#b48cff','#f6c85f','#0e0b12','#fbf7ff'], 'intensity' => 'safe',
],
[
'side' => 'L', 'lane' => 'LM', 'title' => 'Algorithmic Attention Capture',
'source' => 'NOSIGNUP.INFO Module 0', 'vector' => 'filtered evidence / outrage reward / social graph lock-in',
'summary' => 'A feed controls inputs, rewards reaction, isolates comparison, and makes switching socially expensive.',
'practice' => 'Pause the feed. Seek one source outside the loop before deciding.',
'tags' => ['algorithm','attention','feed','outrage','bubble','comparison','social graph','lock-in'],
'palette' => ['#5ac8fa','#ff5f57','#07121a','#f1fbff'], 'intensity' => 'safe',
],
[
'side' => 'L', 'lane' => 'LH', 'title' => 'Consent Gate',
'source' => 'NOSIGNUP.INFO defensive boundary', 'vector' => 'permission / reversibility / explicit boundary',
'summary' => 'A clean intervention can be refused, explained, paused, and audited without punishment.',
'practice' => 'Ask: can I say no, slow down, leave, and later inspect what happened?',
'tags' => ['consent','boundary','permission','audit','refuse','pause','explain','leave'],
'palette' => ['#42d392','#ffffff','#071210','#effff8'], 'intensity' => 'safe',
],
[
'side' => 'L', 'lane' => 'LV', 'title' => 'Identity Entropy Warning',
'source' => 'NOSIGNUP.INFO identity model', 'vector' => 'self-continuity / dissociation pressure',
'summary' => 'When self-state becomes too spread out or externally steered, memory, agency, and continuity need protection.',
'practice' => 'Anchor date, place, body, choice, and one trusted outside witness.',
'tags' => ['identity','entropy','dissociation','self','continuity','memory','agency','anchor'],
'palette' => ['#77e3f5','#b48cff','#080812','#f7f3ff'], 'intensity' => 'safe',
],
[
'side' => 'R', 'lane' => 'RM', 'title' => 'Grounding Loop',
'source' => 'Anti-dissociative reference', 'vector' => 'sensory orientation / agency restoration',
'summary' => 'A beneficial loop returns attention to present sensory facts before story, pressure, or performance.',
'practice' => 'Name five visible things, four body contacts, three sounds, two choices, one next step.',
'tags' => ['grounding','anti-dissociative','sensory','body','present','agency','calm','orientation'],
'palette' => ['#42d392','#5ac8fa','#071210','#effff8'], 'intensity' => 'safe',
],
[
'side' => 'R', 'lane' => 'RM', 'title' => 'Coherence Breathing',
'source' => 'Anti-dissociative reference', 'vector' => 'arousal reduction / rhythm / safe timing',
'summary' => 'Slow repeatable rhythm can make panic less commanding without pretending to solve the whole situation.',
'practice' => 'Exhale longer than inhale for six rounds. Decide after the spike passes.',
'tags' => ['breathing','coherence','panic','rhythm','arousal','calm','body','slow'],
'palette' => ['#9ddcff','#ffffff','#061018','#f4fbff'], 'intensity' => 'safe',
],
[
'side' => 'R', 'lane' => 'RM', 'title' => 'Safe Outsider',
'source' => 'Recognition-suppression defense', 'vector' => 'comparison / isolation break',
'summary' => 'Manipulation gets weaker when a calm outsider can inspect the frame without being punished by it.',
'practice' => 'Ask one grounded person to repeat the situation back in plain words.',
'tags' => ['outsider','comparison','isolation','friend','witness','plain words','frame','support'],
'palette' => ['#f6c85f','#42d392','#111006','#fff9e7'], 'intensity' => 'safe',
],
[
'side' => 'R', 'lane' => 'RV', 'title' => 'Mirror Break',
'source' => 'NOSIGNUP.INFO control input defense', 'vector' => 'language mimicry / action mismatch',
'summary' => 'A manipulator may mirror your words while steering your actions. Matching language is not safety.',
'practice' => 'Ignore tone for one minute. Compare actions, costs, and permission to leave.',
'tags' => ['mirror','mimic','language','action','boundary','manipulation','safety','leave'],
'palette' => ['#b48cff','#77e3f5','#100b18','#fbf8ff'], 'intensity' => 'safe',
],
[
'side' => 'R', 'lane' => 'RH', 'title' => 'Social Heat Vent',
'source' => 'NOSIGNUP.INFO social thermodynamics', 'vector' => 'hidden contradiction / wasted labor',
'summary' => 'Heat appears where people spend energy maintaining a gap between rule, incentive, measurement, and exit reality.',
'practice' => 'Name the contradiction out loud, then choose the lowest-risk truthful move.',
'tags' => ['social heat','contradiction','truth','labor','burnout','silence','incentive','exit'],
'palette' => ['#ff8a3d','#5ac8fa','#120d08','#fff5e8'], 'intensity' => 'safe',
],
[
'side' => 'R', 'lane' => 'RV', 'title' => 'Creative Reset',
'source' => 'Anti-dissociative reference', 'vector' => 'color / rhythm / agency',
'summary' => 'Small creative motion can reattach choice to the body when the mind is stuck in threat abstraction.',
'practice' => 'Draw one shape, hum one tone, move one hand, then re-check the problem.',
'tags' => ['creative','reset','art','music','movement','body','choice','stuck'],
'palette' => ['#ff5f57','#f6c85f','#0f0a10','#fff7ed'], 'intensity' => 'safe',
],
[
'side' => 'N', 'lane' => 'NM', 'title' => 'Grooming Pattern',
'source' => 'NOSIGNUP.INFO recognition-suppression use-case', 'vector' => 'fast trust / isolation / reframed memory',
'summary' => 'Trust is accelerated, outside advice is made suspect, and memory is reframed until self-correction feels dangerous.',
'practice' => 'Slow contact. Keep written facts. Ask for second opinions before private escalation.',
'tags' => ['grooming','trust','isolation','memory','second opinion','private','authority','danger'],
'palette' => ['#ff5f57','#b48cff','#12060b','#fff1f5'], 'intensity' => 'nsfw',
],
[
'side' => 'N', 'lane' => 'NM', 'title' => 'Hypnosis Cue Risk',
'source' => 'NOSIGNUP.INFO altered-state boundary', 'vector' => 'suggestibility / cue locking / flexible identity',
'summary' => 'Repeated cue, narrowed attention, authority pressure, and fatigue can make suggestion feel like self-origin.',
'practice' => 'Break the cue, change posture, add light, and delay agreement.',
'tags' => ['hypnosis','suggestion','cue','attention','fatigue','authority','identity','delay'],
'palette' => ['#b48cff','#ff5f57','#0b0612','#faf3ff'], 'intensity' => 'nsfw',
],
[
'side' => 'N', 'lane' => 'NV', 'title' => 'Coercive Observability',
'source' => 'NOSIGNUP.INFO security vocabulary', 'vector' => 'surveillance / self-censorship / action shaping',
'summary' => 'When being watched changes what can be safely said or tried, the observer becomes part of the control field.',
'practice' => 'Move sensitive thinking to a smaller trusted context before deciding.',
'tags' => ['surveillance','observability','self-censorship','privacy','control','watched','security','context'],
'palette' => ['#f6c85f','#ff5f57','#130d05','#fff6dd'], 'intensity' => 'nsfw',
],
[
'side' => 'N', 'lane' => 'NH', 'title' => 'Authority Override',
'source' => 'NOSIGNUP.INFO threat model', 'vector' => 'title replaces explanation',
'summary' => 'Authority becomes unsafe when status substitutes for reasons and refusal creates punishment.',
'practice' => 'Ask for the reason in ordinary words. Keep the right to stop.',
'tags' => ['authority','status','explanation','refusal','punishment','reason','stop','consent'],
'palette' => ['#ffffff','#ff5f57','#090909','#f8f8f8'], 'intensity' => 'nsfw',
],
[
'side' => 'N', 'lane' => 'NV', 'title' => 'False Rescue',
'source' => 'NOSIGNUP.INFO capture defense', 'vector' => 'helper becomes new cage',
'summary' => 'A rescue is suspect when accepting help increases dependence, secrecy, shame, or exit cost.',
'practice' => 'Accept help that leaves you freer, not help that owns the next move.',
'tags' => ['rescue','dependence','help','secrecy','shame','exit cost','freedom','cage'],
'palette' => ['#42d392','#ff5f57','#071210','#effff8'], 'intensity' => 'nsfw',
],
];
foreach ($base as $i => &$item) {
$item['created_at'] = $created;
$item['lifespan'] = TTL_DAYS;
$item['upvotes'] = 0;
$item['downvotes'] = 0;
$item['type'] = 'local-svg-reference';
$item['url'] = '';
$item['rank_hint'] = 1000 - $i;
$item['id'] = item_id($item);
}
unset($item);
return $base;
}
function vector_combinations(int $order, array $coords): array {
if ($order <= 0) return [[]];
$out = [];
$walk = function (int $remaining, int $start, array $prefix) use (&$walk, &$out, $coords): void {
if ($remaining === 0) {
$out[] = $prefix;
return;
}
$count = count($coords);
for ($i = $start; $i < $count; $i++) {
$next = $prefix;
$next[] = $coords[$i];
$walk($remaining - 1, $i, $next);
}
};
$walk($order, 0, []);
return $out;
}
function derivative_label(string $field, array $combo): string {
if (!$combo) return $field === 'phi' ? 'phase phi' : 'amplitude A';
$counts = [];
foreach ($combo as $coord) $counts[$coord] = (int)($counts[$coord] ?? 0) + 1;
$den = [];
foreach (['t','x','y','z','s'] as $coord) {
$n = (int)($counts[$coord] ?? 0);
if ($n <= 0) continue;
$den[] = 'd' . $coord . ($n > 1 ? '^' . $n : '');
}
$order = count($combo);
return 'd' . ($order > 1 ? (string)$order : '') . $field . '/' . implode('', $den);
}
function derivative_tags(string $field, array $combo): array {
$tags = ['vector-page','inoculation','nosignup-info','parameter'];
$tags[] = $field === 'phi' ? 'phase' : 'amplitude';
$tags[] = 'order-' . count($combo);
foreach (array_values(array_unique($combo)) as $coord) {
$tags[] = ['t' => 'time', 'x' => 'space-x', 'y' => 'space-y', 'z' => 'space-z', 's' => 'identity'][$coord] ?? $coord;
}
if (in_array('s', $combo, true)) {
$tags[] = 'dissociation';
$tags[] = 'self-continuity';
}
if (in_array('t', $combo, true)) $tags[] = 'rhythm';
return array_values(array_unique($tags));
}
function vector_component_profile(string $coord, int $count = 1): array {
$map = [
't' => ['timing urgency', 'deadlines, countdowns, refresh rhythm, or sleep disruption'],
'x' => ['context framing', 'layout, location, room cues, or interface placement'],
'y' => ['social proof pressure', 'likes, replies, crowd reaction, rank, or audience heat'],
'z' => ['hidden-variable pressure', 'buried costs, missing evidence, private incentives, or invisible rules'],
's' => ['identity pressure', 'shame, belonging, role, memory, agency, or self-continuity'],
];
$row = $map[$coord] ?? [$coord, $coord];
if ($count > 1) {
$row[0] = 'stacked ' . $row[0];
$row[1] = 'repeated ' . $row[1];
}
return $row;
}
function vector_attack_profile(string $field, array $combo): array {
$isPhase = $field === 'phi';
$mode = $isPhase ? 'timing/phase control' : 'intensity/amplitude control';
if (!$combo) {
return [
$isPhase ? 'Baseline Timing Capture' : 'Baseline Intensity Capture',
$mode . ' at baseline',
'Example: a feed sets the default rhythm or salience before you notice a choice was made.',
'Why it works: the baseline becomes the comparison point, so later pressure feels normal instead of imposed.',
];
}
$counts = [];
foreach ($combo as $coord) $counts[$coord] = (int)($counts[$coord] ?? 0) + 1;
$names = [];
$examples = [];
foreach (['t','x','y','z','s'] as $coord) {
if (empty($counts[$coord])) continue;
[$name, $example] = vector_component_profile($coord, (int)$counts[$coord]);
$names[] = $name;
$examples[] = $example;
}
$vector = $mode . ' through ' . implode(' + ', $names);
$title = ($isPhase ? 'Timing' : 'Intensity') . ' ' . ucwords(str_replace(['-', '/'], ' ', $names[0] ?? 'Capture'));
if (count($names) > 1) $title .= ' Mix';
$summary = 'Example: ' . ucfirst(implode('; ', array_slice($examples, 0, 3))) . '.';
$why = $isPhase
? 'Why it works: it changes when comparison happens, so correction arrives late or at the wrong rhythm.'
: 'Why it works: it changes how important the stimulus feels before evidence and exit cost are compared.';
if (in_array('s', $combo, true)) $why .= ' Identity pressure makes disagreement feel like self-threat.';
elseif (in_array('z', $combo, true)) $why .= ' Hidden variables make the visible comparison incomplete.';
return [$title, $vector, $summary, $why];
}
function parameter_palette(int $n, string $field = ''): array {
$sets = [
['#77e3f5','#42d392','#071210','#effff8'],
['#f6c85f','#5ac8fa','#101014','#fff8e8'],
['#ff5f57','#b48cff','#12060b','#fff1f5'],
['#ffffff','#77e3f5','#080812','#f7fbff'],
['#42d392','#f6c85f','#06120b','#fffce8'],
];
return $sets[abs($n + strlen($field)) % count($sets)];
}
function vector_seed_item(int $n, string $title, string $symbol, string $focus, string $summary, string $practice, array $tags, string $field = ''): array {
$side = ($n % 2 === 0) ? 'R' : 'L';
$lanes = $side === 'R' ? ['RM','RH','RV'] : ['LM','LH','LV'];
return [
'id' => 'nsinfo-p' . str_pad((string)$n, 3, '0', STR_PAD_LEFT),
'side' => $side,
'lane' => $lanes[$n % count($lanes)],
'title' => 'P' . str_pad((string)$n, 3, '0', STR_PAD_LEFT) . ' ' . $title,
'source' => 'NOSIGNUP.INFO 124-parameter convention',
'vector' => $symbol . ' / ' . $focus,
'summary' => $summary,
'practice' => $practice,
'tags' => array_values(array_unique($tags)),
'palette' => parameter_palette($n, $field),
'intensity' => 'safe',
'created_at' => '2026-06-27T00:00:00Z',
'lifespan' => 3650,
'upvotes' => 0,
'downvotes' => 0,
'type' => 'nsinfo-parameter-seed',
'url' => '',
'rank_hint' => 760 - $n,
];
}
function vector_seed_catalog(): array {
$items = [];
$coords = ['t','x','y','z','s'];
$fields = ['A' => 'amplitude', 'phi' => 'phase'];
$n = 1;
foreach (range(0, 3) as $order) {
foreach (vector_combinations($order, $coords) as $combo) {
foreach ($fields as $field => $fieldName) {
$symbol = derivative_label($field, $combo);
[$title, $vector, $summary, $practice] = vector_attack_profile($field, $combo);
$items[] = vector_seed_item($n, $title, $symbol, $vector, $summary, $practice, derivative_tags($field, $combo), $field);
$n++;
}
}
}
$system = [
['c', 'Wave Speed', 'urgency propagation', 'Example: a claim spreads faster than verification, so everyone reacts before anyone compares.', 'Why it works: speed converts uncertainty into social pressure before exit paths are checked.', ['speed','propagation','urgency']],
['gamma', 'Damping', 'spike persistence', 'Example: outrage, arousal, or fear is refreshed before the body can settle.', 'Why it works: repeated inputs prevent baseline recovery, making the pressured state feel true.', ['damping','settling','arousal']],
['g', 'Nonlinear Coupling', 'feedback amplification', 'Example: cue, reward, audience, and repetition amplify a small signal into a command.', 'Why it works: loops make each pass feel independently confirming even when it is the same pressure.', ['coupling','feedback','amplification']],
['omega0', 'Natural Frequency', 'rhythm capture', 'Example: a platform sets the refresh rhythm your attention falls back into.', 'Why it works: preferred rhythm becomes habit, so leaving feels like friction instead of choice.', ['rhythm','routine','baseline']],
['kappa', 'Connection Kernel', 'association hijack', 'Example: a word, image, body state, or memory is linked to a reward or threat.', 'Why it works: the association fires before conscious comparison can inspect whether it belongs.', ['association','memory','meaning']],
['D_A', 'Amplitude Diffusion', 'intensity bleed', 'Example: one intense clip makes unrelated contexts feel urgent, sexual, hostile, or shameful.', 'Why it works: activation spreads across categories, so unrelated decisions inherit the spike.', ['diffusion','intensity','containment']],
['D_phi', 'Phase Diffusion', 'timing coherence blur', 'Example: sleep loss, rapid cuts, and constant novelty desynchronize memory and attention.', 'Why it works: comparison requires rhythm; blurred timing makes contradictions hard to line up.', ['phase','coherence','timing']],
['V', 'External Potential', 'environment tilt', 'Example: layout, defaults, audience, or scarcity makes one choice feel like the only path.', 'Why it works: environment pressure is mistaken for internal preference unless it is named.', ['environment','pressure','frame']],
['n', 'Noise Level', 'signal contamination', 'Example: too many claims, voices, tabs, or alerts bury the evidence path.', 'Why it works: noise raises comparison cost until the simplest available frame wins.', ['noise','clarity','comparison']],
['gamma_ss', 'Identity Coupling', 'identity-state cross-talk', 'Example: shame in one self-state is used to steer another state that lacks the context.', 'Why it works: boundary confusion lets pressure travel as identity instead of information.', ['identity','coupling','consent']],
['E_barrier', 'Identity Barrier', 'memory boundary height', 'Example: a state cannot access the memory or witness needed to compare the pressure.', 'Why it works: isolated memory makes manipulation look local, urgent, and self-originating.', ['identity','boundary','memory']],
['Z', 'Boundary Impedance', 'exit-edge resistance', 'Example: saying no, leaving, or slowing down reflects back as guilt, threat, or cost.', 'Why it works: boundary resistance turns exit into punishment, so compliance feels easier than agency.', ['boundary','exit','consent']],
];
foreach ($system as $row) {
[$symbol, $name, $focus, $summary, $practice, $tags] = $row;
$items[] = vector_seed_item($n, 'System ' . $name, $symbol, $focus, $summary, $practice, array_merge(['vector-page','inoculation','nosignup-info','system-parameter'], $tags), 'system');
$n++;
}
return $items;
}
function load_catalog(string $catalogFile, string $vectorPagesFile = ''): array {
$runtime = read_json_file($catalogFile, []);
$items = array_merge(txt_catalog_items(), default_catalog(), vector_seed_catalog());
if (isset($runtime['items']) && is_array($runtime['items'])) {
foreach ($runtime['items'] as $item) {
if (is_array($item) && isset($item['title'], $item['side'])) $items[] = $item;
}
}
if ($vectorPagesFile !== '') {
$pages = read_json_file($vectorPagesFile, []);
if (isset($pages['pages']) && is_array($pages['pages'])) {
foreach ($pages['pages'] as $item) {
if (is_array($item) && isset($item['title'], $item['side'])) $items[] = $item;
}
}
}
$seen = [];
$out = [];
foreach ($items as $item) {
$item['id'] = $item['id'] ?? item_id($item);
$item = normalize_item_taxonomy($item);
if (isset($seen[$item['id']])) continue;
$seen[$item['id']] = true;
$out[] = $item;
}
txt_bootstrap_from_catalog($out);
return $out;
}
function load_votes(): array {
$votes = [];
foreach (txt_item_paths() as $path) {
$meta = txt_parse_item_filename($path);
if (!$meta) continue;
$id = (string)$meta['id'];
$existing = is_array($votes[$id] ?? null) ? vote_record($votes, $id) : null;
$record = [
'up' => (int)$meta['up'],
'down' => (int)$meta['down'],
'delta' => (int)$meta['up'] - (int)$meta['down'],
'dead' => 0,
'deleted_at' => '',
'graduations' => (int)$meta['graduations'],
'bucket_id' => '',
'graduated_at' => '',
'updated_at' => now_iso(),
];
if ($existing === null || ($record['up'] + $record['down']) >= ((int)$existing['up'] + (int)$existing['down'])) $votes[$id] = $record;
}
return is_array($votes) ? $votes : [];
}
function clean_item_id(string $id): string {
return substr(preg_replace('/[^a-zA-Z0-9_\-]/', '', $id) ?? '', 0, 64);
}
function load_comments(): array {
$data = ['schema' => 'nosignup.fun.comments.v1', 'updated_at' => now_iso(), 'items' => []];
foreach (txt_catalog_items() as $item) {
$id = clean_item_id((string)($item['id'] ?? ''));
if ($id === '') continue;
$txt = txt_comment_record($id);
if (!empty($txt['entries'])) $data['items'][$id] = $txt;
}
return $data;
}
function load_votes_for_ids(array $ids): array {
$votes = [];
foreach ($ids as $id) {
$id = clean_item_id((string)$id);
if ($id === '') continue;
$record = txt_vote_record_for_id($id);
if ($record !== null) $votes[$id] = $record;
}
return $votes;
}
function load_comments_for_ids(array $ids): array {
$data = ['schema' => 'nosignup.fun.comments.v1', 'updated_at' => now_iso(), 'items' => []];
foreach ($ids as $id) {
$id = clean_item_id((string)$id);
if ($id === '') continue;
$record = txt_comment_record($id);
if (!empty($record['entries'])) $data['items'][$id] = $record;
}
return $data;
}
function txt_catalog_item_by_id(string $id): ?array {
$id = clean_item_id($id);
if ($id === '') return null;
foreach (txt_item_paths($id) as $path) {
$item = txt_read_item_file($path);
if (is_array($item)) {
$item['id'] = clean_item_id((string)($item['id'] ?? $id));
return normalize_item_taxonomy($item);
}
}
return null;
}
function normalize_comment_entry(array $entry): ?array {
$text = clean_comment_text((string)($entry['text'] ?? ''));
if ($text === '') return null;
$side = strtoupper(preg_replace('/[^LRN]/', '', (string)($entry['side'] ?? '')));
return [
'at' => (string)($entry['at'] ?? now_iso()),
'side' => in_array($side, ['L','R','N'], true) ? $side : '',
'text' => $text,
];
}
function comment_record(array $comments, string $id): array {
$r = $comments['items'][$id] ?? [];
$entries = [];
if (isset($r['entries']) && is_array($r['entries'])) {
foreach ($r['entries'] as $entry) {
if (is_array($entry)) {
$clean = normalize_comment_entry($entry);
if ($clean) $entries[] = $clean;
}
}
} elseif (isset($r['comments']) && is_array($r['comments'])) {
foreach ($r['comments'] as $entry) {
if (is_array($entry)) {
$clean = normalize_comment_entry($entry);
if ($clean) $entries[] = $clean;
}
}
}
return [
'entries' => array_values(array_slice($entries, -MAX_COMMENTS_PER_ITEM)),
'updated_at' => (string)($r['updated_at'] ?? ''),
];
}
function comment_activity_score(array $comments, string $id): int {
$r = comment_record($comments, $id);
return min(4, (int)floor(count($r['entries']) / 3));
}
function clean_comment_text(string $comment): string {
$comment = preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/', '', $comment) ?? '';
$comment = trim(preg_replace('/\s+/', ' ', $comment) ?? '');
return substr($comment, 0, 420);
}
/** Tiny purpose brain: comment_risk - soft scam tokens in comments; fail open (never blocks). */
function nsf_brain_comment_risk(string $comment): array {
$t = strtolower($comment);
$hits = [];
$bad = [
'seed phrase' => 0.45, 'private key' => 0.45, 'mnemonic' => 0.4, 'double your' => 0.35,
'airdrop' => 0.2, 'connect wallet' => 0.25, 'free money' => 0.3, 'bit.ly' => 0.15,
'telegram.me' => 0.15, 'gift card' => 0.25, 'wire transfer' => 0.2,
];
$score = 0.0;
foreach ($bad as $k => $w) {
if ($k !== '' && str_contains($t, $k)) {
$score += $w;
$hits[] = $k;
}
}
if ($score > 1.0) {
$score = 1.0;
}
return ['brain' => 'comment_risk', 'score' => round($score, 3), 'hits' => $hits, 'flag' => $score >= 0.45];
}
function handle_comment(string $catalogFile = ''): void {
$body = [];
$raw = (string)@file_get_contents('php://input');
if (stripos((string)($_SERVER['CONTENT_TYPE'] ?? ''), 'application/json') !== false) {
$decoded = json_decode($raw, true);
if (is_array($decoded)) $body = $decoded;
}
if (!$body) $body = $_POST;
$packet = request_packet_fields($body);
$id = clean_item_id((string)($body['itemId'] ?? $packet['centered_id'] ?? ($_GET['itemId'] ?? '')));
$side = strtoupper(preg_replace('/[^LRN]/', '', (string)($body['side'] ?? $packet['side'] ?? '')));
if ($side !== '' && $packet['side'] === '') $packet['side'] = $side;
if ($id !== '' && $packet['centered_id'] === '') $packet['centered_id'] = $id;
$comment = clean_comment_text((string)($body['comment'] ?? ''));
if ($id === '') {
node_metric_record('comment', ['ok' => 0, 'reason' => 'missing_item', 'side' => $side, 'len' => strlen($comment), 'nsfw' => $packet['nsfw']]);
json_response(packet_echo($packet, ['success' => 0, 'message' => 'Missing item']));
return;
}
if (!txt_item_paths($id) && $catalogFile !== '') {
txt_ensure_item_shard($id, $catalogFile, (string)($GLOBALS['VECTOR_PAGES_FILE'] ?? ''));
}
$comments = load_comments();
$record = comment_record($comments, $id);
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
json_response(packet_echo($packet, ['success' => 1, 'itemId' => $id, 'record' => $record]));
return;
}
if ($comment === '') {
node_metric_record('comment', ['ok' => 0, 'reason' => 'empty', 'item' => $id, 'side' => $side, 'nsfw' => $packet['nsfw']]);
json_response(packet_echo($packet, ['success' => 0, 'message' => 'Empty comment', 'itemId' => $id, 'record' => $record]));
return;
}
$commentBrain = nsf_brain_comment_risk($comment);
$txtRecord = txt_append_comment($id, $side, $comment);
if ($txtRecord !== null) {
$queue = null;
$itemForQueue = txt_catalog_item_by_id($id);
if (is_array($itemForQueue) && !empty($GLOBALS['CRAWL_QUEUE_FILE'])) {
$intensity = (string)($itemForQueue['intensity'] ?? 'safe');
$queue = crawl_queue_enqueue((string)$GLOBALS['CRAWL_QUEUE_FILE'], [
'kind' => 'comment_bucket',
'side' => $side !== '' ? $side : item_side($itemForQueue),
'nsfw' => $intensity === 'nsfw' ? '2' : ($intensity === 'mixed' ? '1' : '0'),
'bucket' => item_bucket($itemForQueue),
'lane' => (string)($itemForQueue['lane'] ?? ''),
'q' => $comment,
'source' => 'item-comment',
]);
}
node_metric_record('comment', ['ok' => 1, 'item' => $id, 'side' => $side, 'nsfw' => $packet['nsfw'], 'len' => strlen($comment), 'comments' => count((array)($txtRecord['entries'] ?? [])), 'comment_risk' => !empty($commentBrain['flag']) ? 1 : 0]);
$msg = 'Comment saved to item text shard';
if (!empty($commentBrain['flag'])) {
$msg .= ' (soft-flag comment_risk)';
}
json_response(packet_echo($packet, ['success' => 1, 'message' => $msg, 'itemId' => $id, 'record' => $txtRecord, 'crawl_queue' => $queue, 'brains' => ['comment_risk' => $commentBrain]]));
return;
}
node_metric_record('comment', ['ok' => 0, 'reason' => 'shard_unavailable', 'item' => $id, 'side' => $side, 'nsfw' => $packet['nsfw'], 'len' => strlen($comment)]);
json_response(packet_echo($packet, ['success' => 0, 'message' => 'Comment shard unavailable', 'itemId' => $id, 'record' => $record]));
}
function request_item_ids(int $limit = FLOW_BOARD_ITEM_LIMIT): array {
$raw = (string)@file_get_contents('php://input');
$body = [];
if ($raw !== '' && stripos((string)($_SERVER['CONTENT_TYPE'] ?? ''), 'application/json') !== false) {
$decoded = json_decode($raw, true);
if (is_array($decoded)) $body = $decoded;
}
$ids = $body['ids'] ?? ($_GET['ids'] ?? []);
if (is_string($ids)) $ids = preg_split('/[\s,]+/', $ids) ?: [];
if (!is_array($ids)) $ids = [];
$out = [];
foreach ($ids as $id) {
$clean = clean_item_id((string)$id);
if ($clean !== '') $out[$clean] = true;
if (count($out) >= $limit) break;
}
return array_keys($out);
}
function board_state_version(array $ids = []): int {
$version = 0;
$paths = [];
if ($ids) {
foreach ($ids as $id) foreach (txt_item_paths((string)$id) as $path) $paths[$path] = $path;
} else {
foreach (txt_item_paths() as $path) $paths[$path] = $path;
}
foreach ($paths as $path) {
clearstatcache(true, $path);
$version = max($version, (int)@filemtime($path));
}
return $version;
}
function board_poll_wait_limit(): int {
$software = strtolower((string)($_SERVER['SERVER_SOFTWARE'] ?? ''));
if (strpos($software, 'development server') !== false) return FLOW_BOARD_DEV_POLL_WAIT_SECONDS;
return FLOW_BOARD_POLL_WAIT_SECONDS;
}
function handle_board_state(string $catalogFile, string $queueFile = '', string $queueStateFile = '', string $queueLockFile = '', string $harvestStateFile = '', string $harvestLogFile = '', string $sourceRegistryFile = '', string $bucketRegistryFile = '', string $userHarvestFile = ''): void {
$ids = request_item_ids(FLOW_BOARD_ITEM_LIMIT);
$wait = max(0, min(board_poll_wait_limit(), (int)($_GET['wait'] ?? 0)));
$since = max(0, (int)($_GET['since'] ?? 0));
/* N3 packet: nsfw/side/debug/centered_id/broken_id on board_state (no invent endpoint). */
$packet = request_packet_fields();
/* request_item_ids may have consumed php://input — still honor GET broken_id */
if ((string)($packet['broken_id'] ?? '') === '' && (string)($_GET['broken_id'] ?? '') !== '') {
$packet['broken_id'] = clean_item_id((string)$_GET['broken_id']);
$packet['broken_url'] = substr((string)($_GET['broken_url'] ?? ''), 0, 240);
}
$brokenReport = packet_record_broken($packet);
if ($wait > 0 && $since > 0) {
$deadline = time() + $wait;
while (time() < $deadline && board_state_version($ids) <= $since) {
usleep(700000);
}
}
$comments = load_comments_for_ids($ids);
$votes = load_votes_for_ids($ids);
$fallbackCatalog = null;
$items = [];
foreach ($ids as $id) {
$commentRecord = comment_record($comments, $id);
$voteRecord = vote_record($votes, $id);
$catalogItem = txt_catalog_item_by_id($id);
if (!$catalogItem && $catalogFile !== '') {
if ($fallbackCatalog === null) $fallbackCatalog = load_catalog($catalogFile);
$catalogItem = find_catalog_item_by_id($fallbackCatalog, $id);
}
$catalogFromTxt = is_array($catalogItem) && isset($catalogItem['_txt_path']);
$baseUp = (int)($catalogItem['upvotes'] ?? 0);
$baseDown = (int)($catalogItem['downvotes'] ?? 0);
$items[$id] = [
'itemId' => $id,
'comments' => $commentRecord['entries'],
'comment_count' => count($commentRecord['entries']),
'comments_updated_at' => (string)($commentRecord['updated_at'] ?? ''),
'upvotes' => $baseUp + ($catalogFromTxt ? 0 : (int)$voteRecord['up']),
'downvotes' => $baseDown + ($catalogFromTxt ? 0 : (int)$voteRecord['down']),
'local_upvotes' => (int)$voteRecord['up'],
'local_downvotes' => (int)$voteRecord['down'],
'delta' => (int)$voteRecord['delta'],
'dead' => (int)$voteRecord['dead'],
'graduations' => (int)$voteRecord['graduations'],
'bucket_id' => (string)$voteRecord['bucket_id'],
'remainingDays' => $catalogItem ? days_left($catalogItem, $catalogFromTxt ? [] : $votes) : null,
'updated_at' => (string)$voteRecord['updated_at'],
];
}
/* Board poll must NOT run harvest (was blocking visitors + double-locking with maybeRunMaintenance). */
$queueTick = null;
if ((string)($_GET['tick'] ?? '') === '1') {
$queueTick = ['success' => 1, 'skipped' => 1, 'message' => 'board_state tick decoupled — use crawl_queue_tick / maintenance only', 'status' => ($queueFile !== '' && $queueStateFile !== '' && $queueLockFile !== '') ? crawl_queue_status_payload($queueFile, $queueStateFile, $queueLockFile, $bucketRegistryFile) : null];
}
$stateVersion = board_state_version($ids);
json_response(packet_echo($packet, [
'success' => 1,
'server_time' => now_iso(),
'state_version' => $stateVersion,
'board_version' => $stateVersion,
'ids' => $ids,
'items' => $items,
'flow_law' => flow_board_law_payload(),
'app_version' => APP_VERSION,
'traffic' => (flow_board_law_payload()['traffic'] ?? [
'local_nsu_wallet' => 0,
'rank_by_bid' => 0,
'cashflow' => 'NSU on nosignup.trade · no local fun wallet',
]),
'gif_cap_bytes' => MEDIA_ANIMATED_GIF_MAX_BYTES,
'source_fail_stickiness' => SOURCE_FAIL_STICKINESS,
'theme_bucket_count' => (function () use ($bucketRegistryFile) {
if ($bucketRegistryFile === '') return 0;
$reg = load_bucket_registry($bucketRegistryFile);
return count(array_filter((array)($reg['buckets'] ?? []), fn($b) => is_array($b) && (string)($b['kind'] ?? '') === 'theme'));
})(),
'broken_media' => $brokenReport,
'crawl_queue' => $queueTick,
]));
}
function vote_record(array $votes, string $id): array {
$r = $votes[$id] ?? [];
return [
'up' => max(0, (int)($r['up'] ?? 0)),
'down' => max(0, (int)($r['down'] ?? 0)),
'delta' => (int)($r['delta'] ?? 0),
'dead' => !empty($r['dead']) ? 1 : 0,
'deleted_at' => (string)($r['deleted_at'] ?? ''),
'graduations' => max(0, (int)($r['graduations'] ?? 0)),
'bucket_id' => (string)($r['bucket_id'] ?? ''),
'graduated_at' => (string)($r['graduated_at'] ?? ''),
'updated_at' => (string)($r['updated_at'] ?? ''),
];
}
function days_left(array $item, array $votes): int {
/* Prefer txt shard expiry (filename .x) — votes rename this stamp. */
if (!empty($item['_txt_expiry'])) {
$ex = (int)$item['_txt_expiry'];
if ($ex > 0) return max(0, (int)ceil(($ex - time()) / 86400));
}
$created = strtotime((string)($item['created_at'] ?? $item['harvested_at'] ?? $item['user_harvested_at'] ?? now_iso()));
if (!$created) $created = time();
$vote = vote_record($votes, (string)($item['id'] ?? ''));
if (!empty($vote['dead'])) return 0;
$delta = (int)$vote['delta'];
/* Flow serve often passes votes=[] — honor item-local ups/downs from txt. */
if ($delta === 0 && (isset($item['upvotes']) || isset($item['downvotes']) || isset($item['_upvotes']))) {
$delta = (int)($item['upvotes'] ?? $item['_upvotes'] ?? 0) - (int)($item['downvotes'] ?? $item['_downvotes'] ?? 0);
}
$lifespan = max(1, (int)($item['lifespan'] ?? TTL_DAYS) + $delta);
if (item_medium($item) === 'H' && (string)($item['source'] ?? '') !== '') {
$lifespan = max($lifespan, TTL_DAYS * 4);
}
$left = $lifespan - ((time() - $created) / 86400);
return max(0, (int)ceil($left));
}
/**
* Traffic-scaled graduation threshold (IMPROVE of original fixed 7).
* Floor stays ITEM_UPVOTE_BUCKET_THRESHOLD/FLOOR = 7 (original law).
* Scales gently with active KYC nodes so 7-ups is not instant theme spam under load.
* nodes~10 → 7; ~100 → ~18; ~1e4 → ~113; cap 200.
*/
function graduation_threshold(): int {
$floor = defined('ITEM_UPVOTE_BUCKET_FLOOR') ? (int)ITEM_UPVOTE_BUCKET_FLOOR : (int)ITEM_UPVOTE_BUCKET_THRESHOLD;
$floor = max(7, $floor);
$active = 0;
try {
$st = node_metric_status();
$active = max(0, (int)($st['active_nodes'] ?? 0));
} catch (Throwable $e) {
$active = 0;
}
if ($active < 1) {
/* Cold start: also peek inventory pressure as weak traffic proxy */
$ramp = function_exists('crawl_queue_dynamic_limits') ? crawl_queue_dynamic_limits() : [];
$inv = (int)($ramp['inventory_items'] ?? 0);
$active = max(1, (int)ceil(sqrt(max(1, $inv)) / 4));
}
$scaled = (int)ceil($floor * (1.0 + log10(max(10.0, (float)$active)) - 1.0) * GOLDEN_WEIGHT_PRIMARY * 2.5);
/* clearer: max(floor, ceil(floor * log10(max(10, active)))) */
$scaled = (int)ceil($floor * log10(max(10.0, (float)$active)));
return max($floor, min(200, $scaled));
}
function downvote_delete_threshold(): int {
/* Keep original 5; light scale under heavy traffic so brigade needs more hits */
$base = (int)ITEM_DOWNVOTE_DELETE_THRESHOLD;
$active = 0;
try {
$st = node_metric_status();
$active = max(0, (int)($st['active_nodes'] ?? 0));
} catch (Throwable $e) {
$active = 0;
}
if ($active < 50) return $base;
return max($base, min(25, (int)ceil($base * log10(max(10.0, (float)$active)) / 1.5)));
}
function log_line(array &$log, string $line): void {
$log[] = gmdate('H:i:s') . ' ' . $line;
if (count($log) > MAX_COMMENT_LINES) $log = array_slice($log, -MAX_COMMENT_LINES);
}
function item_text(array $item): string {
return strtolower(json_encode($item, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE));
}
function match_score(array $item, array $tokens): int {
if (!$tokens) return 1;
/*
* Strict relevance only:
* - title word boundaries
* - subreddit equals / starts with token (physics→physicsgifs; NOT cat→educationalgifs)
* Never scan tags (often broken char-grams), full JSON, or path keys.
*/
$title = strtolower((string)($item['title'] ?? ''));
$sub = strtolower((string)($item['subreddit'] ?? ''));
$score = 0;
foreach ($tokens as $token) {
$t = (string)$token;
if ($t === '' || strlen($t) < 3) continue;
if ($sub !== '') {
if ($sub === $t || str_starts_with($sub, $t)) $score += 20;
}
if ($title !== '' && preg_match('/(^|[^a-z0-9])' . preg_quote($t, '/') . '([^a-z0-9]|$)/', $title)) {
$score += 10;
}
}
return $score;
}
function intensity_allowed(array $item, string $nsfw): bool {
/* Extreme content never serves — even if already in inventory from older harvests. */
if (function_exists('content_safety_allowed') && !content_safety_allowed($item)) return false;
$intensity = function_exists('item_intensity_honest') ? item_intensity_honest($item) : (string)($item['intensity'] ?? 'safe');
if ($nsfw === '2') return $intensity === 'nsfw';
if ($nsfw === '1') return true;
return $intensity !== 'nsfw';
}
function bucket_request_weight(array $bucket, string $side, string $nsfw): float {
if ((string)($bucket['status'] ?? 'active') !== 'active') return 0.0;
$bSide = (string)($bucket['side'] ?? 'L');
$intensity = (string)($bucket['intensity'] ?? 'safe');
if ($nsfw === '0' && $intensity === 'nsfw') return 0.0;
if ($nsfw === '2' && $intensity !== 'nsfw') return 0.0;
if ($side === 'N') return $bSide === 'N' ? 10.0 : ($nsfw === '2' ? 4.0 : 0.5);
if ($bSide === $side) return 10.0;
if ($bSide === 'N') return $nsfw === '0' ? 2.0 : 3.0;
/* nsfw=2: allow opposite L/R nsfw buckets so ONLY board is not side-starved */
if ($nsfw === '2' && $intensity === 'nsfw') return 3.0;
return 0.0;
}
function eligible_bucket_weights(array $registry, string $side, string $nsfw): array {
$weights = [];
foreach (($registry['buckets'] ?? []) as $id => $bucket) {
if (!is_array($bucket)) continue;
$w = bucket_request_weight($bucket, $side, $nsfw);
if ($w > 0) $weights[(string)$id] = $w;
}
return $weights;
}
function weighted_choice(array $rows): ?array {
if (!$rows) return null;
$total = 0;
foreach ($rows as $row) $total += max(1, (int)round(((float)($row['weight'] ?? 1)) * 1000));
if ($total <= 0) return $rows[0];
$pick = random_int(1, $total);
$walk = 0;
foreach ($rows as $row) {
$walk += max(1, (int)round(((float)($row['weight'] ?? 1)) * 1000));
if ($pick <= $walk) return $row;
}
return $rows[count($rows) - 1];
}
function bucket_fallback_item(array $bucket, string $side, string $prompt, string $nsfw): array {
$title = (string)($bucket['title'] ?? 'Harvesting Bucket');
$id = 'fallback_' . substr(hash('sha256', $title . '|' . $side . '|' . $nsfw), 0, 12);
return normalize_item_taxonomy([
'id' => $id,
'side' => in_array((string)($bucket['side'] ?? ''), ['L','R','N'], true) ? (string)$bucket['side'] : $side,
'lane' => harvest_lane_for_bucket($bucket),
'bucket' => (string)($bucket['id'] ?? ''),
'medium' => in_array((string)($bucket['medium'] ?? ''), ['M','V','H'], true) ? (string)$bucket['medium'] : 'H',
'title' => 'Empty bucket · still harvesting',
'source' => 'NOSIGNUP.FUN bucket fallback',
'vector' => 'empty bucket / lazy source discovery',
'summary' => 'Not a real meme yet — this coordinate has no local derivative. SOLVE/DREAM again after a minute, or paste a public source URL into Harvest.',
'practice' => 'Use COMMENTS/DETAILS → Harvest with a public media URL, or re-tap SOLVE/DREAM after the queue tick fills inventory.',
'tags' => array_values(array_unique(array_merge(['harvesting','bucket','fallback','not-media'], (array)($bucket['seed_terms'] ?? [])))),
'palette' => ['#42d392','#ffcf5a','#071210','#effff8'],
'intensity' => $nsfw === '2' ? 'nsfw' : 'safe',
'created_at' => now_iso(),
'lifespan' => 1,
'upvotes' => 0,
'downvotes' => 0,
'type' => 'local-svg-reference',
'url' => '',
'prompt' => $prompt,
]);
}
/**
* Public ranking parts (no secret board / no AI oracle).
* V = damped local votes · S = source-native prior · C = comment activity
* R = recency / remaining lifespan · P = provenance (local derivative + adapter hint)
* V+S dominate via golden_score; Zipf applied on ranked pools separately.
*/
function item_rank_parts(array $item, array $votes, array $comments): array {
$id = (string)($item['id'] ?? item_id($item));
$vote = vote_record($votes, $id);
$up = max(0, (int)($item['upvotes'] ?? 0) + (int)$vote['up']);
$down = max(0, (int)($item['downvotes'] ?? 0) + (int)$vote['down']);
/* Dampen raw mass so single-node brigades cannot monopoly-score */
$V = max(0.0, log(1.0 + $up, 2) - 0.55 * log(1.0 + $down, 2));
$S = (float)source_popularity_prior($item);
/* Soft boost from source-native ups already in prior; keep additive saves */
$S += min(2.0, max(0, (int)($item['user_saves'] ?? 0)) * 0.35);
$C = (float)comment_activity_score($comments, $id);
$days = (float)($item['_days'] ?? days_left($item, $votes));
$R = max(0.0, min(4.0, $days / max(1, TTL_DAYS) * 4.0));
$url = (string)($item['url'] ?? '');
$localDeriv = (bool)preg_match('/^index\.php\?media=/i', $url);
$P = $localDeriv ? 2.5 : 0.4;
if ((string)($item['source_adapter'] ?? '') !== '' || (string)($item['source'] ?? '') !== '') {
$P += 0.35;
}
if (!empty($item['compression']) && is_array($item['compression'])) {
$P += 0.25;
}
/* Match is not AMBR core but keeps prompt theme relevance when present */
$match = max(0.1, (float)($item['_match'] ?? 1.0));
$matchBoost = 1.0 + log($match + 1.0, 2);
/* golden: primary=V+S, secondary=match, tertiary=C, quaternary=R, repair=P */
$score = golden_score($V + $S * 1.15, $matchBoost * 5.0, $C * 1.6, $R, $P);
$score = max(0.5, $score + zipf_rank_bonus((int)($item['rank_hint'] ?? 0), 2.5));
return [
'V' => round($V, 4),
'S' => round($S, 4),
'C' => round($C, 4),
'R' => round($R, 4),
'P' => round($P, 4),
'match' => round($match, 4),
'local_derivative' => $localDeriv ? 1 : 0,
'up' => $up,
'down' => $down,
'score' => round($score, 4),
'basis' => 'V damped local votes + S source-native + C comments + R recency + P provenance; Zipf on pools; no AI oracle',
];
}
function item_selection_score(array $item, array $votes, array $comments): float {
$parts = item_rank_parts($item, $votes, $comments);
return max(0.5, (float)($parts['score'] ?? 0.5));
}
function pick_bucket_id(array $bucketPools, array $registry, array $eligibleWeights): string {
$rows = [];
foreach ($bucketPools as $id => $items) {
$bucket = $registry['buckets'][$id] ?? ['id' => $id, 'pressure' => 1.0];
$rows[] = [
'id' => (string)$id,
'score' => golden_score(
min(18.0, (float)($bucket['pressure'] ?? 1.0)),
(float)($eligibleWeights[$id] ?? 1.0) * 8.0,
min(6.0, count($items) / 3),
1.0,
0.0
),
];
}
if (!$rows) return '';
usort($rows, fn($a, $b) => ((float)$b['score'] <=> (float)$a['score']) ?: strcmp((string)$a['id'], (string)$b['id']));
foreach ($rows as $i => &$row) $row['score'] = max(0.001, (float)$row['score']) * (1.0 + zipf_weight($i + 1));
unset($row);
foreach ($rows as $ri => &$rrow) { if ($ri < 4) $rrow['score'] = (float)$rrow['score'] * 2.2; } unset($rrow);
$choice = weighted_choice(array_map(fn($r) => ['id' => $r['id'], 'weight' => $r['score']], $rows));
return (string)($choice['id'] ?? $rows[0]['id']);
}
function pick_item_from_bucket(array $items, array $votes, array $comments): ?array {
if (!$items) return null;
$rows = [];
foreach ($items as $item) {
$rows[] = ['item' => $item, 'score' => item_selection_score($item, $votes, $comments)];
}
usort($rows, fn($a, $b) => ((float)$b['score'] <=> (float)$a['score']) ?: strcmp((string)($a['item']['title'] ?? ''), (string)($b['item']['title'] ?? '')));
foreach ($rows as $i => &$row) $row['score'] = max(0.001, (float)$row['score']) * (1.0 + zipf_weight($i + 1));
unset($row);
foreach ($rows as $ri => &$rrow) { if ($ri < 7) $rrow['score'] = (float)$rrow['score'] * 1.8; } unset($rrow);
$choice = weighted_choice(array_map(fn($r) => ['item' => $r['item'], 'weight' => $r['score']], $rows));
return is_array($choice['item'] ?? null) ? $choice['item'] : $rows[0]['item'];
}
function flow_media_allowed(array $item): bool {
if (function_exists('content_safety_allowed') && !content_safety_allowed($item)) return false;
$url = (string)($item['url'] ?? '');
if (!media_url_ok($url)) return false;
$type = media_type_from_url($url);
if ($type === 'image') return (bool)preg_match('/^index\.php\?media=/i', $url);
return $type === 'video';
}
function flow_vector_modifier_item(string $prompt, string $nsfw, array &$log): ?array {
$deck = vector_seed_catalog();
if (!$deck) return null;
$tokens = token_list($prompt);
$rows = [];
$nsfw = in_array($nsfw, ['0','1','2'], true) ? $nsfw : '0';
foreach ($deck as $idx => $item) {
if (!is_array($item)) continue;
$item = normalize_item_taxonomy($item);
if (!intensity_allowed($item, $nsfw)) continue;
$match = match_score($item, $tokens);
$weight = golden_score(
1.0 + max(0, $match) * 5.0,
zipf_rank_bonus($idx + 1, 3.0),
1.0,
(float)(($idx % 13) + 1) / 13.0,
0.0
);
$rows[] = ['weight' => max(0.001, $weight), 'item' => $item, 'idx' => $idx + 1];
}
$choice = weighted_choice($rows);
if (!$choice || !isset($choice['item']) || !is_array($choice['item'])) return null;
$item = normalize_item_taxonomy((array)$choice['item']);
$item['_slot_role'] = 'inoculation_text';
$item['_slot_index'] = FLOW_TEXT_SLOT_INDEX;
$item['_selection_score'] = (float)($choice['weight'] ?? 0);
$item['_selection_bucket'] = item_bucket($item);
$item['_flow_folder_title'] = 'NOSIGNUP.INFO 124-seed deck';
log_line($log, 'FLOW appended inoculation from 124-seed deck: ' . (string)($item['title'] ?? 'vector seed') . '.');
return $item;
}
/** Always-available 8th card when deck/html miss — same slot role, no parallel UI. */
function flow_inoculation_fallback_item(array &$log): array {
$deck = vector_seed_catalog();
if ($deck && is_array($deck[0] ?? null)) {
$item = normalize_item_taxonomy((array)$deck[0]);
} else {
$item = [
'id' => 'inoc-fallback-static',
'title' => 'Nosignup.Fun · inoculation',
'type' => 'text',
'summary' => 'Mirror, not host. Votes and 32-day fade beat permanent platforms. Ask who benefits if one feed owns your attention.',
'practice' => 'Check provenance in COMMENTS/DETAILS. Downvote capture. Harvest only public sources.',
'vector' => 'anti-capture',
'side' => 'N',
'intensity' => 'safe',
'tags' => ['vector-page', 'inoculation', 'fallback'],
];
$item = normalize_item_taxonomy($item);
}
$item['_slot_role'] = 'inoculation_text';
$item['_slot_index'] = FLOW_TEXT_SLOT_INDEX;
$item['_selection_score'] = 0.5;
$item['_flow_folder_title'] = 'Inoculation (required tail)';
log_line($log, 'FLOW forced inoculation tail (fallback).');
return $item;
}
/**
* Product law: up to 7 media, then exactly one inoculation last (never 9+).
* Early returns and sparse boards MUST call this — no optional 8th.
*/
function ensure_flow_inoculation_tail(array $items, string $prompt, string $nsfw, array $htmlBuckets, array $registry, array $eligibleWeights, array &$log): array {
$media = [];
$inoc = null;
foreach ($items as $it) {
if (!is_array($it)) continue;
$role = (string)($it['_slot_role'] ?? '');
$type = strtolower((string)($it['type'] ?? ''));
if ($role === 'inoculation_text' || $type === 'text') {
if ($inoc === null) $inoc = $it;
continue;
}
if (!flow_media_allowed($it)) {
if ($inoc === null) { $it['_slot_role'] = 'inoculation_text'; $inoc = $it; }
continue;
}
$media[] = $it;
}
/* Cap media to seven; inoculation is never a media slot. */
$media = array_values(array_slice($media, 0, FLOW_ITEM_COUNT));
if ($inoc === null) {
$mod = flow_vector_modifier_item($prompt, $nsfw, $log);
if (!$mod && $htmlBuckets) {
$textBucket = pick_bucket_id($htmlBuckets, $registry, $eligibleWeights);
$textRows = $htmlBuckets[$textBucket] ?? [];
if ($textRows) {
usort($textRows, fn($a, $b) => ((float)($b['score'] ?? 0) <=> (float)($a['score'] ?? 0)) ?: strcmp((string)($a['item']['title'] ?? ''), (string)($b['item']['title'] ?? '')));
$textItem = $textRows[0]['item'];
$textItem['_slot_role'] = 'inoculation_text';
$textItem['_slot_index'] = FLOW_TEXT_SLOT_INDEX;
$textItem['_selection_score'] = (float)($textRows[0]['score'] ?? 0);
$mod = $textItem;
log_line($log, 'FLOW inoculation from html/local bucket=' . (string)($textItem['_selection_bucket'] ?? item_bucket($textItem)));
}
}
$inoc = $mod ?: flow_inoculation_fallback_item($log);
}
if (is_array($inoc)) {
$inoc['_slot_role'] = 'inoculation_text';
$inoc['_slot_index'] = FLOW_TEXT_SLOT_INDEX;
$media[] = $inoc;
}
log_line($log, 'FLOW 7+1 seal media=' . max(0, count($media) - 1) . ' inoc=1 total=' . count($media));
return $media;
}
/** Board product law surface for status / proofs (no secret rank). */
function flow_board_law_payload(): array {
return [
'media_slots' => FLOW_ITEM_COUNT,
'inoculation_slot' => FLOW_TEXT_SLOT_INDEX,
'board_limit' => FLOW_BOARD_ITEM_LIMIT,
'peer_newest' => FLOW_PEER_NEWEST_COUNT,
'peer_popular' => FLOW_PEER_POPULAR_COUNT,
'mix' => (defined('FLOW_CLOSEST_COUNT') ? FLOW_CLOSEST_COUNT : 5) . ' closest + ' . (defined('FLOW_LOOSE_RANDOM_COUNT') ? FLOW_LOOSE_RANDOM_COUNT : 2) . ' loose-random + inoc vector',
'theme_lock' => 1,
'inoculation_must' => 1,
'lesson_strip' => 'hidden',
'rank' => [
'parts' => ['V', 'S', 'C', 'R', 'P'],
'V' => 'damped local up/down (log; anti-brigade mass)',
'S' => 'source-native prior (ups/downloads/saves)',
'C' => 'shared comment activity',
'R' => 'recency / remaining TTL',
'P' => 'provenance (local derivative + adapter)',
'oracle' => 'none',
'ai' => 'never popularity authority',
'ad_bid' => 'never — towers/rails do not enter score',
],
'traffic' => [
'sister_rails' => 'equal free faces · no paid seats',
'ad_towers' => 'ephemeral flyouts behind SOLVE/DREAM only',
'local_nsu_wallet' => 0,
'cashflow' => 'NSU on nosignup.trade · no local fun wallet',
'rank_by_bid' => 0,
],
'basis' => 'closest + loose-random under NSFW gate (empty prompt = random); 7 media + 8th inoculation; public V/S/C/R/P only; ads never pick memes',
];
}
function select_item(string $side, string $prompt, string $nsfw, array $catalog, array $votes, array $comments, array &$log, string $bucketRegistryFile = '', array $excludeIds = []): ?array {
$side = in_array($side, ['L','R','N'], true) ? $side : 'L';
$nsfw = in_array($nsfw, ['0','1','2'], true) ? $nsfw : '0';
$tokens = token_list($prompt);
txt_bootstrap_from_catalog($catalog);
$branch = txt_branch_for_nsfw($nsfw);
$promptBucket = txt_prompt_bucket_prepare($branch, $prompt, $catalog, $votes, $comments, $log);
$txtItems = array_merge($promptBucket !== '' ? txt_catalog_items($branch, $promptBucket) : [], txt_catalog_items($branch));
if ($txtItems) {
$merged = [];
$seenTxt = [];
foreach ($txtItems as $txtItem) {
if (!is_array($txtItem)) continue;
$id = clean_item_id((string)($txtItem['id'] ?? item_id($txtItem)));
if ($id === '' || isset($seenTxt[$id])) continue;
$seenTxt[$id] = true;
$merged[] = $txtItem;
}
if ($merged) {
$catalog = $merged;
log_line($log, 'TXT single route: ' . $branch . ($promptBucket !== '' ? ' / ' . $promptBucket : '') . ' / refs=' . count($catalog));
}
}
$exclude = array_fill_keys(array_map('strval', $excludeIds), true);
$registry = load_bucket_registry($bucketRegistryFile, $catalog, $votes, $comments);
$eligibleWeights = eligible_bucket_weights($registry, $side, $nsfw);
log_line($log, "SELECT side=$side prompt='" . substr($prompt, 0, 48) . "' nsfw=$nsfw");
log_line($log, 'Buckets: ' . implode(',', array_keys($eligibleWeights)));
if ($tokens) log_line($log, 'Trigrams: ' . implode(',', $tokens));
$bucketPools = [];
$bucketFallback = [];
foreach ($catalog as $item) {
$item = normalize_item_taxonomy($item);
if (!intensity_allowed($item, $nsfw)) continue;
$bucketId = item_bucket($item);
if (!isset($eligibleWeights[$bucketId])) continue;
if (days_left($item, $votes) <= 0) continue;
$id = (string)($item['id'] ?? item_id($item));
if (isset($exclude[$id])) continue;
$bucketFallback[$bucketId][] = $item;
if (!$tokens) {
$item['_match'] = 1;
$bucketPools[$bucketId][] = $item;
continue;
}
$score = match_score($item, $tokens);
if ($score <= 0) continue; /* zero-match stays out of primary pool (use fallback only) */
$item['_match'] = $score;
$bucketPools[$bucketId][] = $item;
}
if (!$bucketPools) {
$bucketPools = $bucketFallback;
log_line($log, 'Prompt bucket pool empty; using eligible bucket fallback.');
}
if (!$bucketPools) {
if ($nsfw === '2') {
log_line($log, 'NSFW ONLY pool empty — refuse safe corpus fallback.');
} else {
foreach ($catalog as $item) {
$item = normalize_item_taxonomy($item);
if (!intensity_allowed($item, $nsfw) || days_left($item, $votes) <= 0) continue;
if ($nsfw === '0' && (($item['intensity'] ?? 'safe') === 'nsfw')) continue;
$id = (string)($item['id'] ?? item_id($item));
if (isset($exclude[$id])) continue;
$fallbackBucket = item_bucket($item);
$bucketPools[$fallbackBucket][] = $item;
if (!isset($eligibleWeights[$fallbackBucket])) $eligibleWeights[$fallbackBucket] = 0.5;
}
log_line($log, 'Side pool empty; using intensity-gated local corpus.');
}
}
$selectedBucket = pick_bucket_id($bucketPools, $registry, $eligibleWeights);
if ($selectedBucket === '') {
$firstBucket = array_key_first($eligibleWeights);
if ($firstBucket !== null && isset($registry['buckets'][$firstBucket])) {
$item = bucket_fallback_item($registry['buckets'][$firstBucket], $side, $prompt, $nsfw);
} else {
return null;
}
} else {
$item = pick_item_from_bucket($bucketPools[$selectedBucket] ?? [], $votes, $comments);
if (!$item && isset($registry['buckets'][$selectedBucket])) $item = bucket_fallback_item($registry['buckets'][$selectedBucket], $side, $prompt, $nsfw);
if (!$item) return null;
}
$item = attach_runtime_state($item, $votes, $comments);
$activity = comment_activity_score($comments, (string)$item['id']);
$bucketId = item_bucket($item);
$item['_bucket'] = $registry['buckets'][$bucketId] ?? ['id' => $bucketId, 'title' => $bucketId];
$item['_bucket_pressure'] = (float)($item['_bucket']['pressure'] ?? 0);
$item['_selection_bucket'] = $bucketId;
log_line($log, 'Bucket: ' . $bucketId . ' / ' . (string)($item['_bucket']['title'] ?? $bucketId));
log_line($log, 'Pool: ' . array_sum(array_map('count', $bucketPools)) . ' eligible references across ' . count($bucketPools) . ' buckets.');
if ($activity !== 0) log_line($log, 'Shared comments: ' . count($item['_comments']['entries'] ?? []));
log_line($log, 'Chosen: ' . ($item['title'] ?? 'Untitled') . ' from ' . ($item['source'] ?? 'local corpus'));
return $item;
}
function select_flow_items(string $side, string $prompt, string $nsfw, array $catalog, array $votes, array $comments, array &$log, string $bucketRegistryFile = '', int $count = FLOW_ITEM_COUNT): array {
$side = in_array($side, ['L','R','N'], true) ? $side : 'L';
if ($nsfw === '2' && function_exists('txt_rehydrate_nsfw_only_branch')) { $rh = txt_rehydrate_nsfw_only_branch(80); if ((int)($rh['copied'] ?? 0) > 0) log_line($log, 'ONLY rehydrate on serve +' . (int)$rh['copied']); }
$nsfw = in_array($nsfw, ['0','1','2'], true) ? $nsfw : '0';
$count = max(1, min(FLOW_ITEM_COUNT, $count));
$tokens = token_list($prompt);
if ($catalog) txt_bootstrap_from_catalog($catalog);
$branch = txt_branch_for_nsfw($nsfw);
$baseRegistry = load_bucket_registry($bucketRegistryFile);
$promptBucket = txt_prompt_bucket_prepare($branch, $prompt, $catalog, $votes, $comments, $log);
$folderCatalog = txt_flow_catalog_from_folders($branch, $promptBucket, $baseRegistry, $side, $nsfw, $prompt, $log);
/* ONLY branch often thin/empty historically — also pull NSFW ON and keep intensity_allowed filter. */
if ($nsfw === '2') {
$onCatalog = txt_flow_catalog_from_folders('NSFW ON', $promptBucket, $baseRegistry, $side, $nsfw, $prompt, $log);
if ($onCatalog) {
$merged = [];
$seenIds = [];
foreach (array_merge($folderCatalog ?: [], $onCatalog) as $it) {
if (!is_array($it)) continue;
$id = clean_item_id((string)($it['id'] ?? item_id($it)));
if ($id === '' || isset($seenIds[$id])) continue;
if (!intensity_allowed($it, '2')) continue;
$seenIds[$id] = true;
$merged[] = $it;
}
if ($merged) {
$folderCatalog = $merged;
log_line($log, 'FLOW NSFW ONLY pool merged from ONLY+ON nsfw media n=' . count($merged));
}
}
}
if ($folderCatalog) {
$catalog = $folderCatalog;
} elseif (!$catalog) {
log_line($log, 'TXT folder-shard route empty; no legacy catalog fallback was loaded.');
}
$registry = load_bucket_registry($bucketRegistryFile, $catalog, $votes, $comments);
$eligibleWeights = eligible_bucket_weights($registry, $side, $nsfw);
$mediaBuckets = [];
$mediaFolders = [];
$htmlBuckets = [];
$backfillRows = [];
log_line($log, 'FLOW target=seven media slots, golden/Zipf bucket pressure, valid-bucket backfill, cap=' . $count);
foreach ($catalog as $item) {
$item = normalize_item_taxonomy($item);
if (!intensity_allowed($item, $nsfw)) continue;
if (days_left($item, $votes) <= 0) continue;
$bucketId = item_bucket($item);
$primaryEligible = isset($eligibleWeights[$bucketId]);
$bucketMeta = $registry['buckets'][$bucketId] ?? ['status' => 'active'];
if (is_array($bucketMeta) && (string)($bucketMeta['status'] ?? 'active') !== 'active') continue;
$match = $tokens ? match_score($item, $tokens) : 1;
/* Prompt mode: unmatched items stay weak (do not inflate with 0.25 floor). */
$item['_match'] = $tokens ? (float)$match : 1.0;
$item = attach_runtime_state($item, $votes, $comments);
$item['_bucket'] = $registry['buckets'][$bucketId] ?? ['id' => $bucketId, 'title' => $bucketId];
$item['_bucket_pressure'] = (float)($item['_bucket']['pressure'] ?? 0);
$item['_selection_bucket'] = $bucketId;
$folder = item_flow_folder($item, $bucketId);
$item['_flow_folder_key'] = (string)$folder['key'];
$item['_flow_folder_title'] = (string)$folder['title'];
/* match_score already includes strict subreddit prefix + title words */
if ($tokens) {
$item['_match'] = (float)$match;
}
$requestWeight = $primaryEligible ? (float)$eligibleWeights[$bucketId] : 0.35;
/* When user typed a prompt, match dominates selection so SOLVE/DREAM track intent. */
if ($tokens) {
$score = golden_score(
max(0.1, (float)$match) * 14.0,
item_selection_score($item, $votes, $comments),
$requestWeight * 4.0,
min(8.0, (float)$item['_bucket_pressure'] / 10),
zipf_rank_bonus((int)($item['rank_hint'] ?? 0), 1.2)
);
} else {
$score = golden_score(
item_selection_score($item, $votes, $comments),
$requestWeight * 8.0,
min(12.0, (float)$item['_bucket_pressure'] / 8),
max(0.0, (float)($item['_match'] ?? 0.0)),
zipf_rank_bonus((int)($item['rank_hint'] ?? 0), 2.0)
);
}
$item['_selection_score'] = $score;
$row = ['score' => $score, 'item' => $item];
if (flow_media_allowed($item)) {
$backfillRows[] = $row;
if (!$primaryEligible) continue;
$folderKey = (string)$folder['key'];
$mediaBuckets[$bucketId][] = $row;
$mediaFolders[$bucketId][$folderKey][] = $row;
} else {
if (!$primaryEligible) continue;
$htmlBuckets[$bucketId][] = $row;
}
}
if (!$mediaBuckets && $backfillRows) {
foreach ($backfillRows as $row) {
$item = $row['item'] ?? [];
$bucketId = item_bucket($item);
$folderKey = (string)($item['_flow_folder_key'] ?? $bucketId);
$mediaBuckets[$bucketId][] = $row;
$mediaFolders[$bucketId][$folderKey][] = $row;
}
log_line($log, 'FLOW prompt had no media matches; using valid media backfill.');
}
/* Emergency: if still no media (esp. NSFW ONLY), scan branch+ON for real media before inoc-only. */
if (!$mediaBuckets) {
$scanBranches = [$branch];
if ($nsfw === '2') $scanBranches[] = 'NSFW ON';
foreach ($scanBranches as $brScan) {
foreach (txt_catalog_items($brScan, '', 480) as $extra) {
if (!is_array($extra)) continue;
$extra = normalize_item_taxonomy($extra);
if (!intensity_allowed($extra, $nsfw) || !flow_media_allowed($extra)) continue;
if (days_left($extra, $votes) <= 0) continue;
$bucketId = item_bucket($extra);
$extra['_match'] = $tokens ? (float)match_score($extra, $tokens) : 1.0;
$extra = attach_runtime_state($extra, $votes, $comments);
$extra['_selection_bucket'] = $bucketId;
$folder = item_flow_folder($extra, $bucketId);
$extra['_flow_folder_key'] = (string)$folder['key'];
$extra['_flow_folder_title'] = (string)$folder['title'];
$score = golden_score(item_selection_score($extra, $votes, $comments), 1.0, 1.0, max(0.0, (float)$extra['_match']), 1.0);
$extra['_selection_score'] = $score;
$row = ['score' => $score, 'item' => $extra];
$mediaBuckets[$bucketId][] = $row;
$mediaFolders[$bucketId][(string)$folder['key']][] = $row;
$backfillRows[] = $row;
}
}
if ($mediaBuckets) log_line($log, 'FLOW emergency media scan filled buckets=' . count($mediaBuckets));
}
if (!$mediaBuckets && $htmlBuckets) {
$selectedHtmlBucket = pick_bucket_id($htmlBuckets, $registry, $eligibleWeights);
$rows = $htmlBuckets[$selectedHtmlBucket] ?? array_values($htmlBuckets)[0];
usort($rows, fn($a, $b) => ((float)$b['score'] <=> (float)$a['score']) ?: strcmp((string)($a['item']['title'] ?? ''), (string)($b['item']['title'] ?? '')));
log_line($log, 'FLOW selected one H/local inoculation page from bucket=' . $selectedHtmlBucket . '.');
/* Still seal 7+1 (media empty + inoc) — never leave inoculation path optional. */
return ensure_flow_inoculation_tail(
[is_array($rows[0]['item'] ?? null) ? $rows[0]['item'] : []],
$prompt,
$nsfw,
$htmlBuckets,
$registry,
$eligibleWeights,
$log
);
}
if (!$mediaBuckets) {
log_line($log, 'FLOW found no compressed media bucket — inoc-only seal.');
return ensure_flow_inoculation_tail([], $prompt, $nsfw, $htmlBuckets, $registry, $eligibleWeights, $log);
}
$selectedBucket = pick_bucket_id($mediaBuckets, $registry, $eligibleWeights);
/* Prompt: pool ALL match>0 items across folders first (loose relevance board). */
$promptPool = [];
if ($tokens) {
foreach ($mediaBuckets as $bid => $brows) {
foreach ($brows as $br) {
if ((float)(($br['item']['_match'] ?? 0)) > 0) $promptPool[] = $br;
}
}
usort($promptPool, fn($a, $b) => ((float)(($b['item']['_match'] ?? 0)) <=> (float)(($a['item']['_match'] ?? 0))) ?: ((float)($b['score'] ?? 0) <=> (float)($a['score'] ?? 0)));
if ($promptPool) {
log_line($log, 'FLOW prompt pool match>0 items=' . count($promptPool));
$bestB = '';
$bestM = -1.0;
foreach ($mediaBuckets as $bid => $brows) {
$ms = 0.0;
foreach ($brows as $br) $ms += max(0.0, (float)(($br['item']['_match'] ?? 0)));
if ($ms > $bestM) {
$bestM = $ms;
$bestB = (string)$bid;
}
}
if ($bestB !== '' && $bestM > 0) {
$selectedBucket = $bestB;
log_line($log, 'FLOW prompt primary bucket=' . $selectedBucket . ' match_sum=' . $bestM);
}
}
}
$folders = $mediaFolders[$selectedBucket] ?? [];
if (!$folders) $folders = ['bucket' => ($mediaBuckets[$selectedBucket] ?? array_values($mediaBuckets)[0])];
$folderScores = [];
foreach ($folders as $folderKey => $folderRows) {
$sum = 0.0;
$matchSum = 0.0;
$themeBoost = 0.0;
$localDeriv = 0;
foreach ($folderRows as $row) {
$sum += max(0.1, (float)($row['score'] ?? 0));
$m = max(0.0, (float)(($row['item']['_match'] ?? 0)));
$matchSum += $m;
/* Prompt theme: match dominates folder choice. */
$themeBoost += $m * ($tokens ? 6.0 : 2.0);
$iu = (string)(($row['item']['url'] ?? ''));
if (preg_match('/^index\.php\?media=/i', $iu)) $localDeriv++;
}
if ($promptBucket !== '' && stripos((string)$folderKey, txt_slug($promptBucket)) !== false) {
$themeBoost += 40.0;
$matchSum += 20.0;
}
/* Prefer folders with real local derivatives (density honesty). */
$themeBoost += min(12.0, $localDeriv * 1.8);
$folderScores[] = [
'id' => (string)$folderKey,
'weight' => $tokens
? golden_score($matchSum * 10.0 + 0.01, $sum, min(10.0, count($folderRows) * 1.2), 1.0 + $themeBoost, (float)$localDeriv)
: golden_score($sum, min(10.0, count($folderRows) * 1.5), 1.0 + $themeBoost, (float)$localDeriv, 0.0),
'count' => count($folderRows),
'match_sum' => $matchSum,
'local_derivatives' => $localDeriv,
];
}
usort($folderScores, function($a, $b) use ($tokens) {
if ($tokens) {
$cmp = ((float)($b['match_sum'] ?? 0) <=> (float)($a['match_sum'] ?? 0));
if ($cmp !== 0) return $cmp;
}
return ((float)$b['weight'] <=> (float)$a['weight']) ?: strcmp((string)$a['id'], (string)$b['id']);
});
foreach ($folderScores as $i => &$folderRow) $folderRow['weight'] = max(0.001, (float)$folderRow['weight']) * (1.0 + zipf_weight($i + 1));
unset($folderRow);
/* THEME-LOCK: only with a real prompt match. Empty prompt = no theme lock (global random). */
$selectedFolder = (string)($folderScores[0]['id'] ?? array_key_first($folders));
$themeLocked = 0;
$topCount = (int)($folderScores[0]['count'] ?? 0);
$topMatch = (float)($folderScores[0]['match_sum'] ?? 0);
if ($tokens && $topCount > 0 && $topMatch > 0) {
$themeLocked = 1;
log_line($log, 'FLOW theme-lock folder=' . $selectedFolder . ' primary_count=' . $topCount . ' match_sum=' . $topMatch . ' (prompt)');
} elseif ($tokens && $topMatch <= 0) {
$themeLocked = 0;
$folderPool = array_slice($folderScores, 0, min(8, count($folderScores)));
if (!$folderPool) $folderPool = $folderScores;
$folderChoice = weighted_choice($folderPool);
$selectedFolder = (string)($folderChoice['id'] ?? $selectedFolder);
log_line($log, 'FLOW weak-prompt folder entropy pick=' . $selectedFolder);
} else {
/* Empty prompt: Zipf-weighted folder pick with entropy (not densest every time). */
$folderPool = $folderScores;
if (random_int(1, 100) <= 50) $folderPool = array_slice($folderScores, 0, min(8, count($folderScores)));
$folderChoice = weighted_choice($folderPool);
$selectedFolder = (string)($folderChoice['id'] ?? $selectedFolder);
log_line($log, 'FLOW empty-prompt folder entropy pick=' . $selectedFolder);
}
$rows = $folders[$selectedFolder] ?? array_values($folders)[0];
/* Prompt: start from global match pool, then same-folder fill, then sparse backfill. */
if ($tokens && !empty($promptPool)) {
$rows = $promptPool;
log_line($log, 'FLOW prompt using cross-folder match pool n=' . count($rows));
} elseif ($tokens && $rows) {
usort($rows, function($a, $b) {
$ma = (float)(($a['item']['_match'] ?? 0));
$mb = (float)(($b['item']['_match'] ?? 0));
if ($mb !== $ma) return $mb <=> $ma;
return ((float)($b['score'] ?? 0) <=> (float)($a['score'] ?? 0));
});
log_line($log, 'FLOW prompt weak matches — using folder by score (loose)');
}
$stamp = function(array $row): int {
$item = $row['item'] ?? [];
foreach (['created_at','user_harvested_at','last_user_harvested_at','harvested_at','savedAt'] as $k) {
$t = strtotime((string)($item[$k] ?? ''));
if ($t > 0) return $t;
}
return 0;
};
$newest = $rows;
usort($newest, fn($a, $b) => ($stamp($b) <=> $stamp($a)) ?: ((float)($b['score'] ?? 0) <=> (float)($a['score'] ?? 0)));
$popular = $rows;
usort($popular, fn($a, $b) => ((float)($b['score'] ?? 0) <=> (float)($a['score'] ?? 0)) ?: ($stamp($b) <=> $stamp($a)));
$picked = [];
$seen = [];
$closestN = min($count, defined('FLOW_CLOSEST_COUNT') ? FLOW_CLOSEST_COUNT : 5);
$looseN = min($count, defined('FLOW_LOOSE_RANDOM_COUNT') ? FLOW_LOOSE_RANDOM_COUNT : 2);
$target = min($count, $closestN + $looseN);
$addRow = function(array $row, string $role = 'closest') use (&$picked, &$seen, $count): void {
if (count($picked) >= $count) return;
$item = $row['item'] ?? [];
$id = clean_item_id((string)($item['id'] ?? item_id($item)));
if ($id === '' || isset($seen[$id])) return;
$seen[$id] = true;
if (is_array($row['item'] ?? null)) $row['item']['_board_role'] = $role;
$picked[] = $row;
};
/*
* Board product law (finish-15): closest matches + loose-match random + vector = 8.
* Empty prompt → pure random under NSFW gate (no fake "closest").
* Prompt → rank by match/score for closest slots, then residual loose-match random.
*/
if (!$tokens) {
/*
* Empty prompt: pure random under NSFW gate across ALL eligible media,
* not the densest single folder (that caused same top meme every SOLVE).
*/
$pool = [];
$seenPool = [];
foreach ($backfillRows as $row) {
$it = $row['item'] ?? [];
$id = clean_item_id((string)($it['id'] ?? item_id($it)));
if ($id === '' || isset($seenPool[$id])) continue;
$seenPool[$id] = true;
$pool[] = $row;
}
if (!$pool) {
foreach ($mediaBuckets as $brows) {
foreach ($brows as $row) {
$it = $row['item'] ?? [];
$id = clean_item_id((string)($it['id'] ?? item_id($it)));
if ($id === '' || isset($seenPool[$id])) continue;
$seenPool[$id] = true;
$pool[] = $row;
}
}
}
if (!$pool) $pool = $rows;
shuffle($pool);
/* Optional light Zipf: first pick from full shuffle only — no score re-sort. */
foreach ($pool as $row) {
if (count($picked) >= $count) break;
$addRow($row, 'random');
}
/* If thin pool, one more pass already covered by later fill. */
log_line($log, 'FLOW empty-prompt global-random pool=' . count($pool) . ' board=' . count($picked) . ' under nsfw gate');
} else {
/* Closest: match desc, then score, then newest as soft tiebreak. */
$closestPool = $rows;
usort($closestPool, function($a, $b) use ($stamp) {
$ma = (float)(($a['item']['_match'] ?? 0));
$mb = (float)(($b['item']['_match'] ?? 0));
if ($mb !== $ma) return $mb <=> $ma;
$sa = (float)($a['score'] ?? 0);
$sb = (float)($b['score'] ?? 0);
if ($sb !== $sa) return $sb <=> $sa;
return $stamp($b) <=> $stamp($a);
});
$cand = array_slice($closestPool, 0, min(12, count($closestPool)));
for ($ci = 0; $ci < $closestN && $cand; $ci++) {
$wrows = [];
foreach ($cand as $ri => $crow) {
$wrows[] = ['row' => $crow, 'weight' => max(0.001, (float)(($crow['item']['_match'] ?? 1)) * zipf_weight($ri + 1) * max(0.2, (float)($crow['score'] ?? 1)))];
}
$pick = weighted_choice($wrows);
if (!$pick || !isset($pick['row'])) break;
$addRow($pick['row'], 'closest');
$pid = clean_item_id((string)(($pick['row']['item']['id'] ?? '')));
$cand = array_values(array_filter($cand, function ($crow) use ($pid) {
return clean_item_id((string)(($crow['item']['id'] ?? ''))) !== $pid;
}));
}
/* Loose random: residual rows that still loosely match (match>0) or weak residual. */
$residual = [];
foreach ($closestPool as $row) {
$item = $row['item'] ?? [];
$id = clean_item_id((string)($item['id'] ?? item_id($item)));
if ($id === '' || isset($seen[$id])) continue;
$residual[] = $row;
}
/* Prefer loose match>0; if thin, allow weak residual so board still fills. */
$loosePref = [];
$looseWeak = [];
foreach ($residual as $row) {
$m = (float)(($row['item']['_match'] ?? 0));
if ($m > 0) $loosePref[] = $row;
else $looseWeak[] = $row;
}
shuffle($loosePref);
shuffle($looseWeak);
$loosePool = array_merge($loosePref, $looseWeak);
$needLoose = min($looseN, max(0, $count - count($picked)));
foreach (array_slice($loosePool, 0, $needLoose) as $row) $addRow($row, 'loose_random');
/* Fill remainder from popular/newest residual if still sparse. */
foreach ($popular as $row) {
if (count($picked) >= $count) break;
$addRow($row, 'fill_popular');
}
foreach ($newest as $row) {
if (count($picked) >= $count) break;
$addRow($row, 'fill_newest');
}
log_line($log, 'FLOW closest=' . min($closestN, count($picked)) . ' + loose_random target=' . $looseN . ' board=' . count($picked));
}
foreach ($rows as $row) {
if (count($picked) >= $count) break;
$addRow($row, 'fill');
}
$beforeBackfill = count($picked);
/* Backfill ONLY when sparse (<7) — preserve theme identity when full. */
if (count($picked) < $count && $backfillRows) {
$global = $backfillRows;
if (!$tokens) { shuffle($global); $global = array_slice($global, 0, min(72, count($global))); }
else usort($global, fn($a, $b) => ((float)($b['score'] ?? 0) <=> (float)($a['score'] ?? 0)) ?: ($stamp($b) <=> $stamp($a)));
$global = array_slice($global, 0, min(42, count($global)));
/* Prefer same-bucket / higher match first, then shuffle residual for variance */
usort($global, function($a, $b) use ($selectedBucket, $selectedFolder) {
$ia = $a['item'] ?? [];
$ib = $b['item'] ?? [];
$sa = ((string)($ia['_selection_bucket'] ?? '') === $selectedBucket ? 2 : 0)
+ ((string)($ia['_flow_folder_key'] ?? '') === $selectedFolder ? 4 : 0)
+ max(0.0, (float)($ia['_match'] ?? 0));
$sb = ((string)($ib['_selection_bucket'] ?? '') === $selectedBucket ? 2 : 0)
+ ((string)($ib['_flow_folder_key'] ?? '') === $selectedFolder ? 4 : 0)
+ max(0.0, (float)($ib['_match'] ?? 0));
return $sb <=> $sa;
});
foreach ($global as $row) {
if (count($picked) >= $count) break;
$addRow($row);
}
if (count($picked) > $beforeBackfill) log_line($log, 'FLOW sparse backfill +' . (count($picked) - $beforeBackfill) . ' (theme primary kept).');
}
if (count($picked) < $count) {
$extraRows = [];
foreach (txt_catalog_items($branch, '', 480) as $extra) {
if (!is_array($extra)) continue;
$extra = normalize_item_taxonomy($extra);
if (!intensity_allowed($extra, $nsfw) || !flow_media_allowed($extra)) continue;
$id = clean_item_id((string)($extra['id'] ?? item_id($extra)));
if ($id === '' || isset($seen[$id])) continue;
$bucketId = item_bucket($extra);
$bucketMeta = $registry['buckets'][$bucketId] ?? ['status' => 'active'];
if (is_array($bucketMeta) && (string)($bucketMeta['status'] ?? 'active') !== 'active') continue;
$extra['_match'] = $tokens ? (float)match_score($extra, $tokens) : 1.0;
$extra = attach_runtime_state($extra, $votes, $comments);
if (days_left($extra, $votes) <= 0) continue;
$extra['_bucket'] = $bucketMeta;
$extra['_bucket_pressure'] = (float)($bucketMeta['pressure'] ?? 0);
$extra['_selection_bucket'] = $bucketId;
$folder = item_flow_folder($extra, $bucketId);
$extra['_flow_folder_key'] = (string)$folder['key'];
$extra['_flow_folder_title'] = (string)$folder['title'];
$requestWeight = (float)($eligibleWeights[$bucketId] ?? 0.35);
$score = golden_score(
item_selection_score($extra, $votes, $comments),
$requestWeight * 8.0,
min(12.0, (float)$extra['_bucket_pressure'] / 8),
max(0.0, (float)($extra['_match'] ?? 0.0)),
zipf_rank_bonus((int)($extra['rank_hint'] ?? 0), 2.0)
);
$extra['_selection_score'] = $score;
$extraRows[] = ['score' => $score, 'item' => $extra];
}
usort($extraRows, fn($a, $b) => ((float)($b['score'] ?? 0) <=> (float)($a['score'] ?? 0)) ?: ($stamp($b) <=> $stamp($a)));
$extraRows = array_slice($extraRows, 0, min(72, count($extraRows)));
$beforeShardBackfill = count($picked);
foreach ($extraRows as $row) {
if (count($picked) >= $count) break;
$addRow($row);
}
if (count($picked) > $beforeShardBackfill) log_line($log, 'FLOW emergency filled sparse board from branch shards: +' . (count($picked) - $beforeShardBackfill) . '.');
}
/* Prompt theme-lock keeps head order; empty-prompt already shuffled — re-shuffle lightly for variance. */
if ($themeLocked && $tokens && count($picked) >= $count) {
/* closest-first from match ranking — keep */
} elseif (!$tokens && count($picked) > 1) {
shuffle($picked);
} elseif (count($picked) > 1) {
$head = array_slice($picked, 0, min(3, count($picked)));
$tail = array_slice($picked, min(3, count($picked)));
shuffle($tail);
$picked = array_merge($head, $tail);
}
$items = [];
foreach ($picked as $row) {
$it = is_array($row['item'] ?? null) ? $row['item'] : [];
if (!$it) continue;
$it['_theme_lock'] = $themeLocked ? 1 : 0;
$it['_theme_folder'] = $selectedFolder;
$parts = item_rank_parts($it, $votes, $comments);
$it['_rank_parts'] = $parts;
$it['_selection_score'] = (float)($row['score'] ?? $parts['score'] ?? 0);
$items[] = $it;
}
/* MUST: 7 media path + inoculation always last (user product law) */
$items = ensure_flow_inoculation_tail($items, $prompt, $nsfw, $htmlBuckets, $registry, $eligibleWeights, $log);
$bucketTitle = is_array($registry['buckets'][$selectedBucket] ?? null) ? (string)($registry['buckets'][$selectedBucket]['title'] ?? $selectedBucket) : $selectedBucket;
$folderTitle = (string)(($items[0]['_flow_folder_title'] ?? '') ?: $selectedFolder);
log_line($log, 'FLOW theme_lock=' . $themeLocked . ' bucket=' . $selectedBucket . ' / ' . $bucketTitle . ' folder=' . $folderTitle . ' board items=' . count($items) . '.');
return $items;
}
function find_catalog_item_by_id(array $catalog, string $id): ?array {
foreach ($catalog as $item) {
if ((string)($item['id'] ?? item_id($item)) === $id) return $item;
}
return null;
}
function attach_runtime_state(array $item, array $votes, array $comments): array {
$item = normalize_item_taxonomy($item);
$id = (string)($item['id'] ?? item_id($item));
$item['id'] = $id;
$vote = vote_record($votes, $id);
$fromTxt = isset($item['_txt_path']);
$commentRecord = comment_record($comments, $id);
if (empty($commentRecord['entries']) && isset($item['_comments']['entries']) && is_array($item['_comments']['entries'])) {
$commentRecord = ['entries' => array_values(array_slice((array)$item['_comments']['entries'], -MAX_COMMENTS_PER_ITEM)), 'updated_at' => (string)($item['_comments']['updated_at'] ?? '')];
}
$activity = min(4, (int)floor(count($commentRecord['entries']) / 3));
$item['_upvotes'] = (int)($item['upvotes'] ?? 0) + ($fromTxt ? 0 : $vote['up']);
$item['_downvotes'] = (int)($item['downvotes'] ?? 0) + ($fromTxt ? 0 : $vote['down']);
$item['_days'] = days_left($item, $fromTxt ? [] : $votes);
$item['_comments'] = $commentRecord;
$item['_score'] = $item['_days'] + $item['_upvotes'] - $item['_downvotes'] + $activity;
return $item;
}
function json_response(array $data): void {
header('Content-Type: application/json; charset=utf-8');
echo json_encode($data, JSON_UNESCAPED_SLASHES);
}
/**
* N3 packet envelope — piggyback only (no session / no invent endpoint).
* Last request wins for this call. Fields: nsfw, side, debug, centered_id, broken_id.
*/
function request_packet_fields(?array $body = null): array {
$src = is_array($body) ? $body : [];
if ($body === null) {
$raw = (string)@file_get_contents('php://input');
if ($raw !== '' && stripos((string)($_SERVER['CONTENT_TYPE'] ?? ''), 'application/json') !== false) {
$decoded = json_decode($raw, true);
if (is_array($decoded)) $src = $decoded;
}
if (!$src) $src = array_merge($_GET, $_POST);
} else {
/* Caller already parsed body (vote form / comment JSON) — still allow GET overrides. */
$src = array_merge($_GET, $src);
}
$nsfw = (string)($src['nsfw'] ?? $_GET['nsfw'] ?? '0');
if (!in_array($nsfw, ['0', '1', '2'], true)) $nsfw = '0';
$side = strtoupper(preg_replace('/[^LRN]/', '', (string)($src['side'] ?? $_GET['side'] ?? '')));
if ($side !== '' && !in_array($side, ['L', 'R', 'N'], true)) $side = '';
$debug = in_array((string)($src['debug'] ?? $_GET['debug'] ?? '0'), ['1', 'true', 'yes'], true) ? 1 : 0;
$centered = clean_item_id((string)($src['centered_id'] ?? $src['itemId'] ?? $_GET['centered_id'] ?? ''));
$brokenId = clean_item_id((string)($src['broken_id'] ?? $_GET['broken_id'] ?? ''));
$brokenUrl = substr((string)($src['broken_url'] ?? $_GET['broken_url'] ?? ''), 0, 240);
return [
'nsfw' => $nsfw,
'side' => $side,
'debug' => $debug,
'centered_id' => $centered,
'broken_id' => $brokenId,
'broken_url' => $brokenUrl,
];
}
/** Optional broken_id metric + ack (piggyback on any hot call). */
function packet_record_broken(array $packet): ?array {
$brokenId = (string)($packet['broken_id'] ?? '');
if ($brokenId === '') return null;
$brokenUrl = (string)($packet['broken_url'] ?? '');
node_metric_record('broken_media', [
'ok' => 0,
'item' => $brokenId,
'url_host' => (string)(parse_url($brokenUrl, PHP_URL_HOST) ?: ''),
'media' => $brokenUrl !== '' ? substr(basename(parse_url($brokenUrl, PHP_URL_PATH) ?: $brokenUrl), 0, 80) : '',
]);
return ['item' => $brokenId, 'recorded' => 1];
}
/** Echo packet on responses — request-scoped only. */
function packet_echo(array $packet, array $extra = []): array {
$broken = array_key_exists('broken_media', $extra)
? $extra['broken_media']
: packet_record_broken($packet);
$boardVersion = (int)($extra['board_version'] ?? $extra['state_version'] ?? 0);
$out = [
'packet' => [
'schema' => 'nosignup.fun.packet.v1',
'applied_nsfw' => (string)($packet['nsfw'] ?? '0'),
'applied_side' => (string)($packet['side'] ?? ''),
'debug' => (int)($packet['debug'] ?? 0),
'centered_id' => (string)($packet['centered_id'] ?? ''),
'broken_id' => (string)($packet['broken_id'] ?? ''),
'board_version' => $boardVersion,
'app_version' => APP_VERSION,
'basis' => 'last packet wins for this request only; no visitor session state',
],
'applied_nsfw' => (string)($packet['nsfw'] ?? '0'),
'applied_side' => (string)($packet['side'] ?? ''),
'broken_media' => $broken,
];
foreach ($extra as $k => $v) {
if ($k === 'broken_media') continue;
$out[$k] = $v;
}
return $out;
}
function handle_vote(string $catalogFile): void {
$packet = request_packet_fields($_POST);
$id = clean_item_id((string)($_POST['itemId'] ?? $packet['centered_id'] ?? ''));
$vote = (string)($_POST['vote'] ?? '');
$side = strtoupper(preg_replace('/[^LRN]/', '', (string)($_POST['side'] ?? $packet['side'] ?? '')) ?: '');
if ($packet['side'] === '' && $side !== '') $packet['side'] = $side;
if ($packet['centered_id'] === '' && $id !== '') $packet['centered_id'] = $id;
/* Recover side from item when client/metadata gap would otherwise reject a real vote */
if ($id !== '' && !in_array($side, ['L', 'R', 'N'], true)) {
$sideItem = txt_catalog_item_by_id($id);
if (is_array($sideItem)) $side = item_side($sideItem);
$packet['side'] = $side;
}
if ($id === '' || !in_array($vote, ['upvote','downvote'], true) || !in_array($side, ['L','R','N'], true)) {
node_metric_record('vote', ['ok' => 0, 'reason' => 'invalid', 'item' => $id, 'vote' => $vote, 'side' => $side, 'nsfw' => $packet['nsfw']]);
json_response(packet_echo($packet, ['success' => 0, 'message' => 'Invalid vote', 'vote' => $vote, 'side' => $side, 'itemId' => $id]));
return;
}
$txtRecord = txt_vote_item($id, $vote);
if ($txtRecord !== null) {
$message = !empty($txtRecord['dead']) ? 'Pruned by downvotes' : 'Vote recorded by atomic rename';
if ($vote === 'upvote' && (int)($txtRecord['graduations'] ?? 0) > 0) $message = 'Graduated into folder by atomic rename';
node_metric_record('vote', ['ok' => 1, 'item' => $id, 'vote' => $vote, 'side' => $side, 'nsfw' => $packet['nsfw'], 'up' => (int)($txtRecord['up'] ?? 0), 'down' => (int)($txtRecord['down'] ?? 0), 'dead' => !empty($txtRecord['dead']) ? 1 : 0, 'graduations' => (int)($txtRecord['graduations'] ?? 0)]);
json_response(packet_echo($packet, ['success' => 1, 'message' => $message, 'vote' => $vote, 'side' => $side, 'itemId' => $id, 'record' => $txtRecord, 'evolution' => ['type' => !empty($txtRecord['dead']) ? 'deleted' : 'txt-rename']]));
return;
}
if (txt_ensure_item_shard($id, $catalogFile, (string)($GLOBALS['VECTOR_PAGES_FILE'] ?? ''))) {
$txtRecord = txt_vote_item($id, $vote);
if ($txtRecord !== null) {
$message = !empty($txtRecord['dead']) ? 'Pruned by downvotes' : 'Vote recorded by atomic rename';
if ($vote === 'upvote' && (int)($txtRecord['graduations'] ?? 0) > 0) $message = 'Graduated into folder by atomic rename';
node_metric_record('vote', ['ok' => 1, 'item' => $id, 'vote' => $vote, 'side' => $side, 'nsfw' => $packet['nsfw'], 'up' => (int)($txtRecord['up'] ?? 0), 'down' => (int)($txtRecord['down'] ?? 0), 'dead' => !empty($txtRecord['dead']) ? 1 : 0, 'graduations' => (int)($txtRecord['graduations'] ?? 0)]);
json_response(packet_echo($packet, ['success' => 1, 'message' => $message, 'vote' => $vote, 'side' => $side, 'itemId' => $id, 'record' => $txtRecord, 'evolution' => ['type' => !empty($txtRecord['dead']) ? 'deleted' : 'txt-rename']]));
return;
}
}
node_metric_record('vote', ['ok' => 0, 'reason' => 'shard_unavailable', 'item' => $id, 'vote' => $vote, 'side' => $side, 'nsfw' => $packet['nsfw']]);
json_response(packet_echo($packet, ['success' => 0, 'message' => 'Vote shard unavailable', 'vote' => $vote, 'side' => $side, 'itemId' => $id, 'record' => vote_record(load_votes(), $id), 'evolution' => null]));
}
function svg_card(array $item): string {
$p = $item['palette'] ?? ['#42d392','#5ac8fa','#080808','#ffffff'];
$a = preg_replace('/[^#a-fA-F0-9]/', '', (string)($p[0] ?? '#42d392'));
$b = preg_replace('/[^#a-fA-F0-9]/', '', (string)($p[1] ?? '#5ac8fa'));
$dark = preg_replace('/[^#a-fA-F0-9]/', '', (string)($p[2] ?? '#080808'));
$light = preg_replace('/[^#a-fA-F0-9]/', '', (string)($p[3] ?? '#ffffff'));
$seed = hexdec(substr((string)($item['id'] ?? 'abcdef'), 0, 6));
$rings = '';
for ($i = 0; $i < 18; $i++) {
$r = 48 + (($seed + $i * 37) % 270);
$dash = 8 + (($seed >> ($i % 12)) % 32);
$color = $i % 2 ? $a : $b;
$op = 0.16 + (($i % 5) * 0.08);
$rings .= ' ';
}
$title = h((string)($item['title'] ?? 'NOSIGNUP.FUN'));
$vector = h((string)($item['vector'] ?? 'local reference'));
$practice = h((string)($item['practice'] ?? 'Pause, compare, choose.'));
$source = h((string)($item['source'] ?? 'local corpus'));
$id = h((string)($item['id'] ?? 'local'));
return '' .
' ' .
' ' .
'' . $rings . ' ' .
' ' .
'LOCAL REFERENCE #' . $id . ' ' .
'' . $title . ' ' .
'' . h(substr($vector, 0, 70)) . ' ' .
'' . h(substr($practice, 0, 76)) . ' ' .
'' . $source . ' ' .
' ';
}
function render_frame_home(array $log): void {
$co = json_encode($log, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP);
?>
NSFW OFF DEBUG [OFF] DONATE HELP NETWORK
'No Content', 'side' => $side, 'type' => 'error', 'prompt' => $prompt, 'nsfw' => $nsfw], JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP);
?>
' .
'PLAY ' .
'';
}
if ($hasMedia && $mediaType === 'image') {
$loading = $flow ? ' loading="lazy" decoding="async"' : ' decoding="async"';
return ' ';
}
return svg_card($item);
}
function item_details_payload(array $item, string $side, string $prompt, string $nsfw, string $mediaType, string $displayUrl): array {
$refs = array_values(array_filter(array_unique(array_merge(
(array)($item['source_refs'] ?? []),
[(string)($item['source_url'] ?? ''), (string)($item['postLink'] ?? ''), (string)($item['original_url'] ?? ''), $displayUrl]
))));
$requestSide = in_array(strtoupper($side), ['L', 'R', 'N'], true) ? strtoupper($side) : 'L';
$itemSide = item_side($item);
if (!in_array($itemSide, ['L', 'R', 'N'], true)) $itemSide = $requestSide;
return [
'title' => $item['title'] ?? 'Untitled',
'side' => $itemSide,
'requestSide' => $requestSide,
'type' => $mediaType,
'slot_role' => (string)($item['_slot_role'] ?? 'media'),
'board_role' => (string)($item['_board_role'] ?? $item['_slot_role'] ?? 'media'),
'slot_index' => (int)($item['_slot_index'] ?? 0),
'query_match' => (float)($item['_match'] ?? 0),
'selection_score' => round((float)($item['_selection_score'] ?? 0), 4),
'rank_parts' => is_array($item['_rank_parts'] ?? null) ? $item['_rank_parts'] : null,
'intensity' => $item['intensity'] ?? 'safe',
'url' => $displayUrl,
'original_url' => (string)($item['original_url'] ?? ''),
'render_url' => (string)($item['render_url'] ?? $displayUrl),
'folder' => $item['lane'] ?? $side,
'prompt' => $prompt,
'trigrams' => implode(',', token_list($prompt)),
'nsfw' => $nsfw,
'tags' => $item['tags'] ?? [],
'savedAt' => now_iso(),
'itemId' => $item['id'] ?? '',
'source' => $item['source'] ?? 'local corpus',
'source_url' => $item['source_url'] ?? '',
'bucket' => $item['_selection_bucket'] ?? item_bucket($item),
'bucket_title' => is_array($item['_bucket'] ?? null) ? (string)($item['_bucket']['title'] ?? item_bucket($item)) : item_bucket($item),
'bucket_pressure' => $item['_bucket_pressure'] ?? (is_array($item['_bucket'] ?? null) ? (float)($item['_bucket']['pressure'] ?? 0) : 0),
'flow_folder' => (string)($item['_flow_folder_title'] ?? item_flow_folder($item, (string)($item['_selection_bucket'] ?? item_bucket($item)))['title']),
'flow_folder_key' => (string)($item['_flow_folder_key'] ?? item_flow_folder($item, (string)($item['_selection_bucket'] ?? item_bucket($item)))['key']),
'theme_lock' => (int)($item['_theme_lock'] ?? 0),
'theme_folder' => (string)($item['_theme_folder'] ?? ''),
'medium' => $item['medium'] ?? item_medium($item),
'postLink' => $item['postLink'] ?? '',
'source_refs' => $refs,
'source_trace' => $item['source_trace'] ?? [],
'compression' => $item['compression'] ?? [],
'subreddit' => $item['subreddit'] ?? '',
'author' => $item['author'] ?? '',
'creator' => $item['creator'] ?? '',
'identifier' => $item['identifier'] ?? '',
'archive_file' => $item['archive_file'] ?? '',
'downloads' => $item['downloads'] ?? 0,
'ups' => $item['ups'] ?? 0,
'rank_hint' => $item['rank_hint'] ?? 0,
'created_at' => $item['created_at'] ?? '',
'harvested_at' => $item['harvested_at'] ?? '',
'user_harvested_at' => $item['user_harvested_at'] ?? '',
'last_user_harvested_at' => $item['last_user_harvested_at'] ?? '',
'vector' => $item['vector'] ?? '',
'summary' => $item['summary'] ?? '',
'practice' => $item['practice'] ?? '',
'score' => $item['_score'] ?? 0,
'remainingDays' => $item['_days'] ?? TTL_DAYS,
'lifespan' => $item['lifespan'] ?? TTL_DAYS,
'upvotes' => $item['_upvotes'] ?? 0,
'downvotes' => $item['_downvotes'] ?? 0,
'comments' => $item['_comments']['entries'] ?? [],
'comment_count' => count($item['_comments']['entries'] ?? []),
];
}
function render_content_frame(array $item, string $side, string $prompt, string $nsfw, array $log): void {
$displayUrl = '';
$mediaType = '';
$mediaHtml = item_media_html($item, $mediaType, $displayUrl, false);
$det = item_details_payload($item, $side, $prompt, $nsfw, $mediaType, $displayUrl);
$co = json_encode($log, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP);
$detj = json_encode($det, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP);
?>= h($det['title']) ?>
= $mediaHtml ?>
$item) {
$mediaType = '';
$displayUrl = '';
if ((string)($item['_slot_role'] ?? '') === 'inoculation_text') {
$mediaType = 'text';
$displayUrl = '';
} else {
item_media_html($item, $mediaType, $displayUrl, true);
}
$det = item_details_payload($item, $side, $prompt, $nsfw, $mediaType, $displayUrl);
$det['flow_index'] = $idx + 1;
$det['flow_count'] = count($items);
$details[] = $det;
}
$co = json_encode(array_values(array_map('strval', $log)), JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_INVALID_UTF8_SUBSTITUTE);
if ($co === false) $co = '[]';
$detj = json_encode($details, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_INVALID_UTF8_SUBSTITUTE);
if ($detj === false) $detj = '[]';
?>NOSIGNUP.FUN Folder
'prompt',
'side' => $requestSide,
'nsfw' => $nsfw,
'lane' => $nsfw === '2' ? 'NM' : ($requestSide . 'M'),
'q' => $prompt,
'source' => 'solve-dream-prompt',
'hits' => '7',
]);
log_line($log, !empty($queue['success']) ? 'Crawl queue: prompt intent + harvest-7 queued (lazy after serve).' : ('Crawl queue: ' . (string)($queue['message'] ?? 'prompt not queued')));
}
node_metric_record('pull', [
'ok' => 1,
'flow' => 1,
'side' => $requestSide,
'nsfw' => $nsfw,
'branch' => txt_branch_for_nsfw($nsfw),
'prompt' => $prompt !== '' ? substr(hash('sha256', $prompt), 0, 12) : '',
'items' => count($items),
]);
render_flow_frame($items, $requestSide, $prompt, $nsfw, $log);
} else {
$catalog = load_catalog($CATALOG_FILE, $VECTOR_PAGES_FILE);
$votes = load_votes();
$comments = load_comments();
$item = select_item($requestSide, $prompt, $nsfw, $catalog, $votes, $comments, $log, $BUCKET_REGISTRY_FILE);
node_metric_record('pull', [
'ok' => $item ? 1 : 0,
'flow' => 0,
'side' => $requestSide,
'nsfw' => $nsfw,
'branch' => txt_branch_for_nsfw($nsfw),
'prompt' => $prompt !== '' ? substr(hash('sha256', $prompt), 0, 12) : '',
'item' => is_array($item) ? (string)($item['id'] ?? '') : '',
]);
if (!$item) render_no_content($side, $prompt, $nsfw, $log);
else render_content_frame($item, $requestSide, $prompt, $nsfw, $log);
}
exit;
}
if (($_GET['frame'] ?? '') === 'home') {
$log = [];
log_line($log, 'NOSIGNUP.FUN home frame.');
log_line($log, 'One index.php; hourly harvester is explicit.');
render_frame_home($log);
exit;
}
?>
= APP_NAME ?>
Options
Mirrors
Donate
Media · Memes · 18+
Nosignup.Fun
18+ only Adults only. Under 18: leave now.
Unmoderated Experimental · no warranty · no recovery desk
Mirror · not host Public signals only · local copies fade ≤32 days
Play SOLVE / DREAM · vote · comment · harvest URLs
You are liable ENTER = risk ack · not an account · no signup
No warranty, moderation, recovery, or recourse. 18+ · experimental · unmoderated · enter at your own risk.
I AGREE ENTER
I am a minor — leave
x Mirrors Free tributaries. Host a copy · help the network · zero cut · no price power. Tributaries earn from the faucet a market-dictated price per day .
↓ Download full index.php · alternate (?src=1)
Upload that single file to any PHP host → instant mirror. Variance grows as each mirror harvests independently.
Close
Donate · Mirror
One PHP file. Drop it on any PHP host. No build step, account system, external scripts, or package dependencies.
Make a mirror: download the full index.php, upload to any PHP host, open it.
↓ Download full index.php
↓ Alternate download (?src=1)
Cashflow honesty: There is no local NSU wallet on nosignup.fun. NSU buy/sell lives on nosignup.trade .
Open nosignup.trade · NSU
Harvest This bookmarklet
BITCOIN bc1qqnu6n0jztxl4f6krv7klradghle09uhyu7uymz
MONERO 8Ab24DppUvcdtHfm7K8gTqdBTmPCBiak1GwxgPm1C3osYVQL2QdC1C8GMwggKF77RKKzDgP2R8E3VH8ifetsKms5AqkVyVg
LITECOIN ltc1qlpdy8qzejcmjdn6vwarpyz8djdlk780w4qkwyp
Close
Help the Network
Public URL or IP only — free-text topics belong in the top Prompt box (SOLVE/DREAM crawl that). Mirrors and helpers must be reachable http(s) addresses.
Want memes about a topic? Type it in Prompt then SOLVE / DREAM — that queues crawl intent.
Close
Tap SOLVE or DREAM · NSFW cycles OFF→ON→ONLY (filter only · 18+ already agreed)
-1
+1