UNPKG

@makerdao/test-helpers

Version:

test helpers for the monorepo

1,240 lines (1,093 loc) 156 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('node-fetch'), require('assert')) : typeof define === 'function' && define.amd ? define(['exports', 'node-fetch', 'assert'], factory) : (global = global || self, factory(global['@makerdao/test-helpers'] = {}, global.fetch, global.assert)); }(this, (function (exports, fetch, assert) { 'use strict'; fetch = fetch && Object.prototype.hasOwnProperty.call(fetch, 'default') ? fetch['default'] : fetch; assert = assert && Object.prototype.hasOwnProperty.call(assert, 'default') ? assert['default'] : assert; var ganacheAddress = 'http://localhost:2000'; var requestCount = 0; function callGanache(method, params) { if (params === void 0) { params = []; } return fetch(ganacheAddress, { method: 'POST', headers: { Accept: 'application/json', 'Content-Type': 'application/json' }, body: JSON.stringify({ jsonrpc: '2.0', method: method, params: params, id: requestCount++ }) }); } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function createCommonjsModule(fn, module) { return module = { exports: {} }, fn(module, module.exports), module.exports; } var runtime_1 = /*#__PURE__*/createCommonjsModule(function (module) { /** * Copyright (c) 2014-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ var runtime = function (exports) { var Op = Object.prototype; var hasOwn = Op.hasOwnProperty; var undefined$1; // More compressible than void 0. var $Symbol = typeof Symbol === "function" ? Symbol : {}; var iteratorSymbol = $Symbol.iterator || "@@iterator"; var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function wrap(innerFn, outerFn, self, tryLocsList) { // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator. var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; var generator = Object.create(protoGenerator.prototype); var context = new Context(tryLocsList || []); // The ._invoke method unifies the implementations of the .next, // .throw, and .return methods. generator._invoke = makeInvokeMethod(innerFn, self, context); return generator; } exports.wrap = wrap; // Try/catch helper to minimize deoptimizations. Returns a completion // record like context.tryEntries[i].completion. This interface could // have been (and was previously) designed to take a closure to be // invoked without arguments, but in all the cases we care about we // already have an existing method we want to call, so there's no need // to create a new function object. We can even get away with assuming // the method takes exactly one argument, since that happens to be true // in every case, so we don't have to touch the arguments object. The // only additional allocation required is the completion record, which // has a stable shape and so hopefully should be cheap to allocate. function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } var GenStateSuspendedStart = "suspendedStart"; var GenStateSuspendedYield = "suspendedYield"; var GenStateExecuting = "executing"; var GenStateCompleted = "completed"; // Returning this object from the innerFn has the same effect as // breaking out of the dispatch switch statement. var ContinueSentinel = {}; // Dummy constructor functions that we use as the .constructor and // .constructor.prototype properties for functions that return Generator // objects. For full spec compliance, you may wish to configure your // minifier not to mangle the names of these two functions. function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} // This is a polyfill for %IteratorPrototype% for environments that // don't natively support it. var IteratorPrototype = {}; IteratorPrototype[iteratorSymbol] = function () { return this; }; var getProto = Object.getPrototypeOf; var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { // This environment has a native %IteratorPrototype%; use it instead // of the polyfill. IteratorPrototype = NativeIteratorPrototype; } var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; GeneratorFunctionPrototype.constructor = GeneratorFunction; GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = "GeneratorFunction"; // Helper for defining the .next, .throw, and .return methods of the // Iterator interface in terms of a single ._invoke method. function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { prototype[method] = function (arg) { return this._invoke(method, arg); }; }); } exports.isGeneratorFunction = function (genFun) { var ctor = typeof genFun === "function" && genFun.constructor; return ctor ? ctor === GeneratorFunction || // For the native GeneratorFunction constructor, the best we can // do is to check its .name property. (ctor.displayName || ctor.name) === "GeneratorFunction" : false; }; exports.mark = function (genFun) { if (Object.setPrototypeOf) { Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); } else { genFun.__proto__ = GeneratorFunctionPrototype; if (!(toStringTagSymbol in genFun)) { genFun[toStringTagSymbol] = "GeneratorFunction"; } } genFun.prototype = Object.create(Gp); return genFun; }; // Within the body of any async function, `await x` is transformed to // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test // `hasOwn.call(value, "__await")` to determine if the yielded value is // meant to be awaited. exports.awrap = function (arg) { return { __await: arg }; }; function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if (record.type === "throw") { reject(record.arg); } else { var result = record.arg; var value = result.value; if (value && typeof value === "object" && hasOwn.call(value, "__await")) { return PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }); } return PromiseImpl.resolve(value).then(function (unwrapped) { // When a yielded Promise is resolved, its final value becomes // the .value of the Promise<{value,done}> result for the // current iteration. result.value = unwrapped; resolve(result); }, function (error) { // If a rejected Promise was yielded, throw the rejection back // into the async generator function so it can be handled there. return invoke("throw", error, resolve, reject); }); } } var previousPromise; function enqueue(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = // If enqueue has been called before, then we want to wait until // all previous Promises have been resolved before calling invoke, // so that results are always delivered in the correct order. If // enqueue has not been called before, then it is important to // call invoke immediately, without waiting on a callback to fire, // so that the async generator function has the opportunity to do // any necessary setup in a predictable way. This predictability // is why the Promise constructor synchronously invokes its // executor callback, and why async functions synchronously // execute code before the first await. Since we implement simple // async functions in terms of async generators, it is especially // important to get this right, even though it requires care. previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, // Avoid propagating failures to Promises returned by later // invocations of the iterator. callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } // Define the unified helper method that is used to implement .next, // .throw, and .return (see defineIteratorMethods). this._invoke = enqueue; } defineIteratorMethods(AsyncIterator.prototype); AsyncIterator.prototype[asyncIteratorSymbol] = function () { return this; }; exports.AsyncIterator = AsyncIterator; // Note that simple async functions are implemented on top of // AsyncIterator objects; they just return a Promise for the value of // the final result produced by the iterator. exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { if (PromiseImpl === void 0) PromiseImpl = Promise; var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter // If outerFn is a generator, return the full iterator. : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }; function makeInvokeMethod(innerFn, self, context) { var state = GenStateSuspendedStart; return function invoke(method, arg) { if (state === GenStateExecuting) { throw new Error("Generator is already running"); } if (state === GenStateCompleted) { if (method === "throw") { throw arg; } // Be forgiving, per 25.3.3.3.3 of the spec: // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume return doneResult(); } context.method = method; context.arg = arg; while (true) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if (context.method === "next") { // Setting context._sent for legacy support of Babel's // function.sent implementation. context.sent = context._sent = context.arg; } else if (context.method === "throw") { if (state === GenStateSuspendedStart) { state = GenStateCompleted; throw context.arg; } context.dispatchException(context.arg); } else if (context.method === "return") { context.abrupt("return", context.arg); } state = GenStateExecuting; var record = tryCatch(innerFn, self, context); if (record.type === "normal") { // If an exception is thrown from innerFn, we leave state === // GenStateExecuting and loop back for another invocation. state = context.done ? GenStateCompleted : GenStateSuspendedYield; if (record.arg === ContinueSentinel) { continue; } return { value: record.arg, done: context.done }; } else if (record.type === "throw") { state = GenStateCompleted; // Dispatch the exception by looping back around to the // context.dispatchException(context.arg) call above. context.method = "throw"; context.arg = record.arg; } } }; } // Call delegate.iterator[context.method](context.arg) and handle the // result, either by returning a { value, done } result from the // delegate iterator, or by modifying context.method and context.arg, // setting context.delegate to null, and returning the ContinueSentinel. function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (method === undefined$1) { // A .throw or .return when the delegate iterator has no .throw // method always terminates the yield* loop. context.delegate = null; if (context.method === "throw") { // Note: ["return"] must be used for ES3 parsing compatibility. if (delegate.iterator["return"]) { // If the delegate iterator has a return method, give it a // chance to clean up. context.method = "return"; context.arg = undefined$1; maybeInvokeDelegate(delegate, context); if (context.method === "throw") { // If maybeInvokeDelegate(context) changed context.method from // "return" to "throw", let that override the TypeError below. return ContinueSentinel; } } context.method = "throw"; context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if (record.type === "throw") { context.method = "throw"; context.arg = record.arg; context.delegate = null; return ContinueSentinel; } var info = record.arg; if (!info) { context.method = "throw"; context.arg = new TypeError("iterator result is not an object"); context.delegate = null; return ContinueSentinel; } if (info.done) { // Assign the result of the finished delegate to the temporary // variable specified by delegate.resultName (see delegateYield). context[delegate.resultName] = info.value; // Resume execution at the desired location (see delegateYield). context.next = delegate.nextLoc; // If context.method was "throw" but the delegate handled the // exception, let the outer generator proceed normally. If // context.method was "next", forget context.arg since it has been // "consumed" by the delegate iterator. If context.method was // "return", allow the original .return call to continue in the // outer generator. if (context.method !== "return") { context.method = "next"; context.arg = undefined$1; } } else { // Re-yield the result returned by the delegate method. return info; } // The delegate iterator is finished, so forget it and continue with // the outer generator. context.delegate = null; return ContinueSentinel; } // Define Generator.prototype.{next,throw,return} in terms of the // unified ._invoke helper method. defineIteratorMethods(Gp); Gp[toStringTagSymbol] = "Generator"; // A Generator should always return itself as the iterator object when the // @@iterator function is called on it. Some browsers' implementations of the // iterator prototype chain incorrectly implement this, causing the Generator // object to not be returned from this call. This ensures that doesn't happen. // See https://github.com/facebook/regenerator/issues/274 for more details. Gp[iteratorSymbol] = function () { return this; }; Gp.toString = function () { return "[object Generator]"; }; function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; if (1 in locs) { entry.catchLoc = locs[1]; } if (2 in locs) { entry.finallyLoc = locs[2]; entry.afterLoc = locs[3]; } this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal"; delete record.arg; entry.completion = record; } function Context(tryLocsList) { // The root entry object (effectively a try statement without a catch // or a finally block) gives us a place to store values thrown from // locations where there is no enclosing try statement. this.tryEntries = [{ tryLoc: "root" }]; tryLocsList.forEach(pushTryEntry, this); this.reset(true); } exports.keys = function (object) { var keys = []; for (var key in object) { keys.push(key); } keys.reverse(); // Rather than returning an object with a next method, we keep // things simple and return the next function itself. return function next() { while (keys.length) { var key = keys.pop(); if (key in object) { next.value = key; next.done = false; return next; } } // To avoid creating an additional object, we just hang the .value // and .done properties off the next function object itself. This // also ensures that the minifier will not anonymize the function. next.done = true; return next; }; }; function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) { return iteratorMethod.call(iterable); } if (typeof iterable.next === "function") { return iterable; } if (!isNaN(iterable.length)) { var i = -1, next = function next() { while (++i < iterable.length) { if (hasOwn.call(iterable, i)) { next.value = iterable[i]; next.done = false; return next; } } next.value = undefined$1; next.done = true; return next; }; return next.next = next; } } // Return an iterator with no values. return { next: doneResult }; } exports.values = values; function doneResult() { return { value: undefined$1, done: true }; } Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { this.prev = 0; this.next = 0; // Resetting context._sent for legacy support of Babel's // function.sent implementation. this.sent = this._sent = undefined$1; this.done = false; this.delegate = null; this.method = "next"; this.arg = undefined$1; this.tryEntries.forEach(resetTryEntry); if (!skipTempReset) { for (var name in this) { // Not sure about the optimal order of these conditions: if (name.charAt(0) === "t" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) { this[name] = undefined$1; } } } }, stop: function stop() { this.done = true; var rootEntry = this.tryEntries[0]; var rootRecord = rootEntry.completion; if (rootRecord.type === "throw") { throw rootRecord.arg; } return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) { throw exception; } var context = this; function handle(loc, caught) { record.type = "throw"; record.arg = exception; context.next = loc; if (caught) { // If the dispatched exception was caught by a catch block, // then let that catch block handle the exception normally. context.method = "next"; context.arg = undefined$1; } return !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; var record = entry.completion; if (entry.tryLoc === "root") { // Exception thrown outside of any try block that could handle // it, so set the completion value of the entire function to // throw the exception. return handle("end"); } if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"); var hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true); } else if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc); } } else if (hasCatch) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true); } } else if (hasFinally) { if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc); } } else { throw new Error("try statement without catch or finally"); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } if (finallyEntry && (type === "break" || type === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) { // Ignore the finally entry if control is not jumping to a // location outside the try/catch block. finallyEntry = null; } var record = finallyEntry ? finallyEntry.completion : {}; record.type = type; record.arg = arg; if (finallyEntry) { this.method = "next"; this.next = finallyEntry.finallyLoc; return ContinueSentinel; } return this.complete(record); }, complete: function complete(record, afterLoc) { if (record.type === "throw") { throw record.arg; } if (record.type === "break" || record.type === "continue") { this.next = record.arg; } else if (record.type === "return") { this.rval = this.arg = record.arg; this.method = "return"; this.next = "end"; } else if (record.type === "normal" && afterLoc) { this.next = afterLoc; } return ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) { this.complete(entry.completion, entry.afterLoc); resetTryEntry(entry); return ContinueSentinel; } } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if (record.type === "throw") { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } // The context.catch method must only be called with a location // argument that corresponds to a known catch block. throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }; if (this.method === "next") { // Deliberately forget the last sent value so that we don't // accidentally pass it on to the delegate. this.arg = undefined$1; } return ContinueSentinel; } }; // Regardless of whether this script is executing as a CommonJS module // or not, return the runtime object so that we can declare the variable // regeneratorRuntime in the outer scope, which allows this module to be // injected easily by `bin/regenerator --include-runtime script.js`. return exports; }( // If this script is executing as a CommonJS module, use module.exports // as the regeneratorRuntime namespace. Otherwise create a new empty // object. Either way, the resulting object will be used to initialize // the regeneratorRuntime variable at the top of this file. module.exports ); try { regeneratorRuntime = runtime; } catch (accidentalStrictMode) { // This module should not be running in strict mode, so the above // assignment should always work unless something is misconfigured. Just // in case runtime.js accidentally runs in strict mode, we can escape // strict mode using a global Function call. This could conceivably fail // if a Content Security Policy forbids using Function, but in that case // the proper solution is to fix the accidental strict mode problem. If // you've misconfigured your bundler to force strict mode and applied a // CSP to forbid Function, and you're not willing to fix either of those // problems, please detail your unique predicament in a GitHub issue. Function("r", "regeneratorRuntime = r")(runtime); } }); var WAIT_AFTER_MINE_CALL = 250; function mineBlocks(_x, _x2) { return _mineBlocks.apply(this, arguments); } function _mineBlocks() { _mineBlocks = _asyncToGenerator( /*#__PURE__*/runtime_1.mark(function _callee(service, count) { var web3Service, serviceName, initialNumber, i, newNumber, expectedNumber; return runtime_1.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: serviceName = service.manager().name(); if (serviceName === 'web3') { web3Service = service; } else { if (serviceName !== 'token') service = service.get('token'); web3Service = service.get('web3'); } if (!count) count = web3Service.confirmedBlockCount() + 2; assert(WAIT_AFTER_MINE_CALL > web3Service._pollingInterval * 2, 'mineBlocks may not work well; pollingInterval is too long'); initialNumber = web3Service.blockNumber(); i = 0; case 6: if (!(i < count)) { _context.next = 14; break; } _context.next = 9; return callGanache('evm_mine'); case 9: _context.next = 11; return new Promise(function (resolve) { return setTimeout(resolve, WAIT_AFTER_MINE_CALL); }); case 11: i++; _context.next = 6; break; case 14: newNumber = web3Service.blockNumber(); expectedNumber = initialNumber + count; assert(newNumber >= expectedNumber, "blockNumber should be >= " + expectedNumber + ", is " + newNumber); case 17: case "end": return _context.stop(); } } }, _callee); })); return _mineBlocks.apply(this, arguments); } var addresses = [ "0x16fb96a5fa0427af0c8f7cf1eb4870231c8154b6", "0x81431b69b1e0e334d4161a13c2955e0f3599381e", "0xda1495ebd7573d8e7f860862baa3abecebfa02e0", "0xb76a5a26ba0041eca3edc28a992e4eb65a3b3d05", "0x5ecf66ecb148594c68c3d24e0b3540039d3e208e", "0x010cc8f37ab1f7fde9b61129f99359b6bb480c52", "0xa1a828e71fc501126ab0a0a92334a0d1bc859c18", "0x38eeb0da52f8d267bcf6143b277ad929d2caba1f", "0x75be2d1186d2806b61f1ac984475979eeed18702", "0xececc8efe05fcf7e7490db77a334f2880480b9e9", "0xa71f462b2a7fbba9daf31050c4a82b2084442038", "0x654e7b3327634c78bfb21c6010afa29a22d7a605", "0xf0117583019f74e7feef294091af7f137d529f10", "0x85efdf75b3fa42457e670b43e77dfa58a77799c7", "0xe09a8f2a8c440b8306b6683a2ff3956d90ac7f69", "0x4f75a02c8531e92a46064b8c125307856968f772", "0xe19e2ecc156d8e74768199fb1f3929f3785763f4", "0x6770135d477c0e7c1691523c0cc0534348f4f148", "0x500f1154c53a226af15a736ec2c02a7eaab834c1", "0x37ef41058babb7442cb9fb22d1418a3ff41eea0d", "0x42c48d42cf02faf3b432eea6021ef3e4be71ef5e", "0x7abcd26e4a0e6233c489a80f59f7e58a284b3ebb", "0x5f003c70a62097dda9abfa62c9f6ad9da360236c", "0x6f33cfa7c354ec62986091127a933d547b90cb57", "0xc7fc133837cc560dcb558c18d3dc383b877f082c", "0x12ac71be97b8c7082a9a16e2ed27ba08c8320888", "0x66822230a8568a2fa625f50146832fe94ed95cbb", "0x3c63613ee99cc8d2e109860a03531064e57307e6", "0x35911075785dec8a103c9fb0101193e2d18f28b5", "0x1f904e31768bb771e381c52c044bde3d8419adb2", "0x9cc496fa6339648a228ed1f51c8ede6c7909850f", "0xd7d133108798e9b43c9d2a55892500d02a9ac228", "0x2ca0e7853199c58cfaaa2318b19b7d68f3b3906e", "0x116464d38bdf751a45fcfaf5854585b562878f54", "0x34b9fb8ec27679e8b7bc6e7faab5356d7fe9ea05", "0xaa8f2fdc89811b0152e1d5026ef6248585e02404", "0x00533ccf07090a43e4ce11e00a2314cabd2d5e31", "0x380b9872b457a934a6b630baa5e5dd017a529d09", "0x3c55ec2d3e2373ce79a5c706bd9f9933f5ac3f7e", "0x85bf277782b941ae5f198753500f5732b923b666", "0x26ec003c72eba27749083d588cdf7eba665c0a1d", "0x54f4e468fb0297f55d8dfe57336d186009a1455a", "0x8ea2a073650872fc18f14f4f9025f44a3e8be6e2", "0x18c22d3937d774e0af0214b28c34856ad0a23272", "0xaf99f4e249522f7bb1d55f78ff9a2a606328d6ce", "0x832e01c87b2aa54cf9ead99b9c771ef06e5d294a", "0x3a28c1639815032a553b9b0f1077014477941a19", "0x3b8675688b23eaddcd25545695cdc9016db4d3df", "0x26907293e31095674006c7d498bc5a3aa21ad9be", "0xf8780ff7779a0c36fe011c3a9bb71d6eaa09524e", "0xdc6030c13150a657ca091b18bbab33815a128362", "0x1cadd547830669d034715c9080dd8718d82f5efa", "0x4e48bc76f9ca4ccf2594b1e506cba99535adbbd9", "0x4b66f1b2f7a5e0542639795a16163cb304eee415", "0x94ddd0cd953e53a3651da408d233165a99d07cb8", "0x67a402a45f341c7e69c970cf64bc1d1149ee6e38", "0xde773566f2446b73ea040364a2e30dd6b4227b4a", "0x152f09cb8aa535ba5bcf315e07a855ce8ceeccf4", "0x5b3286a33c346cbe0502bf5d7272a2d3258ce080", "0x58cae062ab7a054e1946537b725332530ce6ed97", "0x8ee5348c27131bbf85ad67c147fcd5fe03cef0f0", "0x04540b673b09592d8695b1dbee5e4ddf69787045", "0x5e03d0803fc93ff6ace383ae386c433e5299429d", "0x081e5410080d9703e25eba5e9d13ff195bfd4819", "0xf8764a2305b83d160a49caf977a9131115e81b81", "0x2a4a1613ec042aaeb66662fc9efa9b0695ade610", "0x92a0fdedb577ab39a4fb570f268664aaa089d38c", "0xce29116d3fe19b159471cf80a18c094b619a8fbf", "0x5cdb8e5bf7093c7a60f9906f3e5847c209fe7a24", "0x481e06841d996aa38f374cbe1eba4fd9822fe75d", "0xaf919be4746d873339e914a2e3fe2f0b99111dde", "0xec1ef50a1f537b6f1dce383fa088401c4936953c", "0xc4c7d927aed9226f621ae8aa4632b9c66bb95428", "0x05fe1efeb288ff6e0f6b9655913401352903b2b7", "0x51b443b9a7677b038483ab063edac89521418005", "0xfc052a91f08c2d9a45d61692a36abbd63ad680a0", "0x22bfe73f44754317734c7378fcdbf0e67ef92be3", "0xc7a2091e18f61d32d9e79b5d2ebd4f4173dba584", "0xebcb030b35b4c8624dadb762b75909e12a9279e3", "0xd084f2266cfeea34919570ad6642ea6e262c9025", "0xc873a50ae504ec9bb96bcfbeb961971348dcdd75", "0x654b16d89c11d9887fe330b0afc00e7df8a4d8a7", "0xae672ffb7983b9c66aeb87ef62373d510f5a19c8", "0x378079e3ccf36eb30bd3bd5d17ebee5cfbc6c23e", "0xa4d5982184368aed8b8988a028ae3382fb003c77", "0x5f5854c7ec60345e7a82a9632362250b03654199", "0xf7b144964fe229b8e19a8bd51ca1af0457c3db6c", "0x71d3fc5b80e46f39eaea6b02db6be9c7c1ad49fd", "0xc4e125912342c21c11722e2f1051b9bfcf9ea223", "0xa293f1155e903fc786fffcebf6442210c75036ee", "0x3b91e3062f312c5814daf4ed0410d3a7261e1a76", "0x1d728d88f22f3013a7f53356f0bc38cbc7a42a2b", "0x8f82940164399e7ca9946f2b730c33c882e88df5", "0x598409f8fe21a89d829bf501493ac929c1d2e482", "0xfc1c062c91bbe355249fdc508986355ee13ec5ba", "0x5f5fde3dc80ddd6ef040f5e29967b9f83fbecff2", "0x414a9e9ccfabb3e04b5521c5ebcf8f8fa3301ae8", "0x75ac1188e69c815844dd433c2b3ccad1f5a109ff", "0x280ceb01319c1f961b999f8596605e650939e449", "0xa4650e2aff9b799233f707e6791e202bf96859fd", "0x5fe804b41dc5e5a6cf43da7d0cef91bebb68921a", "0xe1ebba9cef330ecb832ac97ce646956c9c40efe5", "0x15bb13b952e01abcd34547417feea34135c18717", "0xd6e946f4f6d9404b2524ef7d4c95bdfd729d8561", "0x836435cff6edb7f0cbd81a6239d877423251559c", "0xbbed0eb32909ff80a59a1448a912bf285c49191d", "0x2cc31171b34534edaa6269bf5e872f0f7905ad86", "0x32f9bd589f8384de89e3b1830d54bea37e071601", "0x8f10a2b4e79c1e8cba1f46a2c1b1d3aa7a0357ef", "0xe0ee70a2826e549dfc346f4e8ce8f0517f78e240", "0x87afec669f5f0429e24a4f1714fa4db50b3df057", "0x06250d61025e2f894299de87acc538ee5a585eb9", "0xab107034c18194576c44f3762abc06d8e623781a", "0xf844f09763c2183a22d4d3b5fce3a7ed5fab11f1", "0x50885f2685071cb2182b06c0649765a1e0c198c4", "0x50ea08af4aab125fcf14704e5222e1964e1390ca", "0x4d92b29db7fbc182d8b33f6760b036d5293bac3f", "0x9e3b98254a092533599aa5577da510813ea13b86", "0xd8a93175093e97bc197f938ca5ef2e1c31f80062", "0xf79229f4e8c6e020e013113f12ea43537fa903dc", "0x05d495400d3227ed753b9651d4bb637ea8d94b6b", "0x3633124a9b5f6e121f3f91a429308d334337784b", "0x6cd447f0e1d7e114126606af858ffcde8cfdc69c", "0x8f591ceb8cdea5924268cc0feef8d26a63f16678", "0x915383f8c6c9541173da501b9491413038cfc81d", "0xe04c7b522d3b98aa42083fe65c25b63fff05b02f", "0x873af210298897c08c36b558f39e8fe4d4cc5421", "0x73f676b17ef80e86213f3f6ab36b66c1472a05ff", "0x2a8f2cdc7a088272b63b4db5081446efa14aea25", "0x30101ccc0d915f3b37e1f1106d9a8d1dc96894dc", "0x0cfd66c6596df9ffb3d1aea6b836ea7ad196423b", "0x900b3003272fca57622e5552e555bf58cd37b8b6", "0x6f70c5e1358d6c14266db52ee5971b37b8018c68", "0x25066926267934e322f858b5f4a58cddb049c2ae", "0xfd377645e2dd6df370bd9082b652db8456a4bf9c", "0xf80eb6d919b38f83f585e0ec06f72e837a06f5bf", "0x7d7c7090a05b8c4fe75c07cae0ac10afa06538cd", "0xcc717c490c7d0bde9981a85dc8cb95358719e9bb", "0x6b10e671915cea0c95c6d08888f6661f76394550", "0x950b2fa92ef0fc02383e7173146b864e0107ca0d", "0x1009ed26f7ad41092c4eca22563ab2a4d3b08701", "0x9c1469d6a99ccaef556583263aebb3a104a8f858", "0x2f8792249a546279e2c11126a1a0ea16b6eab713", "0x3ed91288dc47ae712fcdc040431be58fbe920444", "0xd6d766565f8a8b6330bab6eb814ed5face9cdd63", "0x0994ad232c1c70bc8ddc6ce65b2f19764efcc442", "0x98b5d865b256fa441ae4551bc79289cded7b90d9", "0xcda6be6086ed9f0b2265ce3e6b0acf5bd016ecb6", "0xa5e4ecef708c815d0f3377ac4ab86a13ada1c58a", "0xf9f0e0ffd045aacee873856fea6db44ae291d6bf", "0x18282d1e358db103d61fa5d8ad6a828da67c694a", "0xed565f5c599154f8f8c1972a275b5223436c61ab", "0xcf1d56e84c74726edd511d8f1600bbf2c94988dc", "0xc14ea7a96b054be2c89ddd880066e9b7aaf704b7", "0xa0b85e616f0e7997982d57b2d5984a994f657a8d", "0xb58152e9e1a1e573ad5943408a4276aa1ee31aeb", "0x968452a925df4c21f7f585796323a003bdc8c076", "0x99da655c32bfc47308c3512b492f059c63cae2c0", "0xa054bfc19d8ba3b8ab40b8b7a22c792942f7161c", "0xa4984a3d98b82e57478ca467ef47224023155564", "0xc76f024a24007467c852547a90642418c23c7019", "0x8d099c94222ca8938f5bdedabc65de815ca629a7", "0xc7385b5aa684b62f76561bd2be94074c5fc4337c", "0x9f967b04bf75f13b3309660762920760733a89db", "0x27da41a1e1e2e3de895e60bc86b1eb8de4002bff", "0x354f435cbcd80caa09233e1ebf3b54caaf3a75cc", "0xcb4462bda65253c479c57c5a332b3b0874a3794f", "0x23d9509db1624f3b3d997008946e7665be06360f", "0x1b695de3370009d0aad524ae698ab55b3d3eaaaf", "0x1377675692f65527c3f373592e0776c69cba7ee0", "0x3abb3f568596ab078c57e51661c00253384232d3", "0xc307f5d340c8e3d7cfcac26afada78f2044af04b", "0x70e6660de83f90906069374fc8cb7b3dc230893a", "0xc821c203be7c2e545d347cf0a3b8b858723dfa5a", "0x51afae49a118d24d84d9108ec60f8209fa3d0e55", "0x84da27ef03ef030de5394f5c8723f0cd2d5c37b5", "0x3061c1d1360d331bf6a6c1d8be12a90341ab4f2e", "0x4d18f0178cf3d4c7ec7743183853da6d7c7f0b01", "0x1c80e687a84cfdfd7cfba53fd55f526d8469f554", "0x139ace10c69733950b334d3faf5c77065c301a08", "0xbbb9ba108986671c5d22553f0f56f7491e618d9f", "0x2f90419b363accc5d8d90eeac237fa44405b3879", "0x3fa3cb820b5e9da9453131d03f3bd208a19f0783", "0xe7b80a8c86be4ff2bdd34c2cd855bbcb0a4889ce", "0x58a9dd29be91573e8de373fff4bfd088ef803d84", "0xf63b66c97f0103129ea062e304d4af4c9e571138", "0x133da08aedbdd15e0ac8e62005719f800f7f8a4a", "0x9a6dcdb4f4d2a4f7ca8b9268ce0ba1fe3d5e5d2f", "0xab35a65d1ac689dab33600a63b869d1c7bbc3904", "0xccad5a1e8a06dddf8ae7b04898d96bddf054089f", "0x5add26b8e5def44bb17ce18403b8312a4048a048", "0x9bf0079feffede56a327c6ab9e77902d136882f6", "0x4bc379d6dc4047f085d8b9f64de287bac8bdda3b", "0x9252e9ee75de935c847180f825fd7da392ada328", "0xdc511a88899fe835a3cbe9e5fb00f85a4664eba0", "0x01e3c413a73039f0de6a77ece1c7a549550bfa0e", "0x5ab863d639e94e5d4dd281ca479bc80bececc747", "0xaeaa731ff560ee565ed8f8822910d5683a596998", "0x33f89579311b31157516702a05a1785c4319f2ba", "0x78017bc7182a71441ca4d07de54cce3e4f9a1bfc", "0x597a0c1ba6ad1aaa53e7d5d9840153886af61da8", "0x83fad489408621f699e18388c7970e98571aad5d", "0x4eae6406f4c2ff3928e28f29e3effe294de25fe0", "0xfaab90ebe65039238e65c1398c81a0883fea13c5", "0x8b54ef89771b4f29be7bd0259236e9192caf953a", "0x085044b13ef4b85db864f1d685a05fcc114b4953", "0xad101553e984f6686680a13cdd4a822cb134a522", "0x47952e87daf90b3bac7be5967d87c81542e419ca", "0xe44f4b67b0be29104bc4ab1ed1298fd3fbe2cc1f", "0xe1e52596d3417292ec5b070ebf40c9ba61e61c94", "0xf7379cb506692f1e7330fbc8bdaf40220bcf1ca7", "0xffc77e9222fc6d0c46fc7d0b29becfa5a8b281a6", "0x3a0fced5235e5c13c65ab6ac1e0513f6b2477452", "0xd16ca8b10953d631d42ea8b9fba34815eec330c5", "0x6acdcb29ebda7cbf8e5124d6454150f0cd5d89ee", "0x5016dfc6104018d5d7a777fa494143b1c344d1ac", "0xa2228e7c9cf7ca23a0e597892900dab346321794", "0x7d5cc3ef03a4b4cb9ee50edca41d29f08a0daebb", "0x49c462356db609abf304086a1e41b9f041ff6c35", "0xe6224cd063d5fb2509daf529c1ac134e6748c69a", "0xea9da5bbb4f2e7561ba09133716e8b8f443a2788", "0x099e67dabbd4654da3be829e255dd9f1f9b130d2", "0x05a098174101231d6dc808c548226c8f75edd3d5", "0x19629135ed662f70d809dfcc80be38ac00220a3c", "0xb03af2308bd1e2755e0b4a5117655ccf2de32120", "0xad91535973b4bf9958297b3796c6ae6477414bc6", "0x1a58cf9599ce0ecd321088c573fc1cf29f275c4a", "0x91e2209123501266b944ec97ccfb82b1aee23e94", "0x32614fe2c1c94d38f11bb6aa7e5dc4cc9144b816", "0xea40a0914d3c36f91a2b49e3f4b514e1d7544b44", "0xcade353d73a9278fe0c5fc1b944c32c958170be1", "0xb0120c1dc80d68376f6d31e8394ed3a7bfa015b0", "0xca1f93edc67fc23dc4cb2372cd308a302223195b", "0x28c71deee8b0d41c2a4739926263c01e71d3f963", "0xf8305d58cd14e1c5ec2a713debbd538d3dba1f78", "0x0f92a395d4d79c7e813e143fe794fe30b4eb6468", "0x21d364ad99f53b6964938ac058d680b52a7cb070", "0x792ff35e0804c2ba1c0129683b215597ebd9017b", "0xf4cb0a2f505517a542cb62740720615329c10e21", "0x82d559d8fbd10a7f453236f5cc7c3a0202bdeb53", "0xec469be9ecb2afadb20f1e61a35085f65c6c0eca", "0xa4c521fd08c59f8f65a64c2782bf06d5e38418d6", "0x04f502a6b74c5cb926e89835dc0aef7ec808da74", "0x6416e3781450c7d9fa74ae31bb9649701d2a74a8", "0x7ae8f51a190a6e5971749649ca4fa5d151aa85a6", "0x6e47b10d0b790b23efd1df95c21c577c735db818", "0x2dbf0280f8df17261cbdedf0c370c9fac8b086a4", "0xddedae401fe94df24de15f73546ace28a8ae3782", "0x52a1c33fae3e10d975c5feb225f7aee9fd079d82", "0x47fa043cb1bd479310549da91d6689f4e897d69c", "0x33ea93b5dde98d0934a1fc7ab7906eab52933eab", "0xcb310b595ecc22f973e604eaae618091e38fd14c", "0xf42f8ede2a5380afec64f63fd9c815ea5b3d9f20", "0x3cf42c88a983ffca558524044a719dcabb85bcd0", "0xaa0d58aecccacf95c0379f18622e843b0585b907", "0xfff5204078b676b434ccb5910aa2a1d14073ea6d", "0x93ab2f73ddd46f3af346f6f96b7140b6f4495a34", "0x72ff7268c2b1a59edac82c1d424320d33fa89b3b", "0x328d2d17af0bb1cc9f3ba41ad526c8ddc708b54a", "0x70b08cc30e5e6cefa4954ff1aa870ec0f6a003a7", "0x1a2b14182c09bf54c0683bef04c3321309a94c18", "0x492366b29c9337909a44ca777086d53d97c6037b", "0xb87bf49c327240406dd1e0b385f161ac71cb5e50", "0x7fa5ed18e7c87d9b5adf5a9f049dfefb36caee59", "0x5b82c9189133a09e2c92cecac1a40f3b1c1713f8", "0x4f6ed589c782ef2eb58d6db4ed51fff8939ef4d8", "0xafd6c363f929baaab2cd7fd192491022b6ee6885", "0xa90694c21fe8a7a16700d10a5b66dd3055e3d14f", "0x3fbe5b872409967fd0263b6143d77eb03bdc7ec2", "0xcf06da814a822bf84c358f75694c86731bfabede", "0xdb038ffe8d8d1d0eeba6179ed548680d37620af6", "0x7c07cc32762ef1000fe756ed7f8030d7fe208ae7", "0x7c03a1feb1e93c8e2608bc3fec2c1ab3ca953a32", "0x8b40354a5c87f8680c54982334a48568b5fe02f0", "0x4cfd04bc2a54fc58ecbc64aacdffd74dec633d6e", "0xb14cb8aca129d705393f9186ac8618b239c29b25", "0xd4379a19a8dd5ebaabdf4ebf5d027f5326dc7007", "0xd7de4c97ae7f68dcd4ca1cdc333b437e378fcacf", "0x0a6bf7a63688700f48d9f203802742402828154c", "0xe4213591d487bd33ef60a716cb80d1d52c55253d", "0x3b8e83d3ab5ad8e39d285ffd65c6328608cc17c7", "0xa1e6a89febe9636d546da720acd062c5393346e9", "0xdd547f5991098462d88894c04804b8eff4aac296", "0x23f0be4cfd3254ee46b43e541d355531e04aac9c", "0x8fa1fd27d8a49634955e32941a2afdbad2bec584", "0x95ae926cb6986eb7269f63107d81a281cabf1aa4", "0x37afe7239acc6d8ba1171f18d830f60ca86042fb", "0x592ea3718524c34738a5d36af1bf6f90dc659684", "0x6e3e04cae22caca81e124a90fc6f37fd85144095", "0x50deb7dc03eec709ad71ca54bf97cdc36c1b4d1c", "0x31e7379b6c548fa81ad66deeb36f7a2f87951f95", "0xadbaf67048acd59b3c9ab859fe6b3a450b5a0016", "0x9bc5cf59b5d10b48e25c811f8766e8216d5ee96e", "0x664b0b820573c191bed94cceca04d5a27166fe24", "0x84cee05d766126b3a4ff24c0e1c77a1c2962d618", "0x97b6d6b597767f9eee54fd83fcc17bac283d7dde", "0xd8e64a5a06980d621f7e452467839cdcedc7b61b", "0xc09e0b10ec89760ab599cffa25bfba7c16533f13", "0xf307ee66b8703f4d630bba7270aa9ea9d630e119", "0xa15d393177c743de7e243fab1603b22a23b7e9ab", "0x0ed909145ddc6c8b4fbb2201f7668344d0cd6e1c", "0x7557fab6d6ae2a644ef424919b8ba694d186fd61", "0x9bc9e8b84596a1a949b100a87bf4d4dc59633e84", "0x2c7878e024c9890239f0717f91407851f09e542c", "0x63f7db9f68ac6f589b635c4e0cb1cacbf0bef7c8", "0x39e47355b41ca515452bc5aadec6e89a0cc71445", "0xd215916953c7047f226206585f1ddd7043d57aac", "0x5aa0c390d09af534418f2a57c837e21d4cfed6ec", "0x1d4664d17544bb4e9710ba4e679035da7dbb6042", "0xdac2f988236790f0bf38525bcca756cfba4ad559", "0x824dfb65f12e2c15179b26ca21b04bff5cafce2f", "0xc686c3acd7dd26afad29e35f23757caab95da331", "0x882630d2be8d3bc86f2c5cbcc863e7d327fe5ec1", "0x9ad72752b73042965a90137f376b8c704bd927f3", "0x193eb0ea579ca90de6bcad3d2025c904425ce8dd", "0x19e63a7e6a84a5994c513d97559757bea9134698", "0xdda6b12af814e1d11330ffe632e5114eec21306c", "0x3f7aa0fba810c891ea3d64f513e0ea2bc8d96628", "0x6de62b09a3bdf548f9ad47729a68a2c179429347", "0x0ccf4ac6ec3c1ee612978c1c10ca9482fe2eb010", "0x41e891f084c6985561ecbe1744be189656299c03", "0xeed97ee10ef26160e9693d538397740a338a63f0", "0xe51759dd0c7341fea157253a3e23433d8ffd13f1", "0x26ddb99aa98571ea18b377dfab6ddb95c99e45ad", "0x0a30852cc9dcd01071bc9c3210245a76b6deda5e", "0x6f3ba3743da773c7540594e41bd0488bfbb57bc7", "0xc47097be84d273a41e01e3f66c0badad120d545c", "0xd73c2081db1fe25c7a3e1f3539eabff20d25bb63", "0x84824f5348fd6be56681e9ae66c832a06a1b1b1b", "0x383082bc8b42648e7e918a0a12351c9f453b4894", "0x1a316f0ceb8261529663ec9850c63391fb61ab60", "0x3263b198f2fd41c0cca1928fc85b8bc6d4f8c89d", "0x11ceb73bab9fba3bbbb1a771aaa94333c278cbd7", "0xa48981fb9ba86b8141ea60b785a57e251826e0b4", "0x52ea429bb57d48806616b86efafdf31aa6653c25", "0x42963b3b56b7f90086a3965cfab1f208d597369c", "0x4c1fa8c1096157ed1869d218646c7eff28a78e10", "0x868cb9fc2b64f27a32e05c9e0c142c03a39e4bf3", "0xf5e40e1332a172d735493fde0097651cca22a274", "0xd38ef7d3b211b2b392ecb3a780fbb26c48fb3f5b", "0xd7041272ae962bed4c26260049c4a020b1b25cb0", "0xefdcde68e6232ccfaefd06a957102dedc3cd47ba", "0xf48f2834a9c65a8fbe1b7eddde41c5ee7c4ca502", "0x24ec220827c9abcd53ea9618c9d085fef7874c07", "0x8a9f8be6ea9decccccbb24cd57d68d9246760e1a", "0x3640c65da31b6e9e1b697259b967cf2bf75fed52", "0x325d109a130020dbda7bfaefdf26318e3adee7a5", "0xef9a97fbac3eb78170b4a2c19061aa044dded948", "0xc7ecd2d6ff53114084c1416c5c2b52224b1bf256", "0xa0eeb03a685d143e79c0712b75aacd83b6d020f6", "0x75f60046ba8e0912a769f1d6951e22bd51b1a0f0", "0x90299f2919532c012d43b61c16b4e8b137fe1042", "0x7592031f33e872fad156e6f28c8fb742abef8eb4", "0xcf1b0ba5e4846e859811ed4d4d1cf99b6b114aa6", "0x5091697d5bcfafb8e6407135dde9de1a4002f695", "0x33528c68622b6f450b9ff35d838d499f9be042c8", "0x810fb9b44edb5c23f9a3edc4b8fab01c599d5e16", "0x3e98a5b1ba51dbc7bb7b01ab1df2430b655ff1df", "0x7d1d4f9e80ddfcbb75fcea96ec3e420a5cc427d6", "0x6819501412ca7f89bc41091187287cc3da77242a", "0x18a6cb34df65c2f0d0e5e3b600e6a377c6432341", "0x277a058f9c9c94f8fcf686d157bb47ea2e53d22e", "0xc57fe98086a4f53b1af2ae9dc1bfa037b1e163ec", "0xbb218c4ee1f20858abe61c9eeaf644e179dc742b", "0xee7e92ff8869bf8d24382e02a4c94d1dd6150761", "0x1fa31e61c4a1b54d376db25a1e5fcca737ce9f1f", "0x12d9bfbb2b49bbee19981391b53291adf8fbc382", "0x35e0608707b3d4d585612f0dee77a097c293d39c", "0x712e2bbf9ecdd33b8cdf8640f8430a956a4f2ad0", "0x0d1ec44076675818f707bb1a98e264b866ba79f8", "0x153fe67ffb3bb23a576f37b52337784484498ff6", "0xb89459cd6bddc572e04fe11120650bb65582a0da", "0x8f772f8911611d729a271ed3e78df1fae786a384", "0x7bc307f3ce96f77ff700984f5c374b0d7f4616f3", "0xa22e5d1449e88d651b640d7fcb0022ae70597dde", "0xc0c316c8fc5ea90bfbfbe3a9fe0d999c6676a6b1", "0x39dacc79627e62c1600428edafb68a157d056477", "0x49cf9b735a42647fa0102535503f1610f9b65808", "0x6d456b874a424eb2749a150d1050bbb5f4ab19aa", "0xc375191f446522b260f0e527818a40460452dcff", "0x813024eb1e2b816a3fa992b8b156b3acadfc068d", "0x8bf0789cda2065bbb5f2ba43b837df2fa5c10ad7", "0x11f96791f7c7f8dadb150edece50917cb69d0926", "0x70284d3d1b45083e92115f01a2d3add51f83214a", "0xffdacbc61ed5baf7b77875ebd8826597ba795d1f", "0x15054e2d52f9b409263a21a8005a283c14be8fab", "0x27c0973dca0dd9245f3e1d0d2c3a5fad9fbf9c79", "0xea35debcbfbaf54120aa330fca69e68b62087680", "0xeb0d0fc4e3b86066b9039078967709dfe27bc3aa", "0xfd4cfaf22af3c83442a84cd80513f2438bc119ad", "0x06e2ced6db19de67dccf4c670fd947c5f69a2ccc", "0xcc11543c4610a13a48c1a2169b900bc3832b059e", "0xd994ce0b4d444cbbbc7596933396b8f0903d7d20", "0x6ea2bd2fbfd2262fb392022e4c783b7b998a28c2", "0x757611433983d1f88aac0f4a6d507de74078c694", "0xaa744e725e81f4c402c7dd2c186b2699486310d5", "0xf0c3c2112a94ae5d944b88eed67992c6297997c5", "0x3cac2a8e343ff7707718edfc39aaf749eb5b70c2", "0xae7dc1e2804ce4c6d3465086eb4dfef9