☠☠ backed out by eee49d0f606b ☠ ☠ | |
author | Robert Helmer <rhelmer@mozilla.com> |
Wed, 20 Jun 2018 17:21:01 -0700 | |
changeset 490752 | c119767aec7b7356c79ce2ea2a8baaf5682e438d |
parent 490751 | 488b580cad59b79fc92053fb18dd01ef2c0da15c |
child 490753 | 772dea1abb7f7391bb8df72699db4d66919379e9 |
push id | 1815 |
push user | ffxbld-merge |
push date | Mon, 15 Oct 2018 10:40:45 +0000 |
treeherder | mozilla-release@18d4c09e9378 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | fkiefer |
bugs | 1421501 |
milestone | 63.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
new file mode 100644 --- /dev/null +++ b/third_party/prio/LICENSE @@ -0,0 +1,373 @@ +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0.
new file mode 100644 --- /dev/null +++ b/third_party/prio/README-mozilla @@ -0,0 +1,17 @@ +This directory contains the Prio source from the upstream repo: +https://github.com/mozilla/libprio + +Current version: 1.0 [commit c1c6afd1683e27d823f39eb8fbe4b8469cc5bbf6] + +UPDATING: + +Our in-tree copy of Prio does not depend on any generated files from the +upstream build system. Therefore, it should be sufficient to simply overwrite +the in-tree files one the updated ones from upstream to perform updates. + +To simplify this, the in-tree copy can be updated by running + sh update.sh +from within the third_party/libprio directory. + +If the collection of source files changes, manual updates to moz.build may be +needed as we don't use the upstream makefiles. \ No newline at end of file
new file mode 100644 --- /dev/null +++ b/third_party/prio/README.md @@ -0,0 +1,136 @@ +# libprio - A Prio library in C using NSS + +**Warning:** +We do our best to write bug-free code, but I have no doubt +that there are scary bugs, side-channel attacks, and memory leaks +lurking herein. + +**Important:** +We have not yet implemented the items +described in the "Security-Critical TODOs" section below. +Without these features, do not use the code in a production environment. + + +## Overview + +This is an implementation of the core cryptographic routines +for the [Prio system](https://crypto.stanford.edu/prio/) +for the private computation of aggregate statistics: +> "Prio: Private, Robust, and Scalable Computation of Aggregate Statistics"<br> +> by Henry Corrigan-Gibbs and Dan Boneh<br> +> USENIX Symposium on Networked Systems Design and Implementation<br> +> March 2017 +> +> Available online at: +> https://crypto.stanford.edu/prio/ + +**Usage scenario.** +The library implements the cryptographic routines necessary +for the following application scenario: +Each client holds a vector of boolean values. +Each client uses the library to encode her private vector into two +encoded packets—one for server A and one for server B. + +After receiving shares from a client, the servers can use the routines +implemented here to check whether the client-provided packets are +well formed. +(Without this check, a single malicious client can corrupt the +output of the computation.) + +After collecting data packets from many clients, the servers +can combine their state to learn how many clients had the +*i*th bit of their data vector set to `true` and how many +clients had the *i*th bit of their data vector set to `false`. +As long as at least one of the two servers is honest +(i.e., runs the correct code), +the servers learn *nothing else* about the clients' data, +under standard cryptographic assumptions. + +For example, the *i*th bit of the data vector could indicate +whether the client ever visited the *i*th-ranked website +in the Alexa Top 500. +The servers would learn how many clients visited each of the +Top 500 websites *without learning* which clients visited +which websites. + +**Efficiency considerations.** +The code makes no use of public-key crypto, so it should +be relatively fast. +When each a data packet is of length *N*, +all arithmetic is modulo a prime *p* (we use an 87-bit prime by default), +and "elements" are integers modulo *p*, +the dominant costs of the system are: +* **Client compute:** O(*N* log *N*) multiplications +* **Client-to-server communication:** 2*N* + O(1) elements<br> +* **Server compute:** O(*N* log *N*) multiplications to check each packet<br> + (NOTE: Using an optimization we haven't yet implemented, we can + drop this cost to O(*N*) multiplications per packet.) +* **Server-to-server communication:** O(1) elements +* **Server storage:** O(*N*) elements + +## Running the code + +You must first install +[NSS/NSPR](https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS), +[scons](http://scons.org/), and +[msgpack-c](https://github.com/msgpack/msgpack-c) version 2.1.5 (or newer?). +On Ubuntu, you can instal NSS and scons with: + + $ sudo apt install scons libnspr4-dev libnss3-dev + +and you will have to download [msgpack-c 2.1.5 or newer here](https://github.com/msgpack/msgpack-c/releases), +since the Ubuntu packages for msgpack are far out of date. + +For macOS using Homebrew: + $ brew install nss nspr scons msgpack + + $ export LDFLAGS="-L/usr/local/opt/nss/lib" + $ export CPPFLAGS="-I/usr/local/opt/nss/include -I/usr/local/opt/nspr/include/nspr" + +To compile the code, run: + + $ scons + +To run the test suite, execute: + + $ build/ptest/ptest -v + +To print debug messages while compiling: + + $ scons VERBOSE=1 + +To compile with debug symbols, run: + + $ scons BUILDTYPE=DEBUG + +To clean up the object and binary files, run: + + $ scons -c + +The files in this directory are: +```` +/build - Binaries, object files, etc. +/include - Exported header files + (Note: The public header is <mprio.h> since + NSPR already has a file called <prio.h>.) +/mpi - NSS MPI bignum library +/pclient - Example code that uses the Prio library +/prio - Prio library core code +/ptest - Tests and test runner +```` + +## Optimizations and features not yet implemented +* **Server compute.** + By using a fast polynomial interpolation-and-evaluation + routine, we can reduce the cost of checking a single client + request from O(*N* log *N*) multiplications down to O(*N*) + multiplications, for a data packet of *N* items. +* **Differential privacy.** + It would be very straightforward to add some small amount of + noise to the final statistics to provide differential privacy. + If this would be useful, I can add it. +* **Misc.** + There are TODO notes scattered throughout code indicating + places for potential performance optimizations. + +
new file mode 100644 --- /dev/null +++ b/third_party/prio/SConstruct @@ -0,0 +1,41 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +import os +import SCons + +opts = Variables() +opts.AddVariables( + BoolVariable("DEBUG", "Make debug build", 1), + BoolVariable("VERBOSE", "Show full build information", 0)) + +env = Environment(options = opts, + ENV = os.environ) +if "CFLAGS" in os.environ: + env.Append(CFLAGS = SCons.Util.CLVar(os.getenv("CFLAGS"))) +if "CPPFLAGS" in os.environ: + env.Append(CPPFLAGS = SCons.Util.CLVar(os.getenv("CPPFLAGS"))) +if "CXXFLAGS" in os.environ: + env.Append(CXXFLAGS = SCons.Util.CLVar(os.getenv("CXXFLAGS"))) +if "LDFLAGS" in os.environ: + env.Append(LINKFLAGS = SCons.Util.CLVar(os.getenv("LDFLAGS"))) + +if env["DEBUG"]: + print "DEBUG MODE!" + env.Append(CPPFLAGS = [ "-g", "-DDEBUG"]) + +env.Append(LIBS = ["mprio", "mpi", "nss3", "nspr4"], \ + LIBPATH = ['#build/prio', "#build/mpi"], + CFLAGS = [ "-Wall", "-Werror", "-Wextra", "-O3", "-std=c99", + "-I/usr/include/nspr", "-Impi", "-DDO_PR_CLEANUP"]) + +env.Append(CPPPATH = ["#include", "#."]) +Export('env') + +SConscript('browser-test/SConscript', variant_dir='build/browser-test') +SConscript('mpi/SConscript', variant_dir='build/mpi') +SConscript('pclient/SConscript', variant_dir='build/pclient') +SConscript('prio/SConscript', variant_dir='build/prio') +SConscript('ptest/SConscript', variant_dir='build/ptest') +
new file mode 100644 --- /dev/null +++ b/third_party/prio/browser-test/SConscript @@ -0,0 +1,19 @@ +import sys + +Import('env') + +prio_env = env.Clone() + +src = [ + "main.c", +] + +libs = [ + "mprio", + "msgpackc", +] + +prio_env.Append(LIBS = libs) +prio_env.Install("encode-once.js") +prio_env.Program("browser-test", src) +
new file mode 100644 --- /dev/null +++ b/third_party/prio/browser-test/encode-once.js @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2018, Henry Corrigan-Gibbs + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +ChromeUtils.import('resource://gre/modules/Services.jsm'); + +let [publicKeyA, publicKeyB, batchID, param1, param2, param3] = arguments; + +Services.prefs.setStringPref('prio.publicKeyA', publicKeyA); +Services.prefs.setStringPref('prio.publicKeyB', publicKeyB); + +async function test() { + let params = { + 'browserIsUserDefault': Number(param1), + 'safeModeUsage': Number(param2), + 'startupCrashDetected': Number(param3) + }; + + try { + let result = await PrioEncoder.encode(batchID, params); + + const toTypedArray = byteString => { + let u8Array = new Uint8Array(byteString.length); + for (let i in byteString) { + u8Array[i] = byteString.charCodeAt(i); + } + return u8Array; + } + + const toHexString = bytes => + bytes.reduce((str, byte) => str + byte.toString(16).padStart(2, '0') + ',', ''); + + console.log(toHexString(toTypedArray(result.a)) + '$' + toHexString(toTypedArray(result.b))); + console.log(''); + } catch(e) { + console.log('Failure.', e); + console.log(v); + } +} + +test().then();
new file mode 100644 --- /dev/null +++ b/third_party/prio/browser-test/main.c @@ -0,0 +1,319 @@ +/* + * Copyright (c) 2018, Henry Corrigan-Gibbs + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#define _GNU_SOURCE + +#include <mprio.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "prio/encrypt.h" +#include "prio/util.h" + +static void +init_data (bool *data, int datalen) +{ + // The client's data submission is an arbitrary boolean vector. + for (int i=0; i < datalen; i++) { + // Arbitrary data + data[i] = rand () % 2; + } +} + +static SECStatus +read_string_from_hex (unsigned char **str_out, unsigned int *strLen, + const char *input, const char **new_input) +{ + SECStatus rv = SECSuccess; + *strLen = 0; + int read = 0; + int outCount = 0; + const char *inp = input; + + while (true) { + unsigned char byte = '\0'; + const int retval = sscanf(inp, "%02hhx,%n", &byte, &read); + if (retval < 1 || read != 3) { + break; + } + + inp += read; + (*str_out)[outCount] = byte; + outCount++; + *strLen = *strLen + 1; + } + + if (new_input) + *new_input = inp + 1; + + return rv; +} + +static SECStatus +read_browser_reply (FILE *infile, + unsigned char **for_server_a, unsigned int *aLen, + unsigned char **for_server_b, unsigned int *bLen) +{ + SECStatus rv = SECFailure; + char *raw_input = NULL; + size_t rawLen = 0; + + puts ("Getting line of input."); + P_CHECKCB (getline (&raw_input, &rawLen, infile) > 0); + puts ("Got line of input."); + + P_CHECKA (*for_server_a = malloc (rawLen * sizeof (unsigned char))); + P_CHECKA (*for_server_b = malloc (rawLen * sizeof (unsigned char))); + + *aLen = 0; + *bLen = 0; + + P_CHECKCB (rawLen > 14); + + // Header is 14 chars long + const char *new_input; + puts ("Reading string A"); + P_CHECKC (read_string_from_hex (for_server_a, aLen, raw_input + 14, &new_input)); + puts ("Read string A"); + + // Skip over for_server_a string and one-char delimeter + puts ("Reading string B"); + P_CHECKC (read_string_from_hex (for_server_b, bLen, new_input, NULL)); + puts ("Read string B"); + +cleanup: + if (raw_input) free (raw_input); + return rv; +} + +static int +verify_full (const char *path_to_xpcshell, int pathlen) +{ + SECStatus rv = SECSuccess; + + PublicKey pkA = NULL; + PublicKey pkB = NULL; + PrivateKey skA = NULL; + PrivateKey skB = NULL; + + PrioConfig cfg = NULL; + PrioServer sA = NULL; + PrioServer sB = NULL; + PrioVerifier vA = NULL; + PrioVerifier vB = NULL; + PrioPacketVerify1 p1A = NULL; + PrioPacketVerify1 p1B = NULL; + PrioPacketVerify2 p2A = NULL; + PrioPacketVerify2 p2B = NULL; + PrioTotalShare tA = NULL; + PrioTotalShare tB = NULL; + + FILE *shell = NULL; + int cmdlen = pathlen + 2*CURVE25519_KEY_LEN_HEX + 128; + char cmd[cmdlen]; + memset (cmd, 0, cmdlen); + + unsigned char *for_server_a = NULL; + unsigned char *for_server_b = NULL; + + const int seed = rand (); + srand (seed); + printf ("Using srand seed %d\n", seed); + + // Number of different boolean data fields we collect. + const int ndata = 3; + + //unsigned char batch_id_str[] = "abcde"; + unsigned char batch_id_str[32]; + memset (batch_id_str, 0, sizeof batch_id_str); + snprintf ((char *)batch_id_str, sizeof batch_id_str, "%d", rand()); + + bool data_items[ndata]; + unsigned long output[ndata]; + init_data (data_items, ndata); + + // Initialize NSS random number generator. + P_CHECKC (Prio_init ()); + + // Generate keypairs for servers + P_CHECKC (Keypair_new (&skA, &pkA)); + P_CHECKC (Keypair_new (&skB, &pkB)); + + // Export public keys to hex and print to stdout + unsigned char pk_hexA[CURVE25519_KEY_LEN_HEX+1]; + unsigned char pk_hexB[CURVE25519_KEY_LEN_HEX+1]; + P_CHECKC (PublicKey_export_hex (pkA, pk_hexA)); + P_CHECKC (PublicKey_export_hex (pkB, pk_hexB)); + + snprintf (cmd, cmdlen, "%s %s %s %s %s %d %d %d", + path_to_xpcshell, "encode-once.js", + pk_hexA, pk_hexB, batch_id_str, + data_items[0], data_items[1], data_items[2]); + + printf ("> %s\n", cmd); + P_CHECKA (shell = popen(cmd, "r")); + puts("Ran command."); + + // Use the default configuration parameters. + P_CHECKA (cfg = PrioConfig_new (ndata, pkA, pkB, batch_id_str, + strlen ((char *)batch_id_str))); + + PrioPRGSeed server_secret; + P_CHECKC (PrioPRGSeed_randomize (&server_secret)); + + // Initialize two server objects. The role of the servers need not + // be symmetric. In a deployment, we envision that: + // * Server A is the main telemetry server that is always online. + // Clients send their encrypted data packets to Server A and + // Server A stores them. + // * Server B only comes online when the two servers want to compute + // the final aggregate statistics. + P_CHECKA (sA = PrioServer_new (cfg, PRIO_SERVER_A, skA, server_secret)); + P_CHECKA (sB = PrioServer_new (cfg, PRIO_SERVER_B, skB, server_secret)); + + // Initialize empty verifier objects + P_CHECKA (vA = PrioVerifier_new (sA)); + P_CHECKA (vB = PrioVerifier_new (sB)); + + // Initialize shares of final aggregate statistics + P_CHECKA (tA = PrioTotalShare_new ()); + P_CHECKA (tB = PrioTotalShare_new ()); + + // Initialize shares of verification packets + P_CHECKA (p1A = PrioPacketVerify1_new ()); + P_CHECKA (p1B = PrioPacketVerify1_new ()); + P_CHECKA (p2A = PrioPacketVerify2_new ()); + P_CHECKA (p2B = PrioPacketVerify2_new ()); + + // I. CLIENT DATA SUBMISSION. + // + // Read in the client data packets + unsigned int aLen = 0, bLen = 0; + + puts ("Reading..."); + P_CHECKC (read_browser_reply (shell, &for_server_a, &aLen, &for_server_b, &bLen)); + printf ("Read reply from browser. LenA: %u, LenB: %u\n", aLen, bLen); + + // II. VALIDATION PROTOCOL. (at servers) + // + // The servers now run a short 2-step protocol to check each + // client's packet: + // 1) Servers A and B broadcast one message (PrioPacketVerify1) + // to each other. + // 2) Servers A and B broadcast another message (PrioPacketVerify2) + // to each other. + // 3) Servers A and B can both determine whether the client's data + // submission is well-formed (in which case they add it to their + // running total of aggregate statistics) or ill-formed + // (in which case they ignore it). + // These messages must be sent over an authenticated channel, so + // that each server is assured that every received message came + // from its peer. + + // Set up a Prio verifier object. + P_CHECKC (PrioVerifier_set_data (vA, for_server_a, aLen)); + P_CHECKC (PrioVerifier_set_data (vB, for_server_b, bLen)); + puts("Imported data."); + + // Both servers produce a packet1. Server A sends p1A to Server B + // and vice versa. + P_CHECKC (PrioPacketVerify1_set_data (p1A, vA)); + P_CHECKC (PrioPacketVerify1_set_data (p1B, vB)); + puts("Set data."); + + // Both servers produce a packet2. Server A sends p2A to Server B + // and vice versa. + P_CHECKC (PrioPacketVerify2_set_data(p2A, vA, p1A, p1B)); + P_CHECKC (PrioPacketVerify2_set_data(p2B, vB, p1A, p1B)); + + // Using p2A and p2B, the servers can determine whether the request + // is valid. (In fact, only Server A needs to perform this + // check, since Server A can just tell Server B whether the check + // succeeded or failed.) + puts ("Checking validity."); + P_CHECKC (PrioVerifier_isValid (vA, p2A, p2B)); + P_CHECKC (PrioVerifier_isValid (vB, p2A, p2B)); + puts ("Are valid."); + + // If we get here, the client packet is valid, so add it to the aggregate + // statistic counter for both servers. + P_CHECKC (PrioServer_aggregate (sA, vA)); + P_CHECKC (PrioServer_aggregate (sB, vB)); + + // The servers repeat the steps above for each client submission. + + // III. PRODUCTION OF AGGREGATE STATISTICS. + // + // After collecting aggregates from MANY clients, the servers can compute + // their shares of the aggregate statistics. + // + // Server B can send tB to Server A. + P_CHECKC (PrioTotalShare_set_data (tA, sA)); + P_CHECKC (PrioTotalShare_set_data (tB, sB)); + + // Once Server A has tA and tB, it can learn the aggregate statistics + // in the clear. + P_CHECKC (PrioTotalShare_final (cfg, output, tA, tB)); + + for (int i=0; i < ndata; i++) { + //printf("output[%d] = %lu\n", i, output[i]); + //printf("data[%d] = %d\n", i, (int)data_items[i]); + P_CHECKCB (output[i] == data_items[i]); + } + + puts ("Success!"); + +cleanup: + if (rv != SECSuccess) { + fprintf (stderr, "Warning: unexpected failure.\n"); + } + + if (for_server_a) free (for_server_a); + if (for_server_b) free (for_server_b); + + PrioTotalShare_clear (tA); + PrioTotalShare_clear (tB); + + PrioPacketVerify2_clear (p2A); + PrioPacketVerify2_clear (p2B); + + PrioPacketVerify1_clear (p1A); + PrioPacketVerify1_clear (p1B); + + PrioVerifier_clear (vA); + PrioVerifier_clear (vB); + + PrioServer_clear (sA); + PrioServer_clear (sB); + PrioConfig_clear (cfg); + + PublicKey_clear (pkA); + PublicKey_clear (pkB); + + PrivateKey_clear (skA); + PrivateKey_clear (skB); + + Prio_clear (); + + return !(rv == SECSuccess); +} + +int +main (int argc, char **argv) +{ + puts("== Prio browser test utility. =="); + puts("(Note: Expects to be run in the same directory as encode-once.js.)"); + if (argc != 2) { + fprintf (stderr, "Usage ./%s <path_to_xpcshell>\n", argv[0]); + return 1; + } + + return verify_full (argv[1], strlen (argv[1])); +} +
new file mode 100644 --- /dev/null +++ b/third_party/prio/include/mprio.h @@ -0,0 +1,273 @@ +/* + * Copyright (c) 2018, Henry Corrigan-Gibbs + * + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef __PRIO_H__ +#define __PRIO_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include <msgpack.h> +#include <nss/blapit.h> +#include <nss/pk11pub.h> +#include <nss/seccomon.h> +#include <stdbool.h> +#include <stddef.h> + +/* Seed for a pseudo-random generator (PRG). */ +#define PRG_SEED_LENGTH AES_128_KEY_LENGTH +typedef unsigned char PrioPRGSeed[PRG_SEED_LENGTH]; + +/* Length of a raw curve25519 public key, in bytes. */ +#define CURVE25519_KEY_LEN 32 + +/* Length of a hex-encoded curve25519 public key, in bytes. */ +#define CURVE25519_KEY_LEN_HEX 64 + +/* + * Type for each of the two servers. + */ +typedef enum { + PRIO_SERVER_A, + PRIO_SERVER_B +} PrioServerId; + +/* + * Opaque types + */ +typedef struct prio_config *PrioConfig; +typedef const struct prio_config *const_PrioConfig; + +typedef struct prio_server *PrioServer; +typedef const struct prio_server *const_PrioServer; + +typedef struct prio_verifier *PrioVerifier; +typedef const struct prio_verifier *const_PrioVerifier; + +typedef struct prio_packet_verify1 *PrioPacketVerify1; +typedef const struct prio_packet_verify1 *const_PrioPacketVerify1; + +typedef struct prio_packet_verify2 *PrioPacketVerify2; +typedef const struct prio_packet_verify2 *const_PrioPacketVerify2; + +typedef struct prio_total_share *PrioTotalShare; +typedef const struct prio_total_share *const_PrioTotalShare; + +typedef SECKEYPublicKey *PublicKey; +typedef const SECKEYPublicKey *const_PublicKey; + +typedef SECKEYPrivateKey *PrivateKey; +typedef const SECKEYPrivateKey *const_PrivateKey; + +/* + * Initialize and clear random number generator state. + * You must call Prio_init() before using the library. + * To avoid memory leaks, call Prio_clear() afterwards. + */ +SECStatus Prio_init (); +void Prio_clear(); + +/* + * PrioConfig holds the system parameters. The two relevant things determined + * by the config object are: + * (1) the number of data fields we are collecting, and + * (2) the modulus we use for modular arithmetic. + * The default configuration uses an 87-bit modulus. + * + * The `batch_id` field specifies which "batch" of aggregate statistics we are + * computing. For example, if the aggregate statistics are computed every 24 + * hours, the `batch_id` might be set to an encoding of the date. The clients + * and servers must all use the same `batch_id` for each run of the protocol. + * Each set of aggregate statistics should use a different `batch_id`. + * + * `PrioConfig_new` does not keep a pointer to the `batch_id` string that the + * caller passes in, so you may free the `batch_id` string as soon as + * `PrioConfig_new` returns. + */ +PrioConfig PrioConfig_new (int n_fields, PublicKey server_a, PublicKey server_b, + const unsigned char *batch_id, unsigned int batch_id_len); +void PrioConfig_clear (PrioConfig cfg); +int PrioConfig_numDataFields (const_PrioConfig cfg); + +/* + * Create a PrioConfig object with no encryption keys. This routine is + * useful for testing, but PrioClient_encode() will always fail when used with + * this config. + */ +PrioConfig PrioConfig_newTest (int n_fields); + + +/* + * We use the PublicKey and PrivateKey objects for public-key encryption. Each + * Prio server has an associated public key, and the clients use these keys to + * encrypt messages to the servers. + */ +SECStatus Keypair_new (PrivateKey *pvtkey, PublicKey *pubkey); + +/* + * Import a new curve25519 public key from the raw bytes given. The key passed in + * as `data` should be of length `CURVE25519_KEY_LEN`. This function allocates + * a new PublicKey object, which the caller must free using `PublicKey_clear`. + */ +SECStatus PublicKey_import (PublicKey *pk, const unsigned char *data, unsigned int dataLen); + +/* + * Import a new curve25519 public key from a hex string that contains only the + * characters 0-9a-fA-F. The hex string passed in as `hex_data` should be of + * length `CURVE25519_KEY_LEN_HEX`. This function allocates a new PublicKey + * object, which the caller must free using `PublicKey_clear`. + */ +SECStatus PublicKey_import_hex (PublicKey *pk, const unsigned char *hex_data, + unsigned int dataLen); + +/* + * Export a curve25519 public key as a raw byte-array. + */ +SECStatus PublicKey_export (const_PublicKey pk, unsigned char data[CURVE25519_KEY_LEN]); + +/* + * Export a curve25519 public key as a NULL-terminated hex string. + */ +SECStatus PublicKey_export_hex (const_PublicKey pk, + unsigned char data[CURVE25519_KEY_LEN_HEX+1]); + + +void PublicKey_clear (PublicKey pubkey); +void PrivateKey_clear (PrivateKey pvtkey); + + +/* + * PrioPacketClient_encode + * + * Takes as input a pointer to an array (`data_in`) of boolean values + * whose length is equal to the number of data fields specified in + * the config. It then encodes the data for servers A and B into a + * string. + * + * NOTE: The caller must free() the strings `for_server_a` and + * `for_server_b` to avoid memory leaks. + */ +SECStatus +PrioClient_encode (const_PrioConfig cfg, const bool *data_in, + unsigned char **for_server_a, unsigned int *aLen, + unsigned char **for_server_b, unsigned int *bLen); + +/* + * Generate a new PRG seed using the NSS global randomness source. + * Use this routine to initialize the secret that the two Prio servers + * share. + */ +SECStatus PrioPRGSeed_randomize (PrioPRGSeed *seed); + +/* + * The PrioServer object holds the state of the Prio servers. + * Pass in the _same_ secret PRGSeed when initializing the two servers. + * The PRGSeed must remain secret to the two servers. + */ +PrioServer PrioServer_new (const_PrioConfig cfg, PrioServerId server_idx, + PrivateKey server_priv, const PrioPRGSeed server_shared_secret); +void PrioServer_clear (PrioServer s); + + +/* + * After receiving a client packet, each of the servers generate + * a PrioVerifier object that they use to check whether the client's + * encoded packet is well formed. + */ +PrioVerifier PrioVerifier_new (PrioServer s); +void PrioVerifier_clear (PrioVerifier v); + +/* + * Read in encrypted data from the client, decrypt it, and prepare to check the + * request for validity. + */ +SECStatus PrioVerifier_set_data (PrioVerifier v, + unsigned char *data, unsigned int dataLen); + +/* + * Generate the first packet that servers need to exchange to verify the + * client's submission. This should be sent over a TLS connection between the + * servers. + */ +PrioPacketVerify1 PrioPacketVerify1_new (void); +void PrioPacketVerify1_clear (PrioPacketVerify1 p1); + +SECStatus PrioPacketVerify1_set_data (PrioPacketVerify1 p1, + const_PrioVerifier v); + +SECStatus PrioPacketVerify1_write (const_PrioPacketVerify1 p, + msgpack_packer *pk); +SECStatus PrioPacketVerify1_read (PrioPacketVerify1 p, + msgpack_unpacker *upk, const_PrioConfig cfg); + +/* + * Generate the second packet that the servers need to exchange to verify the + * client's submission. The routine takes as input the PrioPacketVerify1 + * packets from both server A and server B. + * + * This should be sent over a TLS connection between the servers. + */ +PrioPacketVerify2 PrioPacketVerify2_new (void); +void PrioPacketVerify2_clear (PrioPacketVerify2 p); + +SECStatus PrioPacketVerify2_set_data (PrioPacketVerify2 p2, const_PrioVerifier v, + const_PrioPacketVerify1 p1A, const_PrioPacketVerify1 p1B); + +SECStatus PrioPacketVerify2_write (const_PrioPacketVerify2 p, + msgpack_packer *pk); +SECStatus PrioPacketVerify2_read (PrioPacketVerify2 p, + msgpack_unpacker *upk, const_PrioConfig cfg); + +/* + * Use the PrioPacketVerify2s from both servers to check whether + * the client's submission is well formed. + */ +SECStatus PrioVerifier_isValid (const_PrioVerifier v, + const_PrioPacketVerify2 pA, const_PrioPacketVerify2 pB); + +/* + * Each of the two servers calls this routine to aggregate the data + * submission from a client that is included in the PrioVerifier object. + * + * IMPORTANT: This routine does *not* check the validity of the client's + * data packet. The servers must execute the verification checks + * above before aggregating any client data. + */ +SECStatus PrioServer_aggregate (PrioServer s, PrioVerifier v); + +/* + * After the servers have aggregated data packets from "enough" clients + * (this determines the anonymity set size), each server runs this routine + * to get a share of the aggregate statistics. + */ +PrioTotalShare PrioTotalShare_new (void); +void PrioTotalShare_clear (PrioTotalShare t); + +SECStatus PrioTotalShare_set_data (PrioTotalShare t, const_PrioServer s); + +SECStatus PrioTotalShare_write (const_PrioTotalShare t, + msgpack_packer *pk); +SECStatus PrioTotalShare_read (PrioTotalShare t, + msgpack_unpacker *upk, const_PrioConfig cfg); + +/* + * Read the output data into an array of unsigned longs. You should + * be sure that each data value can fit into a single long and that + * the pointer `output` points to a buffer large enough to store + * one long per data field. + */ +SECStatus PrioTotalShare_final (const_PrioConfig cfg, unsigned long *output, + const_PrioTotalShare tA, const_PrioTotalShare tB); + + +#endif /* __PRIO_H__ */ + +#ifdef __cplusplus +} +#endif
new file mode 100644 --- /dev/null +++ b/third_party/prio/pclient/SConscript @@ -0,0 +1,18 @@ +import sys + +Import('env') + +prio_env = env.Clone() + +src = [ + "main.c", +] + +libs = [ + "mprio", + "msgpackc", +] + +prio_env.Append(LIBS = libs) +prio_env.Program("pclient", src) +
new file mode 100644 --- /dev/null +++ b/third_party/prio/pclient/main.c @@ -0,0 +1,229 @@ +/* + * Copyright (c) 2018, Henry Corrigan-Gibbs + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <mprio.h> +#include <stdio.h> +#include <stdlib.h> + +#include "prio/util.h" + +int +verify_full (void) +{ + SECStatus rv = SECSuccess; + + PublicKey pkA = NULL; + PublicKey pkB = NULL; + PrivateKey skA = NULL; + PrivateKey skB = NULL; + + PrioConfig cfg = NULL; + PrioServer sA = NULL; + PrioServer sB = NULL; + PrioVerifier vA = NULL; + PrioVerifier vB = NULL; + PrioPacketVerify1 p1A = NULL; + PrioPacketVerify1 p1B = NULL; + PrioPacketVerify2 p2A = NULL; + PrioPacketVerify2 p2B = NULL; + PrioTotalShare tA = NULL; + PrioTotalShare tB = NULL; + + unsigned char *for_server_a = NULL; + unsigned char *for_server_b = NULL; + + const unsigned char *batch_id = (unsigned char *)"prio_batch_2018-04-17"; + const unsigned int batch_id_len = strlen ((char *)batch_id); + + // Initialize NSS random number generator. + P_CHECKC (Prio_init ()); + + // Number of different boolean data fields we collect. + const int ndata = 100; + + // Number of clients to simulate. + const int nclients = 10; + + + // New scope to avoid goto weirdness + { + bool data_items[ndata]; + + // Generate keypairs for servers + P_CHECKC (Keypair_new (&skA, &pkA)); + P_CHECKC (Keypair_new (&skB, &pkB)); + + // Use the default configuration parameters. + P_CHECKA (cfg = PrioConfig_new (ndata, pkA, pkB, batch_id, batch_id_len)); + + PrioPRGSeed server_secret; + P_CHECKC (PrioPRGSeed_randomize (&server_secret)); + + // Initialize two server objects. The role of the servers need not + // be symmetric. In a deployment, we envision that: + // * Server A is the main telemetry server that is always online. + // Clients send their encrypted data packets to Server A and + // Server A stores them. + // * Server B only comes online when the two servers want to compute + // the final aggregate statistics. + P_CHECKA (sA = PrioServer_new (cfg, PRIO_SERVER_A, skA, server_secret)); + P_CHECKA (sB = PrioServer_new (cfg, PRIO_SERVER_B, skB, server_secret)); + + // Initialize empty verifier objects + P_CHECKA (vA = PrioVerifier_new (sA)); + P_CHECKA (vB = PrioVerifier_new (sB)); + + // Initialize shares of final aggregate statistics + P_CHECKA (tA = PrioTotalShare_new ()); + P_CHECKA (tB = PrioTotalShare_new ()); + + // Initialize shares of verification packets + P_CHECKA (p1A = PrioPacketVerify1_new ()); + P_CHECKA (p1B = PrioPacketVerify1_new ()); + P_CHECKA (p2A = PrioPacketVerify2_new ()); + P_CHECKA (p2B = PrioPacketVerify2_new ()); + + // Generate client data packets. + for (int c=0; c < nclients; c++) { + + // The client's data submission is an arbitrary boolean vector. + for (int i=0; i < ndata; i++) { + // Arbitrary data + data_items[i] = (i % 3 == 1) || (c % 5 == 3); + } + + // I. CLIENT DATA SUBMISSION. + // + // Construct the client data packets. + unsigned int aLen, bLen; + P_CHECKC (PrioClient_encode (cfg, data_items, + &for_server_a, &aLen, &for_server_b, &bLen)); + + // The Prio servers A and B can come online later (e.g., at the end of + // each day) to download the encrypted telemetry packets from the + // telemetry server and run the protocol that computes the aggregate + // statistics. In this way, the client only needs to send a + // single message (the pair of encrypted ClientPacketData packets) + // to a single server (the telemetry-data-collection server). + + // THE CLIENT'S JOB IS DONE. The rest of the processing just takes place + // between the two servers A and B. + + + // II. VALIDATION PROTOCOL. (at servers) + // + // The servers now run a short 2-step protocol to check each + // client's packet: + // 1) Servers A and B broadcast one message (PrioPacketVerify1) + // to each other. + // 2) Servers A and B broadcast another message (PrioPacketVerify2) + // to each other. + // 3) Servers A and B can both determine whether the client's data + // submission is well-formed (in which case they add it to their + // running total of aggregate statistics) or ill-formed + // (in which case they ignore it). + // These messages must be sent over an authenticated channel, so + // that each server is assured that every received message came + // from its peer. + + // Set up a Prio verifier object. + P_CHECKC (PrioVerifier_set_data (vA, for_server_a, aLen)); + P_CHECKC (PrioVerifier_set_data (vB, for_server_b, bLen)); + + // Both servers produce a packet1. Server A sends p1A to Server B + // and vice versa. + P_CHECKC (PrioPacketVerify1_set_data (p1A, vA)); + P_CHECKC (PrioPacketVerify1_set_data (p1B, vB)); + + // Both servers produce a packet2. Server A sends p2A to Server B + // and vice versa. + P_CHECKC (PrioPacketVerify2_set_data(p2A, vA, p1A, p1B)); + P_CHECKC (PrioPacketVerify2_set_data(p2B, vB, p1A, p1B)); + + // Using p2A and p2B, the servers can determine whether the request + // is valid. (In fact, only Server A needs to perform this + // check, since Server A can just tell Server B whether the check + // succeeded or failed.) + P_CHECKC (PrioVerifier_isValid (vA, p2A, p2B)); + P_CHECKC (PrioVerifier_isValid (vB, p2A, p2B)); + + // If we get here, the client packet is valid, so add it to the aggregate + // statistic counter for both servers. + P_CHECKC (PrioServer_aggregate (sA, vA)); + P_CHECKC (PrioServer_aggregate (sB, vB)); + + free (for_server_a); + free (for_server_b); + for_server_a = NULL; + for_server_b = NULL; + } + + // The servers repeat the steps above for each client submission. + + // III. PRODUCTION OF AGGREGATE STATISTICS. + // + // After collecting aggregates from MANY clients, the servers can compute + // their shares of the aggregate statistics. + // + // Server B can send tB to Server A. + P_CHECKC (PrioTotalShare_set_data (tA, sA)); + P_CHECKC (PrioTotalShare_set_data (tB, sB)); + + // Once Server A has tA and tB, it can learn the aggregate statistics + // in the clear. + unsigned long output[ndata]; + P_CHECKC (PrioTotalShare_final (cfg, output, tA, tB)); + + // Now the output[i] contains a counter that indicates how many clients + // submitted TRUE for data value i. We print out this data. + for (int i=0; i < ndata; i++) + printf("output[%d] = %lu\n", i, output[i]); + } + +cleanup: + if (rv != SECSuccess) { + fprintf (stderr, "Warning: unexpected failure.\n"); + } + + if (for_server_a) free (for_server_a); + if (for_server_b) free (for_server_b); + + PrioTotalShare_clear (tA); + PrioTotalShare_clear (tB); + + PrioPacketVerify2_clear (p2A); + PrioPacketVerify2_clear (p2B); + + PrioPacketVerify1_clear (p1A); + PrioPacketVerify1_clear (p1B); + + PrioVerifier_clear (vA); + PrioVerifier_clear (vB); + + PrioServer_clear (sA); + PrioServer_clear (sB); + PrioConfig_clear (cfg); + + PublicKey_clear (pkA); + PublicKey_clear (pkB); + + PrivateKey_clear (skA); + PrivateKey_clear (skB); + + Prio_clear (); + + return !(rv == SECSuccess); +} + +int +main (void) +{ + puts ("This utility demonstrates how to invoke the Prio API."); + return verify_full (); +} +
new file mode 100644 --- /dev/null +++ b/third_party/prio/prio/SConscript @@ -0,0 +1,29 @@ +import os + +Import('env') + +penv = env.Clone() + +src = [ + "client.c", + "config.c", + "encrypt.c", + "mparray.c", + "poly.c", + "rand.c", + "prg.c", + "server.c", + "serial.c", + "share.c", +] + +libs = [ + "msgpackc" +] + +# Enable mp_print() +penv.Append(CFLAGS = ['-DMP_IOFUNC']) + +penv.Append(LIBS = libs) +penv.StaticLibrary("mprio", src) +
new file mode 100644 --- /dev/null +++ b/third_party/prio/prio/client.c @@ -0,0 +1,353 @@ +/* + * Copyright (c) 2018, Henry Corrigan-Gibbs + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include <mpi.h> +#include <mprio.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "client.h" +#include "config.h" +#include "encrypt.h" +#include "poly.h" +#include "rand.h" +#include "serial.h" +#include "share.h" +#include "util.h" + +// Let the points of data_in be [x1, x2, x3, ... ]. +// We construct the polynomial f such that +// (a) f(0) = random, +// (b) f(i) = x_i for all i >= 1, +// (c) degree(f)+1 is a power of two. +// We then evaluate f at the 2N-th roots of unity +// and we return these evaluations as `evals_out` +// and we return f(0) as `const_term`. +static SECStatus +data_polynomial_evals(const_PrioConfig cfg, const_MPArray data_in, + MPArray evals_out, mp_int *const_term) +{ + SECStatus rv = SECSuccess; + const mp_int *mod = &cfg->modulus; + MPArray points_f = NULL; + MPArray poly_f = NULL; + + // Number of multiplication gates in the Valid() circuit. + const int mul_gates = cfg->num_data_fields; + + // Little n is the number of points on the polynomials. + // The constant term is randomized, so it's (mul_gates + 1). + const int n = mul_gates + 1; + + // Big N is n rounded up to a power of two. + const int N = next_power_of_two (n); + + P_CHECKA (points_f = MPArray_new (N)); + P_CHECKA (poly_f = MPArray_new (N)); + + // Set constant term f(0) to random + P_CHECKC (rand_int (&points_f->data[0], mod)); + MP_CHECKC (mp_copy (&points_f->data[0], const_term)); + + // Set other values of f(x) + for (int i=1; i<n; i++) { + MP_CHECKC (mp_copy (&data_in->data[i-1], &points_f->data[i])); + } + + // Interpolate through the Nth roots of unity + P_CHECKC (poly_fft(poly_f, points_f, cfg, true)); + + // Evaluate at all 2N-th roots of unity. + // To do so, first resize the eval arrays and fill upper + // values with zeros. + P_CHECKC (MPArray_resize (poly_f, 2*N)); + P_CHECKC (MPArray_resize (evals_out, 2*N)); + + // Evaluate at the 2N-th roots of unity + P_CHECKC (poly_fft(evals_out, poly_f, cfg, false)); + +cleanup: + MPArray_clear (points_f); + MPArray_clear (poly_f); + + return rv; +} + + +static SECStatus +share_polynomials (const_PrioConfig cfg, const_MPArray data_in, + PrioPacketClient pA, PrioPacketClient pB, PRG prgB) +{ + SECStatus rv = SECSuccess; + const mp_int *mod = &cfg->modulus; + const_MPArray points_f = data_in; + + mp_int f0, g0; + MP_DIGITS (&f0) = NULL; + MP_DIGITS (&g0) = NULL; + + MPArray points_g = NULL; + MPArray evals_f_2N = NULL; + MPArray evals_g_2N = NULL; + + P_CHECKA (points_g = MPArray_dup (points_f)); + P_CHECKA (evals_f_2N = MPArray_new (0)); + P_CHECKA (evals_g_2N = MPArray_new (0)); + MP_CHECKC (mp_init (&f0)); + MP_CHECKC (mp_init (&g0)); + + for (int i=0; i<points_f->len; i++) { + // For each input value x_i, we compute x_i * (x_i-1). + // f(i) = x_i + // g(i) = x_i - 1 + MP_CHECKC (mp_sub_d (&points_g->data[i], 1, &points_g->data[i])); + MP_CHECKC (mp_mod (&points_g->data[i], mod, &points_g->data[i])); + } + + P_CHECKC (data_polynomial_evals(cfg, points_f, evals_f_2N, &f0)); + P_CHECKC (data_polynomial_evals(cfg, points_g, evals_g_2N, &g0)); + + // The values f(0) and g(0) are set to random values. + // We must send to each server a share of the points + // f(0), g(0), and h(0) = f(0)*g(0) + P_CHECKC (share_int (cfg, &f0, &pA->f0_share, &pB->f0_share)); + P_CHECKC (share_int (cfg, &g0, &pA->g0_share, &pB->g0_share)); + + // Compute h(0) = f(0)*g(0). + MP_CHECKC (mp_mulmod (&f0, &g0, mod, &f0)); + // Give one share of h(0) to each server. + P_CHECKC (share_int (cfg, &f0, &pA->h0_share, &pB->h0_share)); + + //const int lenN = (evals_f_2N->len/2); + //P_CHECKC (MPArray_resize (pA->shares.A.h_points, lenN)); + + // We need to send to the servers the evaluations of + // f(r) * g(r) + // for all 2N-th roots of unity r that are not also + // N-th roots of unity. + // + // For each such root r, compute h(r) = f(r)*g(r) and + // send a share of this value to each server. + int j = 0; + for (int i = 1; i < evals_f_2N->len; i += 2) { + MP_CHECKC (mp_mulmod (&evals_f_2N->data[i], &evals_g_2N->data[i], mod, &f0)); + P_CHECKC (PRG_share_int (prgB, &pA->shares.A.h_points->data[j], &f0, cfg)); + j++; + } + +cleanup: + MPArray_clear (evals_f_2N); + MPArray_clear (evals_g_2N); + MPArray_clear (points_g); + mp_clear (&f0); + mp_clear (&g0); + return rv; +} + +PrioPacketClient +PrioPacketClient_new (const_PrioConfig cfg, PrioServerId for_server) +{ + SECStatus rv = SECSuccess; + const int data_len = cfg->num_data_fields; + PrioPacketClient p = NULL; + p = malloc (sizeof (*p)); + if (!p) return NULL; + + p->for_server = for_server; + p->triple = NULL; + MP_DIGITS (&p->f0_share) = NULL; + MP_DIGITS (&p->g0_share) = NULL; + MP_DIGITS (&p->h0_share) = NULL; + + switch (p->for_server) { + case PRIO_SERVER_A: + p->shares.A.data_shares = NULL; + p->shares.A.h_points = NULL; + break; + case PRIO_SERVER_B: + memset (p->shares.B.seed, 0, PRG_SEED_LENGTH); + break; + default: + // Should never get here + rv = SECFailure; + goto cleanup; + } + + MP_CHECKC (mp_init (&p->f0_share)); + MP_CHECKC (mp_init (&p->g0_share)); + MP_CHECKC (mp_init (&p->h0_share)); + P_CHECKA (p->triple = BeaverTriple_new ()); + + if (p->for_server == PRIO_SERVER_A) { + const int num_h_points = PrioConfig_hPoints (cfg); + P_CHECKA (p->shares.A.data_shares = MPArray_new (data_len)); + P_CHECKA (p->shares.A.h_points = MPArray_new (num_h_points)); + } + +cleanup: + if (rv != SECSuccess) { + PrioPacketClient_clear (p); + return NULL; + } + + return p; +} + +SECStatus +PrioPacketClient_set_data (const_PrioConfig cfg, const bool *data_in, + PrioPacketClient pA, PrioPacketClient pB) +{ + MPArray client_data = NULL; + PRG prgB = NULL; + SECStatus rv = SECSuccess; + const int data_len = cfg->num_data_fields; + + if (!data_in) return SECFailure; + + P_CHECKC (PrioPRGSeed_randomize (&pB->shares.B.seed)); + P_CHECKA (prgB = PRG_new (pB->shares.B.seed)); + + P_CHECKC (BeaverTriple_set_rand (cfg, pA->triple, pB->triple)); + P_CHECKA (client_data = MPArray_new_bool (data_len, data_in)); + P_CHECKC (PRG_share_array (prgB, pA->shares.A.data_shares, + client_data, cfg)); + P_CHECKC (share_polynomials (cfg, client_data, pA, pB, prgB)); + +cleanup: + MPArray_clear (client_data); + PRG_clear (prgB); + + return rv; +} + +void +PrioPacketClient_clear (PrioPacketClient p) +{ + if (p == NULL) return; + + if (p->for_server == PRIO_SERVER_A) { + MPArray_clear (p->shares.A.h_points); + MPArray_clear (p->shares.A.data_shares); + } + + BeaverTriple_clear (p->triple); + mp_clear (&p->f0_share); + mp_clear (&p->g0_share); + mp_clear (&p->h0_share); + free (p); +} + +bool +PrioPacketClient_areEqual (const_PrioPacketClient p1, + const_PrioPacketClient p2) +{ + if (!BeaverTriple_areEqual (p1->triple, p2->triple)) return false; + if (mp_cmp (&p1->f0_share, &p2->f0_share)) return false; + if (mp_cmp (&p1->g0_share, &p2->g0_share)) return false; + if (mp_cmp (&p1->h0_share, &p2->h0_share)) return false; + if (p1->for_server != p2->for_server) return false; + + switch (p1->for_server) { + case PRIO_SERVER_A: + if (!MPArray_areEqual (p1->shares.A.data_shares, + p2->shares.A.data_shares)) return false; + if (!MPArray_areEqual (p1->shares.A.h_points, + p2->shares.A.h_points)) return false; + break; + case PRIO_SERVER_B: + if (memcmp (p1->shares.B.seed, p2->shares.B.seed, + PRG_SEED_LENGTH)) return false; + break; + default: + // Should never get here. + return false; + } + + return true; +} + +SECStatus +PrioClient_encode (const_PrioConfig cfg, const bool *data_in, + unsigned char **for_server_a, unsigned int *aLen, + unsigned char **for_server_b, unsigned int *bLen) +{ + SECStatus rv = SECSuccess; + PrioPacketClient pA = NULL; + PrioPacketClient pB = NULL; + *for_server_a = NULL; + *for_server_b = NULL; + + P_CHECKA (pA = PrioPacketClient_new (cfg, PRIO_SERVER_A)); + P_CHECKA (pB = PrioPacketClient_new (cfg, PRIO_SERVER_B)); + + msgpack_sbuffer sbufA, sbufB; + msgpack_packer packerA, packerB; + + msgpack_sbuffer_init (&sbufA); + msgpack_sbuffer_init (&sbufB); + msgpack_packer_init (&packerA, &sbufA, msgpack_sbuffer_write); + msgpack_packer_init (&packerB, &sbufB, msgpack_sbuffer_write); + + P_CHECKC (PrioPacketClient_set_data (cfg, data_in, pA, pB)); + P_CHECKC (serial_write_packet_client (&packerA, pA, cfg)); + P_CHECKC (serial_write_packet_client (&packerB, pB, cfg)); + + P_CHECKC (PublicKey_encryptSize (sbufA.size, aLen)); + P_CHECKC (PublicKey_encryptSize (sbufB.size, bLen)); + + P_CHECKA (*for_server_a = malloc (*aLen)); + P_CHECKA (*for_server_b = malloc (*bLen)); + + unsigned int writtenA; + unsigned int writtenB; + P_CHECKC (PublicKey_encrypt (cfg->server_a_pub, *for_server_a, &writtenA, *aLen, + (unsigned char *)sbufA.data, sbufA.size)); + P_CHECKC (PublicKey_encrypt (cfg->server_b_pub, *for_server_b, &writtenB, *bLen, + (unsigned char *)sbufB.data, sbufB.size)); + + P_CHECKCB (writtenA == *aLen); + P_CHECKCB (writtenB == *bLen); + +cleanup: + if (rv != SECSuccess) { + if (*for_server_a) free (*for_server_a); + if (*for_server_b) free (*for_server_b); + *for_server_a = NULL; + *for_server_b = NULL; + } + + PrioPacketClient_clear (pA); + PrioPacketClient_clear (pB); + msgpack_sbuffer_destroy (&sbufA); + msgpack_sbuffer_destroy (&sbufB); + + return rv; +} + +SECStatus +PrioPacketClient_decrypt (PrioPacketClient p, const_PrioConfig cfg, + PrivateKey server_priv, const unsigned char *data_in, unsigned int data_len) +{ + SECStatus rv = SECSuccess; + msgpack_unpacker upk; + P_CHECKCB (msgpack_unpacker_init (&upk, data_len)); + + // Decrypt the ciphertext into dec_buf + unsigned int bytes_decrypted; + P_CHECKC (PrivateKey_decrypt (server_priv, + (unsigned char *)msgpack_unpacker_buffer (&upk), &bytes_decrypted, + data_len, data_in, data_len)); + msgpack_unpacker_buffer_consumed (&upk, bytes_decrypted); + + P_CHECKC (serial_read_packet_client (&upk, p, cfg)); + +cleanup: + msgpack_unpacker_destroy (&upk); + return rv; +} +
new file mode 100644 --- /dev/null +++ b/third_party/prio/prio/client.h @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2018, Henry Corrigan-Gibbs + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef __CLIENT_H__ +#define __CLIENT_H__ + +#include "mparray.h" +#include "prg.h" +#include "share.h" + + +/* + * The PrioPacketClient object holds the encoded client data. + * The client sends one packet to server A and one packet to + * server B. The `for_server` parameter determines which server + * the packet is for. + */ +typedef struct prio_packet_client *PrioPacketClient; +typedef const struct prio_packet_client *const_PrioPacketClient; + +struct server_a_data { + // These values are only set for server A. + MPArray data_shares; + MPArray h_points; +}; + +struct server_b_data { + // This value is only used for server B. + // + // We use a pseudo-random generator to compress the secret-shared data + // values. See Appendix I of the Prio paper (the paragraph starting + // "Optimization: PRG secret sharing.") for details on this. + PrioPRGSeed seed; +}; + +/* + * The data that a Prio client sends to each server. + */ +struct prio_packet_client { + // TODO: Can also use a PRG to avoid need for sending Beaver triple shares. + // Since this optimization only saves ~30 bytes of communication, we haven't + // bothered implementing it yet. + BeaverTriple triple; + + mp_int f0_share, g0_share, h0_share; + PrioServerId for_server; + + union { + struct server_a_data A; + struct server_b_data B; + } shares; +}; + + +PrioPacketClient PrioPacketClient_new (const_PrioConfig cfg, PrioServerId for_server); +void PrioPacketClient_clear (PrioPacketClient p); +SECStatus PrioPacketClient_set_data (const_PrioConfig cfg, const bool *data_in, + PrioPacketClient for_server_a, PrioPacketClient for_server_b); + +SECStatus PrioPacketClient_decrypt (PrioPacketClient p, + const_PrioConfig cfg, PrivateKey server_priv, + const unsigned char *data_in, unsigned int data_len); + +bool PrioPacketClient_areEqual (const_PrioPacketClient p1, + const_PrioPacketClient p2); + + +#endif /* __CLIENT_H__ */ +
new file mode 100644 --- /dev/null +++ b/third_party/prio/prio/config.c @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2018, Henry Corrigan-Gibbs + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <mprio.h> +#include <stdlib.h> + +#include "config.h" +#include "params.h" +#include "mparray.h" +#include "rand.h" +#include "util.h" + +// The PrioConfig object stores "2^k-th roots of unity" modulo +// the prime modulus we use for all arithmetic. We use +// these roots to perform fast FFT-style polynomial +// interpolation and evaluation. +// +// In particular, we use a prime modulus p such that +// p = (2^k)q + 1. +// The roots are integers such that r^{2^k} = 1 mod p. +static SECStatus +initialize_roots (MPArray arr, const char *values[]) +{ + // TODO: Read in only the number of roots of unity we need. + // Right now we read in all 4096 roots whether or not we use + // them all. + for (int i=0; i < arr->len; i++) { + MP_CHECK (mp_read_radix (&arr->data[i], values[i], 16)); + } + + return SECSuccess; +} + +PrioConfig +PrioConfig_new (int n_fields, PublicKey server_a, PublicKey server_b, + const unsigned char *batch_id, unsigned int batch_id_len) +{ + SECStatus rv = SECSuccess; + PrioConfig cfg = malloc (sizeof (*cfg)); + if (!cfg) + return NULL; + + cfg->batch_id = NULL; + cfg->batch_id_len = batch_id_len; + cfg->server_a_pub = server_a; + cfg->server_b_pub = server_b; + cfg->num_data_fields = n_fields; + cfg->n_roots = 1 << Generator2Order; + MP_DIGITS(&cfg->modulus) = NULL; + MP_DIGITS(&cfg->inv2) = NULL; + cfg->roots = NULL; + cfg->rootsInv = NULL; + + if (cfg->num_data_fields >= cfg->n_roots) { + rv = SECFailure; + goto cleanup; + } + + P_CHECKA (cfg->batch_id = malloc (batch_id_len)); + strncpy ((char *)cfg->batch_id, (char *)batch_id, batch_id_len); + + MP_CHECKC (mp_init (&cfg->modulus)); + MP_CHECKC (mp_read_radix (&cfg->modulus, Modulus, 16)); + + // Compute 2^{-1} modulo M + MP_CHECKC (mp_init (&cfg->inv2)); + mp_set (&cfg->inv2, 2); + MP_CHECKC (mp_invmod (&cfg->inv2, &cfg->modulus, &cfg->inv2)); + + P_CHECKA (cfg->roots = MPArray_new (cfg->n_roots)); + P_CHECKA (cfg->rootsInv = MPArray_new (cfg->n_roots)); + MP_CHECKC (initialize_roots (cfg->roots, Roots)); + MP_CHECKC (initialize_roots (cfg->rootsInv, RootsInv)); + +cleanup: + if (rv != SECSuccess) { + PrioConfig_clear (cfg); + return NULL; + } + + return cfg; +} + +PrioConfig +PrioConfig_newTest (int nFields) +{ + return PrioConfig_new (nFields, NULL, NULL, + (unsigned char *)"testBatch", 9); +} + +void +PrioConfig_clear (PrioConfig cfg) +{ + if (!cfg) return; + if (cfg->batch_id) free (cfg->batch_id); + MPArray_clear (cfg->roots); + MPArray_clear (cfg->rootsInv); + mp_clear (&cfg->modulus); + mp_clear (&cfg->inv2); + free (cfg); +} + +int +PrioConfig_numDataFields (const_PrioConfig cfg) +{ + return cfg->num_data_fields; + +} + +SECStatus +Prio_init (void) +{ + return rand_init (); +} + +void +Prio_clear (void) +{ + rand_clear (); +} + +int PrioConfig_hPoints (const_PrioConfig cfg) +{ + const int mul_gates = cfg->num_data_fields + 1; + const int N = next_power_of_two (mul_gates); + return N; +}
new file mode 100644 --- /dev/null +++ b/third_party/prio/prio/config.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2018, Henry Corrigan-Gibbs + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +#include <mpi.h> + +#include "mparray.h" + +struct prio_config { + int num_data_fields; + unsigned char *batch_id; + unsigned int batch_id_len; + + + PublicKey server_a_pub; + PublicKey server_b_pub; + + mp_int modulus; + mp_int inv2; + + int n_roots; + MPArray roots; + MPArray rootsInv; +}; + +int PrioConfig_hPoints (const_PrioConfig cfg); + +#endif /* __CONFIG_H__ */ +
new file mode 100644 --- /dev/null +++ b/third_party/prio/prio/debug.h @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2018, Henry Corrigan-Gibbs + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef __DEBUG_H__ +#define __DEBUG_H__ + +#include <stdio.h> + +#ifdef DEBUG +#define PRIO_DEBUG(msg) do { fprintf(stderr, "Error: %s\n", msg); } while(false); +#else +#define PRIO_DEBUG(msg) ; +#endif + +#endif /* __DEBUG_H__ */ +
new file mode 100644 --- /dev/null +++ b/third_party/prio/prio/encrypt.c @@ -0,0 +1,355 @@ +/* + * Copyright (c) 2018, Henry Corrigan-Gibbs + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <nss/keyhi.h> +#include <nss/keythi.h> +#include <nss/pk11pub.h> +#include <prerror.h> + +#include "encrypt.h" +#include "prio/rand.h" +#include "prio/util.h" + +// Use curve25519 +#define CURVE_OID_TAG SEC_OID_CURVE25519 + +// Use 96-bit IV +#define GCM_IV_LEN_BYTES 12 +// Use 128-bit auth tag +#define GCM_TAG_LEN_BYTES 16 + +#define PRIO_TAG "PrioPacket" +#define AAD_LEN (strlen (PRIO_TAG) + CURVE25519_KEY_LEN + GCM_IV_LEN_BYTES) + +// The all-zeros curve25519 public key, as DER-encoded SKPI blob. +static const uint8_t curve25519_spki_zeros[] = { + 0x30, 0x39, 0x30, 0x14, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x09, 0x2b, + 0x06, 0x01, 0x04, 0x01, 0xda, 0x47, 0x0f, 0x01, 0x03, 0x21, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, +}; + +static inline uint8_t +hex_to_int (char h) +{ + return (h > '9') ? toupper (h) - 'A' + 10 : (h - '0'); +} + +static inline unsigned char +int_to_hex (uint8_t i) +{ + return (i > 0x09) ? ((i - 10) + 'A') : i + '0'; +} + + +static SECStatus +derive_dh_secret (PK11SymKey **shared_secret, PrivateKey priv, PublicKey pub) +{ + if (priv == NULL) return SECFailure; + if (pub == NULL) return SECFailure; + if (shared_secret == NULL) return SECFailure; + + SECStatus rv = SECSuccess; + *shared_secret = NULL; + + P_CHECKA (*shared_secret = PK11_PubDeriveWithKDF (priv, pub, PR_FALSE, + NULL, NULL, CKM_ECDH1_DERIVE, CKM_AES_GCM, + CKA_ENCRYPT | CKA_DECRYPT, 16, + CKD_SHA256_KDF, NULL, NULL)); + +cleanup: + return rv; +} + +SECStatus +PublicKey_import (PublicKey *pk, const unsigned char *data, unsigned int dataLen) +{ + SECStatus rv = SECSuccess; + CERTSubjectPublicKeyInfo *pkinfo = NULL; + *pk = NULL; + + if (dataLen != CURVE25519_KEY_LEN) + return SECFailure; + + unsigned char key_bytes[dataLen]; + memcpy (key_bytes, data, dataLen); + + const int spki_len = sizeof (curve25519_spki_zeros); + uint8_t spki_data[spki_len]; + memcpy (spki_data, curve25519_spki_zeros, spki_len); + SECItem spki_item = { siBuffer, spki_data, spki_len }; + + // Import the all-zeros curve25519 public key. + P_CHECKA (pkinfo = SECKEY_DecodeDERSubjectPublicKeyInfo (&spki_item)); + P_CHECKA (*pk = SECKEY_ExtractPublicKey (pkinfo)); + + // Overwrite the all-zeros public key with the 32-byte curve25519 public key + // given as input. + memcpy ((*pk)->u.ec.publicValue.data, data, CURVE25519_KEY_LEN); + +cleanup: + if (pkinfo) + SECKEY_DestroySubjectPublicKeyInfo (pkinfo); + + if (rv != SECSuccess) + PublicKey_clear (*pk); + return rv; +} + +SECStatus +PublicKey_import_hex (PublicKey *pk, const unsigned char *hex_data, unsigned int dataLen) +{ + unsigned char raw_bytes[CURVE25519_KEY_LEN]; + + if (dataLen != CURVE25519_KEY_LEN_HEX) + return SECFailure; + + for (unsigned int i=0; i<dataLen; i++) { + if (!isxdigit (hex_data[i])) + return SECFailure; + } + + const unsigned char *p = hex_data; + for (unsigned int i=0; i<CURVE25519_KEY_LEN; i++) { + uint8_t d0 = hex_to_int (p[0]); + uint8_t d1 = hex_to_int (p[1]); + raw_bytes[i] = (d0 << 4) | d1; + p += 2; + } + + return PublicKey_import (pk, raw_bytes, CURVE25519_KEY_LEN); +} + +SECStatus +PublicKey_export (const_PublicKey pk, unsigned char data[CURVE25519_KEY_LEN]) +{ + if (pk == NULL) return SECFailure; + + memcpy (data, pk->u.ec.publicValue.data, CURVE25519_KEY_LEN); + + return SECSuccess; +} + +SECStatus +PublicKey_export_hex (const_PublicKey pk, unsigned char data[(2*CURVE25519_KEY_LEN)+1]) +{ + unsigned char raw_data[CURVE25519_KEY_LEN]; + if (PublicKey_export (pk, raw_data) != SECSuccess) + return SECFailure; + + const unsigned char *p = raw_data; + for (unsigned int i=0; i<CURVE25519_KEY_LEN; i++) { + unsigned char bytel = p[0] & 0x0f; + unsigned char byteu = (p[0] & 0xf0) >> 4; + data[2*i] = int_to_hex (byteu); + data[2*i + 1] = int_to_hex (bytel); + p++; + } + + data[2*CURVE25519_KEY_LEN] = '\0'; + return SECSuccess; +} + +SECStatus +Keypair_new (PrivateKey *pvtkey, PublicKey *pubkey) +{ + if (pvtkey == NULL) return SECFailure; + if (pubkey == NULL) return SECFailure; + + SECStatus rv = SECSuccess; + SECOidData *oid_data = NULL; + *pubkey = NULL; + *pvtkey = NULL; + + SECKEYECParams ecp; + ecp.data = NULL; + PK11SlotInfo *slot = NULL; + + P_CHECKA (oid_data = SECOID_FindOIDByTag (CURVE_OID_TAG)); + const int oid_struct_len = 2 + oid_data->oid.len; + + P_CHECKA (ecp.data = malloc (oid_struct_len)); + ecp.len = oid_struct_len; + + ecp.type = siDEROID; + + ecp.data[0] = SEC_ASN1_OBJECT_ID; + ecp.data[1] = oid_data->oid.len; + memcpy (&ecp.data[2], oid_data->oid.data, oid_data->oid.len); + + P_CHECKA (slot = PK11_GetInternalSlot ()); + P_CHECKA (*pvtkey = PK11_GenerateKeyPair(slot, CKM_EC_KEY_PAIR_GEN, &ecp, + (SECKEYPublicKey **)pubkey, PR_FALSE, PR_FALSE, NULL)); + +cleanup: + if (ecp.data) + free (ecp.data); + if (rv != SECSuccess) { + PublicKey_clear (*pubkey); + PrivateKey_clear (*pvtkey); + } + return rv; +} + +void +PublicKey_clear (PublicKey pubkey) +{ + if (pubkey) + SECKEY_DestroyPublicKey(pubkey); +} + +void +PrivateKey_clear (PrivateKey pvtkey) +{ + if (pvtkey) + SECKEY_DestroyPrivateKey(pvtkey); +} + +const SECItem * +PublicKey_toBytes (const_PublicKey pubkey) +{ + return &pubkey->u.ec.publicValue; +} + +SECStatus +PublicKey_encryptSize (unsigned int inputLen, unsigned int *outputLen) +{ + if (outputLen == NULL || inputLen >= MAX_ENCRYPT_LEN) + return SECFailure; + + // public key, IV, tag, and input + *outputLen = CURVE25519_KEY_LEN + GCM_IV_LEN_BYTES + GCM_TAG_LEN_BYTES + inputLen; + return SECSuccess; +} + +static void +set_gcm_params (SECItem *paramItem, CK_GCM_PARAMS *param, unsigned char *nonce, + const_PublicKey pubkey, unsigned char *aadBuf) +{ + int offset = 0; + memcpy (aadBuf, PRIO_TAG, strlen (PRIO_TAG)); + offset += strlen (PRIO_TAG); + memcpy (aadBuf + offset, PublicKey_toBytes (pubkey)->data, CURVE25519_KEY_LEN); + offset += CURVE25519_KEY_LEN; + memcpy (aadBuf + offset, nonce, GCM_IV_LEN_BYTES); + + param->pIv = nonce; + param->ulIvLen = GCM_IV_LEN_BYTES; + param->pAAD = aadBuf; + param->ulAADLen = AAD_LEN; + param->ulTagBits = GCM_TAG_LEN_BYTES * 8; + + paramItem->type = siBuffer; + paramItem->data = (void *)param; + paramItem->len = sizeof (*param); + +} + +SECStatus +PublicKey_encrypt (PublicKey pubkey, + unsigned char *output, + unsigned int *outputLen, + unsigned int maxOutputLen, + const unsigned char *input, unsigned int inputLen) +{ + if (pubkey == NULL) + return SECFailure; + + if (inputLen >= MAX_ENCRYPT_LEN) + return SECFailure; + + unsigned int needLen; + if (PublicKey_encryptSize (inputLen, &needLen) != SECSuccess) + return SECFailure; + + if (maxOutputLen < needLen) + return SECFailure; + + SECStatus rv = SECSuccess; + PublicKey eph_pub = NULL; + PrivateKey eph_priv = NULL; + PK11SymKey *aes_key = NULL; + + unsigned char nonce[GCM_IV_LEN_BYTES]; + unsigned char aadBuf[AAD_LEN]; + P_CHECKC (rand_bytes (nonce, GCM_IV_LEN_BYTES)); + + P_CHECKC (Keypair_new (&eph_priv, &eph_pub)); + P_CHECKC (derive_dh_secret (&aes_key, eph_priv, pubkey)); + + CK_GCM_PARAMS param; + SECItem paramItem; + set_gcm_params (¶mItem, ¶m, nonce, eph_pub, aadBuf); + + const SECItem *pk = PublicKey_toBytes (eph_pub); + P_CHECKCB (pk->len == CURVE25519_KEY_LEN); + memcpy (output, pk->data, pk->len); + memcpy (output + CURVE25519_KEY_LEN, param.pIv, param.ulIvLen); + + const int offset = CURVE25519_KEY_LEN + param.ulIvLen; + P_CHECKC (PK11_Encrypt (aes_key, CKM_AES_GCM, ¶mItem, output + offset, + outputLen, maxOutputLen - offset, input, inputLen)); + *outputLen = *outputLen + CURVE25519_KEY_LEN + GCM_IV_LEN_BYTES; + +cleanup: + PublicKey_clear (eph_pub); + PrivateKey_clear (eph_priv); + if (aes_key) + PK11_FreeSymKey (aes_key); + + return rv; +} + +SECStatus +PrivateKey_decrypt (PrivateKey privkey, + unsigned char *output, + unsigned int *outputLen, + unsigned int maxOutputLen, + const unsigned char *input, unsigned int inputLen) +{ + PK11SymKey *aes_key = NULL; + PublicKey eph_pub = NULL; + unsigned char aad_buf[AAD_LEN]; + + if (privkey == NULL) + return SECFailure; + + SECStatus rv = SECSuccess; + unsigned int headerLen; + if (PublicKey_encryptSize (0, &headerLen) != SECSuccess) + return SECFailure; + + if (inputLen < headerLen) + return SECFailure; + + const unsigned int msglen = inputLen - headerLen; + if (maxOutputLen < msglen || msglen >= MAX_ENCRYPT_LEN) + return SECFailure; + + P_CHECKC (PublicKey_import (&eph_pub, input, CURVE25519_KEY_LEN)); + unsigned char nonce[GCM_IV_LEN_BYTES]; + memcpy (nonce, input + CURVE25519_KEY_LEN, GCM_IV_LEN_BYTES); + + SECItem paramItem; + CK_GCM_PARAMS param; + set_gcm_params (¶mItem, ¶m, nonce, eph_pub, aad_buf); + + P_CHECKC (derive_dh_secret (&aes_key, privkey, eph_pub)); + + const int offset = CURVE25519_KEY_LEN + GCM_IV_LEN_BYTES; + P_CHECKC (PK11_Decrypt (aes_key, CKM_AES_GCM, ¶mItem, output, + outputLen, maxOutputLen, input + offset, inputLen - offset)); + +cleanup: + PublicKey_clear (eph_pub); + if (aes_key) + PK11_FreeSymKey (aes_key); + return rv; +} +
new file mode 100644 --- /dev/null +++ b/third_party/prio/prio/encrypt.h @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2018, Henry Corrigan-Gibbs + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + + +#ifndef __ENCRYPT_H__ +#define __ENCRYPT_H__ + +#include <limits.h> +#include <mprio.h> + +/******* + * These functions attempt to implement CCA-secure public-key encryption using + * the NSS library. We use hashed-ElGamal encryption with Curve25519 as the + * underlying group and AES128-GCM as the bulk encryption mode of operation. + * + * I make no guarantees that I am using NSS correctly or that this encryption + * scheme is actually CCA secure. As far as I can tell, NSS does not provide + * any public-key hybrid encryption scheme out of the box, so I had to cook my + * own. If you want to be really safe, you should use the NaCl Box routines + * to implement these functions. + */ + +/* + * Messages encrypted using this library must be smaller than MAX_ENCRYPT_LEN. + * Enforcing this length limit helps avoid integer overflow. + */ +#define MAX_ENCRYPT_LEN (INT_MAX >> 3) + +/* + * Write the number of bytes needed to store a ciphertext that encrypts a + * plaintext message of length `inputLen` and authenticated data of length + * `adLen` into the variable pointed to by `outputLen`. If `inputLen` + * is too large (larger than `MAX_ENCRYPT_LEN`), this function returns + * an error. + */ +SECStatus PublicKey_encryptSize (unsigned int inputLen, unsigned int *outputLen); + +/* + * Generate a new keypair for public-key encryption. + */ +SECStatus Keypair_new (PrivateKey *pvtkey, PublicKey *pubkey); + +/* + * Encrypt an arbitrary bitstring to the specified public key. The buffer + * `output` should be large enough to store the ciphertext. Use the + * `PublicKey_encryptSize()` function above to figure out how large of a buffer + * you need. + * + * The value `inputLen` must be smaller than `MAX_ENCRYPT_LEN`. + */ +SECStatus PublicKey_encrypt (PublicKey pubkey, + unsigned char *output, + unsigned int *outputLen, + unsigned int maxOutputLen, + const unsigned char *input, unsigned int inputLen); + +/* + * Decrypt an arbitrary bitstring using the specified private key. The output + * buffer should be at least 16 bytes larger than the plaintext you expect. If + * `outputLen` >= `inputLen`, you should be safe. + */ +SECStatus PrivateKey_decrypt (PrivateKey privkey, + unsigned char *output, + unsigned int *outputLen, + unsigned int maxOutputLen, + const unsigned char *input, unsigned int inputLen); + +#endif /* __ENCRYPT_H__ */ +
new file mode 100644 --- /dev/null +++ b/third_party/prio/prio/gen_params.py @@ -0,0 +1,90 @@ +""" +/* + * Copyright (c) 2018, Henry Corrigan-Gibbs + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +""" + + +# Has a subgroup of order 2^19 +modulus = int('0x8000000000000000080001', 16) +# Generates the subgroup of order 2^19 +gen19 = int('0x2597c14f48d5b65ed8dcca', 16) + +# We want a generator of order 2^12, so compute +# gen19^(2^7) = gen19^128 (mod p) +gen12 = gen19 +for i in range(7): + gen12 *= gen12 + gen12 %= modulus + #print gen12 + +# Sanity check +rootsL = [1] * 2**12 +rootsInvL = [1] * 2**12 +for i in range(1, 2**12): + rootsL[i] = (rootsL[i-1] * gen12) % modulus + +assert ((rootsL[2**12 - 1] * gen12) % modulus) == 1 + +gen12inv = rootsL[2**12 - 1] +for i in range(1, 2**12): + rootsInvL[i] = (rootsInvL[i-1] * gen12inv) % modulus + + assert rootsInvL[i] != 1 +assert ((rootsInvL[2**12 - 1] * gen12inv) % modulus) == 1 + +rootsL = map(lambda x: ' "%x"' % x, rootsL) +rootsInvL = map(lambda x: ' "%x"' % x, rootsInvL) + +roots = ",\n".join(rootsL) +rootsInv = ",\n".join(rootsInvL) + +output = """ +/* + * Copyright (c) 2018, Henry Corrigan-Gibbs + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +/**** + * NOTE: This file was auto-generated from gen_params.py. + * Do not edit this file. Instead, edit the script. + */ + +#ifndef __PARAMS_H__ +#define __PARAMS_H__ + +// A prime modulus p. +static const char *Modulus = "%(modulus)x"; + +// A generator g of a subgroup of Z*_p. +// static const char *Generator = "%(generator)x"; + +// The generator g generates a subgroup of +// order 2^IntGen2Order in Z*_p. +static const int Generator2Order = %(twoorder)d; + +static const char *Roots[] = { + %(roots)s +}; + +static const char *RootsInv[] = { + %(rootsInv)s +}; + +#endif /* __PARAMS_H__ */ +""" % { + 'modulus': modulus, + 'generator': gen12, + 'twoorder': 12, + 'roots': roots, + 'rootsInv': rootsInv, +} + +print output
new file mode 100644 --- /dev/null +++ b/third_party/prio/prio/mparray.c @@ -0,0 +1,196 @@ +/* + * Copyright (c) 2018, Henry Corrigan-Gibbs + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <mprio.h> +#include <stdlib.h> + +#include "config.h" +#include "mparray.h" +#include "share.h" +#include "util.h" + +MPArray +MPArray_new (int len) +{ + SECStatus rv = SECSuccess; + MPArray arr = malloc (sizeof *arr); + if (!arr) + return NULL; + + arr->data = NULL; + arr->len = len; + + P_CHECKA(arr->data = calloc (len, sizeof (mp_int))); + + // Initialize these to NULL so that we can figure + // out which allocations failed (if any) + for (int i=0; i<len; i++) { + MP_DIGITS (&arr->data[i]) = NULL; + } + + for (int i=0; i<len; i++) { + MP_CHECKC (mp_init(&arr->data[i])); + } + +cleanup: + if (rv != SECSuccess) { + MPArray_clear (arr); + return NULL; + } + + return arr; +} + +MPArray +MPArray_new_bool (int len, const bool *data_in) +{ + MPArray arr = MPArray_new (len); + if (arr == NULL) return NULL; + + for (int i=0; i<len; i++) { + mp_set (&arr->data[i], data_in[i]); + } + + return arr; +} + +SECStatus +MPArray_resize (MPArray arr, int newlen) +{ + SECStatus rv = SECSuccess; + const int oldlen = arr->len; + + if (oldlen == newlen) + return rv; + + // TODO: Use realloc for this? + mp_int *newdata = calloc (newlen, sizeof (mp_int)); + if (newdata == NULL) + return SECFailure; + + for (int i = 0; i < newlen; i++) { + MP_DIGITS (&newdata[i]) = NULL; + } + + // Initialize new array + for (int i = 0; i < newlen; i++) { + MP_CHECKC (mp_init (&newdata[i])); + } + + // Copy old data into new array + for (int i = 0; i < newlen && i < oldlen; i++) { + MP_CHECKC (mp_copy (&arr->data[i], &newdata[i])); + } + + // Free old data + for (int i = 0; i < oldlen; i++) { + mp_clear (&arr->data[i]); + } + free (arr->data); + arr->data = newdata; + arr->len = newlen; + +cleanup: + if (rv != SECSuccess) { + for (int i=0; i < newlen; i++) { + mp_clear (&newdata[i]); + } + free (newdata); + } + + return rv; +} + +MPArray +MPArray_dup (const_MPArray src) +{ + MPArray dst = MPArray_new (src->len); + if (!dst) return NULL; + + SECStatus rv = MPArray_copy (dst, src); + if (rv == SECSuccess) { + return dst; + } else { + MPArray_clear (dst); + return NULL; + } +} + +SECStatus +MPArray_copy (MPArray dst, const_MPArray src) +{ + if (dst->len != src->len) + return SECFailure; + + for (int i=0; i<src->len; i++) { + if (mp_copy(&src->data[i], &dst->data[i]) != MP_OKAY) { + return SECFailure; + } + } + + return SECSuccess; +} + + +SECStatus +MPArray_set_share (MPArray arrA, MPArray arrB, + const_MPArray src, const_PrioConfig cfg) +{ + SECStatus rv = SECSuccess; + if (arrA->len != src->len || arrB->len != src->len) + return SECFailure; + + const int len = src->len; + + for (int i=0; i < len; i++) { + P_CHECK(share_int (cfg, &src->data[i], &arrA->data[i], &arrB->data[i])); + } + + return rv; +} + + +void +MPArray_clear (MPArray arr) +{ + if (arr == NULL) return; + + if (arr->data != NULL) { + for (int i=0; i<arr->len; i++) { + mp_clear(&arr->data[i]); + } + free (arr->data); + } + free (arr); +} + +SECStatus +MPArray_addmod (MPArray dst, const_MPArray to_add, const mp_int *mod) +{ + if (dst->len != to_add->len) + return SECFailure; + + for (int i=0; i<dst->len; i++) { + MP_CHECK (mp_addmod (&dst->data[i], &to_add->data[i], mod, &dst->data[i])); + } + + return SECSuccess; +} + +bool +MPArray_areEqual (const_MPArray arr1, const_MPArray arr2) +{ + if (arr1->len != arr2->len) return false; + + for (int i=0; i<arr1->len; i++) { + if (mp_cmp (&arr1->data[i], &arr2->data[i])) + return false; + } + + return true; +}
new file mode 100644 --- /dev/null +++ b/third_party/prio/prio/mparray.h @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2018, Henry Corrigan-Gibbs + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef __MPARRAY_H__ +#define __MPARRAY_H__ + +#include <mpi.h> +#include <mprio.h> + +struct mparray { + int len; + mp_int *data; +}; + +typedef struct mparray *MPArray; +typedef const struct mparray *const_MPArray; + +/* + * Initialize an array of `mp_int`s of the given length. + */ +MPArray MPArray_new (int len); +void MPArray_clear (MPArray arr); + +/* + * Copies secret sharing of data from src into arrays + * arrA and arrB. The lengths of the three input arrays + * must be identical. + */ +SECStatus MPArray_set_share (MPArray arrA, MPArray arrB, + const_MPArray src, const_PrioConfig cfg); + +/* + * Initializes array with 0/1 values specified in boolean array `data_in` + */ +MPArray MPArray_new_bool (int len, const bool *data_in); + +/* + * Expands or shrinks the MPArray to the desired size. If shrinking, + * will clear the values on the end of array. + */ +SECStatus MPArray_resize (MPArray arr, int newlen); + +/* + * Initializes dst and creates a duplicate of the array in src. + */ +MPArray MPArray_dup (const_MPArray src); + +/* + * Copies array from src to dst. Arrays must have the same length. + */ +SECStatus MPArray_copy (MPArray dst, const_MPArray src); + +/* For each index i into the array, set: + * dst[i] = dst[i] + to_add[i] (modulo mod) + */ +SECStatus MPArray_addmod (MPArray dst, const_MPArray to_add, + const mp_int *mod); + +/* + * Return true iff the two arrays are equal in length + * and contents. This comparison is NOT constant time. + */ +bool MPArray_areEqual (const_MPArray arr1, const_MPArray arr2); + +#endif /* __MPARRAY_H__ */ +
new file mode 100644 --- /dev/null +++ b/third_party/prio/prio/params.h @@ -0,0 +1,8226 @@ +/* + * Copyright (c) 2018, Henry Corrigan-Gibbs + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +/**** + * NOTE: This file was auto-generated from gen_params.py. + * Do not edit this file. Instead, edit the script. + */ + +#ifndef __PARAMS_H__ +#define __PARAMS_H__ + +// A prime modulus p. +static const char *Modulus = "8000000000000000080001"; + +// A generator g of a subgroup of Z*_p. +// static const char *Generator = "5569560418e73ff9db709"; + +// The generator g generates a subgroup of +// order 2^Generator2Order in Z*_p. +static const int Generator2Order = 12; + +static const char *Roots[] = { + "1", + "5569560418e73ff9db709", + "5bf795c6d548a19b6ac340", + "760df490123f6613b0a970", + "7cec29d14a0eefb222bde7", + "3c70a3f0e9c5b206031a33", + "1cec8c96472b84936bbc22", + "3315173915ca23d8c1b814", + "39a0c4e1da321f1bc126f4", + "760f3656c1130b21d369d9", + "452231c3bcde7b7b5b0af8", + "6fe27c77d57e2feb8cbcbf", + "3a7a488015e75feec809f8", + "c16d15fea9d61c8df5121", + "5a8a9b5c659b71e837ea18", + "506d84c9f4d4bc400fdd25", + "4d7566cd294f75be6620f3", + "5f80095f2580ec4cf13b51", + "34eea7a66e8ff3dcc8988e", + "899b1ac6f72ffff8aedfc", + "3cb5a124ce563c3967dbc3", + "16d5205447831696c5d6a0", + "414e761d40341e7f97c304", + "498104aa12355244a9b0d6", + "3a8c5a9525f5d62cea294d", + "1c90fea5f39d8ac4dfc2a3", + "6a716dae106b9aeff2133e", + "735cfad9acf49090fb7037", + "5f4e7c70ff55ff2f888f05", + "2f39a2788d5c2a24e16acc", + "38d9d05f9463a537f470b2", + "72b5d8f8e65cb7509a93d8", + "75066462fdbbc7301e209b", + "55afbc51e7c2cc748942ac", + "47a1f466100bf70dd5689", + "57d88b5e0b434eb1a0dc08", + "27ec8c6636679988dd1267", + "4818e9ef0ea7625cfc3d0", + "68fa3ecc3845db5d523ad9", + "4c95bed884bd87ec1d5e70", + "7136b3dd116ed121aab68", + "60617400353c1eb8e8832b", + "19772e34181f57b670bf9", + "2f58f2df794a35875efc99", + "690aa96130f8c533d77ce4", + "df261ad3b5157a525bb81", + "6a437e22c95fc6c6a4449d", + "1cc2526113f2bae9b540c1", + "7fc2bcc524b4326eb8303d", + "751e9eb348bc8239d6e118", + "2fb170a11f1aecdf586d25", + "32aafc640e8c99bda8faa7", + "552aca5af025ea1e84aadb", + "30a3461d63ca9807464dd6", + "3f68fa1a9ab7772758d0ba", + "6ba1300374acd487b23577", + "35865b2ca16d3453781f41", + "3d1155c4a53835d991a0f", + "74bb588b5553c2b2d4ac78", + "3778fd3a46ffde4755b6ce", + "1d2b9ca2f44294070d4e86", + "38596ed050f14596adc07f", + "2015aa6fc7e48fa3bc5ab5", + "2ad2546b270547fc24541b", + "1dd1b432dc809fe4c879b3", + "149e6a0b6c6543ae895e07", + "7851b3168b92e5daed021f", + "2bee268df09cc40864a917", + "76c2f0ba37187112ee4d4d", + "53016aa1427381b9f28ea5", + "397f144a181805e1a097c9", + "634478b621f7f0a455c48c", + "7cc0116bd0bc164835ee72", + "310e395e429c4494a5f850", + "63e0dbdfb13b4fbb46f00c", + "4a9e2e5d8ad0e2e82aa7de", + "7d0578a8908ba294259bd", + "17276a59aa9630c1141c17", + "393fe0be8f011593a7e1ef", + "475e84f70334cc0bc8292", + "1ccd174e9aa4e58e7414bc", + "19b666810d736e639b51f2", + "2a48d89ce122dfa7deba2f", + "6520599b30ba3568ad0f09", + "4b35e35e82bffb49d0d830", + "3943e926fbe3d426004ea9", + "4e501beb4617be0f02deb4", + "343dad4f059acb87d3b0e2", + "7bb4f9d707b4ee3a20e779", + "7de4927696bdd6d3b718", + "6da3828f2d4926651f7a27", + "3601174a7dc823bf4dc3a6", + "223160cdd1bfa322ca3e6c", + "31a504d1dcc251075e4436", + "1b1ca5d6c688c4cf99448d", + "4309c1c59a581af63d922d", + "6077a88144957827c07205", + "22e321253c3e0fb875c4df", + "6b4728ee168cd23e2fe47c", + "1c35e13f8ffb7c470fa61c", + "4bacbc68650c41520d312c", + "455c9131bfa1c33274be37", + "23c82ae839bf5380a55acf", + "171e59c89024b148534f1b", + "165ff53589519199fc1846", + "69bb33c18017fddf18d091", + "2797689917c95a9d4073ae", + "527c4b155e3708972293d1", + "6e007172a16a9c673e635d", + "1921f3262afb2f3766f357", + "70a2d453b688803716fdbf", + "4fbc987e428ed0ce9cb76c", + "58320debe89492ceee77e", + "1b0c27c7452322264822f3", + "66ffe80af410522139e92f", + "5e56a7d976f1a3334f57c3", + "536a736ad3a37793dd9f54", + "407333b3b6a3bed3ef8920", + "76fed7d89907843db9af52", + "18019c176b4c9453028db8", + "4a54d9b3589d5340a01e23", + "1a4e5bc143bf00e8928403", + "61f4a55b140e767495cd59", + "25cab751e23d8e69bb5048", + "591bac661062f64b8e3f2c", + "7006ef130d31e12bc44c5a", + "6a23876a8c802d81d83d29", + "7cf9338ca9bcab73862b81", + "e941ecc714605cea72177", + "4839c6454f97ececa9969f", + "672d7083ec424e5d883cec", + "3722a55f27f2c02b34eddc", + "4f72850630f6f8c1a68862", + "1a63315aa52cb254b65ce0", + "5a0c2602dcbbbf468b67e0", + "23f219093e9b0bb3b5217d", + "4f6d8c8b0b9b376d42c4b1", + "7abf68b2e4cc9e3a3b2c5f", + "75f4eb6de0d35eeaa16cf8", + "6a81a8d913b71671629ad5", + "3afeb7cc8f8e5bb8770da", + "2b0fed7a534d25697e5c7b", + "2964973c288dced7dae8fc", + "a6c54d0ec55adb4911efd", + "7e958697030784ae5ddf86", + "7fd4ee663460087b793a80", + "5cafa83a10f929b5076c60", + "452d3dfff11e24bf680356", + "39242760b51f2f93fd4721", + "18ec20d19a478746123b", + "30f4f5617cc73435ce74c2", + "1851e925707895d37a37f2", + "6400e87749e3bcbd750d89", + "6c8879d694e1a0b99f8e42", + "3ecf9d05cd62341c4f7784", + "7895b432001edf846b7b3e", + "7c6b359299af5c59043711", + "13f13f9f2c877cb73ba5c", + "2193bc73ac4b40415c95b5", + "6351b2a5f477112f552683", + "48eaf0293f956717b8f048", + "21a363ab0e08a4336f2e44", + "d8c34dffd92c1a20d6a9a", + "7dc98aa964908b313939a9", + "327b2b8d0b75e0d83a5b04", + "2d1b2f087facf1fbfc7e69", + "6e97dd298eaee757a3cec1", + "504d29ae2e5a021d2bb278", + "5344962f90f45cfaeb1bce", + "767dc9d34c09b03db4a0e9", + "731a7b89f357bfb855a5b2", + "42cd59499a0ef57d6b0009", + "5d711409f3faa9ea87abfc", + "352389083277fbbbe66ac3", + "30a77107da1d91a699e9f5", + "39bf9c3f1f0a1a15264530", + "5ce5e0595ad07c8855357b", + "4499c1c16fec3546d5903c", + "5b8e9d8b290e89e5d9afc3", + "214f18ae0c9aa7a1b8c02e", + "639c2fcec8b9dfcc987387", + "1536906705870049755028", + "e0800809dbab6d41345b4", + "39489c7fdb445490d498cd", + "52c4d1c2ad153a3f70bc0a", + "540f5a33d5aeafadcad19d", + "6081e77fedf3898fd66607", + "584b7d6f0b43ddd0b397e4", + "7d8b341c82b019a8d56c92", + "2478db790ed59756cef964", + "93cbb2483673e4e0dda30", + "18ba9d869c489f11ce52e7", + "52cfcbd15dfc6c476cfc76", + "7ae1d007cf030664c6b815", + "9bea90a26f9e93743a998", + "7e62c15038abb8244531b4", + "3cb748f77d638122329dca", + "1fa330f6dd5f3ca09176ce", + "779559a53e6b62275896e9", + "51a9b0945a0908b1d40d24", + "2b13e041339df4d5a521ce", + "7256923d608836710a659c", + "48a999a2dc1a23a934a6fc", + "ef75fc5d77fc146e975f7", + "a058b3353ac6290d9f864", + "290ac68bec8aa8955b7e97", + "754ffe6bc2e7525e892fe", + "5d7c2a1d1267b7a252da1", + "35714b90920ce6fe1f850", + "456138a50c3717947be48e", + "1e2093f76475f58a2dfd79", + "4d8859f357a36792b7211f", + "3505fcb3eb2690f88b3be3", + "2735b2e6f5f08a9e9418bb", + "4c1f6b587fd26654ea69e1", + "351c5a0b997e45ec21b614", + "1c960c994194a1366a2222", + "352a4a136ebd7ef294f370", + "2df28a1b78b46f16aaf53b", + "29bbe5fdf14e69065cb80c", + "30eff32d49c10f325b8e9c", + "628d18e095a8dbcb9f43bf", + "1efd2b46d4a8724e929fd9", + "13221a23af3045ec5cea35", + "15d4218f4bbf0c95cd9649", + "3f5027ce278d444a4dd243", + "2d5e8f78718c2d4660cc69", + "49cb6ac7a2bfdc54300006", + "a134915353ce113eb72dd", + "479e7025ae3fdc2bbcbe22", + "64ed03e382c11a32e34cf4", + "3d73fd3c3744e9ec5d2d04", + "116da33e19c8b80384fe28", + "68ee183b2208228da8bab7", + "1abc0d15793c655cee4a9c", + "307727bd97c5db086074b3", + "1d6812727d8421d0e03a6f", + "5b39ddb704fa58142076d", + "2f78c0f7e7a90558573941", + "35a3ab4773c5054a30c44d", + "76c132264ad2a774a55164", + "620084c5da2910137e2b10", + "31541f24753a28cc5b51d8", + "52f5adde99e4501e4d1c61", + "779eb73caa637aa28db87c", + "3a89578d6ca992f91249be", + "536be2b3e3829710aec51b", + "53c95b2787b88db0682132", + "4a0fb16cc4d1bdfbb239c", + "8b462e0f7448b549fd688", + "783e0229f219bc18b705e4", + "17dd6e40297f1d32786291", + "4f2cc1f6f7aba8c20a670c", + "479fc9912c9c81152eb474", + "117480f169f81bb3e8609c", + "df7ae04689867c9ad97d8", + "70a1107bc42bfb598164ea", + "557361125249092a7bf932", + "5cd319aa7906a96d2f6c7e", + "72a7ca4a8dc56f9c652281", + "dce90e419e8d3f96eb5b4", + "15bb5d9b44eebb27a1e60e", + "2baeaedf76503008b9e428", + "7aa81a94a5a230cf59a0b9", + "55d7bf2f5724b5dd0a04ae", + "e1ef803b3674bf39884ae", + "1738ee1c8e104064e07249", + "7ce4bd3337a7333159cb2c", + "38110b962a169200cc9f0a", + "1ddeaa1e583e9146210f69", + "cfc86f804a481df48868e", + "55a41153a33cb4649703a5", + "5eb4d93a33b2d2e2c2adad", + "4cd904fd9401eac5ad7f1c", + "502c6a2df8916b18106088", + "6259df76b87ab2eff6659f", + "2f85e68dfb9aea66d7f07c", + "1f1eea8231315133cde938", + "6863984d7793407587e8e2", + "7b5272bdeb1b01fe56bc29", + "26b7df388a02a8279b0652", + "7fe76cd2c5affa913c2b41", + "733b81816da25936e81af1", + "235baa54adcc67af92d06d", + "4e6cb8ec1b00e2f28b3a7e", + "88b8371baafc87a9713f4", + "3b0283be973d59ebf4242f", + "587cce1cbd0dee8b98f262", + "6cfdd09fe2bd66b85c2e00", + "12a3196afc09a79694eb31", + "4feae15528510f186aa1fa", + "449ccc3923e92a0bd2e3ba", + "4f74e7ee01738298062093", + "6ce98c831091728c0e73bb", + "4bfd93fb985a44ed0569f4", + "3c8b04f81e14e10396b582", + "6cf76079225189eb2608ce", + "76e87d4d2740e137511b26", + "c62790b24bc842a717e31", + "516640d56302eb15061b25", + "60c8d2e958387c0d0627a8", + "402c7149b20bce787c7e83", + "64c275af1abda385c2af0b", + "5088a2317aa34dd5bb1b4d", + "67a9131aabd5255bdce732", + "d452f805a2c35e686e107", + "5ef5512b3384aa1243daa6", + "6c1076c01e9e44fb047889", + "46bdbd32d31b2a36e04e0a", + "527456447c2748239033cf", + "356211f56936e183312837", + "449d4feccb40da2e122aa1", + "43ee4b35cb3cdc84d1d5db", + "7651ee2e0f4d348cbe95bd", + "2ef2be0f7e33ace73bab4", + "4b8968b5c5a93dbb4b2b55", + "7d2db742721c9ba686ff30", + "48e4926c40cd6ab5e92ffc", + "506e6a05e8de5c9198ae69", + "74a156e77589342bbef3d5", + "798019b397419c8d54fda1", + "5a7d2dd2aa2028d4da8f42", + "5ebb44d93cb77417b61c4f", + "1630a212afc84f038374d9", + "3ae30b1b5931eb630bbf6c", + "37ba1e609c7b12a8e32733", + "238de3e1606bc0e1c33adb", + "149d706db4fce00c71da76", + "524b77666e02692a642407", + "ac6c9987de6c73f2259d9", + "51c819b9ec191b60920096", + "a961f7b95836d3a578170", + "2bb1db818cfd733dcce0b0", + "51eb043d3564fa91215f1b", + "23693b4063cf0fa20dad42", + "4fbaae68fdb253d715d528", + "69a784edece7c38bcf7297", + "1d595362f3a1b4c77729e7", + "22f18c95264f1fb742c348", + "5637e5d4438a119a23f043", + "75a7fc26a6faacf109b345", + "3a051daeeae9770973713e", + "4b21ef5da2b744139c3cf1", + "471eec9edf3f5af18be6bf", + "341851bd5e48e20f0a412f", + "f125d56d3c0c2aaf7ad05", + "c91beeecaf54c95dc1b37", + "38e1e6200860f4072a8a1d", + "3b3a5f854ba249c04d075", + "4170c011864f5582d6a738", + "17fc45b2690c315a5249e8", + "1bab6e088abbb7a786ff3d", + "1b388caec4f8538425d93c", + "6df80f50564e811e245eb5", + "65a5c9fe061a38a8c6c2e0", + "18e5cae7f3bd61293a8c2b", + "408e6268fcd75479c3bece", + "514d622fcdfc26212b5d14", + "435abcd28c0cfc9f321db0", + "710608c33a517ea5d5359e", + "96cf28ae783cd1e477aa5", + "5685392e26e4e637394c54", + "32f953543bd07093a29e5f", + "6806f2889f5316f4c57e07", + "668c0767178119bd41ac3", + "6e885e79f7b5fe77214da5", + "3915c8d33da94da27c1249", + "762f2aec62b91b262cc99f", + "7ce0b194ba3e31249ab36d", + "5dd52a5a11350a9b7572fc", + "404ae85658f9b08174632", + "7772e0b990ccdc614c11c3", + "573747456cbe53c844796c", + "3cf5810d8c38a097a7561f", + "269c017af27ad44e6b201e", + "2835e7f4b39073c5a451bb", + "ba07dcfdd701f16f45aca", + "1b6a00fcabec41d4b43ba2", + "67da5d093fc207176dbdb2", + "311601fec45703953f2b91", + "483ca240f22946b37af3c", + "758f193f192584a42ebc31", + "16fb077509115b4c0ee442", + "2334ccde40867fa1d0bc15", + "3f0177714af6ab07d870c0", + "697c3f9accda8d3543f182", + "59a5901c521b74864c8fb2", + "17961b8be9d0332a213177", + "69defadcac1e44c7a1c0bd", + "2df92a33b308b4efdcaee3", + "3a603b28f5e57fbfd764b9", + "65c75439faa2303912b32e", + "121daf29269045f5bdd20b", + "7adedaa3d8ff64ef5910ed", + "7b59158d38abcc0653e41", + "63bd657552fcd47a1fea3b", + "3951fc47c9cf417968c09a", + "7b97dd845f9509d060f296", + "67cd089f73cfc8807dd840", + "b17adb15bd895ea825438", + "3860f5646a470f19d720f1", + "1365575dcf06e2b1987b3f", + "5fdf7c6cf80f5f4d619b9c", + "1e86f8d9f30e1c9ee2f741", + "2f4da63191088795366c81", + "1f527bd93add787e619f2f", + "1bf7de225f0abb4eae1da2", + "7eede9c7d2fd05759ff0d5", + "7c4ebd51c09994a5c2702b", + "2f27f9f5b37e53f26a3367", + "1a91f5500bd170effa0820", + "14e76412c1e117fa60f762", + "27869ae6bfa80052e928d4", + "36e5208ae458480078d5d", + "193c88995f60dbabf1ee79", + "55509fd3a52bd88fe29e11", + "60188d16e528a5d2e06d3d", + "3cd40ccabd157073f9e356", + "6f7417b6bfc27461fd2524", + "60f671cf9f662680d04313", + "6a1b97013fc782623a1d18", + "4a5a912df871eba16ca2bf", + "4bafb874450e24655961f3", + "7fa7e63240bd502dd4b06b", + "3ac9b63dfc3067c1c4627d", + "11978ed9a01677cec42ee0", + "6b488f646fce9835d43f44", + "2449f6a2ba5fdac5a9c1d4", + "1fb4d17ac6ee317ce5a547", + "230119c3b2a6b1bafca00", + "5ba00e958e1473bae28031", + "2e0a934adfe422dd136191", + "64af53c3c0ad963e3055c1", + "173ee21e60a88ae566e166", + "c25f982adccb58e81ce02", + "1c0d48f6283945e321fdac", + "15b86ea9fb5f9d46bb9d95", + "12ea1cc2026e4f5211a159", + "4948e72d6c06974bcf7212", + "474d5e705efa51e5e97d39", + "3a928b86dc180342e1f053", + "68570d0c5fc94ab3c18486", + "33294a38a5c8a431b3624c", + "7f5271355a686a4df7e516", + "2176005ea62a7fae1a0ec5", + "7b7ba8150a404335a3e978", + "7ee167869f16d0f3096184", + "37b012fbed4994b5319766", + "5a9897a2da0299756dfdb3", + "22c922d5b0fc736e5f1adc", + "7c793c0d415e26d57ec92", + "11326e189db8b15b0744ff", + "39f2517276288f74c45e3a", + "47b94fbc156b869e9d16b9", + "4a27b941aa4c6ad1e07548", + "796842dd6bfad2f98912a6", + "561331256e1d21664a1287", + "4d3db82b9d6efaedc42576", + "26293d249066a3014c3338", + "29d711357943b0afaa5b59", + "3baf4fa4e9f273acdf732c", + "22f4901fc0a8b24cf62fe4", + "fa65751eb4d84785986bf", + "1c89d8520ef104ebd20ee", + "3251a62ebf3abdb7c9ed58", + "59db917020bf7253782d5c", + "52c455dad0b267d43552f0", + "599102d1f2500d61d762c9", + "77024358b3e776b2c5e1af", + "3248d851d401112b750bc", + "36f20d7e24da8778ce35f5", + "4dbcbf0e0833361017aadd", + "7a6a150f8921047e15edcb", + "5d53571a7cc3688e6944b0", + "3de0a5abf20a4845d76439", + "330bf157841f4554c8f5de", + "7faf5fb28aa48ff83cc07", + "ff765fa35889a47189d5c", + "1bb928a5ce5b6a93e4a6be", + "443f4b4ed3b1f2c8fe8ce8", + "159314ac561f7431a71dd2", + "2ad8da8cd83b1521d7659a", + "2e6c1f41a9866f4d867e01", + "2bf095a2fbcdb3391aec69", + "7286bedeaa0c2687819d8a", + "1a1cfff05adf1a427c023e", + "7677202d8f05f9287a6047", + "144036e909f39a00a79653", + "5d5d0b6bedf48b96c5eb79", + "2aeb5606838c910769daa9", + "36b57535eb2f884ec435f1", + "26639427b4cd468207f354", + "567c07ffdf5609acdc57cd", + "46c6a4606b83331dd733e4", + "214ab6242649bf5f0673b5", + "456b75b7118ddbd9c05113", + "23f47a79fc10179e2f1aad", + "6750d083991451ddf24ddc", + "9a91d432ec896438ac971", + "62cba5cd6ece1fcc005653", + "146e2b3f7404eaa2825f64", + "73a1489a18b0815a03faf8", + "4b81add44caab6287f5254", + "43da9e4b9fc98c3225df02", + "73c9485e5e5379f878695", + "4b0e392a6b94b0716bcb0f", + "627d01094a2553e7bdde46", + "6e1c49a1adf3346b270d76", + "2c11fd859f539479044b3d", + "5ad56a9a03d1277384501c", + "538b76dc0991647c99d6ab", + "2fe38c447768175651bb27", + "2d8207ca3331c2f27a3943", + "ac1c0028dc3aa005da816", + "5830e5e1c9294904118c10", + "4fc1aa30a26bf05e1cf79e", + "37ca6d3b30cb2687e44f7a", + "3fbae766d352bf62d71ec9", + "5b8558cbc60eeb5d4d1e0c", + "3c0ef922648f93834d2bac", + "1f216750a4d1686b3b2227", + "54449f7dccf77fd8f14fff", + "25b4f424465c145a893505", + "1533a8f5ee81c2d4352c6", + "747f5812283a8ba1a43af4", + "42d3b2e606813eb48865e1", + "771e23d6155cbd6574be92", + "6937a623eafb54374944c3", + "7ebd8ffb86035ffa249a5c", + "65a59676f2a0f7f5358513", + "4cc1b8f60c7b3b604dd7f3", + "8c1b60a22d754654b3b0e", + "3542a00727cde7902f64", + "46dbb8e8c99f2d8cf603ab", + "449f89bc8e75ebc93c06c2", + "42fe3f1413aec51428fb64", + "6ea50d7820cf1c46cfdea8", + "5e81e2ee54fa1c8e9216bf", + "3cdbf096f176a11d399e68", + "1b8c58018b9ec962054ab0", + "292e4d75da1a76fa4eb730", + "23f737b6f1527cfce0303e", + "1f2e34fd7020d08b01b7f2", + "1103bc87eb4e4e572c882c", + "4796fc52e00fbc5d65fc02", + "6ecdfc4db1fa1b0104403a", + "5d780dd5bc1f62ed520130", + "403ccf27d3ff3c3686d654", + "7a42533b0f16560c421482", + "3c52f4c6c583d5b2a18105", + "32e84128c0dfcdebdcfc5e", + "db6d45038525122246c3a", + "7e9e8be590540d41cb48b7", + "4dac5ec68e30db33d790b3", + "4a9951c3005ac4b7d775a5", + "8d7ac16a6c7fb5dcaf362", + "7a7267a5eeee00421b1bd7", + "14b9cf8ea7c2a2aef663e9", + "7a75465db2452d11dbf6bf", + "49da4e6814895f7566132", + "6ac2b95852f2b3848657c4", + "29f43cc681e11325bf172b", + "41d82e9988854950bdb48c", + "6f5834f39b940405114e26", + "754181ae9689816d4fae85", + "394398fcb25e82a48b8d32", + "693e564c43456862d84db1", + "5fa8c4e879ae9ef5c6f178", + "3937d6181e67f43d9bec08", + "4bd73bb75df0b9c8f31e93", + "417a5a771b0fe4694065d", + "47ddc74fced651c57b4d1f", + "7746c161815ab2091d9e21", + "72216a00ebfc9de1e963c8", + "74c5b771dcd8c4719355d3", + "450dcdc45566039112cb21", + "1ffc37c5751a51bd676a97", + "553adfba4c4a6d20491557", + "d65fa4e9fad0f9180af7", + "6151a60a864edd0e7c7b30", + "57a6c26c5e5dea61f133ee", + "39f0a0674e65b2cad4a706", + "29105da153f2a098ad094b", + "c16242d78c3d8fbfddea4", + "235bf7672a2cda1ab01fb3", + "3faddb5ddd2bdc683de72f", + "75964f1abb3f7cc93e9f96", + "62019722b2962f2ad1787f", + "67427f6921fbdb98c3e375", + "2a0c42a5cba7fe55a006e5", + "2bcf3f6e0be988750bc0c3", + "31cc33f2d92bb3dc73372f", + "553e86c66c2fba13b95f56", + "75f53c77a2d34dd51c6882", + "6f8c0ef46d2275dfe7e84f", + "5c1c9591ed7cecac5be504", + "e0fd267f226bcb77b4105", + "1aa73126a375b6cf5e8b5", + "5e4eaaa44cce4760757194", + "a15cce75efaba6c1b571b", + "7f779a7314dbb8bea5c652", + "2359b0102f9a1f774278d", + "20bd84ec27cae248ea38a3", + "38a3fd25a6d9f4f7c85efc", + "2117da386a0ba848e04619", + "6db55a7581d577d97e45ef", + "68437c168764f9b52e36f", + "5574ce6446f5f9b2cb3ade", + "2a8fc7a338bd0e95e61238", + "6dd1e30b456df046e42f20", + "360136af955e5fa1edc1", + "403c97fd7a8e612b101803", + "e8a31983f38b3bc04d83f", + "2fc4119b8d9484cd86a0bd", + "23b23c226ec7148e9ecfd4", + "40f14f4642441c80c723a2", + "255da48e767df6db73178f", + "5f4ee2c7a7d447e781b997", + "4945531dd0d285dff322e3", + "58de9434dcaeb21007cf50", + "4eb92d6051c08bfec28d32", + "46777bd089a8dc8c44ba66", + "155305c9e80b8231f3fea7", + "27e0d5b6d5b01b974468e6", + "3337445fe49877ddd94c8c", + "23ff36317f41cdc69b5f8c", + "5798f45a6d32a5d9e220c4", + "6b1b87bf69d8ba16154459", + "d959366c9d2eed9c988e", + "7914f6f164e20860badddb", + "fca586b3bb595a8d4101", + "68bf1a165a85b17f192a39", + "7b94e69ecfb1ba4bdf42b9", + "363177aa4ad204478f4d2e", + "4ec109ed0d029a0c6bd1c3", + "ccd4be560162041ae08e2", + "3e7a71b985de5c6c7a9f57", + "1dcb001f06c75da3270a59", + "7feefa2c38e3a6212b4cc2", + "58a47971604afebfc2dfe", + "175182c7cd2ce431b0150e", + "1ff2197a0e5b3d0b65c928", + "497b40c11c5d479cab5f20", + "5448bba652328fd63e3ca2", + "748cb85b7df9ca5a82d4a0", + "5b60aca7fe85259aa048ba", + "68bba5659f4f20356a0cad", + "16a2f9f4e53133020d693f", + "75df623177a9cc914a680f", + "dfa61531c98e389318ffc", + "12502410f917e813c566e4", + "385c720d2080ae9544a074", + "15c5021e3387b5104eda39", + "6ed402123cbfe00df8030b", + "4e9e415c8033fbf3989b6d", + "1ead4bf29c5aa1e11118b1", + "3eed8387e5a22f84995caa", + "6207f87b59fc321d1fa8c5", + "5527388c03206dff6a464b", + "232706fb395f1e37b2683d", + "5eacde9e13242553f24977", + "257f0dc17de9e402db5577", + "26c8838f41263334d39302", + "5ed2c798bc4d3df9693b4a", + "59048c7bc400c1b2f055f1", + "60ea199093a4e9f80613b6", + "3fdb397b831af56c0902f1", + "47be6483decbcd32c50b44", + "715687651f6925a41a3bf1", + "5c585a64ca68d89750e9da", + "1f5e885344b51456b2195b", + "5d2602e9c7bafe79929bee", + "25b65fbcf4deba1535165c", + "4bba04cb6f7dfe33e4bd", + "4e1dab19fafdbf4d11123", + "3b79806e60c6443e5b75ae", + "28390f3626b1fdadbcbfd8", + "2ac5b705311ca0e8e6bcda", + "21cbfd5db5cf856bb6980a", + "31340daa6bee66dc702e47", + "4520d49550bf0a2328020f", + "6a91ca9f24a59bd3f77cce", + "590c069f4d458da38448fb", + "4eca5fbd35a4778cd18f80", + "288723d0eb9a25150c0772", + "6bd55e81cea4df6934b8f5", + "684e96f56360b04576ab1f", + "10c2f27dd2e5d8f77a071d", + "78b61404bffa36b135773d", + "9b13c11e290284a86caf", + "415d623b63f929b3ef879f", + "4dd2e16c6f9989907671be", + "72e3a111047449df428c07", + "27c4576460764aabe86ca", + "509ca3fe7eae200044712a", + "1488492f946cb788d721d6", + "5fd2fb0300581c5f59fa7c", + "cae1cd222ac38b9a89a19", + "62a4fc7a9af2d27e92b08f", + "2dd86ec9cb242b4e68016c", + "615326e14c6c74c717def2", + "454b67d8b7470679eeda79", + "359b739ee10f4c4f24e721", + "6714be0beb22d71708c5e6", + "571cc10547604b09ba9b69", + "64981a92737099a91d3794", + "58b898760417610a09ff41", + "5e1c654c63269bdc77fee1", + "37e704706a7967491e3628", + "76a279212b584d95ed2cd0", + "64d1d7c43b00bfc99b8bb2", + "524919eb6636c6c6c14a82", + "4176799b704bfacae7d897", + "2113e1a93f5d2f1cba0377", + "47626057be8af9d92cef74", + "31fcd9e9b87aae6bf32f83", + "2cf0b3c6e55d4f6c794d8f", + "2f36ea2bf51461b1407878", + "2840ecdbeaf847ed4e56fd", + "4dba440f7f398ce0198b25", + "6ef7e0b470470f565c088f", + "58a41d74e16c1b1fb6cbf", + "68b020f430372f0b20817e", + "396792f2585d3e823623df", + "171772c43b172c6f59b4ee", + "35da7f1fc27e6edf7e2774", + "5fe19870cf156902f09ea2", + "4a99080981fd90fd8f202c", + "4fb7ac8e103e64af4c501b", + "32124e45d595b542218cca", + "4cbbf282cb8d5b492509da", + "26e8b6fae1b81184be307f", + "4019e2ed5f4f686e75a334", + "aebf119c49f1f5d4fa77", + "214de8b9e305b92a9ebc6a", + "155503fef8a8a42650f8de", + "4cfa062853643ca21aa8e4", + "210804240b673797c1da0b", + "4499b6e3311b7fe5b9c98e", + "904098cdbfd4389279e30", + "575c81fbd5408f583cec84", + "2cb3e5c4dae6b173319195", + "411254ef95bca10cdc61b9", + "14266a10ce4302dd32d262", + "14a25dabe8f8f9bd2745b5", + "7c2bf4a989b0889ab6c2ee", + "7bb42f21df6b474c926cab", + "4edae7063e31e196fbffc4", + "706df4fd50e1c42994aed3", + "312ecee1519b0617d31186", + "32f8a36cc1b46c25cdcc28", + "6cc9f90d012be002904668", + "69498de156a0aa10a4e2dc", + "6bf558bed09b770ac7b7db", + "45166035762ea541feeea1", + "2bcddd9fb0f98505c98aa9", + "56b71258283af76e7bcfab", + "3349dac2077bfdf6a12d86", + "39450177cdd3980c4efafa", + "4ebe9580f66ecfa62bdae4", + "2d2c322dac49b5fc4277a6", + "63a2efcfe030b5eb3fd526", + "2327087d544749f348c909", + "3d49c943bed92220933501", + "2501ea3eadb12569e01e7e", + "7c2fed1746d715eb95529", + "3adbdefe2bc4d894d3eea5", + "574f9294e066c8fdb761b7", + "69527863032c1ba7d7e238", + "78778c448d7d69eeff19c7", + "63a482d47b34384d6c0abf", + "37120883f03d674fbee3d7", + "46789b05c1e88afd58b2c6", + "62e55ea318373ea102e458", + "7bfe5c12baaa86c60d8117", + "6c065cf636d6bc65762095", + "45109475272b0ee96581b7", + "1b4e22a54398ec5712c2f5", + "c0bc8c55f3b95e521ebf8", + "614224558d52e5d4eb23b8", + "532cc2e0afe1d979c42a70", + "6e48887c0bee3ba8386f63", + "726d30610282ed39d8f203", + "53a902325a9087232d64a1", + "6e72d626e97997cb842159", + "1fa48382ab305e0404adc", + "3d3a2d2ef7d22dc8adb10e", + "59aab11c164124e5cdf604", + "7529b300b4b89c580a5f62", + "206a9c38358f291b01e407", + "47267802b4baf11a616d7b", + "1d50b663f8750fc777a8a9", + "4113025c4b26d50d501a53", + "21e6a33067365b1e718020", + "1e3f1f00ee5c87d8bcc6a5", + "37902c15fea70cc2588984", + "330554538efb3452d928d9", + "eb12a34ffd8e97426aebf", + "7f53a40fb6d59c55fc0a6a", + "2ccc62a5fe0c2d164b78ac", + "3a82f64175d5b3caec9c53", + "676d8d92a92b0706da21e1", + "5c91f707bee21c71c33c34", + "2ab6145578df975521753c", + "6e20ab59697e8bf608ee9d", + "96afde4db924db62eec7", + "2d980e097ecb2ab91b9b92", + "352a1b67a355f38121c462", + "7c3ad9d6ed54817d082b65", + "65e071aa89e8e9caa17f", + "4e4d1094ae9ce9f42b1d71", + "6d82429df8c04f3e8cbdea", + "201a5f031183f9e3136174", + "4b31d20ed3a1f68f117d30", + "309eb70bbb47b20185134f", + "bf1c05f166718be1c6836", + "29dc0e371f2a3ea6cf4d60", + "610a799f5f9443dd8f333", + "7ca0b74cff2de67657aaa1", + "31018337a926110b0a5b91", + "3c066553be4fa2a741db4d", + "194fc13ec819c9e2289cea", + "3c7d066200b6ae5892048a", + "768b4e15703c2b99a95ee7", + "66673b06f4474ab9ac84e3", + "75b60c74c3f4835e0ba3f1", + "282bde17894173789173e7", + "6b386c8a9795cf0b45e160", + "1984882a708094eb26643e", + "7e84a589b79843d0f09d89", + "7f30d40bb0193bcc3bff38", + "1e9e640158c2d5ef405818", + "46f7147d837df6469c39be", + "717a62d953937ab8d63ef4", + "29d27ddd5f46b0a514ec85", + "7f5d5abee4ea627ca346c", + "1ba30d22d8ca0e3412c0e7", + "1b892a6bc6d106036dc210", + "78208a8be2c33504df2573", + "2d92e146c92e5c2141114e", + "65ccc844f43d7740c3bb83", + "6cbec7ee27571943d99309", + "7ab8d7968452d732fc3362", + "51e871e33b066886db1e57", + "70cc62d0a35cccb85972ee", + "7db23dcfd5b48847b2da44", + "38863908f348e0ff24d2ea", + "5f7998cdc984bda089a530", + "593ba411e3481cff090a6e", + "30c01b8abdb9d98a7941dd", + "46861d4c2ab5de181f3e32", + "2f44e6e7eed452c1b02ade", + "31e4383d0d65d0adfc3084", + "44b51755bfc5410d6cfad6", + "2b89a454954d4c6b2e2120", + "7a1817cf8f21c4f863437a", + "1ece2489d9c16fd0d7c093", + "7fd049d0f5d16bca84fbf0", + "284cbec8937114a1728cdb", + "2a6ced30aaeaaa3957eaf", + "41ec16a5c725c7d32d3a8d", + "2c1cf6d476ed98aad97b90", + "715fb02624875de3ce495c", + "3d325eede75d0a573042e2", + "4550a8c9126d63e137546e", + "116c396589d81e0684d5a0", + "48ad93093caf03d61b0aa8", + "29bfa87365d098b3fe8377", + "3e14120ed24ebae50e64ef", + "1924697a3681efc60e8e70", + "1e1de465daadd9547d63fe", + "32c9397c9adff65d943965", + "41ff1be99bebe99b10f273", + "cb351e8f1a28278af3af8", + "5939fc19fad9c14c8917a9", + "634af4f8ff5eecb70f9b3b", + "14b126e3c0b0f4dae2ddfb", + "39bc9fe63b4ca1891dbe7f", + "3b77afb6ec85d92608bbc9", + "6308b8f5574126f70ec3cf", + "2928531ef291fb90d243e3", + "7d43897c9a717ea4ffaf53", + "542f3c6130072ffd145c0a", + "57b79cb347145bcbe43bcf", + "68855602ae559673b8a2dc", + "77f657453333dfbed3c7e5", + "1fb7c568bdffd12b767330", + "abbcfb2e4c3da6b090978", + "36224c16a9190272a21e14", + "47df2e03e1548a16e223be", + "f6c4daf384fb3d39aa985", + "6978fb86dcb4ccc82a3738", + "670c6449f82194e5367c1d", + "75a29d53450973ae07e5b6", + "1a0cc5d78d1da3759fd0fb", + "319945f43efa75c6d6fbd6", + "4a8154e2948099e7b7c4c5", + "2353c3f920ce7af530f96d", + "781973046ae51aa956a060", + "21789b3595bc366315af2", + "4d63e68650d056d4e2cca2", + "6eceb600a9b81fd3aa7175", + "2021e0329a909a39851fe3", + "45d43d697cb8503c85839a", + "7489fd5407cd56abfcfc49", + "57bcb68e1f52791794bf4b", + "71db6b9125d5ab5b3e7493", + "4e72dcffc8f26eb136b7c7", + "890072ab6d3eb608d30ea", + "2f1b9eb8c8ceec3aba8c3f", + "269ad3cfbd18bd255786fd", + "7e18b1dc04cb3af247aa31", + "43cebcc2f248fc1fcbd6b4", + "1b9995439565d095eb8a8c", + "66e2564796168c2d0a015a", + "13c9d1e81de8cbb64a1797", + "657128352843035ba5fee1", + "58c411222783451febdf82", + "2970c6e86dd017c5341ddc", + "7bb1913bf745fa526f18a8", + "4d0a046c7ec4f54117f367", + "36f24af02e5318171bea53", + "9cf05f6855d4068390948", + "1107ffccdffb2932659325", + "2ae1383e51812f870ebf41", + "3aa6d80b7b4477df65330a", + "6cc6a998d40d1bad211cd", + "7d58cee39bf1830f1b3ec0", + "dbd1bb9693e65c5eeef4a", + "4385d494a7bdb154810c4d", + "4a64cce2fc4633dbb63e09", + "3e9654e3940c0f541b93cd", + "1207aa2a4ea7c882b5e76f", + "43bc8bffd5b4fa12491d7c", + "7df66ef2eea696dbe6ad95", + "4e203019ba4b94cd691d60", + "61978b574cf8f6d53118d6", + "14816e04a6b799d1ce9e1e", + "5c699bfc1a98ced38d7c88", + "509dfa92ab81408672391b", + "2025bd13134bf0ca69b0f6", + "675948e6670907b03227ed", + "90bd6d6fef2e358a664bf", + "2f1dd3930a2948f2187f86", + "6336954989b8a716380f64", + "2655fc5da8cafdc10e8c6c", + "be26e79f27c2fffd5718b", + "7568ac37df7da28c47bab9", + "3128342c1cd21185c739db", + "1318f3d7743d8ee4ecfdb2", + "26102582959271955d45bb", + "1118a89d656497538996f2", + "4d74065738715d35d47743", + "2644cda468b716b53c99d1", + "2aec8efef6c41604b67a83", + "76393b1564fa2cd841480e", + "87eada956963224c06418", + "44f34a642236b1e7e4c8fe", + "5edc4541d1854504d071a", + "4a292844d7aa26520c09b1", + "1526a67a2f54717285cebc", + "7decc101d84d7378c8efe2", + "1f8889a7c0321f5279b37a", + "71d26320321cdb1dc925e0", + "b8385ec48f904d72393ba", + "4a2cef4e3606d1b9422334", + "db7255fca12f37c452ffa", + "4374a87512bdcb27925ebe", + "99539a5120bf06fd3edb8", + "4f7806a65676c896ee7db9", + "365cb247c96e7933341e76", + "7964fb4049b23d750b6f0e", + "48cd6ee15c4874d342b21f", + "221728332d3142e3346be", + "198d839621f761dde4f853", + "259839d29faddb791e3548", + "15324434e27844cc4fba51", + "60e351e7834b181d30a00c", + "6337453f9c180b8ddb37c4", + "608a29bc043b54adde90b0", + "4cb0c7462e90f28fa251d", + "b5f14620587f1e8ed5a45", + "3c994e655edabd5cfbe8b8", + "35ebfb3fd5a71979daee0c", + "2a1abd32897155b55014be", + "67d12b5d61741b8623f378", + "21469f9c49fb4d2fb54baa", + "728aa131a37012e184c2b6", + "6f085a8f46a66e79fe4f92", + "1a95aa2ba56c053acf7e56", + "1f1c7eef9d0f99e1e209db", + "5b57bc12988f27dd0ed418", + "5e9464fbce6027257d92c6", + "41be4715ccf6dde8b12086", + "25ff556cf1afefe2cd2ba9", + "59f67a0c66d5e9744004c6", + "23c20aae79c2ffaa75a36c", + "574f95a475dce62a3071ca", + "4a98326f880a44e2d6ea5e", + "39f7a72e1daced6411b1a6", + "37a4477749686070e7e049", + "51524048af5a6750b1955", + "43012f86bfa02bf0033ee9", + "4253e27061630b9343ddfd", + "520db901eb8309582e12a2", + "656f70349417ef562616d7", + "13cc5c5fa7afb2b7468106", + "1916345f1ad90cf48c6472", + "a80defe299bf7c4d81738", + "673a9bc1330de8c0b0abe1", + "226f7d490aa9d47314570", + "4762e175d924ca1dff7d06", + "79ae8d3a65221805ed59d3", + "65838019d10030d2edd34c", + "46d2651ce40dd1fdd11e69", + "4277911fa0e430960db091", + "5370ef9f2399e3c803b5a6", + "69110081782c350722756f", + "be2266f15dfa6e02e4a02", + "7c64411c354fca180b974e", + "3669075c083d3a0547d7ee", + "49212e86ec70f1b328e11a", + "70628248b6cda7311de5ca", + "5593dc730a3a85d6ce77d2", + "4a2416a8cf412f996e9654", + "56f01f51a5be66f649b1d6", + "1c7c6456335bb722881302", + "4f571e68d11ba0c201ec2c", + "2f615de4e96f8f9837947f", + "9cc0a7524feb44aafa989", + "13705ad9594243161047cf", + "358734094106c4c77371f8", + "48384f03b178aecb456dbb", + "336699d6c6f15f6ab914e2", + "5dd2532249188dbe3d2539", + "520d412f22645bfa3f3a33", + "45838fc0d9bd4e814df398", + "5d172643cb569d9b2ab357", + "34470b1eee2f871c42ba71", + "16103ea0d454ef686ebf4d", + "31e4aec6d42e52c762e301", + "217d231f2ea4bf28c97e44", + "15bef1b795296c7e8862d0", + "225461e731f47cbf2cbf5f", + "520f0b6932233966b7bdb1", + "6db3eec1da4e57eacd7cf4", + "5728f13fbf1367c5292a3a", + "7856c391e8828b90a94afe", + "6b36296c1bd668243e920e", + "2f8aa359ac5538f4834ed7", + "208dfefbc938eb8f166f28", + "6506edb4005521bcb61671", + "202377a9328fcb8f661a5d", + "6f4a829757301eb1143585", + "5baffc06fe51f5caa49a4c", + "1c24006c67392d350aebe9", + "a3d31a1daca53878fe695", + "6a3f78db4e25085a772f7a", + "423813f9eb92bfadf14d9a", + "60548a10984139e59f5d8a", + "ee2c219af9300476a7d41", + "6a4862d59f8198b4ea0fd5", + "76d72d56a09f253d257f0e", + "52492b4a4856d777ca0682", + "2dd44a6d1765874cf1dbb4", + "73040349f8459e94069012", + "6c290f053f3f46327ee8ec", + "6d575f1601945a3ca29eb8", + "3aac1aff3b6e14d31a91e7", + "4972dfe88d7e4fb02ffe72", + "5a86321f172c81fbf185ef", + "50b37142bd10ca63ad3866", + "50148cebf8644fa7375aa", + "322164812a5696cb2322b0", + "4303859a49916073987344", + "bac1f8bfa0e63045ec3ea", + "67b770c97867478cc69b37", + "2cd2d00d4262f35754bb13", + "678fb8bf7f6342c5764339", + "656e5b10b9da085176e0e4", + "59dbf0c177e94a664cfe3b", + "1f8b63c5fea99ffd6a5348", + "4debfa77d5d5f3fa106f86", + "147a0d7fc26817e7251ada", + "3f26224827d27901ba392a", + "24364b397921eedc03333e", + "361de61b4e6057d1cb2274", + "14b5583a83133add54d368", + "6ead11e0936e4bb4e855e1", + "30e484fb4ce5927a937373", + "571513666bf5e4e0b1c7c0", + "4be11f1cd60954626093b7", + "775bde6bde2d0aa4187fe7", + "5a1b57c203d09cc8a22696", + "5d5e844e1fd78c36c3341e", + "33b05c78a18798e4462d45", + "624f69e6f91d2b9574cb8", + "172e3a20b269ac416b7186", + "1f08599df3ce28d2e2a99", + "3d50a612150493864e2df9", + "42e82d8613957e0acb2b09", + "50e45902fe1a308ec88670", + "23db937264552bf6dc2858", + "6395a035a6a5e009dcf586", + "23931a4d64503bc81a5a33", + "f6074b1e17e08713a2a46", + "1e604eea4a6fb7804d131c", + "246e8276fd64f7af18402a", + "7fdefc35775213402acc91", + "31f0df7953457ce90524a8", + "731437b69ca76a93992caf", + "3559d5470cc8be88bbee52", + "2a6da3e3f6425cc4caf185", + "384ac895940651e4b3df31", + "20cfa0c6bfbdce5e399a70", + "72f290cf9ea470dcec1318", + "77ae05c9ad4bb1a82ee6f6", + "33f6606f82062475e2caf5", + "373211f704832f37df113f", + "c663e7994203d116af45d", + "25b286320c27c0f91c388", + "2219a8eabaec2cc4da44cf", + "3fa82c77c11ef3ce373a08", + "6c65a41601a28b4854db0b", + "398768a52710b109c92dcd", + "45e67b0777cb6facf28d74", + "21ac3ebe991cfe1bade37d", + "6db9060a2078f4de4b4e1b", + "1f6a141f6eb54cb95d54af", + "68c1092ddd7cea180b7a8a", + "e5d22d0ba9e3194e2337d", + "68075aa010a2a7afcb2078", + "577a2773ebc9e2412cb050", + "1634b76faeb97237505ef4", + "1aadb770481974ec7ba970", + "42a1f9791054781a203d9b", + "7a520385f587099a8da6a1", + "1a88cb781abea4a70cdfa7", + "655b44d3a92231714b14c8", + "651be8b59b15d629ab774a", + "550e4c9178e5dead2f815e", + "ee736adb9b9c1860d483b", + "ceff6274c7b15ae86dcc", + "214d49f3e2681b232cf62e", + "2330589e6c22439bef95d1", + "7e1ce3bec1e98dd35947ed", + "72118d192add3aa4c1e0b6", + "67daf6ba4dc4d74236df77", + "d16f53a28b7042d305524", + "6f52ff1c7f6dba719401b2", + "6ebb0dee9291bd90cd2215", + "78dfe864170ab14a408743", + "601b382825c1515525a19c", + "2e5ffe59b5dd3843fa4c17", + "2bf32012cc6354c709ad2", + "669f3588d7a4ca7ee3dd1f", + "3de21ce46f7c8be3bab3b9", + "432c0a15a9dc31696b79c7", + "349470b19ee7a8cf922b33", + "3c53d6131f8c41d5d7317b", + "5e83dc6dedd0679793feca", + "54c245a123767ef7f22e33", + "563e208513fb23ff9ca7d", + "b512df0270e6ffe2d4a9f", + "b0715d55fe0c1edd9613b", + "c0ecef4f88f5957d4b1b", + "c8806bb60205886d4ff9d", + "32c2902887e1700cd5dddb", + "49d6a78a88159326775c2e", + "56359d56dcb06ea3ab68ec", + "2d794034e6ae324ba7041c", + "64f201a4086e40b2a3a19d", + "7eaf34148ada80711a86fe", + "2142584bb5cff6c1e5011e", + "15060a6e69612092d45768", + "4de3353d33028c5f557394", + "70594464b46de9acc11f02", + "1fc064c4398ccf6bf7b1de", + "51cf9e84f5414c7907e79a", + "71be60f1312db2fcc7f045", + "5fa826fd6352f83c34bb5e", + "62baea1b89700a3953e872", + "4a266217d4534cc588119", + "7bc0acaa724475da5a8a83", + "3d9a1023138b0e9cbe7d70", + "388d8c3c958b6abcbf6aba", + "98079c36403a029b3f0bd", + "72716051b13a2c1876c8ef", + "515a0593d1e619118d226b", + "2a035934ba5fafe2ebaf47", + "316bc661e89aeb9e7e20a6", + "25330fc3e5df50eee77cd4", + "6c8071fad8933706efff6c", + "3669984e1ddcb753afb878", + "4781781ebc739ed9d4e35", + "3915c71f3b447b64ce4513", + "726dd56f61c4c5016201f9", + "7b8ff43621b7fb13c3edd2", + "2bfe7376e8ab62fafbff59", + "207cf80fa76e8708f88dc9", + "3a4a4ac73bb38c0c48aea2", + "52e6bde0fed2ecd82f7bf", + "523ee7b96bbc2b0977b4f", + "551b691726c66f9ec1f9e8", + "361fe28e640ec02ae49613", + "71e1aa5a9aacb38b66f605", + "d427f0f9d14ecf4c54fbd", + "629e9c894bbbebf06d3299", + "37f7d323d5bf332eed1bcd", + "7fcd5bd9328b9f06223a1a", + "744db8f7e25f69bc47f2cb", + "4b0d1ff6297b378945b906", + "7c1d3420db42a6ffd37cef", + "2f8592e02ef759cdd34c72", + "4dac1ce4b87e60431b8a4d", + "451e904c04882b739d233e", + "5bb2eece8c95a515d2e2ea", + "797d4c38129f52836fa5c7", + "5d29345f097e1dc041bc7f", + "6b25878a1ec102b9e883f1", + "610d07557d991d9db3dea7", + "5d3293ca54de6a3aa06b08", + "62e4e44df51bf11734aafc", + "1945686d70d9df98093dd1", + "2c16632a312edfedcc7f72", + "19675db116558d90bb4f6", + "620c14b60053b660420c4b", + "39a26bf8336439ba9968b4", + "376c7a8d0fa0abf4c0bb7c", + "7f2209419e3163fbb4cd8a", + "6aece787aae5251b57b3ae", + "6b380bf5d71fe523ad1e4d", + "2306ed04565a9cf9fa84c2", + "7e37a126be9507ba4c717f", + "67ae2ace35fde529154a8f", + "352d204330140b3786230b", + "6927c4b12865ac8f053dcb", + "7e61e3317d07a1009894dd", + "2768a7a783d9baa4e5cce3", + "260213253056e29f0ac6e3", + "61539cf7b388689e7a260a", + "3d9131aa5802e27a83eb61", + "5f87453deb48ed6c9a1afa", + "418b73330a3b4d1a80474f", + "5cd3a1cc8bf78e4c7e3747", + "784bdef1566f244d4ff44d", + "2c4bac0a0cf06ff50ff71e", + "3608208e4497b40a62b3a0", + "6e8b2732511303a48ef731", + "1ef9edb1f958cdf81fb9d8", + "4bdbd2765933e2b1d70563", + "b2687172956319218655e", + "4f787847feba11bfcbc764", + "49ede33966bc3f0dc8757c", + "12a2fa8c4d06a694b748c6", + "2146fc84389596cf6fa8ca", + "536bfe32ac8da07b253be0", + "773a63e6b7c9e3bec91272", + "6bc6acd592c0200b749e07", + "3d28e1c12f9c60e500dce7", + "5687a42dcd55b43227f657", + "36b36922114363ceb85a26", + "51e267e9a5a7684ebfd343", + "5b4aec35da23a27808974", + "2e684b7951a2526d838fd7", + "62b2e70d411eb11bf0a695", + "6473dbfbe4a3f63d08e3f2", + "661787ba011711628186b7", + "7234cde8ecc6673caf864a", + "1e39f05dac576881e6c295", + "420c1c0074adbe0616df4b", + "177f43e8d62e87c66b9da", + "10fafca3d5f71faff8f1a", + "43dcb4450a256b9a0eb673", + "460372cf36a22fb6b9641e", + "a4d6bd96f61637d730c9c", + "1754f51aa79c3b0803bf00", + "65fe3a22c7d35ad3f875e7", + "150c29ddf5483fb74be06", + "716991a2a17f536244885f", + "475131d01f3e6dc3b169fe", + "569bfe59efe21364bf57e7", + "75ac7a48082d5afa148e7a", + "63f5fe049f46d509d141d8", + "2b90f954efc9f58a07a363", + "39c167fbee27f65e96cc7e", + "1db83df0a168bac450e4f8", + "127118c35aaf80dac2a57", + "20601a054af9d51633fab1", + "728cea43531fbac95263a5", + "ff53eda132c9a3cfecc65", + "786d54b4d5ce74ddde20a8", + "1175d70c2c07855db37245", + "2cfcb08879a9aecacf316e", + "ecef39a1ef4b4d1e8c6dd", + "70357dabf2c34c8309c723", + "4db4f1a602cec485019670", + "735a03f218370f8bd85ee7", + "3c9ecb18a83b901f901704", + "4c7d0db8193430b75f41f5", + "28eb082844c0ed277d2520", + "a3cfbf8b779e15bf28c99", + "624d49c04a48d42d76c466", + "221bb5afe07669d916e136", + "358d745e0bc4be1c3f4586", + "1ce2a05bccecd36df96b64", + "362261ed7c97591714ea9c", + "20f6e36fbf07174b587397", + "12413ef53ba7fc6fb5cd35", + "3dd366ce71f1fed428c326", + "b66201b62ddf6d13c5534", + "3164747c95104338a78b5e", + "5ca6e41b81529e38a59f6d", + "3834a1b7acb0f05d9e53ca", + "3a2f442f3b3a9a2af00b28", + "270dae1c5ccafaa07ae8ff", + "71e916ff79204bdad49695", + "4d43f85ff03e3cd18ef302", + "2a2b13112979d27489208e", + "442eb4a36ab0287728c1d2", + "4dd985f2fef5c539fa6a96", + "522619b83283553c71de74", + "794294f26a938e1caf3c0", + "25d1c185377c3cd8e704a2", + "3e7db1002a9116a5e20032", + "720aa7a7bdeaa025a23a54", + "70f2550983dbddb8957b2d", + "57aede4ca861e5051b15ea", + "52f87910ef7e6dde1f16dc", + "79c75783449d733d93b4a7", + "5186a4a6ce8351b40466bb", + "1208a98ea1dd68a01d3ec8", + "3d66483aa6674adb6569c3", + "728caa6061cb6ff29e6b21", + "3ca90695aca0fd32b28871", + "18eecc5a940548e7c51e57", + "cb8a50376e8204b8b5ea9", + "7731327e4c6ae66c8e47a1", + "16f732c5fac8192629ddb6", + "13b16e69e645c1703bf7c2", + "789addf402241ff646d77d", + "169566a480e42dcc8863ac", + "5ca4bcb81d4d03018b177", + "8ea7f70a71ad46c0c260d", + "4a67b54dcc404423e6b631", + "7b609aae44a59cf088c570", + "59fdfd7775c9750e48d811", + "5738f30e5cb40b4ed83e60", + "78b5c76a3ee8c2ef071fa1", + "2ff21a8761b9bce5f34f74", + "71af54a2496a076b559a6a", + "11f2c34fc87060adca2837", + "4476f33d15e77d3ea6c712", + "1dc0a99973375f6c4a4583", + "5cee3684d600afc7804db0", + "20fe6d6e332154329f831c", + "1b9850e5f0f8fec4d967b8", + "6b5617e9152db554d999bc", + "144303d93b170584849f6c", + "8a006b686db9c86eb0756", + "1d9a776cbeec9f5dec9407", + "503f8d64438b7a99b8de08", + "7b084b907f4fc0301dbd5", + "dea3527d089eceb4c22e3", + "38a39ada5dac01b5c2adf0", + "4cfeaacecd47507ead712a", + "3ff99310762f37d685ca95", + "492683ece46681328f9912", + "27c1b7b41af947101d694d", + "39a95d47cf87d7d7d6bc8e", + "48b438b41e1bc7e58e6ef2", + "7b0ba619013363524f168a", + "557bc3fd4a1a6866c5d19c", + "46ef25878ebd3ab0b864d2", + "70044b2b283269e2d14166", + "47226da695602ab6e77894", + "142fa830b7ba88d08608e3", + "3019d2c9a4a70055fade00", + "6bd645b33c041537bb5186", + "3fc3e580d2ad754a34bc48", + "5e8a5f959be2a17534c9bb", + "5a2cdb29cc6790b45d1f04", + "1c28b93f693054a06fb391", + "242cca5b643a5f97a01a20", + "48a0fd415822566b2ecfbd", + "308ab3a2c4d7f4df4b6a31", + "4566810f52dbdc6e52d908", + "53cf166384d9f967e4ee4a", + "32a9d4d4f421cf83f9237a", + "7f4b55a70795b9d26512fa", + "7222af7c6bff611029c53a", + "718c4a4aea9ee0da236930", + "71b31c9be0276caacd1146", + "4d89a145aa9c4acc9cbc8c", + "26b549a59dc35ee5ea7b82", + "59308e5db85655d5ae0c4", + "2f63eb0fae8122aa717440", + "4346fce81f02878bbc28d6", + "3a0c64739838b20476e0bd", + "389f7a523536bc08e2c52e", + "1a756f67d7e3e663369a04", + "732b807455afe5538cf678", + "421e7c19466e0847ffaea1", + "75aa7d0184dbe8ff376045", + "178e61138a7396d55d224e", + "2a07033e306623cf4e37d", + "25d293607604db30df2e4e", + "1e6b9387cb8fb6494ace9", + "524a00dd634d2f57ac7c6e", + "106fdb273227296116f40a", + "47efddee37fa0ef6a72a47", + "2a17c7297a08a3839ca0e1", + "4c60164f9602341914167c", + "656c647508629462e9a821", + "54e5b2458bb84fd7d4433c", + "15a3be22e80e0f6f498608", + "152b3e507f8b7898991275", + "10cc6c74c4f9fcc9428f7f", + "7e185faaca849a7f135848", + "62ae26dfe2273af99c4830", + "7255e6805e164cf9788cce", + "49b4801e9a2a64a27691d2", + "3fd90efbd4f0a4e173f589", + "4afedaa595cb8c309d3fbf", + "c57749387141da5f8fd27", + "1ba28761d3577e14d38b38", + "10a61010d82426d21109af", + "4d23f5ec809ab5057c2705", + "31e9d0607a42f7e54a8c81", + "37107b083cae132372e4d4", + "16eaf321bf41ee635d6d46", + "44bf623ac807d4c96747f7", + "b720b9f07a6b1f41654e1", + "68705a826f80224f09c337", + "798b816a4dea5ab964c64a", + "2adb843a58d472c17edcb6", + "17c5a39deb46d102235506", + "70c9c69419338ba44d6b8e", + "858c45884b129dd66817a", + "7ffd3daf76b1e818134f24", + "5b509a0106f1d06627c353", + "4d6d3f3602597781bd2ea0", + "4fb33de912dd8d2f8b8081", + "2b7758dc0945a30687fabe", + "38271b1467ee062bfe15c1", + "1d41ed28d87d24620da24", + "5b80c6e1a5c4dcb3166335", + "560e1e8aafcab315236068", + "31204f9f1e25342bbe28db", + "35d63c19d36b85b5e96648", + "38aafca45b266dbeef6fc5", + "426b930b670412d271a091", + "59f2c50a64b0c2a3e77442", + "7cb4b7b324b314195807c8", + "4a1381ccb93c34dc44cab", + "14da57f8c43c94d5133d50", + "499a1abb2a1381278175e6", + "6334fc3ff70d17dd837781", + "6717c0177a36454aef446a", + "7bd177160999a650655c6e", + "2acc282877d9cac38e38c3", + "18b021fe09fa8bdc44e567", + "45638582a87d07b0339df2", + "664ad54353749f2ad36105", + "5c53790457f0f66baaae2f", + "1edb6eab35de11d4922150", + "38c3b4008c9d0442e7b602", + "76dcede51c5087d374b20d", + "1901320882ec0093fcda5d", + "68f5ab17da1cc5dda22c36", + "4e4199871aec7ec1f99895", + "68d4b88b77dfae0da7a5d", + "a4f6b861d9a460f5b65a6", + "f7cdb22a187815c33c5e0", + "7b398d970ad745817bcb61", + "2e061928a5c3ad9bd6d9be", + "5be7c40d96f7c97153eaba", + "21887a11425a371d17db86", + "2cc7417260782c0d2394d3", + "6b421c0667b336723fc0a1", + "1d78f3d7e887debfa04bf3", + "1d165ccd9ac1e4efca4a32", + "163690a8fd51b113410cc0", + "419d9a35dec3e5f421baef", + "215c7e9a1d796b37a56336", + "541a69af40655a83e366ca", + "3f98705d2cf6346bf00972", + "4ba668ebddeaa069043875", + "2aad9e8261535baeb20b71", + "6766e290c73bba54bcc710", + "65118f1b7c366a8bbffcb8", + "7d88a8aadc667bc60fcb2e", + "16d8ad198832545831c93f", + "567508a3d2a7b4fe3b395b", + "3282cc1545c9e77ce08abd", + "57d0cd94e03404b9cc57cb", + "14f23f2aade2de50fb350d", + "280bf57e6ab95037683d33", + "15db077682cfbf170ce259", + "2e1709b850c77f2d508334", + "34ddcae84938327a3cbc30", + "ba357a389bca1484d7e54", + "bc149e667cbe5a17ed77d", + "25032025485a4979b90394", + "467db4fe225847525ef33f", + "54112eabbed42ad31637c5", + "14b68001dbf2f798322812", + "7146b897c3d924725bd0cb", + "6a76e3eb445dada83ceb12", + "30abf45ef025352e681192", + "2f687a83227d2d20f3b227", + "186605e063004c7e4a9375", + "21ba4c5acd17d59fca0ed6", + "2cad73640590abfa319b6a", + "5db729c46c687ddd7690e6", + "73673685484b4f3492976d", + "282a80b8de04941c547168", + "4b53718060040e8179d82", + "5d50e00035655b4d4ddcb7", + "546ec9785ee72a2a72d886", + "4328d17f00529ea0fead97", + "71faf2ef0654e97e0c23fb", + "49374e550d8b335cb151d2", + "42772160e3ea402851c9c6", + "c1fd8fe80d24243e7b5eb", + "111d6b945ff69be530cfca", + "2dd21df4dbce295378bd06", + "3d8509040aa8739f034dac", + "68d439e82561e55cbf1eed", + "65a1f7025bafea5088145c", + "5f70485b00138272e9a41b", + "48ede8d4a9a88f7613388e", + "1de402b5c6118ec8861aad", + "50f371336a648ade74999b", + "17da7c01f870089371d6df", + "2f64ac4f819f8343111866", + "648ea8b083a9828f8af17f", + "28d6cf3e20845dc7283634", + "7dfd6cbe22024260a179ef", + "65ab167d8e02a8df26439e", + "79d07c6a6298d34020dfe7", + "55407685456c2cb8311d26", + "413278937e6487a988805d", + "168ebadbade1cbc44496d4", + "7d6f33ec4a123fa281cabb", + "59bc93698864451646a053", + "4d1a8b95ded29dc79fd401", + "21b466e3230d809af7aa6b", + "35fa1fca985387fb7fcd19", + "1a789636807476ba5bd789", + "7b115c7c405c6e4356bac1", + "378ef780c4d32c3f15b3c3", + "23dfbd70bcc040f36d4c8d", + "6a545ca829ed278f6ee7f4", + "c06cc01bfe2a9b427102e", + "126dab6c2bfc9b83475847", + "15bf0eb485af1135b0e453", + "3b929cf6fdabeb45375120", + "11c773ac555182d789142c", + "444a50dba1a2bf390bea1e", + "1976a9fa25af6d21cad47a", + "2f88b1c87d7d02f6c2614d", + "7fa540fb3906a29b513bed", + "2b23443976252ed21088d1", + "5d9383670de64bf15eb49b", + "1540f88099c93111d6c8cd", + "2c33c53227ef5693d69f36", + "2648a635c5981b8daca07d", + "7b71ed8d456ee35292c960", + "62c36a3627b9d2b3c18de1", + "3e985c35adacaa90f5715b", + "7401d0da6ddc33225bec4e", + "740f62900b9523de37b6b0", + "3aaa2c73e60edc333c904d", + "35accc5a1e3fb474285daa", + "1d85b86a2f3f20e2832ec7", + "6dddda58fac4e8afe0c9e7", + "2fd82a7276af1cf8b372ed", + "9377e0e5c8d0de1856f6c", + "75266a81bf7f77865e6f", + "1de1227159008ec9b59ac1", + "1b5200adee3adf189b056e", + "4d8b0cd0d3401fd04e351", + "438e5a19094bce43b5b5ae", + "6f339aa4d977875b1f1f80", + "297ac1b2d19eb1e6e32d87", + "638d0229863032ef249643", + "65c9be7a29bf45e5992a7e", + "7dcf3e6b7d3d02033c946d", + "6565aab9eaab16f7430411", + "374a0e75bc76f0adac7af5", + "8649a3995ad114bb4d72f", + "45f5960a9db06a62821bf0", + "36735381ceff20a76e32eb", + "1416e580fa8bcb421dc6ae", + "64f00973a0eb117b548182", + "7507998b275e3c9bd4e10e", + "305213c4b30a9e8be153ce", + "233860a2ed2d566e131431", + "235809998758cf7e4acb1c", + "2102dede4011c5cfefb7eb", + "79486109c44990eca52723", + "43b23b71c3202b31d91018", + "63606d420b8e8397875647", + "697396e6df9539532709dc", + "581eb843dc9919f85a6644", + "3b98704f287b0ee4e659aa", + "3886dff828cc76dd830466", + "1c9f86b8742e14b6caf79b", + "bafe681e7e52073b86d32", + "1a5853834033d093c63d55", + "736d05572fd4ef85eca2b1", + "61170002cc409ddc34946c", + "5fc3c4b7f7ad5deab829bf", + "4597c1546c899a3656689", + "6667dbaf666f92bd61da79", + "a2e07f9d73c5e3effd370", + "63942ffcaaae948e9056c4", + "6a7db7fb47d3a18b620d6", + "58b95d74eb4e654735bebc", + "78a4c0445f77f31209ed17", + "7203cc213679d179eabc35", + "22884c181cdc222cad8e5c", + "7f8bc7233e2784039454db", + "aa2cbd696160321682a6c", + "4356ada1ada2921353892", + "72f7dab0b2d2a35e62478a", + "32e5682bfa3fd95762512b", + "77da1b5a2124b6c9e11847", + "593c091517fff61973996a", + "264e4b26d39119bcdc0985", + "fa33fcce55fe6a32e0915", + "127c199cd032273073f003", + "169665894aa2b356779b61", + "9dfe57d1a9a3265476d14", + "364f70dfdbb439b78e5236", + "54fb5f18b6d001ef7be401", + "321e3fdbb0b890caadc570", + "64532524c99ecb3c365a41", + "aa480c5cc76379e0cd2de", + "6ac2b70efaf88fd42c4044", + "6810dd5945e01cd2c90841", + "10aab6ed7d1b631aa4b45b", + "19537a8ee281cd28d6388e", + "5ba2a8023e5bb50b06e03", + "646ce329dbe03b0b8312de", + "4f0024b5b5580d91de0338", + "2b4b238bbabe3c70748eff", + "3bec30574a99903f587887", + "24e71c2d01e956269446cd", + "68c4a816c641b5b1090781", + "6fd170c2ab312a1f05d814", + "64d8389dc8d1b8910fc0a", + "4807e0d9a38d358d8e14c5", + "14ee39af97cd5a57b0e17c", + "24974593a8d59a89588659", + "59a7f220e101601c1d1b21", + "43fea0cf26a3e256438525", + "2b3c80a17ef583b6205fd4", + "44741cea6d95eb07e7f01d", + "2ccb45ece6ec9abb9396c7", + "5ba0eb3a703d0e42cf4094", + "400f76e25d392f347d4911", + "419e79b02e607a42e6e091", + "36c0bf9a937fe6ca772d0d", + "2244b09bebeaafafb0c481", + "1501743c447af65014399b", + "2791e42c7f90ab8d4e7fbc", + "150365cfcc4a012a673c13", + "7869636f37e63a4ffff7cd", + "211dcdb529a6bab73ad8a6", + "239309f551f303d0037140", + "3f1e6a84c6b836f245c178", + "27b94ffb61590cd0bcd89f", + "61ade8e7a0bcc40ee4c2a8", + "750f475708a1369e3fcc26", + "30bed73f7a94de9252a38c", + "3e26ac2b23b8b913845e11", + "42aa10dc273607be680d72", + "65a0cb312051f321a95f5d", + "1ae82d51e4845bef8c5d14", + "37c6007c4a0d223bec9e13", + "4f140e806dac75cc67fa3c", + "78acf4423afa2cfe1a6fc1", + "3915d17a2935e69936525d", + "7fdd8bd273e4a717226cc", + "15da282cec1859a9591ab9", + "75d3c5c33e5a2023adfd4a", + "51890cd139740ee3c35339", + "2b514798a553e5bdcd8ec1", + "722f9dc13384479d1c4455", + "1e2bd3f41ae5c299bb720f", + "5ab5c85d4bf835440ff962", + "178cb915d7350e37948956", + "184e317201ff0ac25eb6e6", + "37755ea728b820f0ab2bdf", + "5e147628ce9e9a9493f495", + "79790e81fd0d2b63f9d1b9", + "7252d249ce8cd4fb010950", + "d165a455f92b5083e0627", + "6354a865e088a0488f2701", + "43c2ec8afca87567ee9294", + "55744f373c8b8520d62370", + "63069f756c8115e5fc4c52", + "3f5c0a52d2b564cc250982", + "6b828169b3ba13bbcddb05", + "46a78cc83c010019e8b2b", + "27c6ad85e824da21b1cf9d", + "6e9f47f009d809f84a56da", + "255358696f5e9ddbfa467c", + "738abcc274fbdc4ab5efd7", + "70b9ea82f6a6c02939510c", + "5f24e71937dd097c0e8678", + "41e1bc8a63d042ba714c97", + "6da26efc24e2d57c26c090", + "575d4696bb0e4edef99446", + "4c028ddef259fa2c7d4868", + "33525d5afa91fda7d5fea5", + "49a3641c16382337f3c777", + "760b4f231686ca10ea6ea9", + "547264d2566596f18bbb5a", + "703a6cf857e651748dc09a", + "298200a0909b55e97005f2", + "5ccbc128a5721a5dd853eb", + "33d5a814c00e980600811f", + "5d66f0d9dde7339dbcd24", + "5ef30e941639d08bff19c4", + "363a65fc59f4a8184d3d78", + "366546b3844bf45b7527a5", + "18bc8168956ccd63ac68a1", + "83bfa3efcf5b970ad41cd", + "4bc9c371d07d4a025a739b", + "4636e2935765905adcc41b", + "4d08f00a99d95d0043cc4", + "3e94b32e50da81bb5afc03", + "48a13c03c03191471f1164", + "3018be3223f82c7f0c9ebe", + "185254fa056de9af1a6bd2", + "1fe069b8c57a9fbe5f6009", + "6c03f094dfe48c9743be89", + "1086eae159340e441fa0a4", + "222ea07afe042cf765ce5f", + "7754a6a5fe6be54c00f4c8", + "152dc9fc63d3c1eb6c335f", + "3f3aeb0a1df198d9c95768", + "7ef4c5361ca08ac1cb6216", + "527e969f4f6eefe6289ece", + "6b105359a1a68d94862411", + "2674d42d16e97493518d2", + "369c62fe5aafda2a550912", + "51eb860c87e1e5b70bb623", + "29f3402339c3128a1e2c1", + "413f256a64feb56e242e90", + "11ea8c21342ce42ebbf9ec", + "5517c01ca3bd4da9aef0ad", + "5d2972b12e50e727a2721d", + "4eac7fa0d6b168c3bec4e3", + "5cd8f5f9eb6806f67db613", + "412ae12837a29724832877", + "770b83b55e13465063e5a", + "76201f5e0110544f41d9be", + "c8918a059fa77676f0587", + "287593985c21589f72c821", + "6b923e02dfb1da62f37204", + "2600c04d980b2307982b22", + "25f7e1ac0d4153b6365c1c", + "484281d930b8ee32f366f0", + "3827eb26c007235c46c676", + "6cd2d14ecc5fc7c2c1b52f", + "4f0841f63a0c64aad5232e", + "77c4b593ec648025df03f6", + "81dc886feeee4945edceb", + "522afb743f67b3ca56b20", + "5505b22d0ddba48ae2020b", + "2f3b362f4b742eb82f8a34", + "1c7831e5dec267ccb26741", + "2ddac7db8be22e88618b58", + "4e6a2eb425fbd18fb02cb2", + "147b65e0e829ca30fd88c2", + "36304be3f0777300703af", + "215dcfa076749277897e0", + "3c2f54ef99be42fe30d32d", + "62a01fb38e5c88098fbcc9", + "5f84ae1685459ae7e24bf2", + "3ecd8205beb790946eaa8f", + "5ba344fee845769c2c86d8", + "36a92b305c21171dd5a616", + "3650c22d9c1072238cfcfe", + "9225712405a5bd9ade58d", + "594ae94ad86b9a719f54a7", + "59f0f5465ff1e16be9bfb2", + "4c6a0f6de7e50ac450c0c3", + "685afb7cdd699d5a8f020e", + "4f1c406e243fb2af67cd42", + "2dac9d433ff98cf24eae81", + "1167717f2d3d6238b3d21d", + "381012de4c9a82f9ef1d72", + "7047a4510b8c2107737ece", + "185033e62f44aa85a7799b", + "41e135572f9ce788481248", + "4759751a101953dd340d89", + "34d59de432c0dbb24ae55b", + "5bcd4418d37c976110b37c", + "6545cb112ea4be72bc80f7", + "52d104741cfa5fa49fa55e", + "7322c20a545b3845b54b34", + "783c78a9025283e7188a8b", + "3c81a9658bae42644c317a", + "1eb56fdccfc12b22db2048", + "3c3f770d148b4692e25b59", + "4f75e255d88657b2ba4755", + "260d6ba9444df4b85dfb92", + "34f0f61d6d8d062b6b9d9b", + "74fc1bfd19b3cbc9867bff", + "3f0d18b1efb7248950daeb", + "65b7b50446c767e6fa72fe", + "1124cfa0e070cf6fe3c638", + "2d127e6ce6bd0f1872b1", + "3fdb99cce8884ed923271f", + "2d2a15867cf9361defac4f", + "9a39acfeb3a1b4c2bc79c", + "7adeede80a05e40854e6e", + "4431184365a358de692057", + "1e4fdc54209c2229d7ffcb", + "50cfa48cfb994ab2b77aa3", + "1f4b918e0e0d47c89aa2d8", + "78ba33e419cbc7f177437f", + "5f7482c17a568566c785c9", + "6fff35974d5f0b86faa46a", + "5106bba99e6268d7bef3e4", + "67cb80a136db30b9d60d6f", + "594a3b6273b1ed2b542eaa", + "6a1d554c48496d8d543eac", + "9d8d18a72607c311d6f76", + "7047889925ed18a885358a", + "283508a2ed137e839b2207", + "65fb4589487aa5a16bd767", + "1a14d5b10cbcbb9ad3216", + "4a469bacdcaf5434109262", + "40ebb7bac65bd815945e49", + "7b2ef1bbf74c4989ed5ddc", + "5ca51c82df4def8b1588cf", + "3b22ed42f28069f29c280b", + "669e7a28f7a7c30460a80a", + "2071c913edfd4fd6daa6bc", + "3828df7e9ab6753fb83dc1", + "4cd15a66ba5a2f18c8823c", + "1ac96b01993da8677b2fd7", + "4f9634be1ae125361bd4c2", + "681fcdfe60f23e3be083f6", + "2d5bb2b553d4ed5bc0795d", + "4c4424602626193266d943", + "2df30214a49a31c21380ef", + "48b920d23514d06befaf52", + "4b4c7f0a822537ff62cdcd", + "ee9d6b69f13ec8f385e6f", + "793fd256b009d961487499", + "2d70f946f2915679b314e6", + "1bc4e87c1100a2d26aeff3", + "6b1cbac9279eaab9b503c4", + "5725842b7246179896a39d", + "4dcc6ee20983f0020ad69", + "57dbda5c8b230a87030357", + "78c437adc3b6ce946cdd", + "20ea7b335b7621642b29a6", + "179d4134709978c75bf6d2", + "36a3336f56c91232544e8c", + "e243f28e043030ee3a43f", + "2d678e77df571d7ac4859d", + "5566a844e8b1c572f69612", + "27244290f774a00786ca95", + "1812bd60b720f8920fe80d", + "7f45c48d28fd31ceeb3fd7", + "1bea5758655f1400515db4", + "249b7a4d080be0f548cabd", + "71215d6fd5e662d930a424", + "7684536a92d49a5af59f1a", + "74d39a89d87bdaa449438c", + "3e4e77e268fb6e7602e96c", + "46c6313b3914ecd376b959", + "31b9dd76b9ed5f88dd4609", + "46734211b970f8a6448a60", + "7a6d5b1013830761b58026", + "6157a651f2640a73f1f90", + "38793daa7aa086d5e70798", + "58d7de0f8254a81b5d0f5a", + "5a1fe9fffdaa20f4ab7eae", + "7e8fbf173741aea1b95c93", + "4bee7e482b290b1d3869be", + "c075fe6224a62c1010fb8", + "7340d7daed67bcc5cd4391", + "2e12097225e5783b545083", + "518711fe03b241cfb95160", + "4956721f6a2ced1fc736fe", + "636b15a893c301ff23f5f5", + "5696a96208101739ec4ba0", + "54fc920cc0125e53a92499", + "7c2e242ec2b95580a9b3bf", + "4d0e82bdf34ff4cb3a603e", + "786571b85b2768309c8ed2", + "1418facce22bf24a5e6a51", + "681a88fafe4e6f0620910", + "5e263af53ea065e044720d", + "1c614cf9a9d87d69154c21", + "346f2a2b086e1b35095d7e", + "4b6ed31d0715952774511", + "67a3f20bb5e980364816b9", + "339dd42a42d94342bf8399", + "3b55da90ad9a162be1756", + "1c07c875b3a9cdedf7611d", + "33567e972c90754c86a5ff", + "3ee5a2cc90e335867f0ce8", + "4b3a8d22fdb2c83abba9b9", + "5b6b96beb19fb0dbada937", + "5169af1cd74986160450d0", + "724f8bcd40bfc9f1ca0c68", + "51603bcc8667777e664f9d", + "78aded63d2f85ac948c449", + "73862de61086c1fd5e0678", + "5efbbe073364ace07f02c7", + "144a6c20d0a8d5dce2b12b", + "2aead0dac004faa8ab67e4", + "3f8cb5eb229acba822b48d", + "34c50fc58872b7325366", + "3c1fd5d9a6223b2ce7b02a", + "554f5cfd133bac2188241d", + "559752d946b02da4c2f657", + "3950591be73642bfa23264", + "2e8edc0b6dfcfb2392ce87", + "4c3c570182916f32a6f96c", + "65cf5014ab215afd17cef7", + "54ad7fa69dfd0b4c19f7ed", + "f4af5a6143d8f44e48afc", + "1a08e273719d3411178252", + "668b9e16f3948f582a5b94", + "3fac097802d8f5fb376d58", + "3c2dca32abbdc029f4a212", + "753f0795048443573283b2", + "622b540293b1275c5a9446", + "5a2c8ca58cb488822e9f49", + "295932427e10aface718fb", + "43e36b6d5a937387b49f6c", + "4e1162d634d0d5811a2441", + "19915afea85d27cf8df109", + "7eb8dfe838ec5ef9d3ee21", + "2c18c59d95a21961c42f21", + "7233f4136f3ace41bedb12", + "142c59f31fc82fb58a7dd5", + "452816c1b54aa2bfddcc17", + "6f24ffc802a08273be511b", + "32d68fc9b8a9c17b315382", + "5aaabbd40fa78dd417edf5", + "51d8b3e6fa0afa106abc40", + "394faf6069c716fcf8a76c", + "3f7d2ee6cb32c6bbeee194", + "4354f51efc9392bcd6e51d", + "5e73615c65ae9e74eb1ef3", + "761e42e1c908c2f09e096a", + "25df9f831698604e15991c", + "351db0dca5d74808f36d33", + "aef2488954588af921ab8", + "296a247b4b36d5c2a1884f", + "b1fe15d9ac88348f41a87", + "97342eefdbc78b9689120", + "1e47a4330f0bce93db13fd", + "7511506751237c1959933c", + "31e8a39712fb3a7a11f909", + "6116bef6a79fb2fc15f0e2", + "6d849a39e47370e473a913", + "42a81f5e10b5435180e643", + "17715e6c96cbe096c4f9c2", + "606e14eaa7d60eb7ea925a", + "30cb89652c8629b5e0dcc3", + "2625096534f2cf10d83a26", + "61036fcac29b84e5ca02ad", + "4669a41d4e444c1284d024", + "2b81c6e67e55aeb6e93a", + "23564d97f447b0091e74ce", + "494807a247f7ffab73a644", + "692eeb4ff69b42372517d7", + "3eda92314bf1d09cb5b08", + "24b22771f303ef742b8ce1", + "5c616b0d1a7bc591e70e46", + "4aad58987821ba8f33d96e", + "10d0aa100248920b9cab77", + "1ead89a48b89a75ebaa7d8", + "7fe887d8c5fb53af79cbd6", + "ab8e1dd4d27b02d09fe48", + "2294095a6b77aaa416cbd7", + "69fecb55ba6da700789d7c", + "681750fd18618072db2068", + "30a18088f5b2af396bbfd9", + "2e03d3c0794703b9605de0", + "f26a2dc235ace7b34f4b6", + "356497a9675898bccf4e79", + "3286bf159405584d85567c", + "464550e0adf269403f3e22", + "3f603c7b410b4c2db2c8e2", + "445381f98a1f5669880827", + "23eabb9cc5f4086c74bc31", + "4628eb872cffa1868b96ee", + "6ac77b7cb23565518aa2d4", + "1cfd8f0d12bcce21589c11", + "39cdc5e6675ab081ffe60b", + "1e378fb7157cdaa6fc3a50", + "669f4c5ec3934953500b78", + "46a91d898168488fd5ac51", + "64add9cabf8efdd5f7b57b", + "45813314ca1d165bcf242c", + "6f37e3a85128974cdfaa69", + "7f42b66317d26c3f938805", + "181ee17c34ab8aea52c900", + "68e8a818d524954278bbf6", + "7a6ffa939b86786a779a44", + "31d809b078cdefaaf45266", + "7f216769148f0e997c7805", + "3a82369bb1a4da519bbd70", + "25920b5c96127e9d8ab05e", + "29702fc1f57fddc3369967", + "616dbeafd6aa623c1a7d7e", + "634d2540fd670a82f219a5", + "3d9abe3ec82d9602d9dd6b", + "665bc65420c0b0a151c97e", + "37d50d7838efaf03049cd7", + "385f7f48a7be6b46d108ef", + "5f2bc99aad2f27cdee05f4", + "3b6b43619a3730d5995ae4", + "5eb76c6301d8a849a1903f", + "38910d873da8dfd237e8f0", + "41558cae58d4f9a9001b87", + "58fc1b58696f8c22cfe344", + "64520e4823f48c1f48749a", + "3827b84269040363e5e02d", + "6c9c81ea487986867245b8", + "217bd444ac8e9808b3ae5a", + "44dd70b9323f17568e4ba3", + "50226b4aa22a0465ceea0c", + "6335fb7682400180e10d15", + "1857324131e535b1b2458f", + "3845bd22f959dda9197376", + "4d7797e0b2f77a7ffee785", + "16bed27a9c005817ccf111", + "5bf1d1c71be0c49ad75d9a", + "6d16d10feb1728044f2dc3", + "3abbf8af06f889daf59c4d", + "45769a307f5593bbf72056", + "2a640efe463008db4ed634", + "57f0f7ecb2d7dad43748ee", + "8000000000000000080000", + "7aa96a9fbe718c006a48f8", + "24086a392ab75e649d3cc1", + "9f20b6fedc099ec575691", + "313d62eb5f1104de5421a", + "438f5c0f163a4dfa04e5ce", + "63137369b8d47b6c9c43df", + "4ceae8c6ea35dc274647ed", + "465f3b1e25cde0e446d90d", + "9f0c9a93eecf4de349628", + "3addce3c43218484acf509", + "101d83882a81d0147b4342", + "4585b77fea18a0113ff609", + "73e92ea015629e3728aee0", + "257564a39a648e17d015e9", + "2f927b360b2b43bff822dc", + "328a9932d6b08a41a1df0e", + "207ff6a0da7f13b316c4b0", + "4b11585991700c233f6773", + "77664e53908d00007d1205", + "434a5edb31a9c3c6a0243e", + "692adfabb87ce969422961", + "3eb189e2bfcbe180703cfd", + "367efb55edcaadbb5e4f2b", + "4573a56ada0a29d31dd6b4", + "636f015a0c62753b283d5e", + "158e9251ef94651015ecc3", + "ca30526530b6f6f0c8fca", + "20b1838f00aa00d07f70fc", + "50c65d8772a3d5db269535", + "47262fa06b9c5ac8138f4f", + "d4a270719a348af6d6c29", + "af99b9d024438cfe9df66", + "2a5043ae183d338b7ebd55", + "7b85e0b99eff408f2aa978", + "282774a1f4bcb14e6723f9", + "58137399c99866772aed9a", + "7b7e71610f1589da383c31", + "1705c133c7ba24a2b5c528", + "336a41277b427813eaa191", + "78ec94c22ee912eded5499", + "1f9e8bffcac3e1471f7cd6", + "7e688d1cbe7e0a84a0f408", + "50a70d2086b5ca78a90368", + "16f5569ecf073acc30831d", + "720d9e52c4aea85ae24480", + "15bc81dd36a0393963bb64", + "633dad9eec0d451652bf40", + "3d433adb4bcd914fcfc4", + "ae1614cb7437dc6311ee9", + "504e8f5ee0e51320af92dc", + "4d55039bf17366425f055a", + "2ad535a50fda15e1835526", + "4f5cb9e29c3567f8c1b22b", + "409705e5654888d8af2f47", + "145ecffc8b532b7855ca8a", + "4a79a4d35e92cbac8fe0c0", + "7c2eeaa3b5ac7ca26ee5f2", + "b44a774aaac3d4d335389", + "488702c5b90021b8b24933", + "62d4635d0bbd6bf8fab17b", + "47a6912faf0eba695a3f82", + "5fea5590381b705c4ba54c", + "552dab94d8fab803e3abe6", + "622e4bcd237f601b3f864e", + "6b6195f4939abc517ea1fa", + "7ae4ce9746d1a251afde2", + "5411d9720f633bf7a356ea", + "93d0f45c8e78eed19b2b4", + "2cfe955ebd8c7e4615715c", + "4680ebb5e7e7fa1e676838", + "1cbb8749de080f5bb23b75", + "33fee942f43e9b7d2118f", + "4ef1c6a1bd63bb6b6207b1", + "1c1f24204ec4b044c10ff5", + "3561d1a2752f1d17dd5823", + "782fa87576f745d6c5a644", + "68d895a65569cf3ef3e3ea", + "46c01f4170feea6c601e12", + "7b8a17b08fccb33f4b7d6f", + "6332e8b1655b1a7193eb45", + "6649997ef28c919c6cae0f", + "55b727631edd20582945d2", + "1adfa664cf45ca975af0f8", + "34ca1ca17d4004b63727d1", + "46bc16d9041c2bda07b158", + "31afe414b9e841f105214d", + "4bc252b0fa653478344f1f", + "44b0628f84b11c5e71888", + "7f821b6d896942293448e9", + "125c7d70d2b6d99ae885da", + "49fee8b58237dc40ba3c5b", + "5dce9f322e405cdd3dc195", + "4e5afb2e233daef8a9bbcb", + "64e35a2939773b306ebb74", + "3cf63e3a65a7e509ca6dd4", + "1f88577ebb6a87d8478dfc", + "5d1cdedac3c1f047923b22", + "14b8d711e9732dc1d81b85", + "63ca1ec0700483b8f859e5", + "345343979af3beadfaced5", + "3aa36ece405e3ccd9341ca", + "5c37d517c640ac7f62a532", + "68e1a6376fdb4eb7b4b0e6", + "69a00aca76ae6e660be7bb", + "1644cc3e7fe80220ef2f70", + "58689766e836a562c78c53", + "2d83b4eaa1c8f768e56c30", + "11ff8e8d5e956398c99ca4", + "66de0cd9d504d0c8a10caa", + "f5d2bac49777fc8f10242", + "30436781bd712f316b4895", + "7a7cdf214176b6d3191883", + "64f3d838badcddd9bfdd0e", + "190017f50befaddece16d2", + "21a95826890e5cccb8a83e", + "2c958c952c5c886c2a60ad", + "3f8ccc4c495c412c1876e1", + "901282766f87bc24e50af", + "67fe63e894b36bad057249", + "35ab264ca762acbf67e1de", + "65b1a43ebc40ff17757bfe", + "1e0b5aa4ebf1898b7232a8", + "5a3548ae1dc271964cafb9", + "26e45399ef9d09b479c0d5", + "ff910ecf2ce1ed443b3a7", + "15dc7895737fd27e2fc2d8", + "306cc735643548c81d480", + "716be1338eb9fa3160de8a", + "37c639bab06813135e6962", + "18d28f7c13bdb1a27fc315", + "48dd5aa0d80d3fd4d31225", + "308d7af9cf09073e61779f", + "659ccea55ad34dab51a321", + "25f3d9fd234440b97c9821", + "5c0de6f6c164f44c52de84", + "30927374f464c892c53b50", + "540974d1b3361c5ccd3a2", + "a0b14921f2ca115669309", + "157e5726ec48e98ea5652c", + "7c50148337071a44808f27", + "54f01285acb2da9689a386", + "569b68c3d77231282d1705", + "7593ab2f13aa524b76e104", + "16a7968fcf87b51aa207b", + "2b1199cb9ff7848ec581", + "235057c5ef06d64b0093a1", + "3ad2c2000ee1db409ffcab", + "46dbd89f4ae0d06c0ab8e0", + "7fe713df2e65b878c1edc6", + "4f0b0a9e8338cbca398b3f", + "67ae16da8f876a2c8dc80f", + "1bff1788b61c434292f278", + "137786296b1e5f466871bf", + "413062fa329dcbe3b8887d", + "76a4bcdffe1207b9c84c3", + "394ca6d6650a3a703c8f0", + "7ec0ec060d3788349445a5", + "5e6c438c53b4bfbeab6a4c", + "1cae4d5a0b88eed0b2d97e", + "37150fd6c06a98e84f0fb9", + "5e5c9c54f1f75bcc98d1bd", + "7273cb20026d3e5dfa9567", + "23675569b6f74cecec658", + "4d84d472f48a1f27cda4fd", + "52e4d0f780530e040b8198", + "116822d6715118a8643140", + "2fb2d651d1a5fde2dc4d89", + "2cbb69d06f0ba3051ce433", + "982362cb3f64fc2535f18", + "ce584760ca84047b25a4f", + "3d32a6b665f10a829cfff8", + "228eebf60c055615805405", + "4adc76f7cd88044421953e", + "4f588ef825e26e596e160c", + "464063c0e0f5e5eae1bad1", + "231a1fa6a52f8377b2ca86", + "3b663e3e9013cab9326fc5", + "24716274d6f1761a2e503e", + "5eb0e751f365585e4f3fd3", + "1c63d031374620336f8c7a", + "6ac96f98fa78ffb692afd9", + "71f7ff7f6245492bf4ba4d", + "46b7638024bbab6f336734", + "2d3b2e3d52eac5c09743f7", + "2bf0a5cc2a5150523d2e64", + "1f7e1880120c76703199fa", + "27b48290f4bc222f54681d", + "274cbe37d4fe65732936f", + "5b872486f12a68a939069d", + "76c344db7c98c1b1fa25d1", + "6745627963b760ee39ad1a", + "2d30342ea20393b89b038b", + "51e2ff830fcf99b4147ec", + "764156f5d90616c8c45669", + "19d3eafc75447dbc2ce4d", + "4348b708829c7eddd56237", + "605ccf0922a0c35f768933", + "86aa65ac1949dd8af6918", + "2e564f6ba5f6f74e33f2dd", + "54ec1fbecc620b2a62de33", + "da96dc29f77c98efd9a65", + "3756665d23e5dc56d35905", + "7108a03a28803eb91e8a0a", + "75fa74ccac539d6f2e079d", + "56f539741375576aac816a", + "78ab001943d18ada1f6d03", + "7a283d5e2ed98485e2d260", + "7ca8eb46f6df31902607b1", + "3a9ec75af3c8e86b8c1b73", + "61df6c089b8a0a75da0288", + "3277a60ca85c986d50dee2", + "4afa034c14d96f077cc41e", + "58ca4d190a0f756173e746", + "33e094a7802d99ab1d9620", + "4ae3a5f46681ba13e649ed", + "6369f366be6b5ec99ddddf", + "4ad5b5ec9142810d730c91", + "520d75e4874b90e95d0ac6", + "56441a020eb196f9ab47f5", + "4f100cd2b63ef0cdac7165", + "1d72e71f6a57243468bc42", + "6102d4b92b578db1756028", + "6cdde5dc50cfba13ab15cc", + "6a2bde70b440f36a3a69b8", + "40afd831d872bbb5ba2dbe", + "52a170878e73d2b9a73398", + "363495385d4023abd7fffb", + "75ecb6eacac31eec1c8d24", + "38618fda51c023d44b41df", + "1b12fc1c7d3ee5cd24b30d", + "428c02c3c8bb1613aad2fd", + "6e925cc1e63747fc8301d9", + "1711e7c4ddf7dd725f454a", + "6543f2ea86c39aa319b565", + "4f88d842683a24f7a78b4e", + "6297ed8d827bde2f27c592", + "7a4c62248fb05a7ec5f894", + "50873f081856faa7b0c6c0", + "4a5c54b88c3afab5d73bb4", + "93ecdd9b52d588b62ae9d", + "1dff7b3a25d6efec89d4f1", + "4eabe0db8ac5d733acae29", + "2d0a5221661bafe1bae3a0", + "86148c3559c855d7a4785", + "4576a87293566d06f5b643", + "2c941d4c1c7d68ef593ae6", + "2c36a4d87847724f9fdecf", + "7b5f04e933b2e4204cdc65", + "774b9d1f08bb74ab682979", + "7c1fdd60de643e750fa1d", + "682291bfd680e2cd8f9d70", + "30d33e090854573dfd98f5", + "3860366ed3637eead94b8d", + "6e8b7f0e9607e44c1f9f65", + "720851fb976798365a6829", + "f5eef843bd404a6869b17", + "2a8c9eedadb6f6d58c06cf", + "232ce65586f95692d89383", + "d5835b5723a9063a2dd80", + "72316f1be6172c06994a4d", + "6a44a264bb1144d86619f3", + "5451512089afcff74e1bd9", + "557e56b5a5dcf30ae5f48", + "2a2840d0a8db4a22fdfb53", + "71e107fc4c98b40c6f7b53", + "68c711e371efbf9b278db8", + "31b42ccc858ccceae34d5", + "47eef469d5e96dff3b60f7", + "622155e1a7c16eb9e6f098", + "73037907fb5b7e20bf7973", + "2a5beeac5cc34b9b70fc5c", + "214b26c5cc4d2d1d455254", + "3326fb026bfe153a5a80e5", + "2fd395d2076e94e7f79f79", + "1da6208947854d10119a62", + "507a197204651599300f85", + "60e1157dceceaecc3a16c9", + "179c67b2886cbf8a80171f", + "4ad8d4214e4fe01b143d8", + "594820c775fd57d86cf9af", + "18932d3a50056ecbd4c0", + "cc47e7e925da6c91fe510", + "5ca455ab52339850752f94", + "31934713e4ff1d0d7cc583", + "77747c8e4550378570ec0d", + "44fd7c4168c2a61413dbd2", + "278331e342f211746f0d9f", + "13022f601d429947abd201", + "6d5ce69503f658697314d0", + "30151eaad7aef0e79d5e07", + "3b6333c6dc16d5f4351c47", + "308b1811fe8c7d6801df6e", + "1316737cef6e8d73f98c46", + "34026c0467a5bb1302960d", + "4374fb07e1eb1efc714a7f", + "13089f86ddae7614e1f733", + "91782b2d8bf1ec8b6e4db", + "739d86f4db437bd59681d0", + "2e99bf2a9cfd14eb01e4dc", + "1f372d16a7c783f301d859", + "3fd38eb64df431878b817e", + "1b3d8a50e5425c7a4550f6", + "2f775dce855cb22a4ce4b4", + "1856ece5542adaa42b18cf", + "72bad07fa5d3ca19811efa", + "210aaed4cc7b55edc4255b", + "13ef893fe161bb05038778", + "394242cd2ce4d5c927b1f7", + "2d8ba9bb83d8b7dc77cc32", + "4a9dee0a96c91e7cd6d7ca", + "3b62b01334bf25d1f5d560", + "3c11b4ca34c3237b362a26", + "9ae11d1f0b2cb73496a44", + "7d10d41f081cc53194454d", + "3476974a3a56c244bcd4ac", + "2d248bd8de364598100d1", + "371b6d93bf32954a1ed005", + "2f9195fa1721a36e6f5198", + "b5ea9188a76cbd4490c2c", + "67fe64c68be6372b30260", + "2582d22d55dfd72b2d70bf", + "2144bb26c3488be851e3b2", + "69cf5ded5037b0fc848b28", + "451cf4e4a6ce149cfc4095", + "4845e19f6384ed5724d8ce", + "5c721c1e9f943f1e44c526", + "6b628f924b031ff396258b", + "2db4889991fd96d5a3dbfa", + "75393667821938c0e5a628", + "2e37e64613e6e49f75ff6b", + "7569e0846a7c92c5b07e91", + "544e247e73028cc23b1f51", + "2e14fbc2ca9b056ee6a0e6", + "5c96c4bf9c30f05dfa52bf", + "30455197024dac28f22ad9", + "16587b1213183c74388d6a", + "62a6ac9d0c5e4b3890d61a", + "5d0e736ad9b0e048c53cb9", + "29c81a2bbc75ee65e40fbe", + "a5803d95905530efe4cbc", + "45fae251151688f6948ec3", + "34de10a25d48bbec6bc310", + "38e1136120c0a50e7c1942", + "4be7ae42a1b71df0fdbed2", + "70eda2a92c3f3d551052fc", + "736e4111350ab36a2be4ca", + "471e19dff79f0bf8dd75e4", + "7c4c5a07ab45db64032f8c", + "3e8f3fee79b0aa7d3158c9", + "6803ba4d96f3cea5b5b619", + "645491f7754448588100c4", + "64c773513b07ac7be226c5", + "1207f0afa9b17ee1e3a14c", + "1a5a3601f9e5c757413d21", + "671a35180c429ed6cd73d6", + "3f719d970328ab86444133", + "2eb29dd03203d9dedca2ed", + "3ca5432d73f30360d5e251", + "ef9f73cc5ae815a32ca63", + "76930d75187c32e1c0855c", + "297ac6d1d91b19c8ceb3ad", + "4d06acabc42f8f6c6561a2", + "17f90d7760ace90b4281fa", + "79973f898e87ee6433e53e", + "1177a186084a0188e6b25c", + "46ea372cc256b25d8bedb8", + "9d0d5139d46e4d9db3662", + "31f4e6b45c1cedb6d4c94", + "222ad5a5eecaf564928d05", + "7bfb517a9a7064f7f0b9cf", + "88d1f466f33239ebbee3e", + "28c8b8ba9341ac37c38695", + "430a7ef273c75f6860a9e2", + "5963fe850d852bb19cdfe3", + "57ca180b4c6f8c3a63ae46", + "745f8230228fe0e913a537", + "6495ff035413be2b53c45f", + "1825a2f6c03df8e89a424f", + "4ee9fe013ba8fc6ac8d470", + "7b7c35dbf0dd6b94d050c5", + "a70e6c0e6da7b5bd943d0", + "6904f88af6eea4b3f91bbf", + "5ccb3321bf79805e3743ec", + "40fe888eb50954f82f8f41", + "1683c065332572cac40e7f", + "265a6fe3ade48b79bb704f", + "6869e474162fccd5e6ce8a", + "1621052353e1bb38663f44", + "5206d5cc4cf74b102b511e", + "459fc4d70a1a8040309b48", + "1a38abc6055dcfc6f54cd3", + "6de250d6d96fba0a4a2df6", + "521255c27009b10aeef14", + "784a6ea72c75433fa2c1c0", + "1c429a8aad032b85e815c6", + "46ae03b83630be869f3f67", + "468227ba06af62fa70d6b", + "1832f7608c30377f8a27c1", + "74e8524ea4276a1585abc9", + "479f0a9b95b8f0e630df10", + "6c9aa8a230f91d4e6f84c2", + "2020839307f0a0b2a66465", + "617907260cf1e3612508c0", + "50b259ce6ef7786ad19380", + "60ad8426c5228781a660d2", + "640821dda0f544b159e25f", + "11216382d02fa8a680f2c", + "3b142ae3f666b5a458fd6", + "50d8060a4c81ac0d9dcc9a", + "656e0aaff42e8f100df7e1", + "6b189bed3e1ee805a7089f", + "587965194057ffad1ed72d", + "7c91adf751ba7b800072a4", + "66c37766a09f2454161188", + "2aaf602c5ad427702561f0", + "1fe772e91ad75a2d2792c4", + "432bf33542ea8f8c0e1cab", + "108be849403d8b9e0adadd", + "1f098e306099d97f37bcee", + "15e468fec0387d9dcde2e9", + "35a56ed2078e145e9b5d42", + "3450478bbaf1db9aae9e0e", + "5819cdbf42afd2334f96", + "453649c203cf983e439d84", + "6e6871265fe9883143d121", + "14b7709b903167ca33c0bd", + "5bb6095d45a0253a5e3e2d", + "604b2e853911ce83225aba", + "7dcfee63c4d594e4583601", + "245ff16a71eb8c45257fd0", + "51f56cb5201bdd22f49e70", + "1b50ac3c3f5269c1d7aa40", + "68c11de19f57751aa11e9b", + "73da067d52334a718631ff", + "63f2b709d7c6ba1ce60255", + "6a47915604a062b94c626c", + "6d15e33dfd91b0adf65ea8", + "36b718d293f968b4388def", + "38b2a18fa105ae1a1e82c8", + "456d747923e7fcbd260fae", + "17a8f2f3a036b54c467b7b", + "4cd6b5c75a375bce549db5", + "ad8ecaa59795b2101aeb", + "5e89ffa159d58051edf13c", + "48457eaf5bfbcca641689", + "11e987960e92f0cfe9e7d", + "484fed0412b66b4ad6689b", + "2567685d25fd668a9a024e", + "5d36dd2a4f038c91a8e525", + "78386c3f2bea1d92b0136f", + "6ecd91e762474ea500bb02", + "460dae8d89d7708b43a1c7", + "3846b043ea9479616ae948", + "35d846be55b3952e278ab9", + "697bd2294052d067eed5b", + "29ecceda91e2de99bded7a", + "32c247d46291051243da8b", + "59d6c2db6f995cfebbccc9", + "5628eeca86bc4f505da4a8", + "4450b05b160d8c53288cd5", + "5d0b6fe03f574db311d01d", + "7059a8ae14b27b87ae7942", + "7e37627adf10efb14adf13", + "4dae59d140c542483e12a9", + "26246e8fdf408dac8fd2a5", + "2d3baa252f4d982bd2ad11", + "266efd2e0daff29e309d38", + "8fdbca74c18894d421e52", + "7cdb727ae2bfeeed50af45", + "490df281db25788739ca0c", + "324340f1f7ccc9eff05524", + "595eaf076defb81f21236", + "22aca8e5833c97719ebb51", + "421f5a540df5b7ba309bc8", + "4cf40ea87be0baab3f0a23", + "78050a04d755b7008433fa", + "70089a05ca7765b8ef62a5", + "6446d75a31a4956c235943", + "3bc0b4b12c4e0d37097319", + "6a6ceb53a9e08bce60e22f", + "5527257327c4eade309a67", + "5193e0be567990b2818200", + "540f6a5d04324cc6ed1398", + "d79412155f3d978866277", + "65e3000fa520e5bd8bfdc3", + "988dfd270fa06d78d9fba", + "6bbfc916f60c65ff6069ae", + "22a2f494120b7469421488", + "5514a9f97c736ef89e2558", + "494a8aca14d077b143ca10", + "599c6bd84b32b97e000cad", + "2983f80020a9f6532ba834", + "39395b9f947ccce230cc1d", + "5eb549dbd9b640a1018c4c", + "3a948a48ee72242647aeee", + "5c0b858603efe861d8e554", + "18af2f7c66ebae2215b225", + "7656e2bcd13769bc7d3690", + "1d345a329131e03407a9ae", + "6b91d4c08bfb155d85a09d", + "c5eb765e74f7ea6040509", + "347e522bb35549d788adad", + "3c2561b4603673cde220ff", + "78c36b7a1a1ac86080796c", + "34f1c6d5946b4f8e9c34f2", + "1d82fef6b5daac184a21bb", + "11e3b65e520ccb94e0f28b", + "53ee027a60ac6b8703b4c4", + "252a9565fc2ed88c83afe5", + "2c748923f66e9b836e2956", + "501c73bb8897e8a9b644da", + "527df835ccce3d0d8dc6be", + "753e3ffd723c55ffaa57eb", + "27cf1a1e36d6b6fbf673f1", + "303e55cf5d940fa1eb0863", + "483592c4cf34d97823b087", + "404518992cad409d30e138", + "247aa73439f114a2bae1f5", + "43f106dd9b706c7cbad455", + "60de98af5b2e9794ccddda", + "2bbb60823308802716b002", + "5a4b0bdbb9a3eba57ecafc", + "7eacc570a117e3d2c4ad3b", + "b80a7edd7c5745e63c50d", + "3d2c4d19f97ec14b7f9a20", + "8e1dc29eaa3429a93416f", + "16c859dc1504abc8bebb3e", + "142700479fca005e365a5", + "1a5a69890d5f080ad27aee", + "333e4709f384c49fba280e", + "773e49f5dd28ab9abcc4f3", + "7fcabd5ff8d8321877d09d", + "392447173660d27311fc56", + "3b607643718a1436cbf93f", + "3d01c0ebec513aebdf049d", + "115af287df30e3b9382159", + "217e1d11ab05e37175e942", + "43240f690e895ee2ce6199", + "6473a7fe7461369e02b551", + "56d1b28a25e58905b948d1", + "5c08c8490ead830327cfc3", + "60d1cb028fdf2f7506480f", + "6efc437814b1b1a8db77d5", + "386903ad1ff043a2a203ff", + "113203b24e05e4ff03bfc7", + "2287f22a43e09d12b5fed1", + "3fc330d82c00c3c98129ad", + "5bdacc4f0e9a9f3c5eb7f", + "43ad0b393a7c2a4d667efc", + "4d17bed73f2032142b03a3", + "72492bafc7adaedde393c7", + "161741a6fabf2be3cb74a", + "3253a13971cf24cc306f4e", + "3566ae3cffa53b48308a5c", + "772853e9593804a23d0c9f", + "58d985a1111ffbdece42a", + "6b463071583d5d51119c18", + "58ab9a24dbad2ee2c0942", + "7b625b197eb76a08b19ecf", + "153d46a7ad0d4c7b81a83d", + "560bc3397e1eecda48e8d6", + "3e27d166777ab6af4a4b75", + "10a7cb0c646bfbfaf6b1db", + "abe7e5169767e92b8517c", + "46bc67034da17d5b7c72cf", + "16c1a9b3bcba979d2fb250", + "20573b178651610a410e89", + "46c829e7e1980bc26c13f9", + "3428c448a20f463714e16e", + "7be85a588e4f01b973f9a4", + "382238b03129ae3a8cb2e2", + "8b93e9e7ea54df6ea61e0", + "dde95ff1403621e1e9c39", + "b3a488e23273b8e74aa2e", + "3af2323baa99fc6ef534e0", + "6003c83a8ae5ae42a0956a", + "2ac52045b3b592dfbeeaaa", + "7f29a05b16052f06eff50a", + "1eae59f579b122f18b84d1", + "28593d93a1a2159e16cc13", + "460f5f98b19a4d353358fb", + "56efa25eac0d5f675af6b6", + "73e9dbd2873c27040a215d", + "5ca40898d5d325e557e04e", + "405224a222d42397ca18d2", + "a69b0e544c08336c9606b", + "1dfe68dd4d69d0d5368782", + "18bd8096de042467441c8c", + "55f3bd5a345801aa67f91c", + "5430c091f416778afc3f3e", + "4e33cc0d26d44c2394c8d2", + "2ac1793993d045ec4ea0ab", + "a0ac3885d2cb22aeb977f", + "1073f10b92dd8a202017b2", + "23e36a6e12831353ac1afd", + "71f02d980dd943488cbefc", + "7e558ced95c8a49312174c", + "21b1555bb331b89f928e6d", + "75ea3318a1054593eca8e6", + "88658ceb2447416239af", + "7dca64fefd065e0893d874", + "5f427b13d8351db71dc75e", + "475c02da59260b083fa105", + "5ee825c795f457b727b9e8", + "124aa58a7e2a882689ba12", + "797bc83e9789b064b51c92", + "2a8b319bb90a064d3cc523", + "5570385cc742f16a21edc9", + "122e1cf4ba920fb923d0e1", + "7fc9fec9506aa1a0661240", + "3fc3680285719ed4f7e7fe", + "7175ce67c0c74c440327c2", + "503bee64726b7b32815f44", + "5c4dc3dd9138eb7169302d", + "3f0eb0b9bdbbe37f40dc5f", + "5aa25b718982092494e872", + "20b11d38582bb81886466a", + "36baace22f2d7a2014dd1e", + "27216bcb23514df00030b1", + "3146d29fae3f74014572cf", + "3988842f76572373c3459b", + "6aacfa3617f47dce14015a", + "581f2a492a4fe468c3971b", + "4cc8bba01b6788222eb375", + "5c00c9ce80be32396ca075", + "28670ba592cd5a2625df3d", + "14e47840962745e9f2bba8", + "7f26a6c99362d1126b6773", + "6eb090e9b1df79f4d2226", + "7f035a794c44a6a57abf00", + "1740e5e9a57a4e80eed5c8", + "46b1961304e45b428bd48", + "49ce8855b52dfbb878b2d3", + "313ef612f2fd65f39c2e3e", + "7332b41a9fe9dfbe59f71f", + "41858e467a21a3938d60aa", + "6234ffe0f938a25ce0f5a8", + "1105d3c71c59dedcb33f", + "7a75b868e9fb50140bd203", + "68ae7d3832d31bce57eaf3", + "600de685f1a4c2f4a236d9", + "3684bf3ee3a2b8635ca0e1", + "2bb74459adcd7029c9c35f", + "b7347a4820635a5852b61", + "249f5358017ada6567b747", + "17445a9a60b0dfca9df354", + "695d060b1aceccfdfa96c2", + "a209dce8856336ebd97f2", + "72059eace3671c76d67005", + "6dafdbef06e817ec42991d", + "47a38df2df7f516ac35f8d", + "6a3afde1cc784aefb925c8", + "112bfdedc3401ff20ffcf6", + "3161bea37fcc040c6f6494", + "6152b40d63a55e1ef6e750", + "41127c781a5dd07b6ea357", + "1df80784a603cde2e8573c", + "2ad8c773fcdf92009db9b6", + "5cd8f904c6a0e1c85597c4", + "21532161ecdbdaac15b68a", + "5a80f23e82161bfd2caa8a", + "59377c70bed9cccb346cff", + "212d386743b2c2069ec4b7", + "26fb73843bff3e4d17aa10", + "1f15e66f6c5b160801ec4b", + "4024c6847ce50a93fefd10", + "38419b7c213432cd42f4bd", + "ea9789ae096da5bedc410", + "23a7a59b35972768b71627", + "60a177acbb4aeba955e6a6", + "22d9fd1638450186756413", + "5a49a0430b2145ead2e9a5", + "7fb445fb34908201d41b44", + "7b1e254e6050240b36eede", + "44867f919f39bbc1ac8a53", + "57c6f0c9d94e02524b4029", + "553a48facee35f17214327", + "5e3402a24a307a945167f7", + "4ecbf2559411992397d1ba", + "3adf2b6aaf40f5dcdffdf2", + "156e3560db5a642c108333", + "26f3f960b2ba725c83b706", + "3135a042ca5b8873367081", + "5778dc2f1465daeafbf88f", + "142aa17e315b2096d3470c", + "17b1690a9c9f4fba9154e2", + "6f3d0d822d1a27088df8e4", + "749ebfb4005c94ed288c4", + "7f64ec3ee1d6fd7b5f9352", + "3ea29dc49c06d64c187862", + "322d1e939066766f918e43", + "d1c5eeefb8bb620c573fa", + "7d83ba89b9f89b55497937", + "2f635c018151dfffc38ed7", + "6b77b6d06b93487730de2b", + "202d04fcffa7e3a0ae0585", + "7351e32ddd53c7465f65e8", + "1d5b0385650d2d81754f72", + "5227913634dbd4b19ffe95", + "1eacd91eb3938b38f0210f", + "3ab4982748b8f986192588", + "4a648c611ef0b3b0e318e0", + "18eb41f414dd28e8ff3a1b", + "28e33efab89fb4f64d6498", + "1b67e56d8c8f6656eac86d", + "27476789fbe89ef5fe00c0", + "21e39ab39cd96423900120", + "4818fb8f958698b6e9c9d9", + "95d86ded4a7b26a1ad331", + "1b2e283bc4ff40366c744f", + "2db6e61499c9393946b57f", + "3e8986648fb4053520276a", + "5eec1e56c0a2d0e34dfc8a", + "389d9fa841750626db108d", + "4e0326164785519414d07e", + "530f4c391aa2b0938eb272", + "50c915d40aeb9e4ec78789", + "57bf13241507b812b9a904", + "3245bbf080c6731fee74dc", + "11081f4b8fb8f0a9abf772", + "7a75be28b1e93e4e0c9342", + "174fdf0bcfc8d0f4e77e83", + "46986d0da7a2c17dd1dc22", + "68e88d3bc4e8d390ae4b13", + "4a2580e03d81912089d88d", + "201e678f30ea96fd17615f", + "3566f7f67e026f0278dfd5", + "30485371efc19b50bbafe6", + "4dedb1ba2a6a4abde67337", + "33440d7d3472a4b6e2f627", + "591749051e47ee7b49cf82", + "3fe61d12a0b09791925ccd", + "7f5140ee63b60e0a33058a", + "5eb217461cfa46d5694397", + "6aaafc0107575bd9b70723", + "3305f9d7ac9bc35ded571d", + "5ef7fbdbf498c8684625f6", + "3b66491ccee4801a4e3673", + "76fbf6732402bc76e061d1", + "28a37e042abf70a7cb137d", + "534c1a3b25194e8cd66e6c", + "3eedab106a435ef32b9e48", + "6bd995ef31bcfd22d52d9f", + "6b5da25417070642e0ba4c", + "3d40b56764f7765513d13", + "44bd0de2094b8b3759356", + "312518f9c1ce1e690c003d", + "f920b02af1e3bd673512e", + "4ed1311eae64f9e834ee7b", + "4d075c933e4b93da3a33d9", + "133606f2fed41ffd77b999", + "16b6721ea95f55ef631d25", + "140aa7412f6488f5404826", + "3ae99fca89d15abe091160", + "543222604f067afa3e7558", + "2948eda7d7c508918c3056", + "4cb6253df884020966d27b", + "46bafe88322c67f3b90507", + "31416a7f09913059dc251d", + "52d3cdd253b64a03c5885b", + "1c5d10301fcf4a14c82adb", + "5cd8f782abb8b60cbf36f8", + "42b636bc4126dddf74cb00", + "5afe15c1524eda9627e183", + "783d012e8b928ea14eaad8", + "45242101d43b276b34115c", + "28b06d6b1f993702509e4a", + "16ad879cfcd3e458301dc9", + "78873bb7282961108e63a", + "1c5b7d2b84cbc7b29bf542", + "48edf77c0fc298b0491c2a", + "398764fa3e177502af4d3b", + "1d1aa15ce7c8c15f051ba9", + "401a3ed45557939fa7eea", + "13f9a309c929439a91df6c", + "3aef6b8ad8d4f116a27e4a", + "64b1dd5abc6713a8f53d0c", + "73f4373aa0c46a1ae61409", + "1ebddbaa72ad1a2b1cdc49", + "2cd33d1f501e268643d591", + "11b77783f411c457cf909e", + "d92cf9efd7d12c62f0dfe", + "2c56fdcda56f78dcda9b60", + "118d29d91686683483dea8", + "7e05b7c7d54cfa1fc7b525", + "42c5d2d1082dd2375a4ef3", + "26554ee3e9bedb1a3a09fd", + "ad64cff4b4763a7fda09f", + "5f9563c7ca70d6e5061bfa", + "38d987fd4b450ee5a69286", + "62af499c078af038905758", + "3eecfda3b4d92af2b7e5ae", + "5e195ccf98c9a4e1967fe1", + "61c0e0ff11a378274b395c", + "486fd3ea0158f33daf767d", + "4cfaabac7104cbad2ed728", + "714ed5cb0027168be15142", + "ac5bf0492a63aa0bf597", + "53339d5a01f3d2e9bc8755", + "457d09be8a2a4c351b63ae", + "1892726d56d4f8f92dde20", + "236e08f8411de38e44c3cd", + "5549ebaa872068aae68ac5", + "11df54a696817409ff1164", + "7f695021b246db24a5113a", + "5267f1f68134d546ec646f", + "4ad5e4985caa0c7ee63b9f", + "3c5262912ab7e82ffd49c", + "7f9a1f8e557617163d5e82", + "31b2ef6b5163160bdce290", + "127dbd62073fb0c17b4217", + "5fe5a0fcee7c061cf49e8d", + "34ce2df12c5e0970f682d1", + "4f6148f444b84dfe82ecb2", + "740e3fa0e998e741eb97cb", + "5623f1c8e0d5c15938b2a1", + "79ef58660a06bbc22f0cce", + "35f48b300d21989b05560", + "4efe7cc856d9eef4fda470", + "43f99aac41b05d58c624b4", + "66b03ec137e6361ddf6317", + "4382f99dff4951a775fb77", + "974b1ea8fc3d4665ea11a", + "1998c4f90bb8b5465b7b1e", + "a49f38b3c0b7ca1fc5c10", + "57d421e876be8c87768c1a", + "14c79375686a30f4c21ea1", + "667b77d58f7f6b14e19bc3", + "17b5a764867bc2f176278", + "cf2bf44fe6c433cc00c9", + "61619bfea73d2a10c7a7e9", + "3908eb827c8209b96bc643", + "e859d26ac6c854731c10d", + "562d8222a0b94f5af3137c", + "780a2a5411b159d83dcb95", + "645cf2dd2735f1cbf53f1a", + "6476d594392ef9fc9a3df1", + "7df75741d3ccafb28da8e", + "526d1eb936d1a3dec6eeb3", + "1a3337bb0bc288bf44447e", + "13413811d8a8e6bc2e6cf8", + "54728697bad28cd0bcc9f", + "2e178e1cc4f997792ce1aa", + "f339d2f5ca33347ae8d13", + "24dc2302a4b77b85525bd", + "4779c6f70cb71f00e32d17", + "20866732367b425f7e5ad1", + "26c45bee1cb7e300fef593", + "4f3fe475424626758ebe24", + "3979e2b3d54a21e7e8c1cf", + "50bb1918112bad3e57d523", + "4e1bc7c2f29a2f520bcf7d", + "3b4ae8aa403abef29b052b", + "54765bab6ab2b394d9dee1", + "5e7e83070de3b07a4bc87", + "6131db76263e902f303f6e", + "2fb62f0a2e9435830411", + "57b341376c8eeb5e957326", + "7d59312cf551555c728152", + "3e13e95a38da382cdac574", + "53e3092b891267552e8471", + "ea04fd9db78a21c39b6a5", + "42cda11218a2f5a8d7bd1f", + "3aaf5736ed929c1ed0ab93", + "6e93c69a7627e1f9832a61", + "37526cf6c350fc29ecf559", + "5640578c9a2f674c097c8a", + "41ebedf12db1451af99b12", + "66db9685c97e1039f97191", + "61e21b9a255226ab8a9c03", + "4d36c683652009a273c69c", + "3e00e41664141664f70d8e", + "734cae170e5d7d8758c509", + "26c603e605263eb37ee858", + "1cb50b0700a11348f864c6", + "6b4ed91c3f4f0b25252206", + "46436019c4b35e76ea4182", + "44885049137a26d9ff4438", + "1cf7470aa8bed908f93c32", + "56d7ace10d6e046f35bc1e", + "2bc7683658e815b0850ae", + "2bd0c39ecff8d002f3a3f7", + "2848634cb8eba43423c432", + "177aa9fd51aa698c4f5d25", + "809a8bacccc204134381c", + "60483a9742002ed4918cd1", + "7544304d1b3c2594fef689", + "49ddb3e956e6fd8d65e1ed", + "3820d1fc1eab75e925dc43", + "7093b250c7b04c2c6d567c", + "16870479234b3337ddc8c9", + "18f39bb607de6b1ad183e4", + "a5d62acbaf68c52001a4b", + "65f33a2872e25c8a682f06", + "4e66ba0bc1058a3931042b", + "357eab1d6b7f6618503b3c", + "5cac3c06df31850ad70694", + "7e68cfb951ae556b15fa1", + "7de8764ca6a43c99d6a50f", + "329c1979af2fa92b25335f", + "113149ff5647e02c5d8e8c", + "5fde1fcd656f65c682e01e", + "3a2bc2968347afc3827c67", + "b7602abf832a9540b03b8", + "28434971e0ad86e87340b6", + "e24946eda2a54a4c98b6e", + "318d2300370d914ed1483a", + "776ff8d5492c149f7acf17", + "50e46147373113c54d73c2", + "59652c3042e742dab07904", + "1e74e23fb34c50dc055d0", + "3c31433d0db703e03c294d", + "64666abc6a9a2f6a1c7575", + "191da9b869e973d2fdfea7", + "6c362e17e2173449bde86a", + "1a8ed7cad7bcfca4620120", + "273beeddd87cbae01c207f", + "568f3917922fe83ad3e225", + "44e6ec408ba05ad98e759", + "32f5fb93813b0abef00c9a", + "490db50fd1ace7e8ec15ae", + "7630fa097aa2bf97cef6b9", + "6ef800332004d6cda26cdc", + "551ec7c1ae7ed078f940c0", + "455927f484bb8820a2ccf7", + "7933956672bf2e4535ee34", + "2a7311c640e7cf0ecc141", + "7242e44696c19a3a1910b7", + "3c7a2b6b58424eab86f3b4", + "359b331d03b9cc2451c1f8", + "4169ab1c6bf3f0abec6c34", + "6df855d5b158377d521892", + "3c4374002a4b05edbee285", + "209910d1159692421526c", + "31dfcfe645b46b329ee2a1", + "1e6874a8b307092ad6e72b", + "6b7e91fb5948662e3961e3", + "23966403e567312c7a8379", + "2f62056d547ebf7995c6e6", + "5fda42ececb40f359e4f0b", + "18a6b71998f6f84fd5d814", + "76f42929010d1ca7619b42", + "50e22c6cf5d6b70def807b", + "1cc96ab6764758e9cff09d", + "59aa03a25735023ef97395", + "741d91860d83d000328e76", + "a9753c820825d73c04548", + "4ed7cbd3e32dee7a40c626", + "6ce70c288bc2711b1b024f", + "59efda7d6a6d8e6aaaba46", + "6ee757629a9b68ac7e690f", + "328bf9a8c78ea2ca3388be", + "59bb325b9748e94acb6630", + "55137101093be9fb51857e", + "9c6c4ea9b05d327c6b7f3", + "77815256a969cddb479be9", + "3b0cb59bddc94e18233703", + "7a123babe2e7abafbaf8e7", + "35d6d7bb2855d9adfbf650", + "6ad95985d0ab8e8d823145", + "2133efe27b28c873f101f", + "607776583fcde0ad8e4c87", + "e2d9cdfcde324e23eda21", + "747c7a13b706fb28e46c47", + "35d310b1c9f92e46c5dccd", + "7248daa035ed0c83c2d007", + "3c8b578aed4234d875a143", + "766ac65aedf40f90341249", + "3087f959a9893769198248", + "49a34db8369186ccd3e18b", + "69b04bfb64dc28afc90f3", + "3732911ea3b78b2cc54de2", + "7dde8d7ccd2cebd1d4b943", + "66727c69de089e222307ae", + "5a67c62d60522486e9cab9", + "6acdbbcb1d87bb33b845b0", + "1f1cae187cb4e7e2d75ff5", + "1cc8bac063e7f4722cc83d", + "1f75d643fbc4ab52296f51", + "7b34f38b9d16f0d70ddae4", + "74a0eb9dfa780e171aa5bc", + "4366b19aa12542a30c1749", + "4a1404c02a58e6862d11f5", + "55e542cd768eaa4ab7eb43", + "182ed4a29e8be479e40c89", + "5eb96063b604b2d052b457", + "d755ece5c8fed1e833d4b", + "10f7a570b959918609b06f", + "656a55d45a93fac53881ab", + "60e3811062f0661e25f626", + "24a843ed6770d822f92be9", + "216b9b04319fd8da8a6d3b", + "3e41b8ea3309221756df7b", + "5a00aa930e50101d3ad458", + "260985f3992a168bc7fb3b", + "5c3df551863d0055925c95", + "28b06a5b8a2319d5d78e37", + "3567cd9077f5bb1d3115a3", + "460858d1e253129bf64e5b", + "485bb888b6979f8f201fb8", + "7aeadbfb750a598afce6ac", + "3cfed079405fd41004c118", + "3dac1d8f9e9cf46cc42204", + "2df246fe147cf6a7d9ed5f", + "1a908fcb6be810a9e1e92a", + "6c33a3a058504d48c17efb", + "66e9cba0e526f30b7b9b8f", + "757f2101d664083b2fe8c9", + "18c5643eccf2173f575420", + "7dd9082b6f5562b8d6ba91", + "389d1e8a26db35e20882fb", + "65172c59adde7fa1aa62e", + "1a7c7fe62effcf2d1a2cb5", + "392d9ae31bf22e0236e198", + "3d886ee05f1bcf69fa4f70", + "2c8f1060dc661c38044a5b", + "16eeff7e87d3caf8e58a92", + "741dd990ea20591fd9b5ff", + "39bbee3cab035e7fc68b3", + "4996f8a3f7c2c5fac02813", + "36ded179138f0e4cdf1ee7", + "f9d7db7493258ceea1a37", + "2a6c238cf5c57a2939882f", + "35dbe95730bed0669969ad", + "290fe0ae5a419909be4e2b", + "63839ba9cca448dd7fecff", + "30a8e1972ee45f3e0613d5", + "509ea21b16907067d06b82", + "7633f58adb014bb5585678", + "6c8fa526a6bdbce9f7b832", + "4a78cbf6bef93b38948e09", + "37c7b0fc4e875134c29246", + "4c996629390ea0954eeb1f", + "222dacddb6e77241cadac8", + "2df2bed0dd9ba405c8c5ce", + "3a7c703f2642b17eba0c69", + "22e8d9bc34a96264dd4caa", + "4bb8f4e111d078e3c54590", + "69efc15f2bab10979940b4", + "4e1b51392bd1ad38a51d00", + "5e82dce0d15b40d73e81bd", + "6a410e486ad693817f9d31", + "5dab9e18ce0b8340db40a2", + "2df0f496cddcc699504250", + "124c113e25b1a8153a830d", + "28d70ec040ec983aded5c7", + "7a93c6e177d746f5eb503", + "14c9d693e42997dbc96df3", + "50755ca653aac70b84b12a", + "5f72010436c71470f190d9", + "1af9124bffaade4351e990", + "5fdc8856cd703470a1e5a4", + "10b57d68a8cfe14ef3ca7c", + "245003f901ae0a356365b5", + "63dbff9398c6d2cafd1418", + "75c2ce5e2535ac7878196c", + "15c08724b1daf7a590d087", + "3dc7ec06146d405216b267", + "1fab75ef67bec61a68a277", + "711d3de6506cffb89d82c0", + "15b79d2a607e674b1df02c", + "928d2a95f60dac2e280f3", + "2db6d4b5b7a928883df97f", + "522bb592e89a78b316244d", + "cfbfcb607ba616c016fef", + "13d6f0fac0c0b9cd891715", + "12a8a0e9fe6ba5c3656149", + "4553e500c491eb2ced6e1a", + "368d20177281b04fd8018f", + "2579cde0e8d37e04167a12", + "2f4c8ebd42ef359c5ac79b", + "7afeb7314079bb05948a57", + "4dde9b7ed5a96934e4dd51", + "3cfc7a65b66e9f8c6f8cbd", + "7453e07405f19cfba93c17", + "18488f368798b8734164ca", + "532d2ff2bd9d0ca8b344ee", + "18704740809cbd3a91bcc8", + "1a91a4ef4625f7ae911f1d", + "26240f3e8816b599bb01c6", + "60749c3a015660029dacb9", + "321405882a2a0c05f7907b", + "6b85f2803d97e818e2e527", + "40d9ddb7d82d86fe4dc6d7", + "5bc9b4c686de112404ccc3", + "49e219e4b19fa82e3cdd8d", + "6b4aa7c57cecc522b32c99", + "1152ee1f6c91b44b1faa20", + "4f1b7b04b31a6d85748c8e", + "28eaec99940a1b1f563841", + "341ee0e329f6ab9da76c4a", + "8a4219421d2f55bef801a", + "25e4a83dfc2f633765d96b", + "22a17bb1e02873c944cbe3", + "4c4fa3875e78671bc1d2bc", + "79db0961906e2d46b0b349", + "68d1c5df4d9653be9c8e7b", + "7e0f7a6620c31d72d9d568", + "42af59edeafb6c79b9d208", + "3d17d279ec6a81f53cd4f8", + "2f1ba6fd01e5cf713f7991", + "5c246c8d9baad4092bd7a9", + "1c6a5fca595a1ff62b0a7b", + "5c6ce5b29bafc437eda5ce", + "709f8b4e1e81f78ecdd5bb", + "619fb115b590487fbaece5", + "5b917d89029b0850efbfd7", + "2103ca88adecbfdd3370", + "4e0f2086acba831702db59", + "cebc8496358956c6ed352", + "4aa62ab8f33741774c11af", + "55925c1c09bda33b3d0e7c", + "47b5376a6bf9ae1b5420d0", + "5f305f39404231a1ce6591", + "d0d6f30615b8f231bece9", + "851fa3652b44e57d9190b", + "4c099f907df9db8a25350c", + "48cdee08fb7cd0c828eec2", + "7399c1866bdfc2ee9d0ba4", + "7da4d79cdf3d83f0763c79", + "5de657154513d33b2dbb32", + "4057d3883ee10c31d0c5f9", + "139a5be9fe5d74b7b324f6", + "4678975ad8ef4ef63ed234", + "3a1984f88834905315728d", + "5e53c14166e301e45a1c84", + "1246f9f5df870b21bcb1e6", + "6095ebe0914ab346aaab52", + "173ef6d2228315e7fc8577", + "71a2dd2f4561ce6b25cc84", + "17f8a55fef5d58503cdf89", + "2885d88c14361dbedb4fb1", + "69cb489051468dc8b7a10d", + "6552488fb7e68b138c5691", + "3d5e0686efab87e5e7c266", + "5adfc7a0a78f6657a5960", + "65773487e5415b58fb205a", + "1aa4bb2c56ddce8ebceb39", + "1ae4174a64ea29d65c88b7", + "2af1b36e871a2152d87ea3", + "7118c95246463e79fab7c6", + "7f31009d8b384ea51f9235", + "5eb2b60c1d97e4dcdb09d3", + "5ccfa76193ddbc64186a30", + "1e31c413e16722caeb814", + "dee72e6d522c55b461f4b", + "18250945b23b28bdd1208a", + "72e90ac5d748fbd2d7aadd", + "10ad00e38092458e73fe4f", + "1144f2116d6e426f3addec", + "720179be8f54eb5c778be", + "1fe4c7d7da3eaeaae25e65", + "51a001a64a22c7bc0db3ea", + "7d40cdfed339cab397652f", + "1960ca77285b35812422e2", + "421de31b9083741c4d4c48", + "3cd3f5ea5623ce969c863a", + "4b6b8f4e6118573075d4ce", + "43ac29ece073be2a30ce86", + "217c2392122f9868740137", + "2b3dba5edc89810815d1ce", + "7a9c1df7aec04dc00e3584", + "74aed20fd8f19001dab562", + "74f8ea2aa01f3e122e9ec6", + "7f3f1310b0770a6a8ab4e6", + "7377f9449fdfa779330064", + "4d3d6fd7781e8ff3322226", + "3629587577ea6cd990a3d3", + "29ca62a9234f915c5c9715", + "5286bfcb1951cdb460fbe5", + "1b0dfe5bf791bf4d645e64", + "150cbeb75257f8eed7903", + "5ebda7b44a30093e22fee3", + "6af9f591969edf6d33a899", + "321ccac2ccfd73a0b28c6d", + "fa6bb9b4b92165346e0ff", + "603f9b3bc6733094104e23", + "2e30617b0abeb387001867", + "e419f0eced24d03400fbc", + "2057d9029cad07c3d344a3", + "1d4515e4768ff5c6b4178f", + "7b5d99de82bacb33af7ee8", + "43f53558dbb8a25ad757e", + "4265efdcec74f163498291", + "477273c36a749543489547", + "767f863c9bfc5fd6540f44", + "d8e9fae4ec5d3e7913712", + "2ea5fa6c2e19e6ee7add96", + "55fca6cb45a0501d1c50ba", + "4e94399e1765146189df5b", + "5accf03c1a20af1120832d", + "137f8e05276cc8f9180095", + "499667b1e22348ac584789", + "7b87e87e1438c6126ab1cc", + "46ea38e0c4bb849b39baee", + "d922a909e3b3afea5fe08", + "4700bc9de4804ec44122f", + "54018c8917549d050c00a8", + "5f8307f0589178f70f7238", + "45b5b538c44c73f3bf515f", + "7ad19421f012d132850842", + "7adc118469443d4f7084b2", + "2ae496e8d9399061460619", + "49e01d719bf13fd52369ee", + "e1e55a565534c74a109fc", + "72bd80f062eb130b42b044", + "1d616376b444140f9acd68", + "48082cdc2a40ccd11ae434", + "32a426cd7460f9e5c5e7", + "bb247081da09643c00d36", + "34f2e009d684c876c246fb", + "3e2cbdf24bd5900348312", + "507a6d1fd108a63234b38f", + "3253e31b47819fbcec75b4", + "3ae16fb3fb77d48c6adcc3", + "244d1131736a5aea351d17", + "682b3c7ed60ad7c985a3a", + "22d6cba0f681e23fc64382", + "14da7875e13efd461f7c10", + "1ef2f8aa8266e26254215a", + "22cd6c35ab2195c56794f9", + "1d1b1bb20ae40ee8d35505", + "66ba97928f262067fec230", + "53e99cd5ced120123b808f", + "7e698a24ee9aa726fc4b0b", + "1df3eb49ffac499fc5f3b6", + "465d9407cc9bc6456e974d", + "48938572f05f540b474485", + "ddf6be61ce9c04533277", + "15131878551adae4b04c53", + "14c7f40a28e01adc5ae1b4", + "5cf912fba9a563060d7b3f", + "1c85ed9416af845bb8e82", + "1851d531ca021ad6f2b572", + "4ad2dfbccfebf4c881dcf6", + "16d83b4ed79a537102c236", + "19e1cce82f85eff6f6b24", + "589758587c26455b22331e", + "59fdecdacfa91d60fd391e", + "1eac63084c7797618dd9f7", + "426ece55a7fd1d858414a0", + "2078bac214b712936de507", + "3e748cccf5c4b2e587b8b2", + "232c5e33740871b389c8ba", + "7b4210ea990dbb2b80bb4", + "53b453f5f30f900af808e3", + "49f7df71bb684bf5a54c61", + "1174d8cdaeecfc5b7908d0", + "6106124e06a73207e84629", + "34242d89a6cc1d4e30fa9e", + "74d978e8d6a9ce6def9aa3", + "308787b80145ee403c389d", + "36121cc69943c0f23f8a85", + "6d5d0573b2f9596b50b73b", + "5eb9037bc76a6930985737", + "2c9401cd53725f84e2c421", + "8c59c1948361c413eed8f", + "1439532a6d3fdff49361fa", + "42d71e3ed0639f1b07231a", + "29785bd232aa4bcde009aa", + "494c96ddeebc9c314fa5db", + "2e1d98165a5897b1482cbe", + "7a4b513ca25dc5d887768d", + "5197b486ae5dad9284702a", + "1d4d18f2bee14ee417596c", + "1b8c24041b5c09c2ff1c0f", + "19e87845fee8ee9d86794a", + "dcb3217133998c35879b7", + "61c60fa253a8977e213d6c", + "3df3e3ff8b5241f9f120b6", + "7e880bc1729d1783a14627", + "7ef05035c2a08e050870e7", + "3c234bbaf5da9465f9498e", + "39fc8d30c95dd0494e9be3", + "75b29426909e9c8294f365", + "68ab0ae55863c4f8044101", + "1a01c5dd382ca52c0f8a1a", + "7eaf3d6220ab7c049341fb", + "e966e5d5e80ac9dc377a2", + "38aece2fe0c1923c569603", + "296401a6101dec9b48a81a", + "a5385b7f7d2a505f37187", + "1c0a01fb60b92af636be29", + "546f06ab10360a76005c9e", + "463e980411d809a1713383", + "6247c20f5e97453bb71b09", + "7ed8ee73ca5507f25bd5aa", + "5f9fe5fab5062ae9d40550", + "d7315bcace04536b59c5c", + "700ac125ecd365c309339c", + "792ab4b2a318b2229df59", + "6e8a28f3d3f87aa2548dbc", + "53034f778656513538ce93", + "71310c65e10b4b2e1f3924", + "fca82540d3cb37cfe38de", + "324b0e59fd313b7b066991", + "ca5fc0de7c8f0742fa11a", + "436134e757c46fe077e8fd", + "3382f247e6cbcf48a8be0c", + "5714f7d7bb3f12d88adae1", + "75c3040748861ea4157368", + "1db2b63fb5b72bd2913b9b", + "5de44a501f899626f11ecb", + "4a728ba1f43b41e3c8ba7b", + "631d5fa433132c920e949d", + "49dd9e128368a6e8f31565", + "5f091c9040f8e8b4af8c6a", + "6dbec10ac45803905232cc", + "422c99318e0e012bdf3cdb", + "7499dfe49d22092ecbaacd", + "4e9b8b836aefbcc76074a3", + "23591be47ead61c7626094", + "47cb5e48534f0fa269ac37", + "45d0bbd0c4c565d517f4d9", + "58f251e3a335055f8d1702", + "e16e90086dfb42533696c", + "32bc07a00fc1c32e790cff", + "55d4eceed6862d8b7edf73", + "3bd14b5c954fd788df3e2f", + "32267a0d010a3ac60d956b", + "2dd9e647cd7caac396218d", + "786bd6b0d956c71e3d0c41", + "5a2e3e7ac883c32720fb5f", + "41824effd56ee95a25ffcf", + "df5585842155fda65c5ad", + "f0daaf67c2422477284d4", + "285121b3579e1afaecea17", + "2d0786ef10819221e8e925", + "638a87cbb628cc2744b5a", + "2e795b59317cae4c039946", + "6df756715e22975feac139", + "4299b7c55998b524a2963e", + "d73559f9e34900d6994e0", + "4356f96a535f02cd557790", + "671133a56bfab71842e1aa", + "73475afc8917dfb47ca158", + "8cecd81b395199379b860", + "6908cd3a0537e6d9de224b", + "6c4e919619ba3e8fcc083f", + "765220bfddbe009c12884", + "696a995b7f1bd2337f9c55", + "7a35b4347e2b2fcfef4e8a", + "7715808f58e52b93fbd9f4", + "35984ab233bfbbdc2149d0", + "49f6551bb5a630f7f3a91", + "260202888a368af1bf27f0", + "28c70cf1a34bf4b12fc1a1", + "74a3895c1173d1100e060", + "500de5789e46431a14b08d", + "e50ab5db695f894b26597", + "6e0d3cb0378f9f523dd7ca", + "3b890cc2ea1882c16138ef", + "623f56668cc8a093bdba7e", + "2311c97b29ff503887b251", + "5f019291ccdeabcd687ce5", + "6467af1a0f07013b2e9849", + "14a9e816ead24aab2e6645", + "6bbcfc26c4e8fa7b836095", + "775ff949792463791cf8ab", + "62658893411360a21b6bfa", + "2fc0729bbc7485664f21f9", + "784f7b46f80b03fd06242c", + "7215cad82f761314bbdd1e", + "475c6525a253fe4a455211", + "3301553132b8af815a8ed7", + "40066cef89d0c82982356c", + "36d97c131b997ecd7866ef", + "583e484be506b8efea96b4", + "4656a2b830782828314373", + "374bc74be1e4381a79910f", + "4f459e6fecc9cadb8e977", + "2a843c02b5e59799422e65", + "3910da787142c54f4f9b2f", + "ffbb4d4d7cd961d36be9b", + "38dd92596a9fd54920876d", + "6bd057cf4845772f81f71e", + "4fe62d365b58ffaa0d2201", + "1429ba4cc3fbeac84cae7b", + "403c1a7f2d528ab5d343b9", + "2175a06a641d5e8ad33646", + "25d324d633986f4baae0fd", + "63d746c096cfab5f984c70", + "5bd335a49bc5a06867e5e1", + "375f02bea7dda994d93044", + "4f754c5d3b280b20bc95d0", + "3a997ef0ad242391b526f9", + "2c30e99c7b2606982311b7", + "4d562b2b0bde307c0edc87", + "b4aa58f86a462da2ed07", + "ddd508394009eefde3ac7", + "e73b5b515611f25e496d1", + "e4ce3641fd893553aeebb", + "32765eba5563b5336b4375", + "594ab65a623ca11a1d847f", + "7a6cf71a247a9aa2ad1f3d", + "509c14f0517edd55968bc1", + "3cb90317e0fd78744bd72b", + "45f39b8c67c74dfb911f44", + "476085adcac943f7253ad3", + "658a9098281c199cd165fd", + "cd47f8baa501aac7b0989", + "3de183e6b991f7b8085160", + "a5582fe7b241700d09fbc", + "68719eec758c692aaaddb3", + "7d5f8fcc1cf99dc3131c84", + "5a2d6c9f89fb24cf28d1b3", + "7e1946c78347049b735318", + "2db5ff229cb2d0a85b8393", + "6f9024d8cdd8d69ef10bf7", + "38102211c805f10960d5ba", + "55e838d685f75c7c6b5f20", + "339fe9b069fdcbe6f3e985", + "1a939b8af79d6b9d1e57e0", + "2b1a4dba7447b02833bcc5", + "6a5c41dd17f1f090be79f9", + "6ad4c1af807487676eed8c", + "6f33938b3b060336c57082", + "1e7a055357b6580f4a7b9", + "1d51d9201dd8c5066bb7d1", + "daa197fa1e9b3068f7333", + "364b7fe165d59b5d916e2f", + "4026f1042b0f5b1e940a78", + "3501255a6a3473cf6ac042", + "73a88b6c78ebe25a0f02da", + "645d789e2ca881eb3474c9", + "6f59efef27dbd92df6f652", + "32dc0a137f654afa8bd8fc", + "4e162f9f85bd081abd7380", + "48ef84f7c351ecdc951b2d", + "69150cde40be119caa92bb", + "3b409dc537f82b36a0b80a", + "748df460f8594e0bf1ab20", + "178fa57d907fddb0fe3cca", + "6747e95b215a546a339b7", + "55247bc5a72b8d3e89234b", + "683a5c6214b92efde4aafb", + "f36396be6cc745bba9473", + "77a73ba77b4ed622a17e87", + "2c250894e17e7f4b0dd", + "24af65fef90e2f99e03cae", + "3292c0c9fda6887e4ad161", + "304cc216ed2272d07c7f80", + "5488a723f6ba5cf9800543", + "47d8e4eb9811f9d409ea40", + "7e2be12d72782db9e725dd", + "247f391e5a3b234cf19ccc", + "29f1e17550354ceae49f99", + "4edfb060e1dacbd449d726", + "4a29c3e62c947a4a1e99b9", + "4755035ba4d9924118903c", + "3d946cf498fbed2d965f70", + "260d3af59b4f3d5c208bbf", + "34b484cdb4cebe6aff839", + "7b5ec7e3346c3cb243b356", + "6b25a8073bc36b2af4c2b1", + "3665e544d5ec7ed8868a1b", + "1ccb03c008f2e822848880", + "18e83fe885c9bab518bb97", + "42e88e9f66659afa2a393", + "5533d7d78826353c79c73e", + "674fde01f6057423c31a9a", + "3a9c7a7d5782f84fd4620f", + "19b52abcac8b60d5349efc", + "23ac86fba80f09945d51d2", + "61249154ca21ee2b75deb1", + "473c4bff7362fbbd2049ff", + "923121ae3af782c934df4", + "66fecdf77d13ff6c0b25a4", + "170a54e825e33a2265d3cb", + "31be6678e513813e0e676c", + "7972b4774882051f2d85a4", + "75b09479e265b9f0ac9a5b", + "708324dd5e787ea3d43a21", + "4c67268f528ba7e8c34a0", + "51f9e6d75a3c5264312643", + "24183bf26908368eb41547", + "5e7785eebda5c8e2f0247b", + "5338be8d9f87d3f2e46b2e", + "14bde3f9984cc98dc83f60", + "62870c281778214067b40e", + "62e9a332653e1b103db5cf", + "69c96f5702ae4eecc6f341", + "3e6265ca213c1a0be64512", + "5ea38165e28694c8629ccb", + "2be59650bf9aa57c249937", + "40678fa2d309cb9417f68f", + "3459971422155f9703c78c", + "5552617d9eaca45155f490", + "18991d6f38c445ab4b38f1", + "1aee70e483c99574480349", + "277575523998439f834d3", + "692752e677cdaba7d636c2", + "298af75c2d584b01ccc6a6", + "4d7d33eaba361883277544", + "282f326b1fcbfb463ba836", + "6b0dc0d5521d21af0ccaf4", + "57f40a819546afc89fc2ce", + "6a24f8897d3040e8fb1da8", + "51e8f647af3880d2b77ccd", + "4b223517b6c7cd85cb43d1", + "745ca85c76435eb7ba81ad", + "743eb61998341a5e892884", + "5afcdfdab7a5b6864efc6d", + "39824b01dda7b8ada90cc2", + "2beed154412bd52cf1c83c", + "6b497ffe240d0867d5d7ef", + "eb947683c26db8dac2f36", + "15891c14bba25257cb14ef", + "4f540ba10fdacad19fee6f", + "5097857cdd82d2df144dda", + "6799fa1f9cffb381bd6c8c", + "5e45b3a532e82a603df12b", + "53528c9bfa6f5405d66497", + "2248d63b93978222916f1b", + "c98c97ab7b4b0cb756894", + "57d57f4721fb6be3b38e99", + "7b4ac8e7f9ffbf17f0627f", + "22af1fffca9aa4b2ba234a", + "2b913687a118d5d595277b", + "3cd72e80ffad615f09526a", + "e050d10f9ab1681fbdc06", + "36c8b1aaf274cca356ae2f", + "3d88de9f1c15bfd7b6363b", + "73e027017f2dbdbc204a16", + "6ee2946ba009641ad73037", + "522de20b2431d6ac8f42fb", + "427af6fbf5578c6104b255", + "172bc617da9e1aa348e114", + "1a5e08fda45015af7feba5", + "208fb7a4ffec7d8d1e5be6", + "3712172b56577089f4c773", + "621bfd4a39ee713781e554", + "2f0c8ecc959b7521936666", + "682583fe078ff76c962922", + "509b53b07e607cbcf6e79b", + "1b71574f7c567d707d0e82", + "572930c1df7ba238dfc9cd", + "2029341ddfdbd9f668612", + "1a54e98271fd5720e1bc63", + "62f83959d672cbfe7201a", + "2abf897aba93d347d6e2db", + "3ecd876c819b78567f7fa4", + "69714524521e343bc3692d", + "290cc13b5edc05d863546", + "26436c96779bbae9c15fae", + "32e5746a212d6238682c00", + "5e4b991cdcf27f65105596", + "4a05e03567ac78048832e8", + "658769c97f8b8945ac2878", + "4eea383bfa391bcb14540", + "4871087f3b2cd3c0f24c3e", + "5c20428f433fbf0c9ab374", + "15aba357d612d87099180d", + "73f933fe401d564be0efd3", + "6d925493d403647cc0a7ba", + "6a40f14b7a50eeca571bae", + "446d6309025414bad0aee1", + "6e388c53aaae7d287eebd5", + "3bb5af245e5d40c6fc15e3", + "66895605da5092de3d2b87", + "50774e378282fd09459eb4", + "5abf04c6f95d64b6c414", + "54dcbbc689dad12df77730", + "226c7c98f219b40ea94b66", + "6abf077f6636ceee313734", + "53cc3acdd810a96c3160cb", + "59b759ca3a67e4725b5f84", + "48e1272ba911cad7536a1", + "1d3c95c9d8462d4c467220", + "4167a3ca5253556f128ea6", + "bfe2f259223ccddac13b3", + "bf09d6ff46adc21d04951", + "4555d38c19f123cccb6fb4", + "4a5333a5e1c04b8bdfa257", + "627a4795d0c0df1d84d13a", + "122225a7053b175027361a", + "5027d58d8950e307548d14", + "76c881f1a372f21e829095", + "7f8ad9957e40808881a192", + "621edd8ea6ff7136526540", + "64adff5211c520e76cfa93", + "7b274f32f2cbfe03031cb0", + "3c71a5e6f6b431bc524a53", + "10cc655b268878a4e8e081", + "56853e4d2e614e1924d27a", + "1c72fdd679cfcd10e369be", + "1a364185d640ba1a6ed583", + "230c19482c2fdfccb6b94", + "1a9a55461554e908c4fbf0", + "48b5f18a43890f525b850c", + "779b65c66a52eeb45328d2", + "3a0a69f5624f959d85e411", + "498cac7e3100df5899cd16", + "6be91a7f057434bdea3953", + "1b0ff68c5f14ee84b37e7f", + "af86674d8a1c364331ef3", + "4fadec3b4cf5617426ac33", + "5cc79f5d12d2a991f4ebd0", + "5ca7f66678a73081bd34e5", + "5efd2121bfee3a30184816", + "6b79ef63bb66f1362d8de", + "3c4dc48e3cdfd4ce2eefe9", + "1c9f92bdf4717c6880a9ba", + "168c6919206ac6ace0f625", + "27e147bc2366e607ad99bd", + "44678fb0d784f11b21a657", + "47792007d733892284fb9b", + "636079478bd1eb493d0866", + "7450197e181adf8c4f92cf", + "65a7ac7cbfcc2f6c41c2ac", + "c92faa8d02b107a1b5d50", + "1ee8fffd33bf6223d36b95", + "203c3b480852a2154fd642", + "7ba683eab937665ca29978", + "1998245099906d42a62588", + "75d1f80628c3a1c1082c91", + "1c6bd00355516b7177a93d", + "795824804b82c5e751df2b", + "2746a28b14b19ab8d24145", + "75b3fbba0880cedfe12ea", + "dfc33dec9862e861d43cc", + "5d77b3e7e323ddd35a71a5", + "7438dcc1d87bfc73ab26", + "755d342969e9fcde9fd595", + "7bca9525e525d6ded2c76f", + "d08254f4d2d5ca1a5b877", + "4d1a97d405c026a8a5aed6", + "825e4a5dedb493626e7ba", + "26c3f6eae80009e6946697", + "59b1b4d92c6ee6432bf67c", + "705cc0331aa0195cd9f6ec", + "6d83e6632fcdd8cf940ffe", + "69699a76b55d4ca99064a0", + "76201a82e565cd9ac092ed", + "49b08f20244bc64879adcb", + "2b04a0e7492ffe108c1c00", + "4de1c0244f476f355a3a91", + "1bacdadb366134c3d1a5c0", + "755b7f3a3389c861fb2d23", + "153d48f10507702bdbbfbd", + "17ef22a6ba1fe32d3ef7c0", + "6f55491282e49ce5634ba6", + "66ac85711d7e32d731c773", + "7a45d57fdc1a44af5791fe", + "1b931cd6241fc4f484ed23", + "30ffdb4a4aa7f26e29fcc9", + "54b4dc744541c38f937102", + "4413cfa8b5666fc0af877a", + "5b18e3d2fe16a9d973b934", + "173b57e939be4a4efef880", + "102e8f3d54ced5e10227ed", + "79b27c762372e476f703f7", + "37f81f265c72ca7279eb3c", + "6b11c6506832a5a8571e85", + "5b68ba6c572a6576af79a8", + "26580ddf1efe9fe3eae4e0", + "3c015f30d95c1da9c47adc", + "54c37f5e810a7c49e7a02d", + "3b8be315926a14f8200fe4", + "5334ba131913654474693a", + "245f14c58fc2f1bd38bf6d", + "3ff0891da2c6d0cb8ab6f0", + "3e61864fd19f85bd211f70", + "493f40656c80193590d2f4", + "5dbb4f6414155050573b80", + "6afe8bc3bb8509aff3c666", + "586e1bd3806f5472b98045", + "6afc9a3033b5fed5a0c3ee", + "7969c90c819c5b0080834", + "5ee2324ad6594548cd275b", + "5c6cf60aae0cfc30048ec1", + "40e1957b3947c90dc23e89", + "5846b0049ea6f32f4b2762", + "1e5217185f433bf1233d59", + "af0b8a8f75ec961c833db", + "4f4128c0856b216db55c75", + "41d953d4dc4746ec83a1f0", + "3d55ef23d8c9f8419ff28f", + "1a5f34cedfae0cde5ea0a4", + "6517d2ae1b7ba4107ba2ed", + "4839ff83b5f2ddc41b61ee", + "30ebf17f92538a33a005c5", + "7530bbdc505d301ed9040", + "46ea2e85d6ca1966d1ada4", + "78022742d8c1b58e95d935", + "6a25d7d313e7a656aee548", + "a2c3a3cc1a5dfdc5a02b7", + "2e76f32ec68bf11c44acc8", + "54aeb8675aac1a423a7140", + "dd0623ecc7bb862ebbbac", + "61d42c0be51a3d664c8df2", + "254a37a2b407cabbf8069f", + "687346ea28caf1c87376ab", + "67b1ce8dfe00f53da9491b", + "488aa158d747df0f5cd422", + "21eb89d73161656b740b6c", + "686f17e02f2d49c0e2e48", + "dad2db631732b0506f6b1", + "72e9a5baa06d4af7c9f9da", + "1cab579a1f775fb778d900", + "3c3d137503578a98196d6d", + "2a8bb0c8c3747adf31dc91", + "1cf9608a937eea1a0bb3af", + "40a3f5ad2d4a9b33e2f67f", + "147d7e964c45ec443a24fc", + "7b9587337c3feffe6974d6", + "5839527a17db25de563064", + "1160b80ff627f607bda927", + "5aaca79690a162240db985", + "c75433d8b0423b552102a", + "f46157d09593fd6ceaef5", + "20db18e6c822f683f97989", + "3e1e43759c2fbd4596b36a", + "125d9103db1d2a83e13f71", + "28a2b96944f1b1210e6bbb", + "33fd72210da605d38ab799", + "4cada2a5056e025832015c", + "365c9be3e9c7dcc814388a", + "9f4b0dce97935ef1d9158", + "2b8d9b2da99a690e7c44a7", + "fc59307a819ae8b7a3f67", + "567dff5f6f64aa1697fa0f", + "23343ed75a8de5a22fac16", + "4c2a57eb3ff167fa077ee2", + "7a2990f262218cc62c32dd", + "210cf16be9c62f7408e63d", + "49c59a03a60b57e7bac289", + "499ab94c7bb40ba492d85c", + "67437e976a93329c5b9760", + "77c405c1030a468f5abe34", + "34363c8e2f82b5fdad8c66", + "39c91d6ca89a6fa52b3be6", + "7b2f70ff56626a3003c33d", + "416b4cd1af257e44ad03fe", + "375ec3fc3fce6eb8e8ee9d", + "4fe741cddc07d380fb6143", + "67adab05fa921650ed942f", + "601f96473a856041a89ff8", + "13fc0f6b201b7368c44178", + "6f79151ea6cbf1bbe85f5d", + "5dd15f8501fbd308a231a2", + "8ab595a01941ab4070b39", + "6ad236039c2c3e149bcca2", + "40c514f5e20e67263ea899", + "10b3ac9e35f753e3c9deb", + "2d816960b0911019df6133", + "14efaca65e59726b81dbf0", + "7d98b2bd2e9168b6d2e72f", + "49639d01a55025d5b2f6ef", + "2e1479f3781e1a48fc49de", + "7d60cbfdcc63ced7661d40", + "3ec0da959b014a91e3d171", + "6e1573decbd31bd14c0615", + "2ae83fe35c42b256590f54", + "22d68d4ed1af18d8658de4", + "3153805f294e973c493b1e", + "23270a061497f9098a49ee", + "3ed51ed7c85d68db84d78a", + "788f47c4aa1ecb9b01c1a7", + "9dfe0a1feefabb0c62643", + "7376e75fa605889898fa7a", + "578a6c67a3dea7609537e0", + "146dc1fd204e259d148dfd", + "59ff3fb267f4dcf86fd4df", + "5a081e53f2beac49d1a3e5", + "37bd7e26cf4711cd149911", + "47d814d93ff8dca3c1398b", + "132d2eb133a0383d464ad2", + "30f7be09c5f39b5532dcd3", + "83b4a6c139b7fda28fc0b", + "77e2377901111b6ba92316", + "7add5048bc0984c36294e1", + "2afa4dd2f2245b7525fdf6", + "50c4c9d0b48bd147d875cd", + "6387ce1a213d98335598c0", + "52253824741dd177a674a9", + "3195d14bda042e7057d34f", + "6b849a1f17d635cf0a773f", + "7c9cfb41c0f888d000fc52", + "7dea2305f898b6d88f6821", + "43d0ab106641bd01d72cd4", + "1d5fe04c71a377f6784338", + "207b51e97aba651825b40f", + "41327dfa41486f6b995572", + "245cbb0117ba8963db7929", + "4956d4cfa3dee8e23259eb", + "49af3dd263ef8ddc7b0303", + "76dda8edbfa5a4265a1a74", + "26b516b52794658e68ab5a", + "260f0ab9a00e1e941e404f", + "3395f092181af53bb73f3e", + "17a50483229662a578fdf3", + "30e3bf91dbc04d50a032bf", + "525362bcc006730db95180", + "6e988e80d2c29dc7542de4", + "47efed21b3657d0618e28f", + "fb85baef473def8948133", + "67afcc19d0bb557a608666", + "3e1ecaa8d0631877bfedb9", + "38a68ae5efe6ac22d3f278", + "4b2a621bcd3f244dbd1aa6", + "2432bbe72c83689ef74c85", + "1aba34eed15b418d4b7f0a", + "2d2efb8be305a05b685aa3", + "cdd3df5aba4c7ba52b4cd", + "7c38756fdad7c18ef7576", + "437e569a7451bd9bbbce87", + "614a9023303ed4dd2cdfb9", + "43c088f2eb74b96d25a4a8", + "308a1daa2779a84d4db8ac", + "59f29456bbb20b47aa046f", + "4b0f09e29272f9d49c6266", + "b03e402e64c3436818402", + "40f2e74e1048db76b72516", + "1a484afbb93898190d8d03", + "6edb305f1f8f30902439c9", + "7fd2ed81931942f0ef8d50", + "402466331777b126e4d8e2", + "52d5ea798306c9e21853b2", + "765c653014c5e4b3dc3865", + "785211217f5fa1bf82b193", + "3bcee7bc9a5ca7219edfaa", + "61b023abdf63ddd6300036", + "2f305b730466b54d50855e", + "60b46e71f1f2b8376d5d29", + "745cc1be634380e90bc82", + "208b7d3e85a97a99407a38", + "1000ca68b2a0f4790d5b97", + "2ef94456619d9728490c1d", + "18347f5ec924cf4631f292", + "26b5c49d8c4e12d4b3d157", + "15e2aab3b7b69272b3c155", + "76272e758d9f83ceea908b", + "fb87766da12e75782ca77", + "57caf75d12ec817c6cddfa", + "1a04ba76b7855a5e9c289a", + "7e5eb2a4ef3434465acdeb", + "35b964532350abcbf76d9f", + "3f14484539a427ea73a1b8", + "4d10e4408b3b6761aa225", + "235ae37d20b21074f27732", + "44dd12bd0d7f960d6bd7f6", + "196185d708583cfba757f7", + "5f8e36ec1202b0292d5945", + "47d7208165498ac04fc240", + "332ea59945a5d0e73f7dc5", + "653694fe66c257988cd02a", + "3069cb41e51edac9ec2b3f", + "17e032019f0dc1c4277c0b", + "52a44d4aac2b12a44786a4", + "33bbdb9fd9d9e6cda126be", + "520cfdeb5b65ce3df47f12", + "3746df2dcaeb2f941850af", + "34b380f57ddac800a53234", + "7116294960ec1370cfa192", + "6c02da94ff6269ebf8b68", + "528f06b90d6ea98654eb1b", + "643b1783eeff5d2d9d100e", + "14e34536d861554652fc3d", + "28da7bd48db9e867715c64", + "7b233911df67c0ffe75298", + "282425a374dcf57904fcaa", + "7f873bc8523c4931739324", + "5f1584cca489de9bdcd65b", + "6862becb8f668738ac092f", + "495ccc90a936edcdb3b175", + "71dbc0d71fbcfcf1245bc2", + "5298718820a8e285437a64", + "2a9957bb174e3a8d1169ef", + "58dbbd6f088b5ff881356c", + "67ed429f48df076df817f4", + "ba3b72d702ce311cc02a", + "6415a8a79aa0ebffb6a24d", + "5b6485b2f7f41f0abf3544", + "edea2902a199d26d75bdd", + "97bac956d2b65a51260e7", + "b2c65762784255bbebc75", + "41b1881d9704918a051695", + "3939cec4c6eb132c9146a8", + "4e4622894612a0772ab9f8", + "398cbdee468f0759c375a1", + "592a4efec7cf89e527fdb", + "79ea859ae0d9bf58c8e071", + "4786c255855f792a20f869", + "272821f07dab57e4aaf0a7", + "25e016000255df0b5c8153", + "17040e8c8be515e4ea36e", + "341181b7d4d6f4e2cf9643", + "73f8a019ddb59d3f06f049", + "cbf28251298433a3abc70", + "51edf68dda1a87c4b3af7e", + "2e78ee01fc4dbe304eaea1", + "36a98de095d312e040c903", + "1c94ea576c3cfe00e40a0c", + "2969569df7efe8c61bb461", + "2b036df33feda1ac5edb68", + "3d1dbd13d46aa7f5e4c42", + "32f17d420cb00b34cd9fc3", + "79a8e47a4d897cf6b712f", + "6be705331dd40db5a995b0", + "797e5770501b190fa5f6f1", + "21d9c50ac15f9a1fc38df4", + "639eb30656278296f2b3e0", + "4b90d5d4f791e4cafea283", + "7b4912ce2f8ea6ad90baf0", + "185c0df44a167fc9bfe948", + "4c622bd5bd26bcbd487c68", + "7c4aa256f5265e9d49e8ab", + "63f8378a4c563212109ee4", + "4ca98168d36f8ab3815a02", + "411a5d336f1cca7988f319", + "34c572dd024d37c54c5648", + "249469414e604f245a56ca", + "2e9650e328b679ea03af31", + "db07432bf40360e3df399", + "2e9fc43379988881a1b064", + "752129c2d07a536bf3bb8", + "c79d219ef793e02a9f989", + "210441f8cc9b531f88fd3a", + "6bb593df2f572a23254ed6", + "55152f253ffb05575c981d", + "40734a14dd653457e54b74", + "7fcb3af03a778d48d5ac9b", + "43e02a2659ddc4d3204fd7", + "2ab0a302ecc453de7fdbe4", + "2a68ad26b94fd25b4509aa", + "46afa6e418c9bd4065cd9d", + "517123f4920304dc75317a", + "33c3a8fe7d6e90cd610695", + "1a30afeb54dea502f0310a", + "2b5280596202f4b3ee0814", + "70b50a59ebc270bb237505", + "65f71d8c8e62cbeef07daf", + "197461e90c6b70a7dda46d", + "4053f687fd270a04d092a9", + "43d235cd54423fd6135def", + "ac0f86afb7bbca8d57c4f", + "1dd4abfd6c4ed8a3ad6bbb", + "25d3735a734b777dd960b8", + "56a6cdbd81ef505320e706", + "3c1c9492a56c8c78536095", + "31ee9d29cb2f2a7eeddbc0", + "666ea50157a2d8307a0ef8", + "1472017c713a1063411e0", + "53e73a626a5de69e43d0e0", + "dcc0bec90c531be4924ef", + "6bd3a60ce037d04a7d822c", + "3ad7e93e4ab55d402a33ea", + "10db0037fd5f7d8c49aee6", + "4d29703647563e84d6ac7f", + "2555442bf058722bf0120c", + "2e274c1905f505ef9d43c1", + "46b0509f9638e9030f5895", + "4082d11934cd3944191e6d", + "3cab0ae1036c6d43311ae4", + "218c9ea39a51618b1ce10e", + "9e1bd1e36f73d0f69f697", + "5a20607ce9679fb1f266e5", + "4ae24f235a28b7f71492ce", + "7510db776aba775075e549", + "5695db84b4c92a3d6677b2", + "74e01ea265377cb713e57a", + "768cbd11024387469f6ee1", + "61b85bccf0f4316c2cec04", + "aeeaf98aedc83e6ae6cc5", + "4e175c68ed04c585f606f8", + "1ee9410958604d03f20f1f", + "127b65c61b8c8f1b9456ee", + "3d57e0a1ef4abcae8719be", + "688ea19369341f6943063f", + "1f91eb155829f1481d6da7", + "4f34769ad379d64a27233e", + "59daf69acb0d30ef2fc5db", + "1efc90353d647b1a3dfd54", + "39965be2b1bbb3ed832fdd", + "7fd47e391981aa515116c7", + "5ca9b2680bb84ff6e98b33", + "36b7f85db80800549459bd", + "16d114b00964bdc8e2e82a", + "7c1256dceb40e2f63ca4f9", + "5b4dd88e0cfc108bdc7320", + "239e94f2e5843a6e20f1bb", + "3552a76787de4570d42693", + "6f2f55effdb76df46b548a", + "6152765b747658a14d5829", + "1778273a04ac508e342b", + "75471e22b2d84fd2fe01b9", + "5d6bf6a59488555bf1342a", + "160134aa459258ff8f6285", + "17e8af02e79e7f8d2cdf99", + "4f5e7f770a4d50c69c4028", + "51fc2c3f86b8fc46a7a221", + "70d95d23dca53184d30b4b", + "4a9b685698a7674338b188", + "4d7940ea6bfaa7b282a985", + "39baaf1f520d96bfc8c1df", + "409fc384bef4b3d255371f", + "3bac7e0675e0a9967ff7da", + "5c1544633a0bf7939343d0", + "39d71478d3005e797c6913", + "153884834dca9aae7d5d2d", + "630270f2ed4331deaf63f0", + "46323a1998a54f7e0819f6", + "61c87048ea8325590bc5b1", + "1960b3a13c6cb6acb7f489", + "3956e2767e97b7703253b0", + "1b5226354071022a104a86", + "3a7ecceb35e2e9a438dbd5", + "10c81c57aed768b3285598", + "bd499ce82d93c07477fc", + "67e11e83cb547515b53701", + "171757e72adb6abd8f440b", + "590056c647987959065bd", + "4e27f64f8732105513ad9b", + "de9896eb70f1668b87fc", + "457dc9644e5b25ae6c4291", + "5a6df4a369ed81627d4fa3", + "568fd03e0a80223cd1669a", + "1e92415029559dc3ed8283", + "1cb2dabf0298f57d15e65c", + "426541c137d269fd2e2296", + "19a439abdf3f4f5eb63683", + "482af287c71050fd03632a", + "47a080b7584194b936f712", + "20d4366552d0d83219fa0d", + "4494bc9e65c8cf2a6ea51d", + "2148939cfe2757b6666fc2", + "476ef278c257202dd01711", + "3eaa7351a72b065707e47a", + "2703e4a7969073dd381cbd", + "1badf1b7dc0b73e0bf8b67", + "47d847bd96fbfc9c221fd4", + "13637e15b786797995ba49", + "5e842bbb537167f75451a7", + "3b228f46cdc0e8a979b45e", + "2fdd94b55dd5fb9a3915f5", + "1cca04897dbffe7f26f2ec", + "67a8cdbece1aca4e55ba72", + "47ba42dd06a62256ee8c8b", + "3288681f4d08858009187c", + "69412d8563ffa7e83b0ef0", + "240e2e38e41f3b6530a267", + "12e92ef014e8d7fbb8d23e", + "45440750f90776251263b4", + "3a8965cf80aa6c4410dfab", + "559bf101b9cff724b929cd", + "280f08134d28252bd0b713" +}; + +static const char *RootsInv[] = { + "1", + "280f08134d28252bd0b713", + "559bf101b9cff724b929cd", + "3a8965cf80aa6c4410dfab", + "45440750f90776251263b4", + "12e92ef014e8d7fbb8d23e", + "240e2e38e41f3b6530a267", + "69412d8563ffa7e83b0ef0", + "3288681f4d08858009187c", + "47ba42dd06a62256ee8c8b", + "67a8cdbece1aca4e55ba72", + "1cca04897dbffe7f26f2ec", + "2fdd94b55dd5fb9a3915f5", + "3b228f46cdc0e8a979b45e", + "5e842bbb537167f75451a7", + "13637e15b786797995ba49", + "47d847bd96fbfc9c221fd4", + "1badf1b7dc0b73e0bf8b67", + "2703e4a7969073dd381cbd", + "3eaa7351a72b065707e47a", + "476ef278c257202dd01711", + "2148939cfe2757b6666fc2", + "4494bc9e65c8cf2a6ea51d", + "20d4366552d0d83219fa0d", + "47a080b7584194b936f712", + "482af287c71050fd03632a", + "19a439abdf3f4f5eb63683", + "426541c137d269fd2e2296", + "1cb2dabf0298f57d15e65c", + "1e92415029559dc3ed8283", + "568fd03e0a80223cd1669a", + "5a6df4a369ed81627d4fa3", + "457dc9644e5b25ae6c4291", + "de9896eb70f1668b87fc", + "4e27f64f8732105513ad9b", + "590056c647987959065bd", + "171757e72adb6abd8f440b", + "67e11e83cb547515b53701", + "bd499ce82d93c07477fc", + "10c81c57aed768b3285598", + "3a7ecceb35e2e9a438dbd5", + "1b5226354071022a104a86", + "3956e2767e97b7703253b0", + "1960b3a13c6cb6acb7f489", + "61c87048ea8325590bc5b1", + "46323a1998a54f7e0819f6", + "630270f2ed4331deaf63f0", + "153884834dca9aae7d5d2d", + "39d71478d3005e797c6913", + "5c1544633a0bf7939343d0", + "3bac7e0675e0a9967ff7da", + "409fc384bef4b3d255371f", + "39baaf1f520d96bfc8c1df", + "4d7940ea6bfaa7b282a985", + "4a9b685698a7674338b188", + "70d95d23dca53184d30b4b", + "51fc2c3f86b8fc46a7a221", + "4f5e7f770a4d50c69c4028", + "17e8af02e79e7f8d2cdf99", + "160134aa459258ff8f6285", + "5d6bf6a59488555bf1342a", + "75471e22b2d84fd2fe01b9", + "1778273a04ac508e342b", + "6152765b747658a14d5829", + "6f2f55effdb76df46b548a", + "3552a76787de4570d42693", + "239e94f2e5843a6e20f1bb", + "5b4dd88e0cfc108bdc7320", + "7c1256dceb40e2f63ca4f9", + "16d114b00964bdc8e2e82a", + "36b7f85db80800549459bd", + "5ca9b2680bb84ff6e98b33", + "7fd47e391981aa515116c7", + "39965be2b1bbb3ed832fdd", + "1efc90353d647b1a3dfd54", + "59daf69acb0d30ef2fc5db", + "4f34769ad379d64a27233e", + "1f91eb155829f1481d6da7", + "688ea19369341f6943063f", + "3d57e0a1ef4abcae8719be", + "127b65c61b8c8f1b9456ee", + "1ee9410958604d03f20f1f", + "4e175c68ed04c585f606f8", + "aeeaf98aedc83e6ae6cc5", + "61b85bccf0f4316c2cec04", + "768cbd11024387469f6ee1", + "74e01ea265377cb713e57a", + "5695db84b4c92a3d6677b2", + "7510db776aba775075e549", + "4ae24f235a28b7f71492ce", + "5a20607ce9679fb1f266e5", + "9e1bd1e36f73d0f69f697", + "218c9ea39a51618b1ce10e", + "3cab0ae1036c6d43311ae4", + "4082d11934cd3944191e6d", + "46b0509f9638e9030f5895", + "2e274c1905f505ef9d43c1", + "2555442bf058722bf0120c", + "4d29703647563e84d6ac7f", + "10db0037fd5f7d8c49aee6", + "3ad7e93e4ab55d402a33ea", + "6bd3a60ce037d04a7d822c", + "dcc0bec90c531be4924ef", + "53e73a626a5de69e43d0e0", + "1472017c713a1063411e0", + "666ea50157a2d8307a0ef8", + "31ee9d29cb2f2a7eeddbc0", + "3c1c9492a56c8c78536095", + "56a6cdbd81ef505320e706", + "25d3735a734b777dd960b8", + "1dd4abfd6c4ed8a3ad6bbb", + "ac0f86afb7bbca8d57c4f", + "43d235cd54423fd6135def", + "4053f687fd270a04d092a9", + "197461e90c6b70a7dda46d", + "65f71d8c8e62cbeef07daf", + "70b50a59ebc270bb237505", + "2b5280596202f4b3ee0814", + "1a30afeb54dea502f0310a", + "33c3a8fe7d6e90cd610695", + "517123f4920304dc75317a", + "46afa6e418c9bd4065cd9d", + "2a68ad26b94fd25b4509aa", + "2ab0a302ecc453de7fdbe4", + "43e02a2659ddc4d3204fd7", + "7fcb3af03a778d48d5ac9b", + "40734a14dd653457e54b74", + "55152f253ffb05575c981d", + "6bb593df2f572a23254ed6", + "210441f8cc9b531f88fd3a", + "c79d219ef793e02a9f989", + "752129c2d07a536bf3bb8", + "2e9fc43379988881a1b064", + "db07432bf40360e3df399", + "2e9650e328b679ea03af31", + "249469414e604f245a56ca", + "34c572dd024d37c54c5648", + "411a5d336f1cca7988f319", + "4ca98168d36f8ab3815a02", + "63f8378a4c563212109ee4", + "7c4aa256f5265e9d49e8ab", + "4c622bd5bd26bcbd487c68", + "185c0df44a167fc9bfe948", + "7b4912ce2f8ea6ad90baf0", + "4b90d5d4f791e4cafea283", + "639eb30656278296f2b3e0", + "21d9c50ac15f9a1fc38df4", + "797e5770501b190fa5f6f1", + "6be705331dd40db5a995b0", + "79a8e47a4d897cf6b712f", + "32f17d420cb00b34cd9fc3", + "3d1dbd13d46aa7f5e4c42", + "2b036df33feda1ac5edb68", + "2969569df7efe8c61bb461", + "1c94ea576c3cfe00e40a0c", + "36a98de095d312e040c903", + "2e78ee01fc4dbe304eaea1", + "51edf68dda1a87c4b3af7e", + "cbf28251298433a3abc70", + "73f8a019ddb59d3f06f049", + "341181b7d4d6f4e2cf9643", + "17040e8c8be515e4ea36e", + "25e016000255df0b5c8153", + "272821f07dab57e4aaf0a7", + "4786c255855f792a20f869", + "79ea859ae0d9bf58c8e071", + "592a4efec7cf89e527fdb", + "398cbdee468f0759c375a1", + "4e4622894612a0772ab9f8", + "3939cec4c6eb132c9146a8", + "41b1881d9704918a051695", + "b2c65762784255bbebc75", + "97bac956d2b65a51260e7", + "edea2902a199d26d75bdd", + "5b6485b2f7f41f0abf3544", + "6415a8a79aa0ebffb6a24d", + "ba3b72d702ce311cc02a", + "67ed429f48df076df817f4", + "58dbbd6f088b5ff881356c", + "2a9957bb174e3a8d1169ef", + "5298718820a8e285437a64", + "71dbc0d71fbcfcf1245bc2", + "495ccc90a936edcdb3b175", + "6862becb8f668738ac092f", + "5f1584cca489de9bdcd65b", + "7f873bc8523c4931739324", + "282425a374dcf57904fcaa", + "7b233911df67c0ffe75298", + "28da7bd48db9e867715c64", + "14e34536d861554652fc3d", + "643b1783eeff5d2d9d100e", + "528f06b90d6ea98654eb1b", + "6c02da94ff6269ebf8b68", + "7116294960ec1370cfa192", + "34b380f57ddac800a53234", + "3746df2dcaeb2f941850af", + "520cfdeb5b65ce3df47f12", + "33bbdb9fd9d9e6cda126be", + "52a44d4aac2b12a44786a4", + "17e032019f0dc1c4277c0b", + "3069cb41e51edac9ec2b3f", + "653694fe66c257988cd02a", + "332ea59945a5d0e73f7dc5", + "47d7208165498ac04fc240", + "5f8e36ec1202b0292d5945", + "196185d708583cfba757f7", + "44dd12bd0d7f960d6bd7f6", + "235ae37d20b21074f27732", + "4d10e4408b3b6761aa225", + "3f14484539a427ea73a1b8", + "35b964532350abcbf76d9f", + "7e5eb2a4ef3434465acdeb", + "1a04ba76b7855a5e9c289a", + "57caf75d12ec817c6cddfa", + "fb87766da12e75782ca77", + "76272e758d9f83ceea908b", + "15e2aab3b7b69272b3c155", + "26b5c49d8c4e12d4b3d157", + "18347f5ec924cf4631f292", + "2ef94456619d9728490c1d", + "1000ca68b2a0f4790d5b97", + "208b7d3e85a97a99407a38", + "745cc1be634380e90bc82", + "60b46e71f1f2b8376d5d29", + "2f305b730466b54d50855e", + "61b023abdf63ddd6300036", + "3bcee7bc9a5ca7219edfaa", + "785211217f5fa1bf82b193", + "765c653014c5e4b3dc3865", + "52d5ea798306c9e21853b2", + "402466331777b126e4d8e2", + "7fd2ed81931942f0ef8d50", + "6edb305f1f8f30902439c9", + "1a484afbb93898190d8d03", + "40f2e74e1048db76b72516", + "b03e402e64c3436818402", + "4b0f09e29272f9d49c6266", + "59f29456bbb20b47aa046f", + "308a1daa2779a84d4db8ac", + "43c088f2eb74b96d25a4a8", + "614a9023303ed4dd2cdfb9", + "437e569a7451bd9bbbce87", + "7c38756fdad7c18ef7576", + "cdd3df5aba4c7ba52b4cd", + "2d2efb8be305a05b685aa3", + "1aba34eed15b418d4b7f0a", + "2432bbe72c83689ef74c85", + "4b2a621bcd3f244dbd1aa6", + "38a68ae5efe6ac22d3f278", + "3e1ecaa8d0631877bfedb9", + "67afcc19d0bb557a608666", + "fb85baef473def8948133", + "47efed21b3657d0618e28f", + "6e988e80d2c29dc7542de4", + "525362bcc006730db95180", + "30e3bf91dbc04d50a032bf", + "17a50483229662a578fdf3", + "3395f092181af53bb73f3e", + "260f0ab9a00e1e941e404f", + "26b516b52794658e68ab5a", + "76dda8edbfa5a4265a1a74", + "49af3dd263ef8ddc7b0303", + "4956d4cfa3dee8e23259eb", + "245cbb0117ba8963db7929", + "41327dfa41486f6b995572", + "207b51e97aba651825b40f", + "1d5fe04c71a377f6784338", + "43d0ab106641bd01d72cd4", + "7dea2305f898b6d88f6821", + "7c9cfb41c0f888d000fc52", + "6b849a1f17d635cf0a773f", + "3195d14bda042e7057d34f", + "52253824741dd177a674a9", + "6387ce1a213d98335598c0", + "50c4c9d0b48bd147d875cd", + "2afa4dd2f2245b7525fdf6", + "7add5048bc0984c36294e1", + "77e2377901111b6ba92316", + "83b4a6c139b7fda28fc0b", + "30f7be09c5f39b5532dcd3", + "132d2eb133a0383d464ad2", + "47d814d93ff8dca3c1398b", + "37bd7e26cf4711cd149911", + "5a081e53f2beac49d1a3e5", + "59ff3fb267f4dcf86fd4df", + "146dc1fd204e259d148dfd", + "578a6c67a3dea7609537e0", + "7376e75fa605889898fa7a", + "9dfe0a1feefabb0c62643", + "788f47c4aa1ecb9b01c1a7", + "3ed51ed7c85d68db84d78a", + "23270a061497f9098a49ee", + "3153805f294e973c493b1e", + "22d68d4ed1af18d8658de4", + "2ae83fe35c42b256590f54", + "6e1573decbd31bd14c0615", + "3ec0da959b014a91e3d171", + "7d60cbfdcc63ced7661d40", + "2e1479f3781e1a48fc49de", + "49639d01a55025d5b2f6ef", + "7d98b2bd2e9168b6d2e72f", + "14efaca65e59726b81dbf0", + "2d816960b0911019df6133", + "10b3ac9e35f753e3c9deb", + "40c514f5e20e67263ea899", + "6ad236039c2c3e149bcca2", + "8ab595a01941ab4070b39", + "5dd15f8501fbd308a231a2", + "6f79151ea6cbf1bbe85f5d", + "13fc0f6b201b7368c44178", + "601f96473a856041a89ff8", + "67adab05fa921650ed942f", + "4fe741cddc07d380fb6143", + "375ec3fc3fce6eb8e8ee9d", + "416b4cd1af257e44ad03fe", + "7b2f70ff56626a3003c33d", + "39c91d6ca89a6fa52b3be6", + "34363c8e2f82b5fdad8c66", + "77c405c1030a468f5abe34", + "67437e976a93329c5b9760", + "499ab94c7bb40ba492d85c", + "49c59a03a60b57e7bac289", + "210cf16be9c62f7408e63d", + "7a2990f262218cc62c32dd", + "4c2a57eb3ff167fa077ee2", + "23343ed75a8de5a22fac16", + "567dff5f6f64aa1697fa0f", + "fc59307a819ae8b7a3f67", + "2b8d9b2da99a690e7c44a7", + "9f4b0dce97935ef1d9158", + "365c9be3e9c7dcc814388a", + "4cada2a5056e025832015c", + "33fd72210da605d38ab799", + "28a2b96944f1b1210e6bbb", + "125d9103db1d2a83e13f71", + "3e1e43759c2fbd4596b36a", + "20db18e6c822f683f97989", + "f46157d09593fd6ceaef5", + "c75433d8b0423b552102a", + "5aaca79690a162240db985", + "1160b80ff627f607bda927", + "5839527a17db25de563064", + "7b9587337c3feffe6974d6", + "147d7e964c45ec443a24fc", + "40a3f5ad2d4a9b33e2f67f", + "1cf9608a937eea1a0bb3af", + "2a8bb0c8c3747adf31dc91", + "3c3d137503578a98196d6d", + "1cab579a1f775fb778d900", + "72e9a5baa06d4af7c9f9da", + "dad2db631732b0506f6b1", + "686f17e02f2d49c0e2e48", + "21eb89d73161656b740b6c", + "488aa158d747df0f5cd422", + "67b1ce8dfe00f53da9491b", + "687346ea28caf1c87376ab", + "254a37a2b407cabbf8069f", + "61d42c0be51a3d664c8df2", + "dd0623ecc7bb862ebbbac", + "54aeb8675aac1a423a7140", + "2e76f32ec68bf11c44acc8", + "a2c3a3cc1a5dfdc5a02b7", + "6a25d7d313e7a656aee548", + "78022742d8c1b58e95d935", + "46ea2e85d6ca1966d1ada4", + "7530bbdc505d301ed9040", + "30ebf17f92538a33a005c5", + "4839ff83b5f2ddc41b61ee", + "6517d2ae1b7ba4107ba2ed", + "1a5f34cedfae0cde5ea0a4", + "3d55ef23d8c9f8419ff28f", + "41d953d4dc4746ec83a1f0", + "4f4128c0856b216db55c75", + "af0b8a8f75ec961c833db", + "1e5217185f433bf1233d59", + "5846b0049ea6f32f4b2762", + "40e1957b3947c90dc23e89", + "5c6cf60aae0cfc30048ec1", + "5ee2324ad6594548cd275b", + "7969c90c819c5b0080834", + "6afc9a3033b5fed5a0c3ee", + "586e1bd3806f5472b98045", + "6afe8bc3bb8509aff3c666", + "5dbb4f6414155050573b80", + "493f40656c80193590d2f4", + "3e61864fd19f85bd211f70", + "3ff0891da2c6d0cb8ab6f0", + "245f14c58fc2f1bd38bf6d", + "5334ba131913654474693a", + "3b8be315926a14f8200fe4", + "54c37f5e810a7c49e7a02d", + "3c015f30d95c1da9c47adc", + "26580ddf1efe9fe3eae4e0", + "5b68ba6c572a6576af79a8", + "6b11c6506832a5a8571e85", + "37f81f265c72ca7279eb3c", + "79b27c762372e476f703f7", + "102e8f3d54ced5e10227ed", + "173b57e939be4a4efef880", + "5b18e3d2fe16a9d973b934", + "4413cfa8b5666fc0af877a", + "54b4dc744541c38f937102", + "30ffdb4a4aa7f26e29fcc9", + "1b931cd6241fc4f484ed23", + "7a45d57fdc1a44af5791fe", + "66ac85711d7e32d731c773", + "6f55491282e49ce5634ba6", + "17ef22a6ba1fe32d3ef7c0", + "153d48f10507702bdbbfbd", + "755b7f3a3389c861fb2d23", + "1bacdadb366134c3d1a5c0", + "4de1c0244f476f355a3a91", + "2b04a0e7492ffe108c1c00", + "49b08f20244bc64879adcb", + "76201a82e565cd9ac092ed", + "69699a76b55d4ca99064a0", + "6d83e6632fcdd8cf940ffe", + "705cc0331aa0195cd9f6ec", + "59b1b4d92c6ee6432bf67c", + "26c3f6eae80009e6946697", + "825e4a5dedb493626e7ba", + "4d1a97d405c026a8a5aed6", + "d08254f4d2d5ca1a5b877", + "7bca9525e525d6ded2c76f", + "755d342969e9fcde9fd595", + "7438dcc1d87bfc73ab26", + "5d77b3e7e323ddd35a71a5", + "dfc33dec9862e861d43cc", + "75b3fbba0880cedfe12ea", + "2746a28b14b19ab8d24145", + "795824804b82c5e751df2b", + "1c6bd00355516b7177a93d", + "75d1f80628c3a1c1082c91", + "1998245099906d42a62588", + "7ba683eab937665ca29978", + "203c3b480852a2154fd642", + "1ee8fffd33bf6223d36b95", + "c92faa8d02b107a1b5d50", + "65a7ac7cbfcc2f6c41c2ac", + "7450197e181adf8c4f92cf", + "636079478bd1eb493d0866", + "47792007d733892284fb9b", + "44678fb0d784f11b21a657", + "27e147bc2366e607ad99bd", + "168c6919206ac6ace0f625", + "1c9f92bdf4717c6880a9ba", + "3c4dc48e3cdfd4ce2eefe9", + "6b79ef63bb66f1362d8de", + "5efd2121bfee3a30184816", + "5ca7f66678a73081bd34e5", + "5cc79f5d12d2a991f4ebd0", + "4fadec3b4cf5617426ac33", + "af86674d8a1c364331ef3", + "1b0ff68c5f14ee84b37e7f", + "6be91a7f057434bdea3953", + "498cac7e3100df5899cd16", + "3a0a69f5624f959d85e411", + "779b65c66a52eeb45328d2", + "48b5f18a43890f525b850c", + "1a9a55461554e908c4fbf0", + "230c19482c2fdfccb6b94", + "1a364185d640ba1a6ed583", + "1c72fdd679cfcd10e369be", + "56853e4d2e614e1924d27a", + "10cc655b268878a4e8e081", + "3c71a5e6f6b431bc524a53", + "7b274f32f2cbfe03031cb0", + "64adff5211c520e76cfa93", + "621edd8ea6ff7136526540", + "7f8ad9957e40808881a192", + "76c881f1a372f21e829095", + "5027d58d8950e307548d14", + "122225a7053b175027361a", + "627a4795d0c0df1d84d13a", + "4a5333a5e1c04b8bdfa257", + "4555d38c19f123cccb6fb4", + "bf09d6ff46adc21d04951", + "bfe2f259223ccddac13b3", + "4167a3ca5253556f128ea6", + "1d3c95c9d8462d4c467220", + "48e1272ba911cad7536a1", + "59b759ca3a67e4725b5f84", + "53cc3acdd810a96c3160cb", + "6abf077f6636ceee313734", + "226c7c98f219b40ea94b66", + "54dcbbc689dad12df77730", + "5abf04c6f95d64b6c414", + "50774e378282fd09459eb4", + "66895605da5092de3d2b87", + "3bb5af245e5d40c6fc15e3", + "6e388c53aaae7d287eebd5", + "446d6309025414bad0aee1", + "6a40f14b7a50eeca571bae", + "6d925493d403647cc0a7ba", + "73f933fe401d564be0efd3", + "15aba357d612d87099180d", + "5c20428f433fbf0c9ab374", + "4871087f3b2cd3c0f24c3e", + "4eea383bfa391bcb14540", + "658769c97f8b8945ac2878", + "4a05e03567ac78048832e8", + "5e4b991cdcf27f65105596", + "32e5746a212d6238682c00", + "26436c96779bbae9c15fae", + "290cc13b5edc05d863546", + "69714524521e343bc3692d", + "3ecd876c819b78567f7fa4", + "2abf897aba93d347d6e2db", + "62f83959d672cbfe7201a", + "1a54e98271fd5720e1bc63", + "2029341ddfdbd9f668612", + "572930c1df7ba238dfc9cd", + "1b71574f7c567d707d0e82", + "509b53b07e607cbcf6e79b", + "682583fe078ff76c962922", + "2f0c8ecc959b7521936666", + "621bfd4a39ee713781e554", + "3712172b56577089f4c773", + "208fb7a4ffec7d8d1e5be6", + "1a5e08fda45015af7feba5", + "172bc617da9e1aa348e114", + "427af6fbf5578c6104b255", + "522de20b2431d6ac8f42fb", + "6ee2946ba009641ad73037", + "73e027017f2dbdbc204a16", + "3d88de9f1c15bfd7b6363b", + "36c8b1aaf274cca356ae2f", + "e050d10f9ab1681fbdc06", + "3cd72e80ffad615f09526a", + "2b913687a118d5d595277b", + "22af1fffca9aa4b2ba234a", + "7b4ac8e7f9ffbf17f0627f", + "57d57f4721fb6be3b38e99", + "c98c97ab7b4b0cb756894", + "2248d63b93978222916f1b", + "53528c9bfa6f5405d66497", + "5e45b3a532e82a603df12b", + "6799fa1f9cffb381bd6c8c", + "5097857cdd82d2df144dda", + "4f540ba10fdacad19fee6f", + "15891c14bba25257cb14ef", + "eb947683c26db8dac2f36", + "6b497ffe240d0867d5d7ef", + "2beed154412bd52cf1c83c", + "39824b01dda7b8ada90cc2", + "5afcdfdab7a5b6864efc6d", + "743eb61998341a5e892884", + "745ca85c76435eb7ba81ad", + "4b223517b6c7cd85cb43d1", + "51e8f647af3880d2b77ccd", + "6a24f8897d3040e8fb1da8", + "57f40a819546afc89fc2ce", + "6b0dc0d5521d21af0ccaf4", + "282f326b1fcbfb463ba836", + "4d7d33eaba361883277544", + "298af75c2d584b01ccc6a6", + "692752e677cdaba7d636c2", + "277575523998439f834d3", + "1aee70e483c99574480349", + "18991d6f38c445ab4b38f1", + "5552617d9eaca45155f490", + "3459971422155f9703c78c", + "40678fa2d309cb9417f68f", + "2be59650bf9aa57c249937", + "5ea38165e28694c8629ccb", + "3e6265ca213c1a0be64512", + "69c96f5702ae4eecc6f341", + "62e9a332653e1b103db5cf", + "62870c281778214067b40e", + "14bde3f9984cc98dc83f60", + "5338be8d9f87d3f2e46b2e", + "5e7785eebda5c8e2f0247b", + "24183bf26908368eb41547", + "51f9e6d75a3c5264312643", + "4c67268f528ba7e8c34a0", + "708324dd5e787ea3d43a21", + "75b09479e265b9f0ac9a5b", + "7972b4774882051f2d85a4", + "31be6678e513813e0e676c", + "170a54e825e33a2265d3cb", + "66fecdf77d13ff6c0b25a4", + "923121ae3af782c934df4", + "473c4bff7362fbbd2049ff", + "61249154ca21ee2b75deb1", + "23ac86fba80f09945d51d2", + "19b52abcac8b60d5349efc", + "3a9c7a7d5782f84fd4620f", + "674fde01f6057423c31a9a", + "5533d7d78826353c79c73e", + "42e88e9f66659afa2a393", + "18e83fe885c9bab518bb97", + "1ccb03c008f2e822848880", + "3665e544d5ec7ed8868a1b", + "6b25a8073bc36b2af4c2b1", + "7b5ec7e3346c3cb243b356", + "34b484cdb4cebe6aff839", + "260d3af59b4f3d5c208bbf", + "3d946cf498fbed2d965f70", + "4755035ba4d9924118903c", + "4a29c3e62c947a4a1e99b9", + "4edfb060e1dacbd449d726", + "29f1e17550354ceae49f99", + "247f391e5a3b234cf19ccc", + "7e2be12d72782db9e725dd", + "47d8e4eb9811f9d409ea40", + "5488a723f6ba5cf9800543", + "304cc216ed2272d07c7f80", + "3292c0c9fda6887e4ad161", + "24af65fef90e2f99e03cae", + "2c250894e17e7f4b0dd", + "77a73ba77b4ed622a17e87", + "f36396be6cc745bba9473", + "683a5c6214b92efde4aafb", + "55247bc5a72b8d3e89234b", + "6747e95b215a546a339b7", + "178fa57d907fddb0fe3cca", + "748df460f8594e0bf1ab20", + "3b409dc537f82b36a0b80a", + "69150cde40be119caa92bb", + "48ef84f7c351ecdc951b2d", + "4e162f9f85bd081abd7380", + "32dc0a137f654afa8bd8fc", + "6f59efef27dbd92df6f652", + "645d789e2ca881eb3474c9", + "73a88b6c78ebe25a0f02da", + "3501255a6a3473cf6ac042", + "4026f1042b0f5b1e940a78", + "364b7fe165d59b5d916e2f", + "daa197fa1e9b3068f7333", + "1d51d9201dd8c5066bb7d1", + "1e7a055357b6580f4a7b9", + "6f33938b3b060336c57082", + "6ad4c1af807487676eed8c", + "6a5c41dd17f1f090be79f9", + "2b1a4dba7447b02833bcc5", + "1a939b8af79d6b9d1e57e0", + "339fe9b069fdcbe6f3e985", + "55e838d685f75c7c6b5f20", + "38102211c805f10960d5ba", + "6f9024d8cdd8d69ef10bf7", + "2db5ff229cb2d0a85b8393", + "7e1946c78347049b735318", + "5a2d6c9f89fb24cf28d1b3", + "7d5f8fcc1cf99dc3131c84", + "68719eec758c692aaaddb3", + "a5582fe7b241700d09fbc", + "3de183e6b991f7b8085160", + "cd47f8baa501aac7b0989", + "658a9098281c199cd165fd", + "476085adcac943f7253ad3", + "45f39b8c67c74dfb911f44", + "3cb90317e0fd78744bd72b", + "509c14f0517edd55968bc1", + "7a6cf71a247a9aa2ad1f3d", + "594ab65a623ca11a1d847f", + "32765eba5563b5336b4375", + "e4ce3641fd893553aeebb", + "e73b5b515611f25e496d1", + "ddd508394009eefde3ac7", + "b4aa58f86a462da2ed07", + "4d562b2b0bde307c0edc87", + "2c30e99c7b2606982311b7", + "3a997ef0ad242391b526f9", + "4f754c5d3b280b20bc95d0", + "375f02bea7dda994d93044", + "5bd335a49bc5a06867e5e1", + "63d746c096cfab5f984c70", + "25d324d633986f4baae0fd", + "2175a06a641d5e8ad33646", + "403c1a7f2d528ab5d343b9", + "1429ba4cc3fbeac84cae7b", + "4fe62d365b58ffaa0d2201", + "6bd057cf4845772f81f71e", + "38dd92596a9fd54920876d", + "ffbb4d4d7cd961d36be9b", + "3910da787142c54f4f9b2f", + "2a843c02b5e59799422e65", + "4f459e6fecc9cadb8e977", + "374bc74be1e4381a79910f", + "4656a2b830782828314373", + "583e484be506b8efea96b4", + "36d97c131b997ecd7866ef", + "40066cef89d0c82982356c", + "3301553132b8af815a8ed7", + "475c6525a253fe4a455211", + "7215cad82f761314bbdd1e", + "784f7b46f80b03fd06242c", + "2fc0729bbc7485664f21f9", + "62658893411360a21b6bfa", + "775ff949792463791cf8ab", + "6bbcfc26c4e8fa7b836095", + "14a9e816ead24aab2e6645", + "6467af1a0f07013b2e9849", + "5f019291ccdeabcd687ce5", + "2311c97b29ff503887b251", + "623f56668cc8a093bdba7e", + "3b890cc2ea1882c16138ef", + "6e0d3cb0378f9f523dd7ca", + "e50ab5db695f894b26597", + "500de5789e46431a14b08d", + "74a3895c1173d1100e060", + "28c70cf1a34bf4b12fc1a1", + "260202888a368af1bf27f0", + "49f6551bb5a630f7f3a91", + "35984ab233bfbbdc2149d0", + "7715808f58e52b93fbd9f4", + "7a35b4347e2b2fcfef4e8a", + "696a995b7f1bd2337f9c55", + "765220bfddbe009c12884", + "6c4e919619ba3e8fcc083f", + "6908cd3a0537e6d9de224b", + "8cecd81b395199379b860", + "73475afc8917dfb47ca158", + "671133a56bfab71842e1aa", + "4356f96a535f02cd557790", + "d73559f9e34900d6994e0", + "4299b7c55998b524a2963e", + "6df756715e22975feac139", + "2e795b59317cae4c039946", + "638a87cbb628cc2744b5a", + "2d0786ef10819221e8e925", + "285121b3579e1afaecea17", + "f0daaf67c2422477284d4", + "df5585842155fda65c5ad", + "41824effd56ee95a25ffcf", + "5a2e3e7ac883c32720fb5f", + "786bd6b0d956c71e3d0c41", + "2dd9e647cd7caac396218d", + "32267a0d010a3ac60d956b", + "3bd14b5c954fd788df3e2f", + "55d4eceed6862d8b7edf73", + "32bc07a00fc1c32e790cff", + "e16e90086dfb42533696c", + "58f251e3a335055f8d1702", + "45d0bbd0c4c565d517f4d9", + "47cb5e48534f0fa269ac37", + "23591be47ead61c7626094", + "4e9b8b836aefbcc76074a3", + "7499dfe49d22092ecbaacd", + "422c99318e0e012bdf3cdb", + "6dbec10ac45803905232cc", + "5f091c9040f8e8b4af8c6a", + "49dd9e128368a6e8f31565", + "631d5fa433132c920e949d", + "4a728ba1f43b41e3c8ba7b", + "5de44a501f899626f11ecb", + "1db2b63fb5b72bd2913b9b", + "75c3040748861ea4157368", + "5714f7d7bb3f12d88adae1", + "3382f247e6cbcf48a8be0c", + "436134e757c46fe077e8fd", + "ca5fc0de7c8f0742fa11a", + "324b0e59fd313b7b066991", + "fca82540d3cb37cfe38de", + "71310c65e10b4b2e1f3924", + "53034f778656513538ce93", + "6e8a28f3d3f87aa2548dbc", + "792ab4b2a318b2229df59", + "700ac125ecd365c309339c", + "d7315bcace04536b59c5c", + "5f9fe5fab5062ae9d40550", + "7ed8ee73ca5507f25bd5aa", + "6247c20f5e97453bb71b09", + "463e980411d809a1713383", + "546f06ab10360a76005c9e", + "1c0a01fb60b92af636be29", + "a5385b7f7d2a505f37187", + "296401a6101dec9b48a81a", + "38aece2fe0c1923c569603", + "e966e5d5e80ac9dc377a2", + "7eaf3d6220ab7c049341fb", + "1a01c5dd382ca52c0f8a1a", + "68ab0ae55863c4f8044101", + "75b29426909e9c8294f365", + "39fc8d30c95dd0494e9be3", + "3c234bbaf5da9465f9498e", + "7ef05035c2a08e050870e7", + "7e880bc1729d1783a14627", + "3df3e3ff8b5241f9f120b6", + "61c60fa253a8977e213d6c", + "dcb3217133998c35879b7", + "19e87845fee8ee9d86794a", + "1b8c24041b5c09c2ff1c0f", + "1d4d18f2bee14ee417596c", + "5197b486ae5dad9284702a", + "7a4b513ca25dc5d887768d", + "2e1d98165a5897b1482cbe", + "494c96ddeebc9c314fa5db", + "29785bd232aa4bcde009aa", + "42d71e3ed0639f1b07231a", + "1439532a6d3fdff49361fa", + "8c59c1948361c413eed8f", + "2c9401cd53725f84e2c421", + "5eb9037bc76a6930985737", + "6d5d0573b2f9596b50b73b", + "36121cc69943c0f23f8a85", + "308787b80145ee403c389d", + "74d978e8d6a9ce6def9aa3", + "34242d89a6cc1d4e30fa9e", + "6106124e06a73207e84629", + "1174d8cdaeecfc5b7908d0", + "49f7df71bb684bf5a54c61", + "53b453f5f30f900af808e3", + "7b4210ea990dbb2b80bb4", + "232c5e33740871b389c8ba", + "3e748cccf5c4b2e587b8b2", + "2078bac214b712936de507", + "426ece55a7fd1d858414a0", + "1eac63084c7797618dd9f7", + "59fdecdacfa91d60fd391e", + "589758587c26455b22331e", + "19e1cce82f85eff6f6b24", + "16d83b4ed79a537102c236", + "4ad2dfbccfebf4c881dcf6", + "1851d531ca021ad6f2b572", + "1c85ed9416af845bb8e82", + "5cf912fba9a563060d7b3f", + "14c7f40a28e01adc5ae1b4", + "15131878551adae4b04c53", + "ddf6be61ce9c04533277", + "48938572f05f540b474485", + "465d9407cc9bc6456e974d", + "1df3eb49ffac499fc5f3b6", + "7e698a24ee9aa726fc4b0b", + "53e99cd5ced120123b808f", + "66ba97928f262067fec230", + "1d1b1bb20ae40ee8d35505", + "22cd6c35ab2195c56794f9", + "1ef2f8aa8266e26254215a", + "14da7875e13efd461f7c10", + "22d6cba0f681e23fc64382", + "682b3c7ed60ad7c985a3a", + "244d1131736a5aea351d17", + "3ae16fb3fb77d48c6adcc3", + "3253e31b47819fbcec75b4", + "507a6d1fd108a63234b38f", + "3e2cbdf24bd5900348312", + "34f2e009d684c876c246fb", + "bb247081da09643c00d36", + "32a426cd7460f9e5c5e7", + "48082cdc2a40ccd11ae434", + "1d616376b444140f9acd68", + "72bd80f062eb130b42b044", + "e1e55a565534c74a109fc", + "49e01d719bf13fd52369ee", + "2ae496e8d9399061460619", + "7adc118469443d4f7084b2", + "7ad19421f012d132850842", + "45b5b538c44c73f3bf515f", + "5f8307f0589178f70f7238", + "54018c8917549d050c00a8", + "4700bc9de4804ec44122f", + "d922a909e3b3afea5fe08", + "46ea38e0c4bb849b39baee", + "7b87e87e1438c6126ab1cc", + "499667b1e22348ac584789", + "137f8e05276cc8f9180095", + "5accf03c1a20af1120832d", + "4e94399e1765146189df5b", + "55fca6cb45a0501d1c50ba", + "2ea5fa6c2e19e6ee7add96", + "d8e9fae4ec5d3e7913712", + "767f863c9bfc5fd6540f44", + "477273c36a749543489547", + "4265efdcec74f163498291", + "43f53558dbb8a25ad757e", + "7b5d99de82bacb33af7ee8", + "1d4515e4768ff5c6b4178f", + "2057d9029cad07c3d344a3", + "e419f0eced24d03400fbc", + "2e30617b0abeb387001867", + "603f9b3bc6733094104e23", + "fa6bb9b4b92165346e0ff", + "321ccac2ccfd73a0b28c6d", + "6af9f591969edf6d33a899", + "5ebda7b44a30093e22fee3", + "150cbeb75257f8eed7903", + "1b0dfe5bf791bf4d645e64", + "5286bfcb1951cdb460fbe5", + "29ca62a9234f915c5c9715", + "3629587577ea6cd990a3d3", + "4d3d6fd7781e8ff3322226", + "7377f9449fdfa779330064", + "7f3f1310b0770a6a8ab4e6", + "74f8ea2aa01f3e122e9ec6", + "74aed20fd8f19001dab562", + "7a9c1df7aec04dc00e3584", + "2b3dba5edc89810815d1ce", + "217c2392122f9868740137", + "43ac29ece073be2a30ce86", + "4b6b8f4e6118573075d4ce", + "3cd3f5ea5623ce969c863a", + "421de31b9083741c4d4c48", + "1960ca77285b35812422e2", + "7d40cdfed339cab397652f", + "51a001a64a22c7bc0db3ea", + "1fe4c7d7da3eaeaae25e65", + "720179be8f54eb5c778be", + "1144f2116d6e426f3addec", + "10ad00e38092458e73fe4f", + "72e90ac5d748fbd2d7aadd", + "18250945b23b28bdd1208a", + "dee72e6d522c55b461f4b", + "1e31c413e16722caeb814", + "5ccfa76193ddbc64186a30", + "5eb2b60c1d97e4dcdb09d3", + "7f31009d8b384ea51f9235", + "7118c95246463e79fab7c6", + "2af1b36e871a2152d87ea3", + "1ae4174a64ea29d65c88b7", + "1aa4bb2c56ddce8ebceb39", + "65773487e5415b58fb205a", + "5adfc7a0a78f6657a5960", + "3d5e0686efab87e5e7c266", + "6552488fb7e68b138c5691", + "69cb489051468dc8b7a10d", + "2885d88c14361dbedb4fb1", + "17f8a55fef5d58503cdf89", + "71a2dd2f4561ce6b25cc84", + "173ef6d2228315e7fc8577", + "6095ebe0914ab346aaab52", + "1246f9f5df870b21bcb1e6", + "5e53c14166e301e45a1c84", + "3a1984f88834905315728d", + "4678975ad8ef4ef63ed234", + "139a5be9fe5d74b7b324f6", + "4057d3883ee10c31d0c5f9", + "5de657154513d33b2dbb32", + "7da4d79cdf3d83f0763c79", + "7399c1866bdfc2ee9d0ba4", + "48cdee08fb7cd0c828eec2", + "4c099f907df9db8a25350c", + "851fa3652b44e57d9190b", + "d0d6f30615b8f231bece9", + "5f305f39404231a1ce6591", + "47b5376a6bf9ae1b5420d0", + "55925c1c09bda33b3d0e7c", + "4aa62ab8f33741774c11af", + "cebc8496358956c6ed352", + "4e0f2086acba831702db59", + "2103ca88adecbfdd3370", + "5b917d89029b0850efbfd7", + "619fb115b590487fbaece5", + "709f8b4e1e81f78ecdd5bb", + "5c6ce5b29bafc437eda5ce", + "1c6a5fca595a1ff62b0a7b", + "5c246c8d9baad4092bd7a9", + "2f1ba6fd01e5cf713f7991", + "3d17d279ec6a81f53cd4f8", + "42af59edeafb6c79b9d208", + "7e0f7a6620c31d72d9d568", + "68d1c5df4d9653be9c8e7b", + "79db0961906e2d46b0b349", + "4c4fa3875e78671bc1d2bc", + "22a17bb1e02873c944cbe3", + "25e4a83dfc2f633765d96b", + "8a4219421d2f55bef801a", + "341ee0e329f6ab9da76c4a", + "28eaec99940a1b1f563841", + "4f1b7b04b31a6d85748c8e", + "1152ee1f6c91b44b1faa20", + "6b4aa7c57cecc522b32c99", + "49e219e4b19fa82e3cdd8d", + "5bc9b4c686de112404ccc3", + "40d9ddb7d82d86fe4dc6d7", + "6b85f2803d97e818e2e527", + "321405882a2a0c05f7907b", + "60749c3a015660029dacb9", + "26240f3e8816b599bb01c6", + "1a91a4ef4625f7ae911f1d", + "18704740809cbd3a91bcc8", + "532d2ff2bd9d0ca8b344ee", + "18488f368798b8734164ca", + "7453e07405f19cfba93c17", + "3cfc7a65b66e9f8c6f8cbd", + "4dde9b7ed5a96934e4dd51", + "7afeb7314079bb05948a57", + "2f4c8ebd42ef359c5ac79b", + "2579cde0e8d37e04167a12", + "368d20177281b04fd8018f", + "4553e500c491eb2ced6e1a", + "12a8a0e9fe6ba5c3656149", + "13d6f0fac0c0b9cd891715", + "cfbfcb607ba616c016fef", + "522bb592e89a78b316244d", + "2db6d4b5b7a928883df97f", + "928d2a95f60dac2e280f3", + "15b79d2a607e674b1df02c", + "711d3de6506cffb89d82c0", + "1fab75ef67bec61a68a277", + "3dc7ec06146d405216b267", + "15c08724b1daf7a590d087", + "75c2ce5e2535ac7878196c", + "63dbff9398c6d2cafd1418", + "245003f901ae0a356365b5", + "10b57d68a8cfe14ef3ca7c", + "5fdc8856cd703470a1e5a4", + "1af9124bffaade4351e990", + "5f72010436c71470f190d9", + "50755ca653aac70b84b12a", + "14c9d693e42997dbc96df3", + "7a93c6e177d746f5eb503", + "28d70ec040ec983aded5c7", + "124c113e25b1a8153a830d", + "2df0f496cddcc699504250", + "5dab9e18ce0b8340db40a2", + "6a410e486ad693817f9d31", + "5e82dce0d15b40d73e81bd", + "4e1b51392bd1ad38a51d00", + "69efc15f2bab10979940b4", + "4bb8f4e111d078e3c54590", + "22e8d9bc34a96264dd4caa", + "3a7c703f2642b17eba0c69", + "2df2bed0dd9ba405c8c5ce", + "222dacddb6e77241cadac8", + "4c996629390ea0954eeb1f", + "37c7b0fc4e875134c29246", + "4a78cbf6bef93b38948e09", + "6c8fa526a6bdbce9f7b832", + "7633f58adb014bb5585678", + "509ea21b16907067d06b82", + "30a8e1972ee45f3e0613d5", + "63839ba9cca448dd7fecff", + "290fe0ae5a419909be4e2b", + "35dbe95730bed0669969ad", + "2a6c238cf5c57a2939882f", + "f9d7db7493258ceea1a37", + "36ded179138f0e4cdf1ee7", + "4996f8a3f7c2c5fac02813", + "39bbee3cab035e7fc68b3", + "741dd990ea20591fd9b5ff", + "16eeff7e87d3caf8e58a92", + "2c8f1060dc661c38044a5b", + "3d886ee05f1bcf69fa4f70", + "392d9ae31bf22e0236e198", + "1a7c7fe62effcf2d1a2cb5", + "65172c59adde7fa1aa62e", + "389d1e8a26db35e20882fb", + "7dd9082b6f5562b8d6ba91", + "18c5643eccf2173f575420", + "757f2101d664083b2fe8c9", + "66e9cba0e526f30b7b9b8f", + "6c33a3a058504d48c17efb", + "1a908fcb6be810a9e1e92a", + "2df246fe147cf6a7d9ed5f", + "3dac1d8f9e9cf46cc42204", + "3cfed079405fd41004c118", + "7aeadbfb750a598afce6ac", + "485bb888b6979f8f201fb8", + "460858d1e253129bf64e5b", + "3567cd9077f5bb1d3115a3", + "28b06a5b8a2319d5d78e37", + "5c3df551863d0055925c95", + "260985f3992a168bc7fb3b", + "5a00aa930e50101d3ad458", + "3e41b8ea3309221756df7b", + "216b9b04319fd8da8a6d3b", + "24a843ed6770d822f92be9", + "60e3811062f0661e25f626", + "656a55d45a93fac53881ab", + "10f7a570b959918609b06f", + "d755ece5c8fed1e833d4b", + "5eb96063b604b2d052b457", + "182ed4a29e8be479e40c89", + "55e542cd768eaa4ab7eb43", + "4a1404c02a58e6862d11f5", + "4366b19aa12542a30c1749", + "74a0eb9dfa780e171aa5bc", + "7b34f38b9d16f0d70ddae4", + "1f75d643fbc4ab52296f51", + "1cc8bac063e7f4722cc83d", + "1f1cae187cb4e7e2d75ff5", + "6acdbbcb1d87bb33b845b0", + "5a67c62d60522486e9cab9", + "66727c69de089e222307ae", + "7dde8d7ccd2cebd1d4b943", + "3732911ea3b78b2cc54de2", + "69b04bfb64dc28afc90f3", + "49a34db8369186ccd3e18b", + "3087f959a9893769198248", + "766ac65aedf40f90341249", + "3c8b578aed4234d875a143", + "7248daa035ed0c83c2d007", + "35d310b1c9f92e46c5dccd", + "747c7a13b706fb28e46c47", + "e2d9cdfcde324e23eda21", + "607776583fcde0ad8e4c87", + "2133efe27b28c873f101f", + "6ad95985d0ab8e8d823145", + "35d6d7bb2855d9adfbf650", + "7a123babe2e7abafbaf8e7", + "3b0cb59bddc94e18233703", + "77815256a969cddb479be9", + "9c6c4ea9b05d327c6b7f3", + "55137101093be9fb51857e", + "59bb325b9748e94acb6630", + "328bf9a8c78ea2ca3388be", + "6ee757629a9b68ac7e690f", + "59efda7d6a6d8e6aaaba46", + "6ce70c288bc2711b1b024f", + "4ed7cbd3e32dee7a40c626", + "a9753c820825d73c04548", + "741d91860d83d000328e76", + "59aa03a25735023ef97395", + "1cc96ab6764758e9cff09d", + "50e22c6cf5d6b70def807b", + "76f42929010d1ca7619b42", + "18a6b71998f6f84fd5d814", + "5fda42ececb40f359e4f0b", + "2f62056d547ebf7995c6e6", + "23966403e567312c7a8379", + "6b7e91fb5948662e3961e3", + "1e6874a8b307092ad6e72b", + "31dfcfe645b46b329ee2a1", + "209910d1159692421526c", + "3c4374002a4b05edbee285", + "6df855d5b158377d521892", + "4169ab1c6bf3f0abec6c34", + "359b331d03b9cc2451c1f8", + "3c7a2b6b58424eab86f3b4", + "7242e44696c19a3a1910b7", + "2a7311c640e7cf0ecc141", + "7933956672bf2e4535ee34", + "455927f484bb8820a2ccf7", + "551ec7c1ae7ed078f940c0", + "6ef800332004d6cda26cdc", + "7630fa097aa2bf97cef6b9", + "490db50fd1ace7e8ec15ae", + "32f5fb93813b0abef00c9a", + "44e6ec408ba05ad98e759", + "568f3917922fe83ad3e225", + "273beeddd87cbae01c207f", + "1a8ed7cad7bcfca4620120", + "6c362e17e2173449bde86a", + "191da9b869e973d2fdfea7", + "64666abc6a9a2f6a1c7575", + "3c31433d0db703e03c294d", + "1e74e23fb34c50dc055d0", + "59652c3042e742dab07904", + "50e46147373113c54d73c2", + "776ff8d5492c149f7acf17", + "318d2300370d914ed1483a", + "e24946eda2a54a4c98b6e", + "28434971e0ad86e87340b6", + "b7602abf832a9540b03b8", + "3a2bc2968347afc3827c67", + "5fde1fcd656f65c682e01e", + "113149ff5647e02c5d8e8c", + "329c1979af2fa92b25335f", + "7de8764ca6a43c99d6a50f", + "7e68cfb951ae556b15fa1", + "5cac3c06df31850ad70694", + "357eab1d6b7f6618503b3c", + "4e66ba0bc1058a3931042b", + "65f33a2872e25c8a682f06", + "a5d62acbaf68c52001a4b", + "18f39bb607de6b1ad183e4", + "16870479234b3337ddc8c9", + "7093b250c7b04c2c6d567c", + "3820d1fc1eab75e925dc43", + "49ddb3e956e6fd8d65e1ed", + "7544304d1b3c2594fef689", + "60483a9742002ed4918cd1", + "809a8bacccc204134381c", + "177aa9fd51aa698c4f5d25", + "2848634cb8eba43423c432", + "2bd0c39ecff8d002f3a3f7", + "2bc7683658e815b0850ae", + "56d7ace10d6e046f35bc1e", + "1cf7470aa8bed908f93c32", + "44885049137a26d9ff4438", + "46436019c4b35e76ea4182", + "6b4ed91c3f4f0b25252206", + "1cb50b0700a11348f864c6", + "26c603e605263eb37ee858", + "734cae170e5d7d8758c509", + "3e00e41664141664f70d8e", + "4d36c683652009a273c69c", + "61e21b9a255226ab8a9c03", + "66db9685c97e1039f97191", + "41ebedf12db1451af99b12", + "5640578c9a2f674c097c8a", + "37526cf6c350fc29ecf559", + "6e93c69a7627e1f9832a61", + "3aaf5736ed929c1ed0ab93", + "42cda11218a2f5a8d7bd1f", + "ea04fd9db78a21c39b6a5", + "53e3092b891267552e8471", + "3e13e95a38da382cdac574", + "7d59312cf551555c728152", + "57b341376c8eeb5e957326", + "2fb62f0a2e9435830411", + "6131db76263e902f303f6e", + "5e7e83070de3b07a4bc87", + "54765bab6ab2b394d9dee1", + "3b4ae8aa403abef29b052b", + "4e1bc7c2f29a2f520bcf7d", + "50bb1918112bad3e57d523", + "3979e2b3d54a21e7e8c1cf", + "4f3fe475424626758ebe24", + "26c45bee1cb7e300fef593", + "20866732367b425f7e5ad1", + "4779c6f70cb71f00e32d17", + "24dc2302a4b77b85525bd", + "f339d2f5ca33347ae8d13", + "2e178e1cc4f997792ce1aa", + "54728697bad28cd0bcc9f", + "13413811d8a8e6bc2e6cf8", + "1a3337bb0bc288bf44447e", + "526d1eb936d1a3dec6eeb3", + "7df75741d3ccafb28da8e", + "6476d594392ef9fc9a3df1", + "645cf2dd2735f1cbf53f1a", + "780a2a5411b159d83dcb95", + "562d8222a0b94f5af3137c", + "e859d26ac6c854731c10d", + "3908eb827c8209b96bc643", + "61619bfea73d2a10c7a7e9", + "cf2bf44fe6c433cc00c9", + "17b5a764867bc2f176278", + "667b77d58f7f6b14e19bc3", + "14c79375686a30f4c21ea1", + "57d421e876be8c87768c1a", + "a49f38b3c0b7ca1fc5c10", + "1998c4f90bb8b5465b7b1e", + "974b1ea8fc3d4665ea11a", + "4382f99dff4951a775fb77", + "66b03ec137e6361ddf6317", + "43f99aac41b05d58c624b4", + "4efe7cc856d9eef4fda470", + "35f48b300d21989b05560", + "79ef58660a06bbc22f0cce", + "5623f1c8e0d5c15938b2a1", + "740e3fa0e998e741eb97cb", + "4f6148f444b84dfe82ecb2", + "34ce2df12c5e0970f682d1", + "5fe5a0fcee7c061cf49e8d", + "127dbd62073fb0c17b4217", + "31b2ef6b5163160bdce290", + "7f9a1f8e557617163d5e82", + "3c5262912ab7e82ffd49c", + "4ad5e4985caa0c7ee63b9f", + "5267f1f68134d546ec646f", + "7f695021b246db24a5113a", + "11df54a696817409ff1164", + "5549ebaa872068aae68ac5", + "236e08f8411de38e44c3cd", + "1892726d56d4f8f92dde20", + "457d09be8a2a4c351b63ae", + "53339d5a01f3d2e9bc8755", + "ac5bf0492a63aa0bf597", + "714ed5cb0027168be15142", + "4cfaabac7104cbad2ed728", + "486fd3ea0158f33daf767d", + "61c0e0ff11a378274b395c", + "5e195ccf98c9a4e1967fe1", + "3eecfda3b4d92af2b7e5ae", + "62af499c078af038905758", + "38d987fd4b450ee5a69286", + "5f9563c7ca70d6e5061bfa", + "ad64cff4b4763a7fda09f", + "26554ee3e9bedb1a3a09fd", + "42c5d2d1082dd2375a4ef3", + "7e05b7c7d54cfa1fc7b525", + "118d29d91686683483dea8", + "2c56fdcda56f78dcda9b60", + "d92cf9efd7d12c62f0dfe", + "11b77783f411c457cf909e", + "2cd33d1f501e268643d591", + "1ebddbaa72ad1a2b1cdc49", + "73f4373aa0c46a1ae61409", + "64b1dd5abc6713a8f53d0c", + "3aef6b8ad8d4f116a27e4a", + "13f9a309c929439a91df6c", + "401a3ed45557939fa7eea", + "1d1aa15ce7c8c15f051ba9", + "398764fa3e177502af4d3b", + "48edf77c0fc298b0491c2a", + "1c5b7d2b84cbc7b29bf542", + "78873bb7282961108e63a", + "16ad879cfcd3e458301dc9", + "28b06d6b1f993702509e4a", + "45242101d43b276b34115c", + "783d012e8b928ea14eaad8", + "5afe15c1524eda9627e183", + "42b636bc4126dddf74cb00", + "5cd8f782abb8b60cbf36f8", + "1c5d10301fcf4a14c82adb", + "52d3cdd253b64a03c5885b", + "31416a7f09913059dc251d", + "46bafe88322c67f3b90507", + "4cb6253df884020966d27b", + "2948eda7d7c508918c3056", + "543222604f067afa3e7558", + "3ae99fca89d15abe091160", + "140aa7412f6488f5404826", + "16b6721ea95f55ef631d25", + "133606f2fed41ffd77b999", + "4d075c933e4b93da3a33d9", + "4ed1311eae64f9e834ee7b", + "f920b02af1e3bd673512e", + "312518f9c1ce1e690c003d", + "44bd0de2094b8b3759356", + "3d40b56764f7765513d13", + "6b5da25417070642e0ba4c", + "6bd995ef31bcfd22d52d9f", + "3eedab106a435ef32b9e48", + "534c1a3b25194e8cd66e6c", + "28a37e042abf70a7cb137d", + "76fbf6732402bc76e061d1", + "3b66491ccee4801a4e3673", + "5ef7fbdbf498c8684625f6", + "3305f9d7ac9bc35ded571d", + "6aaafc0107575bd9b70723", + "5eb217461cfa46d5694397", + "7f5140ee63b60e0a33058a", + "3fe61d12a0b09791925ccd", + "591749051e47ee7b49cf82", + "33440d7d3472a4b6e2f627", + "4dedb1ba2a6a4abde67337", + "30485371efc19b50bbafe6", + "3566f7f67e026f0278dfd5", + "201e678f30ea96fd17615f", + "4a2580e03d81912089d88d", + "68e88d3bc4e8d390ae4b13", + "46986d0da7a2c17dd1dc22", + "174fdf0bcfc8d0f4e77e83", + "7a75be28b1e93e4e0c9342", + "11081f4b8fb8f0a9abf772", + "3245bbf080c6731fee74dc", + "57bf13241507b812b9a904", + "50c915d40aeb9e4ec78789", + "530f4c391aa2b0938eb272", + "4e0326164785519414d07e", + "389d9fa841750626db108d", + "5eec1e56c0a2d0e34dfc8a", + "3e8986648fb4053520276a", + "2db6e61499c9393946b57f", + "1b2e283bc4ff40366c744f", + "95d86ded4a7b26a1ad331", + "4818fb8f958698b6e9c9d9", + "21e39ab39cd96423900120", + "27476789fbe89ef5fe00c0", + "1b67e56d8c8f6656eac86d", + "28e33efab89fb4f64d6498", + "18eb41f414dd28e8ff3a1b", + "4a648c611ef0b3b0e318e0", + "3ab4982748b8f986192588", + "1eacd91eb3938b38f0210f", + "5227913634dbd4b19ffe95", + "1d5b0385650d2d81754f72", + "7351e32ddd53c7465f65e8", + "202d04fcffa7e3a0ae0585", + "6b77b6d06b93487730de2b", + "2f635c018151dfffc38ed7", + "7d83ba89b9f89b55497937", + "d1c5eeefb8bb620c573fa", + "322d1e939066766f918e43", + "3ea29dc49c06d64c187862", + "7f64ec3ee1d6fd7b5f9352", + "749ebfb4005c94ed288c4", + "6f3d0d822d1a27088df8e4", + "17b1690a9c9f4fba9154e2", + "142aa17e315b2096d3470c", + "5778dc2f1465daeafbf88f", + "3135a042ca5b8873367081", + "26f3f960b2ba725c83b706", + "156e3560db5a642c108333", + "3adf2b6aaf40f5dcdffdf2", + "4ecbf2559411992397d1ba", + "5e3402a24a307a945167f7", + "553a48facee35f17214327", + "57c6f0c9d94e02524b4029", + "44867f919f39bbc1ac8a53", + "7b1e254e6050240b36eede", + "7fb445fb34908201d41b44", + "5a49a0430b2145ead2e9a5", + "22d9fd1638450186756413", + "60a177acbb4aeba955e6a6", + "23a7a59b35972768b71627", + "ea9789ae096da5bedc410", + "38419b7c213432cd42f4bd", + "4024c6847ce50a93fefd10", + "1f15e66f6c5b160801ec4b", + "26fb73843bff3e4d17aa10", + "212d386743b2c2069ec4b7", + "59377c70bed9cccb346cff", + "5a80f23e82161bfd2caa8a", + "21532161ecdbdaac15b68a", + "5cd8f904c6a0e1c85597c4", + "2ad8c773fcdf92009db9b6", + "1df80784a603cde2e8573c", + "41127c781a5dd07b6ea357", + "6152b40d63a55e1ef6e750", + "3161bea37fcc040c6f6494", + "112bfdedc3401ff20ffcf6", + "6a3afde1cc784aefb925c8", + "47a38df2df7f516ac35f8d", + "6dafdbef06e817ec42991d", + "72059eace3671c76d67005", + "a209dce8856336ebd97f2", + "695d060b1aceccfdfa96c2", + "17445a9a60b0dfca9df354", + "249f5358017ada6567b747", + "b7347a4820635a5852b61", + "2bb74459adcd7029c9c35f", + "3684bf3ee3a2b8635ca0e1", + "600de685f1a4c2f4a236d9", + "68ae7d3832d31bce57eaf3", + "7a75b868e9fb50140bd203", + "1105d3c71c59dedcb33f", + "6234ffe0f938a25ce0f5a8", + "41858e467a21a3938d60aa", + "7332b41a9fe9dfbe59f71f", + "313ef612f2fd65f39c2e3e", + "49ce8855b52dfbb878b2d3", + "46b1961304e45b428bd48", + "1740e5e9a57a4e80eed5c8", + "7f035a794c44a6a57abf00", + "6eb090e9b1df79f4d2226", + "7f26a6c99362d1126b6773", + "14e47840962745e9f2bba8", + "28670ba592cd5a2625df3d", + "5c00c9ce80be32396ca075", + "4cc8bba01b6788222eb375", + "581f2a492a4fe468c3971b", + "6aacfa3617f47dce14015a", + "3988842f76572373c3459b", + "3146d29fae3f74014572cf", + "27216bcb23514df00030b1", + "36baace22f2d7a2014dd1e", + "20b11d38582bb81886466a", + "5aa25b718982092494e872", + "3f0eb0b9bdbbe37f40dc5f", + "5c4dc3dd9138eb7169302d", + "503bee64726b7b32815f44", + "7175ce67c0c74c440327c2", + "3fc3680285719ed4f7e7fe", + "7fc9fec9506aa1a0661240", + "122e1cf4ba920fb923d0e1", + "5570385cc742f16a21edc9", + "2a8b319bb90a064d3cc523", + "797bc83e9789b064b51c92", + "124aa58a7e2a882689ba12", + "5ee825c795f457b727b9e8", + "475c02da59260b083fa105", + "5f427b13d8351db71dc75e", + "7dca64fefd065e0893d874", + "88658ceb2447416239af", + "75ea3318a1054593eca8e6", + "21b1555bb331b89f928e6d", + "7e558ced95c8a49312174c", + "71f02d980dd943488cbefc", + "23e36a6e12831353ac1afd", + "1073f10b92dd8a202017b2", + "a0ac3885d2cb22aeb977f", + "2ac1793993d045ec4ea0ab", + "4e33cc0d26d44c2394c8d2", + "5430c091f416778afc3f3e", + "55f3bd5a345801aa67f91c", + "18bd8096de042467441c8c", + "1dfe68dd4d69d0d5368782", + "a69b0e544c08336c9606b", + "405224a222d42397ca18d2", + "5ca40898d5d325e557e04e", + "73e9dbd2873c27040a215d", + "56efa25eac0d5f675af6b6", + "460f5f98b19a4d353358fb", + "28593d93a1a2159e16cc13", + "1eae59f579b122f18b84d1", + "7f29a05b16052f06eff50a", + "2ac52045b3b592dfbeeaaa", + "6003c83a8ae5ae42a0956a", + "3af2323baa99fc6ef534e0", + "b3a488e23273b8e74aa2e", + "dde95ff1403621e1e9c39", + "8b93e9e7ea54df6ea61e0", + "382238b03129ae3a8cb2e2", + "7be85a588e4f01b973f9a4", + "3428c448a20f463714e16e", + "46c829e7e1980bc26c13f9", + "20573b178651610a410e89", + "16c1a9b3bcba979d2fb250", + "46bc67034da17d5b7c72cf", + "abe7e5169767e92b8517c", + "10a7cb0c646bfbfaf6b1db", + "3e27d166777ab6af4a4b75", + "560bc3397e1eecda48e8d6", + "153d46a7ad0d4c7b81a83d", + "7b625b197eb76a08b19ecf", + "58ab9a24dbad2ee2c0942", + "6b463071583d5d51119c18", + "58d985a1111ffbdece42a", + "772853e9593804a23d0c9f", + "3566ae3cffa53b48308a5c", + "3253a13971cf24cc306f4e", + "161741a6fabf2be3cb74a", + "72492bafc7adaedde393c7", + "4d17bed73f2032142b03a3", + "43ad0b393a7c2a4d667efc", + "5bdacc4f0e9a9f3c5eb7f", + "3fc330d82c00c3c98129ad", + "2287f22a43e09d12b5fed1", + "113203b24e05e4ff03bfc7", + "386903ad1ff043a2a203ff", + "6efc437814b1b1a8db77d5", + "60d1cb028fdf2f7506480f", + "5c08c8490ead830327cfc3", + "56d1b28a25e58905b948d1", + "6473a7fe7461369e02b551", + "43240f690e895ee2ce6199", + "217e1d11ab05e37175e942", + "115af287df30e3b9382159", + "3d01c0ebec513aebdf049d", + "3b607643718a1436cbf93f", + "392447173660d27311fc56", + "7fcabd5ff8d8321877d09d", + "773e49f5dd28ab9abcc4f3", + "333e4709f384c49fba280e", + "1a5a69890d5f080ad27aee", + "142700479fca005e365a5", + "16c859dc1504abc8bebb3e", + "8e1dc29eaa3429a93416f", + "3d2c4d19f97ec14b7f9a20", + "b80a7edd7c5745e63c50d", + "7eacc570a117e3d2c4ad3b", + "5a4b0bdbb9a3eba57ecafc", + "2bbb60823308802716b002", + "60de98af5b2e9794ccddda", + "43f106dd9b706c7cbad455", + "247aa73439f114a2bae1f5", + "404518992cad409d30e138", + "483592c4cf34d97823b087", + "303e55cf5d940fa1eb0863", + "27cf1a1e36d6b6fbf673f1", + "753e3ffd723c55ffaa57eb", + "527df835ccce3d0d8dc6be", + "501c73bb8897e8a9b644da", + "2c748923f66e9b836e2956", + "252a9565fc2ed88c83afe5", + "53ee027a60ac6b8703b4c4", + "11e3b65e520ccb94e0f28b", + "1d82fef6b5daac184a21bb", + "34f1c6d5946b4f8e9c34f2", + "78c36b7a1a1ac86080796c", + "3c2561b4603673cde220ff", + "347e522bb35549d788adad", + "c5eb765e74f7ea6040509", + "6b91d4c08bfb155d85a09d", + "1d345a329131e03407a9ae", + "7656e2bcd13769bc7d3690", + "18af2f7c66ebae2215b225", + "5c0b858603efe861d8e554", + "3a948a48ee72242647aeee", + "5eb549dbd9b640a1018c4c", + "39395b9f947ccce230cc1d", + "2983f80020a9f6532ba834", + "599c6bd84b32b97e000cad", + "494a8aca14d077b143ca10", + "5514a9f97c736ef89e2558", + "22a2f494120b7469421488", + "6bbfc916f60c65ff6069ae", + "988dfd270fa06d78d9fba", + "65e3000fa520e5bd8bfdc3", + "d79412155f3d978866277", + "540f6a5d04324cc6ed1398", + "5193e0be567990b2818200", + "5527257327c4eade309a67", + "6a6ceb53a9e08bce60e22f", + "3bc0b4b12c4e0d37097319", + "6446d75a31a4956c235943", + "70089a05ca7765b8ef62a5", + "78050a04d755b7008433fa", + "4cf40ea87be0baab3f0a23", + "421f5a540df5b7ba309bc8", + "22aca8e5833c97719ebb51", + "595eaf076defb81f21236", + "324340f1f7ccc9eff05524", + "490df281db25788739ca0c", + "7cdb727ae2bfeeed50af45", + "8fdbca74c18894d421e52", + "266efd2e0daff29e309d38", + "2d3baa252f4d982bd2ad11", + "26246e8fdf408dac8fd2a5", + "4dae59d140c542483e12a9", + "7e37627adf10efb14adf13", + "7059a8ae14b27b87ae7942", + "5d0b6fe03f574db311d01d", + "4450b05b160d8c53288cd5", + "5628eeca86bc4f505da4a8", + "59d6c2db6f995cfebbccc9", + "32c247d46291051243da8b", + "29ecceda91e2de99bded7a", + "697bd2294052d067eed5b", + "35d846be55b3952e278ab9", + "3846b043ea9479616ae948", + "460dae8d89d7708b43a1c7", + "6ecd91e762474ea500bb02", + "78386c3f2bea1d92b0136f", + "5d36dd2a4f038c91a8e525", + "2567685d25fd668a9a024e", + "484fed0412b66b4ad6689b", + "11e987960e92f0cfe9e7d", + "48457eaf5bfbcca641689", + "5e89ffa159d58051edf13c", + "ad8ecaa59795b2101aeb", + "4cd6b5c75a375bce549db5", + "17a8f2f3a036b54c467b7b", + "456d747923e7fcbd260fae", + "38b2a18fa105ae1a1e82c8", + "36b718d293f968b4388def", + "6d15e33dfd91b0adf65ea8", + "6a47915604a062b94c626c", + "63f2b709d7c6ba1ce60255", + "73da067d52334a718631ff", + "68c11de19f57751aa11e9b", + "1b50ac3c3f5269c1d7aa40", + "51f56cb5201bdd22f49e70", + "245ff16a71eb8c45257fd0", + "7dcfee63c4d594e4583601", + "604b2e853911ce83225aba", + "5bb6095d45a0253a5e3e2d", + "14b7709b903167ca33c0bd", + "6e6871265fe9883143d121", + "453649c203cf983e439d84", + "5819cdbf42afd2334f96", + "3450478bbaf1db9aae9e0e", + "35a56ed2078e145e9b5d42", + "15e468fec0387d9dcde2e9", + "1f098e306099d97f37bcee", + "108be849403d8b9e0adadd", + "432bf33542ea8f8c0e1cab", + "1fe772e91ad75a2d2792c4", + "2aaf602c5ad427702561f0", + "66c37766a09f2454161188", + "7c91adf751ba7b800072a4", + "587965194057ffad1ed72d", + "6b189bed3e1ee805a7089f", + "656e0aaff42e8f100df7e1", + "50d8060a4c81ac0d9dcc9a", + "3b142ae3f666b5a458fd6", + "11216382d02fa8a680f2c", + "640821dda0f544b159e25f", + "60ad8426c5228781a660d2", + "50b259ce6ef7786ad19380", + "617907260cf1e3612508c0", + "2020839307f0a0b2a66465", + "6c9aa8a230f91d4e6f84c2", + "479f0a9b95b8f0e630df10", + "74e8524ea4276a1585abc9", + "1832f7608c30377f8a27c1", + "468227ba06af62fa70d6b", + "46ae03b83630be869f3f67", + "1c429a8aad032b85e815c6", + "784a6ea72c75433fa2c1c0", + "521255c27009b10aeef14", + "6de250d6d96fba0a4a2df6", + "1a38abc6055dcfc6f54cd3", + "459fc4d70a1a8040309b48", + "5206d5cc4cf74b102b511e", + "1621052353e1bb38663f44", + "6869e474162fccd5e6ce8a", + "265a6fe3ade48b79bb704f", + "1683c065332572cac40e7f", + "40fe888eb50954f82f8f41", + "5ccb3321bf79805e3743ec", + "6904f88af6eea4b3f91bbf", + "a70e6c0e6da7b5bd943d0", + "7b7c35dbf0dd6b94d050c5", + "4ee9fe013ba8fc6ac8d470", + "1825a2f6c03df8e89a424f", + "6495ff035413be2b53c45f", + "745f8230228fe0e913a537", + "57ca180b4c6f8c3a63ae46", + "5963fe850d852bb19cdfe3", + "430a7ef273c75f6860a9e2", + "28c8b8ba9341ac37c38695", + "88d1f466f33239ebbee3e", + "7bfb517a9a7064f7f0b9cf", + "222ad5a5eecaf564928d05", + "31f4e6b45c1cedb6d4c94", + "9d0d5139d46e4d9db3662", + "46ea372cc256b25d8bedb8", + "1177a186084a0188e6b25c", + "79973f898e87ee6433e53e", + "17f90d7760ace90b4281fa", + "4d06acabc42f8f6c6561a2", + "297ac6d1d91b19c8ceb3ad", + "76930d75187c32e1c0855c", + "ef9f73cc5ae815a32ca63", + "3ca5432d73f30360d5e251", + "2eb29dd03203d9dedca2ed", + "3f719d970328ab86444133", + "671a35180c429ed6cd73d6", + "1a5a3601f9e5c757413d21", + "1207f0afa9b17ee1e3a14c", + "64c773513b07ac7be226c5", + "645491f7754448588100c4", + "6803ba4d96f3cea5b5b619", + "3e8f3fee79b0aa7d3158c9", + "7c4c5a07ab45db64032f8c", + "471e19dff79f0bf8dd75e4", + "736e4111350ab36a2be4ca", + "70eda2a92c3f3d551052fc", + "4be7ae42a1b71df0fdbed2", + "38e1136120c0a50e7c1942", + "34de10a25d48bbec6bc310", + "45fae251151688f6948ec3", + "a5803d95905530efe4cbc", + "29c81a2bbc75ee65e40fbe", + "5d0e736ad9b0e048c53cb9", + "62a6ac9d0c5e4b3890d61a", + "16587b1213183c74388d6a", + "30455197024dac28f22ad9", + "5c96c4bf9c30f05dfa52bf", + "2e14fbc2ca9b056ee6a0e6", + "544e247e73028cc23b1f51", + "7569e0846a7c92c5b07e91", + "2e37e64613e6e49f75ff6b", + "75393667821938c0e5a628", + "2db4889991fd96d5a3dbfa", + "6b628f924b031ff396258b", + "5c721c1e9f943f1e44c526", + "4845e19f6384ed5724d8ce", + "451cf4e4a6ce149cfc4095", + "69cf5ded5037b0fc848b28", + "2144bb26c3488be851e3b2", + "2582d22d55dfd72b2d70bf", + "67fe64c68be6372b30260", + "b5ea9188a76cbd4490c2c", + "2f9195fa1721a36e6f5198", + "371b6d93bf32954a1ed005", + "2d248bd8de364598100d1", + "3476974a3a56c244bcd4ac", + "7d10d41f081cc53194454d", + "9ae11d1f0b2cb73496a44", + "3c11b4ca34c3237b362a26", + "3b62b01334bf25d1f5d560", + "4a9dee0a96c91e7cd6d7ca", + "2d8ba9bb83d8b7dc77cc32", + "394242cd2ce4d5c927b1f7", + "13ef893fe161bb05038778", + "210aaed4cc7b55edc4255b", + "72bad07fa5d3ca19811efa", + "1856ece5542adaa42b18cf", + "2f775dce855cb22a4ce4b4", + "1b3d8a50e5425c7a4550f6", + "3fd38eb64df431878b817e", + "1f372d16a7c783f301d859", + "2e99bf2a9cfd14eb01e4dc", + "739d86f4db437bd59681d0", + "91782b2d8bf1ec8b6e4db", + "13089f86ddae7614e1f733", + "4374fb07e1eb1efc714a7f", + "34026c0467a5bb1302960d", + "1316737cef6e8d73f98c46", + "308b1811fe8c7d6801df6e", + "3b6333c6dc16d5f4351c47", + "30151eaad7aef0e79d5e07", + "6d5ce69503f658697314d0", + "13022f601d429947abd201", + "278331e342f211746f0d9f", + "44fd7c4168c2a61413dbd2", + "77747c8e4550378570ec0d", + "31934713e4ff1d0d7cc583", + "5ca455ab52339850752f94", + "cc47e7e925da6c91fe510", + "18932d3a50056ecbd4c0", + "594820c775fd57d86cf9af", + "4ad8d4214e4fe01b143d8", + "179c67b2886cbf8a80171f", + "60e1157dceceaecc3a16c9", + "507a197204651599300f85", + "1da6208947854d10119a62", + "2fd395d2076e94e7f79f79", + "3326fb026bfe153a5a80e5", + "214b26c5cc4d2d1d455254", + "2a5beeac5cc34b9b70fc5c", + "73037907fb5b7e20bf7973", + "622155e1a7c16eb9e6f098", + "47eef469d5e96dff3b60f7", + "31b42ccc858ccceae34d5", + "68c711e371efbf9b278db8", + "71e107fc4c98b40c6f7b53", + "2a2840d0a8db4a22fdfb53", + "557e56b5a5dcf30ae5f48", + "5451512089afcff74e1bd9", + "6a44a264bb1144d86619f3", + "72316f1be6172c06994a4d", + "d5835b5723a9063a2dd80", + "232ce65586f95692d89383", + "2a8c9eedadb6f6d58c06cf", + "f5eef843bd404a6869b17", + "720851fb976798365a6829", + "6e8b7f0e9607e44c1f9f65", + "3860366ed3637eead94b8d", + "30d33e090854573dfd98f5", + "682291bfd680e2cd8f9d70", + "7c1fdd60de643e750fa1d", + "774b9d1f08bb74ab682979", + "7b5f04e933b2e4204cdc65", + "2c36a4d87847724f9fdecf", + "2c941d4c1c7d68ef593ae6", + "4576a87293566d06f5b643", + "86148c3559c855d7a4785", + "2d0a5221661bafe1bae3a0", + "4eabe0db8ac5d733acae29", + "1dff7b3a25d6efec89d4f1", + "93ecdd9b52d588b62ae9d", + "4a5c54b88c3afab5d73bb4", + "50873f081856faa7b0c6c0", + "7a4c62248fb05a7ec5f894", + "6297ed8d827bde2f27c592", + "4f88d842683a24f7a78b4e", + "6543f2ea86c39aa319b565", + "1711e7c4ddf7dd725f454a", + "6e925cc1e63747fc8301d9", + "428c02c3c8bb1613aad2fd", + "1b12fc1c7d3ee5cd24b30d", + "38618fda51c023d44b41df", + "75ecb6eacac31eec1c8d24", + "363495385d4023abd7fffb", + "52a170878e73d2b9a73398", + "40afd831d872bbb5ba2dbe", + "6a2bde70b440f36a3a69b8", + "6cdde5dc50cfba13ab15cc", + "6102d4b92b578db1756028", + "1d72e71f6a57243468bc42", + "4f100cd2b63ef0cdac7165", + "56441a020eb196f9ab47f5", + "520d75e4874b90e95d0ac6", + "4ad5b5ec9142810d730c91", + "6369f366be6b5ec99ddddf", + "4ae3a5f46681ba13e649ed", + "33e094a7802d99ab1d9620", + "58ca4d190a0f756173e746", + "4afa034c14d96f077cc41e", + "3277a60ca85c986d50dee2", + "61df6c089b8a0a75da0288", + "3a9ec75af3c8e86b8c1b73", + "7ca8eb46f6df31902607b1", + "7a283d5e2ed98485e2d260", + "78ab001943d18ada1f6d03", + "56f539741375576aac816a", + "75fa74ccac539d6f2e079d", + "7108a03a28803eb91e8a0a", + "3756665d23e5dc56d35905", + "da96dc29f77c98efd9a65", + "54ec1fbecc620b2a62de33", + "2e564f6ba5f6f74e33f2dd", + "86aa65ac1949dd8af6918", + "605ccf0922a0c35f768933", + "4348b708829c7eddd56237", + "19d3eafc75447dbc2ce4d", + "764156f5d90616c8c45669", + "51e2ff830fcf99b4147ec", + "2d30342ea20393b89b038b", + "6745627963b760ee39ad1a", + "76c344db7c98c1b1fa25d1", + "5b872486f12a68a939069d", + "274cbe37d4fe65732936f", + "27b48290f4bc222f54681d", + "1f7e1880120c76703199fa", + "2bf0a5cc2a5150523d2e64", + "2d3b2e3d52eac5c09743f7", + "46b7638024bbab6f336734", + "71f7ff7f6245492bf4ba4d", + "6ac96f98fa78ffb692afd9", + "1c63d031374620336f8c7a", + "5eb0e751f365585e4f3fd3", + "24716274d6f1761a2e503e", + "3b663e3e9013cab9326fc5", + "231a1fa6a52f8377b2ca86", + "464063c0e0f5e5eae1bad1", + "4f588ef825e26e596e160c", + "4adc76f7cd88044421953e", + "228eebf60c055615805405", + "3d32a6b665f10a829cfff8", + "ce584760ca84047b25a4f", + "982362cb3f64fc2535f18", + "2cbb69d06f0ba3051ce433", + "2fb2d651d1a5fde2dc4d89", + "116822d6715118a8643140", + "52e4d0f780530e040b8198", + "4d84d472f48a1f27cda4fd", + "23675569b6f74cecec658", + "7273cb20026d3e5dfa9567", + "5e5c9c54f1f75bcc98d1bd", + "37150fd6c06a98e84f0fb9", + "1cae4d5a0b88eed0b2d97e", + "5e6c438c53b4bfbeab6a4c", + "7ec0ec060d3788349445a5", + "394ca6d6650a3a703c8f0", + "76a4bcdffe1207b9c84c3", + "413062fa329dcbe3b8887d", + "137786296b1e5f466871bf", + "1bff1788b61c434292f278", + "67ae16da8f876a2c8dc80f", + "4f0b0a9e8338cbca398b3f", + "7fe713df2e65b878c1edc6", + "46dbd89f4ae0d06c0ab8e0", + "3ad2c2000ee1db409ffcab", + "235057c5ef06d64b0093a1", + "2b1199cb9ff7848ec581", + "16a7968fcf87b51aa207b", + "7593ab2f13aa524b76e104", + "569b68c3d77231282d1705", + "54f01285acb2da9689a386", + "7c50148337071a44808f27", + "157e5726ec48e98ea5652c", + "a0b14921f2ca115669309", + "540974d1b3361c5ccd3a2", + "30927374f464c892c53b50", + "5c0de6f6c164f44c52de84", + "25f3d9fd234440b97c9821", + "659ccea55ad34dab51a321", + "308d7af9cf09073e61779f", + "48dd5aa0d80d3fd4d31225", + "18d28f7c13bdb1a27fc315", + "37c639bab06813135e6962", + "716be1338eb9fa3160de8a", + "306cc735643548c81d480", + "15dc7895737fd27e2fc2d8", + "ff910ecf2ce1ed443b3a7", + "26e45399ef9d09b479c0d5", + "5a3548ae1dc271964cafb9", + "1e0b5aa4ebf1898b7232a8", + "65b1a43ebc40ff17757bfe", + "35ab264ca762acbf67e1de", + "67fe63e894b36bad057249", + "901282766f87bc24e50af", + "3f8ccc4c495c412c1876e1", + "2c958c952c5c886c2a60ad", + "21a95826890e5cccb8a83e", + "190017f50befaddece16d2", + "64f3d838badcddd9bfdd0e", + "7a7cdf214176b6d3191883", + "30436781bd712f316b4895", + "f5d2bac49777fc8f10242", + "66de0cd9d504d0c8a10caa", + "11ff8e8d5e956398c99ca4", + "2d83b4eaa1c8f768e56c30", + "58689766e836a562c78c53", + "1644cc3e7fe80220ef2f70", + "69a00aca76ae6e660be7bb", + "68e1a6376fdb4eb7b4b0e6", + "5c37d517c640ac7f62a532", + "3aa36ece405e3ccd9341ca", + "345343979af3beadfaced5", + "63ca1ec0700483b8f859e5", + "14b8d711e9732dc1d81b85", + "5d1cdedac3c1f047923b22", + "1f88577ebb6a87d8478dfc", + "3cf63e3a65a7e509ca6dd4", + "64e35a2939773b306ebb74", + "4e5afb2e233daef8a9bbcb", + "5dce9f322e405cdd3dc195", + "49fee8b58237dc40ba3c5b", + "125c7d70d2b6d99ae885da", + "7f821b6d896942293448e9", + "44b0628f84b11c5e71888", + "4bc252b0fa653478344f1f", + "31afe414b9e841f105214d", + "46bc16d9041c2bda07b158", + "34ca1ca17d4004b63727d1", + "1adfa664cf45ca975af0f8", + "55b727631edd20582945d2", + "6649997ef28c919c6cae0f", + "6332e8b1655b1a7193eb45", + "7b8a17b08fccb33f4b7d6f", + "46c01f4170feea6c601e12", + "68d895a65569cf3ef3e3ea", + "782fa87576f745d6c5a644", + "3561d1a2752f1d17dd5823", + "1c1f24204ec4b044c10ff5", + "4ef1c6a1bd63bb6b6207b1", + "33fee942f43e9b7d2118f", + "1cbb8749de080f5bb23b75", + "4680ebb5e7e7fa1e676838", + "2cfe955ebd8c7e4615715c", + "93d0f45c8e78eed19b2b4", + "5411d9720f633bf7a356ea", + "7ae4ce9746d1a251afde2", + "6b6195f4939abc517ea1fa", + "622e4bcd237f601b3f864e", + "552dab94d8fab803e3abe6", + "5fea5590381b705c4ba54c", + "47a6912faf0eba695a3f82", + "62d4635d0bbd6bf8fab17b", + "488702c5b90021b8b24933", + "b44a774aaac3d4d335389", + "7c2eeaa3b5ac7ca26ee5f2", + "4a79a4d35e92cbac8fe0c0", + "145ecffc8b532b7855ca8a", + "409705e5654888d8af2f47", + "4f5cb9e29c3567f8c1b22b", + "2ad535a50fda15e1835526", + "4d55039bf17366425f055a", + "504e8f5ee0e51320af92dc", + "ae1614cb7437dc6311ee9", + "3d433adb4bcd914fcfc4", + "633dad9eec0d451652bf40", + "15bc81dd36a0393963bb64", + "720d9e52c4aea85ae24480", + "16f5569ecf073acc30831d", + "50a70d2086b5ca78a90368", + "7e688d1cbe7e0a84a0f408", + "1f9e8bffcac3e1471f7cd6", + "78ec94c22ee912eded5499", + "336a41277b427813eaa191", + "1705c133c7ba24a2b5c528", + "7b7e71610f1589da383c31", + "58137399c99866772aed9a", + "282774a1f4bcb14e6723f9", + "7b85e0b99eff408f2aa978", + "2a5043ae183d338b7ebd55", + "af99b9d024438cfe9df66", + "d4a270719a348af6d6c29", + "47262fa06b9c5ac8138f4f", + "50c65d8772a3d5db269535", + "20b1838f00aa00d07f70fc", + "ca30526530b6f6f0c8fca", + "158e9251ef94651015ecc3", + "636f015a0c62753b283d5e", + "4573a56ada0a29d31dd6b4", + "367efb55edcaadbb5e4f2b", + "3eb189e2bfcbe180703cfd", + "692adfabb87ce969422961", + "434a5edb31a9c3c6a0243e", + "77664e53908d00007d1205", + "4b11585991700c233f6773", + "207ff6a0da7f13b316c4b0", + "328a9932d6b08a41a1df0e", + "2f927b360b2b43bff822dc", + "257564a39a648e17d015e9", + "73e92ea015629e3728aee0", + "4585b77fea18a0113ff609", + "101d83882a81d0147b4342", + "3addce3c43218484acf509", + "9f0c9a93eecf4de349628", + "465f3b1e25cde0e446d90d", + "4ceae8c6ea35dc274647ed", + "63137369b8d47b6c9c43df", + "438f5c0f163a4dfa04e5ce", + "313d62eb5f1104de5421a", + "9f20b6fedc099ec575691", + "24086a392ab75e649d3cc1", + "7aa96a9fbe718c006a48f8", + "8000000000000000080000", + "57f0f7ecb2d7dad43748ee", + "2a640efe463008db4ed634", + "45769a307f5593bbf72056", + "3abbf8af06f889daf59c4d", + "6d16d10feb1728044f2dc3", + "5bf1d1c71be0c49ad75d9a", + "16bed27a9c005817ccf111", + "4d7797e0b2f77a7ffee785", + "3845bd22f959dda9197376", + "1857324131e535b1b2458f", + "6335fb7682400180e10d15", + "50226b4aa22a0465ceea0c", + "44dd70b9323f17568e4ba3", + "217bd444ac8e9808b3ae5a", + "6c9c81ea487986867245b8", + "3827b84269040363e5e02d", + "64520e4823f48c1f48749a", + "58fc1b58696f8c22cfe344", + "41558cae58d4f9a9001b87", + "38910d873da8dfd237e8f0", + "5eb76c6301d8a849a1903f", + "3b6b43619a3730d5995ae4", + "5f2bc99aad2f27cdee05f4", + "385f7f48a7be6b46d108ef", + "37d50d7838efaf03049cd7", + "665bc65420c0b0a151c97e", + "3d9abe3ec82d9602d9dd6b", + "634d2540fd670a82f219a5", + "616dbeafd6aa623c1a7d7e", + "29702fc1f57fddc3369967", + "25920b5c96127e9d8ab05e", + "3a82369bb1a4da519bbd70", + "7f216769148f0e997c7805", + "31d809b078cdefaaf45266", + "7a6ff