closevector-hnswlib-wasm
Version:
typescript and wasm bindings for Hnswlib
533 lines (455 loc) • 916 kB
JavaScript
var hnswlib = (() => {
var _scriptDir = import.meta.url;
return (
function(moduleArg = {}) {
// include: shell.js
// The Module object: Our interface to the outside world. We import
// and export values on it. There are various ways Module can be used:
// 1. Not defined. We create it here
// 2. A function parameter, function(Module) { ..generated code.. }
// 3. pre-run appended it, var Module = {}; ..generated code..
// 4. External script tag defines var Module.
// We need to check if Module already exists (e.g. case 3 above).
// Substitution will be replaced with actual code on later stage of the build,
// this way Closure Compiler will not mangle it (e.g. case 4. above).
// Note that if you want to run closure, and also to use Module
// after the generated code, you will need to define var Module = {};
// before the code. Then that object will be used in the code, and you
// can continue to use Module afterwards as well.
var Module = moduleArg;
// Set up the promise that indicates the Module is initialized
var readyPromiseResolve, readyPromiseReject;
Module['ready'] = new Promise((resolve, reject) => {
readyPromiseResolve = resolve;
readyPromiseReject = reject;
});
["_main","getExceptionMessage","___get_exception_message","_free","___cpp_exception","___cxa_increment_exception_refcount","___cxa_decrement_exception_refcount","___thrown_object_from_unwind_exception","_memory","_syncIdb_js","___indirect_function_table","__embind_initialize_bindings","_fflush","___start_em_js","___stop_em_js","___start_em_asm","___stop_em_asm","onRuntimeInitialized"].forEach((prop) => {
if (!Object.getOwnPropertyDescriptor(Module['ready'], prop)) {
Object.defineProperty(Module['ready'], prop, {
get: () => abort('You are getting ' + prop + ' on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js'),
set: () => abort('You are setting ' + prop + ' on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js'),
});
}
});
// --pre-jses are emitted after the Module integration code, so that they can
// refer to Module (if they choose; they can also define Module)
// Sometimes an existing Module object exists with properties
// meant to overwrite the default module functionality. Here
// we collect those properties and reapply _after_ we configure
// the current environment's defaults to avoid having to be so
// defensive during initialization.
var moduleOverrides = Object.assign({}, Module);
var thisProgram = './this.program';
var ENVIRONMENT_IS_WORKER = false;
var ENVIRONMENT_IS_NODE = false;
var ENVIRONMENT_IS_SHELL = false;
if (Module['ENVIRONMENT']) {
throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)');
}
// `/` should be present at the end if `scriptDirectory` is not empty
var scriptDirectory = '';
function locateFile(path) {
if (Module['locateFile']) {
return Module['locateFile'](path, scriptDirectory);
}
return scriptDirectory + path;
}
// Hooks that are implemented differently in different runtime environments.
var read_,
readAsync;
{
if (typeof document != 'undefined' && document.currentScript) { // web
scriptDirectory = document.currentScript.src;
}
// When MODULARIZE, this JS may be executed later, after document.currentScript
// is gone, so we saved it, and we use it here instead of any other info.
if (_scriptDir) {
scriptDirectory = _scriptDir;
}
// blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them.
// otherwise, slice off the final part of the url to find the script directory.
// if scriptDirectory does not contain a slash, lastIndexOf will return -1,
// and scriptDirectory will correctly be replaced with an empty string.
// If scriptDirectory contains a query (starting with ?) or a fragment (starting with #),
// they are removed because they could contain a slash.
if (scriptDirectory.indexOf('blob:') !== 0) {
scriptDirectory = scriptDirectory.substr(0, scriptDirectory.replace(/[?#].*/, "").lastIndexOf('/')+1);
} else {
scriptDirectory = '';
}
if (!(typeof window == 'object' || typeof importScripts == 'function')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)');
// Differentiate the Web Worker from the Node Worker case, as reading must
// be done differently.
{
// include: web_or_worker_shell_read.js
read_ = (url) => {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, false);
xhr.send(null);
return xhr.responseText;
};
readAsync = (url, onload, onerror) => {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'arraybuffer';
xhr.onload = () => {
if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0
onload(xhr.response);
return;
}
onerror();
};
xhr.onerror = onerror;
xhr.send(null);
};
// end include: web_or_worker_shell_read.js
}
}
var out = Module['print'] || console.log.bind(console);
var err = Module['printErr'] || console.error.bind(console);
// Merge back in the overrides
Object.assign(Module, moduleOverrides);
// Free the object hierarchy contained in the overrides, this lets the GC
// reclaim data used e.g. in memoryInitializerRequest, which is a large typed array.
moduleOverrides = null;
checkIncomingModuleAPI();
// Emit code to handle expected values on the Module object. This applies Module.x
// to the proper local x. This has two benefits: first, we only emit it if it is
// expected to arrive, and second, by using a local everywhere else that can be
// minified.
if (Module['arguments']) Module['arguments'];legacyModuleProp('arguments', 'arguments_');
if (Module['thisProgram']) thisProgram = Module['thisProgram'];legacyModuleProp('thisProgram', 'thisProgram');
if (Module['quit']) Module['quit'];legacyModuleProp('quit', 'quit_');
// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message
// Assertions on removed incoming Module JS APIs.
assert(typeof Module['memoryInitializerPrefixURL'] == 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead');
assert(typeof Module['pthreadMainPrefixURL'] == 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead');
assert(typeof Module['cdInitializerPrefixURL'] == 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead');
assert(typeof Module['filePackagePrefixURL'] == 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead');
assert(typeof Module['read'] == 'undefined', 'Module.read option was removed (modify read_ in JS)');
assert(typeof Module['readAsync'] == 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)');
assert(typeof Module['readBinary'] == 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)');
assert(typeof Module['setWindowTitle'] == 'undefined', 'Module.setWindowTitle option was removed (modify setWindowTitle in JS)');
assert(typeof Module['TOTAL_MEMORY'] == 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY');
legacyModuleProp('asm', 'wasmExports');
legacyModuleProp('read', 'read_');
legacyModuleProp('readAsync', 'readAsync');
legacyModuleProp('readBinary', 'readBinary');
legacyModuleProp('setWindowTitle', 'setWindowTitle');
assert(!ENVIRONMENT_IS_WORKER, "worker environment detected but not enabled at build time. Add 'worker' to `-sENVIRONMENT` to enable.");
assert(!ENVIRONMENT_IS_NODE, "node environment detected but not enabled at build time. Add 'node' to `-sENVIRONMENT` to enable.");
assert(!ENVIRONMENT_IS_SHELL, "shell environment detected but not enabled at build time. Add 'shell' to `-sENVIRONMENT` to enable.");
// end include: shell.js
// include: preamble.js
// === Preamble library stuff ===
// Documentation for the public APIs defined in this file must be updated in:
// site/source/docs/api_reference/preamble.js.rst
// A prebuilt local version of the documentation is available at:
// site/build/text/docs/api_reference/preamble.js.txt
// You can also build docs locally as HTML or other formats in site/
// An online HTML version (which may be of a different version of Emscripten)
// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html
var wasmBinary;
if (Module['wasmBinary']) wasmBinary = Module['wasmBinary'];legacyModuleProp('wasmBinary', 'wasmBinary');
Module['noExitRuntime'] || true;legacyModuleProp('noExitRuntime', 'noExitRuntime');
if (typeof WebAssembly != 'object') {
abort('no native wasm support detected');
}
// Wasm globals
var wasmMemory;
var wasmExports;
//========================================
// Runtime essentials
//========================================
// whether we are quitting the application. no code should run after this.
// set in exit() and abort()
var ABORT = false;
/** @type {function(*, string=)} */
function assert(condition, text) {
if (!condition) {
abort('Assertion failed' + (text ? ': ' + text : ''));
}
}
// We used to include malloc/free by default in the past. Show a helpful error in
// builds with assertions.
// Memory management
var /** @type {!Int8Array} */
HEAP8,
/** @type {!Uint8Array} */
HEAPU8,
/** @type {!Int16Array} */
HEAP16,
/** @type {!Uint16Array} */
HEAPU16,
/** @type {!Int32Array} */
HEAP32,
/** @type {!Uint32Array} */
HEAPU32,
/** @type {!Float32Array} */
HEAPF32,
/** @type {!Float64Array} */
HEAPF64;
function updateMemoryViews() {
var b = wasmMemory.buffer;
Module['HEAP8'] = HEAP8 = new Int8Array(b);
Module['HEAP16'] = HEAP16 = new Int16Array(b);
Module['HEAP32'] = HEAP32 = new Int32Array(b);
Module['HEAPU8'] = HEAPU8 = new Uint8Array(b);
Module['HEAPU16'] = HEAPU16 = new Uint16Array(b);
Module['HEAPU32'] = HEAPU32 = new Uint32Array(b);
Module['HEAPF32'] = HEAPF32 = new Float32Array(b);
Module['HEAPF64'] = HEAPF64 = new Float64Array(b);
}
assert(!Module['STACK_SIZE'], 'STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time');
assert(typeof Int32Array != 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray != undefined && Int32Array.prototype.set != undefined,
'JS engine does not provide full typed array support');
// If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY
assert(!Module['wasmMemory'], 'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally');
assert(!Module['INITIAL_MEMORY'], 'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically');
// include: runtime_init_table.js
// In regular non-RELOCATABLE mode the table is exported
// from the wasm module and this will be assigned once
// the exports are available.
var wasmTable;
// end include: runtime_init_table.js
// include: runtime_stack_check.js
// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode.
function writeStackCookie() {
var max = _emscripten_stack_get_end();
assert((max & 3) == 0);
// If the stack ends at address zero we write our cookies 4 bytes into the
// stack. This prevents interference with SAFE_HEAP and ASAN which also
// monitor writes to address zero.
if (max == 0) {
max += 4;
}
// The stack grow downwards towards _emscripten_stack_get_end.
// We write cookies to the final two words in the stack and detect if they are
// ever overwritten.
HEAPU32[((max)>>2)] = 0x02135467;
HEAPU32[(((max)+(4))>>2)] = 0x89BACDFE;
// Also test the global address 0 for integrity.
HEAPU32[((0)>>2)] = 1668509029;
}
function checkStackCookie() {
if (ABORT) return;
var max = _emscripten_stack_get_end();
// See writeStackCookie().
if (max == 0) {
max += 4;
}
var cookie1 = HEAPU32[((max)>>2)];
var cookie2 = HEAPU32[(((max)+(4))>>2)];
if (cookie1 != 0x02135467 || cookie2 != 0x89BACDFE) {
abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`);
}
// Also test the global address 0 for integrity.
if (HEAPU32[((0)>>2)] != 0x63736d65 /* 'emsc' */) {
abort('Runtime error: The application has corrupted its heap memory area (address zero)!');
}
}
// end include: runtime_stack_check.js
// include: runtime_assertions.js
// Endianness check
(function() {
var h16 = new Int16Array(1);
var h8 = new Int8Array(h16.buffer);
h16[0] = 0x6373;
if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)';
})();
// end include: runtime_assertions.js
var __ATPRERUN__ = []; // functions called before the runtime is initialized
var __ATINIT__ = []; // functions called during startup
var __ATPOSTRUN__ = []; // functions called after the main() is called
var runtimeInitialized = false;
function preRun() {
if (Module['preRun']) {
if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];
while (Module['preRun'].length) {
addOnPreRun(Module['preRun'].shift());
}
}
callRuntimeCallbacks(__ATPRERUN__);
}
function initRuntime() {
assert(!runtimeInitialized);
runtimeInitialized = true;
checkStackCookie();
if (!Module["noFSInit"] && !FS.init.initialized)
FS.init();
FS.ignorePermissions = false;
callRuntimeCallbacks(__ATINIT__);
}
function postRun() {
checkStackCookie();
if (Module['postRun']) {
if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];
while (Module['postRun'].length) {
addOnPostRun(Module['postRun'].shift());
}
}
callRuntimeCallbacks(__ATPOSTRUN__);
}
function addOnPreRun(cb) {
__ATPRERUN__.unshift(cb);
}
function addOnInit(cb) {
__ATINIT__.unshift(cb);
}
function addOnPostRun(cb) {
__ATPOSTRUN__.unshift(cb);
}
// include: runtime_math.js
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc
assert(Math.imul, 'This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');
assert(Math.fround, 'This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');
assert(Math.clz32, 'This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');
assert(Math.trunc, 'This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');
// end include: runtime_math.js
// A counter of dependencies for calling run(). If we need to
// do asynchronous work before running, increment this and
// decrement it. Incrementing must happen in a place like
// Module.preRun (used by emcc to add file preloading).
// Note that you can add dependencies in preRun, even though
// it happens right before run - run will be postponed until
// the dependencies are met.
var runDependencies = 0;
var runDependencyWatcher = null;
var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled
var runDependencyTracking = {};
function getUniqueRunDependency(id) {
var orig = id;
while (1) {
if (!runDependencyTracking[id]) return id;
id = orig + Math.random();
}
}
function addRunDependency(id) {
runDependencies++;
if (Module['monitorRunDependencies']) {
Module['monitorRunDependencies'](runDependencies);
}
if (id) {
assert(!runDependencyTracking[id]);
runDependencyTracking[id] = 1;
if (runDependencyWatcher === null && typeof setInterval != 'undefined') {
// Check for missing dependencies every few seconds
runDependencyWatcher = setInterval(() => {
if (ABORT) {
clearInterval(runDependencyWatcher);
runDependencyWatcher = null;
return;
}
var shown = false;
for (var dep in runDependencyTracking) {
if (!shown) {
shown = true;
err('still waiting on run dependencies:');
}
err('dependency: ' + dep);
}
if (shown) {
err('(end of list)');
}
}, 10000);
}
} else {
err('warning: run dependency added without ID');
}
}
function removeRunDependency(id) {
runDependencies--;
if (Module['monitorRunDependencies']) {
Module['monitorRunDependencies'](runDependencies);
}
if (id) {
assert(runDependencyTracking[id]);
delete runDependencyTracking[id];
} else {
err('warning: run dependency removed without ID');
}
if (runDependencies == 0) {
if (runDependencyWatcher !== null) {
clearInterval(runDependencyWatcher);
runDependencyWatcher = null;
}
if (dependenciesFulfilled) {
var callback = dependenciesFulfilled;
dependenciesFulfilled = null;
callback(); // can add another dependenciesFulfilled
}
}
}
/** @param {string|number=} what */
function abort(what) {
if (Module['onAbort']) {
Module['onAbort'](what);
}
what = 'Aborted(' + what + ')';
// TODO(sbc): Should we remove printing and leave it up to whoever
// catches the exception?
err(what);
ABORT = true;
// Use a wasm runtime error, because a JS error might be seen as a foreign
// exception, which means we'd run destructors on it. We need the error to
// simply make the program stop.
// FIXME This approach does not work in Wasm EH because it currently does not assume
// all RuntimeErrors are from traps; it decides whether a RuntimeError is from
// a trap or not based on a hidden field within the object. So at the moment
// we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that
// allows this in the wasm spec.
// Suppress closure compiler warning here. Closure compiler's builtin extern
// defintion for WebAssembly.RuntimeError claims it takes no arguments even
// though it can.
// TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed.
// See above, in the meantime, we resort to wasm code for trapping.
//
// In case abort() is called before the module is initialized, wasmExports
// and its exported '__trap' function is not available, in which case we throw
// a RuntimeError.
//
// We trap instead of throwing RuntimeError to prevent infinite-looping in
// Wasm EH code (because RuntimeError is considered as a foreign exception and
// caught by 'catch_all'), but in case throwing RuntimeError is fine because
// the module has not even been instantiated, even less running.
if (runtimeInitialized) {
___trap();
}
/** @suppress {checkTypes} */
var e = new WebAssembly.RuntimeError(what);
readyPromiseReject(e);
// Throw the error whether or not MODULARIZE is set because abort is used
// in code paths apart from instantiation where an exception is expected
// to be thrown when abort is called.
throw e;
}
// include: memoryprofiler.js
// end include: memoryprofiler.js
// include: URIUtils.js
// Prefix of data URIs emitted by SINGLE_FILE and related options.
var dataURIPrefix = 'data:application/octet-stream;base64,';
// Indicates whether filename is a base64 data URI.
function isDataURI(filename) {
// Prefix of data URIs emitted by SINGLE_FILE and related options.
return filename.startsWith(dataURIPrefix);
}
// Indicates whether filename is delivered via file protocol (as opposed to http/https)
function isFileURI(filename) {
return filename.startsWith('file://');
}
// end include: URIUtils.js
function createExportWrapper(name) {
return function() {
assert(runtimeInitialized, `native function \`${name}\` called before runtime initialization`);
var f = wasmExports[name];
assert(f, `exported native function \`${name}\` not found`);
return f.apply(null, arguments);
};
}
// include: runtime_exceptions.js
// end include: runtime_exceptions.js
var wasmBinaryFile;
wasmBinaryFile = 'data:application/octet-stream;base64,AGFzbQEAAAAB/QM+YAJ/fwBgAX8Bf2ABfwBgAn9/AX9gA39/fwF/YAN/f38AYAR/f39/AX9gBH9/f38AYAZ/f39/f38Bf2AFf39/f38Bf2AFf39/f38AYAN/f38BfWAAAGAGf39/f39/AGAIf39/f39/f38Bf2AAAX9gB39/f39/f38Bf2AHf39/f39/fwBgBX9+fn5+AGADf35/AX5gBX9/fn9/AGAFf39/f34Bf2AEf39/fwF+YAh/f39/f39/fwBgBH9+fn8AYAp/f39/f39/f39/AX9gBn9/f39+fgF/YAd/f39/f35+AX9gA39/fwF8YAZ/fH9/f38Bf2ADf35/AX9gAn9+AGAMf39/f39/f39/f39/AX9gBX9/f398AX9gBH9/f3wBf2AFf39/fn4Bf2ALf39/f39/f39/f38Bf2AKf39/f39/f39/fwBgD39/f39/f39/f39/f39/fwBgDX9/f39/f39/f39/f38AYAl/f39/f39/f38AYAV/f39/fwF8YAABfGAEf39/fwF9YAF8AXxgAnx/AXxgAn5/AX9gAn5+AXxgAAF+YAF/AX5gA39+fwBgAn98AGAEfn5+fgF/YAN+fn4Bf2ABfwF8YAJ/fwF+YAJ+fgF9YAN/f34AYAR/f39+AX5gBX5/f39/AX9gCX9/f39/f39/fwF/YAR/f35+AAKtCzMDZW52DV9lbXZhbF9kZWNyZWYAAgNlbnYYX2VtdmFsX2dldF9tZXRob2RfY2FsbGVyAAMDZW52DV9lbXZhbF9pbmNyZWYAAgNlbnYXX2VtdmFsX2NhbGxfdm9pZF9tZXRob2QABwNlbnYZX2VtYmluZF9yZWdpc3Rlcl9mdW5jdGlvbgARA2VudhZfZW1iaW5kX3JlZ2lzdGVyX2NsYXNzACcDZW52Il9lbWJpbmRfcmVnaXN0ZXJfY2xhc3NfY29uc3RydWN0b3IADQNlbnYfX2VtYmluZF9yZWdpc3Rlcl9jbGFzc19mdW5jdGlvbgAoA2VudiVfZW1iaW5kX3JlZ2lzdGVyX2NsYXNzX2NsYXNzX2Z1bmN0aW9uABcDZW52EV9lbXZhbF90YWtlX3ZhbHVlAAMDZW52EF9lbXZhbF9uZXdfYXJyYXkADwNlbnYRX2VtdmFsX25ld19vYmplY3QADwNlbnYSX2VtdmFsX25ld19jc3RyaW5nAAEDZW52E19lbXZhbF9zZXRfcHJvcGVydHkABQNlbnYYZW1zY3JpcHRlbl9hc21fY29uc3RfaW50AAQDZW52CnN5bmNJZGJfanMAAgNlbnYTX2VtdmFsX2dldF9wcm9wZXJ0eQADA2VudglfZW12YWxfYXMAHANlbnYWX2VtdmFsX3J1bl9kZXN0cnVjdG9ycwACA2VudhFfZW12YWxfZ2V0X2dsb2JhbAABA2VudgpfZW12YWxfbmV3AAYDZW52IV9lbXZhbF9uZXdfYXJyYXlfZnJvbV9tZW1vcnlfdmlldwABA2VudhJfZW12YWxfY2FsbF9tZXRob2QAKQNlbnYNX19hc3NlcnRfZmFpbAAHA2VudhVfZW1iaW5kX3JlZ2lzdGVyX3ZvaWQAAANlbnYVX2VtYmluZF9yZWdpc3Rlcl9ib29sAAoDZW52GF9lbWJpbmRfcmVnaXN0ZXJfaW50ZWdlcgAKA2VudhZfZW1iaW5kX3JlZ2lzdGVyX2Zsb2F0AAUDZW52G19lbWJpbmRfcmVnaXN0ZXJfc3RkX3N0cmluZwAAA2VudhxfZW1iaW5kX3JlZ2lzdGVyX3N0ZF93c3RyaW5nAAUDZW52Fl9lbWJpbmRfcmVnaXN0ZXJfZW12YWwAAANlbnYcX2VtYmluZF9yZWdpc3Rlcl9tZW1vcnlfdmlldwAFA2VudhVlbXNjcmlwdGVuX21lbWNweV9iaWcABQNlbnYSZW1zY3JpcHRlbl9nZXRfbm93ACoWd2FzaV9zbmFwc2hvdF9wcmV2aWV3MQhmZF93cml0ZQAGA2VudhZlbXNjcmlwdGVuX3Jlc2l6ZV9oZWFwAAEDZW52IF9lbXNjcmlwdGVuX2dldF9ub3dfaXNfbW9ub3RvbmljAA8DZW52EF9fc3lzY2FsbF9vcGVuYXQABgNlbnYRX19zeXNjYWxsX2ZjbnRsNjQABANlbnYPX19zeXNjYWxsX2lvY3RsAAQWd2FzaV9zbmFwc2hvdF9wcmV2aWV3MQdmZF9yZWFkAAYWd2FzaV9zbmFwc2hvdF9wcmV2aWV3MQhmZF9jbG9zZQABFndhc2lfc25hcHNob3RfcHJldmlldzERZW52aXJvbl9zaXplc19nZXQAAxZ3YXNpX3NuYXBzaG90X3ByZXZpZXcxC2Vudmlyb25fZ2V0AAMDZW52CnN0cmZ0aW1lX2wACQNlbnYQX19zeXNjYWxsX3N0YXQ2NAADA2VudhFfX3N5c2NhbGxfbWtkaXJhdAAEA2VudgVhYm9ydAAMA2VudiJfX3Rocm93X2V4Y2VwdGlvbl93aXRoX3N0YWNrX3RyYWNlAAIDZW52F19lbWJpbmRfcmVnaXN0ZXJfYmlnaW50ABEWd2FzaV9zbmFwc2hvdF9wcmV2aWV3MQdmZF9zZWVrAAkD+Af2BwwCAgIDDAICAAwMAwECAwELKwEDAQELAQIDAQQBAgQDAAUAAwAFAAUHAAoJAQEBAgYECg0FBwAABQQHCgcKBwYAAwABAAAFAAEBAAoAAQIBDwACDwUAAg8DAQMABwUDAAcFBAUCAwUKAAMFBQUIAgACBQAAAwEDAQABDAIDCwEBAQILAQMHCgAKAAECAAYCAwICAQcFAAUKAAEBAgAKBQkNBwUBBwAAAgEAAQEMDAQEBCwEBAABAwEBBAYCAgQTAQ8tCRAFAQcuCgQdAAMDAQECAwAYGC8wAQQMAwMDEwQBHh4BAQEEMQIBAgAEFAcEBQQBAQMEAwEBAgIAAgEAAwEBBQAyAQECAgACAAUFAQMBAQABAAUABAEBAQEEAgIBDAMDBBQHAQACAQICAQIEBQoHBQAFAwMBAQEFAQIAAQIAAh8BABISMzQ1NhIAEhgSEhIHNzgGOQQEAwMEAQMGBAMGAgAGOgcJBwUECQcFBAgBEAMAAggBBRkGBwgWCAYIBggWCAogCwgcCAcIDwQEAwgBEAgDBRkICAgICAogCAgIBAkBAQkHCQQRCBUJFSEiBAYRGiMJBAkBCREIFQkVISIRGiMJBAAADgEICAgNCA0ICgkODggICA0IDQgKCQ4QDRACAQAAAAEAAxAkAAUFEAUAAQEDABAkABAFAQABAxslJgQIGyUmBAgEDQ0BDAIAAgIBBQICAQIAAwIAAAICAgQGBgYDBAMEBgQJAQIDBAMEBgQJDgkJAg4EDgkJAQEJAQ4OCQEODgkBAgECAQEAAAAAAAAAAAECAQIAAQIBAgECAQIBAgECAQIBAgECAQIBAgECAgEFAwAFBQAFAQEFBQACAwwMAQIWFgIMAQMBAgIABQwCAwUABQcGAQAABQAFBQEAAAMCAQACAQUABQcCAQICAgUCAAMHAwMAAwMDBRcBCgUFBQQGAwABAxcBCgAFHwADAwMDAwUEBAABBQEFBQQEAAECBQACAQwMAgAMDAwCDAIEBAQDBQcHBwcEAwcKDQoKCg0NDQEBAQECAgEBAwEBOwACDA8PDw8CAQYCAwMDAQMFBAEAAgIBAQMDAQEABRACAwADAQEDAQMEBAQBAwABAwMDAAEFAQMECAADAAADAwAAAAEBAgYDBAEDAwMJAwMDAwMAAAEABAYBAQMDBQMDAwAGAQEEAQMAAAcAAAAAAAAAAAAAAAAGAAMBAgAAAAAAAAMAAAAAAAAAAAAAAAAAAwAAAgMAAAAEAAAAAAAAAAADAAAAAAAEAAAAAAAGAAAAAwMDAwAAAAAAAwAAAAQAAAAAAAADAwMAAAAAAAQAAAAAAAADAAEAAAUABAABBQkREDwZPQQFAXAA2gUFBwEBgAKAgAINAwEAAgYXBH8BQYCSBwt/AUEAC38BQQALfwFBAAsH7QQdBm1lbW9yeQIAEV9fd2FzbV9jYWxsX2N0b3JzADMPX19jcHBfZXhjZXB0aW9uBAAGbWFsbG9jAIICBGZyZWUAgwIZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEADV9fZ2V0VHlwZU5hbWUA3gEbX2VtYmluZF9pbml0aWFsaXplX2JpbmRpbmdzAN8BEF9fZXJybm9fbG9jYXRpb24A8wEGZmZsdXNoAJUCBl9fdHJhcADEBRVlbXNjcmlwdGVuX3N0YWNrX2luaXQAxwYZZW1zY3JpcHRlbl9zdGFja19nZXRfZnJlZQDIBhllbXNjcmlwdGVuX3N0YWNrX2dldF9iYXNlAMkGGGVtc2NyaXB0ZW5fc3RhY2tfZ2V0X2VuZADKBglzdGFja1NhdmUAywYMc3RhY2tSZXN0b3JlAMwGCnN0YWNrQWxsb2MAzQYcZW1zY3JpcHRlbl9zdGFja19nZXRfY3VycmVudADLBiJfX2N4YV9kZWNyZW1lbnRfZXhjZXB0aW9uX3JlZmNvdW50AJkGIl9fY3hhX2luY3JlbWVudF9leGNlcHRpb25fcmVmY291bnQAnQYOX19jeGFfZGVtYW5nbGUAzgYlX190aHJvd25fb2JqZWN0X2Zyb21fdW53aW5kX2V4Y2VwdGlvbgChCBdfX2dldF9leGNlcHRpb25fbWVzc2FnZQCiCAxkeW5DYWxsX2ppamkAowgOZHluQ2FsbF92aWlqaWkApAgOZHluQ2FsbF9paWlpaWoApQgPZHluQ2FsbF9paWlpaWpqAKYIEGR5bkNhbGxfaWlpaWlpamoApwgJ2woBAEEBC9kFvwY+Oz9AQUJDREVGR0BBSElERUZKS0xNTk9QUVJTVFVWV1hZWltcXV5fRmBFYWJjZGVmVVZnaGlYalRrbG1ub3BxcnN0dXZGd3h5entGRXx9fl5/OoABgQGCAYMBhAGFAYIBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBvAa1AbYBsAE0NDU2OT2xAbIBswG2AbQBsQGyAbMBtAG3AbgBuQG7AbwBvQG+AcYBygHLAcwBzgHgAeoB8AHxAf0B/gGQApECkgKWArYBmwKcAp0CngKfAqAC6gHqAaECpAKlAqYCpwKmAqkCqwKqAqwCtwK5ArgCugLMAs8C2QLVAtYC1wLYAtEC0wLUAqgB2gLbAtwCqgHdAt4C3wI07QK2AbQB6wKJBooGiwbsAu4CsgHwAvECigORA4MCNM8E0QSJBYsFjgWQBZIFlAWWBZgFmgWcBZ4FoAWiBaQFyATJBNAE3QTeBN8E4AThBOIEjQLjBOQE5QS+BOkE6gTsBO4E7wTqAfEE8gT6BPsE/gT/BIAFggWFBfwE/QSxAcUCgQWDBYYFtgG0AbQB0gTTBNQE1QTWBNcE2ATZBI0C2gTbBNwEtAHmBOYE5wToAegB6AToAbQB8wT0BOcE6gHqAfUE9gS0AfME9ATnBOoB6gH1BPYEtAH3BPgE5wTqAeoB+QT2BLQB9wT4BOcE6gHqAfkE9gS2AbQBmQOaA5wDtgG0AZ0DngOgA7QBoQOnA60DrwOxA7EDswO1A7kDuwO9A7QBwgPFA8kDygPLA8sDzAPNA9AD0QPSA7QB1APXA90D3gPfA+AD5QPnA7QB6QPrA+4D7wPwA/ED9AP2A7YBtAH7A/wD/QP+A4AEggSFBIgFjQWRBZ0FoQWVBZkFtgG0AfsDhwSIBIkEiwSNBJAEigWPBZMFnwWjBZcFmwWmBaUFkQSmBaUFkwS0AZUElQSWBJYElgSXBOoBmASYBLQBlQSVBJYElgSWBJcE6gGYBJgEtAGZBJkElgSWBJYEmgTqAZgEmAS0AZkEmQSWBJYElgSaBOoBmASYBLQBnAShBLQBqASrBLQBsQS1BLQBtgS6BLQBuwS8BJ0CtAG7BL0EnQK2AbsFowa7BekBvwXBBdsF4QXiBeMF5AXtArQBjQaOBrQBjwaQBo4G7gKYBjSfBqAGtgG0ATQ0pQa0AacGuAa1BqoGtAG3BrQGqwa0AbYGsQatBrQBrga0AboGtAG7BrQBuQa+BrIB7gK+Br4GvgbuArQBwAbpAekB6QGoAv4GnQKAB7YBtAG7BYEHtAGEB4UHtAGGB7QBkgeUB5UHlgeXB5gHtAGsB7QBsAe0AbEHtAGyB7QBswe0AbQHtAG2B7QBtwe0AbgHtAG5B7QBuge0AbwHtAHAB7QBwQe0AcIHtAHDB7QBxAe0AcUHtAHHB7QByAe0AckHyge0AcsHzAe0Ac0Hyge0Ac4Hzwe0AdAHtAHSB7QB0we0AdUHtAHWB7QB2Qe0AdoHtAHbB7QB3Qe0Ad4HtAHfB7QB4Ae0AeEHtAHiB7QB4wfkB7QB5ge0AecHtAHoB7QB6QfqB7QB7AftB7QB7wfuB7QB8Ae0AfIHtAHzB7QB9AfkB7QB4wfkB7QB4we0AfUH9gf3B/gH+Qf6B7QB+we0AfwH6ge0AeEHtAH9B7QB/gf+B/8HgAi0AYEItAGDCLQBhAi0Af4H/geFCIYItAGHCLQBiAi0AYkIigiLCIwIjQi0AY4ItAGPCLQBkAi0AZIItAH+B/4HkwiUCLQBiQiVCJYItAGXCLQBmAiZCJsItAGYCJwIngi0AaAItAEK6swR9gfPAgECf0GAkgckA0GAkgMkAiMAQRBrIgAkAAJAIABBDGogAEEIahAqDQBBgP0CIAAoAgxBAnRBBGoQggIiATYCACABRQ0AIAAoAggQggIiAQRAQYD9AigCACAAKAIMQQJ0akEANgIAQYD9AigCACABECtFDQELQYD9AkEANgIACyAAQRBqJABB9O4CQQA6AABB8O4CQQA2AgBB+O4CQQE2AgBBgO8CQRAQvQUiADYCAEGE7wJCjoCAgICCgICAfzcCACAAQcILKQAANwAGIABBvAspAAA3AAAgAEEAOgAOQYzvAkH0ADYCAEGQ7wJBADYCABA9QZDvAkGs7wIoAgA2AgBBrO8CQYzvAjYCAEGw7wJBigE2AgBBtO8CQQA2AgAQ4AFBtO8CQazvAigCADYCAEGs7wJBsO8CNgIAQeT4AkHs9wI2AgBBnPgCQSo2AgALAwABCxQAQfTuAi0AAARAQfDuAigCABoLCxsAIwAhAAZAQfjuAigCABAAGSAAJAAQoQYACwtvAQN/IAEQ8gEiAkHw////B0kEQAJAIAJBCk0EQCAAIAI6AAsgACEDDAELIAJBD3JBAWoiBBC9BSEDIAAgBEGAgICAeHI2AgggACADNgIAIAAgAjYCBAsgAyABIAIQ4gEgAmpBADoAACAADwsQOAALCQBBgyMQrgEACxkAQYvvAiwAAEEASARAQYDvAigCABCDAgsLqQIBAn8jAEEQayIBJABB/e4CLQAABEBBzCkQ7wELQf7uAiAAOgAAQfjuAigCAEEBRwRAQZQ9EO8BQfjuAigCACEABkBBmO8CLQAAQQFxRQRAQQJBlN0AEAEhAkGY7wJBAToAAEGU7wIgAjYCAAtBlO8CKAIAIQJBARACIAFBATYCCCACIABB+x0gAUEIahADGSABJAAGQEEBEAAZIAEkABChBgALCQALBkBBARAAGSABJAAQoQYACwZAQfjuAigCABAAGSABJAAGQEEBEAAZIAEkABChBgALCQALQfjuAkEBNgIABkBBABAAGSABJAAQoQYACwsCQEH07gItAABFDQBB8O4CKAIAGkH07gJBADoAAEH97gItAABFDQBBuCkQ7wELIAFBEGokAAv2BQIGfwJ9IwBBIGsiAiQAIABBADYCCCAAQgA3AgACQCABKAIEIgYgASgCACIBRg0ABkAgBiABayIEQQBIBEAQPAALIAQQvQUhAxkgAiQAIAAoAgAiAQRAIAAgATYCBCABEIMCCwZACQEHACEAIAIkAEH0kQNBgAg2AgBB8JEDQQA2AgAgABDGBgJAQfiRAygCAEEBRgRAIAAQmgYhAEH97gItAAAEQCACIAAgACgCACgCCBEBADYCAEH11gAgAhDnAQtBCBCVBiEDIAAgACgCACgCCBEBACEAIAJBAToAHwZAIAJBBGogABA3IQAgAkEBOgAeBkAgAiAAQeTLABD5BSIBKAIINgIYIAIgASkCADcDECABQgA3AgAgAUEANgIIIAJBAToAHQZAIAMgAkEQahDuBSEBIAJBADoAHSABQcSbAkEBEJcGDAQZIAIkACACLQAdIQEgAiwAG0EASARAIAIoAhAQgwILIAIgAUEBcToAHgkACwAZIAIkACACLQAeIQEgACwAC0EASARAIAAoAgAQgwILIAIgAUEBcToAHwkA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ATYCFAZAIAJBCGogAkEUahCrARkgAiQABkAgAigCFBAAGSACJAAQoQYACwkACwZAIAIoAhQQABkgAiQAEKEGAAsGQCACQRRqIgEgAkEIaiAAEQAABkAgARCsASEBGSACJAAgAigCFCIABEAgAiAANgIYIAAQgwILCQALGSACJAAgAigCCCIABEAgAiAANgIMIAAQgwILCQALIAIoAhQiAARAIAIgADYCGCAAEIMCCyACKAIIIgAEQCACIAA2AgwgABCDAgsgAkEgaiQAIAELBgBBhN4ACy4BAX8gAARAIAAoAgQhASAAQQA2AgQgAQRAIAEgASgCACgCEBECAAsgABCDAgsLKQEBfyMAQRBrIgIkACACIAE2AgwgAkEMaiAAEQEAIQAgAkEQaiQAIAALMAECfyMAIQIGQAZAQQgQvQUhARgBIAEgACgCABCvASEAGSACJAAgARCDAgkACyAAC/oDAgN/AX0jAEEwayIDJAACQAJAIAEoAgQgASgCAGtBAnUiBCAAKAIAIgVGBEAgAigCBCACKAIAa0ECdSAERg0BC0H97gItAAAEQCADIAU2AgBBidsAIAMQ5wELQQgQlQYhASAAKAIAIQAgA0EBOgAvBkAgA0EEaiICIAAQgwYgA0EBOgAuBkAgAyACQavFABD5BSIAKAIINgIYIAMgACkCADcDECAAQgA3AgAgAEEANgIIIANBAToALQZAIAMgA0EQakGSPhD8BSIAKAIINgIoIAMgACkCADcDICAAQgA3AgAgAEEANgIIIANBAToALAZAIAEgA0EgahDrBSIAQZiaAjYCACADQQA6ACwgAEG8mgJB6wAQlwYMBRkgAyQAIAMtACwhACADLAArQQBIBEAgAygCIBCDAgsgAyAAQQFxOgAtCQALABkgAyQAIAMtAC0hACADLAAbQQBIBEAgAygCEBCDAgsgAyAAQQFxOgAuCQALABkgAyQAIAMtAC4hACADLAAPQQBIBEAgAygCBBCDAgsgAyAAQQFxOgAvCQALABkgAyQAIAMtAC8EQCABEJYGCwkACwALIAAoAgQiBCAEKAIAKAIEEQEAIQQgASgCACACKAIAIAAoAgQiACAAKAIAKAIIEQEAIAQRCwAhBiADQTBqJAAgBg8LAAvKAgICfwF9IwBBIGsiBCQAIAEgACgCBCIFQQF1aiEBIAAoAgAhACAFQQFxBEAgASgCACAAaigCACEACyAEIAI2AgQGQCAEQRBqIARBBGoQqwEZIAQkAAZAIAQoAgQQABkgBCQAEKEGAAsJAAsGQCAEKAIEEAAZIAQkABChBgALIAQgAzYCHAZABkAgBEEEaiAEQRxqEKsBGSAEJAAGQCAEKAIcEAAZIAQkABChBgALCQALBkAgBCgCHBAAGSAEJAAQoQYACwZAIAEgBEEQaiAEQQRqIAARCwAhBhkgBCQAIAQoAgQiAARAIAQgADYCCCAAEIMCCwkACxkgBCQAIAQoAhAiAARAIAQgADYCFCAAEIMCCwkACyAEKAIEIgAEQCAEIAA2AgggABCDAgsgBCgCECIABEAgBCAANgIUIAAQgwILIARBIGokACAGCwcAIAAoAgALNQEBfyABIAAoAgQiAkEBdWohASAAKAIAIQAgASACQQFxBH8gASgCACAAaigCAAUgAAsRAQALBgBBpOAAC2wBAn8jACEBQQgQvQUhAiAAKAIAIQAgAkEANgIEIAIgADYCAAZAQRAQvQUhARkgASQAIAJBADYCBCACEIMCCQALIAEgADYCDCABQewANgIEIAFBpOEANgIAIAEgAEECdDYCCCACIAE2AgQgAguXAwIDfwF9IwBBIGsiAyQAAkACQCABKAIEIAEoAgBrQQJ1IgQgACgCACIFRgRAIAIoAgQgAigCAGtBAnUgBEYNAQtB/e4CLQAABEAgAyAFNgIAQYnbACADEOcBC0EIEJUGIQEgACgCACEAIANBAToAHwZAIANBBGoiAiAAEIMGIANBAToAHgZAIAMgAkGrxQAQ+QUiACgCCDYCGCADIAApAgA3AxAgAEIANwIAIABBADYCCCADQQE6AB0GQCABIANBEGoQ6wUiAEGYmgI2AgAgA0EAOgAdIABBvJoCQesAEJcGDAQZIAMkACADLQAdIQAgAywAG0EASARAIAMoAhAQgwILIAMgAEEBcToAHgkACwAZIAMkACADLQAeIQAgAywAD0EASARAIAMoAgQQgwILIAMgAEEBcToAHwkACwAZIAMkACADLQAfBEAgARCWBgsJAAsACyAAKAIEIgQgBCgCACgCBBEBACEEIAEoAgAgAigCACAAKAIEIgAgACgCACgCCBEBACAEEQsAIQYgA0EgaiQAIAYPCwALDQAgACgCAEEEaygCAAsuAQF/IAAE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AygCBBCDAgsJAAsACxA4AAsgAywAD0EASARAIAMoAgQQgwILIANBEGokAAvUBwIGfwF+IwBB0ABrIgIkACACIAEoAgAgASABLAALQQBIGzYCEEG41QAgAkEQahDnAQJAIAAoAgRFBEAGQAZAQQgQlQYhABgDIABBvTsQ7wUhAAwCGSACJAAgABCWBgkACwALAkBBhO8CKAIAQYvvAiwAACIFQf8BcSAFQQBIGyIGQQFqIgNB8P///wdJBEACQCADQQpNBEAgAkEANgIwIAJCADcDKCACIAM6ADMgAkEoaiEEDAELIANBD3JBAWoiBxC9BSEEIAIgAzYCLCACIAQ2AiggAiAHQYCAgIB4cjYCMAsgBEGA7wJBgO8CKAIAIAVBAE4bIAYQ4gEgBmpBLzsAAAZAIAJBKGogASgCACABIAEtAAsiA8BBAEgiBBsgASgCBCADIAQbEPcFIQEMAhkgAiQAIAIsADNBAEgEQCACKAIoEIMCCwkACwALEDgACyACQUBrIAEoAgg2AgAgAiABKQIANwM4IAFCADcCACABQQA2AgggAiwAM0EASARAIAIoAigQgwILBkAgAkEoaiACQThqIgEgARD7BSACQRhqIgMQ+AUhASACQQA2AiAgAkIANwMYBkAGQCADIAEoAgAgASABLQALIgPAQQBIIgQbIgUgBSABKAIEIAMgBBtqEJkBGSACJAAgAiwAI0EASARAIAIoAhgQgwILCQALBkAgAkHIAGogAkEYakEAENIFGSACJAAgAiwAI0EASARAIAIoAhgQgwILCQALIAIpA0ghCCACLAAjQQBIBEAgAigCGBCDAgsCQCAIp0H/AXEiA0H/AUdBACADGw0AIAIgASgCACABIAEsAAtBAEgbNgIAQeHUACACEOcBIAJBADYCICACQgA3AxgGQCACQRhqIAEoAgAgASABLQALIgPAQQBIIgQbIgUgBSABKAIEIAMgBBtqEJkBGSACJAAgAiwAI0EASARAIAIoAhgQgwILCQALBkAgAkEYakEAENAFGSACJAAgAiwAI0EASARAIAIoAhgQgwILCQALIAIsACNBAE4NACACKAIYEIMCCyAAKAIEIgAgAkE4aiAAKAIAKAIMEQAAIAJBATYCFAZAQQAgAkEUahCIARkgAiQABkAgAigCFBAAGSACJAAQoQYACwkACxkgAiQAIAEsAAtBAEgEQCABKAIAEIMCCwkACxkgAiQAIAIsAENBAEgEQCACKAI4EIMCCwkACwZAIAIoAhQQABkgAiQAEKEGAAsgASwAC0EASARAIAEoAgAQgwILIAIsAENBAEgEQCACKAI4EIMCCyACQdAAaiQADwsgAEHEmwJBARCXBgAL/AkCCH8CfSMAQUBqIgMkAAJAIAAoAgQiB0UEQAZABkBBCBCVBiEAGAMgAEG9OxDvBSEADAIZIAMkACAAEJYGCQALAAsCQCABKAIEIgQgASgCACIFayIJQQJ1IgggACgCAEcEQEEIEJUGIQEgACgCACEAIANBAToAOQZAIANBDGoiAiAAEIMGIANBAToAOAZAIAMgAkGrxQAQ+QUiACgCCDYCICADIAApAgA3AxggAEIANwIAIABBADYCCCADQQE6ADcGQCADIANBGGpBkj4Q/AUiACgCCDYCMCADIAApAgA3AyggAEIANwIAIABBADYCCCADQQE6ADYGQCABIANBKGoQ6wUiAEGYmgI2AgAgA0EAOgA2IABBvJoCQesAEJcGDAUZIAMkACADLQA2IQAgAywAM0EASARAIAMoAigQgwILIAMgAEEBcToANwkACwAZIAMkACADLQA3IQAgAywAI0EASARAIAMoAhgQgwILIAMgAEEBcToAOAkACwAZIAMkACADLQA4IQAgAywAF0EASARAIAMoAgwQgwILIAMgAEEBcToAOQkACwAZIAMkACADLQA5BEAgARCWBgsJAAsACwJAIAAtAAxFDQAgBCAFRiIGRQRAIAUhAQNAIAEqAgAiDCAMlCALkiELIAFBBGoiASAERw0ACwsgBg0AIAuLkSILQwAAAABeRQ0AQQEgCCAIQQFNGyIEQQFxIQhBACEBIAlBCE8EQCAEQX5xIQlBACEEA0AgBSABQQJ0IgZqIgogCioCACALlTgCACAFIAZBBHJqIgYgBioCACALlTgCACABQQJqIQEgBEECaiIEIAlHDQALCyAIRQ0AIAUgAUECdGoiASABKgIAIAuVOAIACyAHKAIMIAcoAghGBEBBCBCVBiEBIAAoAgQoAgghACADQQE6ADwGQCADQRhqIgIgABCDBiADQQE6ADsGQCADIAJB0MwAEPkFIgAoAgg2AjAgAyAAKQIANwMoIABCADcCACAAQQA2AgggA0EBOgA6BkAgASADQShqEO4FIQAgA0EAOgA6IABBxJsCQQEQlwYMBBkgAyQAIAMtADohACADLAAzQQBIBEAgAygCKBCDAgsgAyAAQQFxOgA7CQALABkgAyQAIAMtADshACADLAAjQQBIBEAgAygCGBCDAgsgAyAAQQFxOgA8CQALABkgAyQAIAMtADwEQCABEJYGCwkACwALBkAgByAFIAJBACAHKAIAKAIAEQcABwAhACADJABB9JEDQawINgIAQfCRA0EANgIAIAAQxgYCQEH4kQMoAgBBAUYEQCAAEJoGIQBBCBCVBiECIAAgACgCACgCCBEBACEAIANBAToAPwZAIANBGGogABA3IQAgA0EBOgA+BkAgAyAAQcfPABD5BSIBKAIINgIwIAMgASkCADcDKCABQgA3AgAgAUEANgIIIANBAToAPQZAIAIgA0EoahDuBSEBIANBADoAPSABQcSbAkEBEJcGDAQZIAMkACADLQA9IQEgAywAM0EASARAIAMoAigQgwILIAMgAUEBcToAPgkACwAZIAMkACADLQA+IQEgACwAC0EASARAIAAoAgAQgwILIAMgAUEBcToAPwkACwAZIAMkACADLQA/BEAgAhCWBgsGQBCbBhkgAyQAEKEGAAsJAAsACwkBCwALIANBQGskAA8LAAsgAEHEmwJBARCXBgALwQEBAn8jAEEQayIEJAAgASAAKAIEIgVBAXVqIQEgACgCACEAIAVBAXEEQCABKAIAIABqKAIAIQALIAQgAjYCDAZAIAQgBEEMahCrARkgBCQABkAgBCgCDBAAGSAEJAAQoQYACwkACwZAIAQoAgwQABkgBCQAEKEGAAsGQCABIAQgAyAAEQUAGSAEJAAgBCgCACIABEAgBCAANgIEIAAQgwILCQALIAQoAgAiAARAIAQgADYCBCAAEIMCCyAEQRBqJAALlwIBBn8jAEEgayICJAACQCAAKAIEIgBFBEAGQAZAQQgQlQYhABgDIABBvTsQ7wUhAAwCGSACJAAgABCWBgkACwALIAIgATYCDCACIAJBDGoiAzYCFCACQRhqIgYgAEE4aiIBIAMgAkEUaiIHIAJBCGoiBBCaASACKAIYKAIMIQUgASADEJsBIAIgACgCFCAAKAIEIAAoAhAgACgCDEEBa2xqaigCADYCCCACIAQ2AhQgBiABIAQgByACQRNqEJoBIAIoAhggBTYC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9wUhBAwCGSADJAAgAywAO0EASARAIAMoAjAQgwILCQALAAsQOAALIAMgBCgCCDYCSCADIAQpAgA3A0AgBEIANwIAIARBADYCCCADLAA7QQBIBEAgAygCMBCDAgsGQAZAQZgCEL0FIQQGQCAAKAIIIQUgA0FAayEGIwAhByAEQgA3AgQgBEG46QA2AgAgBEIANwIMIARCADcCFCAEQgA3AhwgBEIANwIkIARBMGpBAEH0ABDjARogBEIANwPIASAEQgA3A8ABIARCADcDuAEgBEIANwOwASAEQgA3A6gBIARCADcC7AEgBEEBOgDoASAEQgA3A+ABIARCgYCAgBA3A9gBIARCgICAgICAgMA/NwPQASAEQgA3AvQBIARCADcC/AEgBEGEAmoiCEIANwIAIARCADcCjAIgBEGAgID8AzYClAIGQCAEIAYgBSACENcBGSAHJAAgCBCXASAEQcQBahCXASAEKAKUASICBEAgBCACNgKYASACEIMCCyAEQewAahDDASAEQcgAahDDAQkACxkgAyQAIAQQgwIJAAsgACAENgIEIAAQoQEHACECIAMkAEH0kQNBvAg2AgBB8JEDQQA2AgAgAhDGBkH4kQMoAgBBAUYEQAZAAkAGQCADQTBqIQQgAhCaBiICIAIoAgAoAggRAQAhAhgFIAQgAhA3IQIGQCADQSRqQYgpEDchBCABKAIAIQUgASwACyEGIAMgAigCACACIAIsAAtBAEgbNgIEIAMgBSABIAZBAEgbNgIAQbHXACADEOcBBkAgAiAEEJgBQX9HBEAGQEEIEJUGIQEYCCAAKAIEKAIEIQAgA0EBOgBPBkAgA0EMaiIFIAAQgwYgA0EBOgBOBkAgAyAFQbvNABD5BSIAKAIINgIgIAMgACkCADcDGCAAQgA3AgAgAEEANgIIIANBAToATQZAIAEgA0EYahDuBSEAIANBADoATSAAQcSbAkEBEJcGDAYZIAMkACADLQBNIQAgAywAI0EASARAIAMoAhgQgwILIAMgAEEBcToATgkACwAZIAMkACADLQBOIQAgAywAF0EASARAIAMoAgwQgwILIAMgAEEBcToATwkACwAZIAMkACADLQBPBEAGQCABEJYGGAoLCQALAAsQnAYZIAMkACAELAALQQBIBEAgBCgCABCDAgsJAAsZIAMkACACLAALQQBIBEAgAigCABCDAgsJAAsLGSADJAAGQBCbBhkgAyQAEKEGAAsJAAsACwkACxkgAyQAIAMsAEtBAEgEQCADKAJAEIMCCwkACyADLABLQQBIBEAgAygCQBCDAgsgA0HQAGokAAvxAQEEfyMAQRBrIgQkACABIAAoAgQiBUEBdWohBiAAKAIAIQEgBUEBcQRAIAYoAgAgAWooAgAhAQsCQCACKAIAIgBB8P///wdJBEACQCAAQQpNBEAgBCAAOgAPIARBBGohBQwBCyAAQQ9yQQFqIgcQvQUhBSAEIAdBgICAgHhyNgIMIAQgBTYCBCAEIAA2AggLIAUgAkEEaiAAEOEBIABqQQA6AAAGQCAGIARBBGogAyABEQUADAIZIAQkACAELAAPQQBIBEAgBCgCBBCDAgsJAAsACxA4AAsgBCwAD0EASARAIAQoAgQQgwILIARBEGokAAuBCAIGfwF+IwBB4ABrIgIkACACIAEoAgAgASABLAALQQBIGzYCIEHf1QAgAkEgahDnAUH97gItAAAEQCACIAEoAgAgASABLAALQQBIGzYCEEGW2QAgAkEQahDnAQsCQCAAKAIERQRABkAGQEEIEJUGIQAYAyAAQb07EO8FIQAMAhkgAiQAIAAQlgYJAAsACwJAQYTvAigCAEGL7wIsAAAiBUH/AXEgBUEASBsiBkEBaiIDQfD///8HSQRAAkAgA0EKTQRAIAJBQGtBADYCACACQgA3AzggAiADOgBDIAJBOGohBAwBCyADQQ9yQQFqIgcQvQUhBCACIAM2AjwgAiAENgI4IAIgB0GAgICAeHI2AkALIARBgO8CQYDvAigCACAFQQBOGyAGEOIBIAZqQS87AAAGQCACQThqIAEoAgAgASABLQALIgPAQQBIIgQbIAEoAgQgAyAEGxD3BSEBDAIZIAIkACACLABDQQBIBEAgAigCOBCDAgsJAAsACxA4AAsgAiABKAIINgJQIAIgASkCADcDSCABQgA3AgAgAUEANgIIIAIsAENBAEgEQCACKAI4EIMCCwZAIAJBOGogAkHIAGoiASABEPsFIAJBKGoiAxD4BSEBIAJBADYCMCACQgA3AygGQAZAIAMgASgCACABIAEtAAsiA8BBAEgiBBsiBSAFIAEoAgQgAyAEG2oQmQEZIAIkACACLAAzQQBIBEAgAigCKBCDAgsJAAsGQCACQdgAaiACQShqQQAQ0gUZIAIkACACLAAzQQBIBEAgAigCKBCDAgsJAAsgAikDWCEIIAIsADNBAEgEQCACKAIoEIMCCwJAIAinQf8BcSIDQf8BR0EAIAMbDQAgAiABKAIAIAEgASwAC0EASBs2AgBBjdUAIAIQ5wEgAkEANgIwIAJCADcDKAZAIAJBKGogASgCACABIAEtAAs